From 6d4284c6c9f516dff313046bef10b7dfdc63c142 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Sun, 28 Jun 2026 19:51:06 +0000 Subject: [PATCH 01/19] chore(version): pre-release bump to 01.05.02-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokoog/mokoog.xml | 2 +- source/packages/com_mokoog/sql/updates/mysql/01.05.02.sql | 1 + source/packages/plg_content_mokoog/mokoog.xml | 2 +- source/packages/plg_system_mokoog/mokoog.xml | 2 +- source/packages/plg_webservices_mokoog/mokoog.xml | 2 +- source/pkg_mokoog.xml | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 source/packages/com_mokoog/sql/updates/mysql/01.05.02.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 29c6ede..770cd19 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.05.01 +# VERSION: 01.05.02 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 4221cc0..9288eb0 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 8ec8480..89e1c54 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.01 + VERSION: 01.05.02 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 a9ce695..89c2cc8 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.01 + VERSION: 01.05.02 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index c49d9d3..242bde9 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 0165526..751c237 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.01 +VERSION: 01.05.02 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index ea7d9ae..b182ad0 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.05.01 + 01.05.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.05.02.sql b/source/packages/com_mokoog/sql/updates/mysql/01.05.02.sql new file mode 100644 index 0000000..b47f3f7 --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.05.02.sql @@ -0,0 +1 @@ +/* 01.05.02 — no schema changes */ diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index af3d433..265f7e8 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.01 + 01.05.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index 4c1c904..79d1528 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.01 + 01.05.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index 6218c4f..699d2f9 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.01 + 01.05.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index 270a468..dcfc650 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.05.01 + 01.05.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech From 8582a3eac563973507a39279d0ed03728ce1aec8 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Mon, 29 Jun 2026 09:35:36 -0500 Subject: [PATCH 02/19] fix: resolve release blockers #97 (scalar JSON-LD 500) and #98 (no edit UI) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #97 — Fatal frontend 500 from scalar custom_schema: - MokoOGContent::validateJson() now requires a JSON object/array (rejects scalars like 42/"x"/true that previously passed and were stored) - MokoOG render path guards with is_array($decoded) so already-stored scalar payloads can no longer crash the public page #98 — Missing single-tag create/edit admin UI: - Add Controller/TagController (FormController), View/Tag/HtmlView, tmpl/tag/edit.php - Link OG title in the list to the editor; add New/Edit toolbar buttons - Declare tmpl/tag folder in the component manifest - tag.xml: switch cross-package PLG_CONTENT_* labels to COM_MOKOOG_* keys, make content_type/content_id editable+required (enables New), add language field - Add the new COM_MOKOOG_* strings to en-GB and en-US Also fixes #77 while here: seo_title/meta_description form maxlength now match the DB columns (70/200) instead of 255. --- source/packages/com_mokoog/forms/tag.xml | 36 +++++---- .../com_mokoog/language/en-GB/com_mokoog.ini | 16 ++++ .../com_mokoog/language/en-US/com_mokoog.ini | 16 ++++ source/packages/com_mokoog/mokoog.xml | 1 + .../src/Controller/TagController.php | 31 ++++++++ .../com_mokoog/src/View/Tag/HtmlView.php | 76 +++++++++++++++++++ .../com_mokoog/src/View/Tags/HtmlView.php | 2 + source/packages/com_mokoog/tmpl/tag/edit.php | 41 ++++++++++ .../packages/com_mokoog/tmpl/tags/default.php | 4 +- .../src/Extension/MokoOGContent.php | 9 ++- .../src/Extension/MokoOG.php | 4 +- 11 files changed, 220 insertions(+), 16 deletions(-) create mode 100644 source/packages/com_mokoog/src/Controller/TagController.php create mode 100644 source/packages/com_mokoog/src/View/Tag/HtmlView.php create mode 100644 source/packages/com_mokoog/tmpl/tag/edit.php diff --git a/source/packages/com_mokoog/forms/tag.xml b/source/packages/com_mokoog/forms/tag.xml index 7b4a35f..7799093 100644 --- a/source/packages/com_mokoog/forms/tag.xml +++ b/source/packages/com_mokoog/forms/tag.xml @@ -16,13 +16,15 @@ name="content_type" type="text" label="COM_MOKOOG_FIELD_CONTENT_TYPE" - readonly="true" + description="COM_MOKOOG_FIELD_CONTENT_TYPE_DESC" + required="true" /> JPUBLISHED + + + -
+
diff --git a/source/packages/com_mokoog/language/en-GB/com_mokoog.ini b/source/packages/com_mokoog/language/en-GB/com_mokoog.ini index 4f0d4d3..ae9e73d 100644 --- a/source/packages/com_mokoog/language/en-GB/com_mokoog.ini +++ b/source/packages/com_mokoog/language/en-GB/com_mokoog.ini @@ -66,3 +66,19 @@ COM_MOKOOG_COVERAGE_ARTICLES="%d of %d articles have OG tags" COM_MOKOOG_COVERAGE_MISSING_TITLE="%d tags missing custom title" COM_MOKOOG_COVERAGE_MISSING_DESC="%d tags missing custom description" COM_MOKOOG_COVERAGE_MISSING_IMAGE="%d tags missing custom image" + +; Single-tag edit form +COM_MOKOOG_TAG_NEW="MokoSuiteOpenGraph - New OG Tag" +COM_MOKOOG_TAG_EDIT="MokoSuiteOpenGraph - Edit OG Tag" +COM_MOKOOG_TAB_DETAILS="Details" +COM_MOKOOG_FIELDSET_SEO="SEO Meta Tags" +COM_MOKOOG_FIELD_CONTENT_TYPE_DESC="The content type this OG tag applies to (e.g. com_content, menu, com_content.category)." +COM_MOKOOG_FIELD_CONTENT_ID_DESC="The ID of the content item this OG tag applies to." +COM_MOKOOG_FIELD_SEO_TITLE="SEO Title" +COM_MOKOOG_FIELD_SEO_TITLE_DESC="Overrides the page <title> tag (max 70 characters)." +COM_MOKOOG_FIELD_META_DESCRIPTION="Meta Description" +COM_MOKOOG_FIELD_META_DESCRIPTION_DESC="Overrides the page meta description (max 200 characters)." +COM_MOKOOG_FIELD_ROBOTS="Robots" +COM_MOKOOG_FIELD_ROBOTS_DESC="Per-page robots directive, e.g. noindex, nofollow." +COM_MOKOOG_FIELD_CANONICAL_URL="Canonical URL" +COM_MOKOOG_FIELD_CANONICAL_URL_DESC="Overrides the canonical URL for this content item (http/https only)." diff --git a/source/packages/com_mokoog/language/en-US/com_mokoog.ini b/source/packages/com_mokoog/language/en-US/com_mokoog.ini index 4f0d4d3..ae9e73d 100644 --- a/source/packages/com_mokoog/language/en-US/com_mokoog.ini +++ b/source/packages/com_mokoog/language/en-US/com_mokoog.ini @@ -66,3 +66,19 @@ COM_MOKOOG_COVERAGE_ARTICLES="%d of %d articles have OG tags" COM_MOKOOG_COVERAGE_MISSING_TITLE="%d tags missing custom title" COM_MOKOOG_COVERAGE_MISSING_DESC="%d tags missing custom description" COM_MOKOOG_COVERAGE_MISSING_IMAGE="%d tags missing custom image" + +; Single-tag edit form +COM_MOKOOG_TAG_NEW="MokoSuiteOpenGraph - New OG Tag" +COM_MOKOOG_TAG_EDIT="MokoSuiteOpenGraph - Edit OG Tag" +COM_MOKOOG_TAB_DETAILS="Details" +COM_MOKOOG_FIELDSET_SEO="SEO Meta Tags" +COM_MOKOOG_FIELD_CONTENT_TYPE_DESC="The content type this OG tag applies to (e.g. com_content, menu, com_content.category)." +COM_MOKOOG_FIELD_CONTENT_ID_DESC="The ID of the content item this OG tag applies to." +COM_MOKOOG_FIELD_SEO_TITLE="SEO Title" +COM_MOKOOG_FIELD_SEO_TITLE_DESC="Overrides the page <title> tag (max 70 characters)." +COM_MOKOOG_FIELD_META_DESCRIPTION="Meta Description" +COM_MOKOOG_FIELD_META_DESCRIPTION_DESC="Overrides the page meta description (max 200 characters)." +COM_MOKOOG_FIELD_ROBOTS="Robots" +COM_MOKOOG_FIELD_ROBOTS_DESC="Per-page robots directive, e.g. noindex, nofollow." +COM_MOKOOG_FIELD_CANONICAL_URL="Canonical URL" +COM_MOKOOG_FIELD_CANONICAL_URL_DESC="Overrides the canonical URL for this content item (http/https only)." diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index b182ad0..cd9dc4c 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -50,6 +50,7 @@ View + tag tags diff --git a/source/packages/com_mokoog/src/Controller/TagController.php b/source/packages/com_mokoog/src/Controller/TagController.php new file mode 100644 index 0000000..c1ce226 --- /dev/null +++ b/source/packages/com_mokoog/src/Controller/TagController.php @@ -0,0 +1,31 @@ + + * @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. + * @license GNU General Public License version 3 or later; see LICENSE + */ + +namespace Joomla\Component\MokoOG\Administrator\Controller; + +defined('_JEXEC') or die; + +use Joomla\CMS\MVC\Controller\FormController; + +/** + * Controller for a single OG tag record. + * + * Provides the standard add/edit/save/apply/cancel tasks via FormController, + * backed by the existing TagModel (AdminModel) and TagTable. + */ +class TagController extends FormController +{ + /** + * The list view to redirect to after save/cancel. + * + * @var string + */ + protected $view_list = 'tags'; +} diff --git a/source/packages/com_mokoog/src/View/Tag/HtmlView.php b/source/packages/com_mokoog/src/View/Tag/HtmlView.php new file mode 100644 index 0000000..8b5d31a --- /dev/null +++ b/source/packages/com_mokoog/src/View/Tag/HtmlView.php @@ -0,0 +1,76 @@ + + * @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. + * @license GNU General Public License version 3 or later; see LICENSE + */ + +namespace Joomla\Component\MokoOG\Administrator\View\Tag; + +defined('_JEXEC') or die; + +use Joomla\CMS\Factory; +use Joomla\CMS\Language\Text; +use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; +use Joomla\CMS\Toolbar\ToolbarHelper; + +/** + * Edit view for a single OG tag record. + */ +class HtmlView extends BaseHtmlView +{ + /** + * The edit form. + * + * @var \Joomla\CMS\Form\Form + */ + protected $form; + + /** + * The item being edited. + * + * @var object + */ + protected $item; + + /** + * Display the view. + * + * @param string $tpl Template name + * + * @return void + */ + public function display($tpl = null): void + { + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + + $this->addToolbar(); + + parent::display($tpl); + } + + /** + * Add the edit toolbar. + * + * @return void + */ + protected function addToolbar(): void + { + Factory::getApplication()->getInput()->set('hidemainmenu', true); + + $isNew = empty($this->item->id); + + ToolbarHelper::title( + Text::_($isNew ? 'COM_MOKOOG_TAG_NEW' : 'COM_MOKOOG_TAG_EDIT'), + 'bookmark' + ); + + ToolbarHelper::apply('tag.apply'); + ToolbarHelper::save('tag.save'); + ToolbarHelper::cancel('tag.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE'); + } +} diff --git a/source/packages/com_mokoog/src/View/Tags/HtmlView.php b/source/packages/com_mokoog/src/View/Tags/HtmlView.php index 9a07a00..e80d0ae 100644 --- a/source/packages/com_mokoog/src/View/Tags/HtmlView.php +++ b/source/packages/com_mokoog/src/View/Tags/HtmlView.php @@ -81,6 +81,8 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { ToolbarHelper::title(Text::_('COM_MOKOOG_TAGS_TITLE'), 'bookmark'); + ToolbarHelper::addNew('tag.add'); + ToolbarHelper::editList('tag.edit'); ToolbarHelper::custom('batch.generate', 'refresh', '', 'COM_MOKOOG_TOOLBAR_BATCH_GENERATE', false); ToolbarHelper::custom('importexport.export', 'download', '', 'COM_MOKOOG_TOOLBAR_EXPORT', false); ToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'tags.delete'); diff --git a/source/packages/com_mokoog/tmpl/tag/edit.php b/source/packages/com_mokoog/tmpl/tag/edit.php new file mode 100644 index 0000000..63bfe41 --- /dev/null +++ b/source/packages/com_mokoog/tmpl/tag/edit.php @@ -0,0 +1,41 @@ + + * @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. + * @license GNU General Public License version 3 or later; see LICENSE + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\HTML\HTMLHelper; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Router\Route; + +/** @var \Joomla\Component\MokoOG\Administrator\View\Tag\HtmlView $this */ + +HTMLHelper::_('behavior.formvalidator'); +?> +
+
+
+ 'details']); ?> + + + form->renderFieldset('details'); ?> + + + + form->renderFieldset('seo'); ?> + + + +
+
+ + + +
diff --git a/source/packages/com_mokoog/tmpl/tags/default.php b/source/packages/com_mokoog/tmpl/tags/default.php index f3a3ad0..bf6a82b 100644 --- a/source/packages/com_mokoog/tmpl/tags/default.php +++ b/source/packages/com_mokoog/tmpl/tags/default.php @@ -85,7 +85,9 @@ $token = Session::getFormToken(); content_id; ?> - escape($item->og_title ?: '(' . Text::_('COM_MOKOOG_AUTO_GENERATED') . ')'); ?> + + escape($item->og_title ?: '(' . Text::_('COM_MOKOOG_AUTO_GENERATED') . ')'); ?> + og_image) : ?> diff --git a/source/packages/plg_content_mokoog/src/Extension/MokoOGContent.php b/source/packages/plg_content_mokoog/src/Extension/MokoOGContent.php index 91550d7..c7a792b 100644 --- a/source/packages/plg_content_mokoog/src/Extension/MokoOGContent.php +++ b/source/packages/plg_content_mokoog/src/Extension/MokoOGContent.php @@ -322,7 +322,14 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface { $json = trim($json); - if ($json === '' || json_decode($json) === null) { + if ($json === '') { + return ''; + } + + // Only accept JSON objects/arrays. Scalars (42, "x", true) decode to a + // non-null value but would crash the frontend renderer when treated as + // an array (writing $decoded['@context'] onto a scalar is a fatal error). + if (!\is_array(json_decode($json, true))) { return ''; } diff --git a/source/packages/plg_system_mokoog/src/Extension/MokoOG.php b/source/packages/plg_system_mokoog/src/Extension/MokoOG.php index b472a9a..fc75984 100644 --- a/source/packages/plg_system_mokoog/src/Extension/MokoOG.php +++ b/source/packages/plg_system_mokoog/src/Extension/MokoOG.php @@ -358,7 +358,9 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface if (!empty($customSchema)) { $decoded = json_decode($customSchema, true); - if ($decoded) { + // Guard against scalar/invalid payloads — only arrays/objects are + // valid JSON-LD. Writing an array offset onto a scalar is fatal. + if (\is_array($decoded) && $decoded !== []) { if (empty($decoded['@context'])) { $decoded['@context'] = 'https://schema.org'; } From e6328a1e8da1a768b019ede8d1c419f1d270b9a3 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Mon, 29 Jun 2026 14:36:11 +0000 Subject: [PATCH 03/19] chore(version): pre-release bump to 01.06.02-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokoog/mokoog.xml | 2 +- source/packages/com_mokoog/sql/updates/mysql/01.06.02.sql | 1 + source/packages/plg_content_mokoog/mokoog.xml | 2 +- source/packages/plg_system_mokoog/mokoog.xml | 2 +- source/packages/plg_webservices_mokoog/mokoog.xml | 2 +- source/pkg_mokoog.xml | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 source/packages/com_mokoog/sql/updates/mysql/01.06.02.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 770cd19..72555f6 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.05.02 +# VERSION: 01.06.02 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 9288eb0..2851985 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 89e1c54..cac32ca 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.02 + VERSION: 01.06.02 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 89c2cc8..80c8f02 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.02 + VERSION: 01.06.02 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index 242bde9..9f0e0b4 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 751c237..e3047d0 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.02 +VERSION: 01.06.02 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index cd9dc4c..1bafe4f 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.05.02 + 01.06.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.06.02.sql b/source/packages/com_mokoog/sql/updates/mysql/01.06.02.sql new file mode 100644 index 0000000..b9fcc0f --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.06.02.sql @@ -0,0 +1 @@ +/* 01.06.02 — no schema changes */ diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index 265f7e8..bdbef39 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.02 + 01.06.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index 79d1528..25e2fc1 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.02 + 01.06.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index 699d2f9..d951c22 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.02 + 01.06.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index dcfc650..6e09277 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.05.02 + 01.06.02 2026-05-23 Moko Consulting hello@mokoconsulting.tech From 8858c81f87523e2b5e97fdb9d546ba2066e135a8 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Mon, 29 Jun 2026 14:41:27 +0000 Subject: [PATCH 04/19] chore(version): pre-release bump to 01.06.03-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokoog/mokoog.xml | 2 +- source/packages/com_mokoog/sql/updates/mysql/01.06.03.sql | 1 + source/packages/plg_content_mokoog/mokoog.xml | 2 +- source/packages/plg_system_mokoog/mokoog.xml | 2 +- source/packages/plg_webservices_mokoog/mokoog.xml | 2 +- source/pkg_mokoog.xml | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 source/packages/com_mokoog/sql/updates/mysql/01.06.03.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 72555f6..8858900 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.06.02 +# VERSION: 01.06.03 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 2851985..e21159b 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 cac32ca..6852e94 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.06.02 + VERSION: 01.06.03 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 80c8f02..857af78 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.06.02 + VERSION: 01.06.03 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index 9f0e0b4..1978c33 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 e3047d0..bd1a3e7 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.06.02 +VERSION: 01.06.03 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index 1bafe4f..72c9a3d 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.06.02 + 01.06.03 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.06.03.sql b/source/packages/com_mokoog/sql/updates/mysql/01.06.03.sql new file mode 100644 index 0000000..b25e218 --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.06.03.sql @@ -0,0 +1 @@ +/* 01.06.03 — no schema changes */ diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index bdbef39..0fbb4f2 100644 --- a/source/packages/plg_content_mokoog/mokoog.xml +++ b/source/packages/plg_content_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> Content - MokoSuiteOpenGraph - 01.06.02 + 01.06.03 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index 25e2fc1..94072b2 100644 --- a/source/packages/plg_system_mokoog/mokoog.xml +++ b/source/packages/plg_system_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> System - MokoSuiteOpenGraph - 01.06.02 + 01.06.03 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index d951c22..ae296eb 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.06.02 + 01.06.03 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index 6e09277..5488877 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.06.02 + 01.06.03 2026-05-23 Moko Consulting hello@mokoconsulting.tech From 71a102028d424ec64e1d7918ff32a43942db9561 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Mon, 29 Jun 2026 09:52:51 -0500 Subject: [PATCH 05/19] fix: security & correctness batch (#99, #100, #101, #102, #106) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #99 — AI AJAX endpoint hardening: - require core.edit/core.create on com_content before generating (was reachable by any authenticated back-end user → paid-credit abuse) - callAiApi: 20s timeout + HTTP status check (throw on non-200) instead of silently returning an empty string #100 — Sitemap information disclosure + robustness: - filter to public (guest) view levels so registered/special-access articles are never written into the public sitemap - atomic write (temp file + rename) so concurrent saves can't expose a half-written sitemap.xml - (throttling + SEF URLs remain follow-ups, noted on the issue) #101 — Expose newer columns in CSV + API: - og_video, event_data, recipe_data, custom_schema added to CSV export/import (appended, so existing CSVs still import) and to the REST API field whitelist - import validates JSON fields as arrays/objects and og_video as http(s) (prevents re-introducing the #97 scalar-JSON-LD crash via import) #102 — Forward-compat (complete): - Factory::getLanguage() -> getApplication()->getLanguage() (4 sites) - Joomla\CMS\Filesystem\File/Folder -> Joomla\Filesystem\* (ImageHelper, ImageGenerator) #106 — partial: loadArticle() now caches null misses (array_key_exists), getArticleDate() skips 0000-00-00 dates. Batch-JS halt deferred — the offset=0 design re-fetches failed rows, so the created>0 guard prevents an infinite loop; a safe fix needs cursor-based pagination in BatchController. --- .../api/src/View/Tags/JsonapiView.php | 8 +++ .../src/Controller/ImportExportController.php | 55 ++++++++++++++++++- .../src/Extension/MokoOG.php | 46 +++++++++++++--- .../src/Helper/ImageGenerator.php | 2 +- .../src/Helper/ImageHelper.php | 4 +- .../src/Helper/SitemapBuilder.php | 22 +++++++- 6 files changed, 124 insertions(+), 13 deletions(-) diff --git a/source/packages/com_mokoog/api/src/View/Tags/JsonapiView.php b/source/packages/com_mokoog/api/src/View/Tags/JsonapiView.php index 4a33148..9ac7aba 100644 --- a/source/packages/com_mokoog/api/src/View/Tags/JsonapiView.php +++ b/source/packages/com_mokoog/api/src/View/Tags/JsonapiView.php @@ -31,10 +31,14 @@ class JsonapiView extends BaseApiView 'og_description', 'og_image', 'og_type', + 'og_video', 'seo_title', 'meta_description', 'robots', 'canonical_url', + 'event_data', + 'recipe_data', + 'custom_schema', 'language', 'published', 'created', @@ -54,10 +58,14 @@ class JsonapiView extends BaseApiView 'og_description', 'og_image', 'og_type', + 'og_video', 'seo_title', 'meta_description', 'robots', 'canonical_url', + 'event_data', + 'recipe_data', + 'custom_schema', 'language', 'published', 'created', diff --git a/source/packages/com_mokoog/src/Controller/ImportExportController.php b/source/packages/com_mokoog/src/Controller/ImportExportController.php index dd0a446..befda03 100644 --- a/source/packages/com_mokoog/src/Controller/ImportExportController.php +++ b/source/packages/com_mokoog/src/Controller/ImportExportController.php @@ -60,6 +60,10 @@ class ImportExportController extends BaseController $db->quoteName('t.robots'), $db->quoteName('t.canonical_url'), $db->quoteName('t.language'), + $db->quoteName('t.og_video'), + $db->quoteName('t.event_data'), + $db->quoteName('t.recipe_data'), + $db->quoteName('t.custom_schema'), ]) ->from($db->quoteName('#__mokoog_tags', 't')) ->leftJoin( @@ -84,7 +88,7 @@ class ImportExportController extends BaseController 'content_type', 'content_id', 'article_title', 'og_title', 'og_description', 'og_image', 'og_type', 'seo_title', 'meta_description', 'robots', 'canonical_url', - 'language', + 'language', 'og_video', 'event_data', 'recipe_data', 'custom_schema', ]); foreach ($rows as $row) { @@ -187,6 +191,10 @@ class ImportExportController extends BaseController $robots = trim($row[9] ?? ''); $canonicalUrl = trim($row[10] ?? ''); $language = trim($row[11] ?? '*'); + $ogVideo = $this->sanitizeUrl($row[12] ?? ''); + $eventData = $this->validateJsonField($row[13] ?? ''); + $recipeData = $this->validateJsonField($row[14] ?? ''); + $customSchema = $this->validateJsonField($row[15] ?? ''); // Validate language tag format (e.g., 'en-GB', '*') if ($language !== '*' && !preg_match('/^[a-z]{2,3}-[A-Z]{2}$/', $language)) { @@ -229,6 +237,10 @@ class ImportExportController extends BaseController 'robots' => $robots, 'canonical_url' => $canonicalUrl, 'language' => $language, + 'og_video' => $ogVideo, + 'event_data' => $eventData, + 'recipe_data' => $recipeData, + 'custom_schema' => $customSchema, 'published' => 1, 'modified' => $now, ]; @@ -252,4 +264,45 @@ class ImportExportController extends BaseController ); $app->redirect('index.php?option=com_mokoog&view=tags'); } + + /** + * Validate a JSON field — returns trimmed JSON only if it is an object/array. + * + * Scalars and invalid JSON are dropped to '' so an import can never inject a + * payload that crashes the frontend JSON-LD renderer. + * + * @param string $value Raw CSV cell value + * + * @return string + */ + private function validateJsonField(string $value): string + { + $value = trim($value); + + if ($value === '' || !\is_array(json_decode($value, true))) { + return ''; + } + + return $value; + } + + /** + * Sanitize a URL to only allow http/https schemes. + * + * @param string $url Raw CSV cell value + * + * @return string Sanitized URL or empty string + */ + private function sanitizeUrl(string $url): string + { + $url = trim($url); + + if ($url === '') { + return ''; + } + + $scheme = strtolower((string) parse_url($url, PHP_URL_SCHEME)); + + return \in_array($scheme, ['http', 'https'], true) ? $url : ''; + } } diff --git a/source/packages/plg_system_mokoog/src/Extension/MokoOG.php b/source/packages/plg_system_mokoog/src/Extension/MokoOG.php index fc75984..e3115dd 100644 --- a/source/packages/plg_system_mokoog/src/Extension/MokoOG.php +++ b/source/packages/plg_system_mokoog/src/Extension/MokoOG.php @@ -139,7 +139,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface } // og:locale from current language - $langTag = Factory::getLanguage()->getTag(); + $langTag = $this->getApplication()->getLanguage()->getTag(); $ogLocale = str_replace('-', '_', $langTag); $doc->setMetaData('og:locale', $ogLocale, 'property'); @@ -476,7 +476,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface ->where($db->quoteName('content_type') . ' = ' . $db->quote($option)) ->where($db->quoteName('content_id') . ' = ' . (int) $id) ->where($db->quoteName('published') . ' = 1') - ->where('(' . $db->quoteName('language') . ' = ' . $db->quote(Factory::getLanguage()->getTag()) + ->where('(' . $db->quoteName('language') . ' = ' . $db->quote($this->getApplication()->getLanguage()->getTag()) . ' OR ' . $db->quoteName('language') . ' = ' . $db->quote('*') . ')') ->order('CASE WHEN ' . $db->quoteName('language') . ' = ' . $db->quote('*') . ' THEN 1 ELSE 0 END ASC'); @@ -496,7 +496,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface private function loadOgDataByType(string $contentType, int $contentId): ?object { $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); - $lang = Factory::getLanguage()->getTag(); + $lang = $this->getApplication()->getLanguage()->getTag(); $query = $db->getQuery(true) ->select('*') @@ -523,7 +523,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface private function loadOgDataByMenu(int $menuId): ?object { $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); - $lang = Factory::getLanguage()->getTag(); + $lang = $this->getApplication()->getLanguage()->getTag(); $query = $db->getQuery(true) ->select('*') @@ -672,7 +672,9 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface { static $cache = []; - if (isset($cache[$id])) { + // array_key_exists (not isset) so a negative lookup (null) is also cached + // and not re-queried on every call within the request. + if (\array_key_exists($id, $cache)) { return $cache[$id]; } @@ -704,8 +706,15 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface private function getArticleDate(int $id, string $field): string { $article = $this->loadArticle($id); + $value = $article->$field ?? ''; - return $article->$field ?? ''; + // Skip zero/empty dates — emitting "0000-00-00 00:00:00" as + // article:published_time/modified_time produces invalid metadata. + if ($value === '' || str_starts_with($value, '0000-00-00')) { + return ''; + } + + return $value; } /** @@ -860,6 +869,14 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface return; } + // Require article-edit capability — this triggers outbound paid AI calls, + // so it must not be reachable by every authenticated back-end user. + if (!$app->getIdentity()->authorise('core.edit', 'com_content') + && !$app->getIdentity()->authorise('core.create', 'com_content')) { + $event->setArgument('result', ['Forbidden — insufficient permissions']); + return; + } + if (!$this->params->get('ai_enabled', 0)) { $event->setArgument('result', ['AI generation is not enabled']); return; @@ -904,6 +921,9 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface { $http = \Joomla\CMS\Http\HttpFactory::getHttp(); + // Cap how long a hung provider can block the admin request. + $timeout = 20; + if ($provider === 'claude') { $response = $http->post( 'https://api.anthropic.com/v1/messages', @@ -916,9 +936,14 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface 'Content-Type' => 'application/json', 'x-api-key' => $apiKey, 'anthropic-version' => '2023-06-01', - ] + ], + $timeout ); + if ((int) $response->code !== 200) { + throw new \RuntimeException('Claude API request failed (HTTP ' . (int) $response->code . ')'); + } + $data = json_decode($response->body, true); return trim($data['content'][0]['text'] ?? ''); @@ -934,9 +959,14 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $apiKey, - ] + ], + $timeout ); + if ((int) $response->code !== 200) { + throw new \RuntimeException('OpenAI API request failed (HTTP ' . (int) $response->code . ')'); + } + $data = json_decode($response->body, true); return trim($data['choices'][0]['message']['content'] ?? ''); diff --git a/source/packages/plg_system_mokoog/src/Helper/ImageGenerator.php b/source/packages/plg_system_mokoog/src/Helper/ImageGenerator.php index 7a16305..737684d 100644 --- a/source/packages/plg_system_mokoog/src/Helper/ImageGenerator.php +++ b/source/packages/plg_system_mokoog/src/Helper/ImageGenerator.php @@ -12,7 +12,7 @@ namespace Joomla\Plugin\System\MokoOG\Helper; defined('_JEXEC') or die; -use Joomla\CMS\Filesystem\Folder; +use Joomla\Filesystem\Folder; use Joomla\CMS\Log\Log; class ImageGenerator diff --git a/source/packages/plg_system_mokoog/src/Helper/ImageHelper.php b/source/packages/plg_system_mokoog/src/Helper/ImageHelper.php index 2aaf5e9..3d8e9ac 100644 --- a/source/packages/plg_system_mokoog/src/Helper/ImageHelper.php +++ b/source/packages/plg_system_mokoog/src/Helper/ImageHelper.php @@ -12,8 +12,8 @@ namespace Joomla\Plugin\System\MokoOG\Helper; defined('_JEXEC') or die; -use Joomla\CMS\Filesystem\File; -use Joomla\CMS\Filesystem\Folder; +use Joomla\Filesystem\File; +use Joomla\Filesystem\Folder; use Joomla\CMS\Log\Log; class ImageHelper diff --git a/source/packages/plg_system_mokoog/src/Helper/SitemapBuilder.php b/source/packages/plg_system_mokoog/src/Helper/SitemapBuilder.php index 9f30300..45b4040 100644 --- a/source/packages/plg_system_mokoog/src/Helper/SitemapBuilder.php +++ b/source/packages/plg_system_mokoog/src/Helper/SitemapBuilder.php @@ -37,12 +37,20 @@ class SitemapBuilder $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + // Only include content the public (guest, user id 0) can view — never + // leak registered/special-access articles into the public sitemap. + $publicLevels = array_map('intval', \Joomla\CMS\Access\Access::getAuthorisedViewLevels(0)); + // Get all published articles $query = $db->getQuery(true) ->select($db->quoteName(['a.id', 'a.alias', 'a.catid', 'a.modified', 'a.language'])) ->from($db->quoteName('#__content', 'a')) ->where($db->quoteName('a.state') . ' = 1'); + if (!empty($publicLevels)) { + $query->where($db->quoteName('a.access') . ' IN (' . implode(',', $publicLevels) . ')'); + } + $db->setQuery($query); $articles = $db->loadObjectList(); @@ -104,7 +112,19 @@ class SitemapBuilder public static function writeToFile(string $xml): bool { $path = JPATH_ROOT . '/sitemap.xml'; + $tmp = $path . '.' . uniqid('tmp', true); - return (bool) file_put_contents($path, $xml); + if (file_put_contents($tmp, $xml) === false) { + return false; + } + + // Atomic replace so concurrent saves never expose a half-written sitemap. + if (!@rename($tmp, $path)) { + @unlink($tmp); + + return false; + } + + return true; } } From a60ba86b1911489ef43eabf18e06af0f301c19d2 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Mon, 29 Jun 2026 14:53:12 +0000 Subject: [PATCH 06/19] chore(version): pre-release bump to 01.06.04-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokoog/mokoog.xml | 2 +- source/packages/com_mokoog/sql/updates/mysql/01.06.04.sql | 1 + source/packages/plg_content_mokoog/mokoog.xml | 2 +- source/packages/plg_system_mokoog/mokoog.xml | 2 +- source/packages/plg_webservices_mokoog/mokoog.xml | 2 +- source/pkg_mokoog.xml | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 source/packages/com_mokoog/sql/updates/mysql/01.06.04.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 8858900..88bef3d 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.06.03 +# VERSION: 01.06.04 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index e21159b..ac55446 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 6852e94..2b8d62a 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.06.03 + VERSION: 01.06.04 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 857af78..dbdd87e 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.06.03 + VERSION: 01.06.04 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index 1978c33..1a200a1 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 bd1a3e7..bc2ebe8 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.06.03 +VERSION: 01.06.04 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index 72c9a3d..d951724 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.06.03 + 01.06.04 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.06.04.sql b/source/packages/com_mokoog/sql/updates/mysql/01.06.04.sql new file mode 100644 index 0000000..2297d2a --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.06.04.sql @@ -0,0 +1 @@ +/* 01.06.04 — no schema changes */ diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index 0fbb4f2..abde27a 100644 --- a/source/packages/plg_content_mokoog/mokoog.xml +++ b/source/packages/plg_content_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> Content - MokoSuiteOpenGraph - 01.06.03 + 01.06.04 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index 94072b2..db69357 100644 --- a/source/packages/plg_system_mokoog/mokoog.xml +++ b/source/packages/plg_system_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> System - MokoSuiteOpenGraph - 01.06.03 + 01.06.04 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index ae296eb..bea844b 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.06.03 + 01.06.04 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index 5488877..f3b043c 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.06.03 + 01.06.04 2026-05-23 Moko Consulting hello@mokoconsulting.tech From 11e50c54bb7c7b78579465700060afc9e43c8bdb Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Mon, 29 Jun 2026 14:54:30 +0000 Subject: [PATCH 07/19] chore(version): pre-release bump to 01.06.05-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokoog/mokoog.xml | 2 +- source/packages/com_mokoog/sql/updates/mysql/01.06.05.sql | 1 + source/packages/plg_content_mokoog/mokoog.xml | 2 +- source/packages/plg_system_mokoog/mokoog.xml | 2 +- source/packages/plg_webservices_mokoog/mokoog.xml | 2 +- source/pkg_mokoog.xml | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 source/packages/com_mokoog/sql/updates/mysql/01.06.05.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 88bef3d..b08aacc 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.06.04 +# VERSION: 01.06.05 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index ac55446..053cd1f 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 2b8d62a..03cafc1 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.06.04 + VERSION: 01.06.05 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 dbdd87e..e0ba29d 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.06.04 + VERSION: 01.06.05 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index 1a200a1..b57bfc8 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 bc2ebe8..aac949d 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.06.04 +VERSION: 01.06.05 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index d951724..19fc76c 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.06.04 + 01.06.05 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.06.05.sql b/source/packages/com_mokoog/sql/updates/mysql/01.06.05.sql new file mode 100644 index 0000000..272fc02 --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.06.05.sql @@ -0,0 +1 @@ +/* 01.06.05 — no schema changes */ diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index abde27a..46b7e8d 100644 --- a/source/packages/plg_content_mokoog/mokoog.xml +++ b/source/packages/plg_content_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> Content - MokoSuiteOpenGraph - 01.06.04 + 01.06.05 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index db69357..8bec699 100644 --- a/source/packages/plg_system_mokoog/mokoog.xml +++ b/source/packages/plg_system_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> System - MokoSuiteOpenGraph - 01.06.04 + 01.06.05 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index bea844b..44aa841 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.06.04 + 01.06.05 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index f3b043c..9b00625 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.06.04 + 01.06.05 2026-05-23 Moko Consulting hello@mokoconsulting.tech From 87267d8e808c1e6f4b2dec42ae29355e790fef95 Mon Sep 17 00:00:00 2001 From: Jonathan Miller <1+jmiller@noreply.git.mokoconsulting.tech> Date: Mon, 29 Jun 2026 15:12:41 +0000 Subject: [PATCH 08/19] chore: migrate update server URLs to MokoGitea --- source/pkg_mokoog.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index 9b00625..a869354 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -31,7 +31,7 @@ - https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteOpenGraph/updates.xml + https://git.mokoconsulting.tech/api/packages/MokoConsulting/generic/MokoSuiteOpenGraph/latest/updates.xml true From 53bf4a3187b53f7c3c2995f38a5d8e6450f8e0d9 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Mon, 29 Jun 2026 15:14:04 +0000 Subject: [PATCH 09/19] chore(version): pre-release bump to 01.06.06-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokoog/mokoog.xml | 2 +- source/packages/com_mokoog/sql/updates/mysql/01.06.06.sql | 1 + source/packages/plg_content_mokoog/mokoog.xml | 2 +- source/packages/plg_system_mokoog/mokoog.xml | 2 +- source/packages/plg_webservices_mokoog/mokoog.xml | 2 +- source/pkg_mokoog.xml | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 source/packages/com_mokoog/sql/updates/mysql/01.06.06.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index b08aacc..15b12ed 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.06.05 +# VERSION: 01.06.06 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 053cd1f..295dd6d 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 03cafc1..fc0208e 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.06.05 + VERSION: 01.06.06 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 e0ba29d..7d14507 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.06.05 + VERSION: 01.06.06 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index b57bfc8..a14118d 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 aac949d..8f82040 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.06.05 +VERSION: 01.06.06 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index 19fc76c..92d872f 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.06.05 + 01.06.06 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.06.06.sql b/source/packages/com_mokoog/sql/updates/mysql/01.06.06.sql new file mode 100644 index 0000000..5c073d4 --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.06.06.sql @@ -0,0 +1 @@ +/* 01.06.06 — no schema changes */ diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index 46b7e8d..0dd0532 100644 --- a/source/packages/plg_content_mokoog/mokoog.xml +++ b/source/packages/plg_content_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> Content - MokoSuiteOpenGraph - 01.06.05 + 01.06.06 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index 8bec699..196a1b3 100644 --- a/source/packages/plg_system_mokoog/mokoog.xml +++ b/source/packages/plg_system_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> System - MokoSuiteOpenGraph - 01.06.05 + 01.06.06 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index 44aa841..1679e66 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.06.05 + 01.06.06 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index a869354..2532900 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.06.05 + 01.06.06 2026-05-23 Moko Consulting hello@mokoconsulting.tech From 32bb72d12d3bf81b42a0619384319837413d84f8 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Mon, 29 Jun 2026 15:22:48 +0000 Subject: [PATCH 10/19] chore(version): auto-bump patch 01.06.07-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokoog/mokoog.xml | 2 +- source/packages/com_mokoog/sql/updates/mysql/01.06.07.sql | 1 + source/packages/plg_content_mokoog/mokoog.xml | 2 +- source/packages/plg_system_mokoog/mokoog.xml | 2 +- source/packages/plg_webservices_mokoog/mokoog.xml | 2 +- source/pkg_mokoog.xml | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 source/packages/com_mokoog/sql/updates/mysql/01.06.07.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 15b12ed..45d7146 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.06.06 +# VERSION: 01.06.07 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 295dd6d..c8846f0 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 fc0208e..c51c3f1 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.06.06 + VERSION: 01.06.07 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 7d14507..bceeb50 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.06.06 + VERSION: 01.06.07 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index a14118d..0b24f08 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 8f82040..11f8b4f 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.06.06 +VERSION: 01.06.07 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index 92d872f..dc0afcd 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.06.06 + 01.06.07 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.06.07.sql b/source/packages/com_mokoog/sql/updates/mysql/01.06.07.sql new file mode 100644 index 0000000..b49f855 --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.06.07.sql @@ -0,0 +1 @@ +/* 01.06.07 — no schema changes */ diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index 0dd0532..3ccd3b7 100644 --- a/source/packages/plg_content_mokoog/mokoog.xml +++ b/source/packages/plg_content_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> Content - MokoSuiteOpenGraph - 01.06.06 + 01.06.07 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index 196a1b3..a6748c6 100644 --- a/source/packages/plg_system_mokoog/mokoog.xml +++ b/source/packages/plg_system_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> System - MokoSuiteOpenGraph - 01.06.06 + 01.06.07 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index 1679e66..754cee6 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.06.06 + 01.06.07 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index 2532900..65ff063 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.06.06 + 01.06.07 2026-05-23 Moko Consulting hello@mokoconsulting.tech From 543bd2b46421ca6dc444165318aa57b767cc2f6a Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Mon, 29 Jun 2026 15:23:05 +0000 Subject: [PATCH 11/19] chore(version): pre-release bump to 01.06.08-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- CHANGELOG.md | 2 +- CODE_OF_CONDUCT.md | 2 +- GOVERNANCE.md | 2 +- README.md | 2 +- SECURITY.md | 2 +- source/packages/com_mokoog/mokoog.xml | 2 +- source/packages/com_mokoog/sql/updates/mysql/01.06.08.sql | 1 + source/packages/plg_content_mokoog/mokoog.xml | 2 +- source/packages/plg_system_mokoog/mokoog.xml | 2 +- source/packages/plg_webservices_mokoog/mokoog.xml | 2 +- source/pkg_mokoog.xml | 2 +- 12 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 source/packages/com_mokoog/sql/updates/mysql/01.06.08.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 45d7146..15eaabd 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.06.07 +# VERSION: 01.06.08 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index c8846f0..ce5dc40 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 c51c3f1..8346454 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.06.07 + VERSION: 01.06.08 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 bceeb50..1bb6666 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.06.07 + VERSION: 01.06.08 PATH: /GOVERNANCE.md BRIEF: Project governance rules, roles, and decision process for Template-Joomla --> diff --git a/README.md b/README.md index 0b24f08..29bf3e7 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 11f8b4f..c3c8b93 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.06.07 +VERSION: 01.06.08 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index dc0afcd..786888e 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> com_mokoog - 01.06.07 + 01.06.08 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokoog/sql/updates/mysql/01.06.08.sql b/source/packages/com_mokoog/sql/updates/mysql/01.06.08.sql new file mode 100644 index 0000000..ec97fe3 --- /dev/null +++ b/source/packages/com_mokoog/sql/updates/mysql/01.06.08.sql @@ -0,0 +1 @@ +/* 01.06.08 — no schema changes */ diff --git a/source/packages/plg_content_mokoog/mokoog.xml b/source/packages/plg_content_mokoog/mokoog.xml index 3ccd3b7..abd9af1 100644 --- a/source/packages/plg_content_mokoog/mokoog.xml +++ b/source/packages/plg_content_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> Content - MokoSuiteOpenGraph - 01.06.07 + 01.06.08 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokoog/mokoog.xml b/source/packages/plg_system_mokoog/mokoog.xml index a6748c6..4ff26d6 100644 --- a/source/packages/plg_system_mokoog/mokoog.xml +++ b/source/packages/plg_system_mokoog/mokoog.xml @@ -8,7 +8,7 @@ --> System - MokoSuiteOpenGraph - 01.06.07 + 01.06.08 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokoog/mokoog.xml b/source/packages/plg_webservices_mokoog/mokoog.xml index 754cee6..c6f97ae 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.06.07 + 01.06.08 2026-05-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokoog.xml b/source/pkg_mokoog.xml index 65ff063..9fff03a 100644 --- a/source/pkg_mokoog.xml +++ b/source/pkg_mokoog.xml @@ -8,7 +8,7 @@ Package - MokoSuiteOpenGraph mokoog - 01.06.07 + 01.06.08 2026-05-23 Moko Consulting hello@mokoconsulting.tech From d8376d6cdf2dcef04ae9b03e43c6892bfc5ca33a Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Mon, 29 Jun 2026 10:25:59 -0500 Subject: [PATCH 12/19] fix: features & quality batch (#95, #103, #104, #107) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #95 — ACL + Options: - Add access.xml (core actions + mokoog.batch / mokoog.import custom actions) - Add config.xml (Permissions tab + note pointing settings to the system plugin) - Declare both in the manifest; Batch/ImportExport controllers now check the custom actions with a fallback to the prior core checks (no lockout) #103 — CSV import is now reachable: - Add an Import toolbar button that toggles a multipart file-upload form (jform[csv_file]) posting to importexport.import with a CSRF token #104 — Dead code + disk leak: - Delete unused ImageGenerator class and JsonLdBuilder::buildOrganization() - Add ImageHelper::pruneOldFiles() (deletes generated images older than 30d) and call it on content save so the generated-image cache is bounded #107 — Packaging: - Declare language/en-US in the component manifest (was never installed) - Remove undeclared empty stub dirs src/Field, src/Service --- source/packages/com_mokoog/access.xml | 20 ++ source/packages/com_mokoog/config.xml | 33 ++++ .../com_mokoog/language/en-GB/com_mokoog.ini | 8 + .../com_mokoog/language/en-US/com_mokoog.ini | 8 + source/packages/com_mokoog/mokoog.xml | 5 + .../src/Controller/BatchController.php | 10 +- .../src/Controller/ImportExportController.php | 3 +- .../packages/com_mokoog/src/Field/index.html | 1 - .../com_mokoog/src/Service/index.html | 1 - .../com_mokoog/src/View/Tags/HtmlView.php | 1 + .../packages/com_mokoog/tmpl/tags/default.php | 24 +++ .../src/Extension/MokoOG.php | 4 + .../src/Helper/ImageGenerator.php | 182 ------------------ .../src/Helper/ImageHelper.php | 33 ++++ .../src/Helper/JsonLdBuilder.php | 17 -- 15 files changed, 146 insertions(+), 204 deletions(-) create mode 100644 source/packages/com_mokoog/access.xml create mode 100644 source/packages/com_mokoog/config.xml delete mode 100644 source/packages/com_mokoog/src/Field/index.html delete mode 100644 source/packages/com_mokoog/src/Service/index.html delete mode 100644 source/packages/plg_system_mokoog/src/Helper/ImageGenerator.php diff --git a/source/packages/com_mokoog/access.xml b/source/packages/com_mokoog/access.xml new file mode 100644 index 0000000..2aa21c2 --- /dev/null +++ b/source/packages/com_mokoog/access.xml @@ -0,0 +1,20 @@ + + + +
+ + + + + + + + +
+
diff --git a/source/packages/com_mokoog/config.xml b/source/packages/com_mokoog/config.xml new file mode 100644 index 0000000..03202c4 --- /dev/null +++ b/source/packages/com_mokoog/config.xml @@ -0,0 +1,33 @@ + + + +
+ +
+
+ +
+
diff --git a/source/packages/com_mokoog/language/en-GB/com_mokoog.ini b/source/packages/com_mokoog/language/en-GB/com_mokoog.ini index ae9e73d..b920280 100644 --- a/source/packages/com_mokoog/language/en-GB/com_mokoog.ini +++ b/source/packages/com_mokoog/language/en-GB/com_mokoog.ini @@ -82,3 +82,11 @@ COM_MOKOOG_FIELD_ROBOTS="Robots" COM_MOKOOG_FIELD_ROBOTS_DESC="Per-page robots directive, e.g. noindex, nofollow." COM_MOKOOG_FIELD_CANONICAL_URL="Canonical URL" COM_MOKOOG_FIELD_CANONICAL_URL_DESC="Overrides the canonical URL for this content item (http/https only)." + +; ACL actions (access.xml) and component options (config.xml) +COM_MOKOOG_ACTION_BATCH="Batch Generate OG Tags" +COM_MOKOOG_ACTION_BATCH_DESC="Allows users in this group to run batch OG tag generation." +COM_MOKOOG_ACTION_IMPORT="Import / Export OG Tags" +COM_MOKOOG_ACTION_IMPORT_DESC="Allows users in this group to import and export OG tags via CSV." +COM_MOKOOG_CONFIG_NOTE_LABEL="Where are the settings?" +COM_MOKOOG_CONFIG_NOTE_DESC="Open Graph and SEO settings are configured in the System - MokoSuiteOpenGraph plugin (Extensions → Plugins). This screen manages component permissions only." diff --git a/source/packages/com_mokoog/language/en-US/com_mokoog.ini b/source/packages/com_mokoog/language/en-US/com_mokoog.ini index ae9e73d..b920280 100644 --- a/source/packages/com_mokoog/language/en-US/com_mokoog.ini +++ b/source/packages/com_mokoog/language/en-US/com_mokoog.ini @@ -82,3 +82,11 @@ COM_MOKOOG_FIELD_ROBOTS="Robots" COM_MOKOOG_FIELD_ROBOTS_DESC="Per-page robots directive, e.g. noindex, nofollow." COM_MOKOOG_FIELD_CANONICAL_URL="Canonical URL" COM_MOKOOG_FIELD_CANONICAL_URL_DESC="Overrides the canonical URL for this content item (http/https only)." + +; ACL actions (access.xml) and component options (config.xml) +COM_MOKOOG_ACTION_BATCH="Batch Generate OG Tags" +COM_MOKOOG_ACTION_BATCH_DESC="Allows users in this group to run batch OG tag generation." +COM_MOKOOG_ACTION_IMPORT="Import / Export OG Tags" +COM_MOKOOG_ACTION_IMPORT_DESC="Allows users in this group to import and export OG tags via CSV." +COM_MOKOOG_CONFIG_NOTE_LABEL="Where are the settings?" +COM_MOKOOG_CONFIG_NOTE_DESC="Open Graph and SEO settings are configured in the System - MokoSuiteOpenGraph plugin (Extensions → Plugins). This screen manages component permissions only." diff --git a/source/packages/com_mokoog/mokoog.xml b/source/packages/com_mokoog/mokoog.xml index 19fc76c..1fa979d 100644 --- a/source/packages/com_mokoog/mokoog.xml +++ b/source/packages/com_mokoog/mokoog.xml @@ -64,6 +64,11 @@
en-GB + en-US + + + access.xml + config.xml COM_MOKOOG diff --git a/source/packages/com_mokoog/src/Controller/BatchController.php b/source/packages/com_mokoog/src/Controller/BatchController.php index c07cba1..ee2aff8 100644 --- a/source/packages/com_mokoog/src/Controller/BatchController.php +++ b/source/packages/com_mokoog/src/Controller/BatchController.php @@ -29,7 +29,10 @@ class BatchController extends BaseController { Session::checkToken('get') || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403); - if (!Factory::getApplication()->getIdentity()->authorise('core.create', 'com_mokoog')) { + $identity = Factory::getApplication()->getIdentity(); + + if (!$identity->authorise('mokoog.batch', 'com_mokoog') + && !$identity->authorise('core.create', 'com_mokoog')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } @@ -62,7 +65,10 @@ class BatchController extends BaseController { Session::checkToken('get') || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403); - if (!Factory::getApplication()->getIdentity()->authorise('core.create', 'com_mokoog')) { + $identity = Factory::getApplication()->getIdentity(); + + if (!$identity->authorise('mokoog.batch', 'com_mokoog') + && !$identity->authorise('core.create', 'com_mokoog')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } diff --git a/source/packages/com_mokoog/src/Controller/ImportExportController.php b/source/packages/com_mokoog/src/Controller/ImportExportController.php index befda03..336d744 100644 --- a/source/packages/com_mokoog/src/Controller/ImportExportController.php +++ b/source/packages/com_mokoog/src/Controller/ImportExportController.php @@ -110,7 +110,8 @@ class ImportExportController extends BaseController $identity = Factory::getApplication()->getIdentity(); - if (!$identity->authorise('core.create', 'com_mokoog') || !$identity->authorise('core.edit', 'com_mokoog')) { + if (!$identity->authorise('mokoog.import', 'com_mokoog') + && !($identity->authorise('core.create', 'com_mokoog') && $identity->authorise('core.edit', 'com_mokoog'))) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } diff --git a/source/packages/com_mokoog/src/Field/index.html b/source/packages/com_mokoog/src/Field/index.html deleted file mode 100644 index 94906bc..0000000 --- a/source/packages/com_mokoog/src/Field/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/source/packages/com_mokoog/src/Service/index.html b/source/packages/com_mokoog/src/Service/index.html deleted file mode 100644 index 94906bc..0000000 --- a/source/packages/com_mokoog/src/Service/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/source/packages/com_mokoog/src/View/Tags/HtmlView.php b/source/packages/com_mokoog/src/View/Tags/HtmlView.php index e80d0ae..f0ae838 100644 --- a/source/packages/com_mokoog/src/View/Tags/HtmlView.php +++ b/source/packages/com_mokoog/src/View/Tags/HtmlView.php @@ -85,6 +85,7 @@ class HtmlView extends BaseHtmlView ToolbarHelper::editList('tag.edit'); ToolbarHelper::custom('batch.generate', 'refresh', '', 'COM_MOKOOG_TOOLBAR_BATCH_GENERATE', false); ToolbarHelper::custom('importexport.export', 'download', '', 'COM_MOKOOG_TOOLBAR_EXPORT', false); + ToolbarHelper::custom('mokoog.showimport', 'upload', '', 'COM_MOKOOG_TOOLBAR_IMPORT', false); ToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'tags.delete'); ToolbarHelper::preferences('com_mokoog'); } diff --git a/source/packages/com_mokoog/tmpl/tags/default.php b/source/packages/com_mokoog/tmpl/tags/default.php index bf6a82b..81b4d49 100644 --- a/source/packages/com_mokoog/tmpl/tags/default.php +++ b/source/packages/com_mokoog/tmpl/tags/default.php @@ -173,6 +173,23 @@ $token = Session::getFormToken(); + + +