CRM-13768 - enable_components - Use same logic when toggling components via API and...
authorTim Otten <totten@civicrm.org>
Fri, 15 Nov 2013 08:07:20 +0000 (00:07 -0800)
committerTim Otten <totten@civicrm.org>
Fri, 15 Nov 2013 08:09:10 +0000 (00:09 -0800)
----------------------------------------
* CRM-13768: CiviCase not fully activated during extension installation
  http://issues.civicrm.org/jira/browse/CRM-13768

CRM/Admin/Form/Setting/Component.php
CRM/Case/Info.php
settings/Core.setting.php

index ecae5f3068b4bdb0aa5b49804d467be72b771863..6e10018ef6c388a6694e434c9ab9427c7498b373 100644 (file)
@@ -108,19 +108,7 @@ class CRM_Admin_Form_Setting_Component extends CRM_Admin_Form_Setting {
   public function postProcess() {
     $params = $this->controller->exportValues($this->_name);
 
-    // if CiviCase is being enabled,
-    // load the case related sample data
-    if (in_array('CiviCase', $params['enableComponents']) &&
-      !in_array('CiviCase', $this->_defaults['enableComponents'])
-    ) {
-      $config = CRM_Core_Config::singleton();
-      CRM_Admin_Form_Setting_Component::loadCaseSampleData($config->dsn, $config->sqlDir . 'case_sample.mysql');
-      CRM_Admin_Form_Setting_Component::loadCaseSampleData($config->dsn, $config->sqlDir . 'case_sample1.mysql');
-      if (!CRM_Case_BAO_Case::createCaseViews()) {
-        $msg = ts("Could not create the MySQL views for CiviCase. Your mysql user needs to have the 'CREATE VIEW' permission");
-        CRM_Core_Error::fatal($msg);
-      }
-    }
+    CRM_Case_Info::onToggleComponents($this->_defaults['enableComponents'], $params['enableComponents'], NULL);
     parent::commonProcess($params);
 
     // reset navigation when components are enabled / disabled
index c9183e5f6306d537d0758fd70d69cb403c39b6ed..14346fabbf169a38ae8f7cb94283405d5a62293f 100644 (file)
@@ -152,5 +152,29 @@ class CRM_Case_Info extends CRM_Core_Component_Info {
       }
     }
   }
+
+  /**
+   * (Setting Callback)
+   * Respond to changes in the "enable_components" setting
+   *
+   * If CiviCase is being enabled, load the case related sample data
+   *
+   * @param array $oldValue List of component names
+   * @param array $newValue List of component names
+   * @param array $metadata Specification of the setting (per *.settings.php)
+   */
+  public static function onToggleComponents($oldValue, $newValue, $metadata) {
+    if (in_array('CiviCase', $newValue) &&
+      !in_array('CiviCase', $oldValue)
+    ) {
+      $config = CRM_Core_Config::singleton();
+      CRM_Admin_Form_Setting_Component::loadCaseSampleData($config->dsn, $config->sqlDir . 'case_sample.mysql');
+      CRM_Admin_Form_Setting_Component::loadCaseSampleData($config->dsn, $config->sqlDir . 'case_sample1.mysql');
+      if (!CRM_Case_BAO_Case::createCaseViews()) {
+        $msg = ts("Could not create the MySQL views for CiviCase. Your mysql user needs to have the 'CREATE VIEW' permission");
+        CRM_Core_Error::fatal($msg);
+      }
+    }
+  }
 }
 
index e9a0f7bb51f445019cc782d7ff4a2710f2344639..b5031dd24f29775c0d1e6676de1643010e55480b 100644 (file)
@@ -626,6 +626,9 @@ When enabled, statistics about your CiviCRM installation are reported anonymousl
     'is_contact' => 0,
     'description' => null,
     'help_text'   => null,
+    'on_change' => array(
+      array('CRM_Case_Info', 'onToggleComponents')
+    ),
   ),
 
   'disable_core_css' => array(