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