ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilPDNewsBlockGUI.php
Go to the documentation of this file.
1<?php
2
21
29{
30 public static string $block_type = "pdnews";
31 protected bool $cache_hit = false;
33 protected bool $dynamic = false;
34 protected bool $acc_results = false;
36
37 public function __construct()
38 {
39 global $DIC;
40
42
43 $lng = $DIC->language();
44 $ilAccess = $DIC->access();
45 $this->obj_definition = $DIC["objDefinition"];
46
47 // NOT ilNewsForContextBlockGUI::__construct() !
49
50 $lng->loadLanguageModule("news");
51 $this->setLimit(5);
52
53 $this->dynamic = false;
54
55 $this->std_request = $DIC->news()
56 ->internal()
57 ->gui()
58 ->standardRequest();
59
60 $this->acache = new ilNewsCache();
61 $cres = unserialize((string) $this->acache->getEntry($this->user->getId() . ":0"), ["allowed_classes" => false]);
62 $this->cache_hit = false;
63 if (is_array($cres) && $this->acache->getLastAccessStatus() === "hit") {
64 self::$st_data = ilNewsItem::prepareNewsDataFromCache($cres);
65 $this->cache_hit = true;
66 }
67
68
69 if (empty(self::$st_data)) {
70 self::$st_data = $this->getNewsData();
71 }
73
74 $this->setTitle($lng->txt("news_internal_news"));
75 $this->setRowTemplate("tpl.block_row_news_for_context.html", "components/ILIAS/News");
76
77 $this->setData($data);
78
79 $this->handleView();
80
81 // reset access check results
82 $ilAccess->setResults((array) $this->acc_results);
83
84 $this->setPresentation(self::PRES_SEC_LIST);
85 }
86
87 public function getNewsData(): array
88 {
89 $ilUser = $this->user;
90
91 $this->acache = new ilNewsCache();
92
93 $per = ilNewsItem::_lookupUserPDPeriod($ilUser->getId());
95 $ilUser->getId(),
96 false,
97 false,
98 $per
99 );
100
101 $this->acache->storeEntry(
102 $ilUser->getId() . ":0",
103 serialize($data)
104 );
105
106 return $data;
107 }
108
109 public function getBlockType(): string
110 {
111 return self::$block_type;
112 }
113
114 public static function getScreenMode(): string
115 {
116 global $DIC;
117
118 $cmd = $DIC->ctrl()->getCmd();
119
120 switch ($cmd) {
121 case "showNews":
122 case "showFeedUrl":
123 case "editSettings":
124 case "changeFeedSettings":
125 return IL_SCREEN_CENTER;
126
127 default:
128 return IL_SCREEN_SIDE;
129 }
130 }
131
132 public function executeCommand()
133 {
134 $ilCtrl = $this->ctrl;
135
136 $next_class = $ilCtrl->getNextClass();
137 $cmd = $ilCtrl->getCmd("getHTML");
138
139 switch ($next_class) {
140 default:
141 return $this->$cmd();
142 }
143 }
144
145 public function getHTML(): string
146 {
147 $ilCtrl = $this->ctrl;
149 $ilUser = $this->user;
150
151 // @todo: find another solution for this
152 //$this->setFooterInfo($lng->txt("news_block_information"), true);
153
154 $news_set = new ilSetting("news");
155 $enable_internal_rss = $news_set->get("enable_rss_for_internal");
156 $allow_shorter_periods = $news_set->get("allow_shorter_periods");
157 $allow_longer_periods = $news_set->get("allow_longer_periods");
158 $enable_private_feed = $news_set->get("enable_private_feed");
159 // show feed url
160 if ($enable_internal_rss) {
161 // @todo: rss icon html ilRSSButtonGUI::get(ilRSSButtonGUI::ICON_RSS)
162 $this->addBlockCommand(
163 $ilCtrl->getLinkTarget($this, "showFeedUrl"),
164 $lng->txt("news_get_feed_url")
165 );
166 }
167
168 if ($allow_shorter_periods || $allow_longer_periods || $enable_private_feed) {
169 $this->addBlockCommand(
170 $ilCtrl->getLinkTarget($this, "editSettings"),
171 $lng->txt("settings")
172 );
173 }
174
175 $en = "";
176 if ($ilUser->getPref("il_feed_js") === "n") {
177 $en = $this->getJSEnabler();
178 }
179
180 return ilBlockGUI::getHTML() . $en;
181 }
182
183
184 public function showFeedUrl(): string
185 {
187 $ilCtrl = $this->ctrl;
188 $ilUser = $this->user;
189
190 $news_set = new ilSetting("news");
191
192 if ($news_set->get("enable_private_feed")) {
193 $tpl = new ilTemplate("tpl.show_priv_feed_url.html", true, true, "components/ILIAS/News");
194
195 $tpl->setVariable("TXT_PRIV_TITLE", $lng->txt("news_get_priv_feed_title"));
196
197 // #14365
198 if (ilObjUser::_getFeedPass($GLOBALS['DIC']['ilUser']->getId())) {
199 $tpl->setVariable("TXT_PRIV_INFO", $lng->txt("news_get_priv_feed_info"));
200 $tpl->setVariable("TXT_PRIV_FEED_URL", $lng->txt("news_feed_url"));
202 "VAL_PRIV_FEED_URL",
203 str_replace("://", "://" . $ilUser->getLogin() . ":-password-@", ILIAS_HTTP_PATH) . "/privfeed.php?client_id=" . rawurlencode(CLIENT_ID) . "&user_id=" . $ilUser->getId() .
204 "&hash=" . ilObjUser::_lookupFeedHash($ilUser->getId(), true)
205 );
207 "VAL_PRIV_FEED_URL_TXT",
208 str_replace("://", "://" . $ilUser->getLogin() . ":-password-@", ILIAS_HTTP_PATH) . "/privfeed.php?client_id=" . rawurlencode(CLIENT_ID) . "&<br />user_id=" . $ilUser->getId() .
209 "&hash=" . ilObjUser::_lookupFeedHash($ilUser->getId(), true)
210 );
211 } else {
212 $tpl->setVariable("TXT_PRIV_INFO", $lng->txt("news_inactive_private_feed_info"));
213 $tpl->setVariable("EDIT_SETTINGS_URL", $ilCtrl->getLinkTarget($this, "editSettings"));
214 $tpl->setVariable("EDIT_SETTINGS_TXT", $lng->txt("news_edit_news_settings"));
215 }
216 } else {
217 $tpl = new ilTemplate("tpl.show_feed_url.html", true, true, "components/ILIAS/News");
218 }
219 $tpl->setVariable("TXT_TITLE", $lng->txt("news_get_feed_title"));
220 $tpl->setVariable("TXT_INFO", $lng->txt("news_get_feed_info"));
221 $tpl->setVariable("TXT_FEED_URL", $lng->txt("news_feed_url"));
223 "VAL_FEED_URL",
224 ILIAS_HTTP_PATH . "/feed.php?client_id=" . rawurlencode(CLIENT_ID) . "&user_id=" . $ilUser->getId() .
225 "&hash=" . ilObjUser::_lookupFeedHash($ilUser->getId(), true)
226 );
228 "VAL_FEED_URL_TXT",
229 ILIAS_HTTP_PATH . "/feed.php?client_id=" . rawurlencode(CLIENT_ID) . "&<br />user_id=" . $ilUser->getId() .
230 "&hash=" . ilObjUser::_lookupFeedHash($ilUser->getId(), true)
231 );
232
233
234 $panel = $this->ui->factory()->panel()->standard(
235 $lng->txt("news_internal_news"),
236 $this->ui->factory()->legacy()->content($tpl->get())
237 );
238
239 return $this->ui->renderer()->render($panel);
240 }
241
242 public function editSettings(?ilPropertyFormGUI $a_private_form = null): string
243 {
244 $ilUser = $this->user;
246 $ilCtrl = $this->ctrl;
247 $returnForm = "";
248
249 $news_set = new ilSetting("news");
250 $allow_shorter_periods = $news_set->get("allow_shorter_periods");
251 $allow_longer_periods = $news_set->get("allow_longer_periods");
252 $enable_private_feed = $news_set->get("enable_private_feed");
253
254 if (!$a_private_form && ($allow_shorter_periods || $allow_longer_periods)) {
255 $form = new ilPropertyFormGUI();
256 $form->setFormAction($ilCtrl->getFormAction($this));
257 $form->setTitle($lng->txt("news_settings"));
258
259 $default_per = ilNewsItem::_lookupDefaultPDPeriod();
260 $per = ilNewsItem::_lookupUserPDPeriod($ilUser->getId());
261
262 $form->setTableWidth("100%");
263
264 $per_opts = [
265 2 => "2 " . $lng->txt("days"),
266 3 => "3 " . $lng->txt("days"),
267 5 => "5 " . $lng->txt("days"),
268 7 => "1 " . $lng->txt("week"),
269 14 => "2 " . $lng->txt("weeks"),
270 30 => "1 " . $lng->txt("month"),
271 60 => "2 " . $lng->txt("months"),
272 120 => "4 " . $lng->txt("months"),
273 180 => "6 " . $lng->txt("months"),
274 366 => "1 " . $lng->txt("year")
275 ];
276
277 $unset = [];
278 foreach ($per_opts as $k => $opt) {
279 if (!$allow_shorter_periods && ($k < $default_per)) {
280 $unset[$k] = $k;
281 }
282 if (!$allow_longer_periods && ($k > $default_per)) {
283 $unset[$k] = $k;
284 }
285 }
286 foreach ($unset as $k) {
287 unset($per_opts[$k]);
288 }
289
290 $per_sel = new ilSelectInputGUI(
291 $lng->txt("news_pd_period"),
292 "news_pd_period"
293 );
294 $per_sel->setOptions($per_opts);
295 $per_sel->setValue((string) $per);
296 $form->addItem($per_sel);
297
298 $form->addCommandButton("saveSettings", $lng->txt("save"));
299 $form->addCommandButton("cancelSettings", $lng->txt("cancel"));
300
301 $returnForm = $form->getHTML();
302 }
303
304 if ($enable_private_feed) {
305 if (!$a_private_form) {
306 $a_private_form = $this->initPrivateSettingsForm();
307 }
308 $returnForm .= ($returnForm === "")
309 ? $a_private_form->getHTML()
310 : "<br>" . $a_private_form->getHTML();
311 }
312
313 return $returnForm;
314 }
315
317 {
318 $ilCtrl = $this->ctrl;
320 $ilUser = $this->user;
321
322 $feed_form = new ilPropertyFormGUI();
323 $feed_form->setFormAction($ilCtrl->getFormAction($this));
324 $feed_form->setTitle($lng->txt("priv_feed_settings"));
325
326 $feed_form->setTableWidth("100%");
327
328 $enable_private_feed = new ilCheckboxInputGUI($lng->txt("news_enable_private_feed"), "enable_private_feed");
329 $enable_private_feed->setChecked((bool) ilObjUser::_getFeedPass($ilUser->getId()));
330 $feed_form->addItem($enable_private_feed);
331
332 $passwd = new ilPasswordInputGUI($lng->txt("password"), "desired_password");
333 $passwd->setRequired(true);
335 $enable_private_feed->addSubItem($passwd);
336
337 $feed_form->addCommandButton("changeFeedSettings", $lng->txt("save"));
338 $feed_form->addCommandButton("cancelSettings", $lng->txt("cancel"));
339
340 return $feed_form;
341 }
342
343 public function saveSettings(): string
344 {
345 $ilCtrl = $this->ctrl;
346 $ilUser = $this->user;
347
348 $news_set = new ilSetting("news");
349
351 $this->getBlockType(),
352 "news_pd_period",
353 $this->std_request->getDashboardPeriod(),
354 $ilUser->getId(),
355 0
356 );
357
358 $cache = new ilNewsCache();
359 $cache->deleteEntry($ilUser->getId() . ":0");
360
361 $ilCtrl->returnToParent($this);
362 return "";
363 }
364
365 public function changeFeedSettings(): string
366 {
367 $ilCtrl = $this->ctrl;
369 $ilUser = $this->user;
370
371 $form = $this->initPrivateSettingsForm();
372 if ($form->checkInput()) {
373 // Deactivate private Feed - just delete the password
374 if (!$form->getInput("enable_private_feed")) {
375 $ilUser->setFeedPass("");
376 $this->main_tpl->setOnScreenMessage('success', $lng->txt("priv_feed_disabled"), true);
377 // $ilCtrl->returnToParent($this);
378 $ilCtrl->redirect($this, "showFeedUrl");
379 } else {
380 $passwd = $form->getInput("desired_password");
381 if (LocalUserPasswordManager::getInstance()->verifyPassword($ilUser, $passwd)) {
382 $form->getItemByPostVar("desired_password")->setAlert($lng->txt("passwd_equals_ilpasswd"));
383 $this->main_tpl->setOnScreenMessage('failure', $lng->txt("form_input_not_valid"));
384 } else {
385 $ilUser->setFeedPass($passwd);
386 $this->main_tpl->setOnScreenMessage('success', $lng->txt("saved_successfully"), true);
387 $ilCtrl->redirect($this, "showFeedUrl");
388 }
389 }
390 }
391
392 $form->setValuesByPost();
393 return $this->editSettings($form);
394 }
395}
setVariable($variable, $value='')
Sets a variable value.
Definition: IT.php:544
const IL_SCREEN_SIDE
const IL_SCREEN_CENTER
setData(array $a_data)
ilLanguage $lng
setTitle(string $a_title)
setPresentation(int $type)
ilTemplate $tpl
addBlockCommand(string $a_href, string $a_text, string $a_onclick="", ?RoundTrip $modal=null)
ilObjUser $user
setLimit(int $a_limit)
setRowTemplate(string $a_rowtemplatename, string $a_rowtemplatedir="")
Set Row Template Name.
static _write(string $a_type, string $a_setting, string $a_value, int $a_user=0, int $a_block_id=0)
Write setting to database.
This class represents a checkbox property in a property form.
getNextClass($a_gui_class=null)
@inheritDoc
loadLanguageModule(string $a_module)
Load language module.
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...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
BlockGUI class for block NewsForContext.
handleView()
Handles show/hide notification view and removes notifications if hidden.
static _lookupUserPDPeriod(int $a_user_id)
static _getNewsItemsOfUser(int $a_user_id, bool $a_only_public=false, bool $a_prevent_aggregation=false, int $a_per=0, array &$a_cnt=[], bool $no_auto_generated=false, array $excluded=[], int $a_limit=0)
Get all news items for a user.
static prepareNewsDataFromCache(array $a_cres)
Prepare news data from cache.
static _lookupDefaultPDPeriod()
static _lookupFeedHash(int $a_user_id, bool $a_create=false)
static _getFeedPass(int $a_user_id)
BlockGUI class for block NewsForContext.
StandardGUIRequest $std_request
editSettings(?ilPropertyFormGUI $a_private_form=null)
This class represents a password property in a property form.
This class represents a property form user interface.
static getPasswordRequirementsInfo()
infotext for ilPasswordInputGUI setInfo()
This class represents a selection list property in a property form.
ILIAS Setting Class.
special template class to simplify handling of ITX/PEAR
get(string $part=ilGlobalTemplateInterface::DEFAULT_BLOCK)
Returns a block with all replacements done.
const CLIENT_ID
Definition: constants.php:41
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $DIC
Definition: shib_login.php:26
$GLOBALS["DIC"]
Definition: wac.php:54