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);
 }