/** * Write status for user and object * * @param * @return bool */ static function writeStatus($a_obj_id, $a_user_id, $a_status, $a_percentage = false, $a_force_per = false) { global $ilDB; $update_collections = false; // get status in DB $set = $ilDB->query("SELECT usr_id,status,status_dirty FROM ut_lp_marks WHERE " . " obj_id = " . $ilDB->quote($a_obj_id, "integer") . " AND " . " usr_id = " . $ilDB->quote($a_user_id, "integer")); $rec = $ilDB->fetchAssoc($set); // update if ($rec) { // status has changed: update if ($rec["status"] != $a_status) { $ret = $ilDB->manipulate("UPDATE ut_lp_marks SET " . " status = " . $ilDB->quote($a_status, "integer") . "," . " status_changed = " . $ilDB->now() . "," . " status_dirty = " . $ilDB->quote(0, "integer") . " WHERE usr_id = " . $ilDB->quote($a_user_id, "integer") . " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")); if ($ret != 0) { $update_collections = true; } } else { if ($rec["status_dirty"]) { $ilDB->manipulate("UPDATE ut_lp_marks SET " . " status_dirty = " . $ilDB->quote(0, "integer") . " WHERE usr_id = " . $ilDB->quote($a_user_id, "integer") . " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")); } } } else { /* $ilDB->manipulate("INSERT INTO ut_lp_marks ". "(status, status_changed, usr_id, obj_id, status_dirty) VALUES (". $ilDB->quote($a_status, "integer").",". $ilDB->now().",". $ilDB->quote($a_user_id, "integer").",". $ilDB->quote($a_obj_id, "integer").",". $ilDB->quote(0, "integer"). ")"); */ // #13783 $ilDB->replace("ut_lp_marks", array("obj_id" => array("integer", $a_obj_id), "usr_id" => array("integer", $a_user_id)), array("status" => array("integer", $a_status), "status_changed" => array("timestamp", date("Y-m-d H:i:s")), "status_dirty" => array("integer", 0))); $update_collections = true; } // update percentage if ($a_percentage !== false || $a_force_per) { $a_percentage = max(0, (int) $a_percentage); $a_percentage = min(100, $a_percentage); $ret = $ilDB->manipulate("UPDATE ut_lp_marks SET " . " percentage = " . $ilDB->quote($a_percentage, "integer") . " WHERE usr_id = " . $ilDB->quote($a_user_id, "integer") . " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")); } // update collections if ($update_collections) { // a change occured - remove existing cache entry include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_removeStatusCache($a_obj_id, $a_user_id); $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($a_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"))) { // just to make sure - remove existing cache entry ilLPStatusWrapper::_removeStatusCache($rec["obj_id"], $a_user_id); ilLPStatusWrapper::_updateStatus($rec["obj_id"], $a_user_id); } } } return $update_collections; }