ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilNewsTimelineItemGUI.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 
12 {
16  protected $lng;
17 
21  protected $news_item;
22 
26  protected $obj_def;
27 
31  protected $user;
32 
36  protected $user_edit_all;
37 
42  protected $news_item_ref_id;
43 
48  protected $ref_id;
49 
53  protected $ctrl;
54 
58  protected $like_gui;
59 
66  protected function __construct(ilNewsItem $a_news_item, $a_news_ref_id, \ilLikeGUI $a_like_gui)
67  {
68  global $DIC;
69 
70  $this->like_gui = $a_like_gui;
71 
72  $this->lng = $DIC->language();
73  $this->ctrl = $DIC->ctrl();
74  $this->setNewsItem($a_news_item);
75  $this->user = $DIC->user();
76  $this->obj_def = $DIC["objDefinition"];
77  $this->news_item_ref_id = $a_news_ref_id;
78 
79  $this->ref_id = (int) $_GET["ref_id"];
80  }
81 
87  public static function getInstance(ilNewsItem $a_news_item, $a_news_ref_id, \ilLikeGUI $a_like_gui)
88  {
89  return new self($a_news_item, $a_news_ref_id, $a_like_gui);
90  }
91 
96  public function setNewsItem(ilNewsItem $a_val)
97  {
98  $this->news_item = $a_val;
99  }
100 
105  public function getNewsItem()
106  {
107  return $this->news_item;
108  }
109 
114  public function setUserEditAll($a_val)
115  {
116  $this->user_edit_all = $a_val;
117  }
118 
123  public function getUserEditAll()
124  {
125  return $this->user_edit_all;
126  }
127 
131  public function getDateTime()
132  {
133  $i = $this->getNewsItem();
134  return new ilDateTime($i->getCreationDate(), IL_CAL_DATETIME);
135  }
136 
140  public function render()
141  {
142  $i = $this->getNewsItem();
143  $tpl = new ilTemplate("tpl.timeline_item.html", true, true, "Services/News");
144 
145  include_once("./Services/News/classes/class.ilNewsRendererFactory.php");
146  $news_renderer = ilNewsRendererFactory::getRenderer($i->getContextObjType());
147  $news_renderer->setLanguage($this->lng->getLangKey());
148  $news_renderer->setNewsItem($i, $this->news_item_ref_id);
149 
150  $obj_id = $i->getContextObjId();
151 
152  // edited?
153  if ($i->getCreationDate() != $i->getUpdateDate()) {
154  $tpl->setCurrentBlock("edited");
155  $update_date = new ilDateTime($i->getUpdateDate(), IL_CAL_DATETIME);
156  $tpl->setVariable("TXT_EDITED", $this->lng->txt("cont_news_edited"));
157  if ($i->getUpdateUserId() > 0 && ($i->getUpdateUserId() != $i->getUserId())) {
158  include_once("./Services/User/classes/class.ilUserUtil.php");
159  $tpl->setVariable("TXT_USR_EDITED", ilUserUtil::getNamePresentation(
160  $i->getUpdateUserId(),
161  false,
162  true,
163  $this->ctrl->getLinkTargetByClass("ilnewstimelinegui")
164  ) . " - ");
165  }
166  include_once("./Services/Calendar/classes/class.ilDatePresentation.php");
167  $tpl->setVariable("TIME_EDITED", ilDatePresentation::formatDate($update_date));
168  $tpl->parseCurrentBlock();
169  }
170 
171  // context object link
172  include_once("./Services/Link/classes/class.ilLink.php");
173  if ($this->news_item_ref_id > 0 && $this->ref_id != $this->news_item_ref_id) {
174  $tpl->setCurrentBlock("object");
175  $tpl->setVariable("OBJ_TITLE", ilObject::_lookupTitle($obj_id));
176  $tpl->setVariable("OBJ_IMG", ilObject::_getIcon($obj_id));
177  $tpl->setVariable("OBJ_HREF", $news_renderer->getObjectLink());
178  $tpl->parseCurrentBlock();
179  }
180 
181  // media
182  if ($i->getMobId() > 0 && ilObject::_exists($i->getMobId())) {
183  $media = $this->renderMedia($i);
184  $tpl->setCurrentBlock("player");
185  $tpl->setVariable("PLAYER", $media);
186  $tpl->parseCurrentBlock();
187  }
188 
189  $tpl->setVariable("USER_IMAGE", ilObjUser::_getPersonalPicturePath($i->getUserId(), "small"));
190  $tpl->setVariable(
191  "TITLE",
192  ilNewsItem::determineNewsTitle($i->getContextObjType(), $i->getTitle(), $i->getContentIsLangVar())
193  );
194 
195  // content
196  $tpl->setVariable("CONTENT", $news_renderer->getTimelineContent());
197 
198  include_once("./Services/User/classes/class.ilUserUtil.php");
199  $tpl->setVariable("TXT_USR", ilUserUtil::getNamePresentation(
200  $i->getUserId(),
201  false,
202  true,
203  $this->ctrl->getLinkTargetByClass("ilnewstimelinegui")
204  ));
205 
206  include_once("./Services/Calendar/classes/class.ilDatePresentation.php");
207  $tpl->setVariable("TIME", ilDatePresentation::formatDate($this->getDateTime()));
208 
209  // actions
210  include_once("Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
211  $list = new ilAdvancedSelectionListGUI();
212  $list->setListTitle("");
213  $list->setId("news_tl_act_" . $i->getId());
214  //$list->setSelectionHeaderClass("small");
215  //$list->setItemLinkClass("xsmall");
216  //$list->setLinksMode("il_ContainerItemCommand2");
217  $list->setHeaderIcon(ilAdvancedSelectionListGUI::DOWN_ARROW_DARK);
218  $list->setUseImages(false);
219 
220  if ($i->getPriority() == 1 && ($i->getUserId() == $this->user->getId() || $this->getUserEditAll())) {
221  if (!$news_renderer->preventEditing()) {
222  $list->addItem(
223  $this->lng->txt("edit"),
224  "",
225  "",
226  "",
227  "",
228  "",
229  "",
230  false,
231  "il.News.edit(" . $i->getId() . ");"
232  );
233  $list->addItem(
234  $this->lng->txt("delete"),
235  "",
236  "",
237  "",
238  "",
239  "",
240  "",
241  false,
242  "il.News.delete(" . $i->getId() . ");"
243  );
244  }
245  }
246 
247  $news_renderer->addTimelineActions($list);
248 
249  $tpl->setVariable("ACTIONS", $list->getHTML());
250 
251  return $tpl->get();
252  }
253 
259  protected function renderMedia(ilNewsItem $i)
260  {
261  global $DIC;
262 
263  $media_path = $this->getMediaPath($i);
264  $mime = ilObjMediaObject::getMimeType($media_path);
265 
266  $ui_factory = $DIC->ui()->factory();
267  $ui_renderer = $DIC->ui()->renderer();
268 
269  if (in_array($mime, array("image/jpeg", "image/svg+xml", "image/gif", "image/png"))) {
270  $item_id = "il-news-modal-img-" . $i->getId();
271  $title = basename($media_path);
272  $image = $ui_renderer->render($ui_factory->image()->responsive($media_path, $title));
273 
274  $img_tpl = new ilTemplate("tpl.news_timeline_image_file.html", true, true, "Services/News");
275  $img_tpl->setVariable("ITEM_ID", $item_id);
276  $img_tpl->setVariable("IMAGE", $image);
277 
278  $html = $img_tpl->get();
279  } elseif (in_array($mime, array("audio/mpeg", "audio/ogg", "video/mp4", "video/x-flv", "video/webm"))) {
280  $mp = new ilMediaPlayerGUI();
281  $mp->setFile($media_path);
282  $html = $mp->getMediaPlayerHtml();
283  } else {
284  // download?
285  $html = "";
286  }
287  return $html;
288  }
289 
295  protected function renderMediaModal(ilNewsItem $i)
296  {
297  global $DIC;
298 
299  $media_path = $this->getMediaPath($i);
300  $mime = ilObjMediaObject::getMimeType($media_path);
301 
302  $ui_factory = $DIC->ui()->factory();
303  $ui_renderer = $DIC->ui()->renderer();
304 
305  $modal_html = "";
306 
307  if (in_array($mime, array("image/jpeg", "image/svg+xml", "image/gif", "image/png"))) {
308  $title = basename($media_path);
309  $item_id = "il-news-modal-img-" . $i->getId();
310  $image = $ui_renderer->render($ui_factory->image()->responsive($media_path, $title));
311  $modal = ilModalGUI::getInstance();
312  $modal->setId($item_id);
313  $modal->setType(ilModalGUI::TYPE_LARGE);
314  $modal->setBody($image);
315  $modal->setHeading($title);
316  $modal_html = $modal->getHTML();
317  }
318  return $modal_html;
319  }
320 
325  public function renderFooter()
326  {
327  $i = $this->getNewsItem();
328 
329  // like
330  $this->ctrl->setParameterByClass("ilnewstimelinegui", "news_id", $i->getId());
331  $this->like_gui->setObject(
332  $i->getContextObjId(),
333  $i->getContextObjType(),
334  $i->getContextSubObjId(),
335  $i->getContextSubObjType(),
336  $i->getId()
337  );
338  $html = $this->ctrl->getHTML($this->like_gui);
339 
340  // comments
341  $notes_obj_type = ($i->getContextSubObjType() == "")
342  ? $i->getContextObjType()
343  : $i->getContextSubObjType();
344  $note_gui = new ilNoteGUI(
345  $i->getContextObjId(),
346  $i->getContextSubObjId(),
347  $notes_obj_type,
348  false,
349  $i->getId()
350  );
351  $note_gui->setDefaultCommand("getWidget");
352 
353  //ilNoteGUI::getListCommentsJSCall($this->ajax_hash, $redraw_js)
354  $html .= $this->ctrl->getHTML($note_gui);
355 
356  $this->ctrl->setParameterByClass("ilnewstimelinegui", "news_id", $_GET["news_id"]);
357 
358  return $html . $this->renderMediaModal($i);
359  }
360 
365  protected function getMediaPath(ilNewsItem $i)
366  {
367  $media_path = "";
368  if ($i->getMobId() > 0) {
369  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
370  include_once("./Services/MediaObjects/classes/class.ilMediaPlayerGUI.php");
371  $mob = new ilObjMediaObject($i->getMobId());
372  $med = $mob->getMediaItem("Standard");
373  if (strcasecmp("Reference", $med->getLocationType()) == 0) {
374  $media_path = $med->getLocation();
375  } else {
376  $media_path = ilObjMediaObject::_getURL($mob->getId()) . "/" . $med->getLocation();
377  }
378  }
379  return $media_path;
380  }
381 }
static _getIcon( $a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
Single news timeline item.
renderMediaModal(ilNewsItem $i)
Render media.
getUserEditAll()
Get user can edit other users postings.
getDateTime()
Get datetime.ilDateTime timestamp
getMediaItem($a_purpose)
get item for media purpose
static getMimeType($a_file, $a_external=null)
get mime type for file
const IL_CAL_DATETIME
getMobId()
Get MobId.
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data
$_GET["client_id"]
render()
Render item.string html
static _lookupTitle($a_id)
lookup object title
renderMedia(ilNewsItem $i)
Render media.
static _getURL($a_mob_id)
get directory for files of media object (static)
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date public.
__construct(ilNewsItem $a_news_item, $a_news_ref_id, \ilLikeGUI $a_like_gui)
Constructor.
user()
Definition: user.php:4
static getInstance(ilNewsItem $a_news_item, $a_news_ref_id, \ilLikeGUI $a_like_gui)
Get instance.
Notes GUI class.
getId()
Get Id.
global $DIC
Definition: goto.php:24
static _getPersonalPicturePath( $a_usr_id, $a_size="small", $a_force_pic=false, $a_prevent_no_photo_image=false, $html_export=false)
Get path to personal picture.
Class ilObjMediaObject.
Interface for timeline items.
setUserEditAll($a_val)
Set user can edit other users postings.
static getNamePresentation( $a_user_id, $a_user_image=false, $a_profile_link=false, $a_profile_back_link="", $a_force_first_lastname=false, $a_omit_login=false, $a_sortable=true, $a_return_data_array=false, $a_ctrl_path="ilpublicuserprofilegui")
Default behaviour is:
static getInstance()
Get instance.
User interface for media player.
static getRenderer($a_context_obj_type)
Get renderer.
static determineNewsTitle( $a_context_obj_type, $a_title, $a_content_is_lang_var, $a_agg_ref_id=0, $a_aggregation="")
Determine title for news item entry.
if($DIC->http() ->request() ->getMethod()=="GET" &&isset($DIC->http() ->request() ->getQueryParams()['tex'])) $tpl
Definition: latex.php:41
User interface for like feature.
setNewsItem(ilNewsItem $a_val)
Set news item.
$i
Definition: metadata.php:24
setDefaultCommand($a_val)
Set default command.