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
26/**
27* Shows all items in one block.
28*
29* @author Alex Killing <alex.killing@gmx.de>
30* @version $Id$
31*
32*/
33class ilContainerSessionsContentGUI extends ilContainerContentGUI
34{
35    /**
36     * @var ilTabsGUI
37     */
38    protected $tabs;
39
40    protected $force_details = array();
41
42    /**
43    * Constructor
44    *
45    */
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
61    /**
62     * get details level
63     *
64     * @access public
65     * @param	int	$a_session_id
66     * @return	int	DEATAILS_LEVEL
67     */
68    public function getDetailsLevel($a_session_id)
69    {
70        if ($this->getContainerGUI()->isActiveAdministrationPanel()) {
71            return self::DETAILS_DEACTIVATED;
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 {
79            return self::DETAILS_TITLE;
80        }
81    }
82
83
84    /**
85    * Get content HTML for main column.
86    */
87    public function getMainContent()
88    {
89        $lng = $this->lng;
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
110    /**
111    * Show Materials
112    */
113    public function __showMaterials($a_tpl)
114    {
115        $lng = $this->lng;
116
117        $this->items = $this->getContainerObject()->getSubItems($this->getContainerGUI()->isActiveAdministrationPanel());
118        $this->clearAdminCommandsDetermination();
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        if (is_array($this->items["sess"]) ||
130            $this->items['sess_link']['prev']['value'] ||
131            $this->items['sess_link']['next']['value']) {
132            $this->items['sess'] = ilUtil::sortArray($this->items['sess'], 'start', 'asc', true, false);
133
134            if ($this->items['sess_link']['prev']['value']) {
135                $prefix = $this->renderSessionLimitLink(true);
136            }
137            if ($this->items['sess_link']['next']['value']) {
138                $postfix = $this->renderSessionLimitLink(false);
139            }
140
141            $this->renderer->addTypeBlock("sess", $prefix, $postfix);
142            $this->renderer->setBlockPosition("sess", 1);
143
144            $position = 1;
145
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        }
155
156        $pos = $this->getItemGroupsHTML(1);
157
158        if (is_array($this->items["_all"])) {
159            $this->renderer->addCustomBlock("_all", $lng->txt("content"));
160            $this->renderer->setBlockPosition("_all", ++$pos);
161
162            $position = 1;
163
164            foreach ($this->items["_all"] as $item_data) {
165                // #14599
166                if ($item_data["type"] == "sess" || $item_data["type"] == "itgr") {
167                    continue;
168                }
169
170                if (!$this->renderer->hasItem($item_data["child"])) {
171                    $html = $this->renderItem($item_data, $position++, true);
172                    if ($html != "") {
173                        $this->renderer->addItemToBlock("_all", $item_data["type"], $item_data["child"], $html);
174                    }
175                }
176            }
177        }
178
179        $output_html .= $this->renderer->getHTML();
180
181        $a_tpl->setVariable("CONTAINER_PAGE_CONTENT", $output_html);
182    }
183
184    /**
185     * Show link to show/hide all previous/next sessions
186     * @return string
187     */
188    protected function renderSessionLimitLink($a_previous = true)
189    {
190        $lng = $this->lng;
191        $ilUser = $this->user;
192        $ilCtrl = $this->ctrl;
193
194        $lng->loadLanguageModule('crs');
195
196        $tpl = new ilTemplate(
197            'tpl.container_list_item.html',
198            true,
199            true,
200            "Services/Container"
201        );
202        $tpl->setVariable('DIV_CLASS', 'ilContainerListItemOuter');
203        $tpl->setCurrentBlock('item_title_linked');
204
205        if ($a_previous) {
206            $prefp = $ilUser->getPref('crs_sess_show_prev_' . $this->getContainerObject()->getId());
207
208            if ($prefp) {
209                $tpl->setVariable('TXT_TITLE_LINKED', $lng->txt('crs_link_hide_prev_sessions'));
210                $ilCtrl->setParameterByClass(get_class($this->getContainerGUI()), 'crs_prev_sess', (int) !$prefp);
211                $tpl->setVariable('HREF_TITLE_LINKED', $ilCtrl->getLinkTargetByClass(get_class($this->getContainerGUI())));
212                $ilCtrl->clearParametersByClass(get_class($this->getContainerGUI()));
213            } else {
214                $tpl->setVariable('TXT_TITLE_LINKED', $lng->txt('crs_link_show_all_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())));
217                $ilCtrl->clearParametersByClass(get_class($this->getContainerGUI()));
218            }
219        } else {
220            $prefn = $ilUser->getPref('crs_sess_show_next_' . $this->getContainerObject()->getId());
221
222            if ($prefn) {
223                $tpl->setVariable('TXT_TITLE_LINKED', $lng->txt('crs_link_hide_next_sessions'));
224                $ilCtrl->setParameterByClass(get_class($this->getContainerGUI()), 'crs_next_sess', (int) !$prefn);
225                $tpl->setVariable('HREF_TITLE_LINKED', $ilCtrl->getLinkTargetByClass(get_class($this->getContainerGUI())));
226                $ilCtrl->clearParametersByClass(get_class($this->getContainerGUI()));
227            } else {
228                $tpl->setVariable('TXT_TITLE_LINKED', $lng->txt('crs_link_show_all_next_sessions'));
229                $ilCtrl->setParameterByClass(get_class($this->getContainerGUI()), 'crs_next_sess', (int) !$prefn);
230                $tpl->setVariable('HREF_TITLE_LINKED', $ilCtrl->getLinkTargetByClass(get_class($this->getContainerGUI())));
231                $ilCtrl->clearParametersByClass(get_class($this->getContainerGUI()));
232            }
233        }
234        $tpl->parseCurrentBlock();
235
236        return $tpl->get();
237    }
238
239
240    /**
241     * add footer row
242     *
243     * @access public
244     * @param
245     * @return
246     */
247    public function addFooterRow($tpl)
248    {
249        $ilCtrl = $this->ctrl;
250
251        $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
252
253        $tpl->setCurrentBlock('container_details_row');
254        $tpl->setVariable('TXT_DETAILS', $this->lng->txt('details'));
255        $tpl->parseCurrentBlock();
256    }
257
258    /**
259     * init details
260     *
261     * @access protected
262     * @param
263     * @return
264     */
265    protected function initDetails()
266    {
267        $ilUser = $this->user;
268
269        if ($_GET['expand']) {
270            if ($_GET['expand'] > 0) {
271                $_SESSION['sess']['expanded'][abs((int) $_GET['expand'])] = self::DETAILS_ALL;
272            } else {
273                $_SESSION['sess']['expanded'][abs((int) $_GET['expand'])] = self::DETAILS_TITLE;
274            }
275        }
276
277        include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
278        if ($session = ilSessionAppointment::lookupNextSessionByCourse($this->getContainerObject()->getRefId())) {
279            $this->force_details = $session;
280        } elseif ($session = ilSessionAppointment::lookupLastSessionByCourse($this->getContainerObject()->getRefId())) {
281            $this->force_details = array($session);
282        }
283    }
284} // END class.ilContainerSessionsContentGUI
285