Compare commits

...

3 Commits

12 changed files with 161 additions and 180 deletions

View File

@ -1,62 +1,83 @@
2023.05.13 licenseBootstrap 2023.08.14
- require dotclea r2.26 ===========================================================
- require php 8.1 * Require Dotclear 2.27
- use define php_min * Require PHP 8.1
- fix dump() method * Upgrade to Dotclear 2.27 stable
* Move third party repository
* Use Dotclear style for CHANGELOG
2023.04.22 licenseBootstrap 2023.05.13
- require dotclea r2.26 ===========================================================
- require php 8.1 * require dotclea r2.26
- add plugin Uninstaller features * require php 8.1
- use latest helper namespace * use define php_min
- fix nullsafe warnings * fix dump() method
2023.03.25 licenseBootstrap 2023.04.22
- require dotclea r2.26 ===========================================================
- require php 8.1 * require dotclea r2.26
- use namespace * require php 8.1
* add plugin Uninstaller features
* use latest helper namespace
* fix nullsafe warnings
2022.12.22 licenseBootstrap 2023.03.25
- add wtfpl license ===========================================================
- use SVG icon * require dotclea r2.26
- use anonymous function * require php 8.1
- use abstract plugin id * use namespace
- change serialize stuff into json stuff
- fix pacKman behavoir dis|enable
- fix autoload
- fix permissions
- fix install
2022.11.20 licenseBootstrap 2022.12.22
- fix compatibility with Dotclear 2.24 (required) ===========================================================
* add wtfpl license
* use SVG icon
* use anonymous function
* use abstract plugin id
* change serialize stuff into json stuff
* fix pacKman behavoir dis|enable
* fix autoload
* fix permissions
* fix install
2021.09.10 licenseBootstrap 2022.11.20
- clean up code ===========================================================
- Tested for Dotclear 2.19 * fix compatibility with Dotclear 2.24 (required)
2013.12.01 licenseBootstrap 2021.09.10
- Fix install ===========================================================
- Fix user info * clean up code
* Tested for Dotclear 2.19
2013.10.29 licenseBootstrap 2013.12.01
- Fix full license bug ===========================================================
- Fix french help and support links * Fix install
* Fix user info
2013.10.28 licenseBootstrap 2013.10.29
- Switched to DC 2.6 ===========================================================
- New icon * Fix full license bug
- Add dashboard icon * Fix french help and support links
- Clean up code and (again) lighter admin interface
2013.05.11 licenseBootstrap 2013.10.28
- Fixed page title and messages and contents ===========================================================
* Switched to DC 2.6
* New icon
* Add dashboard icon
* Clean up code and (again) lighter admin interface
0.3 - 2010.06.05 licenseBootstrap 2013.05.11
- Switched to DC 2.2 ===========================================================
- Changed admin interface (easy, light, fast) * Fixed page title and messages and contents
0.2 - 2009.11.09 licenseBootstrap 0.3 - 2010.06.05
- Changed lots of things ===========================================================
* Switched to DC 2.2
* Changed admin interface (easy, light, fast)
0.1 - 2009.10.09 licenseBootstrap 0.2 - 2009.11.09
- First lab release ===========================================================
* Changed lots of things
licenseBootstrap 0.1 - 2009.10.09
===========================================================
* First lab release

View File

@ -1,15 +1,14 @@
# README # README
[![Release](https://img.shields.io/github/v/release/JcDenis/licenseBootstrap)](https://github.com/JcDenis/licenseBootstrap/releases) [![Release](https://img.shields.io/badge/release-2023.08.15-a2cbe9.svg)](https://git.dotclear.watch/JcDenis/licenseBootstrap/releases)
[![Date](https://img.shields.io/github/release-date/JcDenis/licenseBootstrap)](https://github.com/JcDenis/licenseBootstrap/releases) [![Date](https://img.shields.io/badge/date-2023.08.14-c44d58.svg)](https://git.dotclear.watch/JcDenis/licenseBootstrap/releases)
[![Issues](https://img.shields.io/github/issues/JcDenis/licenseBootstrap)](https://github.com/JcDenis/licenseBootstrap/issues) [![Dotclear](https://img.shields.io/badge/dotclear-v2.27-137bbb.svg)](https://fr.dotclear.org/download)
[![Dotclear](https://img.shields.io/badge/dotclear-v2.26-blue.svg)](https://fr.dotclear.org/download) [![Dotaddict](https://img.shields.io/badge/dotaddict-official-9ac123.svg)](https://plugins.dotaddict.org/dc2/details/licenseBootstrap)
[![Dotaddict](https://img.shields.io/badge/dotaddict-official-green.svg)](https://plugins.dotaddict.org/dc2/details/licenseBootstrap) [![License](https://img.shields.io/github/license/JcDenis/licenseBootstrap)](https://git.dotclear.watch/JcDenis/licenseBootstrap/blob/master/LICENSE)
[![License](https://img.shields.io/github/license/JcDenis/licenseBootstrap)](https://github.com/JcDenis/licenseBootstrap/blob/master/LICENSE)
## WHAT IS LICENSEBOOTSTRAP ? ## WHAT IS LICENSEBOOTSTRAP ?
licenseBootstrap is a plugins for the open-source _licenseBootstrap_ is a plugins for the open-source
web publishing software called Dotclear. web publishing software called Dotclear.
It help super admin to add license to their It help super admin to add license to their
@ -17,15 +16,15 @@ themes and plugins from Dotclear administration pages.
## REQUIREMENTS ## REQUIREMENTS
licenseBootstrap requires: _licenseBootstrap_ requires:
* Super administrator permissions * Super administrator permissions
* Dotclear 2.26 * Dotclear 2.26
* Php >= 8.1 * Php 8.1+
## USAGE ## USAGE
First install licenseBootstrap, mannualy from a zip package or from First install _licenseBootstrap_, mannualy from a zip package or from
Dotaddict repository. (See Dotclear's documentation to know how do this) Dotaddict repository. (See Dotclear's documentation to know how do this)
Go to ''plugins manager'', expand licenseBootstrap information then Go to ''plugins manager'', expand licenseBootstrap information then
@ -34,18 +33,18 @@ go to ''configure plugin'', fill in form.
Once it's done you can manage your modules license from menu Once it's done you can manage your modules license from menu
''License bootstrap'' on sidebar or you can add dashboard icon. ''License bootstrap'' on sidebar or you can add dashboard icon.
By default, licenseBootstrap uses old style code blocs, By default, _licenseBootstrap_ uses old style code blocs,
if you want a modern style you should use a more recent plugin if you want a modern style you should use a more recent plugin
like the one called ''improve''. like the one called ''improve''.
## LINKS ## LINKS
* License : [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.html) * License : [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.html)
* Source & contribution : [GitHub Page](https://github.com/licenseBootstrap) * Source & contribution : [Gitea Page](https://git.dotclear.watch/JcDenis/licenseBootstrap) or [GitHub Page](https://github.com/JcDenis/licenseBootstrap)
* Packages & details : [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/licenseBootstrap) * Packages & details: [Gitea Page](https://git.dotclear.watch/JcDenis/licenseBootstrap/releases) or [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/licenseBootstrap)
## CONTRIBUTORS ## CONTRIBUTORS
* Jean-Christian Denis * Jean-Christian Denis (author)
You are welcome to contribute to this code. You are welcome to contribute to this code.

View File

@ -18,7 +18,7 @@ $this->registerModule(
'License bootstrap', 'License bootstrap',
'Add license to your plugins and themes', 'Add license to your plugins and themes',
'Jean-Christian Denis', 'Jean-Christian Denis',
'2023.05.13', '2023.08.15',
[ [
'requires' => [ 'requires' => [
['php', '8.1'], ['php', '8.1'],
@ -26,8 +26,8 @@ $this->registerModule(
], ],
'permissions' => null, 'permissions' => null,
'type' => 'plugin', 'type' => 'plugin',
'support' => 'https://github.com/JcDenis/' . basename(__DIR__), 'support' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/issues',
'details' => 'https://plugins.dotaddict.org/dc2/details/' . basename(__DIR__), 'details' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/src/branch/master/README.md',
'repository' => 'https://raw.githubusercontent.com/JcDenis/' . basename(__DIR__) . '/master/dcstore.xml', 'repository' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/raw/branch/master/dcstore.xml',
] ]
); );

View File

@ -2,12 +2,12 @@
<modules xmlns:da="http://dotaddict.org/da/"> <modules xmlns:da="http://dotaddict.org/da/">
<module id="licenseBootstrap"> <module id="licenseBootstrap">
<name>License bootstrap</name> <name>License bootstrap</name>
<version>2023.05.13</version> <version>2023.08.15</version>
<author>Jean-Christian Denis</author> <author>Jean-Christian Denis</author>
<desc>Add license to your plugins and themes</desc> <desc>Add license to your plugins and themes</desc>
<file>https://github.com/JcDenis/licenseBootstrap/releases/download/v2023.05.13/plugin-licenseBootstrap.zip</file> <file>https://git.dotclear.watch/JcDenis/licenseBootstrap/releases/download/v2023.08.15/plugin-licenseBootstrap.zip</file>
<da:dcmin>2.26</da:dcmin> <da:dcmin>2.26</da:dcmin>
<da:details>https://plugins.dotaddict.org/dc2/details/licenseBootstrap</da:details> <da:details>https://git.dotclear.watch/JcDenis/licenseBootstrap/src/branch/master/README.md</da:details>
<da:support>https://github.com/JcDenis/licenseBootstrap</da:support> <da:support>https://git.dotclear.watch/JcDenis/licenseBootstrap/issues</da:support>
</module> </module>
</modules> </modules>

View File

@ -14,37 +14,37 @@ declare(strict_types=1);
namespace Dotclear\Plugin\licenseBootstrap; namespace Dotclear\Plugin\licenseBootstrap;
use dcAdmin;
use dcCore; use dcCore;
use dcFavorites; use Dotclear\Core\Backend\Favorites;
use dcNsProcess; use Dotclear\Core\Process;
use dcPage;
class Backend extends dcNsProcess class Backend extends Process
{ {
public static function init(): bool public static function init(): bool
{ {
static::$init = defined('DC_CONTEXT_ADMIN') return self::status(My::checkContext(My::BACKEND));
&& dcCore::app()->auth?->isSuperAdmin();
return static::$init;
} }
public static function process(): bool public static function process(): bool
{ {
if (!static::$init) { if (!self::status()) {
return false; return false;
} }
My::addBackendMenuItem();
dcCore::app()->addBehaviors([ dcCore::app()->addBehaviors([
'adminDashboardFavoritesV2' => function (dcFavorites $favs): void { 'adminDashboardFavoritesV2' => function (Favorites $favs): void {
$favs->register(My::id(), [ $favs->register(
My::id(),
[
'title' => My::name(), 'title' => My::name(),
'url' => dcCore::app()->adminurl?->get('admin.plugin.' . My::id()), 'url' => My::manageUrl(),
'small-icon' => dcPage::getPF(My::id() . '/icon.svg'), 'small-icon' => My::icons(),
'large-icon' => dcPage::getPF(My::id() . '/icon.svg'), 'large-icon' => My::icons(),
//'permissions' => dcCore::app()->auth->isSuperAdmin(), //'permissions' => null,
]); ]
);
}, },
'packmanBeforeCreatePackage' => function ($module) { 'packmanBeforeCreatePackage' => function ($module) {
if (Settings::init()->behavior_packman) { if (Settings::init()->behavior_packman) {
@ -53,14 +53,6 @@ class Backend extends dcNsProcess
}, },
]); ]);
dcCore::app()->menu[dcAdmin::MENU_PLUGINS]->addItem(
My::name(),
dcCore::app()->adminurl?->get('admin.plugin.' . My::id()),
dcPage::getPF(My::id() . '/icon.svg'),
preg_match('/' . preg_quote((string) dcCore::app()->adminurl?->get('admin.plugin.' . My::id())) . '(&.*)?$/', $_SERVER['REQUEST_URI']),
dcCore::app()->auth?->isSuperAdmin()
);
return true; return true;
} }
} }

View File

@ -15,8 +15,8 @@ declare(strict_types=1);
namespace Dotclear\Plugin\licenseBootstrap; namespace Dotclear\Plugin\licenseBootstrap;
use dcCore; use dcCore;
use dcPage; use Dotclear\Core\Backend\Notices;
use dcNsProcess; use Dotclear\Core\Process;
use Dotclear\Helper\Html\Form\{ use Dotclear\Helper\Html\Form\{
Checkbox, Checkbox,
Div, Div,
@ -29,19 +29,16 @@ use Dotclear\Helper\Html\Form\{
}; };
use Exception; use Exception;
class Config extends dcNsProcess class Config extends Process
{ {
public static function init(): bool public static function init(): bool
{ {
static::$init == defined('DC_CONTEXT_ADMIN') return self::status(My::checkContext(My::CONFIG));
&& dcCore::app()->auth?->isSuperAdmin();
return static::$init;
} }
public static function process(): bool public static function process(): bool
{ {
if (!static::$init) { if (!self::status()) {
return false; return false;
} }
@ -68,10 +65,10 @@ class Config extends dcNsProcess
$s->writeSetting('license_name', Utils::getName($license_name)); $s->writeSetting('license_name', Utils::getName($license_name));
$s->writeSetting('license_head', Utils::encode($license_head)); $s->writeSetting('license_head', Utils::encode($license_head));
dcPage::addSuccessNotice( Notices::addSuccessNotice(
__('Configuration has been successfully updated.') __('Configuration has been successfully updated.')
); );
dcCore::app()->adminurl?->redirect('admin.plugins', [ dcCore::app()->admin->url->redirect('admin.plugins', [
'module' => My::id(), 'module' => My::id(),
'conf' => '1', 'conf' => '1',
'redir' => dcCore::app()->admin->__get('list')->getRedir(), 'redir' => dcCore::app()->admin->__get('list')->getRedir(),
@ -85,7 +82,7 @@ class Config extends dcNsProcess
public static function render(): void public static function render(): void
{ {
if (!static::$init) { if (!self::status()) {
return; return;
} }

View File

@ -16,22 +16,19 @@ namespace Dotclear\Plugin\licenseBootstrap;
use dcCore; use dcCore;
use dcNamespace; use dcNamespace;
use dcNsProcess; use Dotclear\Core\Process;
use Exception; use Exception;
class Install extends dcNsProcess class Install extends Process
{ {
public static function init(): bool public static function init(): bool
{ {
static::$init = defined('DC_CONTEXT_ADMIN') return self::status(My::checkContext(My::INSTALL));
&& dcCore::app()->newVersion(My::id(), dcCore::app()->plugins->moduleInfo(My::id(), 'version'));
return static::$init;
} }
public static function process(): bool public static function process(): bool
{ {
if (!static::$init) { if (!self::status()) {
return false; return false;
} }

View File

@ -15,9 +15,12 @@ declare(strict_types=1);
namespace Dotclear\Plugin\licenseBootstrap; namespace Dotclear\Plugin\licenseBootstrap;
use dcCore; use dcCore;
use dcPage;
use dcThemes; use dcThemes;
use dcNsProcess; use Dotclear\Core\Backend\{
Notices,
Page
};
use Dotclear\Core\Process;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
use Dotclear\Helper\Html\Form\{ use Dotclear\Helper\Html\Form\{
Checkbox, Checkbox,
@ -31,19 +34,16 @@ use Dotclear\Helper\File\Path;
use Dotclear\Helper\Network\Http; use Dotclear\Helper\Network\Http;
use Exception; use Exception;
class Manage extends dcNsProcess class Manage extends Process
{ {
public static function init(): bool public static function init(): bool
{ {
static::$init = defined('DC_CONTEXT_ADMIN') return self::status(My::checkContext(My::MANAGE));
&& dcCore::app()->auth?->isSuperAdmin();
return static::$init;
} }
public static function process(): bool public static function process(): bool
{ {
if (!static::$init) { if (!self::status()) {
return false; return false;
} }
@ -75,13 +75,14 @@ class Manage extends dcNsProcess
Utils::addLicense($module); Utils::addLicense($module);
} }
dcPage::addSuccessNotice( Notices::addSuccessNotice(
__('License successfully added.') __('License successfully added.')
); );
Http::redirect( if (empty($_POST['redir'])) {
empty($_POST['redir']) ? My::redirect();
dcCore::app()->admin->getPageURL() : $_POST['redir'] } else {
); Http::redirect($_POST['redir']);
};
} catch(Exception $e) { } catch(Exception $e) {
dcCore::app()->error->add($e->getMessage()); dcCore::app()->error->add($e->getMessage());
} }
@ -91,28 +92,28 @@ class Manage extends dcNsProcess
public static function render(): void public static function render(): void
{ {
if (!static::$init) { if (!self::status()) {
return; return;
} }
$m = self::loadModules(); $m = self::loadModules();
# Display # Display
dcPage::openModule( Page::openModule(
My::name(), My::name(),
dcPage::jsPageTabs() . Page::jsPageTabs() .
dcPage::jsModuleLoad(My::id() . '/js/licensebootstrap.js') . My::jsLoad('licensebootstrap') .
# --BEHAVIOR-- licenseBootstrapAdminHeader # --BEHAVIOR-- licenseBootstrapAdminHeader
dcCore::app()->callBehavior('licenseBootstrapAdminHeader') dcCore::app()->callBehavior('licenseBootstrapAdminHeader')
); );
echo echo
dcPage::breadcrumb([ Page::breadcrumb([
__('Plugins') => '', __('Plugins') => '',
My::name() => '', My::name() => '',
]) . ]) .
dcPage::notices(); Notices::getNotices();
self::displayModulesList( self::displayModulesList(
$m['plugins']->getModules(), $m['plugins']->getModules(),
@ -126,9 +127,9 @@ class Manage extends dcNsProcess
__('Installed themes') __('Installed themes')
); );
dcPage::helpBlock('licenseBootstrap'); Page::helpBlock('licenseBootstrap');
dcPage::closeModule(); Page::closeModule();
} }
private static function displayModulesList(array $modules, string $type, string $title): void private static function displayModulesList(array $modules, string $type, string $title): void
@ -185,6 +186,7 @@ class Manage extends dcNsProcess
'<p class="checkboxes-helpers"></p>' . '<p class="checkboxes-helpers"></p>' .
(new Para())->items([ (new Para())->items([
(new Hidden(['redir'], empty($_REQUEST['redir']) ? '' : Html::escapeHTML($_REQUEST['redir']))), (new Hidden(['redir'], empty($_REQUEST['redir']) ? '' : Html::escapeHTML($_REQUEST['redir']))),
(new Hidden(['process'], 'Plugin')),
(new Hidden(['p'], My::id())), (new Hidden(['p'], My::id())),
(new Hidden(['type'], $type)), (new Hidden(['type'], $type)),
(new Hidden(['action'], 'addlicense')), (new Hidden(['action'], 'addlicense')),

View File

@ -15,38 +15,19 @@ declare(strict_types=1);
namespace Dotclear\Plugin\licenseBootstrap; namespace Dotclear\Plugin\licenseBootstrap;
use dcCore; use dcCore;
use Dotclear\Module\MyPlugin;
/** /**
* This module definitions. * This module definitions.
*/ */
class My class My extends MyPlugin
{ {
/** @var string Licenses default templates folder name */ /** @var string Licenses default templates folder name */
public const TEMPLATE_FOLDER = 'licenses'; public const TEMPLATE_FOLDER = 'licenses';
/** protected static function checkCustomContext(int $context): ?bool
* This module id.
*/
public static function id(): string
{ {
return basename(dirname(__DIR__)); return $context === My::INSTALL ? null :
} defined('DC_CONTEXT_ADMIN') && dcCore::app()->auth->isSuperAdmin();
/**
* This module name.
*/
public static function name(): string
{
$name = dcCore::app()->plugins->moduleInfo(self::id(), 'name');
return __(is_string($name) ? $name : self::id());
}
/**
* This module path.
*/
public static function path(): string
{
return dirname(__DIR__);
} }
} }

View File

@ -14,8 +14,6 @@ declare(strict_types=1);
namespace Dotclear\Plugin\licenseBootstrap; namespace Dotclear\Plugin\licenseBootstrap;
use dcCore;
class Settings class Settings
{ {
/** @var Settings self instance */ /** @var Settings self instance */
@ -53,7 +51,7 @@ class Settings
*/ */
public function __construct() public function __construct()
{ {
$s = dcCore::app()->blog?->settings->get(My::id()); $s = My::settings();
$this->hide_distrib = (bool) ($s?->get('hide_distrib') ?? false); $this->hide_distrib = (bool) ($s?->get('hide_distrib') ?? false);
$this->overwrite = (bool) ($s?->get('overwrite') ?? false); $this->overwrite = (bool) ($s?->get('overwrite') ?? false);
@ -91,8 +89,8 @@ class Settings
public function writeSetting(string $key, mixed $value): bool public function writeSetting(string $key, mixed $value): bool
{ {
if (property_exists($this, $key) && settype($value, gettype($this->{$key})) === true) { if (property_exists($this, $key) && settype($value, gettype($this->{$key})) === true) {
dcCore::app()->blog?->settings->get(My::id())->drop($key); My::settings()->drop($key);
dcCore::app()->blog?->settings->get(My::id())->put($key, $value, gettype($this->{$key}), '', true, true); My::settings()->put($key, $value, gettype($this->{$key}), '', true, true);
return true; return true;
} }

View File

@ -15,21 +15,19 @@ declare(strict_types=1);
namespace Dotclear\Plugin\licenseBootstrap; namespace Dotclear\Plugin\licenseBootstrap;
use dcCore; use dcCore;
use dcNsProcess; use Dotclear\Core\Process;
use Dotclear\Plugin\Uninstaller\Uninstaller; use Dotclear\Plugin\Uninstaller\Uninstaller;
class Uninstall extends dcNsProcess class Uninstall extends Process
{ {
public static function init(): bool public static function init(): bool
{ {
static::$init = defined('DC_CONTEXT_ADMIN'); return self::status(My::checkContext(My::UNINSTALL));
return static::$init;
} }
public static function process(): bool public static function process(): bool
{ {
if (!static::$init || !dcCore::app()->plugins->moduleExists('Uninstaller')) { if (!self::status() || !dcCore::app()->plugins->moduleExists('Uninstaller')) {
return false; return false;
} }

View File

@ -34,10 +34,6 @@ class Utils
*/ */
public static function addLicense(array $module): void public static function addLicense(array $module): void
{ {
if (is_null(dcCore::app()->auth)) {
return;
}
$s = Settings::init(); $s = Settings::init();
# --BEHAVIOR-- licenseBootstrapBeforeAddLicense # --BEHAVIOR-- licenseBootstrapBeforeAddLicense