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(),
188 $this->include_auto_entries,
189 self::$items_per_load,
197 if ($this->getEnableAddNews() &&
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);
205 $this->readNewsData();
210 $obj_ids = array_unique(array_map(
static function (array
$a):
int {
211 return (
int)
$a[
"context_obj_id"];
212 }, $this->news_data));
214 $like_gui = $likef->widget($obj_ids);
217 foreach ($this->news_data as
$d) {
220 $item->setUserEditAll($this->getUserEditAll());
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());
241 $this->renderDeleteModal($ttpl);
242 $this->renderEditModal($form, $ttpl);
244 $this->tpl->setContent($ttpl->get());
245 $html = $ttpl->get();
247 if ($this->getEnableAddNews()) {
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"));
250 $this->renderEditModal($form, $ttpl);
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();
284 $this->readNewsData($excluded);
289 $obj_ids = array_unique(array_map(
static function (
$a):
int {
290 return (
int)
$a[
"context_obj_id"];
291 }, $this->news_data));
293 $like_gui = $likef->widget($obj_ids);
296 foreach ($this->news_data as
$d) {
299 $item->setUserEditAll($this->getUserEditAll());
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"]
314 $obj =
new stdClass();
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());
440 if ($this->getUserEditAll() || $this->
user->getId() === $news_item->getUserId()) {
441 $news_item->delete();
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"]));
486 $edit_modal = $this->getEditModal($form);
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);
setVariable($variable, $value='')
Sets a variable value.
Stream factory which enables the user to create streams without the knowledge of the concrete class.
show()
returns the content of IniFile
Class ilCtrl provides processing control methods.
saveParameter(object $a_gui_obj, $a_parameter)
@inheritDoc
forwardCommand(object $a_gui_object)
@inheritDoc
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getEditForm(int $a_mode, int $a_ref_id)
A news item can be created by different sources.
ilGlobalTemplateInterface $tpl
show(?ilPropertyFormGUI $form=null)
ILIAS HTTP Services $http
renderDeleteModal(ilTemplate $tpl)
ILIAS News InternalGUIService $gui
ILIAS News Timeline TimelineManager $manager
static getInstance(int $a_ref_id, bool $a_include_auto_entries)
ILIAS Notes Service $notes
bool $include_auto_entries
setEnableAddNews(bool $a_val)
setUserEditAll(bool $a_val)
Set user can edit other users postings.
static int $items_per_load
getHTML(?ilPropertyFormGUI $form=null)
getUserEditAll()
Get user can edit other users postings.
renderEditModal(?ilPropertyFormGUI $form, ilTemplate $tpl)
StandardGUIRequest $std_request
__construct(int $a_ref_id, bool $a_include_auto_entries)
readNewsData($excluded=[])
static getInstance(ilNewsItem $a_news_item, int $a_news_ref_id, ilLikeGUI $a_like_gui)
static _lookupObjectId(int $ref_id)
static _lookupType(int $id, bool $reference=false)
special template class to simplify handling of ITX/PEAR
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
static http()
Fetches the global http state from ILIAS.
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
catch(ilCmiXapiException $e) send($response)