Managed - Minor schema fixes
authorcolemanw <coleman@civicrm.org>
Sun, 15 Oct 2023 20:48:37 +0000 (16:48 -0400)
committercolemanw <coleman@civicrm.org>
Mon, 16 Oct 2023 21:26:34 +0000 (17:26 -0400)
Increase size of 'module' column to match civicrm_extension.full_name
Makes name required and longer
Makes 'cleanup' required and declares explicitly the default value previously implied

CRM/Core/DAO/Managed.php
CRM/Core/ManagedEntities.php
CRM/Upgrade/Incremental/php/FiveSixtyEight.php
CRM/Upgrade/Incremental/sql/5.68.alpha1.mysql.tpl
Civi/Api4/Generic/ExportAction.php
xml/schema/Core/Managed.xml

index a82a5cae361932593e10237dcc9b91bf3ad09abb..cad889fc021d2cc143f3ea86e621a9e0dafaf176 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Managed.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:1f1273f734c559351767e25b05b3925e)
+ * (GenCodeChecksum:43846305220f9d67d37b9a1f910ad085)
  */
 
 /**
@@ -40,10 +40,10 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO {
   public $id;
 
   /**
-   * Name of the module which declared this object
+   * Name of the module which declared this object (soft FK to civicrm_extension.full_name)
    *
    * @var string
-   *   (SQL type: varchar(127))
+   *   (SQL type: varchar(255))
    *   Note that values will be retrieved from the database as a string.
    */
   public $module;
@@ -51,8 +51,8 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO {
   /**
    * Symbolic name used by the module to identify the object
    *
-   * @var string|null
-   *   (SQL type: varchar(127))
+   * @var string
+   *   (SQL type: varchar(255))
    *   Note that values will be retrieved from the database as a string.
    */
   public $name;
@@ -78,8 +78,8 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO {
   /**
    * Policy on when to cleanup entity (always, never, unused)
    *
-   * @var string|null
-   *   (SQL type: varchar(32))
+   * @var string
+   *   (SQL type: varchar(16))
    *   Note that values will be retrieved from the database as a string.
    */
   public $cleanup;
@@ -146,9 +146,9 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO {
           'name' => 'module',
           'type' => CRM_Utils_Type::T_STRING,
           'title' => ts('Module'),
-          'description' => ts('Name of the module which declared this object'),
+          'description' => ts('Name of the module which declared this object (soft FK to civicrm_extension.full_name)'),
           'required' => TRUE,
-          'maxlength' => 127,
+          'maxlength' => 255,
           'size' => CRM_Utils_Type::HUGE,
           'usage' => [
             'import' => FALSE,
@@ -161,6 +161,9 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO {
           'entity' => 'Managed',
           'bao' => 'CRM_Core_BAO_Managed',
           'localizable' => 0,
+          'pseudoconstant' => [
+            'callback' => 'CRM_Core_BAO_Managed::getBaseModules',
+          ],
           'add' => '4.2',
         ],
         'name' => [
@@ -168,7 +171,8 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO {
           'type' => CRM_Utils_Type::T_STRING,
           'title' => ts('Name'),
           'description' => ts('Symbolic name used by the module to identify the object'),
-          'maxlength' => 127,
+          'required' => TRUE,
+          'maxlength' => 255,
           'size' => CRM_Utils_Type::HUGE,
           'usage' => [
             'import' => FALSE,
@@ -228,8 +232,9 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO {
           'type' => CRM_Utils_Type::T_STRING,
           'title' => ts('Cleanup Setting'),
           'description' => ts('Policy on when to cleanup entity (always, never, unused)'),
-          'maxlength' => 32,
-          'size' => CRM_Utils_Type::MEDIUM,
+          'required' => TRUE,
+          'maxlength' => 16,
+          'size' => CRM_Utils_Type::TWELVE,
           'usage' => [
             'import' => FALSE,
             'export' => FALSE,
@@ -237,6 +242,7 @@ class CRM_Core_DAO_Managed extends CRM_Core_DAO {
             'token' => FALSE,
           ],
           'where' => 'civicrm_managed.cleanup',
+          'default' => 'always',
           'table_name' => 'civicrm_managed',
           'entity' => 'Managed',
           'bao' => 'CRM_Core_BAO_Managed',
index 82b03bc1f20bc9f8b171f1c39e7a6b65dcb63ef4..27353fd21b569ce4d931fc3da7ad1faebe99129c 100644 (file)
@@ -237,7 +237,7 @@ class CRM_Core_ManagedEntities {
     $dao->name = $item['name'];
     $dao->entity_type = $item['entity_type'];
     $dao->entity_id = $id;
-    $dao->cleanup = $item['cleanup'] ?? NULL;
+    $dao->cleanup = $item['cleanup'] ?? 'always';
     $dao->save();
   }
 
index 66421e94350a273e0f78bbdea08c530a824d1c4f..9a3f16a4d561b75fedae7bf081b08568c60f1491 100644 (file)
@@ -33,6 +33,9 @@ class CRM_Upgrade_Incremental_php_FiveSixtyEight extends CRM_Upgrade_Incremental
     $this->addTask('Update Tag.name field', 'alterColumn', 'civicrm_tag', 'name', "varchar(64) NOT NULL COMMENT 'Unique machine name'");
     $this->addTask('Update Tag.created_date field', 'alterColumn', 'civicrm_tag', 'created_date', "datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time that tag was created.'");
     $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev);
+    $this->addTask('Update civicrm_managed.module', 'alterColumn', 'civicrm_managed', 'module', "varchar(255) NOT NULL COMMENT 'Name of the module which declared this object (soft FK to civicrm_extension.full_name)'");
+    $this->addTask('Update civicrm_managed.name', 'alterColumn', 'civicrm_managed', 'name', "varchar(255) NOT NULL COMMENT 'Symbolic name used by the module to identify the object'");
+    $this->addTask('Update civicrm_managed.cleanup', 'alterColumn', 'civicrm_managed', 'cleanup', "varchar(16) NOT NULL DEFAULT 'always' COMMENT 'Policy on when to cleanup entity (always, never, unused)'");
   }
 
 }
index 9a2b0a2373aef3fae29bf80d17145967150ee478..d7d9ad9e5571a42a192899f588cbf7ab1bd1b516 100644 (file)
@@ -1,3 +1,8 @@
 {* file to handle db changes in 5.68.alpha1 during upgrade *}
 
 UPDATE `civicrm_tag` SET `label` = `name` WHERE `label` = '';
+
+{* This column is now required. Delete any null values; a managed entity without a name is useless *}
+DELETE FROM civicrm_managed WHERE name IS NULL;
+{* This column is now required. Set to default value if null or invalid *}
+UPDATE civicrm_managed SET cleanup = 'always' WHERE cleanup IS NULL OR cleanup NOT IN ('always', 'never', 'unused');
index 13b660ec7792991ac03fb6f27f54f5dc54206eae..1644b7fae23acf7e6932f837877a1008784eab0f 100644 (file)
@@ -140,8 +140,11 @@ class ExportAction extends AbstractAction {
       }
     }
     $name = ($parentName ?? '') . $entityType . '_' . ($record['name'] ?? count($this->exportedEntities[$entityType]));
-    // Ensure safe characters, max length
-    $name = \CRM_Utils_String::munge($name, '_', 127);
+    // Ensure safe characters, max length.
+    // This is used for the value of `civicrm_managed.name` which has a maxlength of 255, but is also used
+    // to generate a file by civix, and many filesystems have a maxlength of 255 including the suffix, so
+    // 255 - strlen('.mgd.php') = 247
+    $name = \CRM_Utils_String::munge($name, '_', 247);
     // Include option group with custom field
     if ($entityType === 'CustomField') {
       if (
index 43de469c9d367d84ef09c376865de9773a8a8168..f5af8a98ba51f37628a1a3b9f17937e41768b97b 100644 (file)
     <name>module</name>
     <title>Module</title>
     <type>varchar</type>
-    <length>127</length>
+    <length>255</length>
     <required>true</required>
-    <comment>Name of the module which declared this object</comment>
+    <comment>Name of the module which declared this object (soft FK to civicrm_extension.full_name)</comment>
+    <pseudoconstant>
+      <callback>CRM_Core_BAO_Managed::getBaseModules</callback>
+    </pseudoconstant>
     <add>4.2</add>
   </field>
   <field>
     <name>name</name>
     <title>Name</title>
     <type>varchar</type>
-    <length>127</length>
+    <length>255</length>
+    <required>true</required>
     <comment>Symbolic name used by the module to identify the object</comment>
     <add>4.2</add>
   </field>
@@ -67,7 +71,9 @@
     <name>cleanup</name>
     <title>Cleanup Setting</title>
     <type>varchar</type>
-    <length>32</length>
+    <length>16</length>
+    <required>true</required>
+    <default>'always'</default>
     <comment>Policy on when to cleanup entity (always, never, unused)</comment>
     <pseudoconstant>
       <callback>CRM_Core_ManagedEntities::getCleanupOptions</callback>