From 6a1e1617013074945d8494b931b9bbd41b7c1edd Mon Sep 17 00:00:00 2001 From: Jean-Yves Gaulier Date: Thu, 30 Oct 2014 18:53:22 +0100 Subject: [PATCH] Report-VU : fix collection selection, date selectors, csv, ... disabled log --- .../Phrasea/Controller/Report/Root.php | 78 ++++- lib/classes/module/report.php | 22 +- lib/classes/module/report/activity.php | 266 ++++++++++++++---- lib/classes/module/report/connexion.php | 12 +- lib/classes/module/report/download.php | 67 ++++- lib/classes/module/report/nav.php | 75 ++--- lib/classes/module/report/question.php | 3 +- lib/classes/module/report/sqlaction.php | 6 + lib/classes/module/report/sqlconnexion.php | 11 +- lib/classes/module/report/sqldownload.php | 35 ++- lib/classes/module/report/sqlfilter.php | 47 +++- lib/classes/module/report/sqlquestion.php | 11 +- .../web/report/form_date_and_base.html.twig | 4 +- www/skins/report/report.js | 9 +- 14 files changed, 499 insertions(+), 147 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Report/Root.php b/lib/Alchemy/Phrasea/Controller/Report/Root.php index 252a7481bb..a0bbfbceb6 100644 --- a/lib/Alchemy/Phrasea/Controller/Report/Root.php +++ b/lib/Alchemy/Phrasea/Controller/Report/Root.php @@ -299,6 +299,10 @@ class Root implements ControllerProviderInterface */ public function doReportDownloads(Application $app, Request $request) { + + // no_// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + + $download = new \module_report_download( $app, $request->request->get('dmin'), @@ -307,12 +311,19 @@ class Root implements ControllerProviderInterface $request->request->get('collection') ); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + $conf_pref = array(); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + foreach (\module_report::getPreff($app, $request->request->get('sbasid')) as $field) { - $conf_pref[strtolower($field)] = array($field, 0, 0, 0, 0); +// $conf_pref[strtolower($field)] = array($field, 0, 0, 0, 0); + $conf_pref[$field] = array($field, 0, 0, 0, 0); } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + $conf = array_merge(array( 'user' => array(_('report:: utilisateurs'), 1, 1, 1, 1), 'ddate' => array(_('report:: date'), 1, 0, 1, 1), @@ -326,21 +337,36 @@ class Root implements ControllerProviderInterface 'societe' => array(_('report:: societe'), 1, 1, 1, 1) ), $conf_pref); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + if ($request->request->get('printcsv') == 'on') { $download->setHasLimit(false); $download->setPrettyString(false); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + $this->doReport($app, $request, $download, $conf); - return $this->getCSVResponse($app, $download, 'download'); + $r = $this->getCSVResponse($app, $download, 'download'); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s\n\n", __FILE__, __LINE__, var_export($r, true)), FILE_APPEND); + + return $r; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + $report = $this->doReport($app, $request, $download, $conf); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + if ($report instanceof Response) { +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + return $report; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + return $app->json(array( 'rs' => $app['twig']->render('report/ajax_data_content.html.twig', array( 'result' => isset($report['report']) ? $report['report'] : $report, @@ -380,7 +406,8 @@ class Root implements ControllerProviderInterface $conf_pref = array(); foreach (\module_report::getPreff($app, $request->request->get('sbasid')) as $field) { - $conf_pref[strtolower($field)] = array($field, 0, 0, 0, 0); +// $conf_pref[strtolower($field)] = array($field, 0, 0, 0, 0); + $conf_pref[$field] = array($field, 0, 0, 0, 0); } $conf = array_merge(array( @@ -398,7 +425,11 @@ class Root implements ControllerProviderInterface $this->doReport($app, $request, $document, $conf, 'record_id'); - return $this->getCSVResponse($app, $document, 'documents'); + $r = $this->getCSVResponse($app, $document, 'documents'); + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s\n\n", __FILE__, __LINE__, var_export($r, true)), FILE_APPEND); + + return $r; } $report = $this->doReport($app, $request, $document, $conf, 'record_id'); @@ -506,6 +537,7 @@ class Root implements ControllerProviderInterface $response = new CSVFileResponse($filename, function () use ($app, $result) { $app['csv.exporter']->export('php://output', $result); }); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); return $response; } @@ -545,6 +577,7 @@ class Root implements ControllerProviderInterface unset($conf['ip']); } } + //save initial conf $base_conf = $conf; //format conf according user preferences @@ -609,13 +642,20 @@ class Root implements ControllerProviderInterface $filter->addFilter('record_id', '=', $request->request->get('word', '')); } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + //set filters to current report $report->setFilter($filter->getTabFilter()); $report->setActiveColumn($filter->getActiveColumn()); $report->setPostingFilter($filter->getPostingFilter()); // display a new arraywhere results are group +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + if ('' !== $groupby = $request->request->get('groupby', '')) { + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + $report->setConfig(false); $groupby = current(explode(' ', $groupby)); @@ -627,6 +667,8 @@ class Root implements ControllerProviderInterface $groupField = isset($conf[strtolower($groupby)]['title']) ? $conf[strtolower($groupby)]['title'] : ''; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + return $app->json(array( 'rs' => $app['twig']->render('report/ajax_data_content.html.twig', array( 'result' => isset($reportArray['report']) ? $reportArray['report'] : $reportArray, @@ -641,6 +683,8 @@ class Root implements ControllerProviderInterface )); } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + //set Limit if ($report->getEnableLimit() && ('' !== $page = $request->request->get('page', '')) @@ -650,6 +694,8 @@ class Root implements ControllerProviderInterface $report->setLimit(false, false); } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + //time to build our report if (false === $what) { $reportArray = $report->buildReport($conf); @@ -657,6 +703,8 @@ class Root implements ControllerProviderInterface $reportArray = $report->buildReport($conf, $what, $request->request->get('tbl', false)); } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + return $reportArray; } @@ -678,19 +726,33 @@ class Root implements ControllerProviderInterface foreach (array_keys($report->getDisplay()) as $k) { $headers[$k] = $k; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s \n\n", __FILE__, __LINE__, var_export($headers, true)), FILE_APPEND); + // set headers as first row $result = $report->getResult(); + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s \n\n", __FILE__, __LINE__, var_export($result[0], true)), FILE_APPEND); + array_unshift($result, $headers); - $collection = new CallbackCollection($result, function ($row) use ($report) { + $collection = new CallbackCollection($result, function ($row) use ($headers) { // restrict fields to the displayed ones - return array_map('strip_tags', array_intersect_key($row, $report->getDisplay())); + // return array_map("strip_tags", array_intersect_key($row, $report->getDisplay())); + $ret = array(); + foreach($headers as $f) { + $ret[$f] = array_key_exists($f, $row) ? strip_tags($row[$f]) : ''; + } + return $ret; }); $filename = sprintf('report_export_%s_%s.csv', $type, date('Ymd')); - $response = new CSVFileResponse($filename, function () use ($app, $collection) { + + $cb = function () use ($app, $collection) { +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s\n\n", __FILE__, __LINE__, var_export($collection, true)), FILE_APPEND); $app['csv.exporter']->export('php://output', $collection); - }); + }; + + $response = new CSVFileResponse($filename, $cb); return $response; } diff --git a/lib/classes/module/report.php b/lib/classes/module/report.php index 729bb0e9ab..f2d12e7f55 100644 --- a/lib/classes/module/report.php +++ b/lib/classes/module/report.php @@ -578,6 +578,7 @@ class module_report return new module_report_sqlconnexion($this->app, $this); break; case 'download' : + // no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); return new module_report_sqldownload($this->app, $this); break; case 'question' : @@ -777,7 +778,6 @@ class module_report */ protected function setConfigColumn($tab) { - foreach ($tab as $column => $row) { foreach ($row as $ind => $value) { $title_text = ""; @@ -816,39 +816,59 @@ class module_report */ public function buildReport($tab = false, $groupby = false, $on = false) { +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + if (sizeof($this->report) > 0) { return $this->report; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + $conn = connection::getPDOConnection($this->app, $this->sbas_id); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + $this->buildReq($groupby, $on); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\nreq=%s\n\n", __FILE__, __LINE__, $this->req), FILE_APPEND); + try { try { $stmt = $conn->prepare($this->req); $stmt->execute($this->params); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt->closeCursor(); + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\ncount==%s\n\n", __FILE__, __LINE__, count($rs)), FILE_APPEND); + } catch (PDOException $e) { echo $e->getMessage(); return; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s\n\n", __FILE__, __LINE__, get_class($this)), FILE_APPEND); + //set request field $this->setChamp($rs); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); //set display $this->setDisplay($tab, $groupby); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); //construct results $this->buildResult($this->app, $rs); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); //calculate prev and next page $this->calculatePages($rs); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); //do we display navigator ? $this->setDisplayNav(); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); //assign all variables $this->setReport(); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); + return $this->report; } catch (\Exception $e) { echo $e->getMessage(); diff --git a/lib/classes/module/report/activity.php b/lib/classes/module/report/activity.php index c854f8308c..c71e97f315 100644 --- a/lib/classes/module/report/activity.php +++ b/lib/classes/module/report/activity.php @@ -43,7 +43,8 @@ class module_report_activity extends module_report public function __construct(Application $app, $arg1, $arg2, $sbas_id, $collist) { - parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); + // parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); + parent::__construct($app, $arg1, $arg2, $sbas_id, ""); } /** @@ -84,6 +85,7 @@ class module_report_activity extends module_report return $hours; } + // ==================== Site activity : Site activity ===================== /** * @desc get the site activity per hours * @return array @@ -99,15 +101,12 @@ class module_report_activity extends module_report $params = array_merge(array(), $filter['params']); $sql = " - SELECT tt.heures, SUM(1) AS nb - FROM ( - SELECT DISTINCT(log.id), DATE_FORMAT( log.date, '%k' ) AS heures + SELECT CAST(DATE_FORMAT(log.date, '%k') AS UNSIGNED) AS heures, COUNT(id) AS nb FROM log FORCE INDEX (date_site) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE (" . $filter['sql'] . ") - ) AS tt - GROUP BY tt.heures - ORDER BY tt.heures ASC"; + WHERE (" . $filter['sql'] . ") AND !ISNULL(usrid) + GROUP BY heures;"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $sqlBuilder->getConnBas()->prepare($sql); $stmt->execute($params); @@ -142,12 +141,14 @@ class module_report_activity extends module_report return $this->report; } + // ===================== not called ? ==================== /** * Get all questions by user * * @param string $value * @param string $what */ +/* public function getAllQuestionByUser($value, $what) { $result = array(); @@ -195,7 +196,9 @@ class module_report_activity extends module_report return $this->result; } +*/ + // ================== Site activity : Top questions (le second radio ...) ================ /** * get the most asked question * @param array $tab config for html table @@ -213,19 +216,18 @@ class module_report_activity extends module_report ($no_answer) ? $this->title = _('report:: questions sans reponses') : $this->title = _('report:: questions les plus posees'); $sql = " - SELECT TRIM(tt.search) AS search, SUM(1) AS nb, ROUND(avg(tt.results)) AS nb_rep - FROM ( - SELECT DISTINCT(log.id), log_search.search AS search, results + SELECT TRIM(log_search.search) AS search, COUNT(log_search.id) AS nb, ROUND(avg(results)) AS nb_rep FROM (log_search) INNER JOIN log FORCE INDEX (date_site) ON (log_search.log_id = log.id) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE (" . $filter['sql'] . ") + WHERE (" . $filter['sql'] . ") AND !ISNULL(usrid) AND log_search.search != 'all' " . - ($no_answer ? ' AND log_search.results = 0 ' : '') . " - ) AS tt - GROUP BY tt.search + ($no_answer ? ' AND log_search.results = 0 ' : '') . " + + GROUP BY search ORDER BY nb DESC"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $sql .= !$no_answer ? ' LIMIT ' . $this->nb_top : ''; $stmt = $sqlBuilder->getConnBas()->prepare($sql); @@ -260,12 +262,14 @@ class module_report_activity extends module_report return $this->report; } + // =========================== not called ? ===================== /** * @desc get all downloads from one specific user * @param $usr user id * @param array $config config for the html table * @return array */ +/* public function getAllDownloadByUserBase($usr, $config = false) { $result = array(); @@ -319,7 +323,9 @@ class module_report_activity extends module_report return $this->result; } +*/ + // ============================ Downloads : Daily ========================== /** * @desc get all download by base by day * @param array $tab config for html table @@ -338,18 +344,19 @@ class module_report_activity extends module_report FROM ( SELECT DISTINCT(log.id), log_docs.date AS the_date, log_docs.final, log_docs.record_id FROM (log_docs) - INNER JOIN record ON (record.record_id = log_docs.record_id) INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_docs.log_id) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE (" . $filter['sql'] . ") + WHERE (" . $filter['sql'] . ") AND !ISNULL(usrid) AND (log_docs.action = 'download' OR log_docs.action = 'mail') AND (log_docs.final = 'preview' OR log_docs.final = 'document') ) AS tt + INNER JOIN record ON (record.record_id = tt.record_id) LEFT JOIN subdef AS s ON (s.record_id = tt.record_id) WHERE s.name = tt.final GROUP BY tt.final, ddate ORDER BY tt.the_date DESC"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $stmt = $sqlBuilder->getConnBas()->prepare($sql); $stmt->execute($params); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); @@ -398,6 +405,16 @@ class module_report_activity extends module_report $this->result[$nb_row]['preview'] = '' . $total['tot_prev'] . ''; $this->result[$nb_row]['total'] = '' . $total['tot_dl'] . ''; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, var_export($this->result, true)), FILE_APPEND); + foreach($this->result as $k=>$row) { + $_row = array(); + foreach($tab as $k2=>$f) { + $_row[$k2] = array_key_exists($k2, $row) ? $row[$k2] : ''; + } + $this->result[$k] = $_row; + } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, var_export($this->result, true)), FILE_APPEND); + $this->calculatePages($rs); $this->setDisplayNav(); $this->setReport(); @@ -405,6 +422,7 @@ class module_report_activity extends module_report return $this->report; } + // ==================== Connections: Per users ===================== /** * @desc get nb connexion by user , fonction ,societe etc.. * @param array $tab config for html table @@ -423,25 +441,21 @@ class module_report_activity extends module_report $params = array_merge(array(), $filter['params']); $this->req = " - SELECT SUM(1) AS connexion, tt.user, tt.usrid FROM ( - SELECT - DISTINCT(log.id), - log." . $on . " AS " . $on . ", - log.usrid + SELECT COUNT(id) AS connexion, log.user, log.usrid FROM log FORCE INDEX (date_site) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE log.user != 'API' - AND (" . $filter['sql'] . ") - ) AS tt - GROUP BY tt.usrid + AND (" . $filter['sql'] . ") AND !ISNULL(usrid) + GROUP BY usrid ORDER BY connexion DESC "; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->req), FILE_APPEND); + $stmt = $sqlBuilder->getConnBas()->prepare($this->req); $stmt->execute($params); $sqlBuilder->setTotalrows($stmt->rowCount()); $stmt->closeCursor(); - $this->enable_limit ? $this->req .= "LIMIT 0," . $this->nb_record : ""; + $this->enable_limit ? $this->req .= " LIMIT 0," . $this->nb_record : ""; $stmt = $sqlBuilder->getConnBas()->prepare($this->req); $stmt->execute($params); @@ -491,8 +505,9 @@ class module_report_activity extends module_report return $this->report; } + // ========================= Downloads : Per users ===================== /** - * Get the deail of download by users + * Get the detail of download by users * * @param array $tab config for the html table * @param String $on @@ -516,16 +531,17 @@ class module_report_activity extends module_report SELECT DISTINCT(log.id), TRIM(" . $on . ") AS " . $on . ", log_docs.record_id, log_docs.final, log.usrid FROM log_docs INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_docs.log_id) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - INNER JOIN record ON (record.record_id = log_docs.record_id) - WHERE (" . $filter['sql'] . ") + WHERE (" . $filter['sql'] . ") AND !ISNULL(usrid) AND (log_docs.action = 'download' OR log_docs.action = 'mail') ) AS tt + INNER JOIN record ON (record.record_id = tt.record_id) LEFT JOIN subdef FORCE INDEX (unicite) ON (tt.record_id = subdef.record_id) WHERE subdef.name = tt.final GROUP BY " . $on . ", usrid ORDER BY nb DESC;"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $stmt = $sqlBuilder->getConnBas()->prepare($sql); $stmt->execute($params); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); @@ -608,6 +624,18 @@ class module_report_activity extends module_report $this->result[$nb_row]['poidprev'] = '' . p4string::format_octets($total['poidprev']) . ''; } + + foreach($this->result as $k=>$row) { + $_row = array(); + foreach($tab as $k2=>$f) { + $_row[$k2] = array_key_exists($k2, $row) ? $row[$k2] : ''; + } + $_row['usrid'] = array_key_exists('usrid', $row) ? $row['usrid'] : ''; + $this->result[$k] = $_row; + } + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s\n\n", __FILE__, __LINE__, var_export($this->result, true)), FILE_APPEND); + $this->total = sizeof($this->result); $this->calculatePages($rs); $this->setDisplayNav(); @@ -616,6 +644,7 @@ class module_report_activity extends module_report return $this->report; } + // ========================== ???????????????? =========================== public static function topTenUser(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -632,7 +661,7 @@ class module_report_activity extends module_report $collfilter = module_report_sqlfilter::constructCollectionFilter($app, $list_coll_id); $params = array_merge($params, $collfilter['params']); - +/* $sql = "SELECT tt.usrid, tt.user, tt.final, tt.record_id, SUM(1) AS nb, SUM(size) AS poid FROM ( SELECT DISTINCT(log.id), log.usrid, user, final, log_date.record_id @@ -642,12 +671,28 @@ class module_report_activity extends module_report WHERE log.site = :site_id AND log_date.action = 'download' AND (" . $datefilter['sql'] . ")" . - (('' !== $collfilter['sql']) ? "AND (" . $collfilter['sql'] . ")" : '') - . " + (('' !== $collfilter['sql']) ? "AND (" . $collfilter['sql'] . ")" : '') + . " ) AS tt LEFT JOIN subdef AS s ON (s.record_id = tt.record_id) WHERE s.name = tt.final GROUP BY tt.user, tt.final"; +*/ + $sql = "SELECT tt.usrid, tt.user, tt.final, tt.record_id, SUM(1) AS nb, SUM(size) AS poid\n" + . " FROM (\n" + . " SELECT DISTINCT(log.id), log.usrid, user, final, log_date.record_id\n" + . " FROM (log_docs AS log_date)\n" + . " INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_date.log_id)\n" + . " WHERE log.site = :site_id\n" + . " AND log_date.action = 'download'\n" + . " AND (" . $datefilter['sql'] . ")\n" + . (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . "\n" + . ") AS tt\n" + . "LEFT JOIN subdef AS s ON (s.record_id = tt.record_id)\n" + . "WHERE s.name = tt.final\n" + . "GROUP BY tt.user, tt.final"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); @@ -699,6 +744,7 @@ class module_report_activity extends module_report return $result; } + //============================= Dashboard ========================= public static function activity(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -710,7 +756,7 @@ class module_report_activity extends module_report $params = array(':site_id' => $app['phraseanet.configuration']['main']['key']); $params = array_merge($params, $datefilter['params'], $collfilter['params']); - +/* $sql = " SELECT tt.id, HOUR(tt.heures) AS heures FROM ( @@ -718,9 +764,20 @@ class module_report_activity extends module_report FROM log AS log_date FORCE INDEX (date_site) INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . "" . - (('' !== $collfilter['sql']) ? "AND (" . $collfilter['sql'] . ")" : '') - . " AND log_date.site = :site_id + (('' !== $collfilter['sql']) ? "AND (" . $collfilter['sql'] . ")" : '') + . " AND log_date.site = :site_id ) AS tt"; +*/ + $sql = "SELECT tt.id, HOUR(tt.heures) AS heures\n" + . " FROM (\n" + . " SELECT DISTINCT(log_date.id), log_date.date AS heures\n" + . " FROM log AS log_date FORCE INDEX (date_site)\n" + . " WHERE " . $datefilter['sql'] . " AND !ISNULL(usrid)" + . (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . "\n" + . " AND log_date.site = :site_id\n" + . " ) AS tt"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); @@ -745,6 +802,7 @@ class module_report_activity extends module_report return $res; } + //============================= Dashboard ========================= public static function activityDay(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -755,7 +813,7 @@ class module_report_activity extends module_report $params = array(':site_id' => $app['phraseanet.configuration']['main']['key']); $params = array_merge($params, $datefilter['params'], $collfilter['params']); - +/* $sql = " SELECT tt.ddate, COUNT( DATE_FORMAT( tt.ddate, '%d' ) ) AS activity FROM ( @@ -763,10 +821,23 @@ class module_report_activity extends module_report FROM log AS log_date FORCE INDEX (date_site) INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.site = :site_id" . - (('' !== $collfilter['sql']) ? (" AND (" . $collfilter['sql'] . ")") : '') + (('' !== $collfilter['sql']) ? (" AND (" . $collfilter['sql'] . ")") : '') . ") AS tt GROUP by tt.ddate ORDER BY tt.ddate ASC"; +*/ + $sql = "SELECT tt.ddate, COUNT( DATE_FORMAT( tt.ddate, '%d' ) ) AS activity\n" + . " FROM (\n" + . " SELECT DISTINCT(log_date.id), DATE_FORMAT( log_date.date, '%Y-%m-%d' ) AS ddate\n" + . " FROM log AS log_date FORCE INDEX (date_site)\n" + . " WHERE " . $datefilter['sql'] . "\n" + . " AND log_date.site = :site_id AND !ISNULL(usrid)" . + (('' !== $collfilter['sql']) ? (" AND (" . $collfilter['sql'] . ")") : '') . "\n" + . ") AS tt\n" + . " GROUP by tt.ddate\n" + . " ORDER BY tt.ddate ASC"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); @@ -785,6 +856,7 @@ class module_report_activity extends module_report return $res; } + //============================= Dashboard ========================= public static function activityQuestion(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -796,7 +868,7 @@ class module_report_activity extends module_report $params = array(':site_id' => $app['phraseanet.configuration']['main']['key']); $params = array_merge($params, $datefilter['params'], $collfilter['params']); - +/* $sql = " SELECT tt.usrid, tt.user, sum(1) AS nb FROM ( @@ -806,10 +878,24 @@ class module_report_activity extends module_report INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.site = :site_id" . - (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') + (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . ") AS tt GROUP BY tt.usrid ORDER BY nb DESC"; +*/ + $sql = "SELECT tt.usrid, tt.user, sum(1) AS nb\n" + . " FROM (\n" + . " SELECT DISTINCT(log_date.id), log_date.usrid, log_date.user\n" + . " FROM (`log_search`)\n" + . " INNER JOIN log AS log_date FORCE INDEX (date_site) ON (log_search.log_id = log_date.id)\n" + . " WHERE " . $datefilter['sql'] . "\n" + . " AND log_date.site = :site_id" . + (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . "\n" + . ") AS tt\n" + . " GROUP BY tt.usrid\n" + . " ORDER BY nb DESC"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); @@ -825,6 +911,7 @@ class module_report_activity extends module_report return $result; } + //============================= Dashboard ========================= public static function activiteTopQuestion(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -836,7 +923,7 @@ class module_report_activity extends module_report $params = array(':site_id' => $app['phraseanet.configuration']['main']['key']); $params = array_merge($params, $datefilter['params'], $collfilter['params']); - +/* $sql = " SELECT TRIM(tt.search) AS question, tt.usrid, tt.user, SUM(1) AS nb FROM ( @@ -846,10 +933,24 @@ class module_report_activity extends module_report INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.site = :site_id" . - (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') + (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . ") AS tt GROUP BY tt.search ORDER BY nb DESC"; +*/ + $sql = "SELECT TRIM(tt.search) AS question, tt.usrid, tt.user, SUM(1) AS nb\n" + . " FROM (\n" + . " SELECT DISTINCT(log_date.id), log_search.search, log_date.usrid, log_date.user\n" + . " FROM (`log_search`)\n" + . " INNER JOIN log AS log_date FORCE INDEX (date_site) ON (log_search.log_id = log_date.id)\n" + . " WHERE " . $datefilter['sql'] . "\n" + . " AND log_date.site = :site_id" . + (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . "\n" + . ") AS tt\n" + . " GROUP BY tt.search\n" + . " ORDER BY nb DESC"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); @@ -868,6 +969,7 @@ class module_report_activity extends module_report return $result; } + //============================= Dashboard ========================= public static function activiteTopTenSiteView(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -877,7 +979,7 @@ class module_report_activity extends module_report $params = array(); $params = array_merge($params, $datefilter['params'], $collfilter['params']); - +/* $sql = " SELECT tt.referrer, SUM(1) AS nb_view FROM ( @@ -886,10 +988,23 @@ class module_report_activity extends module_report INNER JOIN log AS log_date FORCE INDEX (date_site) ON (log_view.log_id = log_date.id) INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $datefilter['sql'] . "" . - (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') + (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . ") AS tt GROUP BY referrer ORDER BY nb_view DESC "; +*/ + $sql = "SELECT tt.referrer, SUM(1) AS nb_view\n" + . " FROM (\n" + . " SELECT DISTINCT(log_date.id), referrer\n" + . " FROM (log_view)\n" + . " INNER JOIN log AS log_date FORCE INDEX (date_site) ON (log_view.log_id = log_date.id)\n" + . " WHERE " . $datefilter['sql'] + . (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . "\n" + . ") AS tt\n" + . " GROUP BY referrer\n" + . " ORDER BY nb_view DESC "; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); @@ -911,6 +1026,7 @@ class module_report_activity extends module_report return $result; } + //============================= Dashboard ========================= public static function activiteAddedDocument(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -920,7 +1036,7 @@ class module_report_activity extends module_report $params = array(); $params = array_merge($params, $datefilter['params'], $collfilter['params']); - +/* $sql = " SELECT tt.ddate, COUNT( DATE_FORMAT( tt.ddate, '%d' ) ) AS activity FROM ( @@ -930,10 +1046,23 @@ class module_report_activity extends module_report INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.action = 'add' " . (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') - . " + . " ) AS tt GROUP BY tt.ddate ORDER BY activity ASC "; +*/ + $sql = "SELECT tt.ddate, COUNT( DATE_FORMAT( tt.ddate, '%d' ) ) AS activity\n" + . " FROM (\n" + . " SELECT DISTINCT(log.id), DATE_FORMAT(log_date.date, '%Y-%m-%d') AS ddate\n" + . " FROM (log_docs AS log_date)\n" + . " INNER JOIN log FORCE INDEX (date_site) ON (log_date.log_id = log.id)\n" + . " WHERE " . $datefilter['sql'] . " AND log_date.action = 'add'" + . (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . "\n" + . " ) AS tt\n" + . " GROUP BY tt.ddate\n" + . " ORDER BY activity ASC "; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); @@ -947,6 +1076,7 @@ class module_report_activity extends module_report return $result; } + //============================= Dashboard ========================= public static function activiteEditedDocument(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -956,7 +1086,7 @@ class module_report_activity extends module_report $params = array(); $params = array_merge($params, $datefilter['params'], $collfilter['params']); - +/* $sql = " SELECT tt.ddate, COUNT( DATE_FORMAT( tt.ddate, '%d' ) ) AS activity FROM ( @@ -965,10 +1095,23 @@ class module_report_activity extends module_report INNER JOIN log FORCE INDEX (date_site) ON (log_date.log_id = log.id) INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.action = 'edit'" . - (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') + (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . ") AS tt GROUP BY tt.ddate ORDER BY activity ASC "; +*/ + $sql = "SELECT tt.ddate, COUNT( DATE_FORMAT( tt.ddate, '%d' ) ) AS activity\n" + . " FROM (\n" + . " SELECT DISTINCT(log.id), DATE_FORMAT( log_date.date, '%Y-%m-%d') AS ddate\n" + . " FROM (log_docs AS log_date)\n" + . " INNER JOIN log FORCE INDEX (date_site) ON (log_date.log_id = log.id)\n" + . " WHERE " . $datefilter['sql'] . " AND log_date.action = 'edit'" + . (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . "\n" + . ") AS tt\n" + . " GROUP BY tt.ddate\n" + . " ORDER BY activity ASC "; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); @@ -983,6 +1126,7 @@ class module_report_activity extends module_report return $result; } + //============================= Dashboard ========================= public static function activiteAddedTopTenUser(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { $conn = connection::getPDOConnection($app, $sbas_id); @@ -992,7 +1136,7 @@ class module_report_activity extends module_report $params = array(); $params = array_merge($params, $datefilter['params'], $collfilter['params']); - +/* $sql = " SELECT tt.usrid, tt.user, sum( 1 ) AS nb FROM ( @@ -1001,10 +1145,24 @@ class module_report_activity extends module_report INNER JOIN log FORCE INDEX (date_site) ON (log_date.log_id = log.id) INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE " . $datefilter['sql'] . " AND log_date.action = 'add'" . - (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') + (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . ") AS tt GROUP BY tt.usrid ORDER BY nb ASC "; +*/ + $sql = "" + . " SELECT tt.usrid, tt.user, sum( 1 ) AS nb\n" + . " FROM (\n" + . " SELECT DISTINCT(log.id), log.usrid, log.user\n" + . " FROM (log_docs AS log_date)\n" + . " INNER JOIN log FORCE INDEX (date_site) ON (log_date.log_id = log.id)\n" + . " WHERE " . $datefilter['sql'] . " AND log_date.action = 'add'" + . (('' !== $collfilter['sql']) ? " AND (" . $collfilter['sql'] . ")" : '') . "\n" + . ") AS tt\n" + . " GROUP BY tt.usrid\n" + . " ORDER BY nb ASC "; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); diff --git a/lib/classes/module/report/connexion.php b/lib/classes/module/report/connexion.php index ea7562ebfb..2ab00a6130 100644 --- a/lib/classes/module/report/connexion.php +++ b/lib/classes/module/report/connexion.php @@ -38,7 +38,8 @@ class module_report_connexion extends module_report */ public function __construct(Application $app, $arg1, $arg2, $sbas_id, $collist) { - parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); + // parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); + parent::__construct($app, $arg1, $arg2, $sbas_id, ""); $this->title = _('report::Connexions'); } @@ -150,11 +151,18 @@ class module_report_connexion extends module_report $finalfilter = $datefilter['sql'] . ' AND '; $finalfilter .= $collfilter['sql'] . ' AND '; $finalfilter .= 'log_date.site = :site_id'; - +/* $sql = "SELECT COUNT(DISTINCT(log_date.id)) as nb FROM log as log_date FORCE INDEX (date_site) INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id) WHERE " . $finalfilter; +*/ + $sql = "SELECT COUNT(DISTINCT(log_date.id)) as nb\n" + . " FROM log as log_date FORCE INDEX (date_site)\n" + . " INNER JOIN log_colls FORCE INDEX (couple) ON (log_date.id = log_colls.log_id)\n" + . " WHERE " . $finalfilter . "\n"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); diff --git a/lib/classes/module/report/download.php b/lib/classes/module/report/download.php index 9f0958d6fc..33834d4c69 100644 --- a/lib/classes/module/report/download.php +++ b/lib/classes/module/report/download.php @@ -44,7 +44,8 @@ class module_report_download extends module_report */ public function __construct(Application $app, $arg1, $arg2, $sbas_id, $collist) { - parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); + // parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); + parent::__construct($app, $arg1, $arg2, $sbas_id, ""); $this->title = _('report:: telechargements'); } @@ -55,9 +56,12 @@ class module_report_download extends module_report */ protected function buildReq($groupby = false, $on = false) { +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); +ini_set('display_errors', true); $sql = $this->sqlBuilder('download') ->setOn($on)->setGroupBy($groupby)->buildSql(); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); $this->req = $sql->getSql(); $this->params = $sql->getParams(); $this->total = $sql->getTotalRows(); @@ -102,6 +106,7 @@ class module_report_download extends module_report { $i = 0; $pref = parent::getPreff($app, $this->sbas_id); +//// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s\n\n", __FILE__, __LINE__, var_export($rs, true)), FILE_APPEND); foreach ($rs as $row) { if ($this->enable_limit && ($i > $this->nb_record)) @@ -112,23 +117,28 @@ class module_report_download extends module_report } if (array_key_exists('record_id', $row)) { +//// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s\n\n", __FILE__, __LINE__, $row['record_id']), FILE_APPEND); try { $record = new \record_adapter($app, $this->sbas_id, $row['record_id']); + $caption = $record->get_caption(); + foreach ($pref as $field) { +//// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s) %s\n\n", __FILE__, __LINE__, $field), FILE_APPEND); + try { + $this->result[$i][$field] = $caption + ->get_field($field) + ->get_serialized_values(); + } catch (\Exception $e) { + $this->result[$i][$field] = ''; + } + } } catch (\Exception_Record_AdapterNotFound $e) { - continue; - } - - foreach ($pref as $field) { - try { - $this->result[$i][$field] = $record->get_caption() - ->get_field($field) - ->get_serialized_values(); - } catch (\Exception $e) { + foreach ($pref as $field) { $this->result[$i][$field] = ''; } } } $i ++; +//// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); } } @@ -176,13 +186,14 @@ class module_report_download extends module_report $params = array(':site_id' => $app['phraseanet.configuration']['main']['key']); $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); - $collfilter = module_report_sqlfilter::constructCollectionFilter($app, $list_coll_id); - $params = array_merge($params, $datefilter['params'], $collfilter['params']); +// $collfilter = module_report_sqlfilter::constructCollectionFilter($app, $list_coll_id); +// $params = array_merge($params, $datefilter['params'], $collfilter['params']); + $params = array_merge($params, $datefilter['params']); $finalfilter = $datefilter['sql'] . ' AND '; - $finalfilter .= $collfilter['sql'] . ' AND '; +// $finalfilter .= $collfilter['sql'] . ' AND '; $finalfilter .= 'log.site = :site_id'; - +/* $sql = ' SELECT SUM(1) AS nb FROM ( @@ -197,6 +208,18 @@ class module_report_download extends module_report ) ) AS tt '; +*/ + $sql = "SELECT SUM(1) AS nb\n" + . " FROM (\n" + . " SELECT DISTINCT(log.id)\n" + . " FROM log FORCE INDEX (date_site)\n" + . " INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id)\n" + . " WHERE " . $finalfilter . "\n" + . " AND ( log_date.action = 'download' OR log_date.action = 'mail' )\n" + . " ) AS tt"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $stmt = $conn->prepare($sql); $stmt->execute($params); $row = $stmt->fetch(PDO::FETCH_ASSOC); @@ -224,7 +247,7 @@ class module_report_download extends module_report $finalfilter .= $datefilter['sql'] . ' AND '; $finalfilter .= $collfilter['sql'] . ' AND '; $finalfilter .= 'log.site = :site_id'; - +/* $sql = ' SELECT tt.id, tt.name, SUM(1) AS nb FROM ( @@ -243,6 +266,20 @@ class module_report_download extends module_report ) AS tt GROUP BY id, name '; +*/ + $sql = "SELECT tt.id, tt.name, SUM(1) AS nb\n" + . " FROM (\n" + . " SELECT DISTINCT(log.id) AS log_id, log_date.record_id as id, subdef.name\n" + . " FROM ( log )\n" + . " INNER JOIN log_docs as log_date ON (log.id = log_date.log_id)\n" + . " INNER JOIN subdef ON (log_date.record_id = subdef.record_id)\n" + . " WHERE (" . $finalfilter . ")\n" + . " AND ( log_date.action = 'download' OR log_date.action = 'mail' )\n" + . " AND subdef.name = log_date.final\n" + . " ) AS tt\n" + . " GROUP BY id, name\n"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $conn->prepare($sql); $stmt->execute($params); diff --git a/lib/classes/module/report/nav.php b/lib/classes/module/report/nav.php index 194398ad5f..32610233c0 100644 --- a/lib/classes/module/report/nav.php +++ b/lib/classes/module/report/nav.php @@ -48,7 +48,8 @@ class module_report_nav extends module_report */ public function __construct(Application $app, $arg1, $arg2, $sbas_id, $collist) { - parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); +// parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); + parent::__construct($app, $arg1, $arg2, $sbas_id, ""); } private function setTotalPourcent() @@ -60,12 +61,11 @@ class module_report_nav extends module_report $params = array_merge(array(), $report_filter['params']); $sql = ' - SELECT SUM(1) AS total FROM ( - SELECT DISTINCT (log.id) + SELECT COUNT(log.id) AS total FROM log FORCE INDEX (date_site) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE ' . $report_filter['sql'] . ' AND nav != "" - ) AS tt'; + WHERE ' . $report_filter['sql'] . ' AND nav != "" AND !ISNULL(usrid)'; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $stmt = $sqlBuilder->getConnBas()->prepare($sql); $stmt->execute($params); @@ -112,16 +112,14 @@ class module_report_nav extends module_report $params = array_merge(array(), $report_filter['params']); $sql = ' - SELECT tt.nav, SUM(1) AS nb, ROUND((SUM(1) / ' . $this->total_pourcent . ' * 100), 1) AS pourcent - FROM ( - SELECT DISTINCT(log.id), nav + SELECT nav, SUM(1) AS nb, ROUND((SUM(1) / ' . $this->total_pourcent . ' * 100), 1) AS pourcent FROM log FORCE INDEX (date_site, nav) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE ' . $report_filter['sql'] . ' AND nav != "" - ) AS tt - GROUP BY tt.nav + WHERE ' . $report_filter['sql'] . ' AND nav != "" AND !ISNULL(usrid) + GROUP BY nav ORDER BY nb DESC'; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $this->initialize(); $stmt = $sqlBuilder->getConnBas()->prepare($sql); @@ -171,16 +169,16 @@ class module_report_nav extends module_report $params = array_merge(array(), $report_filter['params']); $sql = ' - SELECT tt.os, COUNT(os) AS nb, ROUND((COUNT(os)/' . $this->total_pourcent . '*100),1) AS pourcent - FROM ( - SELECT DISTINCT(log.id), os + SELECT os, COUNT(os) AS nb, ROUND((COUNT(os)/' . $this->total_pourcent . '*100),1) AS pourcent + FROM log FORCE INDEX (date_site, os) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE '. $report_filter['sql'] . ' AND os != "" - ) AS tt - GROUP BY tt.os + WHERE '. $report_filter['sql'] . ' AND os != "" AND !ISNULL(usrid) + + GROUP BY os ORDER BY nb DESC'; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $this->initialize(); $stmt = $sqlBuilder->getConnBas()->prepare($sql); @@ -229,17 +227,17 @@ class module_report_nav extends module_report $params = array_merge(array(), $report_filter['params']); $sql = ' - SELECT tt.res, COUNT(res) AS nb, ROUND((COUNT(res)/ ' . $this->total_pourcent . '*100),1) AS pourcent - FROM ( - SELECT DISTINCT(log.id), res + SELECT res, COUNT(res) AS nb, ROUND((COUNT(res)/ ' . $this->total_pourcent . '*100),1) AS pourcent + FROM log FORCE INDEX (date_site, res) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE '. $report_filter['sql'] . ' AND res != "" - ) AS tt - GROUP BY tt.res + WHERE '. $report_filter['sql'] . ' AND res != "" AND !ISNULL(usrid) + + GROUP BY res ORDER BY nb DESC LIMIT 0, 10'; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $this->initialize(); $stmt = $sqlBuilder->getConnBas()->prepare($sql); @@ -291,15 +289,16 @@ class module_report_nav extends module_report $sql = " SELECT tt.combo, COUNT( tt.combo ) AS nb, ROUND((COUNT(tt.combo)/" . $this->total_pourcent . "*100), 1) AS pourcent FROM ( - SELECT DISTINCT(log.id), CONCAT( nav, '-', os ) AS combo + SELECT CONCAT( nav, '-', os ) AS combo FROM log FORCE INDEX (date_site, os_nav) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE ". $report_filter['sql'] ." AND nav != '' AND os != '' + WHERE ". $report_filter['sql'] ." AND nav != '' AND os != '' AND !ISNULL(usrid) ) AS tt GROUP BY tt.combo ORDER BY nb DESC LIMIT 0 , 10"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $this->initialize(); $stmt = $sqlBuilder->getConnBas()->prepare($sql); @@ -351,14 +350,12 @@ class module_report_nav extends module_report $params = array_merge(array(), $report_filter['params']); $sql = ' - SELECT tt.appli - FROM ( - SELECT DISTINCT(log.id), appli + SELECT appli FROM log FORCE INDEX (date_site, appli) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE ' . $report_filter['sql'] . ' AND appli != \'a:0:{}\' - ) AS tt - GROUP BY tt.appli'; + WHERE ' . $report_filter['sql'] . ' AND appli != \'a:0:{}\' AND !ISNULL(usrid) + GROUP BY appli'; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); $this->initialize(); @@ -452,6 +449,8 @@ class module_report_nav extends module_report WHERE (usr_id = :value)'; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $params2 = array(':value' => $val); $stmt = $conn->prepare($sql); $stmt->execute($params2); @@ -556,6 +555,8 @@ class module_report_nav extends module_report GROUP BY version ORDER BY nb DESC"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $sql), FILE_APPEND); + $stmt = $conn->prepare($sql); $stmt->execute($params); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); diff --git a/lib/classes/module/report/question.php b/lib/classes/module/report/question.php index d4945ea7a8..2a431c193c 100644 --- a/lib/classes/module/report/question.php +++ b/lib/classes/module/report/question.php @@ -39,7 +39,8 @@ class module_report_question extends module_report */ public function __construct(Application $app, $arg1, $arg2, $sbas_id, $collist) { - parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); +// parent::__construct($app, $arg1, $arg2, $sbas_id, $collist); + parent::__construct($app, $arg1, $arg2, $sbas_id, ""); $this->title = _('report:: question'); } diff --git a/lib/classes/module/report/sqlaction.php b/lib/classes/module/report/sqlaction.php index 2d16c17a2b..61a46ede4a 100644 --- a/lib/classes/module/report/sqlaction.php +++ b/lib/classes/module/report/sqlaction.php @@ -55,6 +55,8 @@ class module_report_sqlaction extends module_report_sql implements module_report WHERE (" . $filter['sql'] . ") AND (d.action = :action) ) AS tt"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); + $customFieldMap = array( 'log.usrid' => 'tt.usrid', 'log.user' => 'tt.user', @@ -89,6 +91,8 @@ class module_report_sqlaction extends module_report_sql implements module_report GROUP BY " . $this->groupby . " ORDER BY nombre"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); + $stmt = $this->getConnBas()->prepare($this->sql); $stmt->execute($this->params); $this->total_row = $stmt->rowCount(); @@ -116,6 +120,8 @@ class module_report_sqlaction extends module_report_sql implements module_report AND (d.action = :action) ) AS tt " . ($this->filter->getOrderFilter() ? $this->filter->getOrderFilter() : ''); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); + return array('sql' => $this->sql, 'params' => $this->params); } } diff --git a/lib/classes/module/report/sqlconnexion.php b/lib/classes/module/report/sqlconnexion.php index 314586ee82..2c6e1400d4 100644 --- a/lib/classes/module/report/sqlconnexion.php +++ b/lib/classes/module/report/sqlconnexion.php @@ -27,7 +27,7 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep if ($this->groupby == false) { $this->sql = " SELECT - DISTINCT(log_colls.log_id), + log.id, log.user, log.usrid, log.date as ddate, @@ -40,8 +40,9 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep log.appli, log.ip FROM log FORCE INDEX (date_site) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - WHERE (" . $filter['sql'] .")"; + WHERE (" . $filter['sql'] .") AND !ISNULL(log.usrid)"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); $stmt = $this->connbas->prepare($this->sql); $stmt->execute($this->params); @@ -65,6 +66,8 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep GROUP BY " . $this->groupby. " ORDER BY nb DESC"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); + $stmt = $this->connbas->prepare($this->sql); $stmt->execute($this->params); $this->total_row = $stmt->rowCount(); @@ -88,6 +91,8 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep WHERE (' . $filter['sql'] . ') ) AS tt ORDER BY val ASC'; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); + return array('sql' => $this->sql, 'params' => $this->params); } } diff --git a/lib/classes/module/report/sqldownload.php b/lib/classes/module/report/sqldownload.php index 60c79e4617..dd7e5392c8 100644 --- a/lib/classes/module/report/sqldownload.php +++ b/lib/classes/module/report/sqldownload.php @@ -17,6 +17,7 @@ class module_report_sqldownload extends module_report_sql implements module_repo public function __construct(Application $app, module_report $report) { +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); parent::__construct($app, $report); if ($report->isInformative()) { $this->restrict = true; @@ -25,12 +26,15 @@ class module_report_sqldownload extends module_report_sql implements module_repo public function buildSql() { +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); $customFieldMap = array(); $filter = $this->filter->getReportFilter() ? : array('params' => array(), 'sql' => false); $this->params = array_merge(array(), $filter['params']); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); if ($this->groupby == false) { +/* $this->sql = " SELECT DISTINCT(log.id), log.user, log.societe, log.pays, log.activite, log_colls.coll_id, log.fonction, log.usrid, log_docs.date AS ddate, log_docs.record_id, log_docs.final, log_docs.comment @@ -38,10 +42,24 @@ class module_report_sqldownload extends module_report_sql implements module_repo INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_docs.log_id) INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE (" .$filter['sql'] . ") AND (log_docs.action = 'download' OR log_docs.action = 'mail')"; +*/ + $this->sql = " + SELECT log.id, log.user, log.societe, log.pays, log.activite, record.coll_id, + log.fonction, log.usrid, log_docs.date AS ddate, log_docs.record_id, log_docs.final, log_docs.comment + FROM + ( + log_docs + INNER JOIN + log FORCE INDEX (date_site) ON (log.id = log_docs.log_id) + ) + LEFT JOIN + record ON (record.record_id=log_docs.record_id) + WHERE (" .$filter['sql'] . ") AND (log_docs.action = 'download' OR log_docs.action = 'mail')"; if ($this->restrict) { $this->sql .= ' AND (log_docs.final = "document" OR log_docs.final = "preview")'; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); } else { $name = $this->groupby; $field = $this->getTransQuery($this->groupby); @@ -50,12 +68,12 @@ class module_report_sqldownload extends module_report_sql implements module_repo $this->sql = ' SELECT ' . $name . ', SUM(1) AS telechargement, tt.comment, tt.size, tt.file, tt.mime, tt.final FROM ( - SELECT DISTINCT(log.id), TRIM( ' . $field . ' ) AS ' . $name . ', log_docs.comment, subdef.size, subdef.file, subdef.mime, log_docs.final + SELECT log.id, TRIM( ' . $field . ' ) AS ' . $name . ', log_docs.comment, subdef.size, subdef.file, subdef.mime, log_docs.final FROM log FORCE INDEX (date_site) INNER JOIN log_docs ON (log.id = log_docs.log_id) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) - INNER JOIN record ON (log_docs.record_id = record.record_id) - INNER JOIN subdef ON (log_docs.record_id = subdef.record_id)'; + + LEFT JOIN record ON (log_docs.record_id = record.record_id) + LEFT JOIN subdef ON (log_docs.record_id = subdef.record_id)'; $customFieldMap = array( $field => $name, @@ -65,6 +83,7 @@ class module_report_sqldownload extends module_report_sql implements module_repo 'subdef.mime' => 'tt.mime', 'log_docs.final' => 'tt.final', ); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); } elseif ($this->on == 'DOC') { $this->sql = ' @@ -76,6 +95,7 @@ class module_report_sqldownload extends module_report_sql implements module_repo INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (log_docs.record_id = record.record_id) INNER JOIN subdef ON ( log_docs.record_id = subdef.record_id)'; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); } else { $this->sql = ' SELECT ' . $name . ', SUM(1) AS nombre @@ -86,6 +106,7 @@ class module_report_sqldownload extends module_report_sql implements module_repo INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) INNER JOIN record ON (log_docs.record_id = record.record_id) INNER JOIN subdef ON (record.record_id = subdef.record_id)'; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); } $this->sql .= ' WHERE (subdef.name = log_docs.final) AND ' . $filter['sql'] . ' '; @@ -93,23 +114,27 @@ class module_report_sqldownload extends module_report_sql implements module_repo $this->sql .= $this->on == 'DOC' ? 'AND subdef.name = \'document\' ' : ''; $this->sql .= ') as tt'; $this->sql .= ' GROUP BY ' . $name . ' ' . ($name == 'record_id' && $this->on == 'DOC' ? ', final' : ''); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); } $stmt = $this->connbas->prepare($this->sql); $stmt->execute($this->params); $this->total_row = $stmt->rowCount(); $stmt->closeCursor(); +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n\n", __FILE__, __LINE__), FILE_APPEND); if (count($customFieldMap) > 0) { $this->sql .= $this->filter->getOrderFilter($customFieldMap) ? : ''; } else { - $this->sql .= $this->filter->getOrderFilter() ? : ''; + $this->sql .= $this->filter->getOrderFilter() ? : ''; } if ($this->enable_limit) { $this->sql .= $this->filter->getLimitFilter() ? : ''; } +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); + return $this; } diff --git a/lib/classes/module/report/sqlfilter.php b/lib/classes/module/report/sqlfilter.php index e813124034..20eae09b90 100644 --- a/lib/classes/module/report/sqlfilter.php +++ b/lib/classes/module/report/sqlfilter.php @@ -36,7 +36,7 @@ class module_report_sqlfilter { return array( 'sql' => ($dmin && $dmax ? ' log_date.date > :date_min AND log_date.date < :date_max ' : false) - , 'params' => ($dmin && $dmax ? array(':date_min' => $dmin, ':date_max' => $dmax) : array()) + , 'params' => ($dmin && $dmax ? array(':date_min' => $dmin, ':date_max' => $dmax) : array()) ); } @@ -66,40 +66,48 @@ class module_report_sqlfilter public function getReportFilter() { - $finalfilter = ''; - + $sql = ''; +/* $params = array(':log_site' => $this->app['phraseanet.configuration']['main']['key']); +*/ + $params = array(); if ($this->filter['date'] && $this->filter['date']['sql'] !== '') { - $finalfilter .= $this->filter['date']['sql'] . ' AND '; + $sql .= $this->filter['date']['sql'] . ' AND '; $params = array_merge($params, $this->filter['date']['params']); } if ($this->filter['user'] && $this->filter['user']['sql'] !== '') { - $finalfilter .= $this->filter['user']['sql'] . ' AND '; + $sql .= $this->filter['user']['sql'] . ' AND '; $params = array_merge($params, $this->filter['user']['params']); } if ($this->filter['collection'] && $this->filter['collection']['sql'] !== '') { - $finalfilter .= $this->filter['collection']['sql'] . ' AND '; + $sql .= $this->filter['collection']['sql'] . ' AND '; $params = array_merge($params, $this->filter['collection']['params']); } - $finalfilter .= ' log.site = :log_site'; +/* + $sql .= ' log.site = :log_site'; +*/ + $sql .= ' log.site=' . $this->conn->quote($this->app['phraseanet.configuration']['main']['key']); - return array('sql' => $finalfilter, 'params' => $params); + return array('sql' => $sql, 'params' => $params); } public function getGvSitFilter() { $params = array(); - +/* $sql = 'log.site = :log_site_gv_filter'; $params[':log_site_gv_filter'] = $this->app['phraseanet.configuration']['main']['key']; +*/ + $sql = "log.site=" . $this->conn->quote($this->app['phraseanet.configuration']['main']['key']); return array('sql' => $sql, 'params' => $params); } public function getUserIdFilter($id) { - return array('sql' => "log.usrid = :usr_id_filter", 'params' => array(':usr_id_filter' => $id)); +// return array('sql' => "log.usrid = :usr_id_filter", 'params' => array(':usr_id_filter' => $id)); + return array('sql' => "log.usrid=" . (int)$id, 'params' => array()); } public function getDateFilter() @@ -139,15 +147,30 @@ class module_report_sqlfilter private function dateFilter(module_report $report) { $this->filter['date'] = false; +/* if ($report->getDmin() && $report->getDmax()) { $this->filter['date'] = array( 'sql' => ' (log.date > :date_min_f AND log.date < :date_max_f) ' - , 'params' => array( + , 'params' => array( ':date_min_f' => $report->getDmin() - , ':date_max_f' => $report->getDmax() + , ':date_max_f' => $report->getDmax() ) ); } +*/ + $sql = ""; + if($report->getDmin()) { + $sql = "log.date>=" . $this->conn->quote($report->getDmin()); + } + if($report->getDmax()) { + if($sql != "") { + $sql .= " AND "; + } + $sql .= "log.date<=" . $this->conn->quote($report->getDmax()); + } + $this->filter['date'] = array( + 'sql' => $sql, 'params' => array() + ); return; } diff --git a/lib/classes/module/report/sqlquestion.php b/lib/classes/module/report/sqlquestion.php index c63b4282aa..f11cb721d8 100644 --- a/lib/classes/module/report/sqlquestion.php +++ b/lib/classes/module/report/sqlquestion.php @@ -25,11 +25,12 @@ class module_report_sqlquestion extends module_report_sql implements module_repo $this->params = array_merge(array(), $filter['params']); if ($this->groupby == false) { - $this->sql =" - SELECT DISTINCT(log.id), log_search.date ddate, log_search.search, log.usrid, log.user, log.pays, log.societe, log.activite, log.fonction + $this->sql =" SELECT log.id, log_search.date ddate, log_search.search, log.usrid, log.user, log.pays, log.societe, log.activite, log.fonction FROM log_search - INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_search.log_id) - INNER JOIN log_colls FORCE INDEX (couple) ON (log.id = log_colls.log_id) WHERE (" . $filter['sql'] .")"; + INNER JOIN log FORCE INDEX (date_site) ON (log.id = log_search.log_id) AND !ISNULL(usrid) + WHERE (" . $filter['sql'] .")"; + +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); $stmt = $this->connbas->prepare($this->sql); $stmt->execute($this->params); @@ -54,6 +55,8 @@ class module_report_sqlquestion extends module_report_sql implements module_repo GROUP BY " . $this->groupby ." ORDER BY nb DESC"; +// no_file_put_contents("/tmp/report.txt", sprintf("%s (%s)\n%s\n\n", __FILE__, __LINE__, $this->sql), FILE_APPEND); + $stmt = $this->connbas->prepare($this->sql); $stmt->execute($this->params); $this->total_row = $stmt->rowCount(); diff --git a/templates/web/report/form_date_and_base.html.twig b/templates/web/report/form_date_and_base.html.twig index aeb5cdede9..3d10bb1b9c 100644 --- a/templates/web/report/form_date_and_base.html.twig +++ b/templates/web/report/form_date_and_base.html.twig @@ -19,7 +19,7 @@
{% trans "report:: 2 - Bases" %}