From a704e716bf5da412b4563abc06fbbd8eb133822b Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 18 Jun 2026 11:12:43 -0500 Subject: [PATCH] =?UTF-8?q?Add=20DonorWall=20site=20view=20=E2=80=94=20pub?= =?UTF-8?q?lic=20donor=20recognition=20by=20level?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../site/src/View/DonorWall/HtmlView.php | 50 +++++++++++++++++++ .../site/tmpl/donorwall/default.php | 45 +++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 source/packages/com_mokosuitenpo/site/src/View/DonorWall/HtmlView.php create mode 100644 source/packages/com_mokosuitenpo/site/tmpl/donorwall/default.php diff --git a/source/packages/com_mokosuitenpo/site/src/View/DonorWall/HtmlView.php b/source/packages/com_mokosuitenpo/site/src/View/DonorWall/HtmlView.php new file mode 100644 index 0000000..f1e8442 --- /dev/null +++ b/source/packages/com_mokosuitenpo/site/src/View/DonorWall/HtmlView.php @@ -0,0 +1,50 @@ +get(DatabaseInterface::class); + + // Get donors grouped by level (exclude anonymous) + $levelOrder = ['legacy', 'major', 'repeat', 'first_time']; + + foreach ($levelOrder as $level) { + $db->setQuery($db->getQuery(true) + ->select('d.recognition_name, d.donor_level, d.lifetime_giving') + ->from($db->quoteName('#__mokosuitenpo_donors', 'd')) + ->where($db->quoteName('d.donor_level') . ' = ' . $db->quote($level)) + ->where($db->quoteName('d.anonymous_giving') . ' = 0') + ->where('d.recognition_name IS NOT NULL AND d.recognition_name != ' . $db->quote('')) + ->order('d.lifetime_giving DESC'), 0, 50); + + $donors = $db->loadObjectList() ?: []; + if (!empty($donors)) { + $this->levels[$level] = $donors; + } + } + + // Overall stats + $db->setQuery($db->getQuery(true) + ->select('COUNT(DISTINCT d.id) AS total_donors') + ->select('COALESCE(SUM(d.lifetime_giving), 0) AS total_raised') + ->from($db->quoteName('#__mokosuitenpo_donors', 'd')) + ->where($db->quoteName('d.lifetime_giving') . ' > 0')); + $this->stats = $db->loadObject() ?: (object) ['total_donors' => 0, 'total_raised' => 0]; + + parent::display($tpl); + } +} diff --git a/source/packages/com_mokosuitenpo/site/tmpl/donorwall/default.php b/source/packages/com_mokosuitenpo/site/tmpl/donorwall/default.php new file mode 100644 index 0000000..cfa0a7c --- /dev/null +++ b/source/packages/com_mokosuitenpo/site/tmpl/donorwall/default.php @@ -0,0 +1,45 @@ + ['label' => 'Legacy Donors', 'icon' => 'star', 'color' => 'warning'], + 'major' => ['label' => 'Major Donors', 'icon' => 'diamond', 'color' => 'primary'], + 'repeat' => ['label' => 'Sustaining Donors', 'icon' => 'heart', 'color' => 'success'], + 'first_time' => ['label' => 'Welcome New Donors', 'icon' => 'seedling','color' => 'info'], +]; +?> +
+
+

Thank You To Our Generous Donors

+
+
+

stats->total_donors); ?>

+

Donors

+
+
+

$stats->total_raised); ?>

+

Total Raised

+
+
+
+ + levels as $level => $donors) : + $info = $levelLabels[$level] ?? ['label' => ucfirst($level), 'color' => 'secondary']; + ?> +
+

+
+ +
+
+ recognition_name); ?> +
+
+ +
+
+ + + levels)) : ?> +
Be the first to appear on our donor wall!
+ +