function _get_games_query($type = 'html', $report_data = NULL, $other = '')
 {
     require_once dirname(__FILE__) . '/report_tableprinter.php';
     if ($report_data == NULL) {
         $ref =& $_SESSION['report_tempdata'];
     } else {
         $ref =& $report_data;
     }
     $_ERR_NOUSER = Lang::t('_EMPTY_SELECTION', 'report');
     $_ERR_NOCOMP = Lang::t('_EMPTY_SELECTION', 'report');
     $_ERR_NODATA = Lang::t('_NO_CONTENT', 'report');
     //LO object types translations
     require_once _lms_ . '/lib/lib.report.php';
     $lang_type = _getLOtranslations();
     $sel_all = $ref['rows_filter']['all_users'];
     $arr_selected_users = $ref['rows_filter']['users'];
     //list of users selected in the filter (users, groups and org.branches)
     $comp_all = isset($ref['columns_filter']['all_games']) ? $ref['columns_filter']['all_games'] : false;
     $arr_selected_comp = isset($ref['columns_filter']['comp_selection']) ? $ref['columns_filter']['comp_selection'] : array();
     //list of communications selected in the filter
     $start_date = isset($ref['columns_filter']['comp_start_date']) ? substr($ref['columns_filter']['comp_start_date'], 0, 10) : '';
     $end_date = isset($ref['columns_filter']['comp_end_date']) ? substr($ref['columns_filter']['comp_end_date'], 0, 10) : '';
     //check and validate time period dates
     if (!preg_match('/^(\\d{4})\\D?(0[1-9]|1[0-2])\\D?([12]\\d|0[1-9]|3[01])$/', $start_date) || $start_date == '0000-00-00') {
         $start_date = '';
     }
     if (!preg_match('/^(\\d{4})\\D?(0[1-9]|1[0-2])\\D?([12]\\d|0[1-9]|3[01])$/', $end_date) || $end_date == '0000-00-00') {
         $end_date = '';
     }
     if ($start_date != '') {
         $start_date .= ' 00:00:00';
     }
     if ($end_date != '') {
         $end_date .= ' 23:59:59';
     }
     if ($start_date != '' && $end_date != '') {
         if ($start_date > $end_date) {
             //invalid time period
             $start_date = '';
             $end_date = '';
         }
     }
     //other checkings and validations
     if (!$sel_all && count($selection) <= 0) {
         cout('<p>' . $_ERR_NOUSER . '</p>');
         return;
     }
     $acl_man = new DoceboACLManager();
     $acl_man->include_suspended = true;
     //extract user idst from selection
     if ($sel_all) {
         $arr_selected_users = $acl_man->getAllUsersIdst();
     } else {
         $arr_selected_users = $acl_man->getAllUsersFromIdst($arr_selected_users);
     }
     if ($comp_all) {
         $query = "SELECT id_game FROM %lms_games";
         $res = $this->db->query($query);
         $arr_selected_comp = array();
         while (list($id_game) = $this->db->fetch_row($res)) {
             $arr_selected_comp[] = $id_game;
         }
     }
     //admin users filter
     $userlevelid = Docebo::user()->getUserLevelId();
     if ($userlevelid != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) {
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
         $admin_users = $acl_man->getAllUsersFromIdst($admin_tree);
         $admin_users = array_unique($admin_users);
         //filter users selection by admin visible users
         $arr_selected_users = array_intersect($arr_selected_users, $admin_users);
         //free some memory
         unset($admin_tree);
         unset($admin_users);
         unset($adminManager);
     }
     //check selected users ...
     if (count($arr_selected_users) <= 0) {
         //message: no users selected
         cout('<p>' . $_ERR_NOUSER . '</p>');
         return;
     }
     //check selected communications ...
     if (count($arr_selected_comp) <= 0) {
         //message: no communications selected
         cout('<p>' . $_ERR_NOCOMP . '</p>');
         return;
     }
     //set table properties and buffer
     $head = array(Lang::t('_GAMES_TITLE', 'report'), Lang::t('_GAMES_TYPE', 'report'), Lang::t('_FROM', 'report'), Lang::t('_TO', 'report'), Lang::t('_USER', 'report'), Lang::t('_GAMES_ATTEMPTED', 'report'), Lang::t('_GAMES_ATTEMPT_DATE', 'report'), Lang::t('_GAMES_FIRST_ATTEMPT_DATE', 'report'), Lang::t('_GAMES_CURRENT_SCORE', 'report'), Lang::t('_GAMES_MAX_SCORE', 'report'), Lang::t('_GAMES_NUM_ATTEMPTS', 'report'));
     if ($this->use_mail) {
         $head[] = array('style' => 'img-cell', 'value' => $this->_loadEmailIcon());
     }
     $buffer = new ReportTablePrinter();
     $buffer->openTable('', '');
     $buffer->openHeader();
     $buffer->addHeader($head);
     $buffer->closeHeader();
     $buffer->openBody();
     //rows cycle
     //which selected communication has been seen by selected users?
     $_YES = Lang::t('_YES', 'standard');
     $_NO = Lang::t('_NO', 'standard');
     $arr_viewed = array();
     $query = "SELECT ct.idReference, c.title, c.type_of, c.start_date, c.end_date, ct.status, " . " ct.dateAttempt, ct.firstAttempt, ct.idUser, u.userid, u.firstname, u.lastname, " . " ct.current_score, ct.max_score, ct.num_attempts " . " FROM (%lms_games_track as ct " . " JOIN %lms_games as c ON (ct.idReference=c.id_game)) " . " JOIN %adm_user as u ON (ct.idUser=u.idst) " . " WHERE ct.idUser IN (" . implode(",", $arr_selected_users) . ") " . " AND c.id_game IN (" . implode(",", $arr_selected_comp) . ") " . ($start_date != '' ? " AND ct.dateAttempt >= '" . $start_date . "' " : "") . ($end_date != '' ? " AND ct.dateAttempt <= '" . $end_date . "' " : "") . " ORDER BY c.title, u.userid";
     $res = $this->db->query($query);
     if ($this->db->num_rows($res) <= 0) {
         cout('<p>' . $_ERR_NODATA . '</p>');
         return;
     }
     while ($obj = $this->db->fetch_obj($res)) {
         $line = array();
         $line[] = $obj->title;
         $line[] = isset($lang_type[$obj->type_of]) ? $lang_type[$obj->type_of] : '';
         $line[] = Format::date($obj->start_date, "date");
         $line[] = Format::date($obj->end_date, "date");
         $line[] = $acl_man->relativeId($obj->userid);
         $line[] = $obj->status == 'completed' || $obj->status == 'passed' ? $_YES : $_NO;
         $line[] = Format::date($obj->dateAttempt, "datetime");
         $line[] = Format::date($obj->firstAttempt, "datetime");
         $line[] = $obj->current_score;
         $line[] = $obj->max_score;
         $line[] = $obj->num_attempts;
         if ($this->use_mail) {
             $line[] = '<div class="align_center">' . Form::getInputCheckbox('mail_' . $obj->idUser, 'mail_recipients[]', $obj->idUser, isset($_POST['select_all']), '') . '</div>';
         }
         $buffer->addLine($line);
     }
     $buffer->closeBody();
     $buffer->closeTable();
     cout($buffer->get());
     $this->_loadEmailActions();
 }
Exemple #2
0
 function modcatalogueassoc()
 {
     checkPerm('mod');
     $lang =& DoceboLanguage::createInstance('catalogue', 'lms');
     $acl_man =& Docebo::user()->getAclManager();
     require_once $GLOBALS['where_lms'] . '/lib/lib.course.php';
     require_once _base_ . '/lib/lib.form.php';
     require_once _base_ . '/lib/lib.userselector.php';
     $id_catalogue = importVar('id_catalogue', true, 0);
     $out =& $GLOBALS['page'];
     $user_select = new UserSelector();
     $user_select->show_user_selector = FALSE;
     $user_select->show_group_selector = TRUE;
     $user_select->show_orgchart_selector = TRUE;
     $user_select->show_orgchart_simple_selector = TRUE;
     $user_select->multi_choice = 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 = $acl_man->getAllUsersFromIdst($admin_tree);
         $user_select->setUserFilter('user', $admin_users);
         $user_select->setUserFilter('group', $admin_tree);
     }
     if (isset($_POST['okselector'])) {
         $old_members = array();
         $re_members = sql_query("\r\n\t\tSELECT idst_member\r\n\t\tFROM " . $GLOBALS['prefix_lms'] . "_catalogue_member\r\n\t\tWHERE idCatalogue = '" . $id_catalogue . "'");
         while (list($id_members) = sql_fetch_row($re_members)) {
             $old_members[$id_members] = $id_members;
         }
         $new_members = $user_select->getSelection($_POST);
         $to_add = array_diff($new_members, $old_members);
         $to_del = array_diff($old_members, $new_members);
         $re = true;
         $re &= addToCatologue($to_add, $id_catalogue);
         $re &= removeFromCatologue($to_del, $id_catalogue);
         Util::jump_to('index.php?modname=catalogue&op=catlist&result=' . ($re ? 'ok' : 'err'));
     }
     if (isset($_GET['load'])) {
         $members = array();
         $re_members = sql_query("\r\n\t\tSELECT idst_member\r\n\t\tFROM " . $GLOBALS['prefix_lms'] . "_catalogue_member\r\n\t\tWHERE idCatalogue = '" . $id_catalogue . "'");
         while (list($id_members) = sql_fetch_row($re_members)) {
             $members[$id_members] = $id_members;
         }
         $user_select->resetSelection($members);
     }
     $title_area = getTitleArea(array('index.php?modname=catalogue&amp;op=catlist' => $lang->def('_CATALOGUE'), getCatalogueName($id_catalogue)), 'catalogue');
     $user_select->setPageTitle($title_area);
     $user_select->loadSelector('index.php?modname=catalogue&amp;op=modcatalogueassoc&amp;id_catalogue=' . $id_catalogue, $lang->def('_CATALOGUE'), $lang->def('_ASSIGN_USERS'), true);
 }
 public function sel_usersTask()
 {
     require_once _adm_ . '/lib/lib.directory.php';
     require_once _adm_ . '/class.module/class.directory.php';
     $base_url = 'index.php?r=adm/functionalroles/show';
     //check permissions: we should have mod privileges to assign users to the role group
     if (!$this->permissions['mod']) {
         Util::jump_to($base_url);
     }
     //read inputs
     $id_fncrole = Get::req('id_fncrole', DOTY_INT, -1);
     if ($id_fncrole <= 0) {
         $this->render('invalid', array('message' => $this->_getErrorMessage('invalid fncrole'), 'back_url' => $base_url));
         return;
     }
     //navigation urls
     $back_url = 'index.php?r=adm/functionalroles/man_users&id=' . (int) $id_fncrole;
     $jump_url = 'index.php?r=adm/functionalroles/sel_users&id_fncrole=' . (int) $id_fncrole;
     //competence details
     $info = $this->model->getFunctionalRoleInfo($id_fncrole);
     $name = $this->model->getFunctionalRoleName($id_fncrole);
     //page_title
     $page_title_arr = array($base_url => Lang::t('_FUNCTIONAL_ROLE', 'fncroles'), $back_url => Lang::t('_USERS', 'fncroles') . ': ' . $name, Lang::t('_ASSIGN_USERS', 'fncroles'));
     if (isset($_POST['cancelselector'])) {
         //--- UNDO: return to catalogue list -------------------------------------
         Util::jump_to($back_url);
     } elseif (isset($_POST['okselector'])) {
         //--- SAVE: users selection has been done --------------------------------
         $acl_man = Docebo::user()->getAclManager();
         $user_selector = new UserSelector();
         $selection = $user_selector->getSelection();
         $members_existent = $this->model->getMembers($id_fncrole);
         //retrieve newly selected users
         $_common_members = array_intersect($members_existent, $selection);
         $_new_members = array_diff($selection, $_common_members);
         //new users to add
         $_old_members = array_diff($members_existent, $_common_members);
         //old users to delete
         unset($_common_members);
         //free some memory
         //insert newly selected users in database
         $res1 = $this->model->assignMembers($id_fncrole, $_new_members);
         $res2 = $this->model->deleteMembers($id_fncrole, $_old_members);
         // apply enroll rules
         $enrollrules = new EnrollrulesAlms();
         $enrollrules->applyRulesMultiLang('_LOG_USERS_TO_FNCROLE', $_new_members, false, $id_fncrole);
         //go back to main page, with result message
         Util::jump_to($back_url . '&res=' . ($res1 && $res2 ? 'ok_users' : 'err_users'));
     } else {
         //--- USER SELECTION IS IN PROGRESS: show selector -----------------------
         $user_selector = new UserSelector();
         $user_selector->show_user_selector = TRUE;
         $user_selector->show_group_selector = TRUE;
         $user_selector->show_orgchart_selector = TRUE;
         $user_selector->show_fncrole_selector = FALSE;
         //we can't assign functional roles to other functional roles ...
         //there should be a "role selector" too ...
         //$user_select->show_orgchart_simple_selector = TRUE;
         //filter selectable user by sub-admin permission
         $acl_man = Docebo::user()->getAclManager();
         $user_selector->setUserFilter('exclude', array($acl_man->getAnonymousId()));
         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 = $acl_man->getAllUsersFromIdst($admin_tree);
             $user_selector->setUserFilter('user', $admin_users);
             $user_selector->setUserFilter('group', $admin_tree);
         }
         if (Get::req('is_updating', DOTY_INT, false)) {
             //...
         } else {
             //set initial selection
             $selection = $this->model->getMembers($id_fncrole);
             $user_selector->requested_tab = PEOPLEVIEW_TAB;
             $user_selector->resetSelection($selection);
         }
         $user_selector->addFormInfo(Form::getHidden('is_updating', 'is_updating', 1) . Form::getHidden('id_fncrole', 'id_fncrole', $id_fncrole));
         //draw selector
         $user_selector->loadSelector(Util::str_replace_once('&', '&amp;', $jump_url), $page_title_arr, Lang::t('_ASSIGN_USERS_TO_FNCROLE', 'fncroles'), true);
     }
 }
 function _get_games_query($type = 'html', $report_data = NULL, $other = '')
 {
     require_once dirname(__FILE__) . '/report_tableprinter.php';
     if ($report_data == NULL) {
         $ref =& $_SESSION['report_tempdata'];
     } else {
         $ref =& $report_data;
     }
     $_ERR_NOUSER = Lang::t('_EMPTY_SELECTION', 'report');
     $_ERR_NOCOMP = Lang::t('_EMPTY_SELECTION', 'report');
     $_ERR_NODATA = Lang::t('_NO_CONTENT', 'report');
     require_once _lms_ . '/lib/lib.report.php';
     $lang_type = _getLOtranslations();
     $sel_all = $ref['rows_filter']['select_all'];
     $arr_selected_users = $ref['rows_filter']['selection'];
     //list of users selected in the filter (users, groups and org.branches)
     $comp_all = $ref['columns_filter']['all_games'];
     $arr_selected_comp = $ref['columns_filter']['comp_selection'];
     //list of communications selected in the filter
     $start_date = substr($ref['columns_filter']['comp_start_date'], 0, 10);
     $end_date = substr($ref['columns_filter']['comp_end_date'], 0, 10);
     //check and validate time period dates
     if (!preg_match('/^(\\d{4})\\D?(0[1-9]|1[0-2])\\D?([12]\\d|0[1-9]|3[01])$/', $start_date) || $start_date == '0000-00-00') {
         $start_date = '';
     }
     if (!preg_match('/^(\\d{4})\\D?(0[1-9]|1[0-2])\\D?([12]\\d|0[1-9]|3[01])$/', $end_date) || $end_date == '0000-00-00') {
         $end_date = '';
     }
     if ($start_date != '') {
         $start_date .= ' 00:00:00';
     }
     if ($end_date != '') {
         $end_date .= ' 23:59:59';
     }
     if ($start_date != '' && $end_date != '') {
         if ($start_date > $end_date) {
             //invalid time period
             $start_date = '';
             $end_date = '';
         }
     }
     //instantiate acl manager
     $acl_man = new DoceboACLManager();
     $acl_man->include_suspended = true;
     //extract user idst from selection
     if ($sel_all) {
         $arr_selected_users = $acl_man->getAllUsersIdst();
     } else {
         $arr_selected_users = $acl_man->getAllUsersFromIdst($arr_selected_users);
     }
     //admin users filter
     $userlevelid = Docebo::user()->getUserLevelId();
     if ($userlevelid != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) {
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
         $admin_users = $acl_man->getAllUsersFromIdst($admin_tree);
         $admin_users = array_unique($admin_users);
         //filter users selection by admin visible users
         $arr_selected_users = array_intersect($arr_selected_users, $admin_users);
         //free some memory
         unset($admin_tree);
         unset($admin_users);
         unset($adminManager);
     }
     //Has the "All games" options been selected ?
     if ($comp_all) {
         $query = "SELECT id_game FROM %lms_games";
         $res = $this->db->query($query);
         $arr_selected_comp = array();
         while (list($id_game) = $this->db->fetch_row($res)) {
             $arr_selected_comp[] = $id_game;
         }
     }
     //check selected users ...
     //$arr_selected_users = array(); //list of users selected in the filter (users, groups and org.branches)
     if ($arr_selected_users <= 0) {
         cout('<p>' . $_ERR_NOUSER . '</p>');
         return;
     }
     //$arr_selected_comp = array(); //list of communications selected in the filter
     if ($arr_selected_comp <= 0) {
         cout('<p>' . $_ERR_NOCOMP . '</p>');
         return;
     }
     $arr_comp = array();
     //array $id_comm => list of generic idst
     foreach ($arr_selected_comp as $id_game) {
         $arr_comp[$id_game] = array();
     }
     //if no users have been assigned to the games, than display as 0 - 0
     $arr_idst = array();
     //flat list of idst
     $query = "SELECT * FROM %lms_games_access WHERE id_comp IN (" . implode(",", $arr_selected_comp) . ")";
     $res = $this->db->query($query);
     while (list($id_game, $idst) = $this->db->fetch_row($res)) {
         $arr_idst[] = $idst;
         $arr_comp[$id_game][] = $idst;
     }
     if (count($arr_idst) <= 0) {
         cout('<p>' . $_ERR_NOUSER . '</p>');
         return;
     }
     $arr_groups = array();
     //flat list of group idst
     $query = "SELECT idst FROM %adm_group WHERE idst IN (" . implode(",", $arr_idst) . ")";
     $res = $this->db->query($query);
     while (list($idst) = $this->db->fetch_row($res)) {
         $arr_groups[] = $idst;
     }
     //if any group selected, then extract users and create an array [id_group][id_user]
     $arr_idst_users_flat = array();
     $arr_members = array();
     //array $idst group => list of idst
     if (count($arr_groups) > 0) {
         $query = "SELECT idst, idstMember FROM %adm_group_members WHERE " . " idst IN (" . implode(",", $arr_groups) . ")" . " AND idstMember IN (" . implode(",", $arr_selected_users) . ")";
         $res = $this->db->query($query);
         while (list($idst, $idstMember) = $this->db->fetch_row($res)) {
             $arr_members[$idst][] = $idstMember;
             $arr_idst_users_flat[] = $idstMember;
         }
     }
     //set an array with all users idst ($_all)
     $diff = array_diff($arr_selected_users, $arr_groups);
     $_all_users = array_merge($arr_idst_users_flat, $diff);
     unset($diff);
     if (count($_all_users) <= 0) {
         cout('<p>' . $_ERR_NOUSER . '</p>');
         return;
     }
     //users have been extracted by group, now calculate report's rows ----------
     //get games info data and put it in an array by id_game => {info}
     $arr_comp_data = array();
     $query = "SELECT * FROM %lms_games WHERE id_game IN (" . implode(",", $arr_selected_comp) . ")";
     $res = $this->db->query($query);
     while ($obj = $this->db->fetch_obj($res)) {
         $arr_comp_data[$obj->id_game] = array('title' => $obj->title, 'type_of' => $obj->type_of, 'start_date' => $obj->start_date, 'end_date' => $obj->end_date);
     }
     //which selected communication has been seen by selected users?
     $arr_viewed = array();
     $query = "SELECT idReference, COUNT(idUser) as count " . " FROM %lms_games_track WHERE status IN ('completed', 'passed') " . " AND idUser IN (" . implode(",", $_all_users) . ") " . " AND idReference IN (" . implode(",", $arr_selected_comp) . ") " . ($start_date != '' ? " AND dateAttempt >= '" . $start_date . "' " : "") . ($end_date != '' ? " AND dateAttempt <= '" . $end_date . "' " : "") . " GROUP BY idReference";
     $res = $this->db->query($query);
     while ($obj = $this->db->fetch_obj($res)) {
         $arr_viewed[$obj->idReference] = $obj->count;
     }
     //calculate average values, no conditions on the status
     $arr_average = array();
     $query = "SELECT idReference, AVG(current_score) as average_current_score, " . " AVG(max_score) as average_max_score, AVG(num_attempts) as average_num_attempts " . " FROM %lms_games_track WHERE idUser IN (" . implode(",", $_all_users) . ") " . " AND idReference IN (" . implode(",", $arr_selected_comp) . ") " . ($start_date != '' ? " AND dateAttempt >= '" . $start_date . "' " : "") . ($end_date != '' ? " AND dateAttempt <= '" . $end_date . "' " : "") . " GROUP BY idReference";
     $res = $this->db->query($query);
     while ($obj = $this->db->fetch_obj($res)) {
         $arr_average[$obj->idReference] = $obj;
     }
     /*
     		//user details buffer
     		$acl_man = Docebo::user()->getAclManager();
     		$user_details = array();
     		$query = "SELECT idst, userid FROM %adm_user WHERE idst IN (".implode(",", $_all_users).")";
     		$res = $this->db->query($query);
     		while ($obj = $this->db->fetch_obj($res)) {
     			$user_details[$obj->idst] = $acl_man($obj->userid);
     		}
     */
     //set table properties and buffer
     $head = array(Lang::t('_GAMES_TITLE', 'report'), Lang::t('_GAMES_TYPE', 'report'), Lang::t('_FROM', 'standard'), Lang::t('_TO', 'standard'), Lang::t('_GAMES_ATTEMPTED', 'report'), Lang::t('_GAMES_TOTAL', 'report'), Lang::t('_GAMES_PERCENT', 'report'), Lang::t('_GAMES_AVG_SCORE', 'report'), Lang::t('_GAMES_AVG_MAX_SCORE', 'report'), Lang::t('_GAMES_AVG_NUM_ATTEMPTS', 'report'));
     $buffer = new ReportTablePrinter();
     $buffer->openTable('', '');
     $buffer->openHeader();
     $buffer->addHeader($head);
     $buffer->closeHeader();
     $buffer->openBody();
     //rows cycle
     foreach ($arr_comp as $id_game => $comp_id_list) {
         //calculate total assigned users for every communication
         $count = 0;
         foreach ($comp_id_list as $idst) {
             if (array_key_exists($idst, $arr_members)) {
                 foreach ($arr_members[$idst] as $idst_user) {
                     $count++;
                 }
             } else {
                 $count++;
             }
         }
         //line (one per communication)
         $line = array();
         $type_of = $arr_comp_data[$id_game]['type_of'];
         $completed_by = isset($arr_viewed[$id_game]) ? $arr_viewed[$id_game] : 0;
         $line[] = $arr_comp_data[$id_game]['title'];
         $line[] = isset($lang_type[$type_of]) ? $lang_type[$type_of] : '';
         $line[] = Format::date($arr_comp_data[$id_game]['start_date'], 'date');
         $line[] = Format::date($arr_comp_data[$id_game]['end_date'], 'date');
         $line[] = $completed_by;
         $line[] = $count;
         $line[] = number_format(($count > 0 ? $completed_by / $count : 0) * 100, 2, ',', '') . ' %';
         $avg1 = isset($arr_average[$id_game]) ? $arr_average[$id_game]->average_current_score : '';
         $avg2 = isset($arr_average[$id_game]) ? $arr_average[$id_game]->average_max_score : '';
         $avg3 = isset($arr_average[$id_game]) ? $arr_average[$id_game]->average_num_attempts : '';
         $line[] = number_format($avg1, 2, ',', '.');
         $line[] = number_format($avg2, 2, ',', '.');
         $line[] = number_format($avg3, 2, ',', '.');
         $buffer->addLine($line);
     }
     $buffer->closeBody();
     $buffer->closeTable();
     cout($buffer->get());
 }
function selSendTo()
{
    checkPerm('view');
    // [TODO] check write or mod. permissions
    // http://127.0.0.1:82/claudio/lms_cvs/appCore/index.php?modname=public_newsletter_admin&op=selsendto&id_send=1
    if (isset($_GET["id_send"]) && $_GET["id_send"] > 0) {
        $id_send = $_GET["id_send"];
    } else {
        die("Newsletter setup error.");
    }
    require_once $GLOBALS['where_lms'] . "/class.module/class.public_user_admin.php";
    $mdir = new Module_Public_User_Admin();
    require_once _base_ . '/lib/lib.preference.php';
    $adminManager = new AdminPreference();
    $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
    $admin_users = $acl_man->getAllUsersFromIdst($admin_tree);
    $mdir->setUserFilter('user', $admin_users);
    $mdir->setUserFilter('group', $admin_tree);
    $out =& $GLOBALS['page'];
    $out->setWorkingZone("content");
    $lang =& DoceboLanguage::createInstance('admin_newsletter', 'framework');
    $back_url = "index.php?modname=public_newsletter_admin&amp;op=selsendto&amp;id_send=" . $id_send;
    if (isset($_POST['okselector'])) {
        $arr_selection = $mdir->getSelection($_POST);
        $send_to_idst = array();
        foreach ($arr_selection as $idstMember) {
            $arr = Docebo::aclm()->getGroupAllUser($idstMember);
            if (is_array($arr) && count($arr) > 0) {
                $send_to_idst = array_merge($arr, $send_to_idst);
                $send_to_idst = array_unique($send_to_idst);
            } else {
                $send_to_idst[] = $idstMember;
            }
            $send_to_idst = array_intersect($send_to_idst, $admin_users);
        }
        foreach ($send_to_idst as $key => $val) {
            $qtxt = "INSERT INTO " . $GLOBALS["prefix_fw"] . "_newsletter_sendto (id_send, idst, stime) ";
            $qtxt .= "VALUES ('" . (int) $id_send . "', '" . (int) $val . "', NOW())";
            $q = sql_query($qtxt);
        }
        $qtxt = "SELECT language FROM " . $GLOBALS["prefix_fw"] . "_newsletter WHERE id='" . $id_send . "'";
        $q = sql_query($qtxt);
        list($lang) = sql_fetch_row($q);
        if ($lang != _ANY_LANG_CODE) {
            $tot = count(Docebo::aclm()->getUsersIdstByLanguage($lang, $send_to_idst));
        } else {
            $tot = count($send_to_idst);
        }
        $qtxt = "UPDATE " . $GLOBALS["prefix_fw"] . "_newsletter SET tot='" . $tot . "' WHERE id='{$id_send}'";
        $q = sql_query($qtxt);
        $back_url = "index.php?modname=public_newsletter_admin&amp;op=summary&amp;tot=" . $tot . "&amp;id_send=" . $id_send;
        Util::jump_to(str_replace("&amp;", "&", $back_url));
    } else {
        if (isset($_POST['cancelselector'])) {
            $info = get_send_info($id_send);
            $file = $info['file'];
            $path = '/appCore/newsletter/';
            require_once _base_ . '/lib/lib.upload.php';
            if ($file != '') {
                sl_open_fileoperations();
                sl_unlink($path . $file);
                sl_close_fileoperations();
            }
            Util::jump_to('index.php?modname=newsletter&op=newsletter');
        } else {
            if (isset($_GET['load'])) {
                $mdir->resetSelection(array());
            }
            $url = "index.php?modname=public_newsletter_admin&amp;op=selsendto&amp;id_send=" . $id_send . "&amp;stayon=1";
            $mdir->show_user_selector = TRUE;
            $mdir->show_group_selector = TRUE;
            if (Get::sett('use_org_chart') == '1') {
                $mdir->show_orgchart_selector = TRUE;
                $mdir->show_orgchart_simple_selector = TRUE;
            } else {
                $mdir->show_orgchart_selector = FALSE;
            }
            $acl_manager =& Docebo::user()->getAclManager();
            if (defined("IN_LMS")) {
                $id_course = (int) $_SESSION['idCourse'];
                $arr_idstGroup = $acl_manager->getGroupsIdstFromBasePath('/lms/course/' . $id_course . '/subscribed/');
                $mdir->setUserFilter('group', $arr_idstGroup);
                $mdir->setGroupFilter('path', '/lms/course/' . $id_course . '/group');
                $mdir->show_orgchart_selector = FALSE;
            }
            // Exclude anonymous user!
            $mdir->setUserFilter('exclude', array($acl_manager->getAnonymousId()));
            $mdir->loadSelector($url, array(Lang::t('_NEWSLETTER', 'admin_newsletter'), Lang::t('_RECIPIENTS', 'admin_newsletter')), "", TRUE);
        }
    }
}
Exemple #6
0
 /**
  * @param int 	$id_course			the id of the course
  *
  * @return array	contains the info of the waiting usersin [user_info] and all the id_user occurrency in [all_user_id]
  */
 function &getWaitingSubscribed($id_course, $edition_id = 0)
 {
     $userlevelid = Docebo::user()->getUserLevelId();
     if ($userlevelid != ADMIN_GROUP_GODADMIN) {
         // BUG FIX 2469: GETTING THE USERS OF THE ADMIN
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $acl_man =& Docebo::user()->getAclManager();
         $admin_courses = $adminManager->getAdminCourse(Docebo::user()->getIdST());
         $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
         $admin_users = $acl_man->getAllUsersFromIdst($admin_tree);
     }
     $users['users_info'] = array();
     $users['all_users_id'] = array();
     $cinfo = $this->getCourseInfo($id_course);
     if ($cinfo['course_type'] == 'classroom') {
         $query = "SELECT cu.idUser, cu.level, cu.subscribed_by, cu.status, cdu.overbooking, cd.id_date, cd.code, cd.name " . " FROM %lms_courseuser AS cu  JOIN %lms_course_date AS cd " . " JOIN %lms_course_date_user AS cdu ON (cd.id_course = cu.idCourse AND " . " cd.id_date = cdu.id_date AND cu.idUser=cdu.id_user) " . " WHERE cd.id_course = " . (int) $id_course . " AND (cu.waiting = 1 OR cdu.overbooking = 1)";
         // BUG FIX 2469: SELECT ONLY THE USER BELONGING TO THE ADMIN
         $query .= $userlevelid != ADMIN_GROUP_GODADMIN ? !empty($admin_users) ? " AND cu.idUser IN (" . implode(',', $admin_users) . ")" : " AND cu.idUser IN (0)" : '';
         $res = sql_query($query);
         while ($obj = sql_fetch_object($res)) {
             $users['users_info'][$obj->idUser] = array('id_user' => $obj->idUser, 'level' => $obj->level, 'subscribed_by' => $obj->subscribed_by, 'status' => $obj->status, 'overbooking' => $obj->overbooking > 0, 'id_date' => $obj->id_date, 'code' => $obj->code, 'name' => $obj->name);
             $users['all_users_id'][$obj->idUser] = $obj->idUser;
             $users['all_users_id'][$obj->subscribed_by] = $obj->subscribed_by;
         }
     } else {
         $query_courseuser = "******" . $GLOBALS['prefix_lms'] . "_courseuser\r\n\t\t\tWHERE idCourse = '" . $id_course . "' AND waiting = '1' AND  edition_id = '" . $edition_id . "'";
         $query_courseuser .= $userlevelid != ADMIN_GROUP_GODADMIN ? !empty($admin_users) ? " AND idUser IN (" . implode(',', $admin_users) . ")" : " AND idUser IN (0)" : '';
         $re_courseuser = sql_query($query_courseuser);
         while (list($id_user, $lv, $subscribed_by, $status) = sql_fetch_row($re_courseuser)) {
             $users['users_info'][$id_user] = array('id_user' => $id_user, 'level' => $lv, 'subscribed_by' => $subscribed_by, 'status' => $status);
             $users['all_users_id'][$id_user] = $id_user;
             $users['all_users_id'][$subscribed_by] = $subscribed_by;
         }
     }
     return $users;
 }
 public function getCoursePathSubscriptionsList($id_path, $filter = false)
 {
     require_once _lms_ . '/lib/lib.coursepath.php';
     $cman = new CoursePath_Manager();
     $courses = $cman->getAllCourses(array($id_path));
     if (empty($courses)) {
         //...
     }
     $query = "SELECT DISTINCT s.idUser " . " FROM (%lms_courseuser as s JOIN %lms_coursepath_user as p " . " ON (s.idUser = p.idUser)) " . " JOIN %adm_user as u " . " ON (s.idUser = u.idst) " . " WHERE p.id_path = " . (int) $id_path . " AND s.idCourse IN (" . implode(",", array_values($courses)) . ") ";
     //." GROUP BY 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') ";
         }
         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 IS NULL OR s.date_expire='' OR s.date_expire='0000-00-00 00:00:00') ";
                     break;
                 default:
                     //all ...
                     break;
             }
         }
     }
     if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
         require_once _base_ . '/lib/lib.preference.php';
         $acl_man = new DoceboACLManager();
         $adminManager = new AdminPreference();
         $admin_tree = $adminManager->getAdminTree(getLogUserId());
         $admin_users = $acl_man->getAllUsersFromSelection($admin_tree);
         $query .= " AND s.idUser IN (" . implode(',', $admin_users) . ")";
     }
     $output = array();
     $res = sql_query($query);
     if ($res) {
         while (list($idst) = sql_fetch_row($res)) {
             $output[] = $idst;
         }
     }
     return $output;
 }
Exemple #8
0
 public function loadCourse($start_index, $results, $sort, $dir, $filter = false)
 {
     $userlevelid = Docebo::user()->getUserLevelId();
     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());
         $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
         $admin_users = $acl_man->getAllUsersFromIdst($admin_tree);
     }
     $query = "SELECT c.*, COUNT(cu.idUser) as subscriptions, SUM(cu.waiting) as pending" . " FROM %lms_course AS c" . " LEFT JOIN %lms_courseuser AS cu ON c.idCourse = cu.idCourse" . ($userlevelid != ADMIN_GROUP_GODADMIN ? !empty($admin_users) ? " AND cu.idUser IN (" . implode(',', $admin_users) . ")" : " AND cu.idUser IN (0)" : '') . " WHERE c.course_type <> 'assessment'";
     if ($filter) {
         if (isset($filter['id_category'])) {
             if (isset($filter['descendants']) && $filter['descendants']) {
                 $query .= " AND c.idCategory IN (" . implode(',', $this->getCategoryDescendants($filter['id_category'])) . ")";
             } else {
                 $query .= " AND c.idCategory = " . (int) $filter['id_category'];
             }
         }
         if (isset($filter['text']) && $filter['text'] !== '') {
             $query .= " AND( c.name LIKE '%" . $filter['text'] . "%'" . " OR c.code LIKE '%" . $filter['text'] . "%')";
         }
         if (isset($filter['waiting']) && $filter['waiting']) {
             $query_course = "SELECT idCourse" . " FROM %lms_courseuser" . " WHERE waiting = 1";
             $result = sql_query($query_course);
             $id_course_filter = array(0 => 0);
             while (list($id_course_tmp) = sql_fetch_row($result)) {
                 $id_course_filter[$id_course_tmp] = $id_course_tmp;
             }
             $query .= " AND c.idCourse IN (" . implode(',', $id_course_filter) . ")";
         }
         if (isset($filter['classroom']) && $filter['classroom']) {
             $query .= " AND course_type = 'classroom'";
         }
     }
     if ($userlevelid != ADMIN_GROUP_GODADMIN) {
         $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 CoursePath_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);
         }
         if (!$all_courses) {
             if (empty($admin_courses['course'])) {
                 $query .= " AND 0 ";
             } else {
                 $query .= " AND c.idCourse IN (" . implode(',', $admin_courses['course']) . ") ";
             }
         }
     }
     $query .= " GROUP BY c.idCourse" . " ORDER BY " . $sort . " " . $dir;
     if ((int) $results > 0) {
         $query .= " LIMIT " . (int) $start_index . ", " . (int) $results;
     }
     return sql_query($query);
 }
 public function searchGroupsByGroupid($query, $limit = false, $filter = false)
 {
     if ((int) $limit <= 0) {
         $limit = Get::sett('visuItem', 25);
     }
     $output = array();
     $_qfilter = "";
     if ($filter) {
         $ulevel = Docebo::user()->getUserLevelId();
         if ($ulevel != ADMIN_GROUP_GODADMIN) {
             require_once _base_ . '/lib/lib.preference.php';
             $adminManager = new AdminPreference();
             $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
             //$admin_groups = $this->_extractGroupsFromMixedIdst($admin_tree);
             $_qfilter .= " AND idst IN (" . implode(",", $admin_tree) . ") ";
         }
     }
     $query = "SELECT idst, groupid FROM %adm_group " . " WHERE groupid LIKE '%" . $query . "%' " . $_qfilter . " " . " AND hidden='false' AND type<>'course' ORDER BY groupid " . ((int) $limit > 0 ? " LIMIT 0, " . (int) $limit : "");
     $res = $this->db->query($query);
     if ($res) {
         while ($obj = $this->db->fetch_obj($res)) {
             $output[] = $obj;
         }
     }
     return $output;
 }
 public function searchFunctionalRolesByName($query, $limit = false, $language = false, $filter = false)
 {
     if ((int) $limit <= 0) {
         $limit = Get::sett('visuItem', 25);
     }
     $output = array();
     $_qfilter = "";
     if ($filter) {
         $ulevel = Docebo::user()->getUserLevelId();
         if ($ulevel != ADMIN_GROUP_GODADMIN) {
             require_once _base_ . '/lib/lib.preference.php';
             $adminManager = new AdminPreference();
             $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
             $_qfilter .= " AND g.idst IN (" . implode(",", $admin_tree) . ") ";
         }
     }
     $lang_code = $language ? $language : getLanguage();
     $query = "SELECT g.idst as id_fncrole, l.name FROM %adm_group as g " . " JOIN " . $this->_getRolesLangTable() . " as l ON (g.idst = l.id_fncrole AND l.lang_code='" . $lang_code . "')" . " WHERE l.name LIKE '%" . $query . "%' " . $_qfilter . " ORDER BY l.name " . ((int) $limit > 0 ? " LIMIT 0, " . (int) $limit : "");
     $res = $this->db->query($query);
     if ($res) {
         while ($obj = $this->db->fetch_obj($res)) {
             $output[] = $obj;
         }
     }
     return $output;
 }
 public function cataloguesubscribeusersTask()
 {
     require_once _adm_ . '/lib/lib.directory.php';
     require_once _adm_ . '/class.module/class.directory.php';
     require_once _lms_ . '/lib/lib.course.php';
     require_once _lms_ . '/lib/lib.edition.php';
     require_once _lms_ . '/lib/lib.date.php';
     $acl_man =& Docebo::user()->getAclManager();
     $edition_man = new EditionManager();
     $date_man = new DateManager();
     $id_catalogue = Get::req('id_catalogue', DOTY_INT, 0);
     $back_url = 'index.php?modname=catalogue&op=catlist&of_platform=lms';
     $jump_url = 'index.php?r=' . $this->link . '/cataloguesubscribeusers';
     //if we are a subadmin, check which courses/catalogues we can see
     $can_see_catalogue = true;
     if (Docebo::user()->getUserLevelId() != ADMIN_GROUP_GODADMIN) {
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $admin_courses = $adminManager->getAdminCourse(Docebo::user()->getIdST());
         $all_courses = false;
         if (isset($admin_courses['course'][0])) {
             $all_courses = true;
         }
         if (isset($admin_courses['course'][-1])) {
             require_once _lms_ . '/lib/lib.catalogue.php';
             $cat_man = new Catalogue_Manager();
             $admin_courses['catalogue'] = $cat_man->getUserAllCatalogueId(Docebo::user()->getIdSt());
             if (count($admin_courses['catalogue']) == 0 && Get::sett('on_catalogue_empty', 'off') == 'on') {
                 $all_courses = true;
             }
         }
         if (!isset($admin_courses['catalogue'][$id_catalogue])) {
             $can_see_catalogue = false;
         }
     }
     //invalid specified catalogue
     if ($id_catalogue <= 0 || !$can_see_catalogue) {
         $this->render('invalid', array('message' => Lang::t('_INVALID_CATALOGUE', 'subscribe'), 'back_url' => $back_url));
         return;
     }
     //check if the selected catalogue has any courses
     $courses_list = $this->_getCatalogueCourses($id_catalogue, isset($admin_courses['course']) ? $admin_courses['course'] : false);
     if (count($courses_list) <= 0) {
         $this->render('invalid', array('message' => Lang::t('_NO_COURSES_IN_THE_CATALOGUE', 'subscribe'), 'back_url' => $back_url));
         return;
     }
     $name = $this->_getCatalogueName($id_catalogue);
     if (isset($_POST['cancelselector'])) {
         //--- UNDO: return to catalogue list -------------------------------------
         Util::jump_to($back_url);
     } elseif (isset($_POST['okselector'])) {
         //--- USERS SELECTION IS CONFIRMED: now select editions (if any) ---------
         //check user selection
         $_selector = new UserSelector();
         $json = new Services_JSON();
         $_entity_selected = $_selector->getSelection($_POST);
         $user_selected =& $acl_man->getAllUsersFromSelection($_entity_selected);
         //free some memory from garbage variables
         unset($_selector);
         unset($_entity_selected);
         //if no user selected, than give invalid screen
         if (!is_array($user_selected) || count($user_selected) <= 0) {
             $this->render('invalid', array('message' => Lang::t('_EMPTY_SELECTION', 'subscribe'), 'back_url' => $back_url));
             return;
         }
         //extract editions info data by courses
         $editions_list = $edition_man->getEditionsInfoByCourses(array_keys($courses_list), true);
         //extract editions info data by courses
         $classrooms_list = $date_man->getDatesInfoByCourses(array_keys($courses_list), true);
         $tables = array('editions' => false, 'classrooms' => false);
         //check if the catalogue has editions; if any, than set the editions selector
         if (count($editions_list) > 0 || count($classrooms_list) > 0) {
             //set title
             $page_title_arr = array($back_url => Lang::t('_SUBSCRIBE', 'subscribe'), $name, Lang::t('_SUBSCRIBE', 'subscribe'));
             if (count($editions_list) > 0) {
                 //instantiate a new table for editions selection
                 require_once _base_ . '/lib/lib.table.php';
                 $tb = new Table(0, Lang::t('_CATALOGUE_SUBSCRIBE_CHOOSE_EDITIONS', 'subscribe'), Lang::t('_CATALOGUE_SUBSCRIBE_CHOOSE_EDITIONS', 'subscribe'));
                 $head_style = array('align_center', '', 'align_center');
                 $head_label = array(Lang::t('_COURSE_CODE', 'course'), Lang::t('_COURSE_NAME', 'course'), Lang::t('_CLASSROOM_EDITION', 'course'));
                 $tb->addHead($head_label, $head_style);
                 //set table rows
                 foreach ($editions_list as $id_course => $editions) {
                     $line = array();
                     $cinfo = $courses_list[$id_course];
                     $line[] = $cinfo->code;
                     $line[] = $cinfo->name;
                     //create the dropdown with the editions for every course
                     $_dropdown = array();
                     foreach ($editions as $id_edition => $ed_info) {
                         $_line_content = '';
                         //print begin and end date
                         if ($ed_info->date_begin != '') {
                             $_line_content .= '[' . $ed_info->code . '] ' . $ed_info->name . ' ' . '(' . Format::date($ed_info->date_begin, 'date') . ' - ' . Format::date($ed_info->date_end, 'date') . ')';
                         }
                         //check if the string is valid
                         if ($_line_content == '') {
                             //...
                         }
                         //add to dropdown list and sort the list alphabetically
                         $_dropdown[$id_edition] = $_line_content;
                         asort($_dropdown);
                     }
                     $line[] = Form::getInputDropdown('dropdown', 'sel_editions_' . $id_course, 'sel_editions[' . $id_course . ']', $_dropdown, false, '');
                     $tb->addBody($line);
                 }
                 $tables['editions'] = $tb;
             }
             if (count($classrooms_list) > 0) {
                 //instantiate a new table for editions selection
                 require_once _base_ . '/lib/lib.table.php';
                 $tb = new Table(0, Lang::t('_COURSE_TYPE_EDITION', 'course'), Lang::t('_CLASSROOM', 'standard'));
                 $head_style = array('align_center', '', 'align_center');
                 $head_label = array(Lang::t('_COURSE_CODE', 'course'), Lang::t('_COURSE_NAME', 'course'), Lang::t('_CLASSROOM_EDITION', 'course'));
                 $tb->addHead($head_label, $head_style);
                 //set table rows
                 foreach ($classrooms_list as $id_course => $classrooms) {
                     $line = array();
                     $cinfo = $courses_list[$id_course];
                     $line[] = $cinfo->code;
                     $line[] = $cinfo->name;
                     //create the dropdown with the editions for every course
                     $_dropdown = array();
                     foreach ($classrooms as $id_date => $cl_info) {
                         $_line_content = '';
                         //print begin and end date
                         if ($cl_info->date_begin != '') {
                             $_line_content .= '[' . $cl_info->code . '] ' . $cl_info->name . ' ' . '(' . Format::date($cl_info->date_begin, 'date') . ' - ' . Format::date($cl_info->date_end, 'date') . ')';
                         }
                         //check if the string is valid
                         if ($_line_content == '') {
                             //...
                         }
                         //add to dropdown list and sort the list alphabetically
                         $_dropdown[$id_date] = $_line_content;
                         asort($_dropdown);
                     }
                     $line[] = Form::getInputDropdown('dropdown', 'sel_classrooms_' . $id_course, 'sel_classrooms[' . $id_course . ']', $_dropdown, false, '');
                     $tb->addBody($line);
                 }
                 $tables['classrooms'] = $tb;
             }
             $this->render('catalogue_editions', array('id_catalogue' => $id_catalogue, 'page_title_arr' => $page_title_arr, 'num_users_selected' => count($user_selected), '_sel_users' => $json->encode($user_selected), 'tables' => $tables));
         } else {
             //no editions in the catalogue's courses, call the save operation directly
             $data = array();
             foreach ($user_selected as $user) {
                 foreach ($courses_list as $idCourse => $course) {
                     $data[] = array($user, $idCourse, false, false);
                 }
             }
             $num_subscribed = $this->_subscribeUsersToCatalogue($data);
             Util::jump_to($back_url . '&res=' . $num_subscribed);
             //_operation_successful
         }
     } else {
         //--- USER SELECTION IS IN PROGRESS: show selector -----------------------
         $user_select = new UserSelector();
         $user_select->show_user_selector = TRUE;
         $user_select->show_group_selector = TRUE;
         $user_select->show_orgchart_selector = TRUE;
         //$user_select->show_orgchart_simple_selector = TRUE;
         //filter selectable user by sub-admin permission
         $user_select->setUserFilter('exclude', array($this->acl_man->getAnonymousId()));
         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_select->setUserFilter('user', $admin_users);
             $user_select->setUserFilter('group', $admin_tree);
         }
         if (Get::req('is_updating', DOTY_INT, false)) {
             //...
         } else {
             $user_select->requested_tab = PEOPLEVIEW_TAB;
             $user_select->resetSelection();
         }
         $page_title_arr = array($back_url => Lang::t('_SUBSCRIBE', 'subscribe'), $name, Lang::t('_SUBSCRIBE', 'subscribe'));
         $user_select->addFormInfo(Form::getHidden('is_updating', 'is_updating', 1) . Form::getHidden('id_catalogue', 'id_catalogue', $id_catalogue));
         //$user_select->setPageTitle($page_title_arr);
         //$user_select->resetSelection($_SESSION['report_tempdata']['rows_filter']['users']);
         $user_select->loadSelector(Util::str_replace_once('&', '&amp;', $jump_url), $page_title_arr, false, true);
     }
 }
Exemple #12
0
 function addsubscription()
 {
     checkPerm('subscribe');
     require_once _base_ . '/lib/lib.form.php';
     require_once _adm_ . '/class.module/class.directory.php';
     require_once _lms_ . '/lib/lib.subscribe.php';
     require_once _lms_ . '/lib/lib.coursepath.php';
     $id_path = importVar('id_path', true, 0);
     $lang =& DoceboLanguage::createInstance('coursepath', 'lms');
     $out =& $GLOBALS['page'];
     $acl_man =& Docebo::user()->getAclManager();
     if (isset($_POST['cancelselector'])) {
         Util::jump_to('index.php?modname=coursepath&amp;op=pathlist');
     }
     $user_select = new UserSelector();
     $user_select->show_user_selector = TRUE;
     $user_select->show_group_selector = TRUE;
     $user_select->show_orgchart_selector = TRUE;
     $user_select->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 = $acl_man->getAllUsersFromIdst($admin_tree);
         $user_select->setUserFilter('user', $admin_users);
         $user_select->setUserFilter('group', $admin_tree);
     }
     $query_pathlist = "\r\n\tSELECT path_name, subscribe_method\r\n\tFROM " . $GLOBALS['prefix_lms'] . "_coursepath\r\n\tWHERE id_path = '" . $id_path . "'\r\n\tORDER BY path_name ";
     list($path_name, $subscribe_method) = sql_fetch_row(sql_query($query_pathlist));
     if (isset($_GET['load'])) {
         $cp_man = new CoursePath_Manager();
         $users = $cp_man->getSubscribed($id_path);
         $user_select->resetSelection($users);
     }
     if (isset($_POST['okselector'])) {
         $acl_manager = new DoceboACLManager();
         $user_selected = $user_select->getSelection($_POST);
         $user_selected =& $acl_manager->getAllUsersFromIdst($user_selected);
         $user_selected = array_unique($user_selected);
         $cp_man = new CoursePath_Manager();
         $users = $cp_man->getSubscribed($id_path);
         $user_selected = array_diff($user_selected, $users);
         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 = $acl_man->getAllUsersFromIdst($admin_tree);
             $user_selected = array_intersect($user_selected, $admin_users);
         }
         if (empty($user_selected)) {
             Util::jump_to('index.php?modname=coursepath&amp;op=pathlist');
         }
         $cpath_man = new CoursePath_Manager();
         $subs_man = new CourseSubscribe_Management();
         $courses = $cpath_man->getAllCourses(array($id_path));
         require_once $GLOBALS['where_lms'] . '/lib/lib.coursepath.php';
         $course_man = new Man_Course();
         $classroom = $course_man->getAllCourses(false, 'classroom', $courses);
         $edition = $course_man->getAllCourses(false, 'edition', $courses);
         if (!empty($classroom) || !empty($edition)) {
             $user_selected_post = urlencode(serialize($user_selected));
             cout(getTitleArea(array('index.php?modname=coursepath&amp;op=pathlist' => $lang->def('_COURSEPATH'), $path_name), 'coursepath') . '<div class="std_block">' . Form::openForm('edition_selection_form', 'index.php?modname=coursepath&amp;op=addsubscriptionedition&amp;id_path=' . $id_path) . Form::getHidden('users', 'users', $user_selected_post));
             if (!empty($classroom)) {
                 require_once _lms_ . '/lib/lib.date.php';
                 $date_man = new DateManager();
                 foreach ($classroom as $id_course => $info) {
                     $editions = $date_man->getCourseDate($id_course, true);
                     $edition_for_dropdown = array();
                     $edition_for_dropdown[0] = Lang::t('_NONE', 'coursepath');
                     foreach ($editions as $editions_info) {
                         $edition_for_dropdown[$editions_info['id_date']] = $editions_info['code'] . ' - ' . $editions_info['name'] . ' - ' . Format::date($editions_info['date_begin'], 'date') . ' - ' . Format::date($editions_info['date_end'], 'date');
                     }
                     cout(Form::getDropdown(Lang::t('_EDITION_SELECTION', 'coursepath') . ' : ' . $info['code'] . ' - ' . $info['name'], 'classroom_' . $id_course, 'classroom_' . $id_course, $edition_for_dropdown));
                 }
             }
             if (!empty($edition)) {
                 require_once _lms_ . '/lib/lib.edition.php';
                 $edition_man = new EditionManager();
                 foreach ($edition as $id_course => $info) {
                     $editions = $edition_man->getEditionsInfoByCourses($id_course);
                     $edition_for_dropdown = array();
                     $edition_for_dropdown[0] = Lang::t('_NONE', 'coursepath');
                     foreach ($editions[$id_course] as $editions_info) {
                         $edition_for_dropdown[$editions_info['id_edition']] = $editions_info['code'] . ' - ' . $editions_info['name'] . ' - ' . Format::date($editions_info['date_begin'], 'date') . ' - ' . Format::date($editions_info['date_end'], 'date');
                     }
                     cout(Form::getDropdown(Lang::t('_EDITION_SELECTION', 'coursepath') . ' : ' . $info['code'] . ' - ' . $info['name'], 'edition_' . $id_course, 'edition_' . $id_course, $edition_for_dropdown));
                 }
             }
             cout(Form::openButtonSpace() . Form::getButton('save', 'save', Lang::t('_SAVE', 'coursepath')) . Form::getButton('undo', 'undo', Lang::t('_UNDO', 'coursepath')) . Form::closeButtonSpace() . Form::closeForm() . '</div>');
         } else {
             $re = true;
             if ($subscribe_method != 1 && !checkPerm('moderate', true)) {
                 $waiting = 1;
             } else {
                 $waiting = 0;
             }
             $users_subsc = array();
             require_once $GLOBALS['where_lms'] . '/lib/lib.coursepath.php';
             $course_man = new Man_Course();
             $assessment = $course_man->getAllCourses(false, 'assessment', $courses);
             while (list(, $id_user) = each($user_selected)) {
                 $text_query = "\r\n\t\t\t\tINSERT INTO " . $GLOBALS['prefix_lms'] . "_coursepath_user\r\n\t\t\t\t( id_path, idUser, waiting, subscribed_by ) VALUES\r\n\t\t\t\t( '" . $id_path . "', '" . $id_user . "', '" . $waiting . "', '" . getLogUserId() . "' )";
                 $re_s = sql_query($text_query);
                 if ($re_s == true) {
                     $users_subsc[] = $id_user;
                 }
                 $re &= $re_s;
                 foreach ($assessment as $id_assessment => $assessment_info) {
                     sql_query("INSERT INTO %lms_assessment_user (id_assessment, id_user, type_of) VALUES ('" . $id_assessment . "', '" . $id_user . "', 'user')");
                 }
             }
             // now subscribe user to all the course
             if ($waiting == 0) {
                 $re &= $subs_man->multipleSubscribe($users_subsc, $courses, 3);
             }
             Util::jump_to('index.php?modname=coursepath&amp;op=pathlist&result=' . ($re ? 'ok' : 'err'));
         }
     } else {
         $user_select->setPageTitle(getTitleArea(array('index.php?modname=coursepath&amp;op=pathlist' => $lang->def('_COURSEPATH'), $path_name), 'coursepath'));
         $user_select->loadSelector('index.php?modname=coursepath&amp;op=addsubscription&amp;id_path=' . $id_path, $lang->def('_SUBSCRIBE'), false, true);
     }
 }
 public function assign_users()
 {
     //check permissions
     if (!$this->permissions['associate_user']) {
         Util::jump_to('index.php?r=' . $this->base_link_competence . '/show');
     }
     require_once _adm_ . '/lib/lib.directory.php';
     require_once _adm_ . '/class.module/class.directory.php';
     //read inputs
     $id_competence = Get::req('id_competence', DOTY_INT, -1);
     if ($id_competence <= 0) {
         $this->render('invalid', array('message' => $this->_getErrorMessage("invalid competence"), 'back_url' => 'index.php?r=' . $this->base_link_competence . '/show'));
         return;
     }
     //navigation urls
     $back_url = 'index.php?r=' . $this->base_link_competence . '/show_users&id=' . (int) $id_competence;
     $jump_url = 'index.php?r=' . $this->base_link_competence . '/assign_users&id=' . (int) $id_competence;
     //competence details
     $info = $this->model->getCompetenceInfo($id_competence);
     $name = $this->model->getCompetenceName($id_competence);
     //page_title
     $page_title_arr = array($back_url => Lang::t('_COMPETENCES', 'competences'), $name, Lang::t('_ASSIGN_USERS', 'competences'));
     if (isset($_POST['cancelselector'])) {
         //--- UNDO: return to catalogue list -------------------------------------
         Util::jump_to($back_url);
     } elseif (isset($_POST['okselector'])) {
         //--- SAVE: users selection has been done --------------------------------
         $acl_man = Docebo::user()->getAclManager();
         $user_selector = new UserSelector();
         $selection = $user_selector->getSelection($_POST);
         $users_selected =& $acl_man->getAllUsersFromIdst($selection);
         $competence_users = $this->model->getCompetenceUsers($id_competence, true);
         $users_existent = array_keys($competence_users);
         //retrieve newly selected users
         $_common_users = array_intersect($users_existent, $users_selected);
         $_new_users = array_diff($users_selected, $_common_users);
         $_old_users = array_diff($users_existent, $_common_users);
         unset($_common_users);
         //free some memory
         //if no users to add: check removed users (if any) then go back
         if (empty($_new_users)) {
             $res = $this->model->removeCompetenceUsers($id_competence, $_old_users, true);
             $message = $res ? 'ok_assign' : 'err_assign';
             Util::jump_to('index.php?r=' . $this->base_link_competence . '/show_users&id=' . (int) $id_competence . '&res=' . $message);
         }
         //assign scores, if the competence type is 'score' (otherwise assign directly score 1 and go back)
         $type = $info->type;
         if ($type == 'score') {
             require_once _base_ . '/lib/lib.table.php';
             $table = new Table();
             $head_label = array();
             $head_style = array();
             $head_label[] = Lang::t('_USERNAME', 'standard');
             $head_label[] = Lang::t('_NAME');
             $head_label[] = Lang::t('_SCORE', 'competences');
             $head_style[] = '';
             $head_style[] = '';
             $head_style[] = 'img-cell';
             $table->addHead($head_label, $head_style);
             $user_model = new UsermanagementAdm();
             $_user_data = $user_model->getUsersDetails($_new_users, true, true);
             $_std_score = 0;
             foreach ($_new_users as $id_user) {
                 if (isset($_user_data[$id_user]) && is_object($_user_data[$id_user])) {
                     $line = array();
                     $line[] = $acl_man->relativeId($_user_data[$id_user]->userid);
                     $line[] = $_user_data[$id_user]->lastname . " " . $_user_data[$id_user]->firstname;
                     $line[] = Form::getInputTextfield('textfield', 'assign_score_' . $id_user, 'assign_score[' . $id_user . ']', $_std_score, '', 255, '');
                     $table->addBody($line);
                 }
             }
             $foot = array();
             $foot[] = array('label' => '<b>' . Lang::t('_TOTAL', 'standard') . ': ' . count($_new_users) . '</b>', 'colspan' => 2);
             $foot[] = Form::getInputTextfield('textfield', '_score_', '_score_', $_std_score, '', 255, '') . '<br />' . Form::getButton('set_score', false, Lang::t('_SET', 'standard')) . Form::getButton('reset_score', false, Lang::t('_RESET', 'standard'));
             $table->addFoot($foot);
             $this->render('users_assign', array('id_competence' => $id_competence, 'title' => $page_title_arr, 'type' => $type, 'form_url' => 'index.php?r=' . $this->base_link_competence . '/assign_users_action', 'table' => $table, 'score_std_value' => $_std_score, 'del_selection' => implode(",", $_old_users)));
         } else {
             $data = array();
             foreach ($_new_users as $id_user) {
                 $data[$id_user] = 1;
             }
             $res1 = $this->model->assignCompetenceUsers($id_competence, $data, true);
             $res2 = $this->model->removeCompetenceUsers($id_competence, $_old_users, true);
             $message = $res1 && $res2 ? 'ok_assign' : 'err_assign';
             Util::jump_to('index.php?r=' . $this->base_link_competence . '/show_users&id=' . (int) $id_competence . '&res=' . $message);
         }
     } else {
         //--- USER SELECTION IS IN PROGRESS: show selector -----------------------
         $user_selector = new UserSelector();
         $user_selector->show_user_selector = TRUE;
         $user_selector->show_group_selector = TRUE;
         $user_selector->show_orgchart_selector = TRUE;
         $user_selector->show_fncrole_selector = TRUE;
         //$user_select->show_orgchart_simple_selector = TRUE;
         //filter selectable user by sub-admin permission
         $acl_man = Docebo::user()->getAclManager();
         $user_selector->setUserFilter('exclude', array($acl_man->getAnonymousId()));
         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 = $acl_man->getAllUsersFromIdst($admin_tree);
             $user_selector->setUserFilter('user', $admin_users);
             $user_selector->setUserFilter('group', $admin_tree);
         }
         if (Get::req('is_updating', DOTY_INT, false)) {
             //...
         } else {
             //set initial selection
             $selection = $this->model->getCompetenceUsers($id_competence);
             $user_selector->requested_tab = PEOPLEVIEW_TAB;
             $user_selector->resetSelection($selection);
         }
         $user_selector->addFormInfo(Form::getHidden('is_updating', 'is_updating', 1) . Form::getHidden('id_competence', 'id_competence', $id_competence));
         //draw selector
         $user_selector->loadSelector(Util::str_replace_once('&', '&amp;', $jump_url), $page_title_arr, false, true);
     }
 }
 function _get_users_query($type = 'html', $report_data = NULL, $other = '')
 {
     //$jump_url, $alluser, $org_chart_subdivision, $start_time, $end_time
     if ($report_data == NULL) {
         $ref =& $_SESSION['report_tempdata'];
     } else {
         $ref =& $report_data;
     }
     $all_courses = $ref['rows_filter']['all_courses'];
     $course_selected =& $ref['rows_filter']['selected_courses'];
     $time_range = $ref['columns_filter']['time_belt']['time_range'];
     $start_time = $ref['columns_filter']['time_belt']['start_date'];
     $end_time = $ref['columns_filter']['time_belt']['end_date'];
     $org_chart_subdivision = $ref['columns_filter']['org_chart_subdivision'];
     $filter_cols = $ref['columns_filter']['showed_cols'];
     $show_percent = isset($ref['columns_filter']['show_percent']) ? (bool) $ref['columns_filter']['show_percent'] : true;
     $show_suspended = isset($ref['columns_filter']['show_suspended']) ? (bool) $ref['columns_filter']['show_suspended'] : false;
     $only_students = isset($ref['columns_filter']['only_students']) ? (bool) $ref['columns_filter']['only_students'] : false;
     $show_assessment = isset($ref['columns_filter']['show_assessment']) ? (bool) $ref['columns_filter']['show_assessment'] : false;
     $show_classrooms_editions = isset($ref['columns_filter']['show_classrooms_editions']) ? (bool) $ref['columns_filter']['show_classrooms_editions'] : false;
     if ($time_range != 0) {
         $start_time = date("Y-m-d H:i:s", time() - $time_range * 24 * 3600);
         $end_time = date("Y-m-d H:i:s");
     } else {
         $start_time = $start_time;
         $end_time = $end_time;
     }
     $alluser = $ref['columns_filter']['all_users'];
     $output = '';
     $lang =& DoceboLanguage::createInstance('course', 'framework');
     require_once $GLOBALS['where_framework'] . '/lib/lib.directory.php';
     require_once _base_ . '/lib/lib.userselector.php';
     $acl_man = new DoceboACLManager();
     $acl_man->include_suspended = TRUE;
     $course_man = new Man_Course();
     $user_level = Docebo::user()->getUserLevelId();
     if ($alluser == 0) {
         $user_selected =& $acl_man->getAllUsersFromSelection($ref['columns_filter']['users']);
     } else {
         $user_selected =& $acl_man->getAllUsersIdst();
     }
     //apply filters for sub-admins
     if ($user_level != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) {
         //filter users
         $alluser = 0;
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $admin_users = $adminManager->getAdminUsers(Docebo::user()->getIdST());
         $admin_users = $acl_man->getAllUsersFromSelection($admin_users);
         $user_selected = array_intersect($user_selected, $admin_users);
         unset($admin_users);
         //filter courses
         $admin_courses = $adminManager->getAdminCourse(Docebo::user()->getIdST());
         if ($all_courses) {
             $all_courses = false;
             $rs = sql_query("SELECT idCourse FROM %lms_course");
             $course_selected = array();
             while (list($id_course) = sql_fetch_row($rs)) {
                 $course_selected[] = $id_course;
             }
         }
         if (isset($admin_courses['course'][0])) {
             //No filter
         } 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') {
                 //No filter
             }
             if (!empty($admin_courses['course'])) {
                 $_clist = array_values($admin_courses['course']);
                 $course_selected = array_intersect($course_selected, $_clist);
             } else {
                 $course_selected = array();
             }
         } 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);
             if (!empty($admin_courses['course'])) {
                 $_clist = array_values($admin_courses['course']);
                 $course_selected = array_intersect($course_selected, $_clist);
             } else {
                 $course_selected = array();
             }
         }
         unset($admin_courses);
     }
     if ($org_chart_subdivision == 1) {
         require_once $GLOBALS['where_framework'] . '/lib/lib.orgchart.php';
         $org_man = new OrgChartManager();
         if ($alluser == 1) {
             $user_level = Docebo::user()->getUserLevelId();
             if ($user_level != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) {
                 $elem_selected = $user_selected;
             } else {
                 $elem_selected = $org_man->getAllGroupIdFolder();
             }
         } else {
             $elem_selected = $user_selected;
         }
         $org_name = $org_man->getFolderFormIdst($elem_selected);
         if ($user_level != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) {
             require_once _base_ . '/lib/lib.preference.php';
             $adminManager = new AdminPreference();
             $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST());
             $org_name_temp = $org_name;
             $org_name = array();
             foreach ($org_name_temp as $id => $value) {
                 if (isset($admin_tree[$id])) {
                     $org_name[$id] = $value;
                 }
             }
         }
     } else {
         $elem_selected = array();
     }
     if (empty($user_selected)) {
         //no users to display
         $GLOBALS['page']->add($lang->def('_NULL_SELECTION'), 'content');
         return;
     }
     // Retrieve all the course
     $id_courses = array();
     if (!$show_classrooms_editions) {
         $q_courses = "SELECT c.idCourse, c.code, c.name, c.description, c.course_type " . " FROM %lms_course As c " . ($show_assessment ? "" : " WHERE c.course_type <> 'assessment' ") . " ORDER BY c.code, c.name";
         $r_courses = sql_query($q_courses);
         while (list($id, $code, $name, $description, $course_type) = sql_fetch_row($r_courses)) {
             $id_courses[$id] = array('id_course' => $id, 'code' => $code, 'name' => $name, 'description' => $description, 'course_type' => $course_type);
         }
     } else {
         $q_courses = "SELECT c.idCourse, c.code, c.name, c.description, c.course_type, d.id_date " . " FROM %lms_course As c LEFT JOIN %lms_course_date AS d ON (c.idCourse = d.id_course) " . ($show_assessment ? "" : " WHERE c.course_type <> 'assessment' ") . " ORDER BY c.code, c.name, d.code, d.name";
         $r_courses = sql_query($q_courses);
         while (list($id, $code, $name, $description, $course_type, $id_date) = sql_fetch_row($r_courses)) {
             $index = $course_type == 'classroom' ? $id . '_' . $id_date : $id;
             $id_courses[$index] = array('id_course' => $id, 'code' => $code, 'name' => $name, 'description' => $description, 'course_type' => $course_type);
         }
     }
     if (empty($id_courses)) {
         //no courses on the platform
         cout($lang->def('_NULL_COURSE_SELECTION'), 'content');
         return;
     }
     $id_coursedates = array();
     $date_now = Format::date(date("Y-m-d H:i:s"));
     $classrooms_editions_info = array();
     if ($show_classrooms_editions) {
         //retrieve classrooms info
         $query = "SELECT d.*, MIN(dd.date_begin) AS date_1, MAX(dd.date_end) AS date_2 " . " FROM %lms_course_date AS d JOIN %lms_course_date_day AS dd ON (d.id_date = dd.id_date) " . (!$all_courses ? " AND d.id_course IN (" . implode(',', $course_selected) . ") " : "") . " GROUP BY dd.id_date";
         $res = sql_query($query);
         while ($obj = sql_fetch_object($res)) {
             $classrooms_editions_info['classrooms'][$obj->id_date] = $obj;
         }
         //retrieve editions info
         //TO DO ...
     }
     if (!$show_classrooms_editions) {
         if ($org_chart_subdivision == 0) {
             $query_course_user = "******" . " FROM %lms_courseuser AS cu JOIN %adm_user AS u ON (cu.idUser = u.idst) " . " WHERE cu.idUser IN ( " . implode(',', $user_selected) . " ) " . ($all_courses ? "" : "AND cu.idCourse IN (" . implode(',', $course_selected) . ") ") . ($show_suspended ? "" : " AND u.valid = 1 ") . ($only_students ? " AND cu.level = 3 " : "");
             if ($start_time != '' && $start_time != '0000-00-00') {
                 $query_course_user .= " AND cu.date_complete >= '" . $start_time . "' ";
             }
             if ($end_time != '' && $end_time != '0000-00-00') {
                 $query_course_user .= " AND cu.date_complete <= '" . $end_time . "'";
             }
             $num_iscr = array();
             $num_nobegin = array();
             $num_itinere = array();
             $num_end = array();
             $time_in_course = array();
             $effective_user = array();
             $re_course_user = sql_query($query_course_user);
             while (list($id_u, $id_c, $fisrt_access, $date_complete, $status) = sql_fetch_row($re_course_user)) {
                 if (isset($num_iscr[$id_c])) {
                     ++$num_iscr[$id_c];
                 } else {
                     $num_iscr[$id_c] = 1;
                 }
                 switch ($status) {
                     case _CUS_CONFIRMED:
                         break;
                     case _CUS_SUSPEND:
                         break;
                     case _CUS_SUBSCRIBED:
                         if (isset($num_nobegin[$id_c])) {
                             ++$num_nobegin[$id_c];
                         } else {
                             $num_nobegin[$id_c] = 1;
                         }
                         break;
                     case _CUS_BEGIN:
                         if (isset($num_itinere[$id_c])) {
                             ++$num_itinere[$id_c];
                         } else {
                             $num_itinere[$id_c] = 1;
                         }
                         break;
                     case _CUS_END:
                         if (isset($num_end[$id_c])) {
                             ++$num_end[$id_c];
                         } else {
                             $num_end[$id_c] = 1;
                         }
                         break;
                 }
                 $effective_user[] = $id_u;
             }
             if (!empty($effective_user)) {
                 $query_time = "\r\n\t\t\t\t\t\tSELECT idCourse, SUM(UNIX_TIMESTAMP(lastTime) - UNIX_TIMESTAMP(enterTime))\r\n\t\t\t\t\t\tFROM %lms_tracksession\r\n\t\t\t\t\t\tWHERE  idUser IN ( " . implode(',', $effective_user) . " )  ";
                 if ($start_time != '' && $start_time != '0000-00-00') {
                     $query_time .= " AND enterTime >= '" . $start_time . "' ";
                 }
                 if ($end_time != '' && $end_time != '0000-00-00') {
                     $query_time .= " AND enterTime <= '" . $end_time . "' ";
                 }
                 $query_time .= " GROUP BY idCourse ";
                 $re_time = sql_query($query_time);
                 while (list($id_c, $time_num) = sql_fetch_row($re_time)) {
                     $time_in_course[$id_c] = $time_num;
                 }
             }
             $output .= $this->_printTable_users($type, $acl_man, $id_courses, $num_iscr, $num_nobegin, $num_itinere, $num_end, $time_in_course, $filter_cols, $show_percent, $show_classrooms_editions, $classrooms_editions_info);
         } else {
             reset($org_name);
             while (list($idst_group, $folder_name) = each($org_name)) {
                 if ($first) {
                     $first = FALSE;
                 } else {
                     $output .= '<br /><br /><br />';
                 }
                 $output .= '<div class="datasummary">' . '<b>' . $lang->def('_FOLDER_NAME') . ' :</b> ' . $folder_name['name'] . ($folder_name['type_of_folder'] == ORG_CHART_WITH_DESCENDANTS ? ' (' . $lang->def('_WITH_DESCENDANTS') . ')' : '') . '<br />';
                 if ($start_time != '' && $start_time != '0000-00-00' || $end_time != '' && $end_time != '0000-00-00') {
                     $output .= '<b>' . $lang->def('_TIME_BELT_2') . ' :</b> ' . ($start_time != '' && $start_time != '0000-00-00' ? ' <b>' . $lang->def('_START_TIME') . ' </b>' . Format::date($start_time, 'date') : '') . ($end_time != '' && $end_time != '0000-00-00' ? ' <b>' . $lang->def('_TO') . ' </b>' . Format::date($end_time, 'date') : '') . '<br />';
                 }
                 $group_user = $acl_man->getGroupAllUser($idst_group);
                 $query_course_user = "******" . " FROM %lms_courseuser AS cu JOIN %adm_user AS u ON (cu.idUser = u.idst) " . " WHERE cu.idUser IN ( " . implode(',', $group_user) . " ) " . ($all_courses ? "" : "AND cu.idCourse IN (" . implode(',', $course_selected) . ") ") . ($show_suspended ? "" : " AND u.valid = 1 ") . ($only_students ? " AND cu.level = 3 " : "");
                 if ($start_time != '' && $start_time != '0000-00-00') {
                     $query_course_user .= " AND cu.date_complete >= '" . $start_time . "' ";
                 }
                 if ($end_time != '' && $end_time != '0000-00-00') {
                     $query_course_user .= " AND cu.date_complete <= '" . $end_time . "'  AND cu.level='3'";
                 }
                 $num_iscr = array();
                 $num_nobegin = array();
                 $num_itinere = array();
                 $num_end = array();
                 $time_in_course = array();
                 $effective_user = array();
                 $re_course_user = sql_query($query_course_user);
                 while (list($id_u, $id_c, $fisrt_access, $date_complete) = sql_fetch_row($re_course_user)) {
                     if (isset($num_iscr[$id_c])) {
                         ++$num_iscr[$id_c];
                     } else {
                         $num_iscr[$id_c] = 1;
                     }
                     if ($fisrt_access === NULL) {
                         //never enter
                         if (isset($num_nobegin[$id_c])) {
                             ++$num_nobegin[$id_c];
                         } else {
                             $num_nobegin[$id_c] = 1;
                         }
                     } elseif ($date_complete === NULL) {
                         //enter
                         if (isset($num_itinere[$id_c])) {
                             ++$num_itinere[$id_c];
                         } else {
                             $num_itinere[$id_c] = 1;
                         }
                     } else {
                         //complete
                         if (isset($num_end[$id_c])) {
                             ++$num_end[$id_c];
                         } else {
                             $num_end[$id_c] = 1;
                         }
                     }
                     $effective_user[] = $id_u;
                 }
                 if (!empty($group_user)) {
                     $query_time = "\r\n\t\t\t\t\t\tSELECT idCourse, SUM(UNIX_TIMESTAMP(lastTime) - UNIX_TIMESTAMP(enterTime))\r\n\t\t\t\t\t\tFROM %lms_tracksession\r\n\t\t\t\t\t\tWHERE  idUser IN ( " . implode(',', $group_user) . " )  ";
                     if ($start_time != '' && $start_time != '0000-00-00') {
                         $query_time .= " AND enterTime >= '" . $start_time . "' ";
                     }
                     if ($end_time != '' && $end_time != '0000-00-00') {
                         $query_time .= " AND enterTime <= '" . $end_time . "' ";
                     }
                     $query_time .= " GROUP BY idCourse ";
                     $re_time = sql_query($query_time);
                     while (list($id_c, $time_num) = sql_fetch_row($re_time)) {
                         $time_in_course[$id_c] = $time_num;
                     }
                 }
                 reset($id_courses);
                 $output .= $this->_printTable_users($type, $acl_man, $id_courses, $num_iscr, $num_nobegin, $num_itinere, $num_end, $time_in_course, $filter_cols, $show_percent, $show_classrooms_editions, $classrooms_editions_info);
             }
         }
     } else {
         //check classrooms and editions
         if ($org_chart_subdivision == 0) {
             $query_course_user = "******" . " FROM (%lms_courseuser AS cu JOIN %lms_course AS c JOIN %adm_user AS u ON (cu.idCourse = c.idCourse AND cu.idUser = u.idst)) " . " LEFT JOIN (%lms_course_date AS d JOIN %lms_course_date_user AS du ON (du.id_date=d.id_date)) " . " ON (du.id_user = cu.idUser AND d.id_course = cu.idCourse) " . " WHERE cu.idUser IN ( " . implode(',', $user_selected) . " ) " . ($all_courses ? "" : "AND cu.idCourse IN (" . implode(',', $course_selected) . ")") . ($show_suspended ? "" : " AND u.valid = 1 ") . ($only_students ? " AND cu.level = 3 " : "");
             if ($start_time != '' && $start_time != '0000-00-00') {
                 $query_course_user .= " AND cu.date_complete >= '" . $start_time . "' ";
             }
             if ($end_time != '' && $end_time != '0000-00-00') {
                 $query_course_user .= " AND cu.date_complete <= '" . $end_time . "'";
             }
             $num_iscr = array();
             $num_nobegin = array();
             $num_itinere = array();
             $num_end = array();
             $time_in_course = array();
             $effective_user = array();
             $re_course_user = sql_query($query_course_user);
             while (list($id_u, $id_c, $fisrt_access, $date_complete, $status, $course_type, $id_date) = sql_fetch_row($re_course_user)) {
                 $index = $course_type == 'classroom' ? $id_c . '_' . $id_date : $id_c;
                 if (isset($num_iscr[$index])) {
                     ++$num_iscr[$index];
                 } else {
                     $num_iscr[$index] = 1;
                 }
                 switch ($status) {
                     case _CUS_CONFIRMED:
                         break;
                     case _CUS_SUSPEND:
                         break;
                     case _CUS_SUBSCRIBED:
                         if (isset($num_nobegin[$index])) {
                             ++$num_nobegin[$index];
                         } else {
                             $num_nobegin[$index] = 1;
                         }
                         break;
                     case _CUS_BEGIN:
                         if (isset($num_itinere[$index])) {
                             ++$num_itinere[$index];
                         } else {
                             $num_itinere[$index] = 1;
                         }
                         break;
                     case _CUS_END:
                         if (isset($num_end[$index])) {
                             ++$num_end[$index];
                         } else {
                             $num_end[$index] = 1;
                         }
                         break;
                 }
                 if (!in_array($id_u, $effective_user)) {
                     $effective_user[] = $id_u;
                 }
             }
             if (!empty($effective_user)) {
                 $query_time = "SELECT idCourse, SUM(UNIX_TIMESTAMP(lastTime) - UNIX_TIMESTAMP(enterTime)) " . " FROM %lms_tracksession WHERE  idUser IN ( " . implode(',', $effective_user) . " ) ";
                 if ($start_time != '' && $start_time != '0000-00-00') {
                     $query_time .= " AND enterTime >= '" . $start_time . "' ";
                 }
                 if ($end_time != '' && $end_time != '0000-00-00') {
                     $query_time .= " AND enterTime <= '" . $end_time . "' ";
                 }
                 $query_time .= " GROUP BY idCourse ";
                 $re_time = sql_query($query_time);
                 while (list($id_c, $time_num) = sql_fetch_row($re_time)) {
                     $time_in_course[$id_c] = $time_num;
                 }
             }
             $output .= $this->_printTable_users($type, $acl_man, $id_courses, $num_iscr, $num_nobegin, $num_itinere, $num_end, $time_in_course, $filter_cols, $show_percent, $show_classrooms_editions, $classrooms_editions_info);
         } else {
             $first = true;
             reset($org_name);
             while (list($idst_group, $folder_name) = each($org_name)) {
                 if ($first) {
                     $first = FALSE;
                 } else {
                     $output .= '<br /><br /><br />';
                 }
                 $output .= '<div class="datasummary">' . '<b>' . $lang->def('_FOLDER_NAME') . ' :</b> ' . $folder_name['name'] . ($folder_name['type_of_folder'] == ORG_CHART_WITH_DESCENDANTS ? ' (' . $lang->def('_WITH_DESCENDANTS') . ')' : '') . '<br />';
                 if ($start_time != '' && $start_time != '0000-00-00' || $end_time != '' && $end_time != '0000-00-00') {
                     $output .= '<b>' . $lang->def('_TIME_BELT_2') . ' :</b> ' . ($start_time != '' && $start_time != '0000-00-00' ? ' <b>' . $lang->def('_START_TIME') . ' </b>' . Format::date($start_time, 'date') : '') . ($end_time != '' && $end_time != '0000-00-00' ? ' <b>' . $lang->def('_TO') . ' </b>' . Format::date($end_time, 'date') : '') . '<br />';
                 }
                 $group_user = $acl_man->getGroupAllUser($idst_group);
                 $query_course_user = "******" . " FROM (%lms_courseuser AS cu JOIN %lms_course AS c JOIN %adm_user AS u ON (cu.idCourse = c.idCourse AND cu.idUser = u.idst)) " . " LEFT JOIN (%lms_course_date AS d JOIN %lms_course_date_user AS du ON (du.id_date=d.id_date)) " . " ON (du.id_user = cu.idUser AND d.id_course = cu.idCourse) " . " WHERE cu.idUser IN ( " . implode(',', $group_user) . " ) " . ($all_courses ? "" : "AND cu.idCourse IN (" . implode(',', $course_selected) . ")") . ($show_suspended ? "" : " AND u.valid = 1 ") . ($only_students ? " AND cu.level = 3 " : "");
                 if ($start_time != '' && $start_time != '0000-00-00') {
                     $query_course_user .= " AND cu.date_complete >= '" . $start_time . "' ";
                 }
                 if ($end_time != '' && $end_time != '0000-00-00') {
                     $query_course_user .= " AND cu.date_complete <= '" . $end_time . "'";
                 }
                 $num_iscr = array();
                 $num_nobegin = array();
                 $num_itinere = array();
                 $num_end = array();
                 $time_in_course = array();
                 $effective_user = array();
                 //$re_course_user = sql_query($query_course_user);
                 //while(list($id_u, $id_c, $fisrt_access, $date_complete) = sql_fetch_row($re_course_user)) {
                 $re_course_user = sql_query($query_course_user);
                 while (list($id_u, $id_c, $fisrt_access, $date_complete, $status, $course_type, $id_date) = sql_fetch_row($re_course_user)) {
                     $index = $course_type == 'classroom' ? $id_c . '_' . $id_date : $id_c;
                     if (isset($num_iscr[$index])) {
                         ++$num_iscr[$index];
                     } else {
                         $num_iscr[$index] = 1;
                     }
                     if ($fisrt_access === NULL) {
                         //never enter
                         if (isset($num_nobegin[$index])) {
                             ++$num_nobegin[$index];
                         } else {
                             $num_nobegin[$index] = 1;
                         }
                     } elseif ($date_complete === NULL) {
                         //enter
                         if (isset($num_itinere[$index])) {
                             ++$num_itinere[$index];
                         } else {
                             $num_itinere[$index] = 1;
                         }
                     } else {
                         //complete
                         if (isset($num_end[$index])) {
                             ++$num_end[$index];
                         } else {
                             $num_end[$index] = 1;
                         }
                     }
                     if (!in_array($id_u, $effective_user)) {
                         $effective_user[] = $id_u;
                     }
                 }
                 if (!empty($group_user)) {
                     $query_time = "SELECT idCourse, SUM(UNIX_TIMESTAMP(lastTime) - UNIX_TIMESTAMP(enterTime)) " . " FROM %lms_tracksession WHERE  idUser IN ( " . implode(',', $group_user) . " ) ";
                     if ($start_time != '' && $start_time != '0000-00-00') {
                         $query_time .= " AND enterTime >= '" . $start_time . "' ";
                     }
                     if ($end_time != '' && $end_time != '0000-00-00') {
                         $query_time .= " AND enterTime <= '" . $end_time . "' ";
                     }
                     $query_time .= " GROUP BY idCourse ";
                     $re_time = sql_query($query_time);
                     while (list($id_c, $time_num) = sql_fetch_row($re_time)) {
                         $time_in_course[$id_c] = $time_num;
                     }
                 }
                 reset($id_courses);
                 $output .= $this->_printTable_users($type, $acl_man, $id_courses, $num_iscr, $num_nobegin, $num_itinere, $num_end, $time_in_course, $filter_cols, $show_percent, $show_classrooms_editions, $classrooms_editions_info);
             }
         }
     }
     return $output;
 }
Exemple #15
0
 function &getAllUserIdst()
 {
     $p_dr = new PeopleDataRetriever($GLOBALS['dbConn'], $GLOBALS['prefix_fw']);
     $userlevelid = Docebo::user()->getUserLevelId();
     if ($userlevelid != ADMIN_GROUP_GODADMIN) {
         require_once _base_ . '/lib/lib.preference.php';
         $adminManager = new AdminPreference();
         $p_dr->intersectGroupFilter($adminManager->getAdminTree(Docebo::user()->getIdSt()));
     }
     $re_people = $p_dr->getAllRowsIdst();
     $user_selected = array();
     if (!$re_people) {
         return $user_selected;
     }
     while (list($idst) = sql_fetch_row($re_people)) {
         $user_selected[$idst] = $idst;
     }
     return $user_selected;
 }