function mycompetences(&$url) { checkPerm('view'); $html = ""; $html .= getTitleArea(Lang::t('_COMPETENCES'), 'competences'); $html .= '<div class="std_block">'; $cmodel = new CompetencesAdm(); $fmodel = new FunctionalrolesAdm(); $id_user = getLogUserId(); $ucomps = $cmodel->getUserCompetences($id_user); $rcomps = $fmodel->getUserRequiredCompetences($id_user); $ucomps_info = $cmodel->getCompetencesInfo(array_keys($ucomps)); $language = getLanguage(); $_typologies = $cmodel->getCompetenceTypologies(); $_types = $cmodel->getCompetenceTypes(); $icon_actv = '<span class="ico-sprite subs_actv"><span>' . Lang::t('_COMPETENCE_OBTAINED', 'competences') . '</span></span>'; $icon_req = '<span class="ico-sprite subs_actv"><span>' . Lang::t('_MANDATORY', 'competences') . '</span></span>'; //******************* require_once _base_ . '/lib/lib.table.php'; $table = new Table(Get::sett('visuItem'), Lang::t('_COMPETENCES'), Lang::t('_COMPETENCES')); $style_h = array('', '', 'image', 'image', 'image', 'image', 'image'); $label_h = array(Lang::t('_NAME', 'competences'), Lang::t('_TYPOLOGY', 'competences'), Lang::t('_TYPE', 'standard'), Lang::t('_SCORE', 'competences'), Lang::t('_DATE_LAST_COMPLETE', 'subscribe'), Lang::t('_COMPETENCES_REQUIRED', 'competences')); $table->addHead($label_h, $style_h); foreach ($ucomps_info as $id_competence => $cinfo) { $line = array(); $line[] = $cinfo->langs[$language]['name']; $line[] = $_typologies[$cinfo->typology]; $line[] = $_types[$cinfo->type]; $line[] = $cinfo->type == 'score' ? '<b>' . $ucomps[$id_competence]->score_got . '</b>' : $icon_actv; $line[] = Format::date($ucomps[$id_competence]->last_assign_date, 'datetime'); $line[] = array_key_exists($id_competence, $rcomps) ? $icon_req : ''; $table->addBody($line); } $html .= $table->getTable(); $html .= '</div>'; $html .= Form::openForm('beck_url', 'index.php'); $html .= Form::openButtonSpace(); $html .= Form::getButton('close', 'close', Lang::t('_CLOSE', 'standard')); $html .= Form::closeButtonSpace(); $html .= Form::closeform(); cout($html, 'content'); }
public function setRulesFromScore($score_arr) { require_once _base_ . '/lib/lib.json.php'; require_once _lms_ . '/lib/lib.subscribe.php'; $res = true; $where_score_arr = array(); foreach ($score_arr as $val) { $where_score_arr[] = "(category_id = '" . (int) $val['category_id'] . "' " . "AND from_score <= '" . (int) $val['score'] . "' AND to_score >= '" . (int) $val['score'] . "')"; } if (empty($where_score_arr)) { return ''; } $fields = "*"; $qtxt = "SELECT " . $fields . " FROM %lms_assessment_rule\r\n\t\t\tWHERE test_id='" . $this->test_id . "'\r\n\t\t\tAND (" . implode(' OR ', $where_score_arr) . ")\r\n\t\t\tORDER BY from_score ASC"; $q = $this->db->query($qtxt); $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE); $csm = new CourseSubscribe_Management(); $cmpman = new CompetencesAdm(); $feedback_txt = array(); while ($row = $this->db->fetch_assoc($q)) { $course_arr = $json->decode($row['courses_list']); $competence_arr = $json->decode($row['competences_list']); $feedback_txt[] = $row['feedback_txt']; //courses subscriptions - only students are affected if (!empty($course_arr) && $_SESSION['levelCourse'] <= 3) { $arr_courses = array_keys($course_arr); $csm->multipleUserSubscribe(getLogUserId(), $arr_courses, 3); } //competences assignment - only students are affected if (!empty($competence_arr) && $_SESSION['levelCourse'] <= 3) { foreach ($competence_arr as $c_id => $data) { if ($data['type'] == 'score') { $score = isset($data['score']) ? $data['score'] : 0; if ($score > 0) { if (!$cmpman->userHasCompetence($c_id, Docebo::user()->getIdst())) { $cmpman->assignCompetenceUsers($c_id, array(Docebo::user()->getIdst() => $score)); } else { $cmpman->addScoreToUsers($c_id, array(Docebo::user()->getIdst()), $score); } } } else { if (!$cmpman->userHasCompetence($c_id, Docebo::user()->getIdst())) { $cmpman->assignCompetenceUsers($c_id, array(Docebo::user()->getIdst() => 1)); } } } } } $output = ""; if (!empty($feedback_txt)) { $output = implode('<br/><br />', $feedback_txt); } return $output; }
* - $title = dialog/page title; * - $json = Serci */ echo getTitleArea($title); ?> <div class="std_block"> <?php echo getBackUi('index.php?r=adm/functionalroles/show', Lang::t('_BACK', 'standard')); $html = ""; require_once _base_ . '/lib/lib.table.php'; $table = new Table(); $label_h = array(Lang::t('_NAME', 'competences'), Lang::t('_TYPE', 'standard'), Lang::t('_REQUIRED_SCORE', 'fncroles'), Lang::t('_EXPIRATION_DAYS', 'fncroles'), Lang::t('_COURSE', 'course'), Lang::t('_SCORE', 'fncroles')); $style_h = array('', 'img-cell', 'img-cell', 'img-cell', '', 'img-cell'); $table->addHead($label_h, $style_h); $language = getLanguage(); $cmodel = new CompetencesAdm(); $_types = $cmodel->getCompetenceTypes(); $_typologies = $cmodel->getCompetenceTypologies(); $rs_counter = 1; foreach ($competences_info as $id_competence => $cinfo) { $courses = isset($courses_info[$id_competence]) ? $courses_info[$id_competence] : array(); $cinfo_content_1 = $cinfo->langs[$language]['name']; $cinfo_content_2 = $_types[$cinfo->type]; $cinfo_content_3 = $cinfo->type == 'score' ? $cinfo->role_score : '-'; $cinfo_content_4 = $cinfo->role_expiration > 0 ? $cinfo->role_expiration . ' ' . Lang::t('_DAYS', 'standard') : Lang::t('_NEVER', 'standard'); $num_courses = count($courses); if ($num_courses > 0) { $first = true; foreach ($courses as $course) { $line = array(); if ($first) {
function getUserCompetences($id_user) { $cmodel = new CompetencesAdm(); $scores = $cmodel->getUserCompetences($id_user, true); if (is_array($scores)) { $info = $cmodel->getCompetencesInfo(array_keys($scores)); } else { $info = array(); } $output = array(); $lang_code = getLanguage(); foreach ($info as $id_competence => $cdata) { $obj = new stdClass(); $obj->id_competence = $id_competence; $obj->name = $cdata->langs[$lang_code]['name']; $obj->id_category = $cdata->id_category; $obj->typology = $cdata->typology; $obj->type = $cdata->type; $obj->score = $scores[$id_competence]->score_got; $obj->required = property_exists($scores[$id_competence], 'required') && $scores[$id_competence]->required ? true : false; $obj->gap = property_exists($scores[$id_competence], 'gap') ? (int) $scores[$id_competence]->gap : false; $output[$id_competence] = $obj; } return $output; }
function _get_competences_query($type = 'html', $report_data = NULL, $other = '') { $cmodel = new CompetencesAdm(); if ($report_data == NULL) { $ref =& $_SESSION['report_tempdata']; } else { $ref =& $report_data; } $rc_filters =& $ref['columns_filter']['filters_list']; $rc_exclusive = $ref['columns_filter']['exclusive']; //die('<pre>'.print_r($rc_filters, true).'</pre>'); $final_arr = array(); $all_users = $ref['rows_filter']['all_users']; $users_selection = $ref['rows_filter']['users']; //check admin permissions if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) { require_once _base_ . '/lib/lib.preference.php'; $adminManager = new AdminPreference(); $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST()); $admin_users = Docebo::aclm()->getAllUsersFromIdst($admin_tree); $all_users = false; $users_selection = array_intersect($users_selection, $admin_users); unset($admin_users); //free some memory } if (!$all_users && empty($users_selection)) { cout(Lang::t('_EMPTY_SELECTION', 'report'), 'content'); return; } if (!$all_users) { $user_query_select = " AND t4.idst IN (" . implode(',', $users_selection) . ")"; } else { $user_query_select = ""; } //process filter and build query $table1 = "%lms_competence"; $table2 = "%lms_competence_lang"; $table3 = "%lms_competence_user"; $table4 = "%adm_user"; //extract all competneces for all selected users and store the data $arr_data = array(); $arr_userids = array(); $arr_competences = array(); $language = getLanguage(); $acl_man = Docebo::user()->getACLManager(); $query = "SELECT t1.id_competence, t2.name, t3.id_user, t4.userid, t3.score_got " . " FROM (" . $table1 . " as t1 LEFT JOIN " . $table2 . " as t2 ON (t1.id_competence = t2.id_competence " . " AND t2.lang_code='" . $language . "')) JOIN " . $table3 . " as t3 ON (t1.id_competence = t3.id_competence) " . " JOIN " . $table4 . " as t4 ON (t3.id_user = t4.idst AND t4.valid=1 " . $user_query_select . " ) " . " ORDER BY t4.userid"; $res = sql_query($query); while ($obj = sql_fetch_object($res)) { $arr_data[$obj->id_user][$obj->id_competence] = $obj->score_got; if (!in_array($obj->id_competence, $arr_competences)) { $arr_competences[] = $obj->id_competence; } $arr_userids[$obj->id_user] = $acl_man->relativeId($obj->userid); } if (count($arr_competences) <= 0) { cout(Lang::t('_NO_CONTENT', 'report'), 'content'); return; } $cinfo = $cmodel->getCompetencesInfo($arr_competences); $ucount = 0; $signs = array('0' => '<', '1' => '<=', '2' => '=', '3' => '>=', '4' => '>'); $conds = array(); $icon_actv = '<span class="ico-sprite subs_actv"><span>' . Lang::t('_COMPETENCE_OBTAINED', 'competences') . '</span></span>'; $icon_email = $this->_loadEmailIcon(); //prepare buffer object require_once _lms_ . '/admin/modules/report/report_tableprinter.php'; $buffer = new ReportTablePrinter($type, true); $buffer->openTable(Lang::t('_RC_CAPTION', 'report'), Lang::t('RC_CAPTION', 'report')); $buffer->openHeader(); //set header $_head = array(Lang::t('_USER', 'standard')); foreach ($arr_competences as $cid) { $_head[] = array('style' => 'img-cell', 'value' => $cinfo[$cid]->langs[$language]['name']); } if ($this->use_mail) { $_head[] = array('style' => 'img-cell', 'value' => $icon_email); } //render header $buffer->addHeader($_head); $buffer->closeHeader(); $buffer->openBody(); //die('<pre>'.print_r($rc_filters, true).'</pre>'); //check all data row and print them while (list($id_user, $ucomps) = each($arr_data)) { $is_valid = true; $satisfied = 0; $num_conditions = 0; foreach ($rc_filters as $id_competence => $filter) { if (isset($filter['flag'])) { //we are checking a competence of type 'flag' --> just check if the score exists and is > 0 $num_conditions++; if ($filter['flag'] == 'yes') { //check conditions if (array_key_exists($id_competence, $ucomps) && $ucomps[$id_competence] > 0) { $satisfied++; } } else { if (!array_key_exists($id_competence, $ucomps) || $ucomps[$id_competence] <= 0) { $satisfied++; } } } else { foreach ($filter as $fvalue) { $num_conditions++; $_sign = $fvalue['sign']; $_value = $fvalue['value']; if (array_key_exists($id_competence, $ucomps) && $ucomps[$id_competence] > 0) { //condition ok $condition = false; switch ($_sign) { case 0: $condition = $ucomps[$id_competence] < $_value; break; case 1: $condition = $ucomps[$id_competence] <= $_value; break; case 2: $condition = $ucomps[$id_competence] == $_value; break; case 3: $condition = $ucomps[$id_competence] >= $_value; break; case 4: $condition = $ucomps[$id_competence] > $_value; break; } if ($condition) { $satisfied++; } } } } } $is_valid = true; if ($num_conditions > 0) { $is_valid = false; if ($rc_exclusive && $satisfied >= $num_conditions) { $is_valid = true; } if (!$rc_exclusive && $satisfied > 0) { $is_valid = true; } } if ($is_valid) { //update lines counter $ucount++; //set line values $line = array($arr_userids[$id_user]); foreach ($arr_competences as $id_competence) { $line[] = array('style' => 'img-cell', 'value' => array_key_exists($id_competence, $ucomps) && $ucomps[$id_competence] > 0 ? $cinfo[$id_competence]->type == 'score' ? '<b>' . $ucomps[$id_competence] . '</b>' : $icon_actv : ''); } if ($this->use_mail) { $line[] = array('style' => 'img-cell', 'value' => '<div class="align_center">' . Form::getInputCheckbox('mail_' . $id_user, 'mail_recipients[]', $id_user, isset($_POST['select_all']), '') . '</div>'); } //render line $buffer->addLine($line); } } //check if we have rendered any row if ($ucount <= 0) { cout(Lang::t('_NO_CONTENT', 'report'), 'content'); return; } //close table $buffer->closeBody(); $buffer->closeTable(); //***************** cout($buffer->get()); if ($this->use_mail) { $this->_loadEmailActions(); } }
public function show_coursesTask() { $id_fncrole = Get::req('id', DOTY_INT, -1); if ($id_fncrole <= 0) { $this->render('invalid', array('message' => Lang::t('_INVALID_FNCROLE', 'fncroles'), 'back_url' => $back_url)); return; } $cmodel = new CompetencesAdm(); $competences = $this->model->getCompetences($id_fncrole); $properties = $this->model->getCompetencesProperties($competences, $id_fncrole); $competences_info = $cmodel->getCompetencesInfo($competences); while (list($key, $value) = each($competences_info)) { $value->role_score = isset($properties[$key]) ? $properties[$key]->score : 0; $value->role_expiration = isset($properties[$key]) ? $properties[$key]->expiration : 0; } $courses_info = $this->model->getCompetencesCoursesInfo($id_fncrole); $title_arr = array('index.php?r=adm/functionalroles/show' => Lang::t('_FUNCTIONAL_ROLE', 'fncroles'), Lang::t('_COURSES_FOR_COMPETENCES', 'course') . ': ' . $this->model->getFunctionalRoleName($id_fncrole)); $this->render('competences_courses', array('title' => $title_arr, 'language' => getLanguage(), 'competences_info' => $competences_info, 'courses_info' => $courses_info, 'json' => $this->json)); }
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; } }
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 delCourse($id_course) { if ((int) $id_course <= 0) { return false; } require_once _lms_ . '/lib/lib.course.php'; require_once _base_ . '/lib/lib.upload.php'; $course_man = new Man_Course(); //remove course subscribed------------------------------------------ $levels =& $course_man->getCourseIdstGroupLevel($id_course); foreach ($levels as $lv => $idst) { Docebo::aclm()->deleteGroup($idst); } $alluser = getIDGroupAlluser($id_course); Docebo::aclm()->deleteGroup($alluser); $course_man->removeCourseRole($id_course); $course_man->removeCourseMenu($id_course); $query = "DELETE FROM %lms_courseuser WHERE idCourse = '" . (int) $id_course . "'"; $qres = sql_query($query); if (!$qres) { return false; } //--- remove course data --------------------------------------------------- $query_course = "SELECT imgSponsor, img_course, img_material, img_othermaterial, course_demo, course_type, has_editions\n\t\t\tFROM %lms_course\n\t\t\tWHERE idCourse = '" . (int) $id_course . "'"; $qres = sql_query($query_course); list($file_sponsor, $file_logo, $file_material, $file_othermaterial, $file_demo, $course_type, $course_edition) = sql_fetch_row($qres); require_once _base_ . '/lib/lib.upload.php'; $path = '/appLms/' . Get::sett('pathcourse'); if (substr($path, -1) != '/' && substr($path, -1) != '\\') { $path .= '/'; } sl_open_fileoperations(); if ($file_sponsor != '') { sl_unlink($path . $file_sponsor); } if ($file_logo != '') { sl_unlink($path . $file_logo); } if ($file_material != '') { sl_unlink($path . $file_material); } if ($file_othermaterial != '') { sl_unlink($path . $file_othermaterial); } if ($file_demo != '') { sl_unlink($path . $file_demo); } sl_close_fileoperations(); //if the scs exist delete course rooms if ($GLOBALS['where_scs'] !== false) { require_once _scs_ . '/lib/lib.room.php'; $re = deleteRoom(false, 'course', $id_course); } //--- delete classroom or editions ----------------------------------------- if ($course_type == 'classroom') { require_once _lms_ . '/admin/model/ClassroomAlms.php'; $classroom_model = new ClassroomAlms($id_course); $classroom = $classroom_model->classroom_man->getDateIdForCourse($id_course); foreach ($classroom as $id_date) { if (!$classroom_model->classroom_man->delDate($id_date)) { return false; } } } elseif ($course_edition == 1) { require_once _lms_ . '/admin/model/EditionAlms.php'; $edition_model = new EditionAlms($id_course); $editions = $edition_model->classroom_man->getEditionIdFromCourse($id_course); foreach ($editions as $id_edition) { if (!$edition_model->edition_man->delEdition($id_edition)) { return false; } } } //--- end classrooms or editions ------------------------------------------- //--- clear LOs ------------------------------------------------------------ require_once _lms_ . '/lib/lib.module.php'; require_once _lms_ . '/lib/lib.param.php'; require_once _lms_ . '/class.module/track.object.php'; $arr_lo_param = array(); $arr_lo_track = array(); $arr_org_access = array(); $query = "SELECT * FROM %lms_organization WHERE idCourse = " . (int) $id_course; $ores = sql_query($query); while ($obj = sql_fetch_object($ores)) { $deleted = true; if ($obj->idResource != 0 && $obj->objectType != "") { $lo = createLO($obj->objectType); $deleted = $lo->del($obj->idResource); //delete learning object } if ($deleted) { $arr_lo_track[] = $obj->idOrg; $arr_org_access[] = $obj->idOrg; //collect org access ids $arr_lo_param[] = $obj->idParam; //collect idParams ids } } //delete all organizations references for the course $query = "DELETE FROM %lms_organization WHERE idCourse = " . (int) $id_course; $res = sql_query($query); //delete LOs trackings if (!empty($arr_lo_track)) { $track_object = new Track_Object(false, 'course_lo'); $track_object->delIdTrackFromCommon($arr_lo_track); } //delete org accesses if (!empty($arr_org_access)) { $query = "DELETE FROM %lms_organization_access\n\t\t\t\tWHERE idOrgAccess IN (" . implode(",", $arr_org_access) . ")"; $res = sql_query($query); } //delete lo params if (!empty($arr_lo_param)) { $query = "DELETE FROM %lms_lo_param\n\t\t\t\tWHERE idParam IN (" . implode(",", $arr_lo_param) . ")"; } //--- end LOs -------------------------------------------------------------- //--- clear coursepath references ------------------------------------------ require_once _lms_ . '/lib/lib.coursepath.php'; $cman = new CoursePath_Manager(); $cman->deleteCourseFromCoursePaths($id_course); //--- end coursepath references -------------------------------------------- //--- clear certificates assignments --------------------------------------- require_once _lms_ . '/lib/lib.certificate.php'; $cman = new Certificate(); $cman->deleteCourseCertificateAssignments($id_course); //--- end certificates assignments ----------------------------------------- //--- clear labels --------------------------------------------------------- $lmodel = new LabelAlms(); $lmodel->clearCourseLabel($id_course); //--- end labels ----------------------------------------------------------- //--- clear advices -------------------------------------------------------- require_once _lms_ . '/lib/lib.advice.php'; $aman = new Man_Advice(); $aman->deleteAllCourseAdvices($id_course); //--- end advices ---------------------------------------------------------- //--- clear coursereports -------------------------------------------------- require_once _lms_ . '/lib/lib.coursereport.php'; $cman = new CourseReportManager(); $cman->deleteAllReports($id_course); //--- end coursereports ---------------------------------------------------- //--- clear competences ---------------------------------------------------- $cmodel = new CompetencesAdm(); $cmodel->deleteAllCourseCompetences($id_course); //--- end competences ------------------------------------------------------ //--- finally delete course from courses table ----------------------------- if (!sql_query("DELETE FROM %lms_course WHERE idCourse = '" . $id_course . "'")) { return false; } return true; }
/** * 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; }
public function getUserFunctionalRoles($id_user, $keys = false) { if ($id_user <= 0) { return false; } $output = array(); $cmodel = new CompetencesAdm(); //extract roles $roles = $this->getAllFunctionalRoles(true); $language = getLanguage(); //for each role: foreach ($roles as $id_fncrole => $rdata) { //check if the user has been assigned to this role $all = $this->getAllUsers($id_fncrole); if (in_array($id_user, $all)) { $obj = new stdClass(); $obj->name = $rdata->langs[$language]['name']; //extract role's required comeptences and users actual competences $f_competences = $this->getCompetences($id_fncrole); $u_competences = $cmodel->getUserCompetences($id_user); $f_cinfo = $this->getCompetencesProperties($f_competences, $id_fncrole); //compare them $obtained = 0; foreach ($f_cinfo as $id_competence => $properties) { if (array_key_exists($id_competence, $u_competences)) { //if the score obtained by the user for a given competences is more or equal //than the score required by the role, then consider th e competence obtained //and increment the counter $obtained += $u_competences[$id_competence]->score_got >= $properties->score ? 1 : 0; } } $obj->competences_obtained = (int) $obtained; $obj->competences_required = count($f_competences); if ($keys) { $output[$id_fncrole] = $obj; } else { $output[] = $obj; } } } return $output; }