Пример #1
0
function publicAdminManager_assign_tree($adminidst)
{
    checkPerm('view');
    if ($adminidst == 0) {
        return;
    }
    require_once _base_ . '/lib/lib.form.php';
    require_once _base_ . '/lib/lib.userselector.php';
    require_once $GLOBALS['where_framework'] . '/lib/lib.publicadminmanager.php';
    $directory = new UserSelector();
    $lang =& DoceboLanguage::createInstance('adminrules', 'framework');
    $lang =& DoceboLanguage::createInstance('public_admin_manager', 'framework');
    $aclManager = new DoceboACLManager();
    $adminManager = new PublicAdminManager();
    if (isset($_POST['okselector'])) {
        $arr_selected = $directory->getSelection($_POST);
        $arr_unselected = $directory->getUnselected();
        foreach ($arr_unselected as $idstTree) {
            $adminManager->removeAdminTree($idstTree, $adminidst);
        }
        foreach ($arr_selected as $idstTree) {
            $adminManager->addAdminTree($idstTree, $adminidst);
        }
        Util::jump_to('index.php?modname=public_admin_manager&op=view');
    } elseif (isset($_POST['cancelselector'])) {
        Util::jump_to('index.php?modname=public_admin_manager&op=view');
    } else {
        if (!isset($_GET['stayon'])) {
            $directory->resetSelection($adminManager->getAdminTree($adminidst));
        }
        $admin_info = $aclManager->getUser($adminidst, false);
        $directory->show_user_selector = FALSE;
        $directory->show_group_selector = TRUE;
        $directory->show_orgchart_selector = TRUE;
        $directory->show_orgchart_simple_selector = TRUE;
        $directory->multi_choice = TRUE;
        $directory->loadSelector('index.php?modname=public_admin_manager&amp;op=assign_tree&amp;adminidst=' . $adminidst . '&amp;stayon=1', $lang->def('_ASSIGN_USERS', 'adminrules'), '<span class="text_bold">' . substr($admin_info[ACL_INFO_USERID], 1) . '</span>', TRUE);
    }
}
Пример #2
0
 function addRegistration()
 {
     checkPerm('mod');
     require_once $GLOBALS['where_lms'] . '/lib/lib.course.php';
     require_once _base_ . '/lib/lib.form.php';
     require_once _base_ . '/lib/lib.userselector.php';
     $id_course = $_SESSION['idCourse'];
     $id_event = importVar('id_event', true, 0);
     $man_res = new Man_Reservation();
     $aclManager = new DoceboACLManager();
     $subscribed = array();
     $subscribed = $man_res->getSubscribedUserIdst($id_event);
     $subscribed_empty = array();
     $lang =& DoceboLanguage::CreateInstance('reservation');
     $out =& $GLOBALS['page'];
     $user_select = new UserSelector();
     $user_select->show_user_selector = TRUE;
     $user_select->show_group_selector = FALSE;
     $user_select->show_orgchart_selector = FALSE;
     $user_select->show_orgchart_simple_selector = FALSE;
     $user_select->show_fncrole_selector = FALSE;
     $user_select->learning_filter = 'course';
     $user_select->nFields = 3;
     if ($subscribed) {
         $user_select->resetSelection($subscribed);
     } else {
         $user_select->resetSelection($subscribed_empty);
     }
     $acl_man =& Docebo::user()->getAclManager();
     $arr_idstGroup = $aclManager->getGroupsIdstFromBasePath('/lms/course/' . (int) $_SESSION['idCourse'] . '/subscribed/');
     $me = array(getLogUserId());
     $user_select->setUserFilter('group', $arr_idstGroup);
     $user_select->setGroupFilter('path', '/lms/course/' . $_SESSION['idCourse'] . '/group');
     $user_select->loadSelector('index.php?modname=reservation&amp;op=add_registration&amp;id_course=' . $id_course . '&amp;id_event=' . $id_event, $lang->def('_SUBSCRIBE_EVENT'), $lang->def('_CHOOSE_SUBSCRIBE'), true);
 }
Пример #3
0
 /**
  * class constructor
  * @param int	$id_user the id of the user
  */
 function UserPreferences($id_user, $db_conn = NULL)
 {
     $acl_man = new DoceboACLManager();
     $this->id_user = $id_user;
     if ($acl_man->getAnonymousId() == $id_user) {
         $this->is_anonymous = true;
     } else {
         $this->is_anonymous = false;
     }
     $this->_up_db = new UserPreferencesDb($db_conn);
     $this->base_name = 'user_preference';
     // Load startup
     $this->_preferences = $this->_up_db->getFilteredUserValue($id_user, false, true, false);
     $this->_admin_preference = new AdminPreference();
 }
Пример #4
0
function modAssignmentAssignMetaCertificate()
{
    checkPerm('mod');
    require_once _base_ . '/lib/lib.form.php';
    require_once $GLOBALS['where_framework'] . '/lib/lib.directory.php';
    require_once _base_ . '/lib/lib.userselector.php';
    require_once $GLOBALS['where_lms'] . '/lib/lib.course.php';
    require_once $GLOBALS['where_lms'] . '/lib/lib.course_managment.php';
    $lang =& DoceboLanguage::createInstance('certificate', 'lms');
    $id_certificate = importVar('id_certificate', true, 0);
    $id_meta = Get::req('idmeta', DOTY_INT, 0);
    $step = Get::req('step', DOTY_INT, 0);
    $out =& $GLOBALS['page'];
    $out->setWorkingZone('content');
    $acl_man =& Docebo::user()->getAclManager();
    $aclManager = new DoceboACLManager();
    $user_select = new UserSelector();
    $form = new Form();
    $sel = new Course_Manager();
    $course_man = new Man_Course();
    if (isset($_POST['okselector'])) {
        $user_selected = $user_select->getSelection($_POST);
        $_SESSION['meta_certificate']['users'] = $user_selected;
        $step++;
    }
    if (isset($_POST['import_filter'])) {
        $_SESSION['meta_certificate']['course'] = $sel->getCourseSelection($_POST);
        $step++;
    }
    if (isset($_POST['insert'])) {
        $step++;
    }
    if ($step == 3) {
        $array_user =& $aclManager->getAllUsersFromIdst($_SESSION['meta_certificate']['users']);
        $array_user = array_unique($array_user);
        $res = true;
        $user_reset = array();
        $course_reset = array();
        $reasign = array();
        //array reasign
        $query = "SELECT idUser, idCourse" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idMetaCertificate = '" . $id_meta . "'";
        $result = sql_query($query);
        while (list($id_user, $id_course) = sql_fetch_row($result)) {
            $reasign[$id_user][$id_course] = 1;
        }
        //array user_reset
        $query = "SELECT DISTINCT idUser" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idMetaCertificate = '" . $id_meta . "'";
        $result = sql_query($query);
        while (list($id_user) = sql_fetch_row($result)) {
            $user_reset[$id_user] = $id_user;
        }
        //array course_reset
        $query = "SELECT DISTINCT idCourse" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idMetaCertificate = '" . $id_meta . "'";
        $result = sql_query($query);
        while (list($id_course) = sql_fetch_row($result)) {
            $course_reset[$id_course] = $id_course;
        }
        //finish array initialization
        $query_course = "INSERT INTO " . $GLOBALS['prefix_lms'] . "_certificate_meta_course (idMetaCertificate, idUser, idCourse)" . " VALUES ";
        $first = true;
        $array_user_flipped = array_flip($array_user);
        foreach ($user_reset as $id_user) {
            if (!isset($array_user_flipped[$id_user])) {
                $query = "DELETE FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idUser = '******'" . " AND idMetaCertificate = '" . $id_meta . "'";
                if (!sql_query($query)) {
                    $res = false;
                }
            }
        }
        if (!$res) {
            Util::jump_to('index.php?modname=meta_certificate&op=assign&id_certificate=' . $id_certificate . '&res=error_mod_assign');
        }
        foreach ($course_reset as $id_course) {
            if (!isset($_SESSION['meta_certificate']['course'][$id_course])) {
                $query = "DELETE FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idCourse = '" . $id_course . "'" . " AND idMetaCertificate = '" . $id_meta . "'";
                if (!sql_query($query)) {
                    $res = false;
                }
            }
        }
        if (!$res) {
            Util::jump_to('index.php?modname=meta_certificate&op=assign&id_certificate=' . $id_certificate . '&res=error_mod_assign');
        }
        reset($_SESSION['meta_certificate']['course']);
        foreach ($array_user as $id_user) {
            foreach ($_SESSION['meta_certificate']['course'] as $id_course) {
                if (isset($_POST['_' . $id_user . '_' . $id_course . '_'])) {
                    if (!isset($reasign[$id_user][$id_course])) {
                        if ($first) {
                            $query_course .= "('" . $id_meta . "', '" . $id_user . "', '" . $id_course . "')";
                            $first = false;
                        } else {
                            $query_course .= ", ('" . $id_meta . "', '" . $id_user . "', '" . $id_course . "')";
                        }
                    }
                } else {
                    if (isset($reasign[$id_user][$id_course])) {
                        $query = "DELETE FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idUser = '******'" . " AND idCourse = '" . $id_course . "'" . " AND idMetaCertificate = '" . $id_meta . "'";
                        if (!sql_query($query)) {
                            $res = false;
                        }
                    }
                }
            }
        }
        if (!$res) {
            Util::jump_to('index.php?modname=meta_certificate&op=assign&id_certificate=' . $id_certificate . '&res=error_mod_assign');
        }
        $res = sql_query($query_course);
        if ($res) {
            Util::jump_to('index.php?modname=meta_certificate&op=assign&id_certificate=' . $id_certificate . '&res=ok');
        } else {
            Util::jump_to('index.php?modname=meta_certificate&op=assign&id_certificate=' . $id_certificate . '&res=error_mod_assign');
        }
    } elseif ($step == 2) {
        YuiLib::load();
        Util::get_js(Get::rel_path('base') . '/lib/js_utils.js', true, true);
        $tb = new Table(0, $lang->def('_META_CERTIFICATE_NEW_ASSIGN_CAPTION'), $lang->def('_META_CERTIFICATE_NEW_ASSIGN_SUMMARY'));
        $tb->setLink('index.php?modname=meta_certificate&amp;op=modassignment');
        $out->add(getTitleArea($lang->def('_TITLE_META_CERTIFICATE_ASSIGN'), 'certificate') . '<div class="std_block">' . $form->openForm('new_assign_step_2', 'index.php?modname=meta_certificate&amp;op=modassignment') . $form->getHidden('id_certificate', 'id_certificate', $id_certificate) . $form->getHidden('idmeta', 'idmeta', $id_meta) . $form->getHidden('step', 'step', 2) . $form->getHidden('reasign', 'reasign', 1));
        $reasign = array();
        if (!isset($_POST['reasign'])) {
            $query = "SELECT idUser, idCourse" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idMetaCertificate = '" . $id_meta . "'";
            $result = sql_query($query);
            while (list($id_user, $id_course) = sql_fetch_row($result)) {
                $reasign[$id_user][$id_course] = 1;
            }
        }
        $form_name = 'new_assign_step_2';
        $type_h = array('', '');
        $cont_h = array($lang->def('_FULLNAME'), $lang->def('_USERNAME'));
        foreach ($_SESSION['meta_certificate']['course'] as $id_course) {
            $type_h[] = 'align_center';
            $course_info = $course_man->getCourseInfo($id_course);
            $cont_h[] = $course_info['code'] . ' - ' . $course_info['name'];
        }
        $type_h[] = 'image';
        $cont_h[] = $lang->def('_CHECKALL');
        $type_h[] = 'image';
        $cont_h[] = $lang->def('_UNCHECKALL');
        $tb->setColsStyle($type_h);
        $tb->addHead($cont_h);
        reset($_SESSION['meta_certificate']['course']);
        $array_user =& $aclManager->getAllUsersFromIdst($_SESSION['meta_certificate']['users']);
        $array_user = array_unique($array_user);
        $query = "SELECT idst" . " FROM " . $GLOBALS['prefix_fw'] . "_user" . " WHERE idst IN (" . implode(',', $array_user) . ")" . " ORDER BY userid";
        $result = sql_query($query);
        $array_user = array();
        while (list($id_user) = sql_fetch_row($result)) {
            $array_user[] = $id_user;
        }
        foreach ($array_user as $id_user) {
            $cont = array();
            $user_info = $acl_man->getUser($id_user, false);
            $cont[] = $user_info[ACL_INFO_LASTNAME] . ' ' . $user_info[ACL_INFO_FIRSTNAME];
            $cont[] = $acl_man->relativeId($user_info[ACL_INFO_USERID]);
            foreach ($_SESSION['meta_certificate']['course'] as $id_course) {
                if (isset($_POST['_' . $id_user . '_' . $id_course . '_']) || isset($_POST['select_all']) || isset($reasign[$id_user][$id_course])) {
                    $checked = true;
                } else {
                    $checked = false;
                }
                $cont[] = $form->getCheckbox('', '_' . $id_user . '_' . $id_course . '_', '_' . $id_user . '_' . $id_course . '_', 1, $checked);
            }
            $cont[] = '<a href="javascript:;" onclick="checkall_fromback_meta(\'' . $form_name . '\', \'' . $id_user . '\', true); return false;">' . $lang->def('_CHECKALL') . '</a>';
            $cont[] = '<a href="javascript:;" onclick="checkall_fromback_meta(\'' . $form_name . '\', \'' . $id_user . '\', false); return false;">' . $lang->def('_UNCHECKALL') . '</a>';
            $tb->addBody($cont);
        }
        reset($_SESSION['meta_certificate']['course']);
        $cont = array();
        $cont[] = '';
        $cont[] = '';
        foreach ($_SESSION['meta_certificate']['course'] as $id_course) {
            $cont[] = '<a href="javascript:;" onclick="checkall_meta(\'' . $form_name . '\', \'' . $id_course . '\', true); return false;">' . $lang->def('_CHECKALL') . '</a><br/>' . '<a href="javascript:;" onclick="checkall_meta(\'' . $form_name . '\', \'' . $id_course . '\', false); return false;">' . $lang->def('_UNCHECKALL') . '</a>';
        }
        $cont[] = '';
        $cont[] = '';
        $tb->addBody($cont);
        $out->add($form->openElementSpace() . $tb->getTable() . $form->closeElementSpace() . $form->openButtonSpace() . $form->getButton('select_all', 'select_all', $lang->def('_SELECT_ALL')) . $form->getButton('insert', 'insert', $lang->def('_INSERT')) . $form->getButton('undo_assign', 'undo_assign', $lang->def('_UNDO')) . $form->closeButtonSpace() . $form->closeForm());
    } elseif ($step == 1) {
        $sel->setLink('index.php?modname=meta_certificate&amp;op=modassignment');
        $out->add(getTitleArea($lang->def('_TITLE_META_CERTIFICATE_ASSIGN'), 'certificate') . '<div class="std_block">' . $form->openForm('new_assign_step_1', 'index.php?modname=meta_certificate&amp;op=modassignment') . $form->getHidden('id_certificate', 'id_certificate', $id_certificate) . $form->getHidden('idmeta', 'idmeta', $id_meta) . $form->getHidden('step', 'step', 1) . $form->getHidden('course_reload', 'course_reload', 1));
        if (!isset($_POST['course_reload'])) {
            $query = "SELECT DISTINCT idCourse" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idMetaCertificate = '" . $id_meta . "'";
            $result = sql_query($query);
            $course_reset = array();
            while (list($id_course) = sql_fetch_row($result)) {
                $course_reset[$id_course] = $id_course;
            }
            $sel->resetCourseSelection($course_reset);
        }
        $sel->loadSelector();
        $out->add(Form::getHidden('update_tempdata', 'update_tempdata', 1) . Form::openButtonSpace() . Form::getBreakRow() . Form::getButton('ok_filter', 'import_filter', $lang->def('_NEXT')) . Form::getButton('undo_filter', 'undo_filter', $lang->def('_UNDO')) . Form::closeButtonSpace() . Form::closeForm() . '</div>');
    } else {
        $user_select->show_orgchart_simple_selector = FALSE;
        $user_select->multi_choice = TRUE;
        $user_select->addFormInfo($form->getHidden('step', 'step', 0) . $form->getHidden('id_certificate', 'id_certificate', $id_certificate) . $form->getHidden('idmeta', 'idmeta', $id_meta) . $form->getHidden('user_reload', 'user_reload', 1));
        $user_select->setPageTitle(getTitleArea($lang->def('_TITLE_META_CERTIFICATE_ASSIGN'), 'certificate') . '<div class="std_block">');
        if (!isset($_POST['user_reload'])) {
            $query = "SELECT DISTINCT idUser" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idMetaCertificate = '" . $id_meta . "'";
            $result = sql_query($query);
            $user_reset = array();
            while (list($id_user) = sql_fetch_row($result)) {
                $user_reset[$id_user] = $id_user;
            }
            $user_select->resetSelection($user_reset);
        }
        $user_select->loadSelector('index.php?modname=meta_certificate&amp;op=modassignment', false, $lang->def('_USER_FOR_META_CERTIFICATE_ASSIGN'), true);
    }
}
Пример #5
0
function modreader()
{
    checkPerm('mod');
    require_once _base_ . '/lib/lib.userselector.php';
    $lang =& DoceboLanguage::createInstance('advice', 'lms');
    $out =& $GLOBALS['page'];
    $id_advice = importVar('id_advice', true, 0);
    $aclManager = new DoceboACLManager();
    $user_select = new UserSelector();
    $user_select->show_user_selector = TRUE;
    $user_select->show_group_selector = TRUE;
    $user_select->show_orgchart_selector = FALSE;
    $user_select->show_fncrole_selector = FALSE;
    $user_select->nFields = 0;
    $user_select->learning_filter = 'course';
    if (isset($_GET['load'])) {
        $query_reader = "\r\n\t\t\tSELECT idUser\r\n\t\t\tFROM " . $GLOBALS['prefix_lms'] . "_adviceuser\r\n\t\t\tWHERE idAdvice = '" . $id_advice . "'";
        $re_reader = sql_query($query_reader);
        $users = array();
        $all_reader = false;
        while (list($id_user) = sql_fetch_row($re_reader)) {
            if ($id_user == 'all') {
                $all_reader = true;
            }
            $users[] = $id_user;
        }
        if ($all_reader == true) {
            $query_reader = "\r\n\t\t\t\tSELECT idUser\r\n\t\t\t\tFROM " . $GLOBALS['prefix_lms'] . "_courseuser\r\n\t\t\t\tWHERE idCourse = '" . $_SESSION['idCourse'] . "'";
            $re_reader = sql_query($query_reader);
            $users = array();
            while (list($id_user) = sql_fetch_row($re_reader)) {
                $users[] = $id_user;
            }
        }
        $user_select->resetSelection($users);
    }
    $arr_idstGroup = $aclManager->getGroupsIdstFromBasePath('/lms/course/' . (int) $_SESSION['idCourse'] . '/subscribed/');
    $me = array(getLogUserId());
    $user_select->setUserFilter('exclude', $me);
    $user_select->setUserFilter('group', $arr_idstGroup);
    $arr_idstUser = $aclManager->getAllUsersFromIdst($arr_idstGroup);
    $user_select->setUserFilter('user', $arr_idstUser);
    //$user_select->setGroupFilter('path', '/lms/course/'.$_SESSION['idCourse'].'/group');
    $user_select->setPageTitle(getTitleArea(array('index.php?modname=advice&amp;op=advice' => $lang->def('_ADVICE'), $lang->def('_VIEW_PERMISSION')), 'advice'));
    $user_select->loadSelector('index.php?modname=advice&amp;op=modreader&amp;id_advice=' . $id_advice, $lang->def('_ADVICE'), $lang->def('_CHOOSE_READER'), true);
}
Пример #6
0
function sendMail($recipient, $subject, $body, $from = '', $replyTo = '', $params = false)
{
    require_once $GLOBALS['where_framework_relative'] . '/addons/phpmailer/class.phpmailer.php';
    $acl_man = new DoceboACLManager();
    $mail = new PHPMailer();
    $mail->IsMail();
    if ($from != '') {
        $mail->From = $from;
        $temp = $acl_man->getUserByEmail($from);
        $mail->FromName = $temp[ACL_INFO_FIRSTNAME] . ' ' . $temp[ACL_INFO_LASTNAME];
    }
    if (is_string($recipient)) {
        $temp = $acl_man->getUserByEmail($recipient);
        $mail->AddAddress($recipient, $temp[ACL_INFO_FIRSTNAME] . ' ' . $temp[ACL_INFO_LASTNAME]);
    } elseif (is_array($recipient)) {
        // TO DO: multiple sending ...
        return false;
        //not supported at the moment
    } else {
        return false;
    }
    if ($replyTo != '') {
        $temp = $acl_man->getUserByEmail($replyTo);
        $mail->AddReplyTo($replyTo, $temp[ACL_INFO_FIRSTNAME] . ' ' . $temp[ACL_INFO_LASTNAME]);
    }
    //$mail->WordWrap = 50;
    $mail->IsHTML(true);
    $mail->Subject = $subject;
    $mail->Body = $body;
    $mail->AltBody = html_entity_decode(strip_tags($body), ENT_COMPAT, 'UTF-8');
    return $mail->Send();
}
Пример #7
0
 function getCategories($param = false)
 {
     $temp = $param ? $param : Get::req($this->id . "_input", DOTY_MIXED, false);
     $nodes = explode(',', $temp);
     $output = array();
     $branches = array();
     foreach ($nodes as $node) {
         if (stristr($node, "d")) {
             $branches[] = '/ocd_' . str_replace('d', '', $node);
         } else {
             $branches[] = '/oc_' . $node;
         }
     }
     $acl = new DoceboACLManager();
     $groups = $acl->getGroupsIdByPaths($branches);
     $output = $acl->getAllUsersFromIdst($groups);
     return $output;
 }
Пример #8
0
 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();
 }
Пример #9
0
 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;
 }
Пример #10
0
function manprjadmin()
{
    checkPerm('mod');
    require_once _base_ . '/lib/lib.userselector.php';
    require_once _base_ . '/lib/lib.form.php';
    $out =& $GLOBALS['page'];
    $out->setWorkingZone('content');
    $lang =& DoceboLanguage::createInstance('project', "lms");
    $from = new Form();
    if (!isset($_GET["id"]) || $_GET["id"] < 1) {
        return 0;
    }
    $id = $_GET["id"];
    $myprj = user_projects(Docebo::user()->getIdSt());
    $view_perm = checkPerm('view', true);
    if ($view_perm && in_array($id, $myprj) && is_owner(Docebo::user()->getIdSt(), $id)) {
        $aclManager = new DoceboACLManager();
        $user_select = new UserSelector();
        $user_select->show_user_selector = TRUE;
        $user_select->show_group_selector = FALSE;
        $user_select->show_orgchart_selector = FALSE;
        $user_select->show_fncrole_selector = FALSE;
        $user_select->learning_filter = 'course';
        if (isset($_POST['recipients'])) {
            $recipients = unserialize(urldecode($_POST['recipients']));
        } else {
            $recipients = getAdminList($id);
        }
        $user_select->resetSelection($recipients);
        $back_url = "index.php?modname=project&amp;op=project";
        if (isset($_POST["cancelselector"])) {
            Util::jump_to(str_replace("&amp;", "&", $back_url));
        } else {
            if (isset($_POST["okselector"])) {
                $arr_selection = $user_select->getSelection($_POST);
                //$arr_unselected=$user_select->getUnselected();
                foreach ($arr_unselected as $userid) {
                    $qtxt = "DELETE FROM " . $GLOBALS["prefix_lms"] . "_prj_users ";
                    $qtxt .= "WHERE pid='" . $id . "' AND flag='1' AND userid='" . $userid . "'";
                    $q = sql_query($qtxt);
                }
                foreach ($arr_selection as $userid) {
                    $qtxt = "INSERT INTO " . $GLOBALS["prefix_lms"] . "_prj_users ";
                    $qtxt .= "(pid,userid,flag) VALUES('" . $id . "','{$userid}','1')";
                    $q = sql_query($qtxt);
                }
                Util::jump_to(str_replace("&amp;", "&", $back_url));
            } else {
                //$user_select->setGroupFilter('path', '/lms/course/'.$_SESSION['idCourse'].'/group');
                $group_all = $aclManager->getGroupST('/lms/course/' . (int) $_SESSION['idCourse'] . '/group/alluser');
                $query = "\r\n\t\t\tSELECT pgroup\r\n\t\t\tFROM " . $GLOBALS["prefix_lms"] . "_prj\r\n\t\t\tWHERE cid='" . $_SESSION["idCourse"] . "'\r\n\t\t\t\tAND id = '" . $id . "'";
                list($group) = mysql_fetch_array(sql_query($query));
                if ($group == $group_all) {
                    $arr_idstGroup = $aclManager->getGroupsIdstFromBasePath('/lms/course/' . (int) $_SESSION['idCourse'] . '/subscribed/');
                    $user_select->setUserFilter('group', $arr_idstGroup);
                } else {
                    $user_select->setUserFilter('group', array($group));
                }
                $user_select->setPageTitle(getTitleArea(array($back_url => $lang->def('_PROJECT_MANAGER'), $lang->def('_PADMINS')), 'project', $lang->def('_PROJECT_MANAGER')));
                $user_select->loadSelector('index.php?modname=project&amp;op=manprjadmin&amp;id=' . $id, false, "", true);
            }
        }
    } else {
        die("You can't access");
    }
}
Пример #11
0
function required()
{
    require_once _base_ . '/lib/lib.form.php';
    require_once _base_ . '/lib/lib.table.php';
    require_once _adm_ . '/lib/lib.publicadminmanager.php';
    require_once _lms_ . '/lib/lib.course.php';
    require_once _lms_ . '/lib/lib.date.php';
    require_once _lms_ . '/lib/lib.competences.php';
    $db = DbConn::getInstance();
    $lang =& DoceboLanguage::CreateInstance('public_coursepanel', 'lms');
    $sel_competence = Get::req('sel_competence_req', DOTY_INT, false);
    $sel_course = Get::req('sel_course_req', DOTY_INT, false);
    $back_url = "index.php?modname=public_coursepanel&op=coursepanel&sel_competence=" . (int) $sel_competence . "&sel_course=" . (int) $sel_course;
    $back_ui = getBackUi($back_url, $lang->def('_BACK'));
    $sel_comp = Get::req('required_selector', DOTY_INT, 0);
    if ($sel_comp) {
        $id_pa = getLogUserId();
        if (!$id_pa) {
            //...
        }
        $acl_man = new DoceboACLManager();
        $admin_manager = new PublicAdminManager();
        $array_users = array();
        $idst_associated = $admin_manager->getAdminTree($id_pa);
        $array_users =& $acl_man->getAllUsersFromIdst($idst_associated);
        $array_users = array_unique($array_users);
        if (empty($array_users)) {
            //error: no users to deal with
            cout($back_ui . $lang->def('_NO_USERS') . $back_ui, 'content');
            return;
        }
        cout(getTitleArea($lang->def('_REQUIRED_USERS'), 'coursepanel') . '<div class="std_block">', 'content');
        $table = new Table();
        $head_labels = array($lang->def('_USERNAME'), $lang->def('_NAME'));
        $head_style = array('', '', 'align_center', 'align_center');
        $table->addHead($head_labels, $head_style);
        //$date = date ("Y-m-d H:i:s", strtotime("+1 months"));
        //$now = date("Y-m-d H:i:s");
        $man_comp = new Competences_Manager();
        $comp_data = $man_comp->GetCompetence($sel_comp);
        $already = array();
        $query = "SELECT id_user, score_init, score_got FROM %lms_competence_user WHERE id_competence='" . (int) $sel_comp . "'";
        $res = $db->query($query);
        while (list($id_user, $score_init, $score_got) = $db->fetch_row($res)) {
            if ($comp_data['type'] == 'score') {
                //if the competence assignment exists in DB, but the total score is 0, then it's considered as non-assigned
                if ((int) $score_init + (int) $score_got > 0) {
                    $already[] = $id_user;
                }
            } else {
                $already[] = $id_user;
            }
        }
        $already = array_unique($already);
        $array_users = array_diff($array_users, $already);
        //get required competences not got from users
        $query = "";
        if ($comp_data['type'] == 'score') {
            $query = "SELECT u.idst, u.userid, u.lastname, u.firstname FROM %lms_competence_required as cr " . " JOIN %adm_user as u ON (cr.idst = u.idst)" . " WHERE cr.idst IN (" . implode(",", $array_users) . ") AND cr.id_competence=" . (int) $sel_comp . " ORDER BY u.userid";
        } else {
            $query = "SELECT u.idst, u.userid, u.lastname, u.firstname FROM %lms_competence_required as cr " . " JOIN %adm_user as u ON (cr.idst = u.idst) " . " WHERE cr.idst IN (" . implode(",", $array_users) . ") AND cr.id_competence=" . (int) $sel_comp . " ORDER BY u.userid";
        }
        $res = $db->query($query);
        if (sql_num_rows($res) > 0) {
            while (list($idst, $userid, $lastname, $firstname) = $db->fetch_row($res)) {
                $line = array();
                $line[] = $acl_man->relativeId($userid);
                $line[] = $lastname . " " . $firstname;
                $table->addBody($line);
            }
            //cout(getTitleArea($lang->def('_EXPIRING_USERS'), 'coursepanel').'<div class="std_block">', 'content');
            cout($lang->def('_COMPETENCE') . ': <b>' . $comp_data['name'] . '</b>', 'content');
            cout($back_ui . $table->getTable() . $back_ui, 'content');
        } else {
            cout($back_ui . $lang->def('_NO_REQUIRED_USER') . $back_ui, 'content');
        }
    } else {
        //error, no competence selected
        cout($back_ui . $lang->def('_NO_COMPETENCE_SELECTED') . $back_ui, 'content');
        return;
    }
}
Пример #12
0
 $fman = new FieldList();
 require_once $GLOBALS['where_lms'] . '/lib/lib.course.php';
 $id_course = importVar('id_course', true, 0);
 $id_field = importVar('id_field', false, 0);
 $values = array();
 switch ($id_field) {
     case "name":
         $acl_man = new DoceboACLManager();
         $users = getSubscribed($id_course);
         $allusers_info = $acl_man->getUsers($users);
         while (list(, $user_info) = each($allusers_info)) {
             $values[$user_info[ACL_INFO_IDST]] = $user_info[ACL_INFO_LASTNAME] . ' ' . $user_info[ACL_INFO_FIRSTNAME];
         }
         break;
     case "email":
         $acl_man = new DoceboACLManager();
         $users = getSubscribed($id_course);
         $allusers_info = $acl_man->getUsers($users);
         while (list(, $user_info) = each($allusers_info)) {
             $values[$user_info[ACL_INFO_IDST]] = $user_info[ACL_INFO_EMAIL];
         }
         break;
     default:
         $users = getSubscribed($id_course);
         $values = $fman->fieldValue((int) $id_field, $users);
 }
 if ($id_field == 'name') {
 } else {
 }
 require_once _base_ . '/lib/lib.json.php';
 $json = new Services_JSON();
Пример #13
0
 function getUsers($param = false)
 {
     //retrieve all users matching given conditions
     $output = array();
     $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
     $a_obj = new DoceboACLManager();
     $fman = new FieldList();
     $user_to_check = Get::req('user', DOTY_INT, false);
     $f_arr = $param ? $param : urldecode(stripslashes(Get::req($this->id . "_input", DOTY_STRING, false)));
     $filter = is_string($f_arr) ? $json->decode(stripslashes($f_arr)) : $f_arr;
     $exclusive = $filter['exclusive'];
     $conds = $filter['filters'];
     //return a void array if no conditions specified
     if (count($conds) <= 0) {
         return array();
     }
     //compose nested query
     // base query /Anonymous
     $base_query = "SELECT idst, userid " . " FROM %adm_user ";
     $std_condition = array();
     $in_conditions = array();
     $other_conditions = array();
     foreach ($conds as $cond) {
         $id_field = $cond['id_field'];
         $params = $json->decode($cond['value']);
         if ($params == null) {
             $params = $cond['value'];
         }
         $res = $exclusive;
         list($id_type, $id) = explode('_', $id_field);
         switch ($id_type) {
             case _STANDARD_FIELDS_PREFIX:
                 require_once _adm_ . '/modules/field/class.field.php';
                 require_once _adm_ . '/modules/field/class.date.php';
                 switch ($id) {
                     case 0:
                         //userid
                         $temp = " userid ";
                         switch ($params['cond']) {
                             case 2:
                                 $temp .= " = '" . $a_obj->absoluteId($params['value']) . "' ";
                                 break;
                                 //equals
                             //equals
                             case 0:
                                 $temp .= " LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //contains
                             //contains
                             case 3:
                                 $temp .= " <> '" . $a_obj->absoluteId($params['value']) . "' ";
                                 break;
                                 //not equal
                             //not equal
                             case 1:
                                 $temp .= " NOT LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //does not contain
                             //does not contain
                             case 4:
                                 $temp .= " LIKE '" . $a_obj->absoluteId($params['value']) . "%' ";
                                 break;
                                 //starts with
                             //starts with
                             case 5:
                                 $temp .= " LIKE '%" . $params['value'] . "' ";
                                 break;
                                 //ends with
                             //ends with
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 1:
                         //firstname
                         $temp = " firstname ";
                         switch ($params['cond']) {
                             case 2:
                                 $temp .= " = '" . $params['value'] . "' ";
                                 break;
                                 //equals
                             //equals
                             case 0:
                                 $temp .= " LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //contains
                             //contains
                             case 3:
                                 $temp .= " <> '" . $params['value'] . "' ";
                                 break;
                                 //not equal
                             //not equal
                             case 1:
                                 $temp .= " NOT LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //does not contain
                             //does not contain
                             case 4:
                                 $temp .= " LIKE '" . $params['value'] . "%' ";
                                 break;
                                 //starts with
                             //starts with
                             case 5:
                                 $temp .= " LIKE '%" . $params['value'] . "' ";
                                 break;
                                 //ends with
                             //ends with
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 2:
                         //lastname
                         $temp = " lastname ";
                         switch ($params['cond']) {
                             case 2:
                                 $temp .= " = '" . $params['value'] . "' ";
                                 break;
                                 //equals
                             //equals
                             case 0:
                                 $temp .= " LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //contains
                             //contains
                             case 3:
                                 $temp .= " <> '" . $params['value'] . "' ";
                                 break;
                                 //not equal
                             //not equal
                             case 1:
                                 $temp .= " NOT LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //does not contain
                             //does not contain
                             case 4:
                                 $temp .= " LIKE '" . $params['value'] . "%' ";
                                 break;
                                 //starts with
                             //starts with
                             case 5:
                                 $temp .= " LIKE '%" . $params['value'] . "' ";
                                 break;
                                 //ends with
                             //ends with
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 3:
                         //email
                         $temp = " email ";
                         switch ($params['cond']) {
                             case 2:
                                 $temp .= " = '" . $params['value'] . "' ";
                                 break;
                                 //equals
                             //equals
                             case 0:
                                 $temp .= " LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //contains
                             //contains
                             case 3:
                                 $temp .= " <> '" . $params['value'] . "' ";
                                 break;
                                 //not equal
                             //not equal
                             case 1:
                                 $temp .= " NOT LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //does not contain
                             //does not contain
                             case 4:
                                 $temp .= " LIKE '" . $params['value'] . "%' ";
                                 break;
                                 //starts with
                             //starts with
                             case 5:
                                 $temp .= " LIKE '%" . $params['value'] . "' ";
                                 break;
                                 //ends with
                             //ends with
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 4:
                         //register date
                         $date = substr(Format::dateDb($params['value'], 'date'), 0, 10);
                         $temp = " register_date ";
                         switch ($params['cond']) {
                             case 0:
                                 $temp .= " < '" . $date . " 00:00:00' ";
                                 break;
                                 //<
                             //<
                             case 1:
                                 $temp .= " <= '" . $date . " 23:59:59' ";
                                 break;
                                 //<=
                             //<=
                             case 2:
                                 $temp = " ( register_date >= '" . $date . " 00:00:00' AND register_date <= '" . $date . " 23:59:59' ) ";
                                 break;
                                 //=
                             //=
                             case 3:
                                 $temp .= " >= '" . $date . " 00:00:00' ";
                                 break;
                                 //>=
                             //>=
                             case 4:
                                 $temp .= " > '" . $date . " 23:59:59' ";
                                 break;
                                 //>
                             //>
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 5:
                         //lastenter
                         $date = substr(Format::dateDb($params['value'], 'date'), 0, 10);
                         $temp = " lastenter ";
                         switch ($params['cond']) {
                             case 0:
                                 $temp .= " < '" . $date . " 00:00:00' ";
                                 break;
                                 //<
                             //<
                             case 1:
                                 $temp .= " <= '" . $date . " 23:59:59' ";
                                 break;
                                 //<=
                             //<=
                             case 2:
                                 $temp = " ( lastenter >= '" . $date . " 00:00:00' AND lastenter <= '" . $date . " 23:59:59' ) ";
                                 break;
                                 //=
                             //=
                             case 3:
                                 $temp .= " >= '" . $date . " 00:00:00' ";
                                 break;
                                 //>=
                             //>=
                             case 4:
                                 $temp .= " > '" . $date . " 23:59:59' ";
                                 break;
                                 //>
                             //>
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     default:
                 }
                 break;
                 // filter on a custom field
             // filter on a custom field
             case _CUSTOM_FIELDS_PREFIX:
                 $fobj = $fman->getFieldInstance($id);
                 $in_conditions[] = $fobj->getFieldQuery($params);
                 break;
                 // other special field
             // other special field
             case _OTHER_FIELDS_PREFIX:
                 $ofobj = new OtherFieldsTypes();
                 $other_conditions[] = $ofobj->getFieldQuery($id, $params);
                 break;
             default:
         }
         //end switch
     }
     //end foreach
     if ($exclusive) {
         $query = $base_query . ' WHERE 1 ' . (!empty($std_condition) ? " AND " . implode(" AND ", $std_condition) : '') . (!empty($in_conditions) ? ' AND idst IN ( ' . implode(" ) AND idst IN ( ", $in_conditions) . ' ) ' : '') . (!empty($other_conditions) ? ' AND idst IN ( ' . implode(" ) AND idst IN ( ", $other_conditions) . ' ) ' : '');
     } else {
         $query = $base_query . ' WHERE 0 ' . (!empty($std_condition) ? ' OR  ( ' . implode(" ) OR idst IN ( ", $std_condition) . ' ) ' : '') . (!empty($in_conditions) ? ' OR idst IN ( ' . implode(" ) OR idst IN ( ", $in_conditions) . ' ) ' : '') . (!empty($other_conditions) ? ' OR idst IN ( ' . implode(" ) OR idst IN ( ", $other_conditions) . ' ) ' : '');
     }
     //produce output
     $output = array();
     $re = $this->db->query($query);
     while ($rw = $this->db->fetch_assoc($re)) {
         if ($rw['userid'] != '/Anonymous') {
             $output[] = $rw['idst'];
         }
     }
     return $output;
 }
Пример #14
0
function formatter_userid(&$column, &$record, &$data, $args = false)
{
    $acl = new DoceboACLManager();
    $output = $acl->relativeId($data);
    return $output;
}
Пример #15
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);
     }
 }
 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());
 }
Пример #17
0
function savemembers()
{
    checkPerm('subscribe');
    require_once _base_ . '/lib/lib.userselector.php';
    $id_group = importVar('id_group', true, 0);
    $acl_man = new DoceboACLManager();
    $user_select = new UserSelector();
    $user_selected = $user_select->getSelection($_POST);
    $old_users = $acl_man->getGroupUMembers($id_group);
    $add_members = array_diff($user_selected, $old_users);
    $del_members = array_diff($old_users, $user_selected);
    $re = true;
    if ($user_selected === $old_users) {
        Util::jump_to('index.php?modname=groups&op=groups&result=ok');
        return;
    }
    if (count($add_members)) {
        while (list(, $idst_user) = each($add_members)) {
            $re &= $acl_man->addToGroup($id_group, $idst_user);
        }
    }
    if (count($del_members)) {
        while (list(, $idst_user) = each($del_members)) {
            $re &= $acl_man->removeFromGroup($id_group, $idst_user);
        }
    }
    if (!$re) {
        Util::jump_to('index.php?modname=groups&op=groups&result=err');
    }
    Util::jump_to('index.php?modname=groups&op=groups&result=ok');
}
Пример #18
0
function subscribedel()
{
    checkPerm('subscribe', false, 'course');
    require_once $GLOBALS['where_lms'] . '/lib/lib.course.php';
    require_once _base_ . '/lib/lib.form.php';
    require_once _base_ . '/lib/lib.table.php';
    $id_course = importVar('id_course', true, 0);
    $course_to_save = Man_Course::saveCourseStatus();
    $edition_id = getCourseEditionId();
    $out =& $GLOBALS['page'];
    $lang =& DoceboLanguage::CreateInstance('subscribe', 'lms');
    $acl_man =& Docebo::user()->getAclManager();
    $levels = CourseLevel::getLevels();
    $user_alredy_subscribed = getSubscribed($id_course, false, false, true, $edition_id);
    $user_levels = getSubscribedLevel($id_course, false, false, $edition_id);
    require_once $GLOBALS['where_framework'] . '/lib/lib.adminmanager.php';
    $adminManager = new AdminManager();
    $acl_manager = new DoceboACLManager();
    $idst_associated = $adminManager->getAdminTree(getLogUserId());
    $array_user_associated =& $acl_manager->getAllUsersFromIdst($idst_associated);
    $user_level = Docebo::user()->getUserLevelId();
    if ($user_level != ADMIN_GROUP_GODADMIN) {
        $user_alredy_subscribed = array_intersect($user_alredy_subscribed, $array_user_associated);
    }
    $user_selected_info =& $acl_man->getUsers($user_alredy_subscribed);
    $GLOBALS['page']->add(getTitleArea($lang->def('_SUBSCRIBE'), 'subscribe') . '<div class="std_block">' . Form::openForm('levelselection', 'index.php?modname=subscribe&amp;op=subscriberemove') . Form::getHidden('id_course', 'id_course', $id_course) . Form::getHidden('edition_id', 'edition_id', $edition_id), 'content');
    $tb = new Table(0, $lang->def('_CAPTION_SELECT_LEVELS'), $lang->def('_SUMMARY_SELECT_LEVEL'));
    $type_h = array('', '', '', 'image');
    $content_h = array($lang->def('_USERNAME'), $lang->def('_FULLNAME'), $lang->def('_LEVEL'), '<img src="' . getPathImage() . 'standard/delete.png" alt="' . $lang->def('_DEL') . '">');
    $tb->addHead($content_h, $type_h);
    $num_user_sel = 0;
    if (is_array($user_selected_info)) {
        reset($user_selected_info);
        while (list($id_user, $user_info) = each($user_selected_info)) {
            // if the user isn't alredy subscribed to the course
            $content = array(substr($user_info[ACL_INFO_USERID], 1), $user_info[ACL_INFO_LASTNAME] . ' ' . $user_info[ACL_INFO_FIRSTNAME], $levels[$user_levels[$id_user]], $content[] = Form::getInputCheckbox('user_to_remove' . $id_user, 'user_to_remove[' . $id_user . ']', $id_user, false, '') . '<label class="access-only" for="user_to_remove' . $id_user . '">' . $user_info[ACL_INFO_USERID] . '</label>');
            $tb->addBody($content);
        }
        $GLOBALS['page']->add($tb->getTable(), 'content');
    }
    $GLOBALS['page']->add(Form::openButtonSpace() . '<br />' . Form::getButton('subscribe', 'subscribe', $lang->def('_DEL')) . Form::getButton('cancelselector', 'cancelselector', $lang->def('_UNDO')) . Form::closeButtonSpace() . Form::closeForm(), 'content');
    $GLOBALS['page']->add('</div>', 'content');
}
Пример #19
0
 public static function &createDoceboUserFromField($field_name, $field_val, $prefix = 'base')
 {
     $user_manager = new DoceboACLManager();
     $user_info = $user_manager->getUserInfoByField($field_name, $field_val);
     $ret_value = false;
     if ($user_info === false) {
         return $ret_value;
     }
     if ($user_info[ACL_INFO_VALID] != '1') {
         return $ret_value;
     }
     $login = $user_info[ACL_INFO_USERID];
     $du = new DoceboUser($login, $prefix);
     return $du;
 }
Пример #20
0
function modforumaccess()
{
    checkPerm('mod');
    require_once _base_ . '/lib/lib.userselector.php';
    $lang =& DoceboLanguage::createInstance('forum', 'lms');
    $out =& $GLOBALS['page'];
    $id_forum = importVar('idForum', true, 0);
    $aclManager = new DoceboACLManager();
    $user_select = new UserSelector();
    $user_select->show_user_selector = TRUE;
    $user_select->show_group_selector = TRUE;
    $user_select->show_orgchart_selector = FALSE;
    $user_select->show_fncrole_selector = FALSE;
    $user_select->learning_filter = 'course';
    $user_select->nFields = 0;
    if (isset($_POST['cancelselector'])) {
        Util::jump_to('index.php?modname=forum&amp;op=forum');
    }
    if (isset($_POST['okselector'])) {
        $user_selected = $user_select->getSelection($_POST);
        $query_reader = "\r\n\t\tSELECT idMember\r\n\t\tFROM " . $GLOBALS['prefix_lms'] . "_forum_access\r\n\t\tWHERE idForum = '" . $id_forum . "'";
        $re_reader = sql_query($query_reader);
        $old_users = array();
        while (list($id_user) = sql_fetch_row($re_reader)) {
            $old_users[] = $id_user;
        }
        $add_reader = array_diff($user_selected, $old_users);
        $del_reader = array_diff($old_users, $user_selected);
        if (is_array($add_reader)) {
            while (list(, $idst) = each($add_reader)) {
                $query_insert = "\r\n\t\t\t\tINSERT INTO " . $GLOBALS['prefix_lms'] . "_forum_access\r\n\t\t\t\t( idForum, idMember ) VALUES\r\n\t\t\t\t( \t'" . $id_forum . "',\r\n\t\t\t\t\t'" . $idst . "' )";
                sql_query($query_insert);
            }
        }
        if (is_array($del_reader)) {
            while (list(, $idst) = each($del_reader)) {
                $query_delete = "\r\n\t\t\t\tDELETE FROM " . $GLOBALS['prefix_lms'] . "_forum_access\r\n\t\t\t\tWHERE idForum = '" . $id_forum . "' AND idMember = '" . $idst . "'";
                sql_query($query_delete);
            }
        }
        Util::jump_to('index.php?modname=forum&amp;op=forum&amp;result=ok');
    }
    if (isset($_GET['load'])) {
        $query_reader = "\r\n\t\tSELECT idMember\r\n\t\tFROM " . $GLOBALS['prefix_lms'] . "_forum_access\r\n\t\tWHERE idForum = '" . $id_forum . "'";
        $re_reader = sql_query($query_reader);
        $users = array();
        while (list($id_user) = sql_fetch_row($re_reader)) {
            $users[$id_user] = $id_user;
        }
        $user_select->resetSelection($users);
    }
    $query_forum_name = "SELECT f.title\r\n\tFROM " . $GLOBALS['prefix_lms'] . "_forum AS f\r\n\tWHERE f.idCourse = " . (int) $_SESSION['idCourse'] . "\r\n\t\tAND f.idForum = " . (int) $id_forum . " ";
    $row = sql_fetch_row(sql_query($query_forum_name));
    $forum_name = $row[0];
    $arr_idstGroup = $aclManager->getGroupsIdstFromBasePath('/lms/course/' . (int) $_SESSION['idCourse'] . '/subscribed/');
    $user_select->setUserFilter('group', $arr_idstGroup);
    $user_select->setGroupFilter('path', '/lms/course/' . $_SESSION['idCourse'] . '/group');
    cout(getTitleArea(array('index.php?modname=forum&amp;op=forum' => $lang->def('_FORUM'), $lang->def('_FORUM_ACCESS') . ' "' . $forum_name . '" ' . $lang->def('_TO') . ''), 'forum') . '<div class="std_block">', 'content');
    $user_select->loadSelector('index.php?modname=forum&amp;op=modforumaccess&amp;idForum=' . $id_forum, '', $lang->def('_CHOOSE_FORUM_ACCESS'), true);
    cout('</div>', 'content');
}
Пример #21
0
 public function call($name, $params)
 {
     $output = false;
     // Loads user information according to the external user data provided:
     $params = $this->checkExternalUser($params, $_POST);
     if (!empty($params[0]) && !isset($params['idst'])) {
         $params['idst'] = $params[0];
         //params[0] should contain user idst
     }
     if (empty($params['idst']) && !empty($_POST['idst'])) {
         $params['idst'] = (int) $_POST['idst'];
     }
     switch ($name) {
         case 'listUsers':
         case 'userslist':
             $list = $this->getUsersList();
             if ($list['success']) {
                 $output = array('success' => true, 'list' => $list['users_list']);
             } else {
                 $output = array('success' => false);
             }
             break;
         case 'userdetails':
             if (count($params) > 0 && !isset($params['ext_not_found'])) {
                 //params[0] should contain user id
                 if (is_numeric($params['idst'])) {
                     $res = $this->getUserDetails($params['idst']);
                     if (!$res) {
                         $output = array('success' => false, 'message' => "Error: unable to retrieve user details.");
                     } else {
                         $output = array('success' => true, 'details' => $res['details']);
                     }
                 } else {
                     $output = array('success' => false, 'message' => 'Invalid passed parameter.');
                 }
             } else {
                 $output = array('success' => false, 'message' => 'No parameter provided.');
             }
             break;
         case 'customfields':
             $tmp_lang = false;
             //if not specified, use default language
             if (isset($params['language'])) {
                 $tmp_lang = $params['language'];
             }
             //check if a language has been specified
             $res = $this->getCustomFields($tmp_lang);
             if ($res != false) {
                 $output = array('success' => true, 'custom_fields' => $res);
             } else {
                 $output = array('success' => false, 'message' => 'Error: unable to retrieve custom fields.');
             }
             break;
         case 'create':
         case 'createuser':
             $res = $this->createUser($params, $_POST);
             if (is_array($res)) {
                 $output = $res;
             } else {
                 if ($res > 0) {
                     $output = array('success' => true, 'idst' => $res);
                 } else {
                     $output = array('success' => false, 'message' => 'Error: unable to create new user.');
                 }
             }
             break;
         case 'edit':
         case 'updateuser':
             if (count($params) > 0 && !isset($params['ext_not_found'])) {
                 //params[0] should contain user id
                 $res = $this->updateUser($params['idst'], $_POST);
                 if ($res > 0) {
                     $output = array('success' => true);
                 } elseif ($res < 0) {
                     $output = array('success' => false, 'message' => 'Error: incorrect param idst.');
                 }
             } else {
                 $output = array('success' => false, 'message' => 'Error: user id to update has not been specified.');
             }
             break;
         case 'delete':
         case 'deleteuser':
             if (count($params) > 0 && !isset($params['ext_not_found'])) {
                 //params[0] should contain user id
                 $output = $this->deleteUser($params['idst'], $_POST);
             } else {
                 $output = array('success' => false, 'message' => 'Error: user id to update has not been specified.');
             }
             break;
         case 'userdetailsbyuserid':
             $acl_man = new DoceboACLManager();
             $idst = $acl_man->getUserST($params['userid']);
             if (!$idst) {
                 $output = array('success' => false, 'message' => 'Error: invalid userid: ' . $params['userid'] . '.');
             } else {
                 $output = $this->getUserDetails($idst);
             }
             break;
         case 'userdetailsfromcredentials':
             if (!isset($params['ext_not_found'])) {
                 $output = $this->getUserDetailsFromCredentials($_POST);
             }
             break;
         case 'updateuserbyuserid':
             if (count($params) > 0) {
                 //params[0] should contain user id
                 $acl_man = new DoceboACLManager();
                 $idst = $acl_man->getUserST($params['userid']);
                 if (!$idst) {
                     $output = array('success' => false, 'message' => 'Error: invalid userid: ' . $params['userid'] . '.');
                 } else {
                     $res = $this->updateUser($idst, $_POST);
                     $output = array('success' => true);
                 }
             } else {
                 $output = array('success' => false, 'message' => 'Error: user id to update has not been specified.');
             }
             break;
         case 'userCourses':
         case 'mycourses':
             if (!isset($params['ext_not_found'])) {
                 $output = $this->getMyCourses($params['idst'], $_POST);
             }
             break;
         case 'kbsearch':
             if (!isset($params['ext_not_found'])) {
                 $output = $this->KbSearch($params['idst'], $_POST);
             }
             break;
         case 'importextusers':
             $output = $this->importExternalUsers($_POST);
             break;
         case 'importextusersfromemail':
             $output = $this->importExternalUsersFromEmail($_POST);
             break;
         case 'countusers':
             $output = $this->countUsers($_POST);
             break;
         case 'checkregcode':
             $output = $this->checkRegistrationCode($_POST);
             break;
         case 'checkUsername':
         case 'checkusername':
             $output = $this->checkUsername($_POST);
             break;
         default:
             $output = parent::call($name, $_POST);
     }
     return $output;
 }
Пример #22
0
 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;
 }