CRM-13981, migrate honoree information to uf_join.module_data during upgrade
authormonishdeb <monish.deb@webaccess.co.in>
Wed, 14 May 2014 17:35:27 +0000 (23:05 +0530)
committermonishdeb <monish.deb@webaccess.co.in>
Wed, 14 May 2014 17:35:27 +0000 (23:05 +0530)
----------------------------------------
* CRM-13981: Migrate "In Honor of" to Soft Credits
  https://issues.civicrm.org/jira/browse/CRM-13981

CRM/Upgrade/Incremental/php/FourFive.php
CRM/Upgrade/Incremental/sql/4.5.alpha1.mysql.tpl

index f4c0b85016ed76a0ba0c4986a3a73f094f3162a2..caf71b2f32626921063c266239d992232022b2b7 100644 (file)
@@ -71,8 +71,8 @@ class CRM_Upgrade_Incremental_php_FourFive {
 
   function upgrade_4_5_alpha1($rev) {
     // task to process sql
+    $this->addTask(ts('Migrate honoree information to module_data'), 'migrateHonoreeInfo');
     $this->addTask(ts('Upgrade DB to 4.5.alpha1: SQL'), 'task_4_5_x_runSql', $rev);
-
     $this->addTask(ts('Set default for Individual name fields configuration'), 'addNameFieldOptions');
 
     // CRM-14522 - The below schema checking is done as foreign key name
@@ -124,6 +124,68 @@ DROP KEY `{$dao->CONSTRAINT_NAME}`";
     return TRUE;
   }
 
+  /**
+   * Migrate honoree information to uf_join.module_data as honoree columns (text and title) will be dropped
+   * on DB upgrade
+   *
+   * @param CRM_Queue_TaskContext $ctx
+   *
+   * @return bool TRUE for success
+   */
+  static function migrateHonoreeInfo(CRM_Queue_TaskContext $ctx) {
+    $query = "ALTER TABLE `civicrm_uf_join`
+    ADD COLUMN `module_data` longtext COMMENT 'Json serialized array of data used by the ufjoin.module'";
+      CRM_Core_DAO::executeQuery($query);
+
+    $honorTypes = array_keys(CRM_Core_OptionGroup::values('honor_type'));
+    $ufGroupDAO = new CRM_Core_DAO_UFGroup();
+    $ufGroupDAO->name = 'new_individual';
+    $ufGroupDAO->find(TRUE);
+
+    $query = "SELECT * FROM civicrm_contribution_page";
+    $dao = CRM_Core_DAO::executeQuery($query);
+
+    if ($dao->N) {
+      $domain = new CRM_Core_DAO_Domain;
+      $domain->find(TRUE);
+      while ($dao->fetch()) {
+        $honorParams = array('soft_credit' => array('soft_credit_types' => $honorTypes));
+        if ($domain->locales) {
+          $locales = explode(CRM_Core_DAO::VALUE_SEPARATOR, $domain->locales);
+          foreach ($locales as $locale) {
+            $honor_block_title =  "honor_block_title_{$locale}";
+            $honor_block_text =  "honor_block_text_{$locale}";
+            $honorParams['soft_credit'] += array(
+              $locale => array(
+                'honor_block_title' => $dao->$honor_block_title,
+                'honor_block_text' => $dao->$honor_block_text,
+              ),
+            );
+          }
+        }
+        else {
+          $honorParams['soft_credit'] += array(
+            'default' => array(
+              'honor_block_title' => $dao->honor_block_title,
+              'honor_block_text' => $dao->honor_block_text,
+            ),
+          );
+        }
+        $ufJoinParam = array(
+          'module' => 'soft_credit',
+          'entity_table' => 'civicrm_contribution_page',
+          'is_active' => $dao->honor_block_is_active,
+          'entity_id' => $dao->id,
+          'uf_group_id' => $ufGroupDAO->id,
+          'module_data' => json_encode($honorParams),
+        );
+        CRM_Core_BAO_UFJoin::create($ufJoinParam);
+      }
+    }
+
+    return TRUE;
+  }
+
   /**
    * (Queue Task Callback)
    */
index 88efde42fa57c8bc5cca2316fe1a94c3ecbb6cd8..fcde513b8a4107b5747505e5059872031bfe3a07 100644 (file)
@@ -134,9 +134,6 @@ VALUES
       (@uf_group_id_honoree_individual, 'last_name',  0, 1, 3, 'User and User Admin Only', 0, 1, NULL, {localize}'{ts escape="sql"}Last Name{/ts}'{/localize},         'Individual'),
       (@uf_group_id_honoree_individual, 'email',      0, 1, 4, 'User and User Admin Only', 0, 1, 1,    {localize}'{ts escape="sql"}Email Address{/ts}'{/localize},     'Individual');
 
-ALTER TABLE `civicrm_uf_join`
-  ADD COLUMN `module_data` longtext COMMENT 'Json serialized array of data used by the ufjoin.module';
-
 {if $multilingual}
   {foreach from=$locales item=loc}
      ALTER TABLE civicrm_contribution_page DROP honor_block_title_{$loc};