Adding company reports see BT#5476

skala
Julio Montoya 13 years ago
parent fb7f22a982
commit b0951147b8
  1. 7
      main/admin/index.php
  2. 46
      main/inc/ajax/model.ajax.php
  3. 65
      main/inc/lib/course.lib.php
  4. 2
      main/inc/lib/usermanager.lib.php
  5. 87
      main/mySpace/company_reports.php

@ -147,10 +147,11 @@ if (api_is_platform_admin()) {
$items[] = array('url'=>'settings.php?category=Plugins','label' => get_lang('Plugins'));
$items[] = array('url'=>'settings.php?category=Regions','label' => get_lang('Regions'));
$items[] = array('url'=>'system_announcements.php', 'label' => get_lang('SystemAnnouncements'));
$items[] = array('url'=>api_get_path(WEB_CODE_PATH).'calendar/agenda_js.php?type=admin', 'label' => get_lang('GlobalAgenda'));
$items[] = array('url'=> api_get_path(WEB_CODE_PATH).'calendar/agenda_js.php?type=admin', 'label' => get_lang('GlobalAgenda'));
$items[] = array('url'=>'configure_homepage.php', 'label' => get_lang('ConfigureHomePage'));
$items[] = array('url'=>'configure_inscription.php', 'label' => get_lang('ConfigureInscription'));
$items[] = array('url'=>'statistics/index.php', 'label' => get_lang('Statistics'));
$items[] = array('url'=> api_get_path(WEB_CODE_PATH).'mySpace/company_reports.php', 'label' => get_lang('Reports'));
/* Event settings */
@ -222,12 +223,8 @@ if (api_is_platform_admin()) {
if (is_dir(api_get_path(SYS_TEST_PATH).'datafiller/')) {
$items[] = array('url'=>'filler.php', 'label' => get_lang('DataFiller'));
}
//if (api_is_global_platform_admin()) {
$items[] = array('url'=>'archive_cleanup.php', 'label' => get_lang('ArchiveDirCleanup'));
//}
$items[] = array('url'=>'system_management.php', 'label' => get_lang('SystemManagement'));
//$items[] = array('url'=>'statistics/index.php?action=activities', 'label' => get_lang('ImportantActivities'));
$blocks['settings']['items'] = $items;
$blocks['settings']['extra'] = null;

@ -68,15 +68,17 @@ function get_where_clause($col, $oper, $val) {
if (empty($col)){
return '';
}
if($oper == 'bw' || $oper == 'bn') $val .= '%';
if($oper == 'ew' || $oper == 'en' ) $val = '%'.$val;
if($oper == 'cn' || $oper == 'nc' || $oper == 'in' || $oper == 'ni') $val = '%'.$val.'%';
if ($oper == 'bw' || $oper == 'bn') $val .= '%';
if ($oper == 'ew' || $oper == 'en' ) $val = '%'.$val;
if ($oper == 'cn' || $oper == 'nc' || $oper == 'in' || $oper == 'ni') $val = '%'.$val.'%';
$val = Database::escape_string($val);
return " $col {$ops[$oper]} '$val' ";
}
$where_condition = ""; //if there is no search request sent by jqgrid, $where should be empty
$operation = isset($_REQUEST['oper']) ? $_REQUEST['oper'] : false;
$search_field = isset($_REQUEST['searchField']) ? $_REQUEST['searchField'] : false;
$search_oper = isset($_REQUEST['searchOper']) ? $_REQUEST['searchOper'] : false;
$search_string = isset($_REQUEST['searchString']) ? $_REQUEST['searchString'] : false;
@ -114,6 +116,9 @@ if (!$sidx) $sidx = 1;
//@todo rework this
switch ($action) {
case 'get_user_course_report':
$count = CourseManager::get_count_user_list_from_course_code();
break;
case 'get_user_skill_ranking':
$skill = new Skill();
$count = $skill->get_user_list_skill_ranking_count();
@ -216,6 +221,16 @@ $is_allowedToEdit = api_is_allowed_to_edit(null,true) || api_is_allowed_to_edit(
$columns = array();
switch ($action) {
case 'get_user_course_report':
$columns = array('course', 'user', 'time', 'status', 'score');
$extra_fields = UserManager::get_extra_fields(0, 100, null, null, true, true);
if (!empty($extra_fields)) {
foreach($extra_fields as $extra) {
$columns[] = $extra['1'];
}
}
$result = CourseManager::get_user_list_from_course_code(null, null, "LIMIT $start, $limit", " $sidx $sord", null, null, true);
break;
case 'get_user_skill_ranking':
$columns = array('photo', 'firstname', 'lastname', 'skills_acquired', 'currently_learning', 'rank');
$result = $skill->get_user_list_skill_ranking($start, $limit, $sidx, $sord, $where_condition);
@ -467,7 +482,9 @@ $allowed_actions = array('get_careers',
'get_timelines',
'get_grade_models',
'get_event_email_template',
'get_user_skill_ranking');
'get_user_skill_ranking',
'get_user_course_report'
);
//5. Creating an obj to return a json
if (in_array($action, $allowed_actions)) {
@ -475,7 +492,26 @@ if (in_array($action, $allowed_actions)) {
$response->page = $page;
$response->total = $total_pages;
$response->records = $count;
$i=0;
if ($operation && $operation == 'excel') {
$j = 1;
require_once api_get_path(LIBRARY_PATH).'export.lib.inc.php';
$array = array();
foreach ($columns as $col) {
$array[0][] = $col;
}
foreach ($result as $row) {
foreach ($columns as $col) {
$array[$j][] = strip_tags($row[$col]);
}
$j++;
}
Export :: export_table_csv($array, 'company_report');
exit;
}
$i = 0;
if (!empty($result)) {
foreach ($result as $row) {
//print_r($row);

@ -1123,7 +1123,7 @@ class CourseManager {
* @param int if using the session_id: 0 or 2 (student, coach), if using session_id = 0 STUDENT or COURSEMANAGER
* @return array
*/
public static function get_user_list_from_course_code($course_code, $session_id = 0, $limit = '', $order_by = '', $filter_by_status = null) {
public static function get_user_list_from_course_code($course_code = null, $session_id = 0, $limit = null, $order_by = null, $filter_by_status = null, $return_count = null, $add_reports = false) {
// variable initialisation
$session_id = intval($session_id);
$course_code = Database::escape_string($course_code);
@ -1131,8 +1131,9 @@ class CourseManager {
// if the $order_by does not contain 'ORDER BY' we have to check if it is a valid field that can be sorted on
if (!strstr($order_by,'ORDER BY')) {
if (!empty($order_by) AND in_array($order_by, array('lastname', 'firstname', 'username', 'email', 'official_code'))) {
$order_by = 'ORDER BY user.'.$order_by;
//if (!empty($order_by) AND in_array($order_by, array('lastname', 'firstname', 'username', 'email', 'official_code'))) {
if (!empty($order_by)) {
$order_by = 'ORDER BY '.$order_by;
} else {
$order_by = '';
}
@ -1155,13 +1156,27 @@ class CourseManager {
$filter_by_status = intval($filter_by_status);
$filter_by_status_condition = " session_course_user.status = $filter_by_status AND ";
}
} else {
if ($return_count) {
$sql = " SELECT COUNT(*) as count";
} else {
if (empty($course_code)) {
$sql = 'SELECT DISTINCT course.title, course.code, course_rel_user.status as status_rel, user.user_id, course_rel_user.role, course_rel_user.tutor_id, user.* ';
} else {
$sql = 'SELECT DISTINCT course_rel_user.status as status_rel, user.user_id, course_rel_user.role, course_rel_user.tutor_id, user.* ';
$sql .= ' FROM '.Database::get_main_table(TABLE_MAIN_USER).' as user ';
}
}
$sql .= ' FROM '.Database::get_main_table(TABLE_MAIN_USER).' as user ';
$sql .= ' LEFT JOIN '.Database::get_main_table(TABLE_MAIN_COURSE_USER).' as course_rel_user
ON user.user_id = course_rel_user.user_id AND course_rel_user.relation_type<>'.COURSE_RELATION_TYPE_RRHH.'
AND course_rel_user.course_code="'.$course_code.'"';
ON user.user_id = course_rel_user.user_id AND
course_rel_user.relation_type <> '.COURSE_RELATION_TYPE_RRHH.' ';
if (!empty($course_code)) {
$sql .= ' AND course_rel_user.course_code="'.$course_code.'"';
} else {
$course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$sql .= " INNER JOIN $course_table course ON course_rel_user.course_code = course.code ";
}
$where[] = ' course_rel_user.course_code IS NOT NULL ';
if (isset($filter_by_status) && $filter_by_status != '') {
@ -1182,12 +1197,19 @@ class CourseManager {
$sql .= " AND (access_url_id = $current_access_url_id ) ";
}
$sql .= ' '.$order_by.' '.$limit;
//echo $sql;
$rs = Database::query($sql);
$users = array();
if ($add_reports) {
$extra_fields = UserManager::get_extra_fields(0, 100, null, null, true, true);
}
if (Database::num_rows($rs)) {
while ($user = Database::fetch_array($rs)) {
if ($return_count) {
return $user['count'];
}
$user_info = $user;
$user_info['status'] = $user['status'];
@ -1202,12 +1224,39 @@ class CourseManager {
$user_info['status_session'] = $user['status_session'];
}
if ($add_reports) {
$course_code = $user['code'];
$report_info['course'] = $user['title'];
$report_info['user'] = api_get_person_name($user['firstname'], $user['lastname']);
$report_info['time'] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user['user_id'], $course_code, 0));
$category = Category :: load (null, null, $course_code);
$report_info['status'] = Display::label(get_lang('No'));
if (isset($category[0]) && $category[0]->is_certificate_available($user['user_id'])) {
$report_info['status'] = Display::label(get_lang('Yes'));
}
$report_info['score'] = Tracking::get_avg_student_score($user['user_id'], $course_code, array(), 0);
foreach ($extra_fields as $extra) {
$user_data = UserManager::get_extra_user_data_by_field($user['user_id'], $extra['1']);
$report_info[$extra['1']] = $user_data[$extra['1']];
}
//var_dump($report_info);
$users[] = $report_info;
} else {
$users[$user['user_id']] = $user_info;
}
}
}
return $users;
}
static function get_count_user_list_from_course_code() {
return self::get_user_list_from_course_code(null, 0, null, null, null, true);
}
/**
* Gets subscribed users in a course or in a course/session
*
@ -3860,4 +3909,4 @@ class CourseManager {
}
return $options;
}
} //end class CourseManager
}

@ -1745,8 +1745,8 @@ class UserManager {
$t_uf = Database::get_main_table(TABLE_MAIN_USER_FIELD);
$t_ufv = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$user_id = Database::escape_string($user_id);
$sql = "SELECT f.id as id, f.field_variable as fvar, f.field_type as type FROM $t_uf f ";
$sql = "SELECT f.id as id, f.field_variable as fvar, f.field_type as type FROM $t_uf f ";
$sql .= " WHERE f.field_variable = '$field_variable' ";
if (!$all_visibility) {

@ -0,0 +1,87 @@
<?php
$language_file = array('admin');
$cidReset = true;
require_once '../inc/global.inc.php';
$interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('MySpace'));
//$interbreadcrumb[] = array ("url" => 'user_list.php', "name" => get_lang('Report'));
$tool_name = get_lang('Report');
$this_section = SECTION_TRACKING;
$htmlHeadXtra[] = api_get_jqgrid_js();
//jqgrid will use this URL to do the selects
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_user_course_report';
$extra_fields = UserManager::get_extra_fields(0, 100, null, null, true, true);
//The order is important you need to check the the $column variable in the model.ajax.php file
$columns = array(get_lang('Course'), get_lang('User'), get_lang('TotalTime'), get_lang('Certificate'), get_lang('Score'));
//Column config
$column_model = array(
array('name'=>'course', 'index'=>'title', 'width'=>'120', 'align'=>'left'),
array('name'=>'user', 'index'=>'user', 'width'=>'120', 'align'=>'left','sortable'=>'false'),
array('name'=>'time', 'index'=>'time', 'width'=>'50', 'align'=>'left','sortable'=>'false'),
array('name'=>'status', 'index'=>'status', 'width'=>'50', 'align'=>'left','sortable'=>'false'),
array('name'=>'score', 'index'=>'score', 'width'=>'50', 'align'=>'left','sortable'=>'false'),
);
if (!empty($extra_fields)) {
foreach($extra_fields as $extra) {
$col = array(
'name' => $extra['1'],
'index'=> $extra['1'],
'width'=>'120',
'sortable'=>'false'
);
$column_model[] = $col;
$columns[] = $extra['3'];
}
}
//Autowidth
$extra_params['autowidth'] = 'true';
//height auto
$extra_params['height'] = 'auto';
//With this function we can add actions to the jgrid (edit, delete, etc)
$action_links = 'function action_formatter(cellvalue, options, rowObject) {
return \'<a href="?action=edit&id=\'+options.rowId+\'">'.Display::return_icon('edit.png',get_lang('Edit'),'',ICON_SIZE_SMALL).'</a>'.
'&nbsp;<a onclick="javascript:if(!confirm('."\'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES))."\'".')) return false;" href="?sec_token='.$token.'&action=copy&id=\'+options.rowId+\'">'.Display::return_icon('copy.png',get_lang('Copy'),'',ICON_SIZE_SMALL).'</a>'.
'&nbsp;<a onclick="javascript:if(!confirm('."\'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES))."\'".')) return false;" href="?sec_token='.$token.'&action=delete&id=\'+options.rowId+\'">'.Display::return_icon('delete.png',get_lang('Delete'),'',ICON_SIZE_SMALL).'</a>'.
'\';
}';
$htmlHeadXtra[] = '<script>
$(function() {
'.Display::grid_js('user_course_report', $url,$columns,$column_model,$extra_params, array(), $action_links, true).'
jQuery("#user_course_report").jqGrid("navGrid","#user_course_report_pager",{view:false, edit:false, add:false, del:false, search:false, excel:true});
jQuery("#user_course_report").jqGrid("navButtonAdd","#user_course_report_pager",{
caption:"",
onClickButton : function () {
jQuery("#user_course_report").jqGrid("excelExport",{"url":"'.$url.'"});
}
});
});
</script>';
$content = Display::grid_html('user_course_report');
$tpl = new Template($tool_name);
//$tpl->assign('actions', $actions);
$tpl->assign('message', $message);
$tpl->assign('content', $content);
$tpl->display_one_col_template();
Loading…
Cancel
Save