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.
|
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` |
|
| **Package** | `pkg_mokoog` |
|
||||||
| **Language** | PHP 8.1+ |
|
| **Language** | PHP 8.1+ |
|
||||||
| **Branch** | develop on `dev`, merge to `main` (protected) |
|
| **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
|
## Commands
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: Gitea.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: mokocli.Automation
|
# INGROUP: mokocli.Automation
|
||||||
# VERSION: 01.04.11
|
# VERSION: 01.06.01
|
||||||
# BRIEF: Auto-create feature branch when an issue is opened
|
# BRIEF: Auto-create feature branch when an issue is opened
|
||||||
|
|
||||||
name: "Universal: Issue Branch"
|
name: "Universal: Issue Branch"
|
||||||
|
|||||||
+2
-1
@@ -1,6 +1,6 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
<!-- VERSION: 01.04.11 -->
|
<!-- VERSION: 01.06.01 -->
|
||||||
|
|
||||||
All notable changes to MokoSuiteOpenGraph will be documented in this file.
|
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
|
- Database table `#__mokoog_tags` with multilingual unique key
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- Fix SQL driver attribute `mysql` → `mysqli` in component manifest preventing fresh installs
|
||||||
- Add exception logging to BatchController batch skip (#76)
|
- Add exception logging to BatchController batch skip (#76)
|
||||||
- Align form maxlength attributes with DB schema limits (#77)
|
- Align form maxlength attributes with DB schema limits (#77)
|
||||||
- Add `strip_tags()` input sanitization on OG text fields (#79)
|
- Add `strip_tags()` input sanitization on OG text fields (#79)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# MokoSuiteOpenGraph
|
# 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
|
## Overview
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla
|
|||||||
INGROUP: Template-Joomla.Documentation
|
INGROUP: Template-Joomla.Documentation
|
||||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla
|
||||||
PATH: /SECURITY.md
|
PATH: /SECURITY.md
|
||||||
VERSION: 01.04.11
|
VERSION: 01.06.01
|
||||||
BRIEF: Security vulnerability reporting and handling policy
|
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
|
REST API for managing Open Graph, SEO meta, and structured-data tags in
|
||||||
Joomla via the MokoSuiteOpenGraph extension.
|
Joomla via the MokoSuiteOpenGraph extension.
|
||||||
|
|
||||||
|
**Requires Joomla 6.0 or higher.**
|
||||||
|
|
||||||
The API follows Joomla's Web Services conventions and returns responses in
|
The API follows Joomla's Web Services conventions and returns responses in
|
||||||
[JSON:API](https://jsonapi.org/) format. All endpoints require
|
[JSON:API](https://jsonapi.org/) format. All endpoints require
|
||||||
authentication via a Joomla API token.
|
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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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_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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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_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
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog.api
|
* @subpackage com_mokoog.api
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @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);
|
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)
|
$query = $db->getQuery(true)
|
||||||
->select($db->quoteName('id'))
|
->select($db->quoteName('id'))
|
||||||
->from($db->quoteName('#__mokoog_tags'))
|
->from($db->quoteName('#__mokoog_tags'))
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog.api
|
* @subpackage com_mokoog.api
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; License: GPL-3.0-or-later
|
||||||
|
|
||||||
COM_MOKOOG="MokoJoomOpenGraph"
|
COM_MOKOOG="MokoSuiteOpenGraph"
|
||||||
COM_MOKOOG_TAGS_TITLE="MokoJoomOpenGraph - Tag Manager"
|
COM_MOKOOG_TAGS_TITLE="MokoSuiteOpenGraph - Tag Manager"
|
||||||
COM_MOKOOG_SUBMENU_TAGS="Tags"
|
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_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"
|
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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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."
|
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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; License: GPL-3.0-or-later
|
||||||
|
|
||||||
COM_MOKOOG="MokoJoomOpenGraph"
|
COM_MOKOOG="MokoSuiteOpenGraph"
|
||||||
COM_MOKOOG_TAGS_TITLE="MokoJoomOpenGraph - Tag Manager"
|
COM_MOKOOG_TAGS_TITLE="MokoSuiteOpenGraph - Tag Manager"
|
||||||
COM_MOKOOG_SUBMENU_TAGS="Tags"
|
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_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"
|
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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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."
|
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"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
-->
|
-->
|
||||||
<extension type="component" method="upgrade">
|
<extension type="component" method="upgrade">
|
||||||
<name>com_mokoog</name>
|
<name>com_mokoog</name>
|
||||||
<version>01.04.11</version>
|
<version>01.06.01</version>
|
||||||
<creationDate>2026-05-23</creationDate>
|
<creationDate>2026-05-23</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
@@ -23,17 +23,17 @@
|
|||||||
|
|
||||||
<install>
|
<install>
|
||||||
<sql>
|
<sql>
|
||||||
<file driver="mysql" charset="utf8">sql/install.mysql.sql</file>
|
<file driver="mysqli" charset="utf8">sql/install.mysql.sql</file>
|
||||||
</sql>
|
</sql>
|
||||||
</install>
|
</install>
|
||||||
<uninstall>
|
<uninstall>
|
||||||
<sql>
|
<sql>
|
||||||
<file driver="mysql" charset="utf8">sql/uninstall.mysql.sql</file>
|
<file driver="mysqli" charset="utf8">sql/uninstall.mysql.sql</file>
|
||||||
</sql>
|
</sql>
|
||||||
</uninstall>
|
</uninstall>
|
||||||
<update>
|
<update>
|
||||||
<schemas>
|
<schemas>
|
||||||
<schemapath type="mysql">sql/updates/mysql</schemapath>
|
<schemapath type="mysqli">sql/updates/mysql</schemapath>
|
||||||
</schemas>
|
</schemas>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
@@ -23,7 +23,7 @@ class Com_MokoOGInstallerScript
|
|||||||
*/
|
*/
|
||||||
public function install(InstallerAdapter $parent): void
|
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
|
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
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @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.
|
-- Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
-- License: GPL-3.0-or-later
|
-- License: GPL-3.0-or-later
|
||||||
--
|
--
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
--
|
--
|
||||||
-- MokoJoomOpenGraph - Uninstall
|
-- MokoSuiteOpenGraph - Uninstall
|
||||||
--
|
--
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `#__mokoog_tags`;
|
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`
|
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`
|
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`;
|
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`;
|
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
|
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')) {
|
if (!Factory::getApplication()->getIdentity()->authorise('core.create', 'com_mokoog')) {
|
||||||
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
|
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)
|
$query = $db->getQuery(true)
|
||||||
->select('COUNT(*)')
|
->select('COUNT(*)')
|
||||||
->from($db->quoteName('#__content', 'c'))
|
->from($db->quoteName('#__content', 'c'))
|
||||||
@@ -60,7 +60,7 @@ class BatchController extends BaseController
|
|||||||
*/
|
*/
|
||||||
public function process(): void
|
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')) {
|
if (!Factory::getApplication()->getIdentity()->authorise('core.create', 'com_mokoog')) {
|
||||||
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
|
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
|
||||||
@@ -69,7 +69,7 @@ class BatchController extends BaseController
|
|||||||
$app = Factory::getApplication();
|
$app = Factory::getApplication();
|
||||||
$limit = min($app->getInput()->getInt('limit', 50), 200);
|
$limit = min($app->getInput()->getInt('limit', 50), 200);
|
||||||
|
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
->select($db->quoteName([
|
->select($db->quoteName([
|
||||||
'c.id', 'c.title', 'c.metadesc', 'c.introtext', 'c.fulltext', 'c.images',
|
'c.id', 'c.title', 'c.metadesc', 'c.introtext', 'c.fulltext', 'c.images',
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -36,14 +36,14 @@ class ImportExportController extends BaseController
|
|||||||
*/
|
*/
|
||||||
public function export(): void
|
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')) {
|
if (!Factory::getApplication()->getIdentity()->authorise('core.manage', 'com_mokoog')) {
|
||||||
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
|
throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
|
||||||
}
|
}
|
||||||
|
|
||||||
$app = Factory::getApplication();
|
$app = Factory::getApplication();
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
|
|
||||||
// Join with #__content to get article titles for reference
|
// Join with #__content to get article titles for reference
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
@@ -102,7 +102,7 @@ class ImportExportController extends BaseController
|
|||||||
*/
|
*/
|
||||||
public function import(): void
|
public function import(): void
|
||||||
{
|
{
|
||||||
Session::checkToken() || jexit(Text::_('JINVALID_TOKEN'));
|
Session::checkToken() || throw new \RuntimeException(Text::_('JINVALID_TOKEN'), 403);
|
||||||
|
|
||||||
$identity = Factory::getApplication()->getIdentity();
|
$identity = Factory::getApplication()->getIdentity();
|
||||||
|
|
||||||
@@ -161,7 +161,7 @@ class ImportExportController extends BaseController
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$header = fgetcsv($handle);
|
$header = fgetcsv($handle);
|
||||||
$created = 0;
|
$created = 0;
|
||||||
$updated = 0;
|
$updated = 0;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
@@ -13,7 +13,7 @@ defined('_JEXEC') or die;
|
|||||||
use Joomla\CMS\Factory;
|
use Joomla\CMS\Factory;
|
||||||
use Joomla\CMS\Language\Text;
|
use Joomla\CMS\Language\Text;
|
||||||
|
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
|
|
||||||
// Total published articles
|
// Total published articles
|
||||||
$db->setQuery($db->getQuery(true)->select('COUNT(*)')->from('#__content')->where('state = 1'));
|
$db->setQuery($db->getQuery(true)->select('COUNT(*)')->from('#__content')->where('state = 1'));
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage com_mokoog
|
* @subpackage com_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_content_mokoog
|
* @subpackage plg_content_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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."
|
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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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."
|
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
|
* @subpackage plg_content_mokoog
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
* @license GPL-3.0-or-later
|
* @license GPL-3.0-or-later
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"$schema": "https://developer.joomla.org/schemas/json-schema/web_assets.json",
|
"$schema": "https://developer.joomla.org/schemas/json-schema/web_assets.json",
|
||||||
"name": "plg_content_mokoog",
|
"name": "plg_content_mokoog",
|
||||||
"version": "01.00.00",
|
"version": "01.00.00",
|
||||||
"description": "MokoJoomOpenGraph Content Plugin Assets",
|
"description": "MokoSuiteOpenGraph Content Plugin Assets",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
"assets": [
|
"assets": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_content_mokoog
|
* @subpackage plg_content_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_content_mokoog
|
* @subpackage plg_content_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_content_mokoog
|
* @subpackage plg_content_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
* @license GNU General Public License version 3 or later; see LICENSE
|
* @license GNU General Public License version 3 or later; see LICENSE
|
||||||
-->
|
-->
|
||||||
<extension type="plugin" group="content" method="upgrade">
|
<extension type="plugin" group="content" method="upgrade">
|
||||||
<name>Content - MokoJoomOpenGraph</name>
|
<name>Content - MokoSuiteOpenGraph</name>
|
||||||
<version>01.04.11</version>
|
<version>01.06.01</version>
|
||||||
<creationDate>2026-05-23</creationDate>
|
<creationDate>2026-05-23</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_content_mokoog
|
* @subpackage plg_content_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_content_mokoog
|
* @subpackage plg_content_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
@@ -187,7 +187,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface
|
|||||||
$contentType = $supportedContexts[$context];
|
$contentType = $supportedContexts[$context];
|
||||||
$contentId = (int) $article->id;
|
$contentId = (int) $article->id;
|
||||||
|
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
->delete($db->quoteName('#__mokoog_tags'))
|
->delete($db->quoteName('#__mokoog_tags'))
|
||||||
->where($db->quoteName('content_type') . ' = ' . $db->quote($contentType))
|
->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
|
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)
|
$query = $db->getQuery(true)
|
||||||
->select($db->quoteName([
|
->select($db->quoteName([
|
||||||
'og_title', 'og_description', 'og_image', 'og_type', 'og_video',
|
'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
|
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
|
// Check if record exists for this content + language
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
@@ -274,7 +274,7 @@ final class MokoOGContent extends CMSPlugin implements SubscriberInterface
|
|||||||
'seo_title' => strip_tags(trim($ogData['seo_title'] ?? '')),
|
'seo_title' => strip_tags(trim($ogData['seo_title'] ?? '')),
|
||||||
'meta_description' => strip_tags(trim($ogData['meta_description'] ?? '')),
|
'meta_description' => strip_tags(trim($ogData['meta_description'] ?? '')),
|
||||||
'robots' => trim($robots),
|
'robots' => trim($robots),
|
||||||
'canonical_url' => trim($ogData['canonical_url'] ?? ''),
|
'canonical_url' => $this->sanitizeUrl($ogData['canonical_url'] ?? ''),
|
||||||
'published' => 1,
|
'published' => 1,
|
||||||
'modified' => Factory::getDate()->toSql(),
|
'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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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."
|
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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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."
|
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
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_system_mokoog
|
* @subpackage plg_system_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_system_mokoog
|
* @subpackage plg_system_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
* @license GNU General Public License version 3 or later; see LICENSE
|
* @license GNU General Public License version 3 or later; see LICENSE
|
||||||
-->
|
-->
|
||||||
<extension type="plugin" group="system" method="upgrade">
|
<extension type="plugin" group="system" method="upgrade">
|
||||||
<name>System - MokoJoomOpenGraph</name>
|
<name>System - MokoSuiteOpenGraph</name>
|
||||||
<version>01.04.11</version>
|
<version>01.06.01</version>
|
||||||
<creationDate>2026-05-23</creationDate>
|
<creationDate>2026-05-23</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_system_mokoog
|
* @subpackage plg_system_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @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)
|
// Pinterest article:tag rich pins (from Joomla content tags)
|
||||||
if ($option === 'com_content' && $view === 'article' && $id > 0) {
|
if ($option === 'com_content' && $view === 'article' && $id > 0) {
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$tagQuery = $db->getQuery(true)
|
$tagQuery = $db->getQuery(true)
|
||||||
->select($db->quoteName('t.title'))
|
->select($db->quoteName('t.title'))
|
||||||
->from($db->quoteName('#__tags', 't'))
|
->from($db->quoteName('#__tags', 't'))
|
||||||
@@ -467,7 +467,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
|||||||
return $this->loadOgDataByMenu((int) $menuItem->id) ?: $empty;
|
return $this->loadOgDataByMenu((int) $menuItem->id) ?: $empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
->select('*')
|
->select('*')
|
||||||
->from($db->quoteName('#__mokoog_tags'))
|
->from($db->quoteName('#__mokoog_tags'))
|
||||||
@@ -493,7 +493,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
|||||||
*/
|
*/
|
||||||
private function loadOgDataByType(string $contentType, int $contentId): ?object
|
private function loadOgDataByType(string $contentType, int $contentId): ?object
|
||||||
{
|
{
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$lang = Factory::getLanguage()->getTag();
|
$lang = Factory::getLanguage()->getTag();
|
||||||
|
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
@@ -520,7 +520,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
|||||||
*/
|
*/
|
||||||
private function loadOgDataByMenu(int $menuId): ?object
|
private function loadOgDataByMenu(int $menuId): ?object
|
||||||
{
|
{
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$lang = Factory::getLanguage()->getTag();
|
$lang = Factory::getLanguage()->getTag();
|
||||||
|
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
@@ -615,7 +615,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
|||||||
|
|
||||||
// Fallback: check the article's category for an image
|
// Fallback: check the article's category for an image
|
||||||
if ($view === 'article') {
|
if ($view === 'article') {
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$catQuery = $db->getQuery(true)
|
$catQuery = $db->getQuery(true)
|
||||||
->select($db->quoteName('cat.params'))
|
->select($db->quoteName('cat.params'))
|
||||||
->from($db->quoteName('#__categories', 'cat'))
|
->from($db->quoteName('#__categories', 'cat'))
|
||||||
@@ -674,7 +674,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
|||||||
return $cache[$id];
|
return $cache[$id];
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
->select($db->quoteName([
|
->select($db->quoteName([
|
||||||
'a.title', 'a.introtext', 'a.fulltext', 'a.images',
|
'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');
|
$changefreq = $this->params->get('sitemap_changefreq', 'weekly');
|
||||||
$xml = SitemapBuilder::generate($changefreq);
|
$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;
|
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)) {
|
if (!$this->params->get('ai_enabled', 0)) {
|
||||||
$event->setArgument('result', ['AI generation is not enabled']);
|
$event->setArgument('result', ['AI generation is not enabled']);
|
||||||
@@ -868,7 +874,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
|||||||
|
|
||||||
$input = $app->getInput();
|
$input = $app->getInput();
|
||||||
$field = $input->getString('field', 'title');
|
$field = $input->getString('field', 'title');
|
||||||
$articleTitle = $input->getString('article_title', '');
|
$articleTitle = mb_substr(strip_tags($input->getString('article_title', '')), 0, 200);
|
||||||
|
|
||||||
$prompt = $field === 'title'
|
$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."
|
? "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
|
private function warnMissingLicenseKey(): void
|
||||||
{
|
{
|
||||||
$session = Factory::getSession();
|
$session = Factory::getApplication()->getSession();
|
||||||
|
|
||||||
if ($session->get('mokoog.license_warned', false)) {
|
if ($session->get('mokoog.license_warned', false)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = Factory::getUser();
|
$user = Factory::getApplication()->getIdentity();
|
||||||
|
|
||||||
if ($user->guest || !$user->authorise('core.manage')) {
|
if ($user->guest || !$user->authorise('core.manage')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
|
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
->select($db->quoteName('extra_query'))
|
->select($db->quoteName('extra_query'))
|
||||||
@@ -1005,7 +1011,7 @@ final class MokoOG extends CMSPlugin implements SubscriberInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
->select('p.id, p.sku, p.price, p.currency, p.stock_qty')
|
->select('p.id, p.sku, p.price, p.currency, p.stock_qty')
|
||||||
->select('c.title AS name, c.introtext AS description, c.images')
|
->select('c.title AS name, c.introtext AS description, c.images')
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class JsonLdBuilder
|
|||||||
$article = $cachedArticle;
|
$article = $cachedArticle;
|
||||||
|
|
||||||
if (!$article) {
|
if (!$article) {
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
->select($db->quoteName([
|
->select($db->quoteName([
|
||||||
'a.created', 'a.modified', 'a.publish_up',
|
'a.created', 'a.modified', 'a.publish_up',
|
||||||
@@ -179,7 +179,7 @@ class JsonLdBuilder
|
|||||||
$product = $cachedProduct;
|
$product = $cachedProduct;
|
||||||
|
|
||||||
if (!$product) {
|
if (!$product) {
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
->select('p.sku, p.price, p.currency, p.stock_qty')
|
->select('p.sku, p.price, p.currency, p.stock_qty')
|
||||||
->from($db->quoteName('#__mokosuite_crm_products', 'p'))
|
->from($db->quoteName('#__mokosuite_crm_products', 'p'))
|
||||||
|
|||||||
@@ -32,7 +32,10 @@ class SitemapBuilder
|
|||||||
*/
|
*/
|
||||||
public static function generate(string $changefreq = 'weekly'): string
|
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
|
// Get all published articles
|
||||||
$query = $db->getQuery(true)
|
$query = $db->getQuery(true)
|
||||||
@@ -51,7 +54,7 @@ class SitemapBuilder
|
|||||||
->where($db->quoteName('robots') . ' LIKE ' . $db->quote('%noindex%'));
|
->where($db->quoteName('robots') . ' LIKE ' . $db->quote('%noindex%'));
|
||||||
|
|
||||||
$db->setQuery($noindexQuery);
|
$db->setQuery($noindexQuery);
|
||||||
$noindexIds = $db->loadColumn();
|
$noindexIds = array_map('intval', $db->loadColumn());
|
||||||
|
|
||||||
$root = rtrim(Uri::root(), '/');
|
$root = rtrim(Uri::root(), '/');
|
||||||
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
||||||
@@ -66,7 +69,7 @@ class SitemapBuilder
|
|||||||
|
|
||||||
foreach ($articles as $article) {
|
foreach ($articles as $article) {
|
||||||
// Skip noindexed
|
// Skip noindexed
|
||||||
if (in_array((int) $article->id, $noindexIds)) {
|
if (\in_array((int) $article->id, $noindexIds, true)) {
|
||||||
continue;
|
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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; License: GPL-3.0-or-later
|
||||||
|
|
||||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoJoomOpenGraph"
|
PLG_WEBSERVICES_MOKOOG="Web Services - MokoSuiteOpenGraph"
|
||||||
PLG_WEBSERVICES_MOKOOG_DESCRIPTION="Exposes MokoJoomOpenGraph OG tag data via Joomla's REST API at /api/index.php/v1/mokoog/tags."
|
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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; 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.
|
; Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
; License: GPL-3.0-or-later
|
; License: GPL-3.0-or-later
|
||||||
|
|
||||||
PLG_WEBSERVICES_MOKOOG="Web Services - MokoJoomOpenGraph"
|
PLG_WEBSERVICES_MOKOOG="Web Services - MokoSuiteOpenGraph"
|
||||||
PLG_WEBSERVICES_MOKOOG_DESCRIPTION="Exposes MokoJoomOpenGraph OG tag data via Joomla's REST API at /api/index.php/v1/mokoog/tags."
|
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
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_webservices_mokoog
|
* @subpackage plg_webservices_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_webservices_mokoog
|
* @subpackage plg_webservices_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
* @license GNU General Public License version 3 or later; see LICENSE
|
* @license GNU General Public License version 3 or later; see LICENSE
|
||||||
-->
|
-->
|
||||||
<extension type="plugin" group="webservices" method="upgrade">
|
<extension type="plugin" group="webservices" method="upgrade">
|
||||||
<name>Web Services - MokoJoomOpenGraph</name>
|
<name>Web Services - MokoSuiteOpenGraph</name>
|
||||||
<version>01.04.11</version>
|
<version>01.06.01</version>
|
||||||
<creationDate>2026-05-23</creationDate>
|
<creationDate>2026-05-23</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_webservices_mokoog
|
* @subpackage plg_webservices_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @subpackage plg_webservices_mokoog
|
* @subpackage plg_webservices_mokoog
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @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:
|
* Endpoints:
|
||||||
* GET /api/index.php/v1/mokoog/tags - List all OG tags
|
* GET /api/index.php/v1/mokoog/tags - List all OG tags
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<extension type="package" method="upgrade">
|
<extension type="package" method="upgrade">
|
||||||
<name>Package - MokoSuiteOpenGraph</name>
|
<name>Package - MokoSuiteOpenGraph</name>
|
||||||
<packagename>mokoog</packagename>
|
<packagename>mokoog</packagename>
|
||||||
<version>01.04.11</version>
|
<version>01.06.01</version>
|
||||||
<creationDate>2026-05-23</creationDate>
|
<creationDate>2026-05-23</creationDate>
|
||||||
<author>Moko Consulting</author>
|
<author>Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
+18
-8
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package MokoJoomOpenGraph
|
* @package MokoSuiteOpenGraph
|
||||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||||
* @license GNU General Public License version 3 or later; see LICENSE
|
* @license GNU General Public License version 3 or later; see LICENSE
|
||||||
@@ -15,8 +15,8 @@ use Joomla\CMS\Language\Text;
|
|||||||
|
|
||||||
class Pkg_MokoOGInstallerScript
|
class Pkg_MokoOGInstallerScript
|
||||||
{
|
{
|
||||||
protected $minimumJoomla = '4.0.0';
|
protected $minimumJoomla = '6.0.0';
|
||||||
protected $minimumPhp = '8.1.0';
|
protected $minimumPhp = '8.2.0';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -33,6 +33,16 @@ class Pkg_MokoOGInstallerScript
|
|||||||
return false;
|
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();
|
$this->saveDownloadKey();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -45,7 +55,7 @@ class Pkg_MokoOGInstallerScript
|
|||||||
|
|
||||||
if ($type === 'install')
|
if ($type === 'install')
|
||||||
{
|
{
|
||||||
$db = Factory::getDbo();
|
$db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
|
|
||||||
foreach (['system', 'content', 'webservices'] as $folder)
|
foreach (['system', 'content', 'webservices'] as $folder)
|
||||||
{
|
{
|
||||||
@@ -69,7 +79,7 @@ class Pkg_MokoOGInstallerScript
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$db = \Joomla\CMS\Factory::getDbo();
|
$db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$db->setQuery(
|
$db->setQuery(
|
||||||
$db->getQuery(true)
|
$db->getQuery(true)
|
||||||
->select($db->quoteName('us.extra_query'))
|
->select($db->quoteName('us.extra_query'))
|
||||||
@@ -93,7 +103,7 @@ class Pkg_MokoOGInstallerScript
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$db = \Joomla\CMS\Factory::getDbo();
|
$db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$db->setQuery(
|
$db->setQuery(
|
||||||
$db->getQuery(true)
|
$db->getQuery(true)
|
||||||
->select($db->quoteName('us.update_site_id'))
|
->select($db->quoteName('us.update_site_id'))
|
||||||
@@ -123,12 +133,12 @@ class Pkg_MokoOGInstallerScript
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$db = \Joomla\CMS\Factory::getDbo();
|
$db = \Joomla\CMS\Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class);
|
||||||
$db->setQuery(
|
$db->setQuery(
|
||||||
$db->getQuery(true)
|
$db->getQuery(true)
|
||||||
->select([$db->quoteName('update_site_id'), $db->quoteName('extra_query')])
|
->select([$db->quoteName('update_site_id'), $db->quoteName('extra_query')])
|
||||||
->from($db->quoteName('#__update_sites'))
|
->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)
|
->setLimit(1)
|
||||||
);
|
);
|
||||||
$site = $db->loadObject();
|
$site = $db->loadObject();
|
||||||
|
|||||||
Reference in New Issue
Block a user