ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilObjStyleSheet.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4
5require_once "./Services/Object/classes/class.ilObject.php";
6
16{
17 var $style;
18
19 public static $num_unit = array("px", "em", "ex", "%", "pt", "pc", "in", "mm", "cm");
20 public static $num_unit_no_perc = array("px", "em", "ex", "pt", "pc", "in", "mm", "cm");
21
22 // css parameters and their attribute values, input type and group
23 public static $parameter = array(
24 "font-size" => array(
25 "values" => array("xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "smaller", "larger"),
26 "input" => "fontsize",
27 "group" => "text"),
28 "font-family" => array(
29 "values" => array(),
30 "input" => "text",
31 "group" => "text"),
32 "font-style" => array(
33 "values" => array("italic", "oblique", "normal"),
34 "input" => "select",
35 "group" => "text"),
36 "font-weight" => array(
37 "values" => array("bold", "normal", "bolder", "lighter"),
38 "input" => "select",
39 "group" => "text"),
40 "font-variant" => array(
41 "values" => array("small-caps", "normal"),
42 "input" => "select",
43 "group" => "text"),
44 "word-spacing" => array(
45 "values" => array(),
46 "input" => "numeric_no_perc",
47 "group" => "text"),
48 "letter-spacing" => array(
49 "values" => array(),
50 "input" => "numeric_no_perc",
51 "group" => "text"),
52 "text-decoration" => array(
53 "values" => array("underline", "overline", "line-through", "blink", "none"),
54 "input" => "select",
55 "group" => "text"),
56 "text-transform" => array(
57 "values" => array("capitalize", "uppercase", "lowercase", "none"),
58 "input" => "select",
59 "group" => "text"),
60 "color" => array(
61 "values" => array(),
62 "input" => "color",
63 "group" => "text"),
64 "text-indent" => array(
65 "values" => array(),
66 "input" => "numeric",
67 "group" => "text"),
68 "line-height" => array(
69 "values" => array(),
70 "input" => "numeric",
71 "group" => "text"),
72 "vertical-align" => array(
73 "values" => array("top", "middle", "bottom", "baseline", "sub", "super",
74 "text-top", "text-bottom"),
75 "input" => "select",
76 "group" => "text"),
77 "text-align" => array(
78 "values" => array("left", "center", "right", "justify"),
79 "input" => "select",
80 "group" => "text"),
81 "white-space" => array(
82 "values" => array("normal", "pre", "nowrap"),
83 "input" => "select",
84 "group" => "text"),
85 "margin" => array(
86 "values" => array(),
87 "input" => "trbl_numeric",
88 "subpar" => array("margin", "margin-top", "margin-right",
89 "margin-bottom", "margin-left"),
90 "group" => "margin_and_padding"),
91 "padding" => array(
92 "values" => array(),
93 "input" => "trbl_numeric",
94 "subpar" => array("padding", "padding-top", "padding-right",
95 "padding-bottom", "padding-left"),
96 "group" => "margin_and_padding"),
97 "border-width" => array(
98 "values" => array("thin", "medium", "thick"),
99 "input" => "border_width",
100 "subpar" => array("border-width", "border-top-width", "border-right-width",
101 "border-bottom-width", "border-left-width"),
102 "group" => "border"),
103 "border-color" => array(
104 "values" => array(),
105 "input" => "trbl_color",
106 "subpar" => array("border-color", "border-top-color", "border-right-color",
107 "border-bottom-color", "border-left-color"),
108 "group" => "border"),
109 "border-style" => array(
110 "values" => array("none", "hidden", "dotted", "dashed", "solid", "double",
111 "groove", "ridge", "inset", "outset"),
112 "input" => "border_style",
113 "subpar" => array("border-style", "border-top-style", "border-right-style",
114 "border-bottom-style", "border-left-style"),
115 "group" => "border"),
116
117 "background-color" => array(
118 "values" => array(),
119 "input" => "color",
120 "group" => "background"),
121 "background-image" => array(
122 "values" => array(),
123 "input" => "background_image",
124 "group" => "background"),
125 "background-repeat" => array(
126 "values" => array("repeat", "repeat-x", "repeat-y", "no-repeat"),
127 "input" => "select",
128 "group" => "background"),
129 "background-attachment" => array(
130 "values" => array("fixed", "scroll"),
131 "input" => "select",
132 "group" => "background"),
133 "background-position" => array(
134 "values" => array("horizontal" => array("left", "center", "right"),
135 "vertical" => array("top", "center", "bottom")),
136 "input" => "background_position",
137 "group" => "background"),
138
139 "position" => array(
140 "values" => array("absolute", "fixed", "relative", "static"),
141 "input" => "select",
142 "group" => "positioning"),
143 "top" => array(
144 "values" => array(),
145 "input" => "numeric",
146 "group" => "positioning"),
147 "bottom" => array(
148 "values" => array(),
149 "input" => "numeric",
150 "group" => "positioning"),
151 "left" => array(
152 "values" => array(),
153 "input" => "numeric",
154 "group" => "positioning"),
155 "right" => array(
156 "values" => array(),
157 "input" => "numeric",
158 "group" => "positioning"),
159 "width" => array(
160 "values" => array(),
161 "input" => "numeric",
162 "group" => "positioning"),
163 "height" => array(
164 "values" => array(),
165 "input" => "numeric",
166 "group" => "positioning"),
167 "min-height" => array(
168 "values" => array(),
169 "input" => "numeric",
170 "group" => "positioning"),
171 "float" => array(
172 "values" => array("left", "right", "none"),
173 "input" => "select",
174 "group" => "positioning"),
175 "overflow" => array(
176 "values" => array("visible", "hidden", "scroll", "auto"),
177 "input" => "select",
178 "group" => "positioning"),
179 "opacity" => array(
180 "values" => array(),
181 "input" => "percentage",
182 "group" => "special"),
183 "transform" => array(
184 "values" => array("rotate(90deg)", "rotate(180deg)", "rotate(270deg)"),
185 "input" => "select",
186 "group" => "special"),
187 "transform-origin" => array(
188 "values" => array( "horizontal" => array("left", "center", "right"),
189 "vertical" => array("top", "center", "bottom")),
190 "input" => "background_position",
191 "group" => "special"),
192 "cursor" => array(
193 "values" => array("auto", "default", "crosshair", "pointer", "move",
194 "n-resize", "ne-resize", "e-resize", "se-resize", "s-resize", "sw-resize",
195 "w-resize", "nw-resize", "text", "wait", "help"),
196 "input" => "select",
197 "group" => "special"),
198 "clear" => array(
199 "values" => array ("both","left","right","none"),
200 "input" => "select",
201 "group" => "special"),
202
203 "list-style-type.ol" => array(
204 "values" => array ("decimal","lower-roman","upper-roman",
205 "lower-alpha", "upper-alpha", "lower-greek", "hebrew",
206 "decimal-leading-zero", "cjk-ideographic", "hiragana",
207 "katakana", "hiragana-iroha", "katakana-iroha", "none"),
208 "input" => "select",
209 "group" => "ol"),
210 "list-style-type.ul" => array(
211 "values" => array ("disc","circle","square",
212 "none"),
213 "input" => "select",
214 "group" => "ul"),
215 "list-style-image.ul" => array(
216 "values" => array(),
217 "input" => "background_image",
218 "group" => "ul"),
219 "list-style-position.ol" => array(
220 "values" => array ("inside","outside"),
221 "input" => "select",
222 "group" => "ol"),
223 "list-style-position.ul" => array(
224 "values" => array ("inside","outside"),
225 "input" => "select",
226 "group" => "ul"
227 ),
228 "border-collapse" => array(
229 "values" => array ("collapse","separate"),
230 "input" => "select",
231 "group" => "table"
232 ),
233 "caption-side" => array(
234 "values" => array ("top","bottom","left","right"),
235 "input" => "select",
236 "group" => "table"
237 )
238 );
239
240 // filter groups of properties that should only be
241 // displayed with matching tag (group -> tags)
242 public static $filtered_groups =
243 array("ol" => array("ol"), "ul" => array("ul"),
244 "table" => array("table"), "positioning" => array("h1", "h2", "h3", "div", "img", "table", "a"));
245
246 // style types and their super type
247 public static $style_super_types = array(
248 "text_block" => array("text_block", "heading1", "heading2", "heading3"),
249 "text_inline" => array("text_inline", "sub", "sup"),
250 "section" => array("section"),
251 "link" => array("link"),
252 "table" => array("table", "table_cell", "table_caption"),
253 "list" => array("list_o", "list_u", "list_item"),
254 "flist" => array("flist_cont", "flist_head", "flist", "flist_li", "flist_a"),
255 "media" => array("media_cont", "media_caption", "iim", "marker"),
256 "tabs" => array("va_cntr", "va_icntr", "va_ihead", "va_iheada", "va_ihcap", "va_icont",
257 "ha_cntr", "ha_icntr", "ha_ihead", "ha_iheada", "ha_ihcap", "ha_icont", "ca_cntr", "ca_icntr", "ca_ihead", "ca_icont"),
258 "question" => array("question", "qtitle", "qanswer", "qinput", "qlinput", "qsubmit", "qfeedr", "qfeedw",
259 "qimg", "qordul", "qordli", "qimgd", "qetitem", "qetcorr", "qover"),
260 "page" => array("page_frame", "page_cont", "page_title", "page_fn",
261 "page_tnav", "page_bnav", "page_lnav", "page_rnav", "page_lnavlink", "page_rnavlink",
262 "page_lnavimage", "page_rnavimage"),
263 "glo" => array("glo_overlay", "glo_ovtitle", "glo_ovclink", "glo_ovuglink", "glo_ovuglistlink"),
264 "sco" => array("sco_title", "sco_keyw", "sco_desc", "sco_desct", "sco_obj", "sco_objt", "sco_fmess"),
265 "rte" => array("rte_menu", "rte_mlink", "rte_tree", "rte_node", "rte_tlink","rte_status",
266 "rte_tul", "rte_tli", "rte_texp", "rte_tclink", "rte_drag")
267 );
268
269 // these types are expandable, i.e. the user can define new style classes
270 public static $expandable_types = array (
271 "text_block", "text_inline", "section", "media_cont", "table", "table_cell", "flist_li", "table_caption",
272 "list_o", "list_u",
273 "va_cntr", "va_icntr", "va_ihead", "va_iheada", "va_ihcap", "va_icont",
274 "ha_cntr", "ha_icntr", "ha_ihead", "ha_iheada", "ha_ihcap", "ha_icont",
275 "ca_cntr", "ca_icntr", "ca_ihead", "ca_icont"
276 );
277
278 // these types can be hidden in the content editor
279 public static $hideable_types = array (
280 "table", "table_cell"
281 );
282
283 // tag that are used by style types
284 public static $assigned_tags = array (
285 "text_block" => "div",
286 "heading1" => "h1",
287 "heading2" => "h2",
288 "heading3" => "h3",
289 "text_inline" => "span",
290 "sup" => "sup",
291 "sub" => "sub",
292 "section" => "div",
293 "link" => "a",
294 "table" => "table",
295 "table_cell" => "td",
296 "table_caption" => "caption",
297 "media_cont" => "figure",
298 "media_caption" => "div",
299 "iim" => "div",
300 "marker" => "a",
301 "glo_overlay" => "div",
302 "glo_ovtitle" => "h1",
303 "glo_ovclink" => "a",
304 "glo_ovuglink" => "a",
305 "glo_ovuglistlink" => "a",
306 "sco_title" => "div",
307 "sco_keyw" => "div",
308 "sco_desc" => "div",
309 "sco_obj" => "div",
310 "sco_desct" => "div",
311 "sco_objt" => "div",
312 "sco_fmess" => "div",
313 "rte_menu" => "div",
314 "rte_mlink" => "a",
315 "rte_tree" => "div",
316 "rte_tclink" => "a",
317 "rte_drag" => "div",
318 "rte_node" => "div",
319 "rte_status" => "div",
320 "rte_tlink" => "a",
321 "rte_tul" => "div",
322 "rte_tli" => "div",
323 "rte_texp" => "a",
324 "list_o" => "ol",
325 "list_u" => "ul",
326 "list_item" => "li",
327 "flist_cont" => "div",
328 "flist_head" => "div",
329 "flist" => "ul",
330 "flist_li" => "li",
331 "flist_a" => "a",
332 "question" => "div",
333 "qtitle" => "div",
334 "qanswer" => "div",
335 "qimg" => "img",
336 "qimgd" => "a",
337 "qordul" => "ul",
338 "qordli" => "li",
339 "qetitem" => "a",
340 "qetcorr" => "span",
341 "qinput" => "input",
342 "qlinput" => "textarea",
343 "qsubmit" => "input",
344 "qfeedr" => "div",
345 "qfeedw" => "div",
346 "qover" => "div",
347 "page_frame" => "div",
348 "page_cont" => "div",
349 "page_fn" => "div",
350 "page" => "div",
351 "page_tnav" => "div",
352 "page_bnav" => "div",
353 "page_lnav" => "div",
354 "page_rnav" => "div",
355 "page_lnavlink" => "a",
356 "page_rnavlink" => "a",
357 "page_lnavimage" => "img",
358 "page_rnavimage" => "img",
359 "page_title" => "h1",
360 "va_cntr" => "div",
361 "va_icntr" => "div",
362 "va_icont" => "div",
363 "va_ihead" => "div",
364 "va_iheada" => "div",
365 "va_ihcap" => "div",
366 "ha_cntr" => "div",
367 "ha_icntr" => "div",
368 "ha_icont" => "div",
369 "ha_iheada" => "div",
370 "ha_ihcap" => "div",
371 "ha_ihead" => "div",
372 "ca_cntr" => "div",
373 "ca_icntr" => "div",
374 "ca_ihead" => "div",
375 "ca_icont" => "div"
376 );
377
378 // pseudo classes
379 public static $pseudo_classes =
380 array ("a" => array("hover"), "div" => array("hover"), "img" => array("hover"));
381
382 // core styles these styles MUST exists -> see also basic_style/style.xml
383 public static $core_styles = array(
384 array("type" => "text_block", "class" => "Standard"),
385 array("type" => "text_block", "class" => "List"),
386 array("type" => "text_block", "class" => "TableContent"),
387 array("type" => "heading1", "class" => "Headline1"),
388 array("type" => "heading2", "class" => "Headline2"),
389 array("type" => "heading3", "class" => "Headline3"),
390 array("type" => "text_inline", "class" => "Comment"),
391 array("type" => "text_inline", "class" => "Emph"),
392 array("type" => "text_inline", "class" => "Quotation"),
393 array("type" => "text_inline", "class" => "Strong"),
394 array("type" => "text_inline", "class" => "Accent"),
395 array("type" => "text_inline", "class" => "Important"),
396 array("type" => "sup", "class" => "Sup"),
397 array("type" => "sub", "class" => "Sub"),
398 array("type" => "link", "class" => "IntLink"),
399 array("type" => "link", "class" => "ExtLink"),
400 array("type" => "link", "class" => "FootnoteLink"),
401 array("type" => "link", "class" => "FileLink"),
402 array("type" => "link", "class" => "GlossaryLink"),
403 array("type" => "media_cont", "class" => "MediaContainer"),
404 array("type" => "media_cont", "class" => "MediaContainerMax50"),
405 array("type" => "media_cont", "class" => "MediaContainerFull100"),
406 array("type" => "table", "class" => "StandardTable"),
407 array("type" => "media_caption", "class" => "MediaCaption"),
408 array("type" => "iim", "class" => "ContentPopup"),
409 array("type" => "marker", "class" => "Marker"),
410 array("type" => "page_frame", "class" => "PageFrame"),
411 array("type" => "page_cont", "class" => "PageContainer"),
412 array("type" => "page", "class" => "Page"),
413 array("type" => "page_tnav", "class" => "TopNavigation"),
414 array("type" => "page_bnav", "class" => "BottomNavigation"),
415 array("type" => "page_lnav", "class" => "LeftNavigation"),
416 array("type" => "page_rnav", "class" => "RightNavigation"),
417 array("type" => "page_lnavlink", "class" => "LeftNavigationLink"),
418 array("type" => "page_rnavlink", "class" => "RightNavigationLink"),
419 array("type" => "page_lnavimage", "class" => "LeftNavigationImage"),
420 array("type" => "page_rnavimage", "class" => "RightNavigationImage"),
421 array("type" => "page_fn", "class" => "Footnote"),
422 array("type" => "page_title", "class" => "PageTitle"),
423 array("type" => "glo_overlay", "class" => "GlossaryOverlay"),
424 array("type" => "glo_ovtitle", "class" => "GlossaryOvTitle"),
425 array("type" => "glo_ovclink", "class" => "GlossaryOvCloseLink"),
426 array("type" => "glo_ovuglink", "class" => "GlossaryOvUnitGloLink"),
427 array("type" => "glo_ovuglistlink", "class" => "GlossaryOvUGListLink"),
428 array("type" => "sco_title", "class" => "Title"),
429 array("type" => "sco_desc", "class" => "Description"),
430 array("type" => "sco_desct", "class" => "DescriptionTop"),
431 array("type" => "sco_keyw", "class" => "Keywords"),
432 array("type" => "sco_obj", "class" => "Objective"),
433 array("type" => "sco_objt", "class" => "ObjectiveTop"),
434 array("type" => "sco_fmess", "class" => "FinalMessage"),
435 array("type" => "rte_menu", "class" => "RTEMenu"),
436 array("type" => "rte_menu", "class" => "RTELogo"),
437 array("type" => "rte_menu", "class" => "RTELinkBar"),
438 array("type" => "rte_mlink", "class" => "RTELink"),
439 array("type" => "rte_mlink", "class" => "RTELinkDisabled"),
440 array("type" => "rte_tree", "class" => "RTETree"),
441 array("type" => "rte_node", "class" => "RTECourse"),
442 array("type" => "rte_node", "class" => "RTEChapter"),
443 array("type" => "rte_node", "class" => "RTESco"),
444 array("type" => "rte_node", "class" => "RTEAsset"),
445 array("type" => "rte_node", "class" => "RTECourseDisabled"),
446 array("type" => "rte_node", "class" => "RTEChapterDisabled"),
447 array("type" => "rte_node", "class" => "RTEScoDisabled"),
448 array("type" => "rte_node", "class" => "RTEAssetDisabled"),
449 array("type" => "rte_status", "class" => "RTEAsset"),
450 array("type" => "rte_status", "class" => "RTECompleted"),
451 array("type" => "rte_status", "class" => "RTENotAttempted"),
452 array("type" => "rte_status", "class" => "RTERunning"),
453 array("type" => "rte_status", "class" => "RTEIncomplete"),
454 array("type" => "rte_status", "class" => "RTEPassed"),
455 array("type" => "rte_status", "class" => "RTEFailed"),
456 array("type" => "rte_status", "class" => "RTEBrowsed"),
457 array("type" => "rte_tlink", "class" => "RTETreeLink"),
458 array("type" => "rte_tlink", "class" => "RTETreeLinkDisabled"),
459 array("type" => "rte_tlink", "class" => "RTETreeCurrent"),
460 array("type" => "rte_tul", "class" => "RTETreeList"),
461 array("type" => "rte_tli", "class" => "RTETreeItem"),
462 array("type" => "rte_texp", "class" => "RTETreeExpanded"),
463 array("type" => "rte_texp", "class" => "RTETreeCollapsed"),
464 array("type" => "rte_tree", "class" => "RTETreeControl"),
465 array("type" => "rte_tclink", "class" => "RTETreeControlLink"),
466 array("type" => "rte_drag", "class" => "RTEDragBar"),
467 array("type" => "list_o", "class" => "NumberedList"),
468 array("type" => "list_u", "class" => "BulletedList"),
469 array("type" => "list_item", "class" => "StandardListItem"),
470 array("type" => "question", "class" => "Standard"),
471 array("type" => "question", "class" => "SingleChoice"),
472 array("type" => "question", "class" => "MultipleChoice"),
473 array("type" => "question", "class" => "TextQuestion"),
474 array("type" => "question", "class" => "OrderingQuestion"),
475 array("type" => "question", "class" => "MatchingQuestion"),
476 array("type" => "question", "class" => "ImagemapQuestion"),
477 array("type" => "question", "class" => "ErrorText"),
478 array("type" => "question", "class" => "TextSubset"),
479 array("type" => "question", "class" => "ClozeTest"),
480 array("type" => "qtitle", "class" => "Title"),
481 array("type" => "qanswer", "class" => "Answer"),
482 array("type" => "qimg", "class" => "QuestionImage"),
483 array("type" => "qimgd", "class" => "ImageDetailsLink"),
484 array("type" => "qordul", "class" => "OrderList"),
485 array("type" => "qordli", "class" => "OrderListItem"),
486 array("type" => "qordul", "class" => "OrderListHorizontal"),
487 array("type" => "qordli", "class" => "OrderListItemHorizontal"),
488 array("type" => "qetitem", "class" => "ErrorTextItem"),
489 array("type" => "qetitem", "class" => "ErrorTextSelected"),
490 array("type" => "qetcorr", "class" => "ErrorTextCorrected"),
491 array("type" => "qinput", "class" => "TextInput"),
492 array("type" => "qlinput", "class" => "LongTextInput"),
493 array("type" => "qsubmit", "class" => "Submit"),
494 array("type" => "qfeedr", "class" => "FeedbackRight"),
495 array("type" => "qfeedw", "class" => "FeedbackWrong"),
496 array("type" => "qover", "class" => "Correct"),
497 array("type" => "qover", "class" => "Inorrect"),
498 array("type" => "qover", "class" => "StatusMessage"),
499 array("type" => "qover", "class" => "WrongAnswersMessage"),
500 array("type" => "flist_cont", "class" => "FileListContainer"),
501 array("type" => "flist_head", "class" => "FileListHeading"),
502 array("type" => "flist", "class" => "FileList"),
503 array("type" => "flist_li", "class" => "FileListItem"),
504 array("type" => "flist_a", "class" => "FileListItemLink")
505 );
506
507 public static $templates = array(
508 "table" => array(
509 "table" => "table",
510 "caption" => "table_caption",
511 "row_head" => "table_cell",
512 "row_foot" => "table_cell",
513 "col_head" => "table_cell",
514 "col_foot" => "table_cell",
515 "odd_row" => "table_cell",
516 "even_row" => "table_cell",
517 "odd_col" => "table_cell",
518 "even_col" => "table_cell"),
519 "vaccordion" => array(
520 "va_cntr" => "va_cntr",
521 "va_icntr" => "va_icntr",
522 "va_ihead" => "va_ihead",
523 "va_iheada" => "va_iheada",
524 "va_ihcap" => "va_ihcap",
525 "va_icont" => "va_icont"
526 ),
527 "haccordion" => array(
528 "ha_cntr" => "ha_cntr",
529 "ha_icntr" => "ha_icntr",
530 "ha_ihead" => "ha_ihead",
531 "ha_iheada" => "ha_iheada",
532 "ha_ihcap" => "ha_ihcap",
533 "ha_icont" => "ha_icont"
534 ),
535 "carousel" => array(
536 "ca_cntr" => "ca_cntr",
537 "ca_icntr" => "ca_icntr",
538 "ca_ihead" => "ca_ihead",
539 "ca_icont" => "ca_icont"
540 )
541 );
542
543 // basic style xml file, image directory and dom
544 protected static $basic_style_file = "./Services/Style/Content/basic_style/style.xml";
545 protected static $basic_style_image_dir = "./Services/Style/Content/basic_style/images";
546 protected static $basic_style_dom;
547
554 function __construct($a_id = 0, $a_call_by_reference = false)
555 {
556 $this->type = "sty";
557 $this->style = array();
558 if($a_call_by_reference)
559 {
560 $this->ilias->raiseError("Can't instantiate style object via reference id.",$this->ilias->error_obj->FATAL);
561 }
562
563 parent::__construct($a_id, false);
564 }
565
569 function setRefId($a_ref_id)
570 {
571 $this->ilias->raiseError("Operation ilObjStyleSheet::setRefId() not allowed.",$this->ilias->error_obj->FATAL);
572 }
573
577 function getRefId()
578 {
579 return "";
580 //$this->ilias->raiseError("Operation ilObjStyleSheet::getRefId() not allowed.",$this->ilias->error_obj->FATAL);
581 }
582
586 function putInTree($a_parent_ref)
587 {
588 $this->ilias->raiseError("Operation ilObjStyleSheet::putInTree() not allowed.",$this->ilias->error_obj->FATAL);
589 }
590
595 {
596 $this->ilias->raiseError("Operation ilObjStyleSheet::createReference() not allowed.",$this->ilias->error_obj->FATAL);
597 }
598
602 function setUpToDate($a_up_to_date = true)
603 {
604 $this->up_to_date = $a_up_to_date;
605 }
606
610 function getUpToDate()
611 {
612 return $this->up_to_date;
613 }
614
618 function setScope($a_scope)
619 {
620 $this->scope = $a_scope;
621 }
622
626 function getScope()
627 {
628 return $this->scope;
629 }
630
634 static function _writeUpToDate($a_id, $a_up_to_date)
635 {
636 global $ilDB;
637
638 $q = "UPDATE style_data SET uptodate = ".
639 $ilDB->quote((int) $a_up_to_date, "integer").
640 " WHERE id = ".$ilDB->quote($a_id, "integer");
641 $ilDB->manipulate($q);
642 }
643
647 static function _lookupUpToDate($a_id)
648 {
649 global $ilDB;
650
651 $q = "SELECT uptodate FROM style_data ".
652 " WHERE id = ".$ilDB->quote($a_id, "integer");
653 $res = $ilDB->query($q);
654 $sty = $ilDB->fetchAssoc($res);
655
656 return (boolean) $sty["uptodate"];
657 }
658
662 static function _writeStandard($a_id, $a_std)
663 {
664 global $ilDB;
665
666 $q = "UPDATE style_data SET standard = ".
667 $ilDB->quote((int) $a_std, "integer").
668 " WHERE id = ".$ilDB->quote($a_id, "integer");
669 $ilDB->manipulate($q);
670 }
671
675 static function _writeScope($a_id, $a_scope)
676 {
677 global $ilDB;
678
679 $q = "UPDATE style_data SET category = ".
680 $ilDB->quote((int) $a_scope, "integer").
681 " WHERE id = ".$ilDB->quote($a_id, "integer");
682 $ilDB->manipulate($q);
683 }
684
688 static function _lookupStandard($a_id)
689 {
690 global $ilDB;
691
692 $q = "SELECT * FROM style_data ".
693 " WHERE id = ".$ilDB->quote($a_id, "integer");
694 $res = $ilDB->query($q);
695 $sty = $ilDB->fetchAssoc($res);
696
697 return (boolean) $sty["standard"];
698 }
699
703 static function _writeActive($a_id, $a_active)
704 {
705 global $ilDB;
706
707 $q = "UPDATE style_data SET active = ".
708 $ilDB->quote((int) $a_active, "integer").
709 " WHERE id = ".$ilDB->quote($a_id, "integer");
710 $ilDB->manipulate($q);
711 }
712
716 static function _lookupActive($a_id)
717 {
718 global $ilDB;
719
720 $q = "SELECT * FROM style_data ".
721 " WHERE id = ".$ilDB->quote($a_id, "integer");
722 $res = $ilDB->query($q);
723 $sty = $ilDB->fetchAssoc($res);
724
725 return (boolean) $sty["active"];
726 }
727
731 static function _getStandardStyles($a_exclude_default_style = false,
732 $a_include_deactivated = false, $a_scope = 0)
733 {
734 global $ilDB, $ilias, $tree;
735
736 $default_style = $ilias->getSetting("default_content_style_id");
737
738 $and_str = "";
739 if (!$a_include_deactivated)
740 {
741 $and_str = " AND active = 1";
742 }
743
744 $q = "SELECT * FROM style_data ".
745 " WHERE standard = 1".$and_str;
746 $res = $ilDB->query($q);
747 $styles = array();
748 while($sty = $ilDB->fetchAssoc($res))
749 {
750 if (!$a_exclude_default_style || $default_style != $sty["id"])
751 {
752 // check scope
753 if ($a_scope > 0 && $sty["category"] > 0)
754 {
755 if ($tree->isInTree($sty["category"]) &&
756 $tree->isInTree($a_scope))
757 {
758 $path = $tree->getPathId($a_scope);
759 if (!in_array($sty["category"], $path))
760 {
761 continue;
762 }
763 }
764 }
765 $styles[$sty["id"]] = ilObject::_lookupTitle($sty["id"]);
766 }
767 }
768
769 return $styles;
770 }
771
772
778 {
779 global $ilAccess, $ilDB;
780
781 $clonable_styles = array();
782
783 $q = "SELECT * FROM style_data";
784 $style_set = $ilDB->query($q);
785 while($style_rec = $ilDB->fetchAssoc($style_set))
786 {
787 $clonable = false;
788 if ($style_rec["standard"] == 1)
789 {
790 if ($style_rec["active"] == 1)
791 {
792 $clonable = true;
793 }
794 }
795 else
796 {
797 include_once("./Modules/LearningModule/classes/class.ilObjContentObject.php");
798 $obj_ids = ilObjContentObject::_lookupContObjIdByStyleId($style_rec["id"]);
799 if (count($obj_ids) == 0)
800 {
801 $obj_ids = self::lookupObjectForStyle($style_rec["id"]);
802 }
803 foreach($obj_ids as $id)
804 {
806 foreach($ref as $ref_id)
807 {
808 if ($ilAccess->checkAccess("write", "", $ref_id))
809 {
810 $clonable = true;
811 }
812 }
813 }
814 }
815 if ($clonable)
816 {
817 $clonable_styles[$style_rec["id"]] =
818 ilObject::_lookupTitle($style_rec["id"]);
819 }
820 }
821
822 asort($clonable_styles);
823
824 return $clonable_styles;
825 }
826
830 function assignMetaData(&$a_meta_data)
831 {
832 $this->meta_data = $a_meta_data;
833 }
834
838 static function _getBasicStyleDom()
839 {
840 global $ilBench;
841
842 if (!is_object(self::$basic_style_dom))
843 {
844 self::$basic_style_dom = new DOMDocument();
845 self::$basic_style_dom->load(self::$basic_style_file);
846 }
847
849 }
850
854 function &getMetaData()
855 {
856 return $this->meta_data;
857 }
858
862 function create($a_from_style = 0, $a_import_mode = false)
863 {
864 global $ilDB;
865
866 parent::create();
867
868 if ($a_from_style == 0)
869 {
870 if (!$a_import_mode)
871 {
872 // copy styles from basic style
873 $this->createFromXMLFile(self::$basic_style_file, true);
874
875 // copy images from basic style
876 $this->createImagesDirectory();
877 ilUtil::rCopy(self::$basic_style_image_dir,
878 $this->getImagesDirectory());
879 }
880 else
881 {
882 // add style_data record
883 $q = "INSERT INTO style_data (id, uptodate, category) VALUES ".
884 "(".$ilDB->quote($this->getId(), "integer").", 0,".
885 $ilDB->quote((int) $this->getScope(), "integer").")";
886 $ilDB->manipulate($q);
888 }
889 }
890 else
891 {
892 // get style parameter records
893 $def = array();
894 $q = "SELECT * FROM style_parameter WHERE style_id = ".
895 $ilDB->quote($a_from_style, "integer");
896 $par_set = $ilDB->query($q);
897 while($par_rec = $ilDB->fetchAssoc($par_set))
898 {
899 $def[] = array("tag" => $par_rec["tag"], "class" => $par_rec["class"],
900 "parameter" => $par_rec["parameter"], "value" => $par_rec["value"],
901 "type" => $par_rec["type"], "mq_id" => $par_rec["mq_id"], "custom" => $par_rec["custom"]);
902 }
903
904 // get style characteristics records
905 $chars = array();
906 $q = "SELECT * FROM style_char WHERE style_id = ".
907 $ilDB->quote($a_from_style, "integer");
908 $par_set = $ilDB->query($q);
909 while($par_rec = $ilDB->fetchAssoc($par_set))
910 {
911 $chars[] = array("type" => $par_rec["type"], "characteristic" => $par_rec["characteristic"]);
912 }
913
914
915 // copy media queries
916 $from_style = new ilObjStyleSheet($a_from_style);
917 $mqs = $from_style->getMediaQueries();
918 $mq_mapping = array();
919 foreach ($mqs as $mq)
920 {
921 $nid = $this->addMediaQuery($mq["mquery"]);
922 $mq_mapping[$mq["id"]] = $nid;
923 }
924
925 // default style settings
926 foreach ($def as $sty)
927 {
928 $id = $ilDB->nextId("style_parameter");
929 $q = "INSERT INTO style_parameter (id, style_id, tag, class, parameter, value, type, mq_id, custom) VALUES ".
930 "(".
931 $ilDB->quote($id, "integer").",".
932 $ilDB->quote($this->getId(), "integer").",".
933 $ilDB->quote($sty["tag"], "text").",".
934 $ilDB->quote($sty["class"], "text").",".
935 $ilDB->quote($sty["parameter"], "text").",".
936 $ilDB->quote($sty["value"], "text").",".
937 $ilDB->quote($sty["type"], "text").",".
938 $ilDB->quote((int) $mq_mapping[$sty["mq_id"]], "integer").",".
939 $ilDB->quote($sty["custom"], "integer").
940 ")";
941 $ilDB->manipulate($q);
942 }
943
944 // insert style characteristics
945 foreach ($chars as $char)
946 {
947 $q = "INSERT INTO style_char (style_id, type, characteristic) VALUES ".
948 "(".$ilDB->quote($this->getId(), "integer").",".
949 $ilDB->quote($char["type"], "text").",".
950 $ilDB->quote($char["characteristic"], "text").")";
951 $ilDB->manipulate($q);
952 }
953
954 // add style_data record
955 $q = "INSERT INTO style_data (id, uptodate, category) VALUES ".
956 "(".$ilDB->quote($this->getId(), "integer").", 0,".
957 $ilDB->quote((int) $this->getScope(), "integer").")";
958 $ilDB->manipulate($q);
959
960 // copy images
961 $this->createImagesDirectory();
962 ilUtil::rCopy($from_style->getImagesDirectory(),
963 $this->getImagesDirectory());
964
965 // copy colors
966 $colors = $from_style->getColors();
967 foreach ($colors as $c)
968 {
969 $this->addColor($c["name"], $c["code"]);
970 }
971
972 // copy templates
974 foreach ($tcts as $tct => $v)
975 {
976 $templates = $from_style->getTemplates($tct);
977 foreach ($templates as $t)
978 {
979 $this->addTemplate($tct, $t["name"], $t["classes"]);
980 }
981 }
982
983 }
984
985 $this->read();
986 if (!$a_import_mode)
987 {
988 $this->writeCSSFile();
989 }
990 }
991
995 function deleteCharacteristic($a_type, $a_tag, $a_class)
996 {
997 global $ilDB;
998
999 // check, if characteristic is not a core style
1001 if (empty($core_styles[$a_type.".".$a_tag.".".$a_class]))
1002 {
1003 // delete characteristic record
1004 $st = $ilDB->manipulateF(
1005 "DELETE FROM style_char WHERE style_id = %s AND type = %s AND characteristic = %s",
1006 array("integer", "text", "text"),
1007 array($this->getId(), $a_type, $a_class));
1008
1009 // delete parameter records
1010 $st = $ilDB->manipulateF("DELETE FROM style_parameter WHERE style_id = %s AND tag = %s AND type = %s AND class = %s",
1011 array("integer", "text", "text", "text"),
1012 array($this->getId(), $a_tag, $a_type, $a_class));
1013 }
1014
1015 $this->setUpToDate(false);
1016 $this->_writeUpToDate($this->getId(), false);
1017 }
1018
1022 function characteristicExists($a_char, $a_style_type)
1023 {
1024 global $ilDB;
1025
1026 $set = $ilDB->queryF(
1027 "SELECT style_id FROM style_char WHERE style_id = %s AND characteristic = %s AND type = %s",
1028 array("integer", "text", "text"),
1029 array($this->getId(), $a_char, $a_style_type));
1030 if ($rec = $ilDB->fetchAssoc($set))
1031 {
1032 return true;
1033 }
1034 return false;
1035 }
1036
1040 function addCharacteristic($a_type, $a_char, $a_hidden = false)
1041 {
1042 global $ilDB;
1043
1044 // delete characteristic record
1045 $ilDB->manipulateF("INSERT INTO style_char (style_id, type, characteristic, hide)".
1046 " VALUES (%s,%s,%s,%s) ",
1047 array("integer", "text", "text", "integer"),
1048 array($this->getId(), $a_type, $a_char, $a_hidden));
1049
1050 $this->setUpToDate(false);
1051 $this->_writeUpToDate($this->getId(), false);
1052 }
1053
1060 function copyCharacteristic($a_from_style_id,
1061 $a_from_type, $a_from_char, $a_to_char)
1062 {
1063 global $ilDB;
1064
1065 if (!$this->characteristicExists($a_to_char, $a_from_type))
1066 {
1067 $this->addCharacteristic($a_from_type, $a_to_char);
1068 }
1069 $this->deleteStyleParOfChar($a_from_type, $a_to_char);
1070
1071 $from_style = new ilObjStyleSheet($a_from_style_id);
1072
1073 // todo fix using mq_id
1074 $pars = $from_style->getParametersOfClass($a_from_type, $a_from_char);
1075
1076 $colors = array();
1077 foreach ($pars as $p => $v)
1078 {
1079 if (substr($v, 0, 1) == "!")
1080 {
1081 $colors[] = substr($v, 1);
1082 }
1084 $a_to_char, $p, $v, $a_from_type);
1085 }
1086
1087 // copy colors
1088 foreach ($colors as $c)
1089 {
1090 if (!$this->colorExists($c))
1091 {
1092 $this->addColor($c, $from_style->getColorCodeForName($c));
1093 }
1094 }
1095 }
1096
1100 function getCharacteristics($a_type = "", $a_no_hidden = false, $a_include_core = true)
1101 {
1102 $chars = array();
1103
1104 if ($a_type == "")
1105 {
1106 $chars = $this->chars;
1107 }
1108 if (is_array($this->chars_by_type[$a_type]))
1109 {
1110 foreach ($this->chars_by_type[$a_type] as $c)
1111 {
1112 if ($a_include_core || !self::isCoreStyle($a_type, $c))
1113 {
1114 $chars[] = $c;
1115 }
1116 }
1117 }
1118
1119 if ($a_no_hidden)
1120 {
1121 foreach ($chars as $k => $char)
1122 {
1123 if ($a_type == "" && $this->hidden_chars[$char["type"].":".$char["class"]])
1124 {
1125 unset($chars[$k]);
1126 }
1127 else if ($this->hidden_chars[$a_type.":".$char])
1128 {
1129 unset($chars[$k]);
1130 }
1131 }
1132 }
1133
1134 return $chars;
1135 }
1136
1140 function setCharacteristics($a_chars)
1141 {
1142 $this->chars = $a_chars;
1143 // $this->chars_by_type[$a_type];
1144 }
1145
1149 function saveHideStatus($a_type, $a_char, $a_hide)
1150 {
1151 global $ilDB;
1152
1153 $ilDB->manipulate("UPDATE style_char SET ".
1154 " hide = ".$ilDB->quote((int) $a_hide, "integer").
1155 " WHERE style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
1156 " type = ".$ilDB->quote($a_type, "text")." AND ".
1157 " characteristic = ".$ilDB->quote($a_char, "text")
1158 );
1159 }
1160
1164 function getHideStatus($a_type, $a_char)
1165 {
1166 global $ilDB;
1167
1168 $set = $ilDB->query("SELECT hide FROM style_char ".
1169 " WHERE style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
1170 " type = ".$ilDB->quote($a_type, "text")." AND ".
1171 " characteristic = ".$ilDB->quote($a_char, "text")
1172 );
1173 $rec = $ilDB->fetchAssoc($set);
1174
1175 return $rec["hide"];
1176 }
1177
1184 function ilClone()
1185 {
1186 global $log, $lng;
1187
1188 $lng->loadLanguageModule("style");
1189
1190 $new_obj = new ilObjStyleSheet();
1191 $new_obj->setTitle($this->getTitle()." (".$lng->txt("sty_acopy").")");
1192 $new_obj->setType($this->getType());
1193 $new_obj->setDescription($this->getDescription());
1194 $new_obj->create($this->getId());
1195
1196 $new_obj->writeStyleSetting("disable_auto_margins",
1197 $this->lookupStyleSetting("disable_auto_margins"));
1198
1199 return $new_obj->getId();
1200 }
1201
1205 function copyImagesToDir($a_target)
1206 {
1207 ilUtil::rCopy($this->getImagesDirectory(), $a_target);
1208 }
1209
1219 function addParameter($a_tag, $a_par, $a_type, $a_mq_id = 0, $a_custom = false)
1220 {
1221 global $ilDB;
1222
1223 $avail_params = $this->getAvailableParameters();
1224 $tag = explode(".", $a_tag);
1225 $value = $avail_params[$a_par][0];
1226 $id = $ilDB->nextId("style_parameter");
1227 $q = "INSERT INTO style_parameter (id,style_id, type, tag, class, parameter, value, mq_id, custom) VALUES ".
1228 "(".
1229 $ilDB->quote($id, "integer").",".
1230 $ilDB->quote($this->getId(), "integer").",".
1231 $ilDB->quote($a_type, "text").",".
1232 $ilDB->quote($tag[0], "text").",".
1233 $ilDB->quote($tag[1], "text").",".
1234 $ilDB->quote($a_par, "text").",".
1235 $ilDB->quote($value, "text").",".
1236 $ilDB->quote($a_mq_id, "integer").",".
1237 $ilDB->quote($a_custom, "integer").
1238 ")";
1239 $ilDB->manipulate($q);
1240 $this->read();
1241 $this->writeCSSFile();
1242 }
1243
1249 {
1251 }
1252
1257 static function _createImagesDirectory($a_style_id)
1258 {
1259 global $ilErr;
1260
1261 $sty_data_dir = ilUtil::getWebspaceDir()."/sty";
1262 ilUtil::makeDir($sty_data_dir);
1263 if(!is_writable($sty_data_dir))
1264 {
1265 $ilErr->raiseError("Style data directory (".$sty_data_dir
1266 .") not writeable.", $ilErr->FATAL);
1267 }
1268
1269 $style_dir = $sty_data_dir."/sty_".$a_style_id;
1270 ilUtil::makeDir($style_dir);
1271 if(!@is_dir($style_dir))
1272 {
1273 $ilErr->raiseError("Creation of style directory failed (".
1274 $style_dir.").",$ilErr->FATAL);
1275 }
1276
1277 // create images subdirectory
1278 $im_dir = $style_dir."/images";
1279 ilUtil::makeDir($im_dir);
1280 if(!@is_dir($im_dir))
1281 {
1282 $ilErr->raiseError("Creation of Import Directory failed (".
1283 $im_dir.").", $ilErr->FATAL);
1284 }
1285
1286 // create thumbnails directory
1287 $thumb_dir = $style_dir."/images/thumbnails";
1288 ilUtil::makeDir($thumb_dir);
1289 if(!@is_dir($thumb_dir))
1290 {
1291 $ilErr->raiseError("Creation of Import Directory failed (".
1292 $thumb_dir.").", $ilErr->FATAL);
1293 }
1294 }
1295
1300 {
1302 }
1303
1307 static function _getImagesDirectory($a_style_id)
1308 {
1309 return ilUtil::getWebspaceDir()."/sty/sty_".$a_style_id.
1310 "/images";
1311 }
1312
1317 {
1318 return $this->getImagesDirectory().
1319 "/thumbnails";
1320 }
1321
1325 function getImages()
1326 {
1327 $dir = $this->getImagesDirectory();
1328 $images = array();
1329 if (is_dir($dir))
1330 {
1331 $entries = ilUtil::getDir($dir);
1332 foreach($entries as $entry)
1333 {
1334 if (substr($entry["entry"],0,1) == ".")
1335 {
1336 continue;
1337 }
1338 if ($entry["type"] != "dir")
1339 {
1340 $images[] = $entry;
1341 }
1342 }
1343 }
1344
1345 return $images;
1346 }
1347
1351 function uploadImage($a_file)
1352 {
1353 $this->createImagesDirectory();
1354 @ilUtil::moveUploadedFile($a_file["tmp_name"], $a_file["name"],
1355 $this->getImagesDirectory()."/".$a_file["name"]);
1356 @ilUtil::resizeImage($this->getImagesDirectory()."/".$a_file["name"],
1357 $this->getThumbnailsDirectory()."/".$a_file["name"], 75, 75);
1358 }
1359
1363 function deleteImage($a_file)
1364 {
1365 if (is_file($this->getImagesDirectory()."/".$a_file))
1366 {
1367 unlink($this->getImagesDirectory()."/".$a_file);
1368 }
1369 if (is_file($this->getThumbnailsDirectory()."/".$a_file))
1370 {
1371 unlink($this->getThumbnailsDirectory()."/".$a_file);
1372 }
1373 }
1374
1380 function deleteParameter($a_id)
1381 {
1382 global $ilDB;
1383
1384 $q = "DELETE FROM style_parameter WHERE id = ".
1385 $ilDB->quote($a_id, "integer");
1386 $ilDB->query($q);
1387 }
1388
1398 function deleteStylePar($a_tag, $a_class, $a_par, $a_type, $a_mq_id = 0, $a_custom = false)
1399 {
1400 global $ilDB;
1401
1402 $q = "DELETE FROM style_parameter WHERE ".
1403 " style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
1404 " tag = ".$ilDB->quote($a_tag, "text")." AND ".
1405 " class = ".$ilDB->quote($a_class, "text")." AND ".
1406 " mq_id = ".$ilDB->quote($a_mq_id, "integer")." AND ".
1407 " custom = ".$ilDB->quote($a_custom, "integer")." AND ".
1408 " ".$ilDB->equals("type", $a_type, "text", true)." AND ".
1409 " parameter = ".$ilDB->quote($a_par, "text");
1410
1411 $ilDB->manipulate($q);
1412 }
1413
1423 function deleteCustomStylePars($a_tag, $a_class, $a_type, $a_mq_id = 0)
1424 {
1425 global $ilDB;
1426
1427 $q = "DELETE FROM style_parameter WHERE ".
1428 " style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
1429 " tag = ".$ilDB->quote($a_tag, "text")." AND ".
1430 " class = ".$ilDB->quote($a_class, "text")." AND ".
1431 " mq_id = ".$ilDB->quote($a_mq_id, "integer")." AND ".
1432 " custom = ".$ilDB->quote(1, "integer")." AND ".
1433 " ".$ilDB->equals("type", $a_type, "text", true);
1434
1435 $ilDB->manipulate($q);
1436 }
1437
1446 function deleteStyleParOfChar($a_type, $a_class)
1447 {
1448 global $ilDB;
1449
1450 $q = "DELETE FROM style_parameter WHERE ".
1451 " style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
1452 " class = ".$ilDB->quote($a_class, "text")." AND ".
1453 " ".$ilDB->equals("type", $a_type, "text", true);
1454
1455 $ilDB->manipulate($q);
1456 }
1457
1458
1462 function delete()
1463 {
1464 global $ilDB;
1465
1466 // delete object
1467 parent::delete();
1468
1469 // check whether this style is global default
1470 $def_style = $this->ilias->getSetting("default_content_style_id");
1471 if ($def_style == $this->getId())
1472 {
1473 $this->ilias->deleteSetting("default_content_style_id");
1474 }
1475
1476 // check whether this style is global fixed
1477 $fixed_style = $this->ilias->getSetting("fixed_content_style_id");
1478 if ($fixed_style == $this->getId())
1479 {
1480 $this->ilias->deleteSetting("fixed_content_style_id");
1481 }
1482
1483 // delete style parameter
1484 $q = "DELETE FROM style_parameter WHERE style_id = ".
1485 $ilDB->quote($this->getId(), "integer");
1486 $ilDB->manipulate($q);
1487
1488 // delete style file
1489 $css_file_name = ilUtil::getWebspaceDir()."/css/style_".$this->getId().".css";
1490 if (is_file($css_file_name))
1491 {
1492 unlink($css_file_name);
1493 }
1494
1495 // delete media queries
1496 $ilDB->manipulate("DELETE FROM sty_media_query WHERE ".
1497 " style_id = ".$ilDB->quote($this->getId(), "integer")
1498 );
1499
1500 // delete entries in learning modules
1501 include_once("./Modules/LearningModule/classes/class.ilObjContentObject.php");
1503
1504 // delete style data record
1505 $q = "DELETE FROM style_data WHERE id = ".
1506 $ilDB->quote($this->getId(), "integer");
1507 $ilDB->manipulate($q);
1508
1509 }
1510
1511
1515 function read()
1516 {
1517 global $ilDB;
1518
1519 parent::read();
1520
1521 $q = "SELECT * FROM style_parameter WHERE style_id = ".
1522 $ilDB->quote($this->getId(), "integer")." ORDER BY tag, class, type, mq_id ";
1523 $style_set = $ilDB->query($q);
1524 $ctag = "";
1525 $cclass = "";
1526 $ctype = "";
1527 $cmq_id = 0;
1528 $this->style = array();
1529 // workaround for bug #17586, see also http://stackoverflow.com/questions/3066356/multiple-css-classes-properties-overlapping-based-on-the-order-defined
1530 // e.g. ha_iheada must be written after ha_ihead, since they are acting on the same dom node
1531 // styles that must be added at the end
1532 $this->end_styles = array();
1533 while($style_rec = $ilDB->fetchAssoc($style_set))
1534 {
1535 if ($style_rec["tag"] != $ctag || $style_rec["class"] != $cclass
1536 || $style_rec["type"] != $ctype || $style_rec["mq_id"] != $cmq_id)
1537 {
1538 // add current tag array to style array
1539 if(is_array($tag))
1540 {
1541 if (in_array($ctype, array("ha_iheada", "va_iheada")))
1542 {
1543 $this->end_styles[] = $tag;
1544 }
1545 else
1546 {
1547 $this->style[] = $tag;
1548 }
1549 }
1550 $tag = array();
1551 }
1552 $ctag = $style_rec["tag"];
1553 $cclass = $style_rec["class"];
1554 $ctype = $style_rec["type"];
1555 $cmq_id = $style_rec["mq_id"];
1556 $tag[] = $style_rec;
1557 // added $cmq_id
1558 $this->style_class[$ctype][$cclass][$cmq_id][$style_rec["parameter"]] = $style_rec["value"];
1559 }
1560 if(is_array($tag))
1561 {
1562 $this->style[] = $tag;
1563 }
1564 foreach ($this->end_styles as $s)
1565 {
1566 $this->style[] = $s;
1567 }
1568//var_dump($this->style_class);
1569 $q = "SELECT * FROM style_data WHERE id = ".
1570 $ilDB->quote($this->getId(), "integer");
1571 $res = $ilDB->query($q);
1572 $sty = $ilDB->fetchAssoc($res);
1573 $this->setUpToDate((boolean) $sty["uptodate"]);
1574 $this->setScope($sty["category"]);
1575
1576 // get style characteristics records
1577 $this->chars = array();
1578 $this->chars_by_type = array();
1579 $q = "SELECT * FROM style_char WHERE style_id = ".
1580 $ilDB->quote($this->getId(), "integer").
1581 " ORDER BY type ASC, characteristic ASC";
1582 $par_set = $ilDB->query($q);
1583 while($par_rec = $ilDB->fetchAssoc($par_set))
1584 {
1585 $this->chars[] = array("type" => $par_rec["type"], "class" => $par_rec["characteristic"], "hide" => $par_rec["hide"]);
1586 $this->chars_by_type[$par_rec["type"]][] = $par_rec["characteristic"];
1587 if ($par_rec["hide"])
1588 {
1589 $this->hidden_chars[$par_rec["type"].":".$par_rec["characteristic"]] = true;
1590 }
1591 }
1592// var_dump($this->style); exit;
1593 }
1594
1598 function writeCSSFile($a_target_file = "", $a_image_dir = "")
1599 {
1600 $style = $this->getStyle();
1601
1602 if ($a_target_file == "")
1603 {
1604 $css_file_name = ilUtil::getWebspaceDir()."/css/style_".$this->getId().".css";
1605 }
1606 else
1607 {
1608 $css_file_name = $a_target_file;
1609 }
1610 $css_file = fopen($css_file_name, "w");
1611
1612 $page_background = "";
1613
1614 $mqs = array(array("mquery" => "", "id" => 0));
1615 foreach ($this->getMediaQueries() as $mq)
1616 {
1617 $mqs[] = $mq;
1618 }
1619
1620 // iterate all media queries
1621 foreach ($mqs as $mq)
1622 {
1623 if ($mq["id"] > 0)
1624 {
1625 fwrite ($css_file, "@media ".$mq["mquery"]." {\n");
1626 }
1627 reset($style);
1628 foreach ($style as $tag)
1629 {
1630 if ($tag[0]["mq_id"] != $mq["id"])
1631 {
1632 continue;
1633 }
1634 fwrite ($css_file, $tag[0]["tag"].".ilc_".$tag[0]["type"]."_".$tag[0]["class"]."\n");
1635// echo "<br>";
1636// var_dump($tag[0]["type"]);
1637 if ($tag[0]["tag"] == "td")
1638 {
1639 fwrite ($css_file, ",th".".ilc_".$tag[0]["type"]."_".$tag[0]["class"]."\n");
1640 }
1641 if (in_array($tag[0]["tag"], array("h1", "h2", "h3")))
1642 {
1643 fwrite ($css_file, ",div.ilc_text_block_".$tag[0]["class"]."\n");
1644 fwrite ($css_file, ",body.ilc_text_block_".$tag[0]["class"]."\n");
1645 }
1646 if ($tag[0]["type"] == "section") // sections can use a tags, if links are used
1647 {
1648 fwrite ($css_file, ",a.ilc_".$tag[0]["type"]."_".$tag[0]["class"]."\n");
1649 }
1650 if ($tag[0]["type"] == "text_block")
1651 {
1652 fwrite ($css_file, ",body.ilc_text_block_".$tag[0]["class"]."\n");
1653 }
1654 fwrite ($css_file, "{\n");
1655
1656 // collect table border attributes
1657 $t_border = array();
1658
1659 foreach($tag as $par)
1660 {
1661 $cur_par = $par["parameter"];
1662 $cur_val = $par["value"];
1663
1664 // replace named colors
1665 if (is_int(strpos($cur_par, "color")) && substr(trim($cur_val), 0, 1) == "!")
1666 {
1667 $cur_val = $this->getColorCodeForName(substr($cur_val, 1));
1668 }
1669
1670 if ($tag[0]["type"] == "table" && is_int(strpos($par["parameter"], "border")))
1671 {
1672 $t_border[$cur_par] = $cur_val;
1673 }
1674
1675 if (in_array($cur_par, array("background-image", "list-style-image")))
1676 {
1677 if (is_int(strpos($cur_val, "/"))) // external
1678 {
1679 $cur_val = "url(".$cur_val.")";
1680 }
1681 else // internal
1682 {
1683 if ($a_image_dir == "")
1684 {
1685 $cur_val = "url(../sty/sty_".$this->getId()."/images/".$cur_val.")";
1686 }
1687 else
1688 {
1689 $cur_val = "url(".$a_image_dir."/".$cur_val.")";
1690 }
1691 }
1692 }
1693
1694 if ($cur_par == "opacity")
1695 {
1696 $cur_val = ((int) $cur_val) / 100;
1697 }
1698
1699 fwrite ($css_file, "\t".$cur_par.": ".$cur_val.";\n");
1700
1701 // IE6 fix for minimum height
1702 if ($cur_par == "min-height")
1703 {
1704 fwrite ($css_file, "\t"."height".": "."auto !important".";\n");
1705 fwrite ($css_file, "\t"."height".": ".$cur_val.";\n");
1706 }
1707
1708 // opacity fix
1709 if ($cur_par == "opacity")
1710 {
1711 fwrite ($css_file, "\t".'-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity='.($cur_val * 100).')"'.";\n");
1712 fwrite ($css_file, "\t".'filter: alpha(opacity='.($cur_val * 100).')'.";\n");
1713 fwrite ($css_file, "\t".'-moz-opacity: '.$cur_val.";\n");
1714 }
1715
1716 // transform fix
1717 if ($cur_par == "transform")
1718 {
1719 fwrite ($css_file, "\t".'-webkit-transform: '.$cur_val.";\n");
1720 fwrite ($css_file, "\t".'-moz-transform: '.$cur_val.";\n");
1721 fwrite ($css_file, "\t".'-ms-transform: '.$cur_val.";\n");
1722 }
1723
1724 // transform-origin fix
1725 if ($cur_par == "transform-origin")
1726 {
1727 fwrite ($css_file, "\t".'-webkit-transform-origin: '.$cur_val.";\n");
1728 fwrite ($css_file, "\t".'-moz-transform-origin: '.$cur_val.";\n");
1729 fwrite ($css_file, "\t".'-ms-transform-origin: '.$cur_val.";\n");
1730 }
1731
1732 // save page background
1733 if ($tag[0]["tag"] == "div" && $tag[0]["class"] == "Page"
1734 && $cur_par == "background-color")
1735 {
1736 $page_background = $cur_val;
1737 }
1738 }
1739 fwrite ($css_file, "}\n");
1740 fwrite ($css_file, "\n");
1741
1742 // use table border attributes for th td as well
1743 /* if ($tag[0]["type"] == "table")
1744 {
1745 if (count($t_border) > 0)
1746 {
1747 fwrite ($css_file, $tag[0]["tag"].".ilc_".$tag[0]["type"]."_".$tag[0]["class"]." th,".
1748 $tag[0]["tag"].".ilc_".$tag[0]["type"]."_".$tag[0]["class"]." td\n");
1749 fwrite ($css_file, "{\n");
1750 foreach ($t_border as $p => $v)
1751 {
1752 // fwrite ($css_file, "\t".$p.": ".$v.";\n");
1753 }
1754 fwrite ($css_file, "}\n");
1755 fwrite ($css_file, "\n");
1756 }
1757 }*/
1758 }
1759
1760 if ($page_background != "")
1761 {
1762 fwrite ($css_file, "td.ilc_Page\n");
1763 fwrite ($css_file, "{\n");
1764 fwrite ($css_file, "\t"."background-color: ".$page_background.";\n");
1765 fwrite ($css_file, "}\n");
1766 }
1767 if ($mq["id"] > 0)
1768 {
1769 fwrite ($css_file, "}\n");
1770 }
1771 }
1772 fclose($css_file);
1773// exit;
1774 $this->setUpToDate(true);
1775 $this->_writeUpToDate($this->getId(), true);
1776 }
1777
1784 static function getEffectiveContentStyleId($a_style_id, $a_type = "")
1785 {
1786 global $ilSetting;
1787
1788 // check global fixed content style
1789 $fixed_style = $ilSetting->get("fixed_content_style_id");
1790 if ($fixed_style > 0)
1791 {
1792 $a_style_id = $fixed_style;
1793 }
1794
1795 // check global default style
1796 if ($a_style_id <= 0)
1797 {
1798 $a_style_id = $ilSetting->get("default_content_style_id");
1799 }
1800
1801 if ($a_style_id > 0 && ilObject::_lookupType($a_style_id) == "sty")
1802 {
1803 return $a_style_id;
1804 }
1805
1806 return 0;
1807 }
1808
1815 function getParametersOfClass($a_type, $a_class, $a_mq_id = 0)
1816 {
1817 if (is_array($this->style_class[$a_type][$a_class][$a_mq_id]))
1818 {
1819 return $this->style_class[$a_type][$a_class][$a_mq_id];
1820 }
1821 return array();
1822 }
1823
1829 static function getContentStylePath($a_style_id)
1830 {
1831 global $ilias;
1832
1833 $rand = rand(1,999999);
1834
1835
1836 // check global fixed content style
1837 $fixed_style = $ilias->getSetting("fixed_content_style_id");
1838 if ($fixed_style > 0)
1839 {
1840 $a_style_id = $fixed_style;
1841 }
1842
1843 // check global default style
1844 if ($a_style_id <= 0)
1845 {
1846 $a_style_id = $ilias->getSetting("default_content_style_id");
1847 }
1848
1849 if ($a_style_id > 0 && ilObject::_exists($a_style_id))
1850 {
1851 // check whether file is up to date
1852 if (!ilObjStyleSheet::_lookupUpToDate($a_style_id))
1853 {
1854 $style = new ilObjStyleSheet($a_style_id);
1855 $style->writeCSSFile();
1856 }
1857
1858 $path = ilUtil::getWebspaceDir("output") . "/css/style_" . $a_style_id . ".css?dummy=$rand";
1859 require_once('./Services/WebAccessChecker/classes/class.ilWACSignedPath.php');
1861
1862 return $path;
1863 }
1864 else // todo: work this out
1865 {
1866 return "./Services/COPage/css/content.css";
1867 }
1868 }
1869
1875 static function getContentPrintStyle()
1876 {
1877 return "./Services/COPage/css/print_content.css";
1878 }
1879
1885 static function getSyntaxStylePath()
1886 {
1887 return "./Services/COPage/css/syntaxhighlight.css";
1888 }
1889
1895 static function getPlaceHolderStylePath()
1896 {
1897 return "./Services/COPage/css/placeholder.css";
1898 }
1899
1900 function update()
1901 {
1902 global $ilDB;
1903
1904 parent::update();
1905 $this->read(); // this could be done better
1906 $this->writeCSSFile();
1907
1908 $q = "UPDATE style_data ".
1909 "SET category = ".$ilDB->quote((int) $this->getScope(), "integer").
1910 " WHERE id = ".$ilDB->quote($this->getId(), "integer");
1911 $ilDB->manipulate($q);
1912 }
1913
1920 function updateStyleParameter($a_id, $a_value)
1921 {
1922 global $ilDB;
1923
1924 $q = "UPDATE style_parameter SET VALUE = ".
1925 $ilDB->quote($a_value, "text")." WHERE id = ".
1926 $ilDB->quote($a_id, "integer");
1927 $style_set = $ilDB->manipulate($q);
1928 }
1929
1934 // todo: search for usages, add mq_id
1935 function replaceStylePar($a_tag, $a_class, $a_par, $a_val, $a_type, $a_mq_id = 0, $a_custom = false)
1936 {
1937 ilObjStyleSheet::_replaceStylePar($this->getId(), $a_tag, $a_class, $a_par, $a_val, $a_type, $a_mq_id, $a_custom);
1938 }
1939
1940 static function _replaceStylePar($style_id, $a_tag, $a_class, $a_par, $a_val, $a_type, $a_mq_id = 0, $a_custom = false)
1941 {
1942 global $ilDB;
1943
1944 $q = "SELECT * FROM style_parameter WHERE ".
1945 " style_id = ".$ilDB->quote($style_id, "integer")." AND ".
1946 " tag = ".$ilDB->quote($a_tag, "text")." AND ".
1947 " class = ".$ilDB->quote($a_class, "text")." AND ".
1948 " mq_id = ".$ilDB->quote($a_mq_id, "integer")." AND ".
1949 " custom = ".$ilDB->quote($a_custom, "integer")." AND ".
1950 " ".$ilDB->equals("type", $a_type, "text", true)." AND ".
1951 " parameter = ".$ilDB->quote($a_par, "text");
1952
1953 $set = $ilDB->query($q);
1954
1955 if ($rec = $set->fetchRow())
1956 {
1957 $q = "UPDATE style_parameter SET ".
1958 " value = ".$ilDB->quote($a_val, "text")." WHERE ".
1959 " style_id = ".$ilDB->quote($style_id, "integer")." AND ".
1960 " tag = ".$ilDB->quote($a_tag, "text")." AND ".
1961 " class = ".$ilDB->quote($a_class, "text")." AND ".
1962 " mq_id = ".$ilDB->quote($a_mq_id, "integer")." AND ".
1963 " custom = ".$ilDB->quote($a_custom, "integer")." AND ".
1964 " ".$ilDB->equals("type", $a_type, "text", true)." AND ".
1965 " parameter = ".$ilDB->quote($a_par, "text");
1966
1967 $ilDB->manipulate($q);
1968 }
1969 else
1970 {
1971 $id = $ilDB->nextId("style_parameter");
1972 $q = "INSERT INTO style_parameter (id, value, style_id, tag, class, type, parameter, mq_id, custom) VALUES ".
1973 " (".
1974 $ilDB->quote($id, "integer").",".
1975 $ilDB->quote($a_val, "text").",".
1976 " ".$ilDB->quote($style_id, "integer").",".
1977 " ".$ilDB->quote($a_tag, "text").",".
1978 " ".$ilDB->quote($a_class, "text").",".
1979 " ".$ilDB->quote($a_type, "text").",".
1980 " ".$ilDB->quote($a_par, "text").",".
1981 " ".$ilDB->quote($a_mq_id, "integer").",".
1982 " ".$ilDB->quote($a_custom, "integer").
1983 ")";
1984
1985 $ilDB->manipulate($q);
1986 }
1987 }
1988
1989
1993 function getStyle()
1994 {
1995 return $this->style;
1996 }
1997
2001 function setStyle($a_style)
2002 {
2003 $this->style = $a_style;
2004 }
2005
2006
2013 function handleXmlString($a_str)
2014 {
2015 return str_replace("&", "&amp;", $a_str);
2016 }
2017
2022 function getXML()
2023 {
2024 $xml.= "<StyleSheet>\n";
2025
2026 // title and description
2027 $xml.= "<Title>".$this->handleXmlString($this->getTitle())."</Title>";
2028 $xml.= "<Description>".$this->handleXmlString($this->getDescription())."</Description>\n";
2029
2030 // style classes
2031 foreach($this->chars as $char)
2032 {
2033 $xml.= "<Style Tag=\"".ilObjStyleSheet::_determineTag($char["type"]).
2034 "\" Type=\"".$char["type"]."\" Class=\"".$char["class"]."\">\n";
2035 foreach($this->style as $style)
2036 {
2037 if ($style[0]["type"] == $char["type"] && $style[0]["class"] == $char["class"])
2038 {
2039 foreach($style as $tag)
2040 {
2041 $xml.="<StyleParameter Name=\"".$tag["parameter"]."\" Value=\"".$tag["value"]."\" Custom=\"".$tag["custom"]."\" />\n";
2042 }
2043 }
2044 }
2045 $xml.= "</Style>\n";
2046 }
2047
2048 // colors
2049 foreach($this->getColors() as $color)
2050 {
2051 $xml.="<StyleColor Name=\"".$color["name"]."\" Code=\"".$color["code"]."\"/>\n";
2052 }
2053
2054 // templates
2056 foreach ($tcts as $tct => $v)
2057 {
2058 $ts = $this->getTemplates($tct);
2059
2060 foreach ($ts as $t)
2061 {
2062 $xml.="<StyleTemplate Type=\"".$tct."\" Name=\"".$t["name"]."\">\n";
2063 foreach ($t["classes"] as $ct => $c)
2064 {
2065 if ($c != "")
2066 {
2067 $xml.="<StyleTemplateClass ClassType=\"".$ct."\" Class=\"".$c."\"/>\n";
2068 }
2069 }
2070 $xml.="</StyleTemplate>\n";
2071 }
2072 }
2073
2074
2075 $xml.= "</StyleSheet>";
2076//echo "<pre>".htmlentities($xml)."</pre>"; exit;
2077 return $xml;
2078 }
2079
2080
2085 {
2086 $sty_data_dir = ilUtil::getDataDir()."/sty";
2087 ilUtil::makeDir($sty_data_dir);
2088 if(!is_writable($sty_data_dir))
2089 {
2090 $this->ilias->raiseError("Style data directory (".$sty_data_dir
2091 .") not writeable.",$this->ilias->error_obj->FATAL);
2092 }
2093
2094 $style_dir = $sty_data_dir."/sty_".$this->getId();
2095 ilUtil::makeDir($style_dir);
2096 if(!@is_dir($style_dir))
2097 {
2098 $this->ilias->raiseError("Creation of style directory failed (".
2099 $style_dir.").",$this->ilias->error_obj->FATAL);
2100 }
2101
2102 // create export subdirectory
2103 $ex_dir = $style_dir."/export";
2104 ilUtil::makeDir($ex_dir);
2105 if(!@is_dir($ex_dir))
2106 {
2107 $this->ilias->raiseError("Creation of Import Directory failed (".
2108 $ex_dir.").",$this->ilias->error_obj->FATAL);
2109 }
2110
2111 return $ex_dir;
2112 }
2113
2118 {
2119 $sty_data_dir = ilUtil::getDataDir()."/sty";
2120 $style_dir = $sty_data_dir."/sty_".$this->getId();
2121 // create export subdirectory
2122 $ex_dir = $style_dir."/export";
2123
2124 if (is_dir($ex_dir))
2125 {
2126 ilUtil::delDir($ex_dir, true);
2127 }
2128 }
2129
2130
2135 {
2136 $ex_dir = $this->createExportDirectory();
2137 $ex_sub_dir = $ex_dir."/".$this->getExportSubDir();
2138 ilUtil::makeDir($ex_sub_dir);
2139 if(!is_writable($ex_sub_dir))
2140 {
2141 $this->ilias->raiseError("Style data directory (".$ex_sub_dir
2142 .") not writeable.",$this->ilias->error_obj->FATAL);
2143 }
2144 $ex_sub_images_dir = $ex_sub_dir."/images";
2145 ilUtil::makeDir($ex_sub_images_dir);
2146 if(!is_writable($ex_sub_images_dir))
2147 {
2148 $this->ilias->raiseError("Style data directory (".$ex_sub_images_dir
2149 .") not writeable.",$this->ilias->error_obj->FATAL);
2150 }
2151 }
2152
2156 function setExportSubDir($a_dir)
2157 {
2158 $this->export_sub_dir = $a_dir;
2159 }
2160
2165 {
2166 if ($this->export_sub_dir == "")
2167 {
2168 return "sty_".$this->getId();
2169 }
2170 else
2171 {
2172 return $this->export_sub_dir;
2173 }
2174 }
2175
2181 function export()
2182 {
2183 $this->cleanExportDirectory();
2184 $ex_dir = $this->createExportDirectory();
2185 $this->createExportSubDirectory();
2186 $this->exportXML($ex_dir."/".$this->getExportSubDir());
2187//echo "-".$this->getImagesDirectory()."-".$ex_dir."/".$this->getExportSubDir()."/images"."-";
2189 $ex_dir."/".$this->getExportSubDir()."/images");
2190 if (is_file($ex_dir."/".$this->getExportSubDir().".zip"))
2191 {
2192 unlink($ex_dir."/".$this->getExportSubDir().".zip");
2193 }
2194 ilUtil::zip($ex_dir."/".$this->getExportSubDir(),
2195 $ex_dir."/".$this->getExportSubDir().".zip");
2196
2197 return $ex_dir."/".$this->getExportSubDir().".zip";
2198 }
2199
2203 function exportXML($a_dir)
2204 {
2205 $file = $a_dir."/style.xml";
2206
2207 // open file
2208 if (!($fp = @fopen($file,"w")))
2209 {
2210 die ("<b>Error</b>: Could not open \"".$file."\" for writing".
2211 " in <b>".__FILE__."</b> on line <b>".__LINE__."</b><br />");
2212 }
2213
2214 // set file permissions
2215 chmod($file, 0770);
2216
2217 // write xml data into the file
2218 fwrite($fp, $this->getXML());
2219
2220 // close file
2221 fclose($fp);
2222
2223 }
2224
2229 {
2230 $sty_data_dir = ilUtil::getDataDir()."/sty";
2231 ilUtil::makeDir($sty_data_dir);
2232 if(!is_writable($sty_data_dir))
2233 {
2234 $this->ilias->raiseError("Style data directory (".$sty_data_dir
2235 .") not writeable.",$this->ilias->error_obj->FATAL);
2236 }
2237
2238 $style_dir = $sty_data_dir."/sty_".$this->getId();
2239 ilUtil::makeDir($style_dir);
2240 if(!@is_dir($style_dir))
2241 {
2242 $this->ilias->raiseError("Creation of style directory failed (".
2243 $style_dir.").",$this->ilias->error_obj->FATAL);
2244 }
2245
2246 // create import subdirectory
2247 $im_dir = $style_dir."/import";
2248 ilUtil::makeDir($im_dir);
2249 if(!@is_dir($im_dir))
2250 {
2251 $this->ilias->raiseError("Creation of Import Directory failed (".
2252 $im_dir.").",$this->ilias->error_obj->FATAL);
2253 }
2254
2255 return $im_dir;
2256 }
2257
2261 function import($a_file)
2262 {
2263 parent::create();
2264
2265 $im_dir = $this->createImportDirectory();
2266
2267 // handle uploaded files
2268 if (is_array($a_file))
2269 {
2270 ilUtil::moveUploadedFile($a_file["tmp_name"],
2271 $a_file["name"], $im_dir."/".$a_file["name"]);
2272 $file_name = $a_file["name"];
2273 }
2274 else // handle not directly uploaded files
2275 {
2276 $pi = pathinfo($a_file);
2277 $file_name = $pi["basename"];
2278 copy($a_file, $im_dir."/".$file_name);
2279 }
2280 $file = pathinfo($file_name);
2281
2282 // unzip file
2283 if (strtolower($file["extension"] == "zip"))
2284 {
2285 ilUtil::unzip($im_dir."/".$file_name);
2286 $subdir = basename($file["basename"],".".$file["extension"]);
2287 if (!is_dir($im_dir."/".$subdir))
2288 {
2289 $subdir = "style"; // check style subdir
2290 }
2291 $xml_file = $im_dir."/".$subdir."/style.xml";
2292 }
2293 else // handle xml file directly (old style)
2294 {
2295 $xml_file = $im_dir."/".$file_name;
2296 }
2297
2298 // load information from xml file
2299//echo "-$xml_file-";
2300 $this->createFromXMLFile($xml_file, true);
2301
2302 // copy images
2303 $this->createImagesDirectory();
2304 if (is_dir($im_dir."/".$subdir."/images"))
2305 {
2306 ilUtil::rCopy($im_dir."/".$subdir."/images",
2307 $this->getImagesDirectory());
2308 }
2309
2311 $this->read();
2312 $this->writeCSSFile();
2313 }
2314
2319 function createFromXMLFile($a_file, $a_skip_parent_create = false)
2320 {
2321 global $ilDB;
2322
2323 $this->is_3_10_skin = false;
2324
2325 if (!$a_skip_parent_create)
2326 {
2327 parent::create();
2328 }
2329 include_once("./Services/Style/Content/classes/class.ilStyleImportParser.php");
2330 $importParser = new ilStyleImportParser($a_file, $this);
2331 $importParser->startParsing();
2332
2333 // store style parameter
2334 foreach ($this->style as $style)
2335 {
2336 foreach($style as $tag)
2337 {
2338 $id = $ilDB->nextId("style_parameter");
2339
2340 // migrate old table PageFrame/PageContainer to div
2341 if (in_array($tag["class"], array("PageFrame", "PageContainer")) &&
2342 $tag["tag"] == "table")
2343 {
2344 $tag["tag"] = "div";
2345 if ($tag["parameter"] == "width" && $tag["value"] == "100%")
2346 {
2347 continue;
2348 }
2349 }
2350
2351 $q = "INSERT INTO style_parameter (id,style_id, tag, class, parameter, type, value, custom) VALUES ".
2352 "(".
2353 $ilDB->quote($id, "integer").",".
2354 $ilDB->quote($this->getId(), "integer").",".
2355 $ilDB->quote($tag["tag"], "text").",".
2356 $ilDB->quote($tag["class"], "text").",".
2357 $ilDB->quote($tag["parameter"], "text").",".
2358 $ilDB->quote($tag["type"], "text").",".
2359 $ilDB->quote($tag["value"], "text").",".
2360 $ilDB->quote((bool) $tag["custom"], "integer").
2361 ")";
2362 $ilDB->manipulate($q);
2363 }
2364 }
2365
2366 // store characteristics
2367 $this->is_3_10_skin = true;
2368 if (is_array($this->chars))
2369 {
2370 foreach ($this->chars as $char)
2371 {
2372 if ($char["type"] != "")
2373 {
2374 $s = substr($char["class"], strlen($char["class"]) - 6);
2375 if ($s != ":hover")
2376 {
2377 $q = "INSERT INTO style_char (style_id, type, characteristic) VALUES ".
2378 "(".$ilDB->quote($this->getId(), "integer").",".
2379 $ilDB->quote($char["type"], "text").",".
2380 $ilDB->quote($char["class"], "text").")";
2381 $ilDB->manipulate($q);
2382 $this->is_3_10_skin = false;
2383 }
2384 }
2385 }
2386 }
2387
2388 // add style_data record
2389 $q = "INSERT INTO style_data (id, uptodate) VALUES ".
2390 "(".$ilDB->quote($this->getId(), "integer").", 0)";
2391 $ilDB->manipulate($q);
2392
2393 $this->update();
2394 $this->read();
2395
2396 if ($this->is_3_10_skin)
2397 {
2398 $this->do_3_10_Migration();
2399 }
2400 //$this->writeCSSFile();
2401 }
2402
2407 {
2408 $groups = array();
2409
2410 foreach (self::$parameter as $parameter => $props)
2411 {
2412 $groups[$props["group"]][] = $parameter;
2413 }
2414 return $groups;
2415 }
2416
2417 static function _getStyleParameterInputType($par)
2418 {
2419 $input = self::$parameter[$par]["input"];
2420 return $input;
2421 }
2422
2423 static function _getStyleParameterSubPar($par)
2424 {
2425 $subpar = self::$parameter[$par]["subpar"];
2426 return $subpar;
2427 }
2428
2429 static function _getStyleParameters($a_tag = "")
2430 {
2431 if ($a_tag == "")
2432 {
2433 return self::$parameter;
2434 }
2435 $par = array();
2436 foreach (self::$parameter as $k => $v)
2437 {
2438 if (is_array(self::$filtered_groups[$v["group"]]) &&
2439 !in_array($a_tag, self::$filtered_groups[$v["group"]]))
2440 {
2441 continue;
2442 }
2443 $par[$k] = $v;
2444 }
2445 return $par;
2446 }
2447
2448 static function _getFilteredGroups()
2449 {
2451 }
2452
2453 static function _getStyleParameterNumericUnits($a_no_percentage = false)
2454 {
2455 if ($a_no_percentage)
2456 {
2458 }
2459 return self::$num_unit;
2460 }
2461
2462 static function _getStyleParameterValues($par)
2463 {
2464 return self::$parameter[$par]["values"];
2465 }
2466
2467 /*static function _getStyleTypes()
2468 {
2469 return self::$style_types;
2470 }*/
2471
2472 static function _getStyleSuperTypes()
2473 {
2475 }
2476
2477 static function _isExpandable($a_type)
2478 {
2479 return in_array($a_type, self::$expandable_types);
2480 }
2481
2482 static function _isHideable($a_type)
2483 {
2484 return in_array($a_type, self::$hideable_types);
2485 }
2486
2488 {
2489 foreach (self::$style_super_types as $s => $t)
2490 {
2491 if (in_array($a_type, $t))
2492 {
2493 return $s;
2494 }
2495 if ($a_type == $s)
2496 {
2497 return $s;
2498 }
2499 }
2500 }
2501
2505 static function _getCoreStyles()
2506 {
2507 $c_styles = array();
2508 foreach (self::$core_styles as $cstyle)
2509 {
2510 $c_styles[$cstyle["type"].".".ilObjStyleSheet::_determineTag($cstyle["type"]).".".$cstyle["class"]]
2511 = array("type" => $cstyle["type"],
2512 "tag" => ilObjStyleSheet::_determineTag($cstyle["type"]),
2513 "class" => $cstyle["class"]);
2514 }
2515 return $c_styles;
2516 }
2517
2524 static function isCoreStyle($a_type, $a_class)
2525 {
2526 foreach (self::$core_styles as $s)
2527 {
2528 if ($s["type"] == $a_type && $s["class"] == $a_class)
2529 {
2530 return true;
2531 }
2532 }
2533 return false;
2534 }
2535
2536
2540 static function _getTemplateClassTypes($a_template_type = "")
2541 {
2542 if ($a_template_type == "")
2543 {
2544 return self::$templates;
2545 }
2546
2547 return self::$templates[$a_template_type];
2548 }
2549
2550
2551 static function _getPseudoClasses($tag)
2552 {
2553 return self::$pseudo_classes[$tag];
2554 }
2555
2557 {
2558 return self::$templates[$t][$k];
2559 }
2560
2561 static function _determineTag($a_type)
2562 {
2563 return self::$assigned_tags[$a_type];
2564 }
2565
2569 static function getAvailableParameters()
2570 {
2571 $pars = array();
2572 foreach(self::$parameter as $p => $v)
2573 {
2574 $pars[$p] = $v["values"];
2575 }
2576
2577 return $pars;
2578 }
2579
2580
2584 static function _addMissingStyleClassesToStyle($a_id)
2585 {
2586 $styles = array(array("id" => $a_id));
2588 }
2589
2594 static function _addMissingStyleClassesToAllStyles($a_styles = "")
2595 {
2596 global $ilDB;
2597
2598 if ($a_styles == "")
2599 {
2601 }
2602 else
2603 {
2604 $styles = $a_styles;
2605 }
2608
2609 // get all core image files
2610 $core_images = array();
2611 $core_dir = self::$basic_style_image_dir;
2612 if (is_dir($core_dir))
2613 {
2614 $dir = opendir($core_dir);
2615 while($file = readdir($dir))
2616 {
2617 if (substr($file, 0, 1) != "." && is_file($core_dir."/".$file))
2618 {
2619 $core_images[] = $file;
2620 }
2621 }
2622 }
2623
2624 foreach ($styles as $style)
2625 {
2626 $id = $style["id"];
2627
2628 foreach($core_styles as $cs)
2629 {
2630 // check, whether core style class exists
2631 $set = $ilDB->queryF("SELECT * FROM style_char WHERE style_id = %s ".
2632 "AND type = %s AND characteristic = %s",
2633 array("integer", "text", "text"),
2634 array($id, $cs["type"], $cs["class"]));
2635
2636 // if not, add core style class
2637 if (!($rec = $ilDB->fetchAssoc($set)))
2638 {
2639 $ilDB->manipulateF(
2640 "INSERT INTO style_char (style_id, type, characteristic) ".
2641 " VALUES (%s,%s,%s) ",
2642 array("integer", "text", "text"),
2643 array($id, $cs["type"], $cs["class"]));
2644
2645 $xpath = new DOMXPath($bdom);
2646 $par_nodes = $xpath->query("/StyleSheet/Style[@Tag = '".$cs["tag"]."' and @Type='".
2647 $cs["type"]."' and @Class='".$cs["class"]."']/StyleParameter");
2648 foreach ($par_nodes as $par_node)
2649 {
2650 // check whether style parameter exists
2651 $set = $ilDB->queryF("SELECT * FROM style_parameter WHERE style_id = %s ".
2652 "AND type = %s AND class = %s AND tag = %s AND parameter = %s",
2653 array("integer", "text", "text", "text", "text"),
2654 array($id, $cs["type"], $cs["class"],
2655 $cs["tag"], $par_node->getAttribute("Name")));
2656
2657 // if not, create style parameter
2658 if (!($rec = $ilDB->fetchAssoc($set)))
2659 {
2660 $spid = $ilDB->nextId("style_parameter");
2661 $st = $ilDB->manipulateF("INSERT INTO style_parameter (id, style_id, type, class, tag, parameter, value) ".
2662 " VALUES (%s,%s,%s,%s,%s,%s,%s)",
2663 array("integer", "integer", "text", "text", "text", "text", "text"),
2664 array($spid, $id, $cs["type"], $cs["class"], $cs["tag"],
2665 $par_node->getAttribute("Name"), $par_node->getAttribute("Value")));
2666 }
2667 }
2668 }
2669 }
2670
2671 // now check, whether some core image files are missing
2674 reset($core_images);
2675 foreach($core_images as $cim)
2676 {
2677 if (!is_file($imdir."/".$cim))
2678 {
2679 copy($core_dir."/".$cim, $imdir."/".$cim);
2680 }
2681 }
2682 }
2683 }
2684
2685 //
2686 // Color management
2687 //
2688
2693 {
2694 global $ilDB;
2695
2696 $this->do_3_9_Migration($this->getId());
2697
2698 //include_once("./Services/Migration/DBUpdate_1385/classes/class.ilStyleMigration.php");
2699 //ilStyleMigration::addMissingStyleCharacteristics($this->getId());
2700
2701 $this->do_3_10_CharMigration($this->getId());
2702
2703 // style_char: type for characteristic
2704 $st = $ilDB->prepareManip("UPDATE style_char SET type = ? WHERE characteristic = ?".
2705 " AND style_id = ? ", array("text", "text", "integer"));
2706 $ilDB->execute($st, array("media_cont", "Media", $this->getId()));
2707 $ilDB->execute($st, array("media_caption", "MediaCaption", $this->getId()));
2708 $ilDB->execute($st, array("page_fn", "Footnote", $this->getId()));
2709 $ilDB->execute($st, array("page_nav", "LMNavigation", $this->getId()));
2710 $ilDB->execute($st, array("page_title", "PageTitle", $this->getId()));
2711 $ilDB->execute($st, array("page_cont", "Page", $this->getId()));
2712
2713 // style_parameter: type for class
2714 $st = $ilDB->prepareManip("UPDATE style_parameter SET type = ? WHERE class = ?".
2715 " AND style_id = ? ", array("text", "text", "integer"));
2716 $ilDB->execute($st, array("media_cont", "Media", $this->getId()));
2717 $ilDB->execute($st, array("media_caption", "MediaCaption", $this->getId()));
2718 $ilDB->execute($st, array("page_fn", "Footnote", $this->getId()));
2719 $ilDB->execute($st, array("page_nav", "LMNavigation", $this->getId()));
2720 $ilDB->execute($st, array("page_title", "PageTitle", $this->getId()));
2721 $ilDB->execute($st, array("table", "Page", $this->getId()));
2722
2723 $st = $ilDB->prepareManip("UPDATE style_parameter SET tag = ? WHERE class = ?".
2724 " AND style_id = ? ", array("text", "text", "integer"));
2725 $ilDB->execute($st, array("div", "MediaCaption", $this->getId()));
2726
2727 // style_char: characteristic for characteristic
2728 $st = $ilDB->prepareManip("UPDATE style_char SET characteristic = ? WHERE characteristic = ?".
2729 " AND style_id = ? ", array("text", "text", "integer"));
2730 $ilDB->execute($st, array("MediaContainer", "Media", $this->getId()));
2731 $ilDB->execute($st, array("PageContainer", "Page", $this->getId()));
2732
2733 // style_parameter: class for class
2734 $st = $ilDB->prepareManip("UPDATE style_parameter SET class = ? WHERE class = ?".
2735 " AND style_id = ? ", array("text", "text", "integer"));
2736 $ilDB->execute($st, array("MediaContainer", "Media", $this->getId()));
2737 $ilDB->execute($st, array("PageContainer", "Page", $this->getId()));
2738
2739 // force rewriting of container style
2740 $st = $ilDB->prepareManip("DELETE FROM style_char WHERE type = ?".
2741 " AND style_id = ? ", array("text", "integer"));
2742 $ilDB->execute($st, array("page_cont", $this->getId()));
2743 $st = $ilDB->prepareManip("DELETE FROM style_parameter WHERE type = ?".
2744 " AND style_id = ? ", array("text", "integer"));
2745 $ilDB->execute($st, array("page_cont", $this->getId()));
2746
2747 }
2748
2755 function do_3_10_CharMigration($a_id = "")
2756 {
2757 global $ilDB;
2758
2759 $add_str = "";
2760 if ($a_id != "")
2761 {
2762 $add_str = " AND style_id = ".$ilDB->quote($a_id, "integer");
2763 }
2764
2765 $set = $ilDB->query($q = "SELECT DISTINCT style_id, tag, class FROM style_parameter WHERE ".
2766 $ilDB->equals("type", "", "text", true)." ".$add_str);
2767
2768 while ($rec = $ilDB->fetchAssoc($set))
2769 {
2770 // derive types from tag
2771 $types = array();
2772 switch ($rec["tag"])
2773 {
2774 case "div":
2775 case "p":
2776 if (in_array($rec["class"], array("Headline3", "Headline1",
2777 "Headline2", "TableContent", "List", "Standard", "Remark",
2778 "Additional", "Mnemonic", "Citation", "Example")))
2779 {
2780 $types[] = "text_block";
2781 }
2782 if (in_array($rec["class"], array("Block", "Remark",
2783 "Additional", "Mnemonic", "Example", "Excursus", "Special")))
2784 {
2785 $types[] = "section";
2786 }
2787 if (in_array($rec["class"], array("Page", "Footnote", "PageTitle", "LMNavigation")))
2788 {
2789 $types[] = "page";
2790 }
2791 break;
2792
2793 case "td":
2794 $types[] = "table_cell";
2795 break;
2796
2797 case "a":
2798 if (in_array($rec["class"], array("ExtLink", "IntLink", "FootnoteLink")))
2799 {
2800 $types[] = "link";
2801 }
2802 break;
2803
2804 case "span":
2805 $types[] = "text_inline";
2806 break;
2807
2808 case "table":
2809 $types[] = "table";
2810 break;
2811 }
2812
2813 // check if style_char set exists
2814 foreach ($types as $t)
2815 {
2816 // check if second type already exists
2817 $set4 = $ilDB->queryF("SELECT * FROM style_char ".
2818 " WHERE style_id = %s AND type = %s AND characteristic = %s",
2819 array("integer", "text", "text"),
2820 array($rec["style_id"], $t, $rec["class"]));
2821 if ($rec4 = $ilDB->fetchAssoc($set4))
2822 {
2823 // ok
2824 }
2825 else
2826 {
2827//echo "<br>1-".$rec["style_id"]."-".$t."-".$rec["class"]."-";
2828 $ilDB->manipulateF("INSERT INTO style_char ".
2829 " (style_id, type, characteristic) VALUES ".
2830 " (%s,%s,%s) ",
2831 array("integer", "text", "text"),
2832 array($rec["style_id"], $t, $rec["class"]));
2833 }
2834 }
2835
2836 // update types
2837 if ($rec["type"] == "")
2838 {
2839 if (count($types) > 0)
2840 {
2841 $ilDB->manipulateF("UPDATE style_parameter SET type = %s ".
2842 " WHERE style_id = %s AND class = %s AND ".$ilDB->equals("type", "", "text", true),
2843 array("text", "integer", "text"),
2844 array($types[0], $rec["style_id"], $rec["class"]));
2845//echo "<br>3-".$types[0]."-".$rec["style_id"]."-".$rec["class"]."-";
2846
2847 // links extra handling
2848 if ($types[0] == "link")
2849 {
2850 $ilDB->manipulateF("UPDATE style_parameter SET type = %s ".
2851 " WHERE style_id = %s AND (class = %s OR class = %s) AND ".$ilDB->equals("type", "", "text", true),
2852 array("text", "integer", "text", "text"),
2853 array($types[0], $rec["style_id"], $rec["class"].":visited",
2854 $rec["class"].":hover"));
2855 }
2856 }
2857
2858 if (count($types) == 2)
2859 {
2860 // select all records of first type and add second type
2861 // records if necessary.
2862 $set2 = $ilDB->queryF("SELECT * FROM style_parameter ".
2863 " WHERE style_id = %s AND class = %s AND type = %s",
2864 array("integer", "text", "text"),
2865 array($rec["style_id"], $rec["class"], $types[0]));
2866 while ($rec2 = $ilDB->fetchAssoc($set2))
2867 {
2868 // check if second type already exists
2869 $set3 = $ilDB->queryF("SELECT * FROM style_parameter ".
2870 " WHERE style_id = %s AND tag = %s AND class = %s AND type = %s AND parameter = %s",
2871 array("integer", "text", "text", "text", "text"),
2872 array($rec["style_id"], $rec["tag"], $rec["class"], $types[1], $rec["parameter"]));
2873 if ($rec3 = $ilDB->fetchAssoc($set3))
2874 {
2875 // ok
2876 }
2877 else
2878 {
2879 $nid = $ilDB->nextId("style_parameter");
2880 $ilDB->manipulateF("INSERT INTO style_parameter ".
2881 " (id, style_id, tag, class, parameter, value, type) VALUES ".
2882 " (%s, %s,%s,%s,%s,%s,%s) ",
2883 array("integer", "integer", "text", "text", "text", "text", "text"),
2884 array($nid, $rec2["style_id"], $rec2["tag"], $rec2["class"],
2885 $rec2["parameter"], $rec2["value"], $types[1]));
2886 }
2887 }
2888 }
2889 }
2890 }
2891 }
2892
2896 function do_3_9_Migration($a_id)
2897 {
2898 global $ilDB;
2899
2900 $classes = array("Example", "Additional", "Citation", "Mnemonic", "Remark");
2901 $pars = array("margin-top", "margin-bottom");
2902
2903 foreach ($classes as $curr_class)
2904 {
2905 foreach ($pars as $curr_par)
2906 {
2907 $res2 = $ilDB->queryF("SELECT id FROM style_parameter WHERE style_id = %s".
2908 " AND tag = %s AND class= %s AND parameter = %s",
2909 array("integer", "text", "text", "text"),
2910 array($a_id, "p", $curr_class, $curr_par));
2911 if ($row2 = $ilDB->fetchAssoc($res2))
2912 {
2913 $ilDB->manipulateF("UPDATE style_parameter SET value= %s WHERE id = %s",
2914 array("text", "integer"),
2915 array("10px", $row2["id"]));
2916 }
2917 else
2918 {
2919 $nid = $ilDB->nextId("style_parameter");
2920 $ilDB->manipulateF("INSERT INTO style_parameter ".
2921 "(id, style_id, tag, class, parameter,value) VALUES (%s,%s,%s,%s,%s,%s)",
2922 array("integer", "integer", "text", "text", "text", "text"),
2923 array($nid, $a_id, "div", $curr_class, $curr_par, "10px"));
2924 }
2925 }
2926 }
2927
2928 $ilDB->manipulateF("UPDATE style_parameter SET tag = %s WHERE tag = %s and style_id = %s",
2929 array("text", "text", "integer"),
2930 array("div", "p", $a_id));
2931
2932 }
2933
2937
2941 function getColors()
2942 {
2943 global $ilDB;
2944
2945 $set = $ilDB->query("SELECT * FROM style_color WHERE ".
2946 "style_id = ".$ilDB->quote($this->getId(), "integer")." ".
2947 "ORDER BY color_name");
2948
2949 $colors = array();
2950 while ($rec = $ilDB->fetchAssoc($set))
2951 {
2952 $colors[] = array(
2953 "name" => $rec["color_name"],
2954 "code" => $rec["color_code"]
2955 );
2956 }
2957
2958 return $colors;
2959 }
2960
2964 function addColor($a_name, $a_code)
2965 {
2966 global $ilDB;
2967
2968 $ilDB->manipulate("INSERT INTO style_color (style_id, color_name, color_code)".
2969 " VALUES (".
2970 $ilDB->quote($this->getId(), "integer").",".
2971 $ilDB->quote($a_name, "text").",".
2972 $ilDB->quote($a_code, "text").
2973 ")");
2974 }
2975
2979 function updateColor($a_name, $a_new_name, $a_code)
2980 {
2981 global $ilDB;
2982
2983 // todo: update names in parameters as well
2984
2985 $ilDB->manipulate("UPDATE style_color SET ".
2986 "color_name = ".$ilDB->quote($a_new_name, "text").", ".
2987 "color_code = ".$ilDB->quote($a_code, "text").
2988 " WHERE style_id = ".$ilDB->quote($this->getId(), "integer").
2989 " AND color_name = ".$ilDB->quote($a_name, "text"));
2990 ilObjStyleSheet::_writeUpToDate($this->getId(), false);
2991
2992 // rename also the name in the style parameter values
2993 if ($a_name != $a_new_name)
2994 {
2995 $set = $ilDB->query("SELECT * FROM style_parameter ".
2996 " WHERE style_id = ".$ilDB->quote($this->getId(), "integer").
2997 " AND (".
2998 " parameter = ".$ilDB->quote("background-color", "text"). " OR ".
2999 " parameter = ".$ilDB->quote("color", "text"). " OR ".
3000 " parameter = ".$ilDB->quote("border-color", "text"). " OR ".
3001 " parameter = ".$ilDB->quote("border-top-color", "text"). " OR ".
3002 " parameter = ".$ilDB->quote("border-bottom-color", "text"). " OR ".
3003 " parameter = ".$ilDB->quote("border-left-color", "text"). " OR ".
3004 " parameter = ".$ilDB->quote("border-right-color", "text").
3005 ")");
3006 while ($rec = $ilDB->fetchAssoc($set))
3007 {
3008 if ($rec["value"] == "!".$a_name ||
3009 is_int(strpos($rec["value"], "!".$a_name."(")))
3010 {
3011 // parameter is based on color -> rename it
3012 $this->replaceStylePar($rec["tag"], $rec["class"],
3013 $rec["parameter"], str_replace($a_name, $a_new_name, $rec["value"]), $rec["type"], $rec["mq_id"], $rec["custom"]);
3014 }
3015 }
3016 }
3017 }
3018
3022 function removeColor($a_name)
3023 {
3024 global $ilDB;
3025
3026 $ilDB->manipulate("DELETE FROM style_color WHERE ".
3027 " style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
3028 " color_name = ".$ilDB->quote($a_name, "text"));
3029 }
3030
3034 function colorExists($a_color_name)
3035 {
3036 global $ilDB;
3037
3038 $set = $ilDB->query("SELECT * FROM style_color WHERE ".
3039 "style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
3040 "color_name = ".$ilDB->quote($a_color_name, "text"));
3041 if ($rec = $ilDB->fetchAssoc($set))
3042 {
3043 return true;
3044 }
3045 return false;
3046 }
3047
3051 function getColorCodeForName($a_name)
3052 {
3053 global $ilDB;
3054
3055 $pos = strpos($a_name, "(");
3056 if ($pos > 0)
3057 {
3058 $a_i = substr($a_name, $pos + 1);
3059 $a_i = str_replace(")", "", $a_i);
3060 $a_name = substr($a_name, 0, $pos);
3061 }
3062
3063 $set = $ilDB->query("SELECT color_code FROM style_color WHERE ".
3064 " style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
3065 " color_name = ".$ilDB->quote($a_name, "text"));
3066 if ($rec = $ilDB->fetchAssoc($set))
3067 {
3068 if ($a_i == "")
3069 {
3070 return "#".$rec["color_code"];
3071 }
3072 else
3073 {
3074 return "#".ilObjStyleSheet::_getColorFlavor($rec["color_code"],
3075 (int) $a_i);
3076 }
3077 }
3078 }
3079
3083 static function _getColorFlavor($a_rgb, $a_i)
3084 {
3085 $rgb = ilObjStyleSheet::_explodeRGB($a_rgb, true);
3086 $hls = ilObjStyleSheet::_RGBToHLS($rgb);
3087
3088 if ($a_i > 0)
3089 {
3090 $hls["l"] = $hls["l"] + ((255 - $hls["l"]) * ($a_i / 100));
3091 }
3092 if ($a_i < 0)
3093 {
3094 $hls["l"] = $hls["l"] - (($hls["l"]) * (-$a_i / 100));
3095 }
3096
3097 $rgb = ilObjStyleSheet::_HLSToRGB($hls);
3098
3099 foreach ($rgb as $k => $v)
3100 {
3101 $rgb[$k] = str_pad(dechex($v), 2, "0", STR_PAD_LEFT);
3102 }
3103
3104 return $rgb["r"].$rgb["g"].$rgb["b"];
3105 }
3106
3110 static function _explodeRGB($a_rgb, $as_dec = false)
3111 {
3112 $r["r"] = substr($a_rgb, 0, 2);
3113 $r["g"] = substr($a_rgb, 2, 2);
3114 $r["b"] = substr($a_rgb, 4, 2);
3115
3116 if ($as_dec)
3117 {
3118 $r["r"] = (int) hexdec($r["r"]);
3119 $r["g"] = (int) hexdec($r["g"]);
3120 $r["b"] = (int) hexdec($r["b"]);
3121 }
3122
3123 return $r;
3124 }
3125
3129 static function _RGBToHLS($a_rgb)
3130 {
3131 $r = $a_rgb["r"] / 255;
3132 $g = $a_rgb["g"] / 255;
3133 $b = $a_rgb["b"] / 255;
3134
3135 // max / min
3136 $max = max($r,$g,$b);
3137 $min = min($r,$g,$b);
3138
3139 //lightness
3140 $l = ($max + $min) / 2;
3141
3142 if ($max == $min)
3143 {
3144 $s = 0;
3145 $h = 0;
3146 }
3147 else
3148 {
3149 if ($l < 0.5)
3150 {
3151 $s = ($max - $min) / ($max + $min);
3152 }
3153 else
3154 {
3155 $s = ($max - $min) / (2.0 - $max - $min);
3156 }
3157
3158 if ($r == $max)
3159 {
3160 $h = ($g - $b) / ($max - $min);
3161 }
3162 else if ($g == $max)
3163 {
3164 $h = 2.0 + ($b - $r) / ($max - $min);
3165 }
3166 else if ($b == $max)
3167 {
3168 $h = 4.0 + ($r - $g) / ($max - $min);
3169 }
3170 }
3171
3172 $hls["h"] = round(($h / 6) * 255);
3173 $hls["l"] = round($l * 255);
3174 $hls["s"] = round($s * 255);
3175
3176 return $hls;
3177 }
3178
3182 static function _HLSToRGB($a_hls)
3183 {
3184 $h = $a_hls["h"] / 255;
3185 $l = $a_hls["l"] / 255;
3186 $s = $a_hls["s"] / 255;
3187
3188 $rgb["r"] = $rgb["g"] = $rgb["b"] = 0;
3189
3190 // If S=0, define R, G, and B all to L
3191 if ($s == 0)
3192 {
3193 $rgb["r"] = $rgb["g"] = $rgb["b"] = $l;
3194 }
3195 else
3196 {
3197
3198 if ($l < 0.5)
3199 {
3200 $temp2 = $l * (1.0 + $s);
3201 }
3202 else
3203 {
3204 $temp2 = $l + $s - $l * $s;
3205 }
3206
3207 $temp1 = 2.0 * $l - $temp2;
3208
3209
3210 # For each of R, G, B, compute another temporary value, temp3, as follows:
3211 foreach ($rgb as $k => $v)
3212 {
3213 switch ($k)
3214 {
3215 case "r":
3216 $temp3 = $h + 1.0 / 3.0;
3217 break;
3218
3219 case "g":
3220 $temp3 = $h;
3221 break;
3222
3223 case "b":
3224 $temp3 = $h - 1.0/3.0;
3225 break;
3226 }
3227 if ($temp3 < 0)
3228 {
3229 $temp3 = $temp3 + 1.0;
3230 }
3231 if ($temp3 > 1)
3232 {
3233 $temp3 = $temp3 - 1.0;
3234 }
3235
3236 if (6.0 * $temp3 < 1)
3237 {
3238 $rgb[$k] = $temp1 + ($temp2 - $temp1) * 6.0 * $temp3;
3239 }
3240 else if (2.0 * $temp3 < 1)
3241 {
3242 $rgb[$k] = $temp2;
3243 }
3244 else if (3.0 * $temp3 < 2)
3245 {
3246 $rgb[$k] = $temp1 + ($temp2 - $temp1) * ((2.0/3.0) - $temp3) * 6.0;
3247 }
3248 else
3249 {
3250 $rgb[$k] = $temp1;
3251 }
3252 }
3253 }
3254
3255 $rgb["r"] = round($rgb["r"] * 255);
3256 $rgb["g"] = round($rgb["g"] * 255);
3257 $rgb["b"] = round($rgb["b"] * 255);
3258
3259 return $rgb;
3260 }
3261
3262 //
3263 // Media queries
3264 //
3265
3269
3274 {
3275 global $ilDB;
3276
3277 $set = $ilDB->query("SELECT * FROM sty_media_query WHERE ".
3278 "style_id = ".$ilDB->quote($this->getId(), "integer")." ".
3279 "ORDER BY order_nr");
3280
3281 $mq = array();
3282 while ($rec = $ilDB->fetchAssoc($set))
3283 {
3284 $mq[] = $rec;
3285 }
3286
3287 return $mq;
3288 }
3289
3294 function addMediaQuery($a_mquery, $order_nr = 0)
3295 {
3296 global $ilDB;
3297
3298 $id = $ilDB->nextId("sty_media_query");
3299 if ($order_nr == 0)
3300 {
3301 $order_nr = $this->getMaxMQueryOrderNr() + 10;
3302 }
3303
3304 $ilDB->manipulate("INSERT INTO sty_media_query (id, style_id, mquery, order_nr)".
3305 " VALUES (".
3306 $ilDB->quote($id, "integer").",".
3307 $ilDB->quote($this->getId(), "integer").",".
3308 $ilDB->quote($a_mquery, "text").",".
3309 $ilDB->quote($order_nr, "integer").
3310 ")");
3311
3312 return $id;
3313 }
3314
3320 {
3321 global $ilDB;
3322
3323 $set = $ilDB->query("SELECT max(order_nr) mnr FROM sty_media_query ".
3324 " WHERE style_id = ".$ilDB->quote($this->getId(), "integer")
3325 );
3326 $rec = $ilDB->fetchAssoc($set);
3327
3328 return (int) $rec["mnr"];
3329 }
3330
3337 function updateMediaQuery($a_id, $a_mquery)
3338 {
3339 global $ilDB;
3340
3341 $ilDB->manipulate("UPDATE sty_media_query SET ".
3342 " mquery = ".$ilDB->quote($a_mquery, "text").
3343 " WHERE id = ".$ilDB->quote($a_id, "integer")
3344 );
3345 }
3346
3353 function getMediaQueryForId($a_id)
3354 {
3355 global $ilDB;
3356
3357 $set = $ilDB->query("SELECT * FROM sty_media_query ".
3358 " WHERE id = ".$ilDB->quote($a_id, "integer")
3359 );
3360 return $ilDB->fetchAssoc($set);
3361 }
3362
3368 function deleteMediaQuery($a_id)
3369 {
3370 global $ilDB;
3371
3372 $ilDB->manipulate("DELETE FROM sty_media_query WHERE ".
3373 " style_id = ".$ilDB->quote($this->getId(), "integer").
3374 " AND id = ".$ilDB->quote($a_id, "integer")
3375 );
3376 $this->saveMediaQueryOrder();
3377 }
3378
3384 function saveMediaQueryOrder($a_order_nr = null)
3385 {
3386 global $ilDB;
3387
3388 $mqueries = $this->getMediaQueries();
3389 if (is_array ($a_order_nr))
3390 {
3391 foreach ($mqueries as $k => $mq)
3392 {
3393 $mqueries[$k]["order_nr"] = $a_order_nr[$mq["id"]];
3394 }
3395 $mqueries = ilUtil::sortArray($mqueries, "order_nr", "", true);
3396 }
3397 $cnt = 10;
3398 foreach ($mqueries as $mq)
3399 {
3400 $ilDB->manipulate("UPDATE sty_media_query SET ".
3401 " order_nr = ".$ilDB->quote($cnt, "integer").
3402 " WHERE id = ".$ilDB->quote($mq["id"], "integer")
3403 );
3404 $cnt+= 10;
3405 }
3406 }
3407
3408
3409 //
3410 // Table template management
3411 //
3412
3417 {
3418 global $ilDB;
3419
3420 $set = $ilDB->query("SELECT * FROM style_template WHERE ".
3421 "style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
3422 "temp_type = ".$ilDB->quote($a_type, "text")." ".
3423 "ORDER BY name");
3424
3425 $templates = array();
3426 while ($rec = $ilDB->fetchAssoc($set))
3427 {
3428 $rec["classes"] = $this->getTemplateClasses($rec["id"]);
3429 $templates[] = $rec;
3430 }
3431
3432 return $templates;
3433 }
3434
3438 function getTemplateClasses($a_tid)
3439 {
3440 global $ilDB;
3441 $set = $ilDB->query("SELECT * FROM style_template_class WHERE ".
3442 "template_id = ".$ilDB->quote($a_tid, "integer"));
3443
3444 $class = array();
3445 while ($rec = $ilDB->fetchAssoc($set))
3446 {
3447 $key = $rec["class_type"];
3448 $class[$key] = $rec["class"];
3449 }
3450
3451 return $class;
3452 }
3453
3454
3458 function addTemplate($a_type, $a_name, $a_classes)
3459 {
3460 global $ilDB;
3461
3462 $tid = $ilDB->nextId("style_template");
3463 $ilDB->manipulate($q = "INSERT INTO style_template ".
3464 "(id, style_id, name, temp_type)".
3465 " VALUES (".
3466 $ilDB->quote($tid, "integer").",".
3467 $ilDB->quote($this->getId(), "integer").",".
3468 $ilDB->quote($a_name, "text").",".
3469 $ilDB->quote($a_type, "text").
3470 ")");
3471
3472 foreach ($a_classes as $t => $c)
3473 {
3474 $ilDB->manipulate($q = "INSERT INTO style_template_class ".
3475 "(template_id, class_type, class)".
3476 " VALUES (".
3477 $ilDB->quote($tid, "integer").",".
3478 $ilDB->quote($t, "text").",".
3479 $ilDB->quote($c, "text").
3480 ")");
3481 }
3482
3483 include_once("./Services/Style/Content/classes/class.ilObjStyleSheetGUI.php");
3484 $this->writeTemplatePreview($tid,
3486
3487 return $tid;
3488 }
3489
3493 function updateTemplate($a_t_id, $a_name, $a_classes)
3494 {
3495 global $ilDB;
3496
3497 $ilDB->manipulate("UPDATE style_template SET ".
3498 "name = ".$ilDB->quote($a_name, "text").
3499 " WHERE id = ".$ilDB->quote($a_t_id, "integer"));
3500
3501 $ilDB->manipulate("DELETE FROM style_template_class WHERE ".
3502 "template_id = ".$ilDB->quote($a_t_id, "integer")
3503 );
3504 foreach ($a_classes as $t => $c)
3505 {
3506 $ilDB->manipulate($q = "INSERT INTO style_template_class ".
3507 "(template_id, class_type, class)".
3508 " VALUES (".
3509 $ilDB->quote($a_t_id, "integer").",".
3510 $ilDB->quote($t, "text").",".
3511 $ilDB->quote($c, "text").
3512 ")");
3513 }
3514
3515 }
3516
3520 function addTemplateClass($a_t_id, $a_type, $a_class)
3521 {
3522 global $ilDB;
3523
3524 $ilDB->manipulate($q = "INSERT INTO style_template_class ".
3525 "(template_id, class_type, class)".
3526 " VALUES (".
3527 $ilDB->quote($a_t_id, "integer").",".
3528 $ilDB->quote($a_type, "text").",".
3529 $ilDB->quote($a_class, "text").
3530 ")");
3531 }
3532
3533
3537 function templateExists($a_template_name)
3538 {
3539 global $ilDB;
3540
3541 $set = $ilDB->query("SELECT * FROM style_template WHERE ".
3542 "style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
3543 "name = ".$ilDB->quote($a_template_name, "text"));
3544 if ($rec = $ilDB->fetchAssoc($set))
3545 {
3546 return true;
3547 }
3548 return false;
3549 }
3550
3554 function getTemplate($a_t_id)
3555 {
3556 global $ilDB;
3557
3558 $set = $ilDB->query("SELECT * FROM style_template WHERE ".
3559 "style_id = ".$ilDB->quote($this->getId(), "integer")." ".
3560 " AND id = ".$ilDB->quote($a_t_id, "integer"));
3561
3562 if ($rec = $ilDB->fetchAssoc($set))
3563 {
3564 $rec["classes"] = $this->getTemplateClasses($rec["id"]);
3565
3566 $template = $rec;
3567 return $template;
3568 }
3569 return array();
3570 }
3571
3575 function lookupTemplateName($a_t_id)
3576 {
3577 return self::_lookupTemplateName($a_t_id);
3578 }
3579
3583 static function _lookupTemplateName($a_t_id)
3584 {
3585 global $ilDB;
3586
3587 $set = $ilDB->query("SELECT name FROM style_template WHERE ".
3588 " id = ".$ilDB->quote($a_t_id, "integer"));
3589
3590 if ($rec = $ilDB->fetchAssoc($set))
3591 {
3592 return $rec["name"];
3593 }
3594
3595 return false;
3596 }
3597
3602 {
3603 global $ilDB;
3604
3605 $tag = "<StyleTemplates>";
3606
3607 $ttypes = array("table", "vaccordion", "haccordion", "carousel");
3608
3609 foreach ($ttypes as $ttype)
3610 {
3611 $ts = $this->getTemplates($ttype);
3612
3613 foreach($ts as $t)
3614 {
3616 /*$atts = array("table" => "TableClass",
3617 "caption" => "CaptionClass",
3618 "row_head" => "RowHeadClass",
3619 "row_foot" => "RowFootClass",
3620 "col_head" => "ColHeadClass",
3621 "col_foot" => "ColFootClass",
3622 "odd_row" => "OddRowClass",
3623 "even_row" => "EvenRowClass",
3624 "odd_col" => "OddColClass",
3625 "even_col" => "EvenColClass");*/
3626 $c = $t["classes"];
3627
3628 $tag.= '<StyleTemplate Name="'.$t["name"].'">';
3629
3630 foreach ($atts as $type => $t)
3631 {
3632 if ($c[$type] != "")
3633 {
3634 $tag.= '<StyleClass Type="'.$type.'" Value="'.$c[$type].'" />';
3635 }
3636 }
3637
3638 $tag.= "</StyleTemplate>";
3639 }
3640 }
3641
3642 $tag.= "</StyleTemplates>";
3643
3644//echo htmlentities($tag);
3645 return $tag;
3646 }
3647
3651 function writeTemplatePreview($a_t_id, $a_preview_html)
3652 {
3653 global $ilDB;
3654 $a_preview_html = str_replace(' width=""', "", $a_preview_html);
3655 $a_preview_html = str_replace(' valign="top"', "", $a_preview_html);
3656 $a_preview_html = str_replace('<div class="ilc_text_block_TableContent">', "<div>", $a_preview_html);
3657//echo "1-".strlen($a_preview_html)."-";
3658//echo htmlentities($a_preview_html);
3659 if (strlen($a_preview_html) > 4000)
3660 {
3661//echo "2";
3662 $a_preview_html = "";
3663 }
3664 $ilDB->manipulate("UPDATE style_template SET ".
3665 "preview = ".$ilDB->quote($a_preview_html, "text").
3666 " WHERE id = ".$ilDB->quote($a_t_id, "integer"));
3667 }
3668
3672 function lookupTemplatePreview($a_t_id)
3673 {
3674 global $ilDB;
3675
3676 $set = $ilDB->query("SELECT preview FROM style_template ".
3677 " WHERE id = ".$ilDB->quote($a_t_id, "integer"));
3678 if ($rec = $ilDB->fetchAssoc($set))
3679 {
3680 return $rec["preview"];
3681 }
3682
3683 return "";
3684 }
3685
3689 static function _lookupTemplateIdByName($a_style_id, $a_name)
3690 {
3691 global $ilDB;
3692
3693 $set = $ilDB->query("SELECT id FROM style_template ".
3694 " WHERE style_id = ".$ilDB->quote($a_style_id, "integer").
3695 " AND name = ".$ilDB->quote($a_name, "text"));
3696 if ($rec = $ilDB->fetchAssoc($set))
3697 {
3698 return $rec["id"];
3699 }
3700
3701 return false;
3702 }
3703
3707 function removeTemplate($a_t_id)
3708 {
3709 global $ilDB;
3710
3711 $ilDB->manipulate("DELETE FROM style_template WHERE ".
3712 " style_id = ".$ilDB->quote($this->getId(), "integer")." AND ".
3713 " id = ".$ilDB->quote($a_t_id, "integer"));
3714
3715 $ilDB->manipulate("DELETE FROM style_template_class WHERE ".
3716 "template_id = ".$ilDB->quote($a_t_id, "integer")
3717 );
3718
3719 }
3720
3724 function writeStyleSetting($a_name, $a_value)
3725 {
3726 global $ilDB;
3727
3728 $ilDB->manipulate("DELETE FROM style_setting WHERE ".
3729 " style_id = ".$ilDB->quote($this->getId(), "integer").
3730 " AND name = ".$ilDB->quote($a_name, "text")
3731 );
3732
3733 $ilDB->manipulate("INSERT INTO style_setting ".
3734 "(style_id, name, value) VALUES (".
3735 $ilDB->quote($this->getId(), "integer").",".
3736 $ilDB->quote($a_name, "text").",".
3737 $ilDB->quote($a_value, "text").
3738 ")");
3739 }
3740
3744 function lookupStyleSetting($a_name)
3745 {
3746 global $ilDB;
3747
3748 $set = $ilDB->query("SELECT value FROM style_setting ".
3749 " WHERE style_id = ".$ilDB->quote($this->getId(), "integer").
3750 " AND name = ".$ilDB->quote($a_name, "text")
3751 );
3752 $rec = $ilDB->fetchAssoc($set);
3753
3754 return $rec["value"];
3755 }
3756
3760 static function writeStyleUsage($a_obj_id, $a_style_id)
3761 {
3762 global $ilDB;
3763
3764 $ilDB->replace("style_usage", array(
3765 "obj_id" => array("integer", (int) $a_obj_id)),
3766 array(
3767 "style_id" => array("integer", (int) $a_style_id))
3768 );
3769 }
3770
3774 static function lookupObjectStyle($a_obj_id)
3775 {
3776 global $ilDB;
3777
3778 $set = $ilDB->query("SELECT style_id FROM style_usage ".
3779 " WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer")
3780 );
3781 $rec = $ilDB->fetchAssoc($set);
3782
3783 if (ilObject::_lookupType($rec["style_id"]) == "sty")
3784 {
3785 return (int) $rec["style_id"];
3786 }
3787
3788 return 0;
3789 }
3790
3794 static function lookupObjectForStyle($a_style_id)
3795 {
3796 global $ilDB;
3797
3798 $obj_ids = array();
3799 if (ilObject::_lookupType($a_style_id) == "sty")
3800 {
3801 $set = $ilDB->query("SELECT DISTINCT obj_id FROM style_usage " .
3802 " WHERE style_id = " . $ilDB->quote($a_style_id, "integer")
3803 );
3804
3805 while ($rec = $ilDB->fetchAssoc($set))
3806 {
3807 $obj_ids[] = $rec["obj_id"];
3808 }
3809 }
3810 return $obj_ids;
3811 }
3812
3813
3814}
3815?>
global $l
Definition: afr.php:30
$path
Definition: aliased.php:25
An exception for terminatinating execution or to throw for unit testing.
static _lookupContObjIdByStyleId($a_style_id)
lookup style sheet ID
static _deleteStyleAssignments($a_style_id)
delete all style references to style
static _getTemplatePreview($a_style, $a_type, $a_t_id, $a_small_mode=false)
Get table template preview.
Class ilObjStyleSheet.
setExportSubDir($a_dir)
Set local directory, that will be included within the zip file.
static _lookupActive($a_id)
Lookup active flag.
static _lookupStandard($a_id)
Lookup standard flag.
getMediaQueries()
Get colors of style.
getMaxMQueryOrderNr()
Get maximum media query order nr.
export()
Create export file.
getRefId()
Get ref id (show error message, since styles do not use ref ids)
static _getStyleParameterInputType($par)
updateTemplate($a_t_id, $a_name, $a_classes)
Update table template.
static getContentPrintStyle()
get content print style
addMediaQuery($a_mquery, $order_nr=0)
Add media query.
getColorCodeForName($a_name)
Remove a color.
deleteMediaQuery($a_id)
Delete media query.
do_3_9_Migration($a_id)
Migrate old 3.9 styles.
getCharacteristics($a_type="", $a_no_hidden=false, $a_include_core=true)
Get characteristics.
writeTemplatePreview($a_t_id, $a_preview_html)
Write table template preview.
read()
read style properties
static _getTemplateClassTypes($a_template_type="")
Get template class types.
deleteStylePar($a_tag, $a_class, $a_par, $a_type, $a_mq_id=0, $a_custom=false)
Delete style parameter by tag/class/parameter.
static _getClonableContentStyles()
Get all clonable styles (active standard styles and individual learning module styles with write perm...
addColor($a_name, $a_code)
Add color.
createReference()
Create a reference (show error message, since styles do not use ref ids)
static _lookupUpToDate($a_id)
Looup up to date.
static _replaceStylePar($style_id, $a_tag, $a_class, $a_par, $a_val, $a_type, $a_mq_id=0, $a_custom=false)
createExportDirectory()
Create export directory.
update()
update object in db
static _getStyleParameters($a_tag="")
putInTree($a_parent_ref)
Put in tree (show error message, since styles do not use ref ids)
static _HLSToRGB($a_hls)
HLS to RGB (both arrays, 0..255)
getParametersOfClass($a_type, $a_class, $a_mq_id=0)
Get parameters of class.
updateStyleParameter($a_id, $a_value)
update style parameter per id
uploadImage($a_file)
Upload image.
copyImagesToDir($a_target)
Copy images to directory.
createFromXMLFile($a_file, $a_skip_parent_create=false)
create style from xml file todo: add mq_id and custom
static lookupObjectForStyle($a_style_id)
Lookup object style.
characteristicExists($a_char, $a_style_type)
Check whether characteristic exists.
saveMediaQueryOrder($a_order_nr=null)
Save media query order.
addCharacteristic($a_type, $a_char, $a_hidden=false)
Add characteristic.
lookupTemplateName($a_t_id)
Lookup table template name for template ID.
getImagesDirectory()
Get images directory.
addTemplateClass($a_t_id, $a_type, $a_class)
Update table template.
getTemplates($a_type)
Get table templates of style.
removeColor($a_name)
Remove a color.
do_3_10_CharMigration($a_id="")
This is more or less a copy of Services/Migration/DBUpdate_1385/classes ilStyleMigration->addMissingS...
static getAvailableParameters()
Get available parameters.
updateMediaQuery($a_id, $a_mquery)
Update media query.
ilClone()
clone style sheet (note: styles have no ref ids and return an object id)
static _writeStandard($a_id, $a_std)
Write standard flag.
exportXML($a_dir)
export style xml file to directory
static _isExpandable($a_type)
setStyle($a_style)
set styles
cleanExportDirectory()
Clear export directory.
static lookupObjectStyle($a_obj_id)
Lookup object style.
handleXmlString($a_str)
Handle xml strin.
__construct($a_id=0, $a_call_by_reference=false)
Constructor @access public.
deleteCustomStylePars($a_tag, $a_class, $a_type, $a_mq_id=0)
Delete style parameter by tag/class/parameter.
& getMetaData()
get meta data object
addParameter($a_tag, $a_par, $a_type, $a_mq_id=0, $a_custom=false)
write style parameter to db
static _getColorFlavor($a_rgb, $a_i)
Get color flavor.
replaceStylePar($a_tag, $a_class, $a_par, $a_val, $a_type, $a_mq_id=0, $a_custom=false)
Set style parameter per tag/class/parameter.
static _getStyleParameterNumericUnits($a_no_percentage=false)
static _createImagesDirectory($a_style_id)
Create images directory <data_dir>/sty/sty_<id>/images.
deleteParameter($a_id)
delete style parameter
getTemplateXML()
Get table template xml.
setRefId($a_ref_id)
Set ref id (show error message, since styles do not use ref ids)
setCharacteristics($a_chars)
Set characteristics.
static _getPseudoClasses($tag)
saveHideStatus($a_type, $a_char, $a_hide)
Save characteristic hide status.
writeStyleSetting($a_name, $a_value)
Write Style Setting.
static _addMissingStyleClassesToStyle($a_id)
Add missing style classes to all styles.
static _RGBToHLS($a_rgb)
RGB to HLS (both arrays, 0..255)
static _isHideable($a_type)
getStyleParameterGroups()
Get grouped parameter.
lookupStyleSetting($a_name)
Lookup style setting.
getThumbnailsDirectory()
Get thumbnails directory.
getTemplateClasses($a_tid)
Get template classes.
getHideStatus($a_type, $a_char)
Get characteristic hide status.
lookupTemplatePreview($a_t_id)
Lookup table template preview.
create($a_from_style=0, $a_import_mode=false)
Create a new style.
static _getStyleParameterSubPar($par)
writeCSSFile($a_target_file="", $a_image_dir="")
write css file to webspace directory
static getSyntaxStylePath()
get syntax style path
colorExists($a_color_name)
Check whether color exists.
static _determineTag($a_type)
getUpToDate()
Get up to date.
removeTemplate($a_t_id)
Remove table template.
getExportSubDir()
The local directory, that will be included within the zip file.
getStyle()
todo: bad style! should return array of objects, not multi-dim-arrays
static _lookupTemplateIdByName($a_style_id, $a_name)
Lookup table template preview.
static _writeActive($a_id, $a_active)
Write active flag.
addTemplate($a_type, $a_name, $a_classes)
Add table template.
setScope($a_scope)
Set scope.
static _getStyleSuperTypeForType($a_type)
updateColor($a_name, $a_new_name, $a_code)
Update color.
static getEffectiveContentStyleId($a_style_id, $a_type="")
Get effective Style Id.
static getContentStylePath($a_style_id)
get content style path
getImages()
Get images of style.
getMediaQueryForId($a_id)
Get media query for id.
static _lookupTemplateName($a_t_id)
Lookup table template name for template ID.
static _writeUpToDate($a_id, $a_up_to_date)
Write up to date.
do_3_10_Migration()
Migrates 3.10 style to 3.11 style.
copyCharacteristic($a_from_style_id, $a_from_type, $a_from_char, $a_to_char)
Copy characteristic.
static isCoreStyle($a_type, $a_class)
Is core style.
static getPlaceHolderStylePath()
get placeholder style path (for Page Layouts)
createImportDirectory()
Create import directory.
deleteCharacteristic($a_type, $a_tag, $a_class)
Delete Characteristic.
getColors()
Get colors of style.
createImagesDirectory()
Create images directory <data_dir>/sty/sty_<id>/images.
getTemplate($a_t_id)
Get template.
assignMetaData(&$a_meta_data)
assign meta data object
setUpToDate($a_up_to_date=true)
Set style up to date (false + update will trigger css generation next time)
static _explodeRGB($a_rgb, $as_dec=false)
Explode an RGB string into an array.
static _getImagesDirectory($a_style_id)
Get images directory.
static _getStyleParameterValues($par)
static _writeScope($a_id, $a_scope)
Write scope.
deleteImage($a_file)
Delete an image.
static _getCoreStyles()
Get core styles.
static _addMissingStyleClassesToAllStyles($a_styles="")
Add missing style classes to all styles todo: add mq_id and custom handling.
static writeStyleUsage($a_obj_id, $a_style_id)
Write style usage.
createExportSubDirectory()
Create export directory.
getXML()
get xml representation of style object todo: add mq_id
static _getStandardStyles($a_exclude_default_style=false, $a_include_deactivated=false, $a_scope=0)
Get standard styles.
static _getBasicStyleDom()
Get basic style dom.
templateExists($a_template_name)
Check whether template exists.
deleteStyleParOfChar($a_type, $a_class)
Delete style parameters of characteristic.
Class ilObject Basic functions for all objects.
getType()
get object type @access public
static _lookupTitle($a_id)
lookup object title
static _getAllReferences($a_id)
get all reference ids of object
getDescription()
get object description
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data@access public
getId()
get object id @access public
static _getObjectsDataForType($a_type, $a_omit_trash=false)
get all objects of a certain type
static _lookupType($a_id, $a_reference=false)
lookup object type
getTitle()
get object title @access public
static getDataDir()
get data directory (outside webspace)
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static getWebspaceDir($mode="filesystem")
get webspace directory
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
static resizeImage($a_from, $a_to, $a_width, $a_height, $a_constrain_prop=false)
resize image
static zip($a_dir, $a_file, $compress_content=false)
static getDir($a_dir, $a_rec=false, $a_sub_dir="")
get directory
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static signFile($path_to_file)
$h
$r
Definition: example_031.php:79
global $ilBench
Definition: ilias.php:18
redirection script todo: (a better solution should control the processing via a xml file)
global $ilSetting
Definition: privfeed.php:17
global $ilErr
Definition: raiseError.php:16
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file
global $ilDB
$a_type
Definition: workflow.php:93