19declare(strict_types=1);
51 protected \ILIAS\Notes\Service
$notes;
76 protected \ILIAS\DI\UIServices
$ui;
82 int $a_id_type = self::REPOSITORY_NODE_ID,
83 int $a_parent_node_id = 0
88 $cs =
$DIC->contentStyle();
89 $this->tool_context =
$DIC->globalScreen()->tool()->context();
90 $this->notes =
$DIC->notes();
98 $this->
settings = $domain->settings();
99 $this->
user = $domain->user();
100 $this->tree =
$domain->repositoryTree();
101 $this->rbac_review =
$domain->rbac()->review();
102 $this->rbacadmin =
$domain->rbac()->admin();
103 $this->
lng = $domain->lng();
107 $this->
help = $gui->help();
108 $this->
tabs = $gui->tabs();
109 $this->
toolbar = $gui->toolbar();
110 $this->
ui = $gui->ui();
111 $this->
locator = $gui->locator();
113 $this->nav_history =
$DIC[
"ilNavigationHistory"];
114 $this->
ctrl = $gui->ctrl();
119 $this->blpg =
$req->getBlogPage();
120 $this->old_nr =
$req->getOldNr();
121 $this->ppage =
$req->getPPage();
122 $this->user_page =
$req->getUserPage();
123 $this->new_type =
$req->getNewType();
124 $this->prvm =
$req->getPreviewMode();
125 $this->ntf =
$req->getNotification();
126 $this->apid =
$req->getApId();
127 $this->month =
$req->getMonth();
128 $this->keyword =
$req->getKeyword();
129 $this->author =
$req->getAuthor();
133 $blog_page = $this->blog_request->getBlogPage();
134 if ($blog_page > 0 &&
136 throw new ilException(
"Posting ID does not match blog.");
145 if (!$this->month || !isset($this->items[$this->month]) || $this->items[$this->month] === []) {
146 $m = array_keys($this->items);
147 $this->month = array_shift($m);
148 $this->month_default =
true;
152 $this->
ctrl->setParameter($this,
"bmn", $this->month);
153 $blog_id = $this->
object->getId();
156 $this->
lng->loadLanguageModule(
"blog");
157 $this->
ctrl->saveParameter($this,
"prvm");
159 $this->content_style_gui = $cs->gui();
160 if (is_object($this->
object)) {
161 if ($this->id_type !== self::REPOSITORY_NODE_ID) {
162 $this->content_style_domain = $cs->domain()->styleForObjId($this->
object->getId());
164 $this->content_style_domain = $cs->domain()->styleForRefId($this->
object->getRefId());
166 $this->blog_settings =
172 $this->notes =
$DIC->notes();
173 $owner = $this->
object?->getOwner() ?? 0;
178 $this->
user->getId(),
181 $this->
profile = $domain->profile();
182 $this->profile_gui =
$gui->profile();
199 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"object_added"),
true);
209 $this->tabs_gui->addSubTab(
211 $this->
lng->txt(
"general"),
212 $this->ctrl->getLinkTarget($this,
'edit')
215 $this->tabs_gui->addSubTab(
217 $this->
lng->txt(
"blog_side_blocks"),
218 $this->ctrl->getLinkTargetByClass(
224 $this->tabs_gui->addSubTab(
226 $this->
lng->txt(
"obj_sty"),
227 $this->ctrl->getLinkTargetByClass(
"ilobjectcontentstylesettingsgui",
"")
231 if ($this->id_type === self::REPOSITORY_NODE_ID) {
235 if ($grp_ref_id > 0 || $crs_ref_id > 0) {
237 $this->tabs_gui->addSubTab(
239 $this->
lng->txt(
"notifications"),
240 $this->ctrl->getLinkTargetByClass(
"ilobjnotificationsettingsgui",
'')
246 $this->tabs_gui->activateSubTab($a_active);
251 $this->
ctrl->redirectByClass(SettingsGUI::class,
"");
259 if ($this->id_type === self::WORKSPACE_NODE_ID) {
260 $this->
ctrl->setParameter($this,
"wsp_id", $this->node_id);
263 $ilHelp->setScreenIdComponent(
"blog");
266 $this->
ctrl->setParameterByClass(self::class,
"bmn",
null);
267 $this->tabs_gui->addTab(
270 $this->ctrl->getLinkTarget($this,
"")
274 $this->tabs_gui->addTab(
277 $this->ctrl->getLinkTargetByClass(array(
"ilobjbloggui",
"ilinfoscreengui"),
"showSummary")
282 $this->tabs_gui->addTab(
285 $this->ctrl->getLinkTargetByClass(
286 [SettingsGUI::class],
291 if ($this->id_type === self::REPOSITORY_NODE_ID) {
292 $this->tabs_gui->addTab(
294 $lng->
txt(
"blog_contributors"),
295 $this->ctrl->getLinkTarget($this,
"contributors")
299 if ($this->id_type === self::REPOSITORY_NODE_ID) {
301 $mdtab = $mdgui->getTab();
303 $this->tabs_gui->addTab(
305 $this->
lng->txt(
"meta_data"),
309 $this->tabs_gui->addTab(
312 $this->ctrl->getLinkTargetByClass(
"ilexportgui",
"")
317 if ($this->perm->mayContribute()) {
318 $this->tabs_gui->addNonTabbedLink(
321 $this->ctrl->getLinkTarget($this,
"preview")
336 $next_class = $ilCtrl->getNextClass($this);
338 if ($next_class !==
"ilexportgui") {
342 $cmd = $ilCtrl->getCmd();
345 if (($this->id_type === self::REPOSITORY_NODE_ID) && !$this->
getCreationMode() &&
348 $link = $ilCtrl->getLinkTargetByClass([
"ilrepositorygui",
"ilObjBlogGUI"],
"preview");
349 $ilNavigationHistory->addItem($this->node_id, $link,
"blog");
351 switch ($next_class) {
352 case 'ilblogpostinggui':
353 $this->
ctrl->saveParameter($this,
"user_page");
357 $this->tpl->setOnScreenMessage(
'info',
$lng->
txt(
"no_permission"));
362 if ($this->id_type === self::REPOSITORY_NODE_ID) {
366 $style_sheet_id = $this->content_style_domain->getEffectiveStyleId();
373 ($this->
object->getNotesStatus() && !$this->disable_notes),
374 $this->perm->mayEditPosting($this->blpg),
381 case "previewFullscreen":
382 $ilCtrl->setParameter($this,
"prvm",
"fsc");
389 $this->
ctrl->setParameterByClass(
"ilblogpostinggui",
"blpg", $this->blpg);
390 $this->tabs_gui->addNonTabbedLink(
393 $this->ctrl->getLinkTargetByClass(
"ilblogpostinggui",
"previewFullscreen")
395 $this->
ctrl->setParameterByClass(
"ilblogpostinggui",
"blpg",
"");
401 $cmd =
"previewFullscreen";
403 if (in_array($cmd, array(
"previewFullscreen"))) {
406 $ret = $ilCtrl->forwardCommand($bpost_gui);
407 if (!$ilTabs->back_target) {
408 $ilCtrl->setParameter($this,
"bmn",
"");
409 $ilTabs->setBackTarget(
411 $ilCtrl->getLinkTarget($this,
"")
417 $is_owner = $this->perm->mayContribute();
418 $is_active = $bpost_gui->getBlogPosting()->getActive();
421 if (($cmd ===
"previewFullscreen")
422 && !$is_owner && !$is_active) {
423 $this->
ctrl->redirect($this,
"preview");
428 case "previewFullscreen":
440 if ($this->id_type === self::WORKSPACE_NODE_ID) {
446 $public_action =
false;
447 if ($cmd !==
"history" && $cmd !==
"edit" && $is_active && empty(
$info)) {
449 $public_action =
true;
451 if ($this->blog_settings->getApproval() && !$bpost_gui->getBlogPosting()->isApproved()) {
455 if ($public_action) {
456 $this->tpl->setOnScreenMessage(
'success', implode(
"<br />",
$info));
458 if (count(
$info) > 0) {
459 $this->tpl->setOnScreenMessage(
'info', implode(
"<br />",
$info));
465 if ($cmd !==
"edit") {
470 $this->
tabs->setBackTarget(
"",
"");
477 case "ilinfoscreengui":
487 case "ilcommonactiondispatchergui":
489 $gui->enableCommentsSettings(
false);
491 $this->
ctrl->forwardCommand($gui);
494 case "ilpermissiongui":
496 $ilTabs->activateTab(
"id_permissions");
498 $this->
ctrl->forwardCommand($perm_gui);
501 case "ilobjectcopygui":
504 $cp->setType(
"blog");
505 $this->
ctrl->forwardCommand($cp);
508 case 'ilrepositorysearchgui':
510 $ilTabs->activateTab(
"contributors");
512 $rep_search->setTitle($this->
lng->txt(
"blog_add_contributor"));
513 $rep_search->setCallback($this,
'addContributor', $this->
object->getAllLocalRoles($this->node_id));
514 $this->
ctrl->setReturn($this,
'contributors');
515 $this->
ctrl->forwardCommand($rep_search);
522 case "ilobjectcontentstylesettingsgui":
526 $ilTabs->activateTab(
"settings");
530 if ($this->id_type === self::REPOSITORY_NODE_ID) {
531 $settings_gui = $this->content_style_gui
532 ->objectSettingsGUIForRefId(
537 $settings_gui = $this->content_style_gui
538 ->objectSettingsGUIForObjId(
543 $this->
ctrl->forwardCommand($settings_gui);
547 case "ilblogexercisegui":
548 $this->
ctrl->setReturn($this,
"render");
549 $gui = $this->gui->
exercise()->ilBlogExerciseGUI($this->node_id);
550 $this->
ctrl->forwardCommand($gui);
553 case 'ilobjnotificationsettingsgui':
555 $ilTabs->activateTab(
"settings");
558 $this->
ctrl->forwardCommand($gui);
561 case strtolower(ilObjectMetaDataGUI::class):
564 $ilTabs->activateTab(
"meta_data");
566 $this->
ctrl->forwardCommand($gui);
569 case strtolower(SettingsGUI::class):
572 $ilTabs->activateTab(
"settings");
574 $gui = $this->gui->
settings()->settingsGUI(
576 $this->id_type === self::REPOSITORY_NODE_ID
578 $this->
ctrl->forwardCommand($gui);
581 case strtolower(\
ILIAS\Blog\
Settings\BlockSettingsGUI::class):
584 $ilTabs->activateTab(
"settings");
586 $gui = $this->gui->
settings()->blockSettingsGUI(
588 $this->id_type === self::REPOSITORY_NODE_ID
590 $this->
ctrl->forwardCommand($gui);
594 if ($cmd !==
"gethtml") {
596 if ($cmd ===
"addToDesk" || $cmd ===
"removeFromDesk") {
597 $this->{$cmd .
"Object"}();
607 parent::executeCommand();
614 $this->
tabs->activateTab(
"export");
616 $this->
ctrl->forwardCommand($exp_gui);
623 $this->
tabs->activateTab(
"export");
631 $this->
tabs->activateTab(
"export");
637 $be = $this->domain->exercise($this->node_id);
638 $be_gui = $this->gui->exercise()->ilBlogExerciseGUI($this->node_id);
639 $assignments = $be->getAssignmentsOfBlog();
640 if (count($assignments) > 0) {
641 $ass_ids = array_map(
static function ($i) {
646 $this->tool_context->current()->addAdditionalData(
648 $be_gui->getActionButtons()
658 $this->
ctrl->redirectByClass(ilInfoScreenGUI::class,
"showSummary");
671 if ($this->id_type !== self::WORKSPACE_NODE_ID) {
672 $info->enablePrivateNotes();
680 $info->enableNewsEditing(
false);
683 $enable_internal_rss = $news_set->get(
"enable_rss_for_internal");
685 if ($enable_internal_rss) {
686 $info->setBlockProperty(
"news",
"settings",
"1");
687 $info->setBlockProperty(
"news",
"public_notifications_option",
"1");
692 $info->addMetaDataSections($this->
object->getId(), 0, $this->object->getType());
705 $title = $this->blog_request->
getTitle();
709 $posting->setTitle($title);
710 $posting->setBlogId($this->
object->getId());
711 $posting->setActive(
false);
712 $posting->setAuthor($ilUser->getId());
713 $posting->create(
false);
716 $ilCtrl->setParameter($this,
"bmn", date(
"Y-m"));
718 $ilCtrl->setParameterByClass(
"ilblogpostinggui",
"blpg", $posting->getId());
719 $ilCtrl->redirectByClass(
"ilblogpostinggui",
"edit");
721 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"msg_no_title"),
true);
722 $ilCtrl->redirect($this,
"render");
738 $this->tpl->setOnScreenMessage(
'info',
$lng->
txt(
"no_permission"));
742 $ilTabs->activateTab(
"content");
745 if ($this->perm->mayContribute()) {
746 $ilToolbar->setFormAction($ilCtrl->getFormAction($this,
"createPosting"));
750 $ilToolbar->addStickyItem($title,
true);
752 document.getElementById('title').setAttribute('data-blog-input', 'posting-title');
753 document.getElementById('title').setAttribute('placeholder', ' ');
759 )->submit()->toToolbar(
true, $ilToolbar);
762 $keys = array_keys($this->items);
763 $first = array_shift($keys);
764 if ($first != $this->month) {
765 $ilToolbar->addSeparator();
767 $ilCtrl->setParameter($this,
"bmn", $first);
768 $url = $ilCtrl->getLinkTarget($this,
"");
769 $ilCtrl->setParameter($this,
"bmn", $this->month);
774 )->emphasised()->toToolbar(
true, $ilToolbar);
778 $print_view = $this->getPrintView();
779 $modal_elements = $print_view->getModalElements(
780 $this->
ctrl->getLinkTarget(
785 $ilToolbar->addSeparator();
786 $ilToolbar->addComponent($modal_elements->button);
787 $ilToolbar->addComponent($modal_elements->modal);
791 $is_owner = $this->perm->mayContribute();
797 $list = $this->
renderList($list_items,
"preview",
"", $is_owner);
812 bool $a_show_inactive =
false
815 $list_items = array();
818 if ($item[
"author"] == $this->author ||
819 (isset($item[
"editors"]) && in_array($this->author, $item[
"editors"]))) {
820 $list_items[
$id] = $item;
824 } elseif ($this->keyword) {
827 $max = $this->blog_settings->getOverviewPostings();
828 if ($this->month_default && $max) {
829 $list_items = array();
830 foreach ($this->items as
$month => $postings) {
831 foreach ($postings as
$id => $item) {
832 if (!$a_show_inactive &&
836 $list_items[
$id] = $item;
838 if (count($list_items) >= $max) {
856 $toolbar = $this->toolbar;
858 if (!$this->checkPermissionBool(
"read")) {
859 $this->tpl->setOnScreenMessage(
'info',
$lng->txt(
"no_permission"));
863 $this->filterInactivePostings();
865 $list_items = $this->getListItems();
869 $list = $this->renderList($list_items,
"previewFullscreen");
870 $nav = $this->renderNavigation(
"preview",
"previewFullscreen");
871 $this->renderToolbarNavigation($this->items);
874 $this->renderFullScreen($list, $nav);
881 bool $a_with_comments =
false
883 $zip = $this->buildExportFile($a_with_comments);
898 $ilUser = $this->user;
899 $ilTabs = $this->tabs;
900 $ilLocator = $this->locator;
902 $owner = $this->
object->getOwner();
904 $ilTabs->clearTargets();
911 if ($owner === $ilUser->getId()) {
913 if ($this->id_type === self::WORKSPACE_NODE_ID) {
914 $back =
"ilias.php?baseClass=ilDashboardGUI&cmd=jumpToWorkspace&wsp_id=" . $this->node_id;
917 elseif ($this->perm->mayContribute()) {
918 $this->
ctrl->setParameter($this,
"prvm",
"");
919 if ($this->blpg === 0) {
920 $back = $this->
ctrl->getLinkTarget($this,
"");
922 $this->
ctrl->setParameterByClass(
"ilblogpostinggui",
"bmn", $this->month);
923 $this->
ctrl->setParameterByClass(
"ilblogpostinggui",
"blpg", $this->blpg);
924 $back = $this->
ctrl->getLinkTargetByClass(
"ilblogpostinggui",
"preview");
926 $this->
ctrl->setParameter($this,
"prvm", $this->prvm);
929 $back_caption = $this->
lng->txt(
"blog_back_to_blog_owner");
934 if ($this->id_type === self::WORKSPACE_NODE_ID) {
935 $back =
"ilias.php?baseClass=ilDashboardGUI&cmd=jumpToWorkspace&dsh=" . $owner;
938 elseif ($this->perm->mayContribute()) {
939 $back = $this->
ctrl->getLinkTarget($this,
"");
940 $back_caption = $this->
lng->txt(
"blog_back_to_blog_owner");
945 $parent_id = $tree->getParentId($this->node_id);
950 $this->renderFullscreenHeader($tpl, $owner);
953 $this->
ctrl->setParameter($this,
"bmn",
"");
955 $this->
ctrl->setParameter($this,
"bmn", $this->month);
957 $this->setContentStyleSheet();
960 $tpl->setContent($a_content);
961 $tpl->setRightContent($a_navigation);
967 bool $a_export =
false
969 $ilUser = $this->
user;
975 $this->object->getId(),
982 if ($this->id_type !== self::REPOSITORY_NODE_ID) {
984 $name = $name[
"lastname"] .
", " . $name[
"firstname"];
988 if ($this->blog_settings?->getProfilePicture() && !$a_export) {
990 if ($this->id_type === self::REPOSITORY_NODE_ID) {
992 if ($this->blpg > 0 && !$a_export) {
994 $author_id =
$post->getAuthor();
996 $ppic = $this->profile_gui->getPicturePath($author_id);
997 $name = $this->profile_gui->getNamePresentation($author_id);
1006 $ppic = basename($ppic);
1015 if ($this->id_type === self::REPOSITORY_NODE_ID) {
1028 $author_found = false;
1032 if ($this->author &&
1033 ($posting[
"author"] == $this->author ||
1034 (is_array($posting[
"editors"] ??
false) && in_array($this->author, $posting[
"editors"])))) {
1035 $author_found =
true;
1038 $month = substr($posting[
"created"]->
get(
IL_CAL_DATE), 0, 7);
1039 $items[$month][$posting[
"id"]] = $posting;
1042 if ($this->author && !$author_found) {
1043 $this->author =
null;
1054 string $a_cmd =
"preview",
1055 string $a_link_template =
"",
1056 bool $a_show_inactive =
false,
1057 string $a_export_directory =
""
1060 $ilCtrl = $this->ctrl;
1061 $ilUser = $this->user;
1062 $ui_factory = $this->
ui->factory();
1063 $ui_renderer = $this->
ui->renderer();
1065 $wtpl =
new ilTemplate(
"tpl.blog_list.html",
true,
true,
"components/ILIAS/Blog");
1067 $is_admin = $this->perm->canManage();
1071 foreach ($items as $item) {
1074 if (!$is_active && !$a_show_inactive) {
1081 if (!$this->keyword && !$this->author) {
1082 $month = substr($item[
"created"]->
get(
IL_CAL_DATE), 0, 7);
1085 if (!$last_month || $last_month != $month) {
1087 $wtpl->setCurrentBlock(
"month_bl");
1088 $wtpl->parseCurrentBlock();
1092 if ($this->keyword) {
1093 $title =
$lng->txt(
"blog_keyword") .
": " . $this->keyword;
1094 } elseif ($this->author) {
1095 $title =
$lng->txt(
"blog_author") .
": " . $this->profile_gui->getNamePresentation($this->author);
1097 $title = $this->gui->presentation()->util()->getMonthPresentation($month);
1098 $last_month = $month;
1101 $wtpl->setVariable(
"TXT_CURRENT_MONTH", $title);
1104 if (!$a_link_template) {
1105 $ilCtrl->setParameterByClass(
"ilblogpostinggui",
"bmn", $this->month);
1106 $ilCtrl->setParameterByClass(
"ilblogpostinggui",
"blpg", $item[
"id"]);
1107 $preview = $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui", $a_cmd);
1109 $preview = $this->buildExportLink($a_link_template,
"posting", (
string) $item[
"id"]);
1111 $more_link = $preview;
1114 $posting_edit = $this->perm->mayEditPosting($item[
"id"], $item[
"author"]);
1115 if (($posting_edit || $is_admin) && !$a_link_template && $a_cmd ===
"preview") {
1118 if ($is_active && $this->blog_settings->getApproval() && !$item[
"approved"]) {
1120 $ilCtrl->setParameter($this,
"apid", $item[
"id"]);
1121 $actions[] = $ui_factory->link()->standard(
1122 $lng->txt(
"blog_approve"),
1123 $ilCtrl->getLinkTarget($this,
"approve")
1125 $ilCtrl->setParameter($this,
"apid",
"");
1128 $wtpl->setVariable(
"APPROVAL",
$lng->txt(
"blog_needs_approval"));
1131 if ($posting_edit) {
1132 $actions[] = $ui_factory->link()->standard(
1133 $lng->txt(
"edit_content"),
1134 $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"edit")
1136 $more_link = $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"edit");
1140 $actions[] = $ui_factory->link()->standard(
1141 $lng->txt(
"blog_toggle_draft"),
1142 $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"deactivatePageToList")
1145 $actions[] = $ui_factory->link()->standard(
1146 $lng->txt(
"blog_toggle_final"),
1147 $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"activatePageToList")
1151 $actions[] = $ui_factory->link()->standard(
1152 $lng->txt(
"rename"),
1153 $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"edittitle")
1156 if ($this->blog_settings->getKeywords()) {
1157 $actions[] = $ui_factory->link()->standard(
1158 $lng->txt(
"blog_edit_keywords"),
1159 $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"editKeywords")
1163 $actions[] = $ui_factory->link()->standard(
1164 $lng->txt(
"blog_edit_date"),
1165 $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"editdate")
1168 $actions[] = $ui_factory->link()->standard(
1169 $lng->txt(
"delete"),
1170 $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"deleteBlogPostingConfirmationScreen")
1172 } elseif ($is_admin) {
1175 $ilCtrl->setParameter($this,
"apid", $item[
"id"]);
1176 $actions[] = $ui_factory->link()->standard(
1177 $lng->txt(
"blog_toggle_draft_admin"),
1178 $ilCtrl->getLinkTarget($this,
"deactivateAdmin")
1180 $ilCtrl->setParameter($this,
"apid",
"");
1183 $actions[] = $ui_factory->link()->standard(
1184 $lng->txt(
"delete"),
1185 $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"deleteBlogPostingConfirmationScreen")
1189 $dd = $ui_factory->dropdown()->standard($actions)->withLabel($this->
lng->txt(
"actions"));
1191 $wtpl->setCurrentBlock(
"actions");
1192 $wtpl->setVariable(
"ACTION_SELECTOR", $ui_renderer->render($dd));
1193 $wtpl->parseCurrentBlock();
1197 if ($this->
object->getNotesStatus() && !$a_link_template && !$this->disable_notes) {
1199 $notes_context = $this->notes
1206 $count = $this->notes
1208 ->getNrOfCommentsForContext($notes_context);
1210 if ($a_cmd !==
"preview") {
1211 $wtpl->setCurrentBlock(
"comments");
1212 $wtpl->setVariable(
"TEXT_COMMENTS",
$lng->txt(
"blog_comments"));
1213 $wtpl->setVariable(
"URL_COMMENTS", $preview);
1214 $wtpl->setVariable(
"COUNT_COMMENTS", $count);
1215 $wtpl->parseCurrentBlock();
1220 if ($this->node_id !==
null &&
1221 $a_cmd !==
"preview") {
1222 if ($this->id_type === self::WORKSPACE_NODE_ID) {
1223 $goto = $this->gui->permanentLink(0, (
int) $this->node_id)->getPermanentLink((
int) $item[
"id"]);
1225 $goto = $this->gui->permanentLink((
int) $this->node_id)->getPermanentLink((
int) $item[
"id"]);
1227 $wtpl->setCurrentBlock(
"permalink");
1228 $wtpl->setVariable(
"URL_PERMALINK", $goto);
1229 $wtpl->setVariable(
"TEXT_PERMALINK",
$lng->txt(
"blog_link"));
1230 $wtpl->parseCurrentBlock();
1235 $this->blog_settings->getAbstractShorten(),
1236 $this->blog_settings->getAbstractShortenLength(),
1238 $this->blog_settings->getAbstractImage(),
1239 $this->blog_settings->getAbstractImageWidth(),
1240 $this->blog_settings->getAbstractImageHeight(),
1245 $wtpl->setCurrentBlock(
"more");
1246 $wtpl->setVariable(
"URL_MORE", $more_link);
1247 $wtpl->setVariable(
"TEXT_MORE",
$lng->txt(
"blog_list_more"));
1248 $wtpl->parseCurrentBlock();
1254 $wtpl->setCurrentBlock(
"draft_text");
1255 $wtpl->setVariable(
"DRAFT_TEXT",
$lng->txt(
"blog_draft_text"));
1256 $wtpl->parseCurrentBlock();
1257 $wtpl->setVariable(
"DRAFT_CLASS",
" ilBlogListItemDraft");
1261 $reading_time = $this->reading_time_manager->getReadingTime(
1265 if (!is_null($reading_time)) {
1266 $this->
lng->loadLanguageModule(
"copg");
1267 $wtpl->setCurrentBlock(
"reading_time");
1270 $this->
lng->txt(
"copg_est_reading_time") .
": " .
1271 sprintf($this->
lng->txt(
"copg_x_minutes"), $reading_time)
1273 $wtpl->parseCurrentBlock();
1276 $wtpl->setCurrentBlock(
"posting");
1279 if ($this->id_type === self::REPOSITORY_NODE_ID) {
1282 $author_id = $item[
"author"];
1284 $authors[] = $this->profile_gui->getNamePresentation($author_id);
1287 if (isset($item[
"editors"])) {
1288 foreach ($item[
"editors"] as $editor_id) {
1289 $authors[] = $this->profile_gui->getNamePresentation($editor_id);
1294 $author = implode(
", ", $authors) .
" - ";
1299 $wtpl->setVariable(
"URL_TITLE", $preview);
1300 $wtpl->setVariable(
"TITLE", $item[
"title"]);
1304 $keywords = (count($kw) > 0)
1305 ?
"<br>" . $this->
lng->txt(
"keywords") .
": " . implode(
", ", $kw)
1308 $wtpl->setVariable(
"DATETIME", $author .
1312 $wtpl->setVariable(
"CONTENT", $snippet);
1314 $wtpl->parseCurrentBlock();
1318 if ($a_cmd ===
"previewFullscreen") {
1319 $ref_id = ($this->id_type === self::WORKSPACE_NODE_ID)
1322 $wsp_id = ($this->id_type === self::WORKSPACE_NODE_ID)
1325 $this->gui->permanentLink(
$ref_id, $wsp_id)->setPermanentLink();
1328 if (!$is_empty || $a_show_inactive) {
1329 return $wtpl->get();
1342 return BlogHtmlExport::buildExportLink($a_template, $a_type, $a_id, $this->getKeywords(false));
1351 string $a_list_cmd =
"render",
1352 string $a_posting_cmd =
"preview",
1353 ?
string $a_link_template =
null,
1354 bool $a_show_inactive =
false,
1357 $ilCtrl = $this->
ctrl;
1359 $blpg = ($a_blpg > 0)
1365 foreach ($a_items as $month => $postings) {
1366 foreach (array_keys($postings) as
$id) {
1368 if (!$a_show_inactive && !$active) {
1369 unset($a_items[$month][
$id]);
1371 $a_items[$month][
$id][
"active"] = $active;
1374 if (!count($a_items[$month])) {
1375 unset($a_items[$month]);
1381 $max_months = $this->blog_settings->getNavModeListMonths();
1383 $wtpl =
new ilTemplate(
"tpl.blog_list_navigation_by_date.html",
true,
true,
"components/ILIAS/Blog");
1385 $ilCtrl->setParameter($this,
"blpg",
"");
1387 $counter = $mon_counter = $last_year = 0;
1388 foreach ($a_items as $month => $postings) {
1389 if (!$a_link_template && $max_months && $mon_counter >= $max_months) {
1394 $year = substr($month, 0, 4);
1395 if (!$last_year || $year != $last_year) {
1404 if (!$a_link_template) {
1405 $ilCtrl->setParameter($this,
"bmn", $month);
1406 $month_url = $ilCtrl->getLinkTarget($this, $a_list_cmd);
1408 $month_url = $this->buildExportLink($a_link_template,
"list", (
string) $month);
1413 if ($mon_counter <= $this->blog_settings->getNavModeListMonthsWithPostings()) {
1415 $wtpl->setCurrentBlock(
"navigation_year_details");
1416 $wtpl->setVariable(
"YEAR", $year);
1417 $wtpl->parseCurrentBlock();
1420 foreach ($postings as
$id => $posting) {
1431 if (!$a_link_template) {
1432 $ilCtrl->setParameterByClass(
"ilblogpostinggui",
"bmn", $month);
1433 $ilCtrl->setParameterByClass(
"ilblogpostinggui",
"blpg",
$id);
1434 $url = $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui", $a_posting_cmd);
1436 $url = $this->buildExportLink($a_link_template,
"posting", (
string)
$id);
1439 if (!$posting[
"active"]) {
1440 $wtpl->setVariable(
"NAV_ITEM_DRAFT", $this->
lng->txt(
"blog_draft"));
1441 } elseif ($this->blog_settings->getApproval() && !$posting[
"approved"]) {
1442 $wtpl->setVariable(
"NAV_ITEM_APPROVAL", $this->
lng->txt(
"blog_needs_approval"));
1445 $wtpl->setCurrentBlock(
"navigation_item");
1446 $wtpl->setVariable(
"NAV_ITEM_URL",
$url);
1447 $wtpl->setVariable(
"NAV_ITEM_CAPTION", $caption);
1448 $wtpl->parseCurrentBlock();
1451 $wtpl->setCurrentBlock(
"navigation_month_details");
1452 $wtpl->setVariable(
"NAV_MONTH", $month_name);
1453 $wtpl->setVariable(
"URL_MONTH", $month_url);
1458 $wtpl->setCurrentBlock(
"navigation_year");
1459 $wtpl->setVariable(
"YEAR", $year);
1460 $wtpl->parseCurrentBlock();
1463 $wtpl->setCurrentBlock(
"navigation_month");
1464 $wtpl->setVariable(
"MONTH_NAME", $month_name);
1465 $wtpl->setVariable(
"URL_MONTH", $month_url);
1466 $wtpl->setVariable(
"MONTH_COUNT", count($postings));
1468 $wtpl->parseCurrentBlock();
1470 if (!$a_link_template) {
1471 $this->
ctrl->setParameterByClass(self::class,
"bmn",
null);
1472 $url = $this->
ctrl->getLinkTargetByClass(self::class, $a_list_cmd);
1474 $url =
"index.html";
1479 $this->
ui->renderer()->render(
1480 $this->ui->factory()->link()->standard(
1481 $this->lng->txt(
"blog_starting_page"),
1489 $wtpl =
new ilTemplate(
"tpl.blog_list_navigation_month.html",
true,
true,
"components/ILIAS/Blog");
1491 $ilCtrl->setParameter($this,
"blpg",
"");
1493 $month_options = array();
1494 foreach ($a_items as $month => $postings) {
1495 $month_name = $this->gui->presentation()->util()->getMonthPresentation($month);
1497 $month_options[$month] = $month_name;
1499 if ($month == $this->month) {
1500 if (!$a_link_template) {
1501 $ilCtrl->setParameter($this,
"bmn", $month);
1502 $month_url = $ilCtrl->getLinkTarget($this, $a_list_cmd);
1504 $month_url = $this->buildExportLink($a_link_template,
"list", (
string) $month);
1507 foreach ($postings as
$id => $posting) {
1511 if (!$a_link_template) {
1512 $ilCtrl->setParameterByClass(
"ilblogpostinggui",
"bmn", $month);
1513 $ilCtrl->setParameterByClass(
"ilblogpostinggui",
"blpg",
$id);
1514 $url = $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui", $a_posting_cmd);
1516 $url = $this->buildExportLink($a_link_template,
"posting", (
string)
$id);
1519 if (!$posting[
"active"]) {
1520 $wtpl->setVariable(
"NAV_ITEM_DRAFT", $this->
lng->txt(
"blog_draft"));
1521 } elseif ($this->blog_settings->getApproval() && !$posting[
"approved"]) {
1522 $wtpl->setVariable(
"NAV_ITEM_APPROVAL", $this->
lng->txt(
"blog_needs_approval"));
1525 $wtpl->setCurrentBlock(
"navigation_item");
1526 $wtpl->setVariable(
"NAV_ITEM_URL",
$url);
1527 $wtpl->setVariable(
"NAV_ITEM_CAPTION", $caption);
1528 $wtpl->parseCurrentBlock();
1531 $wtpl->setCurrentBlock(
"navigation_month_details");
1533 $wtpl->setVariable(
"NAV_MONTH", $month_name);
1534 $wtpl->setVariable(
"URL_MONTH", $month_url);
1536 $wtpl->parseCurrentBlock();
1541 $wtpl->setCurrentBlock(
"option_bl");
1542 foreach ($month_options as $value => $caption) {
1543 $wtpl->setVariable(
"OPTION_VALUE", $value);
1544 $wtpl->setVariable(
"OPTION_CAPTION", $caption);
1545 if ($value == $this->month) {
1546 $wtpl->setVariable(
"OPTION_SEL",
' selected="selected"');
1548 $wtpl->parseCurrentBlock();
1551 $wtpl->setVariable(
"FORM_ACTION", $ilCtrl->getFormAction($this, $a_list_cmd));
1554 $ilCtrl->setParameter($this,
"bmn", $this->month);
1555 $ilCtrl->setParameterByClass(
"ilblogpostinggui",
"bmn",
"");
1556 return $wtpl->get();
1563 string $a_list_cmd =
"render",
1564 bool $a_show_inactive =
false,
1565 string $a_link_template =
"",
1568 $ilCtrl = $this->
ctrl;
1570 $blpg = ($a_blpg > 0)
1574 $keywords = $this->getKeywords($a_show_inactive, $blpg);
1576 $wtpl =
new ilTemplate(
"tpl.blog_list_navigation_keywords.html",
true,
true,
"components/ILIAS/Blog");
1578 $max = max($keywords);
1580 $wtpl->setCurrentBlock(
"keyword");
1581 foreach ($keywords as $keyword =>
$counter) {
1582 if (!$a_link_template) {
1583 $ilCtrl->setParameter($this,
"kwd", urlencode((
string) $keyword));
1584 $url = $ilCtrl->getLinkTarget($this, $a_list_cmd);
1585 $ilCtrl->setParameter($this,
"kwd",
"");
1587 $url = $this->buildExportLink($a_link_template,
"keyword", (
string) $keyword);
1590 $wtpl->setVariable(
"TXT_KEYWORD", $keyword);
1592 $wtpl->setVariable(
"URL_KEYWORD",
$url);
1593 $wtpl->parseCurrentBlock();
1596 return $wtpl->get();
1603 string $a_list_cmd =
"render",
1604 bool $a_show_inactive =
false
1606 $ilCtrl = $this->
ctrl;
1609 foreach ($a_items as $month => $items) {
1610 foreach ($items as $item) {
1612 if ($item[
"author"]) {
1613 $authors[] = $item[
"author"];
1616 if (isset($item[
"editors"])) {
1617 foreach ($item[
"editors"] as $editor_id) {
1618 if ($editor_id != $item[
"author"]) {
1619 $authors[] = $editor_id;
1627 $authors = array_unique($authors);
1630 $authors = array_filter($authors,
function (
$id) {
1634 if (count($authors) > 1) {
1638 $ilCtrl->setParameter($this,
"ath",
$user_id);
1639 $url = $ilCtrl->getLinkTarget($this, $a_list_cmd);
1640 $ilCtrl->setParameter($this,
"ath",
"");
1643 if (substr($base_name, 0, 1) ==
"[") {
1657 $sort = $name_arr[
"lastname"] .
" " . $name_arr[
"firstname"];
1660 $idx = trim(strip_tags($sort)) .
"///" .
$user_id;
1661 $list[$idx] = array($name,
$url);
1666 $wtpl =
new ilTemplate(
"tpl.blog_list_navigation_authors.html",
true,
true,
"components/ILIAS/Blog");
1668 $wtpl->setCurrentBlock(
"author");
1669 foreach ($list as $author) {
1670 $wtpl->setVariable(
"TXT_AUTHOR", $author[0]);
1671 $wtpl->setVariable(
"URL_AUTHOR", $author[1]);
1672 $wtpl->parseCurrentBlock();
1675 return $wtpl->get();
1685 bool $single_posting =
false
1687 $nav_renderer = $this->gui->navigation()->toolbarNavigationRenderer();
1688 $nav_renderer->renderToolbarNavigation(
1702 string $a_list_cmd =
"render",
1703 string $a_posting_cmd =
"preview",
1704 ?
string $a_link_template =
null,
1705 bool $a_show_inactive =
false,
1709 $a_items = $this->items;
1710 $blpg = ($a_blpg > 0)
1714 if ($this->blog_settings->getOrder()) {
1715 $order = array_flip($this->blog_settings->getOrder());
1724 $wtpl =
new ilTemplate(
"tpl.blog_list_navigation.html",
true,
true,
"components/ILIAS/Blog");
1729 if (count($a_items)) {
1730 $blocks[$order[
"navigation"]] = array(
1731 $this->
lng->txt(
"blog_navigation"),
1732 $this->renderNavigationByDate($a_items, $a_list_cmd, $a_posting_cmd, $a_link_template, $a_show_inactive, $a_blpg)
1736 if ($this->blog_settings->getKeywords()) {
1738 $may_edit_keywords = ($blpg > 0 &&
1739 $this->perm->mayEditPosting($blpg) &&
1740 $a_list_cmd !==
"preview" &&
1741 $a_list_cmd !==
"gethtml" &&
1743 $keywords = $this->renderNavigationByKeywords($a_list_cmd, $a_show_inactive, (
string) $a_link_template, $a_blpg);
1744 if ($keywords || $may_edit_keywords) {
1746 $keywords = $this->
lng->txt(
"blog_no_keywords");
1749 $blocks[$order[
"keywords"]] = array(
1750 $this->
lng->txt(
"blog_keywords"),
1753 ? array($cmd, $this->
lng->txt(
"blog_edit_keywords"))
1760 if (!$a_link_template) {
1762 if ($this->id_type === self::REPOSITORY_NODE_ID &&
1763 $this->blog_settings->getAuthors()) {
1764 $authors = $this->renderNavigationByAuthors($a_items, $a_list_cmd, $a_show_inactive);
1766 $blocks[$order[
"authors"]] = array($this->
lng->txt(
"blog_authors"), $authors);
1771 if ($this->blog_settings->getRSS() &&
1773 $a_list_cmd ===
"preview") {
1775 $blog_id = $this->node_id;
1776 if ($this->id_type !== self::WORKSPACE_NODE_ID) {
1779 $url = ILIAS_HTTP_PATH .
"/feed.php?blog_id=" . $blog_id .
1780 "&client_id=" . rawurlencode(
CLIENT_ID);
1786 if (count($blocks)) {
1789 $ui_factory =
$DIC->ui()->factory();
1790 $ui_renderer =
$DIC->ui()->renderer();
1793 foreach ($blocks as $block) {
1796 $content = $block[1];
1798 $secondary_panel = $ui_factory->panel()->secondary()->legacy($title, $ui_factory->legacy()->content($content));
1800 if (isset($block[2]) && is_array($block[2])) {
1801 $link = $ui_factory->button()->shy($block[2][1], $block[2][0]);
1802 $secondary_panel = $secondary_panel->withFooter($link);
1805 $wtpl->setCurrentBlock(
"block_bl");
1806 $wtpl->setVariable(
"BLOCK", $ui_renderer->render($secondary_panel));
1807 $wtpl->parseCurrentBlock();
1811 return $wtpl->get();
1818 bool $a_show_inactive,
1819 ?
int $a_posting_id =
null
1821 $keywords = array();
1822 if ($a_posting_id) {
1824 if (isset($keywords[$keyword])) {
1825 $keywords[$keyword]++;
1827 $keywords[$keyword] = 1;
1831 foreach ($this->items as $month => $items) {
1832 foreach ($items as $item) {
1835 if (isset($keywords[$keyword])) {
1836 $keywords[$keyword]++;
1838 $keywords[$keyword] = 1;
1848 foreach ($keywords as $keyword =>
$counter) {
1849 $tmp[] = array(
"keyword" => $keyword,
"counter" =>
$counter);
1853 $keywords = array();
1854 foreach ($tmp as $item) {
1855 $keywords[(string) $item[
"keyword"]] = $item[
"counter"];
1864 bool $a_include_comments =
false,
1865 bool $print_version =
false
1868 $format = explode(
"_", $this->blog_request->getFormat());
1869 if (($format[1] ??
"") ===
"comments" || $a_include_comments) {
1870 $a_include_comments =
true;
1871 $type =
"html_comments";
1878 $subdir = $this->
object->getType() .
"_" . $this->
object->getId();
1879 if ($print_version) {
1884 $blog_export->setPrintVersion($print_version);
1885 $blog_export->includeComments($a_include_comments);
1886 $blog_export->exportHTML();
1887 return $blog_export;
1897 $this->disable_notes = $a_value;
1903 $ilUser = $this->
user;
1904 $ilCtrl = $this->ctrl;
1906 if ($a_cmd ===
"preview" || $a_cmd ===
"previewFullscreen" || $this->prvm) {
1910 $ilCtrl->setParameter($this,
"prvm",
"fsc");
1912 $this->insertHeaderAction($this->initHeaderAction(
null,
null,
true));
1914 $ilCtrl->setParameter($this,
"prvm",
"");
1918 $this->addHeaderAction();
1923 ?
string $sub_type =
null,
1924 ?
int $sub_id =
null,
1925 bool $is_preview =
false
1927 $ilUser = $this->
user;
1928 $ilCtrl = $this->ctrl;
1929 if (!$this->obj_id) {
1932 $sub_type = $sub_id =
null;
1933 if ($this->blpg > 0) {
1935 $sub_id = $this->blpg;
1938 $lg = parent::initHeaderAction($sub_type, $sub_id);
1942 $lg->enableComments(
false);
1943 $lg->enableNotes(
false);
1946 if ($this->blpg > 0) {
1947 if (($this->
object->getNotesStatus() && !$this->disable_notes)) {
1948 $lg->enableComments(
true);
1950 $lg->enableNotes(
true);
1952 $lg->enableTags(
false);
1955 $ilCtrl->setParameter($this,
"ntf", 1);
1956 $link = $ilCtrl->getLinkTarget($this,
"setNotification");
1957 $ilCtrl->setParameter($this,
"ntf",
"");
1959 $lg->addCustomCommand($link,
"blog_notification_toggle_off");
1965 $this->
lng->txt(
"blog_notification_activated")
1968 $ilCtrl->setParameter($this,
"ntf", 2);
1969 $link = $ilCtrl->getLinkTarget($this,
"setNotification");
1970 $ilCtrl->setParameter($this,
"ntf",
"");
1971 $lg->addCustomCommand($link,
"blog_notification_toggle_on");
1976 $this->
lng->txt(
"blog_notification_deactivated")
1981 if ($this->perm->mayContribute()) {
1982 $ilCtrl->setParameter($this,
"prvm",
"");
1984 $ilCtrl->setParameter($this,
"bmn",
"");
1985 $ilCtrl->setParameter($this,
"blpg",
"");
1986 $link = $ilCtrl->getLinkTarget($this,
"");
1987 $ilCtrl->setParameter($this,
"blpg", $sub_id);
1988 $ilCtrl->setParameter($this,
"bmn", $this->month);
1989 $lg->addCustomCommand($link,
"blog_edit");
1991 if ($sub_id && $this->perm->mayEditPosting($sub_id)) {
1992 $link = $ilCtrl->getLinkTargetByClass(
"ilblogpostinggui",
"edit");
1993 $lg->addCustomCommand($link,
"blog_edit_posting");
1996 $ilCtrl->setParameter($this,
"prvm",
"fsc");
1999 $ilCtrl->setParameter($this,
"ntf",
"");
2007 $ilUser = $this->user;
2008 $ilCtrl = $this->ctrl;
2010 switch ($this->ntf) {
2020 $ilCtrl->redirect($this,
"preview");
2032 if (
$post->getBlogId() === $a_blog_id) {
2033 return $post->getTitle();
2043 foreach ($this->items as $month => $postings) {
2044 foreach ($postings as
$id => $item) {
2046 unset($this->items[$month][
$id]);
2047 } elseif ($this->blog_settings->getApproval() && !$item[
"approved"]) {
2048 unset($this->items[$month][
$id]);
2051 if (!count($this->items[$month])) {
2052 unset($this->items[$month]);
2056 if ($this->items && !isset($this->items[$this->month])) {
2057 $keys = array_keys($this->items);
2058 $this->month = array_shift($keys);
2067 foreach ($a_items as $month => $items) {
2068 foreach ($items as $item) {
2082 $ilLocator = $this->locator;
2084 if (is_object($this->
object)) {
2085 $ilLocator->addItem($this->
object->getTitle(), $this->ctrl->getLinkTarget($this,
"preview"),
"", $this->node_id);
2091 if ($this->perm->canManage() && $this->apid > 0) {
2093 $post->setApproved(
true);
2094 $post->setBlogNodeId($this->node_id, ($this->id_type == self::WORKSPACE_NODE_ID));
2095 $post->update(
true,
false,
true,
"new");
2097 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"),
true);
2100 $this->
ctrl->redirect($this,
"render");
2110 $ilTabs = $this->tabs;
2111 $ilToolbar = $this->toolbar;
2112 $ilCtrl = $this->ctrl;
2116 if (!$this->checkPermissionBool(
"write")) {
2120 $ilTabs->activateTab(
"contributors");
2122 $local_roles = $this->
object->getAllLocalRoles($this->node_id);
2129 'auto_complete_name' =>
$lng->txt(
'user'),
2130 'submit_name' =>
$lng->txt(
'add'),
2131 'add_search' =>
true,
2132 'add_from_container' => $this->node_id,
2133 'user_type' => $local_roles
2138 $other_roles = $this->
object->getRolesWithContributeOrRedact($this->node_id);
2140 $this->tpl->setOnScreenMessage(
'info', sprintf(
$lng->txt(
"blog_contribute_other_roles"), implode(
", ", $other_roles)));
2143 $table = $this->gui->contributor()->contributorTableBuilder(
2144 $this->
object->getAllLocalRoles($this->node_id),
2149 if ($table->handleCommand()) {
2153 $tpl->setContent($table->render());
2163 $user_login = $this->blog_request->getUserLogin();
2164 $user_type = $this->blog_request->getUserType();
2166 if (trim($user_login) ===
'') {
2167 $this->tpl->setOnScreenMessage(
'failure',
$lng->txt(
'msg_no_search_string'));
2168 $this->contributors();
2171 $users = explode(
',', $user_login);
2173 $user_ids = array();
2174 foreach ($users as $user) {
2178 $this->tpl->setOnScreenMessage(
'failure',
$lng->txt(
'user_not_known'));
2179 $this->contributors();
2186 $this->addContributor($user_ids, $user_type);
2193 array $a_user_ids = array(),
2194 ?
string $a_user_type =
null
2196 $ilCtrl = $this->
ctrl;
2198 $rbacreview = $this->rbac_review;
2199 $rbacadmin = $this->rbacadmin;
2200 $a_user_type = (
int) $a_user_type;
2202 if (!$this->checkPermissionBool(
"write")) {
2206 if (!count($a_user_ids) || !$a_user_type) {
2207 $this->tpl->setOnScreenMessage(
'failure',
$lng->txt(
"no_checkbox"));
2208 $this->contributors();
2213 $local_roles = array_keys($this->
object->getAllLocalRoles($this->node_id));
2214 if (!in_array($a_user_type, $local_roles)) {
2215 $this->tpl->setOnScreenMessage(
'failure',
$lng->txt(
"missing_perm"));
2216 $this->contributors();
2220 foreach ($a_user_ids as
$user_id) {
2222 $a_user_type = (
int) $a_user_type;
2223 if (!$rbacreview->isAssigned(
$user_id, $a_user_type)) {
2228 $this->tpl->setOnScreenMessage(
'success',
$lng->txt(
"settings_saved"),
true);
2229 $ilCtrl->redirect($this,
"contributors");
2238 $ids = $this->blog_request->getIds();
2240 if (count($ids) === 0) {
2241 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"select_one"),
true);
2242 $this->
ctrl->redirect($this,
"contributors");
2246 $confirm->setHeaderText($this->
lng->txt(
'blog_confirm_delete_contributors'));
2247 $confirm->setFormAction($this->
ctrl->getFormAction($this,
'removeContributor'));
2248 $confirm->setConfirm($this->
lng->txt(
'delete'),
'removeContributor');
2249 $confirm->setCancel($this->
lng->txt(
'cancel'),
'contributors');
2255 $this->profile_gui->getNamePresentation(
$user_id,
false,
"",
true)
2259 $this->tpl->setContent($confirm->getHTML());
2264 $ilCtrl = $this->ctrl;
2266 $rbacadmin = $this->rbacadmin;
2268 $ids = $this->blog_request->getIds();
2270 if (count($ids) === 0) {
2271 $this->tpl->setOnScreenMessage(
'failure',
$lng->txt(
"select_one"),
true);
2272 $ilCtrl->redirect($this,
"contributors");
2276 $local_roles = array_keys($this->
object->getAllLocalRoles($this->node_id));
2277 if (!$local_roles) {
2278 $this->tpl->setOnScreenMessage(
'failure',
$lng->txt(
"missing_perm"));
2279 $this->contributors();
2284 foreach ($local_roles as $role_id) {
2289 $this->tpl->setOnScreenMessage(
'success',
$lng->txt(
"settings_saved"),
true);
2290 $this->
ctrl->redirect($this,
"contributors");
2299 $ids = $this->blog_request->getIds();
2304 $this->
ctrl->redirect($this,
"contributors");
2309 if ($this->checkPermissionBool(
"write") && $this->apid > 0) {
2312 $post->setApproved(
false);
2313 $post->setActive(
false);
2314 $post->update(
true,
false,
false);
2316 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"),
true);
2319 $this->
ctrl->redirect($this,
"render");
2338 $this->content_style_gui->
addCss(
2340 $this->
object->getRefId(),
2341 $this->object->getId()
2350 $this->export(
true);
2357 public function getPrintView(): \
ILIAS\Export\PrintProcessGUI
2359 $style_sheet_id = $this->content_style_domain->getEffectiveStyleId();
2362 $blog = $this->object;
2363 $provider = new \ILIAS\Blog\BlogPrintViewProviderGUI(
2368 $this->access_handler,
2370 $this->blog_request->getObjIds()
2373 return new \ILIAS\Export\PrintProcessGUI(
2383 $view = $this->getPrintView();
2389 $print_view = $this->getPrintView();
2390 $print_view->sendPrintView();
2395 $this->
ctrl->redirectByClass(ilExportGUI::class);
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
perm( $access_handler, ?int $node_id, int $id_type, int $user_id, int $owner)
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)
Class ilBlogPosting GUI class.
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.
static getAllPostings(int $a_blog_id, int $a_limit=1000, int $a_offset=0)
Get all postings of blog.
static lookupBlogId(int $a_posting_id)
static getKeywords(int $a_obj_id, int $a_posting_id)
static _numericMonthToString(int $a_month, bool $a_long=true, ?ilLanguage $lng=null)
numeric month to string
static _recordReadEvent(string $a_type, int $a_ref_id, int $obj_id, int $usr_id, bool $isCatchupWriteEvents=true, $a_ext_rc=null, $a_ext_time=null)
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
redirect(object $a_gui_obj, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false)
@inheritDoc
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
Base class for ILIAS Exception handling.
Export User Interface Class.
const CMD_LIST_EXPORT_FILES
static deliverFileLegacy(string $a_file, ?string $a_filename=null, ?string $a_mime=null, ?bool $isInline=false, ?bool $removeAfterDelivery=false, ?bool $a_exit_after=true)
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...
static _getStaticLink(?int $a_ref_id, string $a_type='', bool $a_fallback_goto=true, string $append="")
Last visited history for repository items.
static hasOptOut(int $obj_id)
Is opt out (disable notification) allowed?
static setNotification(int $type, int $user_id, int $id, bool $status=true)
Set notification status for object and user.
static hasNotification(int $type, int $user_id, int $id)
Check notification status for object and user.
@ilCtrl_Calls ilObjBlogGUI: ilBlogPostingGUI, ilWorkspaceAccessGUI @ilCtrl_Calls ilObjBlogGUI: ilInfo...
infoScreen()
this one is called from the info button in the repository
afterSave(ilObject $new_object)
Post (successful) object creation hook.
initHeaderAction(?string $sub_type=null, ?int $sub_id=null, bool $is_preview=false)
ILIAS Style Content GUIService $content_style_gui
executeCommand()
execute command
addUserFromAutoComplete()
Autocomplete submit.
getType()
Functions that must be overwritten.
confirmRemoveContributor(array $ids=[])
Used in ContributorTableBuilder.
static lookupSubObjectTitle(int $a_blog_id, int $a_posting_id)
Get title for blog posting (used in ilNotesGUI)
addHeaderActionForCommand(string $a_cmd)
renderList(array $items, string $a_cmd="preview", string $a_link_template="", bool $a_show_inactive=false, string $a_export_directory="")
Build posting month list.
addLocatorItems()
Functions to be overwritten.
getKeywords(bool $a_show_inactive, ?int $a_posting_id=null)
Get keywords for single posting or complete blog.
renderNavigationByAuthors(array $a_items, string $a_list_cmd="render", bool $a_show_inactive=false)
addContributor(array $a_user_ids=array(), ?string $a_user_type=null)
Centralized method to add contributors.
setSettingsSubTabs(string $a_active)
buildExportLink(string $a_template, string $a_type, string $a_id)
Build export link.
exportWithComments()
Handle export choice.
addContributorContainerAction(array $ids=[])
Used in ContributorTableBuilder.
renderNavigationByDate(array $a_items, string $a_list_cmd="render", string $a_posting_cmd="preview", ?string $a_link_template=null, bool $a_show_inactive=false, int $a_blpg=0)
Build navigation by date block.
ContextServices $tool_context
renderFullScreen(string $a_content, string $a_navigation)
Build fullscreen context.
createExportFileWithComments()
ILIAS Blog ReadingTime BlogSettingsGUI $reading_time_gui
buildExportFile(bool $a_include_comments=false, bool $print_version=false)
Build export file.
renderNavigation(string $a_list_cmd="render", string $a_posting_cmd="preview", ?string $a_link_template=null, bool $a_show_inactive=false, int $a_blpg=0)
Build navigation blocks.
render()
Render object context.
filterItemsByKeyword(array $a_items, string $a_keyword)
filterInactivePostings()
Filter inactive items from items list.
StandardGUIRequest $blog_request
setTabs()
create tabs (repository/workspace switch)
renderFullscreenHeader(ilGlobalTemplateInterface $a_tpl, int $a_user_id, bool $a_export=false)
ReadingTimeManager $reading_time_manager
disableNotes(bool $a_value=false)
__construct(int $a_id=0, int $a_id_type=self::REPOSITORY_NODE_ID, int $a_parent_node_id=0)
renderToolbarNavigation(array $a_items, bool $single_posting=false)
Toolbar navigation.
ILIAS Style Content Object ObjectFacade $content_style_domain
buildPostingList(int $a_obj_id)
Gather all blog postings.
preview()
Render fullscreen presentation.
InternalDomainService $domain
export(bool $a_with_comments=false)
Build and deliver export file.
createPosting()
Create new posting.
renderNavigationByKeywords(string $a_list_cmd="render", bool $a_show_inactive=false, string $a_link_template="", int $a_blpg=0)
Build navigation by keywords block.
ILIAS Notes Service $notes
ilNavigationHistory $nav_history
getListItems(bool $a_show_inactive=false)
Filter blog postings by month, keyword or author.
setContentStyleSheet(?ilGlobalTemplateInterface $a_tpl=null)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _lookupName(int $a_user_id)
static _lookupId(string|array $a_user_str)
static _getPersonalPicturePath(int $a_usr_id, string $a_size='small', bool $a_force_pic=false)
New implementation of ilObjectGUI.
ilGlobalTemplateInterface $tpl
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $node_id=null)
checkPermission(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
prepareOutput(bool $show_sub_objects=true)
GUI class for the workflow of copying objects.
addHeaderAction()
Add header action menu.
Class ilObject Basic functions for all objects.
static _lookupType(int $id, bool $reference=false)
static _lookupActive(int $a_id, string $a_parent_type, bool $a_check_scheduled_activation=false, string $a_lang="-")
lookup activation status
Class ilRbacAdmin Core functions for role based access control.
deassignUser(int $a_rol_id, int $a_usr_id)
Deassigns a user from a role.
assignUser(int $a_rol_id, int $a_usr_id)
Assigns an user to a role.
static fillAutoCompleteToolbar(object $parent_object, ?ilToolbarGUI $toolbar=null, array $a_options=[], bool $a_sticky=false)
array( auto_complete_name = $lng->txt('user'), auto_complete_size = 15, user_type = array(ilCoursePar...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
activateTab(string $a_id)
static getRelevanceClass(int $cnt, int $max)
special template class to simplify handling of ITX/PEAR
This class represents a text property in a property form.
checkForParentType(int $a_ref_id, string $a_type, bool $a_exclude_source_check=false)
Check for parent type e.g check if a folder (ref_id 3) is in a parent course obj => checkForParentTyp...
static getNamePresentation( $a_user_id, bool $a_user_image=false, bool $a_profile_link=false, string $a_profile_back_link='', bool $a_force_first_lastname=false, bool $a_omit_login=false, bool $a_sortable=true, bool $a_return_data_array=false, $a_ctrl_path=null)
Default behaviour is:
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...
setDescription(string $a_descr)
Sets description below title in standard template.
loadStandardTemplate()
This loads the standard template "tpl.adm_content.html" and "tpl.statusline.html" the CONTENT and STA...
setRightContent(string $a_html)
Sets content of right column.
addCss(string $a_css_file, string $media="screen")
Add a css file that should be included in the header.
setTitle(string $a_title, bool $hidden=false)
Sets title in standard template.
setTitleIcon(string $a_icon_path, string $a_icon_desc="")
set title icon
resetHeaderBlock(bool $a_reset_header_action=true)
Reset all header properties: title, icon, description, alerts, action menu.
setContent(string $a_html)
Sets content for standard template.
addOnLoadCode(string $a_code, int $a_batch=2)
Add on load code.
checkAccess(string $a_permission, string $a_cmd, int $a_ref_id, string $a_type="", ?int $a_obj_id=null, ?int $a_tree_id=null)
check access for an object (provide $a_type and $a_obj_id if available for better performance)
static http()
Fetches the global http state from ILIAS.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
catch(\Exception $e) $req
if(!file_exists('../ilias.ini.php'))