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!
+ +