Compare commits

...

4 Commits

Author SHA1 Message Date
02dc3bd51e
fix widgets 2023-10-24 20:30:17 +02:00
eb3ad16f88
fix maxlength typo 2023-10-24 20:20:36 +02:00
ff2e09e743
code review 2023-10-16 22:36:53 +02:00
b1f644a8f3
release 2023.10.13 2023-10-13 20:43:55 +02:00
19 changed files with 99 additions and 125 deletions

View File

@ -1,3 +1,21 @@
enhancePostContent 2023.10.24
===========================================================
* Require Dotclear 2.28
* Require PHP 8.1
* Fix widgets
enhancePostContent 2023.10.16
===========================================================
* Require Dotclear 2.28
* Require PHP 8.1
* Code review
enhancePostContent 2023.10.13
===========================================================
* Require Dotclear 2.28
* Require PHP 8.1
* Upgrade to last minute change to Dotclear 2.28
enhancePostContent 2023.10.11
===========================================================
* Require Dotclear 2.28

View File

@ -1,7 +1,7 @@
# README
[![Release](https://img.shields.io/badge/release-2023.10.08-a2cbe9.svg)](https://git.dotclear.watch/JcDenis/enhancePostContent/releases)
![Date](https://img.shields.io/badge/date-2023.10.08-c44d58.svg)
[![Release](https://img.shields.io/badge/release-2023.10.24-a2cbe9.svg)](https://git.dotclear.watch/JcDenis/enhancePostContent/releases)
![Date](https://img.shields.io/badge/date-2023.10.24-c44d58.svg)
[![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/enhancePostContent)
[![License](https://img.shields.io/badge/license-GPL--2.0-ececec.svg)](https://git.dotclear.watch/JcDenis/enhancePostContent/src/branch/master/LICENSE)
@ -14,10 +14,10 @@ _enhancePostContent_ is a plugin for the open-source web publishing software cal
## REQUIREMENTS
* admin permissions to set up plugin
* content admin permissions to manage fitlers
* Dotclear 2.28
* PHP 8.1+
* Dotclear admin permissions to set up plugin
* Dotclear content admin permissions to manage fitlers
## USAGE
@ -40,6 +40,6 @@ you should also add widgets.
## CONTRIBUTORS
* Jean-Christian Denis
* Jean-Christian Denis (author)
You are welcome to contribute to this code.

View File

@ -9,14 +9,13 @@
* Add features to words in post content.
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
$this->registerModule(
'Enhance post content',
'Add features to words in post content',
'Jean-Christian Denis and Contributors',
'2023.10.11',
'2023.10.24',
[
'type' => 'plugin',
'requires' => [['core', '2.28']],

View File

@ -2,10 +2,10 @@
<modules xmlns:da="http://dotaddict.org/da/">
<module id="enhancePostContent">
<name>Enhance post content</name>
<version>2023.10.11</version>
<version>2023.10.24</version>
<author>Jean-Christian Denis and Contributors</author>
<desc>Add features to words in post content</desc>
<file>https://git.dotclear.watch/JcDenis/enhancePostContent/releases/download/v2023.10.11/plugin-enhancePostContent.zip</file>
<file>https://git.dotclear.watch/JcDenis/enhancePostContent/releases/download/v2023.10.24/plugin-enhancePostContent.zip</file>
<da:dcmin>2.28</da:dcmin>
<da:details>https://git.dotclear.watch/JcDenis/enhancePostContent/src/branch/master/README.md</da:details>
<da:support>https://git.dotclear.watch/JcDenis/enhancePostContent/issues</da:support>

View File

@ -1,17 +1,10 @@
<?php
/**
* @brief enhancePostContent, a plugin for Dotclear 2
* @file
* @brief The plugin enhancePostContent resources
* @ingroup enhancePostContent
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('DC_RC_PATH')) {
return;
}
dcCore::app()->resources['help']['enhancePostContent'] = __DIR__ . '/help/help.html';
\Dotclear\App::backend()->resources()->set('help', 'enhancePostContent', __DIR__ . '/help/help.html');

View File

@ -1,17 +1,10 @@
<?php
/**
* @brief enhancePostContent, a plugin for Dotclear 2
* @file
* @brief The plugin enhancePostContent resources
* @ingroup enhancePostContent
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis and Contributors
*
* @copyright Jean-Christian Denis
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('DC_RC_PATH')) {
return;
}
dcCore::app()->resources['help']['enhancePostContent'] = __DIR__ . '/help/help.html';
\Dotclear\App::backend()->resources()->set('help', 'enhancePostContent', __DIR__ . '/help/help.html');

View File

@ -7,7 +7,6 @@ namespace Dotclear\Plugin\enhancePostContent;
use ArrayObject;
use Dotclear\App;
use Dotclear\Core\Backend\Favorites;
use Dotclear\Core\BlogSettings;
use Dotclear\Core\Process;
use Dotclear\Helper\Html\Form\{
Checkbox,
@ -19,13 +18,13 @@ use Dotclear\Helper\Html\Form\{
Para,
Text
};
use Dotclear\Interface\Core\BlogSettingsInterface;
/**
* @brief enhancePostContent backend class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Backend extends Process
@ -55,7 +54,7 @@ class Backend extends Process
]);
},
// backend user preference form
'adminBlogPreferencesFormV2' => function (BlogSettings $blog_settings): void {
'adminBlogPreferencesFormV2' => function (BlogSettingsInterface $blog_settings): void {
$active = (bool) $blog_settings->get(My::id())->get('active');
$allowedtplvalues = Epc::blogAllowedTemplateValue();
$allowedpubpages = Epc::blogAllowedTemplatePage();
@ -100,7 +99,7 @@ class Backend extends Process
// allowedtplvalues
(new Para())->items([
(new Label(__('Allowed DC template values:'), Label::OUTSIDE_LABEL_BEFORE))->for('epc_allowedtplvalues'),
(new Input('epc_allowedtplvalues'))->size(100)->maxlenght(0)->value(Epc::encodeMulti($allowedtplvalues)),
(new Input('epc_allowedtplvalues'))->size(100)->maxlength(0)->value(Epc::encodeMulti($allowedtplvalues)),
]),
(new Note())
->class('form-note')
@ -108,7 +107,7 @@ class Backend extends Process
// allowedpubpages
(new Para())->items([
(new Label(__('Allowed public pages:'), Label::OUTSIDE_LABEL_BEFORE))->for('epc_allowedpubpages'),
(new Input('epc_allowedpubpages'))->size(100)->maxlenght(0)->value(Epc::encodeMulti($allowedpubpages)),
(new Input('epc_allowedpubpages'))->size(100)->maxlength(0)->value(Epc::encodeMulti($allowedpubpages)),
]),
(new Note())
->class('form-note')
@ -121,7 +120,7 @@ class Backend extends Process
->render();
},
// backend user preference save
'adminBeforeBlogSettingsUpdate' => function (BlogSettings $blog_settings): void {
'adminBeforeBlogSettingsUpdate' => function (BlogSettingsInterface $blog_settings): void {
$active = !empty($_POST['epc_active']);
$allowedtplvalues = Epc::decodeMulti($_POST['epc_allowedtplvalues']);
$allowedpubpages = Epc::decodeMulti($_POST['epc_allowedpubpages']);
@ -146,7 +145,7 @@ class Backend extends Process
];
},
// widgets registration
'initWidgets' => [Widgets::class, 'initWidgets'],
'initWidgets' => Widgets::initWidgets(...),
]);
return true;

View File

@ -18,7 +18,6 @@ use Dotclear\Helper\Html\Html;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class BackendList extends Listing

View File

@ -1,15 +1,5 @@
<?php
/**
* @brief enhancePostContent, 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);
namespace Dotclear\Plugin\enhancePostContent;
@ -36,7 +26,6 @@ __('RSS feeds');
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Epc
@ -121,22 +110,22 @@ class Epc
/**
* Get list of allowed templates name->[tag,callback] to list on epc widgets.
*
* @return array The templates name->[id,cb] values
* @return array<string, array<string, mixed>> The templates name->[id,cb] values
*/
public static function widgetAllowedTemplateValue(): array
{
$list = new ArrayObject([
'entry excerpt' => [
'id' => 'entryexcerpt',
'cb' => [self::class, 'widgetContentEntryExcerpt'],
'cb' => self::widgetContentEntryExcerpt(...),
],
'entry content' => [
'id' => 'entrycontent',
'cb' => [self::class, 'widgetContentEntryContent'],
'cb' => self::widgetContentEntryContent(...),
],
'comment content' => [
'id' => 'commentcontent',
'cb' => [self::class, 'widgetContentCommentContent'],
'cb' => self::widgetContentCommentContent(...),
],
]);
@ -420,13 +409,13 @@ class Epc
*/
public static function widgetContentEntryExcerpt(?WidgetsElement $widget = null): string
{
if (!App::frontend()->ctx->exists('posts')) {
if (!App::frontend()->context()->exists('posts')) {
return '';
}
$content = '';
while (App::frontend()->ctx->__get('posts')?->fetch()) {
$content .= App::frontend()->__get('posts')->f('post_excerpt');
while (App::frontend()->context()->__get('posts')?->fetch()) {
$content .= App::frontend()->context()->__get('posts')->f('post_excerpt');
}
return $content;
@ -441,13 +430,13 @@ class Epc
*/
public static function widgetContentEntryContent(?WidgetsElement $widget = null): string
{
if (!App::frontend()->ctx->exists('posts')) {
if (!App::frontend()->context()->exists('posts')) {
return '';
}
$content = '';
while (App::frontend()->ctx->__get('posts')?->fetch()) {
$content .= App::frontend()->ctx->__get('posts')->f('post_content');
while (App::frontend()->context()->__get('posts')?->fetch()) {
$content .= App::frontend()->context()->__get('posts')->f('post_content');
}
return $content;
@ -462,13 +451,13 @@ class Epc
*/
public static function widgetContentCommentContent(?WidgetsElement $widget = null): string
{
if (!App::frontend()->ctx->exists('posts')) {
if (!App::frontend()->context()->exists('posts')) {
return '';
}
$content = '';
while (App::frontend()->ctx->__get('posts')->fetch()) {
$comments = App::blog()->getComments(['post_id' => App::frontend()->ctx->__get('posts')->f('post_id')]);
while (App::frontend()->context()->__get('posts')->fetch()) {
$comments = App::blog()->getComments(['post_id' => App::frontend()->context()->__get('posts')->f('post_id')]);
while ($comments->fetch()) {
$content .= $comments->__call('getContent', []);
}

View File

@ -16,7 +16,6 @@ use Exception;
* All filter must extends this class.
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
abstract class EpcFilter

View File

@ -11,12 +11,15 @@ namespace Dotclear\Plugin\enhancePostContent;
* Use Epc::getFilters() to get loaded stack
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilters
{
/** @var array<int,EpcFilter> $satck The filters stack */
/**
* The filters stack.
*
* @var array<int, EpcFilter> $stack
*/
private array $stack = [];
/**

View File

@ -16,7 +16,6 @@ use Exception;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcRecord

View File

@ -12,7 +12,6 @@ use Dotclear\Core\Process;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Frontend extends Process
@ -37,7 +36,7 @@ class Frontend extends Process
'publicBeforeContentFilterV2' => function (string $tag, array $args): void {
foreach (Epc::getFilters()->dump() as $filter) {
// test context
if (in_array((string) App::frontend()->ctx->__get('current_tpl'), $filter->page)
if (in_array((string) App::frontend()->context()->__get('current_tpl'), $filter->page)
&& in_array($tag, $filter->template)
&& $args[0] != '' //content
&& empty($args['encode_xml'])
@ -50,7 +49,7 @@ class Frontend extends Process
}
},
// Widgets
'initWidgets' => [Widgets::class, 'initWidgets'],
'initWidgets' => Widgets::initWidgets(...),
]);
return true;

View File

@ -14,7 +14,6 @@ use Exception;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Install extends Process

View File

@ -1,15 +1,5 @@
<?php
/**
* @brief enhancePostContent, 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);
namespace Dotclear\Plugin\enhancePostContent;
@ -47,7 +37,6 @@ use Exception;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Manage extends Process
@ -276,7 +265,7 @@ class Manage extends Process
->for('filter_style' . $k),
(new Input(['filter_style[]', 'filter_style' . $k]))
->size(60)
->maxlenght(255)
->maxlength(255)
->value(Html::escapeHTML($filter->style[$k])),
]);
}
@ -348,7 +337,7 @@ class Manage extends Process
->for('filter_notag'),
(new Input('filter_notag'))
->size(60)
->maxlenght(255)
->maxlength(255)
->value(Epc::encodeSingle($filter->notag)),
]),
(new Note())
@ -417,7 +406,7 @@ class Manage extends Process
->for('new_key'),
(new Input('new_key'))
->size(60)
->maxlenght(255)
->maxlength(255)
->required(true),
]),
(new Para())
@ -426,7 +415,7 @@ class Manage extends Process
->for('new_value'),
(new Input('new_value'))
->size(60)
->maxlenght(255)
->maxlength(255)
->required(true),
]),
(new Para())

View File

@ -12,7 +12,6 @@ use Dotclear\Module\MyPlugin;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class My extends MyPlugin

View File

@ -13,7 +13,6 @@ use Dotclear\Helper\Html\Html;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Prepend extends Process
@ -30,7 +29,7 @@ class Prepend extends Process
}
// register epc filters
app::behavior()->addBehavior('enhancePostContentFilters', function (EpcFilters $stack): void {
App::behavior()->addBehavior('enhancePostContentFilters', function (EpcFilters $stack): void {
foreach (Epc::DEFAULT_FILTERS as $class) {
$stack->add(new $class());
}

View File

@ -12,7 +12,6 @@ use Dotclear\Plugin\Uninstaller\Uninstaller;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Uninstall extends Process

View File

@ -15,7 +15,6 @@ use Dotclear\Plugin\widgets\WidgetsElement;
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Widgets
@ -30,7 +29,7 @@ class Widgets
$w->create(
'epclist',
My::name(),
[self::class, 'parseWidget'],
self::parseWidget(...),
null,
__('List filtered contents.')
);
@ -87,7 +86,7 @@ class Widgets
# Page
if (!My::settings()->get('active')
|| !in_array(App::frontend()->ctx->__get('current_tpl'), ['post.html', 'page.html'])
|| !in_array(App::frontend()->context()->__get('current_tpl'), ['post.html', 'page.html'])
) {
return '';
}