ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilPageLayoutAdministrationGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2014 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
14 {
18  protected $ctrl;
19 
23  protected $rbacsystem;
24 
28  protected $toolbar;
29 
33  protected $lng;
34 
38  protected $tpl;
39 
43  protected $DIC;
44 
48  protected $ref_id;
49 
53  public function __construct()
54  {
55  global $DIC;
56 
57  $this->dic = $DIC;
58  $this->ctrl = $DIC->ctrl();
59  $this->rbacsystem = $DIC->rbac()->system();
60  $this->toolbar = $DIC->toolbar();
61  $this->lng = $DIC->language();
62  $this->tpl = $DIC["tpl"];
63  $this->ref_id = (int) $_GET["ref_id"];
64  $this->tabs = $DIC["ilTabs"];
65 
66 
67  include_once("./Services/Style/Content/classes/class.ilContentStyleSettings.php");
68  $this->settings = new ilContentStyleSettings();
69  }
70 
74  public function executeCommand()
75  {
76  $next_class = $this->ctrl->getNextClass($this);
77  $cmd = $this->ctrl->getCmd("listLayouts");
78 
79  if ($cmd == "listLayouts") {
80  $this->checkPermission("read");
81  } else {
82  $this->checkPermission("sty_write_page_layout");
83  }
84 
85  switch ($next_class) {
86  case 'ilpagelayoutgui':
87  $this->tabs->clearTargets();
88  include_once("./Services/COPage/Layout/classes/class.ilPageLayoutGUI.php");
89 // $this->tpl->getStandardTemplate();
90 
91  $this->tabs->setBackTarget(
92  $this->lng->txt("page_layouts"),
93  $this->ctrl->getLinkTarget($this, "listLayouts")
94  );
95 
96  $this->ctrl->setReturn($this, "listLayouts");
97  if ($this->pg_id != null) {
98  $layout_gui = new ilPageLayoutGUI("stys", $this->pg_id);
99  } else {
100  $layout_gui = new ilPageLayoutGUI("stys", $_GET["obj_id"]);
101  }
102  $layout_gui->setTabs();
103  $layout_gui->setEditPreview(true);
104  $this->ctrl->saveParameter($this, "obj_id");
105  $ret = $this->ctrl->forwardCommand($layout_gui);
106  $this->tpl->setContent($ret);
107  break;
108 
109  default:
110  if (in_array($cmd, array("listLayouts", "editPg", "addPageLayout", "cancelCreate", "createPg", "exportLayout",
111  "savePageLayoutTypes", "activate", "deactivate", "importPageLayoutForm", "deletePgl", "cancelDeletePg",
112  "confirmedDeletePg", "importPageLayout"))) {
113  $this->$cmd();
114  } else {
115  die("Unknown command " . $cmd);
116  }
117  }
118  }
119 
127  public function checkPermission($a_perm, $a_throw_exc = true)
128  {
129  if (!$this->rbacsystem->checkAccess($a_perm, $this->ref_id)) {
130  if ($a_throw_exc) {
131  include_once "Services/Object/exceptions/class.ilObjectException.php";
132  throw new ilObjectException($this->lng->txt("permission_denied"));
133  }
134  return false;
135  }
136  return true;
137  }
138 
142  public function listLayouts()
143  {
144  // show toolbar, if write permission is given
145  if ($this->checkPermission("sty_write_page_layout", false)) {
146  $this->toolbar->addButton(
147  $this->lng->txt("sty_add_pgl"),
148  $this->ctrl->getLinkTarget($this, "addPageLayout")
149  );
150  $this->toolbar->addButton(
151  $this->lng->txt("sty_import_page_layout"),
152  $this->ctrl->getLinkTarget($this, "importPageLayoutForm")
153  );
154  }
155 
156  $oa_tpl = new ilTemplate("tpl.stys_pglayout.html", true, true, "Services/COPage/Layout");
157 
158  include_once("./Services/COPage/Layout/classes/class.ilPageLayoutTableGUI.php");
159  $pglayout_table = new ilPageLayoutTableGUI($this, "listLayouts");
160  $oa_tpl->setVariable("PGLAYOUT_TABLE", $pglayout_table->getHTML());
161  $this->tpl->setContent($oa_tpl->get());
162  }
163 
169  public function activate($a_activate = true)
170  {
171  if (!isset($_POST["pglayout"])) {
172  ilUtil::sendInfo($this->lng->txt("no_checkbox"), true);
173  } else {
174  ilUtil::sendSuccess($this->lng->txt("sty_opt_saved"), true);
175  foreach ($_POST["pglayout"] as $item) {
176  $pg_layout = new ilPageLayout($item);
177  $pg_layout->activate($a_activate);
178  }
179  }
180  $this->ctrl->redirect($this, "listLayouts");
181  }
182 
186  public function deactivate()
187  {
188  $this->activate(false);
189  }
190 
194  public function deletePgl()
195  {
196  if (!isset($_POST["pglayout"])) {
197  ilUtil::sendFailure($this->lng->txt("no_checkbox"), true);
198  $this->ctrl->redirect($this, "listLayouts");
199  }
200 
201  unset($this->data);
202 
203  // display confirmation message
204  include_once("./Services/Utilities/classes/class.ilConfirmationGUI.php");
205  $cgui = new ilConfirmationGUI();
206  $cgui->setFormAction($this->ctrl->getFormAction($this));
207  $cgui->setHeaderText($this->lng->txt("info_delete_sure"));
208  $cgui->setCancel($this->lng->txt("cancel"), "cancelDeletePg");
209  $cgui->setConfirm($this->lng->txt("confirm"), "confirmedDeletePg");
210 
211  foreach ($_POST["pglayout"] as $id) {
212  $pg_obj = new ilPageLayout($id);
213  $pg_obj->readObject();
214 
215  $caption = ilUtil::getImageTagByType("stys", $this->tpl->tplPath) .
216  " " . $pg_obj->getTitle();
217 
218  $cgui->addItem("pglayout[]", $id, $caption);
219  }
220 
221  $this->tpl->setContent($cgui->getHTML());
222  }
223 
227  public function cancelDeletePg()
228  {
229  ilUtil::sendInfo($this->lng->txt("msg_cancel"), true);
230  $this->ctrl->redirect($this, "listLayouts");
231  }
232 
236  public function confirmedDeletePg()
237  {
238  foreach ($_POST["pglayout"] as $id) {
239  $pg_obj = new ilPageLayout($id);
240  $pg_obj->delete();
241  }
242 
243  $this->ctrl->redirect($this, "listLayouts");
244  }
245 
249  public function addPageLayout($a_form = null)
250  {
251  if (!$a_form) {
252  $a_form = $this->initAddPageLayoutForm();
253  }
254 
255  $this->tpl->setContent($a_form->getHTML());
256  }
257 
261  public function initAddPageLayoutForm()
262  {
263  $this->lng->loadLanguageModule("content");
264 
265  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
266  $form_gui = new ilPropertyFormGUI();
267  $form_gui->setFormAction($this->ctrl->getFormAction($this));
268  $form_gui->setTitle($this->lng->txt("sty_create_pgl"));
269 
270  $title_input = new ilTextInputGUI($this->lng->txt("title"), "pgl_title");
271  $title_input->setSize(50);
272  $title_input->setMaxLength(128);
273  $title_input->setValue($this->layout_object->title);
274  $title_input->setTitle($this->lng->txt("title"));
275  $title_input->setRequired(true);
276 
277  $desc_input = new ilTextAreaInputGUI($this->lng->txt("description"), "pgl_desc");
278  $desc_input->setValue($this->layout_object->description);
279  $desc_input->setRows(3);
280  $desc_input->setCols(37);
281 
282  // special page?
283  $options = array(
284  "0" => $this->lng->txt("cont_layout_template"),
285  "1" => $this->lng->txt("cont_special_page"),
286  );
287  $si = new ilSelectInputGUI($this->lng->txt("type"), "special_page");
288  $si->setOptions($options);
289 
290  // modules
291  $mods = new ilCheckboxGroupInputGUI($this->lng->txt("modules"), "module");
292  // $mods->setRequired(true);
293  foreach (ilPageLayout::getAvailableModules() as $mod_id => $mod_caption) {
294  $mod = new ilCheckboxOption($mod_caption, $mod_id);
295  $mods->addOption($mod);
296  }
297 
298  $ttype_input = new ilSelectInputGUI($this->lng->txt("sty_based_on"), "pgl_template");
299 
300  $arr_templates = ilPageLayout::getLayouts();
301  $arr_templates1 = ilPageLayout::getLayouts(false, true);
302  foreach ($arr_templates1 as $v) {
303  $arr_templates[] = $v;
304  }
305 
306  $options = array();
307  $options['-1'] = $this->lng->txt("none");
308 
309  foreach ($arr_templates as $templ) {
310  $templ->readObject();
311  $key = $templ->getId();
312  $value = $templ->getTitle();
313  $options[$key] = $value;
314  }
315 
316  $ttype_input->setOptions($options);
317  $ttype_input->setValue(-1);
318  $ttype_input->setRequired(true);
319 
320  $desc_input->setTitle($this->lng->txt("description"));
321  $desc_input->setRequired(false);
322 
323  $form_gui->addItem($title_input);
324  $form_gui->addItem($desc_input);
325  $form_gui->addItem($si);
326  $form_gui->addItem($mods);
327  $form_gui->addItem($ttype_input);
328 
329 
330  $form_gui->addCommandButton("createPg", $this->lng->txt("save"));
331  $form_gui->addCommandButton("cancelCreate", $this->lng->txt("cancel"));
332 
333  return $form_gui;
334  }
335 
336 
337  public function createPg()
338  {
339  $form_gui = $this->initAddPageLayoutForm();
340  if (!$form_gui->checkInput()) {
341  $form_gui->setValuesByPost();
342  $this->addPageLayout($form_gui);
343  return;
344  }
345 
346  //create Page-Layout-Object first
347  $pg_object = new ilPageLayout();
348  $pg_object->setTitle($form_gui->getInput('pgl_title'));
349  $pg_object->setDescription($form_gui->getInput('pgl_desc'));
350  $pg_object->setSpecialPage($form_gui->getInput('special_page'));
351  $pg_object->setModules($form_gui->getInput('module'));
352  $pg_object->update();
353 
354  include_once("./Services/COPage/Layout/classes/class.ilPageLayoutPage.php");
355 
356  //create Page
357  if (!is_object($pg_content)) {
358  $this->pg_content = new ilPageLayoutPage();
359  }
360 
361  $this->pg_content->setId($pg_object->getId());
362 
363  $tmpl = $form_gui->getInput('pgl_template');
364  if ($tmpl != "-1") {
365  $layout_obj = new ilPageLayout($tmpl);
366  $this->pg_content->setXMLContent($layout_obj->getXMLContent());
367  $this->pg_content->create(false);
368  } else {
369  $this->pg_content->create(false);
370  }
371 
372  $this->ctrl->setParameterByClass("ilpagelayoutgui", "obj_id", $pg_object->getId());
373  $this->ctrl->redirectByClass("ilpagelayoutgui", "edit");
374  }
375 
379  public function cancelCreate()
380  {
381  $this->listLayouts();
382  }
383 
387  public function editPg()
388  {
389  $this->checkPermission("sty_write_page_layout");
390 
391  $this->ctrl->setCmdClass("ilpagelayoutgui");
392  $this->ctrl->setCmd("edit");
393  $this->executeCommand();
394  }
395 
399  public function savePageLayoutTypes()
400  {
401  $lng = $this->lng;
403 
404  include_once("./Services/COPage/Layout/classes/class.ilPageLayout.php");
405 
406  if (is_array($_POST["type"])) {
407  foreach ($_POST["type"] as $id => $t) {
408  if ($id > 0) {
409  $l = new ilPageLayout($id);
410  $l->readObject();
411  $l->setSpecialPage($t);
412  if (is_array($_POST["module"][$id])) {
413  $l->setModules(array_keys($_POST["module"][$id]));
414  } else {
415  $l->setModules();
416  }
417  $l->update();
418  }
419  }
420 
421  ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"));
422  }
423 
424  $this->ctrl->redirect($this, "listLayouts");
425  }
426 
427 
431  public function exportLayout()
432  {
433  include_once("./Services/Export/classes/class.ilExport.php");
434  $exp = new ilExport();
435 
436  $tmpdir = ilUtil::ilTempnam();
437  ilUtil::makeDir($tmpdir);
438 
439  $succ = $exp->exportEntity(
440  "pgtp",
441  (int) $_GET["layout_id"],
442  "4.2.0",
443  "Services/COPage",
444  "Title",
445  $tmpdir
446  );
447 
448  if ($succ["success"]) {
450  $succ["directory"] . "/" . $succ["file"],
451  $succ["file"],
452  "",
453  false,
454  false,
455  false
456  );
457  }
458  if (is_file($succ["directory"] . "/" . $succ["file"])) {
459  unlink($succ["directory"] . "/" . $succ["file"]);
460  }
461  if (is_dir($succ["directory"])) {
462  unlink($succ["directory"]);
463  }
464  }
465 
469  public function importPageLayoutForm()
470  {
471  $form = $this->initPageLayoutImportForm();
472  $this->tpl->setContent($form->getHTML());
473  }
474 
478  public function initPageLayoutImportForm()
479  {
480  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
481  $form = new ilPropertyFormGUI();
482 
483  // template file
484  $fi = new ilFileInputGUI($this->lng->txt("file"), "file");
485  $fi->setSuffixes(array("zip"));
486  $fi->setRequired(true);
487  $form->addItem($fi);
488 
489  $form->addCommandButton("importPageLayout", $this->lng->txt("import"));
490  $form->addCommandButton("listLayouts", $this->lng->txt("cancel"));
491 
492  $form->setTitle($this->lng->txt("sty_import_page_layout"));
493  $form->setFormAction($this->ctrl->getFormAction($this));
494 
495  return $form;
496  }
497 
501  public function importPageLayout()
502  {
503  $form = $this->initPageLayoutImportForm();
504  if ($form->checkInput()) {
505  include_once("./Services/COPage/Layout/classes/class.ilPageLayout.php");
506  $pg = ilPageLayout::import($_FILES["file"]["name"], $_FILES["file"]["tmp_name"]);
507  if ($pg > 0) {
508  ilUtil::sendSuccess($this->lng->txt("sty_imported_layout"), true);
509  }
510  $this->ctrl->redirect($this, "listLayouts");
511  } else {
512  $form->setValuesByPost();
513  $this->tpl->setContent($form->getHtml());
514  }
515  }
516 }
settings()
Definition: settings.php:2
exportLayout()
Export page layout template object.
This class represents an option in a checkbox group.
This class represents a selection list property in a property form.
This class represents a property form user interface.
$_GET["client_id"]
Class ilPageLayoutGUI GUI class.
This class represents a file property in a property form.
static getImageTagByType($a_type, $a_path, $a_big=false)
Builds an html image tag TODO: function still in use, but in future use getImagePath and move HTML-Co...
deletePgl()
display deletion confirmation screen
Base exception class for object service.
if(!array_key_exists('StateId', $_REQUEST)) $id
setValue($a_value)
Set Value.
Class ilPageLayout.
activate($a_activate=true)
Activate layout.
Page layout page object.
global $ilCtrl
Definition: ilias.php:18
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
if(isset($_POST['submit'])) $form
static import($a_filename, $a_filepath)
Import page layout.
TableGUI class for page layouts.
static getLayouts($a_active=false, $a_special_page=false, $a_module=null)
Get layouts.
special template class to simplify handling of ITX/PEAR
static getAvailableModules()
setSize($a_size)
Set Size.
This class represents a text property in a property form.
This class represents a property in a property form.
setOptions($a_options)
Set Options.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static ilTempnam($a_temp_path=null)
Returns a unique and non existing Path for e temporary file or directory.
global $l
Definition: afr.php:30
cancelDeletePg()
cancel deletion of Page Layout
$this data['403_header']
This class represents a text area property in a property form.
checkPermission($a_perm, $a_throw_exc=true)
Check permission.
$ret
Definition: parser.php:6
initPageLayoutImportForm()
Init page layout import form.
$key
Definition: croninfo.php:18
setSuffixes($a_suffixes)
Set Accepted Suffixes.
$_POST["username"]
confirmedDeletePg()
conform deletion of Page Layout
static deliverFile( $a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
Confirmation screen class.