first attempt at namespace
This commit is contained in:
parent
c529e76c52
commit
81d49adf53
56
_admin.php
56
_admin.php
@ -10,26 +10,48 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace plugins\pacKman;
|
||||||
|
|
||||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
/* dotclear ns */
|
||||||
|
use dcAdmin;
|
||||||
|
use dcCore;
|
||||||
|
use dcFavorites;
|
||||||
|
use dcPage;
|
||||||
|
|
||||||
dcCore::app()->addBehavior('adminDashboardFavoritesV2', function (dcFavorites $favs): void {
|
class admin
|
||||||
$favs->register(basename(__DIR__), [
|
{
|
||||||
'title' => __('Packages repository'),
|
public static function init()
|
||||||
'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')],
|
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||||
'large-icon' => [dcPage::getPF(basename(__DIR__) . '/icon.svg'), dcPage::getPF(basename(__DIR__) . '/icon-dark.svg')],
|
}
|
||||||
//'permissions' => dcCore::app()->auth->isSuperAdmin(),
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
dcCore::app()->menu[dcAdmin::MENU_PLUGINS]->addItem(
|
public static function process()
|
||||||
__('Packages repository'),
|
{
|
||||||
dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__)) . '#packman-repository-repository',
|
dcCore::app()->addBehavior('adminDashboardFavoritesV2', function (dcFavorites $favs): void {
|
||||||
[dcPage::getPF(basename(__DIR__) . '/icon.svg'), dcPage::getPF(basename(__DIR__) . '/icon-dark.svg')],
|
$favs->register(basename(__DIR__), [
|
||||||
preg_match('/' . preg_quote(dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__))) . '(&.*)?$/', $_SERVER['REQUEST_URI']),
|
'title' => __('Packages repository'),
|
||||||
dcCore::app()->auth->isSuperAdmin()
|
'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(),
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
dcCore::app()->menu[dcAdmin::MENU_PLUGINS]->addItem(
|
||||||
|
__('Packages repository'),
|
||||||
|
dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__)) . '#packman-repository-repository',
|
||||||
|
[dcPage::getPF(basename(__DIR__) . '/icon.svg'), dcPage::getPF(basename(__DIR__) . '/icon-dark.svg')],
|
||||||
|
preg_match('/' . preg_quote(dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__))) . '(&.*)?$/', $_SERVER['REQUEST_URI']),
|
||||||
|
dcCore::app()->auth->isSuperAdmin()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
admin::init();
|
||||||
|
admin::process();
|
||||||
|
227
_config.php
227
_config.php
@ -10,112 +10,145 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace plugins\pacKman;
|
||||||
|
|
||||||
if (!defined('DC_CONTEXT_MODULE')) {
|
if (!defined('DC_CONTEXT_MODULE')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$redir = empty($_REQUEST['redir']) ?
|
/* dotclear ns */
|
||||||
dcCore::app()->admin->__get('list')->getURL() . '#plugins' : $_REQUEST['redir'];
|
use dcCore;
|
||||||
|
use dcPage;
|
||||||
|
|
||||||
# -- Get settings --
|
/* clearbricks ns */
|
||||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
use form;
|
||||||
$s = dcCore::app()->blog->settings->__get(basename(__DIR__));
|
use http;
|
||||||
|
use path;
|
||||||
|
|
||||||
$packman_pack_nocomment = $s->packman_pack_nocomment;
|
/* php ns */
|
||||||
$packman_pack_fixnewline = $s->packman_pack_fixnewline;
|
use Exception;
|
||||||
$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;
|
|
||||||
|
|
||||||
# -- Set settings --
|
class config
|
||||||
if (!empty($_POST['save'])) {
|
{
|
||||||
try {
|
public static function init(): void
|
||||||
$packman_pack_nocomment = !empty($_POST['packman_pack_nocomment']);
|
{
|
||||||
$packman_pack_fixnewline = !empty($_POST['packman_pack_fixnewline']);
|
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||||
$packman_pack_overwrite = !empty($_POST['packman_pack_overwrite']);
|
}
|
||||||
$packman_pack_filename = (string) $_POST['packman_pack_filename'];
|
|
||||||
$packman_secondpack_filename = (string) $_POST['packman_secondpack_filename'];
|
|
||||||
$packman_pack_repository = (string) path::real($_POST['packman_pack_repository'], false);
|
|
||||||
$packman_pack_excludefiles = (string) $_POST['packman_pack_excludefiles'];
|
|
||||||
|
|
||||||
$check = libPackman::is_configured(
|
public static function process(): void
|
||||||
$packman_pack_repository,
|
{
|
||||||
$packman_pack_filename,
|
if (empty($_POST['save'])) {
|
||||||
$packman_secondpack_filename
|
return;
|
||||||
);
|
|
||||||
|
|
||||||
if ($check) {
|
|
||||||
$s->put('packman_pack_nocomment', $packman_pack_nocomment);
|
|
||||||
$s->put('packman_pack_fixnewline', $packman_pack_fixnewline);
|
|
||||||
$s->put('packman_pack_overwrite', $packman_pack_overwrite);
|
|
||||||
$s->put('packman_pack_filename', $packman_pack_filename);
|
|
||||||
$s->put('packman_secondpack_filename', $packman_secondpack_filename);
|
|
||||||
$s->put('packman_pack_repository', $packman_pack_repository);
|
|
||||||
$s->put('packman_pack_excludefiles', $packman_pack_excludefiles);
|
|
||||||
|
|
||||||
dcPage::addSuccessNotice(
|
|
||||||
__('Configuration has been successfully updated.')
|
|
||||||
);
|
|
||||||
http::redirect(
|
|
||||||
dcCore::app()->admin->__get('list')->getURL('module=' . basename(__DIR__) . '&conf=1&redir=' .
|
|
||||||
dcCore::app()->admin->__get('list')->getRedir())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
|
||||||
dcCore::app()->error->add($e->getMessage());
|
# -- Set settings --
|
||||||
|
try {
|
||||||
|
$packman_pack_nocomment = !empty($_POST['packman_pack_nocomment']);
|
||||||
|
$packman_pack_fixnewline = !empty($_POST['packman_pack_fixnewline']);
|
||||||
|
$packman_pack_overwrite = !empty($_POST['packman_pack_overwrite']);
|
||||||
|
$packman_pack_filename = (string) $_POST['packman_pack_filename'];
|
||||||
|
$packman_secondpack_filename = (string) $_POST['packman_secondpack_filename'];
|
||||||
|
$packman_pack_repository = (string) path::real($_POST['packman_pack_repository'], false);
|
||||||
|
$packman_pack_excludefiles = (string) $_POST['packman_pack_excludefiles'];
|
||||||
|
|
||||||
|
$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);
|
||||||
|
$s->put('packman_pack_filename', $packman_pack_filename);
|
||||||
|
$s->put('packman_secondpack_filename', $packman_secondpack_filename);
|
||||||
|
$s->put('packman_pack_repository', $packman_pack_repository);
|
||||||
|
$s->put('packman_pack_excludefiles', $packman_pack_excludefiles);
|
||||||
|
|
||||||
|
dcPage::addSuccessNotice(
|
||||||
|
__('Configuration has been successfully updated.')
|
||||||
|
);
|
||||||
|
http::redirect(
|
||||||
|
dcCore::app()->admin->__get('list')->getURL('module=' . basename(__DIR__) . '&conf=1&redir=' .
|
||||||
|
dcCore::app()->admin->__get('list')->getRedir())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
dcCore::app()->error->add($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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">
|
||||||
|
<h4>' . __('Root') . '</h4>
|
||||||
|
|
||||||
|
<p><label for="packman_pack_repository">' . __('Path to repository:') . ' ' .
|
||||||
|
form::field('packman_pack_repository', 65, 255, $packman_pack_repository, 'maximal') .
|
||||||
|
'</label></p>' .
|
||||||
|
'<p class="form-note">' . sprintf(
|
||||||
|
__('Preconization: %s'),
|
||||||
|
dcCore::app()->blog->public_path ?
|
||||||
|
dcCore::app()->blog->public_path : __("Blog's public directory")
|
||||||
|
) . '</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="fieldset">
|
||||||
|
<h4>' . __('Files') . '</h4>
|
||||||
|
|
||||||
|
<p><label for="packman_pack_filename">' . __('Name of exported package:') . ' ' .
|
||||||
|
form::field('packman_pack_filename', 65, 255, $packman_pack_filename, 'maximal') .
|
||||||
|
'</label></p>
|
||||||
|
<p class="form-note">' . sprintf(__('Preconization: %s'), '%type%-%id%') . '</p>
|
||||||
|
|
||||||
|
<p><label for="packman_secondpack_filename">' . __('Name of second exported package:') . ' ' .
|
||||||
|
form::field('packman_secondpack_filename', 65, 255, $packman_secondpack_filename, 'maximal') .
|
||||||
|
'</label></p>
|
||||||
|
<p class="form-note">' . sprintf(__('Preconization: %s'), '%type%-%id%-%version%') . '</p>
|
||||||
|
|
||||||
|
<p><label class="classic" for="packman_pack_overwrite">' .
|
||||||
|
form::checkbox('packman_pack_overwrite', 1, $packman_pack_overwrite) . ' ' .
|
||||||
|
__('Overwrite existing package') . '</label></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="fieldset">
|
||||||
|
<h4>' . __('Content') . '</h4>
|
||||||
|
|
||||||
|
<p><label for="packman_pack_excludefiles">' . __('Extra files to exclude from package:') . ' ' .
|
||||||
|
form::field('packman_pack_excludefiles', 65, 255, $packman_pack_excludefiles, 'maximal') .
|
||||||
|
'</label></p>
|
||||||
|
<p class="form-note">' . sprintf(__('Preconization: %s'), '*.zip,*.tar,*.tar.gz') . '</p>
|
||||||
|
|
||||||
|
<p><label class="classic" for="packman_pack_nocomment">' .
|
||||||
|
form::checkbox('packman_pack_nocomment', 1, $packman_pack_nocomment) . ' ' .
|
||||||
|
__('Remove comments from files') . '</label></p>
|
||||||
|
|
||||||
|
<p><label class="classic" for="packman_pack_fixnewline">' .
|
||||||
|
form::checkbox('packman_pack_fixnewline', 1, $packman_pack_fixnewline) . ' ' .
|
||||||
|
__('Fix newline style from files content') . '</label></p>
|
||||||
|
|
||||||
|
</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# -- Display form --
|
config::init();
|
||||||
echo '
|
config::process();
|
||||||
<div class="fieldset">
|
config::render();
|
||||||
<h4>' . __('Root') . '</h4>
|
|
||||||
|
|
||||||
<p><label for="packman_pack_repository">' . __('Path to repository:') . ' ' .
|
|
||||||
form::field('packman_pack_repository', 65, 255, $packman_pack_repository, 'maximal') .
|
|
||||||
'</label></p>' .
|
|
||||||
'<p class="form-note">' . sprintf(
|
|
||||||
__('Preconization: %s'),
|
|
||||||
dcCore::app()->blog->public_path ?
|
|
||||||
dcCore::app()->blog->public_path : __("Blog's public directory")
|
|
||||||
) . '</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="fieldset">
|
|
||||||
<h4>' . __('Files') . '</h4>
|
|
||||||
|
|
||||||
<p><label for="packman_pack_filename">' . __('Name of exported package:') . ' ' .
|
|
||||||
form::field('packman_pack_filename', 65, 255, $packman_pack_filename, 'maximal') .
|
|
||||||
'</label></p>
|
|
||||||
<p class="form-note">' . sprintf(__('Preconization: %s'), '%type%-%id%') . '</p>
|
|
||||||
|
|
||||||
<p><label for="packman_secondpack_filename">' . __('Name of second exported package:') . ' ' .
|
|
||||||
form::field('packman_secondpack_filename', 65, 255, $packman_secondpack_filename, 'maximal') .
|
|
||||||
'</label></p>
|
|
||||||
<p class="form-note">' . sprintf(__('Preconization: %s'), '%type%-%id%-%version%') . '</p>
|
|
||||||
|
|
||||||
<p><label class="classic" for="packman_pack_overwrite">' .
|
|
||||||
form::checkbox('packman_pack_overwrite', 1, $packman_pack_overwrite) . ' ' .
|
|
||||||
__('Overwrite existing package') . '</label></p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="fieldset">
|
|
||||||
<h4>' . __('Content') . '</h4>
|
|
||||||
|
|
||||||
<p><label for="packman_pack_excludefiles">' . __('Extra files to exclude from package:') . ' ' .
|
|
||||||
form::field('packman_pack_excludefiles', 65, 255, $packman_pack_excludefiles, 'maximal') .
|
|
||||||
'</label></p>
|
|
||||||
<p class="form-note">' . sprintf(__('Preconization: %s'), '*.zip,*.tar,*.tar.gz') . '</p>
|
|
||||||
|
|
||||||
<p><label class="classic" for="packman_pack_nocomment">' .
|
|
||||||
form::checkbox('packman_pack_nocomment', 1, $packman_pack_nocomment) . ' ' .
|
|
||||||
__('Remove comments from files') . '</label></p>
|
|
||||||
|
|
||||||
<p><label class="classic" for="packman_pack_fixnewline">' .
|
|
||||||
form::checkbox('packman_pack_fixnewline', 1, $packman_pack_fixnewline) . ' ' .
|
|
||||||
__('Fix newline style from files content') . '</label></p>
|
|
||||||
|
|
||||||
</div>';
|
|
||||||
|
@ -10,6 +10,11 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
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')) {
|
if (!defined('DC_RC_PATH')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
160
_install.php
160
_install.php
@ -10,84 +10,100 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace plugins\pacKman;
|
||||||
|
|
||||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
# -- Module specs --
|
/* dotclear ns */
|
||||||
|
use dcCore;
|
||||||
|
|
||||||
$mod_conf = [
|
/* php ns */
|
||||||
[
|
use Exception;
|
||||||
'packman_menu_plugins',
|
|
||||||
'Add link to pacKman in plugins page',
|
|
||||||
false,
|
|
||||||
'boolean',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'packman_pack_nocomment',
|
|
||||||
'Remove comments from files',
|
|
||||||
false,
|
|
||||||
'boolean',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'packman_pack_overwrite',
|
|
||||||
'Overwrite existing package',
|
|
||||||
false,
|
|
||||||
'boolean',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'packman_pack_filename',
|
|
||||||
'Name of package',
|
|
||||||
'%type%-%id%',
|
|
||||||
'string',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'packman_secondpack_filename',
|
|
||||||
'Name of second package',
|
|
||||||
'%type%-%id%-%version%',
|
|
||||||
'string',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'packman_pack_repository',
|
|
||||||
'Path to package repository',
|
|
||||||
'',
|
|
||||||
'string',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'packman_pack_excludefiles',
|
|
||||||
'Extra files to exclude from package',
|
|
||||||
'*.zip,*.tar,*.tar.gz,.directory,.hg',
|
|
||||||
'string',
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
# -- Nothing to change below --
|
class install
|
||||||
|
{
|
||||||
try {
|
# -- Module specs --
|
||||||
# Check module version
|
private static $mod_conf = [
|
||||||
if (!dcCore::app()->newVersion(
|
[
|
||||||
basename(__DIR__),
|
'packman_menu_plugins',
|
||||||
dcCore::app()->plugins->moduleInfo(basename(__DIR__), 'version')
|
'Add link to pacKman in plugins page',
|
||||||
)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set module settings
|
|
||||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
|
||||||
foreach ($mod_conf as $v) {
|
|
||||||
dcCore::app()->blog->settings->__get(basename(__DIR__))->put(
|
|
||||||
$v[0],
|
|
||||||
$v[2],
|
|
||||||
$v[3],
|
|
||||||
$v[1],
|
|
||||||
false,
|
false,
|
||||||
true
|
'boolean',
|
||||||
);
|
],
|
||||||
|
[
|
||||||
|
'packman_pack_nocomment',
|
||||||
|
'Remove comments from files',
|
||||||
|
false,
|
||||||
|
'boolean',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'packman_pack_overwrite',
|
||||||
|
'Overwrite existing package',
|
||||||
|
false,
|
||||||
|
'boolean',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'packman_pack_filename',
|
||||||
|
'Name of package',
|
||||||
|
'%type%-%id%',
|
||||||
|
'string',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'packman_secondpack_filename',
|
||||||
|
'Name of second package',
|
||||||
|
'%type%-%id%-%version%',
|
||||||
|
'string',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'packman_pack_repository',
|
||||||
|
'Path to package repository',
|
||||||
|
'',
|
||||||
|
'string',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'packman_pack_excludefiles',
|
||||||
|
'Extra files to exclude from package',
|
||||||
|
'*.zip,*.tar,*.tar.gz,.directory,.hg',
|
||||||
|
'string',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
# -- Nothing to change below --
|
||||||
|
public static function process()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
# Check module version
|
||||||
|
if (!dcCore::app()->newVersion(
|
||||||
|
basename(__DIR__),
|
||||||
|
dcCore::app()->plugins->moduleInfo(basename(__DIR__), 'version')
|
||||||
|
)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set module settings
|
||||||
|
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||||
|
foreach (self::$mod_conf as $v) {
|
||||||
|
dcCore::app()->blog->settings->__get(basename(__DIR__))->put(
|
||||||
|
$v[0],
|
||||||
|
$v[2],
|
||||||
|
$v[3],
|
||||||
|
$v[1],
|
||||||
|
false,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
dcCore::app()->error->add($e->getMessage());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch (Exception $e) {
|
|
||||||
dcCore::app()->error->add($e->getMessage());
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return install::process();
|
||||||
|
25
_prepend.php
25
_prepend.php
@ -10,12 +10,27 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace plugins\pacKman;
|
||||||
|
|
||||||
if (!defined('DC_RC_PATH')) {
|
if (!defined('DC_RC_PATH')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Clearbricks::lib()->autoload([
|
/* clearbricks ns */
|
||||||
'dcPackman' => __DIR__ . '/inc/class.dc.packman.php',
|
use Clearbricks;
|
||||||
'libPackman' => __DIR__ . '/inc/lib.packman.php',
|
|
||||||
'packmanFileZip' => __DIR__ . '/inc/lib.packman.filezip.php',
|
class Prepend
|
||||||
]);
|
{
|
||||||
|
public static function init()
|
||||||
|
{
|
||||||
|
Clearbricks::lib()->autoload([
|
||||||
|
'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 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
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace plugins\pacKman;
|
||||||
|
|
||||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||||
return null;
|
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 */
|
/** @var array Excluded files */
|
||||||
public static $exclude = [
|
public static $exclude = [
|
||||||
@ -129,12 +147,12 @@ class dcPackman
|
|||||||
$fp = fopen($dest, 'wb');
|
$fp = fopen($dest, 'wb');
|
||||||
|
|
||||||
if ($nocomment) {
|
if ($nocomment) {
|
||||||
packmanFileZip::$remove_comment = true;
|
FileZip::$remove_comment = true;
|
||||||
}
|
}
|
||||||
if ($fixnewline) {
|
if ($fixnewline) {
|
||||||
packmanFileZip::$fix_newline = true;
|
FileZip::$fix_newline = true;
|
||||||
}
|
}
|
||||||
$zip = new packmanFileZip($fp);
|
$zip = new FileZip($fp);
|
||||||
|
|
||||||
foreach ($exclude as $e) {
|
foreach ($exclude as $e) {
|
||||||
$zip->addExclusion($e);
|
$zip->addExclusion($e);
|
||||||
|
@ -10,7 +10,18 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
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 */
|
/** @var boolean Remove comments from files content */
|
||||||
public static $remove_comment = false;
|
public static $remove_comment = false;
|
||||||
|
@ -10,11 +10,23 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace plugins\pacKman;
|
||||||
|
|
||||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||||
return null;
|
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
|
public static function is_configured(string $repo, string $file_a, string $file_b): bool
|
||||||
{
|
{
|
||||||
@ -206,7 +218,7 @@ class libPackman
|
|||||||
'<a class="packman-download" href="' .
|
'<a class="packman-download" href="' .
|
||||||
dcCore::app()->adminurl->get('admin.plugin.' . basename(dirname('../' . __DIR__)), [
|
dcCore::app()->adminurl->get('admin.plugin.' . basename(dirname('../' . __DIR__)), [
|
||||||
'package' => basename($module['root']),
|
'package' => basename($module['root']),
|
||||||
'repo' => $type,
|
'repo' => $type,
|
||||||
]) . '" title="' . __('Download') . '">' .
|
]) . '" title="' . __('Download') . '">' .
|
||||||
html::escapeHTML(basename($module['root'])) . '</a>' .
|
html::escapeHTML(basename($module['root'])) . '</a>' .
|
||||||
'</td>' .
|
'</td>' .
|
||||||
|
592
index.php
592
index.php
@ -10,302 +10,340 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace plugins\pacKman;
|
||||||
|
|
||||||
if (!defined('DC_CONTEXT_ADMIN')) {
|
if (!defined('DC_CONTEXT_ADMIN')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
dcPage::checkSuper();
|
/* dotclear ns */
|
||||||
|
use dcCore;
|
||||||
|
use dcPage;
|
||||||
|
use dcThemes;
|
||||||
|
|
||||||
# Queries
|
/* clearbricks ns */
|
||||||
$action = $_POST['action'] ?? '';
|
use files;
|
||||||
$type = isset($_POST['type']) && in_array($_POST['type'], ['plugins', 'themes', 'repository']) ? $_POST['type'] : '';
|
use http;
|
||||||
|
use path;
|
||||||
|
|
||||||
# Settings
|
/* php ns */
|
||||||
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
use Exception;
|
||||||
$s = dcCore::app()->blog->settings->__get(basename(__DIR__));
|
|
||||||
|
|
||||||
# Modules
|
class index
|
||||||
if (!(dcCore::app()->themes instanceof dcThemes)) {
|
{
|
||||||
dcCore::app()->themes = new dcThemes();
|
private static $plugins_path = '';
|
||||||
dcCore::app()->themes->loadModules(dcCore::app()->blog->themes_path, null);
|
private static $themes_path = '';
|
||||||
}
|
|
||||||
$themes = dcCore::app()->themes;
|
|
||||||
$plugins = dcCore::app()->plugins;
|
|
||||||
|
|
||||||
# Paths
|
public static function init()
|
||||||
$ppexp = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT);
|
{
|
||||||
$pppop = array_pop($ppexp);
|
dcPage::checkSuper();
|
||||||
$plugins_path = (string) path::real($pppop);
|
dcCore::app()->blog->settings->addNamespace(basename(__DIR__));
|
||||||
$themes_path = dcCore::app()->blog->themes_path;
|
|
||||||
$repo_path = $s->packman_pack_repository;
|
|
||||||
|
|
||||||
# Rights
|
# Paths
|
||||||
$is_writable = libPackman::is_writable(
|
$e = explode(PATH_SEPARATOR, DC_PLUGINS_ROOT);
|
||||||
$s->packman_pack_repository,
|
$p = array_pop($e);
|
||||||
$s->packman_pack_filename
|
self::$plugins_path = (string) path::real($p);
|
||||||
);
|
self::$themes_path = dcCore::app()->blog->themes_path;
|
||||||
$is_editable = !empty($type)
|
}
|
||||||
&& !empty($_POST['modules'])
|
|
||||||
&& is_array($_POST['modules']);
|
|
||||||
|
|
||||||
$is_configured = libPackman::is_configured(
|
public static function process()
|
||||||
$s->packman_pack_repository,
|
{
|
||||||
$s->packman_pack_filename,
|
# Queries
|
||||||
$s->packman_secondpack_filename
|
$action = $_POST['action'] ?? '';
|
||||||
);
|
$type = isset($_POST['type']) && in_array($_POST['type'], ['plugins', 'themes', 'repository']) ? $_POST['type'] : '';
|
||||||
|
|
||||||
# Actions
|
# Settings
|
||||||
try {
|
$s = dcCore::app()->blog->settings->__get(basename(__DIR__));
|
||||||
# Download
|
|
||||||
if (isset($_REQUEST['package']) && empty($type)) {
|
# Modules
|
||||||
$modules = [];
|
if (!(dcCore::app()->themes instanceof dcThemes)) {
|
||||||
if ($type == 'plugins') {
|
dcCore::app()->themes = new dcThemes();
|
||||||
$modules = dcPackman::getPackages($plugins_path);
|
dcCore::app()->themes->loadModules(dcCore::app()->blog->themes_path, null);
|
||||||
} elseif ($type == 'themes') {
|
|
||||||
$modules = dcPackman::getPackages($themes_path);
|
|
||||||
} else {
|
|
||||||
$modules = array_merge(
|
|
||||||
dcPackman::getPackages(dirname($repo_path . '/' . $s->packman_pack_filename)),
|
|
||||||
dcPackman::getPackages(dirname($repo_path . '/' . $s->packman_secondpack_filename))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
$themes = dcCore::app()->themes;
|
||||||
|
$plugins = dcCore::app()->plugins;
|
||||||
|
|
||||||
foreach ($modules as $f) {
|
# Rights
|
||||||
if (preg_match('/' . preg_quote($_REQUEST['package']) . '$/', $f['root'])
|
$is_writable = Utils::is_writable(
|
||||||
&& is_file($f['root']) && is_readable($f['root'])
|
$s->packman_pack_repository,
|
||||||
) {
|
$s->packman_pack_filename
|
||||||
# --BEHAVIOR-- packmanBeforeDownloadPackage
|
);
|
||||||
dcCore::app()->callBehavior('packmanBeforeDownloadPackage', $f, $type);
|
$is_editable = !empty($type)
|
||||||
|
&& !empty($_POST['modules'])
|
||||||
|
&& is_array($_POST['modules']);
|
||||||
|
|
||||||
header('Content-Type: application/zip');
|
# Actions
|
||||||
header('Content-Length: ' . filesize($f['root']));
|
try {
|
||||||
header('Content-Disposition: attachment; filename="' . basename($f['root']) . '"');
|
# Download
|
||||||
readfile($f['root']);
|
if (isset($_REQUEST['package']) && empty($type)) {
|
||||||
|
$modules = [];
|
||||||
|
if ($type == 'plugins') {
|
||||||
|
$modules = Core::getPackages(self::$plugins_path);
|
||||||
|
} elseif ($type == 'themes') {
|
||||||
|
$modules = Core::getPackages(self::$themes_path);
|
||||||
|
} else {
|
||||||
|
$modules = array_merge(
|
||||||
|
Core::getPackages(dirname($s->packman_pack_repository . '/' . $s->packman_pack_filename)),
|
||||||
|
Core::getPackages(dirname($s->packman_pack_repository . '/' . $s->packman_secondpack_filename))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
# --BEHAVIOR-- packmanAfterDownloadPackage
|
foreach ($modules as $f) {
|
||||||
dcCore::app()->callBehavior('packmanAfterDownloadPackage', $f, $type);
|
if (preg_match('/' . preg_quote($_REQUEST['package']) . '$/', $f['root'])
|
||||||
|
&& is_file($f['root']) && is_readable($f['root'])
|
||||||
|
) {
|
||||||
|
# --BEHAVIOR-- packmanBeforeDownloadPackage
|
||||||
|
dcCore::app()->callBehavior('packmanBeforeDownloadPackage', $f, $type);
|
||||||
|
|
||||||
|
header('Content-Type: application/zip');
|
||||||
|
header('Content-Length: ' . filesize($f['root']));
|
||||||
|
header('Content-Disposition: attachment; filename="' . basename($f['root']) . '"');
|
||||||
|
readfile($f['root']);
|
||||||
|
|
||||||
|
# --BEHAVIOR-- packmanAfterDownloadPackage
|
||||||
|
dcCore::app()->callBehavior('packmanAfterDownloadPackage', $f, $type);
|
||||||
|
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Not found
|
||||||
|
header('Content-Type: text/plain');
|
||||||
|
http::head(404, 'Not Found');
|
||||||
exit;
|
exit;
|
||||||
|
} elseif (!empty($action) && !$is_editable) {
|
||||||
|
throw new Exception('No selected modules');
|
||||||
|
|
||||||
|
# Pack
|
||||||
|
} elseif ($action == 'packup') {
|
||||||
|
foreach ($_POST['modules'] as $root => $id) {
|
||||||
|
if (!Utils::moduleExists($type, $id)) {
|
||||||
|
throw new Exception('No such module');
|
||||||
|
}
|
||||||
|
|
||||||
|
$module = Utils::getModules($type, $id);
|
||||||
|
$module['id'] = $id;
|
||||||
|
$module['type'] = $type == 'themes' ? 'theme' : 'plugin';
|
||||||
|
|
||||||
|
$root = (string) $s->packman_pack_repository;
|
||||||
|
$files = [
|
||||||
|
(string) $s->packman_pack_filename,
|
||||||
|
(string) $s->packman_secondpack_filename,
|
||||||
|
];
|
||||||
|
$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);
|
||||||
|
|
||||||
|
Core::pack($module, $root, $files, $overwrite, $exclude, $nocomment, $fixnewline);
|
||||||
|
|
||||||
|
# --BEHAVIOR-- packmanAfterCreatePackage
|
||||||
|
dcCore::app()->callBehavior('packmanAfterCreatePackage', $module);
|
||||||
|
}
|
||||||
|
|
||||||
|
dcPage::addSuccessNotice(
|
||||||
|
__('Package successfully created.')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!empty($_POST['redir'])) {
|
||||||
|
http::redirect($_POST['redir']);
|
||||||
|
} else {
|
||||||
|
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-' . $type);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Delete
|
||||||
|
} elseif ($action == 'delete') {
|
||||||
|
foreach ($_POST['modules'] as $root => $id) {
|
||||||
|
if (!file_exists($root) || !files::isDeletable($root)) {
|
||||||
|
throw new Exception('Undeletable file: ' . $root);
|
||||||
|
}
|
||||||
|
|
||||||
|
unlink($root);
|
||||||
|
}
|
||||||
|
|
||||||
|
dcPage::addSuccessNotice(
|
||||||
|
__('Package successfully deleted.')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!empty($_POST['redir'])) {
|
||||||
|
http::redirect($_POST['redir']);
|
||||||
|
} else {
|
||||||
|
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-repository-' . $type);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install
|
||||||
|
} elseif ($action == 'install') {
|
||||||
|
foreach ($_POST['modules'] as $root => $id) {
|
||||||
|
# --BEHAVIOR-- packmanBeforeInstallPackage
|
||||||
|
dcCore::app()->callBehavior('packmanBeforeInstallPackage', $type, $id, $root);
|
||||||
|
|
||||||
|
if ($type == 'plugins') {
|
||||||
|
$plugins->installPackage($root, $plugins);
|
||||||
|
}
|
||||||
|
if ($type == 'themes') {
|
||||||
|
$themes->installPackage($root, $themes);
|
||||||
|
}
|
||||||
|
|
||||||
|
# --BEHAVIOR-- packmanAfterInstallPackage
|
||||||
|
dcCore::app()->callBehavior('packmanAfterInstallPackage', $type, $id, $root);
|
||||||
|
}
|
||||||
|
|
||||||
|
dcPage::addSuccessNotice(
|
||||||
|
__('Package successfully installed.')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!empty($_POST['redir'])) {
|
||||||
|
http::redirect($_POST['redir']);
|
||||||
|
} else {
|
||||||
|
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-repository-' . $type);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy
|
||||||
|
} elseif (strpos($action, 'copy_to_') !== false) {
|
||||||
|
$dest = $s->packman_pack_repository;
|
||||||
|
if ($action == 'copy_to_plugins') {
|
||||||
|
$dest = self::$plugins_path;
|
||||||
|
} elseif ($action == 'copy_to_themes') {
|
||||||
|
$dest = self::$themes_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($_POST['modules'] as $root => $id) {
|
||||||
|
file_put_contents(
|
||||||
|
$dest . '/' . basename($root),
|
||||||
|
file_get_contents($root)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
dcPage::addSuccessNotice(
|
||||||
|
__('Package successfully copied.')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!empty($_POST['redir'])) {
|
||||||
|
http::redirect($_POST['redir']);
|
||||||
|
} else {
|
||||||
|
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-repository-' . $type);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Move
|
||||||
|
} elseif (strpos($action, 'move_to_') !== false) {
|
||||||
|
$dest = $s->packman_pack_repository;
|
||||||
|
if ($action == 'move_to_plugins') {
|
||||||
|
$dest = self::$plugins_path;
|
||||||
|
} elseif ($action == 'move_to_themes') {
|
||||||
|
$dest = self::$themes_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($_POST['modules'] as $root => $id) {
|
||||||
|
file_put_contents(
|
||||||
|
$dest . '/' . basename($root),
|
||||||
|
file_get_contents($root)
|
||||||
|
);
|
||||||
|
unlink($root);
|
||||||
|
}
|
||||||
|
|
||||||
|
dcPage::addSuccessNotice(
|
||||||
|
__('Package successfully moved.')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!empty($_POST['redir'])) {
|
||||||
|
http::redirect($_POST['redir']);
|
||||||
|
} else {
|
||||||
|
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-repository-' . $type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception $e) {
|
||||||
|
dcCore::app()->error->add($e->getMessage());
|
||||||
# Not found
|
|
||||||
header('Content-Type: text/plain');
|
|
||||||
http::head(404, 'Not Found');
|
|
||||||
exit;
|
|
||||||
} elseif (!empty($action) && !$is_editable) {
|
|
||||||
throw new Exception('No selected modules');
|
|
||||||
|
|
||||||
# Pack
|
|
||||||
} elseif ($action == 'packup') {
|
|
||||||
foreach ($_POST['modules'] as $root => $id) {
|
|
||||||
if (!libPackman::moduleExists($type, $id)) {
|
|
||||||
throw new Exception('No such module');
|
|
||||||
}
|
|
||||||
|
|
||||||
$module = libPackman::getModules($type, $id);
|
|
||||||
$module['id'] = $id;
|
|
||||||
$module['type'] = $type == 'themes' ? 'theme' : 'plugin';
|
|
||||||
|
|
||||||
$root = $s->packman_pack_repository;
|
|
||||||
$files = [
|
|
||||||
$s->packman_pack_filename,
|
|
||||||
$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);
|
|
||||||
|
|
||||||
# --BEHAVIOR-- packmanBeforeCreatePackage
|
|
||||||
dcCore::app()->callBehavior('packmanBeforeCreatePackage', $module);
|
|
||||||
|
|
||||||
dcPackman::pack($module, $root, $files, $overwrite, $exclude, $nocomment, $fixnewline);
|
|
||||||
|
|
||||||
# --BEHAVIOR-- packmanAfterCreatePackage
|
|
||||||
dcCore::app()->callBehavior('packmanAfterCreatePackage', $module);
|
|
||||||
}
|
|
||||||
|
|
||||||
dcPage::addSuccessNotice(
|
|
||||||
__('Package successfully created.')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!empty($_POST['redir'])) {
|
|
||||||
http::redirect($_POST['redir']);
|
|
||||||
} else {
|
|
||||||
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-' . $type);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Delete
|
|
||||||
} elseif ($action == 'delete') {
|
|
||||||
foreach ($_POST['modules'] as $root => $id) {
|
|
||||||
if (!file_exists($root) || !files::isDeletable($root)) {
|
|
||||||
throw new Exception('Undeletable file: ' . $root);
|
|
||||||
}
|
|
||||||
|
|
||||||
unlink($root);
|
|
||||||
}
|
|
||||||
|
|
||||||
dcPage::addSuccessNotice(
|
|
||||||
__('Package successfully deleted.')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!empty($_POST['redir'])) {
|
|
||||||
http::redirect($_POST['redir']);
|
|
||||||
} else {
|
|
||||||
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-repository-' . $type);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Install
|
|
||||||
} elseif ($action == 'install') {
|
|
||||||
foreach ($_POST['modules'] as $root => $id) {
|
|
||||||
# --BEHAVIOR-- packmanBeforeInstallPackage
|
|
||||||
dcCore::app()->callBehavior('packmanBeforeInstallPackage', $type, $id, $root);
|
|
||||||
|
|
||||||
if ($type == 'plugins') {
|
|
||||||
$plugins->installPackage($root, $plugins);
|
|
||||||
}
|
|
||||||
if ($type == 'themes') {
|
|
||||||
$themes->installPackage($root, $themes);
|
|
||||||
}
|
|
||||||
|
|
||||||
# --BEHAVIOR-- packmanAfterInstallPackage
|
|
||||||
dcCore::app()->callBehavior('packmanAfterInstallPackage', $type, $id, $root);
|
|
||||||
}
|
|
||||||
|
|
||||||
dcPage::addSuccessNotice(
|
|
||||||
__('Package successfully installed.')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!empty($_POST['redir'])) {
|
|
||||||
http::redirect($_POST['redir']);
|
|
||||||
} else {
|
|
||||||
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-repository-' . $type);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Copy
|
|
||||||
} elseif (strpos($action, 'copy_to_') !== false) {
|
|
||||||
$dest = $repo_path;
|
|
||||||
if ($action == 'copy_to_plugins') {
|
|
||||||
$dest = $plugins_path;
|
|
||||||
} elseif ($action == 'copy_to_themes') {
|
|
||||||
$dest = $themes_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($_POST['modules'] as $root => $id) {
|
|
||||||
file_put_contents(
|
|
||||||
$dest . '/' . basename($root),
|
|
||||||
file_get_contents($root)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
dcPage::addSuccessNotice(
|
|
||||||
__('Package successfully copied.')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!empty($_POST['redir'])) {
|
|
||||||
http::redirect($_POST['redir']);
|
|
||||||
} else {
|
|
||||||
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-repository-' . $type);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Move
|
|
||||||
} elseif (strpos($action, 'move_to_') !== false) {
|
|
||||||
$dest = $repo_path;
|
|
||||||
if ($action == 'move_to_plugins') {
|
|
||||||
$dest = $plugins_path;
|
|
||||||
} elseif ($action == 'move_to_themes') {
|
|
||||||
$dest = $themes_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($_POST['modules'] as $root => $id) {
|
|
||||||
file_put_contents(
|
|
||||||
$dest . '/' . basename($root),
|
|
||||||
file_get_contents($root)
|
|
||||||
);
|
|
||||||
unlink($root);
|
|
||||||
}
|
|
||||||
|
|
||||||
dcPage::addSuccessNotice(
|
|
||||||
__('Package successfully moved.')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!empty($_POST['redir'])) {
|
|
||||||
http::redirect($_POST['redir']);
|
|
||||||
} else {
|
|
||||||
dcCore::app()->adminurl->redirect('admin.plugin.' . basename(__DIR__), [], '#packman-repository-' . $type);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} 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
|
||||||
|
'<html><head><title>' . __('pacKman') . '</title>' .
|
||||||
|
dcPage::jsPageTabs() .
|
||||||
|
dcPage::jsLoad(dcPage::getPF(basename(__DIR__) . '/js/packman.js'));
|
||||||
|
|
||||||
|
# --BEHAVIOR-- packmanAdminHeader
|
||||||
|
dcCore::app()->callBehavior('packmanAdminHeader');
|
||||||
|
|
||||||
|
echo
|
||||||
|
'</head><body>' .
|
||||||
|
|
||||||
|
dcPage::breadcrumb([
|
||||||
|
__('Plugins') => '',
|
||||||
|
__('pacKman') => '',
|
||||||
|
]) .
|
||||||
|
dcPage::notices();
|
||||||
|
|
||||||
|
if (dcCore::app()->error->flag() || !$is_configured) {
|
||||||
|
echo
|
||||||
|
'<div class="warning">' . __('pacKman is not well configured.') . ' ' .
|
||||||
|
'<a href="' . dcCore::app()->adminurl->get('admin.plugins', ['module' => basename(__DIR__), 'conf' => '1', 'redir' => dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__))]) . '">' . __('Configuration') . '</a>' .
|
||||||
|
'</div>';
|
||||||
|
} else {
|
||||||
|
$repo_path_modules = array_merge(
|
||||||
|
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 = Core::getPackages(self::$plugins_path);
|
||||||
|
$themes_path_modules = Core::getPackages(self::$themes_path);
|
||||||
|
|
||||||
|
Utils::modules(
|
||||||
|
Utils::getModules('plugins'),
|
||||||
|
'plugins',
|
||||||
|
__('Installed plugins')
|
||||||
|
);
|
||||||
|
|
||||||
|
Utils::modules(
|
||||||
|
Utils::getModules('themes'),
|
||||||
|
'themes',
|
||||||
|
__('Installed themes')
|
||||||
|
);
|
||||||
|
|
||||||
|
Utils::repository(
|
||||||
|
$plugins_path_modules,
|
||||||
|
'plugins',
|
||||||
|
__('Plugins root')
|
||||||
|
);
|
||||||
|
|
||||||
|
Utils::repository(
|
||||||
|
$themes_path_modules,
|
||||||
|
'themes',
|
||||||
|
__('Themes root')
|
||||||
|
);
|
||||||
|
|
||||||
|
Utils::repository(
|
||||||
|
$repo_path_modules,
|
||||||
|
'repository',
|
||||||
|
__('Packages repository')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
# --BEHAVIOR-- packmanAdminTabs
|
||||||
|
dcCore::app()->callBehavior('packmanAdminTabs');
|
||||||
|
|
||||||
|
dcPage::helpBlock('pacKman');
|
||||||
|
|
||||||
|
echo
|
||||||
|
'</body></html>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Display
|
index::init();
|
||||||
echo
|
index::process();
|
||||||
'<html><head><title>' . __('pacKman') . '</title>' .
|
index::render();
|
||||||
dcPage::jsPageTabs() .
|
|
||||||
dcPage::jsLoad(dcPage::getPF(basename(__DIR__) . '/js/packman.js'));
|
|
||||||
|
|
||||||
# --BEHAVIOR-- packmanAdminHeader
|
|
||||||
dcCore::app()->callBehavior('packmanAdminHeader');
|
|
||||||
|
|
||||||
echo
|
|
||||||
'</head><body>' .
|
|
||||||
|
|
||||||
dcPage::breadcrumb([
|
|
||||||
__('Plugins') => '',
|
|
||||||
__('pacKman') => '',
|
|
||||||
]) .
|
|
||||||
dcPage::notices();
|
|
||||||
|
|
||||||
if (dcCore::app()->error->flag() || !$is_configured) {
|
|
||||||
echo
|
|
||||||
'<div class="warning">' . __('pacKman is not well configured.') . ' ' .
|
|
||||||
'<a href="' . dcCore::app()->adminurl->get('admin.plugins', ['module' => basename(__DIR__), 'conf' => '1', 'redir' => dcCore::app()->adminurl->get('admin.plugin.' . basename(__DIR__))]) . '">' . __('Configuration') . '</a>' .
|
|
||||||
'</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))
|
|
||||||
);
|
|
||||||
$plugins_path_modules = dcPackman::getPackages($plugins_path);
|
|
||||||
$themes_path_modules = dcPackman::getPackages($themes_path);
|
|
||||||
|
|
||||||
libPackman::modules(
|
|
||||||
libPackman::getModules('plugins'),
|
|
||||||
'plugins',
|
|
||||||
__('Installed plugins')
|
|
||||||
);
|
|
||||||
|
|
||||||
libPackman::modules(
|
|
||||||
libPackman::getModules('themes'),
|
|
||||||
'themes',
|
|
||||||
__('Installed themes')
|
|
||||||
);
|
|
||||||
|
|
||||||
libPackman::repository(
|
|
||||||
$plugins_path_modules,
|
|
||||||
'plugins',
|
|
||||||
__('Plugins root')
|
|
||||||
);
|
|
||||||
|
|
||||||
libPackman::repository(
|
|
||||||
$themes_path_modules,
|
|
||||||
'themes',
|
|
||||||
__('Themes root')
|
|
||||||
);
|
|
||||||
|
|
||||||
libPackman::repository(
|
|
||||||
$repo_path_modules,
|
|
||||||
'repository',
|
|
||||||
__('Packages repository')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
# --BEHAVIOR-- packmanAdminTabs
|
|
||||||
dcCore::app()->callBehavior('packmanAdminTabs');
|
|
||||||
|
|
||||||
dcPage::helpBlock('pacKman');
|
|
||||||
|
|
||||||
echo
|
|
||||||
'</body></html>';
|
|
||||||
|
Loading…
Reference in New Issue
Block a user