4 require_once(
"./Services/COPage/classes/class.ilPCParagraph.php");
5 require_once(
"./Services/COPage/classes/class.ilPageContentGUI.php");
28 public function __construct($a_pg_obj, &$a_content_obj, $a_hier_id, $a_pc_id =
"")
32 $this->
user = $DIC->user();
33 $this->ctrl = $DIC->ctrl();
34 $this->lng = $DIC->language();
35 parent::__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id);
48 $lng = $DIC->language();
50 return array(
"Standard" =>
$lng->txt(
"cont_standard"),
51 "Headline1" =>
$lng->txt(
"cont_Headline1"),
52 "Headline2" =>
$lng->txt(
"cont_Headline2"),
53 "Headline3" =>
$lng->txt(
"cont_Headline3"),
54 "Citation" =>
$lng->txt(
"cont_Citation"),
55 "Mnemonic" =>
$lng->txt(
"cont_Mnemonic"),
56 "Example" =>
$lng->txt(
"cont_Example"),
57 "Additional" =>
$lng->txt(
"cont_Additional"),
58 "Attention" =>
$lng->txt(
"cont_Attention"),
59 "Confirmation" =>
$lng->txt(
"cont_Confirmation"),
60 "Information" =>
$lng->txt(
"cont_Information"),
61 "Link" =>
$lng->txt(
"cont_Link"),
62 "Literature" =>
$lng->txt(
"cont_Literature"),
63 "Separator" =>
$lng->txt(
"cont_Separator"),
64 "StandardCenter" =>
$lng->txt(
"cont_StandardCenter"),
65 "Remark" =>
$lng->txt(
"cont_Remark"),
66 "List" =>
$lng->txt(
"cont_List"),
67 "TableContent" =>
$lng->txt(
"cont_TableContent")
78 $lng = $DIC->language();
79 return [
"Mnemonic",
"Attention"];
80 return array(
"Mnemonic" =>
$lng->txt(
"cont_Mnemonic"),
81 "Attention" =>
$lng->txt(
"cont_Attention")
93 if ($a_style_id > 0 &&
95 include_once(
"./Services/Style/Content/classes/class.ilObjStyleSheet.php");
97 $types = array(
"text_block",
"heading1",
"heading2",
"heading3");
99 foreach ($types as
$t) {
100 $chars = array_merge($chars,
$style->getCharacteristics($t));
102 $new_chars = array();
103 foreach ($chars as $char) {
104 if ($st_chars[$char] !=
"") {
105 $new_chars[$char] = $st_chars[$char];
107 $new_chars[$char] = $char;
128 if ($a_style_id > 0 &&
130 include_once(
"./Services/Style/Content/classes/class.ilObjStyleSheet.php");
132 $types = array(
"text_inline");
133 foreach ($types as
$t) {
134 $chars = array_merge($chars,
$style->getCharacteristics($t,
false, $a_include_core));
137 return self::_getStandardTextCharacteristics();
150 $next_class = $this->ctrl->getNextClass($this);
153 array(
"text_block",
"heading1",
"heading2",
"heading3")
157 $cmd = $this->ctrl->getCmd();
159 $this->log->debug(
"ilPCParagraphGUI: executeCommand " . $cmd);
161 switch ($next_class) {
163 $ret = $this->$cmd();
173 public function edit($a_insert =
false)
178 $tpl =
new ilTemplate(
"tpl.paragraph_edit.html",
true,
true,
"Services/COPage");
185 $tpl->setCurrentBlock(
"commands");
186 $tpl->setVariable(
"BTN_NAME",
"create_par");
187 $tpl->setVariable(
"BTN_TEXT", $this->lng->txt(
"save"));
188 $tpl->setVariable(
"BTN_CANCEL",
"cancelCreate");
189 $tpl->setVariable(
"TXT_CANCEL", $this->lng->txt(
"cancel"));
190 $tpl->parseCurrentBlock();
197 $tpl->setVariable(
"TXT_ACTION", $this->lng->txt(
"cont_insert_par"));
199 $tpl->setCurrentBlock(
"commands");
200 $tpl->setVariable(
"BTN_NAME",
"update");
201 $tpl->setVariable(
"BTN_TEXT", $this->lng->txt(
"save"));
202 $tpl->setVariable(
"BTN_CANCEL",
"cancelUpdate");
203 $tpl->setVariable(
"TXT_CANCEL", $this->lng->txt(
"cancel"));
204 $tpl->parseCurrentBlock();
211 $tpl->setVariable(
"TXT_ACTION", $this->lng->txt(
"cont_edit_par"));
217 if (key(
$_POST[
"cmd"]) ==
"update") {
218 $s_lang =
$_POST[
"par_language"];
220 $s_lang = $this->content_obj->getLanguage();
223 if (key(
$_POST[
"cmd"]) ==
"create_par") {
224 $s_lang =
$_POST[
"par_language"];
229 $s_lang =
$ilUser->getLanguage();
238 $tpl->setVariable(
"FORMACTION", $this->ctrl->getFormAction($this));
240 $tpl->setVariable(
"PAR_TA_NAME",
"par_content");
242 $this->tpl->addJavascript(
"./Services/COPage/phpBB/3_0_5/editor.js");
243 $this->tpl->addJavascript(
"./Services/COPage/js/paragraph_editing.js");
248 $tpl->setVariable(
"TXT_LANGUAGE", $this->lng->txt(
"language"));
249 $tpl->setVariable(
"TXT_ANCHOR", $this->lng->txt(
"cont_anchor"));
251 require_once(
"Services/MetaData/classes/class.ilMDLanguageItem.php");
254 $tpl->setVariable(
"SELECT_LANGUAGE", $select_lang);
256 $tpl->setVariable(
"TXT_CHARACTERISTIC", $this->lng->txt(
"cont_characteristic"));
261 if (key(
$_POST[
"cmd"]) ==
"update" || key(
$_POST[
"cmd"]) ==
"create_par") {
264 $s_text = str_replace(
"{",
"{", $s_text);
265 $s_text = str_replace(
"}",
"}", $s_text);
266 } elseif (!$a_insert) {
267 $s_text = $this->content_obj->xml2output($this->content_obj->getText());
270 $tpl->setVariable(
"PAR_TA_CONTENT", $s_text);
272 $tpl->parseCurrentBlock();
274 $this->tpl->setContent(
$tpl->get());
288 if (key(
$_POST[
"cmd"]) ==
"update") {
289 $s_char =
$_POST[
"par_characteristic"];
291 $s_char = $this->content_obj->getCharacteristic();
293 $s_char =
"Standard";
297 if (key(
$_POST[
"cmd"]) ==
"create_par") {
298 $s_char =
$_POST[
"par_characteristic"];
300 $s_char =
"Standard";
303 $cont_obj = $this->pg_obj->getContentObject($this->
getHierId());
304 if (is_object($cont_obj)) {
305 if ($cont_obj->getType() ==
"li" ||
306 ($cont_obj->getType() ==
"par" && $cont_obj->getCharacteristic() ==
"List")) {
310 if ($cont_obj->getType() ==
"td" ||
311 ($cont_obj->getType() ==
"par" && $cont_obj->getCharacteristic() ==
"TableContent")) {
312 $s_char =
"TableContent";
325 $s_text = $this->content_obj->getText();
326 $this->log->debug(
"step 1: " . substr($s_text, 0, 1000));
329 $s_text = $this->content_obj->xml2output($s_text,
true,
false);
330 $this->log->debug(
"step 2: " . substr($s_text, 0, 1000));
335 $this->log->debug(
"step 3: " . substr($s_text, 0, 1000));
338 $ids =
"###" . $this->content_obj->readHierId() .
":" . $this->content_obj->readPCId() .
"###" .
341 $this->log->debug(
"step 4: " . substr($ids . $s_text, 0, 1000));
350 echo $this->content_obj->getParagraphSequenceContent($this->pg_obj);
362 $s_text = str_replace(
363 array(
"<SimpleBulletList>",
"</SimpleBulletList>"),
364 array(
"<ul class='ilc_list_u_BulletedList'>",
"</ul>"),
367 $s_text = str_replace(
368 array(
"<SimpleNumberedList>",
"</SimpleNumberedList>"),
369 array(
"<ol class='ilc_list_o_NumberedList'>",
"</ol>"),
372 $s_text = str_replace(
373 array(
"<SimpleListItem>",
"</SimpleListItem>"),
374 array(
"<li class='ilc_list_item_StandardListItem'>",
"</li>"),
377 $s_text = str_replace(
378 array(
"<SimpleListItem/>"),
379 array(
"<li class='ilc_list_item_StandardListItem'></li>"),
388 include_once(
"./Services/COPage/classes/class.ilPageContentGUI.php");
390 if (!in_array($bb, array(
"code",
"tex",
"fn",
"xln",
"sub",
"sup"))) {
391 $s_text = str_replace(
393 '<span class="ilc_text_inline_' . $cl .
'">',
396 $s_text = str_replace(
405 $ws =
"[ \t\r\f\v\n]*";
406 while (preg_match(
"~\[(marked$ws(class$ws=$ws\"([^\"])*\")$ws)\]~i", $s_text, $found)) {
408 if (isset($attribs[
"class"])) {
409 $s_text = str_replace(
"[" . $found[1] .
"]",
"<span class=\"ilc_text_inline_" . $attribs[
"class"] .
"\">", $s_text);
411 $s_text = str_replace(
"[" . $found[1] .
"]",
"[error:marked" . $found[1] .
"]", $s_text);
414 $s_text = preg_replace(
'~\[\/marked\]~i',
"</span>", $s_text);
418 $s_text = str_replace(
419 array(
"[code]",
"[/code]"),
420 array(
"<code>",
"</code>"),
425 $s_text = str_replace(
426 array(
"[sup]",
"[/sup]"),
427 array(
'<sup class="ilc_sup_Sup">',
"</sup>"),
432 $s_text = str_replace(
433 array(
"[sub]",
"[/sub]"),
434 array(
'<sub class="ilc_sub_Sub">',
"</sub>"),
452 $this->log->debug(
"start");
454 $this->updated = $this->content_obj->saveJS(
456 $_POST[
"ajaxform_content"],
461 $this->log->debug(
"ilPCParagraphGUI, saveJS: got updated value " . $this->updated);
463 if (
$_POST[
"quick_save"]) {
464 if ($this->updated ===
true) {
465 $a_pc_id_str = $this->content_obj->getLastSavedPcId($this->pg_obj,
true);
466 $this->log->debug(
"ilPCParagraphGUI, saveJS: echoing pc_id_str " . $a_pc_id_str .
" (and exit)");
472 if ($this->updated !==
true && is_array($this->updated)) {
476 $a_pc_id_str = $this->content_obj->getLastSavedPcId($this->pg_obj,
true);
479 $ilCtrl->getReturnClass($this),
481 urlencode($a_pc_id_str)
483 $this->log->debug(
"ilPCParagraphGUI, saveJS: redirecting to edit command of " .
$ilCtrl->getReturnClass($this) .
".");
484 $ilCtrl->redirectByClass(
$ilCtrl->getReturnClass($this),
"edit",
"",
true);
495 foreach ($a_err as $err) {
496 $err_str .= $err[1] .
"<br />";
499 $this->log->debug(
"ilPCParagraphGUI, outputError() and exit: " . substr($err_str, 0, 100));
509 $this->log->debug(
"ilPCParagraphGUI, cancel(): return to parent: jump" . $this->hier_id);
510 $this->ctrl->returnToParent($this,
"jump" . $this->hier_id);
522 if ($chars[$a_seleted_value] ==
"" && ($a_seleted_value !=
"")) {
523 $chars = array_merge(
524 array($a_seleted_value => $a_seleted_value),
529 foreach ($chars as $char => $char_lang) {
530 $a_tpl->setCurrentBlock(
"characteristic_cell");
533 '<div class="ilc_text_block_' . $char .
'" style="margin-top:2px; margin-bottom:2px; position:static;">' . $char_lang .
"</div>" 535 $a_tpl->setVariable(
"CHAR_VALUE", $char);
536 if ($char == $a_seleted_value) {
539 ' checked="checked" ' 542 $a_tpl->parseCurrentBlock();
543 if (((
$i + 1) % 3) == 0) {
544 $a_tpl->touchBlock(
"characteristic_row");
548 $a_tpl->touchBlock(
"characteristic_table");
559 $a_tpl->setVariable(
"ADV_SEL_STYLE", self::getStyleSelector(
570 include_once(
"./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
572 $selection->setPullRight(
false);
573 $selection->setFormSelectMode(
574 "par_characteristic",
585 $selection->setId(
"style_selection");
586 $selection->setSelectionHeaderClass(
"ilEditSubmit ilTinyMenuDropDown");
588 $selection->setSelectedValue($a_selected);
589 $selection->setUseImages(
false);
591 if ($a_use_callback) {
592 $selection->setSelectCallback(
"ilCOPage.setParagraphClass");
596 $title_char = ($chars[$a_selected] !=
"")
597 ? $chars[$a_selected]
599 $selection->setListTitle($title_char);
601 if ($chars[$a_seleted] ==
"" && ($a_seleted !=
"")) {
602 $chars = array_merge(
603 array($a_seleted => $a_seleted),
608 foreach ($chars as $char => $char_lang) {
612 case "Headline1":
$t =
"heading1";
$tag =
"h1";
break;
613 case "Headline2":
$t =
"heading2";
$tag =
"h2";
break;
614 case "Headline3":
$t =
"heading3";
$tag =
"h3";
break;
616 $html =
'<div class="ilCOPgEditStyleSelectionItem"><' .
$tag .
' class="ilc_' .
$t .
'_' . $char .
'" style="' . self::$style_selector_reset .
'">' . $char_lang .
"</" .
$tag .
"></div>";
627 return $selection->getHTML();
637 $lng = $DIC->language();
639 include_once(
"./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
641 $selection->setPullRight(
false);
642 $selection->setFormSelectMode(
643 "char_characteristic",
654 $selection->setId(
"char_style_selection");
655 $selection->setSelectionHeaderClass(
"ilEditSubmit");
658 $selection->setUseImages(
false);
660 if (is_string($a_use_callback)) {
661 $selection->setSelectCallback($a_use_callback);
662 } elseif ($a_use_callback ===
true) {
663 $selection->setSelectCallback(
"ilCOPage.setCharacterClass");
670 $selection->setListTitle(
" <i>A</i>");
679 "Comment" => array(
"code" =>
"com",
"txt" =>
$lng->txt(
"cont_char_style_com")),
680 "Quotation" => array(
"code" =>
"quot",
"txt" =>
$lng->txt(
"cont_char_style_quot")),
681 "Accent" => array(
"code" =>
"acc",
"txt" =>
$lng->txt(
"cont_char_style_acc")),
682 "Code" => array(
"code" =>
"code",
"txt" =>
$lng->txt(
"cont_char_style_code"))
686 if (!isset($chars[$c])) {
687 $chars[
$c] = array(
"code" =>
"",
"txt" => $c);
691 foreach ($chars as
$key => $char) {
694 "active_" . $char[
"code"],
700 case "Code":
$tag =
"code";
break;
702 $html =
'<' .
$tag .
' class="ilc_' .
$t .
'_' .
$key .
'" style="font-size:90%; margin-top:2px; margin-bottom:2px; position:static;">' . $char[
"txt"] .
"</" .
$tag .
">";
708 $html =
'<a class="nostyle" style="display:block;" href="#" onclick="return false;">' .
$html .
"</a>";
720 return $selection->getHTML();
728 include_once(
"./Services/Style/Content/classes/class.ilObjStyleSheet.php");
730 if ($this->pg_obj->getParentType() ==
"gdf" ||
731 $this->pg_obj->getParentType() ==
"lm") {
732 if ($this->pg_obj->getParentType() !=
"gdf") {
740 if ($this->pg_obj->getParentType() !=
"sahs") {
751 $this->log->debug(
"ilPCParagraphGUI, saveJS: got updated value " . $this->updated);
752 return $this->
edit(
true);
760 $this->log->debug(
"ilPCParagraphGUI, update(): start");
763 $this->content_obj->setLanguage(
$_POST[
"par_language"]);
764 $this->content_obj->setCharacteristic(
$_POST[
"par_characteristic"]);
766 $this->updated = $this->content_obj->setText(
767 $this->content_obj->input2xml(
769 $_POST[
"usedwsiwygeditor"]
773 if ($this->updated !==
true) {
778 $this->updated = $this->content_obj->updatePage($this->pg_obj);
781 if ($this->updated ===
true) {
782 $this->log->debug(
"ilPCParagraphGUI, update(): return to parent: jump" . $this->hier_id);
783 $this->ctrl->returnToParent($this,
"jump" . $this->hier_id);
785 $this->log->debug(
"ilPCParagraphGUI, update(): call edit.");
796 $this->log->debug(
"ilPCParagraphGUI, create(): start.");
798 if (
$_POST[
"ajaxform_hier_id"] !=
"") {
804 $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
806 $this->content_obj->setLanguage(
$_POST[
"par_language"]);
808 $this->content_obj->setCharacteristic(
$_POST[
"par_characteristic"]);
810 $this->updated = $this->content_obj->setText(
811 $this->content_obj->input2xml(
813 $_POST[
"usedwsiwygeditor"]
818 if ($this->updated !==
true) {
822 $this->updated = $this->content_obj->updatePage($this->pg_obj);
824 if ($this->updated ===
true) {
825 $this->ctrl->returnToParent($this,
"jump" . $this->hier_id);
839 $this->log->debug(
"ilPCParagraphGUI, createJS(): start");
842 $this->updated = $this->content_obj->saveJS(
844 $_POST[
"ajaxform_content"],
849 if (
$_POST[
"quick_save"]) {
850 if ($this->updated) {
851 $a_pc_id_str = $this->content_obj->getLastSavedPcId($this->pg_obj,
true);
853 $this->log->debug(
"ilPCParagraphGUI, createJS(): echo pc id and exit: " . $a_pc_id_str);
858 if ($this->updated !==
true && is_array($this->updated)) {
863 $a_pc_id_str = $this->content_obj->getLastSavedPcId($this->pg_obj,
true);
865 $ilCtrl->getReturnClass($this),
867 urlencode($a_pc_id_str)
869 $this->log->debug(
"ilPCParagraphGUI, createJS(): return to edit cmd of " .
$ilCtrl->getReturnClass($this));
871 $ilCtrl->redirectByClass(
$ilCtrl->getReturnClass($this),
"edit",
"",
true);
881 $a_tpl->setCurrentBlock(
"help_item");
882 $a_tpl->setVariable(
"TXT_HELP",
"<b>" .
$lng->txt(
"cont_syntax_help") .
"</b>");
883 $a_tpl->parseCurrentBlock();
884 $a_tpl->setCurrentBlock(
"help_item");
885 $a_tpl->setVariable(
"TXT_HELP",
"* " .
$lng->txt(
"cont_bullet_list"));
886 $a_tpl->parseCurrentBlock();
887 $a_tpl->setCurrentBlock(
"help_item");
888 $a_tpl->setVariable(
"TXT_HELP",
"# " .
$lng->txt(
"cont_numbered_list"));
889 $a_tpl->parseCurrentBlock();
890 $a_tpl->setCurrentBlock(
"help_item");
891 $a_tpl->setVariable(
"TXT_HELP",
"=" .
$lng->txt(
"cont_Headline1") .
"=<br />" .
892 "==" .
$lng->txt(
"cont_Headline2") .
"==<br />" .
893 "===" .
$lng->txt(
"cont_Headline3") .
"===");
894 $a_tpl->parseCurrentBlock();
897 $a_tpl->setCurrentBlock(
"help_item");
898 $a_tpl->setVariable(
"TXT_HELP",
"[[" .
$lng->txt(
"cont_wiki_page_link") .
"]]");
899 $a_tpl->parseCurrentBlock();
902 $a_tpl->setCurrentBlock(
"help");
903 $a_tpl->parseCurrentBlock();
const ON_ITEM_CLICK_FORM_SELECT
getCharacteristicsOfCurrentStyle($a_type)
Get characteristics of current style.
static _lookupStyleSheetId($a_cont_obj_id)
lookup style sheet ID
update()
update paragraph in dom and update page in db
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static xml2outputJS($s_text, $char, $a_pc_id)
Prepare content for js output.
edit($a_insert=false)
edit paragraph form
getHierId()
get hierarchical id in dom object
static _getCharacteristics($a_style_id)
Get characteristics.
insertStyleSelectionList($a_tpl, $a_selected)
Insert style selection list.
static _getStandardCharacteristics()
Get standard characteristics.
static _getTextCharacteristics($a_style_id, $a_include_core=false)
Get text characteristics.
static getStyleSelector($a_selected, $a_chars, $a_use_callback=false)
Get style selector.
getPageConfig()
Get Page Config.
insert()
insert paragraph form
saveJS()
Save paragraph by JS call.
create()
create new paragraph in dom and update page in db
setCharacteristics($a_chars)
Set Characteristics.
getBBMenu($a_ta_name="par_content")
Get the bb menu incl.
User Interface for Editing of Page Content Objects (Paragraphs, Tables, ...)
editJS()
Edit paragraph (Ajax mode, sends the content of the paragraph)
static getCharStyleSelector($a_par_type, $a_use_callback=true, $a_style_id=0)
Get character style selector.
special template class to simplify handling of ITX/PEAR
displayValidationError()
display validation errors
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static getContentStylePath($a_style_id, $add_random=true)
get content style path
getCharacteristics()
Get characteristics.
static _lookupType($a_id, $a_reference=false)
lookup object type
editMultipleJS()
Edit multiple paragraphs (Ajax mode, sends the content of the paragraphs)
User interface class for advanced drop-down selection lists.
static lookupSettingByParentType($a_par_type, $a_name, $a_default=false)
Lookup setting by parent type.
static formSelect( $selected, $varname, $options, $multiple=false, $direct_text=false, $size="0", $style_class="", $attribs="", $disabled=false)
Builds a select form field with options and shows the selected option first.
determineCharacteristic($a_insert=false)
Determine current characteristic.
executeCommand()
execute command
static _getCommonBBButtons()
Get common bb buttons.
outputError($a_err)
Output error.
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
static _getStandardTextCharacteristics()
Get standard characteristics.
insertCharacteristicTable($a_tpl, $a_seleted_value)
Insert characteristic table.
__construct($a_pg_obj, &$a_content_obj, $a_hier_id, $a_pc_id="")
Constructor public.
insertHelp($a_tpl)
Insert Help.
if(function_exists('posix_getuid') &&posix_getuid()===0) if(!array_key_exists('t', $options)) $tag
createJS()
Create paragraph per JS.