31 protected \ILIAS\News\InternalGUIService
$gui;
33 protected \ILIAS\News\Timeline\TimelineManager
$manager;
34 protected \ILIAS\DI\UIServices
$ui;
35 protected \ILIAS\Notes\Service
$notes;
36 protected \ILIAS\HTTP\Services
$http;
54 bool $a_include_auto_entries
58 $this->
ctrl = $DIC->ctrl();
59 $this->tpl = $DIC[
"tpl"];
60 $this->ref_id = $a_ref_id;
61 $this->
lng = $DIC->language();
62 $this->
toolbar = $DIC->toolbar();
63 $this->
user = $DIC->user();
64 $this->include_auto_entries = $a_include_auto_entries;
65 $this->
access = $DIC->access();
66 $this->
http = $DIC->http();
67 $this->notes = $DIC->notes();
69 $this->std_request = $DIC->news()
74 $this->news_id = $this->std_request->getNewsId();
76 $this->
lng->loadLanguageModule(
"news");
77 $this->
lng->loadLanguageModule(
"cont");
78 $this->
ui = $DIC->ui();
79 $this->manager = $DIC->news()->internal()->domain()->timeline();
80 $this->gui = $DIC->news()->internal()->gui();
85 $this->enable_add_news = $a_val;
95 $this->period = $a_val;
109 $this->user_edit_all = $a_val;
122 bool $a_include_auto_entries
124 return new self($a_ref_id, $a_include_auto_entries);
134 $next_class = $this->
ctrl->getNextClass($this);
135 $cmd = $this->
ctrl->getCmd(
"show");
137 switch ($next_class) {
141 $like_gui = $likef->widget([$i->getContextObjId()]);
143 $like_gui->setObject(
144 $i->getContextObjId(),
145 $i->getContextObjType(),
146 $i->getContextSubObjId(),
147 $i->getContextSubObjType(),
153 case strtolower(ilCommentGUI::class):
156 $notes_obj_type = ($i->getContextSubObjType() ==
"")
157 ? $i->getContextObjType()
158 : $i->getContextSubObjType();
159 $comment_gui = $this->notes->gui()->getCommentsGUI(
160 $i->getContextObjId(),
161 $i->getContextSubObjId(),
165 $comment_gui->setShowHeader(
false);
170 if (in_array($cmd, [
"show",
"save",
"update",
"loadMore",
"remove",
"updateNewsItem",
"downloadMob"])) {
178 $this->tpl->setContent($this->
getHTML($form));
183 $this->news_data = $this->manager->getNewsData(
185 $this->
ctrl->getContextObjId(),
186 $this->
ctrl->getContextObjType(),
189 self::$items_per_load,
198 $this->
access->checkAccess(
"news_add_news",
"", $this->ref_id)) {
200 $this->
lng->txt(
"news_add_news"),
202 )->onClick(
"return il.News.create();")->primary()->toToolbar(
true, $this->
toolbar);
210 $obj_ids = array_unique(
array_map(
static function (array
$a):
int {
211 return (
int) $a[
"context_obj_id"];
214 $like_gui = $likef->widget($obj_ids);
217 foreach ($this->news_data as
$d) {
221 $timeline->addItem($item);
222 $js_items[$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"]
235 $this->tpl->addOnLoadCode(
"il.News.setItems(" . json_encode($js_items, JSON_THROW_ON_ERROR) .
");");
236 $this->tpl->addOnLoadCode(
"il.News.setAjaxUrl('" . $this->
ctrl->getLinkTarget($this,
"",
"",
true) .
"');");
238 if (count($this->news_data) > 0) {
239 $ttpl =
new ilTemplate(
"tpl.news_timeline.html",
true,
true,
"components/ILIAS/News");
240 $ttpl->setVariable(
"NEWS", $timeline->render());
244 $this->tpl->setContent($ttpl->get());
245 $html = $ttpl->get();
248 $ttpl =
new ilTemplate(
"tpl.news_timeline.html",
true,
true,
"components/ILIAS/News");
249 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
"news_timline_add_entries_info"));
251 $this->tpl->setContent($ttpl->get());
252 $html = $ttpl->get();
254 $mess = $this->
ui->factory()->messageBox()->info(
255 $this->
lng->txt(
"news_timline_no_entries")
257 $html = $this->
ui->renderer()->render($mess);
261 $this->
lng->toJS(
"create");
262 $this->
lng->toJS(
"edit");
263 $this->
lng->toJS(
"update");
264 $this->
lng->toJS(
"save");
268 $this->tpl->addJavaScript(
"../components/ILIAS/News/resources/News.js");
270 $this->tpl->addJavaScript(
"assets/js/News.js");
272 $this->notes->gui()->initJavascript();
279 $news_item->setContextObjId($this->
ctrl->getContextObjId());
280 $news_item->setContextObjType($this->
ctrl->getContextObjType());
282 $excluded = $this->std_request->getRenderedNews();
289 $obj_ids = array_unique(
array_map(
static function (
$a):
int {
290 return (
int)
$a[
"context_obj_id"];
293 $like_gui = $likef->widget($obj_ids);
296 foreach ($this->news_data as
$d) {
300 $timeline->addItem($item);
301 $js_items[$d[
"id"]] = [
303 "user_id" => $d[
"user_id"],
304 "title" => $d[
"title"],
305 "content" => $d[
"content"] . $d[
"content_long"],
306 "content_long" =>
"",
307 "priority" => $d[
"priority"],
308 "visibility" => $d[
"visibility"],
309 "content_type" => $d[
"content_type"],
310 "mob_id" => $d[
"mob_id"]
315 $obj->data = $js_items;
316 $obj->html = $timeline->render(
true);
318 $this->
send(json_encode($obj, JSON_THROW_ON_ERROR));
324 protected function send(
string $output): void
326 $this->
http->saveResponse($this->
http->response()->withBody(
327 Streams::ofString($output)
329 $this->
http->sendResponse();
330 $this->
http->close();
335 if ($this->std_request->getNewsAction() ===
"save") {
338 if ($this->std_request->getNewsAction() ===
"update") {
348 if ($form->checkInput()) {
350 $news_item->setTitle($form->getInput(
"news_title"));
351 $news_item->setContent($form->getInput(
"news_content"));
352 $news_item->setVisibility($form->getInput(
"news_visibility"));
354 $news_item->setContentHtml(
true);
357 $news_item->setContentLong(
"");
361 $news_item->setContextObjId($obj_id);
362 $news_item->setContextObjType($obj_type);
363 $news_item->setUserId($this->
user->getId());
365 $media = $_FILES[
"media"];
366 if ($media[
"name"] !=
"") {
368 $news_item->setMobId($mob->getId());
372 if (!$news_set->get(
"enable_rss_for_internal")) {
373 $news_item->setVisibility(
"users");
375 $news_item->create();
376 $this->
ctrl->redirect($this,
"show");
378 $form->setValuesByPost();
380 $this->tpl->addOnLoadCode(
"il.News.create(true);");
390 if ($form->checkInput()) {
391 $news_item =
new ilNewsItem($this->std_request->getId());
392 $news_item->
setTitle($form->getInput(
"news_title"));
393 $news_item->setContent($form->getInput(
"news_content"));
394 $news_item->setVisibility($form->getInput(
"news_visibility"));
397 $news_item->setContentHtml(
true);
399 $news_item->setContentLong(
"");
401 $media = $_FILES[
"media"];
405 if ($media[
"name"] !=
"" || $this->std_request->getDeleteMedia() > 0) {
407 $old_mob_id = $news_item->getMobId();
409 $news_item->setMobId(0);
412 if ($media[
"name"] !=
"") {
414 $news_item->setMobId($mob->getId());
419 if ($news_item->getContextObjId() === $obj_id) {
420 $news_item->setUpdateUserId($this->
user->getId());
421 $news_item->update();
423 if ($old_mob_id > 0) {
428 $this->
ctrl->redirect($this,
"show");
430 $form->setValuesByPost();
432 $this->tpl->addOnLoadCode(
"il.News.edit(" . $this->std_request->getNewsId() .
", true);");
437 public function remove():
void 439 $news_item =
new ilNewsItem($this->std_request->getNewsId());
448 if (is_null($form)) {
451 $form->setShowTopButtons(
false);
452 $form->setFormAction($this->
ctrl->getFormAction($this));
459 $form->addItem($act);
460 $form->setId(
"news_edit_form");
462 $modal = $this->gui->ui()->factory()->modal()->roundtrip(
463 $this->
lng->txt(
"edit"),
464 $this->
ui->factory()->legacy()->content($form->getHTML())
472 $mbox = $this->gui->ui()->factory()->messageBox()->confirmation(
473 $this->
lng->txt(
"news_really_delete_news")
475 $title = $this->gui->ui()->factory()->legacy()->content(
"<p id='news_delete_news_title'></p>");
476 $modal = $this->gui->modal($this->
lng->txt(
"delete"))
477 ->content([$title, $mbox])
478 ->button($this->
lng->txt(
"delete"),
"#",
false,
"il.News.remove(); return false;");
479 $c = $modal->getTriggerButtonComponents(
"");
480 $tpl->
setVariable(
"DELETE_MODAL", $this->gui->ui()->renderer()->render(
$c[
"modal"]));
487 $signal = $edit_modal->getShowSignal()->getId();
488 $close_signal = $edit_modal->getCloseSignal()->getId();
490 $tpl->
setVariable(
"CLOSE_EDIT_SIGNAL", $close_signal);
491 $tpl->
setVariable(
"EDIT_MODAL", $this->
ui->renderer()->render($edit_modal));
496 $news_id = $this->std_request->getNewsId();
498 $news->deliverMobFile(
"Standard",
true);
ILIAS Notes Service $notes
static getInstance(int $a_ref_id, bool $a_include_auto_entries)
setEnableAddNews(bool $a_val)
getHTML(?ilPropertyFormGUI $form=null)
Interface Observer Contains several chained tasks and infos about them.
bool $include_auto_entries
show(?ilPropertyFormGUI $form=null)
ILIAS News Timeline TimelineManager $manager
forwardCommand(object $a_gui_object)
setUserEditAll(bool $a_val)
Set user can edit other users postings.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
ILIAS HTTP Services $http
static int $items_per_load
static http()
Fetches the global http state from ILIAS.
setVariable($variable, $value='')
Sets a variable value.
setTitle(string $a_title)
renderDeleteModal(ilTemplate $tpl)
static getEditForm(int $a_mode, int $a_ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
ilGlobalTemplateInterface $tpl
StandardGUIRequest $std_request
readNewsData($excluded=[])
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
static _lookupObjectId(int $ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
A news item can be created by different sources.
static getInstance(ilNewsItem $a_news_item, int $a_news_ref_id, ilLikeGUI $a_like_gui)
saveParameter(object $a_gui_obj, $a_parameter)
__construct(int $a_ref_id, bool $a_include_auto_entries)
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
static _lookupType(int $id, bool $reference=false)
ILIAS News InternalGUIService $gui
getUserEditAll()
Get user can edit other users postings.
renderEditModal(?ilPropertyFormGUI $form, ilTemplate $tpl)
delete()
Delete news item.