Update version to 03.07.00 and add installation cleanup script
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/css/global/dark/colors_alternative.css
|
PATH: ./media/templates/site/moko-cassiopeia/css/global/dark/colors_alternative.css
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Alternative dark mode color definitions for Moko-Cassiopeia template
|
BRIEF: Alternative dark mode color definitions for Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/css/global/dark/colors_standard.css
|
PATH: ./media/templates/site/moko-cassiopeia/css/global/dark/colors_standard.css
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Standard dark mode color definitions for Moko-Cassiopeia template
|
BRIEF: Standard dark mode color definitions for Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/css/global/light/colors_alternative.css
|
PATH: ./media/templates/site/moko-cassiopeia/css/global/light/colors_alternative.css
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Alternative light mode color definitions for Moko-Cassiopeia template
|
BRIEF: Alternative light mode color definitions for Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/css/global/light/colors_standard.css
|
PATH: ./media/templates/site/moko-cassiopeia/css/global/light/colors_standard.css
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Standard light mode color definitions for Moko-Cassiopeia template
|
BRIEF: Standard light mode color definitions for Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/css/editor.css
|
PATH: ./media/templates/site/moko-cassiopeia/css/editor.css
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Stylesheet for Joomla editor content within Moko-Cassiopeia template
|
BRIEF: Stylesheet for Joomla editor content within Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/css/system/searchtools/searchtools.css
|
PATH: ./media/templates/site/moko-cassiopeia/css/system/searchtools/searchtools.css
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Stylesheet for Joomla search tools integration in Moko-Cassiopeia template
|
BRIEF: Stylesheet for Joomla search tools integration in Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/css/template-rtl.css
|
PATH: ./media/templates/site/moko-cassiopeia/css/template-rtl.css
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Right-to-left (RTL) layout stylesheet for Moko-Cassiopeia template
|
BRIEF: Right-to-left (RTL) layout stylesheet for Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/css/template.css
|
PATH: ./media/templates/site/moko-cassiopeia/css/template.css
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Main stylesheet providing layout, typography, and component styles for Moko-Cassiopeia
|
BRIEF: Main stylesheet providing layout, typography, and component styles for Moko-Cassiopeia
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/js/darkmode-toggle.js
|
PATH: ./media/templates/site/moko-cassiopeia/js/darkmode-toggle.js
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: JavaScript logic for dark mode toggle functionality in Moko-Cassiopeia
|
BRIEF: JavaScript logic for dark mode toggle functionality in Moko-Cassiopeia
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu-es5.js
|
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu-es5.js
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: ES5-compatible MetisMenu script for Joomla mod_menu in Moko-Cassiopeia
|
BRIEF: ES5-compatible MetisMenu script for Joomla mod_menu in Moko-Cassiopeia
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu.js
|
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu.js
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Modern MetisMenu script for Joomla mod_menu in Moko-Cassiopeia
|
BRIEF: Modern MetisMenu script for Joomla mod_menu in Moko-Cassiopeia
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/js/template.js
|
PATH: ./media/templates/site/moko-cassiopeia/js/template.js
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Core JavaScript utilities and behaviors for Moko-Cassiopeia template
|
BRIEF: Core JavaScript utilities and behaviors for Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
!function(a){"use strict";window.Toc={helpers:{findOrFilter:function(e,t){var n=e.find(t);return e.filter(t).add(n).filter(":not([data-toc-skip])")},generateUniqueIdBase:function(e){return a(e).text().trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,64).replace(/^-+|-+$/gm,"").toLowerCase()||e.tagName.toLowerCase()},generateUniqueId:function(e){for(var t=this.generateUniqueIdBase(e),n=0;;n++){var r=t;if(0<n&&(r+="-"+n),!document.getElementById(r))return r}},generateAnchor:function(e){if(e.id)return e.id;var t=this.generateUniqueId(e);return e.id=t},createNavList:function(){return a('<ul class="nav navbar-nav"></ul>')},createChildNavList:function(e){var t=this.createNavList();return e.append(t),t},generateNavEl:function(e,t){var n=a('<a class="nav-link"></a>');n.attr("href","#"+e),n.text(t);var r=a("<li></li>");return r.append(n),r},generateNavItem:function(e){var t=this.generateAnchor(e),n=a(e),r=n.data("toc-text")||n.text();return this.generateNavEl(t,r)},getTopLevel:function(e){for(var t=1;t<=6;t++){if(1<this.findOrFilter(e,"h"+t).length)return t}return 1},getHeadings:function(e,t){var n="h"+t,r="h"+(t+1);return this.findOrFilter(e,n+","+r)},getNavLevel:function(e){return parseInt(e.tagName.charAt(1),10)},populateNav:function(r,a,e){var i,s=r,c=this;e.each(function(e,t){var n=c.generateNavItem(t);c.getNavLevel(t)===a?s=r:i&&s===r&&(s=c.createChildNavList(i)),s.append(n),i=n})},parseOps:function(e){var t;return(t=e.jquery?{$nav:e}:e).$scope=t.$scope||a(document.body),t}},init:function(e){(e=this.helpers.parseOps(e)).$nav.attr("data-toggle","toc");var t=this.helpers.createChildNavList(e.$nav),n=this.helpers.getTopLevel(e.$scope),r=this.helpers.getHeadings(e.$scope,n);this.helpers.populateNav(t,n,r)}},a(function(){a('nav[data-toggle="toc"]').each(function(e,t){var n=a(t);Toc.init(n)})})}(jQuery);
|
!function(a){"use strict";window.Toc={helpers:{findOrFilter:function(e,t){var n=e.find(t);return e.filter(t).add(n).filter(":not([data-toc-skip])")},generateUniqueIdBase:function(e){return a(e).text().trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,64).replace(/^-+|-+$/gm,"").toLowerCase()||e.tagName.toLowerCase()},generateUniqueId:function(e){for(var t=this.generateUniqueIdBase(e),n=0;;n++){var r=t;if(0<n&&(r+="-"+n),!document.getElementById(r))return r}},generateAnchor:function(e){if(e.id)return e.id;var t=this.generateUniqueId(e);return e.id=t},createNavList:function(){return a('<ul class="nav navbar-nav"></ul>')},createChildNavList:function(e){var t=this.createNavList();return e.append(t),t},generateNavEl:function(e,t){var n=a('<a class="nav-link"></a>');n.attr("href","#"+e),n.text(t);var r=a("<li></li>");return r.append(n),r},generateNavItem:function(e){var t=this.generateAnchor(e),n=a(e),r=n.data("toc-text")||n.text();return this.generateNavEl(t,r)},getTopLevel:function(e){for(var t=1;t<=6;t++){if(1<this.findOrFilter(e,"h"+t).length)return t}return 1},getHeadings:function(e,t){var n="h"+t,r="h"+(t+1);return this.findOrFilter(e,n+","+r)},getNavLevel:function(e){return parseInt(e.tagName.charAt(1),10)},populateNav:function(r,a,e){var i,s=r,c=this;e.each(function(e,t){var n=c.generateNavItem(t);c.getNavLevel(t)===a?s=r:i&&s===r&&(s=c.createChildNavList(i)),s.append(n),i=n})},parseOps:function(e){var t;return(t=e.jquery?{$nav:e}:e).$scope=t.$scope||a(document.body),t}},init:function(e){(e=this.helpers.parseOps(e)).$nav.attr("data-toggle","toc");var t=this.helpers.createChildNavList(e.$nav),n=this.helpers.getTopLevel(e.$scope),r=this.helpers.getHeadings(e.$scope,n);this.helpers.populateNav(t,n,r)}},a(function(){a('nav[data-toggle="toc"]').each(function(e,t){var n=a(t);Toc.init(n)})})}(jQuery);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
DEFGROUP: Joomla.Template.Site
|
DEFGROUP: Joomla.Template.Site
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/js/theme-init.js
|
PATH: ./media/templates/site/moko-cassiopeia/js/theme-init.js
|
||||||
VERSION: 03.05.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Initialization script for Moko-Cassiopeia theme features and behaviors
|
BRIEF: Initialization script for Moko-Cassiopeia theme features and behaviors
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,6 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./media/templates/site/moko-cassiopeia/js/user.js
|
PATH: ./media/templates/site/moko-cassiopeia/js/user.js
|
||||||
VERSION: 03.00.00
|
VERSION: 03.07.00
|
||||||
BRIEF: JavaScript for handling user-specific interactions in Moko-Cassiopeia template
|
BRIEF: JavaScript for handling user-specific interactions in Moko-Cassiopeia template
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./templates/moko-cassiopeia/component.php
|
PATH: ./templates/moko-cassiopeia/component.php
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Main template index file for Moko-Cassiopeia rendering site layout
|
BRIEF: Main template index file for Moko-Cassiopeia rendering site layout
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./templates/moko-cassiopeia/custom.php
|
PATH: ./templates/moko-cassiopeia/custom.php
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Custom entry template file for Moko-Cassiopeia with user-defined overrides
|
BRIEF: Custom entry template file for Moko-Cassiopeia with user-defined overrides
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./templates/moko-cassiopeia/error.php
|
PATH: ./templates/moko-cassiopeia/error.php
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Error page template file for Moko-Cassiopeia
|
BRIEF: Error page template file for Moko-Cassiopeia
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./templates/moko-cassiopeia/html/com_content/article/toc-left.php
|
PATH: ./templates/moko-cassiopeia/html/com_content/article/toc-left.php
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Template override for Joomla articles with Table of Contents aligned left
|
BRIEF: Template override for Joomla articles with Table of Contents aligned left
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./templates/moko-cassiopeia/html/com_content/article/toc-right.php
|
PATH: ./templates/moko-cassiopeia/html/com_content/article/toc-right.php
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Template override for Joomla articles with Table of Contents aligned right
|
BRIEF: Template override for Joomla articles with Table of Contents aligned right
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./templates/moko-cassiopeia/index.php
|
PATH: ./templates/moko-cassiopeia/index.php
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Main template index file for Moko-Cassiopeia rendering site layout
|
BRIEF: Main template index file for Moko-Cassiopeia rendering site layout
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
"defgroup": "Joomla.Template.Site",
|
"defgroup": "Joomla.Template.Site",
|
||||||
"ingroup": "Moko-Cassiopeia.Template.Assets",
|
"ingroup": "Moko-Cassiopeia.Template.Assets",
|
||||||
"path": "./media/templates/site/moko-cassiopeia/joomla.asset.json",
|
"path": "./media/templates/site/moko-cassiopeia/joomla.asset.json",
|
||||||
"version": "03.06.00",
|
"version": "03.07.00",
|
||||||
"brief": "Joomla asset registry for Moko-Cassiopeia"
|
"brief": "Joomla asset registry for Moko-Cassiopeia"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./templates/moko-cassiopeia/offline.php
|
PATH: ./templates/moko-cassiopeia/offline.php
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Offline page template file for Moko-Cassiopeia
|
BRIEF: Offline page template file for Moko-Cassiopeia
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
324
src/templates/script.php
Normal file
324
src/templates/script.php
Normal file
@@ -0,0 +1,324 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @package Joomla.Site
|
||||||
|
* @subpackage Templates.moko-cassiopeia
|
||||||
|
*
|
||||||
|
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
|
* @license GNU General Public License version 3 or later; see LICENSE.txt
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*
|
||||||
|
* FILE INFORMATION
|
||||||
|
* DEFGROUP: Joomla.Template.Site
|
||||||
|
* INGROUP: Moko-Cassiopeia
|
||||||
|
* PATH: ./templates/moko-cassiopeia/script.php
|
||||||
|
* VERSION: 03.07.00
|
||||||
|
* BRIEF: Installation and update script for Moko-Cassiopeia template
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
use Joomla\CMS\Filesystem\File;
|
||||||
|
use Joomla\CMS\Filesystem\Folder;
|
||||||
|
use Joomla\CMS\Installer\InstallerAdapter;
|
||||||
|
use Joomla\CMS\Installer\InstallerScriptInterface;
|
||||||
|
use Joomla\CMS\Language\Text;
|
||||||
|
use Joomla\CMS\Log\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installation script for Moko-Cassiopeia template
|
||||||
|
*
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
return new class () implements InstallerScriptInterface {
|
||||||
|
/**
|
||||||
|
* The template's minimum supported Joomla version
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
private $minimumJoomla = '4.0';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The template's minimum supported PHP version
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
private $minimumPhp = '7.4';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of files to be removed during update (old/deprecated files)
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
private $filesToRemove = [
|
||||||
|
// Add deprecated files here as needed
|
||||||
|
// Example: 'media/templates/site/moko-cassiopeia/js/old-script.js',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of folders to be removed during update (old/deprecated folders)
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
private $foldersToRemove = [
|
||||||
|
// Add deprecated folders here as needed
|
||||||
|
// Example: 'media/templates/site/moko-cassiopeia/old-assets',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called before extension installation/update/removal procedure commences
|
||||||
|
*
|
||||||
|
* @param string $type The type of change (install or discover_install, update, uninstall)
|
||||||
|
* @param InstallerAdapter $parent The class calling this method
|
||||||
|
*
|
||||||
|
* @return boolean True on success
|
||||||
|
*
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
public function preflight(string $type, InstallerAdapter $parent): bool
|
||||||
|
{
|
||||||
|
// Check minimum Joomla version
|
||||||
|
if (version_compare(JVERSION, $this->minimumJoomla, '<')) {
|
||||||
|
Factory::getApplication()->enqueueMessage(
|
||||||
|
sprintf(
|
||||||
|
Text::_('JLIB_INSTALLER_MINIMUM_JOOMLA'),
|
||||||
|
$this->minimumJoomla
|
||||||
|
),
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check minimum PHP version
|
||||||
|
if (version_compare(PHP_VERSION, $this->minimumPhp, '<')) {
|
||||||
|
Factory::getApplication()->enqueueMessage(
|
||||||
|
sprintf(
|
||||||
|
Text::_('JLIB_INSTALLER_MINIMUM_PHP'),
|
||||||
|
$this->minimumPhp
|
||||||
|
),
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called after extension installation/update/removal procedure completes
|
||||||
|
*
|
||||||
|
* @param string $type The type of change (install or discover_install, update, uninstall)
|
||||||
|
* @param InstallerAdapter $parent The class calling this method
|
||||||
|
*
|
||||||
|
* @return boolean True on success
|
||||||
|
*
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
public function postflight(string $type, InstallerAdapter $parent): bool
|
||||||
|
{
|
||||||
|
// Only run cleanup on update
|
||||||
|
if ($type === 'update') {
|
||||||
|
$this->cleanupMediaFolder();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display success message
|
||||||
|
if ($type === 'install') {
|
||||||
|
Factory::getApplication()->enqueueMessage(
|
||||||
|
'Moko-Cassiopeia template has been successfully installed!',
|
||||||
|
'success'
|
||||||
|
);
|
||||||
|
} elseif ($type === 'update') {
|
||||||
|
Factory::getApplication()->enqueueMessage(
|
||||||
|
'Moko-Cassiopeia template has been successfully updated to version 03.07.00!',
|
||||||
|
'success'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called when extension is installed
|
||||||
|
*
|
||||||
|
* @param InstallerAdapter $parent The class calling this method
|
||||||
|
*
|
||||||
|
* @return boolean True on success
|
||||||
|
*
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
public function install(InstallerAdapter $parent): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called when extension is updated
|
||||||
|
*
|
||||||
|
* @param InstallerAdapter $parent The class calling this method
|
||||||
|
*
|
||||||
|
* @return boolean True on success
|
||||||
|
*
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
public function update(InstallerAdapter $parent): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called when extension is uninstalled
|
||||||
|
*
|
||||||
|
* @param InstallerAdapter $parent The class calling this method
|
||||||
|
*
|
||||||
|
* @return boolean True on success
|
||||||
|
*
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
public function uninstall(InstallerAdapter $parent): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up the media folder by removing old and deprecated files
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
private function cleanupMediaFolder(): void
|
||||||
|
{
|
||||||
|
$app = Factory::getApplication();
|
||||||
|
$mediaPath = JPATH_ROOT . '/media/templates/site/moko-cassiopeia';
|
||||||
|
$removedFiles = 0;
|
||||||
|
$removedFolders = 0;
|
||||||
|
$errors = [];
|
||||||
|
|
||||||
|
// Set up logging
|
||||||
|
Log::addLogger(
|
||||||
|
['text_file' => 'moko_cassiopeia_cleanup.php'],
|
||||||
|
Log::ALL,
|
||||||
|
['moko-cassiopeia-cleanup']
|
||||||
|
);
|
||||||
|
|
||||||
|
Log::add('Starting media folder cleanup', Log::INFO, 'moko-cassiopeia-cleanup');
|
||||||
|
|
||||||
|
// Remove deprecated files
|
||||||
|
foreach ($this->filesToRemove as $file) {
|
||||||
|
$filePath = JPATH_ROOT . '/' . $file;
|
||||||
|
|
||||||
|
if (File::exists($filePath)) {
|
||||||
|
try {
|
||||||
|
if (File::delete($filePath)) {
|
||||||
|
$removedFiles++;
|
||||||
|
Log::add("Removed file: {$file}", Log::INFO, 'moko-cassiopeia-cleanup');
|
||||||
|
} else {
|
||||||
|
$errors[] = "Failed to remove file: {$file}";
|
||||||
|
Log::add("Failed to remove file: {$file}", Log::WARNING, 'moko-cassiopeia-cleanup');
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$errors[] = "Error removing file {$file}: " . $e->getMessage();
|
||||||
|
Log::add("Error removing file {$file}: " . $e->getMessage(), Log::ERROR, 'moko-cassiopeia-cleanup');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove deprecated folders
|
||||||
|
foreach ($this->foldersToRemove as $folder) {
|
||||||
|
$folderPath = JPATH_ROOT . '/' . $folder;
|
||||||
|
|
||||||
|
if (Folder::exists($folderPath)) {
|
||||||
|
try {
|
||||||
|
if (Folder::delete($folderPath)) {
|
||||||
|
$removedFolders++;
|
||||||
|
Log::add("Removed folder: {$folder}", Log::INFO, 'moko-cassiopeia-cleanup');
|
||||||
|
} else {
|
||||||
|
$errors[] = "Failed to remove folder: {$folder}";
|
||||||
|
Log::add("Failed to remove folder: {$folder}", Log::WARNING, 'moko-cassiopeia-cleanup');
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$errors[] = "Error removing folder {$folder}: " . $e->getMessage();
|
||||||
|
Log::add("Error removing folder {$folder}: " . $e->getMessage(), Log::ERROR, 'moko-cassiopeia-cleanup');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up empty directories in media folder
|
||||||
|
if (is_dir($mediaPath)) {
|
||||||
|
$this->removeEmptyDirectories($mediaPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display cleanup summary
|
||||||
|
if ($removedFiles > 0 || $removedFolders > 0) {
|
||||||
|
$message = sprintf(
|
||||||
|
'Media folder cleanup: Removed %d file(s) and %d folder(s).',
|
||||||
|
$removedFiles,
|
||||||
|
$removedFolders
|
||||||
|
);
|
||||||
|
$app->enqueueMessage($message, 'info');
|
||||||
|
Log::add($message, Log::INFO, 'moko-cassiopeia-cleanup');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display errors if any
|
||||||
|
foreach ($errors as $error) {
|
||||||
|
$app->enqueueMessage($error, 'warning');
|
||||||
|
}
|
||||||
|
|
||||||
|
Log::add('Media folder cleanup completed', Log::INFO, 'moko-cassiopeia-cleanup');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively remove empty directories
|
||||||
|
*
|
||||||
|
* @param string $path The directory path to check
|
||||||
|
*
|
||||||
|
* @return boolean True if directory was removed, false otherwise
|
||||||
|
*
|
||||||
|
* @since 03.07.00
|
||||||
|
*/
|
||||||
|
private function removeEmptyDirectories(string $path): bool
|
||||||
|
{
|
||||||
|
if (!is_dir($path)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$empty = true;
|
||||||
|
$items = glob($path . '/{,.}*', GLOB_BRACE);
|
||||||
|
|
||||||
|
foreach ($items as $item) {
|
||||||
|
$basename = basename($item);
|
||||||
|
|
||||||
|
// Skip . and ..
|
||||||
|
if ($basename === '.' || $basename === '..') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_dir($item)) {
|
||||||
|
if (!$this->removeEmptyDirectories($item)) {
|
||||||
|
$empty = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$empty = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove directory if it's empty
|
||||||
|
if ($empty && $path !== JPATH_ROOT . '/media/templates/site/moko-cassiopeia') {
|
||||||
|
try {
|
||||||
|
if (Folder::delete($path)) {
|
||||||
|
Log::add("Removed empty directory: {$path}", Log::INFO, 'moko-cassiopeia-cleanup');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::add("Error removing empty directory {$path}: " . $e->getMessage(), Log::WARNING, 'moko-cassiopeia-cleanup');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $empty;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
DEFGROUP: Joomla
|
DEFGROUP: Joomla
|
||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
PATH: templates/moko-cassiopeia/templateDetails.xml
|
PATH: templates/moko-cassiopeia/templateDetails.xml
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Template manifest XML file for Moko-Cassiopeia
|
BRIEF: Template manifest XML file for Moko-Cassiopeia
|
||||||
=========================================================================
|
=========================================================================
|
||||||
-->
|
-->
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
</server>
|
</server>
|
||||||
</updateservers>
|
</updateservers>
|
||||||
<name>moko-cassiopeia</name>
|
<name>moko-cassiopeia</name>
|
||||||
<version>03.06.00</version>
|
<version>03.07.00</version>
|
||||||
<creationDate>2025-12-23</creationDate>
|
<creationDate>2025-12-23</creationDate>
|
||||||
<author>Jonathan Miller || Moko Consulting</author>
|
<author>Jonathan Miller || Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
INGROUP: Moko-Cassiopeia
|
INGROUP: Moko-Cassiopeia
|
||||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||||
PATH: ./updates.xml
|
PATH: ./updates.xml
|
||||||
VERSION: 03.06.00
|
VERSION: 03.07.00
|
||||||
BRIEF: Update manifest XML file for Moko-Cassiopeia
|
BRIEF: Update manifest XML file for Moko-Cassiopeia
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
|
|
||||||
<version>03.06.00</version>
|
<version>03.07.00</version>
|
||||||
<creationDate>2025-12-12</creationDate>
|
<creationDate>2025-12-12</creationDate>
|
||||||
<author>Jonathan Miller || Moko Consulting</author>
|
<author>Jonathan Miller || Moko Consulting</author>
|
||||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||||
|
|||||||
Reference in New Issue
Block a user