ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilStyleDefinition.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 
13 require_once("./Services/Xml/classes/class.ilSaxParser.php");
15 {
20  static $current_skin;
21 
22 
28 
30 
31 
39  function ilStyleDefinition($a_template_id = "")
40  {
41  global $ilias;
42 
43  if ($a_template_id == "")
44  {
45  // use function to get the current skin
46  $a_template_id = self::getCurrentSkin();
47  }
48 
49  // remember the template id
50  $this->template_id = $a_template_id;
51 
52  if ($a_template_id == "default")
53  {
54  parent::ilSaxParser("./templates/".$a_template_id."/template.xml");
55  }
56  else
57  {
58  parent::ilSaxParser("./Customizing/global/skin/".$a_template_id."/template.xml");
59  }
60  }
61 
62 
63  // PUBLIC METHODS
64 
71  function getStyles()
72  {
73 //echo ":".count($this->styles).":";
74  if (is_array($this->styles))
75  {
76  return $this->styles;
77  }
78  else
79  {
80  return array();
81  }
82  }
83 
84  function getTemplateId()
85  {
86  return $this->template_id;
87  }
88 
89 
90  function getTemplateName()
91  {
92  return $this->template_name;
93  }
94 
95 
96  function getStyle($a_id)
97  {
98  return $this->styles[$a_id];
99  }
100 
101 
102  function getStyleName($a_id)
103  {
104  return $this->styles[$a_id]["name"];
105  }
106 
107 
108  function getImageDirectory($a_master_style, $a_substyle = "")
109  {
110  if ($a_substyle != $a_master_style && $a_substyle != "")
111  {
112  return $this->styles[$a_master_style]["substyle"][$a_substyle]["image_directory"];
113  }
114  return $this->styles[$a_master_style]["image_directory"];
115  }
116 
117  function getSoundDirectory($a_id)
118  {
119  return $this->styles[$a_id]["sound_directory"];
120  }
121 
122  public static function _getAllTemplates()
123  {
124  $skins = array();
125 
126  $skins[] = array("id" => "default");
127  if ($dp = @opendir("./Customizing/global/skin"))
128  {
129  while (($file = readdir($dp)) != false)
130  {
131  //is the file a directory?
132  if (is_dir("./Customizing/global/skin/".$file) && $file != "." && $file != ".." && $file != "CVS"
133  && $file != ".svn")
134  {
135  if (is_file("./Customizing/global/skin/".$file."/template.xml"))
136  {
137  $skins[] = array(
138  "id" => $file
139  );
140  }
141  }
142  } // while
143  }
144  else
145  {
146  return $skins;
147  }
148 
149  return $skins;
150 
151  }
152 
153  function getAllTemplates()
154  {
155  return self::_getAllTemplates();
156  }
157 
158 
159  // PRIVATE METHODS
160 
167  function setHandlers($a_xml_parser)
168  {
169  xml_set_object($a_xml_parser,$this);
170  xml_set_element_handler($a_xml_parser, 'handlerBeginTag', 'handlerEndTag');
171  xml_set_character_data_handler($a_xml_parser, 'handlerCharacterData');
172  }
173 
182  function handlerBeginTag($a_xml_parser, $a_name, $a_attribs)
183  {
184  if (!isset($a_attribs["sound_directory"]))
185  {
186  $a_attribs["sound_directory"] = "";
187  }
188 
189  if (!isset($a_attribs["browsers"]))
190  {
191  $a_attribs["browsers"] = "";
192  }
193 
194  switch($a_name)
195  {
196  case "template" :
197  $this->template_name = $a_attribs["name"];
198  break;
199 
200  case "style" :
201  $this->last_style_id = $a_attribs["id"];
202  $this->styles[$a_attribs["id"]] =
203  array( "id" => $a_attribs["id"],
204  "name" => $a_attribs["name"],
205  "css_file" => $a_attribs["id"].".css",
206  "image_directory" => $a_attribs["image_directory"],
207  "sound_directory" => $a_attribs["sound_directory"]
208  );
209  $browsers =
210  explode(",", $a_attribs["browsers"]);
211  foreach ($browsers as $val)
212  {
213  $this->styles[$a_attribs["id"]]["browsers"][] = trim($val);
214  }
215  break;
216 
217  case "substyle":
218  $this->styles[$this->last_style_id]["substyle"][$a_attribs["id"]] =
219  array( "id" => $a_attribs["id"],
220  "name" => $a_attribs["name"],
221  "css_file" => $a_attribs["id"].".css",
222  "image_directory" => $a_attribs["image_directory"],
223  "sound_directory" => $a_attribs["sound_directory"]
224  );
225  break;
226  }
227  }
228 
229 
238  static function styleExists($skin, $style)
239  {
240  if ($skin == "default")
241  {
242  if (is_file("./templates/".$skin."/template.xml") &&
243  is_file("./templates/".$skin."/".$style.".css")
244  )
245  {
246  return true;
247  }
248  }
249  else
250  {
251  if (is_file("./Customizing/global/skin/".$skin."/template.xml") &&
252  is_file("./Customizing/global/skin/".$skin."/".$style.".css")
253  )
254  {
255  return true;
256  }
257  }
258  return false;
259  }
260 
268  static function skinExists($skin)
269  {
270  if ($skin == "default")
271  {
272  if (is_file("./templates/".$skin."/template.xml"))
273  {
274  return true;
275  }
276  }
277  else
278  {
279  if (is_file("./Customizing/global/skin/".$skin."/template.xml"))
280  {
281  return true;
282  }
283  }
284  return false;
285  }
286 
294  function handlerCharacterData($a_xml_parser,$a_data)
295  {
296  // DELETE WHITESPACES AND NEWLINES OF CHARACTER DATA
297  $a_data = preg_replace("/\n/","",$a_data);
298  $a_data = preg_replace("/\t+/","",$a_data);
299 
300  if(!empty($a_data))
301  {
302  switch($this->current_tag)
303  {
304  default:
305  break;
306  }
307  }
308  }
309 
317  function handlerEndTag($a_xml_parser,$a_name)
318  {
319  }
320 
321 
330  public static function getCurrentSkin()
331  {
332  global $ilias;
333 
334  return isset(self::$current_skin) ? self::$current_skin :
335  $ilias->account->skin;
336  }
337 
346  public static function getCurrentStyle()
347  {
348  global $ilias, $tree, $styleDefinition, $tree;
349 
350  if (isset(self::$current_style))
351  {
352  return self::$current_style;
353  }
354 
355  $cs = $ilias->account->prefs['style'];
356 
357  if (is_object($styleDefinition))
358  {
359  // are there any substyles?
360  $styles = $styleDefinition->getStyles();
361  if (is_array($styles[$cs]["substyle"]))
362  {
363  // read assignments, if given
364  $assignmnts = self::getSystemStyleCategoryAssignments(self::getCurrentSkin(), $cs);
365  if (count($assignmnts) > 0)
366  {
367  $ref_ass = array();
368  foreach ($assignmnts as $a)
369  {
370  $ref_ass[$a["ref_id"]] = $a["substyle"];
371  }
372 
373  // check whether any ref id assigns a new style
374  if (is_object($tree) && $_GET["ref_id"] > 0 &&
375  $tree->isInTree($_GET["ref_id"]))
376  {
377  $path = $tree->getPathId((int) $_GET["ref_id"]);
378  for ($i = count($path) - 1; $i >= 0; $i--)
379  {
380  if (isset($ref_ass[$path[$i]]))
381  {
382  self::$current_style = $ref_ass[$path[$i]];
383  return self::$current_style;
384  }
385  }
386  }
387  }
388  }
389  }
390 
391  if ($_GET["ref_id"] != "")
392  {
393  self::$current_style = $cs;
394  }
395 
396  return $cs;
397  }
398 
407  public static function getCurrentMasterStyle()
408  {
409  global $ilias;
410 
411  if (isset(self::$current_master_style))
412  {
414  }
415 
416  $cs = $ilias->account->prefs['style'];
417 
418  self::$current_master_style = $cs;
419 
420  return $cs;
421  }
422 
423 
429  public static function setCurrentSkin($a_skin)
430  {
431  global $styleDefinition;
432 
433  if (is_object($styleDefinition)
434  and $styleDefinition->getTemplateId() != $a_skin)
435  {
436  $styleDefinition = new ilStyleDefinition($a_skin);
437  $styleDefinition->startParsing();
438  }
439 
440  self::$current_skin = $a_skin;
441  }
442 
443 
449  public static function setCurrentStyle($a_style)
450  {
451  self::$current_style = $a_style;
452  }
453 
460  public static function getAllSkinStyles()
461  {
462  global $styleDefinition;
463 
464  $all_styles = array();
465 
466  $templates = $styleDefinition->getAllTemplates();
467 
468  foreach ($templates as $template)
469  {
470  // get styles definition for template
471  $styleDef = new ilStyleDefinition($template["id"]);
472  $styleDef->startParsing();
473  $styles = $styleDef->getStyles();
474 
475  foreach ($styles as $style)
476  {
477  $num_users = ilObjUser::_getNumberOfUsersForStyle($template["id"], $style["id"]);
478 
479  // default selection list
480  $all_styles[$template["id"].":".$style["id"]] =
481  array (
482  "title" => $styleDef->getTemplateName()." / ".$style["name"],
483  "id" => $template["id"].":".$style["id"],
484  "template_id" => $template["id"],
485  "style_id" => $style["id"],
486  "template_name" => $styleDef->getTemplateName(),
487  "substyle" => $style["substyle"],
488  "style_name" => $style["name"],
489  "users" => $num_users
490  );
491  }
492  }
493 
494  return $all_styles;
495  }
496 
504  static function getSystemStyleCategoryAssignments($a_skin_id, $a_style_id)
505  {
506  global $ilDB;
507 
508  $assignmnts = array();
509  $set = $ilDB->query("SELECT substyle, category_ref_id FROM syst_style_cat ".
510  " WHERE skin_id = ".$ilDB->quote($a_skin_id, "text").
511  " AND style_id = ".$ilDB->quote($a_style_id, "text")
512  );
513  while ($rec = $ilDB->fetchAssoc($set))
514  {
515  $assignmnts[] = array("substyle" => $rec["substyle"],
516  "ref_id" => $rec["category_ref_id"]);
517  }
518  return $assignmnts;
519  }
520 
527  function writeSystemStyleCategoryAssignment($a_skin_id, $a_style_id,
528  $a_substyle, $a_ref_id)
529  {
530  global $ilDB;
531 
532  $ilDB->manipulate("INSERT INTO syst_style_cat ".
533  "(skin_id, style_id, substyle, category_ref_id) VALUES (".
534  $ilDB->quote($a_skin_id, "text").",".
535  $ilDB->quote($a_style_id, "text").",".
536  $ilDB->quote($a_substyle, "text").",".
537  $ilDB->quote($a_ref_id, "integer").
538  ")");
539  }
540 
547  function deleteSystemStyleCategoryAssignment($a_skin_id, $a_style_id,
548  $a_substyle, $a_ref_id)
549  {
550  global $ilDB;
551 
552  $ilDB->manipulate("DELETE FROM syst_style_cat WHERE ".
553  " skin_id = ".$ilDB->quote($a_skin_id, "text").
554  " AND style_id = ".$ilDB->quote($a_style_id, "text").
555  " AND substyle = ".$ilDB->quote($a_substyle, "text").
556  " AND category_ref_id = ".$ilDB->quote($a_ref_id, "integer"));
557  }
558 
559 }
560 ?>