Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
9e1c801a66 | |||
3f3f0c0521 | |||
c403444100 | |||
cb9d370ed4 | |||
8da1d0fbc6 | |||
ed0ca29b7c |
12
CHANGELOG.md
12
CHANGELOG.md
@ -1,3 +1,15 @@
|
|||||||
|
fac 1.5.1 - 2023.10.24
|
||||||
|
===========================================================
|
||||||
|
* Require Dotclear 2.28
|
||||||
|
* Require PHP 8.1+
|
||||||
|
* Code review
|
||||||
|
|
||||||
|
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
|
||||||
|
37
README.md
37
README.md
@ -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.1-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.24-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.
|
||||||
|
38
_define.php
38
_define.php
@ -1,36 +1,30 @@
|
|||||||
<?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.1',
|
||||||
[
|
[
|
||||||
'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,
|
'type' => 'plugin',
|
||||||
]),
|
'support' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/issues',
|
||||||
'settings' => [
|
'details' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/src/branch/master/README.md',
|
||||||
'blog' => '#params.' . basename(__DIR__) . '_params',
|
'repository' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/raw/branch/master/dcstore.xml',
|
||||||
],
|
|
||||||
'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',
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
<modules xmlns:da="http://dotaddict.org/da/">
|
<modules xmlns:da="http://dotaddict.org/da/">
|
||||||
<module id="fac">
|
<module id="fac">
|
||||||
<name>Feed after content</name>
|
<name>Feed after content</name>
|
||||||
<version>1.4</version>
|
<version>1.5.1</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://git.dotclear.watch/JcDenis/fac/releases/download/v1.5.1/plugin-fac.zip</file>
|
||||||
<da:dcmin>2.27</da:dcmin>
|
<da:dcmin>2.28</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>
|
||||||
</module>
|
</module>
|
||||||
|
@ -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
|
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
*
|
|
||||||
* @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')) {
|
\Dotclear\App::backend()->resources()->set('help', 'fac', __DIR__ . '/help/fac.html');
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
dcCore::app()->resources['help']['fac'] = __DIR__ . '/help/fac.html';
|
|
||||||
|
@ -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
|
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
*
|
|
||||||
* @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')) {
|
\Dotclear\App::backend()->resources()->set('help', 'fac', __DIR__ . '/help/fac.html');
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
dcCore::app()->resources['help']['fac'] = __DIR__ . '/help/fac.html';
|
|
||||||
|
@ -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
|
||||||
@ -26,21 +23,19 @@ class Backend extends Process
|
|||||||
|
|
||||||
public static function process(): bool
|
public static function process(): bool
|
||||||
{
|
{
|
||||||
if (!self::status()) {
|
if (self::status()) {
|
||||||
return false;
|
App::behavior()->addBehaviors([
|
||||||
|
'adminBlogPreferencesFormV2' => BackendBehaviors::adminBlogPreferencesFormV2(...),
|
||||||
|
'adminBeforeBlogSettingsUpdate' => BackendBehaviors::adminBeforeBlogSettingsUpdate(...),
|
||||||
|
'adminPostHeaders' => BackendBehaviors::adminPostHeaders(...),
|
||||||
|
'adminPostFormItems' => BackendBehaviors::adminPostFormItems(...),
|
||||||
|
'adminAfterPostCreate' => BackendBehaviors::adminAfterPostSave(...),
|
||||||
|
'adminAfterPostUpdate' => BackendBehaviors::adminAfterPostSave(...),
|
||||||
|
'adminBeforePostDelete' => BackendBehaviors::adminBeforePostDelete(...),
|
||||||
|
'adminPostsActions' => BackendBehaviors::adminPostsActions(...),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
dcCore::app()->addBehaviors([
|
return self::status();
|
||||||
'adminBlogPreferencesFormV2' => [BackendBehaviors::class, 'adminBlogPreferencesFormV2'],
|
|
||||||
'adminBeforeBlogSettingsUpdate' => [BackendBehaviors::class, 'adminBeforeBlogSettingsUpdate'],
|
|
||||||
'adminPostHeaders' => [BackendBehaviors::class, 'adminPostHeaders'],
|
|
||||||
'adminPostFormItems' => [BackendBehaviors::class, 'adminPostFormItems'],
|
|
||||||
'adminAfterPostCreate' => [BackendBehaviors::class, 'adminAfterPostSave'],
|
|
||||||
'adminAfterPostUpdate' => [BackendBehaviors::class, 'adminAfterPostSave'],
|
|
||||||
'adminBeforePostDelete' => [BackendBehaviors::class, 'adminBeforePostDelete'],
|
|
||||||
'adminPostsActions' => [BackendBehaviors::class, 'adminPostsActions'],
|
|
||||||
]);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,19 +29,22 @@ 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
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Get combos of types of supported public pages
|
* Get combos of types of supported public pages.
|
||||||
*
|
*
|
||||||
* @return array List of post type and name
|
* @return array<string, string> List of post type and name
|
||||||
*/
|
*/
|
||||||
public static function getPostsTypes(): array
|
public static function getPostsTypes(): array
|
||||||
{
|
{
|
||||||
@ -64,12 +56,12 @@ 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'),
|
||||||
$v['name']
|
$v['name']
|
||||||
)] = $k;
|
)] = (string) $k;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,11 +69,11 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add settings to blog preference
|
* Add settings to blog preference.
|
||||||
*
|
*
|
||||||
* @param dcSettings $blog_settings dcSettings instance
|
* @param BlogSettingsInterface $blog_settings Blog settings 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>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +114,7 @@ class BackendBehaviors
|
|||||||
// defaultfeedtitle
|
// defaultfeedtitle
|
||||||
(new Para())->items([
|
(new Para())->items([
|
||||||
(new Label(__('Default title')))->for('fac_defaultfeedtitle'),
|
(new Label(__('Default title')))->for('fac_defaultfeedtitle'),
|
||||||
(new Input('fac_defaultfeedtitle'))->size(70)->maxlenght(255)->value((string) $blog_settings->get(My::id())->get('defaultfeedtitle')),
|
(new Input('fac_defaultfeedtitle'))->size(70)->maxlength(255)->value((string) $blog_settings->get(My::id())->get('defaultfeedtitle')),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(__('Use %T to insert title of feed.'))->class('form-note'),
|
(new Note())->text(__('Use %T to insert title of feed.'))->class('form-note'),
|
||||||
// showfeeddesc
|
// showfeeddesc
|
||||||
@ -141,11 +133,11 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save blog settings
|
* Save blog settings.
|
||||||
*
|
*
|
||||||
* @param dcSettings $blog_settings dcSettings instance
|
* @param BlogSettingsInterface $blog_settings Blog settings 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']));
|
||||||
@ -154,7 +146,7 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add javascript (toggle)
|
* Add javascript (toggle).
|
||||||
*
|
*
|
||||||
* @return string HTML head
|
* @return string HTML head
|
||||||
*/
|
*/
|
||||||
@ -164,29 +156,29 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add form to post sidebar
|
* Add form to post sidebar.
|
||||||
*
|
*
|
||||||
* @param ArrayObject $main_items Main items
|
* @param ArrayObject<string, string> $main_items Main items
|
||||||
* @param ArrayObject $sidebar_items Sidebar items
|
* @param ArrayObject<string, array<string, mixed>> $sidebar_items Sidebar items
|
||||||
* @param null|MetaRecord $post Post record or null
|
* @param null|MetaRecord $post Post record or null
|
||||||
*/
|
*/
|
||||||
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,
|
||||||
@ -199,10 +191,10 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save linked feed
|
* Save linked feed.
|
||||||
*
|
*
|
||||||
* @param Cursor $cur Current post Cursor
|
* @param Cursor $cur Current post Cursor
|
||||||
* @param integer $post_id Post id
|
* @param int $post_id Post id
|
||||||
*/
|
*/
|
||||||
public static function adminAfterPostSave(Cursor $cur, int $post_id): void
|
public static function adminAfterPostSave(Cursor $cur, int $post_id): void
|
||||||
{
|
{
|
||||||
@ -219,9 +211,9 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete linked feed on post edition
|
* Delete linked feed on post edition.
|
||||||
*
|
*
|
||||||
* @param integer $post_id Post id
|
* @param int $post_id Post id
|
||||||
*/
|
*/
|
||||||
public static function adminBeforePostDelete(int $post_id): void
|
public static function adminBeforePostDelete(int $post_id): void
|
||||||
{
|
{
|
||||||
@ -229,42 +221,42 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add actions to posts page combo
|
* Add actions to posts page combo.
|
||||||
*
|
*
|
||||||
* @param ActionsPosts $pa ActionsPostsPage instance
|
* @param ActionsPosts $pa ActionsPostsPage instance
|
||||||
*/
|
*/
|
||||||
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(...)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Posts actions callback to remove linked feed
|
* Posts actions callback to remove linked feed.
|
||||||
*
|
*
|
||||||
* @param ActionsPosts $pa ActionsPosts instance
|
* @param ActionsPosts $pa ActionsPosts instance
|
||||||
* @param ArrayObject $post _POST actions
|
* @param ArrayObject<string, mixed> $post _POST actions
|
||||||
*/
|
*/
|
||||||
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,16 +266,16 @@ 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'));
|
||||||
}
|
}
|
||||||
|
|
||||||
# Delete unused feed
|
# Delete unused feed
|
||||||
foreach ($posts_ids as $post_id) {
|
foreach ($posts_ids as $post_id) {
|
||||||
self::delFeed($post_id);
|
self::delFeed((int) $post_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
Notices::addSuccessNotice(__('Linked feed deleted.'));
|
Notices::addSuccessNotice(__('Linked feed deleted.'));
|
||||||
@ -291,14 +283,14 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Posts actions callback to add linked feed
|
* Posts actions callback to add linked feed.
|
||||||
*
|
*
|
||||||
* @param ActionsPosts $pa ActionsPosts instance
|
* @param ActionsPosts $pa ActionsPosts instance
|
||||||
* @param ArrayObject $post _POST actions
|
* @param ArrayObject<string, mixed> $post _POST actions
|
||||||
*/
|
*/
|
||||||
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
|
||||||
@ -311,8 +303,8 @@ class BackendBehaviors
|
|||||||
if (!empty($post['fac_url'])
|
if (!empty($post['fac_url'])
|
||||||
&& !empty($post['fac_format'])) {
|
&& !empty($post['fac_format'])) {
|
||||||
foreach ($posts_ids as $post_id) {
|
foreach ($posts_ids as $post_id) {
|
||||||
self::delFeed($post_id);
|
self::delFeed((int) $post_id);
|
||||||
self::addFeed($post_id, $post);
|
self::addFeed((int) $post_id, $post);
|
||||||
}
|
}
|
||||||
|
|
||||||
Notices::addSuccessNotice(__('Linked feed added.'));
|
Notices::addSuccessNotice(__('Linked feed added.'));
|
||||||
@ -322,9 +314,9 @@ 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->hiddenFields(),
|
||||||
(new Hidden(['action'], 'fac_add')),
|
(new Hidden(['action'], 'fac_add')),
|
||||||
(new Submit(['save']))->value(__('Save')),
|
(new Submit(['save']))->value(__('Save')),
|
||||||
]),
|
]),
|
||||||
@ -343,15 +336,16 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Linked feed form field
|
* Linked feed form field.
|
||||||
*
|
*
|
||||||
* @param string $url Feed URL
|
* @param string $url Feed URL
|
||||||
* @param string $format Feed format
|
* @param string $format Feed format
|
||||||
* @return string Feed form content
|
*
|
||||||
|
* @return string Feed form content
|
||||||
*/
|
*/
|
||||||
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 '';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,7 +355,7 @@ class BackendBehaviors
|
|||||||
// fac_url
|
// fac_url
|
||||||
(new Para())->items([
|
(new Para())->items([
|
||||||
(new Label(__('Feed URL:')))->for('fac_url')->class('required'),
|
(new Label(__('Feed URL:')))->for('fac_url')->class('required'),
|
||||||
(new Input('fac_url'))->size(60)->maxlenght(255)->value($url),
|
(new Input('fac_url'))->size(60)->maxlength(255)->value($url),
|
||||||
]),
|
]),
|
||||||
// fac_format
|
// fac_format
|
||||||
(new Para())->items([
|
(new Para())->items([
|
||||||
@ -373,13 +367,13 @@ class BackendBehaviors
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of fac formats
|
* List of fac formats.
|
||||||
*
|
*
|
||||||
* @return array List of fac formats
|
* @return array<string, string> List of fac formats
|
||||||
*/
|
*/
|
||||||
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);
|
||||||
@ -389,29 +383,29 @@ class BackendBehaviors
|
|||||||
|
|
||||||
$res = [];
|
$res = [];
|
||||||
foreach ($formats as $uid => $f) {
|
foreach ($formats as $uid => $f) {
|
||||||
$res[$f['name']] = $uid;
|
$res[(string) $f['name']] = (string) $uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete linked feed
|
* Delete linked feed.
|
||||||
*
|
*
|
||||||
* @param integer $post_id Post id
|
* @param int $post_id Post id
|
||||||
*/
|
*/
|
||||||
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');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add linked feed
|
* Add linked feed.
|
||||||
*
|
*
|
||||||
* @param integer $post_id Post id
|
* @param int $post_id Post id
|
||||||
* @param array|ArrayObject $options Feed options
|
* @param array<string, mixed>|ArrayObject<string, mixed> $options Feed options
|
||||||
*/
|
*/
|
||||||
protected static function addFeed(int $post_id, $options): void
|
protected static function addFeed(int $post_id, $options): void
|
||||||
{
|
{
|
||||||
@ -422,12 +416,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']
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,6 +169,9 @@ class Config extends Process
|
|||||||
Page::helpBlock('fac');
|
Page::helpBlock('fac');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array<string, string> $format
|
||||||
|
*/
|
||||||
private static function displayFacFormat(string $title, string $uid, array $format): void
|
private static function displayFacFormat(string $title, string $uid, array $format): void
|
||||||
{
|
{
|
||||||
echo
|
echo
|
||||||
@ -186,7 +185,7 @@ class Config extends Process
|
|||||||
(new Input([
|
(new Input([
|
||||||
'fac_formats[' . $uid . '][name]',
|
'fac_formats[' . $uid . '][name]',
|
||||||
'fac_formats_' . $uid . '_name',
|
'fac_formats_' . $uid . '_name',
|
||||||
]))->value(empty($format['name']) ? '' : $format['name'])->size(20)->maxlenght(255)->class('maximal'),
|
]))->value(empty($format['name']) ? '' : $format['name'])->size(20)->maxlength(255)->class('maximal'),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(__('In order to remove a format, leave its name empty.'))->class('form-note'),
|
(new Note())->text(__('In order to remove a format, leave its name empty.'))->class('form-note'),
|
||||||
// dateformat
|
// dateformat
|
||||||
@ -195,7 +194,7 @@ class Config extends Process
|
|||||||
(new Input([
|
(new Input([
|
||||||
'fac_formats[' . $uid . '][dateformat]',
|
'fac_formats[' . $uid . '][dateformat]',
|
||||||
'fac_formats_' . $uid . '_dateformat',
|
'fac_formats_' . $uid . '_dateformat',
|
||||||
]))->value(empty($format['dateformat']) ? '' : $format['dateformat'])->size(20)->maxlenght(255)->class('maximal'),
|
]))->value(empty($format['dateformat']) ? '' : $format['dateformat'])->size(20)->maxlength(255)->class('maximal'),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(__('Use date format of Dotclear or leave empty to use default date format of blog.'))->class('form-note'),
|
(new Note())->text(__('Use date format of Dotclear or leave empty to use default date format of blog.'))->class('form-note'),
|
||||||
// dateformat //todo: use Number
|
// dateformat //todo: use Number
|
||||||
@ -204,7 +203,7 @@ class Config extends Process
|
|||||||
(new Input([
|
(new Input([
|
||||||
'fac_formats[' . $uid . '][lineslimit]',
|
'fac_formats[' . $uid . '][lineslimit]',
|
||||||
'fac_formats_' . $uid . '_lineslimit',
|
'fac_formats_' . $uid . '_lineslimit',
|
||||||
]))->value(empty($format['lineslimit']) ? '' : $format['lineslimit'])->size(4)->maxlenght(5),
|
]))->value(empty($format['lineslimit']) ? '' : $format['lineslimit'])->size(4)->maxlength(5),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(__('Leave lengh empty for no limit.'))->class('form-note'),
|
(new Note())->text(__('Leave lengh empty for no limit.'))->class('form-note'),
|
||||||
]),
|
]),
|
||||||
@ -216,7 +215,7 @@ class Config extends Process
|
|||||||
(new Input([
|
(new Input([
|
||||||
'fac_formats[' . $uid . '][linestitletext]',
|
'fac_formats[' . $uid . '][linestitletext]',
|
||||||
'fac_formats_' . $uid . '_linestitletext',
|
'fac_formats_' . $uid . '_linestitletext',
|
||||||
]))->value(empty($format['linestitletext']) ? '' : $format['linestitletext'])->size(20)->maxlenght(255)->class('maximal'),
|
]))->value(empty($format['linestitletext']) ? '' : $format['linestitletext'])->size(20)->maxlength(255)->class('maximal'),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(
|
(new Note())->text(
|
||||||
__('Format can be:') .
|
__('Format can be:') .
|
||||||
@ -232,7 +231,7 @@ class Config extends Process
|
|||||||
(new Input([
|
(new Input([
|
||||||
'fac_formats[' . $uid . '][linestitleover]',
|
'fac_formats[' . $uid . '][linestitleover]',
|
||||||
'fac_formats_' . $uid . '_linestitleover',
|
'fac_formats_' . $uid . '_linestitleover',
|
||||||
]))->value(empty($format['linestitleover']) ? '' : $format['linestitleover'])->size(20)->maxlenght(255)->class('maximal'),
|
]))->value(empty($format['linestitleover']) ? '' : $format['linestitleover'])->size(20)->maxlength(255)->class('maximal'),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(
|
(new Note())->text(
|
||||||
__('Format can be:') .
|
__('Format can be:') .
|
||||||
@ -248,7 +247,7 @@ class Config extends Process
|
|||||||
(new Input([
|
(new Input([
|
||||||
'fac_formats[' . $uid . '][linestitlelength]',
|
'fac_formats[' . $uid . '][linestitlelength]',
|
||||||
'fac_formats_' . $uid . '_linestitlelength',
|
'fac_formats_' . $uid . '_linestitlelength',
|
||||||
]))->value(empty($format['linestitlelength']) ? '' : $format['linestitlelength'])->size(4)->maxlenght(5),
|
]))->value(empty($format['linestitlelength']) ? '' : $format['linestitlelength'])->size(4)->maxlength(5),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(__('Leave lengh empty for no limit.'))->class('form-note'),
|
(new Note())->text(__('Leave lengh empty for no limit.'))->class('form-note'),
|
||||||
]),
|
]),
|
||||||
@ -276,7 +275,7 @@ class Config extends Process
|
|||||||
(new Input([
|
(new Input([
|
||||||
'fac_formats[' . $uid . '][linesdescriptionlength]',
|
'fac_formats[' . $uid . '][linesdescriptionlength]',
|
||||||
'fac_formats_' . $uid . '_linesdescriptionlength',
|
'fac_formats_' . $uid . '_linesdescriptionlength',
|
||||||
]))->value(empty($format['linesdescriptionlength']) ? '' : $format['linesdescriptionlength'])->size(4)->maxlenght(5),
|
]))->value(empty($format['linesdescriptionlength']) ? '' : $format['linesdescriptionlength'])->size(4)->maxlength(5),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(__('Leave lengh empty for no limit.'))->class('form-note'),
|
(new Note())->text(__('Leave lengh empty for no limit.'))->class('form-note'),
|
||||||
]),
|
]),
|
||||||
@ -304,7 +303,7 @@ class Config extends Process
|
|||||||
(new Input([
|
(new Input([
|
||||||
'fac_formats[' . $uid . '][linescontentlength]',
|
'fac_formats[' . $uid . '][linescontentlength]',
|
||||||
'fac_formats_' . $uid . '_linescontentlength',
|
'fac_formats_' . $uid . '_linescontentlength',
|
||||||
]))->value(empty($format['linescontentlength']) ? '' : $format['linescontentlength'])->size(4)->maxlenght(5),
|
]))->value(empty($format['linescontentlength']) ? '' : $format['linescontentlength'])->size(4)->maxlength(5),
|
||||||
]),
|
]),
|
||||||
(new Note())->text(__('Leave lengh empty for no limit.'))->class('form-note'),
|
(new Note())->text(__('Leave lengh empty for no limit.'))->class('form-note'),
|
||||||
]),
|
]),
|
||||||
|
@ -1,27 +1,23 @@
|
|||||||
<?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\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 +27,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 ($___, $_____): 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 +59,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 +97,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 +132,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>' . App::frontend()->context()->global_filters(
|
||||||
$feed->description,
|
$feed->description,
|
||||||
['encode_xml', 'remove_html']
|
['encode_xml', 'remove_html']
|
||||||
) . '</p>';
|
) . '</p>';
|
||||||
@ -146,7 +141,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 +158,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 = App::frontend()->context()->global_filters(
|
||||||
str_replace(
|
str_replace(
|
||||||
[
|
[
|
||||||
'%D',
|
'%D',
|
||||||
@ -179,13 +174,13 @@ class Frontend extends Process
|
|||||||
$item->description,
|
$item->description,
|
||||||
$item->content,
|
$item->content,
|
||||||
],
|
],
|
||||||
$format['linestitletext']
|
(string) $format['linestitletext']
|
||||||
),
|
),
|
||||||
['remove_html', 'cut_string' => abs((int) $format['linestitlelength'])],
|
['remove_html', 'cut_string' => abs((int) $format['linestitlelength'])],
|
||||||
);
|
);
|
||||||
|
|
||||||
// Entries over title
|
// Entries over title
|
||||||
$overtitle = context::global_filters(
|
$overtitle = App::frontend()->context()->global_filters(
|
||||||
str_replace(
|
str_replace(
|
||||||
[
|
[
|
||||||
'%D',
|
'%D',
|
||||||
@ -201,7 +196,7 @@ class Frontend extends Process
|
|||||||
$item->description,
|
$item->description,
|
||||||
$item->content,
|
$item->content,
|
||||||
],
|
],
|
||||||
$format['linestitleover']
|
(string) $format['linestitleover']
|
||||||
),
|
),
|
||||||
['remove_html', 'cut_string' => 350],
|
['remove_html', 'cut_string' => 350],
|
||||||
);
|
);
|
||||||
@ -211,7 +206,7 @@ class Frontend extends Process
|
|||||||
if ($format['showlinesdescription']
|
if ($format['showlinesdescription']
|
||||||
&& '' != $item->description) {
|
&& '' != $item->description) {
|
||||||
$description = '<dd>' .
|
$description = '<dd>' .
|
||||||
context::global_filters(
|
App::frontend()->context()->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 +217,7 @@ class Frontend extends Process
|
|||||||
if ($format['showlinescontent']
|
if ($format['showlinescontent']
|
||||||
&& '' != $item->content) {
|
&& '' != $item->content) {
|
||||||
$content = '<dd>' .
|
$content = '<dd>' .
|
||||||
context::global_filters(
|
App::frontend()->context()->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>';
|
||||||
|
@ -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')) . "' "))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
19
src/My.php
19
src/My.php
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user