/** * Write skill level status * * @param int skill level id * @param int user id * @param int status */ static function writeUserSkillLevelStatus($a_level_id, $a_user_id, $a_trigger_ref_id, $a_tref_id = 0, $a_status = ilBasicSkill::ACHIEVED, $a_force = false, $a_self_eval = 0) { global $ilDB; $skill_id = ilBasicSkill::lookupLevelSkillId($a_level_id); $trigger_ref_id = $a_trigger_ref_id; $trigger_obj_id = ilObject::_lookupObjId($trigger_ref_id); $trigger_title = ilObject::_lookupTitle($trigger_obj_id); $trigger_type = ilObject::_lookupType($trigger_obj_id); $update = false; // check whether current skill user level is identical // to the one that should be set (-> no change required) /* $ilDB->setLimit(1); $set = $ilDB->query("SELECT status, valid FROM skl_user_skill_level WHERE ". "level_id = ".$ilDB->quote($a_level_id, "integer")." AND ". "user_id = ".$ilDB->quote($a_user_id, "integer")." AND ". "tref_id = ".$ilDB->quote((int) $a_tref_id, "integer")." AND ". "trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer")." AND ". "self_eval = ".$ilDB->quote($a_self_eval, "integer"). " ORDER BY status_date DESC" ); $rec = $ilDB->fetchAssoc($set); if (!$rec["valid"] || $rec["status"] != $a_status) { $save = true; }*/ if ($a_self_eval) { $ilDB->setLimit(1); $set = $ilDB->query("SELECT * FROM skl_user_skill_level WHERE " . "skill_id = " . $ilDB->quote($skill_id, "integer") . " AND " . "user_id = " . $ilDB->quote($a_user_id, "integer") . " AND " . "tref_id = " . $ilDB->quote((int) $a_tref_id, "integer") . " AND " . "trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer") . " AND " . "self_eval = " . $ilDB->quote($a_self_eval, "integer") . " ORDER BY status_date DESC"); $rec = $ilDB->fetchAssoc($set); $status_day = substr($rec["status_date"], 0, 10); $today = substr(ilUtil::now(), 0, 10); if ($rec["valid"] && $rec["status"] == $a_status && $status_day == $today) { $update = true; } } if ($update) { $now = ilUtil::now(); $ilDB->manipulate("UPDATE skl_user_skill_level SET " . " level_id = " . $ilDB->quote($a_level_id, "integer") . "," . " status_date = " . $ilDB->quote($now, "timestamp") . " WHERE user_id = " . $ilDB->quote($a_user_id, "integer") . " AND status_date = " . $ilDB->quote($rec["status_date"], "timestamp") . " AND skill_id = " . $ilDB->quote($rec["skill_id"], "integer") . " AND status = " . $ilDB->quote($a_status, "integer") . " AND trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer") . " AND tref_id = " . $ilDB->quote((int) $a_tref_id, "integer") . " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")); } else { $now = ilUtil::now(); $ilDB->manipulate("INSERT INTO skl_user_skill_level " . "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id," . "trigger_obj_id, trigger_obj_type, trigger_title, self_eval) VALUES (" . $ilDB->quote($a_level_id, "integer") . "," . $ilDB->quote($a_user_id, "integer") . "," . $ilDB->quote((int) $a_tref_id, "integer") . "," . $ilDB->quote($now, "timestamp") . "," . $ilDB->quote($skill_id, "integer") . "," . $ilDB->quote($a_status, "integer") . "," . $ilDB->quote(1, "integer") . "," . $ilDB->quote($trigger_ref_id, "integer") . "," . $ilDB->quote($trigger_obj_id, "integer") . "," . $ilDB->quote($trigger_type, "text") . "," . $ilDB->quote($trigger_title, "text") . "," . $ilDB->quote($a_self_eval, "integer") . ")"); } // fix (removed level_id and added skill id, since table should hold only // one entry per skill) $ilDB->manipulate("DELETE FROM skl_user_has_level WHERE " . " user_id = " . $ilDB->quote($a_user_id, "integer") . " AND skill_id = " . $ilDB->quote($skill_id, "integer") . " AND tref_id = " . $ilDB->quote((int) $a_tref_id, "integer") . " AND trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer") . " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")); if ($a_status == ilBasicSkill::ACHIEVED) { $ilDB->manipulate("INSERT INTO skl_user_has_level " . "(level_id, user_id, tref_id, status_date, skill_id, trigger_ref_id, trigger_obj_id, trigger_obj_type, trigger_title, self_eval) VALUES (" . $ilDB->quote($a_level_id, "integer") . "," . $ilDB->quote($a_user_id, "integer") . "," . $ilDB->quote($a_tref_id, "integer") . "," . $ilDB->quote($now, "timestamp") . "," . $ilDB->quote($skill_id, "integer") . "," . $ilDB->quote($trigger_ref_id, "integer") . "," . $ilDB->quote($trigger_obj_id, "integer") . "," . $ilDB->quote($trigger_type, "text") . "," . $ilDB->quote($trigger_title, "text") . "," . $ilDB->quote($a_self_eval, "integer") . ")"); } }
/** * Write skill level status * * @param int skill level id * @param int user id * @param int status */ static function writeUserSkillLevelStatus($a_level_id, $a_user_id, $a_status = ilBasicSkill::ACHIEVED, $a_force = false) { global $ilDB; $skill_id = ilBasicSkill::lookupLevelSkillId($a_level_id); $trigger = ilBasicSkill::lookupLevelTrigger($a_level_id); $trigger_ref_id = $trigger["ref_id"]; $trigger_obj_id = $trigger["obj_id"]; $trigger_title = ilObject::_lookupTitle($trigger["obj_id"]); $save = false; if ($a_force) { $save = true; } else { // check whether current skill user level is identical // to the one that should be set (-> no change required) $ilDB->setLimit(1); $set = $ilDB->query("SELECT status, valid FROM skl_user_skill_level WHERE " . "level_id = " . $ilDB->quote($a_level_id, "integer") . " AND " . "user_id = " . $ilDB->quote($a_user_id, "integer") . " ORDER BY status_date DESC"); $rec = $ilDB->fetchAssoc($set); if (!$rec["valid"] || $rec["status"] != $a_status) { $save = true; } } if ($save) { $now = ilUtil::now(); $ilDB->manipulate("INSERT INTO skl_user_skill_level " . "(level_id, user_id, status_date, skill_id, status, valid, trigger_ref_id," . "trigger_obj_id, trigger_title) VALUES (" . $ilDB->quote($a_level_id, "integer") . "," . $ilDB->quote($a_user_id, "integer") . "," . $ilDB->quote($now, "timestamp") . "," . $ilDB->quote($skill_id, "integer") . "," . $ilDB->quote($a_status, "integer") . "," . $ilDB->quote(1, "integer") . "," . $ilDB->quote($trigger_ref_id, "integer") . "," . $ilDB->quote($trigger_obj_id, "integer") . "," . $ilDB->quote($trigger_title, "text") . ")"); $ilDB->manipulate("DELETE FROM skl_user_has_level WHERE " . " user_id = " . $ilDB->quote($a_user_id, "integer") . " AND level_id = " . $ilDB->quote($a_level_id, "integer")); if ($a_status == ilBasicSkill::ACHIEVED) { $ilDB->manipulate("INSERT INTO skl_user_has_level " . "(level_id, user_id, status_date, skill_id, trigger_ref_id, trigger_obj_id, trigger_title) VALUES (" . $ilDB->quote($a_level_id, "integer") . "," . $ilDB->quote($a_user_id, "integer") . "," . $ilDB->quote($now, "timestamp") . "," . $ilDB->quote($skill_id, "integer") . "," . $ilDB->quote($trigger_ref_id, "integer") . "," . $ilDB->quote($trigger_obj_id, "integer") . "," . $ilDB->quote($trigger_title, "text") . ")"); } } }