5 include_once
"Services/Tracking/classes/class.ilLPObjSettings.php";
22 $this->obj_id = (int)$a_obj_id;
27 static $instances = array();
29 if(!isset($instances[$a_obj_id]))
32 $class = self::getTypeClass($type);
35 $instance =
new $class($a_obj_id);
40 $instance =
new self($a_obj_id);
42 $instances[$a_obj_id] = $instance;
45 return $instances[$a_obj_id];
50 global $objDefinition;
52 if(self::isSupportedObjectType($a_type))
59 include_once
"Modules/Course/classes/class.ilCourseLP.php";
63 include_once
"Modules/Group/classes/class.ilGroupLP.php";
67 include_once
"Modules/Folder/classes/class.ilFolderLP.php";
74 include_once
"Modules/LearningModule/classes/class.ilLearningModuleLP.php";
75 return "ilLearningModuleLP";
78 include_once
"Modules/HTMLLearningModule/classes/class.ilHTMLLearningModuleLP.php";
79 return "ilHTMLLearningModuleLP";
82 include_once
"Modules/ScormAicc/classes/class.ilScormLP.php";
89 include_once
"Modules/Test/classes/class.ilTestLP.php";
93 include_once
"Modules/Exercise/classes/class.ilExerciseLP.php";
94 return "ilExerciseLP";
97 require_once
'Modules/File/classes/class.ilFileLP.php';
101 require_once
"Modules/MediaCast/classes/class.ilMediaCastLP.php";
102 return "ilMediaCastLP";
105 include_once
"Modules/Session/classes/class.ilSessionLP.php";
106 return "ilSessionLP";
109 include_once
"Modules/Survey/classes/class.ilSurveyLP.php";
113 include_once
"Modules/StudyProgramme/classes/class.ilStudyProgrammeLP.php";
114 return "ilStudyProgrammeLP";
117 case $objDefinition->isPluginTypeName($a_type):
118 include_once
"Services/Component/classes/class.ilPluginLP.php";
126 global $objDefinition;
128 $valid = array(
"crs",
"grp",
"fold",
"lm",
"htlm",
"sahs",
"tst",
"exc",
"sess",
"svy",
"file",
"mcst",
"prg");
130 if(in_array($a_type,
$valid))
135 if($objDefinition->isPluginTypeName($a_type))
137 include_once
'Services/Repository/classes/class.ilRepositoryObjectPluginSlot.php';
147 $this->collection_instance = null;
173 if($this->mode === null)
180 $this->mode = (int)
$mode;
221 if($this->collection_instance === null)
223 include_once
"Services/Tracking/classes/collection/class.ilLPCollection.php";
250 foreach(array_reverse(
$path) as $path_ref_id)
253 $all = $olp->getMembers(
false);
269 if(
sizeof($user_ids))
277 if((
bool)$a_recursive &&
278 method_exists($this,
"getPossibleCollectionItems"))
280 $subitems = $this->getPossibleCollectionItems();
281 if(is_array($subitems))
283 foreach($subitems as $sub_ref_id)
286 $olp->resetLPDataForUserIds($a_user_ids,
false);
293 include_once
"Services/Tracking/classes/class.ilLPMarks.php";
296 include_once
"Services/Tracking/classes/class.ilChangeEvent.php";
300 include_once
"Services/Tracking/classes/class.ilLPStatusWrapper.php";
301 foreach($a_user_ids as $user_id)
314 include_once
"Services/Tracking/classes/class.ilLPMarks.php";
317 include_once
"Services/Tracking/classes/class.ilChangeEvent.php";
332 $ref_ids = $tree->getSubTreeIds($a_source_ref_id);
333 $ref_ids[] = $a_source_ref_id;
336 $new_path = $tree->getPathId($a_source_ref_id);
337 array_pop($new_path);
338 $new_path = implode(
"/", $new_path);
340 include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
343 $set = $ilDB->query(
"SELECT DISTINCT(ut_lp_collections.obj_id) obj_id".
344 " FROM object_reference".
345 " JOIN ut_lp_collections ON".
346 " (".$ilDB->in(
"object_reference.ref_id", $ref_ids,
"",
"integer").
347 " AND object_reference.ref_id = ut_lp_collections.item_id)");
348 while ($rec = $ilDB->fetchAssoc($set))
353 $coll_ref_id = array_pop($coll_ref_id);
356 if($coll_ref_id == $a_source_ref_id)
362 if($tree->isGrandChild($a_source_ref_id, $coll_ref_id))
368 $coll_path = $tree->getPathId($coll_ref_id);
369 $coll_path = implode(
"/", $coll_path);
372 if(!stristr($new_path, $coll_path))
375 $query =
"DELETE FROM ut_lp_collections".
376 " WHERE obj_id = ".$ilDB->quote($rec[
"obj_id"],
"integer").
377 " AND ".$ilDB->in(
"item_id", $ref_ids,
"",
"integer");
378 $ilDB->manipulate(
$query);
393 include_once
"Services/Tracking/classes/class.ilLPMarks.php";
396 include_once
"Services/Tracking/classes/class.ilChangeEvent.php";
402 $collection->delete();
412 include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
415 $set = $ilDB->query(
"SELECT ut_lp_collections.obj_id obj_id FROM ".
416 "object_reference JOIN ut_lp_collections ON ".
417 "(object_reference.obj_id = ".$ilDB->quote($this->obj_id,
"integer").
418 " AND object_reference.ref_id = ut_lp_collections.item_id)");
419 while ($rec = $ilDB->fetchAssoc($set))
424 $query =
"DELETE FROM ut_lp_collections".
425 " WHERE obj_id = ".$ilDB->quote($rec[
"obj_id"],
"integer").
426 " AND item_id = ".$ilDB->quote($this->obj_id,
"integer");
427 $ilDB->manipulate(
$query);
446 protected static function isLPMember(array &$a_res, $a_usr_id, $a_obj_ids)
462 protected static function findMembershipsByPath(array &$a_res, $a_usr_id, $a_parent_ref_id, array $a_obj_ids, $a_mapped_ref_ids =
false)
469 $path = $tree->getPathId($a_parent_ref_id);
470 foreach(array_reverse(
$path) as $path_ref_id)
476 $class = self::getTypeClass($type);
479 $class::isLPMember($chk, $a_usr_id, array($path_ob_id));
480 if(!$a_mapped_ref_ids)
486 if($chk[$path_ob_id])
495 foreach($a_obj_ids as
$obj_id => $ref_ids)
499 if($tree->isGrandChild($path_ref_id, $ref_id))
502 if($chk[$path_ob_id])
527 public static function getLPMemberships($a_usr_id, array $a_obj_ids, $a_parent_ref_id = null, $a_mapped_ref_ids =
false)
534 if((
bool)$a_mapped_ref_ids)
536 $ref_map = $a_obj_ids;
537 $a_obj_ids = array_keys($a_obj_ids);
543 $types_map = array();
544 $query =
" SELECT obj_id, type".
546 " WHERE ".$ilDB->in(
"obj_id", $a_obj_ids,
"",
"integer");
547 $set = $ilDB->query(
$query);
548 while(
$row = $ilDB->fetchAssoc($set))
550 $types_map[
$row[
"type"]][] = $row[
"obj_id"];
551 $res[$row[
"obj_id"]] =
false;
554 $find_by_parent = array();
555 foreach($types_map as $type => $type_obj_ids)
557 $class = self::getTypeClass($type);
561 if(!$class::isLPMember(
$res, $a_usr_id, $type_obj_ids))
563 $find_by_parent = array_merge($find_by_parent, $type_obj_ids);
568 if(
sizeof($find_by_parent))
573 if(self::findMembershipsByPath(
$res, $a_usr_id, $a_parent_ref_id, $find_by_parent))
576 $find_by_parent = null;
580 else if(
sizeof($ref_map))
582 foreach($find_by_parent as
$obj_id)
585 if(
$res[$obj_id] ===
false)
587 if(isset($ref_map[$obj_id]))
590 foreach($ref_map[$obj_id] as
$ref_id)
592 $parent_ref_id = $tree->getParentId($ref_id);
593 if($parent_ref_id == ROOT_FOLDER_ID)
600 $found = self::findMembershipsByPath(
$res, $a_usr_id, $parent_ref_id, $ref_map,
true);
605 foreach($found as $found_obj_id => $found_ref_ids)
607 $diff = array_diff($ref_map[$found_obj_id], $found_ref_ids);
612 $ref_map[$found_obj_id] = $diff;
618 unset($ref_map[$found_obj_id]);
628 $find_by_parent = array_keys($ref_map);
632 if(
sizeof($find_by_parent))
634 $set = $ilDB->query(
"SELECT obj_id".
636 " WHERE ".$ilDB->in(
"obj_id", $find_by_parent,
"",
"integer").
637 " AND usr_id = ".$ilDB->quote($a_usr_id,
"integer"));
638 while(
$row = $ilDB->fetchAssoc($set))
660 return !in_array($a_obj_type, array(
"exc",
"file",
"mcst",
"mob",
"htlm"));
665 return !in_array($a_obj_type, array(
"lm",
"dbk"));
670 return !in_array($a_obj_type, array(
'svy',
'tst',
'htlm',
'exc',
'sess',
'file',
'prg'));
static isTypePluginWithLP($a_type, $a_active_status=true)
Check whether a repository type is a plugin which has active learning progress.
resetLPDataForUserIds(array $a_user_ids, $a_recursive=true)
static getTypeClass($a_type)
resetLPDataForCompleteObject($a_recursive=true)
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
static isSupportedObjectType($a_type)
static getInstanceByMode($a_obj_id, $a_mode)
static _getAllUserIds($a_obj_id)
updateParentCollections()
static _getAllUserIds($a_obj_id)
static _getAllReferences($a_id)
get all reference ids of object
resetCustomLPDataForUserIds(array $a_user_ids, $a_recursive=true)
static _delete($a_obj_id)
Delete object entries.
static findMembershipsByPath(array &$a_res, $a_usr_id, $a_parent_ref_id, array $a_obj_ids, $a_mapped_ref_ids=false)
Find (lp-relevant) memberships by path.
static _lookupDBMode($a_obj_id)
static _lookupObjId($a_id)
static _deleteForUsers($a_obj_id, array $a_user_ids)
static supportsMatrixView($a_obj_type)
static _lookupType($a_id, $a_reference=false)
lookup object type
static supportsMark($a_obj_type)
static _mode2InfoText($a_mode)
const LP_MODE_DEACTIVATED
static supportsSpentSeconds($a_obj_type)
_refreshStatus($a_obj_id, $a_users=null)
Set dirty.
static isLPMember(array &$a_res, $a_usr_id, $a_obj_ids)
Find (lp-relevant) members for given object ids.
static deleteObject($a_obj_id)
Delete object.
getMembers($a_search=true)
static _deleteReadEventsForUsers($a_obj_id, array $a_user_ids)
static handleMove($a_source_ref_id)
static getLPMemberships($a_usr_id, array $a_obj_ids, $a_parent_ref_id=null, $a_mapped_ref_ids=false)
Get all objects where given user is member (from LP POV)
static getInstance($a_obj_id)
static _mode2Text($a_mode)