5 require_once
"./Services/Object/classes/class.ilObject.php";
19 public static $num_unit = array(
"px",
"em",
"ex",
"%",
"pt",
"pc",
"in",
"mm",
"cm");
25 "values" => array(
"xx-small",
"x-small",
"small",
"medium",
"large",
"x-large",
"xx-large",
"smaller",
"larger"),
26 "input" =>
"fontsize",
28 "font-family" => array(
32 "font-style" => array(
33 "values" => array(
"italic",
"oblique",
"normal"),
36 "font-weight" => array(
37 "values" => array(
"bold",
"normal",
"bolder",
"lighter"),
40 "font-variant" => array(
41 "values" => array(
"small-caps",
"normal"),
44 "word-spacing" => array(
46 "input" =>
"numeric_no_perc",
48 "letter-spacing" => array(
50 "input" =>
"numeric_no_perc",
52 "text-decoration" => array(
53 "values" => array(
"underline",
"overline",
"line-through",
"blink",
"none"),
56 "text-transform" => array(
57 "values" => array(
"capitalize",
"uppercase",
"lowercase",
"none"),
64 "text-indent" => array(
68 "line-height" => array(
72 "vertical-align" => array(
73 "values" => array(
"top",
"middle",
"bottom",
"baseline",
"sub",
"super",
74 "text-top",
"text-bottom"),
77 "text-align" => array(
78 "values" => array(
"left",
"center",
"right",
"justify"),
81 "white-space" => array(
82 "values" => array(
"normal",
"pre",
"nowrap"),
87 "input" =>
"trbl_numeric",
88 "subpar" => array(
"margin",
"margin-top",
"margin-right",
89 "margin-bottom",
"margin-left"),
90 "group" =>
"margin_and_padding"),
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(
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"),
117 "background-color" => array(
120 "group" =>
"background"),
121 "background-image" => array(
123 "input" =>
"background_image",
124 "group" =>
"background"),
125 "background-repeat" => array(
126 "values" => array(
"repeat",
"repeat-x",
"repeat-y",
"no-repeat"),
128 "group" =>
"background"),
129 "background-attachment" => array(
130 "values" => array(
"fixed",
"scroll"),
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"),
140 "values" => array(
"absolute",
"fixed",
"relative",
"static"),
142 "group" =>
"positioning"),
145 "input" =>
"numeric",
146 "group" =>
"positioning"),
149 "input" =>
"numeric",
150 "group" =>
"positioning"),
153 "input" =>
"numeric",
154 "group" =>
"positioning"),
157 "input" =>
"numeric",
158 "group" =>
"positioning"),
161 "input" =>
"numeric",
162 "group" =>
"positioning"),
165 "input" =>
"numeric",
166 "group" =>
"positioning"),
167 "min-height" => array(
169 "input" =>
"numeric",
170 "group" =>
"positioning"),
172 "values" => array(
"left",
"right",
"none"),
174 "group" =>
"positioning"),
176 "values" => array(
"visible",
"hidden",
"scroll",
"auto"),
178 "group" =>
"positioning"),
181 "input" =>
"percentage",
182 "group" =>
"special"),
183 "transform" => array(
184 "values" => array(
"rotate(90deg)",
"rotate(180deg)",
"rotate(270deg)"),
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"),
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"),
197 "group" =>
"special"),
199 "values" => array(
"both",
"left",
"right",
"none"),
201 "group" =>
"special"),
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"),
210 "list-style-type.ul" => array(
211 "values" => array(
"disc",
"circle",
"square",
215 "list-style-image.ul" => array(
217 "input" =>
"background_image",
219 "list-style-position.ol" => array(
220 "values" => array(
"inside",
"outside"),
223 "list-style-position.ul" => array(
224 "values" => array(
"inside",
"outside"),
228 "border-collapse" => array(
229 "values" => array(
"collapse",
"separate"),
233 "caption-side" => array(
234 "values" => array(
"top",
"bottom",
"left",
"right"),
243 array(
"ol" => array(
"ol"),
"ul" => array(
"ul"),
244 "table" => array(
"table"),
"positioning" => array(
"h1",
"h2",
"h3",
"div",
"img",
"table",
"a",
"figure"));
248 "text_block" => array(
"text_block",
"heading1",
"heading2",
"heading3",
"code_block"),
249 "text_inline" => array(
"text_inline",
"sub",
"sup",
"code_inline"),
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")
271 "text_block",
"text_inline",
"section",
"media_cont",
"table",
"table_cell",
"flist_li",
"table_caption",
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" 280 "table",
"table_cell" 285 "text_block" =>
"div",
289 "code_block" =>
"pre",
290 "text_inline" =>
"span",
291 "code_inline" =>
"code",
297 "table_cell" =>
"td",
298 "table_caption" =>
"caption",
299 "media_cont" =>
"figure",
300 "media_caption" =>
"div",
303 "glo_overlay" =>
"div",
304 "glo_ovtitle" =>
"h1",
305 "glo_ovclink" =>
"a",
306 "glo_ovuglink" =>
"a",
307 "glo_ovuglistlink" =>
"a",
308 "sco_title" =>
"div",
312 "sco_desct" =>
"div",
314 "sco_fmess" =>
"div",
321 "rte_status" =>
"div",
329 "flist_cont" =>
"div",
330 "flist_head" =>
"div",
344 "qlinput" =>
"textarea",
345 "qsubmit" =>
"input",
349 "page_frame" =>
"div",
350 "page_cont" =>
"div",
353 "page_tnav" =>
"div",
354 "page_bnav" =>
"div",
355 "page_lnav" =>
"div",
356 "page_rnav" =>
"div",
357 "page_lnavlink" =>
"a",
358 "page_rnavlink" =>
"a",
359 "page_lnavimage" =>
"img",
360 "page_rnavimage" =>
"img",
361 "page_title" =>
"h1",
366 "va_iheada" =>
"div",
371 "ha_iheada" =>
"div",
382 array(
"a" => array(
"hover"),
"div" => array(
"hover"),
"img" => array(
"hover"));
386 array(
"type" =>
"text_block",
"class" =>
"Standard"),
387 array(
"type" =>
"text_block",
"class" =>
"List"),
388 array(
"type" =>
"text_block",
"class" =>
"TableContent"),
389 array(
"type" =>
"code_block",
"class" =>
"Code"),
390 array(
"type" =>
"heading1",
"class" =>
"Headline1"),
391 array(
"type" =>
"heading2",
"class" =>
"Headline2"),
392 array(
"type" =>
"heading3",
"class" =>
"Headline3"),
393 array(
"type" =>
"text_inline",
"class" =>
"Comment"),
394 array(
"type" =>
"text_inline",
"class" =>
"Emph"),
395 array(
"type" =>
"text_inline",
"class" =>
"Quotation"),
396 array(
"type" =>
"text_inline",
"class" =>
"Strong"),
397 array(
"type" =>
"text_inline",
"class" =>
"Accent"),
398 array(
"type" =>
"text_inline",
"class" =>
"Important"),
399 array(
"type" =>
"code_inline",
"class" =>
"CodeInline"),
400 array(
"type" =>
"sup",
"class" =>
"Sup"),
401 array(
"type" =>
"sub",
"class" =>
"Sub"),
402 array(
"type" =>
"link",
"class" =>
"IntLink"),
403 array(
"type" =>
"link",
"class" =>
"ExtLink"),
404 array(
"type" =>
"link",
"class" =>
"FootnoteLink"),
405 array(
"type" =>
"link",
"class" =>
"FileLink"),
406 array(
"type" =>
"link",
"class" =>
"GlossaryLink"),
407 array(
"type" =>
"media_cont",
"class" =>
"MediaContainer"),
408 array(
"type" =>
"media_cont",
"class" =>
"MediaContainerMax50"),
409 array(
"type" =>
"media_cont",
"class" =>
"MediaContainerFull100"),
410 array(
"type" =>
"table",
"class" =>
"StandardTable"),
411 array(
"type" =>
"media_caption",
"class" =>
"MediaCaption"),
412 array(
"type" =>
"iim",
"class" =>
"ContentPopup"),
413 array(
"type" =>
"marker",
"class" =>
"Marker"),
414 array(
"type" =>
"page_frame",
"class" =>
"PageFrame"),
415 array(
"type" =>
"page_cont",
"class" =>
"PageContainer"),
416 array(
"type" =>
"page",
"class" =>
"Page"),
417 array(
"type" =>
"page_tnav",
"class" =>
"TopNavigation"),
418 array(
"type" =>
"page_bnav",
"class" =>
"BottomNavigation"),
419 array(
"type" =>
"page_lnav",
"class" =>
"LeftNavigation"),
420 array(
"type" =>
"page_rnav",
"class" =>
"RightNavigation"),
421 array(
"type" =>
"page_lnavlink",
"class" =>
"LeftNavigationLink"),
422 array(
"type" =>
"page_rnavlink",
"class" =>
"RightNavigationLink"),
423 array(
"type" =>
"page_lnavimage",
"class" =>
"LeftNavigationImage"),
424 array(
"type" =>
"page_rnavimage",
"class" =>
"RightNavigationImage"),
425 array(
"type" =>
"page_fn",
"class" =>
"Footnote"),
426 array(
"type" =>
"page_title",
"class" =>
"PageTitle"),
427 array(
"type" =>
"glo_overlay",
"class" =>
"GlossaryOverlay"),
428 array(
"type" =>
"glo_ovtitle",
"class" =>
"GlossaryOvTitle"),
429 array(
"type" =>
"glo_ovclink",
"class" =>
"GlossaryOvCloseLink"),
430 array(
"type" =>
"glo_ovuglink",
"class" =>
"GlossaryOvUnitGloLink"),
431 array(
"type" =>
"glo_ovuglistlink",
"class" =>
"GlossaryOvUGListLink"),
432 array(
"type" =>
"sco_title",
"class" =>
"Title"),
433 array(
"type" =>
"sco_desc",
"class" =>
"Description"),
434 array(
"type" =>
"sco_desct",
"class" =>
"DescriptionTop"),
435 array(
"type" =>
"sco_keyw",
"class" =>
"Keywords"),
436 array(
"type" =>
"sco_obj",
"class" =>
"Objective"),
437 array(
"type" =>
"sco_objt",
"class" =>
"ObjectiveTop"),
438 array(
"type" =>
"sco_fmess",
"class" =>
"FinalMessage"),
439 array(
"type" =>
"rte_menu",
"class" =>
"RTEMenu"),
440 array(
"type" =>
"rte_menu",
"class" =>
"RTELogo"),
441 array(
"type" =>
"rte_menu",
"class" =>
"RTELinkBar"),
442 array(
"type" =>
"rte_mlink",
"class" =>
"RTELink"),
443 array(
"type" =>
"rte_mlink",
"class" =>
"RTELinkDisabled"),
444 array(
"type" =>
"rte_tree",
"class" =>
"RTETree"),
445 array(
"type" =>
"rte_node",
"class" =>
"RTECourse"),
446 array(
"type" =>
"rte_node",
"class" =>
"RTEChapter"),
447 array(
"type" =>
"rte_node",
"class" =>
"RTESco"),
448 array(
"type" =>
"rte_node",
"class" =>
"RTEAsset"),
449 array(
"type" =>
"rte_node",
"class" =>
"RTECourseDisabled"),
450 array(
"type" =>
"rte_node",
"class" =>
"RTEChapterDisabled"),
451 array(
"type" =>
"rte_node",
"class" =>
"RTEScoDisabled"),
452 array(
"type" =>
"rte_node",
"class" =>
"RTEAssetDisabled"),
453 array(
"type" =>
"rte_status",
"class" =>
"RTEAsset"),
454 array(
"type" =>
"rte_status",
"class" =>
"RTECompleted"),
455 array(
"type" =>
"rte_status",
"class" =>
"RTENotAttempted"),
456 array(
"type" =>
"rte_status",
"class" =>
"RTERunning"),
457 array(
"type" =>
"rte_status",
"class" =>
"RTEIncomplete"),
458 array(
"type" =>
"rte_status",
"class" =>
"RTEPassed"),
459 array(
"type" =>
"rte_status",
"class" =>
"RTEFailed"),
460 array(
"type" =>
"rte_status",
"class" =>
"RTEBrowsed"),
461 array(
"type" =>
"rte_tlink",
"class" =>
"RTETreeLink"),
462 array(
"type" =>
"rte_tlink",
"class" =>
"RTETreeLinkDisabled"),
463 array(
"type" =>
"rte_tlink",
"class" =>
"RTETreeCurrent"),
464 array(
"type" =>
"rte_tul",
"class" =>
"RTETreeList"),
465 array(
"type" =>
"rte_tli",
"class" =>
"RTETreeItem"),
466 array(
"type" =>
"rte_texp",
"class" =>
"RTETreeExpanded"),
467 array(
"type" =>
"rte_texp",
"class" =>
"RTETreeCollapsed"),
468 array(
"type" =>
"rte_tree",
"class" =>
"RTETreeControl"),
469 array(
"type" =>
"rte_tclink",
"class" =>
"RTETreeControlLink"),
470 array(
"type" =>
"rte_drag",
"class" =>
"RTEDragBar"),
471 array(
"type" =>
"list_o",
"class" =>
"NumberedList"),
472 array(
"type" =>
"list_u",
"class" =>
"BulletedList"),
473 array(
"type" =>
"list_item",
"class" =>
"StandardListItem"),
474 array(
"type" =>
"question",
"class" =>
"Standard"),
475 array(
"type" =>
"question",
"class" =>
"SingleChoice"),
476 array(
"type" =>
"question",
"class" =>
"MultipleChoice"),
477 array(
"type" =>
"question",
"class" =>
"TextQuestion"),
478 array(
"type" =>
"question",
"class" =>
"OrderingQuestion"),
479 array(
"type" =>
"question",
"class" =>
"MatchingQuestion"),
480 array(
"type" =>
"question",
"class" =>
"ImagemapQuestion"),
481 array(
"type" =>
"question",
"class" =>
"ErrorText"),
482 array(
"type" =>
"question",
"class" =>
"TextSubset"),
483 array(
"type" =>
"question",
"class" =>
"ClozeTest"),
484 array(
"type" =>
"qtitle",
"class" =>
"Title"),
485 array(
"type" =>
"qanswer",
"class" =>
"Answer"),
486 array(
"type" =>
"qimg",
"class" =>
"QuestionImage"),
487 array(
"type" =>
"qimgd",
"class" =>
"ImageDetailsLink"),
488 array(
"type" =>
"qordul",
"class" =>
"OrderList"),
489 array(
"type" =>
"qordli",
"class" =>
"OrderListItem"),
490 array(
"type" =>
"qordul",
"class" =>
"OrderListHorizontal"),
491 array(
"type" =>
"qordli",
"class" =>
"OrderListItemHorizontal"),
492 array(
"type" =>
"qetitem",
"class" =>
"ErrorTextItem"),
493 array(
"type" =>
"qetitem",
"class" =>
"ErrorTextSelected"),
494 array(
"type" =>
"qetcorr",
"class" =>
"ErrorTextCorrected"),
495 array(
"type" =>
"qinput",
"class" =>
"TextInput"),
496 array(
"type" =>
"qlinput",
"class" =>
"LongTextInput"),
497 array(
"type" =>
"qsubmit",
"class" =>
"Submit"),
498 array(
"type" =>
"qfeedr",
"class" =>
"FeedbackRight"),
499 array(
"type" =>
"qfeedw",
"class" =>
"FeedbackWrong"),
500 array(
"type" =>
"qover",
"class" =>
"Correct"),
501 array(
"type" =>
"qover",
"class" =>
"Inorrect"),
502 array(
"type" =>
"qover",
"class" =>
"StatusMessage"),
503 array(
"type" =>
"qover",
"class" =>
"WrongAnswersMessage"),
504 array(
"type" =>
"flist_cont",
"class" =>
"FileListContainer"),
505 array(
"type" =>
"flist_head",
"class" =>
"FileListHeading"),
506 array(
"type" =>
"flist",
"class" =>
"FileList"),
507 array(
"type" =>
"flist_li",
"class" =>
"FileListItem"),
508 array(
"type" =>
"flist_a",
"class" =>
"FileListItemLink")
514 "caption" =>
"table_caption",
515 "row_head" =>
"table_cell",
516 "row_foot" =>
"table_cell",
517 "col_head" =>
"table_cell",
518 "col_foot" =>
"table_cell",
519 "odd_row" =>
"table_cell",
520 "even_row" =>
"table_cell",
521 "odd_col" =>
"table_cell",
522 "even_col" =>
"table_cell"),
523 "vaccordion" => array(
524 "va_cntr" =>
"va_cntr",
525 "va_icntr" =>
"va_icntr",
526 "va_ihead" =>
"va_ihead",
527 "va_iheada" =>
"va_iheada",
528 "va_ihcap" =>
"va_ihcap",
529 "va_icont" =>
"va_icont" 531 "haccordion" => array(
532 "ha_cntr" =>
"ha_cntr",
533 "ha_icntr" =>
"ha_icntr",
534 "ha_ihead" =>
"ha_ihead",
535 "ha_iheada" =>
"ha_iheada",
536 "ha_ihcap" =>
"ha_ihcap",
537 "ha_icont" =>
"ha_icont" 540 "ca_cntr" =>
"ca_cntr",
541 "ca_icntr" =>
"ca_icntr",
542 "ca_ihead" =>
"ca_ihead",
543 "ca_icont" =>
"ca_icont" 559 public function __construct($a_id = 0, $a_call_by_reference =
false)
563 $this->db = $DIC->database();
564 $this->lng = $DIC->language();
566 $this->style = array();
567 if ($a_call_by_reference) {
568 $this->
ilias->raiseError(
"Can't instantiate style object via reference id.", $this->
ilias->error_obj->FATAL);
581 return self::$basic_style_zip;
589 $this->
ilias->raiseError(
"Operation ilObjStyleSheet::setRefId() not allowed.", $this->
ilias->error_obj->FATAL);
606 $this->
ilias->raiseError(
"Operation ilObjStyleSheet::putInTree() not allowed.", $this->
ilias->error_obj->FATAL);
614 $this->
ilias->raiseError(
"Operation ilObjStyleSheet::createReference() not allowed.", $this->
ilias->error_obj->FATAL);
622 $this->up_to_date = $a_up_to_date;
630 return $this->up_to_date;
638 $this->scope = $a_scope;
656 $ilDB = $DIC->database();
658 $q =
"UPDATE style_data SET uptodate = " .
659 $ilDB->quote((
int) $a_up_to_date,
"integer") .
660 " WHERE id = " .
$ilDB->quote($a_id,
"integer");
661 $ilDB->manipulate($q);
671 $ilDB = $DIC->database();
673 $q =
"SELECT uptodate FROM style_data " .
674 " WHERE id = " .
$ilDB->quote($a_id,
"integer");
678 return (
boolean) $sty[
"uptodate"];
688 $ilDB = $DIC->database();
690 $q =
"UPDATE style_data SET standard = " .
691 $ilDB->quote((
int) $a_std,
"integer") .
692 " WHERE id = " .
$ilDB->quote($a_id,
"integer");
693 $ilDB->manipulate($q);
703 $ilDB = $DIC->database();
705 $q =
"UPDATE style_data SET category = " .
706 $ilDB->quote((
int) $a_scope,
"integer") .
707 " WHERE id = " .
$ilDB->quote($a_id,
"integer");
708 $ilDB->manipulate($q);
718 $ilDB = $DIC->database();
720 $q =
"SELECT * FROM style_data " .
721 " WHERE id = " .
$ilDB->quote($a_id,
"integer");
725 return (
boolean) $sty[
"standard"];
735 $ilDB = $DIC->database();
737 $q =
"UPDATE style_data SET active = " .
738 $ilDB->quote((
int) $a_active,
"integer") .
739 " WHERE id = " .
$ilDB->quote($a_id,
"integer");
740 $ilDB->manipulate($q);
750 $ilDB = $DIC->database();
752 $q =
"SELECT * FROM style_data " .
753 " WHERE id = " .
$ilDB->quote($a_id,
"integer");
757 return (
boolean) $sty[
"active"];
764 $a_exclude_default_style =
false,
765 $a_include_deactivated =
false,
770 $ilDB = $DIC->database();
772 $tree = $DIC->repositoryTree();
774 $default_style =
$ilSetting->get(
"default_content_style_id");
777 if (!$a_include_deactivated) {
778 $and_str =
" AND active = 1";
781 $q =
"SELECT * FROM style_data " .
782 " WHERE standard = 1" . $and_str;
786 if (!$a_exclude_default_style || $default_style != $sty[
"id"]) {
788 if ($a_scope > 0 && $sty[
"category"] > 0) {
789 if (
$tree->isInTree($sty[
"category"]) &&
790 $tree->isInTree($a_scope)) {
791 $path =
$tree->getPathId($a_scope);
792 if (!in_array($sty[
"category"], $path)) {
813 $ilAccess = $DIC->access();
814 $ilDB = $DIC->database();
816 $clonable_styles = array();
818 $q =
"SELECT * FROM style_data";
819 $style_set =
$ilDB->query($q);
820 while ($style_rec =
$ilDB->fetchAssoc($style_set)) {
822 if ($style_rec[
"standard"] == 1) {
823 if ($style_rec[
"active"] == 1) {
827 include_once(
"./Modules/LearningModule/classes/class.ilObjContentObject.php");
829 if (count($obj_ids) == 0) {
830 $obj_ids = self::lookupObjectForStyle($style_rec[
"id"]);
832 foreach ($obj_ids as
$id) {
835 if ($ilAccess->checkAccess(
"write",
"", $ref_id)) {
842 $clonable_styles[$style_rec[
"id"]] =
847 asort($clonable_styles);
849 return $clonable_styles;
857 $this->meta_data = $a_meta_data;
865 if (!is_object(self::$basic_style_dom)) {
866 self::$basic_style_dom =
new DOMDocument();
867 self::$basic_style_dom->load(self::$basic_style_file);
870 return self::$basic_style_dom;
878 return $this->meta_data;
887 return self::$basic_style_image_dir;
894 public function create($a_from_style = 0, $a_import_mode =
false)
900 if ($a_from_style == 0) {
901 if (!$a_import_mode) {
908 self::$basic_style_image_dir,
913 $q =
"INSERT INTO style_data (id, uptodate, category) VALUES " .
914 "(" .
$ilDB->quote($this->
getId(),
"integer") .
", 0," .
916 $ilDB->manipulate($q);
922 $q =
"SELECT * FROM style_parameter WHERE style_id = " .
923 $ilDB->quote($a_from_style,
"integer");
924 $par_set =
$ilDB->query($q);
925 while ($par_rec =
$ilDB->fetchAssoc($par_set)) {
926 $def[] = array(
"tag" => $par_rec[
"tag"],
"class" => $par_rec[
"class"],
927 "parameter" => $par_rec[
"parameter"],
"value" => $par_rec[
"value"],
928 "type" => $par_rec[
"type"],
"mq_id" => $par_rec[
"mq_id"],
"custom" => $par_rec[
"custom"]);
933 $q =
"SELECT * FROM style_char WHERE style_id = " .
934 $ilDB->quote($a_from_style,
"integer");
935 $par_set =
$ilDB->query($q);
936 while ($par_rec =
$ilDB->fetchAssoc($par_set)) {
937 $chars[] = array(
"type" => $par_rec[
"type"],
"characteristic" => $par_rec[
"characteristic"]);
943 $mqs = $from_style->getMediaQueries();
944 $mq_mapping = array();
945 foreach ($mqs as $mq) {
947 $mq_mapping[$mq[
"id"]] = $nid;
951 foreach ($def as $sty) {
952 $id =
$ilDB->nextId(
"style_parameter");
953 $q =
"INSERT INTO style_parameter (id, style_id, tag, class, parameter, value, type, mq_id, custom) VALUES " .
955 $ilDB->quote(
$id,
"integer") .
"," .
956 $ilDB->quote($this->
getId(),
"integer") .
"," .
957 $ilDB->quote($sty[
"tag"],
"text") .
"," .
958 $ilDB->quote($sty[
"class"],
"text") .
"," .
959 $ilDB->quote($sty[
"parameter"],
"text") .
"," .
960 $ilDB->quote($sty[
"value"],
"text") .
"," .
961 $ilDB->quote($sty[
"type"],
"text") .
"," .
962 $ilDB->quote((
int) $mq_mapping[$sty[
"mq_id"]],
"integer") .
"," .
963 $ilDB->quote($sty[
"custom"],
"integer") .
965 $ilDB->manipulate($q);
969 foreach ($chars as $char) {
970 $q =
"INSERT INTO style_char (style_id, type, characteristic) VALUES " .
971 "(" .
$ilDB->quote($this->
getId(),
"integer") .
"," .
972 $ilDB->quote($char[
"type"],
"text") .
"," .
973 $ilDB->quote($char[
"characteristic"],
"text") .
")";
974 $ilDB->manipulate($q);
978 $q =
"INSERT INTO style_data (id, uptodate, category) VALUES " .
979 "(" .
$ilDB->quote($this->
getId(),
"integer") .
", 0," .
981 $ilDB->manipulate($q);
986 $from_style->getImagesDirectory(),
991 $colors = $from_style->getColors();
992 foreach ($colors as
$c) {
993 $this->
addColor($c[
"name"], $c[
"code"]);
998 foreach ($tcts as $tct => $v) {
1001 $this->
addTemplate($tct, $t[
"name"], $t[
"classes"]);
1007 if (!$a_import_mode) {
1021 if (empty(
$core_styles[$a_type .
"." . $a_tag .
"." . $a_class])) {
1023 $st =
$ilDB->manipulateF(
1024 "DELETE FROM style_char WHERE style_id = %s AND type = %s AND characteristic = %s",
1025 array(
"integer",
"text",
"text"),
1026 array($this->
getId(), $a_type, $a_class)
1030 $st =
$ilDB->manipulateF(
1031 "DELETE FROM style_parameter WHERE style_id = %s AND tag = %s AND type = %s AND class = %s",
1032 array(
"integer",
"text",
"text",
"text"),
1033 array($this->
getId(), $a_tag, $a_type, $a_class)
1048 $set =
$ilDB->queryF(
1049 "SELECT style_id FROM style_char WHERE style_id = %s AND characteristic = %s AND type = %s",
1050 array(
"integer",
"text",
"text"),
1051 array($this->
getId(), $a_char, $a_style_type)
1053 if ($rec =
$ilDB->fetchAssoc($set)) {
1068 "INSERT INTO style_char (style_id, type, characteristic, hide)" .
1069 " VALUES (%s,%s,%s,%s) ",
1070 array(
"integer",
"text",
"text",
"integer"),
1071 array($this->
getId(), $a_type, $a_char, $a_hidden)
1100 $pars = $from_style->getParametersOfClass($a_from_type, $a_from_char);
1103 foreach ($pars as $p => $v) {
1104 if (substr($v, 0, 1) ==
"!") {
1105 $colors[] = substr($v, 1);
1117 foreach ($colors as
$c) {
1119 $this->
addColor($c, $from_style->getColorCodeForName($c));
1131 if ($a_type ==
"") {
1132 $chars = $this->chars;
1134 if (is_array($this->chars_by_type[$a_type])) {
1135 foreach ($this->chars_by_type[$a_type] as
$c) {
1136 if ($a_include_core || !self::isCoreStyle($a_type, $c)) {
1143 foreach ($chars as $k => $char) {
1144 if ($a_type ==
"" && $this->hidden_chars[$char[
"type"] .
":" . $char[
"class"]]) {
1146 } elseif ($this->hidden_chars[$a_type .
":" . $char]) {
1160 $this->chars = $a_chars;
1172 "UPDATE style_char SET " .
1173 " hide = " .
$ilDB->quote((
int) $a_hide,
"integer") .
1174 " WHERE style_id = " .
$ilDB->quote($this->
getId(),
"integer") .
" AND " .
1175 " type = " .
$ilDB->quote($a_type,
"text") .
" AND " .
1176 " characteristic = " .
$ilDB->quote($a_char,
"text")
1187 $set =
$ilDB->query(
1188 "SELECT hide FROM style_char " .
1189 " WHERE style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" AND " .
1190 " type = " .
$ilDB->quote($a_type,
"text") .
" AND " .
1191 " characteristic = " .
$ilDB->quote($a_char,
"text")
1193 $rec =
$ilDB->fetchAssoc($set);
1195 return $rec[
"hide"];
1208 $lng->loadLanguageModule(
"style");
1211 $new_obj->setTitle($this->
getTitle() .
" (" .
$lng->txt(
"sty_acopy") .
")");
1212 $new_obj->setType($this->
getType());
1214 $new_obj->create($this->
getId());
1216 $new_obj->writeStyleSetting(
1217 "disable_auto_margins",
1221 return $new_obj->getId();
1241 public function addParameter($a_tag, $a_par, $a_type, $a_mq_id = 0, $a_custom =
false)
1246 $tag = explode(
".", $a_tag);
1247 $value = $avail_params[$a_par][0];
1248 $id =
$ilDB->nextId(
"style_parameter");
1249 $q =
"INSERT INTO style_parameter (id,style_id, type, tag, class, parameter, value, mq_id, custom) VALUES " .
1251 $ilDB->quote(
$id,
"integer") .
"," .
1252 $ilDB->quote($this->
getId(),
"integer") .
"," .
1253 $ilDB->quote($a_type,
"text") .
"," .
1254 $ilDB->quote($tag[0],
"text") .
"," .
1255 $ilDB->quote($tag[1],
"text") .
"," .
1256 $ilDB->quote($a_par,
"text") .
"," .
1257 $ilDB->quote($value,
"text") .
"," .
1258 $ilDB->quote($a_mq_id,
"integer") .
"," .
1259 $ilDB->quote($a_custom,
"integer") .
1261 $ilDB->manipulate($q);
1287 if (!is_writable($sty_data_dir)) {
1288 $ilErr->raiseError(
"Style data directory (" . $sty_data_dir
1289 .
") not writeable.",
$ilErr->FATAL);
1292 $style_dir = $sty_data_dir .
"/sty_" . $a_style_id;
1294 if (!@is_dir($style_dir)) {
1295 $ilErr->raiseError(
"Creation of style directory failed (" .
1296 $style_dir .
").",
$ilErr->FATAL);
1300 $im_dir = $style_dir .
"/images";
1302 if (!@is_dir($im_dir)) {
1303 $ilErr->raiseError(
"Creation of Import Directory failed (" .
1304 $im_dir .
").",
$ilErr->FATAL);
1308 $thumb_dir = $style_dir .
"/images/thumbnails";
1310 if (!@is_dir($thumb_dir)) {
1311 $ilErr->raiseError(
"Creation of Import Directory failed (" .
1312 $thumb_dir .
").",
$ilErr->FATAL);
1351 foreach ($entries as $entry) {
1352 if (substr($entry[
"entry"], 0, 1) ==
".") {
1355 if ($entry[
"type"] !=
"dir") {
1371 $a_file[
"tmp_name"],
1405 $q =
"DELETE FROM style_parameter WHERE id = " .
1406 $ilDB->quote($a_id,
"integer");
1419 public function deleteStylePar($a_tag, $a_class, $a_par, $a_type, $a_mq_id = 0, $a_custom =
false)
1423 $q =
"DELETE FROM style_parameter WHERE " .
1424 " style_id = " .
$ilDB->quote($this->
getId(),
"integer") .
" AND " .
1425 " tag = " .
$ilDB->quote($a_tag,
"text") .
" AND " .
1426 " class = " .
$ilDB->quote($a_class,
"text") .
" AND " .
1427 " mq_id = " .
$ilDB->quote($a_mq_id,
"integer") .
" AND " .
1428 " custom = " .
$ilDB->quote($a_custom,
"integer") .
" AND " .
1429 " " .
$ilDB->equals(
"type", $a_type,
"text",
true) .
" AND " .
1430 " parameter = " .
$ilDB->quote($a_par,
"text");
1432 $ilDB->manipulate($q);
1448 $q =
"DELETE FROM style_parameter WHERE " .
1449 " style_id = " .
$ilDB->quote($this->
getId(),
"integer") .
" AND " .
1450 " tag = " .
$ilDB->quote($a_tag,
"text") .
" AND " .
1451 " class = " .
$ilDB->quote($a_class,
"text") .
" AND " .
1452 " mq_id = " .
$ilDB->quote($a_mq_id,
"integer") .
" AND " .
1453 " custom = " .
$ilDB->quote(1,
"integer") .
" AND " .
1454 " " .
$ilDB->equals(
"type", $a_type,
"text",
true);
1456 $ilDB->manipulate($q);
1471 $q =
"DELETE FROM style_parameter WHERE " .
1472 " style_id = " .
$ilDB->quote($this->
getId(),
"integer") .
" AND " .
1473 " class = " .
$ilDB->quote($a_class,
"text") .
" AND " .
1474 " " .
$ilDB->equals(
"type", $a_type,
"text",
true);
1476 $ilDB->manipulate($q);
1483 public function delete()
1491 $def_style = $this->
ilias->getSetting(
"default_content_style_id");
1492 if ($def_style == $this->
getId()) {
1493 $this->
ilias->deleteSetting(
"default_content_style_id");
1497 $fixed_style = $this->
ilias->getSetting(
"fixed_content_style_id");
1498 if ($fixed_style == $this->
getId()) {
1499 $this->
ilias->deleteSetting(
"fixed_content_style_id");
1503 $q =
"DELETE FROM style_parameter WHERE style_id = " .
1505 $ilDB->manipulate($q);
1509 if (is_file($css_file_name)) {
1510 unlink($css_file_name);
1515 "DELETE FROM sty_media_query WHERE " .
1516 " style_id = " .
$ilDB->quote($this->getId(),
"integer")
1520 include_once(
"./Modules/LearningModule/classes/class.ilObjContentObject.php");
1524 $q =
"DELETE FROM style_data WHERE id = " .
1526 $ilDB->manipulate($q);
1539 $q =
"SELECT * FROM style_parameter WHERE style_id = " .
1540 $ilDB->quote($this->
getId(),
"integer") .
" ORDER BY tag, class, type, mq_id ";
1541 $style_set =
$ilDB->query($q);
1546 $this->style = array();
1550 $this->end_styles = array();
1551 while ($style_rec =
$ilDB->fetchAssoc($style_set)) {
1552 if ($style_rec[
"tag"] != $ctag || $style_rec[
"class"] != $cclass
1553 || $style_rec[
"type"] != $ctype || $style_rec[
"mq_id"] != $cmq_id) {
1555 if (is_array($tag)) {
1556 if (in_array($ctype, array(
"ha_iheada",
"va_iheada"))) {
1557 $this->end_styles[] = $tag;
1559 $this->style[] = $tag;
1564 $ctag = $style_rec[
"tag"];
1565 $cclass = $style_rec[
"class"];
1566 $ctype = $style_rec[
"type"];
1567 $cmq_id = $style_rec[
"mq_id"];
1568 $tag[] = $style_rec;
1570 $this->style_class[$ctype][$cclass][$cmq_id][$style_rec[
"parameter"]] = $style_rec[
"value"];
1572 if (is_array($tag)) {
1573 $this->style[] = $tag;
1575 foreach ($this->end_styles as $s) {
1576 $this->style[] = $s;
1579 $q =
"SELECT * FROM style_data WHERE id = " .
1587 $this->chars = array();
1588 $this->chars_by_type = array();
1589 $q =
"SELECT * FROM style_char WHERE style_id = " .
1591 " ORDER BY type ASC, characteristic ASC";
1592 $par_set =
$ilDB->query($q);
1593 while ($par_rec =
$ilDB->fetchAssoc($par_set)) {
1594 $this->chars[] = array(
"type" => $par_rec[
"type"],
"class" => $par_rec[
"characteristic"],
"hide" => $par_rec[
"hide"]);
1595 $this->chars_by_type[$par_rec[
"type"]][] = $par_rec[
"characteristic"];
1596 if ($par_rec[
"hide"]) {
1597 $this->hidden_chars[$par_rec[
"type"] .
":" . $par_rec[
"characteristic"]] =
true;
1614 if ($a_target_file ==
"") {
1617 $css_file_name = $a_target_file;
1619 $css_file = fopen($css_file_name,
"w");
1621 $page_background =
"";
1623 $mqs = array(array(
"mquery" =>
"",
"id" => 0));
1629 foreach ($mqs as $mq) {
1630 if ($mq[
"id"] > 0) {
1631 fwrite($css_file,
"@media " . $mq[
"mquery"] .
" {\n");
1634 foreach (
$style as $tag) {
1635 if ($tag[0][
"mq_id"] != $mq[
"id"]) {
1638 fwrite($css_file, $tag[0][
"tag"] .
".ilc_" . $tag[0][
"type"] .
"_" . $tag[0][
"class"] .
"\n");
1641 if ($tag[0][
"tag"] ==
"td") {
1642 fwrite($css_file,
",th" .
".ilc_" . $tag[0][
"type"] .
"_" . $tag[0][
"class"] .
"\n");
1644 if (in_array($tag[0][
"tag"], array(
"h1",
"h2",
"h3"))) {
1645 fwrite($css_file,
",div.ilc_text_block_" . $tag[0][
"class"] .
"\n");
1646 fwrite($css_file,
",html.il-no-tiny-bg body#tinymce.ilc_text_block_" . $tag[0][
"class"] .
"\n");
1648 if ($tag[0][
"type"] ==
"section") {
1649 fwrite($css_file,
",a.ilc_" . $tag[0][
"type"] .
"_" . $tag[0][
"class"] .
"\n");
1651 if ($tag[0][
"type"] ==
"text_block") {
1652 fwrite($css_file,
",html.il-no-tiny-bg body#tinymce.ilc_text_block_" . $tag[0][
"class"] .
"\n");
1654 fwrite($css_file,
"{\n");
1657 $t_border = array();
1659 foreach ($tag as $par) {
1660 $cur_par = $par[
"parameter"];
1661 $cur_val = $par[
"value"];
1664 if (is_int(strpos($cur_par,
"color")) && substr(trim($cur_val), 0, 1) ==
"!") {
1668 if ($tag[0][
"type"] ==
"table" && is_int(strpos($par[
"parameter"],
"border"))) {
1669 $t_border[$cur_par] = $cur_val;
1672 if (in_array($cur_par, array(
"background-image",
"list-style-image"))) {
1673 if (is_int(strpos($cur_val,
"/"))) {
1674 $cur_val =
"url(" . $cur_val .
")";
1676 if ($a_image_dir ==
"") {
1677 $cur_val =
"url(../sty/sty_" . $this->
getId() .
"/images/" . $cur_val .
")";
1679 $cur_val =
"url(" . $a_image_dir .
"/" . $cur_val .
")";
1684 if ($cur_par ==
"opacity") {
1685 $cur_val = ((int) $cur_val) / 100;
1688 fwrite($css_file,
"\t" . $cur_par .
": " . $cur_val .
";\n");
1698 if ($cur_par ==
"opacity") {
1699 fwrite($css_file,
"\t" .
'-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=' . ($cur_val * 100) .
')"' .
";\n");
1700 fwrite($css_file,
"\t" .
'filter: alpha(opacity=' . ($cur_val * 100) .
')' .
";\n");
1701 fwrite($css_file,
"\t" .
'-moz-opacity: ' . $cur_val .
";\n");
1705 if ($cur_par ==
"transform") {
1706 fwrite($css_file,
"\t" .
'-webkit-transform: ' . $cur_val .
";\n");
1707 fwrite($css_file,
"\t" .
'-moz-transform: ' . $cur_val .
";\n");
1708 fwrite($css_file,
"\t" .
'-ms-transform: ' . $cur_val .
";\n");
1712 if ($cur_par ==
"transform-origin") {
1713 fwrite($css_file,
"\t" .
'-webkit-transform-origin: ' . $cur_val .
";\n");
1714 fwrite($css_file,
"\t" .
'-moz-transform-origin: ' . $cur_val .
";\n");
1715 fwrite($css_file,
"\t" .
'-ms-transform-origin: ' . $cur_val .
";\n");
1719 if ($tag[0][
"tag"] ==
"div" && $tag[0][
"class"] ==
"Page" 1720 && $cur_par ==
"background-color") {
1721 $page_background = $cur_val;
1724 fwrite($css_file,
"}\n");
1725 fwrite($css_file,
"\n");
1745 if ($page_background !=
"") {
1746 fwrite($css_file,
"td.ilc_Page\n");
1747 fwrite($css_file,
"{\n");
1748 fwrite($css_file,
"\t" .
"background-color: " . $page_background .
";\n");
1749 fwrite($css_file,
"}\n");
1751 if ($mq[
"id"] > 0) {
1752 fwrite($css_file,
"}\n");
1774 $fixed_style =
$ilSetting->get(
"fixed_content_style_id");
1775 if ($fixed_style > 0) {
1776 $a_style_id = $fixed_style;
1780 if ($a_style_id <= 0) {
1781 $a_style_id =
$ilSetting->get(
"default_content_style_id");
1799 if (is_array($this->style_class[$a_type][$a_class][$a_mq_id])) {
1800 return $this->style_class[$a_type][$a_class][$a_mq_id];
1816 $random = new \ilRandom();
1817 $rand = $random->int(1, 999999);
1821 $fixed_style =
$ilSetting->get(
"fixed_content_style_id");
1822 if ($fixed_style > 0) {
1823 $a_style_id = $fixed_style;
1827 if ($a_style_id <= 0) {
1828 $a_style_id =
$ilSetting->get(
"default_content_style_id");
1840 $path .=
"?dummy=$rand";
1843 require_once(
'./Services/WebAccessChecker/classes/class.ilWACSignedPath.php');
1849 return "./Services/COPage/css/content.css";
1860 return "./Services/COPage/css/print_content.css";
1870 return "./Services/COPage/css/syntaxhighlight.css";
1880 return "./Services/COPage/css/placeholder.css";
1891 $q =
"UPDATE style_data " .
1892 "SET category = " .
$ilDB->quote((
int) $this->
getScope(),
"integer") .
1893 " WHERE id = " .
$ilDB->quote($this->
getId(),
"integer");
1894 $ilDB->manipulate($q);
1907 $q =
"UPDATE style_parameter SET VALUE = " .
1908 $ilDB->quote($a_value,
"text") .
" WHERE id = " .
1909 $ilDB->quote($a_id,
"integer");
1910 $style_set =
$ilDB->manipulate($q);
1918 public function replaceStylePar($a_tag, $a_class, $a_par, $a_val, $a_type, $a_mq_id = 0, $a_custom =
false)
1923 public static function _replaceStylePar($style_id, $a_tag, $a_class, $a_par, $a_val, $a_type, $a_mq_id = 0, $a_custom =
false)
1927 $ilDB = $DIC->database();
1929 $q =
"SELECT * FROM style_parameter WHERE " .
1930 " style_id = " .
$ilDB->quote($style_id,
"integer") .
" AND " .
1931 " tag = " .
$ilDB->quote($a_tag,
"text") .
" AND " .
1932 " class = " .
$ilDB->quote($a_class,
"text") .
" AND " .
1933 " mq_id = " .
$ilDB->quote($a_mq_id,
"integer") .
" AND " .
1934 " custom = " .
$ilDB->quote($a_custom,
"integer") .
" AND " .
1935 " " .
$ilDB->equals(
"type", $a_type,
"text",
true) .
" AND " .
1936 " parameter = " .
$ilDB->quote($a_par,
"text");
1938 $set =
$ilDB->query($q);
1940 if ($rec = $set->fetchRow()) {
1941 $q =
"UPDATE style_parameter SET " .
1942 " value = " .
$ilDB->quote($a_val,
"text") .
" WHERE " .
1943 " style_id = " .
$ilDB->quote($style_id,
"integer") .
" AND " .
1944 " tag = " .
$ilDB->quote($a_tag,
"text") .
" AND " .
1945 " class = " .
$ilDB->quote($a_class,
"text") .
" AND " .
1946 " mq_id = " .
$ilDB->quote($a_mq_id,
"integer") .
" AND " .
1947 " custom = " .
$ilDB->quote($a_custom,
"integer") .
" AND " .
1948 " " .
$ilDB->equals(
"type", $a_type,
"text",
true) .
" AND " .
1949 " parameter = " .
$ilDB->quote($a_par,
"text");
1951 $ilDB->manipulate($q);
1953 $id =
$ilDB->nextId(
"style_parameter");
1954 $q =
"INSERT INTO style_parameter (id, value, style_id, tag, class, type, parameter, mq_id, custom) VALUES " .
1956 $ilDB->quote(
$id,
"integer") .
"," .
1957 $ilDB->quote($a_val,
"text") .
"," .
1958 " " .
$ilDB->quote($style_id,
"integer") .
"," .
1959 " " .
$ilDB->quote($a_tag,
"text") .
"," .
1960 " " .
$ilDB->quote($a_class,
"text") .
"," .
1961 " " .
$ilDB->quote($a_type,
"text") .
"," .
1962 " " .
$ilDB->quote($a_par,
"text") .
"," .
1963 " " .
$ilDB->quote($a_mq_id,
"integer") .
"," .
1964 " " .
$ilDB->quote($a_custom,
"integer") .
1967 $ilDB->manipulate($q);
1985 $this->style = $a_style;
1997 return str_replace(
"&",
"&", $a_str);
2006 $xml .=
"<StyleSheet>\n";
2013 foreach ($this->chars as $char) {
2015 "\" Type=\"" . $char[
"type"] .
"\" Class=\"" . $char[
"class"] .
"\">\n";
2016 foreach ($this->style as
$style) {
2017 if ($style[0][
"type"] == $char[
"type"] && $style[0][
"class"] == $char[
"class"]) {
2018 foreach ($style as $tag) {
2019 $xml .=
"<StyleParameter Name=\"" . $tag[
"parameter"] .
"\" Value=\"" . $tag[
"value"] .
"\" Custom=\"" . $tag[
"custom"] .
"\" />\n";
2023 $xml .=
"</Style>\n";
2027 foreach ($this->
getColors() as $color) {
2028 $xml .=
"<StyleColor Name=\"" . $color[
"name"] .
"\" Code=\"" . $color[
"code"] .
"\"/>\n";
2033 foreach ($tcts as $tct => $v) {
2036 foreach ($ts as $t) {
2037 $xml .=
"<StyleTemplate Type=\"" . $tct .
"\" Name=\"" . $t[
"name"] .
"\">\n";
2038 foreach ($t[
"classes"] as $ct =>
$c) {
2040 $xml .=
"<StyleTemplateClass ClassType=\"" . $ct .
"\" Class=\"" .
$c .
"\"/>\n";
2043 $xml .=
"</StyleTemplate>\n";
2048 $xml .=
"</StyleSheet>";
2061 if (!is_writable($sty_data_dir)) {
2062 $this->
ilias->raiseError(
"Style data directory (" . $sty_data_dir
2063 .
") not writeable.", $this->
ilias->error_obj->FATAL);
2066 $style_dir = $sty_data_dir .
"/sty_" . $this->
getId();
2068 if (!@is_dir($style_dir)) {
2069 $this->
ilias->raiseError(
"Creation of style directory failed (" .
2070 $style_dir .
").", $this->
ilias->error_obj->FATAL);
2074 $ex_dir = $style_dir .
"/export";
2076 if (!@is_dir($ex_dir)) {
2077 $this->
ilias->raiseError(
"Creation of Import Directory failed (" .
2078 $ex_dir .
").", $this->
ilias->error_obj->FATAL);
2090 $style_dir = $sty_data_dir .
"/sty_" . $this->
getId();
2092 $ex_dir = $style_dir .
"/export";
2094 if (is_dir($ex_dir)) {
2108 if (!is_writable($ex_sub_dir)) {
2109 $this->
ilias->raiseError(
"Style data directory (" . $ex_sub_dir
2110 .
") not writeable.", $this->
ilias->error_obj->FATAL);
2112 $ex_sub_images_dir = $ex_sub_dir .
"/images";
2114 if (!is_writable($ex_sub_images_dir)) {
2115 $this->
ilias->raiseError(
"Style data directory (" . $ex_sub_images_dir
2116 .
") not writeable.", $this->
ilias->error_obj->FATAL);
2125 $this->export_sub_dir = $a_dir;
2133 if ($this->export_sub_dir ==
"") {
2134 return "sty_" . $this->
getId();
2136 return $this->export_sub_dir;
2172 $file = $a_dir .
"/style.xml";
2175 if (!($fp = @fopen($file,
"w"))) {
2176 die(
"<b>Error</b>: Could not open \"" . $file .
"\" for writing" .
2177 " in <b>" . __FILE__ .
"</b> on line <b>" . __LINE__ .
"</b><br />");
2184 fwrite($fp, $this->
getXML());
2197 if (!is_writable($sty_data_dir)) {
2198 $this->
ilias->raiseError(
"Style data directory (" . $sty_data_dir
2199 .
") not writeable.", $this->
ilias->error_obj->FATAL);
2202 $style_dir = $sty_data_dir .
"/sty_" . $this->
getId();
2204 if (!@is_dir($style_dir)) {
2205 $this->
ilias->raiseError(
"Creation of style directory failed (" .
2206 $style_dir .
").", $this->
ilias->error_obj->FATAL);
2210 $im_dir = $style_dir .
"/import";
2212 if (!@is_dir($im_dir)) {
2213 $this->
ilias->raiseError(
"Creation of Import Directory failed (" .
2214 $im_dir .
").", $this->
ilias->error_obj->FATAL);
2223 public function import($a_file)
2230 if (is_array($a_file)) {
2232 $a_file[
"tmp_name"],
2234 $im_dir .
"/" . $a_file[
"name"]
2236 $file_name = $a_file[
"name"];
2238 $pi = pathinfo($a_file);
2239 $file_name = $pi[
"basename"];
2240 copy($a_file, $im_dir .
"/" . $file_name);
2242 $file = pathinfo($file_name);
2245 if (strtolower($file[
"extension"] ==
"zip")) {
2247 $subdir = basename($file[
"basename"],
"." . $file[
"extension"]);
2248 if (!is_dir($im_dir .
"/" . $subdir)) {
2251 $xml_file = $im_dir .
"/" . $subdir .
"/style.xml";
2253 $xml_file = $im_dir .
"/" . $file_name;
2262 if (is_dir($im_dir .
"/" . $subdir .
"/images")) {
2264 $im_dir .
"/" . $subdir .
"/images",
2282 $this->is_3_10_skin =
false;
2284 if (!$a_skip_parent_create) {
2287 include_once(
"./Services/Style/Content/classes/class.ilStyleImportParser.php");
2289 $importParser->startParsing();
2292 foreach ($this->style as
$style) {
2293 foreach ($style as $tag) {
2294 $id =
$ilDB->nextId(
"style_parameter");
2297 if (in_array($tag[
"class"], array(
"PageFrame",
"PageContainer")) &&
2298 $tag[
"tag"] ==
"table") {
2299 $tag[
"tag"] =
"div";
2300 if ($tag[
"parameter"] ==
"width" && $tag[
"value"] ==
"100%") {
2305 $q =
"INSERT INTO style_parameter (id,style_id, tag, class, parameter, type, value, custom) VALUES " .
2307 $ilDB->quote(
$id,
"integer") .
"," .
2308 $ilDB->quote($this->
getId(),
"integer") .
"," .
2309 $ilDB->quote($tag[
"tag"],
"text") .
"," .
2310 $ilDB->quote($tag[
"class"],
"text") .
"," .
2311 $ilDB->quote($tag[
"parameter"],
"text") .
"," .
2312 $ilDB->quote($tag[
"type"],
"text") .
"," .
2313 $ilDB->quote($tag[
"value"],
"text") .
"," .
2314 $ilDB->quote((
bool) $tag[
"custom"],
"integer") .
2316 $ilDB->manipulate($q);
2321 $this->is_3_10_skin =
true;
2322 if (is_array($this->chars)) {
2323 foreach ($this->chars as $char) {
2324 if ($char[
"type"] !=
"") {
2325 $s = substr($char[
"class"], strlen($char[
"class"]) - 6);
2326 if ($s !=
":hover") {
2330 "style_id" => array(
"integer", $this->
getId()),
2331 "type" => array(
"text", $char[
"type"]),
2332 "characteristic" => array(
"text", $char[
"class"])),
2333 array(
"hide" => array(
"integer", 0))
2341 $this->is_3_10_skin =
false;
2348 $q =
"INSERT INTO style_data (id, uptodate) VALUES " .
2349 "(" .
$ilDB->quote($this->
getId(),
"integer") .
", 0)";
2350 $ilDB->manipulate($q);
2355 if ($this->is_3_10_skin) {
2368 foreach (self::$parameter as
$parameter => $props) {
2376 $input = self::$parameter[$par][
"input"];
2382 $subpar = self::$parameter[$par][
"subpar"];
2389 return self::$parameter;
2392 foreach (self::$parameter as $k => $v) {
2393 if (is_array(self::$filtered_groups[$v[
"group"]]) &&
2394 !in_array($a_tag, self::$filtered_groups[$v[
"group"]])) {
2404 return self::$filtered_groups;
2409 if ($a_no_percentage) {
2410 return self::$num_unit_no_perc;
2412 return self::$num_unit;
2417 return self::$parameter[$par][
"values"];
2427 return self::$style_super_types;
2432 return in_array($a_type, self::$expandable_types);
2437 return in_array($a_type, self::$hideable_types);
2442 foreach (self::$style_super_types as $s => $t) {
2443 if (in_array($a_type, $t)) {
2446 if ($a_type == $s) {
2457 $c_styles = array();
2458 foreach (self::$core_styles as $cstyle) {
2460 = array(
"type" => $cstyle[
"type"],
2462 "class" => $cstyle[
"class"]);
2475 foreach (self::$core_styles as $s) {
2476 if ($s[
"type"] == $a_type && $s[
"class"] == $a_class) {
2489 if ($a_template_type ==
"") {
2490 return self::$templates;
2493 return self::$templates[$a_template_type];
2499 return self::$pseudo_classes[$tag];
2504 return self::$templates[$t][$k];
2509 return self::$assigned_tags[$a_type];
2518 foreach (self::$parameter as $p => $v) {
2519 $pars[$p] = $v[
"values"];
2531 $styles = array(array(
"id" => $a_id));
2543 $ilDB = $DIC->database();
2545 if ($a_styles ==
"") {
2548 $styles = $a_styles;
2554 $core_images = array();
2555 $core_dir = self::$basic_style_image_dir;
2556 if (is_dir($core_dir)) {
2557 $dir = opendir($core_dir);
2558 while ($file = readdir($dir)) {
2559 if (substr($file, 0, 1) !=
"." && is_file($core_dir .
"/" . $file)) {
2560 $core_images[] = $file;
2565 foreach ($styles as
$style) {
2570 $set =
$ilDB->queryF(
2571 "SELECT * FROM style_char WHERE style_id = %s " .
2572 "AND type = %s AND characteristic = %s",
2573 array(
"integer",
"text",
"text"),
2574 array(
$id, $cs[
"type"], $cs[
"class"])
2578 if (!($rec =
$ilDB->fetchAssoc($set))) {
2580 "INSERT INTO style_char (style_id, type, characteristic) " .
2581 " VALUES (%s,%s,%s) ",
2582 array(
"integer",
"text",
"text"),
2583 array(
$id, $cs[
"type"], $cs[
"class"])
2586 $xpath =
new DOMXPath($bdom);
2587 $par_nodes = $xpath->query(
"/StyleSheet/Style[@Tag = '" . $cs[
"tag"] .
"' and @Type='" .
2588 $cs[
"type"] .
"' and @Class='" . $cs[
"class"] .
"']/StyleParameter");
2589 foreach ($par_nodes as $par_node) {
2591 $set =
$ilDB->queryF(
2592 "SELECT * FROM style_parameter WHERE style_id = %s " .
2593 "AND type = %s AND class = %s AND tag = %s AND parameter = %s",
2594 array(
"integer",
"text",
"text",
"text",
"text"),
2595 array(
$id, $cs[
"type"], $cs[
"class"],
2596 $cs[
"tag"], $par_node->getAttribute(
"Name"))
2600 if (!($rec =
$ilDB->fetchAssoc($set))) {
2601 $spid =
$ilDB->nextId(
"style_parameter");
2602 $st =
$ilDB->manipulateF(
2603 "INSERT INTO style_parameter (id, style_id, type, class, tag, parameter, value) " .
2604 " VALUES (%s,%s,%s,%s,%s,%s,%s)",
2605 array(
"integer",
"integer",
"text",
"text",
"text",
"text",
"text"),
2606 array($spid,
$id, $cs[
"type"], $cs[
"class"], $cs[
"tag"],
2607 $par_node->getAttribute(
"Name"), $par_node->getAttribute(
"Value"))
2617 reset($core_images);
2618 foreach ($core_images as $cim) {
2619 if (!is_file($imdir .
"/" . $cim)) {
2620 copy($core_dir .
"/" . $cim, $imdir .
"/" . $cim);
2645 $st =
$ilDB->prepareManip(
"UPDATE style_char SET type = ? WHERE characteristic = ?" .
2646 " AND style_id = ? ", array(
"text",
"text",
"integer"));
2647 $ilDB->execute($st, array(
"media_cont",
"Media", $this->
getId()));
2648 $ilDB->execute($st, array(
"media_caption",
"MediaCaption", $this->
getId()));
2649 $ilDB->execute($st, array(
"page_fn",
"Footnote", $this->
getId()));
2650 $ilDB->execute($st, array(
"page_nav",
"LMNavigation", $this->
getId()));
2651 $ilDB->execute($st, array(
"page_title",
"PageTitle", $this->
getId()));
2652 $ilDB->execute($st, array(
"page_cont",
"Page", $this->
getId()));
2655 $st =
$ilDB->prepareManip(
"UPDATE style_parameter SET type = ? WHERE class = ?" .
2656 " AND style_id = ? ", array(
"text",
"text",
"integer"));
2657 $ilDB->execute($st, array(
"media_cont",
"Media", $this->
getId()));
2658 $ilDB->execute($st, array(
"media_caption",
"MediaCaption", $this->
getId()));
2659 $ilDB->execute($st, array(
"page_fn",
"Footnote", $this->
getId()));
2660 $ilDB->execute($st, array(
"page_nav",
"LMNavigation", $this->
getId()));
2661 $ilDB->execute($st, array(
"page_title",
"PageTitle", $this->
getId()));
2662 $ilDB->execute($st, array(
"table",
"Page", $this->
getId()));
2664 $st =
$ilDB->prepareManip(
"UPDATE style_parameter SET tag = ? WHERE class = ?" .
2665 " AND style_id = ? ", array(
"text",
"text",
"integer"));
2666 $ilDB->execute($st, array(
"div",
"MediaCaption", $this->
getId()));
2669 $st =
$ilDB->prepareManip(
"UPDATE style_char SET characteristic = ? WHERE characteristic = ?" .
2670 " AND style_id = ? ", array(
"text",
"text",
"integer"));
2671 $ilDB->execute($st, array(
"MediaContainer",
"Media", $this->
getId()));
2672 $ilDB->execute($st, array(
"PageContainer",
"Page", $this->
getId()));
2675 $st =
$ilDB->prepareManip(
"UPDATE style_parameter SET class = ? WHERE class = ?" .
2676 " AND style_id = ? ", array(
"text",
"text",
"integer"));
2677 $ilDB->execute($st, array(
"MediaContainer",
"Media", $this->
getId()));
2678 $ilDB->execute($st, array(
"PageContainer",
"Page", $this->
getId()));
2681 $st =
$ilDB->prepareManip(
"DELETE FROM style_char WHERE type = ?" .
2682 " AND style_id = ? ", array(
"text",
"integer"));
2683 $ilDB->execute($st, array(
"page_cont", $this->
getId()));
2684 $st =
$ilDB->prepareManip(
"DELETE FROM style_parameter WHERE type = ?" .
2685 " AND style_id = ? ", array(
"text",
"integer"));
2686 $ilDB->execute($st, array(
"page_cont", $this->
getId()));
2701 $add_str =
" AND style_id = " .
$ilDB->quote($a_id,
"integer");
2704 $set =
$ilDB->query($q =
"SELECT DISTINCT style_id, tag, class FROM style_parameter WHERE " .
2705 $ilDB->equals(
"type",
"",
"text",
true) .
" " . $add_str);
2707 while ($rec =
$ilDB->fetchAssoc($set)) {
2710 switch ($rec[
"tag"]) {
2713 if (in_array($rec[
"class"], array(
"Headline3",
"Headline1",
2714 "Headline2",
"TableContent",
"List",
"Standard",
"Remark",
2715 "Additional",
"Mnemonic",
"Citation",
"Example"))) {
2716 $types[] =
"text_block";
2718 if (in_array($rec[
"class"], array(
"Block",
"Remark",
2719 "Additional",
"Mnemonic",
"Example",
"Excursus",
"Special"))) {
2720 $types[] =
"section";
2722 if (in_array($rec[
"class"], array(
"Page",
"Footnote",
"PageTitle",
"LMNavigation"))) {
2728 $types[] =
"table_cell";
2732 if (in_array($rec[
"class"], array(
"ExtLink",
"IntLink",
"FootnoteLink"))) {
2738 $types[] =
"text_inline";
2747 foreach ($types as $t) {
2749 $set4 =
$ilDB->queryF(
2750 "SELECT * FROM style_char " .
2751 " WHERE style_id = %s AND type = %s AND characteristic = %s",
2752 array(
"integer",
"text",
"text"),
2753 array($rec[
"style_id"], $t, $rec[
"class"])
2755 if ($rec4 =
$ilDB->fetchAssoc($set4)) {
2760 "INSERT INTO style_char " .
2761 " (style_id, type, characteristic) VALUES " .
2763 array(
"integer",
"text",
"text"),
2764 array($rec[
"style_id"], $t, $rec[
"class"])
2770 if ($rec[
"type"] ==
"") {
2771 if (count($types) > 0) {
2773 "UPDATE style_parameter SET type = %s " .
2774 " WHERE style_id = %s AND class = %s AND " .
$ilDB->equals(
"type",
"",
"text",
true),
2775 array(
"text",
"integer",
"text"),
2776 array($types[0], $rec[
"style_id"], $rec[
"class"])
2781 if ($types[0] ==
"link") {
2783 "UPDATE style_parameter SET type = %s " .
2784 " WHERE style_id = %s AND (class = %s OR class = %s) AND " .
$ilDB->equals(
"type",
"",
"text",
true),
2785 array(
"text",
"integer",
"text",
"text"),
2786 array($types[0], $rec[
"style_id"], $rec[
"class"] .
":visited",
2787 $rec[
"class"] .
":hover")
2792 if (count($types) == 2) {
2795 $set2 =
$ilDB->queryF(
2796 "SELECT * FROM style_parameter " .
2797 " WHERE style_id = %s AND class = %s AND type = %s",
2798 array(
"integer",
"text",
"text"),
2799 array($rec[
"style_id"], $rec[
"class"], $types[0])
2801 while ($rec2 =
$ilDB->fetchAssoc($set2)) {
2803 $set3 =
$ilDB->queryF(
2804 "SELECT * FROM style_parameter " .
2805 " WHERE style_id = %s AND tag = %s AND class = %s AND type = %s AND parameter = %s",
2806 array(
"integer",
"text",
"text",
"text",
"text"),
2807 array($rec[
"style_id"], $rec[
"tag"], $rec[
"class"], $types[1], $rec[
"parameter"])
2809 if ($rec3 =
$ilDB->fetchAssoc($set3)) {
2812 $nid =
$ilDB->nextId(
"style_parameter");
2814 "INSERT INTO style_parameter " .
2815 " (id, style_id, tag, class, parameter, value, type) VALUES " .
2816 " (%s, %s,%s,%s,%s,%s,%s) ",
2817 array(
"integer",
"integer",
"text",
"text",
"text",
"text",
"text"),
2818 array($nid, $rec2[
"style_id"], $rec2[
"tag"], $rec2[
"class"],
2819 $rec2[
"parameter"], $rec2[
"value"], $types[1])
2835 $classes = array(
"Example",
"Additional",
"Citation",
"Mnemonic",
"Remark");
2836 $pars = array(
"margin-top",
"margin-bottom");
2838 foreach ($classes as $curr_class) {
2839 foreach ($pars as $curr_par) {
2840 $res2 =
$ilDB->queryF(
2841 "SELECT id FROM style_parameter WHERE style_id = %s" .
2842 " AND tag = %s AND class= %s AND parameter = %s",
2843 array(
"integer",
"text",
"text",
"text"),
2844 array($a_id,
"p", $curr_class, $curr_par)
2846 if ($row2 =
$ilDB->fetchAssoc($res2)) {
2848 "UPDATE style_parameter SET value= %s WHERE id = %s",
2849 array(
"text",
"integer"),
2850 array(
"10px", $row2[
"id"])
2853 $nid =
$ilDB->nextId(
"style_parameter");
2855 "INSERT INTO style_parameter " .
2856 "(id, style_id, tag, class, parameter,value) VALUES (%s,%s,%s,%s,%s,%s)",
2857 array(
"integer",
"integer",
"text",
"text",
"text",
"text"),
2858 array($nid, $a_id,
"div", $curr_class, $curr_par,
"10px")
2865 "UPDATE style_parameter SET tag = %s WHERE tag = %s and style_id = %s",
2866 array(
"text",
"text",
"integer"),
2867 array(
"div",
"p", $a_id)
2882 $set =
$ilDB->query(
"SELECT * FROM style_color WHERE " .
2883 "style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" " .
2884 "ORDER BY color_name");
2887 while ($rec =
$ilDB->fetchAssoc($set)) {
2889 "name" => $rec[
"color_name"],
2890 "code" => $rec[
"color_code"]
2904 $ilDB->manipulate(
"INSERT INTO style_color (style_id, color_name, color_code)" .
2906 $ilDB->quote($this->getId(),
"integer") .
"," .
2907 $ilDB->quote($a_name,
"text") .
"," .
2908 $ilDB->quote($a_code,
"text") .
2921 $ilDB->manipulate(
"UPDATE style_color SET " .
2922 "color_name = " .
$ilDB->quote($a_new_name,
"text") .
", " .
2923 "color_code = " .
$ilDB->quote($a_code,
"text") .
2924 " WHERE style_id = " .
$ilDB->quote($this->
getId(),
"integer") .
2925 " AND color_name = " .
$ilDB->quote($a_name,
"text"));
2929 if ($a_name != $a_new_name) {
2930 $set =
$ilDB->query(
"SELECT * FROM style_parameter " .
2931 " WHERE style_id = " .
$ilDB->quote($this->getId(),
"integer") .
2933 " parameter = " .
$ilDB->quote(
"background-color",
"text") .
" OR " .
2934 " parameter = " .
$ilDB->quote(
"color",
"text") .
" OR " .
2935 " parameter = " .
$ilDB->quote(
"border-color",
"text") .
" OR " .
2936 " parameter = " .
$ilDB->quote(
"border-top-color",
"text") .
" OR " .
2937 " parameter = " .
$ilDB->quote(
"border-bottom-color",
"text") .
" OR " .
2938 " parameter = " .
$ilDB->quote(
"border-left-color",
"text") .
" OR " .
2939 " parameter = " .
$ilDB->quote(
"border-right-color",
"text") .
2941 while ($rec =
$ilDB->fetchAssoc($set)) {
2942 if ($rec[
"value"] ==
"!" . $a_name ||
2943 is_int(strpos($rec[
"value"],
"!" . $a_name .
"("))) {
2949 str_replace($a_name, $a_new_name, $rec[
"value"]),
2966 $ilDB->manipulate(
"DELETE FROM style_color WHERE " .
2967 " style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" AND " .
2968 " color_name = " .
$ilDB->quote($a_name,
"text"));
2978 $set =
$ilDB->query(
"SELECT * FROM style_color WHERE " .
2979 "style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" AND " .
2980 "color_name = " .
$ilDB->quote($a_color_name,
"text"));
2981 if ($rec =
$ilDB->fetchAssoc($set)) {
2994 $pos = strpos($a_name,
"(");
2996 $a_i = substr($a_name, $pos + 1);
2997 $a_i = str_replace(
")",
"", $a_i);
2998 $a_name = substr($a_name, 0, $pos);
3001 $set =
$ilDB->query(
"SELECT color_code FROM style_color WHERE " .
3002 " style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" AND " .
3003 " color_name = " .
$ilDB->quote($a_name,
"text"));
3004 if ($rec =
$ilDB->fetchAssoc($set)) {
3006 return "#" . $rec[
"color_code"];
3025 $hls[
"l"] = $hls[
"l"] + ((255 - $hls[
"l"]) * ($a_i / 100));
3028 $hls[
"l"] = $hls[
"l"] - (($hls[
"l"]) * (-$a_i / 100));
3033 foreach ($rgb as $k => $v) {
3034 $rgb[$k] = str_pad(dechex($v), 2,
"0", STR_PAD_LEFT);
3037 return $rgb[
"r"] . $rgb[
"g"] . $rgb[
"b"];
3045 $r[
"r"] = substr($a_rgb, 0, 2);
3046 $r[
"g"] = substr($a_rgb, 2, 2);
3047 $r[
"b"] = substr($a_rgb, 4, 2);
3050 $r[
"r"] = (int) hexdec($r[
"r"]);
3051 $r[
"g"] = (int) hexdec($r[
"g"]);
3052 $r[
"b"] = (int) hexdec($r[
"b"]);
3063 $r = $a_rgb[
"r"] / 255;
3064 $g = $a_rgb[
"g"] / 255;
3065 $b = $a_rgb[
"b"] / 255;
3068 $max = max($r, $g,
$b);
3069 $min = min($r, $g,
$b);
3072 $l = ($max + $min) / 2;
3079 $s = ($max - $min) / ($max + $min);
3081 $s = ($max - $min) / (2.0 - $max - $min);
3085 $h = ($g -
$b) / ($max - $min);
3086 } elseif ($g == $max) {
3087 $h = 2.0 + (
$b - $r) / ($max - $min);
3088 } elseif (
$b == $max) {
3089 $h = 4.0 + ($r - $g) / ($max - $min);
3093 $hls[
"h"] = round(($h / 6) * 255);
3094 $hls[
"l"] = round($l * 255);
3095 $hls[
"s"] = round($s * 255);
3105 $h = $a_hls[
"h"] / 255;
3106 $l = $a_hls[
"l"] / 255;
3107 $s = $a_hls[
"s"] / 255;
3109 $rgb[
"r"] = $rgb[
"g"] = $rgb[
"b"] = 0;
3113 $rgb[
"r"] = $rgb[
"g"] = $rgb[
"b"] = $l;
3116 $temp2 = $l * (1.0 + $s);
3118 $temp2 = $l + $s - $l * $s;
3121 $temp1 = 2.0 * $l - $temp2;
3124 # For each of R, G, B, compute another temporary value, temp3, as follows: 3125 foreach ($rgb as $k => $v) {
3128 $temp3 = $h + 1.0 / 3.0;
3136 $temp3 = $h - 1.0 / 3.0;
3140 $temp3 = $temp3 + 1.0;
3143 $temp3 = $temp3 - 1.0;
3146 if (6.0 * $temp3 < 1) {
3147 $rgb[$k] = $temp1 + ($temp2 - $temp1) * 6.0 * $temp3;
3148 } elseif (2.0 * $temp3 < 1) {
3150 } elseif (3.0 * $temp3 < 2) {
3151 $rgb[$k] = $temp1 + ($temp2 - $temp1) * ((2.0 / 3.0) - $temp3) * 6.0;
3158 $rgb[
"r"] = round($rgb[
"r"] * 255);
3159 $rgb[
"g"] = round($rgb[
"g"] * 255);
3160 $rgb[
"b"] = round($rgb[
"b"] * 255);
3180 $set =
$ilDB->query(
"SELECT * FROM sty_media_query WHERE " .
3181 "style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" " .
3182 "ORDER BY order_nr");
3185 while ($rec =
$ilDB->fetchAssoc($set)) {
3200 $id =
$ilDB->nextId(
"sty_media_query");
3201 if ($order_nr == 0) {
3205 $ilDB->manipulate(
"INSERT INTO sty_media_query (id, style_id, mquery, order_nr)" .
3207 $ilDB->quote(
$id,
"integer") .
"," .
3208 $ilDB->quote($this->
getId(),
"integer") .
"," .
3209 $ilDB->quote($a_mquery,
"text") .
"," .
3210 $ilDB->quote($order_nr,
"integer") .
3224 $set =
$ilDB->query(
3225 "SELECT max(order_nr) mnr FROM sty_media_query " .
3226 " WHERE style_id = " .
$ilDB->quote($this->getId(),
"integer")
3228 $rec =
$ilDB->fetchAssoc($set);
3230 return (
int) $rec[
"mnr"];
3244 "UPDATE sty_media_query SET " .
3245 " mquery = " .
$ilDB->quote($a_mquery,
"text") .
3246 " WHERE id = " .
$ilDB->quote($a_id,
"integer")
3260 $set =
$ilDB->query(
3261 "SELECT * FROM sty_media_query " .
3262 " WHERE id = " .
$ilDB->quote($a_id,
"integer")
3264 return $ilDB->fetchAssoc($set);
3277 "DELETE FROM sty_media_query WHERE " .
3278 " style_id = " .
$ilDB->quote($this->getId(),
"integer") .
3279 " AND id = " .
$ilDB->quote($a_id,
"integer")
3294 if (is_array($a_order_nr)) {
3295 foreach ($mqueries as $k => $mq) {
3296 $mqueries[$k][
"order_nr"] = $a_order_nr[$mq[
"id"]];
3301 foreach ($mqueries as $mq) {
3303 "UPDATE sty_media_query SET " .
3304 " order_nr = " .
$ilDB->quote($cnt,
"integer") .
3305 " WHERE id = " .
$ilDB->quote($mq[
"id"],
"integer")
3323 $set =
$ilDB->query(
"SELECT * FROM style_template WHERE " .
3324 "style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" AND " .
3325 "temp_type = " .
$ilDB->quote($a_type,
"text") .
" " .
3329 while ($rec =
$ilDB->fetchAssoc($set)) {
3343 $set =
$ilDB->query(
"SELECT * FROM style_template_class WHERE " .
3344 "template_id = " .
$ilDB->quote($a_tid,
"integer"));
3347 while ($rec =
$ilDB->fetchAssoc($set)) {
3348 $key = $rec[
"class_type"];
3349 $class[$key] = $rec[
"class"];
3363 $tid =
$ilDB->nextId(
"style_template");
3364 $ilDB->manipulate($q =
"INSERT INTO style_template " .
3365 "(id, style_id, name, temp_type)" .
3367 $ilDB->quote($tid,
"integer") .
"," .
3368 $ilDB->quote($this->
getId(),
"integer") .
"," .
3369 $ilDB->quote($a_name,
"text") .
"," .
3370 $ilDB->quote($a_type,
"text") .
3373 foreach ($a_classes as $t =>
$c) {
3374 $ilDB->manipulate($q =
"INSERT INTO style_template_class " .
3375 "(template_id, class_type, class)" .
3377 $ilDB->quote($tid,
"integer") .
"," .
3378 $ilDB->quote($t,
"text") .
"," .
3383 include_once(
"./Services/Style/Content/classes/class.ilObjStyleSheetGUI.php");
3399 $ilDB->manipulate(
"UPDATE style_template SET " .
3400 "name = " .
$ilDB->quote($a_name,
"text") .
3401 " WHERE id = " .
$ilDB->quote($a_t_id,
"integer"));
3404 "DELETE FROM style_template_class WHERE " .
3405 "template_id = " .
$ilDB->quote($a_t_id,
"integer")
3407 foreach ($a_classes as $t =>
$c) {
3408 $ilDB->manipulate($q =
"INSERT INTO style_template_class " .
3409 "(template_id, class_type, class)" .
3411 $ilDB->quote($a_t_id,
"integer") .
"," .
3412 $ilDB->quote($t,
"text") .
"," .
3425 $ilDB->manipulate($q =
"INSERT INTO style_template_class " .
3426 "(template_id, class_type, class)" .
3428 $ilDB->quote($a_t_id,
"integer") .
"," .
3429 $ilDB->quote($a_type,
"text") .
"," .
3430 $ilDB->quote($a_class,
"text") .
3442 $set =
$ilDB->query(
"SELECT * FROM style_template WHERE " .
3443 "style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" AND " .
3444 "name = " .
$ilDB->quote($a_template_name,
"text"));
3445 if ($rec =
$ilDB->fetchAssoc($set)) {
3458 $set =
$ilDB->query(
"SELECT * FROM style_template WHERE " .
3459 "style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" " .
3460 " AND id = " .
$ilDB->quote($a_t_id,
"integer"));
3462 if ($rec =
$ilDB->fetchAssoc($set)) {
3476 return self::_lookupTemplateName($a_t_id);
3486 $ilDB = $DIC->database();
3488 $set =
$ilDB->query(
"SELECT name FROM style_template WHERE " .
3489 " id = " .
$ilDB->quote($a_t_id,
"integer"));
3491 if ($rec =
$ilDB->fetchAssoc($set)) {
3492 return $rec[
"name"];
3505 $tag =
"<StyleTemplates>";
3507 $ttypes = array(
"table",
"vaccordion",
"haccordion",
"carousel");
3509 foreach ($ttypes as $ttype) {
3512 foreach ($ts as $t) {
3526 $tag .=
'<StyleTemplate Name="' . $t[
"name"] .
'">';
3528 foreach ($atts as
$type => $t) {
3530 $tag .=
'<StyleClass Type="' .
$type .
'" Value="' .
$c[
$type] .
'" />';
3534 $tag .=
"</StyleTemplate>";
3538 $tag .=
"</StyleTemplates>";
3550 $a_preview_html = str_replace(
' width=""',
"", $a_preview_html);
3551 $a_preview_html = str_replace(
' valign="top"',
"", $a_preview_html);
3552 $a_preview_html = str_replace(
'<div class="ilc_text_block_TableContent">',
"<div>", $a_preview_html);
3555 if (strlen($a_preview_html) > 4000) {
3557 $a_preview_html =
"";
3559 $ilDB->manipulate(
"UPDATE style_template SET " .
3560 "preview = " .
$ilDB->quote($a_preview_html,
"text") .
3561 " WHERE id = " .
$ilDB->quote($a_t_id,
"integer"));
3571 $set =
$ilDB->query(
"SELECT preview FROM style_template " .
3572 " WHERE id = " .
$ilDB->quote($a_t_id,
"integer"));
3573 if ($rec =
$ilDB->fetchAssoc($set)) {
3574 return $rec[
"preview"];
3587 $ilDB = $DIC->database();
3589 $set =
$ilDB->query(
"SELECT id FROM style_template " .
3590 " WHERE style_id = " .
$ilDB->quote($a_style_id,
"integer") .
3591 " AND name = " .
$ilDB->quote($a_name,
"text"));
3592 if ($rec =
$ilDB->fetchAssoc($set)) {
3606 $ilDB->manipulate(
"DELETE FROM style_template WHERE " .
3607 " style_id = " .
$ilDB->quote($this->getId(),
"integer") .
" AND " .
3608 " id = " .
$ilDB->quote($a_t_id,
"integer"));
3611 "DELETE FROM style_template_class WHERE " .
3612 "template_id = " .
$ilDB->quote($a_t_id,
"integer")
3624 "DELETE FROM style_setting WHERE " .
3625 " style_id = " .
$ilDB->quote($this->getId(),
"integer") .
3626 " AND name = " .
$ilDB->quote($a_name,
"text")
3629 $ilDB->manipulate(
"INSERT INTO style_setting " .
3630 "(style_id, name, value) VALUES (" .
3631 $ilDB->quote($this->getId(),
"integer") .
"," .
3632 $ilDB->quote($a_name,
"text") .
"," .
3633 $ilDB->quote($a_value,
"text") .
3644 $set =
$ilDB->query(
3645 "SELECT value FROM style_setting " .
3646 " WHERE style_id = " .
$ilDB->quote($this->getId(),
"integer") .
3647 " AND name = " .
$ilDB->quote($a_name,
"text")
3649 $rec =
$ilDB->fetchAssoc($set);
3651 return $rec[
"value"];
3661 $ilDB = $DIC->database();
3666 "obj_id" => array(
"integer", (
int) $a_obj_id)),
3668 "style_id" => array(
"integer", (
int) $a_style_id))
3679 $ilDB = $DIC->database();
3681 $set =
$ilDB->query(
3682 "SELECT style_id FROM style_usage " .
3683 " WHERE obj_id = " .
$ilDB->quote($a_obj_id,
"integer")
3685 $rec =
$ilDB->fetchAssoc($set);
3688 return (
int) $rec[
"style_id"];
3701 $ilDB = $DIC->database();
3705 $set =
$ilDB->query(
3706 "SELECT DISTINCT obj_id FROM style_usage " .
3707 " WHERE style_id = " .
$ilDB->quote($a_style_id,
"integer")
3710 while ($rec =
$ilDB->fetchAssoc($set)) {
3711 $obj_ids[] = $rec[
"obj_id"];
static getContentStylePath($a_style_id, $add_random=true, $add_token=true)
get content style path
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static _lookupTemplateIdByName($a_style_id, $a_name)
Lookup table template preview.
static makeDirParents($a_dir)
Create a new directory and all parent directories.
static _lookupContObjIdByStyleId($a_style_id)
lookup style sheet ID
deleteMediaQuery($a_id)
Delete media query.
getXML()
get xml representation of style object todo: add mq_id
static _explodeRGB($a_rgb, $as_dec=false)
Explode an RGB string into an array.
static _writeScope($a_id, $a_scope)
Write scope.
static _getTemplateClassTypes($a_template_type="")
Get template class types.
static getContentPrintStyle()
get content print style
getHideStatus($a_type, $a_char)
Get characteristic hide status.
removeColor($a_name)
Remove a color.
characteristicExists($a_char, $a_style_type)
Check whether characteristic exists.
static getPlaceHolderStylePath()
get placeholder style path (for Page Layouts)
exportXML($a_dir)
export style xml file to directory
static _HLSToRGB($a_hls)
HLS to RGB (both arrays, 0..255)
static lookupObjectForStyle($a_style_id)
Lookup object style.
static _lookupTemplateName($a_t_id)
Lookup table template name for template ID.
do_3_10_Migration()
Migrates 3.10 style to 3.11 style.
static _getTemplatePreview($a_style, $a_type, $a_t_id, $a_small_mode=false)
Get table template preview.
setCharacteristics($a_chars)
Set characteristics.
getColors()
Get colors of style.
setRefId($a_ref_id)
Set ref id (show error message, since styles do not use ref ids)
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
read()
read style properties
static _determineTag($a_type)
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data
deleteParameter($a_id)
delete style parameter
addTemplate($a_type, $a_name, $a_classes)
Add table template.
static $style_super_types
do_3_9_Migration($a_id)
Migrate old 3.9 styles.
static getBasicZipPath()
Get basic zip path.
getRefId()
Get ref id (show error message, since styles do not use ref ids)
copyImagesToDir($a_target)
Copy images to directory.
setExportSubDir($a_dir)
Set local directory, that will be included within the zip file.
deleteImage($a_file)
Delete an image.
lookupStyleSetting($a_name)
Lookup style setting.
setScope($a_scope)
Set scope.
updateMediaQuery($a_id, $a_mquery)
Update media query.
static getDir($a_dir, $a_rec=false, $a_sub_dir="")
get directory
static _getStyleSuperTypeForType($a_type)
writeTemplatePreview($a_t_id, $a_preview_html)
Write table template preview.
static _lookupTitle($a_id)
lookup object title
static _getStandardStyles( $a_exclude_default_style=false, $a_include_deactivated=false, $a_scope=0)
Get standard styles.
static _deleteStyleAssignments($a_style_id)
delete all style references to style
deleteStyleParOfChar($a_type, $a_class)
Delete style parameters of characteristic.
copyCharacteristic( $a_from_style_id, $a_from_type, $a_from_char, $a_to_char)
Copy characteristic.
deleteCustomStylePars($a_tag, $a_class, $a_type, $a_mq_id=0)
Delete style parameter by tag/class/parameter.
static _lookupUpToDate($a_id)
Looup up to date.
static _getPseudoClasses($tag)
static _getClonableContentStyles()
Get all clonable styles (active standard styles and individual learning module styles with write perm...
writeCSSFile($a_target_file="", $a_image_dir="")
write css file to webspace directory
static _getStyleSuperTypes()
static lookupObjectStyle($a_obj_id)
Lookup object style.
& getMetaData()
get meta data object
createExportSubDirectory()
Create export directory.
static getBasicImageDir()
Get basic image dir.
static _getAllReferences($a_id)
get all reference ids of object
lookupTemplateName($a_t_id)
Lookup table template name for template ID.
do_3_10_CharMigration($a_id="")
This is more or less a copy of Services/Migration/DBUpdate_1385/classes ilStyleMigration->addMissingS...
getThumbnailsDirectory()
Get thumbnails directory.
static _lookupStandard($a_id)
Lookup standard flag.
handleXmlString($a_str)
Handle xml strin.
static writeStyleUsage($a_obj_id, $a_style_id)
Write style usage.
static _writeActive($a_id, $a_active)
Write active flag.
addColor($a_name, $a_code)
Add color.
getTemplate($a_t_id)
Get template.
addTemplateClass($a_t_id, $a_type, $a_class)
Update table template.
static _getBasicStyleDom()
Get basic style dom.
getImagesDirectory()
Get images directory.
templateExists($a_template_name)
Check whether template exists.
static resizeImage($a_from, $a_to, $a_width, $a_height, $a_constrain_prop=false)
resize image
foreach($_POST as $key=> $value) $res
static _addMissingStyleClassesToAllStyles($a_styles="")
Add missing style classes to all styles todo: add mq_id and custom handling.
getId()
get object id public
static _isExpandable($a_type)
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
writeStyleSetting($a_name, $a_value)
Write Style Setting.
static _getFilteredGroups()
getTemplateXML()
Get table template xml.
static _getCoreStyles()
Get core styles.
static getEffectiveContentStyleId($a_style_id, $a_type="")
Get effective Style Id.
getTitle()
get object title public
uploadImage($a_file)
Upload image.
getDescription()
get object description
static unzip(string $path_to_zip_file, bool $overwrite_existing=false, bool $unpack_flat=false)
addParameter($a_tag, $a_par, $a_type, $a_mq_id=0, $a_custom=false)
write style parameter to db
redirection script todo: (a better solution should control the processing via a xml file) ...
setUpToDate($a_up_to_date=true)
Set style up to date (false + update will trigger css generation next time)
saveHideStatus($a_type, $a_char, $a_hide)
Save characteristic hide status.
setStyle($a_style)
set styles
static getSyntaxStylePath()
get syntax style path
static signFile($path_to_file)
getParametersOfClass($a_type, $a_class, $a_mq_id=0)
Get parameters of class.
static $basic_style_image_dir
static zip($a_dir, $a_file, $compress_content=false)
zips given directory/file into given zip.file
getType()
get object type public
getCharacteristics($a_type="", $a_no_hidden=false, $a_include_core=true)
Get characteristics.
getStyleParameterGroups()
Get grouped parameter.
static _lookupType($a_id, $a_reference=false)
lookup object type
__construct($a_id=0, $a_call_by_reference=false)
Constructor public.
export()
Create export file.
getTemplates($a_type)
Get table templates of style.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
deleteStylePar($a_tag, $a_class, $a_par, $a_type, $a_mq_id=0, $a_custom=false)
Delete style parameter by tag/class/parameter.
static _getColorFlavor($a_rgb, $a_i)
Get color flavor.
determineTemplateStyleClassType($t, $k)
updateColor($a_name, $a_new_name, $a_code)
Update color.
static _createImagesDirectory($a_style_id)
Create images directory <data_dir>/sty/sty_<id>/images.
createExportDirectory()
Create export directory.
getStyle()
todo: bad style! should return array of objects, not multi-dim-arrays
updateStyleParameter($a_id, $a_value)
update style parameter per id
static _addMissingStyleClassesToStyle($a_id)
Add missing style classes to all styles.
createReference()
Create a reference (show error message, since styles do not use ref ids)
static _getImagesDirectory($a_style_id)
Get images directory.
addCharacteristic($a_type, $a_char, $a_hidden=false)
Add characteristic.
static _RGBToHLS($a_rgb)
RGB to HLS (both arrays, 0..255)
getTemplateClasses($a_tid)
Get template classes.
static _getStyleParameterValues($par)
getMaxMQueryOrderNr()
Get maximum media query order nr.
static _writeStandard($a_id, $a_std)
Write standard flag.
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 getDataDir()
get data directory (outside webspace)
colorExists($a_color_name)
Check whether color exists.
deleteCharacteristic($a_type, $a_tag, $a_class)
Delete Characteristic.
static _getStyleParameterNumericUnits($a_no_percentage=false)
create($a_from_style=0, $a_import_mode=false)
Create a new style.
getExportSubDir()
The local directory, that will be included within the zip file.
createImportDirectory()
Create import directory.
__construct(Container $dic, ilPlugin $plugin)
getColorCodeForName($a_name)
Remove a color.
updateTemplate($a_t_id, $a_name, $a_classes)
Update table template.
static _getStyleParameters($a_tag="")
removeTemplate($a_t_id)
Remove table template.
static isCoreStyle($a_type, $a_class)
Is core style.
saveMediaQueryOrder($a_order_nr=null)
Save media query order.
static _isHideable($a_type)
assignMetaData(&$a_meta_data)
assign meta data object
cleanExportDirectory()
Clear export directory.
getImages()
Get images of style.
createFromXMLFile($a_file, $a_skip_parent_create=false)
create style from xml file todo: add mq_id and custom
static _lookupActive($a_id)
Lookup active flag.
static _getStyleParameterInputType($par)
addMediaQuery($a_mquery, $order_nr=0)
Add media query.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static getWebspaceDir($mode="filesystem")
get webspace directory
static _getObjectsDataForType($a_type, $a_omit_trash=false)
get all objects of a certain type
static _replaceStylePar($style_id, $a_tag, $a_class, $a_par, $a_val, $a_type, $a_mq_id=0, $a_custom=false)
static _getStyleParameterSubPar($par)
createImagesDirectory()
Create images directory <data_dir>/sty/sty_<id>/images.
getMediaQueries()
Get colors of style.
ilClone()
clone style sheet (note: styles have no ref ids and return an object id)
getMediaQueryForId($a_id)
Get media query for id.
static getAvailableParameters()
Get available parameters.
static _writeUpToDate($a_id, $a_up_to_date)
Write up to date.
lookupTemplatePreview($a_t_id)
Lookup table template preview.
putInTree($a_parent_ref)
Put in tree (show error message, since styles do not use ref ids)
getUpToDate()
Get up to date.