upgrade to Dotclear 2.28

master v1.5
Jean-Christian Paul Denis 2023-10-16 23:09:29 +02:00
parent 6eac8b1853
commit ed0ca29b7c
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
13 changed files with 183 additions and 231 deletions

View File

@ -1,3 +1,9 @@
fac 1.5 - 2023.10.16
===========================================================
* Require Dotclear 2.28
* Require PHP 8.1+
* Upgrade to Dotclear 2.28
fac 1.4 - 2023.08.12 fac 1.4 - 2023.08.12
=========================================================== ===========================================================
* Require Dotclear 2.27 * Require Dotclear 2.27

View File

@ -1,29 +1,25 @@
# README # README
[![Release](https://img.shields.io/badge/release-1.4-a2cbe9.svg)](https://git.dotclear.watch/JcDenis/fac/releases) [![Release](https://img.shields.io/badge/release-1.5-a2cbe9.svg)](https://git.dotclear.watch/JcDenis/fac/releases)
[![Date](https://img.shields.io/badge/date-2023.08.12-c44d58.svg)](https://git.dotclear.watch/JcDenis/fac/releases) ![Date](https://img.shields.io/badge/date-2023.10.16-c44d58.svg)
[![Dotclear](https://img.shields.io/badge/dotclear-v2.27-137bbb.svg)](https://fr.dotclear.org/download) [![Dotclear](https://img.shields.io/badge/dotclear-v2.28-137bbb.svg)](https://fr.dotclear.org/download)
[![Dotaddict](https://img.shields.io/badge/dotaddict-official-9ac123.svg)](https://plugins.dotaddict.org/dc2/details/fac) [![Dotaddict](https://img.shields.io/badge/dotaddict-official-9ac123.svg)](https://plugins.dotaddict.org/dc2/details/fac)
[![License](https://img.shields.io/github/license/JcDenis/fac)](https://git.dotclear.watch/JcDenis/fac/blob/master/LICENSE) [![License](https://img.shields.io/badge/license-GPL--2.0-ececec.svg)](https://git.dotclear.watch/JcDenis/fac/src/branch/master/LICENSE)
## WHAT IS FAC ? ## ABOUT
_fac_ "Feed After Content" is a plugin for the open-source _fac_ is a plugin for the open-source web publishing software called [Dotclear](https://www.dotclear.org).
web publishing software called Dotclear.
It add options to the sidebar of post edition page > Add options to the sidebar of post edition page to link en extenal feed to the bottom of an entry.
to link en extenal feed to the bottom of an entry.
## REQUIREMENTS ## REQUIREMENTS
_fac_ requires: * Dotclear 2.28
* PHP 8.1+
* superadmin to configure feeds formats
* admin permissions to configure plugin
* usage,contentadmin permissions to link feeds
* Dotclear 2.27
* PHP 7.4+
* A theme that contents behavior publicEntryAfterContent * A theme that contents behavior publicEntryAfterContent
* Dotclear superadmin to configure feeds formats
* Dotclear admin permissions to configure plugin
* Dotclear usage or contentadmin permissions to link feeds
## USAGE ## USAGE
@ -41,12 +37,13 @@ This plugins also supports pages from plugin "muppet".
## LINKS ## LINKS
* License : [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.html) * [License](https://git.dotclear.watch/JcDenis/fac/src/branch/master/LICENSE)
* Source & contribution : [Gitea Page](https://git.dotclear.watch/JcDenis/fac) or [GitHub Page](https://github.com/JcDenis/fac) * [Packages & details](https://git.dotclear.watch/JcDenis/fac/releases) (or on [Dotaddict](https://plugins.dotaddict.org/dc2/details/fac))
* Packages & details: [Gitea Page](https://git.dotclear.watch/JcDenis/fac/releases) or [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/fac) * [Sources & contributions](https://git.dotclear.watch/JcDenis/fac) (or on [GitHub](https://github.com/JcDenis/fac))
* [Issues & security](https://git.dotclear.watch/JcDenis/fac/issues) (or on [GitHub](https://github.com/JcDenis/fac/issues))
## 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

@ -1,33 +1,27 @@
<?php <?php
/** /**
* @brief fac, a plugin for Dotclear 2 * @file
* @brief The plugin fac definition
* @ingroup fac
* *
* @package Dotclear * @defgroup fac Plugin fac.
* @subpackage Plugin
* *
* @author Jean-Christian Denis and Contributors * Add RSS/Atom feeds after entries content.
* *
* @copyright Jean-Christian Denis * @author Jean-Christian Denis (author)
* @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')) { declare(strict_types=1);
return null;
}
$this->registerModule( $this->registerModule(
'Feed after content', 'Feed after content',
'Add RSS/Atom feeds after entries content', 'Add RSS/Atom feeds after entries content',
'Jean-Christian Denis and Contributors', 'Jean-Christian Denis and Contributors',
'1.4', '1.5',
[ [
'requires' => [['core', '2.27']], 'requires' => [['core', '2.28']],
'permissions' => dcCore::app()->auth->makePermissions([ 'permissions' => 'My',
dcAuth::PERMISSION_USAGE, 'settings' => ['blog' => '#params.' . basename(__DIR__) . '_params'],
dcAuth::PERMISSION_CONTENT_ADMIN,
]),
'settings' => [
'blog' => '#params.' . basename(__DIR__) . '_params',
],
'type' => 'plugin', 'type' => 'plugin',
'support' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/issues', 'support' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/issues',
'details' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/src/branch/master/README.md', 'details' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/src/branch/master/README.md',

View File

@ -5,7 +5,7 @@
<version>1.4</version> <version>1.4</version>
<author>Jean-Christian Denis and Contributors</author> <author>Jean-Christian Denis and Contributors</author>
<desc>Add RSS/Atom feeds after entries content</desc> <desc>Add RSS/Atom feeds after entries content</desc>
<file>https://git.dotclear.watch/JcDenis/fac/releases/download/v1.4/plugin-fac.zip</file> <file>https://github.com/JcDenis/fac/releases/download/v1.4/plugin-fac.zip</file>
<da:dcmin>2.27</da:dcmin> <da:dcmin>2.27</da:dcmin>
<da:details>https://git.dotclear.watch/JcDenis/fac/src/branch/master/README.md</da:details> <da:details>https://git.dotclear.watch/JcDenis/fac/src/branch/master/README.md</da:details>
<da:support>https://git.dotclear.watch/JcDenis/fac/issues</da:support> <da:support>https://git.dotclear.watch/JcDenis/fac/issues</da:support>

View File

@ -1,17 +1,10 @@
<?php <?php
/** /**
* @brief fac, a plugin for Dotclear 2 * @file
* @brief The plugin fac resources
* @ingroup fac
* *
* @package Dotclear * @author Jean-Christian Denis
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @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')) { \Dotclear\App::backend()->resources()->set('help', 'fac', __DIR__ . '/help/fac.html');
return;
}
dcCore::app()->resources['help']['fac'] = __DIR__ . '/help/fac.html';

View File

@ -1,17 +1,10 @@
<?php <?php
/** /**
* @brief fac, a plugin for Dotclear 2 * @file
* @brief The plugin fac resources
* @ingroup fac
* *
* @package Dotclear * @author Jean-Christian Denis
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @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')) { \Dotclear\App::backend()->resources()->set('help', 'fac', __DIR__ . '/help/fac.html');
return;
}
dcCore::app()->resources['help']['fac'] = __DIR__ . '/help/fac.html';

View File

@ -1,22 +1,19 @@
<?php <?php
/**
* @brief fac, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
declare(strict_types=1); declare(strict_types=1);
namespace Dotclear\Plugin\fac; namespace Dotclear\Plugin\fac;
use dcCore; use Dotclear\App;
use Dotclear\Core\Process; use Dotclear\Core\Process;
/**
* @brief fac backend class.
* @ingroup fac
*
* @author Jean-Christian Denis (author)
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Backend extends Process class Backend extends Process
{ {
public static function init(): bool public static function init(): bool
@ -30,15 +27,15 @@ class Backend extends Process
return false; return false;
} }
dcCore::app()->addBehaviors([ App::behavior()->addBehaviors([
'adminBlogPreferencesFormV2' => [BackendBehaviors::class, 'adminBlogPreferencesFormV2'], 'adminBlogPreferencesFormV2' => BackendBehaviors::adminBlogPreferencesFormV2(...),
'adminBeforeBlogSettingsUpdate' => [BackendBehaviors::class, 'adminBeforeBlogSettingsUpdate'], 'adminBeforeBlogSettingsUpdate' => BackendBehaviors::adminBeforeBlogSettingsUpdate(...),
'adminPostHeaders' => [BackendBehaviors::class, 'adminPostHeaders'], 'adminPostHeaders' => BackendBehaviors::adminPostHeaders(...),
'adminPostFormItems' => [BackendBehaviors::class, 'adminPostFormItems'], 'adminPostFormItems' => BackendBehaviors::adminPostFormItems(...),
'adminAfterPostCreate' => [BackendBehaviors::class, 'adminAfterPostSave'], 'adminAfterPostCreate' => BackendBehaviors::adminAfterPostSave(...),
'adminAfterPostUpdate' => [BackendBehaviors::class, 'adminAfterPostSave'], 'adminAfterPostUpdate' => BackendBehaviors::adminAfterPostSave(...),
'adminBeforePostDelete' => [BackendBehaviors::class, 'adminBeforePostDelete'], 'adminBeforePostDelete' => BackendBehaviors::adminBeforePostDelete(...),
'adminPostsActions' => [BackendBehaviors::class, 'adminPostsActions'], 'adminPostsActions' => BackendBehaviors::adminPostsActions(...),
]); ]);
return true; return true;

View File

@ -1,22 +1,11 @@
<?php <?php
/**
* @brief fac, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
declare(strict_types=1); declare(strict_types=1);
namespace Dotclear\Plugin\fac; namespace Dotclear\Plugin\fac;
use ArrayObject; use ArrayObject;
use dcCore; use Dotclear\App;
use dcSettings;
use Dotclear\Core\Backend\{ use Dotclear\Core\Backend\{
Notices, Notices,
Page Page
@ -40,12 +29,15 @@ use Dotclear\Helper\Html\Form\{
Submit, Submit,
Text Text
}; };
use Dotclear\Interface\Core\BlogSettingsInterface;
use Exception; use Exception;
/** /**
* @ingroup DC_PLUGIN_FAC * @brief fac backend behaviors class.
* @brief Linked feed to entries - admin methods. * @ingroup fac
* @since 2.6 *
* @author Jean-Christian Denis (author)
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class BackendBehaviors class BackendBehaviors
{ {
@ -64,7 +56,7 @@ class BackendBehaviors
__('category pages') => 'category', __('category pages') => 'category',
__('entries feed') => 'feed', __('entries feed') => 'feed',
]; ];
if (dcCore::app()->plugins->getDefine('muppet')->isDefined() && class_exists('\muppet')) { if (App::plugins()->getDefine('muppet')->isDefined() && class_exists('\muppet')) {
foreach (\muppet::getPostTypes() as $k => $v) { foreach (\muppet::getPostTypes() as $k => $v) {
$types[sprintf( $types[sprintf(
__('"%s" pages from extension muppet'), __('"%s" pages from extension muppet'),
@ -81,7 +73,7 @@ class BackendBehaviors
* *
* @param dcSettings $blog_settings dcSettings instance * @param dcSettings $blog_settings dcSettings instance
*/ */
public static function adminBlogPreferencesFormV2(dcSettings $blog_settings): void public static function adminBlogPreferencesFormV2(BlogSettingsInterface $blog_settings): void
{ {
$lines = ''; $lines = '';
$fac_public_tpltypes = json_decode($blog_settings->get(My::id())->get('public_tpltypes'), true); $fac_public_tpltypes = json_decode($blog_settings->get(My::id())->get('public_tpltypes'), true);
@ -100,11 +92,11 @@ class BackendBehaviors
'<p class="form-note">' . '<p class="form-note">' .
__('To add feed to an entry edit this entry and put in sidebar the url of the feed and select a format.') . __('To add feed to an entry edit this entry and put in sidebar the url of the feed and select a format.') .
'</p>'; '</p>';
if (dcCore::app()->auth->isSuperAdmin()) { if (App::auth()->isSuperAdmin()) {
echo '<p><a href="' . dcCore::app()->admin->url->get('admin.plugins', [ echo '<p><a href="' . App::backend()->url()->get('admin.plugins', [
'module' => My::id(), 'module' => My::id(),
'conf' => 1, 'conf' => 1,
'redir' => dcCore::app()->admin->url->get('admin.blog.pref') . '#params.' . My::id() . '_params', 'redir' => App::backend()->url()->get('admin.blog.pref') . '#params.' . My::id() . '_params',
]) . '">' . __('Configure formats') . '</a></p>'; ]) . '">' . __('Configure formats') . '</a></p>';
} }
@ -145,7 +137,7 @@ class BackendBehaviors
* *
* @param dcSettings $blog_settings dcSettings instance * @param dcSettings $blog_settings dcSettings instance
*/ */
public static function adminBeforeBlogSettingsUpdate(dcSettings $blog_settings): void public static function adminBeforeBlogSettingsUpdate(BlogSettingsInterface $blog_settings): void
{ {
$blog_settings->get(My::id())->put('active', !empty($_POST['fac_active'])); $blog_settings->get(My::id())->put('active', !empty($_POST['fac_active']));
$blog_settings->get(My::id())->put('public_tpltypes', json_encode($_POST['fac_public_tpltypes'])); $blog_settings->get(My::id())->put('public_tpltypes', json_encode($_POST['fac_public_tpltypes']));
@ -172,21 +164,21 @@ class BackendBehaviors
*/ */
public static function adminPostFormItems(ArrayObject $main_items, ArrayObject $sidebar_items, ?MetaRecord $post): void public static function adminPostFormItems(ArrayObject $main_items, ArrayObject $sidebar_items, ?MetaRecord $post): void
{ {
if (is_null(dcCore::app()->blog) || !My::settings()->get('active')) { if (!App::blog()->isDefined() || !My::settings()->get('active')) {
return; return;
} }
# Get existing linked feed # Get existing linked feed
$fac_url = $fac_format = ''; $fac_url = $fac_format = '';
if ($post) { if ($post) {
$rs = dcCore::app()->meta->getMetadata([ $rs = App::meta()->getMetadata([
'meta_type' => 'fac', 'meta_type' => 'fac',
'post_id' => $post->f('post_id'), 'post_id' => $post->f('post_id'),
'limit' => 1, 'limit' => 1,
]); ]);
$fac_url = $rs->isEmpty() ? '' : $rs->f('meta_id'); $fac_url = $rs->isEmpty() ? '' : $rs->f('meta_id');
$rs = dcCore::app()->meta->getMetadata([ $rs = App::meta()->getMetadata([
'meta_type' => 'facformat', 'meta_type' => 'facformat',
'post_id' => $post->f('post_id'), 'post_id' => $post->f('post_id'),
'limit' => 1, 'limit' => 1,
@ -235,24 +227,24 @@ class BackendBehaviors
*/ */
public static function adminPostsActions(ActionsPosts $pa): void public static function adminPostsActions(ActionsPosts $pa): void
{ {
if (is_null(dcCore::app()->blog) || !My::settings()->get('active')) { if (!App::blog()->isDefined() || !My::settings()->get('active')) {
return; return;
} }
$pa->addAction( $pa->addAction(
[__('Linked feed') => [__('Add feed') => 'fac_add']], [__('Linked feed') => [__('Add feed') => 'fac_add']],
[self::class, 'callbackAdd'] self::callbackAdd(...)
); );
if (!dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([ if (!App::auth()->check(App::auth()->makePermissions([
dcCore::app()->auth::PERMISSION_DELETE, App::auth()::PERMISSION_DELETE,
dcCore::app()->auth::PERMISSION_CONTENT_ADMIN, App::auth()::PERMISSION_CONTENT_ADMIN,
]), dcCore::app()->blog->id)) { ]), App::blog()->id())) {
return; return;
} }
$pa->addAction( $pa->addAction(
[__('Linked feed') => [__('Remove feed') => 'fac_remove']], [__('Linked feed') => [__('Remove feed') => 'fac_remove']],
[self::class, 'callbackRemove'] self::callbackRemove(...)
); );
} }
@ -264,7 +256,7 @@ class BackendBehaviors
*/ */
public static function callbackRemove(ActionsPosts $pa, ArrayObject $post): void public static function callbackRemove(ActionsPosts $pa, ArrayObject $post): void
{ {
if (is_null(dcCore::app()->blog)) { if (!App::blog()->isDefined()) {
return; return;
} }
# No entry # No entry
@ -274,10 +266,10 @@ class BackendBehaviors
} }
# No right # No right
if (!dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([ if (!App::auth()->check(App::auth()->makePermissions([
dcCore::app()->auth::PERMISSION_DELETE, App::auth()::PERMISSION_DELETE,
dcCore::app()->auth::PERMISSION_CONTENT_ADMIN, App::auth()::PERMISSION_CONTENT_ADMIN,
]), dcCore::app()->blog->id)) { ]), App::blog()->id())) {
throw new Exception(__('No enough right')); throw new Exception(__('No enough right'));
} }
@ -298,7 +290,7 @@ class BackendBehaviors
*/ */
public static function callbackAdd(ActionsPosts $pa, ArrayObject $post): void public static function callbackAdd(ActionsPosts $pa, ArrayObject $post): void
{ {
if (is_null(dcCore::app()->blog)) { if (!App::blog()->isDefined()) {
return; return;
} }
# No entry # No entry
@ -322,7 +314,7 @@ class BackendBehaviors
} else { } else {
$pa->beginPage( $pa->beginPage(
Page::breadcrumb([ Page::breadcrumb([
Html::escapeHTML(dcCore::app()->blog->name) => '', Html::escapeHTML(App::blog()->name()) => '',
$pa->getCallerTitle() => $pa->getRedirection(true), $pa->getCallerTitle() => $pa->getRedirection(true),
__('Linked feed to this selection') => '', __('Linked feed to this selection') => '',
]) ])
@ -332,7 +324,8 @@ class BackendBehaviors
(new Form('fac_form'))->action($pa->getURI())->method('post')->fields([ (new Form('fac_form'))->action($pa->getURI())->method('post')->fields([
(new Text('', $pa->getCheckboxes() . self::formFeed())), (new Text('', $pa->getCheckboxes() . self::formFeed())),
(new Para())->items([ (new Para())->items([
(new Text('', dcCore::app()->formNonce() . $pa->getHiddenFields())), App::nonce()->formNonce(),
... $pa->giddenFields(),
(new Hidden(['action'], 'fac_add')), (new Hidden(['action'], 'fac_add')),
(new Submit(['save']))->value(__('Save')), (new Submit(['save']))->value(__('Save')),
]), ]),
@ -351,7 +344,7 @@ class BackendBehaviors
*/ */
protected static function formFeed(string $url = '', string $format = ''): string protected static function formFeed(string $url = '', string $format = ''): string
{ {
if (is_null(dcCore::app()->blog) || !My::settings()->get('active')) { if (!App::blog()->isDefined() || !My::settings()->get('active')) {
return ''; return '';
} }
@ -379,7 +372,7 @@ class BackendBehaviors
*/ */
protected static function comboFac(): array protected static function comboFac(): array
{ {
if (is_null(dcCore::app()->blog)) { if (!App::blog()->isDefined()) {
return []; return [];
} }
$formats = json_decode((string) My::settings()->get('formats'), true); $formats = json_decode((string) My::settings()->get('formats'), true);
@ -403,8 +396,8 @@ class BackendBehaviors
protected static function delFeed(int $post_id): void protected static function delFeed(int $post_id): void
{ {
$post_id = (int) $post_id; $post_id = (int) $post_id;
dcCore::app()->meta->delPostMeta($post_id, 'fac'); App::meta()->delPostMeta($post_id, 'fac');
dcCore::app()->meta->delPostMeta($post_id, 'facformat'); App::meta()->delPostMeta($post_id, 'facformat');
} }
/** /**
@ -422,12 +415,12 @@ class BackendBehaviors
$post_id = (int) $post_id; $post_id = (int) $post_id;
dcCore::app()->meta->setPostMeta( App::meta()->setPostMeta(
$post_id, $post_id,
'fac', 'fac',
$options['fac_url'] $options['fac_url']
); );
dcCore::app()->meta->setPostMeta( App::meta()->setPostMeta(
$post_id, $post_id,
'facformat', 'facformat',
$options['fac_format'] $options['fac_format']

View File

@ -1,20 +1,10 @@
<?php <?php
/**
* @brief fac, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
declare(strict_types=1); declare(strict_types=1);
namespace Dotclear\Plugin\fac; namespace Dotclear\Plugin\fac;
use dcCore; use Dotclear\App;
use Dotclear\Core\Process; use Dotclear\Core\Process;
use Dotclear\Core\Backend\{ use Dotclear\Core\Backend\{
Notices, Notices,
@ -33,6 +23,13 @@ use Dotclear\Helper\Html\Form\{
}; };
use Exception; use Exception;
/**
* @brief fac configuration class.
* @ingroup fac
*
* @author Jean-Christian Denis (author)
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Config extends Process class Config extends Process
{ {
public static function init(): bool public static function init(): bool
@ -46,13 +43,12 @@ class Config extends Process
return false; return false;
} }
//nullsafe if (!App::blog()->isDefined()) {
if (is_null(dcCore::app()->blog)) {
return false; return false;
} }
$redir = empty($_REQUEST['redir']) ? $redir = empty($_REQUEST['redir']) ?
dcCore::app()->admin->__get('list')->getURL() . '#plugins' : $_REQUEST['redir']; App::backend()->__get('list')->getURL() . '#plugins' : $_REQUEST['redir'];
# -- Get settings -- # -- Get settings --
$s = My::settings(); $s = My::settings();
@ -85,17 +81,17 @@ class Config extends Process
true true
); );
dcCore::app()->blog->triggerBlog(); App::blog()->triggerBlog();
Notices::addSuccessNotice( Notices::addSuccessNotice(
__('Configuration successfully updated.') __('Configuration successfully updated.')
); );
dcCore::app()->admin->url->redirect( App::backend()->url()->redirect(
'admin.plugins', 'admin.plugins',
['module' => My::id(), 'conf' => 1, 'redir' => dcCore::app()->admin->__get('list')->getRedir()] ['module' => My::id(), 'conf' => 1, 'redir' => App::backend()->__get('list')->getRedir()]
); );
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
} }
} }

View File

@ -1,27 +1,24 @@
<?php <?php
/**
* @brief fac, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
declare(strict_types=1); declare(strict_types=1);
namespace Dotclear\Plugin\fac; namespace Dotclear\Plugin\fac;
use context; use Dotclear\App;
use dcCore; use Dotclear\Core\Frontend\Ctx;
use Dotclear\Core\Process; use Dotclear\Core\Process;
use Dotclear\Helper\Date; use Dotclear\Helper\Date;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
use Dotclear\Helper\Network\Feed\Reader; use Dotclear\Helper\Network\Feed\Reader;
use Exception; use Exception;
/**
* @brief fac frontend class.
* @ingroup fac
*
* @author Jean-Christian Denis (author)
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Frontend extends Process class Frontend extends Process
{ {
public static function init(): bool public static function init(): bool
@ -31,32 +28,31 @@ class Frontend extends Process
public static function process(): bool public static function process(): bool
{ {
if (!self::status() || is_null(dcCore::app()->blog) || !My::settings()->get('active')) { if (!self::status() || !App::blog()->isDefined() || !My::settings()->get('active')) {
return false; return false;
} }
dcCore::app()->addBehavior('publicEntryAfterContent', function (dcCore $core, context $_ctx): void { App::behavior()->addBehavior('publicEntryAfterContent', function ($___, Ctx $_ctx): void {
//nullsafe if (!App::blog()->isDefined()) {
if (is_null(dcCore::app()->blog) || is_null(dcCore::app()->ctx)) {
return; return;
} }
// Not a post // Not a post
if (!dcCore::app()->ctx->exists('posts')) { if (!App::frontend()->context()->exists('posts')) {
return; return;
} }
// Not in page to show // Not in page to show
$types = json_decode((string) My::settings()->get('public_tpltypes'), true); $types = json_decode((string) My::settings()->get('public_tpltypes'), true);
if (!is_array($types) if (!is_array($types)
|| !in_array(dcCore::app()->url->type, $types)) { || !in_array(App::url()->type, $types)) {
return; return;
} }
// Get related feed // Get related feed
$fac_url = dcCore::app()->meta->getMetadata([ $fac_url = App::meta()->getMetadata([
'meta_type' => 'fac', 'meta_type' => 'fac',
'post_id' => dcCore::app()->ctx->__get('posts')->f('post_id'), 'post_id' => App::frontend()->context()->__get('posts')->f('post_id'),
'limit' => 1, 'limit' => 1,
]); ]);
if ($fac_url->isEmpty()) { if ($fac_url->isEmpty()) {
@ -64,9 +60,9 @@ class Frontend extends Process
} }
// Get related format // Get related format
$fac_format = dcCore::app()->meta->getMetadata([ $fac_format = App::meta()->getMetadata([
'meta_type' => 'facformat', 'meta_type' => 'facformat',
'post_id' => dcCore::app()->ctx->__get('posts')->f('post_id'), 'post_id' => App::frontend()->context()->__get('posts')->f('post_id'),
'limit' => 1, 'limit' => 1,
]); ]);
if ($fac_format->isEmpty()) { if ($fac_format->isEmpty()) {
@ -102,7 +98,7 @@ class Frontend extends Process
} }
// Read feed url // Read feed url
$cache = is_dir(DC_TPL_CACHE . '/fac') ? DC_TPL_CACHE . '/fac' : null; $cache = is_dir(App::config()->cacheRoot() . '/fac') ? App::config()->cacheRoot() . '/fac' : null;
try { try {
$feed = Reader::quickParse($fac_url->f('meta_id'), $cache); $feed = Reader::quickParse($fac_url->f('meta_id'), $cache);
@ -137,7 +133,7 @@ class Frontend extends Process
$feeddesc = ''; $feeddesc = '';
if (My::settings()->get('showfeeddesc') if (My::settings()->get('showfeeddesc')
&& '' != $feed->description) { && '' != $feed->description) {
$feeddesc = '<p>' . context::global_filters( $feeddesc = '<p>' . $_ctx::global_filters(
$feed->description, $feed->description,
['encode_xml', 'remove_html'] ['encode_xml', 'remove_html']
) . '</p>'; ) . '</p>';
@ -146,7 +142,7 @@ class Frontend extends Process
// Date format // Date format
$dateformat = '' != $format['dateformat'] ? $dateformat = '' != $format['dateformat'] ?
$format['dateformat'] : $format['dateformat'] :
dcCore::app()->blog->settings->get('system')->get('date_format') . ',' . dcCore::app()->blog->settings->get('system')->get('time_format'); App::blog()->settings()->get('system')->get('date_format') . ',' . App::blog()->settings()->get('system')->get('time_format');
// Enrties limit // Enrties limit
$entrieslimit = abs((int) $format['lineslimit']); $entrieslimit = abs((int) $format['lineslimit']);
@ -163,7 +159,7 @@ class Frontend extends Process
$date = Date::dt2str($dateformat, $item->pubdate); $date = Date::dt2str($dateformat, $item->pubdate);
// Entries title // Entries title
$title = context::global_filters( $title = $_ctx::global_filters(
str_replace( str_replace(
[ [
'%D', '%D',
@ -185,7 +181,7 @@ class Frontend extends Process
); );
// Entries over title // Entries over title
$overtitle = context::global_filters( $overtitle = $_ctx::global_filters(
str_replace( str_replace(
[ [
'%D', '%D',
@ -211,7 +207,7 @@ class Frontend extends Process
if ($format['showlinesdescription'] if ($format['showlinesdescription']
&& '' != $item->description) { && '' != $item->description) {
$description = '<dd>' . $description = '<dd>' .
context::global_filters( $_ctx::global_filters(
$item->description, $item->description,
['remove_html' => (int) $format['linesdescriptionnohtml'], 'cut_string' => abs((int) $format['linesdescriptionlength'])] ['remove_html' => (int) $format['linesdescriptionnohtml'], 'cut_string' => abs((int) $format['linesdescriptionlength'])]
) . '</dd>'; ) . '</dd>';
@ -222,7 +218,7 @@ class Frontend extends Process
if ($format['showlinescontent'] if ($format['showlinescontent']
&& '' != $item->content) { && '' != $item->content) {
$content = '<dd>' . $content = '<dd>' .
context::global_filters( $_ctx::global_filters(
$item->content, $item->content,
['remove_html' => (int) $format['linescontentnohtml'], 'cut_string' => abs((int) $format['linescontentlength'])] ['remove_html' => (int) $format['linescontentnohtml'], 'cut_string' => abs((int) $format['linescontentlength'])]
) . '</dd>'; ) . '</dd>';

View File

@ -1,24 +1,20 @@
<?php <?php
/**
* @brief fac, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
declare(strict_types=1); declare(strict_types=1);
namespace Dotclear\Plugin\fac; namespace Dotclear\Plugin\fac;
use dcCore; use Dotclear\App;
use dcNamespace;
use Dotclear\Core\Process; use Dotclear\Core\Process;
use Exception; use Exception;
/**
* @brief fac installation class.
* @ingroup fac
*
* @author Jean-Christian Denis (author)
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Install extends Process class Install extends Process
{ {
public static function init(): bool public static function init(): bool
@ -113,7 +109,7 @@ class Install extends Process
); );
} }
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
} }
return true; return true;
@ -122,15 +118,15 @@ class Install extends Process
private static function growUp(): void private static function growUp(): void
{ {
// version < 1.0 : upgrade settings id and ns and array // version < 1.0 : upgrade settings id and ns and array
$current = dcCore::app()->getVersion(My::id()); $current = App::version()()->getVersion(My::id());
if ($current && version_compare($current, '1.0', '<')) { if ($current && version_compare($current, '1.0', '<')) {
$record = dcCore::app()->con->select( $record = App::con()->select(
'SELECT * FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . ' ' . 'SELECT * FROM ' . App::con()->prefix() . App::blogWorkspace()::NS_TABLE_NAME . ' ' .
"WHERE setting_ns = 'fac' " "WHERE setting_ns = 'fac' "
); );
while ($record->fetch()) { while ($record->fetch()) {
if (preg_match('/^fac_(.*?)$/', $record->f('setting_id'), $match)) { if (preg_match('/^fac_(.*?)$/', $record->f('setting_id'), $match)) {
$cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME); $cur = App::blogWorkspace()->openBlogWorkspaceCursor();
if (in_array($record->f('setting_id'), ['fac_public_tpltypes', 'fac_formats'])) { if (in_array($record->f('setting_id'), ['fac_public_tpltypes', 'fac_formats'])) {
$cur->setField('setting_value', json_encode(@unserialize($record->f('setting_value')))); $cur->setField('setting_value', json_encode(@unserialize($record->f('setting_value'))));
} }
@ -138,7 +134,7 @@ class Install extends Process
$cur->SetField('setting_ns', My::id()); $cur->SetField('setting_ns', My::id());
$cur->update( $cur->update(
"WHERE setting_id = '" . $record->f('setting_id') . "' and setting_ns = 'fac' " . "WHERE setting_id = '" . $record->f('setting_id') . "' and setting_ns = 'fac' " .
'AND blog_id ' . (null === $record->f('blog_id') ? 'IS NULL ' : ("= '" . dcCore::app()->con->escapeStr($record->f('blog_id')) . "' ")) 'AND blog_id ' . (null === $record->f('blog_id') ? 'IS NULL ' : ("= '" . App::con()->escapeStr($record->f('blog_id')) . "' "))
); );
} }
} }

View File

@ -1,15 +1,5 @@
<?php <?php
/**
* @brief fac, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
declare(strict_types=1); declare(strict_types=1);
namespace Dotclear\Plugin\fac; namespace Dotclear\Plugin\fac;
@ -17,8 +7,13 @@ namespace Dotclear\Plugin\fac;
use Dotclear\Module\MyPlugin; use Dotclear\Module\MyPlugin;
/** /**
* This module definitions. * @brief fac My helper.
* @ingroup fac
*
* @author Jean-Christian Denis (author)
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class My extends MyPlugin class My extends MyPlugin
{ {
// Use default permissions
} }

View File

@ -1,23 +1,19 @@
<?php <?php
/**
* @brief fac, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
declare(strict_types=1); declare(strict_types=1);
namespace Dotclear\Plugin\fac; namespace Dotclear\Plugin\fac;
use dcCore;
use Dotclear\Core\Process; use Dotclear\Core\Process;
use Dotclear\Plugin\Uninstaller\Uninstaller; use Dotclear\Plugin\Uninstaller\Uninstaller;
/**
* @brief fac uninstall class.
* @ingroup fac
*
* @author Jean-Christian Denis (author)
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Uninstall extends Process class Uninstall extends Process
{ {
public static function init(): bool public static function init(): bool
@ -27,7 +23,7 @@ class Uninstall extends Process
public static function process(): bool public static function process(): bool
{ {
if (!self::status() || !dcCore::app()->plugins->moduleExists('Uninstaller')) { if (!self::status()) {
return false; return false;
} }