assign_by_ref('hookContent', $html); $this->assign('hookContentPlacement', $contentPlacement); } $communityMessages = CRM_Core_CommunityMessages::create(); if ($communityMessages->isEnabled()) { $message = $communityMessages->pick(); if ($message) { $this->assign('communityMessages', $communityMessages->evalMarkup($message['markup'])); } } $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
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"] = "
<{$dashlet['directive']}>
"; } } return $partials; } /** * settingsFactory from crmDashboard.ang.php * * @return array */ public static function angularSettings() { return [ 'dashlets' => CRM_Core_BAO_Dashboard::getContactDashlets(), ]; } }