44 self::PROGRESS_FILTER_ALL,
45 self::PROGRESS_FILTER_IN_PROGRESS,
46 self::PROGRESS_FILTER_COMPLETED,
47 self::PROGRESS_FILTER_FAILED,
48 self::PROGRESS_FILTER_NOT_ATTEMPTED
56 public function deleteProgress(
string $sid, array $ref_ids, array $usr_ids, array $type_filter, array $progress_filter)
61 if (!is_array($usr_ids)) {
62 $usr_ids = (array) $usr_ids;
64 if (!is_array($type_filter)) {
65 $type_filter = (array) $type_filter;
72 if (array_diff($type_filter, self::$DELETE_PROGRESS_FILTER_TYPES)) {
73 return $this->
raiseError(
'Invalid filter type given',
'Client');
77 return $this->
raiseError(
'Invalid user ids given',
'Client');
80 $valid_refs = array();
87 if (
$GLOBALS[
'DIC'][
'objDefinition']->isContainer($type)) {
88 $all_sub_objs = array();
89 foreach (($type_filter) as $type_filter_item) {
90 $sub_objs =
$GLOBALS[
'DIC'][
'tree']->getSubTree(
91 $GLOBALS[
'DIC'][
'tree']->getNodeData($ref_id),
95 $all_sub_objs = array_merge($all_sub_objs, $sub_objs);
98 foreach ($all_sub_objs as $child_ref) {
100 if (!
$GLOBALS[
'DIC'][
'ilAccess']->checkAccess(
'write',
'', $child_ref)) {
102 'Permission denied for : ' . $ref_id .
' -> type ' . $type,
106 $valid_refs[] = $child_ref;
108 } elseif (in_array($type, $type_filter)) {
109 if (!
$GLOBALS[
'DIC'][
'ilAccess']->checkAccess(
'write',
'', $ref_id)) {
110 return $this->
raiseError(
'Permission denied for : ' . $ref_id .
' -> type ' . $type,
'Client');
115 'Invalid object type given for : ' . $ref_id .
' -> type ' . $type,
122 foreach ($valid_refs as $ref_id) {
126 return $this->
raiseError(
'Invalid reference id given : ' . $ref_id .
' -> type ' . $type,
'Client');
132 switch ($obj->getType()) {
150 $obj->removeTestResultsFromSoapLpAdministration(array_values($valid_users));
165 public function getProgressInfo(
string $sid,
int $a_ref_id, array $a_progress_filter)
172 $ilAccess = $DIC->access();
177 'Error ' . self::SOAP_LP_ERROR_AUTHENTICATION .
':' . $this->
getMessage(),
178 self::SOAP_LP_ERROR_AUTHENTICATION
183 if (array_diff($a_progress_filter, self::$PROGRESS_INFO_TYPES)) {
185 'Error ' . self::SOAP_LP_ERROR_INVALID_FILTER .
': Invalid filter type given',
186 self::SOAP_LP_ERROR_INVALID_FILTER
192 'Error ' . self::SOAP_LP_ERROR_LP_NOT_ENABLED .
': Learning progress not enabled in ILIAS',
193 self::SOAP_LP_ERROR_LP_NOT_ENABLED
200 'Error ' . self::SOAP_LP_ERROR_INVALID_REF_ID .
': Invalid reference id ' . $a_ref_id .
' given',
201 self::SOAP_LP_ERROR_INVALID_REF_ID
209 'Error ' . self::SOAP_LP_ERROR_LP_NOT_AVAILABLE .
': Learning progress not available for objects of type ' .
211 self::SOAP_LP_ERROR_LP_NOT_AVAILABLE
219 if (!$ilAccess->checkRbacOrPositionPermissionAccess(
220 'read_learning_progress',
221 'read_learning_progress',
225 'Error ' . self::SOAP_LP_ERROR_NO_PERMISSION .
': No Permission to access learning progress in this object',
226 self::SOAP_LP_ERROR_NO_PERMISSION
231 $writer->xmlStartTag(
232 'LearningProgressInfo',
234 'ref_id' => $obj->getRefId(),
235 'type' => $obj->getType()
239 $writer->xmlStartTag(
'LearningProgressSummary');
241 if (in_array(self::PROGRESS_FILTER_ALL, $a_progress_filter) || in_array(
242 self::PROGRESS_FILTER_COMPLETED,
246 $completed =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
247 'read_learning_progress',
252 $completed = count($completed);
257 'type' => self::PROGRESS_FILTER_COMPLETED,
262 if (in_array(self::PROGRESS_FILTER_ALL, $a_progress_filter) || in_array(
263 self::PROGRESS_FILTER_IN_PROGRESS,
267 $completed =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
268 'read_learning_progress',
273 $completed = count($completed);
278 'type' => self::PROGRESS_FILTER_IN_PROGRESS,
283 if (in_array(self::PROGRESS_FILTER_ALL, $a_progress_filter) || in_array(
284 self::PROGRESS_FILTER_FAILED,
288 $completed =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
289 'read_learning_progress',
294 $completed = count($completed);
299 'type' => self::PROGRESS_FILTER_FAILED,
304 if (in_array(self::PROGRESS_FILTER_ALL, $a_progress_filter) || in_array(
305 self::PROGRESS_FILTER_NOT_ATTEMPTED,
309 $completed =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
310 'read_learning_progress',
315 $completed = count($completed);
320 'type' => self::PROGRESS_FILTER_NOT_ATTEMPTED,
325 $writer->xmlEndTag(
'LearningProgressSummary');
326 $writer->xmlStartTag(
'UserProgress');
327 if (in_array(self::PROGRESS_FILTER_ALL, $a_progress_filter) || in_array(
328 self::PROGRESS_FILTER_COMPLETED,
332 $completed =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
333 'read_learning_progress',
339 $this->
addUserProgress($writer, $completed, self::PROGRESS_FILTER_COMPLETED);
341 if (in_array(self::PROGRESS_FILTER_ALL, $a_progress_filter) || in_array(
342 self::PROGRESS_FILTER_IN_PROGRESS,
346 $completed =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
347 'read_learning_progress',
352 $this->
addUserProgress($writer, $completed, self::PROGRESS_FILTER_IN_PROGRESS);
354 if (in_array(self::PROGRESS_FILTER_ALL, $a_progress_filter) || in_array(
355 self::PROGRESS_FILTER_FAILED,
359 $completed =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
360 'read_learning_progress',
365 $this->
addUserProgress($writer, $completed, self::PROGRESS_FILTER_FAILED);
367 if (in_array(self::PROGRESS_FILTER_ALL, $a_progress_filter) || in_array(
368 self::PROGRESS_FILTER_NOT_ATTEMPTED,
372 $completed =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
373 'read_learning_progress',
379 $this->
addUserProgress($writer, $completed, self::PROGRESS_FILTER_NOT_ATTEMPTED);
381 $writer->xmlEndTag(
'UserProgress');
382 $writer->xmlEndTag(
'LearningProgressInfo');
384 return $writer->xmlDumpMem();
399 $writer->
xmlElement(
'Login', array(), (
string) $info[
'login']);
400 $writer->
xmlElement(
'Firstname', array(), (
string) $info[
'firstname']);
401 $writer->
xmlElement(
'Lastname', array(), (
string) $info[
'lastname']);
415 $all_users = array();
416 if (in_array(self::USER_FILTER_ALL, $usr_ids)) {
417 $all_users = array_unique(
425 $all_users = $usr_ids;
428 if (!$filter || in_array(self::PROGRESS_FILTER_ALL, $filter)) {
429 $GLOBALS[
'DIC'][
'log']->write(__METHOD__ .
': Deleting all progress data');
433 $filter_users = array();
434 if (in_array(self::PROGRESS_FILTER_IN_PROGRESS, $filter)) {
435 $GLOBALS[
'DIC'][
'log']->write(__METHOD__ .
': Filtering in progress.');
438 if (in_array(self::PROGRESS_FILTER_COMPLETED, $filter)) {
439 $GLOBALS[
'DIC'][
'log']->write(__METHOD__ .
': Filtering completed.');
442 if (in_array(self::PROGRESS_FILTER_FAILED, $filter)) {
443 $GLOBALS[
'DIC'][
'log']->write(__METHOD__ .
': Filtering failed.');
448 return array_intersect($all_users, $filter_users);
458 $ilDB = $DIC[
'ilDB'];
460 $query =
'DELETE FROM scorm_tracking ' .
461 'WHERE ' .
$ilDB->in(
'user_id', $a_usr_ids,
false,
'integer') .
' ' .
462 'AND obj_id = ' .
$ilDB->quote($a_obj_id,
'integer') .
' ';
474 $ilDB = $DIC[
'ilDB'];
476 $query =
'SELECT cp_node_id FROM cp_node ' .
477 'WHERE nodename = ' .
$ilDB->quote(
'item',
'text') .
' ' .
478 'AND cp_node.slm_id = ' .
$ilDB->quote($a_obj_id,
'integer');
483 $scos[] = $row->cp_node_id;
486 $query =
'DELETE FROM cmi_node ' .
487 'WHERE ' .
$ilDB->in(
'user_id', $a_usr_ids,
false,
'integer') .
' ' .
488 'AND ' .
$ilDB->in(
'cp_node_id', $scos,
false,
'integer');
489 $ilDB->manipulate($query);
506 $rbacsystem = $DIC[
'rbacsystem'];
507 $tree = $DIC[
'tree'];
508 $ilLog = $DIC[
'ilLog'];
512 if (is_array($type_filter)) {
513 $types = implode(
",", $type_filter);
519 $writer->setTimestamp($timestamp);
520 $writer->setIncludeRefIds($include_ref_ids);
521 $writer->setTypeFilter($type_filter);
524 return $writer->xmlDumpMem(
true);
526 return $this->
raiseError($e->getMessage(),
'Client');
const PROGRESS_FILTER_IN_PROGRESS
getLearningProgressChanges(string $sid, string $timestamp, bool $include_ref_ids, array $type_filter)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getCompleted(int $a_obj_id)
Static function to read the users who have the status 'completed'.
deleteScorm2004Tracking(int $a_obj_id, array $a_usr_ids)
Delete scorm 2004 tracking.
const SOAP_LP_ERROR_AUTHENTICATION
raiseError(string $a_message, $a_code)
static array $PROGRESS_INFO_TYPES
const PROGRESS_FILTER_FAILED
static _lookupName(int $a_user_id)
lookup user name
const SOAP_LP_ERROR_INVALID_REF_ID
static array $DELETE_PROGRESS_FILTER_TYPES
const PROGRESS_FILTER_NOT_ATTEMPTED
const SOAP_LP_ERROR_NO_PERMISSION
static _resetInfoCaches($a_obj_id)
static _getInProgress(int $a_obj_id)
Static function to read users who have the status 'in_progress'.
const PROGRESS_FILTER_ALL
static _getNotAttempted(int $a_obj_id)
Static function to read the number of user who have the status 'not_attempted'.
static _lookupSubType(int $a_obj_id)
lookup subtype id (scorm, )
const SOAP_LP_ERROR_LP_NOT_AVAILABLE
static _lookupObjId(int $ref_id)
xmlEndTag(string $tag)
Writes an endtag.
const SOAP_LP_ERROR_INVALID_FILTER
static _enabledLearningProgress()
const OP_READ_LEARNING_PROGRESS
XML writer learning progress.
static userExists(array $a_usr_ids=[])
static _getFailed(int $a_obj_id)
Static function to read the users who have the status 'completed'.
checkSession(string $sid)
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
static _refreshStatus(int $a_obj_id, ?array $a_users=null)
addUserProgress(ilXmlWriter $writer, array $users, int $a_type)
static _lookupDBMode(int $a_obj_id)
foreach($mandatory_scripts as $file) $timestamp
applyProgressFilter(int $obj_id, array $usr_ids, array $filter)
Apply progress filter.
xmlStartTag(string $tag, ?array $attrs=null, bool $empty=false, bool $encode=true, bool $escape=true)
Writes a starttag.
xmlElement(string $tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
static _lookupType(int $id, bool $reference=false)
const SOAP_LP_ERROR_LP_NOT_ENABLED
deleteScormTracking(int $a_obj_id, array $a_usr_ids)
Delete SCORM Tracking.
const PROGRESS_FILTER_COMPLETED