Ensure that civicrm_dashboard has a foreign key to civicrm_domain
authorSeamus Lee <seamuslee001@gmail.com>
Fri, 23 Aug 2019 08:29:22 +0000 (18:29 +1000)
committerSeamus Lee <seamuslee001@gmail.com>
Fri, 23 Aug 2019 21:33:23 +0000 (07:33 +1000)
Fix upgrade on multilingual installs

CRM/Core/BAO/SchemaHandler.php
CRM/Core/DAO/Dashboard.php
CRM/Upgrade/Incremental/php/FiveEighteen.php
xml/schema/Core/Dashboard.xml

index 004907fa127874aad356167f1ea4fbfa134a9a17..0b0ee3b5f9851af2fa2411972d93d2aeb8ff2abe 100644 (file)
@@ -626,7 +626,7 @@ MODIFY      {$columnName} varchar( $length )
       2 => [$table_name, 'String'],
       3 => [$constraint_name, 'String'],
     ];
-    $dao = CRM_Core_DAO::executeQuery($query, $params);
+    $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, NULL, FALSE, FALSE);
 
     if ($dao->fetch()) {
       return TRUE;
@@ -644,7 +644,7 @@ MODIFY      {$columnName} varchar( $length )
    */
   public static function safeRemoveFK($table_name, $constraint_name) {
     if (self::checkFKExists($table_name, $constraint_name)) {
-      CRM_Core_DAO::executeQuery("ALTER TABLE {$table_name} DROP FOREIGN KEY {$constraint_name}", []);
+      CRM_Core_DAO::executeQuery("ALTER TABLE {$table_name} DROP FOREIGN KEY {$constraint_name}", [], TRUE, NULL, FALSE, FALSE);
       return TRUE;
     }
     return FALSE;
index 026937454c374d971e8aa6aeaefafe0fac900362..f772fef1082d4b9b4fd98c2368b02700ada75e68 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Dashboard.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:2b085baa3414de05ee5c52a4d7d4f81f)
+ * (GenCodeChecksum:6fd1bfbecace855a159025ad31e37fb0)
  */
 
 /**
index 5d535d234f463a243c369341db6a8687b555c624..54af4a96574c1721a915dfbf738ee6f4d6b42390 100644 (file)
@@ -79,6 +79,25 @@ class CRM_Upgrade_Incremental_php_FiveEighteen extends CRM_Upgrade_Incremental_B
         ['old' => 'is_override', 'new' => 'member_is_override'],
       ],
     ]);
+    $this->addTask('Remove Foreign Key from civicrm_dashboard on domain_id if exists', 'removeDomainIDFK');
+    $this->addTask('Remove Index on domain_id that might have been randomly added in the same format as FK', 'dropIndex', 'civicrm_dashboard', 'FK_civicrm_dashboard_domain_id');
+    $this->addTask('Re-Create Foreign key between civicrm_dashboard and civicrm_domain correctly', 'recreateDashboardFK');
+  }
+
+  public static function removeDomainIDFK() {
+    CRM_Core_BAO_SchemaHandler::safeRemoveFK('civicrm_dashboard', 'FK_civicrm_dashboard_domain_id');
+    return TRUE;
+  }
+
+  public static function recreateDashboardFK() {
+    $sql = CRM_Core_BAO_SchemaHandler::buildForeignKeySQL([
+      'fk_table_name' => 'civicrm_domain',
+      'fk_field_name' => 'id',
+      'name' => 'domain_id',
+      'fk_attributes' => ' ON DELETE CASCADE',
+    ], "\n", " ADD ", 'civicrm_dashboard');
+    CRM_Core_DAO::executeQuery("ALTER TABLE civicrm_dashboard " . $sql, [], TRUE, NULL, FALSE, FALSE);
+    return TRUE;
   }
 
   // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...) {
index 41ed111374447b1832f6041175f96f27f025dc00..96da590e28381ff6c25bf6b7f7f4972270dcc950 100644 (file)
@@ -35,6 +35,7 @@
     <table>civicrm_domain</table>
     <key>id</key>
     <add>3.1</add>
+    <onDelete>CASCADE</onDelete>
   </foreignKey>
   <field>
     <name>name</name>