1
Architecture
Jonathan Miller edited this page 2026-06-29 16:43:50 +00:00

Architecture

Package Structure

source/
├── pkg_mokosuitenpo.xml              # Package manifest
├── script.php                         # Install/update script
└── packages/
    ├── com_mokosuitenpo/              # Component
    │   ├── mokosuitenpo.xml           # Component manifest
    │   ├── admin/
    │   │   ├── access.xml             # ACL definitions
    │   │   ├── config.xml             # Component options
    │   │   ├── services/
    │   │   │   └── provider.php       # DI container registration
    │   │   ├── src/
    │   │   │   ├── Controller/
    │   │   │   │   └── DisplayController.php
    │   │   │   ├── Model/
    │   │   │   │   ├── CampaignsModel.php
    │   │   │   │   ├── DonationsModel.php
    │   │   │   │   ├── DonorsModel.php
    │   │   │   │   ├── EventsModel.php
    │   │   │   │   ├── GrantsModel.php
    │   │   │   │   ├── MembershipsModel.php
    │   │   │   │   └── VolunteersModel.php
    │   │   │   └── View/
    │   │   │       ├── Campaigns/HtmlView.php
    │   │   │       ├── Dashboard/HtmlView.php
    │   │   │       ├── Donors/HtmlView.php
    │   │   │       ├── Events/HtmlView.php
    │   │   │       ├── Grants/HtmlView.php
    │   │   │       ├── Memberships/HtmlView.php
    │   │   │       └── Volunteers/HtmlView.php
    │   │   └── tmpl/                  # Admin templates
    │   │       ├── campaigns/default.php
    │   │       ├── dashboard/default.php
    │   │       ├── donors/default.php
    │   │       ├── events/default.php
    │   │       ├── grants/default.php
    │   │       ├── memberships/default.php
    │   │       └── volunteers/default.php
    │   ├── site/
    │   │   ├── src/
    │   │   │   ├── Controller/DisplayController.php
    │   │   │   ├── Service/Router.php
    │   │   │   └── View/
    │   │   │       ├── CampaignPage/HtmlView.php
    │   │   │       ├── Donate/HtmlView.php
    │   │   │       ├── DonorWall/HtmlView.php
    │   │   │       ├── EventCalendar/HtmlView.php
    │   │   │       ├── GrantPortal/HtmlView.php
    │   │   │       ├── MemberPortal/HtmlView.php
    │   │   │       ├── ThankYou/HtmlView.php
    │   │   │       └── VolunteerSignup/HtmlView.php
    │   │   └── tmpl/                  # Site templates
    │   │       ├── campaignpage/default.php
    │   │       ├── donate/default.php
    │   │       ├── donorwall/default.php
    │   │       ├── eventcalendar/default.php
    │   │       ├── grantportal/default.php
    │   │       ├── memberportal/default.php
    │   │       └── volunteersignup/default.php
    │   ├── api/
    │   │   └── src/Controller/
    │   │       ├── NpoCampaignsController.php
    │   │       ├── NpoDonationsController.php
    │   │       ├── NpoDonorController.php
    │   │       ├── NpoEventsController.php
    │   │       ├── NpoGrantsController.php
    │   │       ├── NpoReportsController.php
    │   │       └── NpoVolunteersController.php
    │   └── media/
    │       ├── css/
    │       └── js/
    ├── plg_system_mokosuitenpo/       # System plugin
    │   ├── sql/
    │   │   ├── install.mysql.sql      # Schema creation
    │   │   └── uninstall.mysql.sql    # Schema removal
    │   ├── language/en-GB/
    │   └── src/Helper/
    │       ├── BoardManagementHelper.php
    │       ├── CampaignHelper.php
    │       ├── DonorHelper.php
    │       ├── DonorRetentionHelper.php
    │       ├── EventHelper.php
    │       ├── Form990Helper.php
    │       ├── FundAccountingHelper.php
    │       ├── GrantHelper.php
    │       ├── GrantReportingHelper.php
    │       ├── ImpactReportHelper.php
    │       ├── InKindDonationHelper.php
    │       ├── MembershipHelper.php
    │       ├── PledgeReminderHelper.php
    │       ├── RecurringDonationHelper.php
    │       ├── TaxReceiptHelper.php
    │       └── VolunteerHelper.php
    ├── plg_webservices_mokosuitenpo/  # Webservices plugin
    │   └── src/Extension/
    │       └── MokoSuiteNpoApi.php    # Route registration
    └── plg_task_mokosuitenpo/         # Task plugin
        └── src/Extension/
            └── NpoAutomation.php      # Scheduled tasks

MVC Overview

Admin Views

View Model Purpose
Dashboard Key metrics overview (total donors, donations, campaigns)
Donors DonorsModel List/filter donors by type, level, lifetime giving
Donations DonationsModel List/filter donations by date, fund, campaign
Campaigns CampaignsModel List campaigns with progress bars
Grants GrantsModel List grants with status/deadline filters
Volunteers VolunteersModel List volunteers with skills/availability
Events EventsModel List events with registration counts
Memberships MembershipsModel List memberships with expiry alerts

Site Views

View Purpose
Donate Public donation form with quick amounts, fund/campaign selection, tribute gifts
CampaignPage Campaign detail with progress thermometer and donor wall
DonorWall Public donor recognition wall
EventCalendar Event listing with month navigation and registration
GrantPortal Grant information portal
MemberPortal Member self-service portal
VolunteerSignup Public volunteer registration form
ThankYou Post-donation confirmation page

Helper Classes

All business logic lives in the system plugin's Helper namespace (plg_system_mokosuitenpo/src/Helper/):

Helper Key Methods
DonorHelper recordDonation(), recognition level calculations, lifetime giving
DonorRetentionHelper getLybunt(), getSybunt(), getRetentionRate(), getGivingTrends()
CampaignHelper Progress calculation, goal tracking
GrantHelper Deadline alerts, reporting schedule
VolunteerHelper Hours logging, skills matching
EventHelper Registration, capacity management
MembershipHelper Expiry alerts, renewal processing
TaxReceiptHelper IRS-compliant receipt generation
FundAccountingHelper Restricted/unrestricted fund tracking
Form990Helper getRevenueBreakdown(), getExpenseBreakdown(), getCompensationSchedule()
BoardManagementHelper getCurrentMembers(), getCommittees(), getAttendanceRate(), getExpiringTerms()
InKindDonationHelper record(), getSummary(), getNeedingAppraisal()
PledgeReminderHelper Pledge schedule reminders
RecurringDonationHelper Recurring donation processing
ImpactReportHelper Program impact metrics
GrantReportingHelper Grant report generation

API Endpoints

REST API controllers in com_mokosuitenpo/api/src/Controller/:

Controller Resource Operations
NpoDonorController /api/npo/donors CRUD
NpoDonationsController /api/npo/donations CRUD
NpoCampaignsController /api/npo/campaigns CRUD
NpoGrantsController /api/npo/grants CRUD
NpoVolunteersController /api/npo/volunteers CRUD
NpoEventsController /api/npo/events CRUD
NpoReportsController /api/npo/reports Read-only reports

Cross-Module Integration

MokoSuite NPO integrates with other MokoSuite layers:

  • CRM (Layer 1): Donors and volunteers link to CRM contacts via contact_id. Online donations can create CRM orders. Membership dues create CRM invoices.
  • ERP (Layer 1): Donations create journal entries (restricted/unrestricted). Grant awards create revenue entries. Fund accounting links to GL chart of accounts.

CI/CD

  • Gitea Actions workflows for build, auto-bump, auto-release
  • MokoGitea update server for Joomla extension updates
  • Branch protection on main/stable branches