Author: sevein
Date: Mon Aug 27 04:29:43 2012
New Revision: 12207

Log:
Change order of operations when adding new constants: first, bump existing 
records, then store the new one (s/addTerm/bumpTerm, s/addMenu/bumpMenu...). 
This solves some problems I was having with saving i18n records. Tested with 
*15* different production data sets, it is working with all of them now. Fixes 
issue 2404.

Modified:
   trunk/lib/task/migrate/QubitMigrate.class.php
   trunk/lib/task/migrate/arUpgrader110.class.php
   trunk/lib/task/migrate/arUpgrader120.class.php

Modified: trunk/lib/task/migrate/QubitMigrate.class.php
==============================================================================
--- trunk/lib/task/migrate/QubitMigrate.class.php       Mon Aug 27 00:02:35 
2012        (r12206)
+++ trunk/lib/task/migrate/QubitMigrate.class.php       Mon Aug 27 04:29:43 
2012        (r12207)
@@ -463,38 +463,43 @@
     QubitPdo::modify("ALTER TABLE object AUTO_INCREMENT = $last");
   }
 
-  public static function addTerm(QubitTerm $object, $configuration)
+  public static function bumpTerm($id, $configuration)
   {
+    if (!isset($configuration))
+    {
+      throw new sfException('Missing parameter');
+    }
+
+    // Stop execution if there is no record
+    if (null === QubitTerm::getById($id))
+    {
+      return;
+    }
+
     $connection = Propel::getConnection();
 
     $connection->beginTransaction();
 
     try
     {
-      // Check if it already exists
-      if (isset($object->id) && null !== QubitTerm::getById($object->id))
-      {
-        $connection->exec('SET FOREIGN_KEY_CHECKS = 0');
-
-        // Get new autonumeric
-        $last = QubitPdo::fetchOne('SELECT (MAX(id) + 1) AS last FROM 
object')->last;
+      $connection->exec('SET FOREIGN_KEY_CHECKS = 0');
 
-        $foreignKeys = self::findForeignKeys(array(QubitObject::TABLE_NAME, 
QubitTerm::TABLE_NAME), $configuration);
+      // Get new autonumeric
+      $last = QubitPdo::fetchOne('SELECT (MAX(id) + 1) AS last FROM 
object')->last;
 
-        foreach ($foreignKeys as $item)
-        {
-          QubitPdo::modify(
-            "UPDATE $item[table] SET $item[column] = ? WHERE $item[column] = 
?", array(
-              $last,
-              $object->id));
-        }
+      $foreignKeys = self::findForeignKeys(array(QubitObject::TABLE_NAME, 
QubitTerm::TABLE_NAME), $configuration);
 
-        $connection->exec('SET FOREIGN_KEY_CHECKS = 1');
-
-        self::updateAutoNumeric();
+      foreach ($foreignKeys as $item)
+      {
+        $a = QubitPdo::modify(
+          "UPDATE $item[table] SET $item[column] = ? WHERE $item[column] = ?", 
array(
+            $last,
+            $id));
       }
 
-      $object->save();
+      $connection->exec('SET FOREIGN_KEY_CHECKS = 1');
+
+      self::updateAutoNumeric();
     }
     catch (Exception $e)
     {
@@ -506,38 +511,43 @@
     $connection->commit();
   }
 
-  public static function addTaxonomy(QubitTaxonomy $object, $configuration)
+  public static function bumpTaxonomy($id, $configuration)
   {
+    if (!isset($configuration))
+    {
+      throw new sfException('Missing parameter');
+    }
+
+    // Stop execution if there is no record
+    if (null === QubitTaxonomy::getById($id))
+    {
+      return;
+    }
+
     $connection = Propel::getConnection();
 
     $connection->beginTransaction();
 
     try
     {
-      // Check if it already exists
-      if (isset($object->id) && null !== QubitTaxonomy::getById($object->id))
-      {
-        $connection->exec('SET FOREIGN_KEY_CHECKS = 0');
-
-        // Get new autonumeric
-        $last = QubitPdo::fetchOne('SELECT (MAX(id) + 1) AS last FROM 
object')->last;
-
-        $foreignKeys = self::findForeignKeys(array(QubitObject::TABLE_NAME, 
QubitTaxonomy::TABLE_NAME), $configuration);
+      $connection->exec('SET FOREIGN_KEY_CHECKS = 0');
 
-        foreach ($foreignKeys as $item)
-        {
-          QubitPdo::modify(
-            "UPDATE $item[table] SET $item[column] = ? WHERE $item[column] = 
?", array(
-              $last,
-              $object->id));
-        }
+      // Get new autonumeric
+      $last = QubitPdo::fetchOne('SELECT (MAX(id) + 1) AS last FROM 
object')->last;
 
-        $connection->exec('SET FOREIGN_KEY_CHECKS = 1');
+      $foreignKeys = self::findForeignKeys(array(QubitObject::TABLE_NAME, 
QubitTaxonomy::TABLE_NAME), $configuration);
 
-        self::updateAutoNumeric();
+      foreach ($foreignKeys as $item)
+      {
+        QubitPdo::modify(
+          "UPDATE $item[table] SET $item[column] = ? WHERE $item[column] = ?", 
array(
+            $last,
+            $id));
       }
 
-      $object->save();
+      $connection->exec('SET FOREIGN_KEY_CHECKS = 1');
+
+      self::updateAutoNumeric();
     }
     catch (Exception $e)
     {
@@ -549,36 +559,41 @@
     $connection->commit();
   }
 
-  public static function addMenu(QubitMenu $object, $configuration)
+  public static function bumpMenu($id, $configuration)
   {
+    if (!isset($configuration))
+    {
+      throw new sfException('Missing parameter');
+    }
+
+    // Stop execution if there is no record
+    if (null === QubitMenu::getById($id))
+    {
+      return;
+    }
+
     $connection = Propel::getConnection();
 
     $connection->beginTransaction();
 
     try
     {
-      // Check if it already exists
-      if (isset($object->id) && null !== QubitMenu::getById($object->id))
-      {
-        $connection->exec('SET FOREIGN_KEY_CHECKS = 0');
+      $connection->exec('SET FOREIGN_KEY_CHECKS = 0');
 
-        // Get new autonumeric
-        $last = QubitPdo::fetchOne('SELECT (MAX(id) + 1) AS last FROM 
object')->last;
+      // Get new autonumeric
+      $last = QubitPdo::fetchOne('SELECT (MAX(id) + 1) AS last FROM 
object')->last;
 
-        $foreignKeys = self::findForeignKeys(array(QubitMenu::TABLE_NAME), 
$configuration);
+      $foreignKeys = self::findForeignKeys(array(QubitMenu::TABLE_NAME), 
$configuration);
 
-        foreach ($foreignKeys as $item)
-        {
-          QubitPdo::modify(
-            "UPDATE $item[table] SET $item[column] = ? WHERE $item[column] = 
?", array(
-              $last,
-              $object->id));
-        }
-
-        self::updateAutoNumeric();
+      foreach ($foreignKeys as $item)
+      {
+        QubitPdo::modify(
+          "UPDATE $item[table] SET $item[column] = ? WHERE $item[column] = ?", 
array(
+            $last,
+            $id));
       }
 
-      $object->save();
+      self::updateAutoNumeric();
     }
     catch (Exception $e)
     {

Modified: trunk/lib/task/migrate/arUpgrader110.class.php
==============================================================================
--- trunk/lib/task/migrate/arUpgrader110.class.php      Mon Aug 27 00:02:35 
2012        (r12206)
+++ trunk/lib/task/migrate/arUpgrader110.class.php      Mon Aug 27 04:29:43 
2012        (r12207)
@@ -98,14 +98,15 @@
         }
 
         // Create manage menu node
+        QubitMigrate::bumpMenu(QubitMenu::MANAGE_ID, $configuration);
         $node = new QubitMenu;
         $node->id = QubitMenu::MANAGE_ID;
         $node->parentId = QubitMenu::MAIN_MENU_ID;
         $node->name = 'manage';
         $node->path = 'accession/browse';
+        $node->label = 'Manage';
 
         foreach (array(
-          'en' => 'Manage',
           'es' => 'Administrar',
           'fr' => 'Gérer',
           'pl' => 'Zarządzanie',
@@ -118,7 +119,7 @@
           $node->menuI18ns[] = $nodeI18n;
         }
 
-        QubitMigrate::addMenu($node, $configuration);
+        $node->save();
 
         // Introduce it after "add"
         if (null !== $target = QubitMenu::getByName('add'))
@@ -221,44 +222,42 @@
         }
 
         // New type of relation: accession
+        QubitMigrate::bumpTerm(QubitTerm::ACCESSION_ID, $configuration);
         $term = new QubitTerm;
         $term->id = QubitTerm::ACCESSION_ID;
         $term->parentId = QubitTerm::ROOT_ID;
         $term->taxonomyId = QubitTaxonomy::RELATION_TYPE_ID;
-        $termI18n = new QubitTermI18n;
-        $termI18n->name = 'Accession';
-        $termI18n->culture = 'en';
-        $term->termI18ns[] = $termI18n;
-        QubitMigrate::addTerm($term, $configuration);
+        $term->name = 'Accession';
+        $term->culture = 'en';
+        $term->save();
 
         // New type of relation: right
+        QubitMigrate::bumpTerm(QubitTerm::RIGHT_ID, $configuration);
         $term = new QubitTerm;
         $term->id = QubitTerm::RIGHT_ID;
         $term->parentId = QubitTerm::ROOT_ID;
         $term->taxonomyId = QubitTaxonomy::RELATION_TYPE_ID;
-        $termI18n = new QubitTermI18n;
-        $termI18n->name = 'Right';
-        $termI18n->culture = 'en';
-        $term->termI18ns[] = $termI18n;
-        QubitMigrate::addTerm($term, $configuration);
+        $term->name = 'Right';
+        $term->culture = 'en';
+        $term->save();
 
         // New type of relation: donor
+        QubitMigrate::bumpTerm(QubitTerm::DONOR_ID, $configuration);
         $term = new QubitTerm;
         $term->id = QubitTerm::DONOR_ID;
         $term->parentId = QubitTerm::ROOT_ID;
         $term->taxonomyId = QubitTaxonomy::RELATION_TYPE_ID;
-        $termI18n = new QubitTermI18n;
-        $termI18n->name = 'Donor';
-        $termI18n->culture = 'en';
-        $term->termI18ns[] = $termI18n;
-        QubitMigrate::addTerm($term, $configuration);
+        $term->name = 'Donor';
+        $term->culture = 'en';
+        $term->save();
 
         // Accession resource type taxonomy and its terms
+        QubitMigrate::bumpTaxonomy(QubitTaxonomy::ACCESSION_RESOURCE_TYPE_ID, 
$configuration);
         $taxonomy = new QubitTaxonomy;
         $taxonomy->id = QubitTaxonomy::ACCESSION_RESOURCE_TYPE_ID;
         $taxonomy->name = 'Accession resource type';
         $taxonomy->culture = 'en';
-        QubitMigrate::addTaxonomy($taxonomy, $configuration);
+        $taxonomy->save();
 
         foreach (array(
           'Public transfer',
@@ -270,15 +269,16 @@
           $term->taxonomyId = QubitTaxonomy::ACCESSION_RESOURCE_TYPE_ID;
           $term->name = $item;
           $term->culture = 'en';
-          QubitMigrate::addTerm($term, $configuration);
+          $term->save();
         }
 
         // Accession acquisition type taxonomy and its terms
+        
QubitMigrate::bumpTaxonomy(QubitTaxonomy::ACCESSION_ACQUISITION_TYPE_ID, 
$configuration);
         $taxonomy = new QubitTaxonomy;
         $taxonomy->id = QubitTaxonomy::ACCESSION_ACQUISITION_TYPE_ID;
         $taxonomy->name = 'Accession acquisition type';
         $taxonomy->culture = 'en';
-        QubitMigrate::addTaxonomy($taxonomy, $configuration);
+        $taxonomy->save();
 
         foreach (array(
           'Deposit',
@@ -291,15 +291,16 @@
           $term->taxonomyId = QubitTaxonomy::ACCESSION_ACQUISITION_TYPE_ID;
           $term->name = $item;
           $term->culture = 'en';
-          QubitMigrate::addTerm($term, $configuration);
+          $term->save();
         }
 
         // Processing priority taxonomy and terms
+        
QubitMigrate::bumpTaxonomy(QubitTaxonomy::ACCESSION_PROCESSING_PRIORITY_ID, 
$configuration);
         $taxonomy = new QubitTaxonomy;
         $taxonomy->id = QubitTaxonomy::ACCESSION_PROCESSING_PRIORITY_ID;
         $taxonomy->name = 'Processing priority';
         $taxonomy->culture = 'en';
-        QubitMigrate::addTaxonomy($taxonomy, $configuration);
+        $taxonomy->save();
 
         foreach (array(
           'High',
@@ -311,15 +312,16 @@
           $term->taxonomyId = QubitTaxonomy::ACCESSION_PROCESSING_PRIORITY_ID;
           $term->name = $item;
           $term->culture = 'en';
-          QubitMigrate::addTerm($term, $configuration);
+          $term->save();
         }
 
         // Processing status taxonomy and terms
+        
QubitMigrate::bumpTaxonomy(QubitTaxonomy::ACCESSION_PROCESSING_STATUS_ID, 
$configuration);
         $taxonomy = new QubitTaxonomy;
         $taxonomy->id = QubitTaxonomy::ACCESSION_PROCESSING_STATUS_ID;
         $taxonomy->name = 'Processing status';
         $taxonomy->culture = 'en';
-        QubitMigrate::addTaxonomy($taxonomy, $configuration);
+        $taxonomy->save();
 
         foreach (array(
           'Complete',
@@ -331,15 +333,16 @@
           $term->taxonomyId = QubitTaxonomy::ACCESSION_PROCESSING_STATUS_ID;
           $term->name = $item;
           $term->culture = 'en';
-          QubitMigrate::addTerm($term, $configuration);
+          $term->save();
         }
 
         // Deaccession scope taxonomy and terms
+        QubitMigrate::bumpTaxonomy(QubitTaxonomy::DEACCESSION_SCOPE_ID, 
$configuration);
         $taxonomy = new QubitTaxonomy;
         $taxonomy->id = QubitTaxonomy::DEACCESSION_SCOPE_ID;
         $taxonomy->name = 'Deaccession scope';
         $taxonomy->culture = 'en';
-        QubitMigrate::addTaxonomy($taxonomy, $configuration);
+        $taxonomy->save();
 
         foreach (array(
           'Whole',
@@ -350,15 +353,16 @@
           $term->taxonomyId = QubitTaxonomy::DEACCESSION_SCOPE_ID;
           $term->name = $item;
           $term->culture = 'en';
-          QubitMigrate::addTerm($term, $configuration);
+          QubitMigrate::bumpTerm($term, $configuration);
         }
 
         // Right act taxonomy and terms
+        QubitMigrate::bumpTaxonomy(QubitTaxonomy::RIGHT_ACT_ID, 
$configuration);
         $taxonomy = new QubitTaxonomy;
         $taxonomy->id = QubitTaxonomy::RIGHT_ACT_ID;
         $taxonomy->name = 'Rights act';
         $taxonomy->culture = 'en';
-        QubitMigrate::addTaxonomy($taxonomy);
+        $taxonomy->save();
 
         foreach (array(
           'Delete',
@@ -374,15 +378,16 @@
           $term->taxonomyId = QubitTaxonomy::RIGHT_ACT_ID;
           $term->name = $item;
           $term->culture = 'en';
-          QubitMigrate::addTerm($term, $configuration);
+          $term->save();
         }
 
         // Right basis taxonomy and terms
+        QubitMigrate::bumpTaxonomy(QubitTaxonomy::RIGHT_BASIS_ID, 
$configuration);
         $taxonomy = new QubitTaxonomy;
         $taxonomy->id = QubitTaxonomy::RIGHT_BASIS_ID;
         $taxonomy->name = 'Rights basis';
         $taxonomy->culture = 'en';
-        QubitMigrate::addTaxonomy($taxonomy);
+        $taxonomy->save();
 
         foreach (array(
           'Copyright',
@@ -396,15 +401,16 @@
           $term->taxonomyId = QubitTaxonomy::RIGHT_BASIS_ID;
           $term->name = $item;
           $term->culture = 'en';
-          QubitMigrate::addTerm($term, $configuration);
+          $term->save();
         }
 
         // Copyright status taxonomy and terms
+        QubitMigrate::bumpTaxonomy(QubitTaxonomy::COPYRIGHT_STATUS_ID, 
$configuration);
         $taxonomy = new QubitTaxonomy;
         $taxonomy->id = QubitTaxonomy::COPYRIGHT_STATUS_ID;
         $taxonomy->name = 'Copyright status';
         $taxonomy->culture = 'en';
-        QubitMigrate::addTaxonomy($taxonomy);
+        $taxonomy->save();
 
         foreach (array(
           'Under copyright',
@@ -416,7 +422,7 @@
           $term->taxonomyId = QubitTaxonomy::COPYRIGHT_STATUS_ID;
           $term->name = $item;
           $term->culture = 'en';
-          QubitMigrate::addTerm($term, $configuration);
+          $term->save();
         }
 
         break;

Modified: trunk/lib/task/migrate/arUpgrader120.class.php
==============================================================================
--- trunk/lib/task/migrate/arUpgrader120.class.php      Mon Aug 27 00:02:35 
2012        (r12206)
+++ trunk/lib/task/migrate/arUpgrader120.class.php      Mon Aug 27 04:29:43 
2012        (r12207)
@@ -101,16 +101,15 @@
 
       // Add 'Language note' term
       case 79:
+
+        QubitMigrate::bumpTerm(QubitTerm::LANGUAGE_NOTE_ID, $configuration);
         $term = new QubitTerm;
         $term->id = QubitTerm::LANGUAGE_NOTE_ID;
         $term->parentId = QubitTerm::ROOT_ID;
         $term->taxonomyId = QubitTaxonomy::NOTE_TYPE_ID;
-        $termI18n = new QubitTermI18n;
-        $termI18n->name = 'Language note';
-        $termI18n->culture = 'en';
-        $term->termI18ns[] = $termI18n;
-
-        QubitMigrate::addTerm($term, $configuration);
+        $term->name = 'Language note';
+        $term->culture = 'en';
+        $term->save();
 
         break;
 
@@ -262,15 +261,14 @@
 
       // Add accrual constant to term table
       case 84:
+        QubitMigrate::bumpTerm(QubitTerm::ACCRUAL_ID, $configuration);
         $term = new QubitTerm;
         $term->id = QubitTerm::ACCRUAL_ID;
         $term->parentId = QubitTerm::ROOT_ID;
         $term->taxonomyId = QubitTaxonomy::RELATION_TYPE_ID;
-        $termI18n = new QubitTermI18n;
-        $termI18n->culture = 'en';
-        $termI18n->name = 'Accrual';
-        $term->termI18ns[] = $termI18n;
-        QubitMigrate::addTerm($term, $configuration);
+        $term->culture = 'en';
+        $term->name = 'Accrual';
+        $term->save();
 
         break;
 
@@ -300,11 +298,9 @@
           $term->id = QubitTerm::RIGHT_ID;
           $term->parentId = QubitTerm::ROOT_ID;
           $term->taxonomyId = QubitTaxonomy::RELATION_TYPE_ID;
-          $termI18n = new QubitTermI18n;
-          $termI18n->name = 'Right';
-          $termI18n->culture = 'en';
-          $term->termI18ns[] = $termI18n;
-          QubitMigrate::addTerm($term, $configuration);
+          $term->name = 'Right';
+          $term->culture = 'en';
+          $term->save();
         }
 
         // Type of relation: donor
@@ -321,11 +317,9 @@
           $term->id = QubitTerm::DONOR_ID;
           $term->parentId = QubitTerm::ROOT_ID;
           $term->taxonomyId = QubitTaxonomy::RELATION_TYPE_ID;
-          $termI18n = new QubitTermI18n;
-          $termI18n->name = 'Donor';
-          $termI18n->culture = 'en';
-          $term->termI18ns[] = $termI18n;
-          QubitMigrate::addTerm($term, $configuration);
+          $term->name = 'Donor';
+          $term->culture = 'en';
+          $term->save();
         }
 
         break;

-- 
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/qubit-commits?hl=en.

Reply via email to