Merge pull request #794 from nlegoff/fix1562

Fix #1562 Migration Error
This commit is contained in:
Romain Neutron
2013-11-22 00:20:29 -08:00
2 changed files with 38 additions and 12 deletions

View File

@@ -79,12 +79,14 @@ class patch_390alpha1b implements patchInterface
$n = 0; $n = 0;
$em = $app['EM']; $em = $app['EM'];
$em->getEventManager()->removeEventSubscriber(new TimestampableListener()); $em->getEventManager()->removeEventSubscriber(new TimestampableListener());
$basketRepository = $em->getRepository('Alchemy\Phrasea\Model\Entities\Basket');
foreach ($rs as $row) { foreach ($rs as $row) {
$sql = 'SELECT count(id) as todo
$sql = 'SELECT count(id) as todo FROM order_elements FROM order_elements
WHERE deny = NULL WHERE deny = NULL
AND order_id = :id'; AND order_id = :id';
$stmt = $conn->prepare($sql); $stmt = $conn->prepare($sql);
$stmt->execute([':id' => $row['id']]); $stmt->execute([':id' => $row['id']]);
$todo = $stmt->fetch(\PDO::FETCH_ASSOC); $todo = $stmt->fetch(\PDO::FETCH_ASSOC);
@@ -96,13 +98,14 @@ class patch_390alpha1b implements patchInterface
->setOrderUsage($row['usage']) ->setOrderUsage($row['usage'])
->setDeadline(new \DateTime($row['deadline'])) ->setDeadline(new \DateTime($row['deadline']))
->setCreatedOn(new \DateTime($row['created_on'])) ->setCreatedOn(new \DateTime($row['created_on']))
->setBasket($row['ssel_id']); ->setBasket($basketRepository->find($row['ssel_id']));
$em->persist($order); $em->persist($order);
$sql = 'SELECT base_id, record_id, order_master_id, deny $sql = 'SELECT base_id, record_id, order_master_id, deny
FROM order_elements FROM order_elements
WHERE order_id = :id'; WHERE order_id = :id';
$stmt = $conn->prepare($sql); $stmt = $conn->prepare($sql);
$stmt->execute([':id' => $row['id']]); $stmt->execute([':id' => $row['id']]);
$elements = $stmt->fetchAll(\PDO::FETCH_ASSOC); $elements = $stmt->fetchAll(\PDO::FETCH_ASSOC);

View File

@@ -83,10 +83,10 @@ class patch_390alpha2a implements patchInterface
private function updateUsers(EntityManager $em, $conn) private function updateUsers(EntityManager $em, $conn)
{ {
$sql = 'SELECT activite, adresse, create_db, canchgftpprofil, canchgprofil, ville, $sql = 'SELECT activite, adresse, create_db, canchgftpprofil, canchgprofil, ville,
societe, pays, usr_mail, fax, usr_prenom, geonameid, invite, fonction, last_conn, lastModel, 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, 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 request_notifications, salted_password, usr_sexe, tel, timezone, cpostal, usr_creationdate, usr_modificationdate
FROM usr WHERE model_of = 0'; FROM usr';
$stmt = $conn->prepare($sql); $stmt = $conn->prepare($sql);
$stmt->execute(); $stmt->execute();
$rows = $stmt->fetchAll(\PDO::FETCH_ASSOC); $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
@@ -188,13 +188,15 @@ class patch_390alpha2a implements patchInterface
$repository = $em->getRepository('Alchemy\Phrasea\Model\Entities\User'); $repository = $em->getRepository('Alchemy\Phrasea\Model\Entities\User');
foreach ($rows as $row) { foreach ($rows as $row) {
$user = $repository->findOneByLogin($row['usr_login']); $template = $repository->findOneByLogin($row['usr_login']);
if (null === $template = $repository->find($row['model_of'])) { if (null === $loginOwner = $this->getLoginFromId($conn, $row['model_of'])) {
$em->remove($user); // remove template with no owner
$em->remove($template);
} else { } else {
$user->setModelOf($template); $owner = $repository->findOneByLogin($loginOwner);
$em->persist($user); $template->setModelOf($owner);
$em->persist($owner);
} }
$n++; $n++;
@@ -208,4 +210,25 @@ class patch_390alpha2a implements patchInterface
$em->flush(); $em->flush();
$em->clear(); $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'];
}
} }