36     public const EDIT = 
"edit";
    41     protected \ILIAS\COPage\Page\PageManager 
$pm;
    42     protected \ILIAS\COPage\Link\LinkManager 
$link;
    43     protected \ILIAS\COPage\InternalGUIService 
$gui;
    45     protected \ILIAS\COPage\Xsl\XslManager 
$xsl;
    47     protected \ILIAS\Notes\Service 
$notes;
   114     protected \ILIAS\DI\UIServices 
$ui;
   143     protected \ILIAS\COPage\Compare\PageCompare 
$compare;
   153         string $a_parent_type,
   156         bool $a_prevent_get_id = 
false,
   158         string $concrete_lang = 
""   163         $this->tpl = $DIC->ui()->mainTemplate();
   164         $this->
ctrl = $DIC->ctrl();
   165         $this->
lng = $DIC->language();
   166         $this->tabs_gui = $DIC->tabs();
   167         $this->
access = $DIC->access();
   168         $this->
user = $DIC->user();
   169         $this->
help = $DIC[
"ilHelp"];
   170         $this->
ui = $DIC->ui();
   171         $this->
toolbar = $DIC->toolbar();
   172         $this->component_factory = $DIC[
"component.factory"];
   174         $this->request = $DIC
   181         $this->questioninfo = $DIC->testQuestionPool()->questionInfo();
   183         $this->requested_old_nr = $this->request->getInt(
"old_nr");
   184         $this->requested_transl = $this->request->getString(
"transl");
   185         $this->requested_file_id = $this->request->getString(
"file_id");
   186         $this->requested_ref_id = $this->request->getInt(
"ref_id");
   187         $this->requested_pg_id = $this->request->getInt(
"pg_id");
   192         if ($a_old_nr == 0 && !$a_prevent_get_id && $this->requested_old_nr > 0) {
   197         if ($a_lang == 
"" && $this->requested_transl != 
'') {
   212         $this->page_linker = 
new ilPageLinker(get_class($this));
   214         $this->output2template = 
true;
   216         $this->template_output_var = 
"PAGE_CONTENT";
   217         $this->change_comments = 
false;
   218         $this->page_back_title = $this->
lng->txt(
"page");
   219         $this->
lng->loadLanguageModule(
"content");
   220         $this->
lng->loadLanguageModule(
"copg");
   222         $this->tool_context = $DIC->globalScreen()->tool()->context();
   226         $this->
ctrl->saveParameter($this, 
"transl");
   229         $this->requested_user_id = $this->request->getInt(
"user");
   230         $this->requested_q_id = $this->request->getInt(
"q_id");
   231         $this->requested_history_mode = $this->request->getInt(
"history_mode");
   237         $this->edit_repo = $int_service
   242         $this->xsl = $int_service->domain()->xsl();
   243         $this->compare = $int_service->domain()->compare();
   244         $this->pc_definition = $DIC
   250         $this->gui = $DIC->copage()->internal()->gui();
   251         $this->
link = $DIC->copage()->internal()->domain()->link();
   252         $this->pm = $DIC->copage()->internal()->domain()->page();
   253         $this->editor_gui = $DIC->copage()->internal()->gui()->edit();
   254         $this->notes = $DIC->notes();
   259         $this->tpl = $main_tpl;
   273         string $a_adv_subtype = 
"-"   275         $this->adv_ref_id = $a_adv_ref_id;
   276         $this->adv_type = $a_adv_type;
   277         $this->adv_subtype = $a_adv_subtype;
   285         if ($this->adv_type === null) {
   302         $page->setConcreteLang($this->concrete_lang);
   308         $this->parent_type = $a_val;
   316     public function setId(
int $a_val): void
   331         $this->old_nr = $a_val;
   367         $this->page_config = $a_val;
   377         $this->obj = $a_pg_obj;
   389         string $a_mode = self::PRESENTATION
   391         $this->output_mode = $a_mode;
   401         $this->output2template = $a_output;
   411         $this->presentation_title = $a_title;
   431         $this->link_params = $l_params;
   441         $this->link_frame = $l_frame;
   471         $this->target_var = $a_variable;
   486         $this->sourcecode_download_script = $script_name;
   496         $this->tabs_gui = $a_tabs;
   501         $this->page_back_title = $a_title;
   506         $this->file_download_link = $a_download_link;
   516         $this->fullscreen_link = $a_fullscreen_link;
   526         $this->int_link_return = $a_return;
   531         $this->change_comments = $a_enabled;
   539     public function enableNotes(
bool $a_enabled, 
int $a_parent_id): void
   541         $this->notes_enabled = $a_enabled;
   542         $this->notes_parent_id = $a_parent_id;
   555         $this->offline_directory = $offdir;
   569         $this->view_page_link = $a_link;
   570         $this->view_page_target = $a_target;
   585         return $this->
lng->txt(
"cont_presentation_view");
   592         $this->act_obj = $a_obj;
   593         $this->act_meth = $a_meth;
   598         int $a_news_obj_id = 0,
   599         string $a_news_obj_type = 
""   601         $this->enabled_news = $a_enabled;
   602         $this->news_obj_id = $a_news_obj_id;
   603         $this->news_obj_type = $a_news_obj_type;
   615         $this->tab_hook = array(
"obj" => $a_object, 
"func" => $a_function);
   624         $this->editpreview = $a_editpreview;
   634         $this->tabs_enabled = $a_enabledtabs;
   644         $this->enabledpagefocus = $a_enabledpagefocus;
   649         $this->open_place_holder = $a_val;
   664         $this->prependinghtml = $a_prependinghtml;
   674         $this->enableediting = $a_enableediting;
   687         $this->rawpagecontent = $a_rawpagecontent;
   697         $this->styleid = $a_styleid;
   707         $this->compare_mode = $a_val;
   722         $this->abstract_only = $a_val;
   723         $this->abstract_pcid = $pcid;
   733         $this->render_page_container = $a_val;
   743         return $this->
lng->txt(
"inactive");
   753         $this->enabled_href = $enable;
   768         object $a_observer_obj = null,
   769         string $a_observer_func = 
""   771         $this->use_meta_data = 
true;
   772         $this->meta_data_rep_obj = $a_rep_obj;
   773         $this->meta_data_sub_obj_id = $a_sub_obj_id;
   774         $this->meta_data_type = $a_type;
   775         $this->meta_data_observer_obj = $a_observer_obj;
   776         $this->meta_data_observer_func = $a_observer_func;
   783             $file_download_link = $this->
ctrl->getLinkTarget($this, 
"downloadFile");
   792             $fullscreen_link = $this->
ctrl->getLinkTarget($this, 
"displayMediaFullscreen", 
"", 
false, 
false);
   800         if ($this->sourcecode_download_script == 
"" && $this->
getOutputMode() != 
"offline") {
   801             $l = $this->
ctrl->getLinkTarget($this, 
"");
   813             foreach ($this->component_factory->getActivePluginsInSlot(
"pgcp") as 
$plugin) {
   814                 if (
$plugin->isValidParentType($this->getPageObject()->getParentType())) {
   815                     $xml .= 
'<ComponentPlugin Name="' . 
$plugin->getPluginName() .
   821             $xml = 
"<ComponentPlugins>" . $xml . 
"</ComponentPlugins>";
   833         $next_class = $this->
ctrl->getNextClass($this);
   834         if ($next_class !== 
"") {
   835             $this->
ctrl->setReturn($this, 
"edit");
   837         $this->log->debug(
"next_class: " . $next_class);
   838         if ($next_class == 
"" && $this->
ctrl->getCmd() == 
"edit") {
   839             $this->tabs_gui->clearTargets();
   845         switch ($next_class) {
   846             case 'ilobjectmetadatagui':
   848                 $md_gui = 
new ilObjectMetaDataGUI($this->meta_data_rep_obj, $this->meta_data_type, $this->meta_data_sub_obj_id);
   849                 if (is_object($this->meta_data_observer_obj)) {
   850                     $md_gui->addMDObserver(
   851                         $this->meta_data_observer_obj,
   852                         $this->meta_data_observer_func,
   857                 if ($this->adv_type != 
"") {
   858                     $md_gui->setAdvMdRecordObject($this->adv_ref_id, $this->adv_type, $this->adv_subtype);
   860                 $this->
ctrl->forwardCommand($md_gui);
   863             case "ileditclipboardgui":
   866                 $clip_gui->setPageBackTitle($this->page_back_title);
   867                 $ret = $this->
ctrl->forwardCommand($clip_gui);
   873                 $html = $this->
edit();
   874                 $this->tabs_gui->setTabActive(
"edit");
   877             case 'ilpublicuserprofilegui':
   879                 $ret = $this->
ctrl->forwardCommand($profile_gui);
   882             case "ilpageeditorgui":
   886                     $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"permission_denied"), 
true);
   887                     $this->
ctrl->redirect($this, 
"preview");
   890                 $page_editor->setHeader($this->
getHeader());
   891                 $page_editor->setPageBackTitle($this->page_back_title);
   892                 $page_editor->setIntLinkReturn($this->int_link_return);
   894                 $ret = $this->
ctrl->forwardCommand($page_editor);
   897             case 'ilnewsitemgui':
   899                 $news_item_gui->setEnableEdit(
true);
   900                 $news_item_gui->setContextObjId($this->news_obj_id);
   901                 $news_item_gui->setContextObjType($this->news_obj_type);
   902                 $news_item_gui->setContextSubObjId($this->obj->getId());
   903                 $news_item_gui->setContextSubObjType(
"pg");
   905                 $ret = $this->
ctrl->forwardCommand($news_item_gui);
   908             case "ilpropertyformgui":
   910                 $this->
ctrl->forwardCommand($form);
   913             case "ilinternallinkgui":
   914                 $this->
lng->loadLanguageModule(
"content");
   917                 $link_gui->filterLinkType(
"PageObject_FAQ");
   918                 $link_gui->filterLinkType(
"GlossaryItem");
   919                 $link_gui->filterLinkType(
"Media_Media");
   920                 $link_gui->filterLinkType(
"Media_FAQ");
   922                 $link_gui->setFilterWhiteList(
true);
   923                 $this->
ctrl->forwardCommand($link_gui);
   926             case "ilquestioneditgui":
   930                 $edit_gui->setSelfAssessmentEditingMode(
true);
   931                 $ret = $this->
ctrl->forwardCommand($edit_gui);
   932                 $this->tpl->setContent($ret);
   935             case 'ilassquestionfeedbackeditinggui':
   943                 $this->
lng->loadLanguageModule(
"assessment");
   947                     $this->questioninfo->getQuestionType(
   948                         $this->requested_q_id
   952                 $questionGUI->object->setObjId(0);
   953                 $questionGUI->object->setSelfAssessmentEditingMode(
true);
   954                 $questionGUI->object->setPreventRteUsage($this->
getPageConfig()->getPreventRteUsage());
   958                 $this->
ctrl->forwardCommand($gui);
   962             case 'ilLearninghistorygui':
   968                 $hist_gui->setUserId($user_id);
   969                 $this->
ctrl->forwardCommand($hist_gui);
   973                 $cmd = $this->
ctrl->getCmd(
"preview");
   976                     $this->tabs_gui->addNonTabbedLink(
   983                 $ret = $this->$cmd();
   984                 if ($this->
getOutputMode() == self::PREVIEW && $cmd == 
"preview") {
   990         return (
string) $ret;
   998         $this->tabs_gui->clearTargets();
  1000         $this->tabs_gui->setBackTarget(
  1001             $this->
lng->txt(
"back"),
  1002             $this->
ctrl->getLinkTarget($this, 
"edit")
  1005         $this->
ctrl->setParameterByClass(
"ilquestioneditgui", 
"q_id", $this->requested_q_id);
  1006         $this->tabs_gui->addTab(
  1008             $this->
lng->txt(
"question"),
  1009             $this->
ctrl->getLinkTargetByClass(
"ilquestioneditgui", 
"editQuestion")
  1012         $this->
ctrl->setParameterByClass(
"ilAssQuestionFeedbackEditingGUI", 
"q_id", $this->requested_q_id);
  1013         $this->tabs_gui->addTab(
  1015             $this->
lng->txt(
"feedback"),
  1019         $this->tabs_gui->activateTab($a_active);
  1032         $this->
ctrl->redirect($this, 
"edit");
  1041         $this->
ctrl->redirect($this, 
"edit");
  1052             $b = $ui->factory()->button()->standard(
  1053                 $lng->
txt(
"edit_page"),
  1054                 $this->
ctrl->getLinkTarget($this, 
"edit")
  1069         $paragraph_plugin_string = 
'';
  1070         $disable_auto_margins = 
'';
  1079         $main_tpl->addJavaScript(
"./Services/COPage/js/ilCOPagePres.js");
  1082         ilOverlayGUI::initJavascript();
  1095             $this->log->debug(
"ilPageObjectGUI, showPage() in edit mode.");
  1097             $tpl = 
new ilTemplate(
"tpl.page_edit_wysiwyg.html", 
true, 
true, 
"Services/COPage");
  1104                 $tpl->
setVariable(
"TXT_ADD_COMMENT", $this->
lng->txt(
"cont_add_change_comment"));
  1109                 $tpl->
setVariable(
"PAGE_CONTAINER_CLASS", 
"ilc_page_cont_PageContainer");
  1114                 $this->
ctrl->getFormActionByClass(
"ilpageeditorgui", 
"", 
"", 
true)
  1118             $sel_js_mode = 
"enable";
  1125             if ($sel_js_mode == 
"enable") {
  1129                     $this->
ctrl->getLinkTargetByClass(
  1130                         array(
"ilpageeditorgui", 
"ilinternallinkgui"),
  1139                 $this->editor_gui->init()->initUI($main_tpl);
  1144             $tpl = 
new ilTemplate(
"tpl.page.html", 
true, 
true, 
"Services/COPage");
  1157             if ($c_old_nr > 0 || $this->
getCompareMode() || ($this->requested_history_mode == 1)) {
  1162                     $this->
ctrl->setParameter($this, 
"history_mode", 
"1");
  1165                     if (isset($hist_info[
"previous"])) {
  1167                         $tpl->
setVariable(
"TXT_PREV_REV", $this->
lng->txt(
"cont_previous_rev"));
  1168                         $this->
ctrl->setParameter($this, 
"old_nr", $hist_info[
"previous"][
"nr"]);
  1171                             $this->
ctrl->getLinkTarget($this, 
"preview")
  1175                         $tpl->
setVariable(
"TXT_PREV_REV", $this->
lng->txt(
"cont_previous_rev"));
  1180                     if ($c_old_nr > 0) {
  1182                         $tpl->
setVariable(
"TXT_NEXT_REV", $this->
lng->txt(
"cont_next_rev"));
  1183                         $this->
ctrl->setParameter($this, 
"old_nr", $hist_info[
"next"][
"nr"] ?? 0);
  1186                             $this->
ctrl->getLinkTarget($this, 
"preview")
  1192                         $tpl->
setVariable(
"TXT_LATEST_REV", $this->
lng->txt(
"cont_latest_rev"));
  1193                         $this->
ctrl->setParameter($this, 
"old_nr", 
"");
  1196                             $this->
ctrl->getLinkTarget($this, 
"preview")
  1201                     $this->
ctrl->setParameter($this, 
"history_mode", 
"");
  1206                         $this->
ctrl->setParameter($this, 
"old_nr", $c_old_nr);
  1209                             $this->
ctrl->getLinkTarget($this, 
"rollbackConfirmation")
  1211                         $this->
ctrl->setParameter($this, 
"old_nr", 
"");
  1214                             $this->
lng->txt(
"cont_rollback")
  1221                 $tpl->
setVariable(
"TXT_REVISION", $this->
lng->txt(
"cont_revision"));
  1223                     "VAL_REVISION_DATE",
  1237             $tpl->
setVariable(
"FORMACTION", $this->
ctrl->getFormActionByClass(
"ilpageeditorgui"));
  1243                 $this->obj->getParentType() . 
":pg",
  1244                 $this->obj->getId(),
  1245                 $this->obj->getLanguage()
  1247             $mob_links = array();
  1248             foreach ($links as $link) {
  1249                 if ($link[
"type"] == 
"mob") {
  1257             if (count($mob_links) > 0) {
  1259                 $tpl->
setVariable(
"TXT_LINKED_MOBS", $this->
lng->txt(
"cont_linked_mobs"));
  1264                 $tpl->
setVariable(
"TXT_EDIT_MEDIA", $this->
lng->txt(
"cont_edit_mob"));
  1265                 $tpl->
setVariable(
"TXT_COPY_TO_CLIPBOARD", $this->
lng->txt(
"cont_copy_to_clipboard"));
  1276             if (count($snippets) > 0) {
  1277                 foreach ($snippets as $s) {
  1281                 $tpl->
setVariable(
"TXT_CONTENT_SNIPPETS_USED", $this->
lng->txt(
"cont_snippets_used"));
  1286                 $tpl->
setVariable(
"TXT_SHOW_INFO", $this->
lng->txt(
"cont_show_info"));
  1295                 $tpl->
setVariable(
"TXT_SCHEDULED_ACTIVATION", $this->
lng->txt(
"cont_scheduled_activation"));
  1319         $builded = $this->obj->buildDom();
  1324             if (!$this->obj->checkPCIds()) {
  1325                 $this->obj->insertPCIds();
  1326                 $this->obj->update(
true, 
true);
  1329             $this->obj->addFileSizes();
  1330             $this->obj->addHierIDs();
  1332             $this->obj->addFileSizes();
  1339         if (!$this->link_xml_set) {
  1351                 $template_xml = $style->getTemplateXML();
  1352                 $disable_auto_margins = 
"n";
  1353                 if ($style->lookupStyleSetting(
"disable_auto_margins")) {
  1354                     $disable_auto_margins = 
"y";
  1359         $append_footnotes = 
"y";
  1361             if (!$this->abstract_pcid) {
  1362                 $content = 
"<dummy><PageObject><PageContent><Paragraph>" .
  1363                     $this->obj->getFirstParagraphText() . $link_xml .
  1364                     "</Paragraph></PageContent></PageObject></dummy>";
  1366                 $append_footnotes = 
"n";
  1367                 $par = $this->obj->getParagraphForPCID($this->abstract_pcid);
  1368                 $content = 
"<dummy><PageObject><PageContent><Paragraph Characteristic='" . $par->getCharacteristic() . 
"'>" .
  1369                     $par->getText() . $link_xml .
  1370                     "</Paragraph></PageContent></PageObject>" . $this->obj->getMultimediaXML() . 
"</dummy>";
  1373             $content = $this->obj->getXMLFromDom(
  1384         if ($builded !== 
true) {
  1389         $this->edit_repo->clearPageError();
  1408             $enlarge_path = 
"images/media/enlarge.svg";
  1412             ? 
"ilc_PrintPageTitle"  1417         $enable_split_new = ($this->obj->getParentType() == 
"lm")
  1423         if (($this->obj->getParentType() == 
"lm") &&
  1425                 $this->obj->getParentId(),
  1428             $enable_split_next = 
"y";
  1430             $enable_split_next = 
"n";
  1451             ? $this->
user->getPref(
"ilPageEditor_MediaMode")
  1461         $current_ts = time();
  1465             $enable_href = 
false;
  1469         $params = array(
'mode' => $this->
getOutputMode(), 
'pg_title' => htmlentities($pg_title, ENT_QUOTES, 
"UTF-8"),
  1470                          'enable_placeholder' => $cfg->getEnablePCType(
"PlaceHolder") ? 
"y" : 
"n",
  1471                          'pg_id' => $this->obj->getId(), 
'pg_title_class' => $pg_title_class,
  1472                          'webspace_path' => $wb_path, 
'enlarge_path' => $enlarge_path,
  1473                          'img_col' => $col_path,
  1474                          'img_row' => $row_path,
  1475                          'img_cell' => $cell_path,
  1476                          'img_item' => $item_path,
  1477                          'acc_save_url' => 
"./ilias.php?baseClass=ilaccordionpropertiesstoragegui&cmd=setOpenedTab" .
  1478                              "&user_id=" . $this->
user->getId(),
  1479                          'append_footnotes' => $append_footnotes,
  1481                          'enable_split_new' => $enable_split_new,
  1482                          'enable_split_next' => $enable_split_next,
  1486                          'img_path' => $img_path,
  1487                          'parent_id' => $this->obj->getParentId(),
  1489                          'encoded_download_script' => urlencode($this->sourcecode_download_script),
  1490                          'enable_rep_objects' => $cfg->getEnablePCType(
"Resources") ? 
"y" : 
"n",
  1491                          'enable_login_page' => $cfg->getEnablePCType(
"LoginPageElement") ? 
"y" : 
"n",
  1493                          'enable_tabs' => $cfg->getEnablePCType(
"Tabs") ? 
"y" : 
"n",
  1494                          'enable_sa_qst' => $cfg->getEnableSelfAssessment() ? 
"y" : 
"n",
  1495                          'enable_file_list' => $cfg->getEnablePCType(
"FileList") ? 
"y" : 
"n",
  1496                          'enable_content_includes' => $cfg->getEnablePCType(
"ContentInclude") ? 
"y" : 
"n",
  1497                          'enable_content_templates' => (count($this->
getPageObject()->getContentTemplates()) > 0) ? 
"y" : 
"n",
  1498                          'paste' => $paste ? 
"y" : 
"n",
  1499                          'media_mode' => $media_mode,
  1500                          'javascript' => $sel_js_mode,
  1501                          'paragraph_plugins' => $paragraph_plugin_string,
  1502                          'disable_auto_margins' => $disable_auto_margins,
  1503                          'page_toc' => $cfg->getEnablePageToc() ? 
"y" : 
"n",
  1504                          'enable_profile' => $cfg->getEnablePCType(
"Profile") ? 
"y" : 
"n",
  1505                          'enable_verification' => $cfg->getEnablePCType(
"Verification") ? 
"y" : 
"n",
  1506                          'enable_blog' => $cfg->getEnablePCType(
"Blog") ? 
"y" : 
"n",
  1507                          'enable_skills' => $cfg->getEnablePCType(
"Skills") ? 
"y" : 
"n",
  1508                          'enable_learning_history' => $cfg->getEnablePCType(
"LearningHistory") ? 
"y" : 
"n",
  1509                          'enable_qover' => 
"n",
  1510                          'enable_consultation_hours' => $cfg->getEnablePCType(
"ConsultationHours") ? 
"y" : 
"n",
  1511                          'enable_my_courses' => $cfg->getEnablePCType(
"MyCourses") ? 
"y" : 
"n",
  1512                          'enable_amd_page_list' => $cfg->getEnablePCType(
"AMDPageList") ? 
"y" : 
"n",
  1513                          'current_ts' => $current_ts,
  1515                          'flv_video_player' => $flv_video_player,
  1517                          'activated_protection' =>
  1519                         'protection_text' => $this->
lng->txt(
"cont_sec_protected_text"),
  1520                         'enable_href' => $enable_href
  1522         if ($this->link_frame != 
"") {          
  1531         $params[
"incl_elements_date"] = $this->obj->getLastUpdateOfIncludedElements();
  1537         $md5 = md5(serialize(
$params) . $link_xml . $template_xml . $md5_adds);
  1547             $md5 == $this->obj->getRenderMd5() &&
  1548             ($this->obj->getLastChange() < $this->obj->getRenderedTime()) &&
  1549             $this->obj->getRenderedTime() != 
"" &&
  1550             $this->obj->old_nr == 0) {
  1552             $output = $this->obj->getRenderedContent();
  1554             $this->log->debug(
"Calling XSLT, content: " . substr($content, 0, 100));
  1556                 $output = $this->xsl->process($content, 
$params);
  1560                     $output = 
"<pre>" . $e->getMessage() . 
"<br>" . htmlentities($content) . 
"</pre>";
  1566                 && $this->obj->old_nr == 0) {
  1567                 $this->obj->writeRenderedContent($output, $md5);
  1574                     $this->
user->getPref(
"ilPageEditor_HTMLMode") != 
"disable")
  1576                 $output = str_replace(
"<", 
"<", $output);
  1577                 $output = str_replace(
">", 
">", $output);
  1579             $output = str_replace(
"&", 
"&", $output);
  1603             $output = str_replace(
"\n", 
"", $output);
  1610                 $output = 
'<div class="copg-disabled-page"><div class="ilCopgDisabledText">' . $this->
getDisabledText() . 
'</div>' . $output . 
'</div>';
  1614             $defs = $this->pc_definition->getPCDefinitions();
  1615             foreach ($defs as $def) {
  1616                 $pc_class = $def[
"pc_class"];
  1636             $up_pc = $this->request->getString(
"updated_pc_id_str");
  1643             echo $tpl->
get(
"edit_page");
  1656                 return $output . $edit_init;
  1659                 return $tpl->
get() . $edit_init;
  1668         while (is_int($start = strpos($output, 
"<!--ParStart-->")) &&
  1669             is_int($end = strpos($output, 
"<!--ParEnd-->", $start))) {
  1670             $output = substr($output, 0, $start) .
  1673                     array(
"{",
"}"),
  1674                     substr($output, $start + 15, $end - ($start + 15))
  1676                 substr($output, $end + 13);
  1690         return array(
"deactivatePage" => $this->
lng->txt(
"cont_deactivate_page"),
  1691                 "activatePage" => $this->
lng->txt(
"cont_activate_page"));
  1699         $media_mode = $this->request->getString(
"media_mode");
  1700         $html_mode = $this->request->getString(
"html_mode");
  1701         $js_mode = $this->request->getString(
"js_mode");
  1702         if ($media_mode != 
"") {
  1703             if ($media_mode == 
"disable") {
  1704                 $this->
user->writePref(
"ilPageEditor_MediaMode", 
"disable");
  1706                 $this->
user->writePref(
"ilPageEditor_MediaMode", 
"");
  1709         if ($html_mode != 
"") {
  1710             if ($html_mode == 
"disable") {
  1711                 $this->
user->writePref(
"ilPageEditor_HTMLMode", 
"disable");
  1713                 $this->
user->writePref(
"ilPageEditor_HTMLMode", 
"");
  1716         if ($js_mode != 
"") {
  1717             if ($js_mode == 
"disable") {
  1718                 $this->
user->writePref(
"ilPageEditor_JavaScript", 
"disable");
  1720                 $this->
user->writePref(
"ilPageEditor_JavaScript", 
"");
  1724         $this->
ctrl->redirect($this, 
"edit");
  1733         bool $a_int_links = 
false,
  1734         bool $a_wiki_links = 
false,
  1735         bool $a_keywords = 
false,
  1737         $a_paragraph_styles = 
true,
  1738         $a_save_return = 
true,
  1741         $a_user_links = 
false,
  1742         \
ILIAS\COPage\Editor\Server\UIWrapper $ui_wrapper = null
  1746         $lng = $DIC->language();
  1748         $ctrl = $DIC->ctrl();
  1751         $style_service = $DIC->contentStyle()->internal();
  1752         $style_access_manager = $style_service->domain()->access(
  1754             $DIC->user()->getId()
  1756         $char_manager = $style_service->domain()->characteristic(
  1758             $style_access_manager
  1763         $f = 
static function (
string $type, 
string $code) use ($char_manager, $lng): 
string {
  1764             $title = $char_manager->getPresentationTitle(
"text_inline", $type);
  1765             if ($title === $type) {
  1766                 $title = $lng->
txt(
"cont_char_style_" . $code);
  1773         if ($a_style_id === 0) {
  1775                 "Comment" => array(
"code" => 
"com", 
"txt" => 
$f(
"Comment", 
"com")),
  1776                 "Quotation" => array(
"code" => 
"quot", 
"txt" => 
$f(
"Quotation", 
"quot")),
  1777                 "Accent" => array(
"code" => 
"acc", 
"txt" => 
$f(
"Accent", 
"acc")),
  1778                 "Code" => array(
"code" => 
"code", 
"txt" => 
$f(
"Code", 
"code"))
  1781         foreach (ilPCParagraphGUI::_getTextCharacteristics($a_style_id, 
true) as 
$c) {
  1782             if (in_array($c, [
"Strong", 
"Important", 
"Emph"])) {
  1785             if (!isset($chars[$c])) {
  1786                 $title = $char_manager->getPresentationTitle(
"text_inline", $c);
  1789                         $chars[
"Code"] = array(
"code" => 
"code", 
"txt" => 
$f(
"Code", 
"code"));
  1792                         $chars[
"Comment"] = array(
"code" => 
"com", 
"txt" => 
$f(
"Comment", 
"com"));
  1795                         $chars[
"Quotation"] = array(
"code" => 
"quot", 
"txt" => 
$f(
"Quotation", 
"quot"));
  1798                         $chars[
"Accent"] = array(
"code" => 
"acc", 
"txt" => 
$f(
"Accent", 
"acc"));
  1801                         $chars[
$c] = array(
"code" => 
"", 
"txt" => $title);
  1807         foreach ($chars as 
$key => $char) {
  1810                 "active_" . $char[
"code"],
  1816                     case "Code": $tag = 
"code";
  1819                 $html = 
'<' . $tag . 
' class="ilc_' . $t . 
'_' . 
$key . 
'" style="font-size:90%; margin-top:2px; margin-bottom:2px; position:static;">' . $char[
"txt"] . 
"</" . $tag . 
">";
  1820                 $char_formats[] = [
"text" => $html, 
"action" => 
"selection.format", 
"data" => [
"format" => 
$key]];
  1825         $numbered_list = $ui->renderer()->render(
  1826             $ui->factory()->symbol()->glyph()->numberedlist(null)
  1829         $bullet_list = $ui->renderer()->render(
  1830             $ui->factory()->symbol()->glyph()->bulletlist(null)
  1833         $indent = $ui->renderer()->render(
  1834             $ui->factory()->symbol()->glyph()->listindent(null)
  1837         $outdent = $ui->renderer()->render(
  1838             $ui->factory()->symbol()->glyph()->listoutdent(null)
  1845         if ($aset->get(
"use_physical")) {
  1851         foreach ([
"str", 
"emp", 
"imp", 
"sup", 
"sub"] as $c) {
  1859                         $c_formats[] = [
"text" => 
'<span class="ilc_text_inline_Strong">' . $str . 
'</span>',
  1860                                         "action" => 
"selection.format",
  1861                                         "data" => [
"format" => 
"Strong"],
  1862                                         "aria-label" => $lng->
txt(
"cont_text_str")
  1866                         $c_formats[] = [
"text" => 
'<span class="ilc_text_inline_Emph">' . $emp . 
'</span>',
  1867                                         "action" => 
"selection.format",
  1868                                         "data" => [
"format" => 
"Emph"],
  1869                                         "aria-label" => $lng->
txt(
"cont_text_emp")
  1873                         $c_formats[] = [
"text" => 
'<span class="ilc_text_inline_Important">' . $imp . 
'</span>',
  1874                                         "action" => 
"selection.format",
  1875                                         "data" => [
"format" => 
"Important"],
  1876                                         "aria-label" => $lng->
txt(
"cont_text_imp")
  1880                         $c_formats[] = [
"text" => 
'x<sup>2</sup>',
  1881                                         "action" => 
"selection.format",
  1882                                         "data" => [
"format" => 
"Sup"],
  1883                                         "aria-label" => $lng->
txt(
"cont_text_sup")
  1887                         $c_formats[] = [
"text" => 
'x<sub>2</sub>',
  1888                                         "action" => 
"selection.format",
  1889                                         "data" => [
"format" => 
"Sub"],
  1890                                         "aria-label" => $lng->
txt(
"cont_text_sub")
  1896         $c_formats[] = [
"text" => 
"<i>A</i>",
  1897                         "action" => $char_formats,
  1898                         "aria-label" => $lng->
txt(
"copg_more_character_formats")
  1900         $c_formats[] = [
"text" => 
'<i><strong><u>T</u></strong><sub>x</sub></i>',
  1901                         "action" => 
"selection.removeFormat",
  1903                         "aria-label" => $lng->
txt(
"copg_remove_formats")
  1906             "cont_char_format" => $c_formats,
  1909                     "text" => $bullet_list,
  1910                     "action" => 
"list.bullet",
  1912                     "aria-label" => $lng->
txt(
"cont_bullet_list")
  1915                     "text" => $numbered_list,
  1916                     "action" => 
"list.number",
  1918                     "aria-label" => $lng->
txt(
"cont_numbered_list")
  1922                     "action" => 
"list.outdent",
  1924                     "aria-label" => $lng->
txt(
"cont_list_outdent")
  1928                     "action" => 
"list.indent",
  1930                     "aria-label" => $lng->
txt(
"cont_list_indent")
  1939         if (count($ulists) > 1) {
  1941             foreach ($ulists as $c) {
  1942                 $la[] = [
"action" => 
"list.bulletStyle", 
"text" => 
$c, 
"data" => [
"format" => 
$c]];
  1944             $menu[
"copg_list_styles"][] = [
"text" => $lng->
txt(
"copg_list_style"), 
"action" => $la];
  1946         if (count($olists) > 1) {
  1948             foreach ($olists as $c) {
  1949                 $la[] = [
"action" => 
"list.numberStyle", 
"text" => 
$c, 
"data" => [
"format" => 
$c]];
  1951             $menu[
"copg_list_styles"][] = [
"text" => $lng->
txt(
"copg_list_style"), 
"action" => $la];
  1953         if (count($ilists) > 1) {
  1955             foreach ($ilists as $c) {
  1956                 $la[] = [
"action" => 
"list.itemStyle", 
"text" => 
$c, 
"data" => [
"format" => 
$c]];
  1958             $menu[
"copg_list_styles"][] = [
"text" => $lng->
txt(
"copg_list_item_style"), 
"action" => $la];
  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" => []];
  1992         $mathJaxSetting = 
new ilSetting(
"MathJax");
  1998             if ($mathJaxSetting->get(
"enable") || defined(
"URL_TO_LATEX")) {
  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(
  2027                             $i[
"aria-label"] ?? 
""  2030                     $dd = $ui->factory()->dropdown()->standard($buttons)->withLabel($item[
"text"])
  2031                         ->withAriaLabel($item[
"aria-label"] ?? 
"");
  2032                     $btpl->setCurrentBlock(
"button");
  2033                     $btpl->setVariable(
"BUTTON", $ui->renderer()->renderAsync($dd));
  2035                     $b = $ui_wrapper->getRenderedButton(
  2042                         $item[
"aria-label"] ?? 
""  2044                     $btpl->setCurrentBlock(
"button");
  2045                     $btpl->setVariable(
"BUTTON", 
$b);
  2047                 $btpl->parseCurrentBlock();
  2049             $btpl->setCurrentBlock(
"section");
  2050             $btpl->setVariable(
"TXT_SECTION", $lng->
txt($section_title));
  2051             $btpl->parseCurrentBlock();
  2055         if ($a_paragraph_styles) {
  2056             $sel = new \ParagraphStyleSelector($ui_wrapper, $a_style_id);
  2057             $dd = $sel->getStyleSelector(
" ");
  2058             $btpl->setCurrentBlock(
"par_edit");
  2059             $btpl->setVariable(
"TXT_PAR_FORMAT", $lng->
txt(
"cont_par_format"));
  2061             $btpl->setVariable(
"STYLE_SELECTOR", $ui->renderer()->render($dd));
  2063             $btpl->parseCurrentBlock();
  2067         $sel = new \SectionStyleSelector($ui_wrapper, $a_style_id);
  2068         $dd = $sel->getStyleSelector(
" ", $type = 
"par-action", $action = 
"sec.class", $attr = 
"class", 
true);
  2069         $btpl->setVariable(
"TXT_BLOCK", $lng->
txt(
"cont_sur_block_format"));
  2070         $btpl->setVariable(
"BLOCK_STYLE_SELECTOR", $ui->renderer()->render($dd));
  2073         $btpl->setVariable(
"TINY_HEADER", $lng->
txt(
"cont_text_editing"));
  2076             $ui_wrapper->getRenderedButton($lng->
txt(
"cont_quit_text_editing"), 
"par-action", 
"save.return")
  2085         $btpl->setVariable(
"TXT_SAVING", $lng->
txt(
"cont_saving"));
  2088             "ilAdvSelListAnchorElement_char_style_selection",
  2089             $lng->
txt(
"cont_more_character_styles"),
  2093         return $btpl->get();
  2099         $this->page_linker->setOffline($this->
getOutputMode() == self::OFFLINE);
  2100         $this->
setLinkXml($this->page_linker->getLinkXML($this->getPageObject()->getInternalLinks()));
  2105         $this->link_xml = $xml;
  2106         $this->link_xml_set = 
true;
  2112         if ($this->profile_back_url != 
"") {
  2119         return $this->
ctrl->getLinkTargetByClass(strtolower(get_class($this)), 
"preview");
  2124         $this->profile_back_url = 
$url;
  2131         $cm = $this->pm->content($this->
getPageObject()->getDomDoc());
  2134             $this->requested_file_id
  2145         $tpl = 
new ilGlobalTemplate(
"tpl.fullscreen.html", 
true, 
true, 
"Modules/LearningModule");
  2152         $link_xml = $this->page_linker->getLinkXML($med_links);
  2155         if ($this->request->getPageType() === 
"mep") {
  2160         $pg_obj->buildDom();
  2163         if ($this->requested_pg_id > 0) {
  2164             $xml .= $pg_obj->getMediaAliasElement($this->request->getMobId());
  2173         if ($a_fullscreen) {
  2174             $mode = 
"fullscreen";
  2181         $params = array(
'mode' => $mode, 
'enlarge_path' => $enlarge_path,
  2182             'link_params' => 
"ref_id=" . $this->requested_ref_id,
'fullscreen_link' => 
"",
  2184             'ref_id' => $this->requested_ref_id, 
'webspace_path' => $wb_path);
  2185         $output = $this->xsl->process($xml, 
$params);
  2207         $pg_obj->buildDom();
  2208         $pg_obj->sendParagraph(
  2209             $this->request->getString(
"par_id"),
  2210             $this->request->getString(
"downloadtitle")
  2219         while (is_int($pos = strpos($a_output, 
"ilPageTocH", $cpos))) {
  2224         $page_heads = array();
  2225         foreach ($offsets as $os) {
  2226             $level = (
int) substr($a_output, $os + 10, 1);
  2227             if (in_array($level, array(1,2,3))) {
  2228                 $anchor = str_replace(
  2231                     substr($a_output, $os, strpos($a_output, 
"-->", $os) - $os)
  2235                 $tag_start = stripos($a_output, 
"<h" . $level . 
" ", $os);
  2236                 $tag_end = stripos($a_output, 
"</h" . $level . 
">", $tag_start);
  2237                 $head = substr($a_output, $tag_start, $tag_end - $tag_start);
  2240                 $text_start = stripos($head, 
">") + 1;
  2241                 $text_end = strripos($head, 
"<!--", $text_start);
  2242                 $text = substr($head, $text_start, $text_end - $text_start);
  2243                 $page_heads[] = array(
"level" => $level, 
"text" => $text,
  2244                     "anchor" => $anchor);
  2247         if (count($page_heads) > 1) {
  2248             $listing = $this->gui->listing();
  2256             $page_toc_ph = 
"<!--PageTocPH-->";
  2257             foreach ($page_heads as $ind => $h) {
  2263                 if ($h[
"level"] == 2 && $c_par[1] > 0) {
  2266                 if ($h[
"level"] == 3 && $c_par[2] > 0) {
  2270                 $h[
"text"] = str_replace($page_toc_ph, 
"", $h[
"text"]);
  2273                     $this->
ui->factory()->legacy(
"<a href='#" . $h[
"anchor"] . 
"' class='ilc_page_toc_PageTOCLink'>" . $h[
"text"] . 
"</a>"),
  2279                 if ($h[
"level"] == 1) {
  2283                 if ($h[
"level"] == 2) {
  2289                 "tpl.page_toc.html",
  2294             $tpl->
setVariable(
"PAGE_TOC", $listing->autoNumbers(
true)->render());
  2295             $tpl->
setVariable(
"TXT_PAGE_TOC", $this->
lng->txt(
"cont_page_toc"));
  2299             $a_output = str_replace(
  2300                 "{{{{{PageTOC}}}}}",
  2304             $numbers = $listing->getNumbers();
  2306             if (count($numbers) > 0) {
  2307                 foreach ($numbers as $n) {
  2308                     $a_output = (strpos($a_output, $page_toc_ph) !== 
false)
  2309                         ? substr_replace($a_output, $n . 
" ", strpos($a_output, $page_toc_ph), strlen($page_toc_ph))
  2314             $a_output = str_replace(
  2315                 "{{{{{PageTOC}}}}}",
  2342             $a_output = str_replace(
  2343                 "{{{{{LV_show_adv}}}}}",
  2344                 $this->
lng->txt(
"cont_show_adv"),
  2347             $a_output = str_replace(
  2348                 "{{{{{LV_hide_adv}}}}}",
  2349                 $this->
lng->txt(
"cont_hide_adv"),
  2353             $a_output = str_replace(
  2354                 "{{{{{LV_show_adv}}}}}",
  2358             $a_output = str_replace(
  2359                 "{{{{{LV_hide_adv}}}}}",
  2389         if ($this->requested_history_mode) {
  2392             $this->tabs_gui->activateTab(
"cont_preview");
  2403         $collection = $this->tool_context->current()->getAdditionalData();
  2415             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"permission_denied"), 
true);
  2416             $this->
ctrl->redirect($this, 
"preview");
  2421         if ($ptype == 
"cont" && $this->requested_ref_id > 0) {
  2425         $this->
help->setScreenId(
"edit_" . $ptype);
  2435         $this->
lng->toJS(
"paste");
  2436         $this->
lng->toJS(
"delete");
  2437         $this->
lng->toJS(
"cont_delete_content");
  2438         $this->
lng->toJS(
"copg_confirm_el_deletion");
  2439         $this->
lng->toJS(
"cont_saving");
  2440         $this->
lng->toJS(
"cont_ed_par");
  2441         $this->
lng->toJS(
"cont_no_block");
  2442         $this->
lng->toJS(
"copg_error");
  2443         $this->
lng->toJS(
"cont_ed_click_to_add_pg");
  2444         $this->
lng->toJS(
"cont_ed_new_item_after");
  2445         $this->
lng->toJS(
"cont_ed_new_item_before");
  2446         $this->
lng->toJS(
"cont_ed_item_up");
  2447         $this->
lng->toJS(
"cont_ed_item_down");
  2448         $this->
lng->toJS(
"cont_ed_delete_item");
  2449         $this->
lng->toJS(
"copg_edit_iframe_title");
  2450         $this->
lng->toJS(
"copg_par_format_selection");
  2453         $this->tpl->addJavaScript(
"./Services/UIComponent/AdvancedSelectionList/js/AdvancedSelectionList.js");
  2460         $info = $this->
lng->txt(
"content_no_edit_lock");
  2462         $info .= 
"</br>" . $this->
lng->txt(
"content_until") . 
": " .
  2464         $info .= 
"</br>" . $this->
lng->txt(
"obj_usr") . 
": " .
  2467         $back_link = $this->
ui->factory()->link()->standard(
  2468             $this->
lng->txt(
"back"),
  2469             $this->
ctrl->getLinkTarget($this, 
"finishEditing")
  2472         $mbox = $this->
ui->factory()->messageBox()->info($info)
  2473             ->withLinks([$back_link]);
  2474         $rendered_mbox = $this->
ui->renderer()->render($mbox);
  2476         if (!$this->
ctrl->isAsynch()) {
  2477             $this->tpl->setContent($rendered_mbox);
  2479             echo $rendered_mbox;
  2501         $info = $this->
lng->txt(
"cont_got_lock_release");
  2504         $mbox = $ui->factory()->messageBox()->info($info);
  2506         return $ui->renderer()->render($mbox);
  2511         $pl_pc_id = $this->request->getPlaceholderPCId();
  2512         $this->obj->buildDom();
  2513         $this->obj->addHierIDs();
  2515         return $this->
edit();
  2536         $this->tpl = 
new ilGlobalTemplate(
"tpl.fullscreen.html", 
true, 
true, 
"Services/COPage");
  2537         $this->tpl->setCurrentBlock(
"ContentStyle");
  2538         $this->tpl->setVariable(
"LOCATION_CONTENT_STYLESHEET", 0);
  2539         $this->tpl->parseCurrentBlock();
  2541         $this->tpl->setVariable(
  2546         $this->tpl->setCurrentBlock(
"ilMedia");
  2549         if ($this->requested_pg_id > 0) {
  2551             $pg_obj->buildDom();
  2556             $xml .= $pg_obj->getMediaAliasElement($this->request->getMobId());
  2566         $mode = 
"fullscreen";
  2567         $params = array(
'mode' => $mode,
  2569         'webspace_path' => $wb_path);
  2570         $output = $this->xsl->process($xml, 
$params);
  2573         $this->tpl->setVariable(
"MEDIA_CONTENT", $output);
  2583         if (is_array($a_error)) {
  2584             $error_str = 
"<strong>Error(s):</strong><br>";
  2585             foreach ($a_error as $error) {
  2586                 $err_mess = implode(
" - ", $error);
  2587                 if (!is_int(strpos($err_mess, 
":0:"))) {
  2588                     $error_str .= htmlentities($err_mess) . 
"<br />";
  2591             $this->tpl->setVariable(
"MESSAGE", $error_str);
  2597         $this->tabs_gui->clearTargets();
  2598         $this->tabs_gui->setBackTarget(
  2599             $this->
lng->txt(
"back"),
  2600             $this->
ctrl->getLinkTarget($this, 
"edit")
  2606         $this->tabs_gui->clearTargets();
  2607         $this->tabs_gui->setBackTarget(
  2608             $this->
lng->txt(
"back"),
  2609             $this->
ctrl->getLinkTarget($this, 
"history")
  2624         $this->tpl->addJavaScript(
"./Services/COPage/js/page_history.js");
  2627         $table_gui->setId(
"hist_table");
  2634             'sortkey' => 999999,
  2636         $table_gui->setData($entries);
  2637         return $table_gui->getHTML();
  2652         $this->
ctrl->setParameter($this, 
"rollback_nr", $this->requested_old_nr);
  2653         $c_gui->setFormAction($this->
ctrl->getFormAction($this, 
"rollback"));
  2654         $c_gui->setHeaderText($this->
lng->txt(
"cont_rollback_confirmation"));
  2655         $c_gui->setCancel($this->
lng->txt(
"cancel"), 
"history");
  2656         $c_gui->setConfirm($this->
lng->txt(
"confirm"), 
"rollback");
  2658         $hentry = $this->obj->getHistoryEntry($this->requested_old_nr);
  2662             $this->requested_old_nr,
  2666         $this->tpl->setContent($c_gui->getHTML());
  2678         $hentry = $this->obj->getHistoryEntry(
  2679             $this->request->getString(
"rollback_nr")
  2682         if ($hentry[
"content"] != 
"") {
  2683             $this->obj->setXMLContent($hentry[
"content"]);
  2684             $this->obj->buildDom(
true);
  2685             if ($this->obj->update()) {
  2686                 $this->
ctrl->redirect($this, 
"history");
  2689         $this->
ctrl->redirect($this, 
"history");
  2694         $this->
help->setScreenIdComponent(
"copg");
  2700         if ($this->use_meta_data) {
  2702                 $this->meta_data_rep_obj,
  2703                 $this->meta_data_type,
  2704                 $this->meta_data_sub_obj_id
  2706             $mdtab = $mdgui->getTab();
  2708                 $this->tabs_gui->addTarget(
  2712                     "ilobjectmetadatagui"  2716         return (
string) $mdtab;
  2719     public function getTabs(
string $a_activate = 
""): void
  2732             $this->tabs_gui->addTarget(
"pg", $this->
ctrl->getLinkTarget($this, 
"preview"), array(
"", 
"preview"));
  2734             $this->tabs_gui->addTarget(
"cont_preview", $this->
ctrl->getLinkTarget($this, 
"preview"), array(
"", 
"preview"));
  2737         if ($this->use_meta_data) {
  2739                 $this->meta_data_rep_obj,
  2740                 $this->meta_data_type,
  2741                 $this->meta_data_sub_obj_id
  2743             $mdtab = $mdgui->getTab();
  2745                 $this->tabs_gui->addTarget(
  2749                     "ilobjectmetadatagui"  2757         if (is_array($this->tab_hook)) {
  2758             $func = $this->tab_hook[
"func"];
  2759             $this->tab_hook[
"obj"]->$func();
  2772         $tpl = 
new ilTemplate(
"tpl.page_compare.html", 
true, 
true, 
"Services/COPage");
  2778         $compare = $this->compare->compare(
  2785         $lpage = $compare[
"l_page"];
  2787         $cfg->setPreventHTMLUnmasking(
true);
  2796         $lhtml = str_replace(
"<br />", 
"<br />", $lhtml);
  2800         $rpage = $compare[
"r_page"];
  2808         $rhtml = str_replace(
"<br />", 
"<br />", $rhtml);
  2812         $tpl->
setVariable(
"TXT_MODIFIED", $this->
lng->txt(
"cont_pc_modified"));
  2813         $tpl->
setVariable(
"TXT_DELETED", $this->
lng->txt(
"cont_pc_deleted"));
  2820         $a_html = str_replace(
"[ilDiffInsStart]", 
'<span class="ilDiffIns">', $a_html);
  2821         $a_html = str_replace(
"[ilDiffDelStart]", 
'<span class="ilDiffDel">', $a_html);
  2822         $a_html = str_replace(
"[ilDiffInsEnd]", 
'</span>', $a_html);
  2823         $a_html = str_replace(
"[ilDiffDelEnd]", 
'</span>', $a_html);
  2835         $atpl = 
new ilTemplate(
"tpl.page_activation.php", 
true, 
true, 
"Services/COPage");
  2838         $atpl->setVariable(
"FORM", $this->
form->getHTML());
  2839         $this->tpl->setContent($atpl->get());
  2848         $this->
form->setFormAction($this->
ctrl->getFormAction($this));
  2849         $this->
form->setTitle($this->
lng->txt(
"cont_page_activation"));
  2853         $rad_op1 = 
new ilRadioOption($this->
lng->txt(
"cont_activated"), 
"activated");
  2855         $rad->addOption($rad_op1);
  2856         $rad_op2 = 
new ilRadioOption($this->
lng->txt(
"cont_deactivated"), 
"deactivated");
  2857         $rad->addOption($rad_op2);
  2858         $rad_op3 = 
new ilRadioOption($this->
lng->txt(
"cont_scheduled_activation"), 
"scheduled");
  2861         $dt_prop->setRequired(
true);
  2862         $dt_prop->setShowTime(
true);
  2866         $dt_prop2->setShowTime(
true);
  2867         $rad_op3->addSubItem($dt_prop2);
  2871         $cb->setInfo($this->
lng->txt(
"cont_show_activation_info_info"));
  2872         $rad_op3->addSubItem($cb);
  2875         $rad->addOption($rad_op3);
  2877         $this->
form->addCommandButton(
"saveActivation", $this->
lng->txt(
"save"));
  2879         $this->
form->addItem($rad);
  2887         $activation = 
"deactivated";
  2889             $activation = 
"activated";
  2892         $dt_prop = $this->
form->getItemByPostVar(
"start");
  2894             $activation = 
"scheduled";
  2900         $dt_prop = $this->
form->getItemByPostVar(
"end");
  2902             $activation = 
"scheduled";
  2909         $this->
form->getItemByPostVar(
"activation")->setValue($activation);
  2910         $this->
form->getItemByPostVar(
"show_activation_info")->setChecked($this->
getPageObject()->getShowActivationInfo());
  2920         if ($this->
form->checkInput()) {
  2925                 $this->request->getString(
"show_activation_info")
  2927             $activation = $this->request->getString(
"activation");
  2928             if ($activation == 
"deactivated") {
  2931             if ($activation == 
"scheduled") {
  2941             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"msg_obj_modified"), 
true);
  2942             $this->
ctrl->redirect($this, 
"editActivation");
  2944         $this->
form->setValuesByPost();
  2945         $this->tpl->setContent($this->
form->getHTML());
  2952         object $a_content_object = null,
  2953         bool $a_enable_private_notes = 
true,
  2954         bool $a_enable_public_notes = 
false,
  2955         bool $a_enable_notes_deletion = 
false,
  2956         callable $a_callback = null,
  2957         bool $export = 
false  2960         if (!$a_content_object) {
  2961             throw new ilException(
"No content object given.");
  2982             $comments_gui = $this->notes->gui()->getCommentsGUI(
  2983                 $a_content_object->getParentId(),
  2984                 $a_content_object->getId(),
  2985                 $a_content_object->getParentType()
  2987             $comments_gui->setUseObjectTitleHeader(
false);
  2990         if ($a_enable_private_notes) {
  2991             $comments_gui->enablePrivateNotes();
  2993         if ($a_enable_public_notes) {
  2994             $comments_gui->enablePublicNotes();
  2995             if ($a_enable_notes_deletion) {
  2996                 $comments_gui->enablePublicNotesDeletion(
true);
  3000             $comments_gui->setExportMode();
  3004             $comments_gui->addObserver($a_callback);
  3007         $next_class = $this->
ctrl->getNextClass($this);
  3008         if (in_array($next_class, [
"ilnotegui", 
"ilcommentgui"])) {
  3009             $html = $this->
ctrl->forwardCommand($comments_gui);
  3011             $html = $comments_gui->getListHTML();
  3022             $this->request->getString(
"type"),
  3023             $this->request->getString(
"id"),
  3024             $this->request->getString(
"answer")
  3040         $this->tabs_gui->activateTab(
"edit");
  3042         $this->tpl->setContent($form->
getHTML());
  3052         $ac->setInternalLinkDefault(
"Media_Media", 0);
  3053         $ac->setInternalLinkFilterTypes(array(
"PageObject_FAQ", 
"GlossaryItem", 
"Media_Media", 
"Media_FAQ"));
  3054         $val = $this->obj->getInitialOpenedContent();
  3055         if (($val[
"id"] ?? 
'') != 
"" && ($val[
"type"] ?? 
'') != 
"") {
  3056             $ac->setValue($val[
"type"] . 
"|" . $val[
"id"] . 
"|" . $val[
"target"]);
  3063         $form->
setTitle($this->
lng->txt(
"cont_initial_attached_content"));
  3071         $this->obj->saveInitialOpenedContent(
  3072             $this->request->getString(
"opened_content_ajax_type"),
  3073             $this->request->getInt(
"opened_content_ajax_id"),
  3074             $this->request->getString(
"opened_content_ajax_target")
  3077         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"msg_obj_modified"));
  3078         $this->
ctrl->redirect($this, 
"edit");
  3091         $l = $this->request->getString(
"totransl");
  3097         $this->
ctrl->setParameter($this, 
"transl", $l);
  3098         $this->
ctrl->redirect($this, 
"edit");
  3112         $l = $this->request->getString(
"totransl");
  3113         $this->
ctrl->setParameter($this, 
"totransl", $l);
  3114         $this->
lng->loadLanguageModule(
"meta");
  3117         $cgui->setFormAction($this->
ctrl->getFormAction($this));
  3118         $cgui->setHeaderText($this->
lng->txt(
"cont_page_translation_does_not_exist") . 
": " .
  3119             $this->
lng->txt(
"meta_l_" . $l));
  3120         $cgui->setCancel($this->
lng->txt(
"cancel"), 
"editMasterLanguage");
  3121         $cgui->setConfirm($this->
lng->txt(
"confirm"), 
"createPageTranslation");
  3122         $this->tpl->setContent($cgui->getHTML());
  3130         $this->
ctrl->setParameter($this, 
"transl", 
"-");
  3131         $this->
ctrl->redirect($this, 
"edit");
  3139         $l = $this->request->getString(
"totransl");
  3148         $p->copyPageToTranslation($l);
  3149         $this->
ctrl->setParameter($this, 
"transl", $l);
  3150         $this->
ctrl->redirect($this, 
"edit");
  3159         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"cont_page_lock_released"), 
true);
  3165         $this->
ctrl->redirect($this, 
"preview");
  3187         foreach ($collector->getJavascriptFiles() as $js) {
  3191         foreach ($collector->getCssFiles() as $css) {
  3195         foreach ($collector->getOnloadCode() as $code) {
 
printToStdout(string $part=self::DEFAULT_BLOCK, bool $has_tabs=true, bool $skip_main_menu=false)
 
static getWebspaceDir(string $mode="filesystem")
get webspace directory 
 
string $template_output_var
 
setLinkFrame(string $l_frame="")
 
setEditPreview(bool $a_editpreview)
Set Display first Edit tab, then Preview tab, instead of Page and Edit. 
 
history()
Get history table as HTML. 
 
releasePageLock()
Release page lock. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
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. 
 
string $exp_target_script
 
const SEC_PROTECT_PROTECTED
 
setOpenPlaceHolder(string $a_val)
 
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) 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static lookupSettingByParentType(string $a_par_type, string $a_name, string $a_default='0')
Lookup setting by parent type. 
 
saveInitialOpenedContent()
 
setActivationListener(object $a_obj, string $a_meth)
 
string $open_place_holder
 
ILIAS COPage Page PageManager $pm
 
static getInitHTML(string $a_url)
Get initialisation HTML to use internal link editing. 
 
rollbackConfirmation()
Rollback confirmation. 
 
setEditorToolContext()
Set editor tool context. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
initActivationForm()
Init activation form. 
 
getLinkTargetByClass( $a_class, string $a_cmd=null, string $a_anchor=null, bool $is_async=false, bool $has_xml_style=false)
 
postOutputProcessing(string $a_output)
Finalizing output processing. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
Editing session repository. 
 
string $meta_data_observer_func
 
editMasterLanguage()
Edit master language. 
 
ILIAS COPage PageLinker $page_linker
 
static getLogger(string $a_component_id)
Get component logger. 
 
static collectContentIncludes(ilPageObject $a_page, DOMDocument $a_domdoc)
get all content includes that are used within the page 
 
enableNotes(bool $a_enabled, int $a_parent_id)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
 
setViewPageLink(string $a_link, string $a_target="")
set link for "view page" button 
 
static initDateTimePicker()
 
setParentType(string $a_val)
 
ILIAS GlobalScreen ScreenContext ContextServices $tool_context
 
special template class to simplify handling of ITX/PEAR 
 
setOutputMode(string $a_mode=self::PRESENTATION)
 
touchBlock(string $block)
overwrites ITX::touchBlock. 
 
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
 
ilObject $meta_data_rep_obj
 
setPageBackTitle(string $a_title)
 
Class ChatMainBarProvider . 
 
replaceCurlyBrackets(string $output)
 
setPageLinker(\ILIAS\COPage\PageLinker $page_linker)
 
static getImagePath(string $img, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory) 
 
compareVersion()
Compares two revisions of the page. 
 
static initJS(ilGlobalTemplateInterface $a_main_tpl=null)
 
getAdvMdRecordObject()
Get adv md record type. 
 
static _getListCharacteristics(int $a_style_id, string $type)
 
int $requested_history_mode
 
User Interface for NewsItem entities. 
 
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
 
setLanguage(string $a_val)
 
setCompareMode(bool $a_val)
 
setTemplateTargetVar(string $a_variable)
 
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string. 
 
confirmPageTranslationCreation()
Confirm page translation creation. 
 
setPageConfig(ilPageConfig $a_val)
 
static lookupTitle(int $a_page_id)
 
setEnabledPageFocus(bool $a_enabledpagefocus)
 
ILIAS COPage InternalGUIService $gui
 
presentation(string $a_mode=self::PRESENTATION)
 
static _lookupOwner(int $obj_id)
Lookup owner user ID for object ID. 
 
EditSessionRepository $edit_repo
 
loadLanguageModule(string $a_module)
Load language module. 
 
setOfflineDirectory(string $offdir)
 
setHeader(string $a_title="")
 
setQEditTabs(string $a_active)
Set question editing tabs. 
 
setVariable(string $variable, $value='')
Sets the given variable to the given value. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
showEditToolbar()
Show edit toolbar. 
 
executeCommand()
execute command 
 
getActivationFormValues()
Get values for activation form. 
 
saveActivation()
Save Activation. 
 
switchToLanguage()
Switch to language. 
 
insertResources(string $a_output)
 
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 saveQuestionAnswer(string $a_type, int $a_id, string $a_answer)
 
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...
 
setStyleId(int $a_styleid)
 
replaceDiffTags(string $a_html)
 
static _getQuestionGUI(string $question_type='', int $question_id=-1)
Creates a question gui representation and returns the alias to the question gui. 
 
const CMD_SHOW
command constants 
 
previewHistory()
Preview history. 
 
string $requested_file_id
 
setTabHook(object $a_object, string $a_function)
 
setTemplateOutput(bool $a_output=true)
 
isEnabledChangeComments()
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static insertResourcesIntoPageContent(string $a_content)
Insert resources (see also ilContainerContentGUI::determinePageEmbeddedBlocks for presentation) ...
 
static addJavaScript(ilGlobalTemplate $main_tpl=null)
Add javascript files that are necessary to run accordion. 
 
determineSourcecodeDownloadScript()
 
ILIAS TestQuestionPool QuestionInfoService $questioninfo
 
GUI class for public user profile presentation. 
 
setAdvMdRecordObject(int $a_adv_ref_id, string $a_adv_type, string $a_adv_subtype="-")
Set object, that defines the adv md records being used. 
 
addResourcesToTemplate(ilGlobalTemplateInterface $tpl)
Add resources to template. 
 
determineFullscreenLink()
 
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data 
 
int $meta_data_sub_obj_id
 
string $presentation_title
 
static addCss()
Add required css. 
 
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 _lookupTitle(int $obj_id)
 
__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="")
 
setRenderPageContainer(bool $a_val)
 
setRawPageContent(bool $a_rawpagecontent)
Set Get raw page content only. 
 
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists. 
 
setEnabledHref(bool $enable)
 
getComponentPluginsXML()
Put information about activated plugins into XML. 
 
ILIAS COPage Link LinkManager $link
 
ilGlobalTemplateInterface $tpl
 
getEnablePCType(string $a_pc_type)
 
object $meta_data_observer_obj
 
determineFileDownloadLink()
 
setPageObject(ilPageObject $a_pg_obj)
 
setAbstractOnly(bool $a_val, string $pcid="")
Get only abstract (first text paragraph) 
 
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD) 
 
ILIAS COPage Editor GUIService $editor_gui
 
enableChangeComments(bool $a_enabled)
 
download_paragraph()
download source code paragraph 
 
ilComponentFactory $component_factory
 
static getBaseContentStylePath()
 
bool $enabledcontentincludes
 
static initjQueryUI(ilGlobalTemplateInterface $a_tpl=null)
inits and adds the jQuery-UI JS-File to the global template (see included_components.txt for included components) 
 
setFullscreenLink(string $a_fullscreen_link)
 
getTabs(string $a_activate="")
 
addJavaScript(string $a_js_file, bool $a_add_version_parameter=true, int $a_batch=2)
Add a javascript file that should be included in the header. 
 
setSourcecodeDownloadScript(string $script_name)
 
setPresentationTitle(string $a_title="")
 
string $file_download_link
 
addOnLoadCode(string $a_code, int $a_batch=2)
Add on load code. 
 
static getContentStylePath(int $a_style_id, bool $add_random=true, bool $add_token=true)
get content style path static (to avoid full reading) 
 
editActivation()
Edit activation (only, if scheduled page activation is activated in administration) ...
 
displayMedia(bool $a_fullscreen=false)
 
getActivationCaptions()
Get captions for activation action menu entries. 
 
setCurrentBlock(string $part=self::DEFAULT_BLOCK)
Sets the template to the given block. 
 
static isActivated()
Checks whether Map feature is activated. 
 
setFileDownloadLink(string $a_download_link)
 
ILIAS Notes Service $notes
 
form( $class_path, string $cmd, string $submit_caption="")
 
bool $render_page_container
 
setQuestionHTML(array $question_html)
 
ILIAS COPage Compare PageCompare $compare
 
initialOpenedContent()
Initially opened content. 
 
rollback()
Rollback to a previous version. 
 
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. 
 
static initjQuery(ilGlobalTemplateInterface $a_tpl=null)
inits and adds the jQuery JS-File to the global or a passed template 
 
static getInstance()
Singleton: get instance for use in ILIAS requests with a config loaded from the settings. 
 
ilPageConfig $page_config
 
setTemplate(ilGlobalTemplateInterface $main_tpl)
 
setEditMode()
Set edit mode. 
 
ILIAS COPage Xsl XslManager $xsl
 
onFeedbackEditingForwarding()
 
getAdditionalPageActions()
Get additional page actions. 
 
string $offline_directory
 
static getFlashVideoPlayerFilename(bool $a_fullpath=false)
 
initPageObject()
Init page object. 
 
showPage()
display content of page 
 
link(string $caption, string $href, bool $new_viewport=false)
 
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. 
 
setIntLinkReturn(string $a_return)
 
Page component editing request. 
 
insertPageToc(string $a_output)
 
getSourcecodeDownloadScript()
 
setOldNr(int $a_val)
Set old nr (historic page) 
 
processAnswer()
Process answer. 
 
parseCurrentBlock(string $block_name=self::DEFAULT_BLOCK)
Parses the given block. 
 
string $sourcecode_download_script
 
static _lookupType(int $id, bool $reference=false)
 
setProfileBackUrl(string $url)
 
setEnabledTabs(bool $a_enabledtabs)
 
setEnabledNews(bool $a_enabled, int $a_news_obj_id=0, string $a_news_obj_type="")
 
static getCacheTriggerString(ilPageObject $a_page)
Get page cache update trigger string. 
 
setPrependingHtml(string $a_prependinghtml)
 
ILIAS COPage PC PCDefinition $pc_definition
 
isPageContainerToBeRendered()
 
createPageTranslation()
Create page translation. 
 
showMediaFullscreen(int $a_style_id=0)
show fullscreen view of media object 
 
static getInstance(string $a_parent_type, int $a_id=0, int $a_old_nr=0, string $a_lang="-")
Get page object instance. 
 
setEnablePCType(string $a_pc_type, bool $a_val)
 
insertAdvTrigger(string $a_output)
Insert adv content trigger. 
 
static initMediaElementJs(ilGlobalTemplateInterface $a_tpl=null)
Init mediaelement.js scripts. 
 
checkLangPageAvailable(int $id, string $lang)
 
setLinkParams(string $l_params="")
 
setTabs(ilTabsGUI $a_tabs)
 
setEnableEditing(bool $a_enableediting)
 
displayValidationError($a_error)
display validation error 
 
addCss(string $a_css_file, string $media="screen")
Add a css file that should be included in the header.