From a5b47346e4b0ed9bd69f863f9dd45d42189f77fa Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 1 Oct 2014 11:41:43 -0400 Subject: [PATCH] Factor out the side-effects of building the bashboard. * CRM/Memberdashboard/Page/MemberDashboard.php ($components): New variable. (__construct): Load components. (loadComponents): New method. (buildDashboard): Renamed. (buildDashboardElements): Remove side-effects. (run): Call 'run' method on dashboard components. --- CRM/Memberdashboard/Page/MemberDashboard.php | 29 +++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/CRM/Memberdashboard/Page/MemberDashboard.php b/CRM/Memberdashboard/Page/MemberDashboard.php index 401de6e..5c6bdb4 100644 --- a/CRM/Memberdashboard/Page/MemberDashboard.php +++ b/CRM/Memberdashboard/Page/MemberDashboard.php @@ -24,11 +24,13 @@ require_once 'CRM/Core/Page.php'; class CRM_Memberdashboard_Page_MemberDashboard extends CRM_Core_Page { public $contact = NULL; + public $components = array(); function __construct() { parent::__construct(); $this->contact = $this->loadContact(); + $this->components = $this->loadComponents(); } /** @@ -43,16 +45,25 @@ class CRM_Memberdashboard_Page_MemberDashboard extends CRM_Core_Page { return CRM_Contact_BAO_Contact::retrieve($params, $defaults); } + /** + * Return an array of components that will be rendered on the dashboard. + * + * @return CRM_Contact + */ + function loadComponents() { + return array_filter(CRM_Core_Component::getEnabledComponents(), function($component) { + return in_array($component->info['name'], array('CiviMember', 'CiviContribute')); + }); + } + /** * Build user CiviMember and CiviContribute dashboard elements. * * @return Array of dashboard elements */ - function buildDashboard() { + function buildDashboardElements() { return array_map(function($component) { $elem = $component->getUserDashboardElement(); - $userDashboard = $component->getUserDashboardObject(); - $userDashboard->run(); return array( 'class' => 'crm-dashboard-' . strtolower($component->name), 'sectionTitle' => $elem['title'], @@ -60,9 +71,7 @@ class CRM_Memberdashboard_Page_MemberDashboard extends CRM_Core_Page { $component->name . '.tpl', 'weight' => $elem['weight'], ); - }, array_filter(CRM_Core_Component::getEnabledComponents(), function($component) { - return in_array($component->info['name'], array('CiviMember', 'CiviContribute')); - })); + }, $this->components); } /** @@ -75,8 +84,14 @@ class CRM_Memberdashboard_Page_MemberDashboard extends CRM_Core_Page { } function run() { + // Setup dashboard component state. + foreach ($this->components as $name => $component) { + $userDashboard = $component->getUserDashboardObject(); + $userDashboard->run(); + } + $this->assign('contact', $this->contact); - $this->assign('dashboardElements', $this->buildDashboard()); + $this->assign('dashboardElements', $this->buildDashboardElements()); parent::run(); -- 2.25.1