From fba6b2500f1360b3e3ef636901d744e2e8571e3e Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Tue, 19 Nov 2013 11:26:29 +0100 Subject: [PATCH] Fix #1562 MigrationError --- lib/classes/patch/390alpha1b.php | 9 ++++--- lib/classes/patch/390alpha2a.php | 41 +++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/lib/classes/patch/390alpha1b.php b/lib/classes/patch/390alpha1b.php index 4af113c54c..f40db8f27b 100644 --- a/lib/classes/patch/390alpha1b.php +++ b/lib/classes/patch/390alpha1b.php @@ -79,12 +79,14 @@ class patch_390alpha1b implements patchInterface $n = 0; $em = $app['EM']; $em->getEventManager()->removeEventSubscriber(new TimestampableListener()); + $basketRepository = $em->getRepository('Alchemy\Phrasea\Model\Entities\Basket'); foreach ($rs as $row) { - - $sql = 'SELECT count(id) as todo FROM order_elements + $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); @@ -96,13 +98,14 @@ class patch_390alpha1b implements patchInterface ->setOrderUsage($row['usage']) ->setDeadline(new \DateTime($row['deadline'])) ->setCreatedOn(new \DateTime($row['created_on'])) - ->setBasket($row['ssel_id']); + ->setBasket($basketRepository->find($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([':id' => $row['id']]); $elements = $stmt->fetchAll(\PDO::FETCH_ASSOC); diff --git a/lib/classes/patch/390alpha2a.php b/lib/classes/patch/390alpha2a.php index 2a0267f569..434c1461ff 100644 --- a/lib/classes/patch/390alpha2a.php +++ b/lib/classes/patch/390alpha2a.php @@ -83,10 +83,10 @@ class patch_390alpha2a implements patchInterface private function updateUsers(EntityManager $em, $conn) { $sql = 'SELECT activite, adresse, create_db, canchgftpprofil, canchgprofil, ville, - societe, pays, usr_mail, fax, usr_prenom, geonameid, invite, fonction, last_conn, lastModel, - usr_nom, ldap_created, locale, usr_login, mail_locked, mail_notifications, nonce, usr_password, push_list, - request_notifications, salted_password, usr_sexe, tel, timezone, cpostal, usr_creationdate, usr_modificationdate - FROM usr WHERE model_of = 0'; + societe, pays, usr_mail, fax, usr_prenom, geonameid, invite, fonction, last_conn, lastModel, + usr_nom, ldap_created, locale, usr_login, mail_locked, mail_notifications, nonce, usr_password, push_list, + request_notifications, salted_password, usr_sexe, tel, timezone, cpostal, usr_creationdate, usr_modificationdate + FROM usr'; $stmt = $conn->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC); @@ -188,13 +188,15 @@ class patch_390alpha2a implements patchInterface $repository = $em->getRepository('Alchemy\Phrasea\Model\Entities\User'); foreach ($rows as $row) { - $user = $repository->findOneByLogin($row['usr_login']); + $template = $repository->findOneByLogin($row['usr_login']); - if (null === $template = $repository->find($row['model_of'])) { - $em->remove($user); + if (null === $loginOwner = $this->getLoginFromId($conn, $row['model_of'])) { + // remove template with no owner + $em->remove($template); } else { - $user->setModelOf($template); - $em->persist($user); + $owner = $repository->findOneByLogin($loginOwner); + $template->setModelOf($owner); + $em->persist($owner); } $n++; @@ -208,4 +210,25 @@ class patch_390alpha2a implements patchInterface $em->flush(); $em->clear(); } + + /** + * Returns user login from its id. + */ + private function getLoginFromId($conn, $id) + { + $sql = "SELECT usr_login + FROM usr + WHERE usr_id = :id"; + + $stmt = $conn->prepare($sql); + $stmt->execute([':id' => $id]); + $row = $stmt->fetch(\PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + if (count($row) === 0) { + return null; + } + + return $row['usr_login']; + } }