Compare commits

..

2 Commits

Author SHA1 Message Date
Jean-Christian Paul Denis 2a7a365eea
release 2023.08.06 2023-08-06 23:09:18 +02:00
Jean-Christian Paul Denis 5687b72e5f
upgrade to Dotclear 2.27 2023-08-06 23:08:44 +02:00
10 changed files with 115 additions and 143 deletions

View File

@ -1,44 +1,64 @@
2023.05.13 dcLatestVersions 2023.08.06
- require dotclear 2.26 ===========================================================
- release for dotclear 2.26 stable * Require Dotclear 2.27
* Require PHP7.4+
* Upgrade to Dotclear 2.27
* Move third party repository
* Use Dotclear style for changelog
* Change user pref to plugin ID (breaking)
* Change widget id to plugin ID (breaking)
2023.04.23 dcLatestVersions 2023.05.13
- require dotclear 2.26 ===========================================================
- use latest dotclear namespace * require dotclear 2.26
- add plugin Uninstaller features * release for dotclear 2.26 stable
- remove magic
- fix nullsafe warnings
2023.03.26 dcLatestVersions 2023.04.23
- require dotclear 2.26 ===========================================================
- use namespace * require dotclear 2.26
* use latest dotclear namespace
* add plugin Uninstaller features
* remove magic
* fix nullsafe warnings
2022.12.20 dcLatestVersions 2023.03.26
- change plugin name ===========================================================
- use anonymous functions * require dotclear 2.26
- use abstract plugin name * use namespace
- fix install
2022.11.20 dcLatestVersions 2022.12.20
- fix compatibility with Dotclear 2.24 (required) ===========================================================
* change plugin name
* use anonymous functions
* use abstract plugin name
* fix install
2021.08.27 dcLatestVersions 2022.11.20
- cleanup (PSR2,short array, ...) ===========================================================
- enhance widget style * fix compatibility with Dotclear 2.24 (required)
- update license
2020.09.18 - Pierre Van Glabeke dcLatestVersions 2021.08.27
- modif admin.php (merci à nanart) ===========================================================
* cleanup (PSR2,short array, ...)
* enhance widget style
* update license
2015.03.11 - Pierre Van Glabeke dcLatestVersions 2020.09.18 - Pierre Van Glabeke
- ajout mode hors ligne et codage titre widget (widget) ===========================================================
- encodage UNIX (LF) * modif admin.php (merci à nanart)
- modif url de support
- modifs localisation
- suppression icône
2013.11.18 - Jean-Christian Denis dcLatestVersions 2015.03.11 - Pierre Van Glabeke
- First hg release ===========================================================
* ajout mode hors ligne et codage titre widget (widget)
* encodage UNIX (LF)
* modif url de support
* modifs localisation
* suppression icône
2013.07.22 - Jean-Christian Denis dcLatestVersions 2013.11.18 - Jean-Christian Denis
- First release ===========================================================
* First hg release
dcLatestVersions 2013.07.22 - Jean-Christian Denis
===========================================================
* First release

View File

@ -1,11 +1,11 @@
# README # README
[![Release](https://img.shields.io/github/v/release/JcDenis/dcLatestVersions)](https://github.com/JcDenis/dcLatestVersions/releases) [![Release](https://img.shields.io/github/v/release/JcDenis/dcLatestVersions)](https://git.dotclear.watch/JcDenis/dcLatestVersions/releases)
[![Date](https://img.shields.io/github/release-date/JcDenis/dcLatestVersions)](https://github.com/JcDenis/dcLatestVersions/releases) [![Date](https://img.shields.io/github/release-date/JcDenis/dcLatestVersions)](https://git.dotclear.watch/JcDenis/dcLatestVersions/releases)
[![Issues](https://img.shields.io/github/issues/JcDenis/dcLatestVersions)](https://github.com/JcDenis/dcLatestVersions/issues) [![Issues](https://img.shields.io/github/issues/JcDenis/dcLatestVersions)](https://git.dotclear.watch/JcDenis/dcLatestVersions/issues)
[![Dotclear](https://img.shields.io/badge/dotclear-v2.26-blue.svg)](https://fr.dotclear.org/download) [![Dotclear](https://img.shields.io/badge/dotclear-v2.27-blue.svg)](https://fr.dotclear.org/download)
[![Dotaddict](https://img.shields.io/badge/dotaddict-official-green.svg)](https://plugins.dotaddict.org/dc2/details/dcLatestVersions) [![Dotaddict](https://img.shields.io/badge/dotaddict-official-green.svg)](https://plugins.dotaddict.org/dc2/details/dcLatestVersions)
[![License](https://img.shields.io/github/license/JcDenis/dcLatestVersions)](https://github.com/JcDenis/dcLatestVersions/blob/master/LICENSE) [![License](https://img.shields.io/github/license/JcDenis/dcLatestVersions)](https://git.dotclear.watch/JcDenis/dcLatestVersions/blob/master/LICENSE)
## WHAT IS DCLATESTVERSION ? ## WHAT IS DCLATESTVERSION ?
@ -16,14 +16,14 @@ Simply show visitors last versions of nightly build of Dotclear.
## REQUIREMENTS ## REQUIREMENTS
dcLatestVersions requires: _dcLatestVersions_ requires:
* permissions to manage widgets * permissions to manage widgets
* Dotclear 2.26 * Dotclear 2.27
## USAGE ## USAGE
First install dcLatestVersions, manualy from a zip package or from First install _dcLatestVersions_, manualy 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)
Add and configure "Dotclear's latest versions" from widgets manager. Add and configure "Dotclear's latest versions" from widgets manager.
@ -31,11 +31,13 @@ You can add a dashboard item by enable it from your dashboard preferences.
## MORE ## MORE
* License : GNU GPL v2 * License : GNU GPL v2
* Source & contribution : [GitHub Page](https://github.com/JcDenis/dcLatestVersions) * Source & contribution : [Gitea Page](https://git.dotclear.watch/JcDenis/dcLatestVersion) or [GitHub Page](https://github.com/JcDenis/dcLatestVersions)
* Packages & details: [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/dcLatestVersions) * Packages & details: [Gitea Page](https://git.dotclear.watch/JcDenis/dcLatestVersion/releases) or [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/dcLatestVersions)
## CONTRIBUTORS ## CONTRIBUTORS
* Jean-Chirstian Denis * Jean-Chirstian Denis
* Pierre Van Glabeke * Pierre Van Glabeke
You are welcome to contribute to this code.

View File

@ -10,7 +10,7 @@
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH') || is_null(dcCore::app()->auth)) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -18,16 +18,16 @@ $this->registerModule(
"Dotclear's latest versions", "Dotclear's latest versions",
'Show the latest available versions of Dotclear', 'Show the latest available versions of Dotclear',
'Jean-Christian Denis, Pierre Van Glabeke', 'Jean-Christian Denis, Pierre Van Glabeke',
'2023.05.13', '2023.08.06',
[ [
'requires' => [['core', '2.26']], 'requires' => [['core', '2.27']],
'permissions' => dcCore::app()->auth->makePermissions([ 'permissions' => dcCore::app()->auth->makePermissions([
dcCore::app()->auth::PERMISSION_USAGE, dcCore::app()->auth::PERMISSION_USAGE,
dcCore::app()->auth::PERMISSION_CONTENT_ADMIN, dcCore::app()->auth::PERMISSION_CONTENT_ADMIN,
]), ]),
'type' => 'plugin', 'type' => 'plugin',
'support' => 'http://forum.dotclear.org/viewforum.php?id=16', 'support' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/issues',
'details' => 'http://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="dcLatestVersions"> <module id="dcLatestVersions">
<name>Dotclear's latest versions</name> <name>Dotclear's latest versions</name>
<version>2023.05.13</version> <version>2023.08.06</version>
<author>Jean-Christian Denis, Pierre Van Glabeke</author> <author>Jean-Christian Denis, Pierre Van Glabeke</author>
<desc>Show the latest available versions of Dotclear</desc> <desc>Show the latest available versions of Dotclear</desc>
<file>https://github.com/JcDenis/dcLatestVersions/releases/download/v2023.05.13/plugin-dcLatestVersions.zip</file> <file>https://gitea.dotclear.watch/JcDenis/dcLatestVersions/releases/download/v2023.08.06/plugin-dcLatestVersions.zip</file>
<da:dcmin>2.26</da:dcmin> <da:dcmin>2.27</da:dcmin>
<da:details>http://plugins.dotaddict.org/dc2/details/dcLatestVersions</da:details> <da:details>https://git.dotclear.watch/JcDenis/dcLatestVersions/src/branch/master/README.md</da:details>
<da:support>http://forum.dotclear.org/viewforum.php?id=16</da:support> <da:support>https://git.dotclear.watch/JcDenis/dcLatestVersions/issues</da:support>
</module> </module>
</modules> </modules>

View File

@ -16,8 +16,8 @@ namespace Dotclear\Plugin\dcLatestVersions;
use ArrayObject; use ArrayObject;
use dcCore; use dcCore;
use dcNsProcess;
use dcUpdate; use dcUpdate;
use Dotclear\Core\Process;
use Dotclear\Helper\Html\Form\{ use Dotclear\Helper\Html\Form\{
Checkbox, Checkbox,
Label, Label,
@ -25,18 +25,16 @@ use Dotclear\Helper\Html\Form\{
}; };
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
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));
return static::$init;
} }
public static function process(): bool public static function process(): bool
{ {
if (!static::$init) { if (!self::status()) {
return false; return false;
} }
@ -44,15 +42,15 @@ class Backend extends dcNsProcess
'initWidgets' => [Widgets::class, 'initWidgets'], 'initWidgets' => [Widgets::class, 'initWidgets'],
'adminDashboardItemsV2' => function (ArrayObject $__dashboard_items): void { 'adminDashboardItemsV2' => function (ArrayObject $__dashboard_items): void {
// nullsafe PHP < 8.0 // nullsafe PHP < 8.0
if (is_null(dcCore::app()->auth) || is_null(dcCore::app()->auth->user_prefs) || is_null(dcCore::app()->blog)) { if (is_null(dcCore::app()->blog)) {
return; return;
} }
if (!dcCore::app()->auth->user_prefs->get('dashboard')->get('dcLatestVersionsItems')) { if (!My::prefs()->get('dashboard_items')) {
return; return;
} }
$builds = explode(',', (string) dcCore::app()->blog->settings->get(My::id())->get('builds')); $builds = explode(',', (string) My::settings()->get('builds'));
if (empty($builds[0])) { if (empty($builds[0])) {
return; return;
} }
@ -97,14 +95,9 @@ class Backend extends dcNsProcess
}, },
'adminDashboardOptionsFormV2' => function (): void { 'adminDashboardOptionsFormV2' => function (): void {
// nullsafe PHP < 8.0 if (!My::prefs()->prefExists('dashboard_items')) {
if (is_null(dcCore::app()->auth) || is_null(dcCore::app()->auth->user_prefs)) { My::prefs()->put(
return; 'dashboard_items',
}
if (!dcCore::app()->auth->user_prefs->get('dashboard')->prefExists('dcLatestVersionsItems')) {
dcCore::app()->auth->user_prefs->get('dashboard')->put(
'dcLatestVersionsItems',
false, false,
'boolean' 'boolean'
); );
@ -115,10 +108,10 @@ class Backend extends dcNsProcess
'<h4>' . Html::escapeHTML(My::name()) . '</h4>' . '<h4>' . Html::escapeHTML(My::name()) . '</h4>' .
(new Para()) (new Para())
->__call('items', [[ ->__call('items', [[
(new Checkbox('dcLatestVersionsItems', (bool) dcCore::app()->auth->user_prefs->get('dashboard')->get('dcLatestVersionsItems'))) (new Checkbox(My::id() . 'dashboard_items', (bool) My::prefs()->get('dashboard_items')))
->__call('value', [1]), ->__call('value', [1]),
(new Label(__("Show Dotclear's latest versions on dashboards."), Label::OUTSIDE_LABEL_AFTER)) (new Label(__("Show Dotclear's latest versions on dashboards."), Label::OUTSIDE_LABEL_AFTER))
->__call('for', ['dcLatestVersionsItems']) ->__call('for', [My::id() . 'dashboard_items'])
->__call('class', ['classic']), ->__call('class', ['classic']),
]]) ]])
->render() . ->render() .
@ -126,14 +119,9 @@ class Backend extends dcNsProcess
}, },
'adminAfterDashboardOptionsUpdate' => function (?string $user_id): void { 'adminAfterDashboardOptionsUpdate' => function (?string $user_id): void {
// nullsafe PHP < 8.0 My::prefs()->put(
if (is_null(dcCore::app()->auth) || is_null(dcCore::app()->auth->user_prefs)) { 'dashboard_items',
return; !empty($_POST[My::id() . 'dashboard_items']),
}
dcCore::app()->auth->user_prefs->get('dashboard')->put(
'dcLatestVersionsItems',
!empty($_POST['dcLatestVersionsItems']),
'boolean' 'boolean'
); );
}, },

View File

@ -15,20 +15,18 @@ declare(strict_types=1);
namespace Dotclear\Plugin\dcLatestVersions; namespace Dotclear\Plugin\dcLatestVersions;
use dcCore; use dcCore;
use dcNsProcess; use Dotclear\Core\Process;
class Frontend extends dcNsProcess class Frontend extends Process
{ {
public static function init(): bool public static function init(): bool
{ {
static::$init = defined('DC_RC_PATH'); return self::status(My::checkContext(My::FRONTEND));
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

@ -14,31 +14,22 @@ declare(strict_types=1);
namespace Dotclear\Plugin\dcLatestVersions; namespace Dotclear\Plugin\dcLatestVersions;
use dcCore; use Dotclear\Core\Process;
use dcNsProcess;
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;
} }
// nullsafe PHP < 8.0 My::settings()->put(
if (is_null(dcCore::app()->blog)) {
return false;
}
dcCore::app()->blog->settings->get(My::id())->put(
'builds', 'builds',
'stable,unstable,testing', 'stable,unstable,testing',
'string', 'string',

View File

@ -14,36 +14,11 @@ declare(strict_types=1);
namespace Dotclear\Plugin\dcLatestVersions; namespace Dotclear\Plugin\dcLatestVersions;
use dcCore; use Dotclear\Module\MyPlugin;
/** /**
* This module definitions. * This module definitions.
*/ */
class My class My extends MyPlugin
{ {
/**
* This module id.
*/
public static function id(): string
{
return basename(dirname(__DIR__));
}
/**
* 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

@ -15,21 +15,19 @@ declare(strict_types=1);
namespace Dotclear\Plugin\dcLatestVersions; namespace Dotclear\Plugin\dcLatestVersions;
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

@ -26,7 +26,7 @@ class Widgets
{ {
$w $w
->create( ->create(
'dclatestversionswidget', My::id() . 'widget',
My::name(), My::name(),
[self::class, 'parseWidget'], [self::class, 'parseWidget'],
null, null,
@ -59,7 +59,7 @@ class Widgets
} }
# Builds to check # Builds to check
$builds = explode(',', (string) dcCore::app()->blog->settings->get(My::id())->get('builds')); $builds = explode(',', (string) My::settings()->get('builds'));
if (empty($builds[0])) { if (empty($builds[0])) {
return ''; return '';
} }
@ -104,7 +104,7 @@ class Widgets
# Display # Display
return $w->renderDiv( return $w->renderDiv(
(bool) $w->__get('content_only'), (bool) $w->__get('content_only'),
'dclatestversionswidget ' . $w->__get('class'), My::id() . 'widget ' . $w->__get('class'),
'', '',
($w->__get('title') ? $w->renderTitle(Html::escapeHTML($w->__get('title'))) : '') . sprintf('<ul>%s</ul>', implode('', $li)) ($w->__get('title') ? $w->renderTitle(Html::escapeHTML($w->__get('title'))) : '') . sprintf('<ul>%s</ul>', implode('', $li))
); );