72c6d9a0e6
Layer 2 add-on for MokoSuite CRM. Full nonprofit operations: Schema (12 tables): - Donors (extends CRM contacts with giving levels + lifetime stats) - Donations (cash/check/card/ACH/stock/crypto/in-kind/pledge/matching) - Pledges (installment tracking with fulfilment status) - Funds (unrestricted/temporarily/permanently restricted/endowment) - Campaigns (fundraising drives with goals and thermometers) - Grants (prospect > writing > submitted > awarded > reporting lifecycle) - Volunteers (skills, availability, background checks) - Volunteer Hours (activity logging with approval) - Memberships (levels, dues, auto-renew) - Tax Receipts (IRS-compliant acknowledgment letters) - Events (galas, auctions, community events with registration) - Event Registrations (tickets, dietary, table assignment) Helpers (4): - DonorHelper: profiles, giving history, level auto-calculation, lapsed detection - CampaignHelper: active campaigns, thermometer data, fundraising summary - VolunteerHelper: registration, hours logging, skills matching, reporting - TaxReceiptHelper: IRS-compliant receipt generation, year-end batch Infrastructure: - Joomla 6 architecture (PHP 8.3+, DI container, typed properties) - Admin dashboard with fundraising thermometers + grant deadlines - 6 webservice routes (donors, donations, campaigns, grants, volunteers, events) - Package manifest with DLID update server - GPL-3.0 license
21 lines
689 B
PHP
21 lines
689 B
PHP
<?php
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\Dispatcher\ComponentDispatcherFactoryInterface;
|
|
use Joomla\CMS\Extension\ComponentInterface;
|
|
use Joomla\CMS\Extension\MVCComponent;
|
|
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
|
|
use Joomla\DI\Container;
|
|
use Joomla\DI\ServiceProviderInterface;
|
|
|
|
return new class implements ServiceProviderInterface {
|
|
public function register(Container $container): void
|
|
{
|
|
$container->set(ComponentInterface::class, function (Container $container) {
|
|
$component = new MVCComponent($container->get(ComponentDispatcherFactoryInterface::class));
|
|
$component->setMVCFactory($container->get(MVCFactoryInterface::class));
|
|
return $component;
|
|
});
|
|
}
|
|
};
|