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 = new Civi\Angular\AngularLoader(); $loader->setPageName('civicrm/dashboard'); // For each dashlet that requires an angular directive, load the angular module which provides that directive $modules = []; 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']])) { $modules[] = $name; continue; } } } } $loader->setModules($modules); $loader->load(); 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(), ]; } }