ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilBlogPostingGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
28
36{
40 protected \ILIAS\Notes\Service $notes;
43 protected ilTabsGUI $tabs;
46 protected LOMServices $lom_services;
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");
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;
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") {
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;
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
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 );
345 $tpl->parseCurrentBlock();
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
367 {
368 $tpl = $this->tpl;
369 $ilCtrl = $this->ctrl;
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;
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 {
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
470 $form->setValuesByPost();
471 $this->editTitle($form);
472 }
473
475 {
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 {
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
532 $form->setValuesByPost();
533 $this->editTitle($form);
534 }
535
537 {
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 {
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}
$location
Definition: buildRTE.php:22
$renderer
Class ilBlogPosting GUI class.
PostingManager $posting_manager
getActivationCaptions()
Get captions for activation action menu entries.
isInWorkspace()
Is current page part of personal workspace blog?
InternalGUIService $blog_gui
__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)
getTabs(string $a_activate="")
previewFullscreen()
Needed for portfolio/blog handling.
ILIAS Notes Service $notes
ReadingTimeManager $reading_time_manager
InternalDomainService $domain
observeNoteAction(int $a_blog_id, int $a_posting_id, string $a_type, string $a_action, int $a_note_id)
postOutputProcessing(string $a_output)
Finalizing output processing.
static parseImage(int $src_width, int $src_height, int $tgt_width, int $tgt_height)
executeCommand()
execute command
setBlogPosting(ilBlogPosting $a_posting)
preview(?string $a_mode=null)
editDate(?ilPropertyFormGUI $a_form=null)
getFirstMediaObjectAsTag(int $a_width=144, int $a_height=144, ?string $a_export_directory=null)
editTitle(?ilPropertyFormGUI $a_form=null)
getPageHeading()
Get page heading see also https://docu.ilias.de/goto_docu_wiki_wpage_5793_1357.html the presentation ...
deactivatePage(bool $a_to_list=false)
StandardGUIRequest $blog_request
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.
showPage(string $a_title="")
showEditToolbar()
Show edit toolbar.
editKeywords()
Diplay the keywords form.
activatePage(bool $a_to_list=false)
Class ilBlogPosting.
static getKeywords(int $a_obj_id, int $a_posting_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static setUseRelativeDates(bool $a_status)
set use relative dates
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
This class represents a date/time property in a property form.
loadLanguageModule(string $a_module)
Load language module.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static sendNotification(string $a_action, bool $a_in_wsp, int $a_blog_node_id, int $a_posting_id, ?string $a_comment=null)
static _getDirectory(int $a_mob_id)
Get absolute directory.
static _lookupObjId(int $ref_id)
static _lookupTitle(int $obj_id)
Class ilPageObjectGUI.
setStyleId(int $a_styleid)
setPresentationTitle(string $a_title="")
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.
ilGlobalTemplateInterface $tpl
setEnableEditing(bool $a_enableediting)
setPageObject(ilPageObject $a_pg_obj)
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 getPageContributors(string $a_parent_type, int $a_page_id, string $a_lang="-")
Get all contributors for parent object.
This class represents a property form user interface.
ILIAS Setting Class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
special template class to simplify handling of ITX/PEAR
This class represents a text property in a property form.
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
setVariable(string $variable, $value='')
Sets the given variable to the given value.
parseCurrentBlock(string $block_name=self::DEFAULT_BLOCK)
Parses the given block.
setCurrentBlock(string $part=self::DEFAULT_BLOCK)
Sets the template to the given block.
setTitle(string $a_title, bool $hidden=false)
Sets title in standard template.
setLoginTargetPar(string $a_val)
Set target parameter for login (public sector).
setTitleIcon(string $a_icon_path, string $a_icon_desc="")
set title icon
$ref_id
Definition: ltiauth.php:66
$service
Definition: ltiresult.php:36
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
global $lng
Definition: privfeed.php:31
global $ilSetting
Definition: privfeed.php:31
if(!file_exists('../ilias.ini.php'))
global $DIC
Definition: shib_login.php:26