diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 11958bd..29c6ede 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 01.00.00 +# VERSION: 01.05.01 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index be62050..4221cc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ ## [01.05.00] --- 2026-06-28 - + All notable changes to MokoSuiteOpenGraph will be documented in this file. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index e62d632..8ec8480 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,7 +14,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://github.com/mokoconsulting-tech/Template-Joomla/ - VERSION: 01.05.00 + VERSION: 01.05.01 PATH: ./CODE_OF_CONDUCT.md BRIEF: Community expectations and enforcement guidelines NOTE: Adapted with attribution from the Contributor Covenant v2.1 diff --git a/GOVERNANCE.md b/GOVERNANCE.md index c55be07..a9ce695 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,7 +19,7 @@ DEFGROUP: mokoconsulting-tech.Template-Joomla INGROUP: MokoStandards.Governance REPO: https://github.com/mokoconsulting-tech/Template-Joomla - VERSION: 01.05.00 + VERSION: 01.05.01 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index 83c5f41..c49d9d3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MokoSuiteOpenGraph - + Open Graph, Twitter Card, and social sharing meta tag management for Joomla 6 and higher. diff --git a/SECURITY.md b/SECURITY.md index d10290b..0165526 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 01.05.00 +VERSION: 01.05.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/api/src/Controller/TagsController.php b/source/packages/com_mokoog/api/src/Controller/TagsController.php index 2e62de3..904495b 100644 --- a/source/packages/com_mokoog/api/src/Controller/TagsController.php +++ b/source/packages/com_mokoog/api/src/Controller/TagsController.php @@ -47,7 +47,7 @@ class TagsController extends ApiController throw new \RuntimeException('content_type and content_id are required', 400); } - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select($db->quoteName('id')) ->from($db->quoteName('#__mokoog_tags')) diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index 8980af9..ea7d9ae 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.05.00 + 01.05.01 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.04.18.sql b/source/packages/com_mokoog/sql/updates/mysql/01.04.18.sql new file mode 100644 index 0000000..7712120 --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.04.18.sql @@ -0,0 +1 @@ +/* 01.04.18 — no schema changes */ diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.05.01.sql b/source/packages/com_mokoog/sql/updates/mysql/01.05.01.sql new file mode 100644 index 0000000..e843c81 --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.05.01.sql @@ -0,0 +1 @@ +/* 01.05.01 — no schema changes */ diff --git a/source/packages/com_mokoog/src/Controller/BatchController.php b/source/packages/com_mokoog/src/Controller/BatchController.php index b747f4f..c07cba1 100644 --- a/source/packages/com_mokoog/src/Controller/BatchController.php +++ b/source/packages/com_mokoog/src/Controller/BatchController.php @@ -27,13 +27,13 @@ class BatchController extends BaseController */ public function count(): void { - Session::checkToken('get') || jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken('get') || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403); if (!Factory::getApplication()->getIdentity()->authorise('core.create', 'com_mokoog')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select('COUNT(*)') ->from($db->quoteName('#__content', 'c')) @@ -60,7 +60,7 @@ class BatchController extends BaseController */ public function process(): void { - Session::checkToken('get') || jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken('get') || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403); if (!Factory::getApplication()->getIdentity()->authorise('core.create', 'com_mokoog')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); @@ -69,7 +69,7 @@ class BatchController extends BaseController $app = Factory::getApplication(); $limit = min($app->getInput()->getInt('limit', 50), 200); - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select($db->quoteName([ 'c.id', 'c.title', 'c.metadesc', 'c.introtext', 'c.fulltext', 'c.images', diff --git a/source/packages/com_mokoog/src/Controller/ImportExportController.php b/source/packages/com_mokoog/src/Controller/ImportExportController.php index 5fcb49f..dd0a446 100644 --- a/source/packages/com_mokoog/src/Controller/ImportExportController.php +++ b/source/packages/com_mokoog/src/Controller/ImportExportController.php @@ -36,14 +36,14 @@ class ImportExportController extends BaseController */ public function export(): void { - Session::checkToken('get') || jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken('get') || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403); if (!Factory::getApplication()->getIdentity()->authorise('core.manage', 'com_mokoog')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } $app = Factory::getApplication(); - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); // Join with #__content to get article titles for reference $query = $db->getQuery(true) @@ -102,7 +102,7 @@ class ImportExportController extends BaseController */ public function import(): void { - Session::checkToken() || jexit(Text::_('JINVALID_TOKEN')); + Session::checkToken() || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403); $identity = Factory::getApplication()->getIdentity(); @@ -161,7 +161,7 @@ class ImportExportController extends BaseController return; } - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $header = fgetcsv($handle); $created = 0; $updated = 0; diff --git a/source/packages/com_mokoog/tmpl/tags/coverage.php b/source/packages/com_mokoog/tmpl/tags/coverage.php index eb607b3..931039d 100644 --- a/source/packages/com_mokoog/tmpl/tags/coverage.php +++ b/source/packages/com_mokoog/tmpl/tags/coverage.php @@ -13,7 +13,7 @@ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; -$db = Factory::getDbo(); +$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); // Total published articles $db->setQuery($db->getQuery(true)->select('COUNT(*)')->from('#__content')->where('state = 1')); diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index caa9590..af3d433 100644 --- a/source/packages/plg_content_mokoog/mokoog.xml +++ b/source/packages/plg_content_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> Content - MokoSuiteOpenGraph - 01.05.00 + 01.05.01 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_content_mokoog/src/Extension/MokoOGContent.php b/source/packages/plg_content_mokoog/src/Extension/MokoOGContent.php index 15f2db0..91550d7 100644 --- a/source/packages/plg_content_mokoog/src/Extension/MokoOGContent.php +++ b/source/packages/plg_content_mokoog/src/Extension/MokoOGContent.php @@ -187,7 +187,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface $contentType = $supportedContexts[$context]; $contentId = (int) $article->id; - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->delete($db->quoteName('#__mokoog_tags')) ->where($db->quoteName('content_type') . ' = ' . $db->quote($contentType)) @@ -208,7 +208,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface */ private function loadOgData(string $contentType, int $contentId, string $language = '*'): ?object { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select($db->quoteName([ 'og_title', 'og_description', 'og_image', 'og_type', 'og_video', @@ -239,7 +239,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface */ private function saveOgData(string $contentType, int $contentId, array $ogData, string $language = '*'): void { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); // Check if record exists for this content + language $query = $db->getQuery(true) diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index 74f27e2..4c1c904 100644 --- a/source/packages/plg_system_mokoog/mokoog.xml +++ b/source/packages/plg_system_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> System - MokoSuiteOpenGraph - 01.05.00 + 01.05.01 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/src/Extension/MokoOG.php b/source/packages/plg_system_mokoog/src/Extension/MokoOG.php index 07c5596..b472a9a 100644 --- a/source/packages/plg_system_mokoog/src/Extension/MokoOG.php +++ b/source/packages/plg_system_mokoog/src/Extension/MokoOG.php @@ -241,7 +241,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface // Pinterest article:tag rich pins (from Joomla content tags) if ($option === 'com_content' && $view === 'article' && $id > 0) { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $tagQuery = $db->getQuery(true) ->select($db->quoteName('t.title')) ->from($db->quoteName('#__tags', 't')) @@ -467,7 +467,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface return $this->loadOgDataByMenu((int) $menuItem->id) ?: $empty; } - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__mokoog_tags')) @@ -493,7 +493,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface */ private function loadOgDataByType(string $contentType, int $contentId): ?object { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $lang = Factory::getLanguage()->getTag(); $query = $db->getQuery(true) @@ -520,7 +520,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface */ private function loadOgDataByMenu(int $menuId): ?object { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $lang = Factory::getLanguage()->getTag(); $query = $db->getQuery(true) @@ -615,7 +615,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface // Fallback: check the article's category for an image if ($view === 'article') { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $catQuery = $db->getQuery(true) ->select($db->quoteName('cat.params')) ->from($db->quoteName('#__categories', 'cat')) @@ -674,7 +674,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface return $cache[$id]; } - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select($db->quoteName([ 'a.title', 'a.introtext', 'a.fulltext', 'a.images', @@ -947,20 +947,20 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface */ private function warnMissingLicenseKey(): void { - $session = Factory::getSession(); + $session = Factory::getApplication()->getSession(); if ($session->get('mokoog.license_warned', false)) { return; } - $user = Factory::getUser(); + $user = Factory::getApplication()->getIdentity(); if ($user->guest || !$user->authorise('core.manage')) { return; } try { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select($db->quoteName('extra_query')) @@ -1011,7 +1011,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface } try { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select('p.id, p.sku, p.price, p.currency, p.stock_qty') ->select('c.title AS name, c.introtext AS description, c.images') diff --git a/source/packages/plg_system_mokoog/src/Helper/JsonLdBuilder.php b/source/packages/plg_system_mokoog/src/Helper/JsonLdBuilder.php index 5a84e6e..dbb3a6b 100644 --- a/source/packages/plg_system_mokoog/src/Helper/JsonLdBuilder.php +++ b/source/packages/plg_system_mokoog/src/Helper/JsonLdBuilder.php @@ -37,7 +37,7 @@ class JsonLdBuilder $article = $cachedArticle; if (!$article) { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select($db->quoteName([ 'a.created', 'a.modified', 'a.publish_up', @@ -179,7 +179,7 @@ class JsonLdBuilder $product = $cachedProduct; if (!$product) { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $query = $db->getQuery(true) ->select('p.sku, p.price, p.currency, p.stock_qty') ->from($db->quoteName('#__mokosuite_crm_products', 'p')) diff --git a/source/packages/plg_system_mokoog/src/Helper/SitemapBuilder.php b/source/packages/plg_system_mokoog/src/Helper/SitemapBuilder.php index af2149c..9f30300 100644 --- a/source/packages/plg_system_mokoog/src/Helper/SitemapBuilder.php +++ b/source/packages/plg_system_mokoog/src/Helper/SitemapBuilder.php @@ -35,7 +35,7 @@ class SitemapBuilder $allowed = ['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never']; $changefreq = \in_array($changefreq, $allowed, true) ? $changefreq : 'weekly'; - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); // Get all published articles $query = $db->getQuery(true) diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index 3b03c7d..6218c4f 100644 --- a/source/packages/plg_webservices_mokoog/mokoog.xml +++ b/source/packages/plg_webservices_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> Web Services - MokoSuiteOpenGraph - 01.05.00 + 01.05.01 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index 45292f5..270a468 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.05.00 + 01.05.01 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/script.php b/source/script.php index 479c916..c90d65e 100644 --- a/source/script.php +++ b/source/script.php @@ -55,7 +55,7 @@ class Pkg_MokoOGInstallerScript if ($type === 'install') { - $db = Factory::getDbo(); + $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); foreach (['system', 'content', 'webservices'] as $folder) { @@ -79,7 +79,7 @@ class Pkg_MokoOGInstallerScript { try { - $db = \Joomla\CMS\Factory::getDbo(); + $db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $db->setQuery( $db->getQuery(true) ->select($db->quoteName('us.extra_query')) @@ -103,7 +103,7 @@ class Pkg_MokoOGInstallerScript try { - $db = \Joomla\CMS\Factory::getDbo(); + $db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $db->setQuery( $db->getQuery(true) ->select($db->quoteName('us.update_site_id')) @@ -133,7 +133,7 @@ class Pkg_MokoOGInstallerScript { try { - $db = \Joomla\CMS\Factory::getDbo(); + $db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); $db->setQuery( $db->getQuery(true) ->select([$db->quoteName('update_site_id'), $db->quoteName('extra_query')])