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;
$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);

View File

@@ -86,7 +86,7 @@ class patch_390alpha2a implements patchInterface
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';
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'];
}
}