REF - Cleanup array key checking to use array_key_exists
[civicrm-core.git] / CRM / Contact / Page / DashBoard.php
index dd2bda097f177d6019425e24cbc3ac0a330b1596..48ea3ac19cecaad86b62c767605d7fe3dc895d3d 100644 (file)
@@ -24,12 +24,6 @@ class CRM_Contact_Page_DashBoard extends CRM_Core_Page {
    * Run dashboard.
    */
   public function run() {
-    // Add dashboard js and css
-    $resources = CRM_Core_Resources::singleton();
-    $resources->addScriptFile('civicrm', 'js/jquery/jquery.dashboard.js', 0, 'html-header', FALSE);
-    $resources->addStyleFile('civicrm', 'css/dashboard.css');
-    $this->assign('contactDashlets', CRM_Core_BAO_Dashboard::getContactDashletsForJS());
-
     CRM_Utils_System::setTitle(ts('CiviCRM Home'));
     $contactID = CRM_Core_Session::getLoggedInContactID();
 
@@ -50,7 +44,55 @@ class CRM_Contact_Page_DashBoard extends CRM_Core_Page {
       }
     }
 
+    $loader = Civi::service('angularjs.loader');
+    $loader->addModules('crmDashboard');
+    $loader->setPageName('civicrm/dashboard');
+
+    // For each dashlet that requires an angular directive, load the angular module which provides that directive
+    foreach (CRM_Core_BAO_Dashboard::getContactDashlets() as $dashlet) {
+      if (!empty($dashlet['directive'])) {
+        foreach ($loader->getAngular()->getModules() as $name => $module) {
+          if (!empty($module['exports'][$dashlet['directive']])) {
+            $loader->addModules($name);
+            continue;
+          }
+        }
+      }
+    }
+
     return parent::run();
   }
 
+  /**
+   * partialsCallback from crmDashboard.ang.php
+   *
+   * Generates an html template for each angular-based dashlet.
+   *
+   * @param $moduleName
+   * @param $module
+   * @return array
+   */
+  public static function angularPartials($moduleName, $module) {
+    $partials = [];
+    foreach (CRM_Core_BAO_Dashboard::getContactDashlets() as $dashlet) {
+      if (!empty($dashlet['directive'])) {
+        // FIXME: Wrapping each directive in <div id='bootstrap-theme'> produces invalid html (duplicate ids in the dom)
+        // but it's the only practical way to selectively apply boostrap3 theming to specific dashlets
+        $partials["~/$moduleName/directives/{$dashlet['directive']}.html"] = "<div id='bootstrap-theme'><{$dashlet['directive']}></{$dashlet['directive']}></div>";
+      }
+    }
+    return $partials;
+  }
+
+  /**
+   * settingsFactory from crmDashboard.ang.php
+   *
+   * @return array
+   */
+  public static function angularSettings() {
+    return [
+      'dashlets' => CRM_Core_BAO_Dashboard::getContactDashlets(),
+    ];
+  }
+
 }