Compare commits

..

No commits in common. "master" and "v2023.08.14" have entirely different histories.

30 changed files with 515 additions and 442 deletions

View File

@ -1,33 +1,3 @@
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
* Require PHP 8.1
* Code review
enhancePostContent 2023.10.08
===========================================================
* Require Dotclear 2.28
* Require PHP 8.1
* Upgrade to Dotclear 2.28
enhancePostContent 2023.08.14
===========================================================
* Require Dotclear 2.27

View File

@ -1,23 +1,28 @@
# README
[![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)
[![Release](https://img.shields.io/badge/release-2023.08.14-a2cbe9.svg)](https://git.dotclear.watch/JcDenis/enhancePostContent/releases)
[![Date](https://img.shields.io/badge/date-2023.08.14-c44d58.svg)](https://git.dotclear.watch/JcDenis/enhancePostContent/releases)
[![Dotclear](https://img.shields.io/badge/dotclear-v2.27-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)
[![License](https://img.shields.io/github/license/JcDenis/enhancePostContent)](https://git.dotclear.watch/JcDenis/enhancePostContent/blob/master/LICENSE)
## ABOUT
## WHAT IS ENHANCEPOSTCONTENT ?
_enhancePostContent_ is a plugin for the open-source web publishing software called [Dotclear](https://www.dotclear.org).
"Enhance Post Content" is a plugin for the open-source
web publishing software called Dotclear.
> It help to filter post content and extract or show inline more info about words and expressions such as tags, acronyms, abbreviations, definition, citation, link, etc...
It help to filter post content and extract or
show inline more info about words and expressions such as
atgs, acronyms, abbreviations, definition, citation, link, etc...
## REQUIREMENTS
* Dotclear 2.28
_enhancePostContent_ requires:
* admin permissions to set up plugin
* content admin permissions to manage fitlers
* Dotclear 2.27
* PHP 8.1+
* Dotclear admin permissions to set up plugin
* Dotclear content admin permissions to manage fitlers
## USAGE
@ -32,14 +37,13 @@ you should also add widgets.
## LINKS
* [License](https://git.dotclear.watch/JcDenis/enhancePostContent/src/branch/master/LICENSE)
* [Packages & details](https://git.dotclear.watch/JcDenis/enhancePostContent/releases) (or on [Dotaddict](https://plugins.dotaddict.org/dc2/details/enhancePostContent))
* [Sources & contributions](https://git.dotclear.watch/JcDenis/enhancePostContent) (or on [GitHub](https://github.com/JcDenis/enhancePostContent))
* [Issues & security](https://git.dotclear.watch/JcDenis/enhancePostContent/issues) (or on [GitHub](https://github.com/JcDenis/enhancePostContent/issues))
* [Discuss and help](http://forum.dotclear.org/viewtopic.php?id=40876)
* License : [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.html)
* Source & contribution : [Gitea Page](https://git.dotclear.watch/JcDenis/enhancePostContent) or [GitHub Page](https://github.com/JcDenis/enhancePostContent)
* Packages & details: [Gitea Page](https://git.dotclear.watch/JcDenis/enhancePostContent/releases) or [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/enhancePostContent)
* Discuss and help : [Dotclear Forum](http://forum.dotclear.org/viewtopic.php?id=40876)
## CONTRIBUTORS
* Jean-Christian Denis (author)
* Jean-Christian Denis
You are welcome to contribute to this code.

View File

@ -1,29 +1,36 @@
<?php
/**
* @file
* @brief The plugin enhancePostContent definition
* @ingroup enhancePostContent
* @brief enhancePostContent, a plugin for Dotclear 2
*
* @defgroup enhancePostContent Plugin enhancePostContent.
* @package Dotclear
* @subpackage Plugin
*
* Add features to words in post content.
* @author Jean-Christian Denis and Contributors
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('DC_RC_PATH')) {
return null;
}
$this->registerModule(
'Enhance post content',
'Add features to words in post content',
'Jean-Christian Denis and Contributors',
'2023.10.24',
'2023.08.14',
[
'type' => 'plugin',
'requires' => [['core', '2.28']],
'permissions' => 'My',
'settings' => [
'self' => '',
'requires' => [
['php', '8.1'],
['core', '2.27'],
],
'permissions' => dcCore::app()->auth->makePermissions([
dcAuth::PERMISSION_CONTENT_ADMIN,
]),
'settings' => [
'blog' => '#params.epc_params',
],
'type' => 'plugin',
'support' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/issues',
'details' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/src/branch/master/README.md',
'repository' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/raw/branch/master/dcstore.xml',

20
_init.php Normal file
View File

@ -0,0 +1,20 @@
<?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
*/
if (!defined('DC_RC_PATH')) {
return null;
}
class initEnhancePostContent
{
public const TABLE_NAME = 'epc';
}

View File

@ -2,11 +2,11 @@
<modules xmlns:da="http://dotaddict.org/da/">
<module id="enhancePostContent">
<name>Enhance post content</name>
<version>2023.10.24</version>
<version>2023.08.14</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.24/plugin-enhancePostContent.zip</file>
<da:dcmin>2.28</da:dcmin>
<file>https://git.dotclear.watch/JcDenis/enhancePostContent/releases/download/v2023.08.14/plugin-enhancePostContent.zip</file>
<da:dcmin>2.27</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>
</module>

View File

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

View File

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

View File

@ -1,11 +1,22 @@
<?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;
use ArrayObject;
use Dotclear\App;
use dcCore;
use dcSettings;
use Dotclear\Core\Backend\Favorites;
use Dotclear\Core\Process;
use Dotclear\Helper\Html\Form\{
@ -18,15 +29,7 @@ use Dotclear\Helper\Html\Form\{
Para,
Text
};
use Dotclear\Interface\Core\BlogSettingsInterface;
/**
* @brief enhancePostContent backend class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Backend extends Process
{
public static function init(): bool
@ -42,7 +45,7 @@ class Backend extends Process
My::addBackendMenuItem();
App::behavior()->addBehaviors([
dcCore::app()->addBehaviors([
// backend user dashboard favorites icon
'adminDashboardFavoritesV2' => function (Favorites $favs): void {
$favs->register(My::id(), [
@ -50,11 +53,11 @@ class Backend extends Process
'url' => My::manageUrl(),
'small-icon' => My::icons(),
'large-icon' => My::icons(),
'permissions' => App::auth()->makePermissions([App::auth()::PERMISSION_CONTENT_ADMIN]),
'permissions' => dcCore::app()->auth->makePermissions([dcCore::app()->auth::PERMISSION_CONTENT_ADMIN]),
]);
},
// backend user preference form
'adminBlogPreferencesFormV2' => function (BlogSettingsInterface $blog_settings): void {
'adminBlogPreferencesFormV2' => function (dcSettings $blog_settings): void {
$active = (bool) $blog_settings->get(My::id())->get('active');
$allowedtplvalues = Epc::blogAllowedTemplateValue();
$allowedpubpages = Epc::blogAllowedTemplatePage();
@ -99,7 +102,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)->maxlength(0)->value(Epc::encodeMulti($allowedtplvalues)),
(new Input('epc_allowedtplvalues'))->size(100)->maxlenght(0)->value(Epc::encodeMulti($allowedtplvalues)),
]),
(new Note())
->class('form-note')
@ -107,7 +110,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)->maxlength(0)->value(Epc::encodeMulti($allowedpubpages)),
(new Input('epc_allowedpubpages'))->size(100)->maxlenght(0)->value(Epc::encodeMulti($allowedpubpages)),
]),
(new Note())
->class('form-note')
@ -120,7 +123,7 @@ class Backend extends Process
->render();
},
// backend user preference save
'adminBeforeBlogSettingsUpdate' => function (BlogSettingsInterface $blog_settings): void {
'adminBeforeBlogSettingsUpdate' => function (dcSettings $blog_settings): void {
$active = !empty($_POST['epc_active']);
$allowedtplvalues = Epc::decodeMulti($_POST['epc_allowedtplvalues']);
$allowedpubpages = Epc::decodeMulti($_POST['epc_allowedpubpages']);
@ -145,7 +148,7 @@ class Backend extends Process
];
},
// widgets registration
'initWidgets' => Widgets::initWidgets(...),
'initWidgets' => [Widgets::class, 'initWidgets'],
]);
return true;

View File

@ -1,5 +1,15 @@
<?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;
@ -14,11 +24,7 @@ use Dotclear\Helper\Html\Form\Checkbox;
use Dotclear\Helper\Html\Html;
/**
* @brief enhancePostContent filters list class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
* Backend filters values list.
*/
class BackendList extends Listing
{
@ -37,7 +43,7 @@ class BackendList extends Listing
return;
}
$pager = new Pager($filter->value('page'), (int) $this->rs_count, $filter->value('nb'), 10);
$pager = new Pager($filter->value('page'), $this->rs_count, $filter->value('nb'), 10);
$pager->base_url = $url;
$epc_id = [];
@ -65,7 +71,7 @@ class BackendList extends Listing
echo $pager->getLinks() . $blocks[0];
while ($this->rs->fetch()) {
$this->line(isset($epc_id[$this->rs->f('epc_id')]));
$this->line(isset($epc_id[$this->rs->epc_id]));
}
echo $blocks[1] . $blocks[2] . $pager->getLinks();
@ -79,14 +85,14 @@ class BackendList extends Listing
private function line(bool $checked): void
{
$cols = [
'check' => '<td class="nowrap">' . (new Checkbox(['epc_id[]'], $checked))->value($this->rs->f('epc_id'))->render() . '</td>',
'key' => '<td class="nowrap">' . Html::escapeHTML($this->rs->f('epc_key')) . '</td>',
'value' => '<td class="maximal">' . Html::escapeHTML($this->rs->f('epc_value')) . '</td>',
'date' => '<td class="nowrap count">' . Date::dt2str(__('%Y-%m-%d %H:%M'), $this->rs->f('epc_upddt')) . '</td>',
'check' => '<td class="nowrap">' . (new Checkbox(['epc_id[]'], $checked))->value($this->rs->epc_id)->render() . '</td>',
'key' => '<td class="nowrap">' . Html::escapeHTML($this->rs->epc_key) . '</td>',
'value' => '<td class="maximal">' . Html::escapeHTML($this->rs->epc_value) . '</td>',
'date' => '<td class="nowrap count">' . Date::dt2str(__('%Y-%m-%d %H:%M'), $this->rs->epc_upddt) . '</td>',
];
echo
'<tr class="line" id="p' . $this->rs->f('epc_id') . '">' .
'<tr class="line" id="p' . $this->rs->epc_id . '">' .
implode($cols) .
'</tr>';
}

View File

@ -1,11 +1,21 @@
<?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;
use ArrayObject;
use Dotclear\App;
use dcCore;
use Dotclear\Helper\Html\Html;
use Dotclear\Plugin\widgets\WidgetsElement;
use Exception;
@ -21,59 +31,15 @@ __('search results page');
__('atom feeds');
__('RSS feeds');
/**
* @brief enhancePostContent main class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Epc
{
/**
* Plugin table name.
*
* @var string TABLE_NAME
*/
public const TABLE_NAME = 'epc';
/**
* Distributed filters.
*
* @var array<int,string> DEFAULT_FILTERS
*/
public const DEFAULT_FILTERS = [
Filter\EpcFilterTag::class,
Filter\EpcFilterSearch::class,
Filter\EpcFilterAcronym::class,
Filter\EpcFilterAbbreviation::class,
Filter\EpcFilterDefinition::class,
Filter\EpcFilterCitation::class,
Filter\EpcFilterLink::class,
Filter\EpcFilterReplace::class,
Filter\EpcFilterUpdate::class,
Filter\EpcFilterTwitter::class,
];
/**
* The temporary pattern to tag words to replace.
*
* @var string FLAGGER
*/
/** @var string The temporary pattern to tag words to replace */
public const FLAGGER = 'ççççç%sççççç';
/**
* The filters stack.
*
* @var EpcFilters $filters
*/
/** @var EpcFilters $filters THe filters stack */
private static EpcFilters $filters;
/**
* The replacment limit per filtre.
*
* @var array<string,int> $limits
*/
/** @var array<string,int> $limits The replacment limit per filtre */
private static array $limits = [];
/**
@ -90,7 +56,7 @@ class Epc
]);
# --BEHAVIOR-- enhancePostContentAllowedTplValues : ArrayObject
App::behavior()->callBehavior('enhancePostContentAllowedTplValues', $list);
dcCore::app()->callBehavior('enhancePostContentAllowedTplValues', $list);
return iterator_to_array($list, true);
}
@ -110,27 +76,27 @@ class Epc
/**
* Get list of allowed templates name->[tag,callback] to list on epc widgets.
*
* @return array<string, array<string, mixed>> The templates name->[id,cb] values
* @return array The templates name->[id,cb] values
*/
public static function widgetAllowedTemplateValue(): array
{
$list = new ArrayObject([
'entry excerpt' => [
'id' => 'entryexcerpt',
'cb' => self::widgetContentEntryExcerpt(...),
'cb' => [self::class, 'widgetContentEntryExcerpt'],
],
'entry content' => [
'id' => 'entrycontent',
'cb' => self::widgetContentEntryContent(...),
'cb' => [self::class, 'widgetContentEntryContent'],
],
'comment content' => [
'id' => 'commentcontent',
'cb' => self::widgetContentCommentContent(...),
'cb' => [self::class, 'widgetContentCommentContent'],
],
]);
# --BEHAVIOR-- enhancePostContentAllowedWidgetValues : ArrayObject
App::behavior()->callBehavior('enhancePostContentAllowedWidgetValues', $list);
dcCore::app()->callBehavior('enhancePostContentAllowedWidgetValues', $list);
return iterator_to_array($list, true);
}
@ -152,7 +118,7 @@ class Epc
]);
# --BEHAVIOR-- enhancePostContentAllowedPubPages : ArrayObject
App::behavior()->callBehavior('enhancePostContentAllowedPubPages', $list);
dcCore::app()->callBehavior('enhancePostContentAllowedPubPages', $list);
return iterator_to_array($list, true);
}
@ -183,9 +149,9 @@ class Epc
try {
# --BEHAVIOR-- enhancePostContentFilters : EpcFilters
App::behavior()->callBehavior('enhancePostContentFilters', $filters);
dcCore::app()->callBehavior('enhancePostContentFilters', $filters);
} catch (Exception $e) {
App::error()->add($e->getMessage());
dcCore::app()->error->add($e->getMessage());
}
self::$filters = $filters->sort();
@ -409,13 +375,13 @@ class Epc
*/
public static function widgetContentEntryExcerpt(?WidgetsElement $widget = null): string
{
if (!App::frontend()->context()->exists('posts')) {
if (is_null(dcCore::app()->ctx) || !dcCore::app()->ctx->exists('posts')) {
return '';
}
$content = '';
while (App::frontend()->context()->__get('posts')?->fetch()) {
$content .= App::frontend()->context()->__get('posts')->f('post_excerpt');
while (dcCore::app()->ctx->__get('posts')?->fetch()) {
$content .= dcCore::app()->ctx->__get('posts')->f('post_excerpt');
}
return $content;
@ -430,13 +396,13 @@ class Epc
*/
public static function widgetContentEntryContent(?WidgetsElement $widget = null): string
{
if (!App::frontend()->context()->exists('posts')) {
if (is_null(dcCore::app()->ctx) || !dcCore::app()->ctx->exists('posts')) {
return '';
}
$content = '';
while (App::frontend()->context()->__get('posts')?->fetch()) {
$content .= App::frontend()->context()->__get('posts')->f('post_content');
while (dcCore::app()->ctx->__get('posts')?->fetch()) {
$content .= dcCore::app()->ctx->__get('posts')->f('post_content');
}
return $content;
@ -451,14 +417,14 @@ class Epc
*/
public static function widgetContentCommentContent(?WidgetsElement $widget = null): string
{
if (!App::frontend()->context()->exists('posts')) {
if (is_null(dcCore::app()->ctx) || !dcCore::app()->ctx->exists('posts')) {
return '';
}
$content = '';
while (App::frontend()->context()->__get('posts')->fetch()) {
$comments = App::blog()->getComments(['post_id' => App::frontend()->context()->__get('posts')->f('post_id')]);
while ($comments->fetch()) {
while (dcCore::app()->ctx->__get('posts')?->fetch()) {
$comments = dcCore::app()->blog?->getComments(['post_id' => dcCore::app()->ctx->__get('posts')->f('post_id')]);
while ($comments?->fetch()) {
$content .= $comments->__call('getContent', []);
}
}

View File

@ -1,5 +1,15 @@
<?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;
@ -10,13 +20,9 @@ use Dotclear\Plugin\widgets\WidgetsElement;
use Exception;
/**
* @brief enhancePostContent abstract filter class.
* @ingroup enhancePostContent
* Filter abstract class.
*
* All filter must extends this class.
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
abstract class EpcFilter
{
@ -38,10 +44,10 @@ abstract class EpcFilter
/** @var bool $has_list Filter has list of records (property) */
public readonly bool $has_list;
/** @var array<int,string> $ignore The filter disabled html tags (property) */
/** @var array $ignore The filter disabled html tags (property) */
public readonly array $ignore;
/** @var array<int,string> $class The css class that apply to filter (property) */
/** @var array $class The css class that apply to filter (property) */
public readonly array $class;
/** @var string $replace The filter replacement bloc in content (property) */
@ -59,16 +65,16 @@ abstract class EpcFilter
/** @var bool $plural The replacement limit per filter (settings) */
public readonly int $limit;
/** @var array<int,string> $style The style applied to filter class (settings) */
/** @var array $style The style applied to filter class (settings) */
public readonly array $style;
/** @var array<int,string> $notag The filter disabled html tags (settings) */
/** @var array $notag The filter disabled html tags (settings) */
public readonly array $notag;
/** @var array<int,string> $template The extra template value to scan (settings) */
/** @var array $template The extra template value to scan (settings) */
public readonly array $template;
/** @var array<int,string> $page The extra frontend pages to scan (settings) */
/** @var array $page The extra frontend pages to scan (settings) */
public readonly array $page;
/**

View File

@ -1,25 +1,27 @@
<?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;
/**
* @brief enhancePostContent filters stack.
* @ingroup enhancePostContent
* Filters stack.
*
* Use Epc::getFilters() to get loaded stack
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilters
{
/**
* The filters stack.
*
* @var array<int, EpcFilter> $stack
*/
/** @var array<int,EpcFilter> $satck The filters stack */
private array $stack = [];
/**

View File

@ -1,10 +1,20 @@
<?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;
use Dotclear\App;
use dcCore;
use Dotclear\Database\{
Cursor,
MetaRecord
@ -12,11 +22,7 @@ use Dotclear\Database\{
use Exception;
/**
* @brief enhancePostContent filters records.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
* Filter records.
*/
class EpcRecord
{
@ -42,19 +48,19 @@ class EpcRecord
'E.epc_filter, E.epc_key, E.epc_value ';
}
$strReq .= 'FROM ' . App::con()->prefix() . Epc::TABLE_NAME . ' E ';
$strReq .= 'FROM ' . dcCore::app()->prefix . My::TABLE_NAME . ' E ';
if (!empty($params['from'])) {
$strReq .= $params['from'] . ' ';
}
$strReq .= "WHERE E.blog_id = '" . App::con()->escapeStr(App::blog()->id()) . "' ";
$strReq .= "WHERE E.blog_id = '" . dcCore::app()->con->escapeStr((string) dcCore::app()->blog?->id) . "' ";
if (isset($params['epc_type'])) {
if (is_array($params['epc_type']) && !empty($params['epc_type'])) {
$strReq .= 'AND E.epc_type ' . App::con()->in($params['epc_type']);
$strReq .= 'AND E.epc_type ' . dcCore::app()->con->in($params['epc_type']);
} elseif ($params['epc_type'] != '') {
$strReq .= "AND E.epc_type = '" . App::con()->escapeStr((string) $params['epc_type']) . "' ";
$strReq .= "AND E.epc_type = '" . dcCore::app()->con->escapeStr((string) $params['epc_type']) . "' ";
}
} else {
$strReq .= "AND E.epc_type = 'epc' ";
@ -62,9 +68,9 @@ class EpcRecord
if (isset($params['epc_filter'])) {
if (is_array($params['epc_filter']) && !empty($params['epc_filter'])) {
$strReq .= 'AND E.epc_filter ' . App::con()->in($params['epc_filter']);
$strReq .= 'AND E.epc_filter ' . dcCore::app()->con->in($params['epc_filter']);
} elseif ($params['epc_filter'] != '') {
$strReq .= "AND E.epc_filter = '" . App::con()->escapeStr((string) $params['epc_filter']) . "' ";
$strReq .= "AND E.epc_filter = '" . dcCore::app()->con->escapeStr((string) $params['epc_filter']) . "' ";
}
}
@ -74,16 +80,16 @@ class EpcRecord
} else {
$params['epc_id'] = [(int) $params['epc_id']];
}
$strReq .= 'AND E.epc_id ' . App::con()->in($params['epc_id']);
$strReq .= 'AND E.epc_id ' . dcCore::app()->con->in($params['epc_id']);
} elseif (isset($params['not_id']) && is_numeric($params['not_id'])) {
$strReq .= "AND NOT E.epc_id = '" . $params['not_id'] . "' ";
}
if (isset($params['epc_key'])) {
if (is_array($params['epc_key']) && !empty($params['epc_key'])) {
$strReq .= 'AND E.epc_key ' . App::con()->in($params['epc_key']);
$strReq .= 'AND E.epc_key ' . dcCore::app()->con->in($params['epc_key']);
} elseif ($params['epc_key'] != '') {
$strReq .= "AND E.epc_key = '" . App::con()->escapeStr((string) $params['epc_key']) . "' ";
$strReq .= "AND E.epc_key = '" . dcCore::app()->con->escapeStr((string) $params['epc_key']) . "' ";
}
}
@ -93,17 +99,17 @@ class EpcRecord
if (!$count_only) {
if (!empty($params['order'])) {
$strReq .= 'ORDER BY ' . App::con()->escapeStr((string) $params['order']) . ' ';
$strReq .= 'ORDER BY ' . dcCore::app()->con->escapeStr((string) $params['order']) . ' ';
} else {
$strReq .= 'ORDER BY E.epc_key ASC ';
}
}
if (!$count_only && !empty($params['limit'])) {
$strReq .= App::con()->limit($params['limit']);
$strReq .= dcCore::app()->con->limit($params['limit']);
}
return new MetaRecord(App::con()->select($strReq));
return new MetaRecord(dcCore::app()->con->select($strReq));
}
/**
@ -115,26 +121,26 @@ class EpcRecord
*/
public static function addRecord(Cursor $cur): int
{
App::con()->writeLock(App::con()->prefix() . Epc::TABLE_NAME);
dcCore::app()->con->writeLock(dcCore::app()->prefix . My::TABLE_NAME);
try {
$cur->setField('epc_id', self::getNextId());
$cur->setField('blog_id', App::blog()->id());
$cur->setField('blog_id', (string) dcCore::app()->blog?->id);
$cur->setField('epc_upddt', date('Y-m-d H:i:s'));
self::getCursor($cur);
$cur->insert();
App::con()->unlock();
dcCore::app()->con->unlock();
} catch (Exception $e) {
App::con()->unlock();
dcCore::app()->con->unlock();
throw $e;
}
App::blog()->triggerBlog();
dcCore::app()->blog?->triggerBlog();
# --BEHAVIOR-- enhancePostContentAfterAddRecord : Cursor
App::behavior()->callBehavior('enhancePostContentAfterAddRecord', $cur);
dcCore::app()->callBehavior('enhancePostContentAfterAddRecord', $cur);
return (int) $cur->getField('epc_id');
}
@ -153,11 +159,11 @@ class EpcRecord
$cur->setField('epc_upddt', date('Y-m-d H:i:s'));
$cur->update('WHERE epc_id = ' . $id . " AND blog_id = '" . App::con()->escapeStr(App::blog()->id()) . "' ");
App::blog()->triggerBlog();
$cur->update('WHERE epc_id = ' . $id . " AND blog_id = '" . dcCore::app()->con->escapeStr((string) dcCore::app()->blog?->id) . "' ");
dcCore::app()->blog?->triggerBlog();
# --BEHAVIOR-- enhancePostContentAfterUpdRecord : Cursor, int
App::behavior()->callBehavior('enhancePostContentAfterUpdRecord', $cur, $id);
dcCore::app()->callBehavior('enhancePostContentAfterUpdRecord', $cur, $id);
}
/**
@ -190,15 +196,15 @@ class EpcRecord
}
# --BEHAVIOR-- enhancePostContentBeforeDelRecord, int
App::behavior()->callBehavior('enhancePostContentbeforeDelRecord', $id);
dcCore::app()->callBehavior('enhancePostContentbeforeDelRecord', $id);
App::con()->execute(
'DELETE FROM ' . App::con()->prefix() . Epc::TABLE_NAME . ' ' .
dcCore::app()->con->execute(
'DELETE FROM ' . dcCore::app()->prefix . My::TABLE_NAME . ' ' .
'WHERE epc_id = ' . $id . ' ' .
"AND blog_id = '" . App::con()->escapeStr(App::blog()->id()) . "' "
"AND blog_id = '" . dcCore::app()->con->escapeStr((string) dcCore::app()->blog?->id) . "' "
);
App::blog()->triggerBlog();
dcCore::app()->blog?->triggerBlog();
}
/**
@ -208,8 +214,8 @@ class EpcRecord
*/
private static function getNextId(): int
{
return (int) App::con()->select(
'SELECT MAX(epc_id) FROM ' . App::con()->prefix() . Epc::TABLE_NAME . ' '
return (int) dcCore::app()->con->select(
'SELECT MAX(epc_id) FROM ' . dcCore::app()->prefix . My::TABLE_NAME . ' '
)->f(0) + 1;
}
@ -220,7 +226,7 @@ class EpcRecord
*/
public static function openCursor(): Cursor
{
return App::con()->openCursor(App::con()->prefix() . Epc::TABLE_NAME);
return dcCore::app()->con->openCursor(dcCore::app()->prefix . My::TABLE_NAME);
}
/**

View File

@ -1,5 +1,15 @@
<?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\Filter;
@ -9,14 +19,6 @@ use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
use Dotclear\Plugin\widgets\WidgetsElement;
/**
* @brief enhancePostContent abbreviation filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterAbbreviation extends EpcFilter
{
protected string $id = 'abbreviation';

View File

@ -1,5 +1,15 @@
<?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\Filter;
@ -9,14 +19,6 @@ use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
use Dotclear\Plugin\widgets\WidgetsElement;
/**
* @brief enhancePostContent acronym filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterAcronym extends EpcFilter
{
protected string $id = 'acronym';

View File

@ -1,5 +1,15 @@
<?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\Filter;
@ -9,14 +19,6 @@ use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
use Dotclear\Plugin\widgets\WidgetsElement;
/**
* @brief enhancePostContent citaion filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterCitation extends EpcFilter
{
protected string $id = 'citation';

View File

@ -1,5 +1,15 @@
<?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\Filter;
@ -9,14 +19,6 @@ use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
use Dotclear\Plugin\widgets\WidgetsElement;
/**
* @brief enhancePostContent definition filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterDefinition extends EpcFilter
{
protected string $id = 'definition';

View File

@ -1,5 +1,15 @@
<?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\Filter;
@ -9,14 +19,6 @@ use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
use Dotclear\Plugin\widgets\WidgetsElement;
/**
* @brief enhancePostContent link filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterLink extends EpcFilter
{
protected string $id = 'link';

View File

@ -1,5 +1,15 @@
<?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\Filter;
@ -7,14 +17,6 @@ namespace Dotclear\Plugin\enhancePostContent\Filter;
use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
/**
* @brief enhancePostContent replacement filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterReplace extends EpcFilter
{
protected string $id = 'replace';

View File

@ -1,21 +1,23 @@
<?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\Filter;
use Dotclear\App;
use dcCore;
use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
/**
* @brief enhancePostContent search filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterSearch extends EpcFilter
{
protected string $id = 'search';
@ -46,11 +48,11 @@ class EpcFilterSearch extends EpcFilter
public function publicContent(string $tag, array $args): void
{
if (empty(App::frontend()->search)) {
if (empty(dcCore::app()->public->search)) {
return;
}
$searchs = explode(' ', App::frontend()->search);
$searchs = explode(' ', dcCore::app()->public->search);
foreach ($searchs as $k => $v) {
$args[0] = Epc::replaceString(

View File

@ -1,23 +1,25 @@
<?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\Filter;
use ArrayObject;
use Dotclear\App;
use dcCore;
use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
use Dotclear\Plugin\widgets\WidgetsElement;
/**
* @brief enhancePostContent tag filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterTag extends EpcFilter
{
protected string $id = 'tag';
@ -47,16 +49,16 @@ class EpcFilterTag extends EpcFilter
public function publicContent(string $tag, array $args): void
{
if (!App::plugins()->moduleExists('tags')) {
if (!dcCore::app()->plugins->moduleExists('tags')) {
return;
}
$metas = App::meta()->getMetadata(['meta_type' => 'tag']);
$metas = dcCore::app()->meta->getMetadata(['meta_type' => 'tag']);
while ($metas->fetch()) {
$args[0] = Epc::replaceString(
$metas->f('meta_id'),
sprintf($this->replace, App::blog()->url() . App::url()->getBase('tag') . '/' . $metas->f('meta_id'), '\\1'),
sprintf($this->replace, dcCore::app()->blog?->url . dcCore::app()->url->getBase('tag') . '/' . $metas->f('meta_id'), '\\1'),
$args[0],
$this
);
@ -65,16 +67,16 @@ class EpcFilterTag extends EpcFilter
public function widgetList(string $content, WidgetsElement $w, ArrayObject $list): void
{
if (!App::plugins()->moduleExists('tags')) {
if (!dcCore::app()->plugins->moduleExists('tags')) {
return;
}
$metas = App::meta()->getMetadata(['meta_type' => 'tag']);
$metas = dcCore::app()->meta->getMetadata(['meta_type' => 'tag']);
while ($metas->fetch()) {
$list[] = Epc::matchString(
$metas->f('meta_id'),
sprintf($this->widget, App::blog()->url() . App::url()->getBase('tag') . '/' . $metas->f('meta_id'), '\\1'),
sprintf($this->widget, dcCore::app()->blog?->url . dcCore::app()->url->getBase('tag') . '/' . $metas->f('meta_id'), '\\1'),
$content,
$this
);

View File

@ -1,5 +1,15 @@
<?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\Filter;
@ -7,14 +17,6 @@ namespace Dotclear\Plugin\enhancePostContent\Filter;
use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
/**
* @brief enhancePostContent twitter filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterTwitter extends EpcFilter
{
protected string $id = 'twitter';

View File

@ -1,5 +1,15 @@
<?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\Filter;
@ -7,14 +17,6 @@ namespace Dotclear\Plugin\enhancePostContent\Filter;
use Dotclear\Plugin\enhancePostContent\Epc;
use Dotclear\Plugin\enhancePostContent\EpcFilter;
/**
* @brief enhancePostContent update filter.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class EpcFilterUpdate extends EpcFilter
{
protected string $id = 'update';

View File

@ -1,19 +1,23 @@
<?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;
use Dotclear\App;
use dcCore;
use dcUtils;
use Dotclear\Core\Process;
/**
* @brief enhancePostContent frontend class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Frontend extends Process
{
public static function init(): bool
@ -27,16 +31,16 @@ class Frontend extends Process
return false;
}
App::behavior()->addBehaviors([
dcCore::app()->addBehaviors([
// Add CSS URL to frontend header
'publicHeadContent' => function (): void {
echo App::plugins()->cssLoad(App::blog()->url() . App::url()->getURLFor('epccss'));
echo dcUtils::cssLoad(dcCore::app()->blog?->url . dcCore::app()->url->getURLFor('epccss'));
},
// Filter template blocks content
'publicBeforeContentFilterV2' => function (string $tag, array $args): void {
foreach (Epc::getFilters()->dump() as $filter) {
// test context
if (in_array((string) App::frontend()->context()->__get('current_tpl'), $filter->page)
if (in_array((string) dcCore::app()->ctx?->__get('current_tpl'), $filter->page)
&& in_array($tag, $filter->template)
&& $args[0] != '' //content
&& empty($args['encode_xml'])
@ -49,7 +53,7 @@ class Frontend extends Process
}
},
// Widgets
'initWidgets' => Widgets::initWidgets(...),
'initWidgets' => [Widgets::class, 'initWidgets'],
]);
return true;

View File

@ -1,21 +1,25 @@
<?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;
use Dotclear\App;
use dcCore;
use dcNamespace;
use Dotclear\Core\Process;
use Dotclear\Database\Structure;
use Exception;
/**
* @brief enhancePostContent installation class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Install extends Process
{
public static function init(): bool
@ -31,8 +35,8 @@ class Install extends Process
try {
// Database
$s = new Structure(App::con(), App::con()->prefix());
$s->__get(Epc::TABLE_NAME)
$s = new Structure(dcCore::app()->con, dcCore::app()->prefix);
$s->__get(My::TABLE_NAME)
->field('epc_id', 'bigint', 0, false)
->field('blog_id', 'varchar', 32, false)
->field('epc_type', 'varchar', 32, false, "'epc'")
@ -47,7 +51,7 @@ class Install extends Process
->index('idx_epc_filter', 'btree', 'epc_filter')
->index('idx_epc_key', 'btree', 'epc_key');
(new Structure(App::con(), App::con()->prefix()))->synchronize($s);
(new Structure(dcCore::app()->con, dcCore::app()->prefix))->synchronize($s);
$s = null;
// Uppgrade
@ -55,6 +59,10 @@ class Install extends Process
// Settings
$s = My::settings();
if (is_null($s)) {
return false;
}
$s->put('active', false, 'boolean', 'Enable enhancePostContent', false, true);
$s->put('list_sortby', 'epc_key', 'string', 'Admin records list field order', false, true);
$s->put('list_order', 'desc', 'string', 'Admin records list order', false, true);
@ -78,7 +86,7 @@ class Install extends Process
return true;
} catch (Exception $e) {
App::error()->add($e->getMessage());
dcCore::app()->error->add($e->getMessage());
return false;
}
@ -89,7 +97,7 @@ class Install extends Process
*/
public static function growUp(): void
{
$current = App::version()->getVersion(My::id());
$current = dcCore::app()->getVersion(My::id());
if ($current && version_compare($current, '0.6.6', '<=')) {
self::upTo00060607();
@ -114,27 +122,27 @@ class Install extends Process
private static function upTo00060607(): void
{
# Move old filters lists from settings to database
$record = App::con()->select('SELECT * FROM ' . App::con()->prefix() . App::blogWorkspace()::NS_TABLE_NAME . " WHERE setting_ns='enhancePostContent' AND blog_id IS NOT NULL ");
$record = dcCore::app()->con->select('SELECT * FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . " WHERE setting_ns='enhancePostContent' AND blog_id IS NOT NULL ");
while ($record->fetch()) {
if (preg_match('#enhancePostContent_(.*?)List#', $record->f('setting_id'), $m)) {
$curlist = @unserialize($record->f('setting_value'));
if (is_array($curlist)) {
foreach ($curlist as $k => $v) {
$cur = App::con()->openCursor(App::con()->prefix() . Epc::TABLE_NAME);
App::con()->writeLock(App::con()->prefix() . Epc::TABLE_NAME);
$cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . My::TABLE_NAME);
dcCore::app()->con->writeLock(dcCore::app()->prefix . My::TABLE_NAME);
$cur->setField('epc_id', (int) App::con()->select('SELECT MAX(epc_id) FROM ' . App::con()->prefix() . Epc::TABLE_NAME . ' ')->f(0) + 1);
$cur->setField('epc_id', (int) dcCore::app()->con->select('SELECT MAX(epc_id) FROM ' . dcCore::app()->prefix . My::TABLE_NAME . ' ')->f(0) + 1);
$cur->setField('blog_id', $record->f('blog_id'));
$cur->setField('epc_filter', strtolower($m[1]));
$cur->setField('epc_key', $k);
$cur->setField('epc_value', $v);
$cur->insert();
App::con()->unlock();
dcCore::app()->con->unlock();
}
}
App::con()->execute('DELETE FROM ' . App::con()->prefix() . App::blogWorkspace()::NS_TABLE_NAME . " WHERE setting_id='" . $record->f('setting_id') . "' AND setting_ns='enhancePostContent' AND blog_id='" . $record->f('blog_id') . "' ");
dcCore::app()->con->execute('DELETE FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . " WHERE setting_id='" . $record->f('setting_id') . "' AND setting_ns='enhancePostContent' AND blog_id='" . $record->f('blog_id') . "' ");
}
}
}
@ -147,14 +155,14 @@ class Install extends Process
private static function upTo20211006(): void
{
# Move old filter name to filter id
$record = App::con()->select('SELECT epc_id, epc_filter FROM ' . App::con()->prefix() . Epc::TABLE_NAME);
$record = dcCore::app()->con->select('SELECT epc_id, epc_filter FROM ' . dcCore::app()->prefix . My::TABLE_NAME);
while ($record->fetch()) {
$cur = App::con()->openCursor(App::con()->prefix() . Epc::TABLE_NAME);
$cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . My::TABLE_NAME);
$cur->setField('epc_filter', strtolower($record->f('epc_filter')));
$cur->update('WHERE epc_id = ' . $record->f('epc_id') . ' ');
App::blog()->triggerBlog();
dcCore::app()->blog?->triggerBlog();
}
}
@ -177,15 +185,15 @@ class Install extends Process
);
// get all enhancePostContent settings
$record = App::con()->select(
'SELECT * FROM ' . App::con()->prefix() . App::blogWorkspace()::NS_TABLE_NAME . ' ' .
$record = dcCore::app()->con->select(
'SELECT * FROM ' . dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME . ' ' .
"WHERE setting_ns = 'enhancePostContent' "
);
// update settings id, ns, value
while ($record->fetch()) {
if (preg_match('/^enhancePostContent_(.*?)$/', $record->f('setting_id'), $match)) {
$cur = App::blogWorkspace()->openBlogWorkspaceCursor();
$cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME);
$cur->setField('setting_id', $match[1]);
$cur->setField('setting_ns', My::id());

View File

@ -1,10 +1,20 @@
<?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;
use Dotclear\App;
use dcCore;
use Dotclear\Core\Process;
use Dotclear\Core\Backend\{
Notices,
@ -32,13 +42,6 @@ use Dotclear\Helper\Html\Html;
use Dotclear\Helper\Network\Http;
use Exception;
/**
* @brief enhancePostContent manage class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Manage extends Process
{
public static function init(): bool
@ -60,14 +63,14 @@ class Manage extends Process
}
// check errors
if (App::error()->flag()) {
if (dcCore::app()->error->flag()) {
return true;
}
// open save to other plugins
if (!empty($action)) {
# --BEHAVIOR-- enhancePostContentAdminSave
App::behavior()->callBehavior('enhancePostContentAdminSave');
dcCore::app()->callBehavior('enhancePostContentAdminSave');
}
try {
@ -86,7 +89,7 @@ class Manage extends Process
My::settings()->put($filter->id(), json_encode($f));
App::blog()->triggerBlog();
dcCore::app()->blog->triggerBlog();
Notices::addSuccessNotice(
__('Filter successfully updated.')
@ -113,7 +116,7 @@ class Manage extends Process
} else {
EpcRecord::addRecord($cur);
App::blog()->triggerBlog();
dcCore::app()->blog->triggerBlog();
Notices::addSuccessNotice(
__('Filter successfully updated.')
@ -135,7 +138,7 @@ class Manage extends Process
EpcRecord::delRecord((int) $id);
}
App::blog()->triggerBlog();
dcCore::app()->blog->triggerBlog();
Notices::addSuccessNotice(
__('Filter successfully updated.')
@ -151,7 +154,7 @@ class Manage extends Process
}
}
} catch (Exception $e) {
App::error()->add($e->getMessage());
dcCore::app()->error->add($e->getMessage());
}
return true;
@ -188,7 +191,7 @@ class Manage extends Process
$counter = EpcRecord::getRecords($params, true);
$pager = new BackendList($list, (int) $counter->f(0));
} catch (Exception $e) {
App::error()->add($e->getMessage());
dcCore::app()->error->add($e->getMessage());
}
$header = $sorts->js(My::manageUrl(['part' => $filter->id()], '&') . '#record');
@ -202,7 +205,7 @@ class Manage extends Process
$header .
# --BEHAVIOR-- enhancePostContentAdminHeader
App::behavior()->callBehavior('enhancePostContentAdminHeader')
dcCore::app()->callBehavior('enhancePostContentAdminHeader')
);
echo
@ -217,7 +220,7 @@ class Manage extends Process
echo
(new Form('filters_menu'))
->method('get')
->action(My::manageUrl())
->action(dcCore::app()->admin->getPageURL())
->fields([
(new Para())
->class('anchor-nav')
@ -265,7 +268,7 @@ class Manage extends Process
->for('filter_style' . $k),
(new Input(['filter_style[]', 'filter_style' . $k]))
->size(60)
->maxlength(255)
->maxlenght(255)
->value(Html::escapeHTML($filter->style[$k])),
]);
}
@ -337,7 +340,7 @@ class Manage extends Process
->for('filter_notag'),
(new Input('filter_notag'))
->size(60)
->maxlength(255)
->maxlenght(255)
->value(Epc::encodeSingle($filter->notag)),
]),
(new Note())
@ -369,7 +372,7 @@ class Manage extends Process
$pager->display(
$sorts,
My::manageUrl(array_merge($sorts->values(true), ['page' => '%s']), '#record'),
'<form action="' . App::backend()->getPageURL() . '#record" method="post" id="form-records">' .
'<form action="' . dcCore::app()->admin->getPageURL() . '#record" method="post" id="form-records">' .
'%s' .
'<div class="two-cols">' .
@ -398,7 +401,7 @@ class Manage extends Process
->items([
(new Form('form-create'))
->method('post')
->action(App::backend()->getPageURL() . '#record')
->action(dcCore::app()->admin->getPageURL() . '#record')
->fields([
(new Para())
->items([
@ -406,7 +409,7 @@ class Manage extends Process
->for('new_key'),
(new Input('new_key'))
->size(60)
->maxlength(255)
->maxlenght(255)
->required(true),
]),
(new Para())
@ -415,7 +418,7 @@ class Manage extends Process
->for('new_value'),
(new Input('new_value'))
->size(60)
->maxlength(255)
->maxlenght(255)
->required(true),
]),
(new Para())
@ -433,7 +436,7 @@ class Manage extends Process
}
# --BEHAVIOR-- enhancePostContentAdminPage
App::behavior()->callBehavior('enhancePostContentAdminPage');
dcCore::app()->callBehavior('enhancePostContentAdminPage');
Page::helpBlock('enhancePostContent');
Page::closeModule();

View File

@ -1,30 +1,49 @@
<?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;
use Dotclear\App;
use dcCore;
use Dotclear\Module\MyPlugin;
/**
* @brief enhancePostContent My helper.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
* This module definitions.
*/
class My extends MyPlugin
{
/** @var string Plugin table name */
public const TABLE_NAME = 'epc';
/** @var array Distributed filters */
public const DEFAULT_FILTERS = [
Filter\EpcFilterTag::class,
Filter\EpcFilterSearch::class,
Filter\EpcFilterAcronym::class,
Filter\EpcFilterAbbreviation::class,
Filter\EpcFilterDefinition::class,
Filter\EpcFilterCitation::class,
Filter\EpcFilterLink::class,
Filter\EpcFilterReplace::class,
Filter\EpcFilterUpdate::class,
Filter\EpcFilterTwitter::class,
];
public static function checkCustomContext(int $context): ?bool
{
return match ($context) {
// Limit main backend featrues to content admin
self::BACKEND, self::MANAGE, self::MENU => App::auth()->check(App::auth()->makePermissions([
App::auth()::PERMISSION_CONTENT_ADMIN,
]), App::blog()->id()),
default => null,
};
return !in_array($context, [My::BACKEND, My::MANAGE, My::MENU]) ? null :
dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([
dcCore::app()->auth::PERMISSION_CONTENT_ADMIN,
]), dcCore::app()->blog->id);
}
}

View File

@ -1,20 +1,23 @@
<?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;
use Dotclear\App;
use dcCore;
use Dotclear\Core\Process;
use Dotclear\Helper\Html\Html;
/**
* @brief enhancePostContent prepend class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Prepend extends Process
{
public static function init(): bool
@ -29,14 +32,14 @@ class Prepend extends Process
}
// register epc filters
App::behavior()->addBehavior('enhancePostContentFilters', function (EpcFilters $stack): void {
foreach (Epc::DEFAULT_FILTERS as $class) {
dcCore::app()->addBehavior('enhancePostContentFilters', function (EpcFilters $stack): void {
foreach (My::DEFAULT_FILTERS as $class) {
$stack->add(new $class());
}
});
// register epc filters frontend css
App::url()->register(
dcCore::app()->url->register(
'epccss',
'epc.css',
'^epc\.css',

View File

@ -1,19 +1,23 @@
<?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;
use dcCore;
use Dotclear\Core\Process;
use Dotclear\Plugin\Uninstaller\Uninstaller;
/**
* @brief enhancePostContent uninstall class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
class Uninstall extends Process
{
public static function init(): bool
@ -23,7 +27,7 @@ class Uninstall extends Process
public static function process(): bool
{
if (!self::status()) {
if (!self::status() || !dcCore::app()->plugins->moduleExists('Uninstaller')) {
return false;
}
@ -36,7 +40,7 @@ class Uninstall extends Process
->addUserAction(
'tables',
'delete',
Epc::TABLE_NAME
My::TABLE_NAME
)
->addUserAction(
'plugins',
@ -56,7 +60,7 @@ class Uninstall extends Process
->addDirectAction(
'tables',
'delete',
Epc::TABLE_NAME
My::TABLE_NAME
)
->addDirectAction(
'plugins',

View File

@ -1,21 +1,29 @@
<?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;
use ArrayObject;
use Dotclear\App;
use dcCore;
use Dotclear\Helper\Html\Html;
use Dotclear\Plugin\widgets\WidgetsStack;
use Dotclear\Plugin\widgets\WidgetsElement;
/**
* @brief enhancePostContent widgets class.
* @ingroup enhancePostContent
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
* @ingroup DC_PLUGIN_ENHANCEPOSTCONTENT
* @brief Filter posts content - widgets methods.
* @since 2.6
*/
class Widgets
{
@ -29,7 +37,7 @@ class Widgets
$w->create(
'epclist',
My::name(),
self::parseWidget(...),
[self::class, 'parseWidget'],
null,
__('List filtered contents.')
);
@ -86,7 +94,7 @@ class Widgets
# Page
if (!My::settings()->get('active')
|| !in_array(App::frontend()->context()->__get('current_tpl'), ['post.html', 'page.html'])
|| !in_array(dcCore::app()->ctx?->__get('current_tpl'), ['post.html', 'page.html'])
) {
return '';
}