1<?php 2 3/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */ 4 5/** 6 * GUI class for service settings (calendar, notes, comments) 7 * 8 * @author Stefan Meyer <smeyer.ilias@gmx.de> 9 * @version $Id$ 10 * 11 * @ilCtrl_Calls ilObjectServiceSettingsGUI: 12 * @ingroup ServicesObject 13 */ 14class ilObjectServiceSettingsGUI 15{ 16 /** 17 * @var ilCtrl 18 */ 19 protected $ctrl; 20 21 // unfortunately the following constants are not stored 22 // in a non-GUI class, other classes are currently directly 23 // accessing these, see ilObjectDataSet (changes should be 24 // made there accordingly) 25 26 const CALENDAR_VISIBILITY = 'cont_show_calendar'; 27 const NEWS_VISIBILITY = 'cont_show_news'; 28 const USE_NEWS = 'cont_use_news'; 29 const AUTO_RATING_NEW_OBJECTS = 'cont_auto_rate_new_obj'; 30 const INFO_TAB_VISIBILITY = 'cont_show_info_tab'; 31 const TAXONOMIES = 'cont_taxonomies'; 32 const TAG_CLOUD = 'cont_tag_cloud'; 33 const CUSTOM_METADATA = 'cont_custom_md'; 34 const BADGES = 'cont_badges'; 35 const ORGU_POSITION_ACCESS = 'obj_orgunit_positions'; 36 const SKILLS = 'cont_skills'; 37 const FILTER = 'filter'; 38 const BOOKING = 'cont_bookings'; 39 40 private $gui = null; 41 private $modes = array(); 42 private $obj_id = 0; 43 44 /** 45 * Constructor 46 * @param type $a_parent_gui 47 */ 48 public function __construct($a_parent_gui, $a_obj_id, $a_modes) 49 { 50 global $DIC; 51 52 $this->ctrl = $DIC->ctrl(); 53 $this->gui = $a_parent_gui; 54 $this->modes = $a_modes; 55 $this->obj_id = $a_obj_id; 56 } 57 58 59 60 /** 61 * Control class handling 62 * @return 63 */ 64 public function executeCommand() 65 { 66 $ilCtrl = $this->ctrl; 67 68 $next_class = $ilCtrl->getNextClass($this); 69 $cmd = $ilCtrl->getCmd('editSettings'); 70 71 switch ($next_class) { 72 default: 73 $this->$cmd(); 74 break; 75 } 76 } 77 78 /** 79 * Init service settings form 80 * @param ilPropertyFormGUI $form 81 * @param type $services 82 */ 83 public static function initServiceSettingsForm($a_obj_id, ilPropertyFormGUI $form, $services) 84 { 85 global $DIC; 86 87 $ilSetting = $DIC->settings(); 88 $ilCtrl = $DIC->ctrl(); 89 $lng = $DIC->language(); 90 91 $lng->loadLanguageModule("obj"); 92 93 // info tab 94 if (in_array(self::INFO_TAB_VISIBILITY, $services)) { 95 $info = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_info_tab'), self::INFO_TAB_VISIBILITY); 96 $info->setValue(1); 97 $info->setChecked(ilContainer::_lookupContainerSetting( 98 $a_obj_id, 99 self::INFO_TAB_VISIBILITY, 100 true 101 )); 102 //$info->setOptionTitle($lng->txt('obj_tool_setting_info_tab')); 103 $info->setInfo($lng->txt('obj_tool_setting_info_tab_info')); 104 $form->addItem($info); 105 } 106 107 // calendar 108 if (in_array(self::CALENDAR_VISIBILITY, $services)) { 109 include_once './Services/Calendar/classes/class.ilObjCalendarSettings.php'; 110 if (ilCalendarSettings::_getInstance()->isEnabled()) { 111 // Container tools (calendar, news, ... activation) 112 $cal = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_calendar'), self::CALENDAR_VISIBILITY); 113 $cal->setValue(1); 114 include_once './Services/Calendar/classes/class.ilObjCalendarSettings.php'; 115 $cal->setChecked(ilCalendarSettings::lookupCalendarActivated($a_obj_id)); 116 //$cal->setOptionTitle($lng->txt('obj_tool_setting_calendar')); 117 $cal->setInfo($lng->txt('obj_tool_setting_calendar_info')); 118 $form->addItem($cal); 119 } 120 } 121 122 // news 123 if (in_array(self::USE_NEWS, $services)) { 124 $news = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_use_news'), self::USE_NEWS); 125 $news->setValue(1); 126 $checked = ilContainer::_lookupContainerSetting( 127 $a_obj_id, 128 self::USE_NEWS, 129 true 130 ); 131 $news->setChecked($checked); 132 $info = $lng->txt('obj_tool_setting_use_news_info'); 133 if ($checked) { 134 $info .= " <a href='" . $ilCtrl->getLinkTargetByClass("ilcontainernewssettingsgui", "") . 135 "'>» " . $lng->txt('obj_tool_setting_use_news_open_settings') . "</a>"; 136 } 137 $news->setInfo($info); 138 $form->addItem($news); 139 } 140 if (in_array(self::NEWS_VISIBILITY, $services)) { 141 if ($ilSetting->get('block_activated_news')) { 142 // Container tools (calendar, news, ... activation) 143 $news = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_news'), self::NEWS_VISIBILITY); 144 $news->setValue(1); 145 $news->setChecked(ilContainer::_lookupContainerSetting( 146 $a_obj_id, 147 self::NEWS_VISIBILITY, 148 $ilSetting->get('block_activated_news', true) 149 )); 150 //$news->setOptionTitle($lng->txt('obj_tool_setting_news')); 151 $news->setInfo($lng->txt('obj_tool_setting_news_info')); 152 $form->addItem($news); 153 154 if (in_array(ilObject::_lookupType($a_obj_id), array('crs', 'grp'))) { 155 $ref_id = array_pop(ilObject::_getAllReferences($a_obj_id)); 156 157 include_once 'Services/Membership/classes/class.ilMembershipNotifications.php'; 158 ilMembershipNotifications::addToSettingsForm($ref_id, null, $news); 159 } 160 } 161 } 162 163 // (local) custom metadata 164 if (in_array(self::CUSTOM_METADATA, $services)) { 165 $md = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_custom_metadata'), self::CUSTOM_METADATA); 166 $md->setInfo($lng->txt('obj_tool_setting_custom_metadata_info')); 167 $md->setValue(1); 168 $md->setChecked(ilContainer::_lookupContainerSetting( 169 $a_obj_id, 170 self::CUSTOM_METADATA, 171 false 172 )); 173 $form->addItem($md); 174 } 175 176 // tag cloud 177 if (in_array(self::TAG_CLOUD, $services)) { 178 $tags_active = new ilSetting("tags"); 179 if ($tags_active->get("enable", false)) { 180 $tag = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_tag_cloud'), self::TAG_CLOUD); 181 $tag->setInfo($lng->txt('obj_tool_setting_tag_cloud_info')); 182 $tag->setValue(1); 183 $tag->setChecked(ilContainer::_lookupContainerSetting( 184 $a_obj_id, 185 self::TAG_CLOUD, 186 false 187 )); 188 $form->addItem($tag); 189 } 190 } 191 192 // taxonomies 193 if (in_array(self::TAXONOMIES, $services)) { 194 $tax = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_taxonomies'), self::TAXONOMIES); 195 $tax->setValue(1); 196 $tax->setChecked(ilContainer::_lookupContainerSetting( 197 $a_obj_id, 198 self::TAXONOMIES, 199 false 200 )); 201 $form->addItem($tax); 202 } 203 204 // auto rating 205 if (in_array(self::AUTO_RATING_NEW_OBJECTS, $services)) { 206 $lng->loadLanguageModule("rating"); 207 208 // auto rating for new objects 209 $rate = new ilCheckboxInputGUI($lng->txt('rating_new_objects_auto'), self::AUTO_RATING_NEW_OBJECTS); 210 $rate->setValue(1); 211 //$rate->setOptionTitle($lng->txt('rating_new_objects_auto')); 212 $rate->setInfo($lng->txt('rating_new_objects_auto_info')); 213 $rate->setChecked(ilContainer::_lookupContainerSetting( 214 $a_obj_id, 215 self::AUTO_RATING_NEW_OBJECTS, 216 false 217 )); 218 $form->addItem($rate); 219 } 220 221 // badges 222 if (in_array(self::BADGES, $services)) { 223 include_once 'Services/Badge/classes/class.ilBadgeHandler.php'; 224 if (ilBadgeHandler::getInstance()->isActive()) { 225 $bdg = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_badges'), self::BADGES); 226 $bdg->setInfo($lng->txt('obj_tool_setting_badges_info')); 227 $bdg->setValue(1); 228 $bdg->setChecked(ilContainer::_lookupContainerSetting( 229 $a_obj_id, 230 self::BADGES, 231 false 232 )); 233 $form->addItem($bdg); 234 } 235 } 236 if (in_array(self::ORGU_POSITION_ACCESS, $services)) { 237 $position_settings = ilOrgUnitGlobalSettings::getInstance()->getObjectPositionSettingsByType( 238 ilObject::_lookupType($a_obj_id) 239 ); 240 if ( 241 $position_settings->isActive() 242 ) { 243 $lia = new ilCheckboxInputGUI( 244 $GLOBALS['DIC']->language()->txt('obj_orgunit_positions'), 245 self::ORGU_POSITION_ACCESS 246 ); 247 $lia->setInfo($GLOBALS['DIC']->language()->txt('obj_orgunit_positions_info')); 248 $lia->setValue(1); 249 $lia->setChecked( 250 (bool) ilOrgUnitGlobalSettings::getInstance()->isPositionAccessActiveForObject($a_obj_id) 251 ); 252 if (!$position_settings->isChangeableForObject()) { 253 $lia->setDisabled(true); 254 } 255 $form->addItem($lia); 256 } 257 } 258 259 // skills 260 if (in_array(self::SKILLS, $services)) { 261 $skmg_set = new ilSetting("skmg"); 262 if ($skmg_set->get("enable_skmg")) { 263 $skill = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_skills'), self::SKILLS); 264 $skill->setInfo($lng->txt('obj_tool_setting_skills_info')); 265 $skill->setValue(1); 266 $skill->setChecked(ilContainer::_lookupContainerSetting( 267 $a_obj_id, 268 self::SKILLS, 269 false 270 )); 271 $form->addItem($skill); 272 } 273 } 274 275 // filter 276 if (in_array(self::FILTER, $services)) { 277 $filter = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_filter'), self::FILTER); 278 $filter->setInfo($lng->txt('obj_tool_setting_filter_info')); 279 $filter->setValue(1); 280 $filter->setChecked(ilContainer::_lookupContainerSetting( 281 $a_obj_id, 282 self::FILTER, 283 false 284 )); 285 $form->addItem($filter); 286 287 $filter_show_empty = new ilCheckboxInputGUI($lng->txt('obj_tool_setting_filter_empty'), "filter_show_empty"); 288 $filter_show_empty->setInfo($lng->txt('obj_tool_setting_filter_empty_info')); 289 $filter_show_empty->setValue(1); 290 $filter_show_empty->setChecked(ilContainer::_lookupContainerSetting( 291 $a_obj_id, 292 "filter_show_empty", 293 false 294 )); 295 $filter->addSubItem($filter_show_empty); 296 } 297 // booking tool 298 if (in_array(self::BOOKING, $services)) { 299 $book = new ilCheckboxInputGUI($lng->txt('obj_tool_booking'), self::BOOKING); 300 $book->setInfo($lng->txt('obj_tool_booking_info')); 301 $book->setValue(1); 302 $book->setChecked(ilContainer::_lookupContainerSetting( 303 $a_obj_id, 304 self::BOOKING, 305 false 306 )); 307 $form->addItem($book); 308 } 309 310 return $form; 311 } 312 313 314 /** 315 * Update service settings 316 * 317 * @param int $a_obj_id 318 * @param ilPropertyFormGUI $form 319 * @param string[] $services 320 * 321 * @return bool 322 */ 323 public static function updateServiceSettingsForm($a_obj_id, ilPropertyFormGUI $form, $services) 324 { 325 // info 326 if (in_array(self::INFO_TAB_VISIBILITY, $services)) { 327 include_once './Services/Container/classes/class.ilContainer.php'; 328 ilContainer::_writeContainerSetting($a_obj_id, self::INFO_TAB_VISIBILITY, (int) $form->getInput(self::INFO_TAB_VISIBILITY)); 329 } 330 331 // calendar 332 if (in_array(self::CALENDAR_VISIBILITY, $services)) { 333 include_once './Services/Calendar/classes/class.ilCalendarSettings.php'; 334 if (ilCalendarSettings::_getInstance()->isEnabled()) { 335 include_once './Services/Container/classes/class.ilContainer.php'; 336 ilContainer::_writeContainerSetting($a_obj_id, self::CALENDAR_VISIBILITY, (int) $form->getInput(self::CALENDAR_VISIBILITY)); 337 } 338 } 339 340 // news 341 if (in_array(self::USE_NEWS, $services)) { 342 include_once './Services/Container/classes/class.ilContainer.php'; 343 ilContainer::_writeContainerSetting($a_obj_id, self::USE_NEWS, (int) $form->getInput(self::USE_NEWS)); 344 } 345 if (in_array(self::NEWS_VISIBILITY, $services)) { 346 include_once './Services/Container/classes/class.ilContainer.php'; 347 ilContainer::_writeContainerSetting($a_obj_id, self::NEWS_VISIBILITY, (int) $form->getInput(self::NEWS_VISIBILITY)); 348 349 if (in_array(ilObject::_lookupType($a_obj_id), array('crs', 'grp'))) { 350 $ref_id = array_pop(ilObject::_getAllReferences($a_obj_id)); 351 352 include_once "Services/Membership/classes/class.ilMembershipNotifications.php"; 353 ilMembershipNotifications::importFromForm($ref_id, $form); 354 } 355 } 356 357 // rating 358 if (in_array(self::AUTO_RATING_NEW_OBJECTS, $services)) { 359 include_once './Services/Container/classes/class.ilContainer.php'; 360 ilContainer::_writeContainerSetting($a_obj_id, self::AUTO_RATING_NEW_OBJECTS, (int) $form->getInput(self::AUTO_RATING_NEW_OBJECTS)); 361 } 362 363 // taxonomies 364 if (in_array(self::TAXONOMIES, $services)) { 365 include_once './Services/Container/classes/class.ilContainer.php'; 366 ilContainer::_writeContainerSetting($a_obj_id, self::TAXONOMIES, (int) $form->getInput(self::TAXONOMIES)); 367 } 368 369 // tag cloud 370 if (in_array(self::TAG_CLOUD, $services)) { 371 include_once './Services/Container/classes/class.ilContainer.php'; 372 ilContainer::_writeContainerSetting($a_obj_id, self::TAG_CLOUD, (int) $form->getInput(self::TAG_CLOUD)); 373 } 374 375 // (local) custom metadata 376 if (in_array(self::CUSTOM_METADATA, $services)) { 377 include_once './Services/Container/classes/class.ilContainer.php'; 378 ilContainer::_writeContainerSetting($a_obj_id, self::CUSTOM_METADATA, (int) $form->getInput(self::CUSTOM_METADATA)); 379 } 380 381 // badges 382 if (in_array(self::BADGES, $services)) { 383 include_once 'Services/Badge/classes/class.ilBadgeHandler.php'; 384 if (ilBadgeHandler::getInstance()->isActive()) { 385 include_once './Services/Container/classes/class.ilContainer.php'; 386 ilContainer::_writeContainerSetting($a_obj_id, self::BADGES, (int) $form->getInput(self::BADGES)); 387 } 388 } 389 390 // booking 391 if (in_array(self::BOOKING, $services)) { 392 include_once './Services/Container/classes/class.ilContainer.php'; 393 ilContainer::_writeContainerSetting($a_obj_id, self::BOOKING, (int) $form->getInput(self::BOOKING)); 394 } 395 396 // extended user access 397 if (in_array(self::ORGU_POSITION_ACCESS, $services)) { 398 $position_settings = ilOrgUnitGlobalSettings::getInstance()->getObjectPositionSettingsByType( 399 ilObject::_lookupType($a_obj_id) 400 ); 401 402 if ($position_settings->isActive() && $position_settings->isChangeableForObject()) { 403 $orgu_object_settings = new ilOrgUnitObjectPositionSetting($a_obj_id); 404 $orgu_object_settings->setActive( 405 (int) $form->getInput(self::ORGU_POSITION_ACCESS) 406 ); 407 $orgu_object_settings->update(); 408 } 409 } 410 411 // skills 412 if (in_array(self::SKILLS, $services)) { 413 $skmg_set = new ilSetting("skmg"); 414 if ($skmg_set->get("enable_skmg")) { 415 include_once './Services/Container/classes/class.ilContainer.php'; 416 ilContainer::_writeContainerSetting($a_obj_id, self::SKILLS, (int) $form->getInput(self::SKILLS)); 417 } 418 } 419 420 // filter 421 if (in_array(self::FILTER, $services)) { 422 include_once './Services/Container/classes/class.ilContainer.php'; 423 ilContainer::_writeContainerSetting($a_obj_id, self::FILTER, (int) $form->getInput(self::FILTER)); 424 ilContainer::_writeContainerSetting($a_obj_id, "filter_show_empty", (int) $form->getInput("filter_show_empty")); 425 } 426 427 return true; 428 } 429 430 431 /** 432 * Get active modes 433 * @return bool 434 */ 435 public function getModes() 436 { 437 return $this->modes; 438 } 439 440 /** 441 * Get obj id 442 * @return type 443 */ 444 public function getObjId() 445 { 446 return $this->obj_id; 447 } 448 449 protected function cancel() 450 { 451 $ilCtrl = $this->ctrl; 452 $ilCtrl->returnToParent($this); 453 } 454 455 /** 456 * Edit tool settings (calendar, news, comments, ...) 457 * @param ilPropertyFormGUI $form 458 */ 459 protected function editSettings(ilPropertyFormGUI $form = null) 460 { 461 global $DIC; 462 463 $tpl = $DIC->ui()->mainTemplate(); 464 465 if (!$form instanceof ilPropertyFormGUI) { 466 $form = $this->initSettingsForm(); 467 } 468 $tpl->setContent($form->getHTML()); 469 } 470 471 472 /** 473 * Update settings 474 */ 475 protected function updateToolSettings() 476 { 477 global $DIC; 478 479 $lng = $DIC->language(); 480 $ctrl = $this->ctrl; 481 482 $form = $this->initSettingsForm(); 483 if ($form->checkInput()) { 484 include_once './Services/Calendar/classes/class.ilCalendarSettings.php'; 485 if (ilCalendarSettings::_getInstance()->isEnabled()) { 486 if ($this->isModeActive(self::CALENDAR_VISIBILITY)) { 487 ilContainer::_writeContainerSetting($this->getObjId(), 'show_calendar', (int) $form->getInput('calendar')); 488 } 489 } 490 ilUtil::sendSuccess($lng->txt('settings_saved'), true); 491 $ctrl->redirect($this); 492 } 493 494 ilUtil::sendFailure($lng->txt('err_check_input')); 495 $form->setValuesByPost(); 496 $this->editSettings($form); 497 } 498 499 /** 500 * Check if specific mode is active 501 * @param type $a_mode 502 * @return type 503 */ 504 protected function isModeActive($a_mode) 505 { 506 return in_array($a_mode, $this->getModes()); 507 } 508} 509