Exemple #1
0
 public function getCourseEditionSubscription($id_course, $id_edition, $start_index, $results, $sort, $dir, $filter)
 {
     $query = "SELECT u.idst, u.userid, u.firstname, u.lastname, s.level, s.status, s.date_begin_validity, s.date_expire_validity" . " FROM " . $this->courseuser_table . " AS s" . " JOIN " . $this->user_table . " AS u ON s.idUser = u.idst" . " WHERE s.idCourse = " . (int) $id_course . " AND u.idst IN (" . implode(', ', $this->getEditionSubscribed($id_edition)) . ")";
     if (is_array($filter)) {
         if (isset($filter['text']) && $filter['text'] != "") {
             $query .= " AND (u.userid LIKE '%" . $filter['text'] . "%' OR u.firstname LIKE '%" . $filter['text'] . "%' OR u.lastname LIKE '%" . $filter['text'] . "%') ";
         }
         $arr_idst = array();
         if (isset($filter['orgchart']) && $filter['orgchart'] > 0) {
             $umodel = new UsermanagementAdm();
             $use_desc = isset($filter['descendants']) && $filter['descendants'];
             $ulist = $umodel->getFolderUsers($filter['orgchart'], $use_desc);
             if (!empty($ulist)) {
                 $arr_idst = $ulist;
             }
             unset($ulist);
         }
         if (!empty($arr_idst)) {
             $conditions[] = " AND u.idst IN (" . implode(",", $arr_idst) . ") ";
         }
         if (isset($filter['date_valid']) && strlen($filter['date_valid']) >= 10) {
             $query .= " AND (s.date_begin_validity <= '" . $filter['date_valid'] . "' OR s.date_begin_validity IS NULL OR s.date_begin_validity='0000-00-00 00:00:00') ";
             $query .= " AND (s.date_expire_validity >= '" . $filter['date_valid'] . "' OR s.date_expire_validity IS NULL OR s.date_expire_validity='0000-00-00 00:00:00') ";
         }
         if (isset($filter['show'])) {
             //validate values
             switch ($filter['show']) {
                 case 0:
                     //all
                     //no condition to check ...
                     break;
                 case 1:
                     //expired
                     $query .= " AND (s.date_expire_validity IS NOT NULL AND s.date_expire_validity < NOW())";
                     break;
                 case 2:
                     //not expired with expiring date
                     $query .= " AND (s.date_expire_validity IS NOT NULL AND s.date_expire_validity > NOW())";
                     break;
                 case 3:
                     //not expired without expiring date
                     $query .= " AND (s.date_expire_validity IS NULL OR s.date_expire_validity='' OR s.date_expire_validity='0000-00-00 00:00:00') ";
                     break;
                 default:
                     //all ...
                     break;
             }
         }
     }
     if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $query .= " AND " . $adminManager->getAdminUsersQuery(Docebo::user()->getIdSt(), 'idUser');
     }
     switch ($sort) {
         case 'userid':
             $query .= " ORDER BY u.userid " . $dir;
             break;
         case 'fullname':
             $query .= " ORDER BY u.firstname " . $dir . ", u.lastname " . $dir . ", u.userid " . $dir;
             break;
         case 'level':
             $query .= " ORDER BY s.level " . $dir . ", u.userid " . $dir;
             break;
         case 'status':
             $query .= " ORDER BY s.status " . $dir . ", u.userid " . $dir;
             break;
     }
     $start_index === false ? '' : ($query .= " LIMIT " . $start_index . ", " . $results);
     $result = sql_query($query);
     $res = array();
     while (list($id_user, $userid, $firstname, $lastname, $level, $status, $date_begin_validity, $date_expire_validity) = sql_fetch_row($result)) {
         if ($firstname !== '' && $lastname !== '') {
             $user = $firstname . ' ' . $lastname;
         } elseif ($firstname !== '') {
             $user = $firstname;
         } elseif ($lastname !== '') {
             $user = $lastname;
         } else {
             $user = '';
         }
         $res[] = array('sel' => '', 'id_user' => $id_user, 'userid' => $this->acl_man->relativeId($userid), 'fullname' => $user, 'level_id' => $level, 'status_id' => $status, 'date_begin_validity' => $date_begin_validity, 'date_expire_validity' => $date_expire_validity, 'del' => 'ajax.adm_server.php?r=' . (Docebo::user()->getUserLevelId() == ADMIN_GROUP_PUBLICADMIN ? 'lms/p' : 'alms/') . 'subscription/delPopUp&id_course=' . $id_course . '&id_edition=' . $id_edition . '&id_user=' . $id_user);
     }
     return $res;
 }
 public function getCourseSubscribedUserIdst($id_course, $no_flat = false, $filter = '')
 {
     if (is_numeric($id_course)) {
         $arr = array($id_course);
     } elseif (is_array($id_course) && count($id_course) > 0) {
         $arr =& $id_course;
     } else {
         return false;
     }
     $query = "SELECT s.idUser, s.idCourse " . " FROM " . $this->subscribe_table . " AS s " . " JOIN " . $this->user_table . " AS u ON u.idst = s.idUser " . " WHERE s.idCourse IN (" . implode(",", $arr) . ") ";
     if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $query .= " AND " . $adminManager->getAdminUsersQuery(Docebo::user()->getIdSt(), 's.idUser');
     }
     if (is_array($filter)) {
         if (isset($filter['text']) && $filter['text'] != "") {
             $query .= " AND (u.userid LIKE '%" . $filter['text'] . "%' OR u.firstname LIKE '%" . $filter['text'] . "%' OR u.lastname LIKE '%" . $filter['text'] . "%') ";
         }
         $arr_idst = array();
         if (isset($filter['orgchart']) && $filter['orgchart'] > 0) {
             $umodel = new UsermanagementAdm();
             $use_desc = isset($filter['descendants']) && $filter['descendants'];
             $ulist = $umodel->getFolderUsers($filter['orgchart'], $use_desc);
             if (!empty($ulist)) {
                 $arr_idst = $ulist;
             }
             unset($ulist);
         }
         if (!empty($arr_idst)) {
             $conditions[] = " AND u.idst IN (" . implode(",", $arr_idst) . ") ";
         }
         if (isset($filter['date_valid']) && strlen($filter['date_valid']) >= 10) {
             $query .= " AND (s.date_begin_validity <= '" . $filter['date_valid'] . "' OR s.date_begin_validity IS NULL OR s.date_begin_validity='0000-00-00 00:00:00') ";
             $query .= " AND (s.date_expire_validity >= '" . $filter['date_valid'] . "' OR s.date_expire_validity IS NULL OR s.date_expire_validity='0000-00-00 00:00:00') ";
         }
     }
     $result = $this->db->query($query);
     $res = array();
     while (list($id_user, $id_course) = $this->db->fetch_row($result)) {
         if ($no_flat) {
             $res[$id_course][$id_user] = $id_user;
         } else {
             $res[$id_user] = (int) $id_user;
         }
     }
     if (!$no_flat) {
         $res = array_unique($res);
     }
     return $res;
 }
Exemple #3
0
 function getCoursesRequest($startIndex = false, $records = false, $sort = false, $dir = false, $filter = false)
 {
     if (!$startIndex) {
         $startIndex = 0;
     }
     if (!$records) {
         $records = Get::sett('visuItem');
     }
     $filter_conds = '';
     if ($filter) {
         if (isset($filter['c_category'])) {
             $flat = false;
             if (isset($filter['c_flatview'])) {
                 $flat = $filter['c_flatview']['value'] == 'true' ? true : false;
             }
             $categories = array((int) $filter['c_category']['value']);
             if ($flat) {
                 //retrieve category's sub-categories ids
                 if ($filter['c_category']['value'] != 0) {
                     $bounds_query = "SELECT iLeft, iRight FROM " . $GLOBALS['prefix_lms'] . "_category WHERE idCategory=" . $filter['c_category']['value'];
                     $res = sql_query($bounds_query);
                     list($c_left, $c_right) = sql_fetch_row($res);
                     $categories_query = "SELECT idCategory FROM " . $GLOBALS['prefix_lms'] . "_category WHERE iLeft>" . $c_left . " AND iRight<" . $c_right;
                     $res = sql_query($categories_query);
                     while (list($sub_category) = sql_fetch_row($res)) {
                         $categories[] = (int) $sub_category;
                     }
                 } else {
                     $categories_query = "SELECT idCategory FROM " . $GLOBALS['prefix_lms'] . "_category WHERE 1";
                     $res = sql_query($categories_query);
                     while (list($sub_category) = sql_fetch_row($res)) {
                         $categories[] = (int) $sub_category;
                     }
                 }
             }
             $filter_conds .= " AND c.idCategory IN (" . implode(",", $categories) . ") ";
         }
         if (isset($filter['c_filter'])) {
             $filter_conds .= " AND ( " . " c.code LIKE '%" . $filter['c_filter']['value'] . "%' OR " . " c.name LIKE '%" . $filter['c_filter']['value'] . "%' OR " . " c.description LIKE '%" . $filter . "%' ) ";
         }
         if (isset($filter['c_expire'])) {
             if ($filter['c_expire']['value'] != '') {
                 $temp = '';
                 switch ($filter['c_expire']['value']) {
                     case 1:
                         $temp .= " AND c.date_end = '0000-00-00' ";
                         break;
                     case 2:
                         $temp .= " AND c.date_end >= '" . date("Y-m-d") . "' ";
                         break;
                     case 3:
                         $temp .= " AND c.date_end <= '" . date("Y-m-d") . "' AND c.date_end <> '0000-00-00' ";
                         break;
                 }
                 $filter_conds .= $temp;
             }
         }
         if (isset($filter['c_waiting'])) {
             if ($filter['c_waiting']['value'] == '1') {
                 $filter_conds .= " AND c.idCourse IN" . " (" . " SELECT idCourse" . " FROM " . $GLOBALS['prefix_lms'] . "_courseuser" . " WHERE waiting = 1" . " )";
             }
         }
     }
     $userlevelid = Docebo::user()->getUserLevelId();
     $is_subadmin = false;
     $all_courses = false;
     if ($userlevelid != ADMIN_GROUP_GODADMIN) {
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $acl_man =& Docebo::user()->getAclManager();
         $admin_courses = $adminManager->getAdminCourse(Docebo::user()->getIdST());
         $all_courses = false;
         if (isset($admin_courses['course'][0])) {
             $all_courses = true;
         } elseif (isset($admin_courses['course'][-1])) {
             require_once _lms_ . '/lib/lib.catalogue.php';
             $cat_man = new Catalogue_Manager();
             $user_catalogue = $cat_man->getUserAllCatalogueId(Docebo::user()->getIdSt());
             if (count($user_catalogue) > 0) {
                 $courses = array(0);
                 foreach ($user_catalogue as $id_cat) {
                     $catalogue_course =& $cat_man->getCatalogueCourse($id_cat, true);
                     $courses = array_merge($courses, $catalogue_course);
                 }
                 foreach ($courses as $id_course) {
                     if ($id_course != 0) {
                         $admin_courses['course'][$id_course] = $id_course;
                     }
                 }
             } elseif (Get::sett('on_catalogue_empty', 'off') == 'on') {
                 $all_courses = true;
             }
         } else {
             $array_courses = array();
             $array_courses = array_merge($array_courses, $admin_courses['course']);
             if (!empty($admin_courses['coursepath'])) {
                 require_once _lms_ . '/lib/lib.coursepath.php';
                 $path_man = new Catalogue_Manager();
                 $coursepath_course =& $path_man->getAllCourses($admin_courses['coursepath']);
                 $array_courses = array_merge($array_courses, $coursepath_course);
             }
             if (!empty($admin_courses['catalogue'])) {
                 require_once _lms_ . '/lib/lib.catalogue.php';
                 $cat_man = new Catalogue_Manager();
                 foreach ($admin_courses['catalogue'] as $id_cat) {
                     $catalogue_course =& $cat_man->getCatalogueCourse($id_cat, true);
                     $array_courses = array_merge($array_courses, $catalogue_course);
                 }
             }
             $admin_courses['course'] = array_merge($admin_courses['course'], $array_courses);
         }
         $is_subadmin = true;
     }
     $query = "SELECT c.*, COUNT(cu.idUser) as subscriptions, SUM(cu.waiting) as pending " . " FROM " . $GLOBALS['prefix_lms'] . "_course as c " . " LEFT JOIN " . $GLOBALS['prefix_lms'] . "_courseuser as cu ON (c.idCourse=cu.idCourse) " . " WHERE c.course_type = 'elearning' " . $filter_conds . ($is_subadmin && !$all_courses ? !empty($admin_courses['course']) ? ' AND c.idCourse IN (' . implode(',', $admin_courses['course']) . ')' : ' AND c.idCourse = 0' : '') . ($is_subadmin ? " AND " . $adminManager->getAdminUsersQuery(Docebo::user()->getIdSt(), 'cu.idUser') : '') . " GROUP BY c.idCourse " . ($sort ? " ORDER BY " . $sort . " " . $dir . " " : "") . " LIMIT " . $startIndex . ", " . $records;
     return sql_query($query);
 }
Exemple #4
0
 public function getCourseEdition($id_course, $start_index = false, $results = false, $sort = false, $dir = false, $ed_arr = false)
 {
     if ($ed_arr !== false && is_array($ed_arr) && empty($ed_arr)) {
         $ed_arr[] = 0;
     }
     $query = "SELECT dt.id_date, dt.code, dt.name, dt.status, MIN(dy.date_begin) AS date_begin, MAX(dy.date_end) AS date_end, COUNT(dy.id_day) as num_day, COUNT(DISTINCT du.id_user) as user_subscribed, dt.unsubscribe_date_limit" . " FROM " . $this->date_table . " as dt" . " JOIN " . $this->day_date_table . " as dy ON dy.id_date = dt.id_date" . " LEFT JOIN " . $this->user_date_table . " as du ON du.id_date = dt.id_date" . " LEFT JOIN " . $this->user_table . " AS u ON u.idst = du.id_user" . " WHERE dt.id_course = " . $id_course . (!empty($ed_arr) && is_array($ed_arr) ? " AND dt.id_date IN (" . implode(",", $ed_arr) . ") " : "") . " GROUP BY dt.id_date";
     switch ($sort) {
         case 'code':
             $query .= " ORDER BY dt.code " . $dir . ", dt.name " . $dir . ", date_begin " . $dir;
             break;
         case 'name':
             $query .= " ORDER BY dt.name " . $dir . ", date_begin " . $dir;
             break;
         case 'status':
             $query .= " ORDER BY dt.status " . $dir . ", dt.code " . $dir . ", dt.name " . $dir . ", date_begin " . $dir;
             break;
         case 'date_begin':
             $query .= " ORDER BY date_begin " . $dir . ", dt.code " . $dir . ", dt.name " . $dir;
             break;
         case 'date_end':
             $query .= " ORDER BY date_end " . $dir . ", date_begin " . $dir . ", dt.code " . $dir . ", dt.name " . $dir;
             break;
     }
     $start_index === false ? '' : ($query .= " LIMIT " . $start_index . ", " . $results);
     $result = sql_query($query);
     $res = array();
     while (list($id_date, $code, $name, $status, $date_begin, $date_end, $num_day, $user_subscribed, $unsubscribe_date_limit) = sql_fetch_row($result)) {
         if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
             require_once _base_ . '/lib/lib.preference.php';
             $adminManager = new AdminPreference();
             $query = "SELECT COUNT(*)" . " FROM " . $this->user_date_table . " WHERE id_date = '" . $id_date . "'" . " AND " . $adminManager->getAdminUsersQuery(Docebo::user()->getIdSt(), 'id_user');
             list($user_subscribed) = sql_fetch_row(sql_query($query));
             $query = "SELECT COUNT(*) FROM %lms_courseuser AS cu JOIN %lms_course_date AS cd JOIN %lms_course_date_user AS cdu " . " ON (cd.id_date = cdu.id_date AND cd.id_course = cu.idCourse AND cu.idUser = cdu.id_user) " . " WHERE cd.id_date = " . (int) $id_date . " AND cu.level = 3" . " AND " . $adminManager->getAdminUsersQuery(Docebo::user()->getIdSt(), 'u.id_user');
             list($num_student) = sql_fetch_row(sql_query($query));
         } else {
             $query = "SELECT COUNT(*) FROM %lms_courseuser AS cu JOIN %lms_course_date AS cd JOIN %lms_course_date_user AS cdu " . " ON (cd.id_date = cdu.id_date AND cd.id_course = cu.idCourse AND cu.idUser = cdu.id_user) " . " WHERE cd.id_date = " . (int) $id_date . " AND cu.level = 3";
             list($num_student) = sql_fetch_row(sql_query($query));
         }
         $res[] = array('id_date' => $id_date, 'code' => $code, 'name' => $name, 'status' => $status, 'date_begin' => Format::date($date_begin, 'date'), 'date_end' => Format::date($date_end, 'date'), 'classroom' => $this->getDateClassrooms($id_date, true), 'students' => $num_student, 'num_subscribe' => $user_subscribed, 'subscription' => '<a href="index.php?r=' . (Docebo::user()->getUserLevelId() == ADMIN_GROUP_PUBLICADMIN ? 'lms/p' : 'alms/') . 'subscription/show&id_course=' . $id_course . '&amp;id_date=' . $id_date . '" title="' . Lang::t('_SUBSCRIPTION', 'course') . '">' . ($user_subscribed ? $user_subscribed : 0) . ' <span class="ico-sprite subs_' . ($user_subscribed > 0 ? 'users' : 'notice') . '"><span>' . Lang::t('_USER_STATUS_SUBS') . '</span></span></a>', 'presence' => '<a href="index.php?r=' . (Docebo::user()->getUserLevelId() == ADMIN_GROUP_PUBLICADMIN ? 'lms/p' : 'alms/') . 'classroom/presence&id_course=' . $id_course . '&amp;id_date=' . $id_date . '">' . Lang::t('_ATTENDANCE', 'course') . '</a>', 'num_day' => $num_day, 'user_subscribed' => $user_subscribed, 'mod' => '<a href="index.php?r=' . (Docebo::user()->getUserLevelId() == ADMIN_GROUP_PUBLICADMIN ? 'lms/p' : 'alms/') . 'classroom/modclassroom&id_course=' . $id_course . '&amp;id_date=' . $id_date . '">' . Get::img('standard/edit.png', Lang::t('_MOD', 'course')) . '</a>', 'del' => 'ajax.adm_server.php?r=' . (Docebo::user()->getUserLevelId() == ADMIN_GROUP_PUBLICADMIN ? 'lms/p' : 'alms/') . 'classroom/delclassroom&id_course=' . $id_course . '&amp;id_date=' . $id_date, 'unsubscribe_date_limit' => $unsubscribe_date_limit);
     }
     return $res;
 }
 /**
  * Calculate all pending request of unsubscription to be moderated
  * @return boolean
  */
 public function countPendingUnsubscribeRequests()
 {
     $output = 0;
     $ulevel = Docebo::user()->getUserLevelId();
     $id_admin = Docebo::user()->getIdSt();
     $filter = FALSE;
     $admin_query_course = "";
     $admin_query_editions = "";
     if ($ulevel != ADMIN_GROUP_GODADMIN) {
         require_once _base_ . '/lib/lib.preference.php';
         $preference = new AdminPreference();
         $view = $preference->getAdminCourse($id_admin);
         $all_courses = false;
         if (isset($view['course'][0])) {
             $all_courses = true;
         } elseif (isset($view['course'][-1])) {
             require_once _lms_ . '/lib/lib.catalogue.php';
             $cat_man = new Catalogue_Manager();
             $user_catalogue = $cat_man->getUserAllCatalogueId(Docebo::user()->getIdSt());
             if (count($user_catalogue) > 0) {
                 $courses = array(0);
                 foreach ($user_catalogue as $id_cat) {
                     $catalogue_course =& $cat_man->getCatalogueCourse($id_cat, true);
                     $courses = array_merge($courses, $catalogue_course);
                 }
                 foreach ($courses as $id_course) {
                     if ($id_course != 0) {
                         $view['course'][$id_course] = $id_course;
                     }
                 }
             } elseif (Get::sett('on_catalogue_empty', 'off') == 'on') {
                 $all_courses = true;
             }
         } else {
             $array_courses = array();
             $array_courses = array_merge($array_courses, $view['course']);
             if (!empty($view['coursepath'])) {
                 require_once _lms_ . '/lib/lib.coursepath.php';
                 $path_man = new CoursePath_Manager();
                 $coursepath_course =& $path_man->getAllCourses($view['coursepath']);
                 $array_courses = array_merge($array_courses, $coursepath_course);
             }
             if (!empty($view['catalogue'])) {
                 require_once _lms_ . '/lib/lib.catalogue.php';
                 $cat_man = new Catalogue_Manager();
                 foreach ($view['catalogue'] as $id_cat) {
                     $catalogue_course =& $cat_man->getCatalogueCourse($id_cat, true);
                     $array_courses = array_merge($array_courses, $catalogue_course);
                 }
             }
             $view['course'] = array_merge($view['course'], $array_courses);
         }
         $filter = $view['course'];
         $admin_query_course = $preference->getAdminUsersQuery($id_admin, 'idUser');
         $admin_query_editions = $preference->getAdminUsersQuery($id_admin, 't1.id_user');
     }
     // -- Count for normal courses:
     $query = "SELECT COUNT(*) FROM %lms_courseuser WHERE requesting_unsubscribe = 1";
     $query .= " AND course_edition=0 AND course_type='elearning'";
     if ($filter !== FALSE) {
         if (empty($filter)) {
             return 0;
         }
         //no courses to check --> no requests for sure
         if (!$all_courses) {
             //we haven't assigned "all courses" to the admin
             $query .= " AND idCourse IN (" . implode(",", $filter) . ")";
         }
     }
     if ($admin_query_course) {
         $query .= " AND " . $admin_query_course;
     }
     $res = $this->db->query($query);
     if ($res) {
         list($tot) = $this->db->fetch_row($res);
         $output = (int) $tot;
     }
     // -- Count for editions:
     $query = "SELECT COUNT(*) FROM %lms_course_editions_user as t1,\r\n\t\t\t%lms_course_edition as t2 WHERE t1.requesting_unsubscribe = 1 AND\r\n\t\t\tt1.id_edition=t2.idCourseEdition ";
     if ($filter !== FALSE) {
         if (empty($filter)) {
             return 0;
         }
         //no courses to check --> no requests for sure
         if (!isset($filter[0]) || $filter[0] != 0) {
             //we haven't assigned "all courses" to the admin
             $query .= " AND t2.idCourse IN (" . implode(",", $filter) . ")";
         }
     }
     if ($admin_query_editions) {
         $query .= " AND " . $admin_query_editions;
     }
     $res = $this->db->query($query);
     if ($res) {
         list($tot) = $this->db->fetch_row($res);
         $output = (int) $tot;
     }
     // -- Count for classrooms:
     $query = "SELECT COUNT(*) FROM %lms_course_date_user as t1,\r\n\t\t\t%lms_course_date as t2 WHERE t1.requesting_unsubscribe = 1 AND\r\n\t\t\tt1.id_date=t2.id_date ";
     if ($filter !== FALSE) {
         if (empty($filter)) {
             return 0;
         }
         //no courses to check --> no requests for sure
         if (!isset($filter[0]) || $filter[0] != 0) {
             //we haven't assigned "all courses" to the admin
             $query .= " AND t2.id_course IN (" . implode(",", $filter) . ")";
         }
     }
     if ($admin_query_editions) {
         $query .= " AND " . $admin_query_editions;
     }
     $res = $this->db->query($query);
     if ($res) {
         list($tot) = $this->db->fetch_row($res);
         $output = (int) $tot;
     }
     return $output > 0 ? $output : false;
 }
 public function getunsubscribetabledataTask()
 {
     $op = Get::req('op', DOTY_STRING, "");
     if ($op == 'selectall') {
         $this->_getUnsubscribeSelectAll();
         return;
     }
     $startIndex = Get::req('startIndex', DOTY_INT, 0);
     $results = Get::req('results', DOTY_MIXED, Get::sett('visuItem', 25));
     $sort = Get::req('sort', DOTY_MIXED, 'userid');
     $dir = Get::req('dir', DOTY_MIXED, 'asc');
     $filter_text = Get::req('filter_text', DOTY_STRING, "");
     $filter_course = Get::req('filter_course', DOTY_INT, 0);
     $filter = array();
     if ($filter_text != "") {
         $filter['text'] = $filter_text;
     }
     $courses_filter = FALSE;
     $ulevel = Docebo::user()->getUserLevelId();
     if ($ulevel != ADMIN_GROUP_GODADMIN) {
         require_once _base_ . '/lib/lib.preference.php';
         $preference = new AdminPreference();
         $view = $preference->getAdminCourse(Docebo::user()->idst);
         $all_courses = false;
         if (isset($view['course'][0])) {
             $all_courses = true;
         } elseif (isset($view['course'][-1])) {
             require_once _lms_ . '/lib/lib.catalogue.php';
             $cat_man = new Catalogue_Manager();
             $user_catalogue = $cat_man->getUserAllCatalogueId(Docebo::user()->getIdSt());
             if (count($user_catalogue) > 0) {
                 $courses = array(0);
                 foreach ($user_catalogue as $id_cat) {
                     $catalogue_course =& $cat_man->getCatalogueCourse($id_cat, true);
                     $courses = array_merge($courses, $catalogue_course);
                 }
                 foreach ($courses as $id_course) {
                     if ($id_course != 0) {
                         $view['course'][$id_course] = $id_course;
                     }
                 }
             } elseif (Get::sett('on_catalogue_empty', 'off') == 'on') {
                 $all_courses = true;
             }
         } else {
             $array_courses = array();
             $array_courses = array_merge($array_courses, $view['course']);
             if (!empty($view['coursepath'])) {
                 require_once _lms_ . '/lib/lib.coursepath.php';
                 $path_man = new Catalogue_Manager();
                 $coursepath_course =& $path_man->getAllCourses($view['coursepath']);
                 $array_courses = array_merge($array_courses, $coursepath_course);
             }
             if (!empty($view['catalogue'])) {
                 require_once _lms_ . '/lib/lib.catalogue.php';
                 $cat_man = new Catalogue_Manager();
                 foreach ($view['catalogue'] as $id_cat) {
                     $catalogue_course =& $cat_man->getCatalogueCourse($id_cat, true);
                     $array_courses = array_merge($array_courses, $catalogue_course);
                 }
             }
             $view['course'] = array_merge($view['course'], $array_courses);
         }
         if (!$all_courses) {
             $courses_filter = $view['course'];
         }
         $filter['user_q'] = $preference->getAdminUsersQuery(Docebo::user()->getIdst(), 'user_id');
     }
     if ($filter_course > 0) {
         if ($courses_filter === FALSE) {
             $courses_filter = (int) $filter_course;
         } else {
             if (!in_array($filter_course, $courses_filter)) {
                 $courses_filter = array();
             } else {
                 $courses_filter = (int) $filter_course;
             }
         }
     }
     if (is_array($courses_filter)) {
         $filter['course'] = $courses_filter;
     }
     $total = $this->model->getUnsubscribeRequestsTotal($filter);
     if ($startIndex >= $total) {
         if ($total < $results) {
             $startIndex = 0;
         } else {
             $startIndex = $total - $results;
         }
     }
     $pagination = array('startIndex' => $startIndex, 'results' => $results, 'sort' => $sort, 'dir' => $dir);
     $list = $this->model->getUnsubscribeRequestsList($pagination, $filter);
     //format models' data
     $records = array();
     if (is_array($list)) {
         foreach ($list as $record) {
             $id_unsub = (int) $record->user_id . '_' . $record->idCourse . '_' . $record->res_id . '_' . $record->r_type;
             $record->id = $id_unsub;
             $record->userid = Layout::highlight($this->acl_man->relativeId($record->userid), $filter_text);
             $record->firstname = Layout::highlight($record->firstname, $filter_text);
             $record->lastname = Layout::highlight($record->lastname, $filter_text);
             $record->request_date = Format::date($record->request_date, 'datetime');
             $record->del = 'ajax.adm_server.php?r=alms/subscription/deny_unsubscribe_request&id=' . $id_unsub;
             $records[] = $record;
         }
     }
     if (is_array($records)) {
         $output = array('startIndex' => $startIndex, 'recordsReturned' => count($records), 'sort' => $sort, 'dir' => $dir, 'totalRecords' => $total, 'pageSize' => $results, 'records' => $records);
     } else {
         $output['success'] = false;
     }
     echo $this->json->encode($output);
 }