From 98ac42c398f7cb649c2a27c1c1e721e982a68faa Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 23 May 2026 17:40:40 -0500 Subject: [PATCH] fix: resolve 10 issues found in code review Critical: - Create missing pkg_mokoog.sys.ini package language file - Create missing forms/tag.xml and forms/filter_tags.xml for component - Remove non-existent Service/ folder from component manifest - Remove non-existent scriptfile from system plugin manifest Important: - Remove unused DatabaseAwareTrait from system plugin - Add Event parameter to onBeforeCompileHead (Joomla 5 SubscriberInterface) - Guard onContentAfterSave with isClient('administrator') check - Fix duplicate DEFAULT keyword in SQL CREATE TABLE - Quote column names with quoteName() in content plugin select - Remove duplicate language file registration in component manifest Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- src/language/en-GB/pkg_mokoog.sys.ini | 7 ++ src/language/en-US/pkg_mokoog.sys.ini | 7 ++ src/packages/com_mokoog/forms/filter_tags.xml | 61 ++++++++++++++++ src/packages/com_mokoog/forms/tag.xml | 73 +++++++++++++++++++ .../language/en-GB/com_mokoog.sys.ini | 2 - .../language/en-US/com_mokoog.sys.ini | 2 - src/packages/com_mokoog/mokoog.xml | 6 -- src/packages/com_mokoog/sql/install.mysql.sql | 2 +- .../src/Extension/MokoOGContent.php | 18 +++-- src/packages/plg_system_mokoog/mokoog.xml | 2 - .../src/Extension/MokoOG.php | 9 +-- 11 files changed, 166 insertions(+), 23 deletions(-) create mode 100644 src/language/en-GB/pkg_mokoog.sys.ini create mode 100644 src/language/en-US/pkg_mokoog.sys.ini create mode 100644 src/packages/com_mokoog/forms/filter_tags.xml create mode 100644 src/packages/com_mokoog/forms/tag.xml diff --git a/src/language/en-GB/pkg_mokoog.sys.ini b/src/language/en-GB/pkg_mokoog.sys.ini new file mode 100644 index 0000000..76e8e3d --- /dev/null +++ b/src/language/en-GB/pkg_mokoog.sys.ini @@ -0,0 +1,7 @@ +; MokoOpenGraph - Package System Language File +; Copyright (C) 2026 Moko Consulting. All rights reserved. +; License: GPL-3.0-or-later + +PKG_MOKOOG="MokoOpenGraph" +PKG_MOKOOG_DESCRIPTION="Complete Open Graph, Twitter Card, and social sharing meta tag management for Joomla. Control how every page appears when shared on Facebook, Twitter/X, LinkedIn, WhatsApp, and more." +PKG_MOKOOG_PHP_VERSION_ERROR="MokoOpenGraph requires PHP %s or later." diff --git a/src/language/en-US/pkg_mokoog.sys.ini b/src/language/en-US/pkg_mokoog.sys.ini new file mode 100644 index 0000000..76e8e3d --- /dev/null +++ b/src/language/en-US/pkg_mokoog.sys.ini @@ -0,0 +1,7 @@ +; MokoOpenGraph - Package System Language File +; Copyright (C) 2026 Moko Consulting. All rights reserved. +; License: GPL-3.0-or-later + +PKG_MOKOOG="MokoOpenGraph" +PKG_MOKOOG_DESCRIPTION="Complete Open Graph, Twitter Card, and social sharing meta tag management for Joomla. Control how every page appears when shared on Facebook, Twitter/X, LinkedIn, WhatsApp, and more." +PKG_MOKOOG_PHP_VERSION_ERROR="MokoOpenGraph requires PHP %s or later." diff --git a/src/packages/com_mokoog/forms/filter_tags.xml b/src/packages/com_mokoog/forms/filter_tags.xml new file mode 100644 index 0000000..d7e87b4 --- /dev/null +++ b/src/packages/com_mokoog/forms/filter_tags.xml @@ -0,0 +1,61 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/packages/com_mokoog/forms/tag.xml b/src/packages/com_mokoog/forms/tag.xml new file mode 100644 index 0000000..363ef5f --- /dev/null +++ b/src/packages/com_mokoog/forms/tag.xml @@ -0,0 +1,73 @@ + + +
+
+ + + + + + + + + + + + + + + + +
+
diff --git a/src/packages/com_mokoog/language/en-GB/com_mokoog.sys.ini b/src/packages/com_mokoog/language/en-GB/com_mokoog.sys.ini index 56a0748..be6c090 100644 --- a/src/packages/com_mokoog/language/en-GB/com_mokoog.sys.ini +++ b/src/packages/com_mokoog/language/en-GB/com_mokoog.sys.ini @@ -4,5 +4,3 @@ COM_MOKOOG="MokoOpenGraph" COM_MOKOOG_DESCRIPTION="Manage Open Graph and social sharing tags for all your content. View, edit, and batch-process OG metadata." -PKG_MOKOOG_DESCRIPTION="Complete Open Graph, Twitter Card, and social sharing meta tag management for Joomla. Control how every page appears when shared on Facebook, Twitter/X, LinkedIn, WhatsApp, and more." -PKG_MOKOOG_PHP_VERSION_ERROR="MokoOpenGraph requires PHP %s or later." diff --git a/src/packages/com_mokoog/language/en-US/com_mokoog.sys.ini b/src/packages/com_mokoog/language/en-US/com_mokoog.sys.ini index 56a0748..be6c090 100644 --- a/src/packages/com_mokoog/language/en-US/com_mokoog.sys.ini +++ b/src/packages/com_mokoog/language/en-US/com_mokoog.sys.ini @@ -4,5 +4,3 @@ COM_MOKOOG="MokoOpenGraph" COM_MOKOOG_DESCRIPTION="Manage Open Graph and social sharing tags for all your content. View, edit, and batch-process OG metadata." -PKG_MOKOOG_DESCRIPTION="Complete Open Graph, Twitter Card, and social sharing meta tag management for Joomla. Control how every page appears when shared on Facebook, Twitter/X, LinkedIn, WhatsApp, and more." -PKG_MOKOOG_PHP_VERSION_ERROR="MokoOpenGraph requires PHP %s or later." diff --git a/src/packages/com_mokoog/mokoog.xml b/src/packages/com_mokoog/mokoog.xml index fb754f2..3089e4f 100644 --- a/src/packages/com_mokoog/mokoog.xml +++ b/src/packages/com_mokoog/mokoog.xml @@ -45,7 +45,6 @@ Controller Extension Model - Service Table View @@ -69,9 +68,4 @@ COM_MOKOOG_SUBMENU_TAGS - - - en-GB/com_mokoog.ini - en-GB/com_mokoog.sys.ini - diff --git a/src/packages/com_mokoog/sql/install.mysql.sql b/src/packages/com_mokoog/sql/install.mysql.sql index c2275f8..884d369 100644 --- a/src/packages/com_mokoog/sql/install.mysql.sql +++ b/src/packages/com_mokoog/sql/install.mysql.sql @@ -18,4 +18,4 @@ CREATE TABLE IF NOT EXISTS `#__mokoog_tags` ( PRIMARY KEY (`id`), UNIQUE KEY `idx_content` (`content_type`, `content_id`), KEY `idx_published` (`published`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/src/packages/plg_content_mokoog/src/Extension/MokoOGContent.php b/src/packages/plg_content_mokoog/src/Extension/MokoOGContent.php index f992278..07c1161 100644 --- a/src/packages/plg_content_mokoog/src/Extension/MokoOGContent.php +++ b/src/packages/plg_content_mokoog/src/Extension/MokoOGContent.php @@ -15,6 +15,7 @@ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\Form\Form; use Joomla\CMS\Plugin\CMSPlugin; +use Joomla\Event\Event; use Joomla\Event\SubscriberInterface; final class MokoOGContent extends CMSPlugin implements SubscriberInterface @@ -45,7 +46,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface * * @return void */ - public function onContentPrepareForm(\Joomla\Event\Event $event): void + public function onContentPrepareForm(Event $event): void { [$form, $data] = array_values($event->getArguments()); @@ -96,7 +97,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface * * @return void */ - public function onContentAfterSave(\Joomla\Event\Event $event): void + public function onContentAfterSave(Event $event): void { [$context, $article, $isNew] = array_values($event->getArguments()); @@ -109,10 +110,17 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface return; } + // Only process saves from the admin HTTP interface where form data is available + $app = $this->getApplication(); + + if (!$app->isClient('administrator')) { + return; + } + $contentType = $supportedContexts[$context]; $contentId = (int) $article->id; - $input = $this->getApplication()->getInput(); + $input = $app->getInput(); $jform = $input->get('jform', [], 'array'); $ogData = $jform['mokoog'] ?? []; @@ -130,7 +138,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface * * @return void */ - public function onContentAfterDelete(\Joomla\Event\Event $event): void + public function onContentAfterDelete(Event $event): void { [$context, $article] = array_values($event->getArguments()); @@ -168,7 +176,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface { $db = Factory::getDbo(); $query = $db->getQuery(true) - ->select('og_title, og_description, og_image, og_type') + ->select($db->quoteName(['og_title', 'og_description', 'og_image', 'og_type'])) ->from($db->quoteName('#__mokoog_tags')) ->where($db->quoteName('content_type') . ' = ' . $db->quote($contentType)) ->where($db->quoteName('content_id') . ' = ' . $contentId); diff --git a/src/packages/plg_system_mokoog/mokoog.xml b/src/packages/plg_system_mokoog/mokoog.xml index 0665a5e..50a2120 100644 --- a/src/packages/plg_system_mokoog/mokoog.xml +++ b/src/packages/plg_system_mokoog/mokoog.xml @@ -19,8 +19,6 @@ Joomla\Plugin\System\MokoOG - script.php - mokoog.php src diff --git a/src/packages/plg_system_mokoog/src/Extension/MokoOG.php b/src/packages/plg_system_mokoog/src/Extension/MokoOG.php index e1bd2c2..818e263 100644 --- a/src/packages/plg_system_mokoog/src/Extension/MokoOG.php +++ b/src/packages/plg_system_mokoog/src/Extension/MokoOG.php @@ -14,15 +14,12 @@ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\Plugin\CMSPlugin; -use Joomla\CMS\Router\Route; use Joomla\CMS\Uri\Uri; -use Joomla\Database\DatabaseAwareTrait; +use Joomla\Event\Event; use Joomla\Event\SubscriberInterface; final class MokoOG extends CMSPlugin implements SubscriberInterface { - use DatabaseAwareTrait; - /** * @var bool */ @@ -43,9 +40,11 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface /** * Inject Open Graph and Twitter Card meta tags before the document head is compiled. * + * @param Event $event The event object + * * @return void */ - public function onBeforeCompileHead(): void + public function onBeforeCompileHead(Event $event): void { $app = $this->getApplication(); -- 2.52.0