123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- <?php
- require_once __DIR__.'/../inc/global.inc.php';
- define('REPORTS_PROGRESS_COMPLETED', 1);
- $reports_modules = array();
- $reports_enabled_modules = array('quiz', 'course', 'scorm');
- $reports_enabled_templates = array('exercicesMultiCourses', 'courseTime', 'courseArticulate');
- // load templates
- function reports_loadTemplates() {
- global $reports_enabled_templates, $reports_template;
- foreach ($reports_enabled_templates as $t)
- require_once 'templates/'.$t.'.reports.php';
- }
- // clear all reporting data
- /*
- function reports_clearAll() {
- //Database::query('DELETE FROM '.Database::get_main_table(TABLE_MAIN_REPORTS_KEYS));
- //Database::query('DELETE FROM '.Database::get_main_table(TABLE_MAIN_REPORTS_VALUES));
- Database::query('DROP TABLE '.Database::get_main_table(TABLE_MAIN_REPORTS_KEYS));
- Database::query('DROP TABLE '.Database::get_main_table(TABLE_MAIN_REPORTS_VALUES));
- Database::query('
- CREATE TABLE '.Database::get_main_table(TABLE_MAIN_REPORTS_KEYS).' (
- id int unsigned NOT NULL AUTO_INCREMENT primary key,
- course_id int unsigned DEFAULT NULL,
- tool_id int unsigned DEFAULT NULL,
- child_id int unsigned DEFAULT NULL,
- child_name varchar(64) DEFAULT NULL,
- subchild_id int unsigned DEFAULT NULL,
- subchild_name varchar(64) DEFAULT NULL,
- subsubchild_id int unsigned DEFAULT NULL,
- subsubchild_name varchar(64) DEFAULT NULL,
- link varchar(256) DEFAULT NULL)');
- Database::query('
- CREATE TABLE '.Database::get_main_table(TABLE_MAIN_REPORTS_VALUES).' (
- key_id int unsigned NOT NULL,
- user_id int unsigned NOT NULL,
- session_id int unsigned NOT NULL,
- attempt int NOT NULL,
- score decimal(5,3) DEFAULT NULL,
- progress int DEFAULT NULL,
- report_time int DEFAULT NULL,
- ts datetime DEFAULT NULL)');
- }
- function reports_addDBKeys() {
- // cannot had this primary key here due to mysql restrction on auto_increment
- // Database::query('alter table '.Database::get_main_table(TABLE_MAIN_REPORTS_KEYS).
- // ' primary key(id)');
- Database::query('alter ignore table '.
- Database::get_main_table(TABLE_MAIN_REPORTS_KEYS).
- ' add index(course_id)');
- Database::query('alter table '.
- Database::get_main_table(TABLE_MAIN_REPORTS_KEYS).
- ' add index(course_id,tool_id,child_id,subchild_id,subsubchild_id)');
- Database::query('alter ignore table '.
- Database::get_main_table(TABLE_MAIN_REPORTS_VALUES).
- ' add index(user_id)');
- Database::query('alter ignore table '.
- Database::get_main_table(TABLE_MAIN_REPORTS_VALUES).
- ' add primary key(key_id,user_id,session_id,attempt)');
- }
- // build all reporting data
- function reports_build() {
- global $reports_enabled_modules, $reports_modules;
- // include + init
- foreach($reports_enabled_modules as $module) {
- require_once('modules/'.$module.'.php');
- $initFunc = 'reports_modules_'.$module.'_init';
- $initFunc();
- }
- // init For Each Courses
- foreach($reports_enabled_modules as $module) {
- $initFuncFEC = 'reports_modules_'.$module.'_init_forEachCourses';
- foreach(CourseManager::get_courses_list() as $course)
- $initFuncFEC($course['code'], $course['id'],
- $course['db_name']);
- }
- // fetch data
- foreach($reports_enabled_modules as $module)
- foreach ($reports_modules[$module] as $keys)
- reports_automaticAdd($keys['keys_query'],
- $keys['values_query_function']);
- }
- // add a key and returns his id
- // field are not checked for insertion since this function is for internal
- // use only
- function reports_addKey($course_id, $tool_id,
- $child_id, $child_name,
- $subchild_id, $subchild_name,
- $subsubchild_id, $subsubchild_name,
- $link) {
- Database::query('INSERT into '.
- Database::get_main_table(TABLE_MAIN_REPORTS_KEYS).
- ' (id, course_id, tool_id, child_id, child_name, '.
- 'subchild_id, subchild_name, subsubchild_id, subsubchild_name,'.
- 'link ) values (null, '.
- ($course_id == '' ? 'NULL' :$course_id).', '.
- ($tool_id == '' ? 'NULL' :$tool_id).', '.
- ($child_id == '' ? 'NULL' :$child_id).', '.
- ($child_name == '' ? 'NULL' :"'$child_name'").', '.
- ($subchild_id == '' ? 'NULL' :$subchild_id).', '.
- ($subchild_name == '' ? 'NULL' : "'$subchild_name'").', '.
- ($subsubchild_id == '' ? 'NULL' : $subsubchild_id).', '.
- ($subsubchild_name == '' ? 'NULL' : "'$subsubchild_name'").', '.
- ($link == '' ? 'NULL' : "'$link'").')');
- return Database::insert_id();
- }
- // add a value
- function reports_addValue($key, $session, $uid, $attempt, $score,
- $progress, $time, $ts) {
- Database::query('INSERT into '.
- Database::get_main_table(TABLE_MAIN_REPORTS_VALUES).
- ' (key_id, user_id, session_id, attempt, score, '.
- 'progress, report_time) values ('.$key.', '.
- $uid.', '.
- // -1 instead of null because of primary key limitation with null column
- ($session == '' ? '-1' : $session).', '.
- ($attempt == '' ? '-1' : $attempt).', '.
- ($score == '' ? 'NULL' : $score).', '.
- ($progress == '' ? 'NULL' : $progress).', '.
- ($time == '' ? 'NULL' : $time).', '.
- ($ts == '' ? 'NULL' : $ts).')');
- }
- // add a value using a sub query warning take care about the order of the fields
- function reports_addValueQuery($query) {
- Database::query('INSERT into '.
- Database::get_main_table(TABLE_MAIN_REPORTS_VALUES).
- ' (key_id, user_id, session_id, attempt, score, '.
- 'progress, report_time, ts) ('.$query.')');
- }
- */
- // return tools ID (parametre is a constant from main_api
- function reports_getToolId($tool) {
- $tools = array_flip(api_get_tools_lists());
- if (array_key_exists($tool, $tools))
- return $tools[$tool];
- else
- return null;
- }
- // return a sql clause returning triplet of (course, $session, $uid) the
- // current user is authorized to reed
- function reports_getVisibilitySQL() {
- return "select cru.user_id from ".Database::get_main_table(TABLE_MAIN_COURSE_USER).' cru';
- // fixme sessions
- }
- // this function execute keys_query (SQL statement)
- // each rows may returns following fields course_id, tool_id, child_id,
- // child_name, subchild_id, subchild_name, subsubchild_id, subsubchild_name,
- // link
- // row may contains other fields.
- // rows are parsed using fetch_assoc
- // assoc array are then given to values_query_function
- // this function must return a assoc array
- // return["type"] should be either 'static' or 'sql'
- // return["static"] should contains an array of assoc array which may
- // includes following headers: session, user_id, attempt, score progress and
- // time.
- // return["sql"] (when type==sql) an sql query returning the same fields.
- // this sql stateuement MUST include a field key_id with the value given
- // to the function as parametre. This statement will be passed to
- // reports_addValueQuery
- /*
- function reports_automaticAdd($keys_query, $values_query_function) {
- $keys_result = Database::query($keys_query);
- if (!$keys_query) {
- echo 'folowwing keys_query failed: '.$keys_query."\n";
- return;
- }
- $num = Database::num_rows($keys_result);
- for ($i = 0; $i < $num; $i++) {
- $keys = Database::fetch_assoc($keys_result);
- $key_id = reports_addKey(
- array_key_exists('course_id', $keys) ? $keys['course_id'] : '',
- array_key_exists('tool_id', $keys) ? $keys['tool_id'] : '',
- array_key_exists('child_id', $keys) ? $keys['child_id'] : '',
- array_key_exists('child_name', $keys) ? $keys['child_name'] : '',
- array_key_exists('subchild_id', $keys) ? $keys['subchild_id'] : '',
- array_key_exists('subchild_name', $keys) ? $keys['subchild_name'] : '',
- array_key_exists('subsubchild_id', $keys) ? $keys['subsubchild_id'] : '',
- array_key_exists('subsubchild_name', $keys) ? $keys['subsubchild_name'] : '',
- array_key_exists('link', $keys) ? $keys['link'] : '');
- $values = $values_query_function($keys, $key_id);
- if ($values['type'] == 'static')
- for ($j = 0; $j<sizeof($values['static']); $j++)
- reports_addValue($key_id,
- array_key_exists('session', $values['static'][$j]) ? $values['static'][$j]['session'] : '',
- array_key_exists('user_id', $values['static'][$j]) ? $values['static'][$j]['user_id'] : '',
- array_key_exists('attempt', $values['static'][$j]) ? $values['static'][$j]['attempt'] : '',
- array_key_exists('score', $values['static'][$j]) ? $values['static'][$j]['score'] : '',
- array_key_exists('progress', $values['static'][$j]) ? $values['static'][$j]['progress'] : '',
- array_key_exists('report_time', $values['static'][$j]) ? $values['static'][$j]['report_time'] : '',
- array_key_exists('ts', $values['static'][$j]) ? $values['static'][$j]['ts'] : '');
- else
- reports_addValueQuery($values['sql']);
- }
- }*/
|