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