function get_time_filter()
 {
     $back_url = $this->back_url;
     $jump_url = $this->jump_url;
     $next_url = $this->next_url;
     require_once _base_ . '/lib/lib.form.php';
     $lang =& DoceboLanguage::createInstance('report', 'framework');
     //$sel = new Course_Manager();
     //$sel->setLink('index.php?modname=report&op=report_rows_filter');
     if (isset($_POST['undo_filter'])) {
         Util::jump_to($back_url);
     }
     if (!isset($_SESSION['report_tempdata']['columns_filter'])) {
         $_SESSION['report_tempdata']['columns_filter'] = array('timetype' => 'years', 'years' => 1, 'months' => 12);
     }
     $ref =& $_SESSION['report_tempdata']['columns_filter'];
     if (isset($_POST['update_tempdata'])) {
         $ref['years'] = Get::req('years', DOTY_INT, 1);
     } else {
         //...
     }
     //back to columns category selection
     if (isset($_POST['undo_filter'])) {
         Util::jump_to($back_url);
     }
     //filter setting done, go to next step
     if (isset($_POST['import_filter']) || isset($_POST['show_filter']) || isset($_POST['pre_filter'])) {
         $temp_url = $next_url;
         if (isset($_POST['pre_filter'])) {
             $temp_url .= '&show=1&nosave=1';
         }
         if (isset($_POST['show_filter'])) {
             $temp_url .= '&show=1';
         }
         Util::jump_to($temp_url);
     }
     $box = new ReportBox('choose_time');
     $box->title = $this->lang->def('_CHOOSE_TIME');
     $box->description = false;
     $year = date('Y');
     $dropdownyears = array(1 => $year, 2 => $year . ' - ' . ($year - 1), 3 => $year . ' - ' . ($year - 2), 4 => $year . ' - ' . ($year - 3), 5 => $year . ' - ' . ($year - 4), 6 => $year . ' - ' . ($year - 5), 7 => $year . ' - ' . ($year - 6));
     $box->body .= Form::getHidden('update_tempdata', 'update_tempdata', 1);
     $box->body .= Form::getDropDown($this->lang->def('_RA_CAT_TIME'), 'years', 'years', $dropdownyears, $ref['years']);
     $html = $box->get();
     cout($html);
 }
function create_report_name()
{
    checkPerm('mod');
    require_once $GLOBALS['where_lms'] . '/admin/modules/report/class.report.php';
    //reportbox class
    require_once $GLOBALS['where_lms'] . '/lib/lib.report.php';
    require_once _base_ . '/lib/lib.form.php';
    load_categories();
    $lang =& DoceboLanguage::createInstance('report');
    $step_index = 0;
    //$GLOBALS['page']->add( get_page_title($step_index) );
    $_SESSION['report_tempdata'] = array();
    $page_title = getTitleArea(array('index.php?modname=public_report_admin&op=reportlist' => $lang->def('_REPORT'), $lang->def('_NEW')), 'report');
    $GLOBALS['page']->add($page_title . '<div class="std_block">', 'content');
    $error = Get::req('err', DOTY_STRING, false);
    switch ($error) {
        case 'noname':
            $GLOBALS['page']->add(getErrorUi($lang->def('_REPORT_NONAME')));
            break;
    }
    $temp = array();
    foreach ($GLOBALS['report_categories'] as $key => $value) {
        $temp[$key] = $lang->def($value);
    }
    $GLOBALS['page']->add(Form::openForm('repcat_form', 'index.php?modname=public_report_admin&amp;op=create_rows') . Form::getHidden('set_category', 'set_category', 1) . Form::getTextField($lang->def('_NAME'), 'report_name', 'report_name', '200') . Form::getDropDown($lang->def('_SELECT_REPORT_CATEGORY'), '', 'id_report', $temp) . Form::openButtonSpace() . Form::getButton('', 'cat_forward', $lang->def('_NEXT'), false) . Form::getButton('', 'cat_undo', $lang->def('_UNDO'), false) . Form::closeButtonSpace() . Form::closeForm(), 'content');
    /*$lang->def('_REPORT_SCHEDMAN');$lang->def('_REPORT_SCHEDMAN_DESC');*/
    $GLOBALS['page']->add('</div>', 'content');
}
}
//end for
$_tabview_titles .= '</ul>';
$_tabview_contents .= '</div>';
echo $_tabview_titles . $_tabview_contents;
echo '</div>';
echo '<script type="text/javascript">YAHOO.util.Event.onDOMReady(function() {' . ' var tabs = new YAHOO.widget.TabView("competence_langs_tab"); });</script>';
//if we are editing an existing competence, than print its id
if (isset($id_competence)) {
    echo Form::getHidden('id_competence', 'id_competence', $id_competence);
}
//if we are creating a new competence, than get the category id in which the competence should be created
//if (isset($id_category)) echo Form::getHidden('id_category', 'id_category', $id_category);
//competence properties
echo Form::getDropDown(Lang::t('_TYPOLOGY', 'competences'), 'typology', 'typology', $competence_typologies, isset($competence_typology) ? $competence_typology : 'skill');
echo Form::getDropDown(Lang::t('_TYPE', 'standard'), 'type', 'type', $competence_types, isset($competence_type) ? $competence_type : 'score');
/*
echo Form::getTextfield(
	Lang::t('_SCORE', 'standard'),
	'score',
	'score',
	255,
	isset($competence_score) ? (int)$competence_score : ''
);

echo Form::getTextfield(
	Lang::t('_EXPIRATION', 'competences'),
	'expiration',
	'expiration',
	3,
	isset($competence_expiration) ? (int)$competence_expiration : '',
Example #4
0
function addadvice()
{
    checkPerm('mod');
    require_once _base_ . '/lib/lib.form.php';
    $lang =& DoceboLanguage::createInstance('advice');
    $form = new Form();
    //finding group
    $acl_man =& Docebo::user()->getAclManager();
    $db_groups = $acl_man->getBasePathGroupST('/lms/course/' . $_SESSION['idCourse'] . '/group/', true);
    $groups = array();
    $groups['me'] = $lang->def('_YOUONLY');
    while (list($idst, $groupid) = each($db_groups)) {
        $groupid = substr($groupid, strlen('/lms/course/' . $_SESSION['idCourse'] . '/group/'));
        if ($groupid == 'alluser') {
            $groupid = $lang->def('_ALL');
            $sel = $idst;
        }
        $groups[$idst] = $groupid;
    }
    $groups['sel_user'] = $lang->def('_MANUAL_USER_SEL');
    $title = array('index.php?modname=advice&amp;op=advice' => $lang->def('_ADVICE'), $lang->def('_ADD_ADVICE'));
    $GLOBALS['page']->add(getTitleArea($title, 'advice') . '<div class="std_block">' . getBackUi('index.php?modname=advice&amp;op=advice', $lang->def('_BACK')) . $form->openForm('adviceform', 'index.php?modname=advice&amp;op=insadvice') . $form->openElementSpace() . $form->getTextfield($lang->def('_TITLE'), 'title', 'title', 255, $lang->def('_NOTITLE')) . $form->getCheckbox($lang->def('_MARK_AS_IMPORTANT'), 'impo', 'impo', 1) . $form->getTextarea($lang->def('_DESCRIPTION'), 'description', 'description', $lang->def('_DESCRIPTION')) . $form->getDropDown($lang->def('_RECIPIENTS'), 'group', 'idGroup', $groups, $sel) . $form->closeElementSpace() . $form->openButtonSpace() . $form->getButton('addadvice', 'addadvice', $lang->def('_INSERT'), false, 'onclick="showMsg(\'' . $lang->def('_WAITING') . '\');"') . $form->getButton('undo', 'undo', $lang->def('_UNDO')) . $form->closeButtonSpace() . $form->closeForm() . '</div>', 'content');
}
Example #5
0
$sel_lang = $all_languages_id[$data["r_lang"]];
if ($data['r_type'] == 'scorm') {
    echo '<div class="align-right">';
    echo '<a href="#" id="subcategorize_switch" class="ico-wt-sprite subs_del"><span>' . Lang::t('_CATEGORIZE_OBJECT_ITEMS', 'kb') . '</span></a>';
    echo "</div>\n";
    $body = Form::openForm('add_res', $form_url) . Form::getHidden('subcategorize_switch', 'subcategorize_switch', '1') . Form::getHidden('org_categorize_switch_subcat', 'org_categorize_switch_subcat', '1');
    if (!empty($form_extra_hidden)) {
        foreach ($form_extra_hidden as $field_id => $val) {
            $body .= Form::getHidden($field_id, $field_id, $val);
        }
    }
    $body .= Form::closeForm();
    $body .= Lang::t('_YOU_WILL_LOSE_PREVIOUS_CATEGORIZATION', 'kb');
    $this->widget('dialog', array('id' => 'subcategorize_switch_dialog', 'dynamicContent' => false, 'dynamicAjaxUrl' => false, 'directSubmit' => true, 'header' => Lang::t('_AREYOUSURE', 'kb'), 'body' => $body, 'callback' => 'function() { this.destroy(); }', 'callEvents' => array(array('caller' => 'subcategorize_switch', 'event' => 'click'))));
}
echo Form::openElementSpace() . Form::getLineBox(Lang::t('_RESOURCE_ORIGINAL_NAME', 'kb'), $data['original_name']) . Form::getTextfield(Lang::t('_NAME', 'kb'), 'r_name', 'r_name', 255, Get::req('r_name', DOTY_MIXED, $data['r_name'])) . Form::getDropDown(Lang::t('_LANGUAGE', 'kb'), 'r_lang', 'r_lang', $all_languages, $sel_lang) . Form::getLineBox(Lang::t('_TYPE', 'kb'), $data['r_type']) . Form::getLineBox(Lang::t('_ENVIRONMENT', 'kb'), $data['r_env']) . Form::getCheckbox(Lang::t('_VISIBLE_BY_EVERYONE', 'kb'), 'force_visible', 'force_visible', 1, $data['force_visible']) . Form::getCheckbox(Lang::t('_IS_MOBILE', 'kb'), 'is_mobile', 'is_mobile', 1, $data['is_mobile']) . Form::getTextarea(Lang::t('_DESCRIPTION', 'kb'), 'r_desc', 'r_desc', Get::req('r_desc', DOTY_MIXED, $data['r_desc']));
?>

<div class="form_line_l">
	<p><label for="input_add_tag" class="floating"><?php 
echo Lang::t('_ADD_TAGS', 'kb');
?>
</label></p>
	<div class="form_autocomplete_container">
	<input type="text" alt="<?php 
echo Lang::t('_ADD_TAGS', 'kb');
?>
" maxlength="255" value="" name="input_add_tag" id="input_add_tag" class="textfield">
	<a href="" id="link_add_tag"><img alt="Add" src="<?php 
echo getPathImage();
?>
/**
 * COURSE PANEL
 * 
 * This module is a facilitator for the users re-training maded by the public administrators.
 * The public administrator will be informed of the users that are approching the expiration date for theirs
 * competences and allow the administrator to re-enroll them to courses that refresh those competences in order to keep
 * the final users up to date.
 */
function coursePanel()
{
    //check permissions
    checkPerm('view');
    $can_mod = checkPerm('mod', true);
    //required libraries
    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';
    //back page link
    $lang =& DoceboLanguage::CreateInstance('public_coursepanel', 'lms');
    $back_ui = getBackUi('index.php', $lang->def('_BACK'));
    $db = DbConn::getInstance();
    $man_competences = new Competences_Manager();
    //check the admin level of the current user, if it's not an admin or the idst is invalid, return an error
    $id_pa = getLogUserId();
    if (!$id_pa) {
        //error: the user is invalid
        cout($back_ui . $lang->def('_INVALID_ADMIN') . $back_ui, 'content');
        return;
    }
    /*
    	//months considered
    	$this_month = (int)date("m");
    	$month_1 = ((int)$this_month-1+1) % 12; $month_1++;
    	$month_2 = ((int)$this_month-1+2) % 12; $month_2++;
    
    	$months = array(
    		$lang->def('MONTH_'.((int)$this_month<10 ? '0' : '').(int)$this_month),
    		$lang->def('MONTH_'.((int)$month_1<10 ? '0' : '').(int)$month_1),
    		$lang->def('MONTH_'.((int)$month_2<10 ? '0' : '').(int)$month_2)
    	);
    */
    $acl_man = Docebo::user()->getAclManager();
    $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;
    }
    //already selected competence and course, if exist
    $sel_competence = Get::req('sel_competence', DOTY_INT, false);
    $sel_course = Get::req('sel_course', DOTY_INT, false);
    //$lang_code = Get::req('language', DOTY_ALPHANUM, getLanguage());
    $comps_1 = array();
    $comps_2 = array();
    //retrieve competences list for dropdown menu -- two steps filter
    //retrieve competences by users
    $query_competences_1 = "SELECT c.id_competence, cu.id_user FROM " . " %lms_competence as c JOIN " . " %lms_competence_user as cu ON " . " (c.id_competence=cu.id_competence AND cu.id_user IN (" . implode(",", $array_users) . "))";
    $res_competences_1 = $db->query($query_competences_1);
    while (list($id_comp, $id_user) = $db->fetch_row($res_competences_1)) {
        $comps_1[$id_comp] = $id_user;
    }
    if (empty($comps_1)) {
        //error, no competences
        cout($back_ui . $lang->def('_NO_COMPETENCES') . $back_ui, 'content');
        return;
    }
    //get number of days in which check if a course or a edition is starting
    $course_check_time = Docebo::user()->preference->getAdminPreference('admin_rules.course_check_time');
    //days from today
    //retrieve competences by courses
    $courses_dropdown = array();
    $query_competences_2 = "(SELECT c.id_competence, t.idCourse, t.name, t.course_type, cc.retraining FROM " . " %lms_competence as c JOIN " . " %lms_competence_course as cc JOIN " . " %lms_course as t ON " . "(c.id_competence=cc.id_competence AND cc.id_course=t.idCourse) " . "WHERE t.course_type IN ('classroom', 'elearning') AND c.id_competence IN (" . implode(",", array_keys($comps_1)) . ")" . ")";
    /*." UNION (SELECT c.id_competence, t.idCourse, t.name, t.course_type, cc.retraining FROM ".
    		$GLOBALS['prefix_lms']."_competence as c JOIN ".
    		$GLOBALS['prefix_lms']."_competence_course as cc JOIN ".
    		$GLOBALS['prefix_lms']."_course as t ON ".
    		"(c.id_competence=cc.id_competence AND cc.id_course=t.idCourse) ".
    		"WHERE t.course_type IN ('classroom', 'elearning') AND c.id_competence IN (".implode(",", array_keys($comps_1)).")".
    		")";*/
    $res_competences_2 = $db->query($query_competences_2);
    while (list($id_comp, $id_course, $course_name, $c_type, $retraining) = $db->fetch_row($res_competences_2)) {
        $comps_2[$id_comp] = $id_course;
        if (!isset($courses_dropdown[$id_comp])) {
            $courses_dropdown[$id_comp] = array();
        }
        $courses_dropdown[$id_comp][$id_course] = $course_name . ' (' . $c_type . ')' . ($retraining > 0 ? ' [' . $lang->def('_RETRAINING') . ']' : '');
    }
    if (empty($comps_2)) {
        //error, no competences
        cout($back_ui . $lang->def('_NO_COMPETENCES') . $back_ui, 'content');
        return;
    }
    $comps = array_keys($comps_2);
    unset($comps_1);
    unset($comps_2);
    $comps_names = $man_competences->getCompetencesName($comps);
    //----------------------------------------------------------------------------
    //retrieve courses for competences
    //$courses_dropdown = array();
    //check if selection for competence and course is valid
    if (!$sel_competence || !array_key_exists($sel_competence, $comps)) {
        $arr = array_keys($courses_dropdown);
        $sel_competence = $arr[0];
        //$comps[0];
    }
    if (!$sel_course || !isset($courses_dropdown[$sel_competence][$sel_course])) {
        foreach ($courses_dropdown as $key => $val) {
            if (count($val) > 0) {
                $sel_competence = $key;
                $arr = array_keys($val);
                $sel_course = $arr[0];
                break;
            }
        }
    }
    //check the course type (base or retraining)
    $is_retraining = $man_competences->isRetrainingCourse($sel_course, $sel_competence);
    //make script for courses dropdown auto-updating
    require_once _base_ . '/lib/lib.json.php';
    $json = new Services_JSON();
    $var = array();
    foreach ($courses_dropdown as $id_comp => $courses_list) {
        $content = "{id_competence: " . (int) $id_comp . ", courses: [";
        $clist = array();
        foreach ($courses_list as $id_course => $name) {
            $clist[] = '{id_course: ' . (int) $id_course . ', name: ' . $json->encode($name) . '}';
        }
        $content .= implode(',', $clist) . "]}";
        $var[] = $content;
    }
    //addYahooJs(array('dom'=>'dom-min.js', 'event'=>'event-min.js', 'selector'=>'selector-beta-min.js'));
    YuiLib::load('selector');
    cout('<script type="text/javascript">
			var sel_options = [' . implode(',', $var) . '];
			YAHOO.util.Event.onDOMReady(function() {
				var s1 = YAHOO.util.Dom.get("competence_selector");
				var s2 = YAHOO.util.Dom.get("course_selector");
				YAHOO.util.Event.addListener(s1, "change", function(e) {
					var opt, id_comp = this.value;
					for (var i=0; i<sel_options.length; i++) {
						if (sel_options[i].id_competence == id_comp) {
							s2.innerHTML = "";
							for (var j=0; j<sel_options[i].courses.length; j++) {
								opt = new Option(sel_options[i].courses[j].name, sel_options[i].courses[j].id_course);
								s2.add(opt, null);
							}
							break;
						}
					}
				});
			});
		</script>', 'page_head');
    //----------------------------------------------------------------------------
    $table_head_style = array('', 'image', 'align_center');
    $table_head_content = array($lang->def('_USERNAME'), $lang->def('_MANDATORY'), $lang->def('_DATE_EXPIRE'));
    $man_course = new Man_Course();
    $date_man = new DateManager();
    $course_info = $man_course->getCourseInfo($sel_course);
    //echo '<pre>'.print_r($course_info, true).'</pre>';
    if ($course_info['course_type'] == 'elearning') {
        $editions[] = (int) $sel_course;
        $subscribed[$sel_course] = getSubscribed($sel_course);
        $table_head_content[] = $course_info['name'];
        $table_head_style[] = 'align_center';
    } elseif ($course_info['course_type'] == 'classroom') {
        //retrieve editions for table columns and subscribed users
        $subscribed = array();
        $editions = array();
        if ($course_check_time > 0) {
            $id_list = array();
            $query_begindates = "SELECT dy.id_date, MIN(dy.date_begin) as date_begin " . " FROM %lms_course_date as dt " . " JOIN %lms_course_date_day as dy ON (dy.id_date = dt.id_date) " . " WHERE dt.id_course='" . (int) $sel_course . "' GROUP BY dy.id_date ORDER BY dy.date_begin";
            $res = $db->query($query_begindates);
            while (list($id_date, $date_begin) = $db->fetch_row($res)) {
                if ($date_begin >= date("Y-m-d") && $date_begin <= date("Y-m-d", strtotime("+" . $course_check_time . " days"))) {
                    $id_list[] = $id_date;
                }
            }
            /*
            			$query_editions = "SELECT dt.id_date, dt.id_course, dt.code, dt.name, MIN(dy.date_begin) as min "
            				." FROM %lms_course_date as dt "
            				." JOIN %lms_course_date_day as dy ON (dy.id_date = dt.id_date) "
            				." WHERE dt.id_course='".(int)$sel_course."' AND dy.date_begin BETWEEN NOW() AND '"
            				.date("Y-m-d", strtotime("+".$course_check_time." days"))."' GROUP BY dt.id_date ORDER BY dy.date_begin";
            */
            $query_editions = "SELECT id_date, id_course, code, name FROM %lms_course_date WHERE " . (count($id_list) > 0 ? "id_date IN (" . implode(",", $id_list) . ") " : "0");
        } else {
            $query_editions = "SELECT id_date, id_course, code, name FROM %lms_course_date WHERE id_course='" . (int) $sel_course . "' ";
        }
        $res_editions = $db->query($query_editions);
        if (sql_num_rows($res_editions) > 0) {
            while (list($id_edition, $id_course, $code, $name) = $db->fetch_row($res_editions)) {
                $table_head_style[] = 'align_center';
                $date_info = $date_man->getDateInfo($id_edition);
                $table_head_content[] = $name . '<br />' . $lang->def('_DATE_BEGIN') . ': ' . Format::date($date_info['date_begin'], 'date') . '<br />' . $lang->def('_DATE_END') . ': ' . Format::date($date_info['date_end'], 'date') . '<br />' . $lang->def('_AVAIL_PLACES') . ': <span id="available_places_count_' . $id_edition . '">' . (int) ($date_info['max_par'] - $date_info['user_subscribed']) . '</span> (' . $date_info['max_par'] . ')';
                $editions[] = $id_edition;
                $subscribed[$id_edition] = $date_man->getDateSubscribed($id_edition);
            }
        } else {
        }
    }
    //retrieve expiration time for every user
    $expiries = array();
    $query_check = "SELECT id_user, date_expire " . " FROM %lms_competence_user " . " WHERE id_user IN (" . implode(",", $array_users) . ") AND id_competence='" . (int) $sel_competence . "'";
    $res_check = $db->query($query_check);
    while (list($id_user, $date_expire) = $db->fetch_row($res_check)) {
        $expiries[$id_user] = $date_expire;
    }
    //filter array of user ids by competence
    $filtered_users = array();
    //------------------------------------------------------------------------------
    $required_filter = Get::req('required_filter', DOTY_INT, 0);
    $expire_duration = $man_competences->getCompetenceExpirationCheckTime($id_comp);
    if ($is_retraining || $required_filter > 0) {
        $query_filter_time = "";
        if ($expire_duration > 0) {
            //if a time for checking expiration has been set, then filter on a time period
            $date_begin = date("Y-m-d", strtotime("-" . $expire_duration . " days"));
            $date_end = date("Y-m-d", strtotime("+" . $expire_duration . " days"));
            $query_filter_time = " AND date_expire>'" . $date_begin . "' AND date_expire<'" . $date_end . "'";
        }
        $query_filter = "SELECT id_user FROM %lms_competence_user WHERE id_user IN (" . implode(",", $array_users) . ") AND id_competence='" . (int) $sel_competence . "' " . $query_filter_time;
        $res_filter = $db->query($query_filter);
        while (list($idst) = $db->fetch_row($res_filter)) {
            $filtered_users[] = $idst;
        }
    }
    if (!$is_retraining || $required_filter > 0) {
        //get user with required competence which is not yet obtained
        $required_users = array();
        $req_data = $man_competences->GetCompetence($sel_competence);
        $already = array();
        $query = "SELECT id_user, score_init, score_got FROM %lms_competence_user WHERE id_competence='" . (int) $sel_competence . "'";
        $res = $db->query($query);
        while (list($id_user, $score_init, $score_got) = $db->fetch_row($res)) {
            if ($req_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);
        $req_users = array_diff($array_users, $already);
        //get required competences not got from users
        $query = "";
        if ($req_data['type'] == 'score') {
            $query = "SELECT u.idst FROM %lms_competence_required as cr " . " JOIN %adm_user as u ON (cr.idst = u.idst)" . " WHERE cr.idst IN (" . implode(",", $req_users) . ") AND cr.id_competence=" . (int) $sel_competence . "";
        } else {
            $query = "SELECT u.idst FROM %lms_competence_required as cr " . " JOIN %adm_user as u ON (cr.idst = u.idst) " . " WHERE cr.idst IN (" . implode(",", $req_users) . ") AND cr.id_competence=" . (int) $sel_competence . "";
        }
        $res = $db->query($query);
        if (sql_num_rows($res) > 0) {
            while (list($idst) = $db->fetch_row($res)) {
                $required_users[] = $idst;
            }
        }
        //get users expired from too long time
        if ($expire_duration > 0) {
            $query = "SELECT id_user FROM %lms_competence_user " . " WHERE date_expire<'" . date("Y-m-d", strtotime("-" . $expire_duration . " days")) . "' AND date_expire<>'0000-00-00 00:00:00' " . " AND id_competence=" . (int) $sel_competence;
            $res = $db->query($query);
            while (list($idst) = $db->fetch_row($res)) {
                $required_users[] = $idst;
            }
        }
        //merge results
        if (count($required_users) > 0) {
            if (count($filtered_users) > 0) {
                $filtered_users = array_merge($filtered_users, $required_users);
            } else {
                $filtered_users = $required_users;
            }
        }
    }
    //------------------------------------------------------------------------------
    $filtered_users = array_unique($filtered_users);
    //draw table
    $table = new Table(0);
    $form = new Form();
    $table->addHead($table_head_content, $table_head_style);
    $totals = array();
    for ($i = 0; $i < count($editions); $i++) {
        $totals[$i] = 0;
    }
    //check the expiration time  of the current competence
    list($expiry_time) = $db->fetch_row($db->query("SELECT expiration FROM %lms_competence WHERE id_competence='" . (int) $sel_competence . "'"));
    if ($expiry_time === false) {
        //error, we need a number (it should never enter this branch though)
        //error, no competences
        cout($back_ui . $lang->def('_NO_EXPIRATION_TIME') . $back_ui, 'content');
        return;
    }
    $checkbox_list_script = array();
    foreach ($editions as $id_edition) {
        $checkbox_list_script[$id_edition] = array();
    }
    $expiring_users_count = 0;
    $req_count = 0;
    //filtered data to consider in saving operation
    $to_consider = array('users' => array(), 'editions' => array());
    for ($i = 0; $i < count($editions); $i++) {
        $to_consider['editions'][] = $editions[$i];
    }
    //retrieve users' data for table rows (little fast query)
    if (count($filtered_users) > 0) {
        $query_users = "SELECT idst, userid, lastname, firstname FROM %adm_user WHERE idst IN (" . implode(",", $filtered_users) . ") ORDER BY userid, lastname, firstname";
        $res_users = $db->query($query_users);
        //retrieve users with required competence
        $just_required = array();
        $query_req = "SELECT idst FROM %lms_competence_required " . " WHERE id_competence=" . (int) $sel_competence . " AND idst IN (" . implode(",", $filtered_users) . ")";
        $res_req = $db->query($query_req);
        while (list($idst) = $db->fetch_row($res_req)) {
            $just_required[] = $idst;
        }
        while (list($idst, $userid, $firstname, $lastname) = $db->fetch_row($res_users)) {
            $line = array();
            //filtered users to consider in saving operations
            $to_consider['users'][] = $idst;
            //check if the expiring date of the competence is less than 30 days from now or it's already expired (change bg color then)
            $user_expiring = false;
            $background = "";
            if ($expiry_time > 0) {
                if (isset($expiries[$idst])) {
                    //$time1 = fromDateTimeToTimestamp($expiries[$idst]) + $expiry_time * 24 * 3600;
                    //$time2 = time();
                    //if (($time2-$time1) < 2592000) $user_expiring = true;
                    if ($expiries[$idst] < date("Y-m-d H:i:s")) {
                        $user_expiring = true;
                    }
                }
            }
            if ($user_expiring) {
                $background .= 'bg_highlight';
                $expiring_users_count++;
            }
            $line[] = $acl_man->relativeId($userid) . "&nbsp;(" . $firstname . "&nbsp;" . $lastname . ")";
            //swap these
            $is_req = in_array($idst, $just_required);
            if ($is_req) {
                $req_count++;
            }
            $line[] = $is_req ? '<image src="' . getPathImage('framework') . 'standard/flag.gif" />' : '';
            $line[] = '<div class="' . $background . '">' . (isset($expiries[$idst]) ? Format::date($expiries[$idst], "date") : '-') . '</div>';
            for ($i = 0; $i < count($editions); $i++) {
                //check if the actual considered user is subscribed to this class' edition (then flag the checkbox)
                $is_subscribed = false;
                if (isset($subscribed[$editions[$i]][$idst])) {
                    $is_subscribed = true;
                    $totals[$i]++;
                    //update total subscriptions
                }
                if ($course_info['course_type'] == 'elearning') {
                    $line[] = '<div class="align_center">' . $form->getInputCheckbox('subscriptions_' . $idst, 'subscriptions[' . $idst . '][' . $editions[$i] . ']', 1, $is_subscribed, false) . '</div>';
                    $checkbox_list_script[$editions[$i]][] = '"subscriptions_' . $idst . '"';
                } elseif ($course_info['course_type'] == 'classroom') {
                    $line[] = '<div class="align_center">' . $form->getInputCheckbox('subscriptions_' . $idst . '_' . $editions[$i], 'subscriptions[' . $idst . '][' . $editions[$i] . ']', 1, $is_subscribed, false) . '</div>';
                    $checkbox_list_script[$editions[$i]][] = '"subscriptions_' . $idst . '_' . $editions[$i] . '"';
                }
            }
            $table->addBody($line);
        }
    }
    //totals line
    $line = array();
    $line[] = $lang->def('_TOTAL');
    $line[] = '<div class="align_center">' . (int) $req_count . '</div>';
    $line[] = '<div class="align_center">' . (int) $expiring_users_count . '</div>';
    for ($i = 0; $i < count($editions); $i++) {
        $line[] = '<div class="align_center">' . (int) $totals[$i] . '</div>';
    }
    $table->addFoot($line);
    //echo '<pre class="align_left">'.print_r($checkbox_list_script, true).'</pre>';
    //script to check available places in real-time
    $avail_script = '<script type="text/javascript">
			function setupAvailablePlaces() {';
    foreach ($editions as $id_edition) {
        $date_info = $date_man->getDateInfo($id_edition);
        $avail_script .= '
				YAHOO.util.Event.addListener([' . implode(',', $checkbox_list_script[$id_edition]) . '], "click", function(e, o) {
					max_avail_places_' . $id_edition . ' = ' . (int) ($date_info['max_par'] - $date_info['user_subscribed']) . ';
					var i, edition_boxes = YAHOO.util.Dom.get([' . implode(',', $checkbox_list_script[$id_edition]) . ']);
					var edition_count = 0, edition_max = ' . (int) $date_info['max_par'] . ';
					for (i=0; i<edition_boxes.length; i++) {
						if (edition_boxes[i].checked) edition_count++;
					}
					YAHOO.util.Dom.get("available_places_count_' . $id_edition . '").innerHTML = ""+(edition_max - edition_count);
					if (edition_count >= edition_max) {
						for (i=0; i<edition_boxes.length; i++) {
							if (!edition_boxes[i].checked) edition_boxes[i].disabled = true;
						}
					} else {
						for (i=0; i<edition_boxes.length; i++) {
							if (edition_boxes[i].disabled) edition_boxes[i].disabled = false;
						}
					}
				});';
    }
    $avail_script .= '}
			setupAvailablePlaces();
		</script>';
    cout($avail_script, 'page_head');
    //any error message from previous operations?
    $message = "";
    $err = Get::req('err', DOTY_MIXED, false);
    switch ($err) {
        case 'invalid':
            $message .= getErrorUi($lang->def('_ERROR_WHILE_SUBSCRIBING') . '.');
            break;
        case 'ok':
            $content = $lang->def('_SUBSCRIBE_SUCCESSFULL');
            $count = Get::req('count', DOTY_MIXED, false);
            if ($count !== false && is_numeric($count)) {
                $content .= "&nbsp;(" . $lang->def('_NUM_SUBSCRIBED') . ":&nbsp;" . $count . ")";
            }
            $message .= getResultUi($content);
            break;
    }
    //print page
    cout(getTitleArea($lang->def('_COURSEPANEL'), 'coursepanel') . '<div class="std_block">' . $message . $back_ui, 'content');
    cout('<link rel="stylesheet" type="text/css" href="' . Get::rel_path('base') . '/addons/yui/grids/grids-min.css">', 'page_head');
    $comps_list = $man_competences->GetCompetencesList();
    //write period of checking for expiration, from beginning date to ending date
    $date_1 = $expire_duration > 0 ? date("Y-m-d H:i:s", strtotime("-" . $expire_duration . " days")) : "";
    $date_2 = $expire_duration > 0 ? date("Y-m-d H:i:s", strtotime("+" . $expire_duration . " days")) : "";
    if ($date_1 != "" && $date_2 != "") {
        $date_period = Format::date($date_1, "date") . ' - ' . Format::date($date_2, "date");
    } else {
        $date_period = '(' . $lang->def('_ALL') . ')';
    }
    $selector = "";
    //$selector .= $form->openElementSpace();
    $selector .= '<div class="yui-g"><div id="select_1" class="yui-u first align_left">';
    $selector .= $form->openForm('action_panel', "index.php?modname=public_coursepanel&op=coursepanel");
    $selector .= $form->openElementSpace();
    $selector .= '<p class="align_left">' . $lang->def('_EXPIRING_USERS_FOR_PERIOD') . ':&nbsp;<b>' . $date_period . '</b>;</p>';
    //$selector .= $lang->def('_FOR_COMPETENCE').':&nbsp;';
    $selector .= $form->getDropDown($lang->def('_FOR_COMPETENCE') . ':&nbsp;', 'competence_selector', 'sel_competence', $comps_names, $sel_competence, '');
    $selector .= $form->getDropDown($lang->def('_FOR_COURSE') . ':&nbsp;', 'course_selector', 'sel_course', $courses_dropdown[$sel_competence], $sel_course, '');
    $selector .= $form->openButtonSpace();
    $selector .= $form->getButton('update', 'update', $lang->def('_UPDATE'));
    $selector .= $form->closeButtonSpace();
    $selector .= $form->closeElementSpace();
    $selector .= $form->closeForm();
    $selector .= '</div><div id="select_2" class="yui-u align_left">';
    //if (count($comps_list)>0) { ...
    $selector .= $form->openElementSpace();
    $selector .= $form->openForm('action_panel', "index.php?modname=public_coursepanel&op=expired");
    $selector .= $form->getHidden('expire_sel_competence', 'sel_competence', $sel_competence);
    $selector .= $form->getHidden('expire_sel_course', 'sel_course', $sel_course);
    $selector .= $form->getDropdown($lang->def('_CHOOSE_COMPETENCE_TO_SEE_EXPIRED'), 'expired_selector', 'expired_selector', $comps_list);
    $selector .= $form->openButtonSpace();
    $selector .= $form->getButton('update_expired', 'update_expired', $lang->def('_UPDATE'));
    $selector .= $form->closeButtonSpace();
    $selector .= $form->closeForm();
    $selector .= $form->getBreakRow();
    $selector .= $form->openForm('action_panel', "index.php?modname=public_coursepanel&op=required");
    $selector .= $form->getHidden('expire_sel_competence_req', 'sel_competence_req', $sel_competence);
    $selector .= $form->getHidden('expire_sel_course_req', 'sel_course_req', $sel_course);
    $selector .= $form->getDropDown($lang->def('_CHOOSE_REQUIRED_COMPETENCES'), 'required_selector', 'required_selector', $comps_list);
    $selector .= $form->openButtonSpace();
    $selector .= $form->getButton('update_required', 'update_required', $lang->def('_UPDATE'));
    $selector .= $form->closeButtonSpace();
    $selector .= $form->closeForm();
    $selector .= $form->closeElementSpace();
    $selector .= '</div></div><div class="no_float"></div>';
    //$selector .= $form->closeElementSpace();
    //legend which explains what highlighted users mean
    $legend = '<div class="align_left"><div style="display:inline-block;width:12px;height:12px;" class="bg_highlight"></div> = ' . $lang->def('_EXPIRED_COMPETENCE') . '</div>';
    cout('<div class="align_center">' . $selector . '</div>', 'content');
    cout($form->openForm('comp_panel', "index.php?modname=public_coursepanel&op=savepanel"), 'content');
    cout($form->getHidden('sel_competence', 'sel_competence', $sel_competence), 'content');
    cout($form->getHidden('sel_course', 'sel_course', $sel_course), 'content');
    cout($form->openElementSpace(), 'content');
    cout('<div class="align_left">', 'content');
    if ($is_retraining) {
        cout($form->getCheckbox($lang->def('_SHOW_REQUIRED'), 'required_filter', 'required_filter', 1, $required_filter), 'content');
    } else {
        cout($form->getCheckbox($lang->def('_SHOW_EXPIRED'), 'required_filter', 'required_filter', 1, $required_filter), 'content');
    }
    cout('</div>', 'content');
    cout($form->closeElementSpace(), 'content');
    cout('<div class="align_left">', 'content');
    cout('<p>' . ($is_retraining ? $lang->def('_IS_RETRAINING_COURSE') : $lang->def('_IS_TRAINING_COURSE')) . '</p>', 'content');
    if ($course_info['course_type'] == 'classroom' && $course_check_time > 0) {
        $check_date_1 = Format::date(date("Y-m-d"), "date");
        $check_date_2 = Format::date(date("Y-m-d H:i:s", strtotime("+" . $course_check_time . " days")), "date");
        cout('<p>' . $lang->def('_COURSE_CHECKING_PERIOD') . ': ' . $check_date_1 . ' - ' . $check_date_2 . '</p>', 'content');
    }
    cout('</div>', 'content');
    if (empty($editions)) {
        //no editions to display (it should have been pre-selected only courses with available editions)
        cout('<p>' . $lang->def('_NO_CONTENT') . '</p>', 'content');
    } else {
        cout($table->getTable(), 'content');
    }
    cout($legend, 'content');
    cout($form->getHidden('to_consider', 'to_consider', base64_encode($json->encode($to_consider))), 'content');
    cout($form->openButtonSpace() . $form->getButton('save', 'save', $lang->def('_SAVE')) . $form->getButton('undo', 'undo', $lang->def('_UNDO')) . $form->closeButtonSpace(), 'content');
    cout($form->closeForm() . $back_ui . '</div>', 'content');
    cout('<script type="text/javascript">
			YAHOO.util.Event.addListener("required_filter", "click", function(e) {
				var show_required = this.checked, comp_form = YAHOO.util.Dom.get("comp_panel");
				comp_form.action = comp_form.action.replace("&op=savepanel", "&op=coursepanel");
				comp_form.submit();
			});
		</script>', 'page_head');
}
Example #7
0
function report_category()
{
    checkPerm('mod');
    require_once _lms_ . '/admin/modules/report/class.report.php';
    //reportbox class
    require_once _lms_ . '/lib/lib.report.php';
    //require_once('report_categories.php');
    load_categories();
    $lang =& DoceboLanguage::createInstance('report');
    $step_index = 0;
    cout(getTitleArea(array('index.php?modname=report&amp;op=reportlist' => $lang->def('_REPORT'), $lang->def('_NEW')), 'report') . '<div class="std_block">');
    $error = Get::req('err', DOTY_STRING, false);
    switch ($error) {
        case 'noname':
            cout(getErrorUi($lang->def('_ERROR_NONAME')));
            break;
    }
    $temp = array();
    foreach ($GLOBALS['report_categories'] as $key => $value) {
        $temp[$key] = $lang->def($value);
    }
    cout(Form::openForm('repcat_form', 'index.php?modname=report&op=report_rows_filter') . Form::getHidden('set_category', 'set_category', 1) . Form::getTextField($lang->def('_NAME'), 'report_name', 'report_name', '200') . Form::getDropDown($lang->def('_SELECT_REPORT_CATEGORY'), '', 'id_report', $temp) . Form::openButtonSpace() . Form::getButton('cat_forward', 'cat_forward', $lang->def('_NEXT')) . Form::getButton('cat_undo', 'cat_undo', $lang->def('_UNDO')) . Form::closeButtonSpace() . Form::closeForm(), 'content');
    cout('</div>', 'content');
}