Modify collections filter & add JOIN on log_colls table

Create entries in log_colls table

Fix SQL issue

Fix SQL issues

Update version

Add patch

Remove debug output

Fix CS

Fic CS

Add table schema

Fix Cs

Update patch

Update patch

Update patch

Update patch

Update patch

delete all coll_list call

Fix logger issue

Fix log_colls table structure definition

Rename patch

Fix SQL Issues

Fix patch

Fix test

Fix tests
This commit is contained in:
Nicolas Le Goff
2012-11-07 13:01:09 +01:00
parent 6c1f760813
commit 07300af3f4
15 changed files with 373 additions and 210 deletions

View File

@@ -111,12 +111,14 @@ class Session_Logger
} }
} }
$conn = $databox->get_connection();
$sql = "INSERT INTO log $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, version, os, res, ip, user_agent,appli, fonction,
societe, activite, pays) societe, activite, pays)
VALUES 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 , :browser, :browser_version, :platform, :screen, :ip
, :user_agent, :appli, :fonction, :company, :activity, :country)"; , :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, ':usr_login' => $app['phraseanet.user'] ? $app['phraseanet.user']->get_login() : null,
':site_id' => $app['phraseanet.registry']->get('GV_sit'), ':site_id' => $app['phraseanet.registry']->get('GV_sit'),
':usr_id' => $app['phraseanet.user'] ? $app['phraseanet.user']->get_id() : null, ':usr_id' => $app['phraseanet.user'] ? $app['phraseanet.user']->get_id() : null,
':coll_list' => implode(',', $colls),
':browser' => $browser->getBrowser(), ':browser' => $browser->getBrowser(),
':browser_version' => $browser->getExtendedVersion(), ':browser_version' => $browser->getExtendedVersion(),
':platform' => $browser->getPlatform(), ':platform' => $browser->getPlatform(),
@@ -139,12 +140,24 @@ class Session_Logger
':country' => $app['phraseanet.user'] ? $app['phraseanet.user']->get_country() : null ':country' => $app['phraseanet.user'] ? $app['phraseanet.user']->get_country() : null
); );
$stmt = $databox->get_connection()->prepare($sql); $stmt = $conn->prepare($sql);
$stmt->execute($params); $stmt->execute($params);
$log_id = $conn->lastInsertId();
$log_id = $databox->get_connection()->lastInsertId();
$stmt->closeCursor(); $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); return new Session_Logger($app, $databox, $log_id);
} }

View File

@@ -113,9 +113,10 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT DATE_FORMAT( log.date, '%k' ) AS heures, SUM(1) AS nb SELECT DATE_FORMAT( log.date, '%k' ) AS heures, SUM(1) AS nb
FROM log FROM (log)
WHERE (" . $date_filter['sql'] . ") INNER JOIN log_colls ON (log.id = log_colls.log_id)
AND (" . $coll_filter['sql'] . ") WHERE " . $date_filter['sql'] . "
AND " . $coll_filter['sql'] . "
AND " . $site_filter['sql'] . " AND " . $site_filter['sql'] . "
GROUP BY heures GROUP BY heures
ORDER BY heures ASC"; ORDER BY heures ASC";
@@ -177,11 +178,13 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT DATE_FORMAT(log_search.date,'%Y-%m-%d %H:%i:%S') as date , SELECT DATE_FORMAT(log_search.date,'%Y-%m-%d %H:%i:%S') as date ,
log_search.search ,log_search.results 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'] . " WHERE log_search.date > " . $date_filter['sql'] . "
AND log.`" . $what . "` = :main_value AND log.`" . $what . "` = :main_value
AND " . $site_filter['sql'] . " AND " . $site_filter['sql'] . "
AND (" . $coll_filter['sql'] . ") AND " . $coll_filter['sql'] . "
ORDER BY date"; ORDER BY date";
$stmt = $conn->prepare($sql); $stmt = $conn->prepare($sql);
@@ -240,7 +243,9 @@ class module_report_activity extends module_report
SELECT TRIM(log_search.search) as search, SELECT TRIM(log_search.search) as search,
SUM(1) as nb, SUM(1) as nb,
ROUND(avg(results)) as nb_rep 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'] . " WHERE " . $date_filter['sql'] . "
AND log_search.search != 'all' AND log_search.search != 'all'
AND (" . $coll_filter['sql'] . ")"; AND (" . $coll_filter['sql'] . ")";
@@ -309,8 +314,10 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT log_docs.record_id, SELECT log_docs.record_id,
log_docs.date, log_docs.final as objets log_docs.date, log_docs.final as objets
FROM (`log_docs` inner join log on log_docs.log_id = log.id FROM (`log_docs`)
inner join record on log_docs.record_id = record.record_id) 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' WHERE log_docs.action = 'download'
AND " . $date_filter['sql'] . " AND " . $date_filter['sql'] . "
AND " . $user_filter['sql'] . " AND " . $user_filter['sql'] . "
@@ -384,13 +391,11 @@ class module_report_activity extends module_report
log_docs.date log_docs.date
AS ddate, AS ddate,
final final
FROM ( FROM (log_docs)
log_docs INNER JOIN record ON (record.record_id = log_docs.record_id)
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 ON " . $site_filter['sql'] . " INNER JOIN log_colls ON (log.id = log_colls.log_id)
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)
LEFT JOIN subdef AS s ON s.record_id = log_docs.record_id
AND s.name = log_docs.final)
WHERE " . $date_filter['sql'] . " WHERE " . $date_filter['sql'] . "
AND (log_docs.final != 'caption') AND (log_docs.final != 'caption')
AND log_docs.action = 'download' AND log_docs.action = 'download'
@@ -472,18 +477,20 @@ class module_report_activity extends module_report
$conn = $s->getConnBas(); $conn = $s->getConnBas();
$params = array(); $params = array();
$date_filter = $filter->getDateFilter(); $date_filter = $filter->getDateFilter();
$params = array_merge($params, $date_filter['params']); $params = array_merge($params, $date_filter['params']);
$coll_filter = $filter->getCollectionFilter(); $coll_filter = $filter->getCollectionFilter();
$params = array_merge($params, $coll_filter['params']); $params = array_merge($params, $coll_filter['params']);
$site_filter = $filter->getGvSitFilter(); $site_filter = $filter->getGvSitFilter();
$params = array_merge($params, $site_filter['params']); $params = array_merge($params, $site_filter['params']);
$this->req = " $this->req = "
SELECT DISTINCT(log." . $on . ") as " . $on . ", SELECT DISTINCT(log." . $on . ") as " . $on . ",
usrid, usrid,
SUM(1) as connexion SUM(1) as connexion
FROM log FROM (log)
INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE log.user != 'API' WHERE log.user != 'API'
AND " . $site_filter['sql'] . " AND " . $site_filter['sql'] . "
AND " . $date_filter['sql'] . " AND " . $date_filter['sql'] . "
@@ -581,14 +588,15 @@ class module_report_activity extends module_report
TRIM(" . $on . ") as " . $on . ", TRIM(" . $on . ") as " . $on . ",
final, sum(1) as nb, final, sum(1) as nb,
sum(size) as poid sum(size) as poid
FROM (log_docs as d FROM (log_docs as d)
INNER JOIN log ON " . $site_filter['sql'] . " INNER JOIN log ON (" . $site_filter['sql'] . "
AND log.id = d.log_id AND log.id = d.log_id
AND " . $date_filter['sql'] . " AND " . $date_filter['sql'] . ")
INNER JOIN record ON record.record_id = d.record_id INNER JOIN log_colls ON (log.id = log_colls.log_id)
LEFT JOIN subdef as s on (d.action = 'download' OR d.action = 'mail') INNER JOIN record ON record.record_id = d.record_id
AND s.record_id=d.record_id and s.name=d.final 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'] . ") WHERE (" . $coll_filter['sql'] . ")
AND (" . $record_filter['sql'] . ") AND (" . $record_filter['sql'] . ")
GROUP BY " . $on . ", final, usrid GROUP BY " . $on . ", final, usrid
@@ -703,15 +711,14 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.* SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.*
FROM (log_docs as d FROM (log_docs as d)
INNER JOIN log ON (" . $site_filter['sql'] . " INNER JOIN log ON (" . $site_filter['sql'] . "
AND log.id = d.log_id AND log.id = d.log_id
AND " . $date_filter['sql'] . ") AND " . $date_filter['sql'] . ")
INNER JOIN record ON (record.record_id = d.record_id) INNER JOIN log_colls ON (log.id = log_colls.log_id)
LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document')) INNER JOIN record ON (record.record_id = d.record_id)
WHERE ((" . $coll_filter['sql'] . ") LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document')
AND " . $record_filter['sql'] . " WHERE ((" . $coll_filter['sql'] . ") AND " . $record_filter['sql'] . " AND d.action='push')
AND d.action='push')
"; ";
$stmt = $conn->prepare($sql); $stmt = $conn->prepare($sql);
@@ -773,14 +780,15 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT log.usrid, user, final, sum(1) AS nb, sum(size) AS poid SELECT log.usrid, user, final, sum(1) AS nb, sum(size) AS poid
FROM (log_docs AS log_date FROM (log_docs AS log_date)
INNER JOIN log ON log.site = :site_id INNER JOIN log ON (log.site = :site_id
AND log.id = log_date.log_id AND log.id = log_date.log_id
AND " . $datefilter['sql'] . ") AND " . $datefilter['sql'] . ")
LEFT JOIN subdef AS s ON log_date.action = 'download' INNER JOIN log_colls ON (log.id = log_colls.log_id)
AND s.record_id = log_date.record_id LEFT JOIN subdef AS s ON (log_date.action = 'download'
AND s.name = log_date.final AND s.record_id = log_date.record_id
AND (" . $collfilter['sql'] . ") AND s.name = log_date.final
AND (" . $collfilter['sql'] . "))
GROUP BY user, final GROUP BY user, final
WITH rollup"; WITH rollup";
@@ -848,7 +856,8 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT log_date.id, HOUR(log_date.date) as heures 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'] . " WHERE " . $datefilter['sql'] . "
AND (" . $collfilter['sql'] . ") AND (" . $collfilter['sql'] . ")
AND log_date.site = :site_id"; AND log_date.site = :site_id";
@@ -890,7 +899,7 @@ class module_report_activity extends module_report
SELECT DISTINCT ( SELECT DISTINCT (
DATE_FORMAT( log_date.date, '%Y-%m-%d' ) DATE_FORMAT( log_date.date, '%Y-%m-%d' )
) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity ) 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'] . " WHERE " . $datefilter['sql'] . "
AND log_date.site = :site_id AND log_date.site = :site_id
AND (" . $collfilter['sql'] . ") AND (" . $collfilter['sql'] . ")
@@ -928,9 +937,9 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT log_date.usrid, log_date.user, sum(1) AS nb SELECT log_date.usrid, log_date.user, sum(1) AS nb
FROM `log_search` FROM (`log_search`)
INNER JOIN log as log_date INNER JOIN log as log_date ON (log_search.log_id = log_date.id)
ON log_search.log_id = log_date.id INNER JOIN log_colls ON (log_date.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . " WHERE " . $datefilter['sql'] . "
AND log_date.site = :site_id AND log_date.site = :site_id
AND (" . $collfilter['sql'] . ") AND (" . $collfilter['sql'] . ")
@@ -969,9 +978,9 @@ class module_report_activity extends module_report
log_date.usrid, log_date.usrid,
log_date.user, log_date.user,
sum(1) AS nb sum(1) AS nb
FROM `log_search` FROM (`log_search`)
INNER JOIN log as log_date INNER JOIN log as log_date ON (log_search.log_id = log_date.id)
ON log_search.log_id = log_date.id INNER JOIN log_colls ON (log_date.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . " WHERE " . $datefilter['sql'] . "
AND log_date.site = :site_id AND log_date.site = :site_id
AND (" . $collfilter['sql'] . ") AND (" . $collfilter['sql'] . ")
@@ -1007,9 +1016,9 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT referrer, COUNT(referrer) as nb_view SELECT referrer, COUNT(referrer) as nb_view
FROM log_view FROM (log_view)
INNER JOIN log as log_date INNER JOIN log as log_date ON (log_view.log_id = log_date.id)
ON log_view.log_id = log_date.id INNER JOIN log_colls ON (log_date.id = log_colls.log_id)
WHERE " . $datefilter['sql'] . " WHERE " . $datefilter['sql'] . "
AND (" . $collfilter['sql'] . ") AND (" . $collfilter['sql'] . ")
GROUP BY referrer GROUP BY referrer
@@ -1049,9 +1058,9 @@ class module_report_activity extends module_report
SELECT DISTINCT ( SELECT DISTINCT (
DATE_FORMAT( log_date.date, '%Y-%m-%d' ) DATE_FORMAT( log_date.date, '%Y-%m-%d' )
) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity ) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity
FROM log_docs as log_date FROM (log_docs as log_date)
INNER JOIN log INNER JOIN log ON (log_date.log_id = log.id)
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' WHERE " . $datefilter['sql'] . " AND log_date.action = 'add'
AND (" . $collfilter['sql'] . ") AND (" . $collfilter['sql'] . ")
GROUP BY ddate GROUP BY ddate
@@ -1083,9 +1092,9 @@ class module_report_activity extends module_report
SELECT DISTINCT ( SELECT DISTINCT (
DATE_FORMAT( log_date.date, '%Y-%m-%d' ) DATE_FORMAT( log_date.date, '%Y-%m-%d' )
) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity ) AS ddate, COUNT( DATE_FORMAT( log_date.date, '%d' ) ) AS activity
FROM log_docs as log_date FROM (log_docs as log_date)
INNER JOIN log INNER JOIN log ON log_date.log_id = log.id
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' WHERE " . $datefilter['sql'] . " AND log_date.action = 'edit'
AND (" . $collfilter['sql'] . ") AND (" . $collfilter['sql'] . ")
GROUP BY ddate GROUP BY ddate
@@ -1116,8 +1125,9 @@ class module_report_activity extends module_report
$sql = " $sql = "
SELECT log.usrid, log.user, sum( 1 ) AS nb SELECT log.usrid, log.user, sum( 1 ) AS nb
FROM log_docs as log_date FROM (log_docs as log_date)
INNER JOIN log ON log_date.log_id = log.id 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' WHERE " . $datefilter['sql'] . " AND log_date.action = 'add'
AND (" . $collfilter['sql'] . ") AND (" . $collfilter['sql'] . ")
GROUP BY log.usrid GROUP BY log.usrid

View File

@@ -29,7 +29,6 @@ class module_report_connexion extends module_report
, 'fonction' => 'log.fonction' , 'fonction' => 'log.fonction'
, 'site' => 'log.site' , 'site' => 'log.site'
, 'sit_session' => 'log.sit_session' , 'sit_session' => 'log.sit_session'
, 'coll_list' => 'log.coll_list'
, 'appli' => 'log.appli' , 'appli' => 'log.appli'
, 'ip' => 'log.ip' , 'ip' => 'log.ip'
); );
@@ -115,18 +114,7 @@ class module_report_connexion extends module_report
continue; continue;
} }
if ($value == 'coll_list') { if ($value == 'appli') {
$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') {
$applis = false; $applis = false;
if (($applis = @unserialize($row[$value])) !== false) { if (($applis = @unserialize($row[$value])) !== false) {
if (empty($applis)) { if (empty($applis)) {
@@ -164,7 +152,8 @@ class module_report_connexion extends module_report
$finalfilter .= 'log_date.site = :site_id'; $finalfilter .= 'log_date.site = :site_id';
$sql = "SELECT COUNT(usrid) as nb $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; WHERE " . $finalfilter;
$stmt = $conn->prepare($sql); $stmt = $conn->prepare($sql);

View File

@@ -55,7 +55,7 @@ class module_report_dashboard_group implements module_report_dashboard_component
} }
} }
} else { } else {
throw new Exception("cannot group on a none dashboard object"); continue;
} }
} }
} }

View File

@@ -187,10 +187,9 @@ class module_report_download extends module_report
$sql = ' $sql = '
SELECT SUM(1) AS nb SELECT SUM(1) AS nb
FROM ( log FROM (log)
INNER JOIN log_docs as log_date ON log.id = log_date.log_id 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 record ON (log_date.record_id = record.record_id)
)
WHERE ( WHERE (
' . $finalfilter . ' ' . $finalfilter . '
) )
@@ -230,11 +229,10 @@ class module_report_download extends module_report
$sql = ' $sql = '
SELECT record.record_id as id, SUM(1) AS nb, subdef.name SELECT record.record_id as id, SUM(1) AS nb, subdef.name
FROM ( log FROM ( log )
INNER JOIN log_docs as log_date ON log.id = log_date.log_id 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 record ON (log_date.record_id = record.record_id)
INNER JOIN subdef ON subdef.record_id = record.record_id INNER JOIN subdef ON (subdef.record_id = record.record_id)
)
WHERE ( WHERE (
' . $finalfilter . ' ' . $finalfilter . '
) )

View File

@@ -74,7 +74,8 @@ class module_report_nav extends module_report
$sql = ' $sql = '
SELECT SELECT
SUM(1) AS total SUM(1) AS total
FROM log FROM (log)
INNER JOIN log_colls ON (log.id = log_colls.log_id)
WHERE (' . $report_filter['sql'] . ' WHERE (' . $report_filter['sql'] . '
AND nav != TRIM(\'\') AND nav != TRIM(\'\')
) )

View File

@@ -30,7 +30,6 @@ class module_report_question extends module_report
, 'fonction' => 'log.fonction' , 'fonction' => 'log.fonction'
, 'site' => 'log.site' , 'site' => 'log.site'
, 'sit_session' => 'log.sit_session' , 'sit_session' => 'log.sit_session'
, 'coll_list' => 'log.coll_list'
, 'appli' => 'log.appli' , 'appli' => 'log.appli'
, 'ip' => 'log.ip' , 'ip' => 'log.ip'
); );

View File

@@ -52,13 +52,13 @@ class module_report_sqlaction extends module_report_sql implements module_report
$this->sql = $this->sql =
" "
SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.* SELECT log.usrid, log.user , d.final as getter, d.record_id, d.date, s.*
FROM (log_docs as d FROM (log_docs as d)
INNER JOIN log ON " . $site_filter['sql'] . " INNER JOIN log ON (" . $site_filter['sql'] . " AND log.id = d.log_id)
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 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') LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document')
WHERE"; WHERE";
$this->sql .= $report_filter['sql'] . " AND (d.action = :action)"; $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']); $params = array_merge($params, $site_filter['params'], $report_filter['params'], $record_filter['params']);
$this->sql = " $this->sql = "
SELECT TRIM(" . $this->getTransQuery($this->groupby) . ") SELECT TRIM(" . $this->getTransQuery($this->groupby) . ")
as " . $this->groupby . ", as " . $this->groupby . ",
SUM(1) as nombre SUM(1) as nombre
FROM (log_docs as d FROM (log_docs as d)
INNER JOIN log ON " . $site_filter['sql'] . " INNER JOIN log ON (" . $site_filter['sql'] . " AND log.id = d.log_id)
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 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') LEFT JOIN subdef as s ON (s.record_id=d.record_id and s.name='document')
WHERE "; WHERE ";
$this->sql .= $report_filter['sql'] . " AND (d.action = :action)"; $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 = " $sql = "
SELECT DISTINCT(" . $this->getTransQuery($field) . ") as val SELECT DISTINCT(" . $this->getTransQuery($field) . ") as val
FROM (log_docs as d FROM (log_docs as d)
INNER JOIN log ON (" . $site_filter['sql'] . " INNER JOIN log ON (" . $site_filter['sql'] . "
AND log.id = d.log_id AND log.id = d.log_id
AND " . $date_filter['sql'] . ") AND " . $date_filter['sql'] . ")
INNER JOIN record ON (record.record_id = d.record_id) INNER JOIN log_colls ON (log.id = log_colls.log_id)
LEFT JOIN subdef as s ON (s.record_id=d.record_id AND s.name='document')) 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 "; WHERE ";
if ($this->filter->getReportFilter()) { if ($this->filter->getReportFilter()) {

View File

@@ -43,10 +43,10 @@ class module_report_sqlconnexion extends module_report_sql implements module_rep
log.fonction, log.fonction,
site, site,
sit_session, sit_session,
coll_list,
appli, appli,
ip ip
FROM log"; FROM log
INNER JOIN log_colls ON (log.id = log_colls.log_id)";
$this->sql .= " WHERE " . $report_filter['sql']; $this->sql .= " WHERE " . $report_filter['sql'];
$this->sql .= $this->filter->getOrderFilter() ? : ''; $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() ? : ''; $this->sql .= $this->filter->getLimitFilter() ? : '';
} else { } else {
$this->sql = " $this->sql = "
SELECT TRIM(" . $this->getTransQuery($this->groupby) . ") SELECT TRIM(" . $this->getTransQuery($this->groupby) . ")
as " . $this->groupby . ", SUM(1) as nb as " . $this->groupby . ", SUM(1) as nb
FROM log "; FROM (log)
INNER JOIN log_colls ON (log.id = log_colls.log_id)";
if ($report_filter['sql']) if ($report_filter['sql'])
$this->sql .= " WHERE " . $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(); $report_filter = $this->filter->getReportFilter();
$params = $report_filter['params']; $params = $report_filter['params'];
$sql = 'SELECT DISTINCT(' . $this->getTransQuery($field) . ') as val $sql = '
FROM log '; SELECT DISTINCT(' . $this->getTransQuery($field) . ') as val
FROM (log)
INNER JOIN log_colls ON (log.id = log_colls.log_id)';
if ($report_filter['sql']) if ($report_filter['sql'])
$sql .= ' WHERE ' . $report_filter['sql']; $sql .= ' WHERE ' . $report_filter['sql'];

View File

@@ -52,10 +52,10 @@ class module_report_sqldownload extends module_report_sql implements module_repo
log_docs.record_id, log_docs.record_id,
log_docs.final, log_docs.final,
log_docs.comment log_docs.comment
FROM (log FROM (log)
INNER JOIN log_docs ON log.id = log_docs.log_id INNER JOIN log_docs ON (log.id = log_docs.log_id)
INNER JOIN record ON log_docs.record_id = record.record_id INNER JOIN log_colls ON (log.id = log_colls.log_id)
) INNER JOIN record ON (log_docs.record_id = record.record_id)
WHERE "; WHERE ";
$this->sql .= $report_filters['sql'] ? : ''; $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') { if ($name == 'record_id' && $this->on == 'DOC') {
$this->sql = ' $this->sql = '
SELECT SELECT
TRIM( ' . $field . ' ) AS ' . $name . ', TRIM( ' . $field . ' ) AS ' . $name . ',
SUM(1) AS telechargement, SUM(1) AS telechargement,
record.coll_id, record.coll_id,
log_docs.final, log_docs.final,
log_docs.comment, log_docs.comment,
subdef.size, subdef.size,
subdef.file, subdef.file,
subdef.mime subdef.mime
FROM ( log FROM (log)
INNER JOIN log_docs ON log.id = log_docs.log_id INNER JOIN log_docs ON (log.id = log_docs.log_id)
INNER JOIN record ON log_docs.record_id = record.record_id INNER JOIN log_colls ON (log.id = log_colls.log_id)
INNER JOIN subdef ON (log_docs.record_id = subdef.record_id INNER JOIN record ON (log_docs.record_id = record.record_id)
AND subdef.name = log_docs.final INNER JOIN subdef ON (log_docs.record_id = subdef.record_id AND subdef.name = log_docs.final)
)
)
WHERE WHERE
'; ';
} elseif ($this->on == 'DOC') { } elseif ($this->on == 'DOC') {
$this->sql = ' $this->sql = '
SELECT SELECT
TRIM(' . $field . ') AS ' . $name . ', TRIM(' . $field . ') AS ' . $name . ',
SUM(1) AS telechargement SUM(1) AS telechargement
FROM ( log FROM ( log )
INNER JOIN log_docs ON log.id = log_docs.log_id INNER JOIN log_docs ON (log.id = log_docs.log_id)
INNER JOIN record ON log_docs.record_id = record.record_id INNER JOIN log_colls ON (log.id = log_colls.log_id)
INNER JOIN subdef ON ( log_docs.record_id = subdef.record_id INNER JOIN record ON (log_docs.record_id = record.record_id)
AND subdef.name = log_docs.final INNER JOIN subdef ON ( log_docs.record_id = subdef.record_id AND subdef.name = log_docs.final)
) WHERE';
)
WHERE
';
} else { } else {
$this->sql = ' $this->sql = '
SELECT SELECT
TRIM( ' . $this->getTransQuery($this->groupby) . ') AS ' . $name . ', TRIM( ' . $this->getTransQuery($this->groupby) . ') AS ' . $name . ',
SUM(1) AS nombre SUM(1) AS nombre
FROM ( log FROM ( log )
INNER JOIN log_docs ON log.id = log_docs.log_id INNER JOIN log_docs ON (log.id = log_docs.log_id)
INNER JOIN record ON log_docs.record_id = record.record_id INNER JOIN log_colls ON (log.id = log_colls.log_id)
INNER JOIN subdef ON (record.record_id = subdef.record_id AND subdef.name = "document") 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 '; WHERE ';
} }
$this->sql .= $report_filters['sql']; $this->sql .= $report_filters['sql'];
@@ -159,10 +154,11 @@ class module_report_sqldownload extends module_report_sql implements module_repo
$sql = ' $sql = '
SELECT DISTINCT( ' . $this->getTransQuery($field) . ' ) AS val SELECT DISTINCT( ' . $this->getTransQuery($field) . ' ) AS val
FROM (log FROM (log)
INNER JOIN log_docs ON log.id = log_docs.log_id INNER JOIN log_docs ON (log.id = log_docs.log_id)
INNER JOIN record ON log_docs.record_id = record.record_id INNER JOIN log_colls ON (log.id = log_colls.log_id)
INNER JOIN subdef ON log_docs.record_id = subdef.record_id) INNER JOIN record ON (log_docs.record_id = record.record_id)
INNER JOIN subdef ON (log_docs.record_id = subdef.record_id)
WHERE '; WHERE ';
$sql .= $report_filters['sql']; $sql .= $report_filters['sql'];

View File

@@ -47,10 +47,12 @@ class module_report_sqlfilter
{ {
$ret = array('sql' => '', 'params' => array()); $ret = array('sql' => '', 'params' => array());
$coll_filter = array(); $coll_filter = array();
foreach (explode(',', $list_coll_id) as $val) { foreach (array_filter(explode(',', $list_coll_id)) as $val) {
$coll_filter [] = " position('," . phrasea::collFromBas($app, $val) . ",' in concat(',' ,coll_list, ',')) > 0 "; 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; return $ret;
} }
@@ -75,7 +77,7 @@ class module_report_sqlfilter
$params = array_merge($params, $this->filter['user']['params']); $params = array_merge($params, $this->filter['user']['params']);
} }
if ($this->filter['collection']) { if ($this->filter['collection']) {
$finalfilter .= '(' . $this->filter['collection']['sql'] . ') AND '; $finalfilter .= $this->filter['collection']['sql'] . ' AND ';
$params = array_merge($params, $this->filter['collection']['params']); $params = array_merge($params, $this->filter['collection']['params']);
} }
$finalfilter .= ' log.site = :log_site'; $finalfilter .= ' log.site = :log_site';
@@ -86,7 +88,7 @@ class module_report_sqlfilter
public function getGvSitFilter() public function getGvSitFilter()
{ {
$params = array(); $params = array();
$sql = ''; $sql = '1';
if ($this->app['phraseanet.registry']->is_set('GV_sit')) { if ($this->app['phraseanet.registry']->is_set('GV_sit')) {
$sql = 'log.site = :log_site_gv_filter'; $sql = 'log.site = :log_site_gv_filter';
@@ -190,12 +192,16 @@ class module_report_sqlfilter
return; return;
} }
$tab = explode(",", $report->getListCollId()); $tab = array_filter(explode(",", $report->getListCollId()));
if (count($tab) > 0) { if (count($tab) > 0) {
foreach ($tab as $val) { 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; return;

View File

@@ -33,21 +33,19 @@ class module_report_sqlquestion extends module_report_sql implements module_repo
$this->params = $params; $this->params = $params;
if ($this->groupby == false) { if ($this->groupby == false) {
$this->sql = $this->sql ="
" SELECT
SELECT log_search.date ddate,
log_search.date ddate, search,
search, usrid,
usrid, user,
user, pays,
pays, societe,
societe, activite,
activite, fonction
fonction FROM (`log_search`)
FROM `log_search` INNER JOIN log ON (log.id = log_search.log_id)
INNER JOIN log INNER JOIN log_colls ON (log.id = log_colls.log_id)";
ON log.id = log_search.log_id
";
$this->sql .= " WHERE " . $report_filter['sql']; $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() ? : ''; $this->sql .= $this->filter->getLimitFilter() ? : '';
} else { } else {
$this->sql = " $this->sql = "
SELECT SELECT
TRIM(" . $this->getTransQuery($this->groupby) . ") as " . $this->groupby . ", TRIM(" . $this->getTransQuery($this->groupby) . ") as " . $this->groupby . ",
SUM(1) as nb SUM(1) as nb
FROM `log_search` FROM (`log_search`)
INNER JOIN log INNER JOIN log ON (log.id = log_search.log_id)
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 .= " WHERE " . $report_filter['sql'];
$this->sql .= " GROUP BY " . $this->groupby; $this->sql .= " GROUP BY " . $this->groupby;
@@ -90,9 +88,9 @@ class module_report_sqlquestion extends module_report_sql implements module_repo
$sql = " $sql = "
SELECT DISTINCT(" . $this->getTransQuery($field) . ") as val SELECT DISTINCT(" . $this->getTransQuery($field) . ") as val
FROM `log_search` FROM (`log_search`)
INNER JOIN log INNER JOIN log ON (log.id = log_search.log_id)
ON log.id = log_search.log_id INNER JOIN log_colls ON (log.id = log_colls.log_id)
"; ";
if ($report_filter['sql']) if ($report_filter['sql'])

View File

@@ -0,0 +1,120 @@
<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2012 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Alchemy\Phrasea\Application;
/**
*
*
* @license http://opensource.org/licenses/gpl-3.0 GPLv3
* @link www.phraseanet.com
*/
class patch_380a3 implements patchInterface
{
/**
*
* @var string
*/
private $release = '3.8.0.a3';
/**
*
* @var Array
*/
private $concern = array(base::DATA_BOX);
/**
*
* @return string
*/
public function get_release()
{
return $this->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;
}
}

View File

@@ -5123,16 +5123,6 @@
<comment></comment> <comment></comment>
</field> </field>
<field>
<name>coll_list</name>
<type>text</type>
<null></null>
<extra></extra>
<default></default>
<comment></comment>
</field>
<field> <field>
<name>nav</name> <name>nav</name>
<type>varchar(64)</type> <type>varchar(64)</type>
@@ -5272,6 +5262,46 @@
</indexes> </indexes>
<engine>InnoDB</engine> <engine>InnoDB</engine>
</table> </table>
<table name="log_colls">
<fields>
<field>
<name>id</name>
<type>int(11) unsigned</type>
<null></null>
<extra>auto_increment</extra>
<default></default>
<comment></comment>
</field>
<field>
<name>log_id</name>
<type>int(11) unsigned</type>
<null></null>
<extra></extra>
<default></default>
<comment></comment>
</field>
<field>
<name>coll_id</name>
<type>int(11) unsigned</type>
<null></null>
<extra></extra>
<default></default>
<comment></comment>
</field>
</fields>
<indexes>
<index>
<name>PRIMARY</name>
<type>PRIMARY</type>
<fields>
<field>id</field>
</fields>
</index>
</indexes>
<engine>InnoDB</engine>
</table>
<table name="log_search"> <table name="log_search">
<fields> <fields>
<field> <field>

View File

@@ -168,7 +168,6 @@ class reportTest extends PhraseanetPHPUnitAuthenticatedAbstract
log.fonction, log.fonction,
site, site,
sit_session, sit_session,
coll_list,
appli, appli,
ip ip
FROM log '); FROM log ');