diff --git a/lib/classes/patch/3901.php b/lib/classes/patch/3901.php new file mode 100644 index 0000000000..fe7b7ba75a --- /dev/null +++ b/lib/classes/patch/3901.php @@ -0,0 +1,124 @@ +release; + } + + /** + * {@inheritdoc} + */ + public function require_all_upgrades() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function concern() + { + return $this->concern; + } + + /** + * {@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(array(':id' => $row['id'])); + $todo = $stmt->fetch(\PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + $order = new Order(); + $order->setUsrId($row['usr_id']) + ->setTodo($todo['todo']) + ->setOrderUsage($row['usage']) + ->setDeadline(new \DateTime($row['deadline'])) + ->setCreatedOn(new \DateTime($row['created_on'])) + ->setBasket($row['ssel_id']); + + $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(array(':id' => $row['id'])); + $elements = $stmt->fetchAll(\PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + foreach ($elements as $element) { + $orderElement = new OrderElement(); + $orderElement->setBaseId($element['base_id']) + ->setDeny($element['deny'] === null ? null : (Boolean) $element['deny']) + ->setOrder($order) + ->setOrderMasterId($element['order_master_id']) + ->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()); + } +}