30     protected \ILIAS\COPage\Xsl\XslManager 
$xsl;
    43         $this->
tabs = $DIC->tabs();
    44         $this->
ctrl = $DIC->ctrl();
    45         $this->
lng = $DIC->language();
    46         $this->tpl = $DIC[
"tpl"];
    47         $this->
user = $DIC->user();
    50         $this->tool_context = $DIC->globalScreen()->tool()->context();
    51         $this->xsl = $DIC->copage()->internal()->domain()->xsl();
    52         $this->pc_definition = $DIC
    58         $this->dom_util = $DIC->copage()->internal()->domain()->domUtil();
    64             "Cell3" => 
"Cell3", 
"Cell4" => 
"Cell4"));
    75         $next_class = $this->
ctrl->getNextClass($this);
    78         $cmd = $this->
ctrl->getCmd();
    80         switch ($next_class) {
    89         string $data_tab_txt_key = 
""    95         $ilTabs->setBackTarget(
   102         $ilTabs->setBackTarget(
   104             (string) $this->
ctrl->getParentReturn($this)
   107         if ($data_tab_txt_key == 
"") {
   108             $data_tab_txt_key = 
"cont_table_edit_cells";
   113             $ilCtrl->getLinkTarget($this, 
"editData"),
   119             "cont_table_properties",
   120             $ilCtrl->getLinkTarget($this, 
"editProperties"),
   126             "cont_table_cell_properties",
   127             $ilCtrl->getLinkTarget($this, 
"editCellStyle"),
   138         $ilTabs->addSubTabTarget(
   140             $ilCtrl->getLinkTarget($this, 
"editCellStyle"),
   145         $ilTabs->addSubTabTarget(
   147             $ilCtrl->getLinkTarget($this, 
"editCellWidth"),
   152         $ilTabs->addSubTabTarget(
   154             $ilCtrl->getLinkTarget($this, 
"editCellAlignment"),
   159         $ilTabs->addSubTabTarget(
   161             $ilCtrl->getLinkTarget($this, 
"editCellSpan"),
   169         return parent::getTemplateOptions(
"table");
   174         $this->
ctrl->redirect($this, 
"editData");
   186         $html = $this->
form->getHTML();
   187         $html .= 
"<br />" . $this->renderTable(
"");
   193         if ($a_mode === 
"create") {
   194             return $this->
lng->txt(
"cont_insert_table");
   196         return $this->
lng->txt(
"cont_table_properties");
   200         string $a_mode = 
"edit"   202         $a_seleted_value = 
"";
   208         $this->
form->setFormAction($ilCtrl->getFormAction($this));
   211         if ($a_mode == 
"create") {
   213             for ($i = 1; $i <= 20; $i++) {
   221             $this->
form->addItem($cols);
   227             $this->
form->addItem($rows);
   233         $width->setMaxLength(6);
   234         $this->
form->addItem($width);
   260             $this->
lng->txt(
"cont_characteristic_table"),
   265         $chars = array_merge($templates, $chars);
   266         if (is_object($this->content_obj)) {
   267             if (($chars[$a_seleted_value] ?? 
"") == 
"" && ($this->content_obj->getClass() != 
"")) {
   268                 $chars = array_merge(
   269                     array($this->content_obj->getClass() => $this->content_obj->getClass()),
   275         foreach ($chars as $k => $char) {
   276             if (strpos($k, 
":") > 0) {
   277                 $t = explode(
":", $k);
   278                 $html = $this->style->lookupTemplatePreview($t[1]) . 
'<div style="clear:both;" class="small">' . $char . 
"</div>";
   280                 $html = 
'<table class="ilc_table_' . $k . 
'"><tr><td class="small">' .
   281                     $char . 
'</td></tr></table>';
   284             $options[$k] = $char;
   286         $char_prop->setOptions($options);
   287         $char_prop->setValue(
"StandardTable");
   288         $this->
form->addItem($char_prop);
   291         for ($i = 0; $i <= 3; $i++) {
   299         $this->
form->addItem($rh);
   305         $this->
form->addItem($rf);
   311         $this->
form->addItem($ch);
   317         $this->
form->addItem($cf);
   319         if ($a_mode == 
"create") {
   322                 $this->
lng->txt(
"cont_first_row_style"),
   328             $options = array_merge(array(
"" => $this->
lng->txt(
"none")), $chars);
   329             $fr_style->setOptions($options);
   331             $fr_style->setValue(
"");
   332             $this->
form->addItem($fr_style);
   336         $align_opts = array(
"Left" => 
$lng->
txt(
"cont_left"),
   337             "Right" => 
$lng->
txt(
"cont_right"), 
"Center" => 
$lng->
txt(
"cont_center"),
   338             "LeftFloat" => 
$lng->
txt(
"cont_left_float"),
   339             "RightFloat" => 
$lng->
txt(
"cont_right_float"));
   342         $align->setValue(
"Center");
   343         $this->
form->addItem($align);
   347         $caption->setSize(60);
   348         $this->
form->addItem($caption);
   351         $ca_opts = array(
"top" => 
$lng->
txt(
"cont_top"),
   352             "bottom" => 
$lng->
txt(
"cont_bottom"));
   354             $this->
lng->txt(
"cont_align"),
   358         $caption->addSubItem($ca);
   361         if ($a_mode == 
"create") {
   365             $import->addOption($op);
   366             $op2 = 
new ilRadioOption($this->
lng->txt(
"cont_spreadsheet_table"), 
"spreadsheet");
   369             $import_data->setRows(8);
   370             $import_data->setCols(50);
   373             $import->addOption($op2);
   374             $import->setValue(
"html");
   375             $this->
form->addItem($import);
   382             $s_lang = $ilUser->getLanguage();
   385         foreach ($this->lom_services->dataHelper()->getAllLanguages() as $language) {
   386             $languages[$language->value()] = $language->presentableLabel();
   390         $language->setValue($s_lang);
   391         $this->
form->addItem($language);
   393         if ($a_mode == 
"create") {
   394             $this->
form->addCommandButton(
"create", 
$lng->
txt(
"save"));
   395             $this->
form->addCommandButton(
"cancelCreate", 
$lng->
txt(
"cancel"));
   397             $this->
form->addCommandButton(
"saveProperties", 
$lng->
txt(
"save"));
   398             $this->
form->addCommandButton(
"editData", 
$lng->
txt(
"close"));
   405         $values[
"width"] = $this->content_obj->getWidth();
   409         $values[
"row_header"] = $this->content_obj->getHeaderRows();
   410         $values[
"row_footer"] = $this->content_obj->getFooterRows();
   411         $values[
"col_header"] = $this->content_obj->getHeaderCols();
   412         $values[
"col_footer"] = $this->content_obj->getFooterCols();
   413         if ($this->content_obj->getTemplate() != 
"") {
   414             $values[
"characteristic"] = 
"t:" .
   416                 $this->content_obj->getTemplate();
   418             $values[
"characteristic"] = $this->content_obj->getClass();
   420         $values[
"align"] = $this->content_obj->getHorizontalAlign();
   421         $values[
"caption"] = $this->content_obj->getCaption();
   422         $values[
"cap_align"] = $this->content_obj->getCaptionAlign();
   423         $values[
"language"] = $this->content_obj->getLanguage();
   425         $this->
form->setValuesByArray($values);
   427         $ca = $this->
form->getItemByPostVar(
"cap_align");
   428         $ca->setValue($this->content_obj->getCaptionAlign());
   431     public function renderTable(
   432         string $a_mode = 
"table_edit",
   433         string $a_submode = 
""   436         $tab_node = $this->content_obj->getDomNode();
   437         $tab_node->setAttribute(
"Enabled", 
"True");
   438         $content = $this->dom_util->dump($tab_node);
   440         $trans = $this->pg_obj->getLanguageVariablesXML();
   441         $mobs = $this->pg_obj->getMultimediaXML();
   449         $content = $content . $mobs . $trans . $template_xml;
   458             !$this->pg_obj->getPageConfig()->getPreventHTMLUnmasking(),
   465         string $a_mode = 
"table_edit",
   466         string $a_submode = 
"",
   473         $ilUser = $DIC->user();
   474         $xsl = $DIC->copage()->internal()->domain()->xsl();
   475         $pc_definition = $DIC->copage()->internal()->domain()->pc()->definition();
   477         $content = 
"<dummy>" . $content . 
"</dummy>";
   481         $params = array(
'mode' => $a_mode,
   482             'webspace_path' => $wb_path, 
'enlarge_path' => $enlarge_path);
   483         $output = $xsl->process($content, 
$params);
   487             $output = str_replace(
"<", 
"<", $output);
   488             $output = str_replace(
">", 
">", $output);
   489             $output = str_replace(
"&", 
"&", $output);
   492         if ($a_mode == 
"table_edit" && !is_null($a_table_obj)) {
   493             switch ($a_submode) {
   513         if (isset($page_object)) {
   514             $defs = $pc_definition->getPCDefinitions();
   515             foreach ($defs as $def) {
   516                 $pc_class = $def[
"pc_class"];
   517                 $pc_obj = 
new $pc_class($page_object);
   520                 $output = $pc_obj->modifyPageContentPostXsl($output, 
"presentation", 
false);
   536         $lng = $DIC->language();
   540         foreach ($classes as $k => $v) {
   544             if (substr($v, 0, 4) == 
"ilc_") {
   548                 '<input type="checkbox" value="1"' .
   549                 ' name="target[' . $k . 
']">' . 
'</input> ' . $v;
   551             $a_output = str_replace(
"{{{{{TableEdit;" . $k . 
"}}}}}", 
$check, $a_output);
   565         $lng = $DIC->language();
   569         foreach ($classes as $k => $v) {
   574                 '<input type="checkbox" value="1"' .
   575                 ' name="target[' . $k . 
']">' . 
'</input> ' . $v;
   577             $a_output = str_replace(
"{{{{{TableEdit;" . $k . 
"}}}}}", 
$check, $a_output);
   591         $lng = $DIC->language();
   595         foreach ($widths as $k => $v) {
   597                 '<input class="small" type="text" size="5" maxlength="10"' .
   598                 ' name="width[' . $k . 
']" value="' . $v . 
'">' . 
'</input>';
   600             $a_output = str_replace(
"{{{{{TableEdit;" . $k . 
"}}}}}", 
$check, $a_output);
   614         $lng = $DIC->language();
   618         foreach ($spans as $k => $v) {
   620             $selects = 
'<div style="white-space:nowrap;">' . 
$lng->
txt(
"cont_colspan") . 
": " .
   621                 '<select class="small" name="colspan[' . $k . 
']">';
   622             for ($i = 1; $i <= $v[
"max_x"] - $v[
"x"] + 1; $i++) {
   623                 $sel_str = ($i == $v[
"colspan"])
   624                     ? 
'selected="selected"'   626                 $selects .= 
'<option value="' . $i . 
'" ' . $sel_str . 
'>' . $i . 
'</option>';
   628             $selects .= 
"</select></div>";
   631             $selects .= 
'<div style="margin-top:3px; white-space:nowrap;">' . 
$lng->
txt(
"cont_rowspan") . 
": " .
   632                 '<select class="small" name="rowspan[' . $k . 
']">';
   633             for ($i = 1; $i <= $v[
"max_y"] - $v[
"y"] + 1; $i++) {
   634                 $sel_str = ($i == $v[
"rowspan"])
   635                     ? 
'selected="selected"'   637                 $selects .= 
'<option value="' . $i . 
'" ' . $sel_str . 
'>' . $i . 
'</option>';
   639             $selects .= 
"</select></div>";
   641             $a_output = str_replace(
"{{{{{TableEdit;" . $k . 
"}}}}}", $selects, $a_output);
   656         $ilTabs->setSubTabActive(
"cont_style");
   661         $form->
setTitle($this->
lng->txt(
"cont_table_cell_properties"));
   665             $this->
lng->txt(
"cont_style"),
   671         $options = array_merge(array(
"" => $this->
lng->txt(
"none")), 
$chars);   
   672         $style->setOptions($options);
   682         $html .= 
"<br />" . $this->renderTable(
"table_edit", 
"style") . 
"</form>";
   696         $ilTabs->setSubTabActive(
"cont_width");
   697         $ilTabs->setTabActive(
"cont_table_cell_properties");
   699         $ctpl = 
new ilTemplate(
"tpl.table_cell_properties.html", 
true, 
true, 
"components/ILIAS/COPage");
   700         $ctpl->setVariable(
"BTN_NAME", 
"setWidths");
   701         $ctpl->setVariable(
"BTN_TEXT", 
$lng->
txt(
"cont_save_widths"));
   702         $ctpl->setVariable(
"FORMACTION", $ilCtrl->getFormAction($this));
   704         $html = $ctpl->get();
   705         $html .= 
"<br />" . $this->renderTable(
"table_edit", 
"width") . 
"</form>";
   719         $ilTabs->setSubTabActive(
"cont_span");
   720         $ilTabs->setTabActive(
"cont_table_cell_properties");
   722         $ctpl = 
new ilTemplate(
"tpl.table_cell_properties.html", 
true, 
true, 
"components/ILIAS/COPage");
   723         $ctpl->setVariable(
"BTN_NAME", 
"setSpans");
   724         $ctpl->setVariable(
"BTN_TEXT", 
$lng->
txt(
"cont_save_spans"));
   725         $ctpl->setVariable(
"FORMACTION", $ilCtrl->getFormAction($this));
   727         $html = $ctpl->get();
   728         $html .= 
"<br />" . $this->renderTable(
"table_edit", 
"span") . 
"</form>";
   739         $target = $this->request->getStringArray(
"target");
   740         if (count($target)) {
   741             foreach ($target as $k => $value) {
   743                     $cid = explode(
":", $k);
   744                     $this->content_obj->setTDClass(
   746                         $this->request->getString(
"style"),
   752         $this->updated = $this->pg_obj->update();
   753         $this->tpl->setOnScreenMessage(
'success', 
$lng->
txt(
"msg_obj_modified"), 
true);
   754         $this->
ctrl->redirect($this, 
"editCellStyle");
   764         $widths = $this->request->getStringArray(
"width");
   765         if (count($widths) > 0) {
   766             foreach ($widths as $k => $width) {
   767                 $cid = explode(
":", $k);
   768                 $this->content_obj->setTDWidth(
   775         $this->updated = $this->pg_obj->update();
   776         $this->tpl->setOnScreenMessage(
'success', 
$lng->
txt(
"msg_obj_modified"), 
true);
   777         $this->
ctrl->redirect($this, 
"editCellWidth");
   787         $colspans = $this->request->getStringArray(
"colspan");
   788         $rowspans = $this->request->getStringArray(
"rowspan");
   791         if (count($colspans) > 0) {
   792             foreach ($colspans as $k => $span) {
   794                 $rs[$k] = $rowspans[$k];
   796             $this->content_obj->setTDSpans($cs, $rs);
   798         $this->updated = $this->pg_obj->update();
   799         $this->tpl->setOnScreenMessage(
'success', 
$lng->
txt(
"msg_obj_modified"), 
true);
   800         $this->
ctrl->redirect($this, 
"editCellSpan");
   809         $this->
form->checkInput();
   812         $caption = $this->
form->getInput(
"caption");
   813         $caption = str_replace(
"&", 
"&", $caption);
   814         $caption = str_replace(
"<", 
"<", $caption);
   815         $caption = str_replace(
">", 
">", $caption);
   817         $this->content_obj->setLanguage($this->
form->getInput(
"language"));
   818         $this->content_obj->setWidth($this->
form->getInput(
"width"));
   822         $this->content_obj->setHorizontalAlign($this->
form->getInput(
"align"));
   823         $this->content_obj->setHeaderRows($this->
form->getInput(
"row_header"));
   824         $this->content_obj->setHeaderCols($this->
form->getInput(
"col_header"));
   825         $this->content_obj->setFooterRows($this->
form->getInput(
"row_footer"));
   826         $this->content_obj->setFooterCols($this->
form->getInput(
"col_footer"));
   827         if (strpos($this->
form->getInput(
"characteristic"), 
":") > 0) {
   828             $t = explode(
":", $this->
form->getInput(
"characteristic"));
   829             $this->content_obj->setTemplate($t[2]);
   830             $this->content_obj->setClass(
"");
   832             $this->content_obj->setClass($this->
form->getInput(
"characteristic"));
   833             $this->content_obj->setTemplate(
"");
   835         $this->content_obj->setCaption(
   837             $this->
form->getInput(
"cap_align")
   847         $this->updated = $this->pg_obj->update();
   848         if ($this->updated === 
true) {
   849             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"msg_obj_modified"), 
true);
   850             $this->
ctrl->redirect($this, 
"editProperties");
   852             $this->pg_obj->addHierIDs();
   859         $this->content_obj->setHorizontalAlign(
"Right");
   865         $this->content_obj->setHorizontalAlign(
"Left");
   871         $this->content_obj->setHorizontalAlign(
"Center");
   877         $this->content_obj->setHorizontalAlign(
"LeftFloat");
   883         $this->content_obj->setHorizontalAlign(
"RightFloat");
   893         $html = $this->
form->getHTML();
   908         $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
   911         $this->
form->checkInput();
   913         $import_table = trim($this->
form->getInput(
"import_table"));
   916         if (!empty($import_table)) {
   917             switch ($this->
form->getInput(
"import_type")) {
   922                     $this->content_obj->importSpreadsheet($this->
form->getInput(
"language"), $import_table);
   926             $this->content_obj->addRows(
   927                 $this->
form->getInput(
"nr_rows"),
   928                 $this->
form->getInput(
"nr_cols")
   934         $frtype = $this->
form->getInput(
"first_row_style");
   936             $this->content_obj->setFirstRowStyle($frtype);
   939         $this->updated = $this->pg_obj->update();
   941         if ($this->updated === 
true) {
   950         $this->
ctrl->returnToParent($this, 
"jump" . $this->hier_id);
   968         $ilTabs->setSubTabActive(
"cont_alignment");
   969         $ilTabs->setTabActive(
"cont_table_cell_properties");
   974         $form->
setTitle($this->
lng->txt(
"cont_table_cell_properties"));
   979             "Left" => 
$lng->
txt(
"cont_left"),
   980             "Center" => 
$lng->
txt(
"cont_center"),
   981             "Right" => 
$lng->
txt(
"cont_right")
   993         $html .= 
"<br />" . $this->renderTable(
"table_edit", 
"alignment") . 
"</form>";
  1004         $targets = $this->request->getStringArray(
"target");
  1005         if (count($targets) > 0) {
  1006             foreach ($targets as $k => $value) {
  1008                     $cid = explode(
":", $k);
  1009                     $this->content_obj->setTDAlignment(
  1011                         $this->request->getString(
"alignment"),
  1017         $this->updated = $this->pg_obj->update();
  1018         $this->tpl->setOnScreenMessage(
'success', 
$lng->
txt(
"msg_obj_modified"), 
true);
  1020         $this->
ctrl->redirect($this, 
"editCellAlignment");
  1033         $this->tpl->addJavaScript(
"assets/js/AdvancedSelectionList.js");
  1035         $this->tpl->setContent($this->getEditDataTable(
true));
  1038     public function getEditDataTable(
bool $initial = 
false): 
string  1045         $dtpl = 
new ilTemplate(
"tpl.tabledata2.html", 
true, 
true, 
"components/ILIAS/COPage");
  1046         $dtpl->setVariable(
"FORMACTION", $this->
ctrl->getFormAction($this, 
"tableAction"));
  1047         $dtpl->setVariable(
"HIERID", $this->hier_id);
  1048         $dtpl->setVariable(
"PCID", $this->pc_id);
  1049         $class = $pc_tab->getClass();
  1050         if ($class === 
"") {
  1051             $class = 
"StandardTable";
  1053         $template_classes = [];
  1054         if ($this->
getStyleId() > 0 && $pc_tab->getTemplate() != 
"") {
  1057             $template_classes = $style->getTemplateClasses(
$id);
  1058             if ($template_classes[
"table"] !== 
"") {
  1059                 $class = $template_classes[
"table"];
  1062         $dtpl->setVariable(
"TABLE_CLASS", 
"ilc_table" . $class);
  1066             $ilCtrl->getFormAction($this, 
"updateJS")
  1072         $nodes = $this->dom_util->path($this->dom, 
$path);
  1074         $total_rows = count($nodes);
  1075         foreach ($nodes as $node) {
  1076             $path2 = 
"//PageContent[@HierId='" . $this->
getHierId() . 
"']" .
  1077                 "/Table/TableRow[$i+1]/TableData";
  1078             $nodes2 = $this->dom_util->path($this->dom, $path2);
  1081                 $total_cols = count($nodes2);
  1083                 foreach ($nodes2 as $node2) {
  1085                         $dtpl->touchBlock(
"empty_td");
  1088                     $move_forward = 
false;
  1089                     $move_backward = 
false;
  1091                         if (count($nodes2) == 1) {
  1094                             $move_forward = 
true;
  1096                     } elseif ($j == (count($nodes2) - 1)) {
  1097                         $move_backward = 
true;
  1099                         $move_forward = 
true;
  1100                         $move_backward = 
true;
  1102                     $dtpl->setCurrentBlock(
"col_icon");
  1103                     $dtpl->setVariable(
"NR_COLUMN", $j + 1);
  1104                     $dtpl->setVariable(
"PCID_COLUMN", $node2->getAttribute(
"PCID"));
  1106                     $dtpl->parseCurrentBlock();
  1109                 $dtpl->setCurrentBlock(
"row");
  1110                 $dtpl->parseCurrentBlock();
  1114             foreach ($nodes2 as $node2) {
  1118                         if (count($nodes) == 1) {
  1119                             $move_type = 
"none";
  1121                             $move_type = 
"forward";
  1123                     } elseif ($i == (count($nodes) - 1)) {
  1124                         $move_type = 
"backward";
  1126                         $move_type = 
"both";
  1128                     $dtpl->setCurrentBlock(
"row_icon");
  1129                     $dtpl->setVariable(
"NR_ROW", $i + 1);
  1130                     $dtpl->setVariable(
"PCID_ROW", $node2->getAttribute(
"PCID"));
  1131                     $dtpl->setVariable(
"ROW_CAPTION", $i + 1);
  1132                     $dtpl->parseCurrentBlock();
  1136                 if ($node2->getAttribute(
"Hidden") != 
"Y") {
  1138                     $dtpl->touchBlock(
"cell_type");
  1143                     $dtpl->setCurrentBlock(
"cell");
  1145                     $dtpl->setVariable(
"PAR_TA_NAME", 
"cell[" . $i . 
"][" . $j . 
"]");
  1146                     $dtpl->setVariable(
"PAR_TA_ID", 
"cell_" . $i . 
"_" . $j);
  1147                     $dtpl->setVariable(
"PAR_ROW", (
string) $i);
  1148                     $dtpl->setVariable(
"PAR_COLUMN", (
string) $j);
  1156                     $dtpl->setVariable(
"CELL_TAG", 
"td");
  1159                     $node_class = $node2->getAttribute(
"Class");
  1160                     $class = $this->getCellClass(
  1168                     if ($class !== 
"") {
  1169                         $dtpl->setVariable(
"CELL_CLASS", 
"ilc_table_cell_" . $class);
  1177                     $cs = $node2->getAttribute(
"ColSpan");
  1178                     $width = (
int) $node2->getAttribute(
"Width");
  1179                     $rs = $node2->getAttribute(
"RowSpan");
  1181                         $dtpl->setVariable(
"WIDTH", $width);
  1183                     $align = (string) $node2->getAttribute(
"HorizontalAlign");
  1184                     if ($align !== 
"") {
  1185                         $dtpl->setVariable(
"ALIGN", $align);
  1187                     $dtpl->setVariable(
"HEIGHT", 
"80");
  1189                         $dtpl->setVariable(
"COLSPAN", 
'colspan="' . $cs . 
'"');
  1193                         $dtpl->setVariable(
"ROWSPAN", 
'rowspan="' . $rs . 
'"');
  1196                     $dtpl->parseCurrentBlock();
  1200             $dtpl->setCurrentBlock(
"row");
  1201             $dtpl->parseCurrentBlock();
  1204         $dtpl->setVariable(
"TXT_ACTION", $this->
lng->txt(
"cont_table"));
  1207         $dtpl->setCurrentBlock(
"int_link_prep");
  1211                 $ilCtrl->getLinkTargetByClass(
  1212                     array(
"ilpageeditorgui", 
"ilinternallinkgui"),
  1220         $dtpl->parseCurrentBlock();
  1222         $html = $dtpl->get();
  1230     protected function getCellClass(
  1234         array $template_classes,
  1244         if (($template_classes[
"even_row"] ?? 
"") !== 
"") {
  1246                 $class = $template_classes[
"even_row"];
  1250         if (($template_classes[
"odd_row"] ?? 
"") !== 
"") {
  1252                 $class = $template_classes[
"odd_row"];
  1256         if (($template_classes[
"even_col"] ?? 
"") !== 
"") {
  1258                 $class = $template_classes[
"even_col"];
  1262         if (($template_classes[
"odd_col"] ?? 
"") !== 
"") {
  1264                 $class = $template_classes[
"odd_col"];
  1268         if (($template_classes[
"row_foot"] ?? 
"") !== 
"") {
  1269             if ($i + $pc_tab->getFooterRows() >= $total_rows) {
  1270                 $class = $template_classes[
"row_foot"];
  1274         if (($template_classes[
"col_foot"] ?? 
"") !== 
"") {
  1275             if ($j + $pc_tab->getFooterCols() >= $total_cols) {
  1276                 $class = $template_classes[
"col_foot"];
  1280         if (($template_classes[
"row_head"] ?? 
"") !== 
"") {
  1281             if ($i < $pc_tab->getHeaderRows()) {
  1282                 $class = $template_classes[
"row_head"];
  1286         if (($template_classes[
"col_head"] ?? 
"") !== 
"") {
  1287             if ($j < $pc_tab->getHeaderCols()) {
  1288                 $class = $template_classes[
"col_head"];
  1292         if ($class === 
"") {
  1293             if ($i < $pc_tab->getHeaderRows()) {
  1294                 $class = 
"StandardHeader";
  1298         if ($class === 
"") {
  1299             $class = 
"StandardCell1";
  1303         if ($node_class !== 
"") {
  1304             $class = $node_class;
  1314             $chr = ($nr - 1) % $base;
  1315             $cap = chr($chr + 65) . $cap;
  1316             $nr = ($nr - 1 - $chr) / $base;
  1323         $tab_node = $this->content_obj->getDomNode();
  1328         foreach ($tab_node->firstChild->childNodes as $child) {
  1331                 foreach ($child->childNodes as $child2) {
  1333                         foreach ($child2->childNodes as $cell_content_node) {
  1334                             $content .= $this->dom_util->dump($cell_content_node);
  1342         $trans = $this->pg_obj->getLanguageVariablesXML();
  1343         $mobs = $this->pg_obj->getMultimediaXML();
  1351         $content = $content . $mobs . $trans . $template_xml;
  1355             !$this->pg_obj->getPageConfig()->getPreventHTMLUnmasking(),
  1370         $ilUser = $DIC->user();
  1371         $content = 
"<dummy>" . $content . 
"</dummy>";
  1375         $params = array(
'webspace_path' => $wb_path, 
'enlarge_path' => $enlarge_path);
  1376         $output = $this->xsl->process($content, 
$params);
  1380             $output = str_replace(
"<", 
"<", $output);
  1381             $output = str_replace(
">", 
">", $output);
  1382             $output = str_replace(
"&", 
"&", $output);
  1386         if (isset($page_object)) {
  1387             $defs = $this->pc_definition->getPCDefinitions();
  1388             foreach ($defs as $def) {
  1389                 $pc_class = $def[
"pc_class"];
  1390                 $pc_obj = 
new $pc_class($page_object);
  1393                 $output = $pc_obj->modifyPageContentPostXsl((
string) $output, 
"presentation", 
false);
 static getWebspaceDir(string $mode="filesystem")
get webspace directory 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
editData()
Edit data of table. 
 
ilPageContent $content_obj
 
renderCell( $content, $unmask=true, $page_object=null)
Static render table function. 
 
static getInitHTML(string $a_url)
Get initialisation HTML to use internal link editing. 
 
getCharacteristicsOfCurrentStyle(array $a_type)
Get characteristics of current style and call setCharacteristics, if style is given. 
 
static _renderTable(string $content, string $a_mode="table_edit", string $a_submode="", ilPCTable $a_table_obj=null, bool $unmask=true, ilPageObject $page_object=null)
 
setAlignment()
Set cell alignments. 
 
initPropertiesForm(string $a_mode="edit")
 
__construct(ilPageObject $a_pg_obj, ?ilPageContent $a_content_obj, string $a_hier_id, string $a_pc_id="")
 
static _lookupTemplateIdByName(int $a_style_id, string $a_name)
Lookup table template preview. 
 
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...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
 
setCellPropertiesSubTabs()
 
ILIAS COPage PC PCDefinition $pc_definition
 
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
 
setStyles()
Set cell styles. 
 
static _addStyleCheckboxes(string $a_output, ilPCTable $a_table)
Add style checkboxes in edit mode. 
 
setCharacteristics(array $a_chars)
 
create()
create new table in dom and update page in db 
 
Content object of ilPageObject (see ILIAS DTD). 
 
static _addSpanInputs(string $a_output, ilPCTable $a_table)
Add span inputs. 
 
User Interface for Editing of Page Content Objects (Paragraphs, Tables, ...) 
 
setContent(string $a_html)
Sets content for standard template. 
 
setBasicTableCellStyles()
 
getTemplateXML()
Get table template xml. 
 
static _addAlignmentCheckboxes(string $a_output, ilPCTable $a_table)
Add alignment checkboxes in edit mode. 
 
Class ilPageObject Handles PageObjects of ILIAS Learning Modules (see ILIAS DTD) 
 
getFormTitle(string $a_mode="edit")
 
static getBaseContentStylePath()
 
ilGlobalTemplateInterface $tpl
 
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory) 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
ILIAS COPage Dom DomUtil $dom_util
 
getColumnCaption(int $nr)
 
getEditorScriptTag(string $form_pc_id="", string $form_cname="")
 
getAllCellWidths()
Get all cell widths. 
 
saveProperties()
save table properties in db and return to page edit screen 
 
form( $class_path, string $cmd, string $submit_caption="")
 
getAllCellSpans()
Get all cell spans. 
 
setTabs(string $data_tab_txt_key="")
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
__construct(Container $dic, ilPlugin $plugin)
 
getTemplateOptions(string $a_type="")
 
This class represents a text area property in a property form. 
 
ILIAS COPage Xsl XslManager $xsl
 
setProperties()
Set properties from input form. 
 
static _addWidthInputs(string $a_output, ilPCTable $a_table)
Add width inputs. 
 
static _lookupType(int $id, bool $reference=false)
 
getAllCellClasses()
Get all cell classes. 
 
setWidths()
Set cell widths. 
 
getPropertiesFormValues()
 
setSpans()
Set cell spans. 
 
getCellContent(int $i, int $j)