ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilContainerSessionsContentGUI.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2008 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +-----------------------------------------------------------------------------+
22*/
23
24include_once("./Services/Container/classes/class.ilContainerContentGUI.php");
25
34{
38 protected $tabs;
39
40 protected $force_details = array();
41
46 public function __construct($container_gui_obj)
47 {
48 global $DIC;
49
50 $this->tabs = $DIC->tabs();
51 $this->user = $DIC->user();
52 $this->ctrl = $DIC->ctrl();
53 $lng = $DIC->language();
54
55 parent::__construct($container_gui_obj);
56 $this->lng = $lng;
57 $this->initDetails();
58 }
59
60
68 public function getDetailsLevel($a_session_id)
69 {
70 if ($this->getContainerGUI()->isActiveAdministrationPanel()) {
72 }
73 if (isset($_SESSION['sess']['expanded'][$a_session_id])) {
74 return $_SESSION['sess']['expanded'][$a_session_id];
75 }
76 if (in_array($a_session_id, $this->force_details)) {
77 return self::DETAILS_ALL;
78 } else {
80 }
81 }
82
83
87 public function getMainContent()
88 {
90 $ilTabs = $this->tabs;
91
92 // see bug #7452
93 // $ilTabs->setSubTabActive($this->getContainerObject()->getType().'_content');
94
95
96 include_once 'Services/Object/classes/class.ilObjectListGUIFactory.php';
97
98 $tpl = new ilTemplate(
99 "tpl.container_page.html",
100 true,
101 true,
102 "Services/Container"
103 );
104
105 $this->__showMaterials($tpl);
106
107 return $tpl->get();
108 }
109
113 public function __showMaterials($a_tpl)
114 {
116
117 $this->items = $this->getContainerObject()->getSubItems($this->getContainerGUI()->isActiveAdministrationPanel());
119
120 $this->initRenderer();
121
122 $output_html = $this->getContainerGUI()->getContainerPageHTML();
123
124 // get embedded blocks
125 if ($output_html != "") {
126 $output_html = $this->insertPageEmbeddedBlocks($output_html);
127 }
128
129 $prefix = $postfix = '';
130 if (is_array($this->items["sess"]) ||
131 $this->items['sess_link']['prev']['value'] ||
132 $this->items['sess_link']['next']['value']) {
133 $this->items['sess'] = ilUtil::sortArray($this->items['sess'], 'start', 'asc', true, false);
134
135 if ($this->items['sess_link']['prev']['value']) {
136 $prefix = $this->renderSessionLimitLink(true);
137 }
138 if ($this->items['sess_link']['next']['value']) {
139 $postfix = $this->renderSessionLimitLink(false);
140 }
141
142 $this->renderer->addTypeBlock("sess", $prefix, $postfix);
143 $this->renderer->setBlockPosition("sess", 1);
144
145 $position = 1;
146 foreach ($this->items["sess"] as $item_data) {
147 if (!$this->renderer->hasItem($item_data["child"])) {
148 $html = $this->renderItem($item_data, $position++, true);
149 if ($html != "") {
150 $this->renderer->addItemToBlock("sess", $item_data["type"], $item_data["child"], $html);
151 }
152 }
153 }
154 #22328 render session block if previous or next session link is available
155 if (
156 !count($this->items['sess'] ?? []) &&
157 ($prefix !== '' || $postfix !== '')
158 ) {
159 $this->renderer->addItemToBlock('sess', '', 0, '&nbsp;');
160 }
161 }
162 $pos = $this->getItemGroupsHTML(1);
163 if (is_array($this->items["_all"])) {
164 $this->renderer->addCustomBlock("_all", $lng->txt("content"));
165 $this->renderer->setBlockPosition("_all", ++$pos);
166
167 $position = 1;
168
169 foreach ($this->items["_all"] as $item_data) {
170 // #14599
171 if ($item_data["type"] == "sess" || $item_data["type"] == "itgr") {
172 continue;
173 }
174
175 if (!$this->renderer->hasItem($item_data["child"])) {
176 $html = $this->renderItem($item_data, $position++, true);
177 if ($html != "") {
178 $this->renderer->addItemToBlock("_all", $item_data["type"], $item_data["child"], $html);
179 }
180 }
181 }
182 }
183
184 $output_html .= $this->renderer->getHTML();
185
186 $a_tpl->setVariable("CONTAINER_PAGE_CONTENT", $output_html);
187 }
188
193 protected function renderSessionLimitLink($a_previous = true)
194 {
197 $ilCtrl = $this->ctrl;
198
199 $lng->loadLanguageModule('crs');
200
201 $tpl = new ilTemplate(
202 'tpl.container_list_item.html',
203 true,
204 true,
205 "Services/Container"
206 );
207 $tpl->setVariable('DIV_CLASS', 'ilContainerListItemOuter');
208 $tpl->setCurrentBlock('item_title_linked');
209
210 if ($a_previous) {
211 $prefp = $ilUser->getPref('crs_sess_show_prev_' . $this->getContainerObject()->getId());
212
213 if ($prefp) {
214 $tpl->setVariable('TXT_TITLE_LINKED', $lng->txt('crs_link_hide_prev_sessions'));
215 $ilCtrl->setParameterByClass(get_class($this->getContainerGUI()), 'crs_prev_sess', (int) !$prefp);
216 $tpl->setVariable('HREF_TITLE_LINKED', $ilCtrl->getLinkTargetByClass(get_class($this->getContainerGUI()), 'view'));
217 } else {
218 $tpl->setVariable('TXT_TITLE_LINKED', $lng->txt('crs_link_show_all_prev_sessions'));
219 $ilCtrl->setParameterByClass(get_class($this->getContainerGUI()), 'crs_prev_sess', (int) !$prefp);
220 $tpl->setVariable('HREF_TITLE_LINKED', $ilCtrl->getLinkTargetByClass(get_class($this->getContainerGUI()), 'view'));
221 }
222 $ilCtrl->clearParametersByClass(get_class($this->getContainerGUI()));
223 } else {
224 $prefn = $ilUser->getPref('crs_sess_show_next_' . $this->getContainerObject()->getId());
225
226 if ($prefn) {
227 $tpl->setVariable('TXT_TITLE_LINKED', $lng->txt('crs_link_hide_next_sessions'));
228 } else {
229 $tpl->setVariable('TXT_TITLE_LINKED', $lng->txt('crs_link_show_all_next_sessions'));
230 }
231 $ilCtrl->setParameterByClass(get_class($this->getContainerGUI()), 'crs_next_sess', (int) !$prefn);
232 $tpl->setVariable('HREF_TITLE_LINKED', $ilCtrl->getLinkTargetByClass(get_class($this->getContainerGUI()), 'view'));
233 $ilCtrl->clearParametersByClass(get_class($this->getContainerGUI()));
234 }
235 $tpl->parseCurrentBlock();
236
237 return $tpl->get();
238 }
239
240
248 public function addFooterRow($tpl)
249 {
250 $ilCtrl = $this->ctrl;
251
252 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
253
254 $tpl->setCurrentBlock('container_details_row');
255 $tpl->setVariable('TXT_DETAILS', $this->lng->txt('details'));
256 $tpl->parseCurrentBlock();
257 }
258
266 protected function initDetails()
267 {
269
270 if ($_GET['expand']) {
271 if ($_GET['expand'] > 0) {
272 $_SESSION['sess']['expanded'][abs((int) $_GET['expand'])] = self::DETAILS_ALL;
273 } else {
274 $_SESSION['sess']['expanded'][abs((int) $_GET['expand'])] = self::DETAILS_TITLE;
275 }
276 }
277
278 include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
280 $this->force_details = $session;
282 $this->force_details = array($session);
283 }
284 }
285
292 array $items,
294 bool $admin_panel_enabled = false,
295 bool $include_side_block = false
296 ) : array {
297 global $DIC;
298
299 $user = $DIC->user();
300 $access = $DIC->access();
301 $tree = $DIC->repositoryTree();
302
303 $limit_sessions = false;
304 if (
305 !$admin_panel_enabled &&
306 !$include_side_block &&
307 $items['sess'] &&
308 is_array($items['sess']) &&
309 (($container->getViewMode() == ilContainer::VIEW_SESSIONS) || ($container->getViewMode() == ilContainer::VIEW_INHERIT)) &&
310 $container->isSessionLimitEnabled()
311 ) {
312 $limit_sessions = true;
313 }
314
315 if ($container->getViewMode() == ilContainer::VIEW_INHERIT) {
316 $parent = $tree->checkForParentType($container->getRefId(), 'crs');
317 $crs = ilObjectFactory::getInstanceByRefId($parent, false);
318 if (!$crs instanceof ilObjCourse) {
319 return $items;
320 }
321
322 if (!$container->isSessionLimitEnabled()) {
323 $limit_sessions = false;
324 }
325 $limit_next = $crs->getNumberOfNextSessions();
326 $limit_prev = $crs->getNumberOfPreviousSessions();
327 } else {
328 $limit_next = $container->getNumberOfNextSessions();
329 $limit_prev = $container->getNumberOfPreviousSessions();
330 }
331
332 if (!$limit_sessions) {
333 return $items;
334 }
335
336
337
338 // do session limit
339 if (isset($_GET['crs_prev_sess'])) {
340 $user->writePref('crs_sess_show_prev_' . $container->getId(), (string) (int) $_GET['crs_prev_sess']);
341 }
342 if (isset($_GET['crs_next_sess'])) {
343 $user->writePref('crs_sess_show_next_' . $container->getId(), (string) (int) $_GET['crs_next_sess']);
344 }
345
346 $session_rbac_checked = [];
347 foreach ($items['sess'] as $session_tree_info) {
348 if ($access->checkAccess('visible', '', $session_tree_info['ref_id'])) {
349 $session_rbac_checked[] = $session_tree_info;
350 }
351 }
352 $sessions = ilUtil::sortArray($session_rbac_checked, 'start', 'ASC', true, false);
353 //$sessions = ilUtil::sortArray($this->items['sess'],'start','ASC',true,false);
354 $today = new ilDate(date('Ymd', time()), IL_CAL_DATE);
355 $previous = $current = $next = array();
356 foreach ($sessions as $key => $item) {
357 $start = new ilDateTime($item['start'], IL_CAL_UNIX);
358 $end = new ilDateTime($item['end'], IL_CAL_UNIX);
359
360 if (ilDateTime::_within($today, $start, $end, IL_CAL_DAY)) {
361 $current[] = $item;
362 } elseif (ilDateTime::_before($start, $today, IL_CAL_DAY)) {
363 $previous[] = $item;
364 } elseif (ilDateTime::_after($start, $today, IL_CAL_DAY)) {
365 $next[] = $item;
366 }
367 }
368 $num_previous_remove = max(
369 count($previous) - $limit_prev,
370 0
371 );
372 while ($num_previous_remove--) {
373 if (!$user->getPref('crs_sess_show_prev_' . $container->getId())) {
374 array_shift($previous);
375 }
376 $items['sess_link']['prev']['value'] = 1;
377 }
378
379 $num_next_remove = max(
380 count($next) - $limit_next,
381 0
382 );
383 while ($num_next_remove--) {
384 if (!$user->getPref('crs_sess_show_next_' . $container->getId())) {
385 array_pop($next);
386 }
387 // @fixme
388 $items['sess_link']['next']['value'] = 1;
389 }
390
391 $sessions = array_merge($previous, $current, $next);
392 $items['sess'] = $sessions;
393
394 // #15389 - see ilContainer::getSubItems()
396 $items[(int) $admin_panel_enabled][(int) $include_side_block] = $sort->sortItems($items);
397 return $items;
398 }
399} // END class.ilContainerSessionsContentGUI
user()
Definition: user.php:4
$_GET["client_id"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_DATE
const IL_CAL_UNIX
const IL_CAL_DAY
Parent class of all container content GUIs.
initRenderer()
Init container renderer.
getContainerObject()
Get container object.
getContainerGUI()
Get container GUI object.
renderItem($a_item_data, $a_position=0, $a_force_icon=false, $a_pos_prefix="")
Render an item.
insertPageEmbeddedBlocks($a_output_html)
Insert blocks into container page.
getItemGroupsHTML($a_pos=0)
Get item groups HTML.
clearAdminCommandsDetermination()
cleaer administration commands determination
renderSessionLimitLink($a_previous=true)
Show link to show/hide all previous/next sessions.
getMainContent()
Get content HTML for main column.
getDetailsLevel($a_session_id)
get details level
static prepareSessionPresentationLimitation(array $items, ilContainer $container, bool $admin_panel_enabled=false, bool $include_side_block=false)
static _getInstance($a_obj_id)
get instance by obj_id
Class ilContainer.
@classDescription Date and time handling
static _after(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
compare two dates and check start is after end This method does not consider tz offsets.
static _within(ilDateTime $dt, ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
Check whether an date is within a date duration given by start and end.
static _before(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
compare two dates and check start is before end This method does not consider tz offsets.
Class for single dates.
Class ilObjCourse.
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
static lookupLastSessionByCourse($a_ref_id)
@access public
static lookupNextSessionByCourse($a_ref_id)
@access public
special template class to simplify handling of ITX/PEAR
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.php:18
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$session
$container
Definition: wac.php:13