From 0d092f216fd1ab01333789fa474e6a35dd939d2a Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 23 Jun 2026 11:03:45 -0500 Subject: [PATCH] =?UTF-8?q?feat:=20full=20scaffolding=20=E2=80=94=20manife?= =?UTF-8?q?sts,=20Extension,=20provider,=20SQL=20(9=20tables),=20language?= =?UTF-8?q?=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../en-GB/plg_system_mokosuiteevent.ini | 2 + .../en-GB/plg_system_mokosuiteevent.sys.ini | 2 + .../mokosuiteevent.xml | 42 +++++ .../services/provider.php | 27 ++++ .../sql/install.mysql.sql | 151 ++++++++++++++++++ .../sql/uninstall.mysql.sql | 13 ++ .../src/Extension/Event.php | 18 +++ source/pkg_mokosuiteevent.xml | 22 +++ 8 files changed, 277 insertions(+) create mode 100644 source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.ini create mode 100644 source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.sys.ini create mode 100644 source/packages/plg_system_mokosuiteevent/mokosuiteevent.xml create mode 100644 source/packages/plg_system_mokosuiteevent/services/provider.php create mode 100644 source/packages/plg_system_mokosuiteevent/sql/install.mysql.sql create mode 100644 source/packages/plg_system_mokosuiteevent/sql/uninstall.mysql.sql create mode 100644 source/packages/plg_system_mokosuiteevent/src/Extension/Event.php create mode 100644 source/pkg_mokosuiteevent.xml diff --git a/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.ini b/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.ini new file mode 100644 index 0000000..f7f51b1 --- /dev/null +++ b/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.ini @@ -0,0 +1,2 @@ +PLG_SYSTEM_MOKOSUITEEVENT="System - MokoSuite Event" +PLG_SYSTEM_MOKOSUITEEVENT_DESC="Event management — ticketing, registration, check-in, venues, speakers, sponsors." diff --git a/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.sys.ini b/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.sys.ini new file mode 100644 index 0000000..f7f51b1 --- /dev/null +++ b/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.sys.ini @@ -0,0 +1,2 @@ +PLG_SYSTEM_MOKOSUITEEVENT="System - MokoSuite Event" +PLG_SYSTEM_MOKOSUITEEVENT_DESC="Event management — ticketing, registration, check-in, venues, speakers, sponsors." diff --git a/source/packages/plg_system_mokosuiteevent/mokosuiteevent.xml b/source/packages/plg_system_mokosuiteevent/mokosuiteevent.xml new file mode 100644 index 0000000..3b8bbad --- /dev/null +++ b/source/packages/plg_system_mokosuiteevent/mokosuiteevent.xml @@ -0,0 +1,42 @@ + + + System - MokoSuite Event + mokosuiteevent + Moko Consulting + 2026-06-23 + Copyright (C) 2026 Moko Consulting. All rights reserved. + GPL-3.0-or-later + hello@mokoconsulting.tech + https://mokoconsulting.tech + 01.00.00 + 8.3 + PLG_SYSTEM_MOKOSUITEEVENT_DESC + Moko\Plugin\System\MokoSuiteEvent + + src + services + language + sql + + + en-GB/plg_system_mokosuiteevent.ini + en-GB/plg_system_mokosuiteevent.sys.ini + + sql/install.mysql.sql + sql/uninstall.mysql.sql + + +
+ + + + + + + + + +
+
+
+
diff --git a/source/packages/plg_system_mokosuiteevent/services/provider.php b/source/packages/plg_system_mokosuiteevent/services/provider.php new file mode 100644 index 0000000..203bcf5 --- /dev/null +++ b/source/packages/plg_system_mokosuiteevent/services/provider.php @@ -0,0 +1,27 @@ +set( + PluginInterface::class, + function (Container $container) { + $dispatcher = $container->get(DispatcherInterface::class); + $plugin = new Event($dispatcher, (array) PluginHelper::getPlugin('system', 'mokosuiteevent')); + $plugin->setApplication(Factory::getApplication()); + return $plugin; + } + ); + } +}; diff --git a/source/packages/plg_system_mokosuiteevent/sql/install.mysql.sql b/source/packages/plg_system_mokosuiteevent/sql/install.mysql.sql new file mode 100644 index 0000000..4194e82 --- /dev/null +++ b/source/packages/plg_system_mokosuiteevent/sql/install.mysql.sql @@ -0,0 +1,151 @@ +-- +-- MokoSuite Event Tables +-- + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_events` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `title` VARCHAR(255) NOT NULL, + `description` TEXT, + `venue_id` INT UNSIGNED DEFAULT NULL, + `start_date` DATETIME NOT NULL, + `end_date` DATETIME NOT NULL, + `timezone` VARCHAR(50) NOT NULL DEFAULT 'UTC', + `capacity` INT UNSIGNED NOT NULL DEFAULT 0, + `registered_count` INT UNSIGNED NOT NULL DEFAULT 0, + `status` ENUM('draft','published','cancelled','completed') NOT NULL DEFAULT 'draft', + `is_recurring` TINYINT NOT NULL DEFAULT 0, + `recurrence_rule` VARCHAR(255) NOT NULL DEFAULT '', + `cover_image` VARCHAR(500) NOT NULL DEFAULT '', + `organizer_contact_id` INT DEFAULT NULL, + `published` TINYINT NOT NULL DEFAULT 1, + `created` DATETIME NOT NULL, + `modified` DATETIME DEFAULT NULL, + `created_by` INT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_venue` (`venue_id`), + KEY `idx_dates` (`start_date`, `end_date`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_ticket_types` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `event_id` INT UNSIGNED NOT NULL, + `name` VARCHAR(255) NOT NULL, + `description` TEXT, + `price` DECIMAL(10,2) NOT NULL DEFAULT 0.00, + `quantity` INT UNSIGNED NOT NULL DEFAULT 0, + `sold` INT UNSIGNED NOT NULL DEFAULT 0, + `max_per_order` INT UNSIGNED NOT NULL DEFAULT 10, + `sale_start` DATETIME DEFAULT NULL, + `sale_end` DATETIME DEFAULT NULL, + `published` TINYINT NOT NULL DEFAULT 1, + `ordering` INT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_event` (`event_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_registrations` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `event_id` INT UNSIGNED NOT NULL, + `contact_id` INT DEFAULT NULL, + `name` VARCHAR(255) NOT NULL, + `email` VARCHAR(255) NOT NULL, + `phone` VARCHAR(50) NOT NULL DEFAULT '', + `status` ENUM('pending','confirmed','cancelled','waitlisted','checked_in') NOT NULL DEFAULT 'pending', + `total_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00, + `payment_status` ENUM('unpaid','paid','refunded') NOT NULL DEFAULT 'unpaid', + `notes` TEXT, + `registered_at` DATETIME NOT NULL, + `checked_in_at` DATETIME DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_event` (`event_id`), + KEY `idx_contact` (`contact_id`), + KEY `idx_status` (`status`), + KEY `idx_email` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_tickets` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `registration_id` INT UNSIGNED NOT NULL, + `ticket_type_id` INT UNSIGNED NOT NULL, + `qr_code` VARCHAR(100) NOT NULL DEFAULT '', + `attendee_name` VARCHAR(255) NOT NULL DEFAULT '', + `checked_in` TINYINT NOT NULL DEFAULT 0, + `checked_in_at` DATETIME DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `idx_qr` (`qr_code`), + KEY `idx_registration` (`registration_id`), + KEY `idx_type` (`ticket_type_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_venues` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255) NOT NULL, + `address` TEXT, + `city` VARCHAR(100) NOT NULL DEFAULT '', + `state` VARCHAR(50) NOT NULL DEFAULT '', + `postal_code` VARCHAR(20) NOT NULL DEFAULT '', + `capacity` INT UNSIGNED NOT NULL DEFAULT 0, + `amenities` TEXT, + `contact_name` VARCHAR(255) NOT NULL DEFAULT '', + `contact_phone` VARCHAR(50) NOT NULL DEFAULT '', + `contact_email` VARCHAR(255) NOT NULL DEFAULT '', + `published` TINYINT NOT NULL DEFAULT 1, + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_speakers` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `contact_id` INT DEFAULT NULL, + `name` VARCHAR(255) NOT NULL, + `title` VARCHAR(255) NOT NULL DEFAULT '', + `company` VARCHAR(255) NOT NULL DEFAULT '', + `bio` TEXT, + `photo` VARCHAR(500) NOT NULL DEFAULT '', + `website` VARCHAR(500) NOT NULL DEFAULT '', + `published` TINYINT NOT NULL DEFAULT 1, + `created` DATETIME NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_contact` (`contact_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_sponsors` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `event_id` INT UNSIGNED NOT NULL, + `contact_id` INT DEFAULT NULL, + `name` VARCHAR(255) NOT NULL, + `tier` ENUM('platinum','gold','silver','bronze','community') NOT NULL DEFAULT 'community', + `logo` VARCHAR(500) NOT NULL DEFAULT '', + `website` VARCHAR(500) NOT NULL DEFAULT '', + `amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00, + `benefits` TEXT, + `published` TINYINT NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + KEY `idx_event` (`event_id`), + KEY `idx_tier` (`tier`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_sessions` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `event_id` INT UNSIGNED NOT NULL, + `title` VARCHAR(255) NOT NULL, + `description` TEXT, + `room` VARCHAR(100) NOT NULL DEFAULT '', + `track` VARCHAR(100) NOT NULL DEFAULT '', + `start_time` DATETIME NOT NULL, + `end_time` DATETIME NOT NULL, + `capacity` INT UNSIGNED NOT NULL DEFAULT 0, + `ordering` INT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_event` (`event_id`), + KEY `idx_time` (`start_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_session_speakers` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `session_id` INT UNSIGNED NOT NULL, + `speaker_id` INT UNSIGNED NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `idx_session_speaker` (`session_id`, `speaker_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/source/packages/plg_system_mokosuiteevent/sql/uninstall.mysql.sql b/source/packages/plg_system_mokosuiteevent/sql/uninstall.mysql.sql new file mode 100644 index 0000000..52ca541 --- /dev/null +++ b/source/packages/plg_system_mokosuiteevent/sql/uninstall.mysql.sql @@ -0,0 +1,13 @@ +-- +-- MokoSuite Event — Uninstall +-- + +DROP TABLE IF EXISTS `#__mokosuiteevent_session_speakers`; +DROP TABLE IF EXISTS `#__mokosuiteevent_sessions`; +DROP TABLE IF EXISTS `#__mokosuiteevent_sponsors`; +DROP TABLE IF EXISTS `#__mokosuiteevent_speakers`; +DROP TABLE IF EXISTS `#__mokosuiteevent_venues`; +DROP TABLE IF EXISTS `#__mokosuiteevent_tickets`; +DROP TABLE IF EXISTS `#__mokosuiteevent_registrations`; +DROP TABLE IF EXISTS `#__mokosuiteevent_ticket_types`; +DROP TABLE IF EXISTS `#__mokosuiteevent_events`; diff --git a/source/packages/plg_system_mokosuiteevent/src/Extension/Event.php b/source/packages/plg_system_mokosuiteevent/src/Extension/Event.php new file mode 100644 index 0000000..ec43d4e --- /dev/null +++ b/source/packages/plg_system_mokosuiteevent/src/Extension/Event.php @@ -0,0 +1,18 @@ + + + Package - MokoSuite Event + mokosuiteevent + 01.00.00 + 2026-06-23 + Moko Consulting + hello@mokoconsulting.tech + https://mokoconsulting.tech + Copyright (C) 2026 Moko Consulting. All rights reserved. + GNU General Public License version 3 or later; see LICENSE + Event management — ticketing, registration, check-in, venues, speakers + 8.3 + + true + + plg_system_mokosuiteevent.zip + + + https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteEvent/updates.xml + +