ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilNewsItemGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 include_once("./Services/News/classes/class.ilNewsItem.php");
6 
7 
17 {
18  const FORM_EDIT = 0;
19  const FORM_CREATE = 1;
20  const FORM_RE_EDIT = 2;
21  const FORM_RE_CREATE = 2;
22 
26  protected $ctrl;
27 
31  protected $lng;
32 
36  protected $tabs;
37 
41  protected $user;
42 
46  protected $toolbar;
47 
48  protected $enable_edit = 0;
49  protected $context_obj_id;
50  protected $context_obj_type;
53  protected $form_edit_mode;
54 
55 
59  public function __construct()
60  {
61  global $DIC;
62 
63  $this->lng = $DIC->language();
64  $this->tabs = $DIC->tabs();
65  $this->user = $DIC->user();
66  $this->toolbar = $DIC->toolbar();
67  $ilCtrl = $DIC->ctrl();
68  $lng = $DIC->language();
69 
70  $this->ctrl = $ilCtrl;
71 
72  include_once("Services/News/classes/class.ilNewsItem.php");
73  if ($_GET["news_item_id"] > 0) {
74  $this->news_item = new ilNewsItem($_GET["news_item_id"]);
75  }
76 
77  $this->ctrl->saveParameter($this, array("news_item_id"));
78 
79  // Init EnableEdit.
80  $this->setEnableEdit(false);
81 
82  // Init Context.
83  $this->setContextObjId($ilCtrl->getContextObjId());
84  $this->setContextObjType($ilCtrl->getContextObjType());
85  $this->setContextSubObjId($ilCtrl->getContextSubObjId());
86  $this->setContextSubObjType($ilCtrl->getContextSubObjType());
87 
88  $lng->loadLanguageModule("news");
89 
90  $ilCtrl->saveParameter($this, "add_mode");
91  }
92 
98  public function getHTML()
99  {
100  $lng = $this->lng;
102 
103  $lng->LoadLanguageModule("news");
104 
105  return $this->getNewsForContextBlock();
106  }
107 
112  public function executeCommand()
113  {
115 
116  // check, if news item id belongs to context
117  if (is_object($this->news_item) && $this->news_item->getId() > 0
118  && ilNewsItem::_lookupContextObjId($this->news_item->getId()) != $this->getContextObjId()) {
119  throw new ilException("News ID does not match object context.");
120  }
121 
122 
123  // get next class and command
124  $next_class = $this->ctrl->getNextClass($this);
125  $cmd = $this->ctrl->getCmd();
126 
127  switch ($next_class) {
128  default:
129  $html = $this->$cmd();
130  break;
131  }
132 
133  return $html;
134  }
135 
141  public function setEnableEdit($a_enable_edit = 0)
142  {
143  $this->enable_edit = $a_enable_edit;
144  }
145 
151  public function getEnableEdit()
152  {
153  return $this->enable_edit;
154  }
155 
161  public function setContextObjId($a_context_obj_id)
162  {
163  $this->context_obj_id = $a_context_obj_id;
164  }
165 
171  public function getContextObjId()
172  {
173  return $this->context_obj_id;
174  }
175 
181  public function setContextObjType($a_context_obj_type)
182  {
183  $this->context_obj_type = $a_context_obj_type;
184  }
185 
191  public function getContextObjType()
192  {
194  }
195 
201  public function setContextSubObjId($a_context_sub_obj_id)
202  {
203  $this->context_sub_obj_id = $a_context_sub_obj_id;
204  }
205 
211  public function getContextSubObjId()
212  {
214  }
215 
221  public function setContextSubObjType($a_context_sub_obj_type)
222  {
223  $this->context_sub_obj_type = $a_context_sub_obj_type;
224  }
225 
231  public function getContextSubObjType()
232  {
234  }
235 
241  public function setFormEditMode($a_form_edit_mode)
242  {
243  $this->form_edit_mode = $a_form_edit_mode;
244  }
245 
251  public function getFormEditMode()
252  {
253  return $this->form_edit_mode;
254  }
255 
260  public function createNewsItem()
261  {
262  $form = $this->initFormNewsItem(self::FORM_CREATE);
263  return $form->getHtml();
264  }
265 
270  public function editNewsItem()
271  {
272  $form = $this->initFormNewsItem(self::FORM_EDIT);
273  $this->getValuesNewsItem($form);
274  return $form->getHtml();
275  }
276 
277 
284  protected function initFormNewsItem($a_mode)
285  {
286  $ilTabs = $this->tabs;
287 
288  $ilTabs->clearTargets();
289  $form = self::getEditForm($a_mode, (int) $_GET["ref_id"]);
290  $form->setFormAction($this->ctrl->getFormAction($this));
291 
292  return $form;
293  }
294 
301  public static function getEditForm($a_mode, $a_ref_id)
302  {
303  global $DIC;
304 
305  $lng = $DIC->language();
306 
307  $lng->loadLanguageModule("news");
308 
309  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
310 
311  $form = new ilPropertyFormGUI();
312 
313  // Property Title
314  $text_input = new ilTextInputGUI($lng->txt("news_news_item_title"), "news_title");
315  $text_input->setInfo("");
316  $text_input->setRequired(true);
317  $text_input->setMaxLength(200);
318  $form->addItem($text_input);
319 
320  // Property Content
321  $text_area = new ilTextAreaInputGUI($lng->txt("news_news_item_content"), "news_content");
322  $text_area->setInfo("");
323  $text_area->setRequired(false);
324  $text_area->setRows("4");
325  if (ilObjAdvancedEditing::_getRichTextEditor() === "tinymce") {
326  $text_area->setUseRte(true);
327  }
328  $form->addItem($text_area);
329 
330  // Property Visibility
331  $radio_group = new ilRadioGroupInputGUI($lng->txt("news_news_item_visibility"), "news_visibility");
332  $radio_option = new ilRadioOption($lng->txt("news_visibility_users"), "users");
333  $radio_group->addOption($radio_option);
334  $radio_option = new ilRadioOption($lng->txt("news_visibility_public"), "public");
335  $radio_group->addOption($radio_option);
336  $radio_group->setInfo($lng->txt("news_news_item_visibility_info"));
337  $radio_group->setRequired(false);
338  $radio_group->setValue("users");
339  $form->addItem($radio_group);
340 
341  // media
342  $media = new ilFileInputGUI($lng->txt('news_media'), 'media');
343  $media->setSuffixes(array("jpeg", "jpg", "png", "gif", "mp4", "mp3"));
344  $media->setRequired(false);
345  $media->setALlowDeletion(true);
346  $media->setValue(" ");
347  $form->addItem($media);
348 
349  // Property ContentLong
350  /*
351  $text_area = new ilTextAreaInputGUI($lng->txt("news_news_item_content_long"), "news_content_long");
352  $text_area->setInfo($lng->txt("news_news_item_content_long_info"));
353  $text_area->setRequired(false);
354  $text_area->setCols("40");
355  $text_area->setRows("8");
356  $text_area->setUseRte(true);
357  $form->addItem($text_area);*/
358 
359 
360  // save and cancel commands
361  if (in_array($a_mode, array(self::FORM_CREATE, self::FORM_RE_CREATE))) {
362  $form->addCommandButton("saveNewsItem", $lng->txt("save"), "news_btn_create");
363  $form->addCommandButton("cancelSaveNewsItem", $lng->txt("cancel"), "news_btn_cancel_create");
364  } else {
365  $form->addCommandButton("updateNewsItem", $lng->txt("save"), "news_btn_update");
366  $form->addCommandButton("cancelUpdateNewsItem", $lng->txt("cancel"), "news_btn_cancel_update");
367  }
368 
369  $form->setTitle($lng->txt("news_news_item_head"));
370 
371  $news_set = new ilSetting("news");
372  if (!$news_set->get("enable_rss_for_internal")) {
373  $form->removeItemByPostVar("news_visibility");
374  } else {
375  $nv = $form->getItemByPostVar("news_visibility");
376  if (is_object($nv)) {
377  $nv->setValue(ilNewsItem::_getDefaultVisibilityForRefId($a_ref_id));
378  }
379  }
380 
381  return $form;
382  }
383 
388  public function getValuesNewsItem(\ilPropertyFormGUI $a_form)
389  {
390  $values = array();
391 
392  $values["news_title"] = $this->news_item->getTitle();
393  $values["news_content"] = $this->news_item->getContent() . $this->news_item->getContentLong();
394  $values["news_visibility"] = $this->news_item->getVisibility();
395  //$values["news_content_long"] = $this->news_item->getContentLong();
396  $values["news_content_long"] = "";
397 
398  $a_form->setValuesByArray($values);
399 
400  if ($this->news_item->getMobId() > 0) {
401  $fi = $a_form->getItemByPostVar("media");
402  $fi->setValue(ilObject::_lookupTitle($this->news_item->getMobId()));
403  }
404  }
405 
410  public function saveNewsItem()
411  {
413 
414  if (!$this->getEnableEdit()) {
415  return;
416  }
417 
418  $form = $this->initFormNewsItem(self::FORM_CREATE);
419  if ($form->checkInput()) {
420  $this->news_item = new ilNewsItem();
421  $this->news_item->setTitle($form->getInput("news_title"));
422  $this->news_item->setContent($form->getInput("news_content"));
423  $this->news_item->setVisibility($form->getInput("news_visibility"));
424 
425  // $data = $form->getInput('media');
426  // var_dump($data);
427 
428  $media = $_FILES["media"];
429  if ($media["name"] != "") {
430  $mob = ilObjMediaObject::_saveTempFileAsMediaObject($media["name"], $media["tmp_name"], true);
431  $this->news_item->setMobId($mob->getId());
432  }
433 
434 
435  $this->news_item->setContentLong("");
436  if (self::isRteActivated()) {
437  $this->news_item->setContentHtml(true);
438  }
439  //$this->news_item->setContentLong($form->getInput("news_content_long"));
440 
441  // changed
442  //$this->news_item->setContextObjId($this->ctrl->getContextObjId());
443  //$this->news_item->setContextObjType($this->ctrl->getContextObjType());
444  $this->news_item->setContextObjId($this->getContextObjId());
445  $this->news_item->setContextObjType($this->getContextObjType());
446  $this->news_item->setContextSubObjId($this->getContextSubObjId());
447  $this->news_item->setContextSubObjType($this->getContextSubObjType());
448  $this->news_item->setUserId($ilUser->getId());
449 
450  $news_set = new ilSetting("news");
451  if (!$news_set->get("enable_rss_for_internal")) {
452  $this->news_item->setVisibility("users");
453  }
454 
455  $this->news_item->create();
456  $this->exitSaveNewsItem();
457  } else {
458  $form->setValuesByPost();
459  return $form->getHtml();
460  }
461  }
462 
463  public function exitSaveNewsItem()
464  {
466 
467  if ($_GET["add_mode"] == "block") {
468  $ilCtrl->returnToParent($this);
469  } else {
470  $ilCtrl->redirect($this, "editNews");
471  }
472  }
473 
478  public function updateNewsItem()
479  {
481 
482  if (!$this->getEnableEdit()) {
483  return "";
484  }
485 
486  $form = $this->initFormNewsItem(self::FORM_EDIT);
487  if ($form->checkInput()) {
488  $this->news_item->setUpdateUserId($ilUser->getId());
489  $this->news_item->setTitle($form->getInput("news_title"));
490  $this->news_item->setContent($form->getInput("news_content"));
491  $this->news_item->setVisibility($form->getInput("news_visibility"));
492  //$this->news_item->setContentLong($form->getInput("news_content_long"));
493  $this->news_item->setContentLong("");
494 
495  $media = $_FILES["media"];
496  $old_mob_id = 0;
497 
498  // delete old media object
499  if ($media["name"] != "" || $_POST["media_delete"] != "") {
500  if ($this->news_item->getMobId() > 0 && ilObject::_lookupType($this->news_item->getMobId()) == "mob") {
501  $old_mob_id = $this->news_item->getMobId();
502  }
503  $this->news_item->setMobId(0);
504  }
505 
506  if ($media["name"] != "") {
507  $mob = ilObjMediaObject::_saveTempFileAsMediaObject($media["name"], $media["tmp_name"], true);
508  $this->news_item->setMobId($mob->getId());
509  }
510 
511  if (self::isRteActivated()) {
512  $this->news_item->setContentHtml(true);
513  }
514  $this->news_item->update();
515 
516  if ($old_mob_id > 0) {
517  $old_mob = new ilObjMediaObject($old_mob_id);
518  $old_mob->delete();
519  }
520 
521  $this->exitUpdateNewsItem();
522  } else {
523  $form->setValuesByPost();
524  return $form->getHtml();
525  }
526  }
527 
528  public function exitUpdateNewsItem()
529  {
531 
532  $ilCtrl->redirect($this, "editNews");
533  }
534 
539  public function cancelUpdateNewsItem()
540  {
541  return $this->editNews();
542  }
543 
548  public function cancelSaveNewsItem()
549  {
551 
552  if ($_GET["add_mode"] == "block") {
553  $ilCtrl->returnToParent($this);
554  } else {
555  return $this->editNews();
556  }
557  }
558 
564  public function editNews()
565  {
566  $ilTabs = $this->tabs;
567  $ilToolbar = $this->toolbar;
568  $lng = $this->lng;
570 
571  $this->setTabs();
572 
573  $ilToolbar->addButton(
574  $lng->txt("news_add_news"),
575  $ilCtrl->getLinkTarget($this, "createNewsItem")
576  );
577 
578  if (!$this->getEnableEdit()) {
579  return;
580  }
581  return $this->getNewsForContextTable();
582  }
583 
587  public function cancelUpdate()
588  {
589  return $this->editNews();
590  }
591 
595  public function confirmDeletionNewsItems()
596  {
598  $lng = $this->lng;
599  $ilTabs = $this->tabs;
600 
601  if (!$this->getEnableEdit()) {
602  return;
603  }
604 
605  // check whether at least one item is selected
606  if (count($_POST["news_id"]) == 0) {
607  ilUtil::sendFailure($lng->txt("no_checkbox"));
608  return $this->editNews();
609  }
610 
611  $ilTabs->clearTargets();
612 
613  include_once("Services/Utilities/classes/class.ilConfirmationGUI.php");
614  $c_gui = new ilConfirmationGUI();
615 
616  // set confirm/cancel commands
617  $c_gui->setFormAction($ilCtrl->getFormAction($this, "deleteNewsItems"));
618  $c_gui->setHeaderText($lng->txt("info_delete_sure"));
619  $c_gui->setCancel($lng->txt("cancel"), "editNews");
620  $c_gui->setConfirm($lng->txt("confirm"), "deleteNewsItems");
621 
622  // add items to delete
623  foreach ($_POST["news_id"] as $news_id) {
624  $news = new ilNewsItem($news_id);
625  $c_gui->addItem("news_id[]", $news_id, $news->getTitle());
626  }
627 
628  return $c_gui->getHTML();
629  }
630 
634  public function deleteNewsItems()
635  {
636  if (!$this->getEnableEdit()) {
637  return;
638  }
639  // delete all selected news items
640  foreach ($_POST["news_id"] as $news_id) {
641  $news = new ilNewsItem($news_id);
642  $news->delete();
643  }
644 
645  return $this->editNews();
646  }
647 
652  public function getNewsForContextBlock()
653  {
654  $lng = $this->lng;
655 
656  include_once("Services/News/classes/class.ilNewsForContextBlockGUI.php");
657  $block_gui = new ilNewsForContextBlockGUI(get_class($this));
658 
659  $block_gui->setParentClass("ilinfoscreengui");
660  $block_gui->setParentCmd("showSummary");
661  $block_gui->setEnableEdit($this->getEnableEdit());
662 
663 
664  $news_item = new ilNewsItem();
665 
666  // changed
667  //$news_item->setContextObjId($this->ctrl->getContextObjId());
668  //$news_item->setContextObjType($this->ctrl->getContextObjType());
669  $news_item->setContextObjId($this->getContextObjId());
670  $news_item->setContextObjType($this->getContextObjType());
671  $news_item->setContextSubObjId($this->getContextSubObjId());
672  $news_item->setContextSubObjType($this->getContextSubObjType());
673 
674  $data = $news_item->queryNewsForContext();
675 
676  $block_gui->setTitle($lng->txt("news_block_news_for_context"));
677  $block_gui->setRowTemplate("tpl.block_row_news_for_context.html", "Services/News");
678  $block_gui->setData($data);
679 
680  return $block_gui->getHTML();
681  }
682 
683 
688  public function getNewsForContextTable()
689  {
690  $lng = $this->lng;
691 
692  $news_item = new ilNewsItem();
693  $news_item->setContextObjId($this->getContextObjId());
694  $news_item->setContextObjType($this->getContextObjType());
695  $news_item->setContextSubObjId($this->getContextSubObjId());
696  $news_item->setContextSubObjType($this->getContextSubObjType());
697 
698  $perm_ref_id = 0;
699  if (in_array($this->getContextObjType(), array("cat", "grp", "crs", "root"))) {
700  $data = $news_item->getNewsForRefId(
701  $_GET["ref_id"],
702  false,
703  false,
704  0,
705  true,
706  false,
707  true,
708  true
709  );
710  } else {
711  $perm_ref_id = $_GET["ref_id"];
712  if ($this->getContextSubObjId() > 0) {
713  $data = $news_item->queryNewsForContext(
714  false,
715  0,
716  "",
717  true,
718  true
719  );
720  } else {
721  $data = $news_item->queryNewsForContext();
722  }
723  }
724 
725  include_once("Services/News/classes/class.ilNewsForContextTableGUI.php");
726  $table_gui = new ilNewsForContextTableGUI($this, "getNewsForContextTable", $perm_ref_id);
727 
728  $table_gui->setTitle($lng->txt("news_table_news_for_context"));
729  $table_gui->setRowTemplate("tpl.table_row_news_for_context.html", "Services/News");
730  $table_gui->setData($data);
731 
732  $table_gui->setDefaultOrderField("creation_date");
733  $table_gui->setDefaultOrderDirection("desc");
734  $table_gui->addMultiCommand("confirmDeletionNewsItems", $lng->txt("delete"));
735  $table_gui->setTitle($lng->txt("news"));
736  $table_gui->setSelectAllCheckbox("news_id");
737 
738 
739  return $table_gui->getHTML();
740  }
741 
748  public function setTabs()
749  {
750  $ilTabs = $this->tabs;
752  $lng = $this->lng;
753 
754  $ilTabs->clearTargets();
755  $ilTabs->setBackTarget(
756  $lng->txt("back"),
757  $ilCtrl->getParentReturn($this)
758  );
759  }
760 
766  public static function isRteActivated()
767  {
768  include_once("./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php");
770  return false;
771  }
772  return true;
773  }
774 }
This class represents an option in a radio group.
getContextSubObjId()
Get ContextSubObjId.
$data
Definition: storeScorm.php:23
getItemByPostVar($a_post_var)
Get Item by POST variable.
static isRteActivated()
Is Rte activated.
static _getRichTextEditor()
Returns the identifier for the Rich Text Editor.
This class represents a property form user interface.
getNewsForContextBlock()
BLOCK NewsForContext: Get block HTML.
$_GET["client_id"]
This class represents a file property in a property form.
editNews()
Edit news.
setContextObjId($a_context_obj_id)
Set ContextObjId.
getFormEditMode()
Get FormEditMode.
User Interface for NewsItem entities.
confirmDeletionNewsItems()
Confirmation Screen.
getContextObjId()
Get ContextObjId.
static _lookupTitle($a_id)
lookup object title
BlockGUI class for block NewsForContext.
saveNewsItem()
FORM NewsItem: Save NewsItem.
getEnableEdit()
Get EnableEdit.
static _saveTempFileAsMediaObject($name, $tmp_name, $upload=true)
Create new media object and update page in db and return new media object.
getValuesNewsItem(\ilPropertyFormGUI $a_form)
FORM NewsItem: Get current values for NewsItem form.
setInfo($a_info)
Set Info.
getContextObjType()
Get ContextObjType.
user()
Definition: user.php:4
deleteNewsItems()
Delete news items.
global $ilCtrl
Definition: ilias.php:18
setInfo($a_info)
Set Information Text.
cancelUpdateNewsItem()
FORM NewsItem: Save NewsItem.
This class represents a property in a property form.
initFormNewsItem($a_mode)
FORM NewsItem: Init form.
setContextSubObjId($a_context_sub_obj_id)
Set ContextSubObjId.
getContextSubObjType()
Get ContextSubObjType.
setContextSubObjType($a_context_sub_obj_type)
Set ContextSubObjType.
$ilUser
Definition: imgupload.php:18
createNewsItem()
FORM NewsItem: Create NewsItem.
Class ilObjMediaObject.
editNewsItem()
FORM NewsItem: Edit form.
getNewsForContextTable()
TABLE NewsForContext: Get table HTML.
static _lookupType($a_id, $a_reference=false)
lookup object type
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
This class represents a text area property in a property form.
TableGUI class for table NewsForContext.
static _getDefaultVisibilityForRefId($a_ref_id)
Get default visibility for reference id.
$DIC
Definition: xapitoken.php:46
static _lookupContextObjId($a_news_id)
Context Object ID.
cancelSaveNewsItem()
FORM NewsItem: Save NewsItem.
setContextObjType($a_context_obj_type)
Set ContextObjType.
setEnableEdit($a_enable_edit=0)
Set EnableEdit.
static getEditForm($a_mode, $a_ref_id)
FORM NewsItem: Init form.
setSuffixes($a_suffixes)
Set Accepted Suffixes.
$_POST["username"]
setValuesByArray($a_values, $a_restrict_to_value_keys=false)
Set form values from an array.
setFormEditMode($a_form_edit_mode)
Set FormEditMode.
executeCommand()
Execute command.
cancelUpdate()
Cancel update.
Confirmation screen class.
__construct()
Constructor.
updateNewsItem()
FORM NewsItem: Save NewsItem.