public function insDatePresence($id_course, $id_date, $user, $day, $score_min = 0) { $clear = $this->clearDatePresence($id_date); if ($clear) { require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.stats.php'; //require_once($GLOBALS['where_lms'].'/lib/lib.competences.php'); //$cman = new Competences_Manager(); $cmodel = new CompetencesAdm(); $first = true; $test_type = $this->getTestType($id_date); $query = "INSERT INTO " . $this->presence_date_table . " (`day`, `id_date`, `id_user`, `id_day`, `presence`, `score`, `note`)" . " VALUES"; foreach ($user as $id_user => $user_info) { $num_day = 0; $num_day_finished = 0; foreach ($user_info['day_presence'] as $id_day => $presence) { $day_tmp = substr($day[$id_day]['date_begin'], 0, 10); $num_day++; if ($presence == 1) { $num_day_finished++; } if ($first) { $first = false; $query .= " ('" . $day_tmp . "', " . $id_date . ", " . $id_user . ", " . $id_day . ", " . $presence . ", NULL, NULL)"; } else { $query .= ", ('" . $day_tmp . "', " . $id_date . ", " . $id_user . ", " . $id_day . ", " . $presence . ", NULL, NULL)"; } } if ($test_type == _DATE_TEST_TYPE_PAPER) { $num_day++; if ($user_info['score'] >= $score_min) { $num_day_finished++; } if ($first) { $first = false; $query .= " ('0000-00-00', " . $id_date . ", " . $id_user . ", 0, " . ($user_info['score'] >= $score_min ? 1 : 0) . ", '" . $user_info['score'] . "', '" . $user_info['note'] . "')"; } else { $query .= ", ('0000-00-00', " . $id_date . ", " . $id_user . ", 0, " . ($user_info['score'] >= $score_min ? 1 : 0) . ", '" . $user_info['score'] . "', '" . $user_info['note'] . "')"; } } else { if ($first) { $first = false; $query .= " ('0000-00-00', " . $id_date . ", " . $id_user . ", 0, 0, NULL, '" . $user_info['note'] . "')"; } else { $query .= ", ('0000-00-00', " . $id_date . ", " . $id_user . ", 0, 0, NULL, '" . $user_info['note'] . "')"; } } if ($num_day == $num_day_finished && ($test_type == _DATE_TEST_TYPE_NONE || $test_type == _DATE_TEST_TYPE_PAPER)) { saveTrackStatusChange($id_user, $id_course, _CUS_END); //$cman->AssignCourseCompetencesToUser($id_course, $id_user); $cmodel->assignCourseCompetencesToUser($id_course, $id_user); $this->setDateFinished($id_date, $id_user); } elseif ($test_type == _DATE_TEST_TYPE_NONE || $test_type == _DATE_TEST_TYPE_PAPER) { $query_itinere = "UPDATE " . $this->courseuser_table . " SET `status` = " . _CUS_BEGIN . "," . " date_complete = NULL" . " WHERE idUser = "******" AND idCourse = " . $id_course; sql_query($query_itinere); //TODO: funzione per togliere la competenza ad un utente se gli era stata precedentemente assegnata (forse) } } return sql_query($query); } return false; }
public function updateUserStatusInCourse($id_user, $id_course, $new_status) { $query = "UPDATE " . $this->subscribe_table . " SET status = " . (int) $new_status . ", waiting = " . ($new_status < 0 ? "1" : "0") . " " . ($new_status == _CUS_END ? ", date_complete = NOW() " : '') . " WHERE idCourse = " . $id_course . " AND idUser "; if (is_array($id_user)) { $query .= " IN (" . implode(',', $id_user) . ")"; } else { $query .= " = " . (int) $id_user; } if ($this->db->query($query)) { if ($new_status == _CUS_END) { //require_once($GLOBALS['where_lms'].'/lib/lib.competences.php'); //$cman = new Competences_Manager(); $cmodel = new CompetencesAdm(); $list = is_array($id_user) ? $id_user : array((int) $id_user); foreach ($list as $idst_user) { $res1 = $cmodel->assignCourseCompetencesToUser($id_course, $id_user); //$cman->AssignCourseCompetencesToUser($id_course, $id_user); $res2 = $this->saveTrackStatusChange($id_user, $id_course, $new_status); //TO DO: check if all users are been tracked and had competences assigned } return true; //this should be in dependance with above results } else { //no 'completed' status --> just return with "ok" return true; } } else { //query error return false; } }
/** * Save notification of user status in a course * @param int $idUser id of the user * @param int $idCourse id of the course * @param int $status new status **/ function saveTrackStatusChange($idUser, $idCourse, $status) { require_once _lms_ . '/lib/lib.course.php'; list($prev_status) = sql_fetch_row(sql_query("\r\n\t\tSELECT status\r\n\t\tFROM %lms_courseuser\r\n\t\tWHERE idUser = '******' AND idCourse = '" . (int) $idCourse . "'")); $extra = ''; if ($prev_status != $status) { switch ($status) { case _CUS_SUBSCRIBED: //approved subscriptin for example $extra = ", date_inscr = NOW()"; break; case _CUS_BEGIN: //first access UpdatesLms::resetCache(); $extra = ", date_first_access = NOW()"; break; case _CUS_END: //end course $extra = ", date_complete = NOW()"; break; } } if (!sql_query("\r\n\tUPDATE %lms_courseuser\r\n\tSET status = '" . (int) $status . "' " . $extra . "\r\n\tWHERE idUser = '******' AND idCourse = '" . (int) $idCourse . "'")) { return false; } $re = sql_query("\r\n\tSELECT when_do \r\n\tFROM %lms_statuschangelog\r\n\tWHERE status_user = '******' AND \r\n\t\tidUser = '******' AND \r\n\t\tidCourse = '" . (int) $idCourse . "'"); if (sql_num_rows($re)) { sql_query("\r\n\t\t\tUPDATE %lms_statuschangelog\r\n\t\t\tSET when_do = NOW()\r\n\t\t\tWHERE status_user = '******' AND\r\n\t\t\t\tidUser = '******' AND\r\n\t\t\t\tidCourse = '" . (int) $idCourse . "'"); } else { sql_query("\r\n\t\t\tINSERT INTO %lms_statuschangelog\r\n\t\t\tSET status_user = '******',\r\n\t\t\t\tidUser = '******',\r\n\t\t\t\tidCourse = '" . (int) $idCourse . "',\r\n\t\t\t\twhen_do = NOW()"); } if ($prev_status != $status && $status == _CUS_END) { // send alert require_once _lms_ . '/lib/lib.course.php'; require_once _base_ . '/lib/lib.eventmanager.php'; $cd = new DoceboCourse($idCourse); $acl_man =& Docebo::user()->getAclManager(); $teachers = Man_Course::getIdUserOfLevel($idCourse, '6'); $array_subst = array('[user]' => $acl_man->getUserName($idUser), '[course]' => $cd->getValue('name')); $msg_composer = new EventMessageComposer(); $msg_composer->setSubjectLangText('email', '_USER_END_COURSE_SBJ', false); $msg_composer->setBodyLangText('email', '_USER_END_COURSE_TEXT', $array_subst); $msg_composer->setBodyLangText('sms', '_USER_END_COURSE_TEXT_SMS', $array_subst); // send message to the user subscribed createNewAlert('UserCourseEnded', 'status', 'modify', '1', 'User end course', $teachers, $msg_composer); //add course's competences scores to user $cmodel = new CompetencesAdm(); $cmodel->assignCourseCompetencesToUser($idCourse, $idUser); //increment coursecompleted if this course is in a coursepath require_once _lms_ . '/lib/lib.coursepath.php'; $cpmodel = new CoursePath_Manager(); $cpmodel->assignComplete($idCourse, $idUser); } return true; }