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 @@
-
-
- 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();