ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilBlogPostingGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
28 
36 {
40  protected \ILIAS\Notes\Service $notes;
43  protected ilTabsGUI $tabs;
45  protected ilSetting $settings;
47  protected int $node_id;
49  protected ?object $access_handler = null;
50  protected bool $enable_public_notes = false;
51  protected bool $may_contribute = false;
52  protected bool $fetchall = false;
53  protected int $blpg = 0;
54  protected string $term = "";
55  public bool $add_date = false;
56 
57  public function __construct(
58  int $a_node_id,
59  ?object $a_access_handler = null,
60  int $a_id = 0,
61  int $a_old_nr = 0,
62  bool $a_enable_public_notes = true,
63  bool $a_may_contribute = true,
64  int $a_style_sheet_id = 0
65  ) {
66  global $DIC;
67 
68  $service = $DIC->blog()->internal();
69  $this->domain = $service->domain();
70  $this->blog_gui = $DIC->blog()->internal()->gui();
71 
72  $this->tabs = $this->blog_gui->tabs();
73  $this->locator = $this->blog_gui->locator();
74  $this->settings = $this->domain->settings();
75  $this->user = $this->domain->user();
76  $tpl = $this->blog_gui->ui()->mainTemplate();
77  $lng = $this->domain->lng();
78  $this->blog_request = $this->blog_gui->standardRequest();
79  $this->lom_services = $DIC->learningObjectMetadata();
80 
81  $lng->loadLanguageModule("blog");
82 
83  $this->node_id = $a_node_id;
84  $this->access_handler = $a_access_handler;
85  $this->enable_public_notes = $a_enable_public_notes;
86 
87  parent::__construct("blp", $a_id, $a_old_nr);
88 
89  // needed for notification
90  $this->getBlogPosting()->setBlogNodeId($this->node_id, $this->isInWorkspace());
91  $this->getBlogPosting()->getPageConfig()->setEditLockSupport(!$this->isInWorkspace());
92 
93  // #11151
94  $this->may_contribute = $a_may_contribute;
95  $this->setEnableEditing($a_may_contribute);
96 
97  // content style
98 
99  $tpl->setCurrentBlock("SyntaxStyle");
100  $tpl->setVariable(
101  "LOCATION_SYNTAX_STYLESHEET",
103  );
105 
106  // needed for editor
107  $this->setStyleId($a_style_sheet_id);
108 
109  $this->blpg = $this->blog_request->getBlogPage();
110  $this->fetchall = $this->blog_request->getFetchAll();
111  $this->term = $this->blog_request->getTerm();
112 
113  $this->reading_time_manager = new ReadingTimeManager();
114  $this->notes = $DIC->notes();
115  $this->profile_gui = $DIC->blog()->internal()->gui()->profile();
116  $this->posting_manager = $DIC->blog()->internal()->domain()->posting();
117  }
118 
119  public function executeCommand(): string
120  {
121  $ilCtrl = $this->ctrl;
122  $ilLocator = $this->locator;
123  $tpl = $this->tpl;
124 
125  $next_class = $ilCtrl->getNextClass($this);
126 
127  $posting = $this->getBlogPosting();
128  $ilCtrl->setParameter($this, "blpg", $posting->getId());
129 
130  switch ($next_class) {
131  case "ilcommentgui":
132  // $this->getTabs();
133  // $ilTabs->setTabActive("pg");
134  return $this->previewFullscreen();
135 
136  default:
137  if ($ilCtrl->getCmd() === "deactivatePageToList") {
138  $this->tpl->setOnScreenMessage('success', $this->lng->txt("blog_draft_info"), true);
139  } elseif ($ilCtrl->getCmd() === "activatePageToList") {
140  $this->tpl->setOnScreenMessage('success', $this->lng->txt("blog_new_posting_info"), true);
141  }
142  $this->setPresentationTitle($posting->getTitle());
143 
144  $tpl->setTitle(ilObject::_lookupTitle($this->getBlogPosting()->getBlogId()) . ": " . // #15017
145  $posting->getTitle());
147  ilUtil::getImagePath("standard/icon_blog.svg"),
148  $this->lng->txt("obj_blog")
149  ); // #12879
150 
151  $ilLocator->addItem(
152  $posting->getTitle(),
153  $ilCtrl->getLinkTarget($this, "preview")
154  );
155  return parent::executeCommand();
156  }
157  }
158 
159  public function setBlogPosting(ilBlogPosting $a_posting): void
160  {
161  $this->setPageObject($a_posting);
162  }
163 
164  public function getBlogPosting(): ilBlogPosting
165  {
167  $bp = $this->getPageObject();
168  return $bp;
169  }
170 
171  protected function checkAccess(string $a_cmd): bool
172  {
173  if ($a_cmd === "contribute") {
174  return $this->may_contribute;
175  }
176  return $this->access_handler->checkAccess($a_cmd, "", $this->node_id);
177  }
178 
179  public function preview(
180  ?string $a_mode = null
181  ): string {
182  global $DIC;
183  $ilCtrl = $this->ctrl;
184  $tpl = $this->tpl;
186 
187  $toolbar = $DIC->toolbar();
188  $append = "";
189 
190  $this->getBlogPosting()->increaseViewCnt();
191 
192  $wtpl = new ilTemplate(
193  "tpl.blog_page_view_main_column.html",
194  true,
195  true,
196  "components/ILIAS/Blog"
197  );
198 
199  // page commands
200  if (!$a_mode) {
201  if (!$this->getEnableEditing()) {
202  $this->ctrl->redirect($this, "previewFullscreen");
203  }
204  } else {
205  $callback = array($this, "observeNoteAction");
206 
207  // notes
208 
209  $may_delete_comments = ($this->checkAccess("contribute") &&
210  $ilSetting->get("comments_del_tutor", '1'));
211 
212  //$wtpl->setVariable("TOOLBAR", $toolbar->getHTML());
213 
214  $wtpl->setVariable("NOTES", $this->getNotesHTML(
215  $this->getBlogPosting(),
216  false,
217  $this->enable_public_notes,
218  $may_delete_comments,
219  $callback
220  ));
221  }
222  // permanent link
223  $ref_id = $this->isInWorkspace()
224  ? 0
225  : $this->node_id;
226  $wsp_id = $this->isInWorkspace()
227  ? $this->node_id
228  : 0;
229  $this->blog_gui->permanentLink($ref_id, $wsp_id)->setPermanentLink($this->blpg);
230 
231  $wtpl->setVariable("PAGE", parent::preview());
232 
233  $tpl->setLoginTargetPar("blog_" . $this->node_id . $append);
234 
235  $ilCtrl->setParameter($this, "blpg", $this->getBlogPosting()->getId());
236 
237  return $wtpl->get();
238  }
239 
240 
244  public function previewFullscreen(): string
245  {
246  $this->add_date = true;
247  return $this->preview("fullscreen");
248  }
249 
250  public function showPage(
251  string $a_title = ""
252  ): string {
253  $this->setTemplateOutput(false);
254 
255  $this->setPresentationTitle("");
256  if (!$this->getAbstractOnly() && !$this->showPageHeading()) {
257  if ($a_title !== "") {
258  $this->setPresentationTitle($a_title);
259  } else {
260  $this->setPresentationTitle($this->getBlogPosting()->getTitle());
261  }
262  }
263  $this->getBlogPosting()->increaseViewCnt();
264  return parent::showPage();
265  }
266 
270  protected function isInWorkspace(): bool
271  {
272  $class = '';
273  if (is_object($this->access_handler)) {
274  $class = get_class($this->access_handler);
275  }
276 
277  return (bool) stristr($class, "workspace");
278  }
279 
283  public function postOutputProcessing(
284  string $a_output
285  ): string {
286  // #8626/#9370
287  if ($this->showPageHeading()) {
288  $a_output = $this->getPageHeading() . $a_output;
289  }
290 
291  return $a_output;
292  }
293 
294  protected function showPageHeading(): bool
295  {
296  if (!$this->getAbstractOnly() && $this->add_date) {
297  return true;
298  }
299 
300  return false;
301  }
302 
308  protected function getPageHeading(): string
309  {
310  $author = "";
311  if (!$this->isInWorkspace()) {
312  $authors = array();
313  $author_id = $this->getBlogPosting()->getAuthor();
314  if ($author_id) {
315  $authors[] = $this->profile_gui->getNamePresentation($author_id);
316  }
317 
318  foreach (ilBlogPosting::getPageContributors("blp", $this->getBlogPosting()->getId()) as $editor) {
319  if ($editor["user_id"] != $author_id) {
320  $authors[] = $this->profile_gui->getNamePresentation($editor["user_id"]);
321  }
322  }
323 
324  if ($authors) {
325  $author = implode(", ", $authors) . " - ";
326  }
327  }
330  $tpl = new ilTemplate("tpl.posting_head.html", true, true, "components/ILIAS/Blog");
331 
332  // reading time
333  $reading_time = $this->reading_time_manager->getReadingTime(
334  $this->getBlogPosting()->getParentId(),
335  $this->getBlogPosting()->getId()
336  );
337  if (!is_null($reading_time)) {
338  $this->lng->loadLanguageModule("copg");
339  $tpl->setCurrentBlock("reading_time");
340  $tpl->setVariable(
341  "READING_TIME",
342  $this->lng->txt("copg_est_reading_time") . ": " .
343  sprintf($this->lng->txt("copg_x_minutes"), $reading_time)
344  );
346  }
347 
348  $tpl->setVariable("TITLE", $this->getBlogPosting()->getTitle());
349  $tpl->setVariable(
350  "DATETIME",
351  $author . ilDatePresentation::formatDate($this->getBlogPosting()->getCreated())
352  );
354  return $tpl->get();
355  }
356 
357  public function getTabs(string $a_activate = ""): void
358  {
359  $ilCtrl = $this->ctrl;
360 
361  $ilCtrl->setParameterByClass("ilobjbloggui", "blpg", $this->getBlogPosting()->getId());
362 
363  parent::getTabs($a_activate);
364  }
365 
366  public function deleteBlogPostingConfirmationScreen(): void
367  {
368  $tpl = $this->tpl;
369  $ilCtrl = $this->ctrl;
370  $lng = $this->lng;
371 
372  if ($this->checkAccess("write") || $this->checkAccess("contribute")) {
373  $confirmation_gui = new ilConfirmationGUI();
374  $confirmation_gui->setFormAction($ilCtrl->getFormAction($this));
375  $confirmation_gui->setHeaderText($lng->txt("blog_posting_deletion_confirmation"));
376  $confirmation_gui->setCancel($lng->txt("cancel"), "cancelBlogPostingDeletion");
377  $confirmation_gui->setConfirm($lng->txt("delete"), "confirmBlogPostingDeletion");
378 
379  $dtpl = new ilTemplate(
380  "tpl.blog_posting_deletion_confirmation.html",
381  true,
382  true,
383  "components/ILIAS/Blog"
384  );
385 
386  $dtpl->setVariable("PAGE_TITLE", $this->getBlogPosting()->getTitle());
387 
388  // notes/comments
389  $cnt_note_users = $this->notes->domain()->getUserCount(
390  $this->getBlogPosting()->getParentId(),
391  $this->getBlogPosting()->getId(),
392  "wpg"
393  );
394  $dtpl->setVariable(
395  "TXT_NUMBER_USERS_NOTES_OR_COMMENTS",
396  $lng->txt("blog_number_users_notes_or_comments")
397  );
398  $dtpl->setVariable("TXT_NR_NOTES_COMMENTS", $cnt_note_users);
399 
400  $confirmation_gui->addItem("", "", $dtpl->get());
401 
402  $tpl->setContent($confirmation_gui->getHTML());
403  }
404  }
405 
406  public function cancelBlogPostingDeletion(): void
407  {
408  $ilCtrl = $this->ctrl;
409 
410  $ilCtrl->setParameterByClass("ilobjbloggui", "blpg", ""); // #14363
411  $ilCtrl->redirectByClass("ilobjbloggui", "render");
412  }
413 
414  public function confirmBlogPostingDeletion(): void
415  {
416  $ilCtrl = $this->ctrl;
417  $lng = $this->lng;
418 
419  if ($this->checkAccess("write") || $this->checkAccess("contribute")) {
420  // delete all md keywords
421  $this->lom_services->deleteAll(
422  $this->getBlogPosting()->getBlogId(),
423  $this->getBlogPosting()->getId(),
424  "blp"
425  );
426 
427  $this->getBlogPosting()->delete();
428  $this->tpl->setOnScreenMessage('success', $lng->txt("blog_posting_deleted"), true);
429  }
430 
431  $ilCtrl->setParameterByClass("ilobjbloggui", "blpg", ""); // #14363
432  $ilCtrl->redirectByClass("ilobjbloggui", "render");
433  }
434 
435  public function editTitle(?ilPropertyFormGUI $a_form = null): void
436  {
437  $tpl = $this->tpl;
438  $ilTabs = $this->tabs;
439 
440  $ilTabs->clearTargets();
441  $ilTabs->setBackTarget($this->lng->txt("back"), $this->ctrl->getLinkTargetByClass("ilobjblogGUI"));
442 
443  $ilTabs->activateTab("edit");
444 
445  if (!$a_form) {
446  $a_form = $this->initTitleForm();
447  }
448 
449  $tpl->setContent($a_form->getHTML());
450  }
451 
452  public function updateTitle(): void
453  {
454  $lng = $this->lng;
455 
456  $form = $this->initTitleForm();
457  if ($form->checkInput()) {
458  if ($this->checkAccess("write") || $this->checkAccess("contribute")) {
459  $page = $this->getPageObject();
460  $page->setTitle($form->getInput("title"));
461  $page->update();
462  $this->domain->news()->handle($page, true);
463 
464  $this->tpl->setOnScreenMessage('success', $lng->txt("settings_saved"), true);
465  //$ilCtrl->redirect($this, "preview");
466  $this->ctrl->redirectByClass("ilObjBlogGUI", "");
467  }
468  }
469 
471  $this->editTitle($form);
472  }
473 
474  public function initTitleForm(): ilPropertyFormGUI
475  {
476  $lng = $this->lng;
477  $ilCtrl = $this->ctrl;
478 
479  $form = new ilPropertyFormGUI();
480  $form->setFormAction($ilCtrl->getFormAction($this));
481  $form->setTitle($lng->txt('blog_rename_posting'));
482 
483  $title = new ilTextInputGUI($lng->txt("title"), "title");
484  $title->setRequired(true);
485  $form->addItem($title);
486 
487  $title->setValue($this->getPageObject()->getTitle());
488 
489  $form->addCommandButton('updateTitle', $lng->txt('save'));
490  $form->addCommandButton('cancelEdit', $lng->txt('cancel'));
491 
492  return $form;
493  }
494 
495  public function editDate(?ilPropertyFormGUI $a_form = null): void
496  {
497  $tpl = $this->tpl;
498  $ilTabs = $this->tabs;
499 
500  $ilTabs->clearTargets();
501  $ilTabs->setBackTarget($this->lng->txt("back"), $this->ctrl->getLinkTargetByClass("ilobjblogGUI"));
502 
503  $ilTabs->activateTab("edit");
504 
505  if (!$a_form) {
506  $a_form = $this->initDateForm();
507  }
508 
509  $tpl->setContent($a_form->getHTML());
510  }
511 
512  public function updateDate(): void
513  {
514  $lng = $this->lng;
515 
516  $form = $this->initDateForm();
517  if ($form->checkInput()) {
518  if ($this->checkAccess("write") || $this->checkAccess("contribute")) {
519  $dt = $form->getItemByPostVar("date");
520  $dt = $dt->getDate();
521 
522  $page = $this->getPageObject();
523  $page->setCreated($dt);
524  $page->update();
525 
526  $this->tpl->setOnScreenMessage('success', $lng->txt("settings_saved"), true);
527  //$ilCtrl->redirect($this, "preview");
528  $this->ctrl->redirectByClass("ilObjBlogGUI", "");
529  }
530  }
531 
533  $this->editTitle($form);
534  }
535 
536  public function initDateForm(): ilPropertyFormGUI
537  {
538  $lng = $this->lng;
539  $ilCtrl = $this->ctrl;
540 
541  $form = new ilPropertyFormGUI();
542  $form->setFormAction($ilCtrl->getFormAction($this));
543  $form->setTitle($lng->txt('blog_edit_date'));
544 
545  $date = new ilDateTimeInputGUI($lng->txt("date"), "date");
546  $date->setRequired(true);
547  $date->setShowTime(true);
548  $date->setInfo($lng->txt('blog_edit_date_info'));
549  $form->addItem($date);
550 
551  $date->setDate($this->getPageObject()->getCreated());
552 
553  $form->addCommandButton('updateDate', $lng->txt('save'));
554  $form->addCommandButton('cancelEdit', $lng->txt('cancel'));
555 
556  return $form;
557  }
558 
559  protected function cancelEdit(): void
560  {
561  $this->ctrl->redirectByClass("ilObjBlogGUI", "");
562  }
563 
564  public function observeNoteAction(
565  int $a_blog_id,
566  int $a_posting_id,
567  string $a_type,
568  string $a_action,
569  int $a_note_id
570  ): void {
571  // #10040 - get note text
572  $note = $this->notes->domain()->getById($a_note_id);
573  $text = $note->getText();
574  ilObjBlog::sendNotification("comment", $this->isInWorkspace(), $this->node_id, $a_posting_id, $text);
575  }
576 
577  public function getActivationCaptions(): array
578  {
579  $lng = $this->lng;
580 
581  return array("deactivatePage" => $lng->txt("blog_toggle_draft"),
582  "activatePage" => $lng->txt("blog_toggle_final"));
583  }
584 
585  public function deactivatePageToList(): void
586  {
587  $this->deactivatePage(true);
588  }
589 
590  public function deactivatePage(bool $a_to_list = false): void
591  {
592  if ($this->checkAccess("write") || $this->checkAccess("contribute")) {
593  $this->getBlogPosting()->unpublish();
594  }
595 
596  if (!$a_to_list) {
597  $this->ctrl->redirect($this, "edit");
598  } else {
599  $this->ctrl->setParameterByClass("ilobjbloggui", "blpg", "");
600  $this->ctrl->redirectByClass("ilobjbloggui", "");
601  }
602  }
603 
604  public function activatePageToList(): void
605  {
606  $this->activatePage(true);
607  }
608 
609  public function activatePage(bool $a_to_list = false): void
610  {
611  // send notifications
612  ilObjBlog::sendNotification("new", $this->isInWorkspace(), $this->node_id, $this->getBlogPosting()->getId());
613 
614  if ($this->checkAccess("write") || $this->checkAccess("contribute")) {
615  $this->getBlogPosting()->setActive(true);
616  $this->getBlogPosting()->update(true, false);
617  }
618  if (!$a_to_list) {
619  $this->ctrl->redirect($this, "edit");
620  } else {
621  $this->ctrl->setParameterByClass("ilobjbloggui", "blpg", "");
622  $this->ctrl->redirectByClass("ilobjbloggui", "");
623  }
624  }
625 
629  public function editKeywords(): void
630  {
631  global $DIC;
632 
633  $renderer = $DIC->ui()->renderer();
634 
635  $ilTabs = $this->tabs;
636  $tpl = $this->tpl;
637 
638  $ilTabs->clearTargets();
639  $ilTabs->setBackTarget($this->lng->txt("back"), $this->ctrl->getLinkTargetByClass("ilobjblogGUI"));
640 
641  if (!$this->checkAccess("contribute")) {
642  return;
643  }
644 
645  $ilTabs->activateTab("pg");
646 
647  $tpl->setContent($renderer->render($this->initKeywordsForm()));
648  }
649 
653  protected function initKeywordsForm(): \ILIAS\UI\Component\Input\Container\Form\Standard
654  {
655  global $DIC;
656 
657  $ui_factory = $DIC->ui()->factory();
658 
659  $keywords = ilBlogPosting::getKeywords(
660  $this->getBlogPosting()->getBlogId(),
661  $this->getBlogPosting()->getId()
662  );
663 
664  // other keywords in blog
665  $other = array();
666  foreach ($this->posting_manager->getAllByBlog($this->getBlogPosting()->getBlogId(), 0) as $posting) {
667  $pid = $posting->getId();
668  if ($pid !== $this->getBlogPosting()->getId()) {
669  $other = array_merge(
670  $other,
671  ilBlogPosting::getKeywords($this->getBlogPosting()->getBlogId(), $pid)
672  );
673  }
674  }
675  // #17414
676  $other = array_unique($other);
677  sort($other, SORT_LOCALE_STRING);
678 
679  $input_tag = $ui_factory->input()->field()->tag($this->lng->txt("blog_keywords"), $other, $this->lng->txt("blog_keyword_enter"))->withUserCreatedTagsAllowed(true);
680  if (count($keywords) > 0) {
681  $input_tag = $input_tag->withValue($keywords);
682  }
683 
684  $DIC->ctrl()->setParameter(
685  $this,
686  'tags',
687  'tags_processing'
688  );
689 
690  $section = $ui_factory->input()->field()->section([$input_tag], $this->lng->txt("blog_edit_keywords"), "");
691 
692  $form_action = $DIC->ctrl()->getFormAction($this, "saveKeywordsForm");
693  return $ui_factory->input()->container()->form()->standard($form_action, ["tags" => $section]);
694  }
695 
696  protected function getParentObjId(): int
697  {
698  if ($this->node_id) {
699  if ($this->isInWorkspace()) {
700  return $this->access_handler->getTree()->lookupObjectId($this->node_id);
701  }
702 
703  return ilObject::_lookupObjId($this->node_id);
704  }
705  return 0;
706  }
707 
708  public function saveKeywordsForm(): void
709  {
710  global $DIC;
711 
712  $request = $DIC->http()->request();
713  $form = $this->initKeywordsForm();
714 
715  if ($request->getMethod() === "POST"
716  && $request->getQueryParams()['tags'] == 'tags_processing') {
717  $form = $form->withRequest($request);
718  $result = $form->getData();
719  //TODO identify the input instead of use 0
720  $keywords = $result["tags"][0];
721 
722  if ($this->checkAccess("write") || $this->checkAccess("contribute")) {
723  if (is_array($keywords)) {
724  $this->getBlogPosting()->updateKeywords($keywords);
725  } else {
726  $this->getBlogPosting()->updateKeywords([]);
727  }
728  }
729 
730  $this->ctrl->setParameterByClass(ilObjBlogGUI::class, "blpg", "");
731  $this->ctrl->redirectByClass("ilObjBlogGUI", "");
732  }
733  }
734 
738  public static function getSnippet(
739  int $a_id,
740  bool $a_truncate = false,
741  int $a_truncate_length = 500,
742  string $a_truncate_sign = "...",
743  bool $a_include_picture = false,
744  int $a_picture_width = 144,
745  int $a_picture_height = 144,
746  ?string $a_export_directory = null
747  ): string {
748  $bpgui = new self(0, null, $a_id);
749 
750  // scan the full page for media objects
751  $img = "";
752  if ($a_include_picture) {
753  $img = $bpgui->getFirstMediaObjectAsTag($a_picture_width, $a_picture_height, $a_export_directory);
754  }
755 
756  $bpgui->setRawPageContent(true);
757  $bpgui->setAbstractOnly(true);
758 
759  // #8627: export won't work - should we set offline mode?
760  $bpgui->setFileDownloadLink(".");
761  $bpgui->setFullscreenLink(".");
762  $bpgui->setSourcecodeDownloadScript(".");
763  $bpgui->setProfileBackUrl(".");
764 
765  // render without title
766  $page = $bpgui->showPage();
767 
768  if ($a_truncate) {
769  $page = ilPageObject::truncateHTML($page, $a_truncate_length, $a_truncate_sign);
770  }
771 
772  if ($img) {
773  $page = '<div>' . $img . $page . '</div><div style="clear:both;"></div>';
774  }
775 
776  return $page;
777  }
778 
779  protected function getFirstMediaObjectAsTag(
780  int $a_width = 144,
781  int $a_height = 144,
782  ?string $a_export_directory = null
783  ): string {
784  $this->obj->buildDom();
785  $mob_ids = $this->obj->collectMediaObjects();
786  if ($mob_ids) {
787  foreach ($mob_ids as $mob_id) {
788  $mob_obj = new ilObjMediaObject((int) $mob_id);
789  $mob_item = $mob_obj->getMediaItem("Standard");
790  if (stripos($mob_item->getFormat(), "image") !== false) {
791  $mob_size = $mob_item->getOriginalSize();
792  if (is_null($mob_size)) {
793  continue;
794  }
795  if ($mob_size["width"] >= $a_width ||
796  $mob_size["height"] >= $a_height) {
797  if (!$a_export_directory) {
798  $mob_dir = ilObjMediaObject::_getDirectory($mob_obj->getId());
799  } else {
800  // see ilCOPageHTMLExport::exportHTMLMOB()
801  $mob_dir = "./mobs/mm_" . $mob_obj->getId();
802  }
803  $mob_res = self::parseImage(
804  $mob_size["width"],
805  $mob_size["height"],
806  $a_width,
807  $a_height
808  );
809 
810 
811  $location = $mob_obj->getStandardSrc();
812 
813  return '<img' .
814  ' src="' . $location . '"' .
815  ' width="' . $mob_res[0] . '"' .
816  ' height="' . $mob_res[1] . '"' .
817  ' class="ilBlogListItemSnippetPreviewImage ilFloatLeft noMirror"' .
818  ' />';
819  }
820  }
821  }
822  }
823  return "";
824  }
825 
826  protected static function parseImage(
827  int $src_width,
828  int $src_height,
829  int $tgt_width,
830  int $tgt_height
831  ): array {
832  $ratio_width = $ratio_height = 1;
833  if ($src_width > $tgt_width) {
834  $ratio_width = $tgt_width / $src_width;
835  }
836  if ($src_height > $tgt_height) {
837  $ratio_height = $tgt_height / $src_height;
838  }
839  $shrink_ratio = min($ratio_width, $ratio_height);
840 
841  return array(
842  (int) round($src_width * $shrink_ratio),
843  (int) round($src_height * $shrink_ratio)
844  );
845  }
846 
847  public function getDisabledText(): string
848  {
849  return $this->lng->txt("blog_draft_text");
850  }
851 
852  public function getCommentsHTMLExport(): string
853  {
854  return $this->getNotesHTML(
855  $this->getBlogPosting(),
856  false,
857  $this->enable_public_notes,
858  false,
859  null,
860  true
861  );
862  }
863 
864  protected function showEditToolbar(): void
865  {
866  }
867 
868  public function finishEditing(): void
869  {
870  $this->ctrl->setParameterByClass("ilobjbloggui", "bmn", "");
871  $this->ctrl->redirectByClass("ilobjbloggui", "render");
872  }
873 }
static array static setUseRelativeDates(bool $a_status)
set use relative dates
parseCurrentBlock(string $block_name=self::DEFAULT_BLOCK)
Parses the given block.
getFirstMediaObjectAsTag(int $a_width=144, int $a_height=144, ?string $a_export_directory=null)
$renderer
editDate(?ilPropertyFormGUI $a_form=null)
PostingManager $posting_manager
Class ilBlogPosting.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
setCurrentBlock(string $part=self::DEFAULT_BLOCK)
Sets the template to the given block.
getItemByPostVar(string $a_post_var)
editTitle(?ilPropertyFormGUI $a_form=null)
$location
Definition: buildRTE.php:22
Interface Observer Contains several chained tasks and infos about them.
Class ilBlogPosting GUI class.
Class ilPageObjectGUI.
setContent(string $a_html)
Sets content for standard template.
setParameterByClass(string $a_class, string $a_parameter, $a_value)
editKeywords()
Diplay the keywords form.
static getPageContributors(string $a_parent_type, int $a_page_id, string $a_lang="-")
Get all contributors for parent object.
setTitle(string $a_title, bool $hidden=false)
Sets title in standard template.
loadLanguageModule(string $a_module)
Load language module.
deactivatePage(bool $a_to_list=false)
static getSnippet(int $a_id, bool $a_truncate=false, int $a_truncate_length=500, string $a_truncate_sign="...", bool $a_include_picture=false, int $a_picture_width=144, int $a_picture_height=144, ?string $a_export_directory=null)
Get first text paragraph of page.
setVariable(string $variable, $value='')
Sets the given variable to the given value.
setStyleId(int $a_styleid)
getInput(string $a_post_var, bool $ensureValidation=true)
Returns the input of an item, if item provides getInput method and as fallback the value of the HTTP-...
sort()
description: > Example for rendering a Sort Glyph.
Definition: sort.php:41
setTemplateOutput(bool $a_output=true)
This class represents a date/time property in a property form.
static _lookupObjId(int $ref_id)
static parseImage(int $src_width, int $src_height, int $tgt_width, int $tgt_height)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
preview()
description: > Example for rendering a Preview Glyph.
Definition: preview.php:41
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
StandardGUIRequest $blog_request
preview(?string $a_mode=null)
previewFullscreen()
Needed for portfolio/blog handling.
static truncateHTML(string $a_text, int $a_length=100, string $a_ending='...', bool $a_exact=false, bool $a_consider_html=true)
Truncate (html) string.
static _getDirectory(int $a_mob_id)
Get absolute directory.
$ref_id
Definition: ltiauth.php:65
static sendNotification(string $a_action, bool $a_in_wsp, int $a_blog_node_id, int $a_posting_id, ?string $a_comment=null)
static _lookupTitle(int $obj_id)
setBlogPosting(ilBlogPosting $a_posting)
InternalGUIService $blog_gui
setFormAction(string $a_formaction)
InternalDomainService $domain
ilGlobalTemplateInterface $tpl
ReadingTimeManager $reading_time_manager
setPageObject(ilPageObject $a_pg_obj)
global $DIC
Definition: shib_login.php:26
setLoginTargetPar(string $a_val)
Set target parameter for login (public sector).
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
__construct(int $a_node_id, ?object $a_access_handler=null, int $a_id=0, int $a_old_nr=0, bool $a_enable_public_notes=true, bool $a_may_contribute=true, int $a_style_sheet_id=0)
clearTargets()
clear all targets
observeNoteAction(int $a_blog_id, int $a_posting_id, string $a_type, string $a_action, int $a_note_id)
setPresentationTitle(string $a_title="")
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
setRequired(bool $a_required)
setTitleIcon(string $a_icon_path, string $a_icon_desc="")
set title icon
addCommandButton(string $a_cmd, string $a_text, string $a_id="")
activatePage(bool $a_to_list=false)
postOutputProcessing(string $a_output)
Finalizing output processing.
global $ilSetting
Definition: privfeed.php:31
EditGUIRequest $request
__construct(Container $dic, ilPlugin $plugin)
getPageHeading()
Get page heading see also https://docu.ilias.de/goto_docu_wiki_wpage_5793_1357.html the presentation ...
isInWorkspace()
Is current page part of personal workspace blog?
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
showPage(string $a_title="")
static getKeywords(int $a_obj_id, int $a_posting_id)
ilPropertyFormGUI $form
$service
Definition: ltiservices.php:40
getTabs(string $a_activate="")
ILIAS Notes Service $notes
setEnableEditing(bool $a_enableediting)
getNotesHTML(?object $a_content_object=null, bool $a_enable_private_notes=true, bool $a_enable_public_notes=false, bool $a_enable_notes_deletion=false, ?callable $a_callback=null, bool $export=false)
Get html for public and/or private notes.