protected function presence() { //Course info $id_course = Get::req('id_course', DOTY_INT, 0); $id_date = Get::req('id_date', DOTY_INT, 0); $model = new ClassroomAlms($id_course, $id_date); if (isset($_POST['save'])) { if ($model->savePresence()) { Util::jump_to('index.php?r=' . $this->base_link_classroom . '/classroom&id_course=' . $model->getIdCourse() . '&result=ok'); } else { Util::jump_to('index.php?r=' . $this->base_link_classroom . '/classroom&id_course=' . $model->getIdCourse() . '&result=err_pres'); } } elseif (isset($_POST['undo'])) { Util::jump_to('index.php?r=' . $this->base_link_classroom . '/classroom&id_course=' . $model->getIdCourse()); } $cmodel = new CourseAlms(); $course_info = $cmodel->getInfo($id_course, FALSE, $id_date); $course_name = ($course_info['code'] !== '' ? '[' . $course_info['code'] . '] ' : '') . $course_info['name']; $this->render('presence', array('model' => $model, 'base_link_course' => $this->base_link_course, 'base_link_classroom' => $this->base_link_classroom, 'course_name' => $course_name)); }
public function setUnsubscribeRequest($id_user, $id_course, $id_edition = FALSE, $id_date = FALSE) { if ($id_user <= 0 || $id_course <= 0) { return FALSE; } $cmodel = new CourseAlms(); $cinfo = $cmodel->getCourseModDetails($id_course); switch ((int) $cinfo['auto_unsubscribe']) { case 0: return FALSE; break; case 1: case 2: if ($cinfo['unsubscribe_date_limit'] != "" && $cinfo['unsubscribe_date_limit'] != "0000-00-00 00:00:00") { if ($cinfo['unsubscribe_date_limit'] < date("Y-m-d H:i:s")) { return FALSE; } } break; } if ($id_date > 0) { $query = "UPDATE %lms_course_date_user SET requesting_unsubscribe = 1, requesting_unsubscribe_date = NOW() " . " WHERE id_user = "******" AND id_date = " . (int) $id_date; } else { if ($id_edition > 0) { $query = "UPDATE %lms_course_editions_user SET requesting_unsubscribe = 1, requesting_unsubscribe_date = NOW() " . " WHERE id_user = "******" AND id_edition = " . (int) $id_edition; } else { $query = "UPDATE %lms_courseuser SET requesting_unsubscribe = 1, requesting_unsubscribe_date = NOW() " . " WHERE idUser = "******" AND idCourse = " . (int) $id_course; } } $res = $this->db->query($query); // check and send message for unsibscription moderated if ($res && (int) $cinfo['auto_unsubscribe'] == 1) { //moderated self unsubscribe $userinfo = $this->acl_man->getUser($id_user); $array_subst = array('[url]' => Get::sett('url'), '[course]' => $cinfo['name'], '[firstname]' => $userinfo[ACL_INFO_FIRSTNAME], '[lastname]' => $userinfo[ACL_INFO_LASTNAME], '[userid]' => $this->acl_man->relativeId($userinfo[ACL_INFO_USERID])); // message to user that is waiting require_once _base_ . '/lib/lib.eventmanager.php'; $msg_composer = new EventMessageComposer('subscribe', 'lms'); $msg_composer->setSubjectLangText('email', '_NEW_USER_UNSUBS_WAITING_SUBJECT', false); $msg_composer->setBodyLangText('email', '_NEW_USER_UNSUBS_WAITING_TEXT', $array_subst); $msg_composer->setSubjectLangText('sms', '_NEW_USER_UNSUBS_WAITING_SUBJECT_SMS', false); $msg_composer->setBodyLangText('sms', '_NEW_USER_UNSUBS_WAITING_TEXT_SMS', $array_subst); $acl =& Docebo::user()->getAcl(); $acl_man =& $this->acl_man; $recipients = array(); $idst_group_god_admin = $acl->getGroupST(ADMIN_GROUP_GODADMIN); $recipients = $acl_man->getGroupMembers($idst_group_god_admin); $idst_group_admin = $acl->getGroupST(ADMIN_GROUP_ADMIN); $idst_admin = $acl_man->getGroupMembers($idst_group_admin); require_once _adm_ . '/lib/lib.adminmanager.php'; foreach ($idst_admin as $id_user) { $adminManager = new AdminManager(); $acl_manager =& $acl_man; $idst_associated = $adminManager->getAdminTree($id_user); $array_user =& $acl_manager->getAllUsersFromIdst($idst_associated); $array_user = array_unique($array_user); $array_user[] = $array_user[0]; unset($array_user[0]); $control_user = array_search(getLogUserId(), $array_user); $query = "SELECT COUNT(*)" . " FROM " . Get::cfg('prefix_fw') . "_admin_course" . " WHERE idst_user = '******'" . " AND type_of_entry = 'course'" . " AND id_entry = '" . $id_course . "'"; list($control_course) = mysql_fetch_row(mysql_query($query)); $query = "SELECT COUNT(*)" . " FROM " . Get::cfg('prefix_fw') . "_admin_course" . " WHERE idst_user = '******'" . " AND type_of_entry = 'coursepath'" . " AND id_entry IN" . " (" . " SELECT id_path" . " FROM " . Get::cfg('prefix_lms') . "_coursepath_courses" . " WHERE id_item = '" . $id_course . "'" . " )"; list($control_coursepath) = mysql_fetch_row(mysql_query($query)); $query = "SELECT COUNT(*)" . " FROM " . Get::cfg('prefix_fw') . "_admin_course" . " WHERE idst_user = '******'" . " AND type_of_entry = 'catalogue'" . " AND id_entry IN" . " (" . " SELECT idCatalogue" . " FROM " . Get::cfg('prefix_lms') . "_catalogue_entry" . " WHERE idEntry = '" . $id_course . "'" . " )"; list($control_catalogue) = mysql_fetch_row(mysql_query($query)); if ($control_user && ($control_course || $control_coursepath || $control_catalogue)) { $recipients[] = $id_user; } } $recipients = array_unique($recipients); createNewAlert('UserCourseRemovedModerate', 'unsubscribe', 'insert', '1', 'User unsubscribed with moderation', $recipients, $msg_composer); } return $res ? TRUE : FALSE; }
public function add() { if (!$this->permissions['subscribe_course']) { $this->render('invalid', array('message' => $this->_getErrorMessage('no permission'), 'back_url' => 'index.php?r=' . $this->link_course . '/show')); return; } else { if (!$this->checkAdminLimit()) { $this->render('invalid', array('message' => Lang::t('_SUBSCRIBE_LIMIT_REACHED', 'subscribe'), 'back_url' => 'index.php?r=' . $this->link_course . '/show')); return; } } require_once _base_ . '/lib/lib.form.php'; require_once _base_ . '/lib/lib.userselector.php'; //require_once($GLOBALS['where_framework'].'/class.module/class.directory.php'); $user_selector = new UserSelector(); $cman = new CourseAlms(); //Course info $id_course = Get::req('id_course', DOTY_INT, 0); $id_edition = Get::req('id_edition', DOTY_INT, 0); $id_date = Get::req('id_date', DOTY_INT, 0); if (isset($_POST['cancelselector'])) { Util::jump_to('index.php?r=' . $this->link . '/show&id_course=' . $id_course . '&id_edition=' . $id_edition . '&id_date=' . $id_date); } $model = new SubscriptionAlms($id_course, $id_edition, $id_date); if (isset($_POST['okselector'])) { $_selection = $user_selector->getSelection($_POST); $acl_man = Docebo::user()->getAclManager(); $user_selected = $acl_man->getAllUsersFromSelection($_selection); //$acl_man->getAllUsersFromIdst($_selection); $user_alredy_subscribed = $model->loadUserSelectorSelection(); $user_selected = array_diff($user_selected, $user_alredy_subscribed); if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) { $to_subscribe = count($user_selected); $admin_pref = new AdminPreference(); $pref = $admin_pref->getAdminRules(Docebo::user()->getIdSt()); if ($pref['admin_rules.limit_course_subscribe'] == 'on') { $user_pref = new UserPreferences(Docebo::user()->getIdSt()); $subscribed_count = $user_pref->getPreference('user_subscribed_count'); if ($subscribed_count + $to_subscribe > $pref['admin_rules.max_course_subscribe']) { $this->render('invalid', array('message' => Lang::t('_SUBSCRIBE_LIMIT_REACHED', 'subscribe'), 'back_url' => 'index.php?r=' . $this->link_course . '/show')); return; } } } if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) { require_once _base_ . '/lib/lib.preference.php'; $adminManager = new AdminPreference(); $admin_users = $adminManager->getAdminUsers(Docebo::user()->getIdST()); $user_selected = array_intersect($user_selected, $admin_users); } $user_selected = $acl_man->getUsersFromMixedIdst($user_selected); if (count($user_selected) == 0) { Util::jump_to('index.php?r=' . $this->link . '/add&id_course=' . $id_course . '&id_edition=' . $id_edition . '&id_date=' . $id_date . '&err=_empty_selection'); } $sel_date_begin_validity = Get::req('sel_date_begin_validity', DOTY_INT, 0) > 0; $sel_date_expire_validity = Get::req('sel_date_expire_validity', DOTY_INT, 0) > 0; $date_begin_validity = $sel_date_begin_validity ? Get::req('set_date_begin_validity', DOTY_STRING, "") : false; $date_expire_validity = $sel_date_expire_validity ? Get::req('set_date_expire_validity', DOTY_STRING, "") : false; if ($date_begin_validity) { $date_begin_validity = Format::dateDb($date_begin_validity, 'date'); } if ($date_expire_validity) { $date_expire_validity = Format::dateDb($date_expire_validity, 'date'); } $select_level_mode = Get::req('select_level_mode', DOTY_STRING, ""); switch ($select_level_mode) { case "students": // subscribe the selection with the students level require_once _lms_ . '/lib/lib.course.php'; $course_info = $model->getCourseInfoForSubscription(); //check if the subscriber is a sub admin and, if true check it's limitation $can_subscribe = true; $subscribe_method = $course_info['subscribe_method']; if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) { $limited_subscribe = Docebo::user()->preference->getAdminPreference('admin_rules.limit_course_subscribe'); $max_subscribe = Docebo::user()->preference->getAdminPreference('admin_rules.max_course_subscribe'); $direct_subscribe = Docebo::user()->preference->getAdminPreference('admin_rules.direct_course_subscribe'); if ($limited_subscribe == 'on') { $limited_subscribe = true; } else { $limited_subscribe = false; } if ($direct_subscribe == 'on') { $direct_subscribe = true; } else { $direct_subscribe = false; } } else { $limited_subscribe = false; $max_subscribe = 0; $direct_subscribe = true; } if ($can_subscribe) { require_once _lms_ . '/lib/lib.course.php'; $docebo_course = new DoceboCourse($id_course); $level_idst =& $docebo_course->getCourseLevel($id_course); if (count($level_idst) == 0 || $level_idst[1] == '') { $level_idst =& $docebo_course->createCourseLevel($id_course); } $waiting = 0; $user_subscribed = array(); $user_waiting = array(); if (!$direct_subscribe) { $waiting = 1; } // do the subscriptions $result = true; $this->db->start_transaction(); while (list(, $id_user) = each($user_selected)) { if (!$limited_subscribe || $max_subscribe) { //$this->acl_man->addToGroup($level_idst[3], $id_user); $this->_addToCourseGroup($level_idst[3], $id_user); if ($model->subscribeUser($id_user, 3, $waiting, $date_begin_validity, $date_expire_validity)) { $max_subscribe--; } else { $this->acl_man->removeFromGroup($level_idst[3], $id_user); $result = false; } } } //End While $this->db->commit(); // Save limit preference for admin if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) { $to_subscribe = count($user_selected); if ($pref['admin_rules.limit_course_subscribe'] == 'on') { $user_pref->setPreference('user_subscribed_count', $subscribed_count + $to_subscribe); } } reset($user_selected); $send_alert = Get::req('send_alert', DOTY_INT, 0); //basically we will consider the alert as a checkbox, the initial state of the checkbox will be setted according to the alert status if (!empty($user_selected) && $send_alert) { require_once _base_ . '/lib/lib.eventmanager.php'; $array_subst = array('[url]' => Get::sett('url'), '[course]' => $course_info['name'], '[medium_time]' => $course_info['mediumTime'], '[course_name]' => $course_info['name'], '[course_code]' => $course['code']); // message to user that is waiting $msg_composer = new EventMessageComposer(); $msg_composer->setSubjectLangText('email', '_NEW_USER_SUBSCRIBED_SUBJECT', false); $msg_composer->setBodyLangText('email', '_NEW_USER_SUBSCRIBED_TEXT', $array_subst); $msg_composer->setBodyLangText('sms', '_NEW_USER_SUBSCRIBED_TEXT_SMS', $array_subst); // send message to the user subscribed createNewAlert('UserCourseInserted', 'subscribe', 'insert', '1', 'User subscribed', $user_selected, $msg_composer, $send_alert, true); } } $result = $result > 0 ? '_operation_successful' : '_operation_failed'; Util::jump_to('index.php?r=' . $this->link . '/show&id_course=' . $id_course . '&id_edition=' . $id_edition . '&id_date=' . $id_date . '&res=' . $result); break; } $model->loadSelectedUser($user_selected); $course_info = $this->model->getCourseInfoForSubscription(); $course_name = ($course_info['code'] !== '' ? '[' . $course_info['code'] . '] ' : '') . $course_info['name']; $this->render('level', array('id_course' => $id_course, 'id_edition' => $id_edition, 'id_date' => $id_date, 'model' => $model, 'course_info' => $cman->getInfo($id_course, $id_edition, $id_date), 'num_subscribed' => count($user_selected), 'send_alert' => Get::req('send_alert', DOTY_INT, 0), 'date_begin_validity' => $date_begin_validity, 'date_expire_validity' => $date_expire_validity, 'course_name' => $course_name)); } else { if (isset($_GET['err']) && $_GET['err'] !== '') { UIFeedback::error(Lang::t(strtoupper($_GET['err']), 'subscription')); } $user_selector->show_user_selector = TRUE; $user_selector->show_group_selector = TRUE; $user_selector->show_orgchart_selector = TRUE; $user_selector->show_orgchart_simple_selector = TRUE; $user_alredy_subscribed = array(); if (isset($_GET['load'])) { $user_selector->requested_tab = PEOPLEVIEW_TAB; $user_alredy_subscribed = $model->loadUserSelectorSelection(); $user_selector->resetSelection($user_alredy_subscribed); } //find if the event manager is configured to send an alert or not in case of new subscription list($send_alert) = sql_fetch_row(sql_query("SELECT permission " . " FROM %adm_event_class as ec" . " JOIN %adm_event_manager as em" . " WHERE ec.idClass = em.idClass AND ec.class = 'UserCourseInserted' ")); $course_info = $this->model->getCourseInfoForSubscription(); $course_name = ($course_info['code'] !== '' ? '[' . $course_info['code'] . '] ' : '') . $course_info['name']; $this->render('add', array('id_course' => $id_course, 'id_edition' => $id_edition, 'id_date' => $id_date, 'model' => $model, 'course_info' => $cman->getInfo($id_course, $id_edition, $id_date), 'user_selector' => $user_selector, 'user_alredy_subscribed' => $user_alredy_subscribed, 'send_alert' => $send_alert == 'mandatory', 'course_name' => $course_name)); } }
public function man_courseTask() { $id_course = Get::req('id_course', DOTY_INT, 0); if ($id_course <= 0) { $this->render('invalid', array('message' => $this->_getErrorMessage("invalid course"), 'back_url' => $base_url)); return; } $cmodel = new CourseAlms(); $course_info = $cmodel->getInfo($id_course); $course_name = ($course_info['code'] !== '' ? '[' . $course_info['code'] . '] ' : '') . $course_info['name']; $title_arr = array('index.php?r=' . $this->base_link_course . '/show' => Lang::t('_COURSES', 'course'), Lang::t('_COMPETENCES', 'competences') . ' : ' . $course_name); $res = Get::req('res', DOTY_ALPHANUM, ''); $result_message = ""; switch ($res) { case 'ok_competences': $result_message = Lang::t('_OPERATION_SUCCESSFUL', 'standard'); break; case 'err_competences': $result_message = Lang::t('_OPERATION_FAILURE', 'standard'); break; } $this->render('man_course', array('id_course' => $id_course, 'has_scores' => $this->model->courseHasScoreCompetences($id_course), 'title_arr' => $title_arr, 'result_message' => $result_message, 'filter_text' => "", 'base_link_competence' => $this->base_link_competence)); }
protected function edit() { if (!$this->permissions['mod']) { $this->render('invalid', array('message' => $this->_getMessage('no permission'), 'back_url' => 'index.php?r=alms/communication/show')); return; } require_once _base_ . '/lib/lib.form.php'; $id_comm = Get::req('id_comm', DOTY_INT, 0); $data = $this->model->findByPk($id_comm); $data['publish_date'] = Format::date($data['publish_date'], 'date'); $course_model = new CourseAlms(); $cinfo = $course_model->getCourseModDetails($data['id_course']); $course_name = $cinfo['name']; YuiLib::load('autocomplete'); $this->render('mod', array('data' => $data, 'course_name' => $course_name)); }
/** * The action of self-unsubscription from a course (if enabled for the course), * available in the course box of the courses list */ public function self_unsubscribe() { $id_user = Docebo::user()->idst; //Get::req('id_user', DOTY_INT, Docebo::user()->idst); $id_course = Get::req('id_course', DOTY_INT, 0); $id_edition = Get::req('id_edition', DOTY_INT, 0); $id_date = Get::req('id_date', DOTY_INT, 0); $cmodel = new CourseAlms(); $cinfo = $cmodel->getCourseModDetails($id_course); //index.php?r=elearning/show $back = Get::req('back', DOTY_STRING, ""); if ($back != "") { $parts = explode('/', $back); $length = count($parts); if ($length > 0) { $parts[$length - 1] = 'show'; $back = implode('/', $parts); } } $jump_url = 'index.php?r=' . ($back ? $back : 'lms/elearning/show'); if ($cinfo['auto_unsubscribe'] == 0) { //no self unsubscribe possible for this course Util::jump_to($jump_url . '&res=err_unsub'); } $date_ok = TRUE; if ($cinfo['unsubscribe_date_limit'] != "" && $cinfo['unsubscribe_date_limit'] != "0000-00-00 00:00:00") { if ($cinfo['unsubscribe_date_limit'] < date("Y-m-d H:i:s")) { //self unsubscribing is no more allowed, go back to courselist page Util::jump_to($jump_url . '&res=err_unsub'); } } $smodel = new SubscriptionAlms(); $param = ''; if ($cinfo['auto_unsubscribe'] == 1) { //moderated self unsubscribe $res = $smodel->setUnsubscribeRequest($id_user, $id_course, $id_edition, $id_date); $param .= $res ? '&res=ok_unsub' : '&res=err_unsub'; } if ($cinfo['auto_unsubscribe'] == 2) { //directly unsubscribe user $res = $smodel->unsubscribeUser($id_user, $id_course, $id_edition, $id_date); $param .= $res ? '&res=ok_unsub' : '&res=err_unsub'; } Util::jump_to($jump_url); }