public function multiplesubscription()
 {
     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 _lms_ . '/lib/lib.course.php';
     $course_selector = new Selector_Course();
     //$user_selector = new Module__Directory();
     $user_selector = new UserSelector();
     //Step info
     $step = Get::req('step', DOTY_INT, 1);
     $model = new SubscriptionAlms();
     if (isset($_POST['okselector']) || isset($_POST['next'])) {
         $step++;
     }
     if (isset($_POST['back'])) {
         $step--;
     }
     if (isset($_POST['undo']) || isset($_POST['cancelselector'])) {
         $step = 0;
     }
     switch ($step) {
         case '0':
             Util::jump_to('index.php?r=' . $this->link_course . '/show');
             break;
         case '1':
             if (isset($_POST['back'])) {
                 $course_selector->parseForState($_POST);
                 $course_selection = urlencode(serialize($course_selector->getSelection()));
                 $user_selector->addFormInfo(Form::getHidden('course_selection', 'course_selection', $course_selection));
             }
             $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;
             if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
                 require_once _base_ . '/lib/lib.preference.php';
                 $adminManager = new AdminPreference();
                 $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
                 $admin_users = $this->acl_man->getAllUsersFromIdst($admin_tree);
                 $user_selector->setUserFilter('user', $admin_users);
                 $user_selector->setUserFilter('group', $admin_tree);
             }
             if (isset($_GET['load'])) {
                 $user_selector->resetSelection(array());
             }
             if (isset($_POST['user_selection'])) {
                 $user_selector->resetSelection(unserialize(urldecode($_POST['user_selection'])));
             }
             $user_selector->setUserFilter('exclude', array($this->acl_man->getAnonymousId()));
             $this->render('multiple_subscription_1', array('model' => $model, 'user_selector' => $user_selector));
             break;
         case '2':
             $id_cat = Get::req('id_cat', DOTY_INT, 0);
             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_selected = $user_selector->getSelection($_POST);
                 if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
                     require_once _base_ . '/lib/lib.preference.php';
                     $adminManager = new AdminPreference();
                     $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
                     $admin_users = $this->acl_man->getAllUsersFromIdst($admin_tree);
                     $user_selected = array_intersect($user_selected, $admin_users);
                     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 (count($user_selected) == 0) {
                     Util::jump_to('index.php?r=' . $this->link . '/multiplesubscription');
                 }
                 $model->setUserData(urlencode(serialize($user_selected)));
             }
             $course_selector->parseForState($_POST);
             if (isset($_POST['course_selection'])) {
                 $course_selector->resetSelection(unserialize(urldecode($_POST['course_selection'])));
             } elseif (isset($_POST['okselector'])) {
                 $course_selector->resetSelection(array());
             }
             $user_selection = isset($_POST['user_selection']) ? $_POST['user_selection'] : $model->getUserData();
             $this->render('multiple_subscription_2', array('model' => $model, 'id_cat' => $id_cat, 'course_selector' => $course_selector, 'user_selection' => $user_selection));
             break;
         case '3':
             $user_selection = $_POST['user_selection'];
             if (isset($_POST['course_selection'])) {
                 $course_selection = $_POST['course_selection'];
             } else {
                 $course_selector->parseForState($_POST);
                 $course_selection = urlencode(serialize($course_selector->getSelection()));
             }
             $control = $model->controlCoursesWithEdition($course_selector->getSelection());
             if ($control && !isset($_POST['edition_selected'])) {
                 $this->render('multiple_subscription_2_2', array('model' => $model, 'course_selection' => $course_selection, 'user_selection' => $user_selection, 'courses' => $course_selector->getSelection()));
             } else {
                 $courses = unserialize(urldecode($course_selection));
                 $edition_selected = array();
                 foreach ($courses as $id_course) {
                     if (isset($_POST['edition_' . $id_course])) {
                         $edition_selected[$id_course] = (int) $_POST['edition_' . $id_course];
                     }
                 }
                 $model->loadSelectedUser(unserialize(urldecode($user_selection)));
                 $this->render('multiple_subscription_3', array('model' => $model, 'course_selection' => $course_selection, 'user_selection' => $user_selection, 'edition_selected' => urlencode(serialize($edition_selected))));
             }
             break;
         case '4':
             //Start case 4
             require_once _lms_ . '/lib/lib.course.php';
             if (isset($_POST['undo'])) {
                 Util::jump_to('index.php?r=' . $this->link . '/show&id_course=' . $id_course . '&id_edition=' . $id_edition . '&id_date=' . $id_date);
             }
             $user_selection = $_POST['user_selection'];
             $course_selection = $_POST['course_selection'];
             $edition_selected = $_POST['edition_selected'];
             $user_selected = unserialize(urldecode($user_selection));
             $course_selected = unserialize(urldecode($course_selection));
             $edition_selected = unserialize(urldecode($edition_selected));
             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;
             }
             $just_subscribed_count = 0;
             foreach ($course_selected as $id_course) {
                 $course_man = new Man_Course();
                 $course_info = $course_man->getCourseInfo($id_course);
                 if ($course_info['course_type'] !== 'classroom' && $course_info['course_edition'] == 0) {
                     $model = new SubscriptionAlms($id_course);
                     $course_info = $model->getCourseInfoForSubscription();
                     $can_subscribe = true;
                     $max_num_subscribe = $course_info['max_num_subscribe'];
                     $subscribe_method = $course_info['subscribe_method'];
                     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;
                         }
                         while (list($id_user, $lv_sel) = each($_POST['user_level_sel'])) {
                             if (!$limited_subscribe || $max_subscribe) {
                                 if ($lv_sel != 0) {
                                     //$this->acl_man->addToGroup($level_idst[$lv_sel], $id_user);
                                     $this->_addToCourseGroup($level_idst[$lv_sel], $id_user);
                                     if ($model->subscribeUser($id_user, $lv_sel, $waiting)) {
                                         $max_subscribe--;
                                         $just_subscribed_count++;
                                     } else {
                                         $this->acl_man->removeFromGroup($level_idst[$lv_sel], $id_user);
                                     }
                                 }
                             }
                         }
                         //End While
                         reset($_POST['user_level_sel']);
                     }
                 } elseif (isset($edition_selected[$id_course])) {
                     if ($course_info['course_type'] === 'classroom') {
                         $model_t = new SubscriptionAlms($id_course, false, $edition_selected[$id_course]);
                         $course_info = $model_t->getCourseInfoForSubscription();
                         $can_subscribe = true;
                         $max_num_subscribe = $course_info['max_num_subscribe'];
                         $subscribe_method = $course_info['subscribe_method'];
                         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;
                             }
                             while (list($id_user, $lv_sel) = each($_POST['user_level_sel'])) {
                                 if (!$limited_subscribe || $max_subscribe) {
                                     if ($lv_sel != 0) {
                                         //$this->acl_man->addToGroup($level_idst[$lv_sel], $id_user);
                                         $this->_addToCourseGroup($level_idst[$lv_sel], $id_user);
                                         if ($model_t->subscribeUser($id_user, $lv_sel, $waiting)) {
                                             $max_subscribe--;
                                             $just_subscribed_count++;
                                         } else {
                                             $this->acl_man->removeFromGroup($level_idst[$lv_sel], $id_user);
                                         }
                                     }
                                 }
                             }
                             //End While
                             reset($_POST['user_level_sel']);
                         }
                     } else {
                         $model_t = new SubscriptionAlms($id_course, $edition_selected[$id_course], false);
                         $course_info = $model_t->getCourseInfoForSubscription();
                         $can_subscribe = true;
                         $max_num_subscribe = $course_info['max_num_subscribe'];
                         $subscribe_method = $course_info['subscribe_method'];
                         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;
                             }
                             while (list($id_user, $lv_sel) = each($_POST['user_level_sel'])) {
                                 if (!$limited_subscribe || $max_subscribe) {
                                     if ($lv_sel != 0) {
                                         //$this->acl_man->addToGroup($level_idst[$lv_sel], $id_user);
                                         $this->_addToCourseGroup($level_idst[$lv_sel], $id_user);
                                         if ($model_t->subscribeUser($id_user, $lv_sel, $waiting)) {
                                             $max_subscribe--;
                                             $just_subscribed_count++;
                                         } else {
                                             $this->acl_man->removeFromGroup($level_idst[$lv_sel], $id_user);
                                         }
                                     }
                                 }
                             }
                             //End While
                             reset($_POST['user_level_sel']);
                         }
                     }
                 }
             }
             // Save limit preference for admin
             if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
                 $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');
                     $user_pref->setPreference('user_subscribed_count', $subscribed_count + $just_subscribed_count);
                 }
             }
             Util::jump_to('index.php?r=' . $this->link_course . '/show&res=_operation_successful');
             //End case 4
             break;
     }
 }
Exemplo n.º 2
0
 public function subscribeToCourse()
 {
     $id_course = Get::req('id_course', DOTY_INT, 0);
     $id_date = Get::req('id_date', DOTY_INT, 0);
     $id_edition = Get::req('id_edition', DOTY_INT, 0);
     $id_user = Docebo::user()->getIdSt();
     $docebo_course = new DoceboCourse($id_course);
     require_once _lms_ . '/admin/models/SubscriptionAlms.php';
     $model = new SubscriptionAlms($id_course, $id_edition, $id_date);
     $course_info = $model->getCourseInfoForSubscription();
     $userinfo = $this->acl_man->getUser($id_user);
     $level_idst =& $docebo_course->getCourseLevel($id_course);
     if (count($level_idst) == 0 || $level_idst[1] == '') {
         $level_idst =& $docebo_course->createCourseLevel($id_course);
     }
     $waiting = 0;
     if ($course_info['subscribe_method'] != 2) {
         $waiting = 1;
     }
     $userlevel_subscrip = $this->get_userlevel_subscription($id_user);
     //UG
     //UG		$this->acl_man->addToGroup($level_idst[3], $id_user);
     $this->acl_man->addToGroup($level_idst[$userlevel_subscrip], $id_user);
     //UG
     //UG		if($model->subscribeUser($id_user, 3, $waiting))
     if ($model->subscribeUser($id_user, $userlevel_subscrip, $waiting)) {
         $res['success'] = true;
         $res['new_status_code'] = '';
         if ($id_edition != 0 || $id_date != 0) {
             $must_change_status = $this->model->controlSubscriptionRemaining($id_course);
             $res['new_status'] = '';
             if (!$must_change_status) {
                 $res['new_status'] = '<p class="cannot_subscribe">' . Lang::t('_NO_EDITIONS', 'catalogue') . '</p>';
             }
         } else {
             if ($waiting == 1) {
                 $res['new_status'] = '<p class="cannot_subscribe">' . Lang::t('_WAITING', 'catalogue') . '</p>';
                 $res['new_status_code'] = 'waiting';
             } else {
                 $res['new_status'] = '<p class="subscribed">' . Lang::t('_USER_STATUS_ENTER', 'catalogue') . '</p>';
                 $res['new_status_code'] = 'subscribed';
             }
         }
         $array_subst = array('[url]' => Get::sett('url'), '[course]' => $course_info['name'], '[firstname]' => $userinfo[ACL_INFO_FIRSTNAME], '[lastname]' => $userinfo[ACL_INFO_LASTNAME]);
         // 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_SUBS_WAITING_SUBJECT', false);
         $msg_composer->setBodyLangText('email', '_NEW_USER_SUBS_WAITING_TEXT', $array_subst);
         $msg_composer->setSubjectLangText('sms', '_NEW_USER_SUBS_WAITING_SUBJECT_SMS', false);
         $msg_composer->setBodyLangText('sms', '_NEW_USER_SUBS_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));
             /*if($control)
             		$recipients[] = $id_user;*/
             $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));
             /*if($control)
             		$recipients[] = $id_user;*/
             $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('UserCourseInsertModerate', 'subscribe', 'insert', '1', 'User subscribed with moderation', $recipients, $msg_composer);
         $res['message'] = UIFeedback::info(Lang::t('_SUBSCRIPTION_CORRECT', 'catalogue'), true);
     } else {
         $this->acl_man->removeFromGroup($level_idst[3], $id_user);
         $res['success'] = false;
         $res['message'] = UIFeedback::error(Lang::t('_SUBSCRIPTION_ERROR', 'catalogue'), true);
     }
     echo $this->json->encode($res);
 }