first attempt at namespace
parent
c529e76c52
commit
81d49adf53
26
_admin.php
26
_admin.php
|
@ -10,16 +10,33 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugins\pacKman;
|
||||
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
/* dotclear ns */
|
||||
use dcAdmin;
|
||||
use dcCore;
|
||||
use dcFavorites;
|
||||
use dcPage;
|
||||
|
||||
class admin
|
||||
{
|
||||
public static function init()
|
||||
{
|
||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
}
|
||||
|
||||
public static function process()
|
||||
{
|
||||
dcCore::app()->addBehavior('adminDashboardFavoritesV2', function (dcFavorites $favs): void {
|
||||
$favs->register(basename(__DIR__), [
|
||||
'title' => __('Packages repository'),
|
||||
'url' => dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__)) . '#packman-repository-repository',
|
||||
'url' => dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__), [], '#packman-repository-repository'),
|
||||
'small-icon' => [dcPage::getPF(basename(__DIR__) . '/icon.svg'), dcPage::getPF(basename(__DIR__) . '/icon-dark.svg')],
|
||||
'large-icon' => [dcPage::getPF(basename(__DIR__) . '/icon.svg'), dcPage::getPF(basename(__DIR__) . '/icon-dark.svg')],
|
||||
//'permissions' => dcCore::app()->auth->isSuperAdmin(),
|
||||
|
@ -33,3 +50,8 @@ dcCore::app()->menu[dcAdmin::MENU_PLUGINS]->addItem(
|
|||
preg_match('/' . preg_quote(dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__))) . '(&.*)?$/', $_SERVER['REQUEST_URI']),
|
||||
dcCore::app()->auth->isSuperAdmin()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
admin::init();
|
||||
admin::process();
|
||||
|
|
59
_config.php
59
_config.php
|
@ -10,27 +10,40 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugins\pacKman;
|
||||
|
||||
if (!defined('DC_CONTEXT_MODULE')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$redir = empty($_REQUEST['redir']) ?
|
||||
dcCore::app()->admin->__get('list')->getURL() . '#plugins' : $_REQUEST['redir'];
|
||||
/* dotclear ns */
|
||||
use dcCore;
|
||||
use dcPage;
|
||||
|
||||
# -- Get settings --
|
||||
/* clearbricks ns */
|
||||
use form;
|
||||
use http;
|
||||
use path;
|
||||
|
||||
/* php ns */
|
||||
use Exception;
|
||||
|
||||
class config
|
||||
{
|
||||
public static function init(): void
|
||||
{
|
||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
$s = dcCore::app()->blog->settings->__get(basename(__DIR__));
|
||||
}
|
||||
|
||||
$packman_pack_nocomment = $s->packman_pack_nocomment;
|
||||
$packman_pack_fixnewline = $s->packman_pack_fixnewline;
|
||||
$packman_pack_overwrite = $s->packman_pack_overwrite;
|
||||
$packman_pack_filename = $s->packman_pack_filename;
|
||||
$packman_secondpack_filename = $s->packman_secondpack_filename;
|
||||
$packman_pack_repository = $s->packman_pack_repository;
|
||||
$packman_pack_excludefiles = $s->packman_pack_excludefiles;
|
||||
public static function process(): void
|
||||
{
|
||||
if (empty($_POST['save'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
# -- Set settings --
|
||||
if (!empty($_POST['save'])) {
|
||||
try {
|
||||
$packman_pack_nocomment = !empty($_POST['packman_pack_nocomment']);
|
||||
$packman_pack_fixnewline = !empty($_POST['packman_pack_fixnewline']);
|
||||
|
@ -40,13 +53,14 @@ if (!empty($_POST['save'])) {
|
|||
$packman_pack_repository = (string) path::real($_POST['packman_pack_repository'], false);
|
||||
$packman_pack_excludefiles = (string) $_POST['packman_pack_excludefiles'];
|
||||
|
||||
$check = libPackman::is_configured(
|
||||
$check = Utils::is_configured(
|
||||
$packman_pack_repository,
|
||||
$packman_pack_filename,
|
||||
$packman_secondpack_filename
|
||||
);
|
||||
|
||||
if ($check) {
|
||||
$s = dcCore::app()->blog->settings->__get(basename(__DIR__));
|
||||
$s->put('packman_pack_nocomment', $packman_pack_nocomment);
|
||||
$s->put('packman_pack_fixnewline', $packman_pack_fixnewline);
|
||||
$s->put('packman_pack_overwrite', $packman_pack_overwrite);
|
||||
|
@ -68,6 +82,19 @@ if (!empty($_POST['save'])) {
|
|||
}
|
||||
}
|
||||
|
||||
public static function render(): void
|
||||
{
|
||||
# -- Get settings --
|
||||
$s = dcCore::app()->blog->settings->__get(basename(__DIR__));
|
||||
|
||||
$packman_pack_nocomment = $s->packman_pack_nocomment;
|
||||
$packman_pack_fixnewline = $s->packman_pack_fixnewline;
|
||||
$packman_pack_overwrite = $s->packman_pack_overwrite;
|
||||
$packman_pack_filename = $s->packman_pack_filename;
|
||||
$packman_secondpack_filename = $s->packman_secondpack_filename;
|
||||
$packman_pack_repository = $s->packman_pack_repository;
|
||||
$packman_pack_excludefiles = $s->packman_pack_excludefiles;
|
||||
|
||||
# -- Display form --
|
||||
echo '
|
||||
<div class="fieldset">
|
||||
|
@ -119,3 +146,9 @@ form::checkbox('packman_pack_fixnewline', 1, $packman_pack_fixnewline) . ' ' .
|
|||
__('Fix newline style from files content') . '</label></p>
|
||||
|
||||
</div>';
|
||||
}
|
||||
}
|
||||
|
||||
config::init();
|
||||
config::process();
|
||||
config::render();
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
// can not use namespace as it is included inside a class method,
|
||||
// and also can be included in third party plugins class methods.
|
||||
|
||||
if (!defined('DC_RC_PATH')) {
|
||||
return null;
|
||||
}
|
||||
|
|
24
_install.php
24
_install.php
|
@ -10,13 +10,24 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugins\pacKman;
|
||||
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
# -- Module specs --
|
||||
/* dotclear ns */
|
||||
use dcCore;
|
||||
|
||||
$mod_conf = [
|
||||
/* php ns */
|
||||
use Exception;
|
||||
|
||||
class install
|
||||
{
|
||||
# -- Module specs --
|
||||
private static $mod_conf = [
|
||||
[
|
||||
'packman_menu_plugins',
|
||||
'Add link to pacKman in plugins page',
|
||||
|
@ -62,7 +73,8 @@ $mod_conf = [
|
|||
];
|
||||
|
||||
# -- Nothing to change below --
|
||||
|
||||
public static function process()
|
||||
{
|
||||
try {
|
||||
# Check module version
|
||||
if (!dcCore::app()->newVersion(
|
||||
|
@ -74,7 +86,7 @@ try {
|
|||
|
||||
# Set module settings
|
||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
foreach ($mod_conf as $v) {
|
||||
foreach (self::$mod_conf as $v) {
|
||||
dcCore::app()->blog->settings->__get(basename(__DIR__))->put(
|
||||
$v[0],
|
||||
$v[2],
|
||||
|
@ -91,3 +103,7 @@ try {
|
|||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return install::process();
|
||||
|
|
21
_prepend.php
21
_prepend.php
|
@ -10,12 +10,27 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugins\pacKman;
|
||||
|
||||
if (!defined('DC_RC_PATH')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* clearbricks ns */
|
||||
use Clearbricks;
|
||||
|
||||
class Prepend
|
||||
{
|
||||
public static function init()
|
||||
{
|
||||
Clearbricks::lib()->autoload([
|
||||
'dcPackman' => __DIR__ . '/inc/class.dc.packman.php',
|
||||
'libPackman' => __DIR__ . '/inc/lib.packman.php',
|
||||
'packmanFileZip' => __DIR__ . '/inc/lib.packman.filezip.php',
|
||||
'plugins\\pacKman\\Core' => __DIR__ . '/inc/class.core.php',
|
||||
'plugins\\pacKman\\Utils' => __DIR__ . '/inc/class.utils.php',
|
||||
'plugins\\pacKman\\FileZip' => __DIR__ . '/inc/class.filezip.php',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Prepend::init();
|
||||
|
|
|
@ -10,11 +10,29 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugins\pacKman;
|
||||
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
class dcPackman
|
||||
/* dotclear ns */
|
||||
use dcModules;
|
||||
use dcThemes;
|
||||
|
||||
/* clearbricks ns */
|
||||
use files;
|
||||
use fileUnzip;
|
||||
use path;
|
||||
|
||||
/* packman ns */
|
||||
|
||||
/* php ns */
|
||||
use Exception;
|
||||
|
||||
class Core
|
||||
{
|
||||
/** @var array Excluded files */
|
||||
public static $exclude = [
|
||||
|
@ -129,12 +147,12 @@ class dcPackman
|
|||
$fp = fopen($dest, 'wb');
|
||||
|
||||
if ($nocomment) {
|
||||
packmanFileZip::$remove_comment = true;
|
||||
FileZip::$remove_comment = true;
|
||||
}
|
||||
if ($fixnewline) {
|
||||
packmanFileZip::$fix_newline = true;
|
||||
FileZip::$fix_newline = true;
|
||||
}
|
||||
$zip = new packmanFileZip($fp);
|
||||
$zip = new FileZip($fp);
|
||||
|
||||
foreach ($exclude as $e) {
|
||||
$zip->addExclusion($e);
|
||||
|
|
|
@ -10,7 +10,18 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
class packmanFileZip extends fileZip
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugins\pacKman;
|
||||
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/* clearbricks ns */
|
||||
use fileZip;
|
||||
|
||||
class FileZip extends fileZip
|
||||
{
|
||||
/** @var boolean Remove comments from files content */
|
||||
public static $remove_comment = false;
|
||||
|
|
|
@ -10,11 +10,23 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugins\pacKman;
|
||||
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
class libPackman
|
||||
/* dotclear ns */
|
||||
use dcCore;
|
||||
|
||||
/* clearbricks ns */
|
||||
use form;
|
||||
use html;
|
||||
use path;
|
||||
|
||||
class Utils
|
||||
{
|
||||
public static function is_configured(string $repo, string $file_a, string $file_b): bool
|
||||
{
|
||||
|
|
132
index.php
132
index.php
|
@ -10,18 +10,51 @@
|
|||
* @copyright Jean-Christian Denis
|
||||
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace plugins\pacKman;
|
||||
|
||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
dcPage::checkSuper();
|
||||
/* dotclear ns */
|
||||
use dcCore;
|
||||
use dcPage;
|
||||
use dcThemes;
|
||||
|
||||
/* clearbricks ns */
|
||||
use files;
|
||||
use http;
|
||||
use path;
|
||||
|
||||
/* php ns */
|
||||
use Exception;
|
||||
|
||||
class index
|
||||
{
|
||||
private static $plugins_path = '';
|
||||
private static $themes_path = '';
|
||||
|
||||
public static function init()
|
||||
{
|
||||
dcPage::checkSuper();
|
||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
|
||||
# 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;
|
||||
}
|
||||
|
||||
public static function process()
|
||||
{
|
||||
# Queries
|
||||
$action = $_POST['action'] ?? '';
|
||||
$type = isset($_POST['type']) && in_array($_POST['type'], ['plugins', 'themes', 'repository']) ? $_POST['type'] : '';
|
||||
|
||||
# Settings
|
||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||
$s = dcCore::app()->blog->settings->__get(basename(__DIR__));
|
||||
|
||||
# Modules
|
||||
|
@ -32,15 +65,8 @@ if (!(dcCore::app()->themes instanceof dcThemes)) {
|
|||
$themes = dcCore::app()->themes;
|
||||
$plugins = dcCore::app()->plugins;
|
||||
|
||||
# Paths
|
||||
$ppexp = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT);
|
||||
$pppop = array_pop($ppexp);
|
||||
$plugins_path = (string) path::real($pppop);
|
||||
$themes_path = dcCore::app()->blog->themes_path;
|
||||
$repo_path = $s->packman_pack_repository;
|
||||
|
||||
# Rights
|
||||
$is_writable = libPackman::is_writable(
|
||||
$is_writable = Utils::is_writable(
|
||||
$s->packman_pack_repository,
|
||||
$s->packman_pack_filename
|
||||
);
|
||||
|
@ -48,25 +74,19 @@ $is_editable = !empty($type)
|
|||
&& !empty($_POST['modules'])
|
||||
&& is_array($_POST['modules']);
|
||||
|
||||
$is_configured = libPackman::is_configured(
|
||||
$s->packman_pack_repository,
|
||||
$s->packman_pack_filename,
|
||||
$s->packman_secondpack_filename
|
||||
);
|
||||
|
||||
# Actions
|
||||
try {
|
||||
# Download
|
||||
if (isset($_REQUEST['package']) && empty($type)) {
|
||||
$modules = [];
|
||||
if ($type == 'plugins') {
|
||||
$modules = dcPackman::getPackages($plugins_path);
|
||||
$modules = Core::getPackages(self::$plugins_path);
|
||||
} elseif ($type == 'themes') {
|
||||
$modules = dcPackman::getPackages($themes_path);
|
||||
$modules = Core::getPackages(self::$themes_path);
|
||||
} else {
|
||||
$modules = array_merge(
|
||||
dcPackman::getPackages(dirname($repo_path . '/' . $s->packman_pack_filename)),
|
||||
dcPackman::getPackages(dirname($repo_path . '/' . $s->packman_secondpack_filename))
|
||||
Core::getPackages(dirname($s->packman_pack_repository . '/' . $s->packman_pack_filename)),
|
||||
Core::getPackages(dirname($s->packman_pack_repository . '/' . $s->packman_secondpack_filename))
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -99,28 +119,28 @@ try {
|
|||
# Pack
|
||||
} elseif ($action == 'packup') {
|
||||
foreach ($_POST['modules'] as $root => $id) {
|
||||
if (!libPackman::moduleExists($type, $id)) {
|
||||
if (!Utils::moduleExists($type, $id)) {
|
||||
throw new Exception('No such module');
|
||||
}
|
||||
|
||||
$module = libPackman::getModules($type, $id);
|
||||
$module = Utils::getModules($type, $id);
|
||||
$module['id'] = $id;
|
||||
$module['type'] = $type == 'themes' ? 'theme' : 'plugin';
|
||||
|
||||
$root = $s->packman_pack_repository;
|
||||
$root = (string) $s->packman_pack_repository;
|
||||
$files = [
|
||||
$s->packman_pack_filename,
|
||||
$s->packman_secondpack_filename,
|
||||
(string) $s->packman_pack_filename,
|
||||
(string) $s->packman_secondpack_filename,
|
||||
];
|
||||
$nocomment = $s->packman_pack_nocomment;
|
||||
$fixnewline = $s->packman_pack_fixnewline;
|
||||
$overwrite = $s->packman_pack_overwrite;
|
||||
$exclude = explode(',', $s->packman_pack_excludefiles);
|
||||
$nocomment = (bool) $s->packman_pack_nocomment;
|
||||
$fixnewline = (bool) $s->packman_pack_fixnewline;
|
||||
$overwrite = (bool) $s->packman_pack_overwrite;
|
||||
$exclude = explode(',', (string) $s->packman_pack_excludefiles);
|
||||
|
||||
# --BEHAVIOR-- packmanBeforeCreatePackage
|
||||
dcCore::app()->callBehavior('packmanBeforeCreatePackage', $module);
|
||||
|
||||
dcPackman::pack($module, $root, $files, $overwrite, $exclude, $nocomment, $fixnewline);
|
||||
Core::pack($module, $root, $files, $overwrite, $exclude, $nocomment, $fixnewline);
|
||||
|
||||
# --BEHAVIOR-- packmanAfterCreatePackage
|
||||
dcCore::app()->callBehavior('packmanAfterCreatePackage', $module);
|
||||
|
@ -185,11 +205,11 @@ try {
|
|||
|
||||
# Copy
|
||||
} elseif (strpos($action, 'copy_to_') !== false) {
|
||||
$dest = $repo_path;
|
||||
$dest = $s->packman_pack_repository;
|
||||
if ($action == 'copy_to_plugins') {
|
||||
$dest = $plugins_path;
|
||||
$dest = self::$plugins_path;
|
||||
} elseif ($action == 'copy_to_themes') {
|
||||
$dest = $themes_path;
|
||||
$dest = self::$themes_path;
|
||||
}
|
||||
|
||||
foreach ($_POST['modules'] as $root => $id) {
|
||||
|
@ -211,11 +231,11 @@ try {
|
|||
|
||||
# Move
|
||||
} elseif (strpos($action, 'move_to_') !== false) {
|
||||
$dest = $repo_path;
|
||||
$dest = $s->packman_pack_repository;
|
||||
if ($action == 'move_to_plugins') {
|
||||
$dest = $plugins_path;
|
||||
$dest = self::$plugins_path;
|
||||
} elseif ($action == 'move_to_themes') {
|
||||
$dest = $themes_path;
|
||||
$dest = self::$themes_path;
|
||||
}
|
||||
|
||||
foreach ($_POST['modules'] as $root => $id) {
|
||||
|
@ -239,6 +259,18 @@ try {
|
|||
} catch (Exception $e) {
|
||||
dcCore::app()->error->add($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static function render()
|
||||
{
|
||||
# Settings
|
||||
$s = dcCore::app()->blog->settings->__get(basename(__DIR__));
|
||||
|
||||
$is_configured = Utils::is_configured(
|
||||
$s->packman_pack_repository,
|
||||
$s->packman_pack_filename,
|
||||
$s->packman_secondpack_filename
|
||||
);
|
||||
|
||||
# Display
|
||||
echo
|
||||
|
@ -265,37 +297,37 @@ if (dcCore::app()->error->flag() || !$is_configured) {
|
|||
'</div>';
|
||||
} else {
|
||||
$repo_path_modules = array_merge(
|
||||
dcPackman::getPackages(dirname($repo_path . '/' . $s->packman_pack_filename)),
|
||||
dcPackman::getPackages(dirname($repo_path . '/' . $s->packman_secondpack_filename))
|
||||
Core::getPackages(dirname($s->packman_pack_repository . '/' . $s->packman_pack_filename)),
|
||||
Core::getPackages(dirname($s->packman_pack_repository . '/' . $s->packman_secondpack_filename))
|
||||
);
|
||||
$plugins_path_modules = dcPackman::getPackages($plugins_path);
|
||||
$themes_path_modules = dcPackman::getPackages($themes_path);
|
||||
$plugins_path_modules = Core::getPackages(self::$plugins_path);
|
||||
$themes_path_modules = Core::getPackages(self::$themes_path);
|
||||
|
||||
libPackman::modules(
|
||||
libPackman::getModules('plugins'),
|
||||
Utils::modules(
|
||||
Utils::getModules('plugins'),
|
||||
'plugins',
|
||||
__('Installed plugins')
|
||||
);
|
||||
|
||||
libPackman::modules(
|
||||
libPackman::getModules('themes'),
|
||||
Utils::modules(
|
||||
Utils::getModules('themes'),
|
||||
'themes',
|
||||
__('Installed themes')
|
||||
);
|
||||
|
||||
libPackman::repository(
|
||||
Utils::repository(
|
||||
$plugins_path_modules,
|
||||
'plugins',
|
||||
__('Plugins root')
|
||||
);
|
||||
|
||||
libPackman::repository(
|
||||
Utils::repository(
|
||||
$themes_path_modules,
|
||||
'themes',
|
||||
__('Themes root')
|
||||
);
|
||||
|
||||
libPackman::repository(
|
||||
Utils::repository(
|
||||
$repo_path_modules,
|
||||
'repository',
|
||||
__('Packages repository')
|
||||
|
@ -309,3 +341,9 @@ dcPage::helpBlock('pacKman');
|
|||
|
||||
echo
|
||||
'</body></html>';
|
||||
}
|
||||
}
|
||||
|
||||
index::init();
|
||||
index::process();
|
||||
index::render();
|
||||
|
|
Loading…
Reference in New Issue