isInformative()) { $this->restrict = true; } } public function buildSql() { $report_filters = $this->filter->getReportFilter(); $record_filters = $this->filter->getRecordFilter() ? : array('sql' => '', 'params' => array()); $this->params = array_merge($report_filters['params'], $record_filters['params']); if ($this->groupby == false) { $this->sql = " SELECT log.user, log.site, log.societe, log.pays, log.activite, log.fonction, log.usrid, record.coll_id, log_docs.date AS ddate, log_docs.id, log_docs.log_id, 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 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'] ? : ''; $this->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")'; $this->sql .= empty($record_filters['sql']) ? '' : ' AND ( ' . $record_filters['sql'] . ' )'; $this->sql .= $this->filter->getOrderFilter() ? : ''; $stmt = $this->connbas->prepare($this->sql); $stmt->execute($this->params); $this->total_row = $stmt->rowCount(); $stmt->closeCursor(); $this->sql .= $this->filter->getLimitFilter() ? : ''; } else { $name = $this->groupby; $field = $this->getTransQuery($this->groupby); 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 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 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 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']; $this->sql .= ' AND ( log_docs.action = \'download\' OR log_docs.action = \'mail\')'; $this->sql .= empty($record_filters['sql']) ? '' : ' AND ( ' . $record_filters['sql'] . ' )'; $this->sql .= $this->on == 'DOC' ? 'AND subdef.name = \'document\' ' : ''; $this->sql .= ' GROUP BY ' . $this->groupby; $this->sql .= ( $name == 'record_id' && $this->on == 'DOC') ? ' , final' : ''; if ($this->filter->getOrderFilter()) $this->sql .= $this->filter->getOrderFilter(); $stmt = $this->connbas->prepare($this->sql); $stmt->execute($this->params); $this->total = $stmt->rowCount(); $stmt->closeCursor(); $this->sql .= $this->filter->getLimitFilter() ? : ''; } return $this; } public function sqlDistinctValByField($field) { $report_filters = $this->filter->getReportFilter(); $params = array_merge($report_filters['params']); $this->params = $params; $sql = ' SELECT DISTINCT( ' . $this->getTransQuery($field) . ' ) AS val 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']; $sql .= ' AND (log_docs.action = ' . '\'download\'OR log_docs.action = \'mail\')'; $sql .= $this->on == 'DOC' ? 'AND subdef.name = \'document\'' : ''; $sql .= $this->filter->getOrderFilter() ? : ''; $sql .= $this->filter->getLimitFilter() ? : ''; return array('sql' => $sql, 'params' => $params); } }