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);
|
||||
|
||||
try {
|
||||
$setupRegistry = new \Setup_Registry();
|
||||
$setupRegistry->set('GV_ServerName', $servername, \registry::TYPE_STRING);
|
||||
|
||||
$appbox = \appbox::create($app['Core'], $setupRegistry, $conn, $appbox_name, true);
|
||||
|
||||
|
@@ -12,6 +12,7 @@
|
||||
namespace Repositories;
|
||||
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use Doctrine\DBAL\Types\Type;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -21,5 +22,26 @@ use Doctrine\ORM\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();
|
||||
}
|
||||
|
||||
$registry = $this->appbox->get_registry();
|
||||
|
||||
$conn = $this->appbox->get_connection();
|
||||
$browser = Browser::getInstance();
|
||||
|
||||
$sbases = array();
|
||||
|
||||
$this->send_reminders();
|
||||
|
||||
$auth->prelog();
|
||||
|
||||
if ($this->is_authenticated() && $this->get_usr_id() == $auth->get_user()->get_id()) {
|
||||
return $this;
|
||||
}
|
||||
@@ -533,38 +530,31 @@ class Session_Handler
|
||||
return $this;
|
||||
}
|
||||
|
||||
$Core = bootstrap::getCore();
|
||||
$core = bootstrap::getCore();
|
||||
|
||||
$registry = $Core->getRegistry();
|
||||
$date_two_day = new DateTime('+' . (int) $registry->get('GV_validation_reminder') . ' days');
|
||||
$registry = $core->getRegistry();
|
||||
|
||||
$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
|
||||
, 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 ';
|
||||
$eventsMngr = eventsmanager_broker::getInstance($this->appbox, $core);
|
||||
|
||||
$stmt = $this->appbox->get_connection()->prepare($sql);
|
||||
$stmt->execute(array(':expires_on' => phraseadate::format_mysql($date_two_day)));
|
||||
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
$stmt->closeCursor();
|
||||
$em = $core->getEntityManager();
|
||||
/* @var $em \Doctrine\ORM\EntityManager */
|
||||
$participantRepo = $em->getRepository('\Entities\ValidationParticipant');
|
||||
/* @var $participantRepo \Repositories\ValidationParticipantRepository */
|
||||
$participants = $participantRepo->findNotConfirmedAndNotRemindedParticipantsByExpireDate($date);
|
||||
|
||||
foreach ($rs as $row) {
|
||||
$params = array(
|
||||
'to' => $row['usr_id'],
|
||||
'ssel_id' => $row['ssel_id'],
|
||||
'from' => $row['owner'],
|
||||
'validate_id' => $row['validate_id'],
|
||||
'url' => $registry->get('GV_ServerName')
|
||||
. 'lightbox/validate/' . $row['ssel_id'] . '/?LOG=' . $row['value']
|
||||
);
|
||||
|
||||
$events_mngr->trigger('__VALIDATION_REMINDER__', $params);
|
||||
foreach ($participants as $participant) {
|
||||
/* @var $participant \Entities\ValidationParticipant */
|
||||
$validationSession = $participant->getSession();
|
||||
$basketId = $validationSession->getBasket()->getId();
|
||||
$eventsMngr->trigger('__VALIDATION_REMINDER__', array(
|
||||
'to' => $participant->getUsrId(),
|
||||
'ssel_id' => $basketId,
|
||||
'from' => $validationSession->getInitiatorId(),
|
||||
'validate_id' => $validationSession->getId(),
|
||||
'url' => $registry->get('GV_ServerName') . 'lightbox/validate/' . $basketId . '/'//?LOG=' . $row['value']
|
||||
));
|
||||
}
|
||||
|
||||
return $this;
|
||||
|
@@ -110,13 +110,19 @@ class eventsmanager_notify_validationreminder extends eventsmanager_notifyAbstra
|
||||
$mailed = true;
|
||||
}
|
||||
|
||||
try {
|
||||
$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) {
|
||||
$core = \bootstrap::getCore();
|
||||
|
||||
$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);
|
||||
|
@@ -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
|
||||
*/
|
||||
protected function insertOneValidationBasket()
|
||||
protected function insertOneValidationBasket(array $parameters = array())
|
||||
{
|
||||
$em = self::$core->getEntityManager();
|
||||
|
||||
@@ -384,8 +384,11 @@ abstract class PhraseanetPHPUnitAbstract extends WebTestCase
|
||||
$Validation->setBasket($basket);
|
||||
$Validation->setInitiator(self::$user);
|
||||
|
||||
$basket->setValidation($Validation);
|
||||
if (isset($parameters['expires']) && $parameters['expires'] instanceof \DateTime) {
|
||||
$Validation->setExpires($parameters['expires']);
|
||||
}
|
||||
|
||||
$basket->setValidation($Validation);
|
||||
$em->persist($Validation);
|
||||
$em->merge($basket);
|
||||
|
||||
|
Reference in New Issue
Block a user