00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00037 include_once './Services/Tracking/classes/class.ilLearningProgressBaseGUI.php';
00038 include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php';
00039
00040 class ilLPListOfProgressGUI extends ilLearningProgressBaseGUI
00041 {
00042 var $tracked_user = null;
00043 var $show_user_info = false;
00044 var $filter_gui = null;
00045
00046 var $details_id = 0;
00047 var $details_type = '';
00048 var $details_mode = 0;
00049
00050 function ilLPListOfProgressGUI($a_mode,$a_ref_id,$a_user_id = 0)
00051 {
00052 parent::ilLearningProgressBaseGUI($a_mode,$a_ref_id,$a_user_id);
00053 $this->__checkPDF();
00054
00055 $this->__initFilterGUI();
00056 $this->__initUser($a_user_id);
00057
00058
00059 $this->__initDetails((int) $_GET['details_id']);
00060 $this->ctrl->saveParameter($this,'details_id',$_REQUEST['details_id']);
00061 }
00062
00063
00067 function &executeCommand()
00068 {
00069 $this->ctrl->setReturn($this, "show");
00070 $this->ctrl->saveParameter($this,'user_id',$this->getUserId());
00071 switch($this->ctrl->getNextClass())
00072 {
00073 case 'illpfiltergui':
00074 $this->ctrl->forwardCommand($this->filter_gui);
00075 break;
00076
00077 case 'ilpdfpresentation':
00078 include_once './Services/Tracking/classes/class.ilPDFPresentation.php';
00079 $pdf_gui = new ilPDFPresentation($this->getMode(),$this->details_id,$this->getUserId(),$this->tracked_user->getId());
00080 $pdf_gui->setType(LP_ACTIVE_PROGRESS);
00081 $this->ctrl->setReturn($this,'show');
00082 $this->ctrl->forwardCommand($pdf_gui);
00083 break;
00084
00085 default:
00086 $cmd = $this->__getDefaultCommand();
00087 $this->$cmd();
00088
00089 }
00090 return true;
00091 }
00092
00093 function show()
00094 {
00095 global $ilObjDataCache;
00096
00097 switch($this->getMode())
00098 {
00099
00100 case LP_MODE_REPOSITORY:
00101 $this->__initDetails($this->getRefId());
00102 return $this->details();
00103
00104 case LP_MODE_USER_FOLDER:
00105
00106 $this->__initUser($this->getUserId());
00107 break;
00108 }
00109
00110
00111 $this->__showProgressList();
00112 }
00113
00114 function details()
00115 {
00116
00117
00118 if((int) $_GET['crs_id'])
00119 {
00120 $this->ctrl->setParameter($this,'details_id',(int) $_GET['crs_id']);
00121 $this->__showButton($this->ctrl->getLinkTarget($this,'details'),$this->lng->txt('trac_view_crs'));
00122 }
00123 elseif($this->getMode() == LP_MODE_PERSONAL_DESKTOP or
00124 $this->getMode() == LP_MODE_ADMINISTRATION or
00125 $this->getMode() == LP_MODE_USER_FOLDER)
00126 {
00127 $this->__showButton($this->ctrl->getLinkTarget($this,'show'),$this->lng->txt('trac_view_list'));
00128 }
00129
00130 if($this->activePDF())
00131 {
00132 $this->__showButton($this->ctrl->getLinkTargetByClass('ilpdfpresentation','createDetails'),$this->lng->txt('pdf_export'));
00133 }
00134
00135
00136 if(!ilLPObjSettings::_isContainer($this->details_mode))
00137 {
00138 return $this->__showDetails();
00139 }
00140 else
00141 {
00142 return $this->__showContainerList();
00143 }
00144 }
00145
00146 function __showDetails()
00147 {
00148 global $ilObjDataCache;
00149
00150 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.lp_lm_details.html','Services/Tracking');
00151
00152 include_once("classes/class.ilInfoScreenGUI.php");
00153 $info = new ilInfoScreenGUI($this);
00154
00155 $this->__appendUserInfo($info);
00156 $this->__showObjectDetails($info,$this->details_obj_id);
00157 $this->__appendLPDetails($info,$this->details_obj_id,$this->tracked_user->getId());
00158
00159
00160 $this->tpl->setVariable("LM_INFO",$info->getHTML());
00161 }
00162
00163 function __showContainerList()
00164 {
00165 global $ilObjDataCache;
00166
00167 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.lp_progress_container.html','Services/Tracking');
00168
00169 include_once("classes/class.ilInfoScreenGUI.php");
00170 $info = new ilInfoScreenGUI($this);
00171
00172 $this->__appendUserInfo($info);
00173 $this->__showObjectDetails($info,$this->details_obj_id);
00174 $this->__appendLPDetails($info,$this->details_obj_id,$this->tracked_user->getId());
00175
00176
00177 $this->tpl->setVariable("LM_INFO",$info->getHTML());
00178
00179 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00180 $this->tpl->setVariable("HEADER_IMG",ilUtil::getImagePath('icon_'.$this->details_type.'.gif'));
00181 $this->tpl->setVariable("HEADER_ALT",$this->lng->txt('objs_'.$this->details_type));
00182 $this->tpl->setVariable("BLOCK_HEADER_CONTENT",$this->lng->txt('trac_'.$this->details_type.'_relevant_items'));
00183
00184
00185 $this->tpl->setVariable("HEAD_STATUS",$this->lng->txt('trac_status'));
00186 $this->tpl->setVariable("HEAD_OPTIONS",$this->lng->txt('actions'));
00187
00188
00189 include_once 'course/classes/class.ilCourseItems.php';
00190 if($this->has_timings = ilCourseItems::_hasCollectionTimings($this->details_id))
00191 {
00192 $this->tpl->setVariable('HEAD_TIMING',$this->lng->txt('trac_head_timing'));
00193 $this->tpl->setVariable('HEAD_TIME_PASSED',$this->lng->txt('trac_time_passed'));
00194 }
00195 $this->container_row_counter = 0;
00196
00197 include_once './Services/Tracking/classes/class.ilLPEventCollections.php';
00198 foreach(ilLPEventCollections::_getItems($this->details_obj_id) as $event_id)
00199 {
00200 $this->__renderContainerRow($this->details_id,$event_id,'event',0);
00201
00202 }
00203
00204
00205 include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
00206 foreach(ilLPCollectionCache::_getItems($this->details_obj_id) as $item_id)
00207 {
00208 switch($this->details_mode)
00209 {
00210 case LP_MODE_SCORM:
00211 $type = 'sahs_item';
00212 break;
00213 case LP_MODE_OBJECTIVES:
00214 $type = 'objective';
00215 break;
00216 default:
00217 $type = $ilObjDataCache->lookupType($ilObjDataCache->lookupObjId($item_id));
00218 break;
00219 }
00220 $this->__renderContainerRow($this->details_id,$item_id,$type,0);
00221 }
00222 $this->tpl->setVariable("LEGEND",$this->__getLegendHTML());
00223 }
00224
00225 function __renderContainerRow($parent_id,$item_id,$type,$level)
00226 {
00227 global $ilObjDataCache,$ilUser;
00228
00229 include_once 'Services/Tracking/classes/ItemList/class.ilLPItemListFactory.php';
00230 include_once 'course/classes/Timings/class.ilTimingCache.php';
00231
00232 $item_list =& ilLPItemListFactory::_getInstanceByRefId($parent_id,$item_id,$type);
00233 if($this->has_timings)
00234 {
00235 $item_list->readTimings();
00236 $item_list->enable('timings');
00237 }
00238
00239 $item_list->setCurrentUser($this->tracked_user->getId());
00240 $item_list->readUserInfo();
00241 $item_list->setIndentLevel($level);
00242 $item_list->renderContainerProgress();
00243
00244
00245
00246 if($type != 'sahs_item' and
00247 $type != 'objective' and
00248 $type != 'event')
00249 {
00250 if(ilLPObjSettings::_isContainer($item_list->getMode()))
00251 {
00252 $this->tpl->setCurrentBlock("item_command");
00253 $this->ctrl->setParameter($this,'details_id',$this->details_id);
00254 $this->ctrl->setParameter($this,'item_id',$item_id);
00255 if($this->__detailsShown($item_id))
00256 {
00257 $this->tpl->setVariable('HREF_COMMAND',$this->ctrl->getLinkTarget($this,'hideDetails'));
00258 $this->tpl->setVariable("TXT_COMMAND",$this->lng->txt('hide_details'));
00259 }
00260 else
00261 {
00262 $this->tpl->setVariable('HREF_COMMAND',$this->ctrl->getLinkTarget($this,'showDetails'));
00263 $this->tpl->setVariable("TXT_COMMAND",$this->lng->txt('show_details'));
00264 }
00265 $this->tpl->parseCurrentBlock();
00266 }
00267 #$this->tpl->setCurrentBlock("item_command");
00268 #$this->ctrl->setParameter($this,'details_id',$item_id);
00269 #$this->ctrl->setParameter($this,'crs_id',$this->details_id);
00270 #$this->tpl->setVariable("HREF_COMMAND",$this->ctrl->getLinkTarget($this,'details'));
00271 #$this->tpl->setVariable("TXT_COMMAND",$this->lng->txt('details'));
00272 #$this->tpl->parseCurrentBlock();
00273
00274 if($this->has_timings and ilTimingCache::_showWarning($item_id,$this->tracked_user->getId()))
00275 {
00276 $this->tpl->setCurrentBlock('warning_img');
00277 $this->tpl->setVariable('WARNING_IMG',ilUtil::getImagePath('warning.gif'));
00278 $this->tpl->setVariable('WARNING_ALT',$this->lng->txt('trac_editing_time_passed'));
00279 $this->tpl->parseCurrentBlock();
00280 }
00281 }
00282
00283 if($this->has_timings)
00284 {
00285 $this->tpl->setCurrentBlock('timing');
00286 $this->tpl->setVariable('END_EDITING_TIME',$item_list->getEditingTime() ?
00287 ilFormat::formatUnixTime($item_list->getEditingTime()) :
00288 '');
00289 $this->tpl->parseCurrentBlock();
00290 }
00291
00292
00293 $this->tpl->setCurrentBlock("container_standard_row");
00294 $this->tpl->setVariable("ITEM_HTML",$item_list->getHTML());
00295 $this->__showImageByStatus($this->tpl,$item_list->getUserStatus());
00296 $this->tpl->setVariable("TBLROW",ilUtil::switchColor($this->container_row_counter++,'tblrow1','tblrow2'));
00297 $this->tpl->parseCurrentBlock();
00298
00299
00300 if($type == 'sahs_item' or
00301 $type == 'objective' or
00302 $type == 'event')
00303 {
00304 return true;
00305 }
00306
00307 if(!$this->__detailsShown($item_id))
00308 {
00309 return true;
00310 }
00311
00312 include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
00313 foreach(ilLPCollectionCache::_getItems($ilObjDataCache->lookupObjId($item_id)) as $child_id)
00314 {
00315 switch($item_list->getMode())
00316 {
00317 case LP_MODE_OBJECTIVES:
00318 $this->__renderContainerRow($child_id,'objective',$level + 1);
00319 break;
00320
00321 case LP_MODE_SCORM:
00322 $this->__renderContainerRow($item_id,$child_id,'sahs_item',$level + 1);
00323 break;
00324
00325 default:
00326 $this->__renderContainerRow($item_id,
00327 $child_id,
00328 $ilObjDataCache->lookupType($ilObjDataCache->lookupObjId($child_id)),$level + 1);
00329 break;
00330 }
00331 }
00332 }
00333
00334 function __appendUserInfo(&$info)
00335 {
00336
00337 if($this->show_user_info)
00338 {
00339 $info->addSection($this->lng->txt("trac_user_data"));
00340 $info->addProperty($this->lng->txt('username'),$this->tracked_user->getLogin());
00341 $info->addProperty($this->lng->txt('name'),$this->tracked_user->getFullname());
00342 $info->addProperty($this->lng->txt('last_login'),ilFormat::formatDate($this->tracked_user->getLastLogin()));
00343 $info->addProperty($this->lng->txt('trac_total_online'),
00344 ilFormat::_secondsToString(ilOnlineTracking::_getOnlineTime($this->tracked_user->getId())));
00345 }
00346
00347 }
00348
00349 function __showFilter()
00350 {
00351 $this->tpl->setVariable("FILTER",$this->filter_gui->getHTML());
00352 }
00353
00354 function __showProgressList()
00355 {
00356 global $ilUser,$ilObjDataCache;
00357
00358 include_once './Services/Tracking/classes/ItemList/class.ilLPItemListFactory.php';
00359
00360 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.lp_list_progress.html','Services/Tracking');
00361 $this->__showFilter();
00362
00363
00364 include_once("classes/class.ilInfoScreenGUI.php");
00365 $info = new ilInfoScreenGUI($this);
00366 $this->__appendUserInfo($info);
00367 $this->tpl->setVariable("USER_INFO",$info->getHTML());
00368
00369 if($this->activePDF())
00370 {
00371 $this->__showButton($this->ctrl->getLinkTargetByClass('ilpdfpresentation','createList'),$this->lng->txt('pdf_export'));
00372 }
00373
00374 $this->__initFilter();
00375 $tpl = new ilTemplate('tpl.lp_progress_list.html',true,true,'Services/Tracking');
00376 $this->filter->setRequiredPermission('read');
00377 if(!count($objs = $this->filter->getObjects()))
00378 {
00379 sendInfo($this->lng->txt('trac_filter_no_access'));
00380 return true;
00381 }
00382
00383
00384 if($this->filter->limitReached())
00385 {
00386 $info = sprintf($this->lng->txt('trac_filter_limit_reached'),$this->filter->getLimit());
00387 $tpl->setVariable("LIMIT_REACHED",$info);
00388 }
00389
00390 $type = $this->filter->getFilterType();
00391 $tpl->setVariable("HEADER_IMG",ilUtil::getImagePath('icon_'.$type.'.gif'));
00392 $tpl->setVariable("HEADER_ALT",$this->lng->txt('objs_'.$type));
00393 $tpl->setVariable("BLOCK_HEADER_CONTENT",$this->lng->txt('objs_'.$type));
00394
00395
00396 $tpl->setVariable("HEAD_STATUS",$this->lng->txt('trac_status'));
00397 $tpl->setVariable("HEAD_OPTIONS",$this->lng->txt('actions'));
00398
00399
00400 $sorted_objs = $this->__sort(array_keys($objs),'object_data','title','obj_id');
00401
00402 $counter = 0;
00403 foreach($sorted_objs as $object_id)
00404 {
00405 $item_list =& ilLPItemListFactory::_getInstance(0,$object_id,$ilObjDataCache->lookupType($object_id));
00406 $item_list->setCurrentUser($this->tracked_user->getId());
00407 $item_list->readUserInfo();
00408 $item_list->addCheckbox(array('item_id[]',$object_id,false));
00409 $item_list->setCmdClass(get_class($this));
00410 $item_list->addReferences($objs[$object_id]['ref_ids']);
00411 $item_list->enable('path');
00412 $item_list->renderSimpleProgress();
00413
00414
00415 #$tpl->setCurrentBlock("item_command");
00416 #$this->ctrl->setParameter($this,'details_id',$object_id);
00417 #$tpl->setVariable("HREF_COMMAND",$this->ctrl->getLinkTarget($this,'details'));
00418 #$tpl->setVariable("TXT_COMMAND",$this->lng->txt('details'));
00419 #$tpl->parseCurrentBlock();
00420
00421
00422
00423 $tpl->setCurrentBlock("item_command");
00424 $this->ctrl->setParameterByClass('illpfiltergui','hide',$object_id);
00425 $tpl->setVariable("HREF_COMMAND",$this->ctrl->getLinkTargetByClass('illpfiltergui','hide'));
00426 $tpl->setVariable("TXT_COMMAND",$this->lng->txt('trac_hide'));
00427 $tpl->parseCurrentBlock();
00428
00429 $tpl->setCurrentBlock("container_standard_row");
00430 $tpl->setVariable("ITEM_HTML",$item_list->getHTML());
00431 $this->__showImageByStatus($tpl,$item_list->getUserStatus());
00432 $tpl->setVariable("TBLROW",ilUtil::switchColor($counter++,'tblrow1','tblrow2'));
00433 $tpl->parseCurrentBlock();
00434 }
00435
00436
00437 $tpl->setVariable("DOWNRIGHT",ilUtil::getImagePath('arrow_downright.gif'));
00438 $tpl->setVariable("BTN_HIDE_SELECTED",$this->lng->txt('trac_hide'));
00439 $tpl->setVariable("FORMACTION",$this->ctrl->getFormActionByClass('illpfiltergui'));
00440
00441 $this->tpl->setVariable("LP_OBJECTS",$tpl->get());
00442 $this->tpl->setVariable("LEGEND", $this->__getLegendHTML());
00443 }
00444
00445
00446
00447 function __initUser($a_usr_id = 0)
00448 {
00449 global $ilUser,$rbacreview;
00450
00451 if($_POST['user_id'])
00452 {
00453 $a_usr_id = $_POST['user_id'];
00454 $this->ctrl->setParameter($this,'user_id',$_POST['user_id']);
00455 }
00456
00457 if($a_usr_id)
00458 {
00459 $this->tracked_user = ilObjectFactory::getInstanceByObjId($a_usr_id);
00460 }
00461 else
00462 {
00463 $this->tracked_user = $ilUser;
00464 }
00465
00466
00467 if(!$rbacreview->isAssigned($ilUser->getId(),SYSTEM_ROLE_ID))
00468 {
00469 $this->tracked_user = $ilUser;
00470 }
00471
00472 $this->show_user_info = ($this->tracked_user->getId() != $ilUser->getId());
00473 return true;
00474 }
00475
00476
00477 function __initFilterGUI()
00478 {
00479 global $ilUser;
00480
00481 include_once './Services/Tracking/classes/class.ilLPFilterGUI.php';
00482
00483 $this->filter_gui = new ilLPFilterGUI($ilUser->getId());
00484 }
00485
00486 function __initFilter()
00487 {
00488 global $ilUser;
00489
00490 include_once './Services/Tracking/classes/class.ilLPFilter.php';
00491
00492 $this->filter = new ilLPFilter($ilUser->getId());
00493 if($this->tracked_user->getId() != $ilUser->getId())
00494 {
00495 $this->filter->toggleAnonymizedCheck(true);
00496 }
00497 }
00498
00499 function __initDetails($a_details_id)
00500 {
00501 global $ilObjDataCache;
00502
00503 if(!$a_details_id)
00504 {
00505 $a_details_id = $this->getRefId();
00506 }
00507 if($a_details_id)
00508 {
00509 $ref_ids = ilObject::_getAllReferences($a_details_id);
00510
00511 $this->details_id = $a_details_id;
00512 $this->details_obj_id = $ilObjDataCache->lookupObjId($this->details_id);
00513 $this->details_type = $ilObjDataCache->lookupType($this->details_obj_id);
00514 $this->details_mode = ilLPObjSettings::_lookupMode($this->details_obj_id);
00515 }
00516 }
00517
00518
00519 function showDetails()
00520 {
00521 if(isset($_GET['item_id']))
00522 {
00523 $ids = array($_GET['item_id']);
00524 }
00525 else
00526 {
00527 unset($_SESSION['lp_show_progress'][$this->details_id]);
00528 $ids = $_POST['item_id'] ? $_POST['item_id'] : array();
00529 }
00530 foreach($ids as $id)
00531 {
00532 $_SESSION['lp_show_progress'][$this->details_id][$id] = true;
00533 }
00534 $this->details();
00535
00536 return true;
00537 }
00538
00539 function hideDetails()
00540 {
00541 if(isset($_GET['item_id']))
00542 {
00543 unset($_SESSION['lp_show_progress'][$this->details_id]["$_GET[item_id]"]);
00544 $this->details();
00545 return true;
00546 }
00547 }
00548
00549
00550 function __detailsShown($item_id)
00551 {
00552 return $_SESSION['lp_show_progress'][$this->details_id][$item_id] ? true : false;
00553 }
00554
00555
00556 }
00557 ?>