mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
refactor send_reminded function
This commit is contained in:
@@ -180,8 +180,6 @@ class Installer implements ControllerProviderInterface
|
|||||||
\setup::rollback($conn, $connbas);
|
\setup::rollback($conn, $connbas);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$setupRegistry = new \Setup_Registry();
|
|
||||||
$setupRegistry->set('GV_ServerName', $servername, \registry::TYPE_STRING);
|
|
||||||
|
|
||||||
$appbox = \appbox::create($app['Core'], $setupRegistry, $conn, $appbox_name, true);
|
$appbox = \appbox::create($app['Core'], $setupRegistry, $conn, $appbox_name, true);
|
||||||
|
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
namespace Repositories;
|
namespace Repositories;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityRepository;
|
use Doctrine\ORM\EntityRepository;
|
||||||
|
use Doctrine\DBAL\Types\Type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -21,5 +22,26 @@ use Doctrine\ORM\EntityRepository;
|
|||||||
class ValidationParticipantRepository extends EntityRepository
|
class ValidationParticipantRepository extends EntityRepository
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve all not reminded participants where the validation has not expired
|
||||||
|
*
|
||||||
|
* @param $expireDate The expiration Date
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function findNotConfirmedAndNotRemindedParticipantsByExpireDate(\DateTime $expireDate)
|
||||||
|
{
|
||||||
|
$dql = '
|
||||||
|
SELECT p, s
|
||||||
|
FROM Entities\ValidationParticipant p
|
||||||
|
JOIN p.session s
|
||||||
|
JOIN s.basket b
|
||||||
|
WHERE p.is_confirmed = 0
|
||||||
|
AND p.reminded IS NULL
|
||||||
|
AND s.expires < :date';
|
||||||
|
|
||||||
|
return $this->_em->createQuery($dql)
|
||||||
|
->setParameter('date', $expireDate, Type::DATETIME)
|
||||||
|
->getResult();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -367,16 +367,13 @@ class Session_Handler
|
|||||||
throw new Exception_ServiceUnavailable();
|
throw new Exception_ServiceUnavailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
$registry = $this->appbox->get_registry();
|
|
||||||
|
|
||||||
$conn = $this->appbox->get_connection();
|
$conn = $this->appbox->get_connection();
|
||||||
$browser = Browser::getInstance();
|
$browser = Browser::getInstance();
|
||||||
|
|
||||||
$sbases = array();
|
|
||||||
|
|
||||||
$this->send_reminders();
|
$this->send_reminders();
|
||||||
|
|
||||||
$auth->prelog();
|
$auth->prelog();
|
||||||
|
|
||||||
if ($this->is_authenticated() && $this->get_usr_id() == $auth->get_user()->get_id()) {
|
if ($this->is_authenticated() && $this->get_usr_id() == $auth->get_user()->get_id()) {
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@@ -533,38 +530,31 @@ class Session_Handler
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
$Core = bootstrap::getCore();
|
$core = bootstrap::getCore();
|
||||||
|
|
||||||
$registry = $Core->getRegistry();
|
$registry = $core->getRegistry();
|
||||||
$date_two_day = new DateTime('+' . (int) $registry->get('GV_validation_reminder') . ' days');
|
|
||||||
|
|
||||||
$events_mngr = eventsmanager_broker::getInstance($this->appbox, $Core);
|
$date = new DateTime('+' . (int) $registry->get('GV_validation_reminder') . ' days');
|
||||||
|
|
||||||
$sql = 'SELECT v.id as validate_id, v.usr_id, v.ssel_id
|
$eventsMngr = eventsmanager_broker::getInstance($this->appbox, $core);
|
||||||
, s.usr_id as owner, t.value
|
|
||||||
FROM (validate v, ssel s)
|
|
||||||
INNER JOIN tokens t
|
|
||||||
ON (t.datas = s.ssel_id
|
|
||||||
AND v.usr_id=t.usr_id AND t.type="validate")
|
|
||||||
WHERE expires_on < :expires_on
|
|
||||||
AND ISNULL(last_reminder) AND confirmed="0" AND s.ssel_id = v.ssel_id ';
|
|
||||||
|
|
||||||
$stmt = $this->appbox->get_connection()->prepare($sql);
|
$em = $core->getEntityManager();
|
||||||
$stmt->execute(array(':expires_on' => phraseadate::format_mysql($date_two_day)));
|
/* @var $em \Doctrine\ORM\EntityManager */
|
||||||
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
$participantRepo = $em->getRepository('\Entities\ValidationParticipant');
|
||||||
$stmt->closeCursor();
|
/* @var $participantRepo \Repositories\ValidationParticipantRepository */
|
||||||
|
$participants = $participantRepo->findNotConfirmedAndNotRemindedParticipantsByExpireDate($date);
|
||||||
|
|
||||||
foreach ($rs as $row) {
|
foreach ($participants as $participant) {
|
||||||
$params = array(
|
/* @var $participant \Entities\ValidationParticipant */
|
||||||
'to' => $row['usr_id'],
|
$validationSession = $participant->getSession();
|
||||||
'ssel_id' => $row['ssel_id'],
|
$basketId = $validationSession->getBasket()->getId();
|
||||||
'from' => $row['owner'],
|
$eventsMngr->trigger('__VALIDATION_REMINDER__', array(
|
||||||
'validate_id' => $row['validate_id'],
|
'to' => $participant->getUsrId(),
|
||||||
'url' => $registry->get('GV_ServerName')
|
'ssel_id' => $basketId,
|
||||||
. 'lightbox/validate/' . $row['ssel_id'] . '/?LOG=' . $row['value']
|
'from' => $validationSession->getInitiatorId(),
|
||||||
);
|
'validate_id' => $validationSession->getId(),
|
||||||
|
'url' => $registry->get('GV_ServerName') . 'lightbox/validate/' . $basketId . '/'//?LOG=' . $row['value']
|
||||||
$events_mngr->trigger('__VALIDATION_REMINDER__', $params);
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
|
@@ -110,13 +110,19 @@ class eventsmanager_notify_validationreminder extends eventsmanager_notifyAbstra
|
|||||||
$mailed = true;
|
$mailed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
$core = \bootstrap::getCore();
|
||||||
$sql = 'UPDATE validate SET last_reminder=NOW() WHERE id = :validate_id';
|
|
||||||
$stmt = $this->appbox->get_connection()->prepare($sql);
|
|
||||||
$stmt->execute(array(':validate_id' => $params['validate_id']));
|
|
||||||
$stmt->closeCursor();
|
|
||||||
} catch (Exception $e) {
|
|
||||||
|
|
||||||
|
$em = $core->getEntityManager();
|
||||||
|
|
||||||
|
$validationParticipant = $em->getRepository('\Entities\ValidationParticipant')->find($params['to']);
|
||||||
|
/* @var $validationParticipant \Entities\ValidationParticipant */
|
||||||
|
|
||||||
|
if (null !== $validationParticipant) {
|
||||||
|
$validationParticipant->setReminded(new \DateTime('now'));
|
||||||
|
|
||||||
|
$em->persist($validationParticipant);
|
||||||
|
|
||||||
|
$em->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->broker->notify($params['to'], __CLASS__, $datas, $mailed);
|
return $this->broker->notify($params['to'], __CLASS__, $datas, $mailed);
|
||||||
|
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../../PhraseanetPHPUnitAuthenticatedAbstract.class.inc';
|
||||||
|
|
||||||
|
class ValidationParticipantRepositoryTest extends PhraseanetPHPUnitAuthenticatedAbstract
|
||||||
|
{
|
||||||
|
|
||||||
|
public function testFindNotConfirmedAndNotRemindedParticipants()
|
||||||
|
{
|
||||||
|
$this->insertOneValidationBasket(array(
|
||||||
|
'expires' => new \DateTime('+1 days')
|
||||||
|
));
|
||||||
|
|
||||||
|
$em = self::$core->getEntityManager();
|
||||||
|
$repo = $em->getRepository('\Entities\ValidationParticipant');
|
||||||
|
/* @var $repo \Repositories\ValidationParticipantRepository */
|
||||||
|
$expireDate = new \DateTime('+2 days');
|
||||||
|
$participants = $repo->findNotConfirmedAndNotRemindedParticipantsByExpireDate($expireDate);
|
||||||
|
$this->assertEquals(1, count($participants));
|
||||||
|
}
|
||||||
|
}
|
@@ -373,7 +373,7 @@ abstract class PhraseanetPHPUnitAbstract extends WebTestCase
|
|||||||
*
|
*
|
||||||
* @return \Entities\Basket
|
* @return \Entities\Basket
|
||||||
*/
|
*/
|
||||||
protected function insertOneValidationBasket()
|
protected function insertOneValidationBasket(array $parameters = array())
|
||||||
{
|
{
|
||||||
$em = self::$core->getEntityManager();
|
$em = self::$core->getEntityManager();
|
||||||
|
|
||||||
@@ -384,8 +384,11 @@ abstract class PhraseanetPHPUnitAbstract extends WebTestCase
|
|||||||
$Validation->setBasket($basket);
|
$Validation->setBasket($basket);
|
||||||
$Validation->setInitiator(self::$user);
|
$Validation->setInitiator(self::$user);
|
||||||
|
|
||||||
|
if (isset($parameters['expires']) && $parameters['expires'] instanceof \DateTime) {
|
||||||
|
$Validation->setExpires($parameters['expires']);
|
||||||
|
}
|
||||||
|
|
||||||
$basket->setValidation($Validation);
|
$basket->setValidation($Validation);
|
||||||
|
|
||||||
$em->persist($Validation);
|
$em->persist($Validation);
|
||||||
$em->merge($basket);
|
$em->merge($basket);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user