ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilNewsTimelineGUI.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 
16 {
20  protected $ctrl;
21 
25  protected $tpl;
26 
30  protected $ref_id;
31 
35  protected $lng;
36 
40  protected $toolbar;
41 
45  protected $user;
46 
50  protected $access;
51 
55  protected static $items_per_load = 10;
56 
60  protected $user_edit_all = false;
61 
67  protected function __construct($a_ref_id, $a_include_auto_entries)
68  {
69  global $DIC;
70 
71  $this->ctrl = $DIC->ctrl();
72  $this->tpl = $DIC["tpl"];
73  $this->ref_id = $a_ref_id;
74  $this->lng = $DIC->language();
75  $this->toolbar = $DIC->toolbar();
76  $this->user = $DIC->user();
77  $this->include_auto_entries = $a_include_auto_entries;
78  $this->access = $DIC->access();
79 
80  $this->news_id = (int) $_GET["news_id"];
81 
82 
83  $this->lng->loadLanguageModule("news");
84  }
85 
91  public function setUserEditAll($a_val)
92  {
93  $this->user_edit_all = $a_val;
94  }
95 
101  public function getUserEditAll()
102  {
103  return $this->user_edit_all;
104  }
105 
112  public static function getInstance($a_ref_id, $a_include_auto_entries)
113  {
114  return new self($a_ref_id, $a_include_auto_entries);
115  }
116 
122  public function executeCommand()
123  {
124  $ctrl = $this->ctrl;
125 
126  $next_class = $this->ctrl->getNextClass($this);
127  $cmd = $this->ctrl->getCmd("show");
128 
129  switch ($next_class) {
130  case "illikegui":
131  $i = new ilNewsItem($this->news_id);
132  include_once("./Services/Like/classes/class.ilLikeFactoryGUI.php");
133  $likef = new ilLikeFactoryGUI();
134  $like_gui = $likef->widget(array($i->getContextObjId()));
135  $ctrl->saveParameter($this, "news_id");
136  $like_gui->setObject(
137  $i->getContextObjId(),
138  $i->getContextObjType(),
139  $i->getContextSubObjId(),
140  $i->getContextSubObjType(),
141  $this->news_id
142  );
143  $ret = $ctrl->forwardCommand($like_gui);
144  break;
145 
146  case "ilnotegui":
147  $i = new ilNewsItem($this->news_id);
148  $ctrl->saveParameter($this, "news_id");
149  $notes_obj_type = ($i->getContextSubObjType() == "")
150  ? $i->getContextObjType()
151  : $i->getContextSubObjType();
152  $note_gui = new ilNoteGUI(
153  $i->getContextObjId(),
154  $i->getContextSubObjId(),
155  $notes_obj_type,
156  false,
157  $i->getId()
158  );
159  $ret = $ctrl->forwardCommand($note_gui);
160  break;
161 
162  default:
163  if (in_array($cmd, array("show", "save", "update", "loadMore", "remove", "updateNewsItem"))) {
164  $this->$cmd();
165  }
166  }
167  }
168 
175  public function show()
176  {
177  // toolbar
178  if ($this->access->checkAccess("news_add_news", "", $this->ref_id)) {
180  $b->setCaption('news_add_news');
181  $b->setOnClick("return il.News.create();");
182  $b->setPrimary(true);
183  $this->toolbar->addButtonInstance($b);
184  }
185 
186  include_once("./Services/News/classes/class.ilNewsItem.php");
187  $news_item = new ilNewsItem();
188  $news_item->setContextObjId($this->ctrl->getContextObjId());
189  $news_item->setContextObjType($this->ctrl->getContextObjType());
190 
191  $news_data = $news_item->getNewsForRefId(
192  $this->ref_id,
193  false,
194  false,
195  0,
196  true,
197  false,
198  !$this->include_auto_entries,
199  false,
200  null,
201  self::$items_per_load
202  );
203 
204  include_once("./Services/News/Timeline/classes/class.ilTimelineGUI.php");
205  include_once("./Services/News/classes/class.ilNewsTimelineItemGUI.php");
206  $timeline = ilTimelineGUI::getInstance();
207 
208  // get like widget
209  $obj_ids = array_unique(array_map(function ($a) {
210  return $a["context_obj_id"];
211  }, $news_data));
212  include_once("./Services/Like/classes/class.ilLikeFactoryGUI.php");
213  $likef = new ilLikeFactoryGUI();
214  $like_gui = $likef->widget($obj_ids);
215 
216  $js_items = array();
217  foreach ($news_data as $d) {
218  $news_item = new ilNewsItem($d["id"]);
219  $item = ilNewsTimelineItemGUI::getInstance($news_item, $d["ref_id"], $like_gui);
220  $item->setUserEditAll($this->getUserEditAll());
221  $timeline->addItem($item);
222  $js_items[$d["id"]] = array(
223  "id" => $d["id"],
224  "user_id" => $d["user_id"],
225  "title" => $d["title"],
226  "content" => $d["content"] . $d["content_long"],
227  "content_long" => "",
228  "priority" => $d["priority"],
229  "visibility" => $d["visibility"],
230  "content_type" => $d["content_type"],
231  "mob_id" => $d["mob_id"]
232  );
233  }
234 
235  include_once("./Services/JSON/classes/class.ilJsonUtil.php");
236  $this->tpl->addOnloadCode("il.News.setItems(" . ilJsonUtil::encode($js_items) . ");");
237  $this->tpl->addOnloadCode("il.News.setAjaxUrl('" . $this->ctrl->getLinkTarget($this, "", "", true) . "');");
238 
239  if (count($news_data) > 0) {
240  $ttpl = new ilTemplate("tpl.news_timeline.html", true, true, "Services/News");
241  $ttpl->setVariable("NEWS", $timeline->render());
242  $ttpl->setVariable("EDIT_MODAL", $this->getEditModal());
243  $ttpl->setVariable("DELETE_MODAL", $this->getDeleteModal());
244  $ttpl->setVariable("LOADER", ilUtil::getImagePath("loader.svg"));
245  $this->tpl->setContent($ttpl->get());
246  } else {
247  ilUtil::sendInfo($this->lng->txt("news_timline_add_entries_info"));
248  $this->tpl->setContent($this->getEditModal());
249  }
250 
251  $this->lng->toJS("create");
252  $this->lng->toJS("edit");
253  $this->lng->toJS("update");
254  $this->lng->toJS("save");
255 
256  $this->tpl->addJavaScript("./Services/News/js/News.js");
257  include_once("./Services/MediaObjects/classes/class.ilMediaPlayerGUI.php");
259  }
260 
267  public function loadMore()
268  {
269  include_once("./Services/News/classes/class.ilNewsItem.php");
270  $news_item = new ilNewsItem();
271  $news_item->setContextObjId($this->ctrl->getContextObjId());
272  $news_item->setContextObjType($this->ctrl->getContextObjType());
273 
274  $excluded = $_POST["rendered_news"];
275 
276  $news_data = $news_item->getNewsForRefId(
277  $this->ref_id,
278  false,
279  false,
280  0,
281  true,
282  false,
283  !$this->include_auto_entries,
284  false,
285  null,
286  self::$items_per_load,
287  $excluded
288  );
289 
290  include_once("./Services/News/Timeline/classes/class.ilTimelineGUI.php");
291  include_once("./Services/News/classes/class.ilNewsTimelineItemGUI.php");
292  $timeline = ilTimelineGUI::getInstance();
293 
294  // get like widget
295  $obj_ids = array_unique(array_map(function ($a) {
296  return $a["context_obj_id"];
297  }, $news_data));
298  include_once("./Services/Like/classes/class.ilLikeFactoryGUI.php");
299  $likef = new ilLikeFactoryGUI();
300  $like_gui = $likef->widget($obj_ids);
301 
302  $js_items = array();
303  foreach ($news_data as $d) {
304  $news_item = new ilNewsItem($d["id"]);
305  $item = ilNewsTimelineItemGUI::getInstance($news_item, $d["ref_id"], $like_gui);
306  $item->setUserEditAll($this->getUserEditAll());
307  $timeline->addItem($item);
308  $js_items[$d["id"]] = array(
309  "id" => $d["id"],
310  "user_id" => $d["user_id"],
311  "title" => $d["title"],
312  "content" => $d["content"] . $d["content_long"],
313  "content_long" => "",
314  "priority" => $d["priority"],
315  "visibility" => $d["visibility"],
316  "content_type" => $d["content_type"],
317  "mob_id" => $d["mob_id"]
318  );
319  }
320 
321  include_once("./Services/JSON/classes/class.ilJsonUtil.php");
322  $obj = new stdClass();
323  $obj->data = $js_items;
324  $obj->html = $timeline->render(true);
325 
326  echo ilJsonUtil::encode($obj);
327  exit;
328  }
329 
330 
336  protected function updateNewsItem()
337  {
338  if ($_POST["news_action"] == "save") {
339  $this->save();
340  $this->ctrl->redirect($this, "show");
341  }
342  if ($_POST["news_action"] == "update") {
343  $this->update();
344  $this->ctrl->redirect($this, "show");
345  }
346  }
347 
348 
352  public function save()
353  {
354  include_once("./Services/News/classes/class.ilNewsItemGUI.php");
356  if ($form->checkInput()) {
357  $news_item = new ilNewsItem();
358  $news_item->setTitle($form->getInput("news_title"));
359  $news_item->setContent($form->getInput("news_content"));
360  $news_item->setVisibility($form->getInput("news_visibility"));
361  include_once("./Services/News/classes/class.ilNewsItemGUI.php");
363  $news_item->setContentHtml(true);
364  }
365  //$news_item->setContentLong($form->getInput("news_content_long"));
366  $news_item->setContentLong("");
367 
368  $obj_id = ilObject::_lookupObjectId($this->ref_id);
369  $obj_type = ilObject::_lookupType($obj_id);
370  $news_item->setContextObjId($obj_id);
371  $news_item->setContextObjType($obj_type);
372  $news_item->setUserId($this->user->getId());
373 
374  $media = $_FILES["media"];
375  if ($media["name"] != "") {
376  $mob = ilObjMediaObject::_saveTempFileAsMediaObject($media["name"], $media["tmp_name"], true);
377  $news_item->setMobId($mob->getId());
378  }
379 
380  $news_set = new ilSetting("news");
381  if (!$news_set->get("enable_rss_for_internal")) {
382  $news_item->setVisibility("users");
383  }
384 
385  $news_item->create();
386  }
387  }
388 
389 
390 
394  public function update()
395  {
396  include_once("./Services/News/classes/class.ilNewsItemGUI.php");
398  if ($form->checkInput()) {
399  $news_item = new ilNewsItem((int) $_POST["id"]);
400  $news_item->setTitle($form->getInput("news_title"));
401  $news_item->setContent($form->getInput("news_content"));
402  $news_item->setVisibility($form->getInput("news_visibility"));
403  //$news_item->setContentLong($form->getInput("news_content_long"));
404  include_once("./Services/News/classes/class.ilNewsItemGUI.php");
406  $news_item->setContentHtml(true);
407  }
408  $news_item->setContentLong("");
409 
410  $media = $_FILES["media"];
411  $old_mob_id = 0;
412 
413  // delete old media object
414  if ($media["name"] != "" || $_POST["media_delete"] != "") {
415  if ($news_item->getMobId() > 0 && ilObject::_lookupType($news_item->getMobId()) == "mob") {
416  $old_mob_id = $news_item->getMobId();
417  }
418  $news_item->setMobId(0);
419  }
420 
421  if ($media["name"] != "") {
422  $mob = ilObjMediaObject::_saveTempFileAsMediaObject($media["name"], $media["tmp_name"], true);
423  $news_item->setMobId($mob->getId());
424  }
425 
426  $obj_id = ilObject::_lookupObjectId($this->ref_id);
427 
428  if ($news_item->getContextObjId() == $obj_id) {
429  $news_item->setUpdateUserId($this->user->getId());
430  $news_item->update();
431 
432  if ($old_mob_id > 0) {
433  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
434  $old_mob = new ilObjMediaObject($old_mob_id);
435  $old_mob->delete();
436  }
437  }
438  }
439  }
440 
444  public function remove()
445  {
446  include_once("./Services/News/classes/class.ilNewsItemGUI.php");
447  $news_item = new ilNewsItem((int) $_POST["id"]);
448  if ($this->user->getId() == $news_item->getUserId() || $this->getUserEditAll()) {
449  $news_item->delete();
450  }
451  exit;
452  }
453 
459  protected function getEditModal()
460  {
461  include_once("./Services/UIComponent/Modal/classes/class.ilModalGUI.php");
462  $modal = ilModalGUI::getInstance();
463  $modal->setHeading($this->lng->txt("edit"));
464  $modal->setId("ilNewsEditModal");
465  $modal->setType(ilModalGUI::TYPE_LARGE);
466 
467  include_once("./Services/News/classes/class.ilNewsItemGUI.php");
469  $form->setShowTopButtons(false);
470  $form->setFormAction($this->ctrl->getFormAction($this));
471 
472 
473  //
474  $hi = new ilHiddenInputGUI("id");
475  $form->addItem($hi);
476  $act = new ilHiddenInputGUI("news_action");
477  $form->addItem($act);
478  $form->setId("news_edit_form");
479 
480  $modal->setBody($form->getHTML());
481 
482  return $modal->getHTML();
483  }
484 
490  protected function getDeleteModal()
491  {
492  include_once("./Services/UIComponent/Modal/classes/class.ilModalGUI.php");
493  $modal = ilModalGUI::getInstance();
494  $modal->setHeading($this->lng->txt("delete"));
495  $modal->setId("ilNewsDeleteModal");
496  $modal->setType(ilModalGUI::TYPE_LARGE);
497 
498  require_once 'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
499  $confirm = ilSubmitButton::getInstance();
500  $confirm->setCaption("delete");
501  $confirm->setId("news_btn_delete");
502  $modal->addButton($confirm);
503 
504  $cancel = ilSubmitButton::getInstance();
505  $cancel->setCaption("cancel");
506  $cancel->setId("news_btn_cancel_delete");
507  $modal->addButton($cancel);
508 
509  $modal->setBody("<p id='news_delete_news_title'></p>" .
510  $this->tpl->getMessageHTML($this->lng->txt("news_really_delete_news"), "question"));
511 
512  return $modal->getHTML();
513  }
514 }
static isRteActivated()
Is Rte activated.
global $DIC
Definition: saml.php:7
$_GET["client_id"]
static initJavascript($a_tpl=null)
Init Javascript.
static _saveTempFileAsMediaObject($name, $tmp_name, $upload=true)
Create new media object and update page in db and return new media object.
user()
Definition: user.php:4
static getInstance(ilNewsItem $a_news_item, $a_news_ref_id, \ilLikeGUI $a_like_gui)
Get instance.
static _lookupObjectId($a_ref_id)
lookup object id
Notes GUI class.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
This class represents a hidden form property in a property form.
__construct($a_ref_id, $a_include_auto_entries)
Constructor.
static encode($mixed, $suppress_native=false)
if(isset($_POST['submit'])) $form
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
special template class to simplify handling of ITX/PEAR
Class ilObjMediaObject.
getDeleteModal()
Get delete modal.
static _lookupType($a_id, $a_reference=false)
lookup object type
exit
Definition: backend.php:16
static getInstance()
Get instance.
getEditModal()
Get edit modal.
static getInstance()
Get instance.
setUserEditAll($a_val)
Set user can edit other users postings.
$ret
Definition: parser.php:6
$i
Definition: disco.tpl.php:19
static getEditForm($a_mode, $a_ref_id)
FORM NewsItem: Init form.
executeCommand()
Execute command.
$_POST["username"]
for($i=6; $i< 13; $i++) for($i=1; $i< 13; $i++) $d
Definition: date.php:296
getUserEditAll()
Get user can edit other users postings.
static getInstance($a_ref_id, $a_include_auto_entries)
Get instance.