36 public const EDIT =
"edit";
106 protected \ILIAS\DI\UIServices
$ui;
144 string $a_parent_type,
147 bool $a_prevent_get_id =
false,
154 $this->tpl =
$DIC->ui()->mainTemplate();
155 $this->
ctrl = $DIC->ctrl();
156 $this->
lng = $DIC->language();
157 $this->tabs_gui =
$DIC->tabs();
158 $this->
access = $DIC->access();
159 $this->
user = $DIC->user();
160 $this->
help = $DIC[
"ilHelp"];
161 $this->
ui = $DIC->ui();
162 $this->
toolbar = $DIC->toolbar();
163 $this->component_factory =
$DIC[
"component.factory"];
165 $this->request =
$DIC
172 $this->requested_old_nr = $this->request->getInt(
"old_nr");
173 $this->requested_transl = $this->request->getString(
"transl");
174 $this->requested_file_id = $this->request->getString(
"file_id");
175 $this->requested_ref_id = $this->request->getInt(
"ref_id");
176 $this->requested_pg_id = $this->request->getInt(
"pg_id");
181 if ($a_old_nr == 0 && !$a_prevent_get_id && $this->requested_old_nr > 0) {
186 if ($a_lang ==
"" && $this->requested_transl !=
'') {
201 $this->page_linker =
new ilPageLinker(get_class($this));
203 $this->output2template =
true;
205 $this->template_output_var =
"PAGE_CONTENT";
206 $this->change_comments =
false;
207 $this->page_back_title = $this->
lng->txt(
"page");
208 $this->
lng->loadLanguageModule(
"content");
209 $this->
lng->loadLanguageModule(
"copg");
211 $this->tool_context =
$DIC->globalScreen()->tool()->context();
215 $this->
ctrl->saveParameter($this,
"transl");
218 $this->requested_user_id = $this->request->getInt(
"user");
219 $this->requested_q_id = $this->request->getInt(
"q_id");
220 $this->requested_history_mode = $this->request->getInt(
"history_mode");
222 $this->edit_repo =
$DIC
233 $this->tpl = $main_tpl;
247 string $a_adv_subtype =
"-"
249 $this->adv_ref_id = $a_adv_ref_id;
250 $this->adv_type = $a_adv_type;
251 $this->adv_subtype = $a_adv_subtype;
259 if ($this->adv_type ===
null) {
262 return [$this->adv_ref_id, $this->adv_type, $this->adv_subtype];
271 $this->getParentType(),
276 $page->setConcreteLang($this->concrete_lang);
277 $this->setPageObject($page);
282 $this->parent_type = $a_val;
287 return $this->parent_type;
290 public function setId(
int $a_val): void
305 $this->old_nr = $a_val;
310 return $this->old_nr;
324 return $this->language;
331 $this->getPageConfig()->setEnablePCType($a_pc_type, $a_val);
336 return $this->getPageConfig()->getEnablePCType($a_pc_type);
341 $this->page_config = $a_val;
346 return $this->page_config;
351 $this->obj = $a_pg_obj;
363 string $a_mode = self::PRESENTATION
365 $this->output_mode = $a_mode;
370 return $this->output_mode;
375 $this->output2template = $a_output;
380 return $this->output2template;
385 $this->presentation_title = $a_title;
390 return $this->presentation_title;
395 $this->header = $a_title;
400 return $this->header;
405 $this->link_params = $l_params;
410 return $this->link_params;
415 $this->link_frame = $l_frame;
420 return $this->link_frame;
425 $this->page_linker = $page_linker;
430 return $this->link_xml;
435 $this->getPageConfig()->setQuestionHTML($question_html);
440 return $this->getPageConfig()->getQuestionHTML();
445 $this->target_var = $a_variable;
450 return $this->target_var;
455 return $this->template_output_var;
460 $this->sourcecode_download_script = $script_name;
465 return $this->sourcecode_download_script;
470 $this->tabs_gui = $a_tabs;
475 $this->page_back_title = $a_title;
480 $this->file_download_link = $a_download_link;
485 return $this->file_download_link;
490 $this->fullscreen_link = $a_fullscreen_link;
495 return $this->fullscreen_link;
500 $this->int_link_return = $a_return;
505 $this->change_comments = $a_enabled;
510 return $this->change_comments;
513 public function enableNotes(
bool $a_enabled,
int $a_parent_id): void
515 $this->notes_enabled = $a_enabled;
516 $this->notes_parent_id = $a_parent_id;
521 return $this->notes_enabled;
529 $this->offline_directory = $offdir;
534 return $this->offline_directory;
543 $this->view_page_link = $a_link;
544 $this->view_page_target = $a_target;
549 return $this->view_page_link;
554 return $this->view_page_target;
559 return $this->
lng->txt(
"cont_presentation_view");
566 $this->act_obj = $a_obj;
567 $this->act_meth = $a_meth;
572 int $a_news_obj_id = 0,
573 string $a_news_obj_type =
""
575 $this->enabled_news = $a_enabled;
576 $this->news_obj_id = $a_news_obj_id;
577 $this->news_obj_type = $a_news_obj_type;
582 return $this->enabled_news;
589 $this->tab_hook = array(
"obj" => $a_object,
"func" => $a_function);
598 $this->editpreview = $a_editpreview;
603 return $this->editpreview;
608 $this->tabs_enabled = $a_enabledtabs;
613 return $this->tabs_enabled;
618 $this->enabledpagefocus = $a_enabledpagefocus;
623 $this->open_place_holder = $a_val;
628 return $this->open_place_holder;
633 return $this->enabledpagefocus;
638 $this->prependinghtml = $a_prependinghtml;
643 return $this->prependinghtml;
648 $this->enableediting = $a_enableediting;
653 return $this->enableediting;
661 $this->rawpagecontent = $a_rawpagecontent;
666 return $this->rawpagecontent;
671 $this->styleid = $a_styleid;
676 return $this->styleid;
681 $this->compare_mode = $a_val;
686 return $this->compare_mode;
696 $this->abstract_only = $a_val;
697 $this->abstract_pcid = $pcid;
702 return $this->abstract_only;
707 $this->render_page_container = $a_val;
712 return $this->render_page_container;
717 return $this->
lng->txt(
"inactive");
722 return $this->enabled_href;
727 $this->enabled_href = $enable;
742 object $a_observer_obj =
null,
743 string $a_observer_func =
""
745 $this->use_meta_data =
true;
746 $this->meta_data_rep_obj = $a_rep_obj;
747 $this->meta_data_sub_obj_id = $a_sub_obj_id;
748 $this->meta_data_type = $a_type;
749 $this->meta_data_observer_obj = $a_observer_obj;
750 $this->meta_data_observer_func = $a_observer_func;
755 $file_download_link = $this->getFileDownloadLink();
756 if ($this->getFileDownloadLink() ==
"" && $this->getOutputMode() !=
"offline") {
757 $file_download_link = $this->
ctrl->getLinkTarget($this,
"downloadFile");
759 return $file_download_link;
764 $fullscreen_link = $this->getFullscreenLink();
765 if ($this->getFullscreenLink() ==
"" && $this->getOutputMode() !=
"offline") {
766 $fullscreen_link = $this->
ctrl->getLinkTarget($this,
"displayMediaFullscreen",
"",
false,
false);
768 return $fullscreen_link;
773 $l = $this->sourcecode_download_script;
774 if ($this->sourcecode_download_script ==
"" && $this->getOutputMode() !=
"offline") {
775 $l = $this->
ctrl->getLinkTarget($this,
"");
786 if ($this->getOutputMode() ==
"edit") {
787 foreach ($this->component_factory->getActivePluginsInSlot(
"pgcp") as
$plugin) {
788 if (
$plugin->isValidParentType($this->getPageObject()->getParentType())) {
789 $xml .=
'<ComponentPlugin Name="' .
$plugin->getPluginName() .
795 $xml =
"<ComponentPlugins>" .
$xml .
"</ComponentPlugins>";
807 $next_class = $this->
ctrl->getNextClass($this);
808 if ($next_class !==
"") {
809 $this->
ctrl->setReturn($this,
"edit");
811 $this->log->debug(
"next_class: " . $next_class);
812 if ($next_class ==
"" && $this->
ctrl->getCmd() ==
"edit") {
813 $this->tabs_gui->clearTargets();
819 switch ($next_class) {
820 case 'ilobjectmetadatagui':
821 $this->setBackToEditTabs();
822 $md_gui =
new ilObjectMetaDataGUI($this->meta_data_rep_obj, $this->meta_data_type, $this->meta_data_sub_obj_id);
823 if (is_object($this->meta_data_observer_obj)) {
824 $md_gui->addMDObserver(
825 $this->meta_data_observer_obj,
826 $this->meta_data_observer_func,
831 if ($this->adv_type !=
"") {
832 $md_gui->setAdvMdRecordObject($this->adv_ref_id, $this->adv_type, $this->adv_subtype);
834 $this->
ctrl->forwardCommand($md_gui);
837 case "ileditclipboardgui":
838 $this->setBackToEditTabs();
840 $return_cmd = $this->
ctrl->getLinkTargetByClass(
841 ilPageEditorGUI::class,
842 "insertFromClipboard"
845 $clip_gui->setPageBackTitle($this->page_back_title);
846 $ret = $this->
ctrl->forwardCommand($clip_gui);
851 $html = $this->edit();
852 $this->tabs_gui->setTabActive(
"edit");
855 case 'ilpublicuserprofilegui':
857 $ret = $this->
ctrl->forwardCommand($profile_gui);
860 case "ilpageeditorgui":
861 $this->setEditorToolContext();
863 if (!$this->getEnableEditing()) {
864 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"permission_denied"),
true);
865 $this->
ctrl->redirect($this,
"preview");
868 $page_editor->setHeader($this->getHeader());
869 $page_editor->setPageBackTitle($this->page_back_title);
870 $page_editor->setIntLinkReturn($this->int_link_return);
872 $ret = $this->
ctrl->forwardCommand($page_editor);
875 case 'ilnewsitemgui':
877 $news_item_gui->setEnableEdit(
true);
878 $news_item_gui->setContextObjId($this->news_obj_id);
879 $news_item_gui->setContextObjType($this->news_obj_type);
880 $news_item_gui->setContextSubObjId($this->obj->getId());
881 $news_item_gui->setContextSubObjType(
"pg");
883 $ret = $this->
ctrl->forwardCommand($news_item_gui);
886 case "ilpropertyformgui":
887 $form = $this->initOpenedContentForm();
888 $this->
ctrl->forwardCommand($form);
891 case "ilinternallinkgui":
892 $this->
lng->loadLanguageModule(
"content");
895 $link_gui->filterLinkType(
"PageObject_FAQ");
896 $link_gui->filterLinkType(
"GlossaryItem");
897 $link_gui->filterLinkType(
"Media_Media");
898 $link_gui->filterLinkType(
"Media_FAQ");
900 $link_gui->setFilterWhiteList(
true);
901 $this->
ctrl->forwardCommand($link_gui);
904 case "ilquestioneditgui":
905 $this->setQEditTabs(
"question");
907 $edit_gui->setPageConfig($this->getPageConfig());
908 $edit_gui->setSelfAssessmentEditingMode(
true);
909 $ret = $this->
ctrl->forwardCommand($edit_gui);
910 $this->tpl->setContent($ret);
913 case 'ilassquestionfeedbackeditinggui':
915 $this->onFeedbackEditingForwarding();
918 $this->setQEditTabs(
"feedback");
921 $this->
lng->loadLanguageModule(
"assessment");
926 $this->requested_q_id
928 $this->requested_q_id
930 $questionGUI->object->setObjId(0);
931 $questionGUI->object->setSelfAssessmentEditingMode(
true);
932 $questionGUI->object->setPreventRteUsage($this->getPageConfig()->getPreventRteUsage());
936 $this->
ctrl->forwardCommand($gui);
940 case 'ilLearninghistorygui':
942 if ($this->getPageObject()->getParentType() ==
"prtf") {
946 $hist_gui->setUserId($user_id);
947 $this->
ctrl->forwardCommand($hist_gui);
951 $cmd = $this->
ctrl->getCmd(
"preview");
953 if ($this->getViewPageLink() !=
"" && $cmd !=
"edit") {
954 $this->tabs_gui->addNonTabbedLink(
956 $this->getViewPageText(),
957 $this->getViewPageLink(),
958 $this->getViewPageTarget()
961 $ret = $this->$cmd();
962 if ($this->getOutputMode() == self::PREVIEW && $cmd ==
"preview") {
963 $this->showEditToolbar();
968 return (
string) $ret;
976 $this->tabs_gui->clearTargets();
978 $this->tabs_gui->setBackTarget(
979 $this->
lng->txt(
"back"),
980 $this->ctrl->getLinkTarget($this,
"edit")
983 $this->
ctrl->setParameterByClass(
"ilquestioneditgui",
"q_id", $this->requested_q_id);
984 $this->tabs_gui->addTab(
986 $this->
lng->txt(
"question"),
987 $this->ctrl->getLinkTargetByClass(
"ilquestioneditgui",
"editQuestion")
990 $this->
ctrl->setParameterByClass(
"ilAssQuestionFeedbackEditingGUI",
"q_id", $this->requested_q_id);
991 $this->tabs_gui->addTab(
993 $this->
lng->txt(
"feedback"),
997 $this->tabs_gui->activateTab($a_active);
1006 $this->getPageObject()->setActivationStart(
null);
1007 $this->getPageObject()->setActivationEnd(
null);
1008 $this->getPageObject()->setActive(
false);
1009 $this->getPageObject()->update();
1010 $this->
ctrl->redirect($this,
"edit");
1015 $this->getPageObject()->setActivationStart(
null);
1016 $this->getPageObject()->setActivationEnd(
null);
1017 $this->getPageObject()->setActive(
true);
1018 $this->getPageObject()->update();
1019 $this->
ctrl->redirect($this,
"edit");
1029 if ($this->getEnableEditing()) {
1030 $b = $ui->factory()->button()->standard(
1031 $lng->txt(
"edit_page"),
1032 $this->ctrl->getLinkTarget($this,
"edit")
1047 $paragraph_plugin_string =
'';
1048 $disable_auto_margins =
'';
1057 $main_tpl->addJavaScript(
"./Services/COPage/js/ilCOPagePres.js");
1060 ilOverlayGUI::initJavascript();
1065 if ($this->getOutputMode() ==
"edit") {
1066 $this->initEditing();
1067 if (!$this->getPageObject()->getEditLock()) {
1071 $this->getPageObject()->buildDom();
1073 $this->log->debug(
"ilPageObjectGUI, showPage() in edit mode.");
1075 $tpl =
new ilTemplate(
"tpl.page_edit_wysiwyg.html",
true,
true,
"Services/COPage");
1077 $tpl->setVariable(
"CLASS_PAGE_TD",
"ilc_Page");
1080 if ($this->isEnabledChangeComments()) {
1081 $tpl->setCurrentBlock(
"change_comment");
1082 $tpl->setVariable(
"TXT_ADD_COMMENT", $this->
lng->txt(
"cont_add_change_comment"));
1086 if ($this->getPageConfig()->getUsePageContainer()) {
1087 $tpl->setVariable(
"PAGE_CONTAINER_CLASS",
"ilc_page_cont_PageContainer");
1092 $this->
ctrl->getFormActionByClass(
"ilpageeditorgui",
"",
"",
true)
1096 $sel_js_mode =
"enable";
1099 $tpl->setVariable(
"PREPENDING_HTML", $this->getPrependingHtml());
1100 $tpl->setVariable(
"TXT_CONFIRM_DELETE", $this->
lng->txt(
"cont_confirm_delete"));
1104 if ($sel_js_mode ==
"enable") {
1107 $tpl->setCurrentBlock(
"int_link_prep");
1109 $this->
ctrl->getLinkTargetByClass(
1110 array(
"ilpageeditorgui",
"ilinternallinkgui"),
1117 $tpl->parseCurrentBlock();
1119 $editor_init = new \ILIAS\COPage\Editor\UI\Init();
1120 $editor_init->initUI($main_tpl, $this->getOpenPlaceHolder());
1125 $tpl =
new ilTemplate(
"tpl.page.html",
true,
true,
"Services/COPage");
1126 if ($this->getEnabledPageFocus()) {
1127 $tpl->touchBlock(
"page_focus");
1131 if ($this->isPageContainerToBeRendered()) {
1132 $tpl->touchBlock(
"page_container_1");
1133 $tpl->touchBlock(
"page_container_2");
1134 $tpl->touchBlock(
"page_container_3");
1138 $c_old_nr = $this->getPageObject()->old_nr;
1139 if ($c_old_nr > 0 || $this->getCompareMode() || ($this->requested_history_mode == 1)) {
1141 $this->getPageObject()->getHistoryInfo($c_old_nr);
1143 if (!$this->getCompareMode()) {
1144 $this->
ctrl->setParameter($this,
"history_mode",
"1");
1147 if (isset($hist_info[
"previous"])) {
1148 $tpl->setCurrentBlock(
"previous_rev");
1149 $tpl->setVariable(
"TXT_PREV_REV", $this->
lng->txt(
"cont_previous_rev"));
1150 $this->
ctrl->setParameter($this,
"old_nr", $hist_info[
"previous"][
"nr"]);
1153 $this->
ctrl->getLinkTarget($this,
"preview")
1156 $tpl->setCurrentBlock(
"previous_rev_disabled");
1157 $tpl->setVariable(
"TXT_PREV_REV", $this->
lng->txt(
"cont_previous_rev"));
1162 if ($c_old_nr > 0) {
1163 $tpl->setCurrentBlock(
"next_rev");
1164 $tpl->setVariable(
"TXT_NEXT_REV", $this->
lng->txt(
"cont_next_rev"));
1165 $this->
ctrl->setParameter($this,
"old_nr", $hist_info[
"next"][
"nr"] ?? 0);
1168 $this->
ctrl->getLinkTarget($this,
"preview")
1170 $tpl->parseCurrentBlock();
1173 $tpl->setCurrentBlock(
"latest_rev");
1174 $tpl->setVariable(
"TXT_LATEST_REV", $this->
lng->txt(
"cont_latest_rev"));
1175 $this->
ctrl->setParameter($this,
"old_nr",
"");
1178 $this->
ctrl->getLinkTarget($this,
"preview")
1180 $tpl->parseCurrentBlock();
1183 $this->
ctrl->setParameter($this,
"history_mode",
"");
1188 $this->
ctrl->setParameter($this,
"old_nr", $c_old_nr);
1191 $this->
ctrl->getLinkTarget($this,
"rollbackConfirmation")
1193 $this->
ctrl->setParameter($this,
"old_nr",
"");
1196 $this->
lng->txt(
"cont_rollback")
1202 $tpl->setCurrentBlock(
"hist_nav");
1203 $tpl->setVariable(
"TXT_REVISION", $this->
lng->txt(
"cont_revision"));
1205 "VAL_REVISION_DATE",
1212 $tpl->parseCurrentBlock();
1215 if ($this->getOutputMode() != self::PRESENTATION &&
1216 $this->getOutputMode() != self::OFFLINE &&
1217 $this->getOutputMode() != self::PREVIEW &&
1218 $this->getOutputMode() != self::PRINTING) {
1219 $tpl->setVariable(
"FORMACTION", $this->
ctrl->getFormActionByClass(
"ilpageeditorgui"));
1223 if ($this->getOutputMode() ==
"edit") {
1225 $this->obj->getParentType() .
":pg",
1226 $this->obj->getId(),
1227 $this->obj->getLanguage()
1229 $mob_links = array();
1230 foreach ($links as $link) {
1231 if ($link[
"type"] ==
"mob") {
1239 if (count($mob_links) > 0) {
1240 $tpl->setCurrentBlock(
"med_link");
1241 $tpl->setVariable(
"TXT_LINKED_MOBS", $this->
lng->txt(
"cont_linked_mobs"));
1246 $tpl->setVariable(
"TXT_EDIT_MEDIA", $this->
lng->txt(
"cont_edit_mob"));
1247 $tpl->
setVariable(
"TXT_COPY_TO_CLIPBOARD", $this->
lng->txt(
"cont_copy_to_clipboard"));
1253 $this->getPageObject()->buildDom();
1255 $this->getPageObject(),
1256 $this->getPageObject()->getDomDoc()
1258 if (count($snippets) > 0) {
1259 foreach ($snippets as $s) {
1262 $tpl->setCurrentBlock(
"med_link");
1263 $tpl->setVariable(
"TXT_CONTENT_SNIPPETS_USED", $this->
lng->txt(
"cont_snippets_used"));
1268 $tpl->setVariable(
"TXT_SHOW_INFO", $this->
lng->txt(
"cont_show_info"));
1273 if (!$this->getPageObject()->getActive() &&
1274 $this->getPageObject()->getActivationStart() !=
"" &&
1275 $this->getPageConfig()->getEnableScheduledActivation()) {
1276 $tpl->setCurrentBlock(
"activation_txt");
1277 $tpl->setVariable(
"TXT_SCHEDULED_ACTIVATION", $this->
lng->txt(
"cont_scheduled_activation"));
1282 $this->getPageObject()->getActivationStart(),
1291 $this->getPageObject()->getActivationEnd(),
1296 $tpl->parseCurrentBlock();
1300 $reload_tree = $this->request->getString(
"reloadTree");
1301 if ($reload_tree ==
"y") {
1302 $tpl->setCurrentBlock(
"reload_tree");
1305 $this->
ctrl->getLinkTargetByClass(
"ilobjlearningmodulegui",
"explorer",
"",
false,
false)
1311 $builded = $this->obj->buildDom();
1314 if ($this->getOutputMode() ==
"edit") {
1317 if (!$this->obj->checkPCIds()) {
1318 $this->obj->insertPCIds();
1319 $this->obj->update(
true,
true);
1322 $this->obj->addFileSizes();
1323 $this->obj->addHierIDs();
1325 $hids = $this->obj->getHierIds();
1326 $row1_ids = $this->obj->getFirstRowIds();
1327 $col1_ids = $this->obj->getFirstColumnIds();
1328 $litem_ids = $this->obj->getListItemIds();
1329 $fitem_ids = $this->obj->getFileItemIds();
1332 $hids = $this->obj->getHierIds();
1333 foreach ($hids as $hid) {
1334 $tpl->setCurrentBlock(
"add_dhtml");
1335 $tpl->setVariable(
"CONTEXTMENU",
"contextmenu_" . $hid);
1336 $tpl->parseCurrentBlock();
1340 foreach ($col1_ids as $hid) {
1341 $tpl->setCurrentBlock(
"add_dhtml");
1342 $tpl->setVariable(
"CONTEXTMENU",
"contextmenu_r" . $hid);
1343 $tpl->parseCurrentBlock();
1347 foreach ($row1_ids as $hid) {
1348 $tpl->setCurrentBlock(
"add_dhtml");
1349 $tpl->setVariable(
"CONTEXTMENU",
"contextmenu_c" . $hid);
1350 $tpl->parseCurrentBlock();
1354 foreach ($litem_ids as $hid) {
1355 $tpl->setCurrentBlock(
"add_dhtml");
1356 $tpl->setVariable(
"CONTEXTMENU",
"contextmenu_i" . $hid);
1357 $tpl->parseCurrentBlock();
1361 foreach ($fitem_ids as $hid) {
1362 $tpl->setCurrentBlock(
"add_dhtml");
1363 $tpl->setVariable(
"CONTEXTMENU",
"contextmenu_i" . $hid);
1364 $tpl->parseCurrentBlock();
1367 $this->obj->addFileSizes();
1374 if (!$this->link_xml_set) {
1375 $this->setDefaultLinkXml();
1380 $link_xml = $this->getLinkXML();
1383 if ($this->getStyleId() > 0) {
1386 $template_xml = $style->getTemplateXML();
1387 $disable_auto_margins =
"n";
1388 if ($style->lookupStyleSetting(
"disable_auto_margins")) {
1389 $disable_auto_margins =
"y";
1394 $append_footnotes =
"y";
1395 if ($this->getAbstractOnly()) {
1396 if (!$this->abstract_pcid) {
1397 $content =
"<dummy><PageObject><PageContent><Paragraph>" .
1398 $this->obj->getFirstParagraphText() . $link_xml .
1399 "</Paragraph></PageContent></PageObject></dummy>";
1401 $append_footnotes =
"n";
1402 $par = $this->obj->getParagraphForPCID($this->abstract_pcid);
1403 $content =
"<dummy><PageObject><PageContent><Paragraph Characteristic='" . $par->getCharacteristic() .
"'>" .
1404 $par->getText() . $link_xml .
1405 "</Paragraph></PageContent></PageObject>" . $this->obj->getMultimediaXML() .
"</dummy>";
1408 $content = $this->obj->getXMLFromDom(
1412 $link_xml . $template_xml . $this->getComponentPluginsXML(),
1419 if ($builded !==
true) {
1420 $this->displayValidationError($builded);
1422 $this->displayValidationError((
string) $this->edit_repo->getPageError());
1424 $this->edit_repo->clearPageError();
1427 $pg_title = $this->getPresentationTitle();
1432 if ($this->getOutputMode() ==
"edit") {
1439 if ($this->getOutputMode() !=
"offline") {
1443 $enlarge_path =
"images/enlarge.svg";
1446 $pg_title_class = ($this->getOutputMode() ==
"print")
1447 ?
"ilc_PrintPageTitle"
1452 $enable_split_new = ($this->obj->getParentType() ==
"lm")
1458 if (($this->obj->getParentType() ==
"lm") &&
1460 $this->obj->getParentId(),
1463 $enable_split_next =
"y";
1465 $enable_split_next =
"n";
1468 $img_path =
ilUtil::getImagePath(
"",
false, $this->getOutputMode(), $this->getOutputMode() ==
"offline");
1471 if ($this->getPageConfig()->getEnablePCType(
"Tabs")) {
1479 $file_download_link = $this->determineFileDownloadLink();
1480 $fullscreen_link = $this->determineFullscreenLink();
1481 $this->sourcecode_download_script = $this->determineSourcecodeDownloadScript();
1485 $media_mode = ($this->getOutputMode() ==
"edit")
1486 ? $this->
user->getPref(
"ilPageEditor_MediaMode")
1490 $this->getOutputMode() ==
"edit");
1494 $cfg = $this->getPageConfig();
1496 $current_ts = time();
1498 $enable_href = $this->getEnabledHref();
1499 if ($this->getOutputMode() == self::EDIT) {
1500 $enable_href =
false;
1504 $params = array(
'mode' => $this->getOutputMode(),
'pg_title' => htmlentities($pg_title, ENT_QUOTES,
"UTF-8"),
1505 'enable_placeholder' => $cfg->getEnablePCType(
"PlaceHolder") ?
"y" :
"n",
1506 'pg_id' => $this->obj->getId(),
'pg_title_class' => $pg_title_class,
1507 'webspace_path' => $wb_path,
'enlarge_path' => $enlarge_path,
1508 'img_col' => $col_path,
1509 'img_row' => $row_path,
1510 'img_cell' => $cell_path,
1511 'img_item' => $item_path,
1512 'acc_save_url' =>
"./ilias.php?baseClass=ilaccordionpropertiesstoragegui&cmd=setOpenedTab" .
1513 "&user_id=" . $this->user->getId(),
1514 'append_footnotes' => $append_footnotes,
1515 'compare_mode' => $this->getCompareMode() ?
"y" :
"n",
1516 'enable_split_new' => $enable_split_new,
1517 'enable_split_next' => $enable_split_next,
1518 'link_params' => $this->link_params,
1519 'file_download_link' => $file_download_link,
1520 'fullscreen_link' => $fullscreen_link,
1521 'img_path' => $img_path,
1522 'parent_id' => $this->obj->getParentId(),
1523 'download_script' => $this->sourcecode_download_script,
1524 'encoded_download_script' => urlencode($this->sourcecode_download_script),
1525 'enable_rep_objects' => $cfg->getEnablePCType(
"Resources") ?
"y" :
"n",
1526 'enable_login_page' => $cfg->getEnablePCType(
"LoginPageElement") ?
"y" :
"n",
1528 'enable_tabs' => $cfg->getEnablePCType(
"Tabs") ?
"y" :
"n",
1529 'enable_sa_qst' => $cfg->getEnableSelfAssessment() ?
"y" :
"n",
1530 'enable_file_list' => $cfg->getEnablePCType(
"FileList") ?
"y" :
"n",
1531 'enable_content_includes' => $cfg->getEnablePCType(
"ContentInclude") ?
"y" :
"n",
1532 'enable_content_templates' => (count($this->getPageObject()->getContentTemplates()) > 0) ?
"y" :
"n",
1533 'paste' => $paste ?
"y" :
"n",
1534 'media_mode' => $media_mode,
1535 'javascript' => $sel_js_mode,
1536 'paragraph_plugins' => $paragraph_plugin_string,
1537 'disable_auto_margins' => $disable_auto_margins,
1538 'page_toc' => $cfg->getEnablePageToc() ?
"y" :
"n",
1539 'enable_profile' => $cfg->getEnablePCType(
"Profile") ?
"y" :
"n",
1540 'enable_verification' => $cfg->getEnablePCType(
"Verification") ?
"y" :
"n",
1541 'enable_blog' => $cfg->getEnablePCType(
"Blog") ?
"y" :
"n",
1542 'enable_skills' => $cfg->getEnablePCType(
"Skills") ?
"y" :
"n",
1543 'enable_learning_history' => $cfg->getEnablePCType(
"LearningHistory") ?
"y" :
"n",
1544 'enable_qover' => $cfg->getEnablePCType(
"QuestionOverview") ?
"y" :
"n",
1545 'enable_consultation_hours' => $cfg->getEnablePCType(
"ConsultationHours") ?
"y" :
"n",
1546 'enable_my_courses' => $cfg->getEnablePCType(
"MyCourses") ?
"y" :
"n",
1547 'enable_amd_page_list' => $cfg->getEnablePCType(
"AMDPageList") ?
"y" :
"n",
1548 'current_ts' => $current_ts,
1550 'flv_video_player' => $flv_video_player,
1551 'page_perma_link' => $this->getPagePermaLink(),
1552 'activated_protection' =>
1554 'protection_text' => $this->lng->txt(
"cont_sec_protected_text"),
1555 'enable_href' => $enable_href
1557 if ($this->link_frame !=
"") {
1558 $params[
"pg_frame"] = $this->link_frame;
1566 $params[
"incl_elements_date"] = $this->obj->getLastUpdateOfIncludedElements();
1572 $md5 = md5(serialize(
$params) . $link_xml . $template_xml . $md5_adds);
1579 if (($this->getOutputMode() ==
"preview" || $this->getOutputMode() ==
"presentation") &&
1580 !$this->getCompareMode() &&
1581 !$this->getAbstractOnly() &&
1582 $md5 == $this->obj->getRenderMd5() &&
1583 ($this->obj->getLastChange() < $this->obj->getRenderedTime()) &&
1584 $this->obj->getRenderedTime() !=
"" &&
1585 $this->obj->old_nr == 0) {
1587 $output = $this->obj->getRenderedContent();
1589 $xsl = file_get_contents(
"./Services/COPage/xsl/page.xsl");
1590 $this->log->debug(
"Calling XSLT, content: " . substr($content, 0, 100));
1592 $args = array(
'/_xml' => $content,
'/_xsl' => $xsl );
1594 $output = xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",
null, $args,
$params);
1595 }
catch (Exception
$e) {
1597 if ($this->getOutputMode() ==
"edit") {
1598 $output =
"<pre>" .
$e->getMessage() .
"<br>" . htmlentities($content) .
"</pre>";
1602 if (($this->getOutputMode() ==
"presentation" || $this->getOutputMode() ==
"preview")
1603 && !$this->getAbstractOnly()
1604 && $this->obj->old_nr == 0) {
1605 $this->obj->writeRenderedContent($output, $md5);
1612 if (($this->getOutputMode() !=
"edit" ||
1613 $this->
user->getPref(
"ilPageEditor_HTMLMode") !=
"disable")
1614 && !$this->getPageConfig()->getPreventHTMLUnmasking()) {
1615 $output = str_replace(
"<",
"<", $output);
1616 $output = str_replace(
">",
">", $output);
1618 $output = str_replace(
"&",
"&", $output);
1626 $output = $this->insertResources($output);
1629 if ($this->getPageConfig()->getEnablePageToc()) {
1630 $output = $this->insertPageToc($output);
1634 $output = $this->insertAdvTrigger($output);
1639 $output = $this->replaceCurlyBrackets($output);
1642 $output = str_replace(
"\n",
"", $output);
1645 $output = $this->postOutputProcessing($output);
1647 if ($this->getOutputMode() ==
"edit" &&
1648 !$this->getPageObject()->getActive($this->getPageConfig()->getEnableScheduledActivation())) {
1649 $output =
'<div class="copg-disabled-page"><div class="ilCopgDisabledText">' . $this->getDisabledText() .
'</div>' . $output .
'</div>';
1654 foreach ($defs as $def) {
1656 $pc_class = $def[
"pc_class"];
1657 $pc_obj =
new $pc_class($this->getPageObject());
1658 $pc_obj->setSourcecodeDownloadScript($this->determineSourcecodeDownloadScript());
1659 $pc_obj->setFileDownloadLink($this->determineFileDownloadLink());
1660 $pc_obj->setFullscreenLink($this->determineFullscreenLink());
1661 $pc_obj->setProfileBackUrl($this->getProfileBackUrl());
1664 $output = $pc_obj->modifyPageContentPostXsl($output, $this->getOutputMode(), $this->getAbstractOnly());
1668 $this->addResourcesToTemplate($main_tpl);
1673 if ($this->
ctrl->isAsynch() && !$this->getRawPageContent() &&
1674 $this->getOutputMode() ==
"edit") {
1676 $up_pc = $this->request->getString(
"updated_pc_id_str");
1680 $tpl->setVariable($this->getTemplateOutputVar(), $output);
1681 $tpl->setCurrentBlock(
"edit_page");
1682 $tpl->parseCurrentBlock();
1683 echo
$tpl->get(
"edit_page");
1686 if ($this->outputToTemplate()) {
1687 $tpl->setVariable($this->getTemplateOutputVar(), $output);
1688 $this->tpl->setVariable($this->getTemplateTargetVar(),
$tpl->get());
1691 if ($this->getRawPageContent()) {
1694 $tpl->setVariable($this->getTemplateOutputVar(), $output);
1704 while (is_int($start = strpos($output,
"<!--ParStart-->")) &&
1705 is_int($end = strpos($output,
"<!--ParEnd-->", $start))) {
1706 $output = substr($output, 0, $start) .
1709 array(
"{",
"}"),
1710 substr($output, $start + 15, $end - ($start + 15))
1712 substr($output, $end + 13);
1726 return array(
"deactivatePage" => $this->
lng->txt(
"cont_deactivate_page"),
1727 "activatePage" => $this->lng->txt(
"cont_activate_page"));
1735 $media_mode = $this->request->getString(
"media_mode");
1736 $html_mode = $this->request->getString(
"html_mode");
1737 $js_mode = $this->request->getString(
"js_mode");
1738 if ($media_mode !=
"") {
1739 if ($media_mode ==
"disable") {
1740 $this->
user->writePref(
"ilPageEditor_MediaMode",
"disable");
1742 $this->
user->writePref(
"ilPageEditor_MediaMode",
"");
1745 if ($html_mode !=
"") {
1746 if ($html_mode ==
"disable") {
1747 $this->
user->writePref(
"ilPageEditor_HTMLMode",
"disable");
1749 $this->
user->writePref(
"ilPageEditor_HTMLMode",
"");
1752 if ($js_mode !=
"") {
1753 if ($js_mode ==
"disable") {
1754 $this->
user->writePref(
"ilPageEditor_JavaScript",
"disable");
1756 $this->
user->writePref(
"ilPageEditor_JavaScript",
"");
1760 $this->
ctrl->redirect($this,
"edit");
1769 bool $a_int_links =
false,
1770 bool $a_wiki_links =
false,
1771 bool $a_keywords =
false,
1773 $a_paragraph_styles =
true,
1774 $a_save_return =
true,
1777 $a_user_links =
false,
1778 \
ILIAS\COPage\Editor\Server\UIWrapper $ui_wrapper =
null
1783 $ctrl =
$DIC->ctrl();
1786 $style_service =
$DIC->contentStyle()->internal();
1787 $style_access_manager = $style_service->domain()->access(
1789 $DIC->user()->getId()
1791 $char_manager = $style_service->domain()->characteristic(
1793 $style_access_manager
1798 $f =
static function (
string $type,
string $code) use ($char_manager,
$lng):
string {
1799 $title = $char_manager->getPresentationTitle(
"text_inline",
$type);
1800 if ($title ===
$type) {
1801 $title =
$lng->txt(
"cont_char_style_" . $code);
1808 if ($a_style_id === 0) {
1810 "Comment" => array(
"code" =>
"com",
"txt" =>
$f(
"Comment",
"com")),
1811 "Quotation" => array(
"code" =>
"quot",
"txt" =>
$f(
"Quotation",
"quot")),
1812 "Accent" => array(
"code" =>
"acc",
"txt" =>
$f(
"Accent",
"acc")),
1813 "Code" => array(
"code" =>
"code",
"txt" =>
$f(
"Code",
"code"))
1816 foreach (ilPCParagraphGUI::_getTextCharacteristics($a_style_id,
true) as
$c) {
1817 if (in_array(
$c, [
"Strong",
"Important",
"Emph"])) {
1820 if (!isset($chars[
$c])) {
1821 $title = $char_manager->getPresentationTitle(
"text_inline",
$c);
1824 $chars[
"Code"] = array(
"code" =>
"code",
"txt" =>
$f(
"Code",
"code"));
1827 $chars[
"Comment"] = array(
"code" =>
"com",
"txt" =>
$f(
"Comment",
"com"));
1830 $chars[
"Quotation"] = array(
"code" =>
"quot",
"txt" =>
$f(
"Quotation",
"quot"));
1833 $chars[
"Accent"] = array(
"code" =>
"acc",
"txt" =>
$f(
"Accent",
"acc"));
1836 $chars[
$c] = array(
"code" =>
"",
"txt" => $title);
1842 foreach ($chars as
$key => $char) {
1845 "active_" . $char[
"code"],
1851 case "Code": $tag =
"code";
break;
1853 $html =
'<' . $tag .
' class="ilc_' . $t .
'_' .
$key .
'" style="font-size:90%; margin-top:2px; margin-bottom:2px; position:static;">' . $char[
"txt"] .
"</" . $tag .
">";
1854 $char_formats[] = [
"text" => $html,
"action" =>
"selection.format",
"data" => [
"format" =>
$key]];
1859 $numbered_list =
'<svg width="24" height="24"><path d="M10 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 110-2zM6 4v3.5c0 .3-.2.5-.5.5a.5.5 0 01-.5-.5V5h-.5a.5.5 0 010-1H6zm-1 8.8l.2.2h1.3c.3 0 .5.2.5.5s-.2.5-.5.5H4.9a1 1 0 01-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 00-.2-.2H4.5a.5.5 0 01-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zM7 17v2c0 .6-.4 1-1 1H4.5a.5.5 0 010-1h1.2c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.4a.4.4 0 110-.8h1.3c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.5a.5.5 0 110-1H6c.6 0 1 .4 1 1z" fill-rule="evenodd"></path></svg>';
1861 $bullet_list =
'<svg width="24" height="24"><path d="M11 5h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 010-2zM4.5 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1z" fill-rule="evenodd"></path></svg>';
1863 $indent =
'<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 110-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm-5 4h12a1 1 0 010 2H7a1 1 0 010-2zm-2.6-3.8L6.2 12l-1.8-1.2a1 1 0 011.2-1.6l3 2a1 1 0 010 1.6l-3 2a1 1 0 11-1.2-1.6z" fill-rule="evenodd"></path></svg>';
1865 $outdent =
'<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 110-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 010-2zm-5 4h12a1 1 0 010 2H7a1 1 0 010-2zm1.6-3.8a1 1 0 01-1.2 1.6l-3-2a1 1 0 010-1.6l3-2a1 1 0 011.2 1.6L6.8 12l1.8 1.2z" fill-rule="evenodd"></path></svg>';
1871 if ($aset->get(
"use_physical")) {
1877 foreach ([
"str",
"emp",
"imp",
"sup",
"sub"] as
$c) {
1885 $c_formats[] = [
"text" =>
'<span class="ilc_text_inline_Strong">' . $str .
'</span>',
1886 "action" =>
"selection.format",
1887 "data" => [
"format" =>
"Strong"],
1888 "aria-label" =>
$lng->txt(
"cont_text_str")
1892 $c_formats[] = [
"text" =>
'<span class="ilc_text_inline_Emph">' . $emp .
'</span>',
1893 "action" =>
"selection.format",
1894 "data" => [
"format" =>
"Emph"],
1895 "aria-label" =>
$lng->txt(
"cont_text_emp")
1899 $c_formats[] = [
"text" =>
'<span class="ilc_text_inline_Important">' . $imp .
'</span>',
1900 "action" =>
"selection.format",
1901 "data" => [
"format" =>
"Important"],
1902 "aria-label" =>
$lng->txt(
"cont_text_imp")
1906 $c_formats[] = [
"text" =>
'x<sup>2</sup>',
1907 "action" =>
"selection.format",
1908 "data" => [
"format" =>
"Sup"],
1909 "aria-label" =>
$lng->txt(
"cont_text_sup")
1913 $c_formats[] = [
"text" =>
'x<sub>2</sub>',
1914 "action" =>
"selection.format",
1915 "data" => [
"format" =>
"Sub"],
1916 "aria-label" =>
$lng->txt(
"cont_text_sub")
1922 $c_formats[] = [
"text" =>
"<i>A</i>",
1923 "action" => $char_formats,
1924 "aria-label" =>
$lng->txt(
"copg_more_character_formats")
1926 $c_formats[] = [
"text" =>
'<i><b><u>T</u></b><sub>x</sub></i>',
1927 "action" =>
"selection.removeFormat",
1929 "aria-label" =>
$lng->txt(
"copg_remove_formats")
1932 "cont_char_format" => $c_formats,
1935 "text" => $bullet_list,
1936 "action" =>
"list.bullet",
1938 "aria-label" =>
$lng->txt(
"cont_bullet_list")
1941 "text" => $numbered_list,
1942 "action" =>
"list.number",
1944 "aria-label" =>
$lng->txt(
"cont_numbered_list")
1948 "action" =>
"list.outdent",
1950 "aria-label" =>
$lng->txt(
"cont_list_outdent")
1954 "action" =>
"list.indent",
1956 "aria-label" =>
$lng->txt(
"cont_list_indent")
1965 if ($a_wiki_links) {
1966 $links[] = [
"text" =>
$lng->txt(
"cont_wiki_link_dialog"),
"action" =>
"link.wikiSelection",
"data" => [
1968 $links[] = [
"text" =>
"[[" .
$lng->txt(
"cont_wiki_page") .
"]]",
"action" =>
"link.wiki",
"data" => []];
1971 $links[] = [
"text" =>
$lng->txt(
"cont_text_iln_link"),
"action" =>
"link.internal",
"data" => []];
1978 $links[] = [
"text" =>
$lng->txt(
"cont_text_xln"),
"action" =>
"link.external",
"data" => []];
1980 if ($a_user_links) {
1981 $links[] = [
"text" =>
$lng->txt(
"cont_link_user"),
"action" =>
"link.user",
"data" => []];
1986 $menu[
"cont_more_functions"] = [];
1987 $menu[
"cont_more_functions"][] = [
"text" =>
$lng->txt(
"cont_link") .
'<i class="mce-ico mce-i-link"></i>',
"action" => $links];
1990 $menu[
"cont_more_functions"][] = [
"text" =>
$lng->txt(
"cont_keyword"),
"action" =>
"selection.keyword",
"data" => []];
1999 $menu[
"cont_more_functions"][] = [
"text" =>
'Tex',
"action" =>
"selection.tex",
"data" => []];
2007 $menu[
"cont_more_functions"][] = [
"text" =>
$lng->txt(
"cont_footnote"),
"action" =>
"selection.fn",
"data" => []];
2010 $menu[
"cont_more_functions"][] = [
"text" =>
$lng->txt(
"cont_anchor"),
"action" =>
"selection.anchor",
"data" => []];
2013 $btpl =
new ilTemplate(
"tpl.tiny_menu.html",
true,
true,
"Services/COPage");
2015 foreach ($menu as $section_title => $section) {
2016 foreach ($section as $item) {
2017 if (is_array($item[
"action"])) {
2019 foreach ($item[
"action"] as
$i) {
2020 $buttons[] = $ui_wrapper->getButton(
2026 $i[
"aria-label"] ??
""
2029 $dd = $ui->factory()->dropdown()->standard($buttons)->withLabel($item[
"text"])
2030 ->withAriaLabel($item[
"aria-label"] ??
"");
2031 $btpl->setCurrentBlock(
"button");
2032 $btpl->setVariable(
"BUTTON", $ui->renderer()->renderAsync($dd));
2034 $b = $ui_wrapper->getRenderedButton(
2040 $item[
"aria-label"] ??
""
2042 $btpl->setCurrentBlock(
"button");
2043 $btpl->setVariable(
"BUTTON",
$b);
2045 $btpl->parseCurrentBlock();
2047 $btpl->setCurrentBlock(
"section");
2048 $btpl->setVariable(
"TXT_SECTION",
$lng->txt($section_title));
2049 $btpl->parseCurrentBlock();
2053 if ($a_paragraph_styles) {
2054 $sel = new \ILIAS\COPage\Editor\Components\Paragraph\ParagraphStyleSelector($ui_wrapper, $a_style_id);
2055 $dd = $sel->getStyleSelector(
"");
2056 $btpl->setCurrentBlock(
"par_edit");
2057 $btpl->setVariable(
"TXT_PAR_FORMAT",
$lng->txt(
"cont_par_format"));
2059 $btpl->setVariable(
"STYLE_SELECTOR", $ui->renderer()->render($dd));
2061 $btpl->parseCurrentBlock();
2065 $sel = new \ILIAS\COPage\Editor\Components\Section\SectionStyleSelector($ui_wrapper, $a_style_id);
2066 $dd = $sel->getStyleSelector(
"",
$type =
"par-action", $action =
"sec.class", $attr =
"class",
true);
2067 $btpl->setVariable(
"TXT_BLOCK",
$lng->txt(
"cont_sur_block_format"));
2068 $btpl->setVariable(
"BLOCK_STYLE_SELECTOR", $ui->renderer()->render($dd));
2071 $btpl->setVariable(
"TINY_HEADER",
$lng->txt(
"cont_text_editing"));
2074 $ui_wrapper->getRenderedButton(
$lng->txt(
"cont_quit_text_editing"),
"par-action",
"save.return")
2083 $btpl->setVariable(
"TXT_SAVING",
$lng->txt(
"cont_saving"));
2087 "ilAdvSelListAnchorElement_char_style_selection",
2088 $lng->txt(
"cont_more_character_styles"),
2092 return $btpl->get();
2097 $this->page_linker->setProfileBackUrl($this->getProfileBackUrl());
2098 $this->page_linker->setOffline($this->getOutputMode() == self::OFFLINE);
2099 $this->setLinkXml($this->page_linker->getLinkXML($this->getPageObject()->getInternalLinks()));
2104 $this->link_xml =
$xml;
2105 $this->link_xml_set =
true;
2111 if ($this->profile_back_url !=
"") {
2112 return $this->profile_back_url;
2114 if ($this->getOutputMode() === self::OFFLINE ||
2115 $this->getOutputMode() === self::PRINTING) {
2118 return $this->
ctrl->getLinkTargetByClass(strtolower(get_class($this)),
"preview");
2123 $this->profile_back_url =
$url;
2130 $download_ok =
false;
2132 $pg_obj = $this->getPageObject();
2133 $pg_obj->buildDom();
2134 $int_links = $pg_obj->getInternalLinks();
2135 $req_file_id = $this->requested_file_id;
2136 foreach ($int_links as $il) {
2137 if ($il[
"Target"] == str_replace(
"_file_",
"_dfile_", $req_file_id)) {
2138 $file = explode(
"_", $req_file_id);
2139 $file_id = (
int) $file[count($file) - 1];
2140 $download_ok =
true;
2143 if (in_array($req_file_id, $pg_obj->getAllFileObjIds())) {
2144 $file = explode(
"_", $req_file_id);
2145 $file_id = (
int) $file[count($file) - 1];
2146 $download_ok =
true;
2150 foreach ($pcs as $pc) {
2151 $files = ilObjFile::_getFilesOfObject(
"mep:pg", $pc[
"id"], 0);
2152 $file = explode(
"_", $req_file_id);
2153 $file_id = (
int) $file[count($file) - 1];
2154 if (in_array($file_id, $files)) {
2155 $download_ok =
true;
2160 $fileObj =
new ilObjFile($file_id,
false);
2161 $fileObj->sendFile();
2168 $this->displayMedia(
true);
2174 $tpl->setCurrentBlock(
"ilMedia");
2180 $link_xml = $this->page_linker->getLinkXML($med_links);
2183 if ($this->request->getPageType() ===
"mep") {
2186 $pg_obj = $this->getPageObject();
2188 $pg_obj->buildDom();
2191 if ($this->requested_pg_id > 0) {
2192 $xml .= $pg_obj->getMediaAliasElement($this->request->getMobId());
2200 $xsl = file_get_contents(
"./Services/COPage/xsl/page.xsl");
2201 $args = array(
'/_xml' =>
$xml,
'/_xsl' => $xsl );
2205 if ($a_fullscreen) {
2206 $mode =
"fullscreen";
2213 $params = array(
'mode' => $mode,
'enlarge_path' => $enlarge_path,
2214 'link_params' =>
"ref_id=" . $this->requested_ref_id,
'fullscreen_link' =>
"",
2216 'ref_id' => $this->requested_ref_id,
'webspace_path' => $wb_path);
2217 $output = xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",
null, $args,
$params);
2225 $tpl->setVariable(
"MEDIA_CONTENT", $output);
2232 $tpl->printToStdout();
2241 $pg_obj = $this->getPageObject();
2242 $pg_obj->send_paragraph(
2243 $this->request->getString(
"par_id"),
2244 $this->request->getString(
"downloadtitle")
2253 while (is_int($pos = strpos($a_output,
"ilPageTocH", $cpos))) {
2258 $page_heads = array();
2259 foreach ($offsets as $os) {
2260 $level = (
int) substr($a_output, $os + 10, 1);
2261 if (in_array($level, array(1,2,3))) {
2262 $anchor = str_replace(
2265 substr($a_output, $os, strpos($a_output,
"-->", $os) - $os)
2269 $tag_start = stripos($a_output,
"<h" . $level .
" ", $os);
2270 $tag_end = stripos($a_output,
"</h" . $level .
">", $tag_start);
2271 $head = substr($a_output, $tag_start, $tag_end - $tag_start);
2274 $text_start = stripos($head,
">") + 1;
2275 $text_end = strripos($head,
"<!--", $text_start);
2276 $text = substr($head, $text_start, $text_end - $text_start);
2277 $page_heads[] = array(
"level" => $level,
"text" => $text,
2278 "anchor" => $anchor);
2281 if (count($page_heads) > 1) {
2283 $list->setAutoNumbering(
true);
2284 $list->setListClass(
"ilc_page_toc_PageTOCList");
2285 $list->setItemClass(
"ilc_page_toc_PageTOCItem");
2290 $page_toc_ph =
"<!--PageTocPH-->";
2291 foreach ($page_heads as $ind => $h) {
2297 if ($h[
"level"] == 2 && $c_par[1] > 0) {
2300 if ($h[
"level"] == 3 && $c_par[2] > 0) {
2304 $h[
"text"] = str_replace($page_toc_ph,
"", $h[
"text"]);
2308 "<a href='#" . $h[
"anchor"] .
"' class='ilc_page_toc_PageTOCLink'>" . $h[
"text"] .
"</a>",
2314 if ($h[
"level"] == 1) {
2318 if ($h[
"level"] == 2) {
2324 "tpl.page_toc.html",
2329 $tpl->setVariable(
"PAGE_TOC", $list->getHTML());
2330 $tpl->setVariable(
"TXT_PAGE_TOC", $this->
lng->txt(
"cont_page_toc"));
2334 $a_output = str_replace(
2335 "{{{{{PageTOC}}}}}",
2339 $numbers = $list->getNumbers();
2341 if (count($numbers) > 0) {
2342 foreach ($numbers as $n) {
2343 $a_output = (strpos($a_output, $page_toc_ph) !==
false)
2344 ? substr_replace($a_output, $n .
" ", strpos($a_output, $page_toc_ph), strlen($page_toc_ph))
2349 $a_output = str_replace(
2350 "{{{{{PageTOC}}}}}",
2362 if ($this->getEnablePCType(
"Resources") &&
2363 ($this->getOutputMode() ==
"edit" || $this->getOutputMode() ==
"preview")) {
2376 if (!$this->getAbstractOnly()) {
2377 $a_output = str_replace(
2378 "{{{{{LV_show_adv}}}}}",
2379 $this->
lng->txt(
"cont_show_adv"),
2382 $a_output = str_replace(
2383 "{{{{{LV_hide_adv}}}}}",
2384 $this->
lng->txt(
"cont_hide_adv"),
2388 $a_output = str_replace(
2389 "{{{{{LV_show_adv}}}}}",
2393 $a_output = str_replace(
2394 "{{{{{LV_hide_adv}}}}}",
2424 $this->setOutputMode(self::PREVIEW);
2425 $this->tabs_gui->activateTab(
"cont_preview");
2426 return $this->showPage();
2434 $collection = $this->tool_context->current()->getAdditionalData();
2445 if (!$this->getEnableEditing()) {
2446 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"permission_denied"),
true);
2447 $this->
ctrl->redirect($this,
"preview");
2451 $ptype = $this->getParentType();
2452 if ($ptype ==
"cont" && $this->requested_ref_id > 0) {
2455 $this->setScreenIdComponent();
2456 $this->
help->setScreenId(
"edit_" . $ptype);
2459 if (!$this->getPageObject()->getEditLock()) {
2460 $this->showEditLockInfo();
2463 $this->setEditorToolContext();
2466 $this->
lng->toJS(
"paste");
2467 $this->
lng->toJS(
"delete");
2468 $this->
lng->toJS(
"cont_delete_content");
2469 $this->
lng->toJS(
"copg_confirm_el_deletion");
2470 $this->
lng->toJS(
"cont_saving");
2471 $this->
lng->toJS(
"cont_ed_par");
2472 $this->
lng->toJS(
"cont_no_block");
2473 $this->
lng->toJS(
"copg_error");
2474 $this->
lng->toJS(
"cont_ed_click_to_add_pg");
2475 $this->
lng->toJS(
"cont_ed_new_item_after");
2476 $this->
lng->toJS(
"cont_ed_new_item_before");
2477 $this->
lng->toJS(
"cont_ed_item_up");
2478 $this->
lng->toJS(
"cont_ed_item_down");
2479 $this->
lng->toJS(
"cont_ed_delete_item");
2480 $this->
lng->toJS(
"copg_edit_iframe_title");
2481 $this->
lng->toJS(
"copg_par_format_selection");
2484 $this->tpl->addJavaScript(
"./Services/UIComponent/AdvancedSelectionList/js/AdvancedSelectionList.js");
2491 $info = $this->
lng->txt(
"content_no_edit_lock");
2492 $lock = $this->getPageObject()->getEditLockInfo();
2493 $info .=
"</br>" . $this->
lng->txt(
"content_until") .
": " .
2495 $info .=
"</br>" . $this->
lng->txt(
"obj_usr") .
": " .
2498 $back_link = $this->
ui->factory()->link()->standard(
2499 $this->
lng->txt(
"back"),
2500 $this->ctrl->getLinkTarget($this,
"finishEditing")
2503 $mbox = $this->
ui->factory()->messageBox()->info($info)
2504 ->withLinks([$back_link]);
2505 $rendered_mbox = $this->
ui->renderer()->render($mbox);
2507 if (!$this->
ctrl->isAsynch()) {
2508 $this->tpl->setContent($rendered_mbox);
2510 echo $rendered_mbox;
2517 $this->setOutputMode(self::EDIT);
2518 $html = $this->showPage();
2520 if ($this->isEnabledNotes()) {
2521 $html .=
"<br /><br />" . $this->getNotesHTML();
2531 $lock = $this->getPageObject()->getEditLockInfo();
2532 $info = $this->
lng->txt(
"cont_got_lock_release");
2535 $mbox = $ui->factory()->messageBox()->info($info);
2537 return $ui->renderer()->render($mbox);
2542 $pl_pc_id = $this->request->getPlaceholderPCId();
2543 $this->obj->buildDom();
2544 $this->obj->addHierIDs();
2545 $this->setOpenPlaceHolder($pl_pc_id);
2546 return $this->edit();
2551 $this->setOutputMode($a_mode);
2553 return $this->showPage();
2558 $this->getTabs(
"preview");
2559 return $this->showPage();
2567 $this->tpl =
new ilGlobalTemplate(
"tpl.fullscreen.html",
true,
true,
"Services/COPage");
2568 $this->tpl->setCurrentBlock(
"ContentStyle");
2569 $this->tpl->setVariable(
"LOCATION_CONTENT_STYLESHEET", 0);
2570 $this->tpl->parseCurrentBlock();
2572 $this->tpl->setVariable(
2577 $this->tpl->setCurrentBlock(
"ilMedia");
2580 if ($this->requested_pg_id > 0) {
2582 $pg_obj->buildDom();
2587 $xml .= $pg_obj->getMediaAliasElement($this->request->getMobId());
2597 $xsl = file_get_contents(
"./Services/COPage/xsl/page.xsl");
2598 $args = array(
'/_xml' =>
$xml,
'/_xsl' => $xsl );
2602 $mode =
"fullscreen";
2603 $params = array(
'mode' => $mode,
2605 'webspace_path' => $wb_path);
2606 $output = xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",
null, $args,
$params);
2611 $this->tpl->setVariable(
"MEDIA_CONTENT", $output);
2621 if (is_array($a_error)) {
2622 $error_str =
"<b>Error(s):</b><br>";
2623 foreach ($a_error as $error) {
2624 $err_mess = implode(
" - ", $error);
2625 if (!is_int(strpos($err_mess,
":0:"))) {
2626 $error_str .= htmlentities($err_mess) .
"<br />";
2629 $this->tpl->setVariable(
"MESSAGE", $error_str);
2635 $this->tabs_gui->clearTargets();
2636 $this->tabs_gui->setBackTarget(
2637 $this->
lng->txt(
"back"),
2638 $this->ctrl->getLinkTarget($this,
"edit")
2647 if (!$this->getEnableEditing()) {
2651 $this->setBackToEditTabs();
2653 $this->tpl->addJavaScript(
"./Services/COPage/js/page_history.js");
2656 $table_gui->setId(
"hist_table");
2657 $entries = $this->getPageObject()->getHistoryEntries();
2658 $entries[] = array(
'page_id' => $this->getPageObject()->
getId(),
2659 'parent_type' => $this->getPageObject()->getParentType(),
2660 'hdate' => $this->getPageObject()->getLastChange(),
2661 'parent_id' => $this->getPageObject()->getParentId(),
2663 'sortkey' => 999999,
2664 'user' => $this->getPageObject()->last_change_user);
2665 $table_gui->setData($entries);
2666 return $table_gui->getHTML();
2674 if (!$this->getEnableEditing()) {
2681 $this->
ctrl->setParameter($this,
"rollback_nr", $this->requested_old_nr);
2682 $c_gui->setFormAction($this->
ctrl->getFormAction($this,
"rollback"));
2683 $c_gui->setHeaderText($this->
lng->txt(
"cont_rollback_confirmation"));
2684 $c_gui->setCancel($this->
lng->txt(
"cancel"),
"history");
2685 $c_gui->setConfirm($this->
lng->txt(
"confirm"),
"rollback");
2687 $hentry = $this->obj->getHistoryEntry($this->requested_old_nr);
2691 $this->requested_old_nr,
2695 $this->tpl->setContent($c_gui->getHTML());
2703 if (!$this->getEnableEditing()) {
2707 $hentry = $this->obj->getHistoryEntry(
2708 $this->request->getString(
"rollback_nr")
2711 if ($hentry[
"content"] !=
"") {
2712 $this->obj->setXMLContent($hentry[
"content"]);
2713 $this->obj->buildDom(
true);
2714 if ($this->obj->update()) {
2715 $this->
ctrl->redirect($this,
"history");
2718 $this->
ctrl->redirect($this,
"history");
2723 $this->
help->setScreenIdComponent(
"copg");
2726 public function getTabs(
string $a_activate =
""): void
2728 if (in_array($this->getOutputMode(), [self::OFFLINE])) {
2731 $this->setScreenIdComponent();
2733 if (!$this->getEnabledTabs()) {
2738 if (!$this->getEditPreview()) {
2739 $this->tabs_gui->addTarget(
"pg", $this->
ctrl->getLinkTarget($this,
"preview"), array(
"",
"preview"));
2741 $this->tabs_gui->addTarget(
"cont_preview", $this->
ctrl->getLinkTarget($this,
"preview"), array(
"",
"preview"));
2744 if ($this->use_meta_data) {
2746 $this->meta_data_rep_obj,
2747 $this->meta_data_type,
2748 $this->meta_data_sub_obj_id
2750 $mdtab = $mdgui->getTab();
2752 $this->tabs_gui->addTarget(
2756 "ilobjectmetadatagui"
2776 if ($this->getPageConfig()->getEnableScheduledActivation()) {
2777 $this->tabs_gui->addTarget(
2779 $this->
ctrl->getLinkTarget($this,
"editActivation"),
2785 if ($this->getEnabledNews()) {
2786 $this->tabs_gui->addTarget(
2788 $this->
ctrl->getLinkTargetByClass(
"ilnewsitemgui",
"editNews"),
2795 if (is_array($this->tab_hook)) {
2796 $func = $this->tab_hook[
"func"];
2797 $this->tab_hook[
"obj"]->$func();
2806 if (!$this->getEnableEditing()) {
2810 $tpl =
new ilTemplate(
"tpl.page_compare.html",
true,
true,
"Services/COPage");
2811 $compare = $this->obj->compareVersion(
2812 $this->request->getInt(
"left"),
2813 $this->request->getInt(
"right")
2817 $lpage = $compare[
"l_page"];
2818 $cfg = $this->getPageConfig();
2819 $cfg->setPreventHTMLUnmasking(
true);
2821 $this->setOutputMode(self::PREVIEW);
2822 $this->setPageObject($lpage);
2823 $this->setPresentationTitle($this->getPresentationTitle());
2824 $this->setCompareMode(
true);
2826 $lhtml = $this->showPage();
2827 $lhtml = $this->replaceDiffTags($lhtml);
2828 $lhtml = str_replace(
"<br />",
"<br />", $lhtml);
2829 $tpl->setVariable(
"LEFT", $lhtml);
2832 $rpage = $compare[
"r_page"];
2833 $this->setPageObject($rpage);
2834 $this->setPresentationTitle($this->getPresentationTitle());
2835 $this->setCompareMode(
true);
2836 $this->setOutputMode(self::PREVIEW);
2838 $rhtml = $this->showPage();
2839 $rhtml = $this->replaceDiffTags($rhtml);
2840 $rhtml = str_replace(
"<br />",
"<br />", $rhtml);
2841 $tpl->setVariable(
"RIGHT", $rhtml);
2843 $tpl->setVariable(
"TXT_NEW", $this->
lng->txt(
"cont_pc_new"));
2844 $tpl->
setVariable(
"TXT_MODIFIED", $this->
lng->txt(
"cont_pc_modified"));
2845 $tpl->
setVariable(
"TXT_DELETED", $this->
lng->txt(
"cont_pc_deleted"));
2852 $a_html = str_replace(
"[ilDiffInsStart]",
'<span class="ilDiffIns">', $a_html);
2853 $a_html = str_replace(
"[ilDiffDelStart]",
'<span class="ilDiffDel">', $a_html);
2854 $a_html = str_replace(
"[ilDiffInsEnd]",
'</span>', $a_html);
2855 $a_html = str_replace(
"[ilDiffDelEnd]",
'</span>', $a_html);
2865 $this->setBackToEditTabs();
2867 $atpl =
new ilTemplate(
"tpl.page_activation.php",
true,
true,
"Services/COPage");
2868 $this->initActivationForm();
2869 $this->getActivationFormValues();
2870 $atpl->setVariable(
"FORM", $this->
form->getHTML());
2871 $atpl->setCurrentBlock(
"updater");
2872 $atpl->setVariable(
"UPDATER_FRAME", $this->exp_frame);
2873 $atpl->setVariable(
"EXP_ID_UPDATER", $this->exp_id);
2874 $atpl->setVariable(
"HREF_UPDATER", $this->exp_target_script);
2875 $atpl->parseCurrentBlock();
2876 $this->tpl->setContent($atpl->get());
2885 $this->
form->setFormAction($this->
ctrl->getFormAction($this));
2886 $this->
form->setTitle($this->
lng->txt(
"cont_page_activation"));
2890 $rad_op1 =
new ilRadioOption($this->
lng->txt(
"cont_activated"),
"activated");
2892 $rad->addOption($rad_op1);
2893 $rad_op2 =
new ilRadioOption($this->
lng->txt(
"cont_deactivated"),
"deactivated");
2894 $rad->addOption($rad_op2);
2895 $rad_op3 =
new ilRadioOption($this->
lng->txt(
"cont_scheduled_activation"),
"scheduled");
2898 $dt_prop->setRequired(
true);
2899 $dt_prop->setShowTime(
true);
2900 $rad_op3->addSubItem($dt_prop);
2902 $dt_prop2->setRequired(
true);
2903 $dt_prop2->setShowTime(
true);
2904 $rad_op3->addSubItem($dt_prop2);
2908 $cb->setInfo($this->
lng->txt(
"cont_show_activation_info_info"));
2909 $rad_op3->addSubItem($cb);
2912 $rad->addOption($rad_op3);
2914 $this->
form->addCommandButton(
"saveActivation", $this->
lng->txt(
"save"));
2916 $this->
form->addItem($rad);
2924 $activation =
"deactivated";
2925 if ($this->getPageObject()->getActive()) {
2926 $activation =
"activated";
2929 $dt_prop = $this->
form->getItemByPostVar(
"start");
2930 if ($this->getPageObject()->getActivationStart() !=
"") {
2931 $activation =
"scheduled";
2933 $this->getPageObject()->getActivationStart(),
2937 $dt_prop = $this->
form->getItemByPostVar(
"end");
2938 if ($this->getPageObject()->getActivationEnd() !=
"") {
2939 $activation =
"scheduled";
2941 $this->getPageObject()->getActivationEnd(),
2946 $this->
form->getItemByPostVar(
"activation")->setValue($activation);
2947 $this->
form->getItemByPostVar(
"show_activation_info")->setChecked($this->getPageObject()->getShowActivationInfo());
2955 $this->initActivationForm();
2957 if ($this->
form->checkInput()) {
2958 $this->getPageObject()->setActive(
true);
2959 $this->getPageObject()->setActivationStart(
null);
2960 $this->getPageObject()->setActivationEnd(
null);
2961 $this->getPageObject()->setShowActivationInfo(
2962 $this->request->getString(
"show_activation_info")
2964 $activation = $this->request->getString(
"activation");
2965 if ($activation ==
"deactivated") {
2966 $this->getPageObject()->setActive(
false);
2968 if ($activation ==
"scheduled") {
2969 $this->getPageObject()->setActive(
false);
2970 $this->getPageObject()->setActivationStart(
2973 $this->getPageObject()->setActivationEnd(
2977 $this->getPageObject()->update();
2978 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"msg_obj_modified"),
true);
2979 $this->
ctrl->redirect($this,
"editActivation");
2981 $this->
form->setValuesByPost();
2982 $this->tpl->setContent($this->
form->getHTML());
2989 object $a_content_object =
null,
2990 bool $a_enable_private_notes =
true,
2991 bool $a_enable_public_notes =
false,
2992 bool $a_enable_notes_deletion =
false,
2993 callable $a_callback =
null,
2994 bool $export =
false
2997 if (!$a_content_object) {
2999 $this->notes_parent_id,
3000 $this->obj->getId(),
3004 $a_enable_private_notes =
true;
3005 $a_enable_public_notes =
true;
3006 $a_enable_notes_deletion =
false;
3007 $notes_gui->setUseObjectTitleHeader(
false);
3012 $a_content_object->getParentId(),
3013 $a_content_object->getId(),
3014 $a_content_object->getParentType()
3016 $notes_gui->setUseObjectTitleHeader(
false);
3019 if ($a_enable_private_notes) {
3020 $notes_gui->enablePrivateNotes();
3022 if ($a_enable_public_notes) {
3023 $notes_gui->enablePublicNotes();
3024 if ($a_enable_notes_deletion) {
3025 $notes_gui->enablePublicNotesDeletion(
true);
3029 $notes_gui->setExportMode();
3033 $notes_gui->addObserver($a_callback);
3036 $next_class = $this->
ctrl->getNextClass($this);
3037 if ($next_class ==
"ilnotegui") {
3038 $html = $this->
ctrl->forwardCommand($notes_gui);
3040 $html = $notes_gui->getCommentsHTML();
3051 $this->request->getString(
"type"),
3052 $this->request->getString(
"id"),
3053 $this->request->getString(
"answer")
3069 $this->tabs_gui->activateTab(
"edit");
3070 $form = $this->initOpenedContentForm();
3071 $this->tpl->setContent($form->
getHTML());
3081 $ac->setInternalLinkDefault(
"Media_Media", 0);
3082 $ac->setInternalLinkFilterTypes(array(
"PageObject_FAQ",
"GlossaryItem",
"Media_Media",
"Media_FAQ"));
3083 $val = $this->obj->getInitialOpenedContent();
3084 if (($val[
"id"] ??
'') !=
"" && ($val[
"type"] ??
'') !=
"") {
3085 $ac->setValue($val[
"type"] .
"|" . $val[
"id"] .
"|" . $val[
"target"]);
3092 $form->
setTitle($this->
lng->txt(
"cont_initial_attached_content"));
3100 $this->obj->saveInitialOpenedContent(
3101 $this->request->getString(
"opened_content_ajax_type"),
3102 $this->request->getInt(
"opened_content_ajax_id"),
3103 $this->request->getString(
"opened_content_ajax_target")
3106 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"msg_obj_modified"));
3107 $this->
ctrl->redirect($this,
"edit");
3120 $l = $this->request->getString(
"totransl");
3121 $p = $this->getPageObject();
3123 $this->confirmPageTranslationCreation();
3126 $this->
ctrl->setParameter($this,
"transl", $l);
3127 $this->
ctrl->redirect($this,
"edit");
3135 $l = $this->request->getString(
"totransl");
3136 $this->
ctrl->setParameter($this,
"totransl", $l);
3137 $this->
lng->loadLanguageModule(
"meta");
3140 $cgui->setFormAction($this->
ctrl->getFormAction($this));
3141 $cgui->setHeaderText($this->
lng->txt(
"cont_page_translation_does_not_exist") .
": " .
3142 $this->lng->txt(
"meta_l_" . $l));
3143 $cgui->setCancel($this->
lng->txt(
"cancel"),
"editMasterLanguage");
3144 $cgui->setConfirm($this->
lng->txt(
"confirm"),
"createPageTranslation");
3145 $this->tpl->setContent($cgui->getHTML());
3153 $this->
ctrl->setParameter($this,
"transl",
"-");
3154 $this->
ctrl->redirect($this,
"edit");
3162 $l = $this->request->getString(
"totransl");
3165 $this->getPageObject()->getParentType(),
3166 $this->getPageObject()->
getId(),
3170 $p->copyPageToTranslation($l);
3171 $this->
ctrl->setParameter($this,
"transl", $l);
3172 $this->
ctrl->redirect($this,
"edit");
3180 $this->getPageObject()->releasePageLock();
3181 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"cont_page_lock_released"),
true);
3182 $this->finishEditing();
3187 $this->
ctrl->redirect($this,
"preview");
3193 $this->getRenderPageContainer() || ($this->getOutputMode() == self::PREVIEW && $this->getPageConfig()->getUsePageContainer())
3207 $collector = new \ILIAS\COPage\ResourcesCollector($this->getOutputMode(), $this->getPageObject());
3209 foreach ($collector->getJavascriptFiles() as $js) {
3210 $tpl->addJavaScript($js);
3213 foreach ($collector->getCssFiles() as $css) {
3217 foreach ($collector->getOnloadCode() as $code) {
3218 $tpl->addOnLoadCode($code);
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Editing session repository.
Page component editing request.
static _getQuestionGUI(string $question_type='', int $question_id=-1)
Creates a question gui representation and returns the alias to the question gui.
static _getQuestionType(int $question_id)
static addJavaScript(ilGlobalTemplate $main_tpl=null)
Add javascript files that are necessary to run accordion.
static addCss()
Add required css.
const CMD_SHOW
command constants
static getPCDefinitions()
static initDateTimePicker()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilCtrl provides processing control methods.
getLinkTargetByClass( $a_class, string $a_cmd=null, string $a_anchor=null, bool $is_async=false, bool $has_xml_style=false)
@inheritDoc
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
@classDescription Date and time handling
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getWebspaceDir(string $mode="filesystem")
get webspace directory
special template class to simplify handling of ITX/PEAR
static getInitHTML(string $a_url)
Get initialisation HTML to use internal link editing.
static _getTargetsOfSource(string $a_source_type, int $a_source_id, string $a_source_lang="-")
Get all targets of a source object (e.g., a page)
Learning history main GUI class.
static getLogger(string $a_component_id)
Get component logger.
Component logger with individual log levels by component id.
static isActivated()
Checks whether Map feature is activated.
static getInstance()
Singleton: get instance for use in ILIAS requests with a config loaded from the settings.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static lookupTitle(int $a_page_id)
static initJS(ilGlobalTemplateInterface $a_main_tpl=null)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
User Interface for NewsItem entities.
static hasSuccessorPage(int $a_cont_obj_id, int $a_page_id)
checks if page has a successor page
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getContentStylePath(int $a_style_id, bool $add_random=true, bool $add_token=true)
get content style path static (to avoid full reading)
static getPlaceHolderStylePath()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _lookupType(int $id, bool $reference=false)
static _lookupOwner(int $obj_id)
Lookup owner user ID for object ID.
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data
static _lookupTitle(int $obj_id)
static collectContentIncludes(ilPageObject $a_page, DOMDocument $a_domdoc)
get all content includes that are used within the page
static getCharStyleSelector(string $a_par_type, bool $a_use_callback=true, int $a_style_id=0)
Get character style selector.
static insertResourcesIntoPageContent(string $a_content)
Insert resources (see also ilContainerContentGUI::determinePageEmbeddedBlocks for presentation)
static getCacheTriggerString(ilPageObject $a_page)
Get page cache update trigger string.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const SEC_PROTECT_PROTECTED
static getUsagesOfPage(int $a_usage_id, string $a_usage_type, int $a_hist_nr=0, bool $a_all_hist_nrs=false, string $a_lang="-")
Get page content usages for page.
static lookupSettingByParentType(string $a_par_type, string $a_name, string $a_default='0')
Lookup setting by parent type.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getInstance(string $a_parent_type, int $a_id=0, int $a_old_nr=0, string $a_lang="-")
Get page object instance.
setLinkFrame(string $l_frame="")
setTabs(ilTabsGUI $a_tabs)
bool $enabledcontentincludes
string $file_download_link
onFeedbackEditingForwarding()
setLanguage(string $a_val)
setParentType(string $a_val)
setViewPageLink(string $a_link, string $a_target="")
set link for "view page" button
rollback()
Rollback to a previous version.
setAdvMdRecordObject(int $a_adv_ref_id, string $a_adv_type, string $a_adv_subtype="-")
Set object, that defines the adv md records being used.
string $sourcecode_download_script
EditSessionRepository $edit_repo
determineSourcecodeDownloadScript()
setStyleId(int $a_styleid)
processAnswer()
Process answer.
showPage()
display content of page
setEnabledHref(bool $enable)
displayValidationError($a_error)
display validation error
setEditMode()
Set edit mode.
saveActivation()
Save Activation.
showEditToolbar()
Show edit toolbar.
displayMedia(bool $a_fullscreen=false)
setPresentationTitle(string $a_title="")
getNotesHTML(object $a_content_object=null, bool $a_enable_private_notes=true, bool $a_enable_public_notes=false, bool $a_enable_notes_deletion=false, callable $a_callback=null, bool $export=false)
Get html for public and/or private notes.
isPageContainerToBeRendered()
string $open_place_holder
releasePageLock()
Release page lock.
getActivationFormValues()
Get values for activation form.
enableNotes(bool $a_enabled, int $a_parent_id)
setEnabledPageFocus(bool $a_enabledpagefocus)
setIntLinkReturn(string $a_return)
setPageConfig(ilPageConfig $a_val)
int $meta_data_sub_obj_id
setPageLinker(\ILIAS\COPage\PageLinker $page_linker)
initialOpenedContent()
Initially opened content.
confirmPageTranslationCreation()
Confirm page translation creation.
editActivation()
Edit activation (only, if scheduled page activation is activated in administration)
setPrependingHtml(string $a_prependinghtml)
setEnabledNews(bool $a_enabled, int $a_news_obj_id=0, string $a_news_obj_type="")
setHeader(string $a_title="")
determineFullscreenLink()
getEnablePCType(string $a_pc_type)
string $meta_data_observer_func
insertResources(string $a_output)
object $meta_data_observer_obj
addResourcesToTemplate(ilGlobalTemplateInterface $tpl)
Add resources to template.
compareVersion()
Compares two revisions of the page.
enableChangeComments(bool $a_enabled)
presentation(string $a_mode=self::PRESENTATION)
setAbstractOnly(bool $a_val, string $pcid="")
Get only abstract (first text paragraph)
setPageBackTitle(string $a_title)
setRawPageContent(bool $a_rawpagecontent)
Set Get raw page content only.
bool $render_page_container
setOldNr(int $a_val)
Set old nr (historic page)
string $template_output_var
setEnabledTabs(bool $a_enabledtabs)
determineFileDownloadLink()
replaceCurlyBrackets(string $output)
setEnablePCType(string $a_pc_type, bool $a_val)
static getTinyMenu(string $a_par_type, bool $a_int_links=false, bool $a_wiki_links=false, bool $a_keywords=false, $a_style_id=0, $a_paragraph_styles=true, $a_save_return=true, $a_anchors=false, $a_save_new=true, $a_user_links=false, \ILIAS\COPage\Editor\Server\UIWrapper $ui_wrapper=null)
Get Tiny Menu.
replaceDiffTags(string $a_html)
editMasterLanguage()
Edit master language.
setRenderPageContainer(bool $a_val)
previewHistory()
Preview history.
setOutputMode(string $a_mode=self::PRESENTATION)
setOpenPlaceHolder(string $a_val)
ilObject $meta_data_rep_obj
showMediaFullscreen(int $a_style_id=0)
show fullscreen view of media object
setLinkParams(string $l_params="")
createPageTranslation()
Create page translation.
setTemplateOutput(bool $a_output=true)
activateMetaDataEditor(ilObject $a_rep_obj, string $a_type, int $a_sub_obj_id, object $a_observer_obj=null, string $a_observer_func="")
Activate meda data editor.
string $offline_directory
string $presentation_title
string $requested_file_id
getAdditionalPageActions()
Get additional page actions.
ilGlobalTemplateInterface $tpl
history()
Get history table as HTML.
saveInitialOpenedContent()
setEnableEditing(bool $a_enableediting)
ILIAS COPage PageLinker $page_linker
rollbackConfirmation()
Rollback confirmation.
ILIAS GlobalScreen ScreenContext ContextServices $tool_context
executeCommand()
execute command
initPageObject()
Init page object.
switchToLanguage()
Switch to language.
setProfileBackUrl(string $url)
getComponentPluginsXML()
Put information about activated plugins into XML.
int $requested_history_mode
getTabs(string $a_activate="")
ilPageConfig $page_config
setOfflineDirectory(string $offdir)
insertPageToc(string $a_output)
ilComponentFactory $component_factory
setSourcecodeDownloadScript(string $script_name)
setPageObject(ilPageObject $a_pg_obj)
setEditPreview(bool $a_editpreview)
Set Display first Edit tab, then Preview tab, instead of Page and Edit.
setEditorToolContext()
Set editor tool context.
getActivationCaptions()
Get captions for activation action menu entries.
initActivationForm()
Init activation form.
__construct(string $a_parent_type, int $a_id, int $a_old_nr=0, bool $a_prevent_get_id=false, string $a_lang="", string $concrete_lang="")
setQuestionHTML(array $question_html)
setFullscreenLink(string $a_fullscreen_link)
setFileDownloadLink(string $a_download_link)
setActivationListener(object $a_obj, string $a_meth)
string $exp_target_script
setTemplate(ilGlobalTemplateInterface $main_tpl)
setTabHook(object $a_object, string $a_function)
download_paragraph()
download source code paragraph
setCompareMode(bool $a_val)
getAdvMdRecordObject()
Get adv md record type.
postOutputProcessing(string $a_output)
Finalizing output processing.
setQEditTabs(string $a_active)
Set question editing tabs.
getSourcecodeDownloadScript()
insertAdvTrigger(string $a_output)
Insert adv content trigger.
isEnabledChangeComments()
setTemplateTargetVar(string $a_variable)
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD)
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists.
static saveQuestionAnswer(string $a_type, int $a_id, string $a_answer)
static initMediaElementJs(ilGlobalTemplateInterface $a_tpl=null)
Init mediaelement.js scripts.
static getFlashVideoPlayerFilename(bool $a_fullpath=false)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
special template class to simplify handling of ITX/PEAR
static getNamePresentation( $a_user_id, bool $a_user_image=false, bool $a_profile_link=false, string $a_profile_back_link="", bool $a_force_first_lastname=false, bool $a_omit_login=false, bool $a_sortable=true, bool $a_return_data_array=false, $a_ctrl_path="ilpublicuserprofilegui")
Default behaviour is:
static getStyleSheetLocation(string $mode="output", string $a_css_name="", string $a_css_location="")
get full style sheet file name (path inclusive) of current user
static getImagePath(string $img, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
static initjQueryUI(ilGlobalTemplateInterface $a_tpl=null)
inits and adds the jQuery-UI JS-File to the global template (see included_components....
static initjQuery(ilGlobalTemplateInterface $a_tpl=null)
inits and adds the jQuery JS-File to the global or a passed template
if(!file_exists(getcwd() . '/ilias.ini.php'))
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setCurrentBlock(string $part=self::DEFAULT_BLOCK)
Sets the template to the given block.
parseCurrentBlock(string $block_name=self::DEFAULT_BLOCK)
Parses the given block.
setVariable(string $variable, $value='')
Sets the given variable to the given value.
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
if(strpos( $jquery_path, './')===0) elseif(strpos($jquery_path, '.')===0) $mathJaxSetting
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
form( $class_path, string $cmd)
Class ChatMainBarProvider \MainMenu\Provider.