/** * delete SCORM learning module and all related data * * this method has been tested on may 9th 2004 * meta data, scorm lm data, scorm tree, scorm objects (organization(s), * manifest, resources and items), tracking data and data directory * have been deleted correctly as desired * * @access public * @return boolean true if all object data were removed; false if only a references were removed */ function delete() { global $ilDB, $ilLog; // always call parent delete function first!! if (!parent::delete()) { return false; } // delete meta data of scorm content object /* $nested = new ilNestedSetXML(); $nested->init($this->getId(), $this->getType()); $nested->deleteAllDBData(); */ $this->deleteMetaData(); // delete data directory ilUtil::delDir($this->getDataDirectory()); // delete scorm learning module record $ilDB->manipulateF('DELETE FROM sahs_lm WHERE id = %s', array('integer'), array($this->getId())); // delete aicc data $res = $ilDB->queryF(' SELECT * FROM aicc_object, aicc_units WHERE aicc_object.obj_id = aicc_units.obj_id AND aicc_object.slm_id = %s', array('integer'), array($this->getId())); while ($row = $ilDB->fetchAssoc($res)) { $obj_id = $row['obj_id']; $ilDB->manipulateF(' DELETE FROM aicc_units WHERE obj_id = %s', array('integer'), array($obj_id)); } $res = $ilDB->queryF(' SELECT * FROM aicc_object, aicc_course WHERE aicc_object.obj_id = aicc_course.obj_id AND aicc_object.slm_id = %s', array('integer'), array($this->getId())); while ($row = $ilDB->fetchAssoc($res)) { $obj_id = $row['obj_id']; $ilDB->manipulateF(' DELETE FROM aicc_course WHERE obj_id = %s', array('integer'), array($obj_id)); } $ilDB->manipulateF('DELETE FROM scorm_tree WHERE slm_id = %s', array('integer'), array($this->getId())); $ilDB->manipulateF('DELETE FROM aicc_object WHERE slm_id = %s', array('integer'), array($this->getId())); $q_log = "DELETE FROM scorm_tracking WHERE obj_id = " . $ilDB->quote($this->getId()); $ilLog->write("SAHS Delete (AICC LM): " . $q_log); $ilDB->manipulateF('DELETE FROM scorm_tracking WHERE obj_id = %s', array('integer'), array($this->getId())); // update learning progress status include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getId()); // always call parent delete function at the end!! return true; }
function delete() { global $ilDB, $ilLog; parent::delete(); $ilDB->manipulateF('DELETE FROM sc_item WHERE obj_id = %s', array('integer'), array($this->getId())); $ilLog->write("SAHS Delete(ScormItem): " . 'DELETE FROM scorm_tracking WHERE sco_id = ' . $this->getId() . ' AND obj_id = ' . $this->getSLMId()); $ilDB->manipulateF('DELETE FROM scorm_tracking WHERE sco_id = %s AND obj_id = %s', array('integer', 'integer'), array($this->getId(), $this->getSLMId())); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getSLMId()); }
/** * Import raw data * @global ilDB $ilDB * @global ilObjUser $ilUser * @param string $a_file * @return void */ private function importRaw($a_file) { global $ilDB, $ilUser, $lng; $lng->loadLanguageModule("scormtrac"); $fhandle = fopen($a_file, "r"); $fields = fgetcsv($fhandle, pow(2, 16), ';'); $users = array(); while (($csv_rows = fgetcsv($fhandle, pow(2, 16), ";")) !== FALSE) { $data = array_combine($fields, $csv_rows); if ($data['Userid']) { $user_id = $this->parseUserId($data['Userid']); } else { if ($data[$lng->txt("user")]) { if (is_int($data[$lng->txt("user")])) { $user_id = $data[$lng->txt("user")]; } } } if ($data[$lng->txt("login")]) { $user_id = $this->get_user_id($data[$lng->txt("login")]); } if (!$user_id) { continue; } if ($data['Scoid']) { $il_sco_id = $this->lookupSCOId($data['Scoid']); } if ($data[$lng->txt("identifierref")]) { $il_sco_id = $this->lookupSCOId($data[$lng->txt("identifierref")]); } if (!$il_sco_id) { continue; } $c_timestamp = ""; if ($data['Timestamp']) { $c_timestamp = $data['Timestamp']; } if ($data[$lng->txt("c_timestamp")]) { $c_timestamp = $data[$lng->txt("c_timestamp")]; } if ($c_timestamp == "") { $date = new DateTime(); $c_timestamp = $date->getTimestamp(); } if (!$data['Key']) { continue; } if (!$data['Value']) { $data['Value'] = ""; } //do the actual import if ($il_sco_id > 0) { $statement = $ilDB->queryF(' SELECT * FROM scorm_tracking WHERE user_id = %s AND sco_id = %s AND lvalue = %s AND obj_id = %s', array('integer', 'integer', 'text', 'integer'), array($user_id, $il_sco_id, $data['Key'], $this->getID())); if ($ilDB->numRows($statement) > 0) { $ilDB->update('scorm_tracking', array('rvalue' => array('clob', $data['Value']), 'c_timestamp' => array('timestamp', $c_timestamp)), array('user_id' => array('integer', $user_id), 'sco_id' => array('integer', $il_sco_id), 'lvalue' => array('text', $data['Key']), 'obj_id' => array('integer', $this->getId()))); } else { $ilDB->insert('scorm_tracking', array('obj_id' => array('integer', $this->getId()), 'user_id' => array('integer', $user_id), 'sco_id' => array('integer', $il_sco_id), 'lvalue' => array('text', $data['Key']), 'rvalue' => array('clob', $data['Value']), 'c_timestamp' => array('timestamp', $data['Timestamp']))); } } $package_attempts = 1; if ($il_sco_id == 0) { if ($data['Key'] == "package_attempts") { $package_attempts = $data['Value']; } } //UK determineStatus, percentage_completed and syncGlobalStatus } fclose($fhandle); include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php'; ilLPStatusWrapper::_refreshStatus($this->getId()); return 0; }
public function removeCMIData() { global $ilDB; //cmi nodes $cmi_nodes = array(); $res = $ilDB->queryF(' SELECT cmi_node.cmi_node_id FROM cmi_node, cp_node WHERE cp_node.slm_id = %s AND cmi_node.cp_node_id = cp_node.cp_node_id', array('integer'), array($this->packageId)); while ($data = $ilDB->fetchAssoc($res)) { $cmi_node_values[] = $data['cmi_node_id']; } //cmi interaction nodes $cmi_inodes = array(); $res = $ilDB->queryF(' SELECT cmi_interaction.cmi_interaction_id FROM cmi_interaction, cmi_node, cp_node WHERE (cp_node.slm_id = %s AND cmi_node.cp_node_id = cp_node.cp_node_id AND cmi_node.cmi_node_id = cmi_interaction.cmi_node_id)', array('integer'), array($this->packageId)); while ($data = $ilDB->fetchAssoc($res)) { $cmi_inode_values[] = $data['cmi_interaction_id']; } //response $query = 'DELETE FROM cmi_correct_response WHERE ' . $ilDB->in('cmi_correct_response.cmi_interaction_id', $cmi_inode_values, false, 'integer'); $ilDB->manipulate($query); //objective interaction $query = 'DELETE FROM cmi_objective WHERE ' . $ilDB->in('cmi_objective.cmi_interaction_id', $cmi_inode_values, false, 'integer'); $ilDB->manipulate($query); //objective $query = 'DELETE FROM cmi_objective WHERE ' . $ilDB->in('cmi_objective.cmi_node_id', $cmi_node_values, false, 'integer'); $ilDB->manipulate($query); //interaction $query = 'DELETE FROM cmi_interaction WHERE ' . $ilDB->in('cmi_interaction.cmi_node_id', $cmi_node_values, false, 'integer'); $ilDB->manipulate($query); //comment $query = 'DELETE FROM cmi_comment WHERE ' . $ilDB->in('cmi_comment.cmi_node_id', $cmi_node_values, false, 'integer'); $ilDB->manipulate($query); //node $query = 'DELETE FROM cmi_node WHERE ' . $ilDB->in('cmi_node.cmi_node_id', $cmi_node_values, false, 'integer'); $ilDB->manipulate($query); //custom $query = 'DELETE FROM cmi_custom WHERE obj_id = %s'; $ilDB->manipulateF($query, array('integer'), array($this->packageId)); //g_objective $query = 'DELETE FROM cmi_gobjective WHERE scope_id = %s'; $ilDB->manipulateF($query, array('integer'), array($this->packageId)); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->packageId); }
function insert() { global $ilDB, $ilLog; $ilLog->logStack(); $query = "INSERT INTO ut_lp_settings (obj_id,obj_type,u_mode,visits) " . "VALUES(" . $ilDB->quote($this->getObjId(), 'integer') . ", " . $ilDB->quote($this->getObjType(), 'text') . ", " . $ilDB->quote($this->getMode(), 'integer') . ", " . $ilDB->quote(0, 'integer') . ")"; $res = $ilDB->manipulate($query); $this->__read(); // refresh learning progress include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getObjId()); return true; }
/** * Import raw data * @global ilDB $ilDB * @global ilObjUser $ilUser * @param string $a_file * @return void */ private function importRaw($a_file) { global $ilDB, $ilUser; $fhandle = fopen($a_file, "r"); $fields = fgetcsv($fhandle, pow(2, 16), ';'); $users = array(); while (($csv_rows = fgetcsv($fhandle, pow(2, 16), ";")) !== FALSE) { $data = array_combine($fields, $csv_rows); $user_id = $this->parseUserId($data['Userid']); if (!$user_id) { continue; } $il_sco_id = $this->lookupSCOId($data['Scoid']); //do the actual import if ($il_sco_id >= 0) { $statement = $ilDB->queryF(' SELECT * FROM scorm_tracking WHERE user_id = %s AND sco_id = %s AND lvalue = %s AND obj_id = %s', array('integer', 'integer', 'text', 'integer'), array($user_id, $il_sco_id, $data['Key'], $this->getID())); if ($ilDB->numRows($statement) > 0) { $ilDB->update('scorm_tracking', array('rvalue' => array('clob', $data['Value']), 'c_timestamp' => array('timestamp', $data['Timestamp'])), array('user_id' => array('integer', $user_id), 'sco_id' => array('integer', $il_sco_id), 'lvalue' => array('text', $data['Key']), 'obj_id' => array('integer', $this->getId()))); } else { $ilDB->insert('scorm_tracking', array('obj_id' => array('integer', $this->getId()), 'user_id' => array('integer', $user_id), 'sco_id' => array('integer', $il_sco_id), 'lvalue' => array('text', $data['Key']), 'rvalue' => array('clob', $data['Value']), 'c_timestamp' => array('timestamp', $data['Timestamp']))); } } } fclose($fhandle); include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php'; ilLPStatusWrapper::_refreshStatus($this->getId()); return 0; }
function delete() { global $ilDB, $ilLog; parent::delete(); $statement = $ilDB->manipulateF('DELETE FROM aicc_course WHERE obj_id = %s', array('integer'), array($this->getId())); $statement = $ilDB->manipulateF(' DELETE FROM scorm_tracking WHERE sco_id = %s AND obj_id = %s', array('integer', 'integer'), array($this->getId(), $this->getALMId())); // update learning progress status include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getALMId()); }
public function removeCMIData() { include_once "./Modules/Scorm2004/classes/class.ilSCORM2004DeleteData.php"; ilSCORM2004DeleteData::removeCMIDataForPackage($this->packageId); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->packageId); }
protected final function updateParentCollections() { global $ilDB; include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; // update parent collections? $set = $ilDB->query("SELECT ut_lp_collections.obj_id obj_id FROM " . "object_reference JOIN ut_lp_collections ON " . "(object_reference.obj_id = " . $ilDB->quote($this->obj_id, "integer") . " AND object_reference.ref_id = ut_lp_collections.item_id)"); while ($rec = $ilDB->fetchAssoc($set)) { if (in_array(ilObject::_lookupType($rec["obj_id"]), array("crs", "grp", "fold"))) { // remove from parent collection $query = "DELETE FROM ut_lp_collections" . " WHERE obj_id = " . $ilDB->quote($rec["obj_id"], "integer") . " AND item_id = " . $ilDB->quote($this->obj_id, "integer"); $ilDB->manipulate($query); ilLPStatusWrapper::_refreshStatus($rec["obj_id"]); } } }
/** * Deletes the selected user data for the test object * * Deletes the selected user data for the test object * * @access public */ function confirmDeleteSelectedUserDataObject() { $active_ids = array(); foreach ($_POST["chbUser"] as $active_id) { if ($this->object->getFixedParticipants()) { array_push($active_ids, $this->object->getActiveIdOfUser($active_id)); } else { array_push($active_ids, $active_id); } } $this->object->removeSelectedTestResults($active_ids); // Update lp status include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php'; ilLPStatusWrapper::_refreshStatus($this->object->getId()); ilUtil::sendSuccess($this->lng->txt("tst_selected_user_data_deleted"), true); $this->ctrl->redirect($this, "participants"); }
/** * Delete progress of users and objects * Implemented for */ public function deleteProgress($sid, $ref_ids, $usr_ids, $type_filter, $progress_filter) { $this->initAuth($sid); $this->initIlias(); // Check session if (!$this->__checkSession($sid)) { return $this->__raiseError($this->__getMessage(), $this->__getMessageCode()); } // Check filter if (array_diff((array) $type_filter, self::$DELETE_PROGRESS_FILTER_TYPES)) { return $this->__raiseError('Invalid filter type given', 'Client'); } include_once 'Services/User/classes/class.ilObjUser.php'; if (!in_array(self::USER_FILTER_ALL, $usr_ids) and !ilObjUser::userExists($usr_ids)) { return $this->__raiseError('Invalid user ids given', 'Client'); } $valid_refs = array(); foreach ((array) $ref_ids as $ref_id) { $obj_id = ilObject::_lookupObjId($ref_id); $type = ilObject::_lookupType($obj_id); // All containers if ($GLOBALS['objDefinition']->isContainer($type)) { $all_sub_objs = array(); foreach ($type_filter as $type_filter_item) { $sub_objs = $GLOBALS['tree']->getSubTree($GLOBALS['tree']->getNodeData($ref_id), false, $type_filter_item); $all_sub_objs = array_merge($all_sub_objs, $sub_objs); } foreach ($all_sub_objs as $child_ref) { $child_type = ilObject::_lookupType(ilObject::_lookupObjId($child_ref)); if (!$GLOBALS['ilAccess']->checkAccess('write', '', $child_ref)) { return $this->__raiseError('Permission denied for : ' . $ref_id . ' -> type ' . $type, 'Client'); } $valid_refs[] = $child_ref; } } elseif (in_array($type, $type_filter)) { if (!$GLOBALS['ilAccess']->checkAccess('write', '', $ref_id)) { return $this->__raiseError('Permission denied for : ' . $ref_id . ' -> type ' . $type, 'Client'); } $valid_refs[] = $ref_id; } else { return $this->__raiseError('Invalid object type given for : ' . $ref_id . ' -> type ' . $type, 'Client'); } } // Delete tracking data foreach ($valid_refs as $ref_id) { include_once './classes/class.ilObjectFactory.php'; $obj = ilObjectFactory::getInstanceByRefId($ref_id, false); if (!$obj instanceof ilObject) { return $this->__raiseError('Invalid reference id given : ' . $ref_id . ' -> type ' . $type, 'Client'); } // filter users $valid_users = $this->applyProgressFilter($obj->getId(), (array) $usr_ids, (array) $progress_filter); switch ($obj->getType()) { case 'sahs': include_once './Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php'; $subtype = ilObjSAHSLearningModule::_lookupSubType($obj->getId()); switch ($subtype) { case 'scorm': $this->deleteScormTracking($obj->getId(), (array) $valid_users); break; case 'scorm2004': $this->deleteScorm2004Tracking($obj->getId(), (array) $valid_users); break; } break; case 'tst': foreach ((array) $valid_users as $usr_id) { $obj->removeTestResultsForUser($usr_id); } break; } // Refresh status include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php'; ilLPStatusWrapper::_refreshStatus($obj->getId()); } return true; }
protected function updateTLT() { include_once "Services/MetaData/classes/class.ilMD.php"; foreach ($_POST['tlt'] as $item_id => $item) { $md_obj = new ilMD($this->getObjId(), $item_id, 'st'); if (!is_object($md_section = $md_obj->getEducational())) { $md_section = $md_obj->addEducational(); $md_section->save(); } $md_section->setPhysicalTypicalLearningTime((int) $item['mo'], (int) $item['d'], (int) $item['h'], (int) $item['m'], 0); $md_section->update(); } // refresh learning progress include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getObjId()); ilUtil::sendSuccess($this->lng->txt('settings_saved'), true); $this->ctrl->redirect($this, 'show'); }
function updateCondition() { global $ilObjDataCache; if (!$_GET['condition_id']) { ilUtil::sendFailure("Missing id: condition_id"); $this->listConditions(); return false; } // Update condition include_once './Services/AccessControl/classes/class.ilConditionHandler.php'; $condition_handler = new ilConditionHandler(); $condition = ilConditionHandler::_getCondition((int) $_GET['condition_id']); $condition_handler->setOperator($_POST['operator']); $condition_handler->setObligatory((int) $_POST['obligatory']); $condition_handler->setTargetRefId($this->getTargetRefId()); $condition_handler->setValue(''); switch ($this->getTargetType()) { case 'st': $condition_handler->setReferenceHandlingType($_POST['ref_handling']); break; default: $condition_handler->setReferenceHandlingType(ilConditionHandler::UNIQUE_CONDITIONS); break; } $condition_handler->updateCondition($condition['id']); // Update relevant sco's if ($condition['trigger_type'] == 'sahs') { include_once 'Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance($condition['trigger_obj_id']); $collection = $olp->getCollectionInstance(); if ($collection) { $collection->delete(); } if (is_array($_POST['item_ids'])) { $collection->activateEntries($_POST['item_ids']); } include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($condition['trigger_obj_id']); } ilUtil::sendSuccess($this->lng->txt('settings_saved')); $this->ctrl->redirect($this, 'listConditions'); }
protected function doLPRefresh() { // refresh learning progress include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getObjId()); }
function _deleteAll($course_id) { global $ilDB; // begin-patch lok $ids = ilCourseObjective::_getObjectiveIds($course_id, false); // end-patch lok if (!count($ids)) { return true; } $in = $ilDB->in('objective_id', $ids, false, 'integer'); $query = "DELETE FROM crs_objective_lm WHERE " . $in; $res = $ilDB->manipulate($query); $query = "DELETE FROM crs_objective_tst WHERE " . $in; $res = $ilDB->manipulate($query); $query = "DELETE FROM crs_objective_qst WHERE " . $in; $res = $ilDB->manipulate($query); $query = "DELETE FROM crs_objectives WHERE crs_id = " . $ilDB->quote($course_id, 'integer'); $res = $ilDB->manipulate($query); // refresh learning progress status after deleting objectives include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($course_id); return true; }
/** * Delete objectives * @global type $rbacsystem * @return boolean */ protected function deleteObjectives() { global $rbacsystem; foreach ($_POST['objective_ids'] as $objective_id) { include_once './Modules/Course/classes/class.ilCourseObjective.php'; $objective_obj = new ilCourseObjective($this->getParentObject(), $objective_id); $objective_obj->delete(); } include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php'; ilLPStatusWrapper::_refreshStatus($this->getParentObject()->getId()); ilUtil::sendSuccess($this->lng->txt('crs_objectives_deleted'), true); $this->ctrl->redirect($this, 'listObjectives'); return true; }
function delete() { global $ilDB; $query = "DELETE FROM exc_members WHERE obj_id = " . $ilDB->quote($this->getObjId(), "integer"); $ilDB->manipulate($query); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getObjId()); return true; }
function importSuccess($a_file) { global $ilDB, $ilUser; include_once "./Services/Tracking/classes/class.ilLPStatus.php"; $scos = array(); //get all SCO's of this object ONLY RELEVANT! include_once './Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance($this->getId()); $collection = $olp->getCollectionInstance(); if ($collection) { $scos = $collection->getItems(); } $fhandle = fopen($a_file, "r"); $obj_id = $this->getID(); $users = array(); $fields = fgetcsv($fhandle, 4096, ';'); while (($csv_rows = fgetcsv($fhandle, 4096, ";")) !== FALSE) { $data = array_combine($fields, $csv_rows); //no check the format - sufficient to import users if ($data["Login"]) { $user_id = $this->get_user_id($data["Login"]); } if ($data["login"]) { $user_id = $this->get_user_id($data["login"]); } //add mail in future if ($data["user"] && is_int($data["user"])) { $user_id = $data["user"]; } if ($user_id > 0) { $last_access = ilUtil::now(); if ($data['Date']) { $date_ex = explode('.', $data['Date']); $last_access = implode('-', array($date_ex[2], $date_ex[1], $date_ex[0])); } if ($data['LastAccess']) { $last_access = $data['LastAccess']; } $status = ilLPStatus::LP_STATUS_COMPLETED_NUM; // $users[] = $user_id; if ($data["Status"]) { if (is_int($data["Status"])) { $status = $data["Status"]; } else { if ($data["Status"] == ilLPStatus::LP_STATUS_NOT_ATTEMPTED) { $status = ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM; } else { if ($data["Status"] == ilLPStatus::LP_STATUS_IN_PROGRESS) { $status = ilLPStatus::LP_STATUS_IN_PROGRESS_NUM; } else { if ($data["Status"] == ilLPStatus::LP_STATUS_FAILED) { $status = ilLPStatus::LP_STATUS_FAILED_NUM; } } } } } $attempts = null; if ($data["Attempts"]) { $attempts = $data["Attempts"]; } $percentage_completed = 0; if ($status == ilLPStatus::LP_STATUS_COMPLETED_NUM) { $percentage_completed = 100; } if ($data['percentageCompletedSCOs']) { $percentage_completed = $data['percentageCompletedSCOs']; } $sco_total_time_sec = null; if ($data['SumTotal_timeSeconds']) { $sco_total_time_sec = $data['SumTotal_timeSeconds']; } $this->importSuccessForSahsUser($user_id, $last_access, $status, $attempts, $percentage_completed, $sco_total_time_sec); if ($status == ilLPStatus::LP_STATUS_COMPLETED_NUM) { foreach ($scos as $sco_id) { $res = $ilDB->queryF(' SELECT * FROM cmi_node WHERE cp_node_id = %s AND user_id = %s AND (completion_status = %s OR success_status = %s)', array('integer', 'integer', 'text', 'text'), array($sco_id, $user_id, 'completed', 'passed')); if (!$ilDB->numRows($res)) { $nextId = $ilDB->nextId('cmi_node'); $val_set = $ilDB->manipulateF('INSERT INTO cmi_node (cp_node_id,user_id,completion_status,c_timestamp,cmi_node_id) VALUES(%s,%s,%s,%s,%s)', array('integer', 'integer', 'text', 'timestamp', 'integer'), array($sco_id, $user_id, 'completed', $last_access, $nextId)); } else { $ilDB->update('cmi_node', array('completion_status' => array('text', 'completed'), 'success_status' => array('text', ''), 'c_timestamp' => array('timestamp', $last_access)), array('user_id' => array('integer', $user_id), 'cp_node_id' => array('integer', $sco_id))); } } } } else { //echo "Warning! User $csv_rows[0] does not exist in ILIAS. Data for this user was skipped.\n"; } } // update learning progress include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getId()); return 0; }
function delete() { global $ilDB, $ilLog; parent::delete(); $q_log = "DELETE FROM aicc_units WHERE obj_id =" . $ilDB->quote($this->getId()); $ilLog->write("SAHS Delete(Unit): " . $q_log); $ilDB->manipulateF('DELETE FROM aicc_units WHERE obj_id = %s', array('integer'), array($this->getId())); $ilDB->manipulateF(' DELETE FROM scorm_tracking WHERE sco_id = %s AND obj_id =%s', array('integer', 'integer'), array($this->getId(), $this->getALMId())); // update learning progress status include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getALMId()); }
/** * Save obligatory state per grouped materials */ protected function saveObligatoryMaterials() { if (!is_array((array) $_POST['grp'])) { ilUtil::sendFailure($this->lng->txt('select_one'), true); $this->ctrl->redirect($this, 'show'); } try { include_once './Services/Tracking/classes/class.ilLPCollections.php'; ilLPCollections::saveObligatoryMaterials($this->getObjId(), (array) $_POST['grp']); // refresh learning progress include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_refreshStatus($this->getObjId()); ilUtil::sendSuccess($this->lng->txt('settings_saved'), true); $this->ctrl->redirect($this, 'show'); } catch (UnexpectedValueException $e) { ilUtil::sendFailure($this->lng->txt('trac_grouped_material_obligatory_err'), true); ilUtil::sendInfo($this->lng->txt('err_check_input'), true); $this->ctrl->redirect($this, 'show'); } }