Merge pull request #23609 from briennekordis/leading_zero_fix
[civicrm-core.git] / CRM / Admin / Page / Extensions.php
index b8250a69a47d60d8fe182926773d1b29fb38b124..d3ec1aae637307fbd1ecb6b3ea2cc3826f4c6f34 100644 (file)
@@ -246,7 +246,7 @@ class CRM_Admin_Page_Extensions extends CRM_Core_Page_Basic {
       if (!empty($compat[$info->key]['obsolete'])) {
         continue;
       }
-      $row = (array) $info;
+      $row = self::fillMissingInfoKeys((array) $info);
       $row['id'] = $info->key;
       $row['upgradelink'] = '';
       $action = CRM_Core_Action::UPDATE;
@@ -330,7 +330,35 @@ class CRM_Admin_Page_Extensions extends CRM_Core_Page_Basic {
    * @return array
    */
   public static function createExtendedInfo(CRM_Extension_Info $obj) {
-    return CRM_Extension_System::createExtendedInfo($obj);
+    return self::fillMissingInfoKeys(CRM_Extension_System::createExtendedInfo($obj));
+  }
+
+  /**
+   * Extension templates expect certain keys to always be set, but these might be missing from the relevant info.xml files
+   * This ensures the expect keys are always set.
+   *
+   * @param array $info
+   * @return array
+   */
+  private static function fillMissingInfoKeys(array $info) {
+    $defaultKeys = [
+      'urls' => [],
+      'authors' => [],
+      'version' => '',
+      'description' => '',
+      'license' => '',
+      'path' => '',
+      'releaseDate' => '',
+      'downloadUrl' => FALSE,
+      'compatibility' => FALSE,
+      'develStage' => FALSE,
+      'comments' => FALSE,
+    ];
+    $info = array_merge($defaultKeys, $info);
+    foreach ($info['authors'] as &$author) {
+      $author = array_merge(['homepage' => ''], $author);
+    }
+    return $info;
   }
 
 }