Hacked By AnonymousFox

Current Path : /home/missmand/public_html/js/lightbox/
Upload File :
Current File : /home/missmand/public_html/js/lightbox/reports.tar

index.php000064400000012544152003076620006373 0ustar00<?php
/* For licensing terms, see /license.txt */
/**
* Reports
* @author Arnaud Ligot <arnaud@cblue.be>
* @copyrights CBLUE SPRL 2011
* @package chamilo.reports
*/
exit;
// name of the language file that needs to be included
$language_file = array('reportlib');
$cidReset = true;

// including files 
require_once '../inc/global.inc.php';
require_once 'reports.lib.php';

// protect script
api_block_anonymous_users();

// defining constants

// current section
$this_section = SECTION_REPORTS;

// setting the name of the tool
$tool_name=get_lang('Reports');

// Displaying the header
foreach (array('jquery.ba-bbq.min.js', 'jquery.validate.js', 'jquery.form.js', 'jquery.form.wizard.js', 'jquery.dataTables.min.js') as $js)
    $htmlHeadXtra[] = '<script src="'.api_get_path(WEB_LIBRARY_PATH).'javascript/'.$js.'" type="text/javascript" language="javascript"></script>'."\n";

// FIXME
$htmlHeadXtra[] = '    <style type="text/css">
			#reportsBuilderWizard {
				padding : 1em;
				width : 500px;
				border-style: solid;
				border-color: #0daee4;
			}

			#fieldWrapper {
			}

			#wizardNavigation {
				margin-top : 0.5em;
				margin-right : 1em;
				text-align: right;
			}
			
			#data {
				font-size : 0.7em;
			}

			input {
				margin-right: 0.1em;
				margin-bottom: 0.5em;
			}

			.input_field_25em {
				width: 2.5em;
			}

			.input_field_3em {
				width: 3em;
			}

			.input_field_35em {
				width: 3.5em;
			}

			.input_field_12em {
				width: 12em;
			}

			label {
				margin-bottom: 0.2em;
				font-weight: bold;
				font-size: 0.8em;
			}

			label.error {
				color: red;
				font-size: 0.8em;
				margin-left : 0.5em;
			}

			.step span {
				float: right;
				font-weight: bold;
				padding-right: 0.8em;
			}

			.navigation_button {
				width : 70px;
			}
			
			#data {
				overflow : auto;
				display: none;
			}
			.result {
				padding-top: 15px;
			}
			#result2 {
				margin: 50px;
			}
			#result3 {
				margin: 100px;
			}
			#result4 {
				margin: 150px;
			}
			select.link, select.link:hover {
				color: black;
			}
		</style>';

$htmlCSSXtra[] = 'dataTable.css';

reports_loadTemplates();

Display::display_header($tool_name);

?>
    <div id="reportsBuilderWizard">
        <h3><?php get_lang('Reports'); ?></h3>
            <div id='wizardContent'>
                <p><?php echo get_lang('PleaseFillFormToBuildReport'); ?></p>
                <h5 id="status"></h5>
                <form id="reportsBuilderWizardForm" method="post" action="reports.php" class="bbq">
                <div id="fieldWrapper">
                    <span class="step" id="first">
                        <span class="font_normal_07em_black"><?php echo get_lang('PleaseChooseReportType'); ?></span><br />
                        <label for="type"><?php echo get_lang('ReportType'); ?></label><br />
                        <select class="input_field_12em link required" name="type" id="type">
<?php
foreach ($reports_template as $key => $value) {
	echo '<option value="'.$key.'">'.$value['description'].'</option>';
}
?>
                        </select><br />
                    </span>
<?php
foreach ($reports_template as $key => $value) {
	echo $value['wizard'];
}
?>
                    <span id="format" class="step submit_step">
                        <span class="font_normal_07em_black"><?php echo get_lang('ReportFormat'); ?></span><br />
                        <select name="format" id="format">
                            <option value="html">HTML</option>
                            <option value="csv">CSV</option>
                            <option value="sql">SQL</option>
                            <option value="link"><?php echo get_lang('ReportTypeLink'); ?></option>
                        </select><br />
                    </span>
                </div>
                <div id="wizardNavigation">
                    <input class="navigation_button" id="back" value="<?php echo get_lang('Back'); ?>" type="reset" />
                    <input class="navigation_button" id="next" value="<?php echo get_lang('Next'); ?>" type="submit" />
                </div>
            </form>
        <hr />
    </div>
    <div id="wizardShowButton">
        <?php echo get_lang('ShowWizard'); ?>
    </div>		
    <p id="data"></p>
</div>
<div id="result" class="result">
</div>
<div id="result2" class="result">
</div>
<div id="result3" class="result">
</div>
<div id="result4" class="result">
</div>
<script type="text/javascript">
			$(function(){
				$("#wizardShowButton").hide();
				$("#wizardShowButton").click(function() {
					$("#wizardContent").show();
					$("#wizardShowButton").hide();
				});
				$("#reportsBuilderWizardForm").formwizard({ 
				 	formPluginEnabled: true,
				 	validationEnabled: true,
				 	focusFirstInput : true,
				 	formOptions :{
						success: function(data){
		                                        $("#wizardContent").hide();
                		                        $("#wizardShowButton").show();
							$(".result").html('');
							$("#result").html(data);
						},
						beforeSubmit: function(data){$("#data").html("data sent to the server: " + $.param(data));},
						resetForm: false
				 	}	
				 }
				);
  		});
		function setSubDataUri(elem, uri) {
			$.ajax({
				url: uri,
				success: function(data) {
					$(elem).closest('.result').nextAll().html('');
					$(elem).closest('.result').next().html(data);
				}
			});
		}
</script>

<?
// Footer
Display::display_footer();
multiquery.lib.php000064400000003136152003076620010246 0ustar00<?php

// get fields informations
function multiquery_query($array) {
	$result = array();
	$field = 0;
	for ($i = 0; $i <sizeof($array); $i++) {
		// mysql handler
		$result[$i]['mysql'] = mysql_query($array[$i]);

		if (! $result[$i]['mysql'])
			die("error in query $i : ".$array[$i]);

		// fields
		$result[$i]['num_fields'] = mysql_num_fields($result[$i]['mysql']);
		for ($j = 0; $j < $result[$i]['num_fields']; $j++) {
			$name = mysql_field_name($result[$i]['mysql'], $j);
			$result['field'][$field]['query']=$i;
			$result['field'][$field]['name']=$name;
			$result['field'][$field]['id']=$j;
			$result['field_assoc'][$name][$field];
			$field++;
		}
	}
	$result['num_queries'] = sizeof($array);
	// rows
	$numberOfResult = mysql_num_rows($result[0]['mysql']);
	for ($i = 1; $i <$result['num_queries']; $i++) 
		if ($numberOfResult != mysql_num_rows($result[$i]['mysql']))
			die("wrong number of row: $numberOfResult vs ".
				mysql_num_rows($result[$i]['mysql'])." on query $i");

	$result['num_rows'] = $numberOfResult;
	$result['num_fields'] = $field;

	return $result;
}

function multiquery_num_rows(&$mq_h) {
	return $mq_h['num_rows'];
}

function multiquery_num_fields(&$mq_h) {
	return $mq_h['num_fields'];
}

function multiquery_field_name(&$mq_h, $id) {
	return $mq_h['field'][$id]['name'];
}

function multiquery_fetch_row(&$mq_h) {
	$result = array();
	$pos = 0;
	for ($i = 0; $i < $mq_h['num_queries']; $i++) {
		$row = mysql_fetch_row($mq_h[$i]['mysql']);
		if (!$row) return false; // last line
		for ($j = 0; $j < sizeof($row); $j++) {
			$result[$pos] = $row[$j];
			$pos++;
		}
	}
	return $result;
}
reports.cli.php000064400000002406152003076620007524 0ustar00<?php
require_once 'reports.lib.php';

$longopts = array(
	'course:',
	'tool:',
	'ci:',
	'cn:',
	'sci:',
	'scn:',
	'ssci:',
	'sscn:',
	'link:',
	'addValue',
	'addKey',
	'help',
	'clearAll',
	'score:',
	'progress:',
	'time:',
	'attempt:',
	'session:',
	'attempt:',
	'uid:',
	'key:',
	'addDBKeys',
	'build');

$options = getopt("", $longopts);

echo "\n\n";

if (array_key_exists('help', $options))
	echo "help message\n";
else if (array_key_exists('clearAll', $options)) {
	reports_clearAll();
	echo Database::error();
} else if (array_key_exists('build', $options)) {
	reports_build();
	echo Database::error();
} else if (array_key_exists('addDBKeys', $options)) {
	reports_addDBKeys();
	echo Database::error();
} else if (array_key_exists('addValue', $options)) {
	reports_addValue($options['key'], $options['session'], $options['uid'],
			$options['attempt'], $options['score'], 
			$options['progress'], $options['time']);
	echo Database::error();
} else if (array_key_exists('addKey', $options)) {
	echo reports_addKey($options['course'], $options['tool'], 
			$options['ci'], $options['cn'], 
			$options['sci'], $options['scn'], 
			$options['ssci'], $options['sscn'], 
			$options['link']);
	echo "\n";
	echo Database::error();
} else
	echo "action not found\n";
	
echo "\n";
?>
reports.cron.php000064400000000254152003076620007715 0ustar00<?php
require_once 'reports.lib.php';

reports_clearAll();
echo Database::error();
reports_build();
echo Database::error();
reports_addDBKeys();
echo Database::error();
?>
reports.lib.php000064400000020430152003076620007520 0ustar00<?php

require_once '../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']);
	}
}*/
reports.php000064400000015261152003076620006761 0ustar00<?php
/* For licensing terms, see /license.txt */

/**
* Reports
* @author Arnaud Ligot <arnaud@cblue.be>
* @copyrights CBLUE SPRL 2011
* @package chamilo.reports
*/
exit;
// name of the language file that needs to be included
$language_file = array('reportlib');
$cidReset = true;

// including files 
require_once '../inc/global.inc.php';
require_once 'reports.lib.php';
require_once 'multiquery.lib.php';

// protect script
api_block_anonymous_users();

// defining constants

// current section
$this_section = SECTION_REPORTS;

// setting the name of the tool
$tool_name=get_lang('Reports');

// loading templates
reports_loadTemplates();

// random suffix for div id (to enable multiple report per page)
$idsuffix = rand();

// "Link" type
if ($_REQUEST['format'] == 'link') {
	// converting post vars to get uri
	$params = '';
	$kv = array();
	foreach ($_POST as $key => $value)
		if ($key != 'format')
			$kv[] = $key.'='.urlencode($value);
	$query_string = join("&", $kv);
	die('<a href="reports.php?format=directlink&'.$query_string.'">'.get_lang('ReportTypeLink').'</a>');
}

if ($_REQUEST['format'] == 'directlink') {
	foreach (array('jquery.dataTables.min.js') as $js)
		$htmlHeadXtra[] = '<script src="'.api_get_path(WEB_LIBRARY_PATH).'javascript/'.$js.'" type="text/javascript" language="javascript"></script>'."\n";

	$htmlCSSXtra[] = 'dataTable.css';

?>
    <script type="text/javascript">
		function setSubDataUri(elem, uri) {
			$.ajax({
				url: uri,
				success: function(data) {
					$(elem).closest('.result').nextAll().html('');
					$(elem).closest('.result').next().html(data);
				}
			});
		}
    </script>
<?php
	Display::display_header($tool_name);
	echo '<div id="result" class="result">';
}

// outputing a link to csv file instead of outputing csv data directly
if ($_REQUEST['format'] == 'csv')  {
	// converting post vars to get uri
	$params = '';
	$kv = array();
	foreach ($_POST as $key => $value)
		if ($key != 'format')
			$kv[] = $key.'='.urlencode($value);
	$query_string = join("&", $kv);
	die('<a href="reports.php?format=downloadcsv&'.$query_string.'">'.get_lang('DownloadFile').'</a>');
} else if ($_REQUEST['format'] == 'downloadcsv') {
	if ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') == false)) {
		header("Pragma: must-revalidate");
		header("Cache-Control: must-revalidate");
		header("Content-type: application/vnd.ms-excel");
	}
	else {
		header("Content-type: text/csv");
	}
	$date = date("Y-m-d");
	$filename = "reporting-$date.csv";
	header("Content-Disposition: attachment; filename=$filename");
	$_REQUEST['format'] = 'csv';
}



if (is_array($reports_template[$_REQUEST['type']])) {
	$query = $reports_template[$_REQUEST['type']]['getSQL']();
	if (! is_array($query))
		$query = array($query);
	if ($_REQUEST['format'] == 'sql')
		die(var_export($query, true));

	$result = multiquery_query($query);
	

	// check number of result
	$numberOfResult = multiquery_num_rows($result);
	if ($numberOfResult == 0) {
		// This case should be taken care of by the display template itself, we should let the script run
		//die(get_lang('NoDataAvailable'));
	}
} else {
	die('<b>'.get_lang('ErrorWhileBuildingReport').'</b>');
}

if ($_REQUEST['format'] == 'html' || $_REQUEST['format'] == 'directlink') {
	if (isset($reports_template[$_REQUEST['type']]['html_header'])) {
		echo $reports_template[$_REQUEST['type']]['html_header'];
	}
	echo '<script type="text/javascript" charset="utf-8">
			$(document).ready(function() {

				$("#reportsData'.$idsuffix.'").dataTable({
					"oLanguage":
						{
							"sProcessing":   "Traitement en cours...",
							"sLengthMenu":   "Afficher _MENU_ éléments",
							"sZeroRecords":  "Aucun élément à afficher",
							"sInfo":         "Affichage de l'."'".'élement _START_ à _END_ sur _TOTAL_ éléments",
							"sInfoEmpty":    "Affichage de l'."'".'élement 0 à 0 sur 0 éléments",
							"sInfoFiltered": "(filtré de _MAX_ éléments au total)",
							"sInfoPostFix":  "",
							"sSearch":       "Rechercher :",
							"sUrl":          "",
							"oPaginate": {
								"sFirst":    "Premier",
								"sPrevious": "Précédent",
								"sNext":     "Suivant",
								"sLast":     "Dernier"
							}
						}
				});
			} );
		</script>';
	echo '<table id="reportsData'.$idsuffix.'" class="display">'; // FIXME style

	// counting fields
	$nfields = multiquery_num_fields($result);
	$columns = array();	
	$columns_islink = array();
	echo '<thead><tr>';
	for ($i=0; $i < $nfields; $i++)	{
		$columns[$i] = multiquery_field_name($result, $i);
		if (substr($columns[$i], -5, 5) != '_link') {
			$column_islink[$i] = false;
			echo '<th>'.$columns[$i].'</th>';
		} else 
			$columns_islink[$i] = true;
	}

	// checking resolving link column id
	$columns_flip = array_flip($columns);
	$columns_link = array();
	for ($i=0; $i < $nfields; $i++)
		if ($column_islink[$i] == false && array_key_exists($columns[$i].'_link', $columns_flip))
			$columns_link[$i] = $columns_flip[$columns[$i].'_link'];
		else
			$columns_link[$i] = '';
	echo '</tr></thead><tbody>';
	while ($row = multiquery_fetch_row($result)) {
		echo '<tr>';
		for ($i = 0; $i<$nfields; $i++)
			if (!$columns_islink[$i]){ // ignore links
				if ($columns_link[$i] != '') // link is defined
					if (substr($columns_link[$i],0,10) == 'javascript') {
						echo '<td><a href="#" onclick="'.$row[$columns_link[$i]].'">'.$row[$i].'</a></td>'; 
					}
					else {
						echo '<td><a href="'.$row[$columns_link[$i]].'">'.$row[$i].'</a></td>'; 
					}
				else
					echo '<td>'.$row[$i].'</td>';
			}
		echo "</tr>\n";
	}
	echo '</tbody></table>';
	if ($_REQUEST['format'] == 'directlink') {
		echo '</div>
		<div id="result2" class="result" style="margin: 50px;">
		</div>
		<div id="result3" class="result" style="margin: 100px;">
		</div>
		<div id="result4" class="result" style="margin: 150px;">
		</div>';

		Display::display_footer();
		
	}
} else if ($_REQUEST['format'] == 'csv') {
	$nfields = multiquery_num_fields($result);
	$columns = array();	
	$columns_islink = array();
	for ($i=0; $i < $nfields; $i++)	{
		$columns[$i] = multiquery_field_name($result, $i);
		if (substr($columns[$i], -5, 5) != '_link') {
			$column_islink[$i] = false;
			echo csv_escaping($columns[$i]).',';
		} else 
			$columns_islink[$i] = true;
	}

	echo "\n";
	while ($row = multiquery_fetch_row($result)) {
		for ($i = 0; $i<$nfields; $i++)
			if (!$columns_islink[$i]) // ignore links
				echo csv_escaping($row[$i]).',';  // fixme
		echo "\n";
	}
} else die(get_lang('UnknownFormat'));

function csv_escaping($value, $csv_separator = ',') {
	$value = str_replace('"','""',$value);
	if (strpos($value, '""') or strpos($value, $csv_separator) or $value != trim($value) ) {
		$value = '"'.$value.'"';
	}
	return $value;
}
?>
modules/quiz.php000064400000002114152003076620007714 0ustar00<?php 

$reports_modules['quiz'] = array ();


function reports_modules_quiz_init() {
}

function reports_modules_quiz_init_forEachCourses($course_code, $course_id, $course_db) {
	global $reports_modules;
	
	$reports_modules_quiz_toolid = reports_getToolId(TOOL_QUIZ);

	array_push($reports_modules['quiz'], 
	  array('keys_query' =>  
		'select '.$course_id.' as course_id, '.
		$reports_modules_quiz_toolid.' as tool_id, '.
		'q.id as child_id, q.title as child_name, '.
		"'".$course_code."'".' as course_code from '.Database::get_course_table(TABLE_QUIZ_TEST).' q ',
		'values_query_function' => 'reports_modules_quiz_quizVal'));		
}

function reports_modules_quiz_quizVal($quiz, $key_id) {
	return array('type'=> 'sql', 'sql' => 
			'select '.$key_id.', exe_user_id as uid, '.
			'session_id, -1 as attempt, exe_result as score, '.
			REPORTS_PROGRESS_COMPLETED.' as progress, '.
			'exe_duration as time, exe_date as ts from '.
			Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCICES).
			' where exe_cours_id = '."'".$quiz['course_code']."'".
			' and exe_exo_id='.$quiz['child_id']);
}
modules/scorm.php000064400000010322152003076620010047 0ustar00<?php 

$reports_modules['scorm'] = array ();


function reports_modules_scorm_init() {
}

function reports_modules_scorm_init_forEachCourses($course_code, $course_id, $course_db) {
	global $reports_modules;
	
	$reports_modules_scorm_toolid = reports_getToolId(TOOL_LEARNPATH);

	// package level
	array_push($reports_modules['scorm'], 
	  array('keys_query' =>  
		'select '.$course_id.' as course_id, '.
		$reports_modules_scorm_toolid.' as tool_id, '.
		'lp.id as child_id, lp.name as child_name, '.
		"'".$course_db."'".' as course_db from '.
		Database::get_course_table(TABLE_LP_MAIN).' lp',
		'values_query_function' => 'reports_modules_scorm_packageVal'));		

	// sco level
	array_push($reports_modules['scorm'], 
	  array('keys_query' =>  
		'select '.$course_id.' as course_id, '.
		$reports_modules_scorm_toolid.' as tool_id, '.
		'lp.id as child_id, lp.name as child_name, '.
		'lpi.id as subchild_id, lpi.title as subchild_name, '.
		"'".$course_db."'".' as course_db from '.
		Database::get_course_table(TABLE_LP_MAIN, $course_db).
		' lp,'.
		Database::get_course_table(TABLE_LP_ITEM, $course_db).
		' lpi where lp.id = lpi.lp_id',
		'values_query_function' => 'reports_modules_scorm_scoVal'));		

	// objectives level
	array_push($reports_modules['scorm'], 
	  array('keys_query' =>  
		'select distinct '.$course_id.' as course_id, '.
		$reports_modules_scorm_toolid.' as tool_id, '.
		'lp.id as child_id, lp.name as child_name, '.
		'lpi.id as subchild_id, '.
		'lpi.title as subchild_name, '.
		'null as subsubchild_id, '.
		'lpivo.objective_id as subsubchild_name, '.
		"'".$course_db."'".' as course_db from '.
		Database::get_course_table(TABLE_LP_MAIN, $course_db).
		' lp,'.
		Database::get_course_table(TABLE_LP_ITEM, $course_db).
		' lpi, '.
		Database::get_course_table(TABLE_LP_ITEM_VIEW, $course_db).
		' lpiv, '.
		Database::get_course_table(TABLE_LP_IV_OBJECTIVE, $course_db).
		' lpivo '.
		'where lp.id = lpi.lp_id '.
		'and lpi.id = lpiv.lp_item_id '.
		'and lpiv.id = lpivo.lp_iv_id ',
		'values_query_function' => 'reports_modules_scorm_objVal'));		
}

function reports_modules_scorm_packageVal($scorm, $key_id) {
	return array('type'=> 'sql', 'sql' => 
			'select '.$key_id.', user_id as uid, '.
			'session_id, view_count as attempt, null as score, '.
			'progress as progress, '.
			'null as time, null as ts from '.
			Database::get_course_table(TABLE_LP_VIEW, $scorm['course_db']).
			' where lp_id = '.$scorm['child_id']);
}

function reports_modules_scorm_scoVal($scorm, $key_id) {
	return array('type'=> 'sql', 'sql' => 
			'select '.$key_id.', lpv.user_id as uid, '.
			'lpv.session_id, lpiv.view_count as attempt, '.
			'lpiv.score as score, '.
			'(case lpiv.status '.
				'when "incomplete" then 0 '.
				'when "completed" then 1 '.
				'when "passed" then 2 '.
				'when "failed" then 3 '.
				'when "browsed" then 4 '.
				'when "not attempted" then 5 '.
				'else 6 '.
			'end) as progress, '.
			'lpiv.total_time as time, null as ts from '.
			Database::get_course_table(TABLE_LP_VIEW, $scorm['course_db']).
			' lpv, '.
			Database::get_course_table(TABLE_LP_ITEM_VIEW, $scorm['course_db']).
			' lpiv '.
			' where lpv.lp_id = '.$scorm['child_id'].
			' and lpiv.lp_item_id = '.$scorm['subchild_id'].
			' and lpiv.lp_view_id = lpv.id');
}

function reports_modules_scorm_objVal($scorm, $key_id) {
	return array('type'=> 'sql', 'sql' => 
			'select '.$key_id.', lpv.user_id as uid, '.
			'lpv.session_id, lpiv.view_count as attempt, '.
			'lpivo.score_raw as score, '.
			'(case lpivo.status '.
				'when "incomplete" then 0 '.
				'when "completed" then 1 '.
				'when "passed" then 2 '.
				'when "failed" then 3 '.
				'when "browsed" then 4 '.
				'when "not attempted" then 5 '.
				'else 6 '.
			'end) as progress, '.
			'null as time, null as ts from '.
			Database::get_course_table(TABLE_LP_VIEW, $scorm['course_db']).
			' lpv, '.
			Database::get_course_table(TABLE_LP_ITEM_VIEW, $scorm['course_db']).
			' lpiv, '.
			Database::get_course_table(TABLE_LP_IV_OBJECTIVE, $scorm['course_db']).
			' lpivo '.
			' where lpv.lp_id = '.$scorm['child_id'].
			' and lpiv.lp_item_id = '.$scorm['subchild_id'].
			' and lpivo.objective_id = "'.$scorm['subsubchild_name'].'" '.
			' and lpiv.lp_view_id = lpv.id'.
			' and lpivo.lp_iv_id=lpiv.id');
}
modules/course.php000064400000001661152003076620010232 0ustar00<?php 

$reports_modules['course'] = array ();


function reports_modules_course_init() {
}

function reports_modules_course_init_forEachCourses($course_code, $course_id, $course_db) {
	global $reports_modules;
	
//	$reports_modules_course_toolid = reports_getToolId(TOOL_QUIZ);

	array_push($reports_modules['course'], 
	  array('keys_query' =>  
		'select '.$course_id.' as course_id, "'.$course_code.'" as course_code',
		'values_query_function' => 'reports_modules_course_val'));		
}

function reports_modules_course_val($course, $key_id) {
	return array('type'=> 'sql', 'sql' => 
			'select '.$key_id.', user_id as uid, '.
			'-1 as session_id, -1 as attempt, null as score, '.
			'NULL as progress, '.
			'(sum(logout_course_date) - sum(login_course_date)) as time, null as ts from '.
			Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS).
			' where course_code = '."'".$course['course_code']."'".
			' group by user_id');
}
templates/courseTime.reports.php000064400000002653152003076620013076 0ustar00<?php
/*
$reports_template['courseTime'] = array(
	'description' => 'Time spent by students in each courses',
	'getSQL' => 'reports_template_courseTime_getSQL',
	'wizard' => 
'
<span id="courseTime" class="step">
	<span class="font_normal_07em_black">This test does not need any particular settings</span><br />
	<input type="hidden" class="link" value="format" />
</span>
');*/

function reports_template_courseTime_getSQL() {
	// fetch columns
	$result = array();
	$query = 'select r.id as kid, c.title as course '.
		'from '.
		Database::get_main_table(TABLE_MAIN_REPORTS_KEYS).' r, '.
		Database::get_main_table(TABLE_MAIN_COURSE).' c '.
		'where r.course_id=c.id and r.tool_id is null and r.child_id is null'.
		' order by c.title';
	$columns = Database::query($query);
	if (Database::num_rows($columns) == 0)
		die('<b>'.get_lang('no data found: '.$query).'</b>');
	$columns = Database::store_result($columns);

	// fetch data
	$query = 'select u.lastname Name, u.firstname Firstname';
	foreach ($columns as $key => $column)
		$query .= ', sec_to_time(k'.$key.'.report_time) as `'.
				$column['course'].'` '; 
	$query .= ' from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
	foreach ($columns as $key => $column) // fixme sessions
		$query .= 'left outer join '.
			Database::get_main_table(TABLE_MAIN_REPORTS_VALUES).
			' k'.$key.
			' on k'.$key.'.key_id = '.$column['kid'].
				' and k'.$key.'.user_id = u.user_id ';
	return $query;
}
templates/courseArticulate.reports.php000064400000011647152003076620014300 0ustar00<?php

$reports_template['CourseArticulate'] = array(
	'description' => 'CourseArticulate',
	'getSQL' => 'reports_template_CourseArticulate_getSQL',
	'wizard' => 
'
<span id="CourseArticulate" class="step">
	<span class="font_normal_07em_black">This report does not need any particular settings</span><br />
	<input type="hidden" class="link" value="format" />
</span>
');

function reports_template_CourseArticulate_getSQL() {
	// settings


	// Nom, prenom
	$query = 'select u.lastname as "Last name", u.firstname as "First name" ';
	$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
	$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
	$query .= ' order by u.user_id ';
	$queries[0] = $query;

	// Custom Field
	foreach (array("tags" => "tags") as $k => $v) { // FIXME
		$query = 'select ufv.field_value  as "'.$v.'" ';
		$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
		$query .= 'left join'.Database::get_main_table(TABLE_MAIN_USER_FIELD).' uf ';
		$query .= ' on uf.field_variable="'.$k.'" ';
		$query .= 'left outer join '.Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES).' ufv ';
		$query .= ' on ufv.user_id = u.user_id and ufv.field_id = uf.id ';
		$query .= 'where u.user_id in ('.reports_getVisibilitySQL().') ';
		$query .= ' order by u.user_id ';
		$queries[] = $query;
	}


	// Stored Value
	$sv = array();
	foreach ($sv as $k => $v) {
        if (!isset($v['sql']))
                $v['sql'] = 'FIELD';
        $sqlField = str_replace('FIELD', 'sv.sv_value', $v['sql']);
        $query = 'select '.$sqlField.' as "'.$v['title'].'" ';
//		$query = 'select sec_to_time(sv.sv_value) as "'.$v.'" ';
		$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
		$query .= ' left outer join '.Database::get_main_table(TABLE_TRACK_STORED_VALUES).' sv ';
		$query .= 'on sv.user_id = u.user_id and sv_key = "'.$k.'" ';
		$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
		$query .= ' group by u.user_id ';
		$query .= ' order by u.user_id ';
		$queries[] = $query;
	}

	// first and last connection
	$query = 'select min(tel.login_date) as "First connection", max(tel.logout_date) as "Latest connection"  ';
	$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
	$query .= 'left outer join '.Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN).' tel ';
	$query .= ' on tel.login_user_id = u.user_id ';
	$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
	$query .= ' group by u.user_id ';
	$query .= ' order by u.user_id ';
	$queries[] = $query;

	// SCORM Data
	$scormData = array();
    $course_list = CourseManager::get_real_course_list();
	foreach ($course_list as $code => $details) {
		$list = Database::query('SELECT l.id as lid, l.name as lname, li.id as liid, li.title as lititle '.
					' FROM '.Database::get_course_table(TABLE_LP_MAIN).' l, '.Database::get_course_table(TABLE_LP_ITEM).' li '.
					' WHERE l.c_id = '.$details['real_id'].' AND li.c_id = '.$details['real_id'].' AND l.id = li.lp_id');
		while ($lpItem = Database::fetch_assoc($list)) {
			$scormData[] = array('coursedb' => $details['db_name'],
						'lid' => $lpItem['lid'],
						'liid' => $lpItem['liid'],
						'target_view_count' => 1,
						'target_indicator' => 'score',
						'title' => $details['title'].'/'.$lpItem['lname'].'/'.$lpItem['lititle'].'/1/score',
						'sql' => 'FIELD');
			$scormData[] = array('coursedb' => $details['db_name'],
						'lid' => $lpItem['lid'],
						'liid' => $lpItem['liid'],
						'target_view_count' => 2,
						'target_indicator' => 'score',
						'title' => $details['title'].'/'.$lpItem['lname'].'/'.$lpItem['lititle'].'/2/score',
						'sql' => 'FIELD');
			$scormData[] = array('coursedb' => $details['db_name'],
						'lid' => $lpItem['lid'],
						'liid' => $lpItem['liid'],
						'target_view_count' => null,
						'target_indicator' => 'score',
						'title' => $details['title'].'/'.$lpItem['lname'].'/'.$lpItem['lititle'].'/all/score',
						'sql' => 'avg(FIELD)');
		}
	}

	foreach($scormData as $v) {
                if (!isset($v['sql']))
                        $v['sql'] = 'FIELD';
                $sqlField = str_replace('FIELD', $v['target_indicator'], $v['sql']);
                $query = 'select '.$sqlField.' as "'.$v['title'].'" ';
		$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
		$query .= 'left outer join '.Database::get_course_table(TABLE_LP_VIEW, $details['db_name']).' lv ';
		$query .= ' on u.user_id = lv.user_id and lv.lp_id = '.$v['lid'];
		$query .= ' left outer join '.Database::get_course_table(TABLE_LP_ITEM_VIEW, $details['db_name']).' liv ';
		$query .= ' on lv.id = liv.lp_view_id ';
		if ($v['target_view_count'])
			$query .= ' and liv.view_count = '.$v['target_view_count'];
		$query .= ' and liv.lp_item_id = '.$v['liid'].' ';
		$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
		$query .= ' group by u.user_id ';
		$query .= ' order by u.user_id ';
		$queries[] = $query;
	}		

	return $queries;
}

templates/exercicesMultiCourses.reports.php000064400000005433152003076620015307 0ustar00<?php

$reports_template['exercicesMultiCourses'] = array(
	'description' => 'Result of each test per student',
	'getSQL' => 'reports_template_exercicesMultiCourses_getSQL',
	'wizard' => 
'
<span id="exercicesMultiCourses" class="step">
	<span class="font_normal_07em_black">Result of each test per student</span><br />

<!--	<label for="scoremin">Score min</label><br />
	<input class="input_field_25em" name="scoremin" id="scoremin" value="0"><br />
	<label for="scoremax">Score max</label><br />
	<input class="input_field_25em" name="scoremax" id="scoremax" value="0"><br />
-->	<label for="tattempt">How to treat Attempts</label><br />
	<select name="tattempt" id="tattempt">
<!--		<option value="first">take only the first one</option>
		<option value="last">take only the last one</option>
-->		<option value="avg">take the average value</option>
		<option value="min">take the minimum value</option>
		<option value="max">take the maximum value</option>
	</select><br />
<!--	<label name="gcourses">Do you want to group quiz per courses</label><br />
	<select name="gcourses" id="gcourses">
		<option value="nogroup">Do not group</option>
		<option value="average">group and take the average value</option>
		<option value="min">group and take the minimum value</option>
		<option value="max">group and take the maximum value</option>
	</select></br>
-->	<input type="hidden" class="link" value="format" />
</span>
');

function reports_template_exercicesMultiCourses_getSQL() {
	// foreach quiz
	$result = array();
	$columns = Database::query('select r.id as kid, c.title as course, '.
		'r.child_name as test from '.
		Database::get_main_table(TABLE_MAIN_REPORTS_KEYS).' r, '.
		Database::get_main_table(TABLE_MAIN_COURSE).' c '.
		'where r.course_id=c.id and r.tool_id='.
		reports_getToolId(TOOL_QUIZ).
		' order by r.course_id, r.child_name');
	if (Database::num_rows($columns) == 0)
		die('<b>'.get_lang('no data found').'</b>');
	$query = 'select u.lastname Name, u.firstname Firstname';
	$columns = Database::store_result($columns);
	if ($_REQUEST['tattempt'] == 'min' || $_REQUEST['tattempt'] == 'max')
		$function = $_REQUEST['tattempt'];
	else
		$function = 'avg';
	foreach ($columns as $key => $column)
		$query .= ', '.$function.'(k'.$key.'.score) as `'.
				$column['course'].' - '.
				$column['test'].'` '; 
	$query .= ' from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
	foreach ($columns as $key => $column) // fixme sessions
		$query .= 'left outer join '.
			Database::get_main_table(TABLE_MAIN_REPORTS_VALUES).
			' k'.$key.
			' on k'.$key.'.key_id = '.$column['kid'].
				' and k'.$key.'.user_id = u.user_id ';
	$query .= ' group by ';
	foreach ($columns as $key => $column) // grouping attempt
		$query .= 'k'.$key.'.attempt, ';
	$query = substr($query, 0, -2); // removing last ', ';


	return $query;
}
templates/generic.reports.php000064400000004200152003076620012361 0ustar00<?php

$reports_template['Generic'] = array(
	'description' => 'Generic',
	'getSQL' => 'reports_template_Generic_getSQL',
	'wizard' => 
'
<span id="Generic" class="step">
	<span class="font_normal_07em_black">This report does not need any particular settings</span><br />
	<input type="hidden" class="link" value="format" />
</span>
');

function reports_template_Generic_getSQL() {
	// settings


	// Nom, prenom
	$query = 'select u.lastname as "Last name", u.firstname as "First name" ';
	$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
	$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
	$query .= ' order by u.user_id ';
	$queries[0] = $query;


	
	// Custom Field
	foreach (array(10 => "description") as $k => $v) { 
		$query = 'select ufv.field_value  as "'.$v.'" ';
		$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
		$query .= 'left outer join '.Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES).' ufv ';
		$query .= ' on ufv.user_id = u.user_id and ufv.field_id = '.$k;
		$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
		$query .= ' order by u.user_id ';
		$queries[] = $query;
	}

	// Stored Value
	$sv = array();
	foreach ($sv as $k => $v) {
		$query = 'select sec_to_time(sv.sv_value) as "'.$v.'" ';
		$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
		$query .= ' left outer join '.Database::get_main_table(TABLE_TRACK_STORED_VALUES).' sv ';
		$query .= 'on sv.user_id = u.user_id and sv_key = "'.$k.'" ';
		$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
		$query .= ' order by u.user_id ';
		$queries[] = $query;
	}
	
	// premiere connexion
	$query = 'select min(tel.login_date) as "First connection", max(tel.logout_date) as "Latest connection"  ';
	$query .= 'from '.Database::get_main_table(TABLE_MAIN_USER).' u ';
	$query .= 'left outer join '.Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN).' tel ';
	$query .= ' on tel.login_user_id = u.user_id ';
	$query .= ' where u.user_id in ('.reports_getVisibilitySQL().') ';
	$query .= ' group by u.user_id ';
	$query .= ' order by u.user_id ';
	$queries[] = $query;

	return $queries;
}


Hacked By AnonymousFox1.0, Coded By AnonymousFox