ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilPCPlaceHolderGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2011 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 require_once("./Services/COPage/classes/class.ilPCPlaceHolder.php");
6 require_once("./Services/COPage/classes/class.ilPageContentGUI.php");
7 
21 {
22  public $pg_obj;
23  public $content_obj;
24  public $hier_id;
25  public $pc_id;
26  protected $styleid;
27 
28  const TYPE_TEXT = "Text";
29  const TYPE_QUESTION = "Question";
30  const TYPE_MEDIA = "Media";
31  const TYPE_VERIFICATION = "Verification";
32 
37  public function __construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id = "")
38  {
39  global $DIC;
40 
41  $this->lng = $DIC->language();
42  $this->pg_obj = $a_pg_obj;
43  $this->content_obj = $a_content_obj;
44  $this->hier_id = $a_hier_id;
45  $this->pc_id = $a_pc_id;
46 
47  parent::__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id);
48  }
49 
53  public function executeCommand()
54  {
55  // get next class that processes or forwards current command
56  $next_class = $this->ctrl->getNextClass($this);
57  // get current command
58  $cmd = $this->ctrl->getCmd();
59 
60  switch ($next_class) {
61  case 'ilpcmediaobjectgui': //special handling
62  include_once("./Services/COPage/classes/class.ilPCMediaObjectGUI.php");
63  $media_gui = new ilPCMediaObjectGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
64  $ret = $this->ctrl->forwardCommand($media_gui);
65  break;
66 
67  default:
68  $ret = $this->$cmd();
69  break;
70  }
71 
72  return $ret;
73  }
74 
78  protected function insert()
79  {
80  $this->propertyGUI("create", self::TYPE_TEXT, "100px", "insert");
81  }
82 
86  protected function create()
87  {
88  if ($_POST["plach_height"] == "" ||
89  !preg_match("/[0-9]+/", $_POST["plach_height"])) {
90  return $this->insert();
91  }
92 
93  $this->content_obj = new ilPCPlaceHolder($this->getPage());
94  $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
95  $this->content_obj->setHeight($_POST["plach_height"] . "px");
96  $this->content_obj->setContentClass($_POST['plach_type']);
97  $this->updated = $this->pg_obj->update();
98  if ($this->updated === true) {
99  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
100  } else {
101  $this->insert();
102  }
103  }
104 
108  public function edit()
109  {
110  if ($this->getPageConfig()->getEnablePCType("PlaceHolder")) {
111  $this->edit_object();
112  } else {
113  $this->forward_edit();
114  }
115  }
116 
122  public function setStyleId($a_styleid)
123  {
124  $this->styleid = $a_styleid;
125  }
126 
132  public function getStyleId()
133  {
134  return $this->styleid;
135  }
136 
140  protected function edit_object()
141  {
142  $this->propertyGUI(
143  "saveProperties",
144  $this->content_obj->getContentClass(),
145  $this->content_obj->getHeight(),
146  "save"
147  );
148  }
149 
150  protected function forward_edit()
151  {
152  switch ($this->content_obj->getContentClass()) {
153  case self::TYPE_MEDIA:
154  include_once("./Services/COPage/classes/class.ilPCMediaObjectGUI.php");
155  $this->ctrl->setCmdClass("ilpcmediaobjectgui");
156  $this->ctrl->setCmd("insert");
157  $media_gui = new ilPCMediaObjectGUI($this->pg_obj, null);
158  $this->ctrl->forwardCommand($media_gui);
159  break;
160 
161  case self::TYPE_TEXT:
162  $this->textCOSelectionGUI();
163  break;
164 
165  case self::TYPE_QUESTION:
166  include_once("./Services/COPage/classes/class.ilPCQuestionGUI.php");
167  $this->ctrl->setCmdClass("ilpcquestiongui");
168  $this->ctrl->setCmd("insert");
169  $question_gui = new ilPCQuestionGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
170  $question_gui->setSelfAssessmentMode(true);
171  $this->ctrl->forwardCommand($question_gui);
172  break;
173 
174  case self::TYPE_VERIFICATION:
175  include_once("./Services/COPage/classes/class.ilPCVerificationGUI.php");
176  $this->ctrl->setCmdClass("ilpcverificationgui");
177  $this->ctrl->setCmd("insert");
178  $cert_gui = new ilPCVerificationGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
179  $this->ctrl->forwardCommand($cert_gui);
180  break;
181 
182  default:
183  break;
184  }
185  }
186 
187 
191  protected function saveProperties()
192  {
193  if ($_POST["plach_height"] == "" ||
194  !preg_match("/[0-9]+/", $_POST["plach_height"])) {
195  return $this->edit_object();
196  }
197 
198  $this->content_obj->setContentClass($_POST['plach_type']);
199  $this->content_obj->setHeight($_POST["plach_height"] . "px");
200 
201  $this->updated = $this->pg_obj->update();
202  if ($this->updated === true) {
203  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
204  } else {
205  $this->pg_obj->addHierIDs();
206  $this->edit();
207  }
208  }
209 
213  protected function propertyGUI($a_action, $a_type, $a_height, $a_mode)
214  {
215  $lng = $this->lng;
216 
217  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
218  $this->form_gui = new ilPropertyFormGUI();
219  $this->form_gui->setFormAction($this->ctrl->getFormAction($this));
220  $this->form_gui->setTitle($lng->txt("cont_ed_plachprop"));
221 
222  $ttype_input = new ilRadioGroupInputGUI($lng->txt("type"), "plach_type");
223  $type_captions = $this->getTypeCaptions();
224  foreach ($this->getAvailableTypes($a_type) as $type) {
225  $ttype_input->addOption(new ilRadioOption($type_captions[$type], $type));
226  }
227  $ttype_input->setRequired(true);
228  $this->form_gui->addItem($ttype_input);
229 
230  $theight_input = new ilTextInputGUI($lng->txt("height"), "plach_height");
231  $theight_input->setSize(4);
232  $theight_input->setMaxLength(3);
233  $theight_input->setTitle($lng->txt("height") . " (px)");
234  $theight_input->setRequired(true);
235  $this->form_gui->addItem($theight_input);
236 
237  $theight_input->setValue(preg_replace("/px/", "", $a_height));
238  $ttype_input->setValue($a_type);
239 
240  $this->form_gui->addCommandButton($a_action, $lng->txt($a_mode));
241  $this->form_gui->addCommandButton("cancelCreate", $lng->txt("cancel"));
242  $this->tpl->setContent($this->form_gui->getHTML());
243  }
244 
248  protected function textCOSelectionGUI()
249  {
250  $lng = $this->lng;
251 
252  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
253  $this->form_gui = new ilPropertyFormGUI();
254  $this->form_gui->setFormAction($this->ctrl->getFormAction($this));
255  $this->form_gui->setTitle($lng->txt("cont_ed_select_pctext"));
256 
257  // Select Question Type
258  $ttype_input = new ilRadioGroupInputGUI($lng->txt("cont_ed_textitem"), "pctext_type");
259  $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_par"), 0));
260  $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_dtable"), 1));
261  $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_atable"), 2));
262  $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_list"), 3));
263  $ttype_input->addOption(new ilRadioOption($lng->txt("cont_ed_flist"), 4));
264  $ttype_input->addOption(new ilRadioOption($lng->txt("cont_tabs"), 5));
265  $this->form_gui->addItem($ttype_input);
266 
267  $this->form_gui->addCommandButton("insertPCText", $lng->txt("insert"));
268  $this->form_gui->addCommandButton("cancelCreate", $lng->txt("cancel"));
269  $this->tpl->setContent($this->form_gui->getHTML());
270  }
271 
275  protected function insertPCText()
276  {
277  switch ($_POST['pctext_type']) {
278  case 0: //Paragraph / Text
279 
280  // js editing? -> redirect to js page editor
281  // if ($ilSetting->get("enable_js_edit", 1) && ilPageEditorGUI::_doJSEditing())
283  $ret_class = $this->ctrl->getReturnClass($this);
284  $this->ctrl->setParameterByClass($ret_class, "pl_hier_id", $this->hier_id);
285  $this->ctrl->setParameterByClass($ret_class, "pl_pc_id", $this->pc_id);
286  $this->ctrl->redirectByClass(
287  $ret_class,
288  "insertJSAtPlaceholder"
289  );
290  }
291 
292  include_once("./Services/COPage/classes/class.ilPCParagraphGUI.php");
293  $this->ctrl->setCmdClass("ilpcparagraphgui");
294  $this->ctrl->setCmd("insert");
295  $paragraph_gui = new ilPCParagraphGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
296  $paragraph_gui->setStyleId($this->getStyleId());
297  $paragraph_gui->setPageConfig($this->getPageConfig());
298  $this->ctrl->forwardCommand($paragraph_gui);
299  break;
300 
301  case 1: //DataTable
302  include_once("./Services/COPage/classes/class.ilPCDataTableGUI.php");
303  $this->ctrl->setCmdClass("ilpcdatatablegui");
304  $this->ctrl->setCmd("insert");
305  $dtable_gui = new ilPCDataTableGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
306  $this->ctrl->forwardCommand($dtable_gui);
307  break;
308 
309  case 2: //Advanced Table
310  include_once("./Services/COPage/classes/class.ilPCTableGUI.php");
311  $this->ctrl->setCmdClass("ilpctablegui");
312  $this->ctrl->setCmd("insert");
313  $atable_gui = new ilPCTableGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
314  $this->ctrl->forwardCommand($atable_gui);
315  break;
316 
317  case 3: //Advanced List
318  include_once("./Services/COPage/classes/class.ilPCListGUI.php");
319  $this->ctrl->setCmdClass("ilpclistgui");
320  $this->ctrl->setCmd("insert");
321  $list_gui = new ilPCListGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
322  $this->ctrl->forwardCommand($list_gui);
323  break;
324 
325  case 4: //File List
326  include_once("./Services/COPage/classes/class.ilPCFileListGUI.php");
327  $this->ctrl->setCmdClass("ilpcfilelistgui");
328  $this->ctrl->setCmd("insert");
329  $file_list_gui = new ilPCFileListGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
330  $file_list_gui->setStyleId($this->getStyleId());
331  $this->ctrl->forwardCommand($file_list_gui);
332  break;
333 
334  case 5: //Tabs
335  include_once("./Services/COPage/classes/class.ilPCTabsGUI.php");
336  $this->ctrl->setCmdClass("ilpctabsgui");
337  $this->ctrl->setCmd("insert");
338  $tabs_gui = new ilPCTabsGUI($this->pg_obj, $this->content_obj, $this->hier_id, $this->pc_id);
339  $tabs_gui->setStyleId($this->getStyleId());
340  $this->ctrl->forwardCommand($tabs_gui);
341  break;
342 
343  default:
344  break;
345  }
346  }
347 
351  public function cancel()
352  {
353  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
354  }
355 
356  protected function getAvailableTypes($a_selected_type = "")
357  {
358  // custom config?
359  if (method_exists($this->getPageConfig(), "getAvailablePlaceholderTypes")) {
360  $types = $this->getPageConfig()->getAvailablePlaceholderTypes();
361  } else {
362  $types = array(self::TYPE_TEXT, self::TYPE_MEDIA, self::TYPE_QUESTION);
363  }
364 
365  include_once("./Services/Certificate/classes/class.ilCertificate.php");
366  if (!ilCertificate::isActive()) {
367  // we remove type verification if certificates are deactivated and this
368  // is not the currently selected value
369  if (($key = array_search(self::TYPE_VERIFICATION, $types)) !== false &&
370  self::TYPE_VERIFICATION != $a_selected_type) {
371  unset($types[$key]);
372  }
373  }
374  return $types;
375  }
376 
377  protected function getTypeCaptions()
378  {
379  $lng = $this->lng;
380 
381  return array(
382  self::TYPE_TEXT => $lng->txt("cont_ed_plachtext"),
383  self::TYPE_MEDIA => $lng->txt("cont_ed_plachmedia"),
384  self::TYPE_QUESTION => $lng->txt("cont_ed_plachquestion"),
385  self::TYPE_VERIFICATION => $lng->txt("cont_ed_plachverification")
386  );
387  }
388 }
This class represents an option in a radio group.
__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id="")
Constructor public.
propertyGUI($a_action, $a_type, $a_height, $a_mode)
Object Property GUI.
setStyleId($a_styleid)
Set Style Id.
This class represents a property form user interface.
$type
global $DIC
Definition: saml.php:7
Class ilPCListGUI.
executeCommand()
execute command
getPageConfig()
Get Page Config.
Class ilPCMediaObjectGUI.
Class ilPCVerificationGUI.
Class ilPCQuestionGUI.
$a_type
Definition: workflow.php:92
User Interface for Editing of Page Content Objects (Paragraphs, Tables, ...)
saveProperties()
save placeholder properties in db and return to page edit screen
This class represents a property in a property form.
addOption($a_option)
Add Option.
insertPCText()
Forwards Text Item Selection to GUI classes.
static _doJSEditing()
checks if current user has activated js editing and if browser is js capable
setSize($a_size)
Set Size.
This class represents a text property in a property form.
Class ilPCTableGUI.
Class ilPCListGUI.
Class ilPlaceHolder.
$ret
Definition: parser.php:6
getAvailableTypes($a_selected_type="")
edit_object()
Handle Editing Private Methods.
Class ilPCTableGUI.
Class ilPCTabsGUI.
Class ilPCPlaceHolderGUI.
textCOSelectionGUI()
Text Item Selection.
$key
Definition: croninfo.php:18
$_POST["username"]
create()
create new table in dom and update page in db
Class ilPCParagraphGUI.