Issue #3483: parent_id not always available as index
[civicrm-core.git] / CRM / Extension / Info.php
index 8b8ee51143794cc307561b1101f4036bf823c3c7..8a1fc017933bf32f461928acdb05123be1bdbb07 100644 (file)
@@ -23,12 +23,28 @@ class CRM_Extension_Info {
   const FILENAME = 'info.xml';
 
   /**
-   * @var string
+   * @var string|null
    */
   public $key = NULL;
+
+  /**
+   * @var string|null
+   */
   public $type = NULL;
+
+  /**
+   * @var string|null
+   */
   public $name = NULL;
+
+  /**
+   * @var string|null
+   */
   public $label = NULL;
+
+  /**
+   * @var string|null
+   */
   public $file = NULL;
 
   /**
@@ -44,6 +60,13 @@ class CRM_Extension_Info {
    */
   public $requires = [];
 
+  /**
+   * @var array
+   *   List of expected mixins.
+   *   Ex: ['civix@2.0.0']
+   */
+  public $mixins = [];
+
   /**
    * @var array
    *   List of strings (tag-names).
@@ -75,7 +98,7 @@ class CRM_Extension_Info {
   /**
    * Load extension info an XML file.
    *
-   * @param $file
+   * @param string $file
    *
    * @throws CRM_Extension_Exception_ParseException
    * @return CRM_Extension_Info
@@ -133,11 +156,11 @@ class CRM_Extension_Info {
   }
 
   /**
-   * @param null $key
-   * @param null $type
-   * @param null $name
-   * @param null $label
-   * @param null $file
+   * @param string|null $key
+   * @param string|null $type
+   * @param string|null $name
+   * @param string|null $label
+   * @param string|null $file
    */
   public function __construct($key = NULL, $type = NULL, $name = NULL, $label = NULL, $file = NULL) {
     $this->key = $key;
@@ -197,6 +220,12 @@ class CRM_Extension_Info {
           $this->tags[] = (string) $tag;
         }
       }
+      elseif ($attr === 'mixins') {
+        $this->mixins = [];
+        foreach ($val->mixin as $mixin) {
+          $this->mixins[] = (string) $mixin;
+        }
+      }
       elseif ($attr === 'requires') {
         $this->requires = $this->filterRequirements($val);
       }