• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

Services/Tracking/classes/class.ilLPStatusCollection.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
00007         |                                                                             |
00008         | This program is free software; you can redistribute it and/or               |
00009         | modify it under the terms of the GNU General Public License                 |
00010         | as published by the Free Software Foundation; either version 2              |
00011         | of the License, or (at your option) any later version.                      |
00012         |                                                                             |
00013         | This program is distributed in the hope that it will be useful,             |
00014         | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015         | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016         | GNU General Public License for more details.                                |
00017         |                                                                             |
00018         | You should have received a copy of the GNU General Public License           |
00019         | along with this program; if not, write to the Free Software                 |
00020         | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
00021         +-----------------------------------------------------------------------------+
00022 */
00023 
00033 include_once './Services/Tracking/classes/class.ilLPStatus.php';
00034 include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php';
00035 
00036 class ilLPStatusCollection extends ilLPStatus
00037 {
00038 
00039         function ilLPStatusCollection($a_obj_id)
00040         {
00041                 global $ilDB;
00042 
00043                 parent::ilLPStatus($a_obj_id);
00044                 $this->db =& $ilDB;
00045         }
00046 
00047         function _getNotAttempted($a_obj_id)
00048         {
00049                 global $ilObjDataCache;
00050 
00051                 switch($ilObjDataCache->lookupType($a_obj_id))
00052                 {
00053                         case 'crs':
00054                                 include_once 'course/classes/class.ilCourseMembers.php';
00055                                 $members = ilCourseMembers::_getMembers($a_obj_id);
00056                                 
00057                                 // diff in progress and completed (use stored result in LPStatusWrapper)
00058                                 $users = array_diff((array) $members,$inp = ilLPStatusWrapper::_getInProgress($a_obj_id));
00059                                 $users = array_diff((array) $users,$com = ilLPStatusWrapper::_getCompleted($a_obj_id));
00060                                 $users = array_diff((array) $users,$fai = ilLPStatusWrapper::_getFailed($a_obj_id));
00061                                 return $users;
00062 
00063                         case 'grp':
00064                                 include_once 'classes/class.ilObjGroup.php';
00065                                 $members = ilObjGroup::_getMembers($a_obj_id);
00066 
00067                                 // diff in progress and completed (use stored result in LPStatusWrapper)
00068                                 $users = array_diff((array) $members,$inp = ilLPStatusWrapper::_getInProgress($a_obj_id));
00069                                 $users = array_diff((array) $users,$com = ilLPStatusWrapper::_getCompleted($a_obj_id));
00070                                 $users = array_diff((array) $users,$fai = ilLPStatusWrapper::_getFailed($a_obj_id));
00071                                 return $users;
00072 
00073                         default:
00074                                 return array();
00075                 }
00076         }
00077 
00078         function _getInProgress($a_obj_id)
00079         {
00080                 include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
00081                 include_once './Services/Tracking/classes/class.ilLPEventCollections.php';
00082 
00083 
00084                 global $ilBench,$ilObjDataCache;
00085                 $ilBench->start('LearningProgress','9172_LPStatusCollection_inProgress');
00086 
00087                 $in_progress = 0;
00088                 foreach(ilLPCollectionCache::_getItems($a_obj_id) as $item_id)
00089                 {
00090                         $item_id = $ilObjDataCache->lookupObjId($item_id);
00091 
00092                         // merge arrays of users with status 'in progress'
00093                         $users = array_unique(array_merge((array) $users,ilLPStatusWrapper::_getInProgress($item_id)));
00094                         $users = array_unique(array_merge((array) $users,ilLPStatusWrapper::_getCompleted($item_id)));
00095                 }
00096 
00097                 // Handle status of events
00098                 foreach(ilLPEventCollections::_getItems($a_obj_id) as $event_id)
00099                 {
00100                         #var_dump("<pre>","EVENT_ID: ",$event_id,"<pre>");
00101                         $users = array_unique(array_merge((array) $users,ilLPStatusWrapper::_getInProgressByType($event_id,'event')));
00102                         $users = array_unique(array_merge((array) $users,ilLPStatusWrapper::_getCompletedByType($event_id,'event')));
00103                 }
00104 
00105                 // Exclude all users with status completed.
00106                 $users = array_diff((array) $users,ilLPStatusWrapper::_getCompleted($a_obj_id));
00107                 // Exclude all users with status failed.
00108                 $users = array_diff((array) $users,ilLPStatusWrapper::_getFailed($a_obj_id));
00109 
00110                 switch($ilObjDataCache->lookupType($a_obj_id))
00111                 {
00112                         case 'crs':
00113                                 // Exclude all non members
00114                                 include_once 'course/classes/class.ilCourseMembers.php';
00115                                 $users = array_intersect(ilCourseMembers::_getMembers($a_obj_id),(array) $users);
00116                                 break;
00117                                 
00118                         case 'grp':
00119                                 include_once 'classes/class.ilObjGroup.php';
00120                                 $members = ilObjGroup::_getMembers($a_obj_id);
00121                                 $users = array_intersect($members,(array) $users);
00122                                 break;
00123                 }
00124 
00125                 $ilBench->stop('LearningProgress','9172_LPStatusCollection_inProgress');
00126                 return $users;
00127         }
00128 
00129         function _getCompleted($a_obj_id)
00130         {
00131                 include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
00132                 include_once './Services/Tracking/classes/class.ilLPEventCollections.php';
00133 
00134                 global $ilBench,$ilObjDataCache;
00135                 $ilBench->start('LearningProgress','9173_LPStatusCollection_completed');
00136 
00137                 $counter = 0;
00138                 $users = array();
00139                 foreach(ilLPCollectionCache::_getItems($a_obj_id) as $item_id)
00140                 {
00141                         $item_id = $ilObjDataCache->lookupObjId($item_id);
00142 
00143                         $tmp_users = ilLPStatusWrapper::_getCompleted($item_id);
00144                         if(!$counter++)
00145                         {
00146                                 $users = $tmp_users;
00147                         }
00148                         else
00149                         {
00150                                 $users = array_intersect($users,$tmp_users);
00151                         }
00152 
00153                 }
00154                 foreach(ilLPEventCollections::_getItems($a_obj_id) as $event_id)
00155                 {
00156                         $tmp_users = ilLPStatusWrapper::_getCompletedByType($event_id,'event');
00157                         if(!$counter++)
00158                         {
00159                                 $users = $tmp_users;
00160                         }
00161                         else
00162                         {
00163                                 $users = array_intersect($users,$tmp_users);
00164                         }
00165                 }
00166 
00167                 switch($ilObjDataCache->lookupType($a_obj_id))
00168                 {
00169                         case 'crs':
00170                                 // Exclude all non members
00171                                 include_once 'course/classes/class.ilCourseMembers.php';
00172                                 $users = array_intersect(ilCourseMembers::_getMembers($a_obj_id),(array) $users);
00173                                 break;
00174 
00175                         case 'grp':
00176                                 include_once 'classes/class.ilObjGroup.php';
00177                                 $members = ilObjGroup::_getMembers($a_obj_id);
00178                                 $users = array_intersect($members,(array) $users);
00179                                 break;
00180                 }
00181                 $users = array_diff($users,ilLPStatusWrapper::_getFailed($a_obj_id));
00182                 $ilBench->stop('LearningProgress','9173_LPStatusCollection_completed');
00183                 return (array) $users;
00184         }
00185 
00186         function _getFailed($a_obj_id)
00187         {
00188                 global $ilObjDataCache;
00189 
00190                 include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
00191 
00192                 $users = array();
00193                 foreach(ilLPCollectionCache::_getItems($a_obj_id) as $item_id)
00194                 {
00195                         $item_id = $ilObjDataCache->lookupObjId($item_id);
00196                         $tmp_users = ilLPStatusWrapper::_getFailed($item_id);
00197                         $users = array_merge($users,$tmp_users);
00198                 }
00199                 
00200                 switch($ilObjDataCache->lookupType($a_obj_id))
00201                 {
00202                         case 'crs':
00203                                 // Exclude all non members
00204                                 include_once 'course/classes/class.ilCourseMembers.php';
00205                                 $users = array_intersect(ilCourseMembers::_getMembers($a_obj_id),(array) $users);
00206                                 break;
00207                                 
00208                         case 'grp':
00209                                 include_once 'classes/class.ilObjGroup.php';
00210                                 $members = ilObjGroup::_getMembers($a_obj_id);
00211                                 $users = array_intersect($members,(array) $users);
00212                                 break;
00213                 }
00214                 
00215                 return array_unique($users);
00216         }
00217                 
00218 
00219         function _getStatusInfo($a_obj_id)
00220         {
00221                 include_once './Services/Tracking/classes/class.ilLPCollectionCache.php';
00222                 include_once './Services/Tracking/classes/class.ilLPEventCollections.php';
00223 
00224                 $status_info['collections'] = ilLPCollectionCache::_getItems($a_obj_id);
00225                 $status_info['event_collections'] = ilLPEventCollections::_getItems($a_obj_id);
00226 
00227                 $status_info['num_collections'] = count($status_info['collections']) + count($status_info['event_collections']);
00228                 return $status_info;
00229         }
00230 
00231         function _getTypicalLearningTime($a_obj_id)
00232         {
00233                 global $ilObjDataCache;
00234 
00235                 if($ilObjDataCache->lookupType($a_obj_id) == 'sahs')
00236                 {
00237                         return parent::_getTypicalLearningTime($a_obj_id);
00238                 }
00239 
00240                 $status_info = ilLPStatusWrapper::_getStatusInfo($a_obj_id);
00241                 foreach($status_info['collections'] as $item)
00242                 {
00243                         $tlt += ilLPStatusWrapper::_getTypicalLearningTime($ilObjDataCache->lookupObjId($item));
00244                 }
00245                 return $tlt;
00246         }
00247 
00248 }       
00249 ?>

Generated on Fri Dec 13 2013 13:52:12 for ILIAS Release_3_7_x_branch .rev 46817 by  doxygen 1.7.1