ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilStyleMigration.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
13{
14 // tag that are used by style types
15 public static $assigned_tags = array (
16 "text_block" => "div",
17 "text_inline" => "span",
18 "section" => "div",
19 "link" => "a",
20 "table" => "table",
21 "table_cell" => "td",
22 "media_cont" => "table",
23 "media_caption" => "div",
24 "sco_title" => "div",
25 "sco_keyw" => "div",
26 "sco_desc" => "div",
27 "sco_obj" => "div",
28 "list_o" => "ol",
29 "list_u" => "ul",
30 "list_item" => "li",
31 "flist_cont" => "div",
32 "flist_head" => "div",
33 "flist" => "ul",
34 "flist_li" => "li",
35 "question" => "div",
36 "qtitle" => "div",
37 "qanswer" => "div",
38 "qinput" => "input",
39 "qsubmit" => "input",
40 "qfeedr" => "div",
41 "qfeedw" => "div",
42 "page_frame" => "table",
43 "page_cont" => "table",
44 "page_fn" => "div",
45 "page_tnav" => "div",
46 "page_bnav" => "div",
47 "page_lnav" => "div",
48 "page_rnav" => "div",
49 "page_lnavlink" => "a",
50 "page_rnavlink" => "a",
51 "page_lnavimage" => "img",
52 "page_rnavimage" => "img",
53 "page_title" => "div"
54 );
55
56 // core styles these styles MUST exists
57 public static $core_styles = array(
58 array("type" => "text_block", "class" => "Standard"),
59 array("type" => "text_block", "class" => "List"),
60 array("type" => "text_block", "class" => "TableContent"),
61 array("type" => "text_block", "class" => "Headline1"),
62 array("type" => "text_block", "class" => "Headline2"),
63 array("type" => "text_block", "class" => "Headline3"),
64 array("type" => "text_inline", "class" => "Comment"),
65 array("type" => "text_inline", "class" => "Emph"),
66 array("type" => "text_inline", "class" => "Quotation"),
67 array("type" => "text_inline", "class" => "Strong"),
68 array("type" => "link", "class" => "IntLink"),
69 array("type" => "link", "class" => "ExtLink"),
70 array("type" => "link", "class" => "FootnoteLink"),
71 array("type" => "media_cont", "class" => "MediaContainer"),
72 array("type" => "table", "class" => "StandardTable"),
73 array("type" => "media_caption", "class" => "MediaCaption"),
74 array("type" => "page_frame", "class" => "PageFrame"),
75 array("type" => "page_cont", "class" => "PageContainer"),
76 array("type" => "page_tnav", "class" => "TopNavigation"),
77 array("type" => "page_bnav", "class" => "BottomNavigation"),
78 array("type" => "page_lnav", "class" => "LeftNavigation"),
79 array("type" => "page_rnav", "class" => "RightNavigation"),
80 array("type" => "page_lnavlink", "class" => "LeftNavigationLink"),
81 array("type" => "page_rnavlink", "class" => "RightNavigationLink"),
82 array("type" => "page_lnavimage", "class" => "LeftNavigationImage"),
83 array("type" => "page_rnavimage", "class" => "RightNavigationImage"),
84 array("type" => "page_fn", "class" => "Footnote"),
85 array("type" => "page_title", "class" => "PageTitle"),
86 array("type" => "sco_title", "class" => "Title"),
87 array("type" => "sco_desc", "class" => "Description"),
88 array("type" => "sco_keyw", "class" => "Keywords"),
89 array("type" => "sco_obj", "class" => "Objective"),
90 array("type" => "list_o", "class" => "NumberedList"),
91 array("type" => "list_u", "class" => "BulletedList"),
92 array("type" => "list_item", "class" => "StandardListItem"),
93 array("type" => "question", "class" => "Standard"),
94 array("type" => "question", "class" => "SingleChoice"),
95 array("type" => "question", "class" => "MultipleChoice"),
96 array("type" => "question", "class" => "TextQuestion"),
97 array("type" => "question", "class" => "OrderingQuestion"),
98 array("type" => "question", "class" => "MatchingQuestion"),
99 array("type" => "question", "class" => "ImagemapQuestion"),
100 array("type" => "question", "class" => "ClozeTest"),
101 array("type" => "qtitle", "class" => "Title"),
102 array("type" => "qanswer", "class" => "Answer"),
103 array("type" => "qinput", "class" => "Input"),
104 array("type" => "qsubmit", "class" => "Submit"),
105 array("type" => "qfeedr", "class" => "FeedbackRight"),
106 array("type" => "qfeedw", "class" => "FeedbackWrong"),
107 array("type" => "flist_cont", "class" => "FileListContainer"),
108 array("type" => "flist_head", "class" => "FileListHeading"),
109 array("type" => "flist", "class" => "FileList"),
110 array("type" => "flist_li", "class" => "FileListItem")
111 );
112
113 // basic style xml file, image directory and dom
114 protected static $basic_style_file = "./Services/Migration/DBUpdate_1385/basic_style/style.xml";
115 protected static $basic_style_image_dir = "./Services/Migration/DBUpdate_1385/basic_style/images";
116 protected static $basic_style_dom;
117
122 {
123 global $ilDB;
124
125 $add_str = "";
126 if ($a_id != "")
127 {
128 $add_str = " AND style_id = ".$ilDB->quote($a_id, "integer");
129 }
130
131 $set = $ilDB->query($q = "SELECT DISTINCT style_id, tag, class FROM style_parameter WHERE ".
132 $ilDB->equals("type", "", "text", true)." ".$add_str);
133
134 while ($rec = $ilDB->fetchAssoc($set))
135 {
136 // derive types from tag
137 $types = array();
138 switch ($rec["tag"])
139 {
140 case "div":
141 case "p":
142 if (in_array($rec["class"], array("Headline3", "Headline1",
143 "Headline2", "TableContent", "List", "Standard", "Remark",
144 "Additional", "Mnemonic", "Citation", "Example")))
145 {
146 $types[] = "text_block";
147 }
148 if (in_array($rec["class"], array("Block", "Remark",
149 "Additional", "Mnemonic", "Example", "Excursus", "Special")))
150 {
151 $types[] = "section";
152 }
153 if (in_array($rec["class"], array("Page", "Footnote", "PageTitle", "LMNavigation")))
154 {
155 $types[] = "page";
156 }
157 break;
158
159 case "td":
160 $types[] = "table_cell";
161 break;
162
163 case "a":
164 if (in_array($rec["class"], array("ExtLink", "IntLink", "FootnoteLink")))
165 {
166 $types[] = "link";
167 }
168 break;
169
170 case "span":
171 $types[] = "text_inline";
172 break;
173
174 case "table":
175 $types[] = "table";
176 break;
177
178 default:
179 $types[] = array();
180 break;
181 }
182
183 // check if style_char set exists
184 foreach ($types as $t)
185 {
186 // check if second type already exists
187 $set4 = $ilDB->queryF("SELECT * FROM style_char ".
188 " WHERE style_id = %s AND type = %s AND characteristic = %s",
189 array("integer", "text", "text"),
190 array($rec["style_id"], $t, $rec["class"]));
191 if ($rec4 = $ilDB->fetchAssoc($set4))
192 {
193 // ok
194 }
195 else
196 {
197//echo "<br>1-".$rec["style_id"]."-".$t."-".$rec["class"]."-";
198 $ilDB->manipulateF("INSERT INTO style_char ".
199 " (style_id, type, characteristic) VALUES ".
200 " (%s,%s,%s) ",
201 array("integer", "text", "text"),
202 array($rec["style_id"], $t, $rec["class"]));
203 }
204 }
205
206 // update types
207 if ($rec["type"] == "")
208 {
209 if (count($types) > 0)
210 {
211 $ilDB->manipulateF("UPDATE style_parameter SET type = %s ".
212 " WHERE style_id = %s AND class = %s AND ".$ilDB->equals("type", "", "text", true),
213 array("text", "integer", "text"),
214 array($types[0], $rec["style_id"], $rec["class"]));
215
216 // links extra handling
217 if ($types[0] == "link")
218 {
219 $ilDB->manipulateF("UPDATE style_parameter SET type = %s ".
220 " WHERE style_id = %s AND (class = %s OR class = %s) AND ".$ilDB->equals("type", "", "text", true),
221 array("text", "integer", "text", "text"),
222 array($types[0], $rec["style_id"], $rec["class"].":visited",
223 $rec["class"].":hover"));
224//echo "<br>4-".$types[0]."-".$rec["style_id"]."-".$rec["class"].":visited"."-".
225// $rec["class"].":hover";
226 }
227 }
228
229 if (count($types) == 2)
230 {
231 // select all records of first type and add second type
232 // records if necessary.
233 $set2 = $ilDB->queryF("SELECT * FROM style_parameter ".
234 " WHERE style_id = %s AND class = %s AND type = %s",
235 array("integer", "text", "text"),
236 array($rec["style_id"], $rec["class"], $types[0]));
237 while ($rec2 = $ilDB->fetchAssoc($set2))
238 {
239 // check if second type already exists
240 $set3 = $ilDB->queryF("SELECT * FROM style_parameter ".
241 " WHERE style_id = %s AND tag = %s AND class = %s AND type = %s AND parameter = %s",
242 array("integer", "text", "text", "text", "text"),
243 array($rec["style_id"], $rec["tag"], $rec["class"], $types[1], $rec["parameter"]));
244 if ($rec3 = $ilDB->fetchAssoc($set3))
245 {
246 // ok
247 }
248 else
249 {
250 $ilDB->manipulateF("INSERT INTO style_parameter ".
251 " (style_id, tag, class, parameter, value, type) VALUES ".
252 " (%s,%s,%s,%s,%s,%s) ",
253 array("integer", "text", "text", "text", "text", "text"),
254 array($rec2["style_id"], $rec2["tag"], $rec2["class"],
255 $rec2["parameter"], $rec2["value"], $types[1]));
256 }
257 }
258 }
259 }
260 }
261 }
262
266 static function _getCoreStyles()
267 {
268 $c_styles = array();
269 foreach (self::$core_styles as $cstyle)
270 {
271 $c_styles[$cstyle["type"].".".ilStyleMigration::_determineTag($cstyle["type"]).".".$cstyle["class"]]
272 = array("type" => $cstyle["type"],
273 "tag" => ilStyleMigration::_determineTag($cstyle["type"]),
274 "class" => $cstyle["class"]);
275 }
276 return $c_styles;
277 }
278
279 static function _determineTag($a_type)
280 {
281 return self::$assigned_tags[$a_type];
282 }
283
287 static function _getBasicStyleDom()
288 {
289 global $ilBench;
290
291 if (!is_object(self::$basic_style_dom))
292 {
293 self::$basic_style_dom = new DOMDocument();
294 self::$basic_style_dom->load(self::$basic_style_file);
295 }
296
298 }
299
304 static function _createImagesDirectory($a_style_id)
305 {
306 global $ilErr;
307
308 $sty_data_dir = CLIENT_WEB_DIR."/sty";
309 ilUtil::makeDir($sty_data_dir);
310 if(!is_writable($sty_data_dir))
311 {
312 $ilErr->raiseError("Style data directory (".$sty_data_dir
313 .") not writeable.", $ilErr->FATAL);
314 }
315
316 $style_dir = $sty_data_dir."/sty_".$a_style_id;
317 ilUtil::makeDir($style_dir);
318 if(!@is_dir($style_dir))
319 {
320 $ilErr->raiseError("Creation of style directory failed (".
321 $style_dir.").",$ilErr->FATAL);
322 }
323
324 // create images subdirectory
325 $im_dir = $style_dir."/images";
326 ilUtil::makeDir($im_dir);
327 if(!@is_dir($im_dir))
328 {
329 $ilErr->raiseError("Creation of Import Directory failed (".
330 $im_dir.").", $ilErr->FATAL);
331 }
332
333 // create thumbnails directory
334 $thumb_dir = $style_dir."/images/thumbnails";
335 ilUtil::makeDir($thumb_dir);
336 if(!@is_dir($thumb_dir))
337 {
338 $ilErr->raiseError("Creation of Import Directory failed (".
339 $thumb_dir.").", $ilErr->FATAL);
340 }
341 }
342
346 static function _getImagesDirectory($a_style_id)
347 {
348 return CLIENT_WEB_DIR."/sty/sty_".$a_style_id.
349 "/images";
350 }
351
356 {
357 global $ilDB;
358
361
362 // get all core image files
363 $core_images = array();
365 if (is_dir($core_dir))
366 {
367 $dir = opendir($core_dir);
368 while($file = readdir($dir))
369 {
370 if (substr($file, 0, 1) != "." && is_file($core_dir."/".$file))
371 {
372 $core_images[] = $file;
373 }
374 }
375 }
376
377 // check, whether core style class exists
378 $sets = $ilDB->query("SELECT * FROM object_data WHERE type = 'sty'");
379
380 while ($recs = $ilDB->fetchAssoc($sets))
381 {
382 $id = $recs["obj_id"];
383
384 foreach($core_styles as $cs)
385 {
386 // check, whether core style class exists
387 $set = $ilDB->queryF("SELECT * FROM style_char WHERE style_id = %s ".
388 "AND type = %s AND characteristic = %s",
389 array("integer", "text", "text"),
390 array($id, $cs["type"], $cs["class"]));
391
392 // if not, add core style class
393 if (!($rec = $ilDB->fetchAssoc($set)))
394 {
395 $ilDB->manipulateF("INSERT INTO style_char (style_id, type, characteristic) ".
396 " VALUES (%s,%s,%s) ",
397 array("integer", "text", "text"),
398 array($id, $cs["type"], $cs["class"]));
399
400 $xpath = new DOMXPath($bdom);
401 $par_nodes = $xpath->query("/StyleSheet/Style[@Tag = '".$cs["tag"]."' and @Type='".
402 $cs["type"]."' and @Class='".$cs["class"]."']/StyleParameter");
403 foreach ($par_nodes as $par_node)
404 {
405 // check whether style parameter exists
406 $set = $ilDB->queryF("SELECT * FROM style_parameter WHERE style_id = %s ".
407 "AND type = %s AND class = %s AND tag = %s AND parameter = %s",
408 array("integer", "text", "text", "text", "text"),
409 array($id, $cs["type"], $cs["class"],
410 $cs["tag"], $par_node->getAttribute("Name")));
411
412 // if not, create style parameter
413 if (!($rec = $ilDB->fetchAssoc($set)))
414 {
415 $ilDB->manipulateF("INSERT INTO style_parameter (style_id, type, class, tag, parameter, value) ".
416 " VALUES (%s,%s,%s,%s,%s,%s)",
417 array("integer", "text", "text", "text", "text", "text"),
418 array($id, $cs["type"], $cs["class"], $cs["tag"],
419 $par_node->getAttribute("Name"), $par_node->getAttribute("Value")));
420 }
421 }
422 }
423 }
424
425 // now check, whether some core image files are missing
428 reset($core_images);
429 foreach($core_images as $cim)
430 {
431 if (!is_file($imdir."/".$cim))
432 {
433 copy($core_dir."/".$cim, $imdir."/".$cim);
434 }
435 }
436 }
437 }
438
439}
440?>
print $file
Style Migration Class (->3.11)
static _getBasicStyleDom()
Get basic style dom.
static _createImagesDirectory($a_style_id)
Create images directory <data_dir>/sty/sty_<id>/images.
static _determineTag($a_type)
static _getCoreStyles()
Get core styles.
static _getImagesDirectory($a_style_id)
Get images directory.
addMissingStyleCharacteristics($a_id="")
Add missing style characteristics to styles.
static _addMissingStyleClassesToAllStyles()
Add missing style classes to all styles.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
global $ilBench
Definition: ilias.php:18
global $ilDB