use settings container
parent
c21672138e
commit
9ff0b56fda
|
@ -54,41 +54,22 @@ class Config extends dcNsProcess
|
|||
return true;
|
||||
}
|
||||
|
||||
$s = new Settings();
|
||||
|
||||
# -- Set settings --
|
||||
try {
|
||||
$pack_nocomment = !empty($_POST['pack_nocomment']);
|
||||
$pack_fixnewline = !empty($_POST['pack_fixnewline']);
|
||||
$pack_overwrite = !empty($_POST['pack_overwrite']);
|
||||
$pack_filename = (string) $_POST['pack_filename'];
|
||||
$secondpack_filename = (string) $_POST['secondpack_filename'];
|
||||
$pack_repository = (string) $_POST['pack_repository'];
|
||||
$pack_excludefiles = (string) $_POST['pack_excludefiles'];
|
||||
|
||||
$check = Utils::is_configured(
|
||||
Utils::getRepositoryDir($pack_repository),
|
||||
$pack_filename,
|
||||
$secondpack_filename
|
||||
);
|
||||
|
||||
if ($check) {
|
||||
$s = dcCore::app()->blog->settings->get(My::id());
|
||||
$s->put('pack_nocomment', $pack_nocomment);
|
||||
$s->put('pack_fixnewline', $pack_fixnewline);
|
||||
$s->put('pack_overwrite', $pack_overwrite);
|
||||
$s->put('pack_filename', $pack_filename);
|
||||
$s->put('secondpack_filename', $secondpack_filename);
|
||||
$s->put('pack_repository', $pack_repository);
|
||||
$s->put('pack_excludefiles', $pack_excludefiles);
|
||||
|
||||
dcPage::addSuccessNotice(
|
||||
__('Configuration has been successfully updated.')
|
||||
);
|
||||
dcCore::app()->adminurl->redirect('admin.plugins', [
|
||||
'module' => My::id(),
|
||||
'conf' => '1',
|
||||
'redir' => dcCore::app()->admin->__get('list')->getRedir(),
|
||||
]);
|
||||
foreach ($s->listSettings() as $key) {
|
||||
$s->writeSetting($key, $_POST[$key] ?? '');
|
||||
}
|
||||
|
||||
dcPage::addSuccessNotice(
|
||||
__('Configuration has been successfully updated.')
|
||||
);
|
||||
dcCore::app()->adminurl->redirect('admin.plugins', [
|
||||
'module' => My::id(),
|
||||
'conf' => '1',
|
||||
'redir' => dcCore::app()->admin->__get('list')->getRedir(),
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
dcCore::app()->error->add($e->getMessage());
|
||||
}
|
||||
|
@ -103,7 +84,7 @@ class Config extends dcNsProcess
|
|||
}
|
||||
|
||||
# -- Get settings --
|
||||
$s = dcCore::app()->blog->settings->get(My::id());
|
||||
$s = new Settings();
|
||||
|
||||
# -- Display form --
|
||||
echo
|
||||
|
@ -112,7 +93,7 @@ class Config extends dcNsProcess
|
|||
// pack_repository
|
||||
(new Para())->items([
|
||||
(new Label(__('Path to repository:')))->for('pack_repository'),
|
||||
(new Input('pack_repository'))->class('maximal')->size(65)->maxlenght(255)->value((string) $s->get('pack_repository')),
|
||||
(new Input('pack_repository'))->class('maximal')->size(65)->maxlenght(255)->value($s->pack_repository),
|
||||
]),
|
||||
(new Note())->class('form-note')->text(
|
||||
sprintf(
|
||||
|
@ -126,18 +107,18 @@ class Config extends dcNsProcess
|
|||
// pack_filename
|
||||
(new Para())->items([
|
||||
(new Label(__('Name of exported package:')))->for('pack_filename'),
|
||||
(new Input('pack_filename'))->class('maximal')->size(65)->maxlenght(255)->value((string) $s->get('pack_filename')),
|
||||
(new Input('pack_filename'))->class('maximal')->size(65)->maxlenght(255)->value($s->pack_filename),
|
||||
]),
|
||||
(new Note())->text(sprintf(__('Preconization: %s'), '%type%-%id%'))->class('form-note'),
|
||||
// secondpack_filename
|
||||
(new Para())->items([
|
||||
(new Label(__('Name of second exported package:')))->for('secondpack_filename'),
|
||||
(new Input('secondpack_filename'))->class('maximal')->size(65)->maxlenght(255)->value((string) $s->get('secondpack_filename')),
|
||||
(new Input('secondpack_filename'))->class('maximal')->size(65)->maxlenght(255)->value($s->secondpack_filename),
|
||||
]),
|
||||
(new Note())->text(sprintf(__('Preconization: %s'), '%type%-%id%-%version%'))->class('form-note'),
|
||||
// pack_overwrite
|
||||
(new Para())->items([
|
||||
(new Checkbox('pack_overwrite', (bool) $s->get('pack_overwrite')))->value(1),
|
||||
(new Checkbox('pack_overwrite', $s->pack_overwrite))->value(1),
|
||||
(new Label(__('Overwrite existing package'), Label::OUTSIDE_LABEL_AFTER))->for('pack_overwrite')->class('classic'),
|
||||
]),
|
||||
]),
|
||||
|
@ -145,17 +126,17 @@ class Config extends dcNsProcess
|
|||
// pack_excludefiles
|
||||
(new Para())->items([
|
||||
(new Label(__('Extra files to exclude from package:')))->for('pack_excludefiles'),
|
||||
(new Input('pack_excludefiles'))->class('maximal')->size(65)->maxlenght(255)->value((string) $s->get('pack_excludefiles')),
|
||||
(new Input('pack_excludefiles'))->class('maximal')->size(65)->maxlenght(255)->value($s->pack_excludefiles),
|
||||
]),
|
||||
(new Note())->text(sprintf(__('Preconization: %s'), '*.zip,*.tar,*.tar.gz'))->class('form-note'),
|
||||
// pack_nocomment
|
||||
(new Para())->items([
|
||||
(new Checkbox('pack_nocomment', (bool) $s->get('pack_nocomment')))->value(1),
|
||||
(new Checkbox('pack_nocomment', $s->pack_nocomment))->value(1),
|
||||
(new Label(__('Remove comments from files'), Label::OUTSIDE_LABEL_AFTER))->for('pack_nocomment')->class('classic'),
|
||||
]),
|
||||
// pack_fixnewline
|
||||
(new Para())->items([
|
||||
(new Checkbox('pack_fixnewline', (bool) $s->get('pack_fixnewline')))->value(1),
|
||||
(new Checkbox('pack_fixnewline', $s->pack_fixnewline))->value(1),
|
||||
(new Label(__('Fix newline style from files content'), Label::OUTSIDE_LABEL_AFTER))->for('pack_fixnewline')->class('classic'),
|
||||
]),
|
||||
|
||||
|
|
|
@ -21,55 +21,12 @@ use Exception;
|
|||
|
||||
class Install extends dcNsProcess
|
||||
{
|
||||
// Module specs
|
||||
private static $mod_conf = [
|
||||
[
|
||||
'menu_plugins',
|
||||
'Add link to pacKman in plugins page',
|
||||
false,
|
||||
'boolean',
|
||||
],
|
||||
[
|
||||
'pack_nocomment',
|
||||
'Remove comments from files',
|
||||
false,
|
||||
'boolean',
|
||||
],
|
||||
[
|
||||
'pack_overwrite',
|
||||
'Overwrite existing package',
|
||||
false,
|
||||
'boolean',
|
||||
],
|
||||
[
|
||||
'pack_filename',
|
||||
'Name of package',
|
||||
'%type%-%id%',
|
||||
'string',
|
||||
],
|
||||
[
|
||||
'secondpack_filename',
|
||||
'Name of second package',
|
||||
'%type%-%id%-%version%',
|
||||
'string',
|
||||
],
|
||||
[
|
||||
'pack_repository',
|
||||
'Path to package repository',
|
||||
'',
|
||||
'string',
|
||||
],
|
||||
[
|
||||
'pack_excludefiles',
|
||||
'Extra files to exclude from package',
|
||||
'*.zip,*.tar,*.tar.gz,.directory,.hg',
|
||||
'string',
|
||||
],
|
||||
];
|
||||
|
||||
public static function init(): bool
|
||||
{
|
||||
self::$init = defined('DC_CONTEXT_ADMIN') && dcCore::app()->newVersion(My::id(), dcCore::app()->plugins->moduleInfo(My::id(), 'version'));
|
||||
if (defined('DC_CONTEXT_ADMIN')) {
|
||||
self::$init = version_compare(phpversion(), My::PHP_MIN, '>=')
|
||||
&& dcCore::app()->newVersion(My::id(), dcCore::app()->plugins->moduleInfo(My::id(), 'version'));
|
||||
}
|
||||
|
||||
return self::$init;
|
||||
}
|
||||
|
@ -84,18 +41,6 @@ class Install extends dcNsProcess
|
|||
// Upgrade
|
||||
self::growUp();
|
||||
|
||||
// Set module settings
|
||||
foreach (self::$mod_conf as $v) {
|
||||
dcCore::app()->blog->settings->get(My::id())->put(
|
||||
$v[0],
|
||||
$v[2],
|
||||
$v[3],
|
||||
$v[1],
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
dcCore::app()->error->add($e->getMessage());
|
||||
|
|
|
@ -23,26 +23,16 @@ use dcNsProcess;
|
|||
/* clearbricks ns */
|
||||
use files;
|
||||
use http;
|
||||
use path;
|
||||
|
||||
/* php ns */
|
||||
use Exception;
|
||||
|
||||
class Manage extends dcNsProcess
|
||||
{
|
||||
private static $plugins_path = '';
|
||||
private static $themes_path = '';
|
||||
|
||||
public static function init(): bool
|
||||
{
|
||||
if (defined('DC_CONTEXT_ADMIN')) {
|
||||
dcPage::checkSuper();
|
||||
|
||||
# Paths
|
||||
$e = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT);
|
||||
$p = array_pop($e);
|
||||
self::$plugins_path = (string) path::real($p);
|
||||
self::$themes_path = dcCore::app()->blog->themes_path;
|
||||
self::$init = dcCore::app()->auth->isSuperAdmin() && version_compare(phpversion(), My::PHP_MIN, '>=');
|
||||
}
|
||||
|
||||
return self::$init;
|
||||
|
@ -59,8 +49,8 @@ class Manage extends dcNsProcess
|
|||
$type = isset($_POST['type']) && in_array($_POST['type'], ['plugins', 'themes', 'repository']) ? $_POST['type'] : '';
|
||||
|
||||
# Settings
|
||||
$s = dcCore::app()->blog->settings->get(My::id());
|
||||
$dir = Utils::getRepositoryDir($s->get('pack_repository'));
|
||||
$s = new Settings();
|
||||
$dir = Utils::getRepositoryDir($s->pack_repository);
|
||||
|
||||
# Modules
|
||||
if (!(dcCore::app()->themes instanceof dcThemes)) {
|
||||
|
@ -73,7 +63,7 @@ class Manage extends dcNsProcess
|
|||
# Rights
|
||||
$is_writable = Utils::is_writable(
|
||||
$dir,
|
||||
$s->get('pack_filename')
|
||||
$s->pack_filename
|
||||
);
|
||||
$is_editable = !empty($type)
|
||||
&& !empty($_POST['modules'])
|
||||
|
@ -85,13 +75,13 @@ class Manage extends dcNsProcess
|
|||
if (isset($_REQUEST['package']) && empty($type)) {
|
||||
$modules = [];
|
||||
if ($type == 'plugins') {
|
||||
$modules = Core::getPackages(self::$plugins_path);
|
||||
$modules = Core::getPackages(Utils::getPluginsPath());
|
||||
} elseif ($type == 'themes') {
|
||||
$modules = Core::getPackages(self::$themes_path);
|
||||
$modules = Core::getPackages(Utils::getThemesPath());
|
||||
} else {
|
||||
$modules = array_merge(
|
||||
Core::getPackages(dirname($dir . '/' . $s->get('pack_filename'))),
|
||||
Core::getPackages(dirname($dir . '/' . $s->get('secondpack_filename')))
|
||||
Core::getPackages(dirname($dir . '/' . $s->pack_filename)),
|
||||
Core::getPackages(dirname($dir . '/' . $s->secondpack_filename))
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -140,19 +130,18 @@ class Manage extends dcNsProcess
|
|||
$module['id'] = $id;
|
||||
$module['type'] = $type == 'themes' ? 'theme' : 'plugin';
|
||||
|
||||
$files = [
|
||||
(string) $s->get('pack_filename'),
|
||||
(string) $s->get('secondpack_filename'),
|
||||
];
|
||||
$nocomment = (bool) $s->get('pack_nocomment');
|
||||
$fixnewline = (bool) $s->get('pack_fixnewline');
|
||||
$overwrite = (bool) $s->get('pack_overwrite');
|
||||
$exclude = explode(',', (string) $s->get('pack_excludefiles'));
|
||||
|
||||
# --BEHAVIOR-- packmanBeforeCreatePackage
|
||||
dcCore::app()->callBehavior('packmanBeforeCreatePackage', $module);
|
||||
|
||||
Core::pack($module, $dir, $files, $overwrite, $exclude, $nocomment, $fixnewline);
|
||||
Core::pack(
|
||||
$module,
|
||||
$dir,
|
||||
[$s->pack_filename, $s->secondpack_filename],
|
||||
$s->pack_overwrite,
|
||||
explode(',', $s->pack_excludefiles),
|
||||
$s->pack_nocomment,
|
||||
$s->pack_fixnewline
|
||||
);
|
||||
|
||||
# --BEHAVIOR-- packmanAfterCreatePackage
|
||||
dcCore::app()->callBehavior('packmanAfterCreatePackage', $module);
|
||||
|
@ -224,9 +213,9 @@ class Manage extends dcNsProcess
|
|||
} elseif (strpos($action, 'copy_to_') !== false) {
|
||||
$dest = (string) $dir;
|
||||
if ($action == 'copy_to_plugins') {
|
||||
$dest = self::$plugins_path;
|
||||
$dest = Utils::getPluginsPath();
|
||||
} elseif ($action == 'copy_to_themes') {
|
||||
$dest = self::$themes_path;
|
||||
$dest = Utils::getThemesPath();
|
||||
}
|
||||
|
||||
foreach ($_POST['modules'] as $root => $id) {
|
||||
|
@ -250,9 +239,9 @@ class Manage extends dcNsProcess
|
|||
} elseif (strpos($action, 'move_to_') !== false) {
|
||||
$dest = (string) $dir;
|
||||
if ($action == 'move_to_plugins') {
|
||||
$dest = self::$plugins_path;
|
||||
$dest = Utils::getPluginsPath();
|
||||
} elseif ($action == 'move_to_themes') {
|
||||
$dest = self::$themes_path;
|
||||
$dest = Utils::getThemesPath();
|
||||
}
|
||||
|
||||
foreach ($_POST['modules'] as $root => $id) {
|
||||
|
@ -287,13 +276,13 @@ class Manage extends dcNsProcess
|
|||
}
|
||||
|
||||
# Settings
|
||||
$s = dcCore::app()->blog->settings->get(My::id());
|
||||
$dir = Utils::getRepositoryDir($s->get('pack_repository'));
|
||||
$s = new Settings();
|
||||
$dir = Utils::getRepositoryDir($s->pack_repository);
|
||||
|
||||
$is_configured = Utils::is_configured(
|
||||
$dir,
|
||||
$s->get('pack_filename'),
|
||||
$s->get('secondpack_filename')
|
||||
$s->pack_filename,
|
||||
$s->secondpack_filename
|
||||
);
|
||||
|
||||
# Display
|
||||
|
@ -319,13 +308,6 @@ class Manage extends dcNsProcess
|
|||
'<a href="' . dcCore::app()->adminurl->get('admin.plugins', ['module' => My::id(), 'conf' => '1', 'redir' => dcCore::app()->adminurl->get('admin.plugin.' . My::id())]) . '">' . __('Configuration') . '</a>' .
|
||||
'</div>';
|
||||
} else {
|
||||
$repo_path_modules = array_merge(
|
||||
Core::getPackages(dirname($dir . '/' . $s->get('pack_filename'))),
|
||||
Core::getPackages(dirname($dir . '/' . $s->get('secondpack_filename')))
|
||||
);
|
||||
$plugins_path_modules = Core::getPackages(self::$plugins_path);
|
||||
$themes_path_modules = Core::getPackages(self::$themes_path);
|
||||
|
||||
Utils::modules(
|
||||
Utils::getModules('plugins'),
|
||||
'plugins',
|
||||
|
@ -339,19 +321,22 @@ class Manage extends dcNsProcess
|
|||
);
|
||||
|
||||
Utils::repository(
|
||||
$plugins_path_modules,
|
||||
Core::getPackages(Utils::getPluginsPath()),
|
||||
'plugins',
|
||||
__('Plugins root')
|
||||
);
|
||||
|
||||
Utils::repository(
|
||||
$themes_path_modules,
|
||||
Core::getPackages(Utils::getThemesPath()),
|
||||
'themes',
|
||||
__('Themes root')
|
||||
);
|
||||
|
||||
Utils::repository(
|
||||
$repo_path_modules,
|
||||
array_merge(
|
||||
Core::getPackages(dirname($dir . '/' . $s->pack_filename)),
|
||||
Core::getPackages(dirname($dir . '/' . $s->secondpack_filename))
|
||||
),
|
||||
'repository',
|
||||
__('Packages repository')
|
||||
);
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
<?php
|
||||
/**
|
||||
* @brief pacKman, a plugin for Dotclear 2
|
||||
*
|
||||
* @package Dotclear
|
||||
* @subpackage Plugin
|
||||
*
|
||||
* @author Jean-Christian Denis
|
||||
*
|
||||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Dotclear\Plugin\pacKman;
|
||||
|
||||
use dcCore;
|
||||
|
||||
class Settings
|
||||
{
|
||||
// Remove comments from files
|
||||
public readonly bool $pack_nocomment;
|
||||
|
||||
// Remove comments from files
|
||||
public readonly bool $pack_fixnewline;
|
||||
|
||||
// Overwrite existing package
|
||||
public readonly bool $pack_overwrite;
|
||||
|
||||
// Name of package
|
||||
public readonly string $pack_filename;
|
||||
|
||||
// Name of second package
|
||||
public readonly string $secondpack_filename;
|
||||
|
||||
// Path to package repository
|
||||
public readonly string $pack_repository;
|
||||
|
||||
// Extra files to exclude from package
|
||||
public readonly string $pack_excludefiles;
|
||||
|
||||
/**
|
||||
* Constructor set up plugin settings
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$s = dcCore::app()->blog->settings->get(My::id());
|
||||
|
||||
$this->pack_nocomment = (bool) ($s->get('pack_nocomment') ?? false);
|
||||
$this->pack_fixnewline = (bool) ($s->get('pack_fixnewline') ?? false);
|
||||
$this->pack_overwrite = (bool) ($s->get('pack_overwrite') ?? false);
|
||||
$this->pack_filename = (string) ($s->get('pack_filename') ?? '%type%-%id%');
|
||||
$this->secondpack_filename = (string) ($s->get('secondpack_filename') ?? '%type%-%id%-%version%');
|
||||
$this->pack_repository = (string) ($s->get('pack_repository') ?? '');
|
||||
$this->pack_excludefiles = (string) ($s->get('pack_excludefiles') ?? '*.zip,*.tar,*.tar.gz,.directory,.hg');
|
||||
}
|
||||
|
||||
public function getSetting(string $key): mixed
|
||||
{
|
||||
return $this->{$key} ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrite a plugin settings (in db)
|
||||
*
|
||||
* @param string $key The setting ID
|
||||
* @param mixed $value The setting value
|
||||
*
|
||||
* @return bool True on success
|
||||
*/
|
||||
public function writeSetting(string $key, mixed $value): bool
|
||||
{
|
||||
if (property_exists($this, $key) && settype($value, gettype($this->{$key})) === true) {
|
||||
dcCore::app()->blog->settings->get(My::id())->drop($key);
|
||||
dcCore::app()->blog->settings->get(My::id())->put($key, $value, gettype($this->{$key}), '', true, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* List defined settings keys
|
||||
*
|
||||
* @return array The settings keys
|
||||
*/
|
||||
public function listSettings(): array
|
||||
{
|
||||
return array_keys(get_class_vars(Settings::class));
|
||||
}
|
||||
}
|
|
@ -29,6 +29,19 @@ use Exception;
|
|||
|
||||
class Utils
|
||||
{
|
||||
public static function getPluginsPath(): string
|
||||
{
|
||||
$e = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT);
|
||||
$p = array_pop($e);
|
||||
|
||||
return (string) path::real($p);
|
||||
}
|
||||
|
||||
public static function getThemesPath(): string
|
||||
{
|
||||
return dcCore::app()->blog->themes_path;
|
||||
}
|
||||
|
||||
public static function is_configured(string $repo, string $file_a, string $file_b): bool
|
||||
{
|
||||
if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) {
|
||||
|
|
Loading…
Reference in New Issue