Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| df99f2499e | |||
| 50c1b2ba9f | |||
| b66387bacb | |||
| 5a696b0e46 | |||
| d9087ac420 | |||
| dbf726e148 |
@@ -1,4 +1,4 @@
|
||||
# MokoJoomOpenGraph
|
||||
# MokoSuiteOpenGraph
|
||||
|
||||
Open Graph, Twitter Card, and social sharing meta tag management for Joomla. Per-article SEO with auto-generation fallback.
|
||||
|
||||
@@ -9,7 +9,7 @@ Open Graph, Twitter Card, and social sharing meta tag management for Joomla. Per
|
||||
| **Package** | `pkg_mokoog` |
|
||||
| **Language** | PHP 8.1+ |
|
||||
| **Branch** | develop on `dev`, merge to `main` (protected) |
|
||||
| **Wiki** | [MokoJoomOpenGraph Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoJoomOpenGraph/wiki) |
|
||||
| **Wiki** | [MokoSuiteOpenGraph Wiki](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteOpenGraph/wiki) |
|
||||
|
||||
## Commands
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: Gitea.Workflow
|
||||
# INGROUP: mokocli.Automation
|
||||
# VERSION: 01.04.11
|
||||
# VERSION: 01.06.01
|
||||
# BRIEF: Auto-create feature branch when an issue is opened
|
||||
|
||||
name: "Universal: Issue Branch"
|
||||
|
||||
+2
-1
@@ -1,6 +1,6 @@
|
||||
# Changelog
|
||||
|
||||
<!-- VERSION: 01.04.11 -->
|
||||
<!-- VERSION: 01.06.01 -->
|
||||
|
||||
All notable changes to MokoSuiteOpenGraph will be documented in this file.
|
||||
|
||||
@@ -61,6 +61,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||||
- Database table `#__mokoog_tags` with multilingual unique key
|
||||
|
||||
### Fixed
|
||||
- Fix SQL driver attribute `mysql` → `mysqli` in component manifest preventing fresh installs
|
||||
- Add exception logging to BatchController batch skip (#76)
|
||||
- Align form maxlength attributes with DB schema limits (#77)
|
||||
- Add `strip_tags()` input sanitization on OG text fields (#79)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# MokoSuiteOpenGraph
|
||||
|
||||
<!-- VERSION: 01.04.11 -->
|
||||
<!-- VERSION: 01.06.01 -->
|
||||
|
||||
Open Graph, Twitter Card, and social sharing meta tag management for Joomla 4/5/6.
|
||||
Open Graph, Twitter Card, and social sharing meta tag management for Joomla 6 and higher.
|
||||
|
||||
## Overview
|
||||
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla
|
||||
INGROUP: Template-Joomla.Documentation
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla
|
||||
PATH: /SECURITY.md
|
||||
VERSION: 01.04.11
|
||||
VERSION: 01.06.01
|
||||
BRIEF: Security vulnerability reporting and handling policy
|
||||
-->
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ info:
|
||||
REST API for managing Open Graph, SEO meta, and structured-data tags in
|
||||
Joomla via the MokoSuiteOpenGraph extension.
|
||||
|
||||
**Requires Joomla 6.0 or higher.**
|
||||
|
||||
The API follows Joomla's Web Services conventions and returns responses in
|
||||
[JSON:API](https://jsonapi.org/) format. All endpoints require
|
||||
authentication via a Joomla API token.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
; MokoJoomOpenGraph - Package System Language File
|
||||
; MokoSuiteOpenGraph - Package System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PKG_MOKOOG="MokoJoomOpenGraph"
|
||||
PKG_MOKOOG="MokoSuiteOpenGraph"
|
||||
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="MokoJoomOpenGraph requires PHP %s or later."
|
||||
PKG_MOKOOG_PHP_VERSION_ERROR="MokoSuiteOpenGraph requires PHP %s or later."
|
||||
PKG_MOKOOG_JOOMLA_VERSION_ERROR="MokoSuiteOpenGraph requires Joomla %s or later."
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
; MokoJoomOpenGraph - Package System Language File
|
||||
; MokoSuiteOpenGraph - Package System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PKG_MOKOOG="MokoJoomOpenGraph"
|
||||
PKG_MOKOOG="MokoSuiteOpenGraph"
|
||||
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="MokoJoomOpenGraph requires PHP %s or later."
|
||||
PKG_MOKOOG_PHP_VERSION_ERROR="MokoSuiteOpenGraph requires PHP %s or later."
|
||||
PKG_MOKOOG_JOOMLA_VERSION_ERROR="MokoSuiteOpenGraph requires Joomla %s or later."
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog.api
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
@@ -47,7 +47,7 @@ class TagsController extends ApiController
|
||||
throw new \RuntimeException('content_type and content_id are required', 400);
|
||||
}
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select($db->quoteName('id'))
|
||||
->from($db->quoteName('#__mokoog_tags'))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog.api
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
; MokoJoomOpenGraph - Component Language File
|
||||
; MokoSuiteOpenGraph - Component Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
COM_MOKOOG="MokoJoomOpenGraph"
|
||||
COM_MOKOOG_TAGS_TITLE="MokoJoomOpenGraph - Tag Manager"
|
||||
COM_MOKOOG="MokoSuiteOpenGraph"
|
||||
COM_MOKOOG_TAGS_TITLE="MokoSuiteOpenGraph - Tag Manager"
|
||||
COM_MOKOOG_SUBMENU_TAGS="Tags"
|
||||
COM_MOKOOG_NO_TAGS="No Open Graph tags have been created yet. Tags are created automatically when you edit articles or menu items."
|
||||
COM_MOKOOG_TABLE_CAPTION="Table of Open Graph tags"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; MokoJoomOpenGraph - Component System Language File
|
||||
; MokoSuiteOpenGraph - Component System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
COM_MOKOOG="MokoJoomOpenGraph"
|
||||
COM_MOKOOG="MokoSuiteOpenGraph"
|
||||
COM_MOKOOG_DESCRIPTION="Manage Open Graph and social sharing tags for all your content. View, edit, and batch-process OG metadata."
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
; MokoJoomOpenGraph - Component Language File
|
||||
; MokoSuiteOpenGraph - Component Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
COM_MOKOOG="MokoJoomOpenGraph"
|
||||
COM_MOKOOG_TAGS_TITLE="MokoJoomOpenGraph - Tag Manager"
|
||||
COM_MOKOOG="MokoSuiteOpenGraph"
|
||||
COM_MOKOOG_TAGS_TITLE="MokoSuiteOpenGraph - Tag Manager"
|
||||
COM_MOKOOG_SUBMENU_TAGS="Tags"
|
||||
COM_MOKOOG_NO_TAGS="No Open Graph tags have been created yet. Tags are created automatically when you edit articles or menu items."
|
||||
COM_MOKOOG_TABLE_CAPTION="Table of Open Graph tags"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; MokoJoomOpenGraph - Component System Language File
|
||||
; MokoSuiteOpenGraph - Component System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
COM_MOKOOG="MokoJoomOpenGraph"
|
||||
COM_MOKOOG="MokoSuiteOpenGraph"
|
||||
COM_MOKOOG_DESCRIPTION="Manage Open Graph and social sharing tags for all your content. View, edit, and batch-process OG metadata."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
@@ -8,7 +8,7 @@
|
||||
-->
|
||||
<extension type="component" method="upgrade">
|
||||
<name>com_mokoog</name>
|
||||
<version>01.04.11</version>
|
||||
<version>01.06.01</version>
|
||||
<creationDate>2026-05-23</creationDate>
|
||||
<author>Moko Consulting</author>
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
@@ -23,17 +23,17 @@
|
||||
|
||||
<install>
|
||||
<sql>
|
||||
<file driver="mysql" charset="utf8">sql/install.mysql.sql</file>
|
||||
<file driver="mysqli" charset="utf8">sql/install.mysql.sql</file>
|
||||
</sql>
|
||||
</install>
|
||||
<uninstall>
|
||||
<sql>
|
||||
<file driver="mysql" charset="utf8">sql/uninstall.mysql.sql</file>
|
||||
<file driver="mysqli" charset="utf8">sql/uninstall.mysql.sql</file>
|
||||
</sql>
|
||||
</uninstall>
|
||||
<update>
|
||||
<schemas>
|
||||
<schemapath type="mysql">sql/updates/mysql</schemapath>
|
||||
<schemapath type="mysqli">sql/updates/mysql</schemapath>
|
||||
</schemas>
|
||||
</update>
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
@@ -23,7 +23,7 @@ class Com_MokoOGInstallerScript
|
||||
*/
|
||||
public function install(InstallerAdapter $parent): void
|
||||
{
|
||||
echo '<p>MokoJoomOpenGraph component installed successfully.</p>';
|
||||
echo '<p>MokoSuiteOpenGraph component installed successfully.</p>';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35,6 +35,6 @@ class Com_MokoOGInstallerScript
|
||||
*/
|
||||
public function update(InstallerAdapter $parent): void
|
||||
{
|
||||
echo '<p>MokoJoomOpenGraph component updated successfully.</p>';
|
||||
echo '<p>MokoSuiteOpenGraph component updated successfully.</p>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- MokoJoomOpenGraph - Database Schema
|
||||
-- MokoSuiteOpenGraph - Database Schema
|
||||
-- Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
-- License: GPL-3.0-or-later
|
||||
--
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- MokoJoomOpenGraph - Uninstall
|
||||
-- MokoSuiteOpenGraph - Uninstall
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `#__mokoog_tags`;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- MokoJoomOpenGraph 01.01.00 — Add SEO meta management columns
|
||||
-- MokoSuiteOpenGraph 01.01.00 — Add SEO meta management columns
|
||||
--
|
||||
|
||||
ALTER TABLE `#__mokoog_tags`
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- MokoJoomOpenGraph 01.02.00 — Add multilingual OG tag support
|
||||
-- MokoSuiteOpenGraph 01.02.00 — Add multilingual OG tag support
|
||||
--
|
||||
|
||||
ALTER TABLE `#__mokoog_tags`
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- MokoJoomOpenGraph 01.03.00 - Add og_video column
|
||||
-- MokoSuiteOpenGraph 01.03.00 - Add og_video column
|
||||
--
|
||||
|
||||
ALTER TABLE `#__mokoog_tags` ADD COLUMN `og_video` VARCHAR(512) NOT NULL DEFAULT '' AFTER `og_type`;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--
|
||||
-- MokoJoomOpenGraph 01.04.00 - Add event_data and recipe_data columns
|
||||
-- MokoSuiteOpenGraph 01.04.00 - Add event_data and recipe_data columns
|
||||
--
|
||||
|
||||
ALTER TABLE `#__mokoog_tags` ADD COLUMN `event_data` TEXT NULL AFTER `og_video`;
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
/* 01.06.01 — no schema changes */
|
||||
@@ -27,13 +27,13 @@ class BatchController extends BaseController
|
||||
*/
|
||||
public function count(): void
|
||||
{
|
||||
Session::checkToken('get') || jexit(Text::_('JINVALID_TOKEN'));
|
||||
Session::checkToken('get') || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403);
|
||||
|
||||
if (!Factory::getApplication()->getIdentity()->authorise('core.create', 'com_mokoog')) {
|
||||
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
|
||||
}
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select('COUNT(*)')
|
||||
->from($db->quoteName('#__content', 'c'))
|
||||
@@ -60,7 +60,7 @@ class BatchController extends BaseController
|
||||
*/
|
||||
public function process(): void
|
||||
{
|
||||
Session::checkToken('get') || jexit(Text::_('JINVALID_TOKEN'));
|
||||
Session::checkToken('get') || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403);
|
||||
|
||||
if (!Factory::getApplication()->getIdentity()->authorise('core.create', 'com_mokoog')) {
|
||||
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
|
||||
@@ -69,7 +69,7 @@ class BatchController extends BaseController
|
||||
$app = Factory::getApplication();
|
||||
$limit = min($app->getInput()->getInt('limit', 50), 200);
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select($db->quoteName([
|
||||
'c.id', 'c.title', 'c.metadesc', 'c.introtext', 'c.fulltext', 'c.images',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -36,14 +36,14 @@ class ImportExportController extends BaseController
|
||||
*/
|
||||
public function export(): void
|
||||
{
|
||||
Session::checkToken('get') || jexit(Text::_('JINVALID_TOKEN'));
|
||||
Session::checkToken('get') || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403);
|
||||
|
||||
if (!Factory::getApplication()->getIdentity()->authorise('core.manage', 'com_mokoog')) {
|
||||
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
|
||||
}
|
||||
|
||||
$app = Factory::getApplication();
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
|
||||
// Join with #__content to get article titles for reference
|
||||
$query = $db->getQuery(true)
|
||||
@@ -102,7 +102,7 @@ class ImportExportController extends BaseController
|
||||
*/
|
||||
public function import(): void
|
||||
{
|
||||
Session::checkToken() || jexit(Text::_('JINVALID_TOKEN'));
|
||||
Session::checkToken() || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403);
|
||||
|
||||
$identity = Factory::getApplication()->getIdentity();
|
||||
|
||||
@@ -161,7 +161,7 @@ class ImportExportController extends BaseController
|
||||
return;
|
||||
}
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$header = fgetcsv($handle);
|
||||
$created = 0;
|
||||
$updated = 0;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
@@ -13,7 +13,7 @@ defined('_JEXEC') or die;
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
|
||||
// Total published articles
|
||||
$db->setQuery($db->getQuery(true)->select('COUNT(*)')->from('#__content')->where('state = 1'));
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage com_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_content_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; MokoJoomOpenGraph - Content Plugin Language File
|
||||
; MokoSuiteOpenGraph - Content Plugin Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; MokoJoomOpenGraph - Content Plugin System Language File
|
||||
; MokoSuiteOpenGraph - Content Plugin System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PLG_CONTENT_MOKOOG="Content - MokoJoomOpenGraph"
|
||||
PLG_CONTENT_MOKOOG="Content - MokoSuiteOpenGraph"
|
||||
PLG_CONTENT_MOKOOG_DESCRIPTION="Adds Open Graph fields to article and menu item edit forms for per-page social sharing control."
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; MokoJoomOpenGraph - Content Plugin Language File
|
||||
; MokoSuiteOpenGraph - Content Plugin Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; MokoJoomOpenGraph - Content Plugin System Language File
|
||||
; MokoSuiteOpenGraph - Content Plugin System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PLG_CONTENT_MOKOOG="Content - MokoJoomOpenGraph"
|
||||
PLG_CONTENT_MOKOOG="Content - MokoSuiteOpenGraph"
|
||||
PLG_CONTENT_MOKOOG_DESCRIPTION="Adds Open Graph fields to article and menu item edit forms for per-page social sharing control."
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_content_mokoog
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
* @license GPL-3.0-or-later
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"$schema": "https://developer.joomla.org/schemas/json-schema/web_assets.json",
|
||||
"name": "plg_content_mokoog",
|
||||
"version": "01.00.00",
|
||||
"description": "MokoJoomOpenGraph Content Plugin Assets",
|
||||
"description": "MokoSuiteOpenGraph Content Plugin Assets",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"assets": [
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_content_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_content_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_content_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
* @license GNU General Public License version 3 or later; see LICENSE
|
||||
-->
|
||||
<extension type="plugin" group="content" method="upgrade">
|
||||
<name>Content - MokoJoomOpenGraph</name>
|
||||
<version>01.04.11</version>
|
||||
<name>Content - MokoSuiteOpenGraph</name>
|
||||
<version>01.06.01</version>
|
||||
<creationDate>2026-05-23</creationDate>
|
||||
<author>Moko Consulting</author>
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_content_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_content_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
@@ -187,7 +187,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface
|
||||
$contentType = $supportedContexts[$context];
|
||||
$contentId = (int) $article->id;
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->delete($db->quoteName('#__mokoog_tags'))
|
||||
->where($db->quoteName('content_type') . ' = ' . $db->quote($contentType))
|
||||
@@ -208,7 +208,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface
|
||||
*/
|
||||
private function loadOgData(string $contentType, int $contentId, string $language = '*'): ?object
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select($db->quoteName([
|
||||
'og_title', 'og_description', 'og_image', 'og_type', 'og_video',
|
||||
@@ -239,7 +239,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface
|
||||
*/
|
||||
private function saveOgData(string $contentType, int $contentId, array $ogData, string $language = '*'): void
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
|
||||
// Check if record exists for this content + language
|
||||
$query = $db->getQuery(true)
|
||||
@@ -274,7 +274,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface
|
||||
'seo_title' => strip_tags(trim($ogData['seo_title'] ?? '')),
|
||||
'meta_description' => strip_tags(trim($ogData['meta_description'] ?? '')),
|
||||
'robots' => trim($robots),
|
||||
'canonical_url' => trim($ogData['canonical_url'] ?? ''),
|
||||
'canonical_url' => $this->sanitizeUrl($ogData['canonical_url'] ?? ''),
|
||||
'published' => 1,
|
||||
'modified' => Factory::getDate()->toSql(),
|
||||
];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; MokoJoomOpenGraph - System Plugin Language File
|
||||
; MokoSuiteOpenGraph - System Plugin Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; MokoJoomOpenGraph - System Plugin System Language File
|
||||
; MokoSuiteOpenGraph - System Plugin System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PLG_SYSTEM_MOKOOG="System - MokoJoomOpenGraph"
|
||||
PLG_SYSTEM_MOKOOG="System - MokoSuiteOpenGraph"
|
||||
PLG_SYSTEM_MOKOOG_DESCRIPTION="Injects Open Graph and Twitter Card meta tags into every page for optimal social media sharing previews."
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
; MokoJoomOpenGraph - System Plugin Language File
|
||||
; MokoSuiteOpenGraph - System Plugin Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; MokoJoomOpenGraph - System Plugin System Language File
|
||||
; MokoSuiteOpenGraph - System Plugin System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PLG_SYSTEM_MOKOOG="System - MokoJoomOpenGraph"
|
||||
PLG_SYSTEM_MOKOOG="System - MokoSuiteOpenGraph"
|
||||
PLG_SYSTEM_MOKOOG_DESCRIPTION="Injects Open Graph and Twitter Card meta tags into every page for optimal social media sharing previews."
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_system_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_system_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
* @license GNU General Public License version 3 or later; see LICENSE
|
||||
-->
|
||||
<extension type="plugin" group="system" method="upgrade">
|
||||
<name>System - MokoJoomOpenGraph</name>
|
||||
<version>01.04.11</version>
|
||||
<name>System - MokoSuiteOpenGraph</name>
|
||||
<version>01.06.01</version>
|
||||
<creationDate>2026-05-23</creationDate>
|
||||
<author>Moko Consulting</author>
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_system_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -241,7 +241,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
|
||||
// Pinterest article:tag rich pins (from Joomla content tags)
|
||||
if ($option === 'com_content' && $view === 'article' && $id > 0) {
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$tagQuery = $db->getQuery(true)
|
||||
->select($db->quoteName('t.title'))
|
||||
->from($db->quoteName('#__tags', 't'))
|
||||
@@ -467,7 +467,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
return $this->loadOgDataByMenu((int) $menuItem->id) ?: $empty;
|
||||
}
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select('*')
|
||||
->from($db->quoteName('#__mokoog_tags'))
|
||||
@@ -493,7 +493,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
*/
|
||||
private function loadOgDataByType(string $contentType, int $contentId): ?object
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$lang = Factory::getLanguage()->getTag();
|
||||
|
||||
$query = $db->getQuery(true)
|
||||
@@ -520,7 +520,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
*/
|
||||
private function loadOgDataByMenu(int $menuId): ?object
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$lang = Factory::getLanguage()->getTag();
|
||||
|
||||
$query = $db->getQuery(true)
|
||||
@@ -615,7 +615,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
|
||||
// Fallback: check the article's category for an image
|
||||
if ($view === 'article') {
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$catQuery = $db->getQuery(true)
|
||||
->select($db->quoteName('cat.params'))
|
||||
->from($db->quoteName('#__categories', 'cat'))
|
||||
@@ -674,7 +674,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
return $cache[$id];
|
||||
}
|
||||
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select($db->quoteName([
|
||||
'a.title', 'a.introtext', 'a.fulltext', 'a.images',
|
||||
@@ -832,7 +832,10 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
|
||||
$changefreq = $this->params->get('sitemap_changefreq', 'weekly');
|
||||
$xml = SitemapBuilder::generate($changefreq);
|
||||
SitemapBuilder::writeToFile($xml);
|
||||
|
||||
if (!SitemapBuilder::writeToFile($xml)) {
|
||||
\Joomla\CMS\Log\Log::add('MokoOG: Failed to write sitemap.xml — check file permissions', \Joomla\CMS\Log\Log::WARNING, 'mokoog');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -850,7 +853,10 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
return;
|
||||
}
|
||||
|
||||
\Joomla\CMS\Session\Session::checkToken() or die('Invalid Token');
|
||||
if (!\Joomla\CMS\Session\Session::checkToken()) {
|
||||
$event->setArgument('result', ['Invalid Token']);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->params->get('ai_enabled', 0)) {
|
||||
$event->setArgument('result', ['AI generation is not enabled']);
|
||||
@@ -868,7 +874,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
|
||||
$input = $app->getInput();
|
||||
$field = $input->getString('field', 'title');
|
||||
$articleTitle = $input->getString('article_title', '');
|
||||
$articleTitle = mb_substr(strip_tags($input->getString('article_title', '')), 0, 200);
|
||||
|
||||
$prompt = $field === 'title'
|
||||
? "Generate a concise, engaging social media sharing title (max 60 characters) for an article titled: \"$articleTitle\". Return only the title text, no quotes or explanation."
|
||||
@@ -941,20 +947,20 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
*/
|
||||
private function warnMissingLicenseKey(): void
|
||||
{
|
||||
$session = Factory::getSession();
|
||||
$session = Factory::getApplication()->getSession();
|
||||
|
||||
if ($session->get('mokoog.license_warned', false)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$user = Factory::getUser();
|
||||
$user = Factory::getApplication()->getIdentity();
|
||||
|
||||
if ($user->guest || !$user->authorise('core.manage')) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
|
||||
$query = $db->getQuery(true)
|
||||
->select($db->quoteName('extra_query'))
|
||||
@@ -1005,7 +1011,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
||||
}
|
||||
|
||||
try {
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select('p.id, p.sku, p.price, p.currency, p.stock_qty')
|
||||
->select('c.title AS name, c.introtext AS description, c.images')
|
||||
|
||||
@@ -37,7 +37,7 @@ class JsonLdBuilder
|
||||
$article = $cachedArticle;
|
||||
|
||||
if (!$article) {
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select($db->quoteName([
|
||||
'a.created', 'a.modified', 'a.publish_up',
|
||||
@@ -179,7 +179,7 @@ class JsonLdBuilder
|
||||
$product = $cachedProduct;
|
||||
|
||||
if (!$product) {
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$query = $db->getQuery(true)
|
||||
->select('p.sku, p.price, p.currency, p.stock_qty')
|
||||
->from($db->quoteName('#__mokosuite_crm_products', 'p'))
|
||||
|
||||
@@ -32,7 +32,10 @@ class SitemapBuilder
|
||||
*/
|
||||
public static function generate(string $changefreq = 'weekly'): string
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$allowed = ['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'];
|
||||
$changefreq = \in_array($changefreq, $allowed, true) ? $changefreq : 'weekly';
|
||||
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
|
||||
// Get all published articles
|
||||
$query = $db->getQuery(true)
|
||||
@@ -51,7 +54,7 @@ class SitemapBuilder
|
||||
->where($db->quoteName('robots') . ' LIKE ' . $db->quote('%noindex%'));
|
||||
|
||||
$db->setQuery($noindexQuery);
|
||||
$noindexIds = $db->loadColumn();
|
||||
$noindexIds = array_map('intval', $db->loadColumn());
|
||||
|
||||
$root = rtrim(Uri::root(), '/');
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
||||
@@ -66,7 +69,7 @@ class SitemapBuilder
|
||||
|
||||
foreach ($articles as $article) {
|
||||
// Skip noindexed
|
||||
if (in_array((int) $article->id, $noindexIds)) {
|
||||
if (\in_array((int) $article->id, $noindexIds, true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
; MokoJoomOpenGraph - Web Services Plugin Language File
|
||||
; MokoSuiteOpenGraph - Web Services Plugin Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoJoomOpenGraph"
|
||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoSuiteOpenGraph"
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
; MokoJoomOpenGraph - Web Services Plugin System Language File
|
||||
; MokoSuiteOpenGraph - Web Services Plugin System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoJoomOpenGraph"
|
||||
PLG_WEBSERVICES_MOKOOG_DESCRIPTION="Exposes MokoJoomOpenGraph OG tag data via Joomla's REST API at /api/index.php/v1/mokoog/tags."
|
||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoSuiteOpenGraph"
|
||||
PLG_WEBSERVICES_MOKOOG_DESCRIPTION="Exposes MokoSuiteOpenGraph OG tag data via Joomla's REST API at /api/index.php/v1/mokoog/tags."
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
; MokoJoomOpenGraph - Web Services Plugin Language File
|
||||
; MokoSuiteOpenGraph - Web Services Plugin Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoJoomOpenGraph"
|
||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoSuiteOpenGraph"
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
; MokoJoomOpenGraph - Web Services Plugin System Language File
|
||||
; MokoSuiteOpenGraph - Web Services Plugin System Language File
|
||||
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
; License: GPL-3.0-or-later
|
||||
|
||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoJoomOpenGraph"
|
||||
PLG_WEBSERVICES_MOKOOG_DESCRIPTION="Exposes MokoJoomOpenGraph OG tag data via Joomla's REST API at /api/index.php/v1/mokoog/tags."
|
||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoSuiteOpenGraph"
|
||||
PLG_WEBSERVICES_MOKOOG_DESCRIPTION="Exposes MokoSuiteOpenGraph OG tag data via Joomla's REST API at /api/index.php/v1/mokoog/tags."
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_webservices_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_webservices_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
* @license GNU General Public License version 3 or later; see LICENSE
|
||||
-->
|
||||
<extension type="plugin" group="webservices" method="upgrade">
|
||||
<name>Web Services - MokoJoomOpenGraph</name>
|
||||
<version>01.04.11</version>
|
||||
<name>Web Services - MokoSuiteOpenGraph</name>
|
||||
<version>01.06.01</version>
|
||||
<creationDate>2026-05-23</creationDate>
|
||||
<author>Moko Consulting</author>
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_webservices_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @subpackage plg_webservices_mokoog
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
@@ -38,7 +38,7 @@ final class MokoOGWebServices extends CMSPlugin implements SubscriberInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* Register API routes for MokoJoomOpenGraph.
|
||||
* Register API routes for MokoSuiteOpenGraph.
|
||||
*
|
||||
* Endpoints:
|
||||
* GET /api/index.php/v1/mokoog/tags - List all OG tags
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<extension type="package" method="upgrade">
|
||||
<name>Package - MokoSuiteOpenGraph</name>
|
||||
<packagename>mokoog</packagename>
|
||||
<version>01.04.11</version>
|
||||
<version>01.06.01</version>
|
||||
<creationDate>2026-05-23</creationDate>
|
||||
<author>Moko Consulting</author>
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
|
||||
+18
-8
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomOpenGraph
|
||||
* @package MokoSuiteOpenGraph
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
* @license GNU General Public License version 3 or later; see LICENSE
|
||||
@@ -15,8 +15,8 @@ use Joomla\CMS\Language\Text;
|
||||
|
||||
class Pkg_MokoOGInstallerScript
|
||||
{
|
||||
protected $minimumJoomla = '4.0.0';
|
||||
protected $minimumPhp = '8.1.0';
|
||||
protected $minimumJoomla = '6.0.0';
|
||||
protected $minimumPhp = '8.2.0';
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,16 @@ class Pkg_MokoOGInstallerScript
|
||||
return false;
|
||||
}
|
||||
|
||||
if (version_compare(JVERSION, $this->minimumJoomla, '<'))
|
||||
{
|
||||
Factory::getApplication()->enqueueMessage(
|
||||
Text::sprintf('PKG_MOKOOG_JOOMLA_VERSION_ERROR', $this->minimumJoomla),
|
||||
'error'
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->saveDownloadKey();
|
||||
|
||||
return true;
|
||||
@@ -45,7 +55,7 @@ class Pkg_MokoOGInstallerScript
|
||||
|
||||
if ($type === 'install')
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
|
||||
foreach (['system', 'content', 'webservices'] as $folder)
|
||||
{
|
||||
@@ -69,7 +79,7 @@ class Pkg_MokoOGInstallerScript
|
||||
{
|
||||
try
|
||||
{
|
||||
$db = \Joomla\CMS\Factory::getDbo();
|
||||
$db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->select($db->quoteName('us.extra_query'))
|
||||
@@ -93,7 +103,7 @@ class Pkg_MokoOGInstallerScript
|
||||
|
||||
try
|
||||
{
|
||||
$db = \Joomla\CMS\Factory::getDbo();
|
||||
$db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->select($db->quoteName('us.update_site_id'))
|
||||
@@ -123,12 +133,12 @@ class Pkg_MokoOGInstallerScript
|
||||
{
|
||||
try
|
||||
{
|
||||
$db = \Joomla\CMS\Factory::getDbo();
|
||||
$db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||
$db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->select([$db->quoteName('update_site_id'), $db->quoteName('extra_query')])
|
||||
->from($db->quoteName('#__update_sites'))
|
||||
->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoJoomOpenGraph%') . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoJoomOpenGraph%') . ')')
|
||||
->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoSuiteOpenGraph%') . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoSuiteOpenGraph%') . ')')
|
||||
->setLimit(1)
|
||||
);
|
||||
$site = $db->loadObject();
|
||||
|
||||
Reference in New Issue
Block a user