use namespace

This commit is contained in:
Jean-Christian Paul Denis 2022-12-23 11:27:35 +01:00
parent e322b2da16
commit 7506fdb918
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951

View File

@ -10,99 +10,147 @@
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_CONTEXT_ADMIN')) { declare(strict_types=1);
return null;
namespace Dotclear\Plugin\tinyPacker;
/* dotclear */
use dcCore;
use dcPage;
/* clearbricks */
use files;
use fileZip;
use html;
use http;
use path;
/* php */
use Exception;
/**
* tinyPacker admin class
*
* Add action and button to modules lists.
*/
class Admin
{
private static $init = false;
public static function init(): bool
{
if (defined('DC_CONTEXT_ADMIN')) {
dcPage::checkSuper();
self::$init = true;
}
return self::$init;
}
public static function process(): bool
{
if (!self::$init) {
return false;
}
dcCore::app()->addBehavior(
'adminModulesListGetActions',
function ($list, $id, $_) {
return in_array($list->getList(), [
'plugin-activate',
'theme-activate',
]) ? sprintf(
'<input type="submit" name="%s[%s]" value="Pack" />',
basename(__DIR__),
html::escapeHTML($id)
) : null;
}
);
dcCore::app()->addBehavior(
'adminModulesListDoActions',
function ($list, $modules, $type) {
# Pack action
if (empty($_POST[basename(__DIR__)])
|| !is_array($_POST[basename(__DIR__)])) {
return null;
}
# Repository directory
$dir = path::real(
dcCore::app()->blog->public_path . '/packages',
false
);
if (!is_dir($dir)) {
files::makeDir($dir, true);
}
if (!is_writable($dir)) {
throw new Exception(__('Destination directory is not writable.'));
}
# Module to pack
$modules = array_keys($_POST[basename(__DIR__)]);
$id = $modules[0];
if (!$list->modules->moduleExists($id)) {
throw new Exception(__('No such module.'));
}
$module = $list->modules->getModules($id);
# Excluded files and dirs
$exclude = [
'\.',
'\.\.',
'__MACOSX',
'\.svn',
'\.hg.*?',
'\.git.*?',
'CVS',
'\.directory',
'\.DS_Store',
'Thumbs\.db',
'_disabled',
];
# Packages names
$files = [
$type . '-' . $id . '.zip',
$type . '-' . $id . '-' . $module['version'] . '.zip',
];
# Create zip
foreach ($files as $f) {
@set_time_limit(300);
$fp = fopen($dir . '/' . $f, 'wb');
$zip = new fileZip($fp);
foreach ($exclude as $e) {
$zip->addExclusion(sprintf(
'#(^|/)(%s)(/|$)#',
$e
));
}
$zip->addDirectory($module['root'], $id, true);
$zip->write();
$zip->close();
unset($zip);
}
dcPage::addSuccessNotice(
__('Task successfully executed.')
);
http::redirect($list->getURL());
}
);
return true;
}
} }
dcCore::app()->addBehavior( /* process */
'adminModulesListGetActions', if (Admin::init()) {
function ($list, $id, $_) { Admin::process();
return in_array($list->getList(), [ }
'plugin-activate',
'theme-activate',
]) ? sprintf(
'<input type="submit" name="%s[%s]" value="Pack" />',
basename(__DIR__),
html::escapeHTML($id)
) : null;
}
);
dcCore::app()->addBehavior(
'adminModulesListDoActions',
function ($list, $modules, $type) {
# Pack action
if (empty($_POST[basename(__DIR__)])
|| !is_array($_POST[basename(__DIR__)])) {
return null;
}
# Repository directory
$dir = path::real(
dcCore::app()->blog->public_path . '/packages',
false
);
if (!is_dir($dir)) {
files::makeDir($dir, true);
}
if (!is_writable($dir)) {
throw new Exception(__('Destination directory is not writable.'));
}
# Module to pack
$modules = array_keys($_POST[basename(__DIR__)]);
$id = $modules[0];
if (!$list->modules->moduleExists($id)) {
throw new Exception(__('No such module.'));
}
$module = $list->modules->getModules($id);
# Excluded files and dirs
$exclude = [
'\.',
'\.\.',
'__MACOSX',
'\.svn',
'\.hg.*?',
'\.git.*?',
'CVS',
'\.directory',
'\.DS_Store',
'Thumbs\.db',
'_disabled',
];
# Packages names
$files = [
$type . '-' . $id . '.zip',
$type . '-' . $id . '-' . $module['version'] . '.zip',
];
# Create zip
foreach ($files as $f) {
@set_time_limit(300);
$fp = fopen($dir . '/' . $f, 'wb');
$zip = new fileZip($fp);
foreach ($exclude as $e) {
$zip->addExclusion(sprintf(
'#(^|/)(%s)(/|$)#',
$e
));
}
$zip->addDirectory($module['root'], $id, true);
$zip->write();
$zip->close();
unset($zip);
}
dcPage::addSuccessNotice(
__('Task successfully executed.')
);
http::redirect($list->getURL());
}
);