Joomla-Sermon-Distributor/SermondistributorInstallerScript.php
Robot 60e9e3b32d
Release of v5.0.0-beta2
First release of Sermon Distributor towards Joomla 5. Add PHP check to install/update class. Add Database check and fix to install/update class.
2024-05-03 07:46:28 +02:00

1915 lines
81 KiB
PHP

<?php
/*-------------------------------------------------------------------------------------------------------------| www.vdm.io |------/
____ ____ __ __ __
/\ _`\ /\ _`\ __ /\ \__ __/\ \ /\ \__
\ \,\L\_\ __ _ __ ___ ___ ___ ___ \ \ \/\ \/\_\ ____\ \ ,_\ _ __ /\_\ \ \____ __ __\ \ ,_\ ___ _ __
\/_\__ \ /'__`\/\`'__\/' __` __`\ / __`\ /' _ `\ \ \ \ \ \/\ \ /',__\\ \ \/ /\`'__\/\ \ \ '__`\/\ \/\ \\ \ \/ / __`\/\`'__\
/\ \L\ \/\ __/\ \ \/ /\ \/\ \/\ \/\ \L\ \/\ \/\ \ \ \ \_\ \ \ \/\__, `\\ \ \_\ \ \/ \ \ \ \ \L\ \ \ \_\ \\ \ \_/\ \L\ \ \ \/
\ `\____\ \____\\ \_\ \ \_\ \_\ \_\ \____/\ \_\ \_\ \ \____/\ \_\/\____/ \ \__\\ \_\ \ \_\ \_,__/\ \____/ \ \__\ \____/\ \_\
\/_____/\/____/ \/_/ \/_/\/_/\/_/\/___/ \/_/\/_/ \/___/ \/_/\/___/ \/__/ \/_/ \/_/\/___/ \/___/ \/__/\/___/ \/_/
/------------------------------------------------------------------------------------------------------------------------------------/
@version 5.0.x
@created 22nd October, 2015
@package Sermon Distributor
@subpackage SermondistributorInstallerScript.php
@author Llewellyn van der Merwe <https://www.vdm.io/>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
A sermon distributor that links to Dropbox.
/----------------------------------------------------------------------------------------------------------------------------------*/
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Installer\InstallerAdapter;
use Joomla\CMS\Installer\InstallerScriptInterface;
use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Version;
use Joomla\CMS\HTML\HTMLHelper as Html;
use Joomla\Filesystem\Folder;
use Joomla\Database\DatabaseInterface;
use TrueChristianChurch\Joomla\SermonDistributor\Table\Schema;
// No direct access to this file
defined('_JEXEC') or die;
/**
* Script File of Sermondistributor Component
*
* @since 3.6
*/
class Com_SermondistributorInstallerScript implements InstallerScriptInterface
{
/**
* The CMS Application.
*
* @var CMSApplication
* @since 4.4.2
*/
protected CMSApplication $app;
/**
* The database class.
*
* @since 4.4.2
*/
protected $db;
/**
* The version number of the extension.
*
* @var string
* @since 3.6
*/
protected $release;
/**
* The table the parameters are stored in.
*
* @var string
* @since 3.6
*/
protected $paramTable;
/**
* The extension name. This should be set in the installer script.
*
* @var string
* @since 3.6
*/
protected $extension;
/**
* A list of files to be deleted
*
* @var array
* @since 3.6
*/
protected $deleteFiles = [];
/**
* A list of folders to be deleted
*
* @var array
* @since 3.6
*/
protected $deleteFolders = [];
/**
* A list of CLI script files to be copied to the cli directory
*
* @var array
* @since 3.6
*/
protected $cliScriptFiles = [];
/**
* Minimum PHP version required to install the extension
*
* @var string
* @since 3.6
*/
protected $minimumPhp;
/**
* Minimum Joomla! version required to install the extension
*
* @var string
* @since 3.6
*/
protected $minimumJoomla;
/**
* Extension script constructor.
*
* @since 3.0.0
*/
public function __construct()
{
$this->minimumJoomla = '4.3';
$this->minimumPhp = JOOMLA_MINIMUM_PHP;
$this->app ??= Factory::getApplication();
$this->db = Factory::getContainer()->get(DatabaseInterface::class);
// check if the files exist
if (is_file(JPATH_ROOT . '/administrator/components/com_sermondistributor/sermondistributor.php'))
{
// remove Joomla 3 files
$this->deleteFiles = [
'/administrator/components/com_sermondistributor/sermondistributor.php',
'/administrator/components/com_sermondistributor/controller.php',
'/components/com_sermondistributor/sermondistributor.php',
'/components/com_sermondistributor/controller.php',
'/components/com_sermondistributor/router.php',
];
}
// check if the Folders exist
if (is_dir(JPATH_ROOT . '/administrator/components/com_sermondistributor/modules'))
{
// remove Joomla 3 folder
$this->deleteFolders = [
'/administrator/components/com_sermondistributor/controllers',
'/administrator/components/com_sermondistributor/helpers',
'/administrator/components/com_sermondistributor/modules',
'/administrator/components/com_sermondistributor/tables',
'/administrator/components/com_sermondistributor/views',
'/components/com_sermondistributor/controllers',
'/components/com_sermondistributor/helpers',
'/components/com_sermondistributor/modules',
'/components/com_sermondistributor/views',
];
}
}
/**
* Function called after the extension is installed.
*
* @param InstallerAdapter $adapter The adapter calling this method
*
* @return boolean True on success
*
* @since 4.2.0
*/
public function install(InstallerAdapter $adapter): bool {return true;}
/**
* Function called after the extension is updated.
*
* @param InstallerAdapter $adapter The adapter calling this method
*
* @return boolean True on success
*
* @since 4.2.0
*/
public function update(InstallerAdapter $adapter): bool {return true;}
/**
* Function called after the extension is uninstalled.
*
* @param InstallerAdapter $adapter The adapter calling this method
*
* @return boolean True on success
*
* @since 4.2.0
*/
public function uninstall(InstallerAdapter $adapter): bool
{
// Remove Related Component Data.
// Remove Preacher Data
$this->removeViewData("com_sermondistributor.preacher");
// Remove Sermon Data
$this->removeViewData("com_sermondistributor.sermon");
// Remove Sermon catid Data
$this->removeViewData("com_sermondistributor.sermon.category");
// Remove Series Data
$this->removeViewData("com_sermondistributor.series");
// Remove Statistic Data
$this->removeViewData("com_sermondistributor.statistic");
// Remove External source Data
$this->removeViewData("com_sermondistributor.external_source");
// Remove Local listing Data
$this->removeViewData("com_sermondistributor.local_listing");
// Remove Help document Data
$this->removeViewData("com_sermondistributor.help_document");
// Remove Asset Data.
$this->removeAssetData();
// Revert the assets table rules column back to the default.
$this->removeDatabaseAssetsRulesFix();
// Remove component from action logs extensions table.
$this->removeActionLogsExtensions();
// Remove Preacher from action logs config table.
$this->removeActionLogConfig('com_sermondistributor.preacher');
// Remove Sermon from action logs config table.
$this->removeActionLogConfig('com_sermondistributor.sermon');
// Remove Series from action logs config table.
$this->removeActionLogConfig('com_sermondistributor.series');
// Remove Statistic from action logs config table.
$this->removeActionLogConfig('com_sermondistributor.statistic');
// Remove External_source from action logs config table.
$this->removeActionLogConfig('com_sermondistributor.external_source');
// Remove Local_listing from action logs config table.
$this->removeActionLogConfig('com_sermondistributor.local_listing');
// Remove Help_document from action logs config table.
$this->removeActionLogConfig('com_sermondistributor.help_document');
// little notice as after service, in case of bad experience with component.
echo '<div style="background-color: #fff;" class="alert alert-info">
<h2>Did something go wrong? Are you disappointed?</h2>
<p>Please let me know at <a href="mailto:joomla@vdm.io">joomla@vdm.io</a>.
<br />We at Vast Development Method are committed to building extensions that performs proficiently! You can help us, really!
<br />Send me your thoughts on improvements that is needed, trust me, I will be very grateful!
<br />Visit us at <a href="https://www.vdm.io/" target="_blank">https://www.vdm.io/</a> today!</p></div>';
return true;
}
/**
* Function called before extension installation/update/removal procedure commences.
*
* @param string $type The type of change (install or discover_install, update, uninstall)
* @param InstallerAdapter $adapter The adapter calling this method
*
* @return boolean True on success
*
* @since 4.2.0
*/
public function preflight(string $type, InstallerAdapter $adapter): bool
{
// Check for the minimum PHP version before continuing
if (!empty($this->minimumPhp) && version_compare(PHP_VERSION, $this->minimumPhp, '<'))
{
Log::add(Text::sprintf('JLIB_INSTALLER_MINIMUM_PHP', $this->minimumPhp), Log::WARNING, 'jerror');
return false;
}
// Check for the minimum Joomla version before continuing
if (!empty($this->minimumJoomla) && version_compare(JVERSION, $this->minimumJoomla, '<'))
{
Log::add(Text::sprintf('JLIB_INSTALLER_MINIMUM_JOOMLA', $this->minimumJoomla), Log::WARNING, 'jerror');
return false;
}
// Extension manifest file version
$this->extension = $adapter->getName();
$this->release = $adapter->getManifest()->version;
// do any updates needed
if ($type === 'update')
{
// Check that the required configuration are set for PHP
$this->phpConfigurationCheck($this->app);
}
// do any install needed
if ($type === 'install')
{
// Check that the required configuration are set for PHP
$this->phpConfigurationCheck($this->app);
}
return true;
}
/**
* Function called after extension installation/update/removal procedure commences.
*
* @param string $type The type of change (install or discover_install, update, uninstall)
* @param InstallerAdapter $adapter The adapter calling this method
*
* @return boolean True on success
*
* @since 4.2.0
*/
public function postflight(string $type, InstallerAdapter $adapter): bool
{
// We check if we have dynamic folders to copy
$this->moveFolders($adapter);
// set the default component settings
if ($type === 'install')
{
// Install Preacher Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Preacher',
// typeAlias
'com_sermondistributor.preacher',
// table
'{"special": {"dbtable": "#__sermondistributor_preacher","key": "id","type": "PreacherTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "description","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","description":"description","website":"website","email":"email","icon":"icon","alias":"alias"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/preacher.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'
);
// Install Sermon Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Sermon',
// typeAlias
'com_sermondistributor.sermon',
// table
'{"special": {"dbtable": "#__sermondistributor_sermon","key": "id","type": "SermonTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "description","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","preacher":"preacher","series":"series","short_description":"short_description","link_type":"link_type","source":"source","local_files":"local_files","alias":"alias","description":"description","tags":"tags","icon":"icon","build":"build","manual_files":"manual_files","auto_sermons":"auto_sermons","url":"url","scripture":"scripture"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/sermon.xml","hideFields": ["asset_id","checked_out","checked_out_time","auto_sermons"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","preacher","series","catid","link_type","source","build"],"displayLookup": [{"sourceColumn": "catid","targetTable": "#__categories","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "preacher","targetTable": "#__sermondistributor_preacher","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "series","targetTable": "#__sermondistributor_series","targetColumn": "id","displayColumn": "name"}]}'
);
// Install Sermon category Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Sermon Catid',
// typeAlias
'com_sermondistributor.sermon.category',
// table
'{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}',
// rules
'',
// fieldMappings
'{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}',
// router
'',
// contentHistoryOptions
'{"formFile":"administrator\/components\/com_categories\/forms\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'
);
// Install Series Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Series',
// typeAlias
'com_sermondistributor.series',
// table
'{"special": {"dbtable": "#__sermondistributor_series","key": "id","type": "SeriesTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "description","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","description":"description","scripture":"scripture","icon":"icon","alias":"alias"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/series.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'
);
// Install Statistic Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Statistic',
// typeAlias
'com_sermondistributor.statistic',
// table
'{"special": {"dbtable": "#__sermondistributor_statistic","key": "id","type": "StatisticTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "filename","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"filename":"filename","sermon":"sermon","preacher":"preacher","series":"series","counter":"counter"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/statistic.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","sermon","preacher","series","counter"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "sermon","targetTable": "#__sermondistributor_sermon","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "preacher","targetTable": "#__sermondistributor_preacher","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "series","targetTable": "#__sermondistributor_series","targetColumn": "id","displayColumn": "name"}]}'
);
// Install External source Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor External_source',
// typeAlias
'com_sermondistributor.external_source',
// table
'{"special": {"dbtable": "#__sermondistributor_external_source","key": "id","type": "External_sourceTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "description","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "null","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"description":"description","externalsources":"externalsources","update_method":"update_method","filetypes":"filetypes","build":"build","not_required":"not_required","update_timer":"update_timer","dropboxoptions":"dropboxoptions","permissiontype":"permissiontype","oauthtoken":"oauthtoken"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/external_source.xml","hideFields": ["asset_id","checked_out","checked_out_time","not_required"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","externalsources","update_method","build","not_required","update_timer","dropboxoptions"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'
);
// Install Local listing Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Local_listing',
// typeAlias
'com_sermondistributor.local_listing',
// table
'{"special": {"dbtable": "#__sermondistributor_local_listing","key": "id","type": "Local_listingTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "null","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","build":"build","size":"size","external_source":"external_source","key":"key","url":"url"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/local_listing.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","build","size","external_source"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "external_source","targetTable": "#__sermondistributor_external_source","targetColumn": "id","displayColumn": "description"}]}'
);
// Install Help document Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Help_document',
// typeAlias
'com_sermondistributor.help_document',
// table
'{"special": {"dbtable": "#__sermondistributor_help_document","key": "id","type": "Help_documentTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "title","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "content","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"title":"title","type":"type","groups":"groups","location":"location","admin_view":"admin_view","site_view":"site_view","alias":"alias","content":"content","article":"article","url":"url","target":"target"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/help_document.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","type","location","article","target"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "article","targetTable": "#__content","targetColumn": "id","displayColumn": "title"}]}'
);
// Fix the assets table rules column size.
$this->setDatabaseAssetsRulesFix(22240, "TEXT");
// Install the global extension assets permission.
$this->setAssetsRules(
'{"site.preachers.access":{"1":1},"site.preacher.access":{"1":1},"site.categories.access":{"1":1},"site.category.access":{"1":1},"site.serieslist.access":{"1":1},"site.series.access":{"1":1},"site.sermon.access":{"1":1}}'
);
// Install the global extension params.
$this->setExtensionsParams(
'{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","player":"1","add_to_button":"0","preachers_display":"2","preachers_list_style":"2","preachers_table_color":"0","preachers_icon":"1","preachers_desc":"1","preachers_sermon_count":"1","preachers_hits":"1","preachers_website":"1","preachers_email":"1","preacher_request_id":"0","preacher_display":"3","preacher_box_contrast":"1","preacher_list_style":"3","preacher_icon":"1","preacher_desc":"1","preacher_sermon_count":"1","preacher_hits":"1","preacher_email":"1","preacher_website":"1","preacher_sermons_display":"2","preacher_sermons_list_style":"2","preacher_sermons_table_color":"0","preacher_sermons_icon":"1","preacher_sermons_desc":"1","preacher_sermons_series":"1","preacher_sermons_category":"1","preacher_sermons_download_counter":"1","preacher_sermons_hits":"1","preacher_sermons_downloads":"1","preacher_sermons_open":"1","categories_display":"2","categories_list_style":"2","categories_table_color":"0","categories_icon":"1","categories_desc":"1","categories_sermon_count":"1","categories_hits":"1","category_display":"3","category_box_contrast":"1","category_list_style":"3","category_icon":"1","category_desc":"1","category_sermon_count":"1","category_hits":"1","category_sermons_display":"2","category_sermons_list_style":"1","category_sermons_table_color":"1","category_sermons_icon":"1","category_sermons_desc":"1","category_sermons_preacher":"1","category_sermons_series":"1","category_sermons_download_counter":"1","category_sermons_hits":"1","category_sermons_downloads":"1","category_sermons_open":"1","list_series_display":"2","list_series_list_style":"2","list_series_table_color":"0","list_series_icon":"1","list_series_desc":"1","list_series_sermon_count":"1","list_series_hits":"1","series_request_id":"0","series_display":"3","series_box_contrast":"1","series_list_style":"3","series_icon":"1","series_desc":"1","series_sermon_count":"1","series_hits":"1","series_sermons_display":"2","series_sermons_list_style":"1","series_sermons_table_color":"1","series_sermons_icon":"1","series_sermons_desc":"1","series_sermons_preacher":"1","series_sermons_category":"1","series_sermons_download_counter":"1","series_sermons_hits":"1","series_sermons_downloads":"1","series_sermons_open":"1","sermon_display":"1","sermon_box_contrast":"1","sermon_list_style":"1","sermon_icon":"1","sermon_desc":"1","sermon_preacher":"1","sermon_series":"1","sermon_category":"1","sermon_download_counter":"1","sermon_hits":"1","sermon_downloads":"1","max_execution_time":"500","check_in":"-1 day","save_history":"1","history_limit":"10","add_jquery_framework":"1","uikit_load":"1","uikit_min":""}'
);
// Check that the database is up-to date
$this->databaseSchemaCheck($this->app);
echo '<div style="background-color: #fff;" class="alert alert-info"><a target="_blank" href="https://www.vdm.io/" title="Sermon Distributor">
<img src="components/com_sermondistributor/assets/images/vdm-component.jpg"/>
</a></div>';
// Add component to the action logs extensions table.
$this->setActionLogsExtensions();
// Add Preacher to the action logs config table.
$this->setActionLogConfig(
// typeTitle
'PREACHER',
// typeAlias
'com_sermondistributor.preacher',
// idHolder
'id',
// titleHolder
'name',
// tableName
'#__sermondistributor_preacher',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add Sermon to the action logs config table.
$this->setActionLogConfig(
// typeTitle
'SERMON',
// typeAlias
'com_sermondistributor.sermon',
// idHolder
'id',
// titleHolder
'name',
// tableName
'#__sermondistributor_sermon',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add Series to the action logs config table.
$this->setActionLogConfig(
// typeTitle
'SERIES',
// typeAlias
'com_sermondistributor.series',
// idHolder
'id',
// titleHolder
'name',
// tableName
'#__sermondistributor_series',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add Statistic to the action logs config table.
$this->setActionLogConfig(
// typeTitle
'STATISTIC',
// typeAlias
'com_sermondistributor.statistic',
// idHolder
'id',
// titleHolder
'filename',
// tableName
'#__sermondistributor_statistic',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add External_source to the action logs config table.
$this->setActionLogConfig(
// typeTitle
'EXTERNAL_SOURCE',
// typeAlias
'com_sermondistributor.external_source',
// idHolder
'id',
// titleHolder
'description',
// tableName
'#__sermondistributor_external_source',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add Local_listing to the action logs config table.
$this->setActionLogConfig(
// typeTitle
'LOCAL_LISTING',
// typeAlias
'com_sermondistributor.local_listing',
// idHolder
'id',
// titleHolder
'name',
// tableName
'#__sermondistributor_local_listing',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add Help_document to the action logs config table.
$this->setActionLogConfig(
// typeTitle
'HELP_DOCUMENT',
// typeAlias
'com_sermondistributor.help_document',
// idHolder
'id',
// titleHolder
'title',
// tableName
'#__sermondistributor_help_document',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
}
// do any updates needed
if ($type === 'update')
{
// Update Preacher Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Preacher',
// typeAlias
'com_sermondistributor.preacher',
// table
'{"special": {"dbtable": "#__sermondistributor_preacher","key": "id","type": "PreacherTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "description","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","description":"description","website":"website","email":"email","icon":"icon","alias":"alias"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/preacher.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'
);
// Update Sermon Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Sermon',
// typeAlias
'com_sermondistributor.sermon',
// table
'{"special": {"dbtable": "#__sermondistributor_sermon","key": "id","type": "SermonTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "description","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","preacher":"preacher","series":"series","short_description":"short_description","link_type":"link_type","source":"source","local_files":"local_files","alias":"alias","description":"description","tags":"tags","icon":"icon","build":"build","manual_files":"manual_files","auto_sermons":"auto_sermons","url":"url","scripture":"scripture"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/sermon.xml","hideFields": ["asset_id","checked_out","checked_out_time","auto_sermons"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","preacher","series","catid","link_type","source","build"],"displayLookup": [{"sourceColumn": "catid","targetTable": "#__categories","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "preacher","targetTable": "#__sermondistributor_preacher","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "series","targetTable": "#__sermondistributor_series","targetColumn": "id","displayColumn": "name"}]}'
);
// Update Sermon category Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Sermon Catid',
// typeAlias
'com_sermondistributor.sermon.category',
// table
'{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}',
// rules
'',
// fieldMappings
'{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}',
// router
'',
// contentHistoryOptions
'{"formFile":"administrator\/components\/com_categories\/forms\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}'
);
// Update Series Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Series',
// typeAlias
'com_sermondistributor.series',
// table
'{"special": {"dbtable": "#__sermondistributor_series","key": "id","type": "SeriesTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "description","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","description":"description","scripture":"scripture","icon":"icon","alias":"alias"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/series.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'
);
// Update Statistic Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Statistic',
// typeAlias
'com_sermondistributor.statistic',
// table
'{"special": {"dbtable": "#__sermondistributor_statistic","key": "id","type": "StatisticTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "filename","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"filename":"filename","sermon":"sermon","preacher":"preacher","series":"series","counter":"counter"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/statistic.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","sermon","preacher","series","counter"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "sermon","targetTable": "#__sermondistributor_sermon","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "preacher","targetTable": "#__sermondistributor_preacher","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "series","targetTable": "#__sermondistributor_series","targetColumn": "id","displayColumn": "name"}]}'
);
// Update External source Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor External_source',
// typeAlias
'com_sermondistributor.external_source',
// table
'{"special": {"dbtable": "#__sermondistributor_external_source","key": "id","type": "External_sourceTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "description","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "null","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"description":"description","externalsources":"externalsources","update_method":"update_method","filetypes":"filetypes","build":"build","not_required":"not_required","update_timer":"update_timer","dropboxoptions":"dropboxoptions","permissiontype":"permissiontype","oauthtoken":"oauthtoken"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/external_source.xml","hideFields": ["asset_id","checked_out","checked_out_time","not_required"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","externalsources","update_method","build","not_required","update_timer","dropboxoptions"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'
);
// Update Local listing Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Local_listing',
// typeAlias
'com_sermondistributor.local_listing',
// table
'{"special": {"dbtable": "#__sermondistributor_local_listing","key": "id","type": "Local_listingTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "null","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","build":"build","size":"size","external_source":"external_source","key":"key","url":"url"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/local_listing.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","build","size","external_source"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "external_source","targetTable": "#__sermondistributor_external_source","targetColumn": "id","displayColumn": "description"}]}'
);
// Update Help document Content Types.
$this->setContentType(
// typeTitle
'Sermondistributor Help_document',
// typeAlias
'com_sermondistributor.help_document',
// table
'{"special": {"dbtable": "#__sermondistributor_help_document","key": "id","type": "Help_documentTable","prefix": "TrueChristianChurch\Component\Sermondistributor\Administrator\Table"}}',
// rules
'',
// fieldMappings
'{"common": {"core_content_item_id": "id","core_title": "title","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "content","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"title":"title","type":"type","groups":"groups","location":"location","admin_view":"admin_view","site_view":"site_view","alias":"alias","content":"content","article":"article","url":"url","target":"target"}}',
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_sermondistributor/forms/help_document.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","type","location","article","target"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "article","targetTable": "#__content","targetColumn": "id","displayColumn": "title"}]}'
);
// Check that the database is up-to date
$this->databaseSchemaCheck($this->app);
echo '<div style="background-color: #fff;" class="alert alert-info"><a target="_blank" href="https://www.vdm.io/" title="Sermon Distributor">
<img src="components/com_sermondistributor/assets/images/vdm-component.jpg"/>
</a>
<h3>Upgrade to Version 5.0.0-beta2 Was Successful! Let us know if anything is not working as expected.</h3></div>';
// Add/Update component in the action logs extensions table.
$this->setActionLogsExtensions();
// Add/Update Preacher in the action logs config table.
$this->setActionLogConfig(
// typeTitle
'PREACHER',
// typeAlias
'com_sermondistributor.preacher',
// idHolder
'id',
// titleHolder
'name',
// tableName
'#__sermondistributor_preacher',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add/Update Sermon in the action logs config table.
$this->setActionLogConfig(
// typeTitle
'SERMON',
// typeAlias
'com_sermondistributor.sermon',
// idHolder
'id',
// titleHolder
'name',
// tableName
'#__sermondistributor_sermon',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add/Update Series in the action logs config table.
$this->setActionLogConfig(
// typeTitle
'SERIES',
// typeAlias
'com_sermondistributor.series',
// idHolder
'id',
// titleHolder
'name',
// tableName
'#__sermondistributor_series',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add/Update Statistic in the action logs config table.
$this->setActionLogConfig(
// typeTitle
'STATISTIC',
// typeAlias
'com_sermondistributor.statistic',
// idHolder
'id',
// titleHolder
'filename',
// tableName
'#__sermondistributor_statistic',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add/Update External_source in the action logs config table.
$this->setActionLogConfig(
// typeTitle
'EXTERNAL_SOURCE',
// typeAlias
'com_sermondistributor.external_source',
// idHolder
'id',
// titleHolder
'description',
// tableName
'#__sermondistributor_external_source',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add/Update Local_listing in the action logs config table.
$this->setActionLogConfig(
// typeTitle
'LOCAL_LISTING',
// typeAlias
'com_sermondistributor.local_listing',
// idHolder
'id',
// titleHolder
'name',
// tableName
'#__sermondistributor_local_listing',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
// Add/Update Help_document in the action logs config table.
$this->setActionLogConfig(
// typeTitle
'HELP_DOCUMENT',
// typeAlias
'com_sermondistributor.help_document',
// idHolder
'id',
// titleHolder
'title',
// tableName
'#__sermondistributor_help_document',
// textPrefix
'COM_SERMONDISTRIBUTOR'
);
}
// move CLI files
$this->moveCliFiles();
// remove old files and folders
$this->removeFiles();
return true;
}
/**
* Remove the files and folders in the given array from
*
* @return void
*
* @since 3.6
*/
protected function removeFiles()
{
if (!empty($this->deleteFiles))
{
foreach ($this->deleteFiles as $file)
{
if (is_file(JPATH_ROOT . $file) && !File::delete(JPATH_ROOT . $file))
{
echo Text::sprintf('JLIB_INSTALLER_ERROR_FILE_FOLDER', $file) . '<br>';
}
}
}
if (!empty($this->deleteFolders))
{
foreach ($this->deleteFolders as $folder)
{
if (is_dir(JPATH_ROOT . $folder) && !Folder::delete(JPATH_ROOT . $folder))
{
echo Text::sprintf('JLIB_INSTALLER_ERROR_FILE_FOLDER', $folder) . '<br>';
}
}
}
}
/**
* Moves the CLI scripts into the CLI folder in the CMS
*
* @return void
*
* @since 3.6
*/
protected function moveCliFiles()
{
if (!empty($this->cliScriptFiles))
{
foreach ($this->cliScriptFiles as $file)
{
$name = basename($file);
if (file_exists(JPATH_ROOT . $file) && !File::move(JPATH_ROOT . $file, JPATH_ROOT . '/cli/' . $name))
{
echo Text::sprintf('JLIB_INSTALLER_FILE_ERROR_MOVE', $name);
}
}
}
}
/**
* Set content type integration
*
* @param string $typeTitle
* @param string $typeAlias
* @param string $table
* @param string $rules
* @param string $fieldMappings
* @param string $router
* @param string $contentHistoryOptions
*
* @return void
* @since 4.4.2
*/
protected function setContentType(
string $typeTitle,
string $typeAlias,
string $table,
string $rules,
string $fieldMappings,
string $router,
string $contentHistoryOptions): void
{
// Create the content type object.
$content = new stdClass();
$content->type_title = $typeTitle;
$content->type_alias = $typeAlias;
$content->table = $table;
$content->rules = $rules;
$content->field_mappings = $fieldMappings;
$content->router = $router;
$content->content_history_options = $contentHistoryOptions;
// Check if content type is already in content_type DB.
$query = $this->db->getQuery(true);
$query->select($this->db->quoteName(array('type_id')));
$query->from($this->db->quoteName('#__content_types'));
$query->where($this->db->quoteName('type_alias') . ' LIKE '. $this->db->quote($content->type_alias));
$this->db->setQuery($query);
$this->db->execute();
// Check if the type alias is already in the content types table.
if ($this->db->getNumRows())
{
$content->type_id = $this->db->loadResult();
if ($this->db->updateObject('#__content_types', $content, 'type_id'))
{
// If its successfully update.
$this->app->enqueueMessage(
Text::sprintf('The (%s) was found in the <b>#__content_types</b> table, and updated.', $content->type_alias)
);
}
}
elseif ($this->db->insertObject('#__content_types', $content))
{
// If its successfully added.
$this->app->enqueueMessage(
Text::sprintf('The (%s) was added to the <b>#__content_types</b> table.', $content->type_alias)
);
}
}
/**
* Set action log config integration
*
* @param string $typeTitle
* @param string $typeAlias
* @param string $idHolder
* @param string $titleHolder
* @param string $tableName
* @param string $textPrefix
*
* @return void
* @since 4.4.2
*/
protected function setActionLogConfig(
string $typeTitle,
string $typeAlias,
string $idHolder,
string $titleHolder,
string $tableName,
string $textPrefix): void
{
// Create the content action log config object.
$content = new stdClass();
$content->type_title = $typeTitle;
$content->type_alias = $typeAlias;
$content->id_holder = $idHolder;
$content->title_holder = $titleHolder;
$content->table_name = $tableName;
$content->text_prefix = $textPrefix;
// Check if the action log config is already in action_log_config DB.
$query = $this->db->getQuery(true);
$query->select($this->db->quoteName(['id']));
$query->from($this->db->quoteName('#__action_log_config'));
$query->where($this->db->quoteName('type_alias') . ' LIKE '. $this->db->quote($content->type_alias));
$this->db->setQuery($query);
$this->db->execute();
// Check if the type alias is already in the action log config table.
if ($this->db->getNumRows())
{
$content->id = $this->db->loadResult();
if ($this->db->updateObject('#__action_log_config', $content, 'id'))
{
// If its successfully update.
$this->app->enqueueMessage(
Text::sprintf('The (%s) was found in the <b>#__action_log_config</b> table, and updated.', $content->type_alias)
);
}
}
elseif ($this->db->insertObject('#__action_log_config', $content))
{
// If its successfully added.
$this->app->enqueueMessage(
Text::sprintf('The (%s) was added to the <b>#__action_log_config</b> table.', $content->type_alias)
);
}
}
/**
* Set action logs extensions integration
*
* @return void
* @since 4.4.2
*/
protected function setActionLogsExtensions(): void
{
// Create the extension action logs object.
$data = new stdClass();
$data->extension = 'com_sermondistributor';
// Check if sermondistributor action log extension is already in action logs extensions DB.
$query = $this->db->getQuery(true);
$query->select($this->db->quoteName(['id']));
$query->from($this->db->quoteName('#__action_logs_extensions'));
$query->where($this->db->quoteName('extension') . ' = '. $this->db->quote($data->extension));
$this->db->setQuery($query);
$this->db->execute();
// Set the object into the action logs extensions table if not found.
if ($this->db->getNumRows())
{
// If its already set don't set it again.
$this->app->enqueueMessage(
Text::_('The (com_sermondistributor) is already in the <b>#__action_logs_extensions</b> table.')
);
}
elseif ($this->db->insertObject('#__action_logs_extensions', $data))
{
// give a success message
$this->app->enqueueMessage(
Text::_('The (com_sermondistributor) was successfully added to the <b>#__action_logs_extensions</b> table.')
);
}
}
/**
* Set global extension assets permission of this component
* (on install only)
*
* @param string $rules The component rules
*
* @return void
* @since 4.4.2
*/
protected function setAssetsRules(string $rules): void
{
// Condition.
$conditions = [
$this->db->quoteName('name') . ' = ' . $this->db->quote('com_sermondistributor')
];
// Field to update.
$fields = [
$this->db->quoteName('rules') . ' = ' . $this->db->quote($rules),
];
$query = $this->db->getQuery(true);
$query->update(
$this->db->quoteName('#__assets')
)->set($fields)->where($conditions);
$this->db->setQuery($query);
$done = $this->db->execute();
if ($done)
{
// give a success message
$this->app->enqueueMessage(
Text::_('The (com_sermondistributor) rules was successfully added to the <b>#__assets</b> table.')
);
}
}
/**
* Set global extension params of this component
* (on install only)
*
* @param string $params The component rules
*
* @return void
* @since 4.4.2
*/
protected function setExtensionsParams(string $params): void
{
// Condition.
$conditions = [
$this->db->quoteName('element') . ' = ' . $this->db->quote('com_sermondistributor')
];
// Field to update.
$fields = [
$this->db->quoteName('params') . ' = ' . $this->db->quote($params),
];
$query = $this->db->getQuery(true);
$query->update(
$this->db->quoteName('#__extensions')
)->set($fields)->where($conditions);
$this->db->setQuery($query);
$done = $this->db->execute();
if ($done)
{
// give a success message
$this->app->enqueueMessage(
Text::_('The (com_sermondistributor) params was successfully added to the <b>#__extensions</b> table.')
);
}
}
/**
* Set database fix (if needed)
* => WHY DO WE NEED AN ASSET TABLE FIX?
* https://git.vdm.dev/joomla/Component-Builder/issues/616#issuecomment-12085
* https://www.mysqltutorial.org/mysql-varchar/
* https://stackoverflow.com/a/15227917/1429677
* https://forums.mysql.com/read.php?24,105964,105964
*
* @param int $accessWorseCase This is the max rules column size com_sermondistributor would needs.
* @param string $dataType This datatype we will change the rules column to if it to small.
*
* @return void
* @since 4.4.2
*/
protected function setDatabaseAssetsRulesFix(int $accessWorseCase, string $dataType): void
{
// Get the biggest rule column in the assets table at this point.
$length = "SELECT CHAR_LENGTH(`rules`) as rule_size FROM #__assets ORDER BY rule_size DESC LIMIT 1";
$this->db->setQuery($length);
if ($this->db->execute())
{
$rule_length = $this->db->loadResult();
// Check the size of the rules column
if ($rule_length <= $accessWorseCase)
{
// Fix the assets table rules column size
$fix = "ALTER TABLE `#__assets` CHANGE `rules` `rules` {$dataType} NOT NULL COMMENT 'JSON encoded access control. Enlarged to {$dataType} by Sermondistributor';";
$this->db->setQuery($fix);
$done = $this->db->execute();
if ($done)
{
$this->app->enqueueMessage(
Text::sprintf('The <b>#__assets</b> table rules column was resized to the %s datatype for the components possible large permission rules.', $dataType)
);
}
}
}
}
/**
* Remove remnant data related to this view
*
* @param string $context The view context
* @param bool $fields The switch to also remove related field data
*
* @return void
* @since 4.4.2
*/
protected function removeViewData(string $context, bool $fields = false): void
{
$this->removeContentTypes($context);
$this->removeViewHistory($context);
$this->removeUcmContent($context); // this might be obsolete...
$this->removeContentItemTagMap($context);
$this->removeActionLogConfig($context);
if ($fields)
{
$this->removeFields($context);
$this->removeFieldsGroups($context);
}
}
/**
* Remove content types related to this view
*
* @param string $context The view context
*
* @return void
* @since 4.4.2
*/
protected function removeContentTypes(string $context): void
{
// Create a new query object.
$query = $this->db->getQuery(true);
// Select id from content type table
$query->select($this->db->quoteName('type_id'));
$query->from($this->db->quoteName('#__content_types'));
// Where Item alias is found
$query->where($this->db->quoteName('type_alias') . ' = '. $this->db->quote($context));
$this->db->setQuery($query);
// Execute query to see if alias is found
$this->db->execute();
$found = $this->db->getNumRows();
// Now check if there were any rows
if ($found)
{
// Since there are load the needed item type ids
$ids = $this->db->loadColumn();
// Remove Item from the content type table
$condition = [
$this->db->quoteName('type_alias') . ' = '. $this->db->quote($context)
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__content_types'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove Item items
$done = $this->db->execute();
if ($done)
{
// If successfully remove Item add queued success message.
$this->app->enqueueMessage(
Text::sprintf('The (%s) type alias was removed from the <b>#__content_type</b> table.', $context)
);
}
// Make sure that all the items are cleared from DB
$this->removeUcmBase($ids);
}
}
/**
* Remove fields related to this view
*
* @param string $context The view context
*
* @return void
* @since 4.4.2
*/
protected function removeFields(string $context): void
{
// Create a new query object.
$query = $this->db->getQuery(true);
// Select ids from fields
$query->select($this->db->quoteName('id'));
$query->from($this->db->quoteName('#__fields'));
// Where context is found
$query->where(
$this->db->quoteName('context') . ' = '. $this->db->quote($context)
);
$this->db->setQuery($query);
// Execute query to see if context is found
$this->db->execute();
$found = $this->db->getNumRows();
// Now check if there were any rows
if ($found)
{
// Since there are load the needed release_check field ids
$ids = $this->db->loadColumn();
// Create a new query object.
$query = $this->db->getQuery(true);
// Remove context from the field table
$condition = [
$this->db->quoteName('context') . ' = '. $this->db->quote($context)
];
$query->delete($this->db->quoteName('#__fields'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove release_check items
$done = $this->db->execute();
if ($done)
{
// If successfully remove context add queued success message.
$this->app->enqueueMessage(
Text::sprintf('The fields with context (%s) was removed from the <b>#__fields</b> table.', $context)
);
}
// Make sure that all the field values are cleared from DB
$this->removeFieldsValues($context, $ids);
}
}
/**
* Remove fields values related to fields
*
* @param string $context The view context
* @param array $ids The view context
*
* @return void
* @since 4.4.2
*/
protected function removeFieldsValues(string $context, array $ids): void
{
$condition = [
$this->db->quoteName('field_id') . ' IN ('. implode(',', $ids) .')'
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__fields_values'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove field values
$done = $this->db->execute();
if ($done)
{
// If successfully remove release_check add queued success message.
$this->app->enqueueMessage(
Text::sprintf('The fields values for (%s) was removed from the <b>#__fields_values</b> table.', $context)
);
}
}
/**
* Remove fields groups related to fields
*
* @param string $context The view context
*
* @return void
* @since 4.4.2
*/
protected function removeFieldsGroups(string $context): void
{
// Create a new query object.
$query = $this->db->getQuery(true);
// Select ids from fields
$query->select($this->db->quoteName('id'));
$query->from($this->db->quoteName('#__fields_groups'));
// Where context is found
$query->where(
$this->db->quoteName('context') . ' = '. $this->db->quote($context)
);
$this->db->setQuery($query);
// Execute query to see if context is found
$this->db->execute();
$found = $this->db->getNumRows();
// Now check if there were any rows
if ($found)
{
// Create a new query object.
$query = $this->db->getQuery(true);
// Remove context from the field table
$condition = [
$this->db->quoteName('context') . ' = '. $this->db->quote($context)
];
$query->delete($this->db->quoteName('#__fields_groups'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove release_check items
$done = $this->db->execute();
if ($done)
{
// If successfully remove context add queued success message.
$this->app->enqueueMessage(
Text::sprintf('The fields with context (%s) was removed from the <b>#__fields_groups</b> table.', $context)
);
}
}
}
/**
* Remove history related to this view
*
* @param string $context The view context
*
* @return void
* @since 4.4.2
*/
protected function removeViewHistory(string $context): void
{
// Remove Item items from the ucm content table
$condition = [
$this->db->quoteName('item_id') . ' LIKE ' . $this->db->quote($context . '.%')
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__history'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove Item items
$done = $this->db->execute();
if ($done)
{
// If successfully removed Items add queued success message.
$this->app->enqueueMessage(
Text::sprintf('The (%s) items were removed from the <b>#__history</b> table.', $context)
);
}
}
/**
* Remove ucm base values related to these IDs
*
* @param array $ids The type ids
*
* @return void
* @since 4.4.2
*/
protected function removeUcmBase(array $ids): void
{
// Make sure that all the items are cleared from DB
foreach ($ids as $type_id)
{
// Remove Item items from the ucm base table
$condition = [
$this->db->quoteName('ucm_type_id') . ' = ' . $type_id
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__ucm_base'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove Item items
$this->db->execute();
}
$this->app->enqueueMessage(
Text::_('All related items was removed from the <b>#__ucm_base</b> table.')
);
}
/**
* Remove ucm content values related to this view
*
* @param string $context The view context
*
* @return void
* @since 4.4.2
*/
protected function removeUcmContent(string $context): void
{
// Remove Item items from the ucm content table
$condition = [
$this->db->quoteName('core_type_alias') . ' = ' . $this->db->quote($context)
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__ucm_content'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove Item items
$done = $this->db->execute();
if ($done)
{
// If successfully removed Item add queued success message.
$this->app->enqueueMessage(
Text::sprintf('The (%s) type alias was removed from the <b>#__ucm_content</b> table.', $context)
);
}
}
/**
* Remove content item tag map related to this view
*
* @param string $context The view context
*
* @return void
* @since 4.4.2
*/
protected function removeContentItemTagMap(string $context): void
{
// Create a new query object.
$query = $this->db->getQuery(true);
// Remove Item items from the contentitem tag map table
$condition = [
$this->db->quoteName('type_alias') . ' = '. $this->db->quote($context)
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__contentitem_tag_map'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove Item items
$done = $this->db->execute();
if ($done)
{
// If successfully remove Item add queued success message.
$this->app->enqueueMessage(
Text::sprintf('The (%s) type alias was removed from the <b>#__contentitem_tag_map</b> table.', $context)
);
}
}
/**
* Remove action log config related to this view
*
* @param string $context The view context
*
* @return void
* @since 4.4.2
*/
protected function removeActionLogConfig(string $context): void
{
// Remove sermondistributor view from the action_log_config table
$condition = [
$this->db->quoteName('type_alias') . ' = '. $this->db->quote($context)
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__action_log_config'));
$query->where($condition);
$this->db->setQuery($query);
// Execute the query to remove com_sermondistributor.view
$done = $this->db->execute();
if ($done)
{
// If successfully removed sermondistributor view add queued success message.
$this->app->enqueueMessage(
Text::sprintf('The (%s) type alias was removed from the <b>#__action_log_config</b> table.', $context)
);
}
}
/**
* Remove Asset Table Integrated
*
* @return void
* @since 4.4.2
*/
protected function removeAssetData(): void
{
// Remove sermondistributor assets from the assets table
$condition = [
$this->db->quoteName('name') . ' LIKE ' . $this->db->quote('com_sermondistributor.%')
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__assets'));
$query->where($condition);
$this->db->setQuery($query);
$done = $this->db->execute();
if ($done)
{
// If successfully removed sermondistributor add queued success message.
$this->app->enqueueMessage(
Text::_('All related (com_sermondistributor) items was removed from the <b>#__assets</b> table.')
);
}
}
/**
* Remove action logs extensions integrated
*
* @return void
* @since 4.4.2
*/
protected function removeActionLogsExtensions(): void
{
// Remove sermondistributor from the action_logs_extensions table
$extension = [
$this->db->quoteName('extension') . ' = ' . $this->db->quote('com_sermondistributor')
];
// Create a new query object.
$query = $this->db->getQuery(true);
$query->delete($this->db->quoteName('#__action_logs_extensions'));
$query->where($extension);
$this->db->setQuery($query);
// Execute the query to remove sermondistributor
$done = $this->db->execute();
if ($done)
{
// If successfully remove sermondistributor add queued success message.
$this->app->enqueueMessage(
Text::_('The (com_sermondistributor) extension was removed from the <b>#__action_logs_extensions</b> table.')
);
}
}
/**
* Remove remove database fix (if possible)
*
* @return void
* @since 4.4.2
*/
protected function removeDatabaseAssetsRulesFix(): void
{
// Get the biggest rule column in the assets table at this point.
$length = "SELECT CHAR_LENGTH(`rules`) as rule_size FROM #__assets ORDER BY rule_size DESC LIMIT 1";
$this->db->setQuery($length);
if ($this->db->execute())
{
$rule_length = $this->db->loadResult();
// Check the size of the rules column
if ($rule_length < 5120)
{
// Revert the assets table rules column back to the default
$revert_rule = "ALTER TABLE `#__assets` CHANGE `rules` `rules` varchar(5120) NOT NULL COMMENT 'JSON encoded access control.';";
$this->db->setQuery($revert_rule);
$this->db->execute();
$this->app->enqueueMessage(
Text::_('Reverted the <b>#__assets</b> table rules column back to its default size of varchar(5120).')
);
}
else
{
$this->app->enqueueMessage(
Text::_('Could not revert the <b>#__assets</b> table rules column back to its default size of varchar(5120), since there is still one or more components that still requires the column to be larger.')
);
}
}
}
/**
* Define the required limits with specific messages for success and warning scenarios
*
* @var array
* @since 3.0.5
*/
protected array $requiredPHPConfigs = [
'upload_max_filesize' => [
'value' => '64M',
'success' => 'The upload_max_filesize is appropriately set to handle large files, which is essential for uploading substantial components and media.',
'warning' => 'The current upload_max_filesize may not support large file uploads effectively, potentially causing failures during component installation.'
],
'post_max_size' => [
'value' => '128M',
'success' => 'The post_max_size setting is sufficient to manage large data submissions, ensuring smooth data processing within forms and uploads.',
'warning' => 'An insufficient post_max_size can lead to truncated data submissions, affecting form functionality and data integrity.'
],
'max_execution_time' => [
'value' => 60,
'success' => 'Max execution time is set high enough to execute complex operations without premature termination, which is crucial for lengthy operations.',
'warning' => 'A low max execution time could lead to script timeouts, especially during intensive operations, which might interrupt execution and cause failures during the compiling of a large extension.'
],
'max_input_vars' => [
'value' => 5000,
'success' => 'The max_input_vars setting supports a high number of input variables, facilitating complex forms and detailed component configurations.',
'warning' => 'Too few max_input_vars may result in lost data during processing complex forms, which can lead to incomplete configurations and operational issues.'
],
'max_input_time' => [
'value' => 60,
'success' => 'Max input time is adequate for processing inputs efficiently during high-load operations, ensuring no premature timeouts.',
'warning' => 'An insufficient max input time could result in incomplete data processing during input-heavy operations, potentially leading to errors and data loss.'
],
'memory_limit' => [
'value' => '256M',
'success' => 'The memory limit is set high to accommodate extensive operations and data processing, which enhances overall performance and stability.',
'warning' => 'A low memory limit can lead to frequent crashes and performance issues, particularly when processing large amounts of data or complex calculations.'
]
];
/**
* Helper function to convert PHP INI memory values to bytes
*
* @param string $value The value to convert
*
* @return int The bytes value
* @since 3.0.5
*/
protected function convertToBytes(string $value): int
{
$value = trim($value);
$lastChar = strtolower($value[strlen($value) - 1]);
$numValue = substr($value, 0, -1);
switch ($lastChar)
{
case 'g':
return $numValue * 1024 * 1024 * 1024;
case 'm':
return $numValue * 1024 * 1024;
case 'k':
return $numValue * 1024;
default:
return (int) $value;
}
}
/**
* Check that the required configurations are set for PHP
*
* @param $app The application
*
* @return void
* @since 3.0.5
*/
protected function phpConfigurationCheck($app): void
{
$showHelp = false;
// Check each configuration and provide detailed feedback
foreach ($this->requiredPHPConfigs as $configName => $configDetails)
{
$currentValue = ini_get($configName);
if ($currentValue === false)
{
$app->enqueueMessage("Error: Unable to retrieve current setting for '{$configName}'.", 'error');
continue;
}
$isMemoryValue = strpbrk($configDetails['value'], 'KMG') !== false;
$requiredValueBytes = $isMemoryValue ? $this->convertToBytes($configDetails['value']) : (int) $configDetails['value'];
$currentValueBytes = $isMemoryValue ? $this->convertToBytes($currentValue) : (int) $currentValue;
$conditionMet = $currentValueBytes >= $requiredValueBytes;
$messageType = $conditionMet ? 'message' : 'warning';
$messageText = $conditionMet ?
"Success: {$configName} is set to {$currentValue}. " . $configDetails['success'] :
"Warning: {$configName} configuration should be at least {$configDetails['value']} but is currently {$currentValue}. " . $configDetails['warning'];
$showHelp = ($showHelp || $messageType === 'warning') ? true : false;
$app->enqueueMessage($messageText, $messageType);
}
if ($showHelp)
{
$app->enqueueMessage('To optimize your Sermon Distributor environment, specific PHP settings must be enhanced.<br>These settings are crucial for ensuring the successful installation and stable functionality of the extension.<br>We\'ve identified that certain configurations currently do not meet the recommended standards.<br>To adjust these settings and prevent potential issues, please consult our detailed guide available at <a href="https://git.vdm.dev/christian/Joomla-Sermon-Distributor/wiki/PHP-Settings" target="_blank">Sermon Distributor PHP Settings Wiki</a>.
', 'notice');
}
}
/**
* Make sure that the sermondistributor database schema is up to date.
*
* @return void
* @since 3.0.5
*/
protected function databaseSchemaCheck($app): void
{
// try to load the schema class
try
{
// make sure the class is loaded
$this->ensureClassExists(
Schema::class
);
// instantiate the schema class and check/update the database
$messages = (new Schema())->update();
}
catch (\Exception $e)
{
$app->enqueueMessage($e->getMessage(), 'warning');
return;
}
foreach ($messages as $message)
{
$app->enqueueMessage($message, 'message');
}
}
/**
* Ensures that a class in the namespace is available.
* If the class is not already loaded, it attempts to load it via the power autoloader.
*
* @param mixed $nameClass The name::class we are looking for.
*
* @return void
* @since 3.0.5
* @throws \Exception If the class could not be loaded.
*/
protected function ensureClassExists($nameClass): void
{
if (!class_exists($nameClass, true))
{
// The power autoloader for this project admin area.
$power_autoloader = JPATH_ADMINISTRATOR . '/components/com_sermondistributor/src/Helper/PowerloaderHelper.php';
if (file_exists($power_autoloader))
{
require_once $power_autoloader;
}
// Check again if the class now exists after requiring it
if (!class_exists($nameClass, true))
{
throw new \Exception("We failed to find/load the $nameClass");
}
}
}
/**
* Method to move folders into place.
*
* @param InstallerAdapter $adapter The adapter calling this method
*
* @return void
* @since 4.4.2
*/
protected function moveFolders(InstallerAdapter $adapter): void
{
// get the installation path
$installer = $adapter->getParent();
$installPath = $installer->getPath('source');
// get all the folders
$folders = Folder::folders($installPath);
// check if we have folders we may want to copy
$doNotCopy = ['media','admin','site']; // Joomla already deals with these
if (count((array) $folders) > 1)
{
foreach ($folders as $folder)
{
// Only copy if not a standard folders
if (!in_array($folder, $doNotCopy))
{
// set the source path
$src = $installPath.'/'.$folder;
// set the destination path
$dest = JPATH_ROOT.'/'.$folder;
// now try to copy the folder
if (!Folder::copy($src, $dest, '', true))
{
$this->app->enqueueMessage('Could not copy '.$folder.' folder into place, please make sure destination is writable!', 'error');
}
}
}
}
}
}