include/onupdate.php
<?php
declare(strict_types=1);
use Xmf\Database\Tables;
use XoopsModules\Tdmdownloads\{
Common,
Common\Configurator,
Common\Migrate,
Helper,
Utility
};
/** @var Helper $helper */
/** @var Utility $utility */
/** @var Configurator $configurator */
/** @var Migrate $migrator */
if ((!defined('XOOPS_ROOT_PATH')) || !($GLOBALS['xoopsUser'] instanceof XoopsUser)
|| !$GLOBALS['xoopsUser']->isAdmin()) {
exit('Restricted access' . PHP_EOL);
}
/**
* TDMDownload
*
* You may not change or alter any portion of this comment or credits
* of supporting developers from this source code or any supporting source code
* which is considered copyrighted (c) material of the original comment or credit authors.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* @param $module
* @param null $prev_version
* @return bool|null
* @copyright Gregory Mage (Aka Mage)
* @license GNU GPL 2 (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
* @author Gregory Mage (Aka Mage)
*/
/**
* Prepares system prior to attempting to install module
* @param \XoopsModule $module {@link XoopsModule}
* @return bool true if ready to install, false if not
*/
function xoops_module_pre_update_tdmdownloads(\XoopsModule $module)
{
$moduleDirName = \basename(\dirname(__DIR__));
$helper = Helper::getInstance();
$utility = new Utility();
$xoopsSuccess = $utility::checkVerXoops($module);
$phpSuccess = $utility::checkVerPhp($module);
$configurator = new Configurator();
//create upload folders
$uploadFolders = $configurator->uploadFolders;
foreach ($uploadFolders as $value) {
$utility::prepareFolder($value);
}
$migrator = new Migrate();
$migrator->synchronizeSchema();
return $xoopsSuccess && $phpSuccess;
}
/**
* @param $module
* @param $prev_version
* @return bool|null
*/
function xoops_module_update_tdmdownloads(&$module, $prev_version = null)
{
$ret = null;
$moduleDirName = \basename(\dirname(__DIR__));
$moduleDirNameUpper = \mb_strtoupper($moduleDirName);
$helper = Helper::getInstance();
$utility = new Utility();
$configurator = new Configurator();
$helper->loadLanguage('common');
if ($prev_version < 163) {
$ret = update_tdmdownloads_v163($module);
}
if ($prev_version < 167) {
$ret = update_tdmdownloads_v167($module);
}
if ($prev_version < 200) {
$ret = update_tdmdownloads_v200($module);
}
if ($prev_version < 201) {
$ret = update_tdmdownloads_v201($module);
}
$errors = $module->getErrors();
if (!empty($errors)) {
// print_r($errors);
}
return $ret;
}
/**
* @param $module
* @return bool
*/
function update_tdmdownloads_v201($module)
{
$moduleDirName = \basename(\dirname(__DIR__));
$moduleDirNameUpper = \mb_strtoupper($moduleDirName);
$helper = Helper::getInstance();
$utility = new Utility();
$configurator = new Configurator();
$helper->loadLanguage('common');
//delete old HTML templates
if (count($configurator->templateFolders) > 0) {
foreach ($configurator->templateFolders as $folder) {
$templateFolder = $GLOBALS['xoops']->path('modules/' . $moduleDirName . $folder);
if (is_dir($templateFolder)) {
$templateList = array_diff(scandir($templateFolder, SCANDIR_SORT_NONE), ['..', '.']);
foreach ($templateList as $k => $v) {
$fileInfo = new SplFileInfo($templateFolder . $v);
if ('html' === $fileInfo->getExtension() && 'index.html' !== $fileInfo->getFilename()) {
if (is_file($templateFolder . $v)) {
unlink($templateFolder . $v);
}
}
}
}
}
}
// --- DELETE OLD FILES ---------------
if (count($configurator->oldFiles) > 0) {
// foreach (array_keys($GLOBALS['uploadFolders']) as $i) {
foreach (array_keys($configurator->oldFiles) as $i) {
$tempFile = $GLOBALS['xoops']->path('modules/' . $moduleDirName . $configurator->oldFiles[$i]);
if (is_file($tempFile)) {
unlink($tempFile);
}
}
}
// --- DELETE OLD FOLDERS ---------------
xoops_load('XoopsFile');
if (count($configurator->oldFolders) > 0) {
// foreach (array_keys($GLOBALS['uploadFolders']) as $i) {
foreach (array_keys($configurator->oldFolders) as $i) {
$tempFolder = $GLOBALS['xoops']->path('modules/' . $moduleDirName . $configurator->oldFolders[$i]);
/** @var XoopsObjectHandler $folderHandler */
$folderHandler = \XoopsFile::getHandler('folder', $tempFolder);
$folderHandler->delete($tempFolder);
}
}
// --- CREATE UPLOAD FOLDERS ---------------
if (count($configurator->uploadFolders) > 0) {
// foreach (array_keys($GLOBALS['uploadFolders']) as $i) {
foreach (array_keys($configurator->uploadFolders) as $i) {
$utility::createFolder($configurator->uploadFolders[$i]);
}
}
// --- COPY blank.png FILES ---------------
if (count($configurator->copyBlankFiles) > 0) {
$file = dirname(__DIR__) . '/assets/images/blank.png';
foreach (array_keys($configurator->copyBlankFiles) as $i) {
$dest = $configurator->copyBlankFiles[$i] . '/blank.png';
$utility::copyFile($file, $dest);
}
}
//delete .html entries from the tpl table
$sql = 'DELETE FROM ' . $GLOBALS['xoopsDB']->prefix('tplfile') . " WHERE `tpl_module` = '" . $module->getVar('dirname', 'n') . "' AND `tpl_file` LIKE '%.html%'";
$GLOBALS['xoopsDB']->queryF($sql);
//delete .tpl entries from the tpl table
$sql = 'DELETE FROM ' . $GLOBALS['xoopsDB']->prefix('tplfile') . " WHERE `tpl_module` = '" . $module->getVar('dirname', 'n') . "' AND `tpl_file` LIKE '%.tpl%'";
$GLOBALS['xoopsDB']->queryF($sql);
//delete tdmdownloads entries from the tpl_source table
$sql = 'DELETE FROM ' . $GLOBALS['xoopsDB']->prefix('tplsource') . " WHERE `tpl_source` LIKE '%tdmdownloads%'";
$GLOBALS['xoopsDB']->queryF($sql);
$sql = 'CREATE TABLE `' . $GLOBALS['xoopsDB']->prefix('tdmdownloads_downlimit') . "` (downlimit_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, downlimit_lid INT(11) UNSIGNED NOT NULL DEFAULT '0',
downlimit_uid INT(11) NOT NULL DEFAULT '0', downlimit_hostname VARCHAR(60) NOT NULL DEFAULT '', downlimit_date INT(10) NOT NULL DEFAULT '0', PRIMARY KEY (downlimit_id)
) ENGINE=MyISAM";
$GLOBALS['xoopsDB']->query($sql);
/** @var XoopsGroupPermHandler $gpermHandler */
$gpermHandler = xoops_getHandler('groupperm');
return $gpermHandler->deleteByModule($module->getVar('mid'), 'item_read');
}
/**
* @param $module
* @return bool
*/
function update_tdmdownloads_v200(&$module)
{
// Update size
$moduleDirName = basename(dirname(__DIR__));
$db = \XoopsDatabaseFactory::getDatabaseConnection();
$sql = 'SELECT lid, size FROM ' . $db->prefix('tdmdownloads_downloads');
$result = $db->query($sql);
$helper = Helper::getInstance();
$helper->loadLanguage('admin');
if ($result instanceof \mysqli_result) {
while (false !== ($myrow = $db->fetchArray($result))) {
$size_value_arr = explode(' ', $myrow['size']);
switch ($size_value_arr[1]) {
case _AM_TDMDOWNLOADS_BYTES:
case 'Bytes':
$sql = 'UPDATE `' . $db->prefix('tdmdownloads_downloads') . '` SET `size` = \'' . $size_value_arr[0] . ' B\'' . ' WHERE `lid` = ' . $myrow['lid'] . ';';
$db->query($sql);
break;
case _AM_TDMDOWNLOADS_KBYTES:
case 'kB':
$sql = 'UPDATE `' . $db->prefix('tdmdownloads_downloads') . '` SET `size` = \'' . $size_value_arr[0] . ' K\'' . ' WHERE `lid` = ' . $myrow['lid'] . ';';
$db->query($sql);
break;
case _AM_TDMDOWNLOADS_MBYTES:
case 'MB':
$sql = 'UPDATE `' . $db->prefix('tdmdownloads_downloads') . '` SET `size` = \'' . $size_value_arr[0] . ' M\'' . ' WHERE `lid` = ' . $myrow['lid'] . ';';
$db->query($sql);
break;
case _AM_TDMDOWNLOADS_GBYTES:
case 'GB':
$sql = 'UPDATE `' . $db->prefix('tdmdownloads_downloads') . '` SET `size` = \'' . $size_value_arr[0] . ' G\'' . ' WHERE `lid` = ' . $myrow['lid'] . ';';
$db->query($sql);
break;
case _AM_TDMDOWNLOADS_TBYTES:
case 'TB':
$sql = 'UPDATE `' . $db->prefix('tdmdownloads_downloads') . '` SET `size` = \'' . $size_value_arr[0] . ' T\'' . ' WHERE `lid` = ' . $myrow['lid'] . ';';
$db->query($sql);
break;
}
}
}
// Update folder
rename(XOOPS_ROOT_PATH . '/uploads/TDMDownloads', XOOPS_ROOT_PATH . '/uploads/' . $moduleDirName);
// Change TDMDownloads with tdmdownloads
$sql = 'UPDATE `' . $db->prefix('tdmdownloads_downloads') . '` SET `url` = REPLACE(`url`, \'TDMDownloads\', \'' . $moduleDirName . '\') WHERE `url` LIKE \'%TDMDownloads%\'';
$result = $db->query($sql);
return true;
}
/**
* @param $module
* @return bool
*/
function update_tdmdownloads_v167(&$module)
{
$moduleDirName = basename(dirname(__DIR__));
// rename module dir from upper case to lower case
rename(XOOPS_ROOT_PATH . '/modules/TDMDownloads', XOOPS_ROOT_PATH . '/modules/' . $moduleDirName);
// rename upload dir from upper case to lower case
rename(XOOPS_ROOT_PATH . '/uploads/TDMDownloads', XOOPS_ROOT_PATH . '/uploads/' . $moduleDirName);
// files have been moved to assets-folder
$src = XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/css/';
rrmdir($src);
$src = XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/images/';
rrmdir($src);
// delete unneeded/replacfiles
// unlink( XOOPS_ROOT_PATH.'/modules/' . $moduleDirName . '/admin/admin_header.php' );
// clean template directory
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_brokenfile.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_download.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_index.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_modfile.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_ratefile.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_singlefile.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_submit.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_viewcat.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_liste.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/tdmdownloads_rss.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/blocks/tdmdownloads_block_new.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/blocks/tdmdownloads_block_random.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/blocks/tdmdownloads_block_rating.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/blocks/tdmdownloads_block_search.html');
@unlink(XOOPS_ROOT_PATH . '/modules/' . $moduleDirName . '/templates/blocks/tdmdownloads_block_top.html');
return true;
}
/**
* @param $src
*/
function rrmdir($src)
{
if (is_dir($src)) {
$dir = opendir($src);
while (false !== ($file = readdir($dir))) {
if (('.' !== $file) && ('..' !== $file)) {
$full = $src . '/' . $file;
if (is_dir($full)) {
rrmdir($full);
} else {
unlink($full);
}
}
}
closedir($dir);
rmdir($src);
}
}
/**
* @return bool
*/
function update_tdmdownloads_v163()
{
/** @var \XoopsMySQLDatabase $db */
$db = \XoopsDatabaseFactory::getDatabaseConnection();
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_cat') . '` CHANGE `cid` `cat_cid` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT ;';
$db->query($sql);
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_cat') . "` CHANGE `pid` `cat_pid` INT( 5 ) UNSIGNED NOT NULL DEFAULT '0' ;";
$db->query($sql);
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_cat') . '` CHANGE `title` `cat_title` VARCHAR( 255 ) NOT NULL ;';
$db->query($sql);
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_cat') . '` CHANGE `imgurl` `cat_imgurl` VARCHAR( 255 ) NOT NULL ;';
$db->query($sql);
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_cat') . '` CHANGE `description_main` `cat_description_main` TEXT NOT NULL ;';
$db->query($sql);
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_cat') . "` CHANGE `weight` `cat_weight` INT( 11 ) NOT NULL DEFAULT '0' ;";
$db->query($sql);
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_downloads') . '` ADD `paypal` VARCHAR( 255 ) NOT NULL;';
$db->query($sql);
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_downloads') . "` CHANGE `size` `size` VARCHAR( 15 ) NOT NULL DEFAULT '';";
$db->query($sql);
$sql = 'ALTER TABLE `' . $db->prefix('tdmdownloads_mod') . "` CHANGE `size` `size` VARCHAR( 15 ) NOT NULL DEFAULT '';";
$db->query($sql);
$sql = 'CREATE TABLE `' . $db->prefix('tdmdownloads_downlimit') . "` (downlimit_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, downlimit_lid INT(11) UNSIGNED NOT NULL DEFAULT '0',
downlimit_uid INT(11) NOT NULL DEFAULT '0', downlimit_hostname VARCHAR(60) NOT NULL DEFAULT '', downlimit_date INT(10) NOT NULL DEFAULT '0', PRIMARY KEY (downlimit_id)
) ENGINE=MyISAM";
$db->query($sql);
return true;
}