1<?php 2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */ 3 4include_once "./Services/Object/classes/class.ilObjectGUI.php"; 5 6/** 7* Class ilObjUserTrackingGUI 8* 9* @author Alex Killing <alex.killing@gmx.de> 10* 11* @version $Id$ 12* 13* @extends ilObjectGUI 14* @package ilias-core 15* 16* @ilCtrl_Calls ilObjUserTrackingGUI: ilLearningProgressGUI, ilPermissionGUI 17* @ilCtrl_Calls ilObjUserTrackingGUI: ilLPObjectStatisticsGUI, ilSessionStatisticsGUI 18*/ 19class ilObjUserTrackingGUI extends ilObjectGUI 20{ 21 22 /** 23 * @var ilTemplate|mixed|null 24 */ 25 public $tpl = null; 26 /** 27 * @var ilLanguage|null 28 */ 29 public $lng = null; 30 /** 31 * @var ilCtrl|null 32 */ 33 public $ctrl = null; 34 /** 35 * @var ILIAS\DI\Container 36 */ 37 protected $dic; 38 /** 39 * @var ilRbacSystem 40 */ 41 protected $rbacsystem; 42 43 public function __construct($a_data, $a_id, $a_call_by_reference) 44 { 45 global $DIC; 46 47 $this->type = "trac"; 48 parent::__construct($a_data, $a_id, $a_call_by_reference, false); 49 50 $this->dic = $DIC; 51 $this->tpl = $this->dic['tpl']; 52 $this->lng = $this->dic->language(); 53 $this->lng->loadLanguageModule('trac'); 54 $this->rbacsystem = $this->dic->rbac()->system(); 55 56 $this->ctrl = $this->dic->ctrl(); 57 } 58 59 public function executeCommand() 60 { 61 $next_class = $this->ctrl->getNextClass(); 62 $this->ctrl->setReturn($this, "show"); 63 $this->prepareOutput(); 64 65 switch ($next_class) { 66 case 'ilpermissiongui': 67 include_once("Services/AccessControl/classes/class.ilPermissionGUI.php"); 68 $perm_gui = new ilPermissionGUI($this); 69 $ret = &$this->ctrl->forwardCommand($perm_gui); 70 break; 71 72 case 'illearningprogressgui': 73 $this->tabs_gui->setTabActive('learning_progress'); 74 include_once("./Services/Tracking/classes/class.ilLearningProgressGUI.php"); 75 $lp_gui = new ilLearningProgressGUI(ilLearningProgressGUI::LP_CONTEXT_ADMINISTRATION); 76 $ret = &$this->ctrl->forwardCommand($lp_gui); 77 break; 78 79 case 'illpobjectstatisticsgui': 80 $this->tabs_gui->setTabActive('statistics'); 81 include_once("./Services/Tracking/classes/object_statistics/class.ilLPObjectStatisticsGUI.php"); 82 $os_gui = new ilLPObjectStatisticsGUI(ilLPObjectStatisticsGUI::LP_CONTEXT_ADMINISTRATION); 83 $ret = &$this->ctrl->forwardCommand($os_gui); 84 break; 85 86 case 'ilsessionstatisticsgui': 87 $this->tabs_gui->setTabActive('session_statistics'); 88 include_once("./Services/Authentication/classes/class.ilSessionStatisticsGUI.php"); 89 $sess_gui = new ilSessionStatisticsGUI(); 90 $ret = &$this->ctrl->forwardCommand($sess_gui); 91 break; 92 93 default: 94 $cmd = $this->ctrl->getCmd(); 95 if ($cmd == "view" || $cmd == "") { 96 $cmd = "settings"; 97 } 98 $cmd .= "Object"; 99 $this->$cmd(); 100 break; 101 } 102 103 return true; 104 } 105 106 public function getAdminTabs() 107 { 108 $this->getTabs(); 109 } 110 111 public function getTabs() 112 { 113 $this->ctrl->setParameter($this, "ref_id", $this->ref_id); 114 115 $this->tabs_gui->addTarget( 116 "settings", 117 $this->ctrl->getLinkTarget($this, "settings"), 118 "settings", 119 get_class($this) 120 ); 121 122 if ($this->rbacsystem->checkAccess("visible,read", $this->ref_id)) { 123 if (ilObjUserTracking::_enabledObjectStatistics()) { 124 $this->tabs_gui->addTarget( 125 "statistics", 126 $this->ctrl->getLinkTargetByClass( 127 "illpobjectstatisticsgui", 128 "access" 129 ), 130 "", 131 "illpobjectstatisticsgui" 132 ); 133 } 134 135 if (ilObjUserTracking::_enabledLearningProgress()) { 136 $this->tabs_gui->addTarget( 137 "learning_progress", 138 $this->ctrl->getLinkTargetByClass( 139 "illearningprogressgui", 140 "show" 141 ), 142 "", 143 "illearningprogressgui" 144 ); 145 } 146 147 // session statistics 148 if (ilObjUserTracking::_enabledSessionStatistics()) { 149 $this->tabs_gui->addTarget( 150 "session_statistics", 151 $this->ctrl->getLinkTargetByClass( 152 "ilsessionstatisticsgui", 153 "" 154 ), 155 "", 156 "ilsessionstatisticsgui" 157 ); 158 } 159 } 160 161 if ($this->checkPermissionBool("edit_permission")) { 162 $this->tabs_gui->addTarget( 163 "perm_settings", 164 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"), 165 array("perm","info","owner"), 166 'ilpermissiongui' 167 ); 168 } 169 } 170 171 172 /** 173 * display tracking settings form 174 */ 175 public function settingsObject($a_form = null) 176 { 177 global $ilErr; 178 179 if (!$this->rbacsystem->checkAccess("visible,read", $this->object->getRefId())) { 180 $ilErr->raiseError($this->lng->txt("no_permission"), $ilErr->WARNING); 181 } 182 183 $this->tabs_gui->addSubTab( 184 'lp_settings', 185 $this->lng->txt('settings'), 186 $this->ctrl->getLinkTarget($this, 'settings') 187 ); 188 189 if (!ilObjUserTracking::_enabledLearningProgress()) { 190 $this->tabs_gui->addSubTab( 191 'lpdef', 192 $this->lng->txt('trac_defaults'), 193 $this->ctrl->getLinkTarget($this, 'editLPDefaults') 194 ); 195 } 196 197 $this->tabs_gui->setTabActive('settings'); 198 $this->tabs_gui->setSubTabActive('lp_settings'); 199 200 if (!$a_form) { 201 $a_form = $this->initSettingsForm(); 202 } 203 204 $this->tpl->setContent($a_form->getHTML()); 205 } 206 207 protected function initSettingsForm() 208 { 209 include_once 'Services/Form/classes/class.ilPropertyFormGUI.php'; 210 $form = new ilPropertyFormGUI(); 211 $form->setFormAction($this->ctrl->getFormAction($this)); 212 $form->setTitle($this->lng->txt('tracking_settings')); 213 214 $activate = new ilCheckboxGroupInputGUI($this->lng->txt('activate_tracking')); 215 $form->addItem($activate); 216 217 // learning progress 218 $lp = new ilCheckboxInputGUI($this->lng->txt('trac_learning_progress'), 'learning_progress_tracking'); 219 if ($this->object->enabledLearningProgress()) { 220 $lp->setChecked(true); 221 } 222 $activate->addSubItem($lp); 223 224 225 // lp settings 226 227 $learner = new ilCheckboxInputGUI($this->lng->txt('trac_lp_learner_access'), 'lp_learner'); 228 $learner->setInfo($this->lng->txt('trac_lp_learner_access_info')); 229 $learner->setChecked($this->object->hasLearningProgressLearner()); 230 $lp->addSubItem($learner); 231 232 233 // extended data 234 235 $extdata = new ilCheckboxGroupInputGUI($this->lng->txt('trac_learning_progress_settings_info'), 'lp_extdata'); 236 $extdata->addOption(new ilCheckboxOption($this->lng->txt('trac_first_and_last_access'), 'lp_access')); 237 $extdata->addOption(new ilCheckboxOption($this->lng->txt('trac_read_count'), 'lp_count')); 238 $extdata->addOption(new ilCheckboxOption($this->lng->txt('trac_spent_seconds'), 'lp_spent')); 239 $lp->addSubItem($extdata); 240 241 $ext_value = array(); 242 if ($this->object->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS)) { 243 $ext_value[] = 'lp_access'; 244 } 245 if ($this->object->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_READ_COUNT)) { 246 $ext_value[] = 'lp_count'; 247 } 248 if ($this->object->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_SPENT_SECONDS)) { 249 $ext_value[] = 'lp_spent'; 250 } 251 $extdata->setValue($ext_value); 252 253 $listgui = new ilCheckboxInputGUI($this->lng->txt('trac_lp_list_gui'), 'lp_list'); 254 $listgui->setInfo($this->lng->txt('trac_lp_list_gui_info')); 255 $listgui->setChecked($this->object->hasLearningProgressListGUI()); 256 $lp->addSubItem($listgui); 257 258 /* => REPOSITORY 259 // change event 260 $event = new ilCheckboxInputGUI($this->lng->txt('trac_repository_changes'), 'change_event_tracking'); 261 if($this->object->enabledChangeEventTracking()) 262 { 263 $event->setChecked(true); 264 } 265 $activate->addSubItem($event); 266 */ 267 268 // object statistics 269 $objstat = new ilCheckboxInputGUI($this->lng->txt('trac_object_statistics'), 'object_statistics'); 270 if ($this->object->enabledObjectStatistics()) { 271 $objstat->setChecked(true); 272 } 273 $activate->addSubItem($objstat); 274 275 // session statistics 276 $sessstat = new ilCheckboxInputGUI($this->lng->txt('session_statistics'), 'session_statistics'); 277 if ($this->object->enabledSessionStatistics()) { 278 $sessstat->setChecked(true); 279 } 280 $activate->addSubItem($sessstat); 281 282 // Anonymized 283 $user = new ilCheckboxInputGUI($this->lng->txt('trac_anonymized'), 'user_related'); 284 $user->setInfo($this->lng->txt('trac_anonymized_info')); 285 $user->setChecked(!$this->object->enabledUserRelatedData()); 286 $form->addItem($user); 287 288 // Max time gap 289 $valid = new ilNumberInputGUI($this->lng->txt('trac_valid_request'), 'valid_request'); 290 $valid->setMaxLength(4); 291 $valid->setSize(4); 292 $valid->setSuffix($this->lng->txt('seconds')); 293 $valid->setInfo($this->lng->txt('info_valid_request')); 294 $valid->setValue($this->object->getValidTimeSpan()); 295 $valid->setMinValue(1); 296 $valid->setMaxValue(9999); 297 $valid->setRequired(true); 298 $form->addItem($valid); 299 300 include_once "Services/Administration/classes/class.ilAdministrationSettingsFormHandler.php"; 301 ilAdministrationSettingsFormHandler::addFieldsToForm( 302 ilAdministrationSettingsFormHandler::FORM_LP, 303 $form, 304 $this 305 ); 306 307 // #12259 308 if ($this->checkPermissionBool("write")) { 309 $form->addCommandButton('saveSettings', $this->lng->txt('save')); 310 } else { 311 $lp->setDisabled(true); 312 $learner->setDisabled(true); 313 $extdata->setDisabled(true); 314 $listgui->setDisabled(true); 315 $objstat->setDisabled(true); 316 $user->setDisabled(true); 317 $valid->setDisabled(true); 318 } 319 320 return $form; 321 } 322 323 /** 324 * save user tracking settings 325 */ 326 public function saveSettingsObject() 327 { 328 $this->checkPermission('write'); 329 330 $form = $this->initSettingsForm(); 331 if ($form->checkInput()) { 332 $lp_active = $form->getInput('learning_progress_tracking'); 333 334 $this->object->enableLearningProgress($lp_active); 335 336 if ($lp_active) { 337 $ext_data = (array) $form->getInput("lp_extdata"); 338 $code = 0; 339 if (in_array('lp_access', $ext_data)) { 340 $code += ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS; 341 } 342 if (in_array('lp_count', $ext_data)) { 343 $code += ilObjUserTracking::EXTENDED_DATA_READ_COUNT; 344 } 345 if (in_array('lp_spent', $ext_data)) { 346 $code += ilObjUserTracking::EXTENDED_DATA_SPENT_SECONDS; 347 } 348 $this->object->setExtendedData($code); 349 } 350 351 $this->object->enableChangeEventTracking($form->getInput('change_event_tracking')); 352 $this->object->enableObjectStatistics($form->getInput('object_statistics')); 353 $this->object->enableUserRelatedData(!$form->getInput('user_related')); 354 $this->object->setValidTimeSpan($form->getInput('valid_request')); 355 // $this->object->setLearningProgressDesktop($form->getInput('lp_desktop')); 356 $this->object->setLearningProgressLearner($form->getInput('lp_learner')); 357 $this->object->enableSessionStatistics($form->getInput('session_statistics')); 358 $this->object->setLearningProgressListGUI($form->getInput('lp_list')); 359 $this->object->updateSettings(); 360 361 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true); 362 $this->ctrl->redirect($this, "settings"); 363 } 364 365 $form->setValuesByPost(); 366 $this->settingsObject($form); 367 return false; 368 } 369 370 371 // 372 // LP DEFAULTS 373 // 374 375 protected function editLPDefaultsObject($a_form = null) 376 { 377 $this->checkPermission('read'); 378 379 $this->tabs_gui->addSubTab( 380 'lp_settings', 381 $this->lng->txt('settings'), 382 $this->ctrl->getLinkTarget($this, 'settings') 383 ); 384 385 $this->tabs_gui->addSubTab( 386 'lpdef', 387 $this->lng->txt('trac_defaults'), 388 $this->ctrl->getLinkTarget($this, 'editLPDefaults') 389 ); 390 391 $this->tabs_gui->setTabActive('settings'); 392 $this->tabs_gui->setSubTabActive('lpdef'); 393 394 if (!$a_form) { 395 $a_form = $this->initLPDefaultsForm(); 396 } 397 398 $this->tpl->setContent($a_form->getHTML()); 399 } 400 401 protected function initLPDefaultsForm() 402 { 403 global $DIC; 404 405 $objDefinition = $DIC['objDefinition']; 406 407 include_once 'Services/Form/classes/class.ilPropertyFormGUI.php'; 408 $form = new ilPropertyFormGUI(); 409 $form->setFormAction($this->ctrl->getFormAction($this)); 410 $form->setTitle($this->lng->txt('trac_defaults')); 411 $form->setDescription($this->lng->txt('trac_defaults_info')); 412 413 include_once "Services/Object/classes/class.ilObjectLP.php"; 414 include_once "Services/Tracking/classes/class.ilLPObjSettings.php"; 415 416 $types = array(); 417 foreach ($objDefinition->getAllRepositoryTypes() as $type) { 418 if (ilObjectLP::isSupportedObjectType($type)) { 419 $types[$type] = array( 420 "type" => $type, 421 "caption" => $this->lng->txt("obj_" . $type) 422 ); 423 } 424 } 425 $types = ilUtil::sortArray($types, "caption", "asc"); 426 foreach ($types as $item) { 427 $class = ilObjectLP::getTypeClass($item["type"]); 428 $modes = $class::getDefaultModes(ilObjUserTracking::_enabledLearningProgress()); 429 if (sizeof($modes) > 1) { 430 $def_type = new ilSelectInputGUI($item["caption"], "def_" . $item["type"]); 431 $form->addItem($def_type); 432 433 $def_type->setRequired(true); 434 $def_type->setValue(ilObjectLP::getTypeDefault($item["type"])); 435 436 $options = array(); 437 foreach ($modes as $mode) { 438 $caption = ($mode == ilLPObjSettings::LP_MODE_DEACTIVATED) 439 ? $this->lng->txt("trac_defaults_inactive") 440 : ilLPObjSettings::_mode2Text($mode); 441 $options[$mode] = $caption; 442 } 443 $def_type->setOptions($options); 444 } 445 } 446 447 if ($this->checkPermissionBool("write")) { 448 $form->addCommandButton('saveLPDefaults', $this->lng->txt('save')); 449 } else { 450 foreach ($types as $item) { 451 $form->getItemByPostVar("def_" . $item["type"])->setDisabled(true); 452 } 453 } 454 455 return $form; 456 } 457 458 protected function saveLPDefaultsObject() 459 { 460 global $DIC; 461 462 $objDefinition = $DIC['objDefinition']; 463 464 $this->checkPermission('write'); 465 466 $form = $this->initLPDefaultsForm(); 467 if ($form->checkInput()) { 468 include_once "Services/Object/classes/class.ilObjectLP.php"; 469 include_once "Services/Tracking/classes/class.ilLPObjSettings.php"; 470 471 $res = array(); 472 foreach ($objDefinition->getAllRepositoryTypes() as $type) { 473 if (ilObjectLP::isSupportedObjectType($type)) { 474 $mode = $form->getInput("def_" . $type); 475 $res[$type] = $mode 476 ? $mode 477 : ilLPObjSettings::LP_MODE_DEACTIVATED; 478 } 479 } 480 481 ilObjectLP::saveTypeDefaults($res); 482 483 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true); 484 $this->ctrl->redirect($this, "editLPDefaults"); 485 } 486 487 $form->setValuesByPost(); 488 $this->editLPDefaultsObject($form); 489 return false; 490 } 491 492 /** 493 * @param string $a_form_id 494 * @return array 495 */ 496 public function addToExternalSettingsForm($a_form_id) 497 { 498 switch ($a_form_id) { 499 case ilAdministrationSettingsFormHandler::FORM_CERTIFICATE: 500 $fields = array(); 501 502 return array('obj_trac' => array('editLPDefaults', $fields)); 503 } 504 } 505} 506