19 define(
"IL_INSERT_BEFORE", 0);
20 define(
"IL_INSERT_AFTER", 1);
21 define(
"IL_INSERT_CHILD", 2);
55 protected \ILIAS\COPage\Link\LinkManager
$link;
116 $this->obj_definition = $DIC[
"objDefinition"];
117 $this->db = $DIC->database();
118 $this->
user = $DIC->user();
119 $this->
lng = $DIC->language();
120 $this->tree = $DIC->repositoryTree();
122 $this->lom_services = $DIC->learningObjectMetadata();
130 $this->contains_int_link =
false;
131 $this->needs_parsing =
false;
132 $this->update_listeners = array();
133 $this->update_listener_cnt = 0;
134 $this->dom_builded =
false;
135 $this->page_not_found =
false;
136 $this->old_nr = $a_old_nr;
137 $this->encoding =
"UTF-8";
150 $this->show_page_act_info =
false;
158 $domain = $DIC->copage()
161 $this->content_id_manager = $domain
163 $this->page_manager = $domain->page();
164 $this->pc_service = $domain->pc();
165 $this->pc_definition = $domain->pc()->definition();
166 $this->
link = $domain->link();
167 $this->style_manager = $domain->style();
168 $this->dom_util = $domain->domUtil();
172 \
ILIAS\COPage\ID\ContentIdManager $content_id_manager
205 $this->page_config = $a_val;
210 $this->concrete_lang = $a_val;
225 $this->rendermd5 = $a_rendermd5;
235 $this->renderedcontent = $a_renderedcontent;
245 $this->renderedtime = $a_renderedtime;
255 $this->lastchange = $a_lastchange;
265 $this->last_change_user = $a_val;
275 $this->show_page_act_info = $a_val;
294 if ($this->old_nr == 0) {
295 $query =
"SELECT * FROM page_object" .
296 " WHERE page_id = " . $this->db->quote($this->
id,
"integer") .
297 " AND parent_type=" . $this->db->quote($this->
getParentType(),
"text") .
298 " AND lang = " . $this->db->quote($this->
getLanguage(),
"text");
299 $pg_set = $this->db->query($query);
300 if (!$this->page_record = $this->db->fetchAssoc($pg_set)) {
304 $this->
setActive($this->page_record[
"active"]);
309 $query =
"SELECT * FROM page_history" .
310 " WHERE page_id = " . $this->db->quote($this->
id,
"integer") .
311 " AND parent_type=" . $this->db->quote($this->
getParentType(),
"text") .
312 " AND nr = " . $this->db->quote($this->old_nr,
"integer") .
313 " AND lang = " . $this->db->quote($this->
getLanguage(),
"text");
314 $pg_set = $this->db->query($query);
315 $this->page_record = $this->db->fetchAssoc($pg_set);
317 if (!$this->page_record) {
321 $this->xml = $this->page_record[
"content"];
322 $this->
setParentId((
int) $this->page_record[
"parent_id"]);
323 $this->last_change_user = (
int) ($this->page_record[
"last_change_user"] ?? 0);
324 $this->create_user = (
int) ($this->page_record[
"create_user"] ?? 0);
326 $this->
setRenderMd5((
string) ($this->page_record[
"render_md5"] ??
""));
327 $this->
setRenderedTime((
string) ($this->page_record[
"rendered_time"] ??
""));
328 $this->
setLastChange((
string) ($this->page_record[
"last_change"] ??
""));
336 string $a_parent_type,
339 bool $a_no_cache =
false 343 $db = $DIC->database();
345 if (!$a_no_cache && isset(self::$exists[$a_parent_type .
":" . $a_id .
":" . $a_lang])) {
346 return self::$exists[$a_parent_type .
":" . $a_id .
":" . $a_lang];
351 $and_lang =
" AND lang = " . $db->
quote($a_lang,
"text");
354 $query =
"SELECT page_id FROM page_object WHERE page_id = " . $db->
quote($a_id,
"integer") .
" " .
355 "AND parent_type = " . $db->
quote($a_parent_type,
"text") . $and_lang;
356 $set = $db->
query($query);
358 self::$exists[$a_parent_type .
":" . $a_id .
":" . $a_lang] =
true;
361 self::$exists[$a_parent_type .
":" . $a_id .
":" . $a_lang] =
false;
370 string $a_parent_type,
382 if ($this->dom_builded && !$a_force) {
389 $this->dom = $this->dom_util->docFromString($this->
getXMLContent(
true), $error);
390 $path =
"//PageObject";
391 if (is_null($this->dom)) {
395 $nodes = $this->dom_util->path($this->dom,
$path);
396 if (count($nodes) == 1) {
397 $this->node = $nodes->item(0);
404 $this->dom_builded =
true;
424 public function setId(
int $a_id): void
436 $this->parent_id = $a_id;
453 $this->update_listeners[$cnt][
"object"] = $a_object;
454 $this->update_listeners[$cnt][
"method"] = $a_method;
455 $this->update_listeners[$cnt][
"parameters"] = $a_parameters;
456 $this->update_listener_cnt++;
462 $object = $this->update_listeners[$i][
"object"];
463 $method = $this->update_listeners[$i][
"method"];
464 $parameters = $this->update_listeners[$i][
"parameters"];
465 $object->$method($parameters);
471 $this->active = $a_active;
475 bool $a_check_scheduled_activation =
false 477 if ($a_check_scheduled_activation && !$this->active) {
495 $db = $DIC->database();
497 "SELECT page_id, parent_type, lang, active, activation_start, activation_end, show_activation_info FROM page_object " .
498 " WHERE parent_id = " . $db->
quote($a_parent_id,
"integer")
501 self::$activation_data[$rec[
"page_id"] .
":" . $rec[
"parent_type"] .
":" . $rec[
"lang"]] = $rec;
510 string $a_parent_type,
511 bool $a_check_scheduled_activation =
false,
516 $db = $DIC->database();
523 if (isset(self::$activation_data[$a_id .
":" . $a_parent_type .
":" . $a_lang])) {
524 $rec = self::$activation_data[$a_id .
":" . $a_parent_type .
":" . $a_lang];
527 "SELECT active, activation_start, activation_end FROM page_object WHERE page_id = %s" .
528 " AND parent_type = %s AND lang = %s",
529 array(
"integer",
"text",
"text"),
530 array($a_id, $a_parent_type, $a_lang)
539 if (!$rec[
"active"] && $a_check_scheduled_activation) {
540 if ($rec[
"n"] >= $rec[
"activation_start"] &&
541 $rec[
"n"] <= $rec[
"activation_end"]) {
546 return (
bool) $rec[
"active"];
554 string $a_parent_type,
559 $db = $DIC->database();
568 if (isset(self::$activation_data[$a_id .
":" . $a_parent_type .
":" . $a_lang])) {
569 $rec = self::$activation_data[$a_id .
":" . $a_parent_type .
":" . $a_lang];
572 "SELECT active, activation_start, activation_end FROM page_object WHERE page_id = %s" .
573 " AND parent_type = %s AND lang = %s",
574 array(
"integer",
"text",
"text"),
575 array($a_id, $a_parent_type, $a_lang)
580 if (!$rec[
"active"] && $rec[
"activation_start"] !=
"") {
592 string $a_parent_type,
597 $db = $DIC->database();
603 "UPDATE page_object SET active = %s, activation_start = %s, " .
604 " activation_end = %s WHERE page_id = %s" .
605 " AND parent_type = %s AND lang = %s",
606 array(
"int",
"timestamp",
"timestamp",
"integer",
"text",
"text"),
607 array((
int) $a_active, null, null, $a_id, $a_parent_type, $a_lang)
616 string $a_parent_type,
621 $db = $DIC->database();
628 if (isset(self::$activation_data[$a_id .
":" . $a_parent_type .
":" . $a_lang])) {
629 $rec = self::$activation_data[$a_id .
":" . $a_parent_type .
":" . $a_lang];
632 "SELECT active, activation_start, activation_end, show_activation_info FROM page_object WHERE page_id = %s" .
633 " AND parent_type = %s AND lang = %s",
634 array(
"integer",
"text",
"text"),
635 array($a_id, $a_parent_type, $a_lang)
641 "activation_start" => null,
642 "activation_end" => null,
643 "show_activation_info" => 0
655 $db = $DIC->database();
657 $res = $db->
query(
"SELECT parent_id FROM page_object WHERE page_id = " . $db->
quote($a_id,
"integer") .
" " .
658 "AND parent_type=" . $db->
quote($a_type,
"text"));
660 return (
int) ($rec[
"parent_id"] ?? 0);
663 public static function _writeParentId(
string $a_parent_type,
int $a_pg_id,
int $a_par_id): void
667 $db = $DIC->database();
669 "UPDATE page_object SET parent_id = %s WHERE page_id = %s" .
670 " AND parent_type = %s",
671 array(
"integer",
"integer",
"text"),
672 array($a_par_id, $a_pg_id, $a_parent_type)
681 if ($a_activationstart ==
"") {
682 $a_activationstart = null;
684 $this->activationstart = $a_activationstart;
698 if ($a_activationend ==
"") {
699 $a_activationend = null;
701 $this->activationend = $a_activationend;
716 $node = $this->page_manager->content($this->
getDomDoc())->getContentDomNode(
720 $this->log->debug(
"getContentObject: " .
" $a_hier_id, $a_pc_id, " . $node->nodeName);
721 return $this->pc_service->getByNode($node, $this);
739 $node = $content_object->getDomNode();
740 $node = $node->parentNode;
742 if ($node->nodeName ==
"PageContent") {
743 $pcid = $node->getAttribute(
"PCID");
748 $node = $node->parentNode;
755 $cm = $this->page_manager->content($this->
getDomDoc());
756 return $cm->getContentDomNode($a_hier_id, $a_pc_id);
770 public function setXMLContent(
string $a_xml,
string $a_encoding =
"UTF-8"): void
772 $this->encoding = $a_encoding;
782 $this->xml .= $a_xml;
794 $enc_str = (!empty($this->encoding))
795 ?
"encoding=\"" . $this->encoding .
"\"" 797 return "<?xml version=\"1.0\" $enc_str ?>" .
798 "<!DOCTYPE PageObject SYSTEM \"" . $this->
getIliasAbsolutePath() .
"/components/ILIAS/Export/xml/" . $this->cur_dtd .
"\">" .
807 return ILIAS_ABSOLUTE_PATH;
816 bool $a_clone_mobs =
false,
817 int $a_new_parent_id = 0,
818 int $obj_copy_id = 0,
819 bool $self_ass =
true 821 $cm = $this->page_manager->contentFromXml($this->
getXMLContent());
822 return $cm->copyXmlContent(
842 $pm = $this->page_manager->content($this->
getDomDoc());
843 $pm->handleDeleteContent($this, $a_node, $move_operation);
851 bool $a_incl_head =
false,
852 bool $a_append_mobs =
false,
853 bool $a_append_bib =
false,
854 string $a_append_str =
"",
855 bool $a_omit_pageobject_tag =
false,
857 bool $offline =
false 861 return $this->dom_util->dump($this->node);
864 if ($a_append_mobs || $a_append_bib) {
867 if ($a_append_mobs) {
876 return "<dummy>" . $this->dom_util->dump($this->node) . $mobs . $bibs . $trans . $a_append_str .
"</dummy>";
878 if (is_object($this->dom)) {
879 if ($a_omit_pageobject_tag) {
881 foreach ($this->node->childNodes as $child) {
882 $xml .= $this->dom_util->dump($child);
885 $xml = $this->dom_util->dump($this->node);
886 $xml = preg_replace(
'/<\?xml[^>]*>/i',
"", $xml);
887 $xml = preg_replace(
'/<!DOCTYPE[^>]*>/i',
"", $xml);
919 "ed_align_left_float",
920 "ed_align_right_float",
922 "ed_new_item_before",
929 "ed_split_page_next",
937 "ed_click_to_add_pg",
942 $defs = $this->pc_definition->getPCDefinitions();
943 foreach ($defs as $def) {
944 $lang_vars[] =
"pc_" . $def[
"pc_type"];
945 $lang_vars[] =
"ed_insert_" . $def[
"pc_type"];
947 $cl = $def[
"pc_class"];
948 $lvs = call_user_func($def[
"pc_class"] .
'::getLangVars');
949 foreach ($lvs as $lv) {
956 $dummy_pc->setStyleId($style_id);
957 foreach ([
"section",
"table",
"flist_li",
"list_u",
"list_o",
958 "table",
"table_cell"] as $type) {
959 $dummy_pc->getCharacteristicsOfCurrentStyle([$type]);
960 foreach ($dummy_pc->getCharacteristics() as $char =>
$txt) {
961 $xml .=
"<LV name=\"char_" . $type .
"_" . $char .
"\" value=\"" .
$txt .
"\"/>";
964 $type =
"media_cont";
966 $dummy_pc->setStyleId($style_id);
967 $dummy_pc->getCharacteristicsOfCurrentStyle([$type]);
968 foreach ($dummy_pc->getCharacteristics() as $char =>
$txt) {
969 $xml .=
"<LV name=\"char_" . $type .
"_" . $char .
"\" value=\"" .
$txt .
"\"/>";
971 foreach ([
"text_block",
"heading1",
"heading2",
"heading3"] as $type) {
973 $dummy_pc->setStyleId($style_id);
974 $dummy_pc->getCharacteristicsOfCurrentStyle([$type]);
975 foreach ($dummy_pc->getCharacteristics() as $char =>
$txt) {
976 $xml .=
"<LV name=\"char_" . $type .
"_" . $char .
"\" value=\"" .
$txt .
"\"/>";
979 foreach ($lang_vars as $lang_var) {
988 $val = $this->
lng->txt(
"cont_" . $var);
989 $val = str_replace(
'"',
""", $val);
990 return "<LV name=\"$var\" value=\"" . $val .
"\"/>";
995 return $this->pc_service->paragraph()->getFirstParagraphText($this);
1000 return $this->pc_service->paragraph()->getParagraphForPCID($this, $pcid);
1013 $this->contains_int_link = $a_contains_link;
1028 $this->import_mode = $a_val;
1038 if ($a_parse ===
true) {
1039 $this->needs_parsing =
true;
1041 if ($a_parse ===
false) {
1042 $this->needs_parsing =
false;
1050 $this->contains_question = $a_val;
1065 $mob_manager = $this->pc_service->mediaObject();
1066 return $mob_manager->collectMediaObjects($this->
getDomDoc(), $a_inline_only);
1082 bool $offline =
false 1085 $mob_manager = $this->pc_service->mediaObject();
1086 return $mob_manager->getMultimediaXML($this->
getDomDoc(), $offline);
1094 $mob_manager = $this->pc_service->mediaObject();
1095 return $mob_manager->getMediaAliasElement(
1113 $this->dom_util->validate($this->dom, $error, $throw);
1122 $this->content_id_manager->addHierIDsToDom();
1127 return $this->content_id_manager->getHierIds();
1132 $this->content_id_manager->stripHierIDsFromDom();
1137 $this->content_id_manager->stripPCIDs();
1145 return $this->content_id_manager->getHierIdsForPCIds($a_pc_ids);
1150 return $this->content_id_manager->getHierIdForPcId($pcid);
1158 return $this->content_id_manager->getPCIdsForHierIds($hier_ids);
1163 return $this->content_id_manager->getPCIdForHierId($hier_id);
1171 $this->pc_service->fileList()->addFileSizes($this->
getDomDoc());
1180 return $this->
link->resolveIntLinks($this->
getDomDoc(), $a_link_map);
1189 bool $a_reuse_existing_by_import =
false 1191 return $this->pc_service->mediaObject()->resolveMediaAliases(
1194 $a_reuse_existing_by_import
1204 return $this->pc_service->interactiveImage()->resolveIIMMediaAliases(
1216 return $this->pc_service->fileList()->resolveFileItems(
1228 $qm = $this->pc_service->question();
1229 return $qm->resolveQuestionReferences(
1244 return $this->
link->moveIntLinks(
1256 int $a_source_ref_id
1261 $this->log->debug(
"Handle repository links...");
1263 $defs = $this->pc_definition->getPCDefinitions();
1264 foreach ($defs as $def) {
1265 if (method_exists($def[
"pc_class"],
'afterRepositoryCopy')) {
1266 call_user_func($def[
"pc_class"] .
'::afterRepositoryCopy', $this, $a_mapping, $a_source_ref_id);
1270 $this->
link->handleRepositoryLinksOnCopy($this->
getDomDoc(), $a_mapping, $a_source_ref_id, $tree);
1297 $this->db->insert(
"page_object", array(
1298 "page_id" => array(
"integer", $this->
getId()),
1299 "parent_id" => array(
"integer", $this->
getParentId()),
1301 "content" => array(
"clob", $content),
1303 "create_user" => array(
"integer", $this->
user->getId()),
1304 "last_change_user" => array(
"integer", $this->
user->getId()),
1305 "active" => array(
"integer", (
int) $this->
getActive()),
1309 "inactive_elements" => array(
"integer", $iel),
1310 "int_links" => array(
"integer", $inl),
1312 "last_change" => array(
"timestamp",
ilUtil::now()),
1313 "is_empty" => array(
"integer", $empty)
1328 $this->log->debug(
"ilPageObject, updateFromXML(): start, id: " . $this->
getId());
1332 $this->log->debug(
"ilPageObject, updateFromXML(): content: " . substr($content, 0, 100));
1342 $this->db->update(
"page_object", array(
1343 "content" => array(
"clob", $content),
1344 "parent_id" => array(
"integer", $this->
getParentId()),
1345 "last_change_user" => array(
"integer", $this->
user->getId()),
1346 "last_change" => array(
"timestamp",
ilUtil::now()),
1347 "active" => array(
"integer", $this->
getActive()),
1350 "inactive_elements" => array(
"integer", $iel),
1351 "int_links" => array(
"integer", $inl),
1353 "page_id" => array(
"integer", $this->
getId()),
1361 $this->log->debug(
"ilPageObject, updateFromXML(): end");
1373 bool $a_creation =
false,
1374 bool $a_empty =
false 1377 if (!$a_creation || !$a_empty) {
1387 $this->reading_time_manager->saveTime($this);
1390 $defs = $this->pc_definition->getPCDefinitions();
1391 foreach ($defs as $def) {
1392 $cl = $def[
"pc_class"];
1393 call_user_func($def[
"pc_class"] .
'::afterPageUpdate', $this, $a_domdoc, $a_xml, $a_creation);
1417 public function update(
bool $a_validate =
true,
bool $a_no_history =
false)
1419 $this->log->debug(
"start..., id: " . $this->
getId());
1429 $this->log->debug($this->dom_util->dump($this->getDomDoc()->documentElement));
1435 $errors[0] = array(0 => 0,
1436 1 => $this->
lng->txt(
"cont_not_saved_edit_lock_expired") .
"<br />" .
1437 $this->
lng->txt(
"obj_usr") .
": " .
1439 $this->
lng->txt(
"content_until") .
": " .
1445 $this->log->debug(
"checking duplicate ids");
1447 $errors[0] = $this->
lng->txt(
"cont_could_not_save_duplicate_pc_ids") .
1451 if (!empty($errors)) {
1452 $this->log->debug(
"ilPageObject, update(): errors: " . print_r($errors,
true));
1456 if (empty($errors)) {
1460 $this->log->debug(
"perform automatic modifications");
1470 $old_set = $this->db->query(
"SELECT * FROM page_object WHERE " .
1471 "page_id = " . $this->db->quote($this->getId(),
"integer") .
" AND " .
1472 "parent_type = " . $this->db->quote($this->getParentType(),
"text") .
" AND " .
1473 "lang = " . $this->db->quote($this->getLanguage(),
"text"));
1474 $last_nr_set = $this->db->query(
"SELECT max(nr) as mnr FROM page_history WHERE " .
1475 "page_id = " . $this->db->quote($this->getId(),
"integer") .
" AND " .
1476 "parent_type = " . $this->db->quote($this->getParentType(),
"text") .
" AND " .
1477 "lang = " . $this->db->quote($this->getLanguage(),
"text"));
1478 $last_nr = $this->db->fetchAssoc($last_nr_set);
1479 if ($old_rec = $this->db->fetchAssoc($old_set)) {
1482 if (($content != $old_rec[
"content"] || $this->
user->getId() != $old_rec[
"last_change_user"]) &&
1483 !$a_no_history && !$this->history_saved &&
$lm_set->get(
"page_history", 1)) {
1484 if ($old_rec[
"content"] !=
"<PageObject></PageObject>") {
1485 $this->db->manipulateF(
1486 "DELETE FROM page_history WHERE " .
1487 "page_id = %s AND parent_type = %s AND hdate = %s AND lang = %s",
1488 array(
"integer",
"text",
"timestamp",
"text"),
1489 array($old_rec[
"page_id"],
1490 $old_rec[
"parent_type"],
1491 $old_rec[
"last_change"],
1498 $last_c = $old_rec[
"last_change"];
1499 if ($last_c ==
"") {
1503 $this->db->insert(
"page_history", array(
1504 "page_id" => array(
"integer", $old_rec[
"page_id"]),
1505 "parent_type" => array(
"text", $old_rec[
"parent_type"]),
1506 "lang" => array(
"text", $old_rec[
"lang"]),
1507 "hdate" => array(
"timestamp", $last_c),
1508 "parent_id" => array(
"integer", $old_rec[
"parent_id"]),
1509 "content" => array(
"clob", $old_rec[
"content"]),
1510 "user_id" => array(
"integer", $old_rec[
"last_change_user"]),
1512 "nr" => array(
"integer", (
int) $last_nr[
"mnr"] + 1)
1515 $old_content = $old_rec[
"content"];
1517 $old_nr = $last_nr[
"mnr"] + 1;
1518 $old_domdoc->loadXML(
'<?xml version="1.0" encoding="UTF-8"?>' . $old_content);
1521 $this->log->debug(
"calling __afterHistoryEntry");
1526 $this->history_saved =
true;
1530 $em = (trim($content) ==
"<PageObject/>")
1535 $this->log->debug(
"checking deactivated elements");
1537 $this->log->debug(
"checking internal links");
1541 $this->lastchange = $now;
1542 $this->db->update(
"page_object", array(
1543 "content" => array(
"clob", $content),
1544 "parent_id" => array(
"integer", $this->
getParentId()),
1545 "last_change_user" => array(
"integer", $this->
user->getId()),
1546 "last_change" => array(
"timestamp", $now),
1547 "is_empty" => array(
"integer", $em),
1548 "active" => array(
"integer", $this->
getActive()),
1552 "inactive_elements" => array(
"integer", $iel),
1553 "int_links" => array(
"integer", $inl),
1555 "page_id" => array(
"integer", $this->
getId()),
1561 $this->log->debug(
"calling __afterUpdate()");
1565 "...ending, updated and returning true, content: " . substr(
1579 public function delete():
void 1582 $copg_logger->debug(
1583 "ilPageObject: Delete called for ID '" . $this->
getId() .
"'," .
1585 " hist nr: '" . $this->old_nr .
"', " .
1590 if (!$this->page_not_found) {
1601 foreach ($mobs2 as $m) {
1602 if (!in_array($m, $mobs)) {
1607 $copg_logger->debug(
"ilPageObject: ... found " . count($mobs) .
" media objects.");
1635 ?
" AND lang = " . $this->db->quote($this->
getLanguage(),
"text")
1637 $this->db->manipulate(
"DELETE FROM page_object " .
1638 "WHERE page_id = " . $this->db->quote($this->getId(),
"integer") .
1639 " AND parent_type= " . $this->db->quote($this->getParentType(),
"text") . $and);
1642 foreach ($mobs as $mob_id) {
1643 $copg_logger->debug(
"ilPageObject: ... processing mob " . $mob_id .
".");
1646 $copg_logger->debug(
"ilPageObject: ... type mismatch. Ignoring mob " . $mob_id .
".");
1651 $copg_logger->debug(
"ilPageObject: ... delete mob " . $mob_id .
".");
1656 $copg_logger->debug(
"ilPageObject: ... missing mob " . $mob_id .
".");
1665 return !in_array($this->
getLanguage(), [
"",
"-"]);
1674 $defs = $this->pc_definition->getPCDefinitions();
1675 foreach ($defs as $def) {
1676 $cl = $def[
"pc_class"];
1677 call_user_func($def[
"pc_class"] .
'::beforePageDelete', $this);
1692 string $a_old_content,
1699 $defs = $this->pc_definition->getPCDefinitions();
1700 foreach ($defs as $def) {
1701 $cl = $def[
"pc_class"];
1703 $def[
"pc_class"] .
'::afterPageHistoryEntry',
1719 $this->style_manager->saveStyleUsage(
1731 $this->style_manager->deleteStyleUsages($this, $a_old_nr);
1745 $files = ilObjFile::_getFilesOfObject(
1749 $objs = array_merge($mobs, $files);
1758 $this->
link->deleteInternalLinks($this);
1768 $this->
link->saveInternalLinks(
1777 public function create(
bool $a_import =
false): void
1790 bool $a_update =
true,
1791 string $a_pcid =
"",
1792 bool $move_operation =
false 1794 $pm = $this->page_manager->content($this->
getDomDoc());
1795 $pm->deleteContent($this, $a_hid, $a_pcid, $move_operation);
1811 bool $a_update =
true,
1812 bool $a_self_ass =
false,
1813 bool $move_operation =
false 1815 $pm = $this->page_manager->content($this->
getDomDoc());
1816 $pm->deleteContents($this, $a_hids, $a_self_ass, $move_operation);
1844 $cm = $this->page_manager->content($this->
getDomDoc());
1845 $cm->copyContents($a_hids, $this->
user);
1855 bool $a_self_ass =
false 1858 $cm = $this->page_manager->content($this->
getDomDoc());
1877 bool $a_update =
true,
1878 bool $a_self_ass =
false 1880 $cm = $this->page_manager->content($this->
getDomDoc());
1881 $cm->switchEnableMultiple($this, $a_hids, $a_self_ass);
1895 string $a_pcid =
"",
1896 bool $remove_placeholder =
true 1898 $cm = $this->page_manager->content($this->
getDomDoc());
1904 $remove_placeholder,
1918 $cm = $this->page_manager->content($this->
getDomDoc());
1919 $cm->insertContentNode(
1943 string $a_spcid =
"",
1944 string $a_tpcid =
"" 1946 $cm = $this->page_manager->content($this->
getDomDoc());
1947 $cm->moveContentAfter(
1965 bool $a_res_ref_to_obj_id =
true 1967 $cm = $this->page_manager->content($this->
getDomDoc());
1968 $cm->insertInstIntoIDs($a_inst, $a_res_ref_to_obj_id);
1976 return $this->content_id_manager->checkPCIds();
1984 return $this->content_id_manager->getAllPCIds();
1989 return $this->content_id_manager->hasDuplicatePCIds();
1998 return $this->content_id_manager->getDuplicatePCIds();
2003 return $this->content_id_manager->generatePCId();
2011 $this->content_id_manager->insertPCIds();
2018 $this->pc_service->paragraph()->send(
2040 string $a_parent_type,
2041 string $a_lang =
"-" 2045 $db = $DIC->database();
2047 if ($a_lang ==
"") {
2051 $query =
"SELECT * FROM page_object WHERE page_id = " .
2052 $db->
quote($a_id,
"integer") .
" AND " .
2053 " parent_type = " . $db->
quote($a_parent_type,
"text") .
" AND " .
2054 " lang = " . $db->
quote($a_lang,
"text") .
" AND " .
2055 " inactive_elements = " . $db->
quote(1,
"integer");
2056 $obj_set = $db->
query($query);
2070 if (strpos($a_content,
" Enabled=\"False\"")) {
2083 $h_query =
"SELECT * FROM page_history " .
2084 " WHERE page_id = " . $db->
quote($this->
getId(),
"integer") .
2087 " ORDER BY hdate DESC";
2089 $hset = $db->
query($h_query);
2090 $hentries = array();
2093 $hrec[
"sortkey"] = (
int) $hrec[
"nr"];
2094 $hrec[
"user"] = (
int) $hrec[
"user_id"];
2095 $hentries[] = $hrec;
2109 "SELECT * FROM page_history " .
2110 " WHERE page_id = %s " .
2111 " AND parent_type = %s " .
2114 array(
"integer",
"text",
"integer",
"text"),
2134 $and_nr = ($a_nr > 0)
2135 ?
" AND nr < " . $db->
quote($a_nr,
"integer")
2137 $res = $db->
query(
"SELECT MAX(nr) mnr FROM page_history " .
2138 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2139 " AND parent_type = " . $db->
quote($this->getParentType(),
"text") .
2140 " AND lang = " . $db->
quote($this->getLanguage(),
"text") .
2143 if ($row[
"mnr"] > 0) {
2144 $res = $db->
query(
"SELECT * FROM page_history " .
2145 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2146 " AND parent_type = " . $db->
quote($this->getParentType(),
"text") .
2147 " AND lang = " . $db->
quote($this->getLanguage(),
"text") .
2148 " AND nr = " . $db->
quote((
int) $row[
"mnr"],
"integer"));
2150 $ret[
"previous"] = $row;
2154 $res = $db->
query(
"SELECT MIN(nr) mnr FROM page_history " .
2155 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2156 " AND parent_type = " . $db->
quote($this->getParentType(),
"text") .
2157 " AND lang = " . $db->
quote($this->getLanguage(),
"text") .
2158 " AND nr > " . $db->
quote($a_nr,
"integer"));
2160 if ($row[
"mnr"] > 0) {
2161 $res = $db->
query(
"SELECT * FROM page_history " .
2162 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2163 " AND parent_type = " . $db->
quote($this->getParentType(),
"text") .
2164 " AND lang = " . $db->
quote($this->getLanguage(),
"text") .
2165 " AND nr = " . $db->
quote((
int) $row[
"mnr"],
"integer"));
2167 $ret[
"next"] = $row;
2172 $res = $db->
query(
"SELECT * FROM page_history " .
2173 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2174 " AND parent_type = " . $db->
quote($this->getParentType(),
"text") .
2175 " AND lang = " . $db->
quote($this->getLanguage(),
"text") .
2176 " AND nr = " . $db->
quote($a_nr,
"integer"));
2178 $res = $db->
query(
"SELECT page_id, last_change hdate, parent_type, parent_id, last_change_user user_id, content, lang FROM page_object " .
2179 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2180 " AND parent_type = " . $db->
quote($this->getParentType(),
"text") .
2181 " AND lang = " . $db->
quote($this->getLanguage(),
"text"));
2184 $ret[
"current"] = $row;
2201 " SET view_cnt = view_cnt + 1 " .
2202 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2203 " AND parent_type = " . $db->
quote($this->getParentType(),
"text") .
2204 " AND lang = " . $db->
quote($this->getLanguage(),
"text"));
2214 string $a_parent_type,
2221 $db = $DIC->database();
2224 if ($a_lang !=
"") {
2225 $and_lang =
" AND lang = " . $db->
quote($a_lang,
"text");
2228 $page_changes = array();
2229 $limit_ts = date(
'Y-m-d H:i:s', time() - ($a_period * 24 * 60 * 60));
2230 $q =
"SELECT * FROM page_object " .
2231 " WHERE parent_id = " . $db->
quote($a_parent_id,
"integer") .
2232 " AND parent_type = " . $db->
quote($a_parent_type,
"text") .
2233 " AND last_change >= " . $db->
quote($limit_ts,
"timestamp") . $and_lang;
2237 $page_changes[] = array(
2238 "date" => $page[
"last_change"],
2239 "id" => $page[
"page_id"],
2240 "lang" => $page[
"lang"],
2242 "user" => $page[
"last_change_user"]
2247 if ($a_period > 0) {
2248 $limit_ts = date(
'Y-m-d H:i:s', time() - ($a_period * 24 * 60 * 60));
2249 $and_str =
" AND hdate >= " . $db->
quote($limit_ts,
"timestamp") .
" ";
2252 $q =
"SELECT * FROM page_history " .
2253 " WHERE parent_id = " . $db->
quote($a_parent_id,
"integer") .
2254 " AND parent_type = " . $db->
quote($a_parent_type,
"text") .
2255 $and_str . $and_lang;
2258 $page_changes[] = array(
2259 "date" => $page[
"hdate"],
2260 "id" => $page[
"page_id"],
2261 "lang" => $page[
"lang"],
2263 "nr" => $page[
"nr"],
2264 "user" => $page[
"user_id"]
2270 return $page_changes;
2277 string $a_parent_type,
2279 string $a_lang =
"-" 2283 $db = $DIC->database();
2286 if ($a_lang !=
"") {
2287 $and_lang =
" AND lang = " . $db->
quote($a_lang,
"text");
2290 $q =
"SELECT * FROM page_object " .
2291 " WHERE parent_id = " . $db->
quote($a_parent_id,
"integer") .
2292 " AND parent_type = " . $db->
quote($a_parent_type,
"text") . $and_lang;
2296 $key_add = ($a_lang ==
"")
2297 ?
":" . $page[
"lang"]
2299 $pages[$page[
"page_id"] . $key_add] = array(
2300 "date" => $page[
"last_change"],
2301 "id" => $page[
"page_id"],
2302 "lang" => $page[
"lang"],
2303 "user" => $page[
"last_change_user"]
2314 string $a_parent_type,
2316 string $a_lang =
"-" 2320 $db = $DIC->database();
2323 if ($a_lang !=
"") {
2324 $and_lang =
" AND lang = " . $db->
quote($a_lang,
"text");
2329 $q =
"SELECT * FROM page_object " .
2330 " WHERE parent_id = " . $db->
quote($a_parent_id,
"integer") .
2331 " AND parent_type = " . $db->
quote($a_parent_type,
"text") . $and_lang .
2332 " ORDER BY created DESC";
2335 if ($page[
"created"] !=
"") {
2337 "created" => $page[
"created"],
2338 "id" => $page[
"page_id"],
2339 "lang" => $page[
"lang"],
2340 "user" => $page[
"create_user"],
2354 string $a_parent_type,
2356 string $a_lang =
"-" 2360 $db = $DIC->database();
2363 if ($a_lang !=
"") {
2364 $and_lang =
" AND lang = " . $db->
quote($a_lang,
"text");
2367 $contributors = array();
2369 "SELECT last_change_user, lang, page_id FROM page_object " .
2370 " WHERE parent_id = %s AND parent_type = %s " .
2371 " AND last_change_user != %s" . $and_lang,
2372 array(
"integer",
"text",
"integer"),
2373 array($a_parent_id, $a_parent_type, 0)
2377 if ($a_lang ==
"") {
2378 $contributors[$page[
"last_change_user"]][$page[
"page_id"]][$page[
"lang"]] = 1;
2380 $contributors[$page[
"last_change_user"]][$page[
"page_id"]] = 1;
2385 "SELECT count(*) as cnt, lang, page_id, user_id FROM page_history " .
2386 " WHERE parent_id = %s AND parent_type = %s AND user_id != %s " . $and_lang .
2387 " GROUP BY page_id, user_id, lang ",
2388 array(
"integer",
"text",
"integer"),
2389 array($a_parent_id, $a_parent_type, 0)
2392 if ($a_lang ==
"") {
2393 $contributors[$hpage[
"user_id"]][$hpage[
"page_id"]][$hpage[
"lang"]] =
2394 ($contributors[$hpage[
"user_id"]][$hpage[
"page_id"]][$hpage[
"lang"]] ?? 0) + $hpage[
"cnt"];
2396 $contributors[$hpage[
"user_id"]][$hpage[
"page_id"]] =
2397 ($contributors[$hpage[
"user_id"]][$hpage[
"page_id"]] ?? 0) + $hpage[
"cnt"];
2402 foreach ($contributors as $k => $co) {
2405 $c[] = array(
"user_id" => $k,
2407 "lastname" => $name[
"lastname"],
2408 "firstname" => $name[
"firstname"]
2420 string $a_parent_type,
2422 string $a_lang =
"-" 2426 $db = $DIC->database();
2429 if ($a_lang !=
"") {
2430 $and_lang =
" AND lang = " . $db->
quote($a_lang,
"text");
2433 $contributors = array();
2435 "SELECT last_change_user, lang FROM page_object " .
2436 " WHERE page_id = %s AND parent_type = %s " .
2437 " AND last_change_user != %s" . $and_lang,
2438 array(
"integer",
"text",
"integer"),
2439 array($a_page_id, $a_parent_type, 0)
2443 if ($a_lang ==
"") {
2444 $contributors[$page[
"last_change_user"]][$page[
"lang"]] = 1;
2446 $contributors[$page[
"last_change_user"]] = 1;
2451 "SELECT count(*) as cnt, lang, page_id, user_id FROM page_history " .
2452 " WHERE page_id = %s AND parent_type = %s AND user_id != %s " . $and_lang .
2453 " GROUP BY user_id, page_id, lang ",
2454 array(
"integer",
"text",
"integer"),
2455 array($a_page_id, $a_parent_type, 0)
2458 if ($a_lang ===
"") {
2459 $contributors[$hpage[
"user_id"]][$page[
"lang"]] =
2460 ($contributors[$hpage[
"user_id"]][$page[
"lang"]] ?? 0) + $hpage[
"cnt"];
2462 $contributors[$hpage[
"user_id"]] =
2463 ($contributors[$hpage[
"user_id"]] ?? 0) + $hpage[
"cnt"];
2468 foreach ($contributors as $k => $co) {
2470 $c[] = array(
"user_id" => $k,
2472 "lastname" => $name[
"lastname"],
2473 "firstname" => $name[
"firstname"]
2489 $db = $DIC->database();
2491 $db->
update(
"page_object", array(
2492 "rendered_content" => array(
"clob", $a_content),
2493 "render_md5" => array(
"text", $a_md5),
2494 "rendered_time" => array(
"timestamp",
ilUtil::now())
2496 "page_id" => array(
"integer", $this->
getId()),
2506 string $a_parent_type,
2508 string $a_lang =
"-" 2512 $db = $DIC->database();
2515 if ($a_lang !=
"") {
2516 $and_lang =
" AND lang = " . $db->
quote($a_lang,
"text");
2519 $q =
"SELECT * FROM page_object " .
2520 " WHERE parent_id = " . $db->
quote($a_parent_id,
"integer") .
2521 " AND parent_type = " . $db->
quote($a_parent_type,
"text") .
2522 " AND int_links = " . $db->
quote(1,
"integer") . $and_lang;
2526 $key_add = ($a_lang ==
"")
2527 ?
":" . $page[
"lang"]
2529 $pages[$page[
"page_id"] . $key_add] = array(
2530 "date" => $page[
"last_change"],
2531 "id" => $page[
"page_id"],
2532 "lang" => $page[
"lang"],
2533 "user" => $page[
"last_change_user"]
2545 if (strpos($a_content,
"IntLink")) {
2561 return $this->page_manager->content($this->
getDomDoc());
2573 $cm->setInitialOpenedContent($a_type, $a_id, $a_target);
2583 return $cm->getInitialOpenedContent();
2606 string $a_parent_type =
"",
2607 int $a_new_parent_id = 0,
2608 bool $a_clone_mobs =
false,
2609 int $obj_copy_id = 0,
2610 bool $overwrite_existing =
true 2612 if ($a_parent_type ==
"") {
2614 if ($a_new_parent_id == 0) {
2623 if (!$overwrite_existing) {
2630 $new_page_object->setParentId($a_new_parent_id);
2631 $new_page_object->setId($a_id);
2633 $new_page_object->setXMLContent($orig_page->copyXMLContent($a_clone_mobs, $a_new_parent_id, $obj_copy_id));
2634 $new_page_object->setActive($orig_page->getActive());
2635 $new_page_object->setActivationStart($orig_page->getActivationStart());
2636 $new_page_object->setActivationEnd($orig_page->getActivationEnd());
2639 $new_page_object->buildDom();
2640 $new_page_object->update();
2642 $new_page_object->create(
false);
2656 string $a_parent_type,
2661 $db = $DIC->database();
2664 "SELECT lang FROM page_object " .
2665 " WHERE page_id = " . $db->
quote($a_id,
"integer") .
2666 " AND parent_type = " . $db->
quote($a_parent_type,
"text")
2670 $langs[] = $rec[
"lang"];
2679 string $a_target_lang
2688 $transl_page->create(
false);
2693 $transl_page->setId($this->
getId());
2696 $transl_page->setActive($this->
getActive());
2719 "UPDATE page_object SET " .
2720 " edit_lock_user = " . $db->
quote($user->
getId(),
"integer") .
"," .
2721 " edit_lock_ts = " . $db->
quote($ts,
"integer") .
2722 " WHERE (edit_lock_user = " . $db->
quote($user->
getId(),
"integer") .
" OR " .
2723 " edit_lock_ts < " . $db->
quote(time() - ($min * 60),
"integer") .
") " .
2724 " AND page_id = " . $db->
quote($this->
getId(),
"integer") .
2729 "SELECT edit_lock_user FROM page_object " .
2730 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2731 " AND parent_type = " . $db->
quote($this->getParentType(),
"text")
2734 if ($rec[
"edit_lock_user"] != $user->
getId()) {
2751 $min = (
int) $aset->get(
"block_mode_minutes");
2756 "UPDATE page_object SET " .
2757 " edit_lock_user = " . $db->
quote($user->
getId(),
"integer") .
"," .
2758 " edit_lock_ts = 0" .
2759 " WHERE edit_lock_user = " . $db->
quote($user->
getId(),
"integer") .
2760 " AND page_id = " . $db->
quote($this->getId(),
"integer") .
2761 " AND parent_type = " . $db->
quote($this->getParentType(),
"text")
2765 "SELECT edit_lock_user FROM page_object " .
2766 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2767 " AND parent_type = " . $db->
quote($this->getParentType(),
"text")
2770 if ($rec[
"edit_lock_user"] != $user->
getId()) {
2786 $min = (
int) $aset->get(
"block_mode_minutes");
2789 "SELECT edit_lock_user, edit_lock_ts FROM page_object " .
2790 " WHERE page_id = " . $db->
quote($this->getId(),
"integer") .
2791 " AND parent_type = " . $db->
quote($this->getParentType(),
"text")
2794 $rec[
"edit_lock_until"] = $rec[
"edit_lock_ts"] + $min * 60;
2805 int $a_length = 100,
2806 string $a_ending =
'...',
2807 bool $a_exact =
false,
2808 bool $a_consider_html =
true 2811 if ($a_consider_html) {
2813 if (strlen(preg_replace(
'/<.*?>/',
'', $a_text)) <= $a_length) {
2818 $total_length = strlen($a_ending);
2819 $open_tags = array();
2821 preg_match_all(
'/(<.+?>)?([^<>]*)/s', $a_text, $lines, PREG_SET_ORDER);
2822 foreach ($lines as $line_matchings) {
2824 if (!empty($line_matchings[1])) {
2827 '/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is',
2832 elseif (preg_match(
'/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings[1], $tag_matchings)) {
2834 $pos = array_search($tag_matchings[1], $open_tags);
2835 if ($pos !==
false) {
2836 unset($open_tags[$pos]);
2839 elseif (preg_match(
'/^<\s*([^\s>!]+).*?>$/s', $line_matchings[1], $tag_matchings)) {
2841 array_unshift($open_tags, strtolower($tag_matchings[1]));
2844 $truncate .= $line_matchings[1];
2848 $content_length = strlen(preg_replace(
2849 '/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i',
2853 if ($total_length + $content_length > $a_length) {
2855 $left = $a_length - $total_length;
2856 $entities_length = 0;
2859 '/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i',
2865 foreach ($entities[0] as $entity) {
2866 if ($entity[1] + 1 - $entities_length <= $left) {
2868 $entities_length += strlen($entity[0]);
2882 $truncate .= $line_matchings[2];
2883 $total_length += $content_length;
2887 if ($total_length >= $a_length) {
2892 if (strlen($a_text) <= $a_length) {
2901 if (!count($open_tags)) {
2905 $spacepos = strrpos($truncate,
' ');
2906 if ($spacepos !==
false) {
2915 $truncate .= $a_ending;
2917 if ($a_consider_html) {
2919 foreach ($open_tags as $tag) {
2920 $truncate .=
'</' . $tag .
'>';
2940 string $a_parent_type,
2946 $db = $DIC->database();
2949 if ($a_lang !=
"") {
2950 $and_lang =
" AND lang = " . $db->
quote($a_lang,
"text");
2954 $q =
"SELECT last_change FROM page_object " .
2955 " WHERE parent_id = " . $db->
quote($a_parent_id,
"integer") .
2956 " AND parent_type = " . $db->
quote($a_parent_type,
"text") . $and_lang .
2957 " ORDER BY last_change DESC";
2962 return $rec[
"last_change"];
2967 if ($this->
getPageConfig()->getEditLockSupport() ==
false) {
2972 $min = (
int) $aset->get(
"block_mode_minutes");
3017 foreach ($this->pc_definition->getPCDefinitions() as $def) {
3018 $model_provider = $this->pc_definition->getPCModelProviderByName($def[
"name"]);
3019 if ($config->getEnablePCType($def[
"name"]) || $def[
"name"] ===
"PlaceHolder") {
3020 if (!is_null($model_provider)) {
3021 foreach ($model_provider->getModels(
3024 ) as $pc_id => $co_model) {
3025 $model[$pc_id] = $co_model;
3046 if (is_array($targets)) {
3047 foreach ($targets as $t) {
3048 $tarr = explode(
":", $t);
3050 if (is_object($cont_obj) && $cont_obj->getType() ==
"par") {
3051 $cont_obj->setCharacteristic($char_par);
3053 if (is_object($cont_obj) && $cont_obj->getType() ==
"sec") {
3054 $cont_obj->setCharacteristic($char_sec);
3056 if (is_object($cont_obj) && $cont_obj->getType() ==
"media") {
3057 $cont_obj->setClass($char_med);
assignCharacteristic(array $targets, string $char_par, string $char_sec, string $char_med)
Assign characteristic.
getLastUpdateOfIncludedElements()
Get last update of included elements (media objects and files).
setRenderedContent(string $a_renderedcontent)
performAutomaticModifications()
Perform automatic modifications (may be overwritten by sub classes)
getActive(bool $a_check_scheduled_activation=false)
static _lookupActive(int $a_id, string $a_parent_type, bool $a_check_scheduled_activation=false, string $a_lang="-")
lookup activation status
checkPCIds()
Check, whether (all) page content hashes are set.
static resolveResources(ilPageObject $page, array $ref_mappings)
cutContents(array $a_hids)
Copy contents to clipboard and cut them from the page.
getContentDomNode(string $a_hier_id, string $a_pc_id="")
increaseViewCnt()
Increase view cnt.
copyPageToTranslation(string $a_target_lang)
Copy page to translation.
getAllPCIds()
Get all pc ids.
getLangVarXML(string $var)
getPCModel()
Get page component model.
updateFromXML()
Updates page object with current xml content This function is currently (8 beta) called by: ...
getHistoryInfo(int $a_nr)
Get information about a history entry, its predecessor and its successor.
__beforeDelete()
Before deletion handler (internal).
releasePageLock()
Release page lock.
addFileSizes()
add file sizes
validateDom(bool $throw=false)
Validate the page content agains page DTD.
setContainsQuestion(bool $a_val)
resolveFileItems(array $a_mapping)
Resolve file items (after import)
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ilObjUser $user=null,)
setPageConfig(ilPageConfig $a_val)
setCopyProperties(ilPageObject $new_page)
ILIAS COPage ID ContentIdManager $content_id_manager
getDuplicatePCIds()
Get all duplicate PC Ids.
appendXMLContent(string $a_xml)
append xml content to page setXMLContent must be called before and the same encoding must be us...
buildDom(bool $a_force=false)
static getParentObjectContributors(string $a_parent_type, int $a_parent_id, string $a_lang="-")
Get all contributors for parent object.
create(bool $a_import=false)
create new page (with current xml data)
setTranslationProperties(self $transl_page)
getEffectiveEditLockTime()
manipulateF(string $query, array $types, array $values)
ILIAS COPage PC DomainService $pc_service
setImportMode(bool $a_val)
static deleteNewsOfContext(int $a_context_obj_id, string $a_context_obj_type, int $a_context_sub_obj_id=0, string $a_context_sub_obj_type="")
Delete all news of a context.
static getLogger(string $a_component_id)
Get component logger.
getHierIdForPcId(string $pcid)
static getPagesWithLinks(string $a_parent_type, int $a_parent_id, string $a_lang="-")
Get all pages for parent object that contain internal links.
static _isScheduledActivation(int $a_id, string $a_parent_type, string $a_lang="-")
Check whether page is activated by time schedule.
getDomNodeForPCId(string $pc_id)
ILIAS COPage ReadingTime ReadingTimeManager $reading_time_manager
fetchAssoc(ilDBStatement $statement)
static _before(ilDateTime $start, ilDateTime $end, string $a_compare_field='', string $a_tz='')
compare two dates and check start is before end This method does not consider tz offsets.
getMultimediaXML(bool $offline=false)
get a xml string that contains all media object elements, that are referenced by any media alias in t...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setContentIdManager(\ILIAS\COPage\ID\ContentIdManager $content_id_manager)
Interface Observer Contains several chained tasks and infos about them.
resolveIntLinks(array $a_link_map=null)
Resolves all internal link targets of the page, if targets are available (after import) ...
update(bool $a_validate=true, bool $a_no_history=false)
update complete page content in db (dom xml content is used)
update(string $table_name, array $values, array $where)
$where MUST contain existing columns only.
static array $activation_data
static _existsAndNotEmpty(string $a_parent_type, int $a_id, string $a_lang="-")
Checks whether page exists and is not empty (may return true on some empty pages) ...
static _writeParentId(string $a_parent_type, int $a_pg_id, int $a_par_id)
getPCIdForHierId(string $hier_id)
static _lookupName(int $a_user_id)
lookup user name
saveStyleUsage(DOMDocument $a_domdoc, int $a_old_nr=0)
Save all style class/template usages.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getContentObjectForPcId(string $pcid)
Get content object for pc id.
static getPageContributors(string $a_parent_type, int $a_page_id, string $a_lang="-")
Get all contributors for parent object.
static _lookupActivationData(int $a_id, string $a_parent_type, string $a_lang="-")
Lookup activation data.
getHistoryEntries()
Get History Entries.
quote($value, string $type)
getDomDoc()
Get dom doc (DOMDocument)
ilPageConfig $page_config
beforePageContentUpdate(ilPageContent $a_page_content)
Before page content update Note: This one is "work in progress", currently only text paragraphs call ...
preparePageForCompare(ilPageObject $page)
static lookupTranslations(string $a_parent_type, int $a_id)
Lookup translations.
resolveIIMMediaAliases(array $a_mapping)
Resolve iim media aliases (in ilContObjParse)
static now()
Return current timestamp in Y-m-d H:i:s format.
setLimit(int $limit, int $offset=0)
Content object of ilPageObject (see ILIAS DTD).
handleRepositoryLinksOnCopy(array $a_mapping, int $a_source_ref_id)
Handle repository links on copy process.
deleteContent(string $a_hid, bool $a_update=true, string $a_pcid="", bool $move_operation=false)
delete content object with hierarchical id $a_hid
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setXMLContent(string $a_xml, string $a_encoding="UTF-8")
set xml content of page, start with <PageObject...>, end with </PageObject>, comply with ILIAS DTD...
deleteStyleUsages(int $a_old_nr=0)
Delete style usages.
static _lookupContainsDeactivatedElements(int $a_id, string $a_parent_type, string $a_lang="-")
lookup whether page contains deactivated elements
static shortenText(string $a_string, int $a_start_pos, int $a_num_bytes, string $a_encoding='UTF-8')
Shorten text to the given number of bytes.
insertContentNode(DOMNode $a_cont_node, string $a_pos, int $a_mode=IL_INSERT_AFTER, string $a_pcid="")
insert a content node before/after a sibling or as first child of a parent
resolveResources(array $ref_mapping)
Resolve resources.
getHierIdsForPCIds(array $a_pc_ids)
Get hier ids for a set of pc ids.
ILIAS COPage Link LinkManager $link
saveInternalLinks(DOMDocument $a_domdoc)
save internal links of page
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data
static truncateHTML(string $a_text, int $a_length=100, string $a_ending='...', bool $a_exact=false, bool $a_consider_html=true)
Truncate (html) string.
const ILIAS_VERSION_NUMERIC
getInternalLinks()
get all internal links that are used within the page
getParentContentObjectForPcId(string $pcid)
Get parent content object for pc id.
static getNewPages(string $a_parent_type, int $a_parent_id, string $a_lang="-")
Get new pages.
static _existsAndNotEmpty(string $a_parent_type, int $a_id, string $a_lang="-")
checks whether page exists and is not empty (may return true on some empty pages) ...
copyXmlContent(bool $a_clone_mobs=false, int $a_new_parent_id=0, int $obj_copy_id=0, bool $self_ass=true)
Copy content of page; replace page components with copies where necessary (e.g.
containsIntLinks(string $a_content)
Check whether content contains internal links.
saveInitialOpenedContent(string $a_type, int $a_id, string $a_target)
Save initial opened content.
ILIAS COPage PC PCDefinition $pc_definition
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:
insertInstIntoIDs(string $a_inst, bool $a_res_ref_to_obj_id=true)
inserts installation id into ids (e.g.
setActivationStart(?string $a_activationstart)
static _after(ilDateTime $start, ilDateTime $end, string $a_compare_field='', string $a_tz='')
compare two dates and check start is after end This method does not consider tz offsets.
writeRenderedContent(string $a_content, string $a_md5)
Write rendered content.
deleteInternalLinks()
Delete internal links.
static getRecentChanges(string $a_parent_type, int $a_parent_id, int $a_period=30, string $a_lang="")
Get recent pages changes for parent object.
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists.
insertContent(ilPageContent $a_cont_obj, string $a_pos, int $a_mode=IL_INSERT_AFTER, string $a_pcid="", bool $remove_placeholder=true)
insert a content node before/after a sibling or as first child of a parent
resolveMediaAliases(array $a_mapping, bool $a_reuse_existing_by_import=false)
Resolve media aliases (after import)
getInitialOpenedContent()
Get initial opened content.
setActivationEnd(?string $a_activationend)
Set Activation End.
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD)
moveContentAfter(string $a_source, string $a_target, string $a_spcid="", string $a_tpcid="")
move content object from position $a_source before position $a_target (both hierarchical content ids)...
getHistoryEntry(int $a_old_nr)
Get History Entry.
deleteContents(array $a_hids, bool $a_update=true, bool $a_self_ass=false, bool $move_operation=false)
Delete multiple content objects.
containsIntLink()
returns true, if page was marked as containing an intern link (via setContainsIntLink) (this method s...
createFromXML()
Create new page object with current xml content.
ILIAS COPage Dom DomUtil $dom_util
query(string $query)
Run a (read-only) Query on the database.
setLanguage(string $a_val)
Set language.
ilObjectDefinition $obj_definition
switchEnableMultiple(array $a_hids, bool $a_update=true, bool $a_self_ass=false)
(De-)activate elements
static lookupParentId(int $a_id, string $a_type)
setConcreteLang(string $a_val)
getContentObject(string $a_hier_id, string $a_pc_id="")
Get a content object of the page.
static getLastChangeByParent(string $a_parent_type, int $a_parent_id, string $a_lang="")
Get all pages for parent object.
queryF(string $query, array $types, array $values)
getContentTemplates()
Get content templates.
insertPCIds()
Insert Page Content IDs.
static _writeActive(int $a_id, string $a_parent_type, bool $a_active)
write activation status
addHierIDs()
Add hierarchical ID (e.g.
afterUpdate(DOMDocument $domdoc, string $xml)
After update.
setContainsIntLink(bool $a_contains_link)
lm parser set this flag to true, if the page contains intern links (this method should only be called...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static preloadActivationDataByParentId(int $a_parent_id)
Preload activation data by Parent Id.
setLastChange(string $a_lastchange)
getEditLockInfo()
Get edit lock info.
moveIntLinks(array $a_from_to)
Move internal links from one destination to another.
sendParagraph(string $par_id, string $filename)
registerOfflineHandler(object $handler)
copyContents(array $a_hids)
Copy contents to clipboard.
LOMServices $lom_services
__afterUpdate(DOMDocument $a_domdoc, string $a_xml, bool $a_creation=false, bool $a_empty=false)
After update event handler (internal).
__afterHistoryEntry(DOMDocument $a_old_domdoc, string $a_old_content, int $a_old_nr)
addUpdateListener(object $a_object, string $a_method, $a_parameters="")
getLanguageVariablesXML(int $style_id=0)
Get language variables as XML.
static getConfigInstance(string $a_parent_type)
Get page config instance.
collectMediaObjects(bool $a_inline_only=true)
get all media objects, that are referenced and used within the page
getEditLock()
Get page lock.
link(string $caption, string $href, bool $new_viewport=false)
needsImportParsing(?bool $a_parse=null)
containsDeactivatedElements(string $a_content)
Check whether content contains deactivated elements.
__construct(int $a_id=0, int $a_old_nr=0, string $a_lang="-")
getXMLContent(bool $a_incl_head=false)
get xml content of page
language()
description: > Example for rendring a language glyph.
copy(int $a_id, string $a_parent_type="", int $a_new_parent_id=0, bool $a_clone_mobs=false, int $obj_copy_id=0, bool $overwrite_existing=true)
Copy page.
getParagraphForPCID(string $pcid)
getPCIdsForHierIds(array $hier_ids)
Get hier ids for a set of pc ids.
manipulate(string $query)
Run a (write) Query on the database.
static _lookupType(int $id, bool $reference=false)
handleDeleteContent(?DOMNode $a_node=null, $move_operation=false)
Handle content before deletion This currently treats only plugged content If no node is given...
getXMLFromDom(bool $a_incl_head=false, bool $a_append_mobs=false, bool $a_append_bib=false, string $a_append_str="", bool $a_omit_pageobject_tag=false, int $style_id=0, bool $offline=false)
get xml content of page from dom (use this, if any changes are made to the document) ...
getRepoObjId()
Get object id of repository object that contains this page, return 0 if page does not belong to a rep...
ILIAS COPage Style StyleManager $style_manager
getMediaAliasElement(int $a_mob_id, int $a_nr=1)
get complete media object (alias) element
setActive(bool $a_active)
static _getLastUpdateOfObjects(array $obj_ids)
static getInstance(string $a_parent_type, int $a_id=0, int $a_old_nr=0, string $a_lang="-")
Get page object instance.
setRenderMd5(string $a_rendermd5)
ILIAS COPage Page PageManager $page_manager
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
pasteContents(string $a_hier_id, bool $a_self_ass=false)
Paste contents from pc clipboard.
setShowActivationInfo(bool $a_val)
setRenderedTime(string $a_renderedtime)
static getAllPages(string $a_parent_type, int $a_parent_id, string $a_lang="-")
Get all pages for parent object.
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)
Class ilPCParagraphGUI User Interface for Paragraph Editing.
setLastChangeUser(int $a_val)
resolveQuestionReferences(array $a_mapping)
Resolve all quesiont references (after import)