Exemplo n.º 1
0
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');
}
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
 *  - $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) {
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
 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));
 }
Exemplo n.º 7
0
 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;
     }
 }
Exemplo n.º 8
0
 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;
 }
Exemplo n.º 9
0
 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;
 }
Exemplo n.º 10
0
/**
 * 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;
}
Exemplo n.º 11
0
 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;
 }