Esempio n. 1
0
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $sql = 'DELETE FROM Orders';
     $stmt = $app['phraseanet.appbox']->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $sql = 'DELETE FROM OrderElements';
     $stmt = $app['phraseanet.appbox']->get_connection()->prepare($sql);
     $stmt->execute();
     $stmt->closeCursor();
     $conn = $app['phraseanet.appbox']->get_connection();
     $sql = 'SELECT id, usr_id, created_on, `usage`, deadline, ssel_id FROM `order`';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $n = 0;
     $em = $app['EM'];
     $em->getEventManager()->removeEventSubscriber(new TimestampableListener());
     foreach ($rs as $row) {
         $sql = 'SELECT count(id) as todo
                 FROM order_elements
                 WHERE deny = NULL
                     AND order_id = :id';
         $stmt = $conn->prepare($sql);
         $stmt->execute([':id' => $row['id']]);
         $todo = $stmt->fetch(\PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         if (null === ($user = $this->loadUser($app['EM'], $row['usr_id']))) {
             continue;
         }
         try {
             $basket = $app['EM']->createQuery('SELECT PARTIAL b.{id} FROM Phraseanet:Basket b WHERE b.id = :id')->setParameters(['id' => $row['ssel_id']])->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true)->getSingleResult();
         } catch (NoResultException $e) {
             continue;
         }
         $order = new Order();
         $order->setUser($user)->setTodo($todo['todo'])->setOrderUsage($row['usage'])->setDeadline(new \DateTime($row['deadline']))->setCreatedOn(new \DateTime($row['created_on']))->setBasket($basket);
         $em->persist($order);
         $sql = 'SELECT base_id, record_id, order_master_id, deny
                 FROM order_elements
                 WHERE order_id = :id';
         $stmt = $conn->prepare($sql);
         $stmt->execute([':id' => $row['id']]);
         $elements = $stmt->fetchAll(\PDO::FETCH_ASSOC);
         $stmt->closeCursor();
         foreach ($elements as $element) {
             $orderElement = new OrderElement();
             $user = $this->loadUser($app['EM'], $row['usr_id']);
             $orderElement->setBaseId($element['base_id'])->setDeny($element['deny'] === null ? null : (bool) $element['deny'])->setOrder($order)->setOrderMaster($user)->setRecordId($element['record_id']);
             $order->addElement($orderElement);
             $em->persist($orderElement);
         }
         if ($n % 100 === 0) {
             $em->flush();
             $em->clear();
         }
     }
     $em->flush();
     $em->clear();
     $em->getEventManager()->addEventSubscriber(new TimestampableListener());
     return true;
 }
 /**
  * {@inheritDoc}
  */
 public function getBasket()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getBasket', array());
     return parent::getBasket();
 }
Esempio n. 3
0
 private function createOneOrder($usage)
 {
     self::$DI['app']['notification.deliverer'] = $this->getMockBuilder('Alchemy\\Phrasea\\Notification\\Deliverer')->disableOriginalConstructor()->getMock();
     $receveid = [self::$DI['record_1']->get_serialize_key() => self::$DI['record_1']];
     $order = new Order();
     $order->setOrderUsage($usage);
     $order->setUser(self::$DI['user_alt2']);
     $order->setDeadline(new \DateTime('+10 minutes'));
     $orderElement = new OrderElement();
     $orderElement->setBaseId(self::$DI['record_1']->get_base_id());
     $orderElement->setRecordId(self::$DI['record_1']->get_record_id());
     $orderElement->setOrder($order);
     $order->addElement($orderElement);
     $order->setTodo(1);
     self::$DI['app']['EM']->persist($order);
     self::$DI['app']['EM']->persist($orderElement);
     self::$DI['app']['EM']->flush();
     return $order;
 }
Esempio n. 4
0
 /**
  * Create a new order
  *
  * @param Application $app
  * @param Request     $request
  *
  * @return RedirectResponse|JsonResponse
  */
 public function createOrder(Application $app, Request $request)
 {
     $success = false;
     $collectionHasOrderAdmins = new ArrayCollection();
     $toRemove = [];
     $records = RecordsRequest::fromRequest($app, $request, true, ['cancmd']);
     $hasOneAdmin = [];
     if (!$records->isEmpty()) {
         $order = new OrderEntity();
         $order->setUser($app['authentication']->getUser());
         $order->setDeadline(null !== ($deadLine = $request->request->get('deadline')) ? new \DateTime($deadLine) : $deadLine);
         $order->setOrderUsage($request->request->get('use', ''));
         foreach ($records as $key => $record) {
             if ($collectionHasOrderAdmins->containsKey($record->get_base_id())) {
                 if (!$collectionHasOrderAdmins->get($record->get_base_id())) {
                     $records->remove($key);
                 }
             }
             if (!isset($hasOneAdmin[$record->get_base_id()])) {
                 $query = new \User_Query($app);
                 $hasOneAdmin[$record->get_base_id()] = (bool) count($query->on_base_ids([$record->get_base_id()])->who_have_right(['order_master'])->execute()->get_results());
             }
             $collectionHasOrderAdmins->set($record->get_base_id(), $hasOneAdmin[$record->get_base_id()]);
             if (!$hasOneAdmin[$record->get_base_id()]) {
                 $toRemove[] = $key;
             } else {
                 $orderElement = new OrderElement();
                 $order->addElement($orderElement);
                 $orderElement->setOrder($order);
                 $orderElement->setBaseId($record->get_base_id());
                 $orderElement->setRecordId($record->get_record_id());
                 $app['EM']->persist($orderElement);
             }
         }
         foreach ($toRemove as $key) {
             if ($records->containsKey($key)) {
                 $records->remove($key);
             }
         }
         $noAdmins = $collectionHasOrderAdmins->forAll(function ($key, $hasAdmin) {
             return false === $hasAdmin;
         });
         if ($noAdmins) {
             $msg = $app->trans('There is no one to validate orders, please contact an administrator');
         }
         $order->setTodo($order->getElements()->count());
         try {
             $app['events-manager']->trigger('__NEW_ORDER__', ['order_id' => $order->getId(), 'usr_id' => $order->getUser()->getId()]);
             $success = true;
             $app['EM']->persist($order);
             $app['EM']->flush();
         } catch (\Exception $e) {
         }
         if ($success) {
             $msg = $app->trans('The records have been properly ordered');
         } else {
             $msg = $app->trans('An error occured');
         }
     } else {
         $msg = $app->trans('There is no record eligible for an order');
     }
     if ('json' === $app['request']->getRequestFormat()) {
         return $app->json(['success' => $success, 'msg' => $msg]);
     }
     return $app->redirectPath('prod_orders', ['success' => (int) $success, 'action' => 'send']);
 }