mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
PHRAS-3823 add column permalink and option in report command (#4288)
This commit is contained in:
@@ -37,7 +37,7 @@ abstract class AbstractReportCommand extends Command
|
|||||||
->addOption('email', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY ,'emails to send the report')
|
->addOption('email', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY ,'emails to send the report')
|
||||||
->addOption('dmin', null, InputOption::VALUE_REQUIRED, 'minimum date yyyy-mm-dd')
|
->addOption('dmin', null, InputOption::VALUE_REQUIRED, 'minimum date yyyy-mm-dd')
|
||||||
->addOption('dmax', null, InputOption::VALUE_REQUIRED, 'maximum date yyyy-mm-dd, until today if not set')
|
->addOption('dmax', null, InputOption::VALUE_REQUIRED, 'maximum date yyyy-mm-dd, until today if not set')
|
||||||
->addOption('range', null, InputOption::VALUE_REQUIRED, "period range until now eg: <info>'10 days', '2 weeks', '6 months', ' 1 year'</info>")
|
->addOption('range', null, InputOption::VALUE_REQUIRED, "period range until now eg: <info>'10 days', '2 weeks', '6 months', '2 years'</info>")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,9 +17,12 @@ class DataboxContentCommand extends AbstractReportCommand
|
|||||||
->setDescription('BETA - Get all databox records')
|
->setDescription('BETA - Get all databox records')
|
||||||
->addOption('collection_id', 'c', InputOption::VALUE_REQUIRED| InputOption::VALUE_IS_ARRAY, 'Distant collection ID in the databox, get all available collection if not defined')
|
->addOption('collection_id', 'c', InputOption::VALUE_REQUIRED| InputOption::VALUE_IS_ARRAY, 'Distant collection ID in the databox, get all available collection if not defined')
|
||||||
->addOption('field', 'f', InputOption::VALUE_REQUIRED| InputOption::VALUE_IS_ARRAY, 'The field name to include in the report, get all available report field if not defined')
|
->addOption('field', 'f', InputOption::VALUE_REQUIRED| InputOption::VALUE_IS_ARRAY, 'The field name to include in the report, get all available report field if not defined')
|
||||||
|
->addOption('permalink', 'p', InputOption::VALUE_REQUIRED, 'the subdefinition name to retrieve permalink if exist')
|
||||||
|
|
||||||
->setHelp(
|
->setHelp(
|
||||||
"eg: bin/report databox:content --databox_id 2 --email 'admin@alchemy.fr' --dmin '2022-12-01' --dmax '2023-01-01' \n"
|
"eg: bin/report databox:content --databox_id 2 --email 'admin@alchemy.fr' --dmin '2022-12-01' --dmax '2023-01-01' \n"
|
||||||
|
. "\<DMIN> \<DMAX> date filter on the updated_on (moddate of table record)"
|
||||||
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,6 +66,7 @@ class DataboxContentCommand extends AbstractReportCommand
|
|||||||
]
|
]
|
||||||
))
|
))
|
||||||
->setCollIds($collIds)
|
->setCollIds($collIds)
|
||||||
|
->setPermalink($input->getOption('permalink'))
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace Alchemy\Phrasea\Command\Report;
|
namespace Alchemy\Phrasea\Command\Report;
|
||||||
|
|
||||||
use Alchemy\Phrasea\Report\Report;
|
|
||||||
use Alchemy\Phrasea\Report\ReportDownloads;
|
use Alchemy\Phrasea\Report\ReportDownloads;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Input\InputOption;
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
@@ -20,6 +19,7 @@ class DownloadsCommand extends AbstractReportCommand
|
|||||||
->setDescription('BETA - Get all downloads report')
|
->setDescription('BETA - Get all downloads report')
|
||||||
->addOption('type', null, InputOption::VALUE_REQUIRED, 'type of report downloads, if not defined or empty it is for all downloads')
|
->addOption('type', null, InputOption::VALUE_REQUIRED, 'type of report downloads, if not defined or empty it is for all downloads')
|
||||||
->addOption('collection_id', 'c', InputOption::VALUE_REQUIRED| InputOption::VALUE_IS_ARRAY, 'Distant collection ID in the databox, get all available collection if not defined')
|
->addOption('collection_id', 'c', InputOption::VALUE_REQUIRED| InputOption::VALUE_IS_ARRAY, 'Distant collection ID in the databox, get all available collection if not defined')
|
||||||
|
->addOption('permalink', 'p', InputOption::VALUE_REQUIRED, 'the subdefinition name to retrieve permalink if exist, available only for type record and for all downloads type ""')
|
||||||
|
|
||||||
->setHelp(
|
->setHelp(
|
||||||
"eg: bin/report downloads:all --databox_id 2 --email 'admin@alchemy.fr' --dmin '2022-12-01' --dmax '2023-01-01' --type 'user' \n"
|
"eg: bin/report downloads:all --databox_id 2 --email 'admin@alchemy.fr' --dmin '2022-12-01' --dmax '2023-01-01' --type 'user' \n"
|
||||||
@@ -37,6 +37,7 @@ class DownloadsCommand extends AbstractReportCommand
|
|||||||
{
|
{
|
||||||
$type = $input->getOption('type');
|
$type = $input->getOption('type');
|
||||||
$collectionIds = $input->getOption('collection_id');
|
$collectionIds = $input->getOption('collection_id');
|
||||||
|
$permalink = $input->getOption('permalink');
|
||||||
|
|
||||||
if (!empty($type) && !in_array($type, self::TYPES)) {
|
if (!empty($type) && !in_array($type, self::TYPES)) {
|
||||||
$output->writeln("<error>wrong '--type' option (--help for available value)</error>");
|
$output->writeln("<error>wrong '--type' option (--help for available value)</error>");
|
||||||
@@ -44,6 +45,12 @@ class DownloadsCommand extends AbstractReportCommand
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($permalink) && $type == 'user') {
|
||||||
|
$output->writeln("<error>--permalink is not used with type=user </error>");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
$databox = $this->findDbOr404($this->sbasId);
|
$databox = $this->findDbOr404($this->sbasId);
|
||||||
$collIds = [];
|
$collIds = [];
|
||||||
|
|
||||||
@@ -71,6 +78,7 @@ class DownloadsCommand extends AbstractReportCommand
|
|||||||
))
|
))
|
||||||
->setAppKey($this->container['conf']->get(['main', 'key']))
|
->setAppKey($this->container['conf']->get(['main', 'key']))
|
||||||
->setCollIds($collIds)
|
->setCollIds($collIds)
|
||||||
|
->setPermalink($permalink)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,7 @@ class ReportDownloads extends Report
|
|||||||
private $acl;
|
private $acl;
|
||||||
|
|
||||||
private $collIds = null;
|
private $collIds = null;
|
||||||
|
private $permalink = null;
|
||||||
|
|
||||||
/* those vars will be set once by computeVars() */
|
/* those vars will be set once by computeVars() */
|
||||||
private $name = null;
|
private $name = null;
|
||||||
@@ -33,6 +34,11 @@ class ReportDownloads extends Report
|
|||||||
public function getColumnTitles()
|
public function getColumnTitles()
|
||||||
{
|
{
|
||||||
$this->computeVars();
|
$this->computeVars();
|
||||||
|
// only for group downloads all and download by record
|
||||||
|
if (($this->parms['group'] === null || $this->parms['group'] == 'record') && !empty($this->permalink)) {
|
||||||
|
$this->columnTitles[] = 'permalink_' . $this->permalink;
|
||||||
|
}
|
||||||
|
|
||||||
return $this->columnTitles;
|
return $this->columnTitles;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,11 +75,30 @@ class ReportDownloads extends Report
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setPermalink($permalink)
|
||||||
|
{
|
||||||
|
$this->permalink = $permalink;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function getAllRows($callback)
|
public function getAllRows($callback)
|
||||||
{
|
{
|
||||||
$this->computeVars();
|
$this->computeVars();
|
||||||
$stmt = $this->databox->get_connection()->executeQuery($this->sql, []);
|
$stmt = $this->databox->get_connection()->executeQuery($this->sql, []);
|
||||||
while (($row = $stmt->fetch())) {
|
while (($row = $stmt->fetch())) {
|
||||||
|
// only for group downloads all and download by record
|
||||||
|
if (($this->parms['group'] === null || $this->parms['group'] == 'record') && !empty($this->permalink)) {
|
||||||
|
try {
|
||||||
|
$record = $this->databox->get_record($row['record_id']);
|
||||||
|
$permalinkUrl = $record->get_subdef($this->permalink)->get_permalink()->get_url()->__toString();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// the record or subdef is not found
|
||||||
|
$permalinkUrl = '';
|
||||||
|
}
|
||||||
|
$row['permalink_' . $this->permalink] = $permalinkUrl;
|
||||||
|
}
|
||||||
|
|
||||||
$callback($row);
|
$callback($row);
|
||||||
}
|
}
|
||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
|
@@ -23,11 +23,16 @@ class ReportRecords extends Report
|
|||||||
private $sqlColSelect = null;
|
private $sqlColSelect = null;
|
||||||
private $columnTitles = null;
|
private $columnTitles = null;
|
||||||
private $keyName = null;
|
private $keyName = null;
|
||||||
|
private $permalink = null;
|
||||||
|
|
||||||
|
|
||||||
public function getColumnTitles()
|
public function getColumnTitles()
|
||||||
{
|
{
|
||||||
$this->computeVars();
|
$this->computeVars();
|
||||||
|
if (!empty($this->permalink)) {
|
||||||
|
$this->columnTitles[] = 'permalink_' . $this->permalink;
|
||||||
|
}
|
||||||
|
|
||||||
return $this->columnTitles;
|
return $this->columnTitles;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,6 +62,13 @@ class ReportRecords extends Report
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setPermalink($permalink)
|
||||||
|
{
|
||||||
|
$this->permalink = $permalink;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function getAllRows($callback)
|
public function getAllRows($callback)
|
||||||
{
|
{
|
||||||
$this->computeVars();
|
$this->computeVars();
|
||||||
@@ -71,7 +83,7 @@ class ReportRecords extends Report
|
|||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
|
|
||||||
if($row && !is_null($row['from']) && !is_null($row['to'])) {
|
if($row && !is_null($row['from']) && !is_null($row['to'])) {
|
||||||
$sql = "SELECT r.record_id, c.asciiname, r.moddate AS updated_on, r.credate AS created_on, r.mime, r.type, r.originalname,\n"
|
$sql = "SELECT r.record_id, c.asciiname, r.credate AS created_on, r.moddate AS updated_on, r.mime, r.type, r.originalname, r.status, r.sha256, r.uuid,\n"
|
||||||
. $this->sqlColSelect . "\n"
|
. $this->sqlColSelect . "\n"
|
||||||
. "FROM (`record` AS `r` LEFT JOIN `coll` AS `c` USING(`coll_id`)) LEFT JOIN `metadatas` AS `m` USING(`record_id`)\n"
|
. "FROM (`record` AS `r` LEFT JOIN `coll` AS `c` USING(`coll_id`)) LEFT JOIN `metadatas` AS `m` USING(`record_id`)\n"
|
||||||
. "WHERE " . $this->sqlWhere . "\n"
|
. "WHERE " . $this->sqlWhere . "\n"
|
||||||
@@ -82,6 +94,21 @@ class ReportRecords extends Report
|
|||||||
$rows = $stmt->fetchAll();
|
$rows = $stmt->fetchAll();
|
||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
foreach($rows as $row) {
|
foreach($rows as $row) {
|
||||||
|
if (!empty($this->permalink)) {
|
||||||
|
try {
|
||||||
|
$record = $this->databox->get_record($row['record_id']);
|
||||||
|
$permalinkUrl = $record->get_subdef($this->permalink)->get_permalink()->get_url()->__toString();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// the record or subdef is not found
|
||||||
|
$permalinkUrl = '';
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
// there is no permalink created ???
|
||||||
|
$permalinkUrl = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$row['permalink_' . $this->permalink] = $permalinkUrl;
|
||||||
|
}
|
||||||
|
|
||||||
$callback($row);
|
$callback($row);
|
||||||
$lastRid = $row['record_id'];
|
$lastRid = $row['record_id'];
|
||||||
}
|
}
|
||||||
@@ -101,7 +128,7 @@ class ReportRecords extends Report
|
|||||||
|
|
||||||
// pivot-like query on metadata fields
|
// pivot-like query on metadata fields
|
||||||
$this->sqlColSelect = [];
|
$this->sqlColSelect = [];
|
||||||
$this->columnTitles = ['record_id', 'collection', 'updated_on', 'created_on', 'mime', 'type', 'originalname'];
|
$this->columnTitles = ['record_id', 'collection', 'created_on', 'updated_on', 'mime', 'type', 'originalname', 'status', 'sha256', 'uuid'];
|
||||||
foreach($this->getDatabox()->get_meta_structure() as $field) {
|
foreach($this->getDatabox()->get_meta_structure() as $field) {
|
||||||
// skip the fields that can't be reported
|
// skip the fields that can't be reported
|
||||||
if(!$field->is_report() || (isset($this->acl) && $field->isBusiness() && !$this->acl->can_see_business_fields($this->getDatabox()))) {
|
if(!$field->is_report() || (isset($this->acl) && $field->isBusiness() && !$this->acl->can_see_business_fields($this->getDatabox()))) {
|
||||||
|
Reference in New Issue
Block a user