Files
Phraseanet/lib/classes/patch/417RC3PHRAS3783.php
Aina Sitraka a892887dd2 PHRAS-3783 Prod - Order manager - add Download Expiration date (#4191)
* add download expiration date

* add expiration info in mail

* add calendar on order-manager validation

* add a default config on patch if not exist

* fix

* add predifined expireon date

* expiration override

* fix order manager deny and sen in the same time

* patch for todo column

* bump version

record acl admin

fix pusher and date on order

* some improvement

* some fix
2022-12-20 12:42:59 +01:00

109 lines
2.9 KiB
PHP

<?php
use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Core\Configuration\PropertyAccess;
use Alchemy\Phrasea\Model\Repositories\OrderRepository;
use Alchemy\Phrasea\Model\Entities\Order;
class patch_417RC3PHRAS3783 implements patchInterface
{
/** @var string */
private $release = '4.1.7-rc3';
/** @var array */
private $concern = [base::APPLICATION_BOX];
/**
* {@inheritdoc}
*/
public function get_release()
{
return $this->release;
}
/**
* {@inheritdoc}
*/
public function getDoctrineMigrations()
{
return [];
}
/**
* {@inheritdoc}
*/
public function require_all_upgrades()
{
return false;
}
/**
* {@inheritdoc}
*/
public function concern()
{
return $this->concern;
}
/**
* {@inheritdoc}
*/
public function apply(base $base, Application $app)
{
if ($base->get_base_type() === base::DATA_BOX) {
$this->patch_databox($base, $app);
}
elseif ($base->get_base_type() === base::APPLICATION_BOX) {
$this->patch_appbox($base, $app);
}
return true;
}
private function patch_databox(databox $databox, Application $app)
{
}
private function patch_appbox(base $appbox, Application $app)
{
$cnx = $appbox->get_connection();
/** @var PropertyAccess $conf */
$conf = $app['conf'];
// add new conf if not exist
// default value to 15 days ??
// or null for download never expired
if (!$conf->has(['order-manager', 'download-hd', 'expiration-days'])) {
$conf->set(['order-manager', 'download-hd', 'expiration-days'], 15);
}
if (!$conf->has(['order-manager', 'download-hd', 'expiration-override'])) {
$conf->set(['order-manager', 'download-hd', 'expiration-override'], false);
}
// needed to expire existing order download ???
$expirationDays = $app['conf']->get(['order-manager', 'download-hd', 'expiration-days'], 15);
$expireOn = (new \DateTime('+ '. $expirationDays .' day'))->format(DATE_ATOM);
$sql = 'UPDATE `records_rights` SET `expire_on` = :expire_on WHERE `case` = "order" AND `expire_on` IS NULL';
$stmt = $cnx->prepare($sql);
$stmt->execute([':expire_on' => $expireOn]);
$stmt->closeCursor();
// get all todoorder an set column to 0 if all element are processed
/** @var OrderRepository $orderRepository */
$orderRepository = $app['repo.orders'];
/** @var Order $order */
foreach ($orderRepository->findAllTodo() as $order) {
if ($order->getTotalTreatedItems() == $order->getTotal()) {
//all element processed
$order->setTodo(0);
$app['orm.em']->persist($order);
}
}
$app['orm.em']->flush();
}
}