/** * {@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(); }
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; }
/** * 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']); }