|
@@ -2,16 +2,16 @@
|
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
|
|
/**
|
|
|
-* Reports
|
|
|
-* @author Arnaud Ligot <arnaud@cblue.be>
|
|
|
-* @copyrights CBLUE SPRL 2011
|
|
|
-* @package chamilo.reports
|
|
|
-*/
|
|
|
+ * Reports
|
|
|
+ * @author Arnaud Ligot <arnaud@cblue.be>
|
|
|
+ * @copyrights CBLUE SPRL 2011
|
|
|
+ * @package chamilo.reports
|
|
|
+ */
|
|
|
//exit;
|
|
|
$cidReset = true;
|
|
|
|
|
|
// including files
|
|
|
-require_once __DIR__.'/../inc/global.inc.php';
|
|
|
+require_once __DIR__ . '/../inc/global.inc.php';
|
|
|
require_once 'reports.lib.php';
|
|
|
require_once 'multiquery.lib.php';
|
|
|
|
|
@@ -24,7 +24,7 @@ api_block_anonymous_users();
|
|
|
$this_section = SECTION_REPORTS;
|
|
|
|
|
|
// setting the name of the tool
|
|
|
-$tool_name=get_lang('Reports');
|
|
|
+$tool_name = get_lang('Reports');
|
|
|
|
|
|
// loading templates
|
|
|
reports_loadTemplates();
|
|
@@ -34,101 +34,110 @@ $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>');
|
|
|
+ // 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";
|
|
|
+ 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';
|
|
|
+ $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);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
+ 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">';
|
|
|
+ <?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 ($_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'));
|
|
|
- }
|
|
|
+ $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>');
|
|
|
+ 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">
|
|
|
+ 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({
|
|
|
+ $("#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",
|
|
|
+ "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 :",
|
|
@@ -143,50 +152,55 @@ if ($_REQUEST['format'] == 'html' || $_REQUEST['format'] == 'directlink') {
|
|
|
});
|
|
|
} );
|
|
|
</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>
|
|
|
+ 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;">
|
|
@@ -194,36 +208,46 @@ if ($_REQUEST['format'] == 'html' || $_REQUEST['format'] == 'directlink') {
|
|
|
<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;
|
|
|
+ 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;
|
|
|
}
|
|
|
+
|
|
|
?>
|