ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilObjBlog.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
23
24class ilObjBlog extends ilObject2
25{
26 public const NAV_MODE_LIST = 1;
27 public const NAV_MODE_MONTH = 2;
29 public const ABSTRACT_DEFAULT_IMAGE_WIDTH = 144;
32 protected ?Settings $blog_settings = null;
34 protected \ILIAS\Style\Content\DomainService $content_style_domain;
35 protected \ILIAS\Notes\Service $notes_service;
36
37 protected bool $notes = false;
38 protected bool $style = false;
39
40 public function __construct(
41 int $a_id = 0,
42 bool $a_reference = true
43 ) {
44 global $DIC;
45
46 $this->notes_service = $DIC->notes();
47 $this->settings_manager = $DIC->blog()->internal()->domain()->blogSettings();
48
49 parent::__construct($a_id, $a_reference);
50 $this->rbac_review = $DIC->rbac()->review();
51
52 $this->content_style_domain = $DIC
53 ->contentStyle()
54 ->domain();
55
56 if ($this->getId() > 0) {
57 $this->blog_settings = $this->settings_manager->getByObjId($this->getId());
58 }
59 }
60
61 protected function initType(): void
62 {
63 $this->type = "blog";
64 }
65
66 protected function doRead(): void
67 {
68 // #14661
69 $this->setNotesStatus(
70 $this->notes_service->domain()->commentsActive($this->id)
71 );
72 $this->blog_settings = $this->settings_manager->getByObjId($this->getId());
73 }
74
75 protected function doCreate(bool $clone_mode = false): void
76 {
78
79 $this->createMetaData();
80
81 $ilDB->manipulate("INSERT INTO il_blog (id,ppic,rss_active,approval" .
82 ",abs_shorten,abs_shorten_len,abs_image,abs_img_width,abs_img_height" .
83 ",keywords,authors,nav_mode,nav_list_mon_with_post,ov_post) VALUES (" .
84 $ilDB->quote($this->id, "integer") . "," .
85 $ilDB->quote(true, "integer") . "," .
86 $ilDB->quote(true, "integer") . "," .
87 $ilDB->quote(false, "integer") . "," .
88 $ilDB->quote(false, "integer") . "," .
89 $ilDB->quote(0, "integer") . "," .
90 $ilDB->quote(false, "integer") . "," .
91 $ilDB->quote(0, "integer") . "," .
92 $ilDB->quote(0, "integer") . "," .
93 $ilDB->quote(true, "integer") . "," .
94 $ilDB->quote(false, "integer") . "," .
95 $ilDB->quote(self::NAV_MODE_LIST, "integer") . "," .
96 $ilDB->quote(5, "integer") . "," .
97 $ilDB->quote(5, "integer") .
98 ")");
99
100 // #14661
101 $this->notes_service->domain()->activateComments($this->id);
102 }
103
104 protected function doDelete(): void
105 {
107
108 $this->deleteMetaData();
109
111
112 // remove all notifications
114
115 $ilDB->manipulate("DELETE FROM il_blog" .
116 " WHERE id = " . $ilDB->quote($this->id, "integer"));
117 }
118
119 protected function doUpdate(): void
120 {
121 $this->updateMetaData();
122
123 if ($this->id) {
124 // #14661
125 $this->notes_service->domain()->activateComments(
126 $this->id,
127 $this->getNotesStatus()
128 );
129 }
130 }
131
132 protected function doCloneObject(ilObject2 $new_obj, int $a_target_id, ?int $a_copy_id = null): void
133 {
134 assert($new_obj instanceof ilObjBlog);
135
136 $new_obj->setNotesStatus($this->getNotesStatus());
137 $new_obj->update();
138
139 $this->settings_manager->clone($this->getId(), $new_obj->getId());
140
141 // set/copy stylesheet
142 $this->content_style_domain->styleForObjId($this->getId())->cloneTo($new_obj->getId());
143
144 $this->cloneMetaData($new_obj);
145 }
146
147 public function getNotesStatus(): bool
148 {
149 return $this->notes;
150 }
151
152 public function setNotesStatus(bool $a_status): void
153 {
154 $this->notes = $a_status;
155 }
156
157 public static function sendNotification(
158 string $a_action,
159 bool $a_in_wsp,
160 int $a_blog_node_id,
161 int $a_posting_id,
162 ?string $a_comment = null
163 ): void {
164 global $DIC;
165
166 $DIC->blog()->internal()->domain()->notification()->sendNotification(
167 $a_action,
168 $a_in_wsp,
169 $a_blog_node_id,
170 $a_posting_id,
171 $a_comment
172 );
173 }
174
178 public static function deliverRSS(string $a_wsp_id): void
179 {
180 global $DIC;
181
182 $ilSetting = $DIC->settings();
183
184 if (!$ilSetting->get('enable_global_profiles')) {
185 return;
186 }
187
188 // #10827
189 if (!str_ends_with($a_wsp_id, "_cll")) {
190 $wsp_id = new ilWorkspaceTree(0);
191 $obj_id = $wsp_id->lookupObjectId((int) $a_wsp_id);
192 $is_wsp = "_wsp";
193 $pl = $DIC->blog()->internal()->gui()->permanentLink(0, (int) $a_wsp_id);
194 } else {
195 $a_wsp_id = substr($a_wsp_id, 0, -4);
196 $obj_id = ilObject::_lookupObjId((int) $a_wsp_id);
197 $is_wsp = null;
198 $pl = $DIC->blog()->internal()->gui()->permanentLink((int) $a_wsp_id);
199 }
200 if (!$obj_id) {
201 return;
202 }
203
204 $blog_settings = $DIC->blog()->internal()->domain()->blogSettings()
205 ->getByObjId($obj_id);
206 if (!$blog_settings?->getRSS()) {
207 return;
208 }
209
210 $blog = new self($obj_id, false);
211 $feed = new ilFeedWriter();
212
213 $url = $pl->getPermanentLink();
214 $url = str_replace("&", "&amp;", $url);
215
216 // #11870
217 $feed->setChannelTitle(str_replace("&", "&amp;", $blog->getTitle()));
218 $feed->setChannelDescription(str_replace("&", "&amp;", $blog->getDescription()));
219 $feed->setChannelLink($url);
220
221 // needed for blogpostinggui / pagegui
222 $tpl = new ilGlobalTemplate("tpl.main.html", true, true);
223
224 foreach (ilBlogPosting::getAllPostings($obj_id) as $item) {
225 $id = $item["id"];
226
227 // only published items
228 $is_active = ilBlogPosting::_lookupActive($id, "blp");
229 if (!$is_active) {
230 continue;
231 }
232
233 // #16434
234 $snippet = strip_tags(ilBlogPostingGUI::getSnippet($id), "<br><br/><div><p>");
235 $snippet = str_replace("&", "&amp;", $snippet);
236 $snippet = "<![CDATA[" . $snippet . "]]>";
237
238 $url = $pl->getPermanentLink((int) $id);
239 $url = str_replace("&", "&amp;", $url);
240
241 $feed_item = new ilFeedItem();
242 $feed_item->setTitle(str_replace("&", "&amp;", $item["title"])); // #16022
243 $feed_item->setDate($item["created"]->get(IL_CAL_DATETIME));
244 $feed_item->setDescription($snippet);
245 $feed_item->setLink($url);
246 $feed_item->setAbout($url);
247 $feed->addItem($feed_item);
248 }
249
250 $feed->showFeed();
251 exit();
252 }
253
254 public function initDefaultRoles(): void
255 {
257 'il_blog_contributor_' . $this->getRefId(),
258 "Contributor of blog obj_no." . $this->getId(),
259 'il_blog_contributor',
260 $this->getRefId()
261 );
262
264 'il_blog_editor_' . $this->getRefId(),
265 "Editor of blog obj_no." . $this->getId(),
266 'il_blog_editor',
267 $this->getRefId()
268 );
269 }
270
271 public function getLocalContributorRole(int $a_node_id): int
272 {
273 foreach ($this->rbac_review->getLocalRoles($a_node_id) as $role_id) {
274 if (str_starts_with(ilObject::_lookupTitle($role_id), "il_blog_contributor")) {
275 return $role_id;
276 }
277 }
278 return 0;
279 }
280
281 public function getLocalEditorRole(int $a_node_id): int
282 {
283 foreach ($this->rbac_review->getLocalRoles($a_node_id) as $role_id) {
284 if (strpos(ilObject::_lookupTitle($role_id), "il_blog_editor") === 0) {
285 return $role_id;
286 }
287 }
288 return 0;
289 }
290
291 public function getAllLocalRoles(int $a_node_id): array
292 {
293 $res = array();
294 foreach ($this->rbac_review->getLocalRoles($a_node_id) as $role_id) {
296 }
297
298 asort($res);
299 return $res;
300 }
301
302 public function getRolesWithContributeOrRedact(int $a_node_id): array
303 {
304 $contr_op_id = ilRbacReview::_getOperationIdByName("contribute");
305 $redact_op_id = ilRbacReview::_getOperationIdByName("redact");
306 $contr_role_id = $this->getLocalContributorRole($a_node_id);
307 $editor_role_id = $this->getLocalEditorRole($a_node_id);
308
309 $res = array();
310 foreach ($this->rbac_review->getParentRoleIds($a_node_id) as $role_id => $role) {
311 if ($role_id != $contr_role_id &&
312 $role_id != $editor_role_id) {
313 $all_ops = $this->rbac_review->getActiveOperationsOfRole($a_node_id, $role_id);
314 if (in_array($contr_op_id, $all_ops) ||
315 in_array($redact_op_id, $all_ops)) {
316 $res[$role_id] = ilObjRole::_getTranslation($role["title"]);
317 }
318 }
319 }
320
321 return $res;
322 }
323}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
const IL_CAL_DATETIME
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 deleteAllBlogPostings(int $a_blog_id)
Delete all postings for blog.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
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
static removeForObject(int $type, int $id)
Remove all notifications for given object.
getRolesWithContributeOrRedact(int $a_node_id)
Settings $blog_settings
getLocalEditorRole(int $a_node_id)
getAllLocalRoles(int $a_node_id)
SettingsManager $settings_manager
setNotesStatus(bool $a_status)
doCloneObject(ilObject2 $new_obj, int $a_target_id, ?int $a_copy_id=null)
const NAV_MODE_MONTH
ILIAS Style Content DomainService $content_style_domain
__construct(int $a_id=0, bool $a_reference=true)
Constructor.
doCreate(bool $clone_mode=false)
static sendNotification(string $a_action, bool $a_in_wsp, int $a_blog_node_id, int $a_posting_id, ?string $a_comment=null)
const NAV_MODE_LIST
initDefaultRoles()
init default roles settings Purpose of this function is to create a local role folder and local roles...
getLocalContributorRole(int $a_node_id)
const ABSTRACT_DEFAULT_SHORTEN_LENGTH
const ABSTRACT_DEFAULT_IMAGE_WIDTH
const NAV_MODE_LIST_DEFAULT_POSTINGS
ILIAS Notes Service $notes_service
static deliverRSS(string $a_wsp_id)
Deliver blog as rss feed.
const ABSTRACT_DEFAULT_IMAGE_HEIGHT
static createDefaultRole(string $a_title, string $a_description, string $a_tpl_name, int $a_ref_id)
static _getTranslation(string $a_role_title)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
cloneMetaData(ilObject $target_obj)
Copy meta data.
static _lookupObjId(int $ref_id)
static _lookupTitle(int $obj_id)
ilDBInterface $db
static _lookupActive(int $a_id, string $a_parent_type, bool $a_check_scheduled_activation=false, string $a_lang="-")
lookup activation status
static _getOperationIdByName(string $a_operation)
get operation id by name of operation
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
exit
$res
Definition: ltiservices.php:69
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $ilSetting
Definition: privfeed.php:31
global $DIC
Definition: shib_login.php:26
$url
Definition: shib_logout.php:68