ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
class.ilPDNewsBlockGUI.php
Go to the documentation of this file.
1<?php
2
21
29{
30 public static string $block_type = "pdnews";
31
32 public function __construct()
33 {
34 $this->prevent_initial_loading = true; // prevents loading in the parent constructor!
36
37 $this->dynamic = false;
38 $this->setLimit(5);
39 $this->setTitle($this->lng->txt("news_internal_news"));
40 $this->setRowTemplate("tpl.block_row_news_for_context.html", "components/ILIAS/News");
41
42 $this->loadNewsData();
43 $this->handleView();
44 $this->setPresentation(self::PRES_SEC_LIST);
45 }
46
47 private function loadNewsData(): void
48 {
49 $news_period = ilNewsItem::_lookupUserPDPeriod($this->user->getId());
50 $collection = $this->domain->collection()->getNewsForUser(
51 $this->user,
52 new NewsCriteria(period: $news_period, only_public: false),
53 true
54 );
55 $this->initData($collection->groupFiles()->groupForums(false));
56 }
57
58 public function getBlockType(): string
59 {
60 return self::$block_type;
61 }
62
63 public static function getScreenMode(): string
64 {
65 global $DIC;
66
67 $cmd = $DIC->ctrl()->getCmd();
68
69 switch ($cmd) {
70 case "showNews":
71 case "showFeedUrl":
72 case "editSettings":
73 case "changeFeedSettings":
74 return IL_SCREEN_CENTER;
75
76 default:
77 return IL_SCREEN_SIDE;
78 }
79 }
80
81 public function executeCommand()
82 {
83 $cmd = $this->ctrl->getCmd();
84 return $this->$cmd();
85 }
86
87 public function getHTML(): string
88 {
89 $ilCtrl = $this->ctrl;
91 $ilUser = $this->user;
92
93 // @todo: find another solution for this
94 //$this->setFooterInfo($lng->txt("news_block_information"), true);
95
96 $news_set = new ilSetting("news");
97 $enable_internal_rss = $news_set->get("enable_rss_for_internal");
98 $allow_shorter_periods = $news_set->get("allow_shorter_periods");
99 $allow_longer_periods = $news_set->get("allow_longer_periods");
100 $enable_private_feed = $news_set->get("enable_private_feed");
101 // show feed url
102 if ($enable_internal_rss) {
103 // @todo: rss icon html ilRSSButtonGUI::get(ilRSSButtonGUI::ICON_RSS)
104 $this->addBlockCommand(
105 $ilCtrl->getLinkTarget($this, "showFeedUrl"),
106 $lng->txt("news_get_feed_url")
107 );
108 }
109
110 if ($allow_shorter_periods || $allow_longer_periods || $enable_private_feed) {
111 $this->addBlockCommand(
112 $ilCtrl->getLinkTarget($this, "editSettings"),
113 $lng->txt("settings")
114 );
115 }
116
117 $en = "";
118 if ($ilUser->getPref("il_feed_js") === "n") {
119 $en = $this->getJSEnabler();
120 }
121
122 return ilBlockGUI::getHTML() . $en;
123 }
124
125
126 public function showFeedUrl(): string
127 {
129 $ilCtrl = $this->ctrl;
130 $ilUser = $this->user;
131
132 $news_set = new ilSetting("news");
133
134 if ($news_set->get("enable_private_feed")) {
135 $tpl = new ilTemplate("tpl.show_priv_feed_url.html", true, true, "components/ILIAS/News");
136
137 $tpl->setVariable("TXT_PRIV_TITLE", $lng->txt("news_get_priv_feed_title"));
138
139 // #14365
140 if (ilObjUser::_getFeedPass($GLOBALS['DIC']['ilUser']->getId())) {
141 $tpl->setVariable("TXT_PRIV_INFO", $lng->txt("news_get_priv_feed_info"));
142 $tpl->setVariable("TXT_PRIV_FEED_URL", $lng->txt("news_feed_url"));
144 "VAL_PRIV_FEED_URL",
145 str_replace("://", "://" . $ilUser->getLogin() . ":-password-@", ILIAS_HTTP_PATH) . "/privfeed.php?client_id=" . rawurlencode(CLIENT_ID) . "&user_id=" . $ilUser->getId() .
146 "&hash=" . ilObjUser::_lookupFeedHash($ilUser->getId(), true)
147 );
149 "VAL_PRIV_FEED_URL_TXT",
150 str_replace("://", "://" . $ilUser->getLogin() . ":-password-@", ILIAS_HTTP_PATH) . "/privfeed.php?client_id=" . rawurlencode(CLIENT_ID) . "&<br />user_id=" . $ilUser->getId() .
151 "&hash=" . ilObjUser::_lookupFeedHash($ilUser->getId(), true)
152 );
153 } else {
154 $tpl->setVariable("TXT_PRIV_INFO", $lng->txt("news_inactive_private_feed_info"));
155 $tpl->setVariable("EDIT_SETTINGS_URL", $ilCtrl->getLinkTarget($this, "editSettings"));
156 $tpl->setVariable("EDIT_SETTINGS_TXT", $lng->txt("news_edit_news_settings"));
157 }
158 } else {
159 $tpl = new ilTemplate("tpl.show_feed_url.html", true, true, "components/ILIAS/News");
160 }
161 $tpl->setVariable("TXT_TITLE", $lng->txt("news_get_feed_title"));
162 $tpl->setVariable("TXT_INFO", $lng->txt("news_get_feed_info"));
163 $tpl->setVariable("TXT_FEED_URL", $lng->txt("news_feed_url"));
165 "VAL_FEED_URL",
166 ILIAS_HTTP_PATH . "/feed.php?client_id=" . rawurlencode(CLIENT_ID) . "&user_id=" . $ilUser->getId() .
167 "&hash=" . ilObjUser::_lookupFeedHash($ilUser->getId(), true)
168 );
170 "VAL_FEED_URL_TXT",
171 ILIAS_HTTP_PATH . "/feed.php?client_id=" . rawurlencode(CLIENT_ID) . "&<br />user_id=" . $ilUser->getId() .
172 "&hash=" . ilObjUser::_lookupFeedHash($ilUser->getId(), true)
173 );
174
175
176 $panel = $this->ui->factory()->panel()->standard(
177 $lng->txt("news_internal_news"),
178 $this->ui->factory()->legacy()->content($tpl->get())
179 );
180
181 return $this->ui->renderer()->render($panel);
182 }
183
184 public function editSettings(?ilPropertyFormGUI $a_private_form = null): string
185 {
186 $ilUser = $this->user;
188 $ilCtrl = $this->ctrl;
189 $returnForm = "";
190
191 $news_set = new ilSetting("news");
192 $allow_shorter_periods = $news_set->get("allow_shorter_periods");
193 $allow_longer_periods = $news_set->get("allow_longer_periods");
194 $enable_private_feed = $news_set->get("enable_private_feed");
195
196 if (!$a_private_form && ($allow_shorter_periods || $allow_longer_periods)) {
197 $form = new ilPropertyFormGUI();
198 $form->setFormAction($ilCtrl->getFormAction($this));
199 $form->setTitle($lng->txt("news_settings"));
200
201 $default_per = ilNewsItem::_lookupDefaultPDPeriod();
202 $per = ilNewsItem::_lookupUserPDPeriod($ilUser->getId());
203
204 $form->setTableWidth("100%");
205
206 $per_opts = [
207 2 => "2 " . $lng->txt("days"),
208 3 => "3 " . $lng->txt("days"),
209 5 => "5 " . $lng->txt("days"),
210 7 => "1 " . $lng->txt("week"),
211 14 => "2 " . $lng->txt("weeks"),
212 30 => "1 " . $lng->txt("month"),
213 60 => "2 " . $lng->txt("months"),
214 120 => "4 " . $lng->txt("months"),
215 180 => "6 " . $lng->txt("months"),
216 366 => "1 " . $lng->txt("year")
217 ];
218
219 $unset = [];
220 foreach ($per_opts as $k => $opt) {
221 if (!$allow_shorter_periods && ($k < $default_per)) {
222 $unset[$k] = $k;
223 }
224 if (!$allow_longer_periods && ($k > $default_per)) {
225 $unset[$k] = $k;
226 }
227 }
228 foreach ($unset as $k) {
229 unset($per_opts[$k]);
230 }
231
232 $per_sel = new ilSelectInputGUI(
233 $lng->txt("news_pd_period"),
234 "news_pd_period"
235 );
236 $per_sel->setOptions($per_opts);
237 $per_sel->setValue((string) $per);
238 $form->addItem($per_sel);
239
240 $form->addCommandButton("saveSettings", $lng->txt("save"));
241 $form->addCommandButton("cancelSettings", $lng->txt("cancel"));
242
243 $returnForm = $form->getHTML();
244 }
245
246 if ($enable_private_feed) {
247 if (!$a_private_form) {
248 $a_private_form = $this->initPrivateSettingsForm();
249 }
250 $returnForm .= ($returnForm === "")
251 ? $a_private_form->getHTML()
252 : "<br>" . $a_private_form->getHTML();
253 }
254
255 return $returnForm;
256 }
257
259 {
260 $ilCtrl = $this->ctrl;
262 $ilUser = $this->user;
263
264 $feed_form = new ilPropertyFormGUI();
265 $feed_form->setFormAction($ilCtrl->getFormAction($this));
266 $feed_form->setTitle($lng->txt("priv_feed_settings"));
267
268 $feed_form->setTableWidth("100%");
269
270 $enable_private_feed = new ilCheckboxInputGUI($lng->txt("news_enable_private_feed"), "enable_private_feed");
271 $enable_private_feed->setChecked((bool) ilObjUser::_getFeedPass($ilUser->getId()));
272 $feed_form->addItem($enable_private_feed);
273
274 $passwd = new ilPasswordInputGUI($lng->txt("password"), "desired_password");
275 $passwd->setRequired(true);
277 $enable_private_feed->addSubItem($passwd);
278
279 $feed_form->addCommandButton("changeFeedSettings", $lng->txt("save"));
280 $feed_form->addCommandButton("cancelSettings", $lng->txt("cancel"));
281
282 return $feed_form;
283 }
284
285 public function saveSettings(): string
286 {
287 $ilCtrl = $this->ctrl;
288 $ilUser = $this->user;
289
290 $news_set = new ilSetting("news");
291
293 $this->getBlockType(),
294 "news_pd_period",
295 $this->std_request->getDashboardPeriod(),
296 $ilUser->getId(),
297 0
298 );
299
300 $this->domain->collection()->invalidateCache($this->user->getId());
301
302 $ilCtrl->returnToParent($this);
303 return "";
304 }
305
306 public function changeFeedSettings(): string
307 {
308 $ilCtrl = $this->ctrl;
310 $ilUser = $this->user;
311
312 $form = $this->initPrivateSettingsForm();
313 if ($form->checkInput()) {
314 // Deactivate private Feed - just delete the password
315 if (!$form->getInput("enable_private_feed")) {
316 $ilUser->setFeedPass("");
317 $this->main_tpl->setOnScreenMessage('success', $lng->txt("priv_feed_disabled"), true);
318 // $ilCtrl->returnToParent($this);
319 $ilCtrl->redirect($this, "showFeedUrl");
320 } else {
321 $passwd = $form->getInput("desired_password");
322 if (LocalUserPasswordManager::getInstance()->verifyPassword($ilUser, $passwd)) {
323 $form->getItemByPostVar("desired_password")->setAlert($lng->txt("passwd_equals_ilpasswd"));
324 $this->main_tpl->setOnScreenMessage('failure', $lng->txt("form_input_not_valid"));
325 } else {
326 $ilUser->setFeedPass($passwd);
327 $this->main_tpl->setOnScreenMessage('success', $lng->txt("saved_successfully"), true);
328 $ilCtrl->redirect($this, "showFeedUrl");
329 }
330 }
331 }
332
333 $form->setValuesByPost();
334 return $this->editSettings($form);
335 }
336}
setVariable($variable, $value='')
Sets a variable value.
Definition: IT.php:544
News Criteria DTO for querying news items supports caching, JSON serialization, and validation.
const IL_SCREEN_SIDE
const IL_SCREEN_CENTER
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.
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...
BlockGUI class for block NewsForContext.
handleView()
Handles show/hide notification view and removes notifications if hidden.
initData(NewsCollection $collection)
static _lookupUserPDPeriod(int $a_user_id)
static _lookupDefaultPDPeriod()
static _lookupFeedHash(int $a_user_id, bool $a_create=false)
static _getFeedPass(int $a_user_id)
BlockGUI class for block NewsForContext.
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