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