diff --git a/lib/classes/Session/Logger.php b/lib/classes/Session/Logger.php
index d65353bbb3..b3495cffdf 100644
--- a/lib/classes/Session/Logger.php
+++ b/lib/classes/Session/Logger.php
@@ -111,12 +111,14 @@ class Session_Logger
}
}
+ $conn = $databox->get_connection();
+
$sql = "INSERT INTO log
- (id, date,sit_session, user, site, usrid,coll_list, nav,
+ (id, date,sit_session, user, site, usrid, nav,
version, os, res, ip, user_agent,appli, fonction,
societe, activite, pays)
VALUES
- (null,now() , :ses_id, :usr_login, :site_id, :usr_id, :coll_list
+ (null,now() , :ses_id, :usr_login, :site_id, :usr_id
, :browser, :browser_version, :platform, :screen, :ip
, :user_agent, :appli, :fonction, :company, :activity, :country)";
@@ -125,7 +127,6 @@ class Session_Logger
':usr_login' => $app['phraseanet.user'] ? $app['phraseanet.user']->get_login() : null,
':site_id' => $app['phraseanet.registry']->get('GV_sit'),
':usr_id' => $app['phraseanet.user'] ? $app['phraseanet.user']->get_id() : null,
- ':coll_list' => implode(',', $colls),
':browser' => $browser->getBrowser(),
':browser_version' => $browser->getExtendedVersion(),
':platform' => $browser->getPlatform(),
@@ -139,12 +140,24 @@ class Session_Logger
':country' => $app['phraseanet.user'] ? $app['phraseanet.user']->get_country() : null
);
- $stmt = $databox->get_connection()->prepare($sql);
+ $stmt = $conn->prepare($sql);
$stmt->execute($params);
-
- $log_id = $databox->get_connection()->lastInsertId();
+ $log_id = $conn->lastInsertId();
$stmt->closeCursor();
+ $sql = "INSERT INTO log_colls (id, log_id, coll_id) VALUES (null, :log_id, :coll_id)";
+ $stmt = $conn->prepare($sql);
+
+ foreach ($colls as $collId) {
+ $stmt->execute(array(
+ ':log_id' => $log_id,
+ ':coll_id' => $collId
+ ));
+ }
+
+ $stmt->closeCursor();
+ unset($stmt, $conn);
+
return new Session_Logger($app, $databox, $log_id);
}
diff --git a/lib/classes/module/report/activity.php b/lib/classes/module/report/activity.php
index f0a1d84d8d..1a5108242b 100644
--- a/lib/classes/module/report/activity.php
+++ b/lib/classes/module/report/activity.php
@@ -113,9 +113,10 @@ class module_report_activity extends module_report
$sql = "
SELECT DATE_FORMAT( log.date, '%k' ) AS heures, SUM(1) AS nb
- FROM log
- WHERE (" . $date_filter['sql'] . ")
- AND (" . $coll_filter['sql'] . ")
+ FROM (log)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ WHERE " . $date_filter['sql'] . "
+ AND " . $coll_filter['sql'] . "
AND " . $site_filter['sql'] . "
GROUP BY heures
ORDER BY heures ASC";
@@ -177,11 +178,13 @@ class module_report_activity extends module_report
$sql = "
SELECT DATE_FORMAT(log_search.date,'%Y-%m-%d %H:%i:%S') as date ,
log_search.search ,log_search.results
- FROM (log_search inner join log on log.id = log_search.log_id)
+ FROM (log_search)
+ INNER JOIN log ON (log.id = log_search.log_id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE log_search.date > " . $date_filter['sql'] . "
AND log.`" . $what . "` = :main_value
AND " . $site_filter['sql'] . "
- AND (" . $coll_filter['sql'] . ")
+ AND " . $coll_filter['sql'] . "
ORDER BY date";
$stmt = $conn->prepare($sql);
@@ -240,7 +243,9 @@ class module_report_activity extends module_report
SELECT TRIM(log_search.search) as search,
SUM(1) as nb,
ROUND(avg(results)) as nb_rep
- FROM (log_search inner join log on log_search.log_id = log.id)
+ FROM (log_search)
+ INNER JOIN log ON (log_search.log_id = log.id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE " . $date_filter['sql'] . "
AND log_search.search != 'all'
AND (" . $coll_filter['sql'] . ")";
@@ -309,8 +314,10 @@ class module_report_activity extends module_report
$sql = "
SELECT log_docs.record_id,
log_docs.date, log_docs.final as objets
- FROM (`log_docs` inner join log on log_docs.log_id = log.id
- inner join record on log_docs.record_id = record.record_id)
+ FROM (`log_docs`)
+ INNER JOIN log ON (log_docs.log_id = log.id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ INNER JOIN record ON (log_docs.record_id = record.record_id)
WHERE log_docs.action = 'download'
AND " . $date_filter['sql'] . "
AND " . $user_filter['sql'] . "
@@ -384,13 +391,11 @@ class module_report_activity extends module_report
log_docs.date
AS ddate,
final
- FROM (
- log_docs
- INNER JOIN record ON record.record_id = log_docs.record_id
- INNER JOIN log ON " . $site_filter['sql'] . "
- AND log.id = log_docs.log_id
- LEFT JOIN subdef AS s ON s.record_id = log_docs.record_id
- AND s.name = log_docs.final)
+ FROM (log_docs)
+ INNER JOIN record ON (record.record_id = log_docs.record_id)
+ INNER JOIN log ON (" . $site_filter['sql'] . " AND log.id = log_docs.log_id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ LEFT JOIN subdef AS s ON (s.record_id = log_docs.record_id AND s.name = log_docs.final)
WHERE " . $date_filter['sql'] . "
AND (log_docs.final != 'caption')
AND log_docs.action = 'download'
@@ -472,18 +477,20 @@ class module_report_activity extends module_report
$conn = $s->getConnBas();
$params = array();
+
$date_filter = $filter->getDateFilter();
$params = array_merge($params, $date_filter['params']);
+
$coll_filter = $filter->getCollectionFilter();
$params = array_merge($params, $coll_filter['params']);
$site_filter = $filter->getGvSitFilter();
$params = array_merge($params, $site_filter['params']);
-
$this->req = "
SELECT DISTINCT(log." . $on . ") as " . $on . ",
usrid,
SUM(1) as connexion
- FROM log
+ FROM (log)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE log.user != 'API'
AND " . $site_filter['sql'] . "
AND " . $date_filter['sql'] . "
@@ -581,14 +588,15 @@ class module_report_activity extends module_report
TRIM(" . $on . ") as " . $on . ",
final, sum(1) as nb,
sum(size) as poid
- FROM (log_docs as d
- INNER JOIN log ON " . $site_filter['sql'] . "
- AND log.id = d.log_id
- AND " . $date_filter['sql'] . "
- INNER JOIN record ON record.record_id = d.record_id
- LEFT JOIN subdef as s on (d.action = 'download' OR d.action = 'mail')
- AND s.record_id=d.record_id and s.name=d.final
- )
+ FROM (log_docs as d)
+ INNER JOIN log ON (" . $site_filter['sql'] . "
+ AND log.id = d.log_id
+ AND " . $date_filter['sql'] . ")
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ INNER JOIN record ON record.record_id = d.record_id
+ LEFT JOIN subdef as s on ((d.action = 'download' OR d.action = 'mail')
+ AND s.record_id=d.record_id and s.name=d.final
+ )
WHERE (" . $coll_filter['sql'] . ")
AND (" . $record_filter['sql'] . ")
GROUP BY " . $on . ", final, usrid
@@ -703,15 +711,14 @@ class module_report_activity extends module_report
$sql = "
SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.*
- FROM (log_docs as d
- INNER JOIN log ON (" . $site_filter['sql'] . "
- AND log.id = d.log_id
- AND " . $date_filter['sql'] . ")
- INNER JOIN record ON (record.record_id = d.record_id)
- LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document'))
- WHERE ((" . $coll_filter['sql'] . ")
- AND " . $record_filter['sql'] . "
- AND d.action='push')
+ FROM (log_docs as d)
+ INNER JOIN log ON (" . $site_filter['sql'] . "
+ AND log.id = d.log_id
+ AND " . $date_filter['sql'] . ")
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ INNER JOIN record ON (record.record_id = d.record_id)
+ LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document')
+ WHERE ((" . $coll_filter['sql'] . ") AND " . $record_filter['sql'] . " AND d.action='push')
";
$stmt = $conn->prepare($sql);
@@ -773,14 +780,15 @@ class module_report_activity extends module_report
$sql = "
SELECT log.usrid, user, final, sum(1) AS nb, sum(size) AS poid
- FROM (log_docs AS log_date
- INNER JOIN log ON log.site = :site_id
- AND log.id = log_date.log_id
- AND " . $datefilter['sql'] . ")
- LEFT JOIN subdef AS s ON log_date.action = 'download'
- AND s.record_id = log_date.record_id
- AND s.name = log_date.final
- AND (" . $collfilter['sql'] . ")
+ FROM (log_docs AS log_date)
+ INNER JOIN log ON (log.site = :site_id
+ AND log.id = log_date.log_id
+ AND " . $datefilter['sql'] . ")
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ LEFT JOIN subdef AS s ON (log_date.action = 'download'
+ AND s.record_id = log_date.record_id
+ AND s.name = log_date.final
+ AND (" . $collfilter['sql'] . "))
GROUP BY user, final
WITH rollup";
@@ -848,7 +856,8 @@ class module_report_activity extends module_report
$sql = "
SELECT log_date.id, HOUR(log_date.date) as heures
- FROM log as log_date
+ FROM (log as log_date)
+ INNER JOIN log_colls ON (log_date.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . "
AND (" . $collfilter['sql'] . ")
AND log_date.site = :site_id";
@@ -890,7 +899,7 @@ class module_report_activity extends module_report
SELECT DISTINCT (
DATE_FORMAT( log_date.date, '%Y-%m-%d' )
) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity
- FROM log as log_date
+ FROM log as log_date INNER JOIN log_colls ON (log_date.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . "
AND log_date.site = :site_id
AND (" . $collfilter['sql'] . ")
@@ -928,9 +937,9 @@ class module_report_activity extends module_report
$sql = "
SELECT log_date.usrid, log_date.user, sum(1) AS nb
- FROM `log_search`
- INNER JOIN log as log_date
- ON log_search.log_id = log_date.id
+ FROM (`log_search`)
+ INNER JOIN log as log_date ON (log_search.log_id = log_date.id)
+ INNER JOIN log_colls ON (log_date.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . "
AND log_date.site = :site_id
AND (" . $collfilter['sql'] . ")
@@ -969,9 +978,9 @@ class module_report_activity extends module_report
log_date.usrid,
log_date.user,
sum(1) AS nb
- FROM `log_search`
- INNER JOIN log as log_date
- ON log_search.log_id = log_date.id
+ FROM (`log_search`)
+ INNER JOIN log as log_date ON (log_search.log_id = log_date.id)
+ INNER JOIN log_colls ON (log_date.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . "
AND log_date.site = :site_id
AND (" . $collfilter['sql'] . ")
@@ -1007,9 +1016,9 @@ class module_report_activity extends module_report
$sql = "
SELECT referrer, COUNT(referrer) as nb_view
- FROM log_view
- INNER JOIN log as log_date
- ON log_view.log_id = log_date.id
+ FROM (log_view)
+ INNER JOIN log as log_date ON (log_view.log_id = log_date.id)
+ INNER JOIN log_colls ON (log_date.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . "
AND (" . $collfilter['sql'] . ")
GROUP BY referrer
@@ -1049,9 +1058,9 @@ class module_report_activity extends module_report
SELECT DISTINCT (
DATE_FORMAT( log_date.date, '%Y-%m-%d' )
) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity
- FROM log_docs as log_date
- INNER JOIN log
- ON log_date.log_id = log.id
+ FROM (log_docs as log_date)
+ INNER JOIN log ON (log_date.log_id = log.id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . " AND log_date.action = 'add'
AND (" . $collfilter['sql'] . ")
GROUP BY ddate
@@ -1083,9 +1092,9 @@ class module_report_activity extends module_report
SELECT DISTINCT (
DATE_FORMAT( log_date.date, '%Y-%m-%d' )
) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity
- FROM log_docs as log_date
- INNER JOIN log
- ON log_date.log_id = log.id
+ FROM (log_docs as log_date)
+ INNER JOIN log ON log_date.log_id = log.id
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . " AND log_date.action = 'edit'
AND (" . $collfilter['sql'] . ")
GROUP BY ddate
@@ -1116,8 +1125,9 @@ class module_report_activity extends module_report
$sql = "
SELECT log.usrid, log.user, sum( 1 ) AS nb
- FROM log_docs as log_date
- INNER JOIN log ON log_date.log_id = log.id
+ FROM (log_docs as log_date)
+ INNER JOIN log ON (log_date.log_id = log.id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . " AND log_date.action = 'add'
AND (" . $collfilter['sql'] . ")
GROUP BY log.usrid
diff --git a/lib/classes/module/report/connexion.php b/lib/classes/module/report/connexion.php
index 46a3ef5907..20502e70ed 100644
--- a/lib/classes/module/report/connexion.php
+++ b/lib/classes/module/report/connexion.php
@@ -29,7 +29,6 @@ class module_report_connexion extends module_report
, 'fonction' => 'log.fonction'
, 'site' => 'log.site'
, 'sit_session' => 'log.sit_session'
- , 'coll_list' => 'log.coll_list'
, 'appli' => 'log.appli'
, 'ip' => 'log.ip'
);
@@ -115,18 +114,7 @@ class module_report_connexion extends module_report
continue;
}
- if ($value == 'coll_list') {
- $coll = explode(",", $row[$value]);
- $this->result[$i][$value] = "";
- foreach ($coll as $id) {
- if ($this->result[$i][$value] != "") {
- $this->result[$i][$value].= " / ";
- $this->result[$i][$value] .= phrasea::bas_names(phrasea::baseFromColl($this->sbas_id, $id, $this->app), $this->app);
- } elseif ($this->result[$i][$value] == "") {
- $this->result[$i][$value] = phrasea::bas_names(phrasea::baseFromColl($this->sbas_id, $id, $this->app), $this->app);
- }
- }
- } elseif ($value == 'appli') {
+ if ($value == 'appli') {
$applis = false;
if (($applis = @unserialize($row[$value])) !== false) {
if (empty($applis)) {
@@ -164,7 +152,8 @@ class module_report_connexion extends module_report
$finalfilter .= 'log_date.site = :site_id';
$sql = "SELECT COUNT(usrid) as nb
- FROM log as log_date
+ FROM (log as log_date)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE " . $finalfilter;
$stmt = $conn->prepare($sql);
diff --git a/lib/classes/module/report/dashboard/group.php b/lib/classes/module/report/dashboard/group.php
index e4af08f937..fde86f1a99 100644
--- a/lib/classes/module/report/dashboard/group.php
+++ b/lib/classes/module/report/dashboard/group.php
@@ -55,7 +55,7 @@ class module_report_dashboard_group implements module_report_dashboard_component
}
}
} else {
- throw new Exception("cannot group on a none dashboard object");
+ continue;
}
}
}
diff --git a/lib/classes/module/report/download.php b/lib/classes/module/report/download.php
index 0dc748a326..6631d36428 100644
--- a/lib/classes/module/report/download.php
+++ b/lib/classes/module/report/download.php
@@ -187,10 +187,9 @@ class module_report_download extends module_report
$sql = '
SELECT SUM(1) AS nb
- FROM ( log
- INNER JOIN log_docs as log_date ON log.id = log_date.log_id
- INNER JOIN record on log_date.record_id = record.record_id
- )
+ FROM (log)
+ INNER JOIN log_docs as log_date ON (log.id = log_date.log_id)
+ INNER JOIN record ON (log_date.record_id = record.record_id)
WHERE (
' . $finalfilter . '
)
@@ -230,11 +229,10 @@ class module_report_download extends module_report
$sql = '
SELECT record.record_id as id, SUM(1) AS nb, subdef.name
- FROM ( log
- INNER JOIN log_docs as log_date ON log.id = log_date.log_id
- INNER JOIN record ON log_date.record_id = record.record_id
- INNER JOIN subdef ON subdef.record_id = record.record_id
- )
+ FROM ( log )
+ INNER JOIN log_docs as log_date (ON log.id = log_date.log_id)
+ INNER JOIN record ON (log_date.record_id = record.record_id)
+ INNER JOIN subdef ON (subdef.record_id = record.record_id)
WHERE (
' . $finalfilter . '
)
diff --git a/lib/classes/module/report/nav.php b/lib/classes/module/report/nav.php
index 0f4ed74689..1872faffd7 100644
--- a/lib/classes/module/report/nav.php
+++ b/lib/classes/module/report/nav.php
@@ -74,7 +74,8 @@ class module_report_nav extends module_report
$sql = '
SELECT
SUM(1) AS total
- FROM log
+ FROM (log)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE (' . $report_filter['sql'] . '
AND nav != TRIM(\'\')
)
diff --git a/lib/classes/module/report/question.php b/lib/classes/module/report/question.php
index 21a3d1977e..efca812b99 100644
--- a/lib/classes/module/report/question.php
+++ b/lib/classes/module/report/question.php
@@ -30,7 +30,6 @@ class module_report_question extends module_report
, 'fonction' => 'log.fonction'
, 'site' => 'log.site'
, 'sit_session' => 'log.sit_session'
- , 'coll_list' => 'log.coll_list'
, 'appli' => 'log.appli'
, 'ip' => 'log.ip'
);
diff --git a/lib/classes/module/report/sqlaction.php b/lib/classes/module/report/sqlaction.php
index b43c1090db..63737750d5 100644
--- a/lib/classes/module/report/sqlaction.php
+++ b/lib/classes/module/report/sqlaction.php
@@ -52,13 +52,13 @@ class module_report_sqlaction extends module_report_sql implements module_report
$this->sql =
"
- SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.*
- FROM (log_docs as d
- INNER JOIN log ON " . $site_filter['sql'] . "
- AND log.id = d.log_id
- INNER JOIN record ON record.record_id = d.record_id
- LEFT JOIN subdef as s ON s.record_id=d.record_id and s.name='document')
- WHERE";
+ SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.*
+ FROM (log_docs as d)
+ INNER JOIN log ON (" . $site_filter['sql'] . " AND log.id = d.log_id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ INNER JOIN record ON (record.record_id = d.record_id)
+ LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document')
+ WHERE";
$this->sql .= $report_filter['sql'] . " AND (d.action = :action)";
@@ -83,15 +83,15 @@ class module_report_sqlaction extends module_report_sql implements module_report
$params = array_merge($params, $site_filter['params'], $report_filter['params'], $record_filter['params']);
$this->sql = "
- SELECT TRIM(" . $this->getTransQuery($this->groupby) . ")
- as " . $this->groupby . ",
- SUM(1) as nombre
- FROM (log_docs as d
- INNER JOIN log ON " . $site_filter['sql'] . "
- AND log.id = d.log_id
- INNER JOIN record ON record.record_id = d.record_id
- LEFT JOIN subdef as s ON s.record_id=d.record_id and s.name='document')
- WHERE ";
+ SELECT TRIM(" . $this->getTransQuery($this->groupby) . ")
+ as " . $this->groupby . ",
+ SUM(1) as nombre
+ FROM (log_docs as d)
+ INNER JOIN log ON (" . $site_filter['sql'] . " AND log.id = d.log_id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ INNER JOIN record ON (record.record_id = d.record_id)
+ LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document')
+ WHERE ";
$this->sql .= $report_filter['sql'] . " AND (d.action = :action)";
@@ -122,12 +122,13 @@ class module_report_sqlaction extends module_report_sql implements module_report
$sql = "
SELECT DISTINCT(" . $this->getTransQuery($field) . ") as val
- FROM (log_docs as d
- INNER JOIN log ON (" . $site_filter['sql'] . "
- AND log.id = d.log_id
- AND " . $date_filter['sql'] . ")
- INNER JOIN record ON (record.record_id = d.record_id)
- LEFT JOIN subdef as s ON (s.record_id=d.record_id AND s.name='document'))
+ FROM (log_docs as d)
+ INNER JOIN log ON (" . $site_filter['sql'] . "
+ AND log.id = d.log_id
+ AND " . $date_filter['sql'] . ")
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ INNER JOIN record ON (record.record_id = d.record_id)
+ LEFT JOIN subdef as s ON (s.record_id=d.record_id AND s.name='document')
WHERE ";
if ($this->filter->getReportFilter()) {
diff --git a/lib/classes/module/report/sqlconnexion.php b/lib/classes/module/report/sqlconnexion.php
index 601755ba4c..2432156f10 100644
--- a/lib/classes/module/report/sqlconnexion.php
+++ b/lib/classes/module/report/sqlconnexion.php
@@ -43,10 +43,10 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep
log.fonction,
site,
sit_session,
- coll_list,
appli,
ip
- FROM log";
+ FROM log
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)";
$this->sql .= " WHERE " . $report_filter['sql'];
$this->sql .= $this->filter->getOrderFilter() ? : '';
@@ -59,9 +59,10 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep
$this->sql .= $this->filter->getLimitFilter() ? : '';
} else {
$this->sql = "
- SELECT TRIM(" . $this->getTransQuery($this->groupby) . ")
- as " . $this->groupby . ", SUM(1) as nb
- FROM log ";
+ SELECT TRIM(" . $this->getTransQuery($this->groupby) . ")
+ as " . $this->groupby . ", SUM(1) as nb
+ FROM (log)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)";
if ($report_filter['sql'])
$this->sql .= " WHERE " . $report_filter['sql'];
@@ -83,8 +84,10 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep
$report_filter = $this->filter->getReportFilter();
$params = $report_filter['params'];
- $sql = 'SELECT DISTINCT(' . $this->getTransQuery($field) . ') as val
- FROM log ';
+ $sql = '
+ SELECT DISTINCT(' . $this->getTransQuery($field) . ') as val
+ FROM (log)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)';
if ($report_filter['sql'])
$sql .= ' WHERE ' . $report_filter['sql'];
diff --git a/lib/classes/module/report/sqldownload.php b/lib/classes/module/report/sqldownload.php
index bf0c1d56a2..184127e912 100644
--- a/lib/classes/module/report/sqldownload.php
+++ b/lib/classes/module/report/sqldownload.php
@@ -52,10 +52,10 @@ class module_report_sqldownload extends module_report_sql implements module_repo
log_docs.record_id,
log_docs.final,
log_docs.comment
- FROM (log
- INNER JOIN log_docs ON log.id = log_docs.log_id
- INNER JOIN record ON log_docs.record_id = record.record_id
- )
+ FROM (log)
+ INNER JOIN log_docs ON (log.id = log_docs.log_id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ INNER JOIN record ON (log_docs.record_id = record.record_id)
WHERE ";
$this->sql .= $report_filters['sql'] ? : '';
@@ -80,49 +80,44 @@ class module_report_sqldownload extends module_report_sql implements module_repo
if ($name == 'record_id' && $this->on == 'DOC') {
$this->sql = '
SELECT
- TRIM( ' . $field . ' ) AS ' . $name . ',
- SUM(1) AS telechargement,
- record.coll_id,
- log_docs.final,
- log_docs.comment,
- subdef.size,
- subdef.file,
- subdef.mime
- FROM ( log
- INNER JOIN log_docs ON log.id = log_docs.log_id
- INNER JOIN record ON log_docs.record_id = record.record_id
- INNER JOIN subdef ON (log_docs.record_id = subdef.record_id
- AND subdef.name = log_docs.final
- )
- )
+ TRIM( ' . $field . ' ) AS ' . $name . ',
+ SUM(1) AS telechargement,
+ record.coll_id,
+ log_docs.final,
+ log_docs.comment,
+ subdef.size,
+ subdef.file,
+ subdef.mime
+ FROM (log)
+ INNER JOIN log_docs ON (log.id = log_docs.log_id)
+ INNER JOIN log_colls 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 AND subdef.name = log_docs.final)
WHERE
';
} elseif ($this->on == 'DOC') {
$this->sql = '
- SELECT
- TRIM(' . $field . ') AS ' . $name . ',
- SUM(1) AS telechargement
- FROM ( log
- INNER JOIN log_docs ON log.id = log_docs.log_id
- INNER JOIN record ON log_docs.record_id = record.record_id
- INNER JOIN subdef ON ( log_docs.record_id = subdef.record_id
- AND subdef.name = log_docs.final
- )
- )
- WHERE
- ';
+ SELECT
+ TRIM(' . $field . ') AS ' . $name . ',
+ SUM(1) AS telechargement
+ FROM ( log )
+ INNER JOIN log_docs ON (log.id = log_docs.log_id)
+ INNER JOIN log_colls 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 AND subdef.name = log_docs.final)
+ WHERE';
} else {
$this->sql = '
- SELECT
- TRIM( ' . $this->getTransQuery($this->groupby) . ') AS ' . $name . ',
- SUM(1) AS nombre
- FROM ( log
- INNER JOIN log_docs ON log.id = log_docs.log_id
- INNER JOIN record ON log_docs.record_id = record.record_id
- INNER JOIN subdef ON (record.record_id = subdef.record_id AND subdef.name = "document")
- )
- WHERE ';
+ SELECT
+ TRIM( ' . $this->getTransQuery($this->groupby) . ') AS ' . $name . ',
+ SUM(1) AS nombre
+ FROM ( log )
+ INNER JOIN log_docs ON (log.id = log_docs.log_id)
+ INNER JOIN log_colls 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 AND subdef.name = "document")
+ WHERE ';
}
$this->sql .= $report_filters['sql'];
@@ -159,10 +154,11 @@ class module_report_sqldownload extends module_report_sql implements module_repo
$sql = '
SELECT DISTINCT( ' . $this->getTransQuery($field) . ' ) AS val
- FROM (log
- INNER JOIN log_docs ON log.id = log_docs.log_id
- INNER JOIN record ON log_docs.record_id = record.record_id
- INNER JOIN subdef ON log_docs.record_id = subdef.record_id)
+ FROM (log)
+ INNER JOIN log_docs ON (log.id = log_docs.log_id)
+ INNER JOIN log_colls 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)
WHERE ';
$sql .= $report_filters['sql'];
diff --git a/lib/classes/module/report/sqlfilter.php b/lib/classes/module/report/sqlfilter.php
index c95265acea..14d54e056d 100644
--- a/lib/classes/module/report/sqlfilter.php
+++ b/lib/classes/module/report/sqlfilter.php
@@ -47,10 +47,12 @@ class module_report_sqlfilter
{
$ret = array('sql' => '', 'params' => array());
$coll_filter = array();
- foreach (explode(',', $list_coll_id) as $val) {
- $coll_filter [] = " position('," . phrasea::collFromBas($app, $val) . ",' in concat(',' ,coll_list, ',')) > 0 ";
+ foreach (array_filter(explode(',', $list_coll_id)) as $val) {
+ if( false !== $val = phrasea::collFromBas($app, $val)) {
+ $coll_filter[] = 'log_colls.coll_id = '.phrasea::collFromBas($app, $val);
+ }
}
- $ret['sql'] = implode(' OR ', $coll_filter);
+ $ret['sql'] = ' (' . implode(' OR ', array_unique($coll_filter)) . ') ';
return $ret;
}
@@ -75,7 +77,7 @@ class module_report_sqlfilter
$params = array_merge($params, $this->filter['user']['params']);
}
if ($this->filter['collection']) {
- $finalfilter .= '(' . $this->filter['collection']['sql'] . ') AND ';
+ $finalfilter .= $this->filter['collection']['sql'] . ' AND ';
$params = array_merge($params, $this->filter['collection']['params']);
}
$finalfilter .= ' log.site = :log_site';
@@ -86,7 +88,7 @@ class module_report_sqlfilter
public function getGvSitFilter()
{
$params = array();
- $sql = '';
+ $sql = '1';
if ($this->app['phraseanet.registry']->is_set('GV_sit')) {
$sql = 'log.site = :log_site_gv_filter';
@@ -190,12 +192,16 @@ class module_report_sqlfilter
return;
}
- $tab = explode(",", $report->getListCollId());
+ $tab = array_filter(explode(",", $report->getListCollId()));
+
if (count($tab) > 0) {
foreach ($tab as $val) {
- $coll_filter[] = " position('," . phrasea::collFromBas($this->app, $val) . ",' in concat(',' ,coll_list, ',')) > 0 ";
+ if( false !== $val = phrasea::collFromBas($this->app, $val)) {
+ $coll_filter[] = 'log_colls.coll_id = '.phrasea::collFromBas($this->app, $val);
+ }
}
- $this->filter['collection'] = array('sql' => implode(' OR ', $coll_filter), 'params' => array());
+
+ $this->filter['collection'] = array('sql' => ' (' . implode(' OR ', array_unique($coll_filter)) . ') ', 'params' => array());
}
return;
diff --git a/lib/classes/module/report/sqlquestion.php b/lib/classes/module/report/sqlquestion.php
index 6b44c70ecc..f6fdc1c05b 100644
--- a/lib/classes/module/report/sqlquestion.php
+++ b/lib/classes/module/report/sqlquestion.php
@@ -33,21 +33,19 @@ class module_report_sqlquestion extends module_report_sql implements module_repo
$this->params = $params;
if ($this->groupby == false) {
- $this->sql =
- "
- SELECT
- log_search.date ddate,
- search,
- usrid,
- user,
- pays,
- societe,
- activite,
- fonction
- FROM `log_search`
- INNER JOIN log
- ON log.id = log_search.log_id
- ";
+ $this->sql ="
+ SELECT
+ log_search.date ddate,
+ search,
+ usrid,
+ user,
+ pays,
+ societe,
+ activite,
+ fonction
+ FROM (`log_search`)
+ INNER JOIN log ON (log.id = log_search.log_id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)";
$this->sql .= " WHERE " . $report_filter['sql'];
@@ -61,13 +59,13 @@ class module_report_sqlquestion extends module_report_sql implements module_repo
$this->sql .= $this->filter->getLimitFilter() ? : '';
} else {
$this->sql = "
- SELECT
- TRIM(" . $this->getTransQuery($this->groupby) . ") as " . $this->groupby . ",
- SUM(1) as nb
- FROM `log_search`
- INNER JOIN log
- ON log.id = log_search.log_id
- ";
+ SELECT
+ TRIM(" . $this->getTransQuery($this->groupby) . ") as " . $this->groupby . ",
+ SUM(1) as nb
+ FROM (`log_search`)
+ INNER JOIN log ON (log.id = log_search.log_id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
+ ";
$this->sql .= " WHERE " . $report_filter['sql'];
$this->sql .= " GROUP BY " . $this->groupby;
@@ -90,9 +88,9 @@ class module_report_sqlquestion extends module_report_sql implements module_repo
$sql = "
SELECT DISTINCT(" . $this->getTransQuery($field) . ") as val
- FROM `log_search`
- INNER JOIN log
- ON log.id = log_search.log_id
+ FROM (`log_search`)
+ INNER JOIN log ON (log.id = log_search.log_id)
+ INNER JOIN log_colls ON (log.id = log_colls.log_id)
";
if ($report_filter['sql'])
diff --git a/lib/classes/patch/380a3.class.php b/lib/classes/patch/380a3.class.php
new file mode 100644
index 0000000000..60bc739d18
--- /dev/null
+++ b/lib/classes/patch/380a3.class.php
@@ -0,0 +1,120 @@
+release;
+ }
+
+ public function require_all_upgrades()
+ {
+ return true;
+ }
+
+ /**
+ *
+ * @return Array
+ */
+ public function concern()
+ {
+ return $this->concern;
+ }
+
+ public function apply(base $databox, Application $app)
+ {
+ $conn = $databox->get_connection();
+ // Count total rows from `log` table to process
+ $stmt = $conn->prepare('
+ SELECT COUNT(l.id) as nb_row
+ FROM log l
+ LEFT JOIN log_colls lc ON (lc.log_id = l.id)
+ WHERE (lc.log_id IS NULL)');
+ $stmt->execute();
+ $row = $stmt->fetch(\PDO::FETCH_ASSOC);
+ $stmt->closeCursor();
+ unset($stmt);
+
+ $remainingRowsToProcess = (int) $row['nb_row'];
+ $failedRows = array();
+
+ do {
+ // Fetch all missing rows from `log_colls` table
+ $stmt = $conn->prepare('SELECT l.id, l.coll_list, lc.* FROM log l LEFT JOIN log_colls lc ON (lc.log_id = l.id) WHERE (lc.log_id IS NULL)');
+ $stmt->execute();
+ $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
+ $stmt->closeCursor();
+ unset($stmt);
+
+ $sql = 'INSERT INTO log_colls (log_id, coll_id) VALUES (:log_id, :coll_id)';
+ $stmt = $conn->prepare($sql);
+
+ foreach ($rs as $row) {
+ // Clean fetched coll ids
+ $collIds = array_filter(array_map(function($collId) {
+ return (int) $collId;
+ }, explode(',', (string) $row['coll_list'])), function($collId) {
+ return $collId > 0;
+ });
+ // Start mysql transaction to avoid case where only a part of coll ids are inserted in `log_colls`
+ $conn->beginTransaction();
+ try {
+ // For each collection id insert a new row
+ foreach ($collIds as $collId) {
+ $stmt->execute(array(
+ ':log_id' => (int) $row['id'],
+ ':coll_id' => $collId
+ ));
+ $stmt->closeCursor();
+ }
+ } catch (\Exception $e) {
+ // Rollback if something failed
+ $failedRows[] = $row['id'];
+ $conn->rollBack();
+ // Go to next row
+ continue;
+ }
+ // Once all collection ids inserted commit
+ $conn->commit();
+ $remainingRowsToProcess--;
+ }
+ } while (count($failedRows) !== $remainingRowsToProcess);
+
+ unset($conn, $stmt);
+
+ return count($failedRows) === 0;
+ }
+}
diff --git a/lib/conf.d/bases_structure.xml b/lib/conf.d/bases_structure.xml
index a1f8102ec2..92e5c7e58b 100644
--- a/lib/conf.d/bases_structure.xml
+++ b/lib/conf.d/bases_structure.xml
@@ -5123,16 +5123,6 @@
-
- coll_list
- text
-
-
-
-
-
-
-
nav
varchar(64)
@@ -5272,6 +5262,46 @@
InnoDB
+
+
+
+
+ id
+ int(11) unsigned
+
+ auto_increment
+
+
+
+
+ log_id
+ int(11) unsigned
+
+
+
+
+
+
+ coll_id
+ int(11) unsigned
+
+
+
+
+
+
+
+
+ PRIMARY
+ PRIMARY
+
+ id
+
+
+
+ InnoDB
+
+
diff --git a/tests/classes/report/reportTest.php b/tests/classes/report/reportTest.php
index 2e55173fd6..cd35cf7eea 100644
--- a/tests/classes/report/reportTest.php
+++ b/tests/classes/report/reportTest.php
@@ -168,7 +168,6 @@ class reportTest extends PhraseanetPHPUnitAuthenticatedAbstract
log.fonction,
site,
sit_session,
- coll_list,
appli,
ip
FROM log ');