ILIAS  release_8 Revision v8.24
class.ilPCDataTable.php
Go to the documentation of this file.
1<?php
2
28{
29 public function init(): void
30 {
31 $this->setType("dtab");
32 }
33
34 public function setNode(php4DOMElement $a_node): void
35 {
36 parent::setNode($a_node); // this is the PageContent node
37 $this->tab_node = $a_node->first_child(); // this is the Table node
38 }
39
40 public function create(
41 ilPageObject $a_pg_obj,
42 string $a_hier_id,
43 string $a_pc_id = ""
44 ): void {
45 $this->node = $this->createPageContentNode();
46 $a_pg_obj->insertContent($this, $a_hier_id, IL_INSERT_AFTER, $a_pc_id);
47 $this->tab_node = $this->dom->create_element("Table");
48 $this->tab_node = $this->node->append_child($this->tab_node);
49 $this->tab_node->set_attribute("Language", "");
50 $this->tab_node->set_attribute("DataTable", "y");
51 }
52
53
57 public function makeEmptyCell(php4DOMElement $td_node): void
58 {
59 // delete children of paragraph node
60 $children = $td_node->child_nodes();
61 for ($i = 0; $i < count($children); $i++) {
62 $td_node->remove_child($children[$i]);
63 }
64
65 // create page content and paragraph node here.
66 $pc_node = $this->createPageContentNode(false);
67 $pc_node = $td_node->append_child($pc_node);
68 $par_node = $this->dom->create_element("Paragraph");
69 $par_node = $pc_node->append_child($par_node);
70 $par_node->set_attribute("Characteristic", "TableContent");
71 $par_node->set_attribute(
72 "Language",
73 $this->getLanguage()
74 );
75 }
76
77
82 public function setData(array $a_data)
83 {
84 if (is_array($a_data)) {
85 foreach ($a_data as $i => $row) {
86 if (is_array($row)) {
87 foreach ($row as $j => $cell) {
88 $temp_dom = domxml_open_mem(
89 '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $cell . '</Paragraph>',
91 $error
92 );
93
94 $par_node = $this->getCellNode($i, $j, true);
95 // remove all childs
96 if (empty($error) && is_object($par_node)) {
97 // delete children of paragraph node
98 $children = $par_node->child_nodes();
99 for ($k = 0; $k < count($children); $k++) {
100 $par_node->remove_child($children[$k]);
101 }
102
103 // copy new content children in paragraph node
104 $xpc = xpath_new_context($temp_dom);
105 $path = "//Paragraph";
106 $res = xpath_eval($xpc, $path);
107
108 if (count($res->nodeset) == 1) {
109 $new_par_node = $res->nodeset[0];
110 $new_childs = $new_par_node->child_nodes();
111 for ($l = 0; $l < count($new_childs); $l++) {
112 $cloned_child = $new_childs[$l]->clone_node(true);
113 $par_node->append_child($cloned_child);
114 }
115 }
116 } else {
117 if (!empty($error)) {
118 return $error;
119 }
120 }
121 }
122 }
123 }
124 }
125 return true;
126 }
127}
const IL_INSERT_AFTER
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
makeEmptyCell(php4DOMElement $td_node)
Make cell empty.
setNode(php4DOMElement $a_node)
Set xml node of page content.
init()
Init object.
create(ilPageObject $a_pg_obj, string $a_hier_id, string $a_pc_id="")
setData(array $a_data)
Set data of cells.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
createPageContentNode(bool $a_set_this_node=true)
Create page content node (always use this method first when adding a new element)
setType(string $a_type)
Set Type.
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD)
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
remove_child($oldchild)
append_child($newnode)
domxml_open_mem($str, $mode=0, &$error=null)
xpath_new_context($dom_document)
const DOMXML_LOAD_PARSING
xpath_eval(php4DOMXPath $xpath_context, string $eval_str, $contextnode=null)
$path
Definition: ltiservices.php:32
$res
Definition: ltiservices.php:69
$i
Definition: metadata.php:41