ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilObjBlog.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
23 
24 class ilObjBlog extends ilObject2
25 {
26  public const NAV_MODE_LIST = 1;
27  public const NAV_MODE_MONTH = 2;
28  public const ABSTRACT_DEFAULT_SHORTEN_LENGTH = 500;
29  public const ABSTRACT_DEFAULT_IMAGE_WIDTH = 144;
30  public const ABSTRACT_DEFAULT_IMAGE_HEIGHT = 144;
31  public const NAV_MODE_LIST_DEFAULT_POSTINGS = 10;
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  {
77  $ilDB = $this->db;
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  {
106  $ilDB = $this->db;
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 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const ABSTRACT_DEFAULT_IMAGE_WIDTH
static _lookupActive(int $a_id, string $a_parent_type, bool $a_check_scheduled_activation=false, string $a_lang="-")
lookup activation status
$res
Definition: ltiservices.php:66
Settings $blog_settings
const NAV_MODE_LIST_DEFAULT_POSTINGS
const IL_CAL_DATETIME
static getAllPostings(int $a_blog_id, int $a_limit=1000, int $a_offset=0)
Get all postings of blog.
cloneMetaData(ilObject $target_obj)
special template class to simplify handling of ITX/PEAR
SettingsManager $settings_manager
getLocalContributorRole(int $a_node_id)
getRolesWithContributeOrRedact(int $a_node_id)
ILIAS Style Content DomainService $content_style_domain
setNotesStatus(bool $a_status)
const NAV_MODE_LIST
static createDefaultRole(string $a_title, string $a_description, string $a_tpl_name, int $a_ref_id)
$url
Definition: shib_logout.php:68
getAllLocalRoles(int $a_node_id)
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.
const ABSTRACT_DEFAULT_SHORTEN_LENGTH
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _lookupObjId(int $ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static deleteAllBlogPostings(int $a_blog_id)
Delete all postings for blog.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
__construct(int $a_id=0, bool $a_reference=true)
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)
const ABSTRACT_DEFAULT_IMAGE_HEIGHT
static _getTranslation(string $a_role_title)
ilDBInterface $db
global $DIC
Definition: shib_login.php:26
static deliverRSS(string $a_wsp_id)
Deliver blog as rss feed.
doCloneObject(ilObject2 $new_obj, int $a_target_id, ?int $a_copy_id=null)
exit
static _getOperationIdByName(string $a_operation)
get operation id by name of operation
global $ilSetting
Definition: privfeed.php:31
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
__construct(Container $dic, ilPlugin $plugin)
getLocalEditorRole(int $a_node_id)
static removeForObject(int $type, int $id)
Remove all notifications for given object.
const NAV_MODE_MONTH
doCreate(bool $clone_mode=false)
ILIAS Notes Service $notes_service