RelationshipCache - Add case_id column
authorColeman Watts <coleman@civicrm.org>
Sat, 16 Oct 2021 20:19:19 +0000 (16:19 -0400)
committerColeman Watts <coleman@civicrm.org>
Tue, 19 Oct 2021 00:59:32 +0000 (20:59 -0400)
CRM/Contact/BAO/RelationshipCache.php
CRM/Contact/DAO/RelationshipCache.php
CRM/Upgrade/Incremental/php/FiveFortyFour.php
CRM/Upgrade/Incremental/sql/5.44.alpha1.mysql.tpl
xml/schema/Contact/RelationshipCache.xml

index 8681158e7a92a3ed1642b40111ca0b7e5ec85382..e4f6e6695c96ec1e6e336a0cb16374ca71b31ef9 100644 (file)
@@ -33,6 +33,7 @@ class CRM_Contact_BAO_RelationshipCache extends CRM_Contact_DAO_RelationshipCach
       'start_date' => 'rel.start_date',
       'end_date' => 'rel.end_date',
       'is_active' => 'rel.is_active',
+      'case_id' => 'rel.case_id',
     ],
     'b_a' => [
       'relationship_id' => 'rel.id',
@@ -45,6 +46,7 @@ class CRM_Contact_BAO_RelationshipCache extends CRM_Contact_DAO_RelationshipCach
       'start_date' => 'rel.start_date',
       'end_date' => 'rel.end_date',
       'is_active' => 'rel.is_active',
+      'case_id' => 'rel.case_id',
     ],
   ];
 
index 2adb4eea5cde731776789c5be29aa9ef39863b85..f9e0c8ecc7fbd08c9684d9fe1aed89686e8ad079 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/RelationshipCache.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0ebd9cc2623ee84848476636cfe86dcb)
+ * (GenCodeChecksum:f70f357cd7e45be254350f45ef41aee2)
  */
 
 /**
@@ -125,6 +125,13 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO {
    */
   public $end_date;
 
+  /**
+   * FK to civicrm_case
+   *
+   * @var int
+   */
+  public $case_id;
+
   /**
    * Class constructor.
    */
@@ -156,6 +163,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO {
       Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'relationship_type_id', 'civicrm_relationship_type', 'id');
       Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'near_contact_id', 'civicrm_contact', 'id');
       Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'far_contact_id', 'civicrm_contact', 'id');
+      Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'case_id', 'civicrm_case', 'id');
       CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']);
     }
     return Civi::$statics[__CLASS__]['links'];
@@ -372,6 +380,25 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO {
           'readonly' => TRUE,
           'add' => '5.29',
         ],
+        'case_id' => [
+          'name' => 'case_id',
+          'type' => CRM_Utils_Type::T_INT,
+          'title' => ts('Case ID'),
+          'description' => ts('FK to civicrm_case'),
+          'where' => 'civicrm_relationship_cache.case_id',
+          'default' => 'NULL',
+          'table_name' => 'civicrm_relationship_cache',
+          'entity' => 'RelationshipCache',
+          'bao' => 'CRM_Contact_BAO_RelationshipCache',
+          'localizable' => 0,
+          'FKClassName' => 'CRM_Case_DAO_Case',
+          'component' => 'CiviCase',
+          'html' => [
+            'label' => ts("Case"),
+          ],
+          'readonly' => TRUE,
+          'add' => '5.44',
+        ],
       ];
       CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']);
     }
index b1f2a48c43e0a4a8fec8f71fb4af67e714f72c3f..2714f32b1e88449765e15613eaccbcffd43e3f97 100644 (file)
@@ -49,27 +49,33 @@ class CRM_Upgrade_Incremental_php_FiveFortyFour extends CRM_Upgrade_Incremental_
     // }
   }
 
-  /*
-   * Important! All upgrade functions MUST add a 'runSql' task.
-   * Uncomment and use the following template for a new upgrade version
-   * (change the x in the function name):
+  /**
+   * Upgrade function.
+   * @param string $rev
    */
+  public function upgrade_5_44_alpha1($rev) {
+    // The runSql task populates the new column, so this addColumn task runs first
+    $this->addTask('Add case_id column to civicrm_relationship_cache', 'addColumn',
+      'civicrm_relationship_cache', 'case_id', "int unsigned DEFAULT NULL COMMENT 'FK to civicrm_case'"
+    );
+    $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev);
+    $this->addTask('Add FK to civicrm_relationship_cache.case_id', 'addRelationshipCacheCaseFK');
+  }
 
-  //  /**
-  //   * Upgrade function.
-  //   *
-  //   * @param string $rev
-  //   */
-  //  public function upgrade_5_0_x($rev): void {
-  //    $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev);
-  //    $this->addTask('Do the foo change', 'taskFoo', ...);
-  //    // Additional tasks here...
-  //    // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex.
-  //    // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable.
-  //  }
-
-  // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...): bool {
-  //   return TRUE;
-  // }
+  /**
+   * @param \CRM_Queue_TaskContext $ctx
+   * @return bool
+   */
+  public static function addRelationshipCacheCaseFK(CRM_Queue_TaskContext $ctx): bool {
+    if (!self::checkFKExists('civicrm_relationship_cache', 'FK_civicrm_relationship_cache_case_id')) {
+      CRM_Core_DAO::executeQuery("
+        ALTER TABLE `civicrm_relationship_cache`
+          ADD CONSTRAINT `FK_civicrm_relationship_cache_case_id`
+            FOREIGN KEY (`case_id`) REFERENCES `civicrm_case` (`id`)
+            ON DELETE CASCADE;
+      ", [], TRUE, NULL, FALSE, FALSE);
+    }
+    return TRUE;
+  }
 
 }
index 5164151af4ef1d9268a8e11c68f486eb492fe9be..2290afb544a7c6a20ab99ccea7b2c01c10c6b10e 100644 (file)
@@ -1 +1,4 @@
 {* file to handle db changes in 5.44.alpha1 during upgrade *}
+
+{* Polulate RelationshipCache.case_id column *}
+UPDATE `civicrm_relationship_cache` rc, `civicrm_relationship` r SET rc.case_id = r.case_id WHERE r.case_id IS NOT NULL AND r.id = rc.relationship_id;
index 0487942ed4757a98ef9e8de16c2ec3c29017c56f..e53094d61a35ce888c4534bc9a8f04797fed5e3c 100644 (file)
     </html>
     <readonly>true</readonly>
   </field>
+  <field>
+    <name>case_id</name>
+    <type>int unsigned</type>
+    <component>CiviCase</component>
+    <title>Case ID</title>
+    <default>NULL</default>
+    <comment>FK to civicrm_case</comment>
+    <html>
+      <label>Case</label>
+    </html>
+    <add>5.44</add>
+    <readonly>true</readonly>
+  </field>
+  <foreignKey>
+    <name>case_id</name>
+    <table>civicrm_case</table>
+    <key>id</key>
+    <add>2.2</add>
+    <onDelete>CASCADE</onDelete>
+  </foreignKey>
 </table>