CRM-12039 - Add checkRequirements to CRM_Extension_Container_Interface
authorTim Otten <totten@civicrm.org>
Thu, 7 Mar 2013 02:17:50 +0000 (21:17 -0500)
committerTim Otten <totten@civicrm.org>
Thu, 7 Mar 2013 02:17:50 +0000 (21:17 -0500)
CRM/Extension/Container/Basic.php
CRM/Extension/Container/Collection.php
CRM/Extension/Container/Interface.php

index c6fe7a674b1d1b0ba2b40761efc6f62b3ba8d47a..696700b8175a0af1c2f168bf011e12a012b8d660 100644 (file)
@@ -96,6 +96,29 @@ class CRM_Extension_Container_Basic implements CRM_Extension_Container_Interface
     $this->baseUrl = rtrim($baseUrl, '/');
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function checkRequirements() {
+    $errors = array();
+
+    if (empty($this->baseDir) || !is_dir($this->baseDir)) {
+      $errors[] = array(
+        'title' => ts('Invalid Base Directory'),
+        'message' => ts('An extension container has been defined with a blank directory.'),
+      );
+    }
+    if (empty($this->baseUrl)) {
+      dpm($this);
+      $errors[] = array(
+        'title' => ts('Invalid Base URL'),
+        'message' => ts('An extension container has been defined with a blank URL.'),
+      );
+    }
+
+    return $errors;
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -142,7 +165,7 @@ class CRM_Extension_Container_Basic implements CRM_Extension_Container_Interface
    */
   protected function getRelPath($key) {
     $keypaths = $this->getRelPaths();
-    if (! isset($keypaths[$key])) {
+    if (!isset($keypaths[$key])) {
       throw new CRM_Extension_Exception_MissingException("Failed to find extension: $key");
     }
     return $keypaths[$key];
@@ -190,7 +213,7 @@ class CRM_Extension_Container_Basic implements CRM_Extension_Container_Interface
    */
   protected function getRelUrl($key) {
     $relUrls = $this->getRelUrls();
-    if (! isset($relUrls[$key])) {
+    if (!isset($relUrls[$key])) {
       throw new CRM_Extension_Exception_MissingException("Failed to find extension: $key");
     }
     return $relUrls[$key];
index 337722a08a0644e51d7012b9867a9fd07dac31c5..6b69b794df5e72207246c859efbfe3463ca6c871 100644 (file)
@@ -79,6 +79,16 @@ class CRM_Extension_Container_Collection implements CRM_Extension_Container_Inte
   /**
    * {@inheritdoc}
    */
+  public function checkRequirements() {
+    $errors = array();
+    foreach ($this->containers as $container) {
+      $errors = array_merge($errors, $container->checkRequirements());
+    }
+    return $errors;
+  }
+    /**
+   * {@inheritdoc}
+   */
   public function getKeys() {
     $k2c = $this->getKeysToContainer();
     return array_keys($k2c);
index 0f3b5e9fa5572b09266372ca4032085bfe2fa1bd..6a18094ef9aafbdda2a9f10bb79f59fbc3241818 100644 (file)
  */
 interface CRM_Extension_Container_Interface {
 
+  /**
+   * Determine if any unmet requirements prevent use of this container.
+   *
+   * @return array list of error messages; empty if OK
+   */
+  public function checkRequirements();
+
   /**
    * Get a list of extensions available in this container
    *