241 lines
6.4 KiB
PHP
241 lines
6.4 KiB
PHP
<?php
|
|
/**
|
|
* @package Joomla.Component.Builder
|
|
*
|
|
* @created 30th April, 2015
|
|
* @author Llewellyn van der Merwe <http://www.joomlacomponentbuilder.com>
|
|
* @github Joomla Component Builder <https://github.com/vdm-io/Joomla-Component-Builder>
|
|
* @copyright Copyright (C) 2015 - 2019 Vast Development Method. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
*/
|
|
|
|
// No direct access to this file
|
|
defined('_JEXEC') or die('Restricted access');
|
|
?>
|
|
###BOM###
|
|
|
|
// No direct access to this file
|
|
defined('_JEXEC') or die('Restricted access');
|
|
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\Language\Text;
|
|
use Joomla\CMS\Filesystem\File;
|
|
use Joomla\CMS\Filesystem\Folder;
|
|
use Joomla\CMS\Installer\Adapter\ComponentAdapter;
|
|
use Joomla\CMS\Version;
|
|
use Joomla\CMS\HTML\HTMLHelper as Html;
|
|
HTML::_('bootstrap.renderModal');
|
|
|
|
/**
|
|
* Script File of ###Component### Component
|
|
*/
|
|
class Com_###Component###InstallerScript
|
|
{
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param ComponentAdapter $parent The object responsible for running this script
|
|
*/
|
|
public function __construct(ComponentAdapter $parent) {}
|
|
|
|
/**
|
|
* Called on installation
|
|
*
|
|
* @param ComponentAdapter $parent The object responsible for running this script
|
|
*
|
|
* @return boolean True on success
|
|
*/
|
|
public function install(ComponentAdapter $parent) {}
|
|
|
|
/**
|
|
* Called on uninstallation
|
|
*
|
|
* @param ComponentAdapter $parent The object responsible for running this script
|
|
*/
|
|
public function uninstall(ComponentAdapter $parent)
|
|
{###UNINSTALLSCRIPT###
|
|
// little notice as after service, in case of bad experience with component.
|
|
echo '<h2>Did something go wrong? Are you disappointed?</h2>
|
|
<p>Please let me know at <a href="mailto:###AUTHOREMAIL###">###AUTHOREMAIL###</a>.
|
|
<br />We at ###COMPANYNAME### 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="###AUTHORWEBSITE###" target="_blank">###AUTHORWEBSITE###</a> today!</p>';
|
|
}
|
|
|
|
/**
|
|
* Called on update
|
|
*
|
|
* @param ComponentAdapter $parent The object responsible for running this script
|
|
*
|
|
* @return boolean True on success
|
|
*/
|
|
public function update(ComponentAdapter $parent){}
|
|
|
|
/**
|
|
* Called before any type of action
|
|
*
|
|
* @param string $type Which action is happening (install|uninstall|discover_install|update)
|
|
* @param ComponentAdapter $parent The object responsible for running this script
|
|
*
|
|
* @return boolean True on success
|
|
*/
|
|
public function preflight($type, ComponentAdapter $parent)
|
|
{
|
|
// get application
|
|
$app = Factory::getApplication();
|
|
// is redundant or so it seems ...hmmm let me know if it works again
|
|
if ($type === 'uninstall')
|
|
{
|
|
return true;
|
|
}
|
|
// the default for both install and update
|
|
$jversion = new Version();
|
|
if (!$jversion->isCompatible('3.8.0'))
|
|
{
|
|
$app->enqueueMessage('Please upgrade to at least Joomla! 3.8.0 before continuing!', 'error');
|
|
return false;
|
|
}
|
|
// do any updates needed
|
|
if ($type === 'update')
|
|
{###PREUPDATESCRIPT###
|
|
}
|
|
// do any install needed
|
|
if ($type === 'install')
|
|
{###PREINSTALLSCRIPT###
|
|
}
|
|
// check if the PHPExcel stuff is still around
|
|
if (File::exists(JPATH_ADMINISTRATOR . '/components/com_###component###/helpers/PHPExcel.php'))
|
|
{
|
|
// We need to remove this old PHPExcel folder
|
|
$this->removeFolder(JPATH_ADMINISTRATOR . '/components/com_###component###/helpers/PHPExcel');
|
|
// We need to remove this old PHPExcel file
|
|
File::delete(JPATH_ADMINISTRATOR . '/components/com_###component###/helpers/PHPExcel.php');
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Called after any type of action
|
|
*
|
|
* @param string $type Which action is happening (install|uninstall|discover_install|update)
|
|
* @param ComponentAdapter $parent The object responsible for running this script
|
|
*
|
|
* @return boolean True on success
|
|
*/
|
|
public function postflight($type, ComponentAdapter $parent)
|
|
{
|
|
// get application
|
|
$app = Factory::getApplication();###MOVEFOLDERSSCRIPT###
|
|
// set the default component settings
|
|
if ($type === 'install')
|
|
{###POSTINSTALLSCRIPT###
|
|
}
|
|
// do any updates needed
|
|
if ($type === 'update')
|
|
{###POSTUPDATESCRIPT###
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Remove folders with files
|
|
*
|
|
* @param string $dir The path to folder to remove
|
|
* @param boolean $ignore The folders and files to ignore and not remove
|
|
*
|
|
* @return boolean True in all is removed
|
|
*
|
|
*/
|
|
protected function removeFolder($dir, $ignore = false)
|
|
{
|
|
if (Folder::exists($dir))
|
|
{
|
|
$it = new RecursiveDirectoryIterator($dir);
|
|
$it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
|
|
// remove ending /
|
|
$dir = rtrim($dir, '/');
|
|
// now loop the files & folders
|
|
foreach ($it as $file)
|
|
{
|
|
if ('.' === $file->getBasename() || '..' === $file->getBasename()) continue;
|
|
// set file dir
|
|
$file_dir = $file->getPathname();
|
|
// check if this is a dir or a file
|
|
if ($file->isDir())
|
|
{
|
|
$keeper = false;
|
|
if ($this->checkArray($ignore))
|
|
{
|
|
foreach ($ignore as $keep)
|
|
{
|
|
if (strpos($file_dir, $dir.'/'.$keep) !== false)
|
|
{
|
|
$keeper = true;
|
|
}
|
|
}
|
|
}
|
|
if ($keeper)
|
|
{
|
|
continue;
|
|
}
|
|
Folder::delete($file_dir);
|
|
}
|
|
else
|
|
{
|
|
$keeper = false;
|
|
if ($this->checkArray($ignore))
|
|
{
|
|
foreach ($ignore as $keep)
|
|
{
|
|
if (strpos($file_dir, $dir.'/'.$keep) !== false)
|
|
{
|
|
$keeper = true;
|
|
}
|
|
}
|
|
}
|
|
if ($keeper)
|
|
{
|
|
continue;
|
|
}
|
|
File::delete($file_dir);
|
|
}
|
|
}
|
|
// delete the root folder if not ignore found
|
|
if (!$this->checkArray($ignore))
|
|
{
|
|
return Folder::delete($dir);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if have an array with a length
|
|
*
|
|
* @input array The array to check
|
|
*
|
|
* @returns bool/int number of items in array on success
|
|
*/
|
|
protected function checkArray($array, $removeEmptyString = false)
|
|
{
|
|
if (isset($array) && is_array($array) && ($nr = count((array)$array)) > 0)
|
|
{
|
|
// also make sure the empty strings are removed
|
|
if ($removeEmptyString)
|
|
{
|
|
foreach ($array as $key => $string)
|
|
{
|
|
if (empty($string))
|
|
{
|
|
unset($array[$key]);
|
|
}
|
|
}
|
|
return $this->checkArray($array, false);
|
|
}
|
|
return $nr;
|
|
}
|
|
return false;
|
|
}###MOVEFOLDERSMETHOD###
|
|
}
|