upgrade to dotclear 2.28

This commit is contained in:
Jean-Christian Denis 2023-10-14 15:41:43 +02:00
parent 17e98ca0f2
commit f2a3977f2d
Signed by: JcDenis
GPG key ID: 1B5B8C5B90B6C951
33 changed files with 540 additions and 660 deletions

View file

@ -1,3 +1,9 @@
zoneclearFeedServer 2023.10.14
===========================================================
* Require Dotclear 2.28
* Require PHP 8.1
* Upgrade to Dotclear 2.28
zoneclearFeedServer 2023.08.20 zoneclearFeedServer 2023.08.20
=========================================================== ===========================================================
* Require Dotclear 2.27 * Require Dotclear 2.27

View file

@ -1,8 +1,8 @@
# README # README
[![Release](https://img.shields.io/badge/release-2023.08.20-a2cbe9.svg)](https://git.dotclear.watch/JcDenis/zoneclearFeedServer/releases) [![Release](https://img.shields.io/badge/release-2023.10.14-a2cbe9.svg)](https://git.dotclear.watch/JcDenis/zoneclearFeedServer/releases)
![Date](https://img.shields.io/badge/date-2023.08.20-c44d58.svg) ![Date](https://img.shields.io/badge/date-2023.10.14-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/zoneclearFeedServer) [![Dotaddict](https://img.shields.io/badge/dotaddict-official-9ac123.svg)](https://plugins.dotaddict.org/dc2/details/zoneclearFeedServer)
[![License](https://img.shields.io/badge/license-GPL--2.0-ececec.svg)](https://git.dotclear.watch/JcDenis/zoneclearFeedServer/src/branch/master/LICENSE) [![License](https://img.shields.io/badge/license-GPL--2.0-ececec.svg)](https://git.dotclear.watch/JcDenis/zoneclearFeedServer/src/branch/master/LICENSE)
@ -14,7 +14,7 @@ _zoneclearFeedServer_ is a plugin for the open-source web publishing software ca
## REQUIREMENTS ## REQUIREMENTS
* Dotclear 2.27 * Dotclear 2.28
* PHP 8.1 * PHP 8.1
* Dotclear super admin permissions for plugin and services configuration * Dotclear super admin permissions for plugin and services configuration
* Dotclear admin permissions to manage feeds * Dotclear admin permissions to manage feeds

View file

@ -1,32 +1,28 @@
<?php <?php
/** /**
* @brief zoneclearFeedServer, a plugin for Dotclear 2 * @file
* @brief The plugin zoneclearFeedServer definition
* @ingroup zoneclearFeedServer
* *
* @package Dotclear * @defgroup zoneclearFeedServer Plugin zoneclearFeedServer.
* @subpackage Plugin
* *
* @author Jean-Christian Denis, BG, Pierre Van Glabeke * Mix your blog with a feeds planet.
* *
* @copyright Jean-Christian Denis * @author Jean-Christian Denis (author)
* @author Pierre Van Glabeke
* @author BG
* @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(
'Feeds server', 'Feeds server',
'Mix your blog with a feeds planet', 'Mix your blog with a feeds planet',
'Jean-Christian Denis, BG, Pierre Van Glabeke', 'Jean-Christian Denis, BG, Pierre Van Glabeke',
'2023.08.20', '2023.10.14',
[ [
'requires' => [ 'requires' => [['core', '2.28']],
['php', '8.1'], 'permissions' => 'My',
['core', '2.27'],
],
'permissions' => dcCore::app()->auth->makePermissions([
dcCore::app()->auth::PERMISSION_CONTENT_ADMIN,
]),
'type' => 'plugin', 'type' => 'plugin',
'support' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/issues', 'support' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/issues',
'details' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/src/branch/master/README.md', 'details' => 'https://git.dotclear.watch/JcDenis/' . basename(__DIR__) . '/src/branch/master/README.md',

View file

@ -1,20 +0,0 @@
<?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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 initZoneclearFeedServer
{
public const TABLE_NAME = 'zc_feed';
}

View file

@ -5,6 +5,8 @@
# By Olivier Meunier and contributors # By Olivier Meunier and contributors
# Licensed under the GPL version 2.0 license # Licensed under the GPL version 2.0 license
use Dotclear\App;
$opts = getopt('d:c:b:u:h'); $opts = getopt('d:c:b:u:h');
function zchelp(string|int $status = 0): void function zchelp(string|int $status = 0): void
@ -69,18 +71,18 @@ unset($blog_id);
require $dc_root . '/inc/prepend.php'; require $dc_root . '/inc/prepend.php';
unset($dc_root); unset($dc_root);
dcCore::app()->setBlog(is_string(DC_BLOG_ID) ? DC_BLOG_ID : ''); App::blog()->loadFromBlog(is_string(DC_BLOG_ID) ? DC_BLOG_ID : '');
if (is_null(dcCore::app()->blog) || dcCore::app()->blog->id == null) { if (!App::blog()->isDefined() || '' == App::blog()->id()) {
fwrite(STDERR, "Blog is not defined\n"); fwrite(STDERR, "Blog is not defined\n");
exit(1); exit(1);
} }
if (!isset($opts['u']) || !dcCore::app()->auth->checkUser(is_string($opts['u']) ? $opts['u'] : '')) { if (!isset($opts['u']) || !App::auth()->checkUser(is_string($opts['u']) ? $opts['u'] : '')) {
fwrite(STDERR, "Unable to set user\n"); fwrite(STDERR, "Unable to set user\n");
exit(1); exit(1);
} }
dcCore::app()->plugins->loadModules(DC_PLUGINS_ROOT); App::plugins()->loadModules(DC_PLUGINS_ROOT);
try { try {
$zc = Dotclear\Plugin\zoneclearFeedServer\ZoneclearFeedServer::instance(); $zc = Dotclear\Plugin\zoneclearFeedServer\ZoneclearFeedServer::instance();

View file

@ -2,11 +2,11 @@
<modules xmlns:da="http://dotaddict.org/da/"> <modules xmlns:da="http://dotaddict.org/da/">
<module id="zoneclearFeedServer"> <module id="zoneclearFeedServer">
<name>Feeds server</name> <name>Feeds server</name>
<version>2023.08.20</version> <version>2023.10.14</version>
<author>Jean-Christian Denis, BG, Pierre Van Glabeke</author> <author>Jean-Christian Denis, BG, Pierre Van Glabeke</author>
<desc>Mix your blog with a feeds planet</desc> <desc>Mix your blog with a feeds planet</desc>
<file>https://git.dotclear.watch/JcDenis/zoneclearFeedServer/releases/download/v2023.08.20/plugin-zoneclearFeedServer.zip</file> <file>https://git.dotclear.watch/JcDenis/zoneclearFeedServer/releases/download/v2023.10.14/plugin-zoneclearFeedServer.zip</file>
<da:dcmin>2.27</da:dcmin> <da:dcmin>2.28</da:dcmin>
<da:details>https://git.dotclear.watch/JcDenis/zoneclearFeedServer/src/branch/master/README.md</da:details> <da:details>https://git.dotclear.watch/JcDenis/zoneclearFeedServer/src/branch/master/README.md</da:details>
<da:support>https://git.dotclear.watch/JcDenis/zoneclearFeedServer/issues</da:support> <da:support>https://git.dotclear.watch/JcDenis/zoneclearFeedServer/issues</da:support>
</module> </module>

View file

@ -1,20 +1,10 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Database\Cursor; use Dotclear\Database\Cursor;
use Dotclear\Plugin\activityReport\{ use Dotclear\Plugin\activityReport\{
Action, Action,
@ -23,7 +13,13 @@ use Dotclear\Plugin\activityReport\{
}; };
/** /**
* @brief zoneclearFeedServer activityReport class.
* @ingroup zoneclearFeedServer
*
* Add feeds actions to the plugin activity report. * Add feeds actions to the plugin activity report.
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class ActivityReportActions class ActivityReportActions
{ {
@ -37,7 +33,7 @@ class ActivityReportActions
__('Feed named "%s" point to "%s" has been updated by "%s"'), __('Feed named "%s" point to "%s" has been updated by "%s"'),
'zoneclearFeedServerAfterUpdateFeed', 'zoneclearFeedServerAfterUpdateFeed',
function (Cursor $cur, int $id): void { function (Cursor $cur, int $id): void {
$user = dcCore::app()->auth->getInfo('user_cn'); $user = App::auth()->getInfo('user_cn');
if (!is_string($user)) { if (!is_string($user)) {
return; return;
} }
@ -64,7 +60,7 @@ class ActivityReportActions
__('A new feed named "%s" point to "%s" was added by "%s"'), __('A new feed named "%s" point to "%s" was added by "%s"'),
'zoneclearFeedServerAfterAddFeed', 'zoneclearFeedServerAfterAddFeed',
function (Cursor $cur, int $id): void { function (Cursor $cur, int $id): void {
$user = dcCore::app()->auth->getInfo('user_cn'); $user = App::auth()->getInfo('user_cn');
if (!is_string($user) if (!is_string($user)
|| !is_string($cur->getField('feed_name')) || !is_string($cur->getField('feed_name'))
|| !is_string($cur->getField('feed_feed')) || !is_string($cur->getField('feed_feed'))
@ -115,7 +111,7 @@ class ActivityReportActions
} }
$row = new FeedRow($rs); $row = new FeedRow($rs);
$user = dcCore::app()->auth->getInfo('user_cn'); $user = App::auth()->getInfo('user_cn');
if (!is_string($user)) { if (!is_string($user)) {
return; return;
} }

View file

@ -1,24 +1,18 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Core\Process; use Dotclear\Core\Process;
/** /**
* Backend prepend. * @brief zoneclearFeedServer backend class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Backend extends Process class Backend extends Process
{ {
@ -34,13 +28,13 @@ class Backend extends Process
} }
// behaviors that will be always loaded // behaviors that will be always loaded
dcCore::app()->addBehaviors([ App::behavior()->addBehaviors([
// Allways take care to delete related info about feed post in meta table // Allways take care to delete related info about feed post in meta table
'adminBeforePostDelete' => function (int $post_id): void { 'adminBeforePostDelete' => function (int $post_id): void {
ZoneclearFeedServer::instance()::deletePostsMeta($post_id); ZoneclearFeedServer::instance()::deletePostsMeta($post_id);
}, },
// widgets registration // widgets registration
'initWidgets' => [Widgets::class, 'init'], 'initWidgets' => Widgets::init(...),
// add Uninstaller cleaner for special direct action // add Uninstaller cleaner for special direct action
'UninstallerCleanersConstruct' => function ($uninstaller_stack) { 'UninstallerCleanersConstruct' => function ($uninstaller_stack) {
UninstallCleaner::init($uninstaller_stack); UninstallCleaner::init($uninstaller_stack);
@ -61,14 +55,14 @@ class Backend extends Process
My::addBackendMenuItem(); My::addBackendMenuItem();
// behaviors that require user perm // behaviors that require user perm
dcCore::app()->addBehaviors([ App::behavior()->addBehaviors([
'adminDashboardFavoritesV2' => [BackendBehaviors::class, 'adminDashboardFavoritesV2'], 'adminDashboardFavoritesV2' => BackendBehaviors::adminDashboardFavoritesV2(...),
'adminColumnsListsV2' => [BackendBehaviors::class, 'adminColumnsListsV2'], 'adminColumnsListsV2' => BackendBehaviors::adminColumnsListsV2(...),
'adminFiltersListsV2' => [BackendBehaviors::class, 'adminFiltersListsV2'], 'adminFiltersListsV2' => BackendBehaviors::adminFiltersListsV2(...),
'adminPostListHeaderV2' => [BackendBehaviors::class, 'adminPostListHeaderV2'], 'adminPostListHeaderV2' => BackendBehaviors::adminPostListHeaderV2(...),
'adminPostListValueV2' => [BackendBehaviors::class, 'adminPostListValueV2'], 'adminPostListValueV2' => BackendBehaviors::adminPostListValueV2(...),
'adminPostHeaders' => [BackendBehaviors::class, 'adminPostHeaders'], 'adminPostHeaders' => BackendBehaviors::adminPostHeaders(...),
'adminPostFormItems' => [BackendBehaviors::class, 'adminPostFormItems'], 'adminPostFormItems' => BackendBehaviors::adminPostFormItems(...),
]); ]);
return true; return true;

View file

@ -1,21 +1,11 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use ArrayObject; use ArrayObject;
use dcCore; use Dotclear\App;
use Dotclear\Core\Backend\Favorites; use Dotclear\Core\Backend\Favorites;
use Dotclear\Database\MetaRecord; use Dotclear\Database\MetaRecord;
use Dotclear\Helper\Html\Form\{ use Dotclear\Helper\Html\Form\{
@ -27,7 +17,11 @@ use Dotclear\Helper\Html\Form\{
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
/** /**
* Backend behaviors. * @brief zoneclearFeedServer backend behaviors class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class BackendBehaviors class BackendBehaviors
{ {
@ -41,9 +35,9 @@ class BackendBehaviors
'url' => My::manageUrl(), 'url' => My::manageUrl(),
'small-icon' => My::icons(), 'small-icon' => My::icons(),
'large-icon' => My::icons(), 'large-icon' => My::icons(),
'permissions' => dcCore::app()->auth->makePermissions([ 'permissions' => App::auth()->makePermissions([
dcCore::app()->auth::PERMISSION_USAGE, App::auth()::PERMISSION_USAGE,
dcCore::app()->auth::PERMISSION_CONTENT_ADMIN, App::auth()::PERMISSION_CONTENT_ADMIN,
]), ]),
// update user dashboard favorites icon with nb of updated feeds // update user dashboard favorites icon with nb of updated feeds
'dashboard_cb' => function (ArrayObject $fav): void { 'dashboard_cb' => function (ArrayObject $fav): void {
@ -123,7 +117,7 @@ class BackendBehaviors
*/ */
public static function adminPostListValueV2(MetaRecord $rs, ArrayObject $cols): void public static function adminPostListValueV2(MetaRecord $rs, ArrayObject $cols): void
{ {
$rs_meta = dcCore::app()->meta->getMetadata(['post_id' => $rs->f('post_id'), 'meta_type' => My::META_PREFIX . 'id']); $rs_meta = App::meta()->getMetadata(['post_id' => $rs->f('post_id'), 'meta_type' => My::META_PREFIX . 'id']);
if ($rs_meta->isEmpty()) { if ($rs_meta->isEmpty()) {
$item = (new Text('', '-')); $item = (new Text('', '-'));
} else { } else {
@ -150,7 +144,7 @@ class BackendBehaviors
public static function adminPostFormItems(ArrayObject $main_items, ArrayObject $sidebar_items, ?MetaRecord $post): void public static function adminPostFormItems(ArrayObject $main_items, ArrayObject $sidebar_items, ?MetaRecord $post): void
{ {
// nullsafe // nullsafe
if (is_null(dcCore::app()->blog)) { if (!App::blog()->isDefined()) {
return; return;
} }
@ -159,7 +153,7 @@ class BackendBehaviors
return; return;
} }
$url = dcCore::app()->meta->getMetadata([ $url = App::meta()->getMetadata([
'post_id' => $post->f('post_id'), 'post_id' => $post->f('post_id'),
'meta_type' => My::META_PREFIX . 'url', 'meta_type' => My::META_PREFIX . 'url',
'limit' => 1, 'limit' => 1,
@ -169,21 +163,21 @@ class BackendBehaviors
return; return;
} }
$author = dcCore::app()->meta->getMetadata([ $author = App::meta()->getMetadata([
'post_id' => $post->f('post_id'), 'post_id' => $post->f('post_id'),
'meta_type' => My::META_PREFIX . 'author', 'meta_type' => My::META_PREFIX . 'author',
'limit' => 1, 'limit' => 1,
]); ]);
$author = $author->isEmpty() ? '' : $author->f('meta_id'); $author = $author->isEmpty() ? '' : $author->f('meta_id');
$site = dcCore::app()->meta->getMetadata([ $site = App::meta()->getMetadata([
'post_id' => $post->f('post_id'), 'post_id' => $post->f('post_id'),
'meta_type' => My::META_PREFIX . 'site', 'meta_type' => My::META_PREFIX . 'site',
'limit' => 1, 'limit' => 1,
]); ]);
$site = $site->isEmpty() ? '' : $site->f('meta_id'); $site = $site->isEmpty() ? '' : $site->f('meta_id');
$sitename = dcCore::app()->meta->getMetadata([ $sitename = App::meta()->getMetadata([
'post_id' => $post->f('post_id'), 'post_id' => $post->f('post_id'),
'meta_type' => My::META_PREFIX . 'sitename', 'meta_type' => My::META_PREFIX . 'sitename',
'limit' => 1, 'limit' => 1,
@ -191,11 +185,11 @@ class BackendBehaviors
$sitename = $sitename->isEmpty() ? '' : $sitename->f('meta_id'); $sitename = $sitename->isEmpty() ? '' : $sitename->f('meta_id');
$edit = (new Text('', '')); $edit = (new Text('', ''));
if (dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([ if (App::auth()->check(App::auth()->makePermissions([
dcCore::app()->auth::PERMISSION_CONTENT_ADMIN, App::auth()::PERMISSION_CONTENT_ADMIN,
]), dcCore::app()->blog->id) ]), App::blog()->id())
) { ) {
$fid = dcCore::app()->meta->getMetadata([ $fid = App::meta()->getMetadata([
'post_id' => $post->f('post_id'), 'post_id' => $post->f('post_id'),
'meta_type' => My::META_PREFIX . 'id', 'meta_type' => My::META_PREFIX . 'id',
'limit' => 1, 'limit' => 1,

View file

@ -14,12 +14,16 @@ declare(strict_types=1);
namespace Dotclear\Plugin\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
use Exception; use Exception;
/** /**
* Various combo list. * @brief zoneclearFeedServer backend combo helper.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Combo class Combo
{ {
@ -122,7 +126,7 @@ class Combo
$combo = ['-' => '']; $combo = ['-' => ''];
try { try {
$categories = dcCore::app()->blog?->getCategories(['post_type' => 'post']); $categories = App::blog()->getCategories(['post_type' => 'post']);
if (!is_null($categories)) { if (!is_null($categories)) {
while ($categories->fetch()) { while ($categories->fetch()) {
$level = is_numeric($categories->f('level')) ? (int) $categories->f('level') : 1; $level = is_numeric($categories->f('level')) ? (int) $categories->f('level') : 1;

View file

@ -14,7 +14,7 @@ declare(strict_types=1);
namespace Dotclear\Plugin\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Core\Backend\{ use Dotclear\Core\Backend\{
Notices, Notices,
ModulesList, ModulesList,
@ -34,7 +34,11 @@ use Dotclear\Helper\Html\Form\{
use Exception; use Exception;
/** /**
* Backend module configuration. * @brief zoneclearFeedServer config class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Config extends Process class Config extends Process
{ {
@ -72,13 +76,13 @@ class Config extends Process
Notices::addSuccessNotice( Notices::addSuccessNotice(
__('Configuration has been successfully updated.') __('Configuration has been successfully updated.')
); );
dcCore::app()->admin->url->redirect('admin.plugins', [ App::bakcend()->url()->redirect('admin.plugins', [
'module' => My::id(), 'module' => My::id(),
'conf' => '1', 'conf' => '1',
'redir' => !(dcCore::app()->admin->__get('list') instanceof ModulesList) ? '' : dcCore::app()->admin->__get('list')->getRedir(), 'redir' => !(App::backend()->__get('list') instanceof ModulesList) ? '' : App::backend()->__get('list')->getRedir(),
]); ]);
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
} }
return true; return true;
@ -94,7 +98,7 @@ class Config extends Process
$s = $z->settings; $s = $z->settings;
$msg = []; $msg = [];
if (!is_writable(DC_TPL_CACHE)) { if (!is_writable(App::config()->cacheRoot())) {
$msg[] = (new Para()) $msg[] = (new Para())
->class('error') ->class('error')
->text(__('Dotclear cache is not writable or not well configured!')); ->text(__('Dotclear cache is not writable or not well configured!'));
@ -105,7 +109,7 @@ class Config extends Process
(new Link()) (new Link())
->class('onblog_link outgoing') ->class('onblog_link outgoing')
->text(__('View the public list of feeds') . ' <img alt="" src="images/outgoing-link.svg">') ->text(__('View the public list of feeds') . ' <img alt="" src="images/outgoing-link.svg">')
->href(dcCore::app()->blog->url . dcCore::app()->url->getBase('zoneclearFeedsPage')), ->href(App::blog()->url() . App::url()->getBase('zoneclearFeedsPage')),
]); ]);
} }

View file

@ -17,7 +17,11 @@ namespace Dotclear\Plugin\zoneclearFeedServer;
use Dotclear\Database\MetaRecord; use Dotclear\Database\MetaRecord;
/** /**
* Feed meta record row type hinting. * @brief zoneclearFeedServer feed meta record row.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class FeedRow class FeedRow
{ {

View file

@ -1,21 +1,11 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use ArrayObject; use ArrayObject;
use dcCore; use Dotclear\App;
use Dotclear\Core\Backend\Action\Actions; use Dotclear\Core\Backend\Action\Actions;
use Dotclear\Core\Backend\Page; use Dotclear\Core\Backend\Page;
use Dotclear\Database\MetaRecord; use Dotclear\Database\MetaRecord;
@ -27,7 +17,11 @@ use Dotclear\Helper\Html\Html;
use Exception; use Exception;
/** /**
* Backend feeds list actions handler. * @brief zoneclearFeedServer feeds list actions.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class FeedsActions extends Actions class FeedsActions extends Actions
{ {
@ -56,7 +50,7 @@ class FeedsActions extends Actions
FeedsDefaultActions::addDefaultFeedsActions($this); FeedsDefaultActions::addDefaultFeedsActions($this);
# --BEHAVIOR-- zoneclearFeedServerAddFeedsActions - FeedsActions # --BEHAVIOR-- zoneclearFeedServerAddFeedsActions - FeedsActions
dcCore::app()->callBehavior('zoneclearFeedServerAddFeedsActions', $this); App::behavior()->callBehavior('zoneclearFeedServerAddFeedsActions', $this);
} }
public function beginPage(string $breadcrumb = '', string $head = ''): void public function beginPage(string $breadcrumb = '', string $head = ''): void
@ -83,10 +77,10 @@ class FeedsActions extends Actions
public function error(Exception $e): void public function error(Exception $e): void
{ {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
$this->beginPage( $this->beginPage(
Page::breadcrumb([ Page::breadcrumb([
Html::escapeHTML((string) dcCore::app()->blog?->name) => '', Html::escapeHTML(App::blog()->name()) => '',
$this->getCallerTitle() => $this->getRedirection(true), $this->getCallerTitle() => $this->getRedirection(true),
__('Feeds actions') => '', __('Feeds actions') => '',
]) ])

View file

@ -1,22 +1,10 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use ArrayObject; use ArrayObject;
use dcCore;
use dcMeta;
use Dotclear\Core\Backend\{ use Dotclear\Core\Backend\{
Notices, Notices,
Page Page
@ -35,7 +23,11 @@ use Dotclear\Helper\Html\Html;
use Exception; use Exception;
/** /**
* Backend feeds list default actions. * @brief zoneclearFeedServer feeds list default actions.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class FeedsDefaultActions class FeedsDefaultActions
{ {
@ -46,35 +38,35 @@ class FeedsDefaultActions
{ {
$ap->addAction( $ap->addAction(
[__('Change category') => 'changecat'], [__('Change category') => 'changecat'],
[self::class, 'doChangeCategory'] self::doChangeCategory(...)
); );
$ap->addAction( $ap->addAction(
[__('Change update interval') => 'changeint'], [__('Change update interval') => 'changeint'],
[self::class, 'doChangeInterval'] self::doChangeInterval(...)
); );
$ap->addAction( $ap->addAction(
[__('Disable feed update') => 'disablefeed'], [__('Disable feed update') => 'disablefeed'],
[self::class, 'doEnableFeed'] self::doEnableFeed(...)
); );
$ap->addAction( $ap->addAction(
[__('Enable feed update') => 'enablefeed'], [__('Enable feed update') => 'enablefeed'],
[self::class, 'doEnableFeed'] self::doEnableFeed(...)
); );
$ap->addAction( $ap->addAction(
[__('Reset last update') => 'resetupdlast'], [__('Reset last update') => 'resetupdlast'],
[self::class, 'doResetUpdate'] self::doResetUpdate(...)
); );
$ap->addAction( $ap->addAction(
[__('Update (check) feed') => 'updatefeed'], [__('Update (check) feed') => 'updatefeed'],
[self::class, 'doUpdateFeed'] self::doUpdateFeed(...)
); );
$ap->addAction( $ap->addAction(
[__('Delete related posts') => 'deletepost'], [__('Delete related posts') => 'deletepost'],
[self::class, 'doDeletePost'] self::doDeletePost(...)
); );
$ap->addAction( $ap->addAction(
[__('Delete feed (without related posts)') => 'deletefeed'], [__('Delete feed (without related posts)') => 'deletefeed'],
[self::class, 'doDeleteFeed'] self::doDeleteFeed(...)
); );
} }
@ -142,10 +134,10 @@ class FeedsDefaultActions
while ($posts->fetch()) { while ($posts->fetch()) {
if (is_numeric($posts->f('post_id'))) { if (is_numeric($posts->f('post_id'))) {
dcCore::app()->blog?->delPost((int) $posts->f('post_id')); App::blog()->delPost((int) $posts->f('post_id'));
$sql = new DeleteStatement(); $sql = new DeleteStatement();
$sql $sql
->from(dcCore::app()->prefix . dcMeta::META_TABLE_NAME) ->from(App::con()->prefix() . App::meta()::META_TABLE_NAME)
->where('post_id = ' . $posts->f('post_id')) ->where('post_id = ' . $posts->f('post_id'))
->and('meta_type ' . $sql->in($types)) ->and('meta_type ' . $sql->in($types))
->delete(); ->delete();
@ -270,7 +262,7 @@ class FeedsDefaultActions
} else { } else {
$ap->beginPage( $ap->beginPage(
Page::breadcrumb([ Page::breadcrumb([
Html::escapeHTML((string) dcCore::app()->blog?->name) => '', Html::escapeHTML(App::blog()->name()) => '',
__('Feeds server') => '', __('Feeds server') => '',
$ap->getCallerTitle() => $ap->getRedirection(true), $ap->getCallerTitle() => $ap->getRedirection(true),
__('Change category for this selection') => '', __('Change category for this selection') => '',
@ -294,7 +286,7 @@ class FeedsDefaultActions
(new Submit('do-action')) (new Submit('do-action'))
->value(__('Save')), ->value(__('Save')),
(new Hidden(['action'], 'changecat')), (new Hidden(['action'], 'changecat')),
dcCore::app()->formNonce(false), App::nonce()->formNonce(),
] ]
)), )),
@ -337,7 +329,7 @@ class FeedsDefaultActions
$ap->beginPage( $ap->beginPage(
Page::breadcrumb( Page::breadcrumb(
[ [
Html::escapeHTML((string) dcCore::app()->blog?->name) => '', Html::escapeHTML(App::blog()->name()) => '',
__('Feeds server') => '', __('Feeds server') => '',
$ap->getCallerTitle() => $ap->getRedirection(true), $ap->getCallerTitle() => $ap->getRedirection(true),
__('Change update frequency for this selection') => '', __('Change update frequency for this selection') => '',
@ -362,7 +354,7 @@ class FeedsDefaultActions
(new Submit('do-action')) (new Submit('do-action'))
->value(__('Save')), ->value(__('Save')),
(new Hidden(['action'], 'changeint')), (new Hidden(['action'], 'changeint')),
dcCore::app()->formNonce(false), App::nonce()->formNonce(),
] ]
)), )),

View file

@ -1,21 +1,11 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use ArrayObject; use ArrayObject;
use dcCore; use Dotclear\App;
use Dotclear\Core\Backend\Filter\Filters; use Dotclear\Core\Backend\Filter\Filters;
use Dotclear\Core\Backend\Listing\{ use Dotclear\Core\Backend\Listing\{
Listing, Listing,
@ -32,7 +22,11 @@ use Dotclear\Helper\Html\Form\{
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
/** /**
* Backend feeds list. * @brief zoneclearFeedServer backend feeds list.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class FeedsList extends Listing class FeedsList extends Listing
{ {
@ -126,7 +120,7 @@ class FeedsList extends Listing
if (!is_string($url)) { if (!is_string($url)) {
$url = ''; $url = '';
} }
$tz = dcCore::app()->auth->getInfo('user_tz'); $tz = App::auth()->getInfo('user_tz');
if (!is_string($tz)) { if (!is_string($tz)) {
$tz = 'UTC'; $tz = 'UTC';
} }

View file

@ -1,28 +1,21 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use dcUtils;
use Dotclear\Core\Process; use Dotclear\Core\Process;
use Dotclear\Database\MetaRecord; use Dotclear\Database\MetaRecord;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
use Exception; use Exception;
/** /**
* Frontend prepend. * @brief zoneclearFeedServer frontend class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Frontend extends Process class Frontend extends Process
{ {
@ -39,7 +32,7 @@ class Frontend extends Process
$s = ZoneclearFeedServer::instance()->settings; $s = ZoneclearFeedServer::instance()->settings;
dcCore::app()->addBehaviors([ App::behavior()->addBehaviors([
// posts record // posts record
'coreBlogGetPosts' => function (MetaRecord $rs): void { 'coreBlogGetPosts' => function (MetaRecord $rs): void {
RsExtPosts::$brother_extensions = $rs->extensions(); RsExtPosts::$brother_extensions = $rs->extensions();
@ -55,12 +48,12 @@ class Frontend extends Process
// Register template blocks // Register template blocks
foreach (My::TPL_BLOCKS as $block) { foreach (My::TPL_BLOCKS as $block) {
dcCore::app()->tpl->addBlock('zc' . $block, [Template::class, $block]); App::frontend()->template()->addBlock('zc' . $block, [Template::class, $block]);
} }
// Register template values // Register template values
foreach (My::TPL_VALUES as $value) { foreach (My::TPL_VALUES as $value) {
dcCore::app()->tpl->addValue('zc' . $value, [Template::class, $value]); App::frontend()->template()->addValue('zc' . $value, [Template::class, $value]);
} }
// module not active // module not active
@ -70,8 +63,8 @@ class Frontend extends Process
// feeds update methods // feeds update methods
if (1 == $s->bhv_pub_upd) { if (1 == $s->bhv_pub_upd) {
dcCore::app()->addBehavior('publicBeforeDocumentV2', function (): void { App::behavior()->addBehavior('publicBeforeDocumentV2', function (): void {
if (in_array(dcCore::app()->url->type, ['default', 'feed'])) { if (in_array(App::url()->type, ['default', 'feed'])) {
try { try {
ZoneclearFeedServer::instance()->checkFeedsUpdate(); ZoneclearFeedServer::instance()->checkFeedsUpdate();
} catch (Exception $e) { } catch (Exception $e) {
@ -79,28 +72,28 @@ class Frontend extends Process
}; };
}); });
} elseif (2 == $s->bhv_pub_upd) { } elseif (2 == $s->bhv_pub_upd) {
dcCore::app()->addBehavior('publicAfterDocumentV2', function (): void { App::behavior()->addBehavior('publicAfterDocumentV2', function (): void {
try { try {
ZoneclearFeedServer::instance()->checkFeedsUpdate(); ZoneclearFeedServer::instance()->checkFeedsUpdate();
} catch (Exception $e) { } catch (Exception $e) {
} }
}); });
} elseif (3 == $s->bhv_pub_upd) { } elseif (3 == $s->bhv_pub_upd) {
dcCore::app()->addBehavior('publicHeadContent', function (): void { App::behavior()->addBehavior('publicHeadContent', function (): void {
if (is_null(dcCore::app()->blog) || dcCore::app()->url->type != 'default') { if (!App::blog()->isDefined() || App::url()->type != 'default') {
return; return;
} }
$blog_url = Html::escapeJS( $blog_url = Html::escapeJS(
dcCore::app()->blog->url . App::blog()->url() .
dcCore::app()->url->getBase('zoneclearFeedsPage') . App::url()->getBase('zoneclearFeedsPage') .
'/zcfsupd' '/zcfsupd'
); );
$blog_id = Html::escapeJS(dcCore::app()->blog->id); $blog_id = Html::escapeJS(App::blog()->id());
echo echo
"\n<!-- JS for zoneclearFeedServer --> \n" . "\n<!-- JS for zoneclearFeedServer --> \n" .
dcUtils::jsLoad(dcCore::app()->blog->url . dcCore::app()->url->getBase('zoneclearFeedsPage') . '/zcfsupd.js') . App::plugins()->jsLoad(App::blog()->url() . App::url()->getBase('zoneclearFeedsPage') . '/zcfsupd.js') .
"<script type=\"text/javascript\"> \n//<![CDATA[\n" . "<script type=\"text/javascript\"> \n//<![CDATA[\n" .
' $(function(){if(!document.getElementById){return;} ' . ' $(function(){if(!document.getElementById){return;} ' .
" $('body').zoneclearFeedServer({blog_url:'" . " $('body').zoneclearFeedServer({blog_url:'" .

View file

@ -1,26 +1,20 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Core\Process; use Dotclear\Core\Process;
use Dotclear\Database\Structure; use Dotclear\Database\Structure;
use Exception; use Exception;
/** /**
* Module installation. * @brief zoneclearFeedServer install class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Install extends Process class Install extends Process
{ {
@ -40,7 +34,7 @@ class Install extends Process
Upgrade::preUpgrade(); Upgrade::preUpgrade();
// Tables // Tables
$s = new Structure(dcCore::app()->con, dcCore::app()->prefix); $s = new Structure(App::con(), App::con()->prefix());
$s->__get(My::TABLE_NAME) $s->__get(My::TABLE_NAME)
->field('feed_id', 'bigint', 0, false) ->field('feed_id', 'bigint', 0, false)
->field('feed_creadt', 'timestamp', 0, false, 'now()') ->field('feed_creadt', 'timestamp', 0, false, 'now()')
@ -67,7 +61,7 @@ class Install extends Process
->index('idx_zcfs_type', 'btree', 'feed_type') ->index('idx_zcfs_type', 'btree', 'feed_type')
->index('idx_zcfs_blog', 'btree', 'blog_id'); ->index('idx_zcfs_blog', 'btree', 'blog_id');
(new Structure(dcCore::app()->con, dcCore::app()->prefix))->synchronize($s); (new Structure(App::con(), App::con()->prefix()))->synchronize($s);
// Settings // Settings
$s = My::settings(); $s = My::settings();
@ -84,7 +78,7 @@ class Install extends Process
return true; return true;
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
return false; return false;
} }

View file

@ -1,20 +1,10 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Core\Backend\Filter\{ use Dotclear\Core\Backend\Filter\{
Filters, Filters,
FiltersLibrary FiltersLibrary
@ -37,7 +27,11 @@ use Dotclear\Helper\Html\Form\{
use Exception; use Exception;
/** /**
* Backend feeds list manage page. * @brief zoneclearFeedServer backend feeds manage class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Manage extends Process class Manage extends Process
{ {
@ -64,7 +58,7 @@ class Manage extends Process
// not configured // not configured
if (!$s->active || !$s->user) { if (!$s->active || !$s->user) {
dcCore::app()->error->add(__('Module is not wel configured')); App::error()->add(__('Module is not wel configured'));
return true; return true;
} }
@ -131,13 +125,13 @@ class Manage extends Process
$feeds_counter = $z->getFeeds($params, true)->f(0); $feeds_counter = $z->getFeeds($params, true)->f(0);
$feeds_list = new FeedsList($feeds, $feeds_counter); $feeds_list = new FeedsList($feeds, $feeds_counter);
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
} }
Page::openModule( Page::openModule(
My::id(), My::id(),
( (
isset($feeds_list) && !dcCore::app()->error->flag() ? isset($feeds_list) && !App::error()->flag() ?
$feeds_filter->js(My::manageUrl(['part' => 'feeds'], '&')) . $feeds_filter->js(My::manageUrl(['part' => 'feeds'], '&')) .
My::jsLoad('feeds') My::jsLoad('feeds')
: '' : ''

View file

@ -1,20 +1,10 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Core\Backend\Action\ActionsPosts; use Dotclear\Core\Backend\Action\ActionsPosts;
use Dotclear\Core\Backend\{ use Dotclear\Core\Backend\{
Notices, Notices,
@ -38,7 +28,11 @@ use Dotclear\Helper\L10n;
use Exception; use Exception;
/** /**
* Backend feed and feed posts manage page. * @brief zoneclearFeedServer backend feeds posts manage class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class ManageFeed extends Process class ManageFeed extends Process
{ {
@ -70,26 +64,26 @@ class ManageFeed extends Process
$testfeed_params['sql'] = 'AND feed_id <> ' . $v->id . ' '; $testfeed_params['sql'] = 'AND feed_id <> ' . $v->id . ' ';
} }
if ($z->getFeeds($testfeed_params, true)->f(0)) { if ($z->getFeeds($testfeed_params, true)->f(0)) {
dcCore::app()->error->add(__('Record with same feed URL already exists.')); App::error()->add(__('Record with same feed URL already exists.'));
} }
if (empty($v->name)) { if (empty($v->name)) {
dcCore::app()->error->add(__('You must provide a name.')); App::error()->add(__('You must provide a name.'));
} }
if (empty($v->owner)) { if (empty($v->owner)) {
dcCore::app()->error->add(__('You must provide an owner.')); App::error()->add(__('You must provide an owner.'));
} }
if (!$z::validateURL($v->url)) { if (!$z::validateURL($v->url)) {
dcCore::app()->error->add(__('You must provide valid site URL.')); App::error()->add(__('You must provide valid site URL.'));
} }
if (!$z::validateURL($v->feed)) { if (!$z::validateURL($v->feed)) {
dcCore::app()->error->add(__('You must provide valid feed URL.')); App::error()->add(__('You must provide valid feed URL.'));
} }
if (null !== $v->cat_id && !dcCore::app()->blog?->getCategory($v->cat_id)) { if (null !== $v->cat_id && !App::blog()->getCategory($v->cat_id)) {
dcCore::app()->error->add(__('You must provide valid category.')); App::error()->add(__('You must provide valid category.'));
} }
// check failed // check failed
if (dcCore::app()->error->flag()) { if (App::error()->flag()) {
return true; return true;
} }
@ -103,7 +97,7 @@ class ManageFeed extends Process
Notices::addSuccessNotice(__('Feed successfully created.')); Notices::addSuccessNotice(__('Feed successfully created.'));
My::redirect(['part' => 'feed', 'feed_id' => $id]); My::redirect(['part' => 'feed', 'feed_id' => $id]);
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
return true; return true;
} }
@ -158,13 +152,13 @@ class ManageFeed extends Process
'user_id' => 'P.user_id', ]; 'user_id' => 'P.user_id', ];
# --BEHAVIOR-- adminPostsSortbyLexCombo # --BEHAVIOR-- adminPostsSortbyLexCombo
dcCore::app()->callBehavior('adminPostsSortbyLexCombo', [& $sortby_lex]); App::behavior()->callBehavior('adminPostsSortbyLexCombo', [& $sortby_lex]);
$params['no_content'] = true; $params['no_content'] = true;
$params['feed_id'] = $v->id; $params['feed_id'] = $v->id;
$params['order'] = ( $params['order'] = (
array_key_exists($sortby, $sortby_lex) ? array_key_exists($sortby, $sortby_lex) ?
dcCore::app()->con->lexFields($sortby_lex[$sortby]) : App::con()->lexFields($sortby_lex[$sortby]) :
$sortby $sortby
) . ' ' . $order; ) . ' ' . $order;
@ -174,7 +168,7 @@ class ManageFeed extends Process
$counter = $z->getPostsByFeed($params, true); $counter = $z->getPostsByFeed($params, true);
$post_list = new PostsList($posts, $counter->f(0)); $post_list = new PostsList($posts, $counter->f(0));
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
} }
} }
@ -182,7 +176,7 @@ class ManageFeed extends Process
Page::openModule( Page::openModule(
My::id(), My::id(),
( (
$v->id && isset($post_filter) && !dcCore::app()->error->flag() ? $v->id && isset($post_filter) && !App::error()->flag() ?
$post_filter->js(My::manageUrl(['part' => 'feed', 'feed_id' => $v->id], '&') . '#entries') . $post_filter->js(My::manageUrl(['part' => 'feed', 'feed_id' => $v->id], '&') . '#entries') .
My::jsLoad('feed') My::jsLoad('feed')
: '' : ''
@ -385,7 +379,7 @@ class ManageFeed extends Process
->render(); ->render();
} }
if ($v->id && $v->can_view_page && isset($post_filter) && isset($post_list) && isset($posts_actions_page) && !dcCore::app()->error->flag()) { if ($v->id && $v->can_view_page && isset($post_filter) && isset($post_list) && isset($posts_actions_page) && !App::error()->flag()) {
echo '<div class="multi-part" title="' . __('Entries') . '" id="entries">'; echo '<div class="multi-part" title="' . __('Entries') . '" id="entries">';
# show posts filters # show posts filters

View file

@ -1,24 +1,18 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
/** /**
* Backend feed manage page vars (type hinting). * @brief zoneclearFeedServer backend vars definition.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class ManageFeedVars class ManageFeedVars
{ {
@ -52,9 +46,9 @@ class ManageFeedVars
{ {
$z = ZoneclearFeedServer::instance(); $z = ZoneclearFeedServer::instance();
$feed_headlink = '<link rel="%s" title="%s" href="' . dcCore::app()->admin->getPageURL() . '&amp;part=feed&amp;feed_id=%s" />'; $feed_headlink = '<link rel="%s" title="%s" href="' . App::backend()->getPageURL() . '&amp;part=feed&amp;feed_id=%s" />';
$feed_link = '<a href="' . dcCore::app()->admin->getPageURL() . '&amp;part=feed&amp;feed_id=%s" title="%s">%s</a>'; $feed_link = '<a href="' . App::backend()->getPageURL() . '&amp;part=feed&amp;feed_id=%s" title="%s">%s</a>';
$lang = dcCore::app()->auth->getInfo('user_lang'); $lang = App::auth()->getInfo('user_lang');
// default values // default values
$feed_id = 0; $feed_id = 0;
@ -82,7 +76,7 @@ class ManageFeedVars
$feed = $z->getFeeds(['feed_id' => $_REQUEST['feed_id']]); $feed = $z->getFeeds(['feed_id' => $_REQUEST['feed_id']]);
if ($feed->isEmpty()) { if ($feed->isEmpty()) {
dcCore::app()->error->add(__('This feed does not exist.')); Ap::error()->add(__('This feed does not exist.'));
$can_view_page = false; $can_view_page = false;
} else { } else {
$row = new FeedRow($feed); $row = new FeedRow($feed);
@ -224,7 +218,7 @@ class ManageFeedVars
$cur->setField('feed_upd_int', $this->upd_int); $cur->setField('feed_upd_int', $this->upd_int);
# --BEHAVIOR-- adminBeforeZoneclearFeedServerFeedSave - Cursor, int # --BEHAVIOR-- adminBeforeZoneclearFeedServerFeedSave - Cursor, int
dcCore::app()->callBehavior('adminBeforeZoneclearFeedServerFeedSave', $cur, $id); App::behavior()->callBehavior('adminBeforeZoneclearFeedServerFeedSave', $cur, $id);
if (!$id) { if (!$id) {
// create feed // create feed
@ -235,7 +229,7 @@ class ManageFeedVars
} }
# --BEHAVIOR-- adminAfterZoneclearFeedServerFeedSave - Cursor - int # --BEHAVIOR-- adminAfterZoneclearFeedServerFeedSave - Cursor - int
dcCore::app()->callBehavior('adminAfterZoneclearFeedServerFeedSave', $cur, $id); App::behavior()->callBehavior('adminAfterZoneclearFeedServerFeedSave', $cur, $id);
return $id; return $id;
} }

View file

@ -1,15 +1,5 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
@ -17,17 +7,33 @@ namespace Dotclear\Plugin\zoneclearFeedServer;
use Dotclear\Module\MyPlugin; use Dotclear\Module\MyPlugin;
/** /**
* This module definitions. * @brief zoneclearFeedServer My helper.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class My extends MyPlugin class My extends MyPlugin
{ {
/** @var string This module database table name */ /**
public const TABLE_NAME = \initZoneclearFeedServer::TABLE_NAME; * This module database table name.
*
* @var string TABLE_NAME
*/
public const TABLE_NAME = 'zc_feed';
/** @var string This module meta prefix */ /**
* This module meta prefix.
*
* @var string META_PREFIX
*/
public const META_PREFIX = 'zoneclearfeed_'; public const META_PREFIX = 'zoneclearfeed_';
/** @var array<int,string> This module template blocks */ /**
* This module template blocks.
*
* @var array<int,string> TPL_BLOCKS
*/
public const TPL_BLOCKS = [ public const TPL_BLOCKS = [
'Feeds', 'Feeds',
'FeedsFooter', 'FeedsFooter',
@ -35,7 +41,11 @@ class My extends MyPlugin
'FeedIf', 'FeedIf',
]; ];
/** @var array<int,string> This module template values */ /**
* This module template values.
*
* @var array<int,string> TPL_VALUES
*/
public const TPL_VALUES = [ public const TPL_VALUES = [
'FeedsCount', 'FeedsCount',
'FeedsEntriesCount', 'FeedsEntriesCount',
@ -55,8 +65,5 @@ class My extends MyPlugin
'FeedFeedURL', 'FeedFeedURL',
]; ];
public static function checkCustomContext(int $context): ?bool // Use default permissions
{
return $context == My::BACKEND ? defined('DC_CONTEXT_ADMIN') : null;
}
} }

View file

@ -1,22 +1,11 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use ArrayObject; use ArrayObject;
use dcCore; use Dotclear\App;
use dcUtils;
use Dotclear\Core\Backend\Combos; use Dotclear\Core\Backend\Combos;
use Dotclear\Core\Backend\Filter\{ use Dotclear\Core\Backend\Filter\{
Filter, Filter,
@ -27,7 +16,11 @@ use Dotclear\Helper\Html\Html;
use Exception; use Exception;
/** /**
* Backend feed posts list filters. * @brief zoneclearFeedServer backend feeds posts list filter.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class PostsFilter extends Filters class PostsFilter extends Filters
{ {
@ -45,7 +38,7 @@ class PostsFilter extends Filters
]); ]);
# --BEHAVIOR-- zcfsPostFilter # --BEHAVIOR-- zcfsPostFilter
dcCore::app()->callBehavior('zcfsPostFilter', $filters); App::behavior()->callBehavior('zcfsPostFilter', $filters);
$filters = $filters->getArrayCopy(); $filters = $filters->getArrayCopy();
@ -62,18 +55,18 @@ class PostsFilter extends Filters
$users = null; $users = null;
try { try {
$users = dcCore::app()->blog?->getPostsUsers(); $users = App::blog()->getPostsUsers();
if (is_null($users) || $users->isEmpty()) { if (is_null($users) || $users->isEmpty()) {
return null; return null;
} }
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
return null; return null;
} }
$combo = Combos::getUsersCombo($users); $combo = Combos::getUsersCombo($users);
dcUtils::lexicalKeySort($combo); App::lexical()->lexicalKeySort($combo);
return (new Filter('user_id')) return (new Filter('user_id'))
->param() ->param()
@ -95,12 +88,12 @@ class PostsFilter extends Filters
$categories = null; $categories = null;
try { try {
$categories = dcCore::app()->blog?->getCategories(); $categories = App::blog()->getCategories();
if (is_null($categories) || $categories->isEmpty()) { if (is_null($categories) || $categories->isEmpty()) {
return null; return null;
} }
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
return null; return null;
} }
@ -149,12 +142,12 @@ class PostsFilter extends Filters
$dates = null; $dates = null;
try { try {
$dates = dcCore::app()->blog?->getDates(['type' => 'month']); $dates = App::blog()->getDates(['type' => 'month']);
if (is_null($dates) || $dates->isEmpty()) { if (is_null($dates) || $dates->isEmpty()) {
return null; return null;
} }
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->error->add($e->getMessage()); App::error()->add($e->getMessage());
return null; return null;
} }

View file

@ -1,21 +1,11 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use ArrayObject; use ArrayObject;
use dcCore; use Dotclear\App;
use Dotclear\Core\Backend\Listing\{ use Dotclear\Core\Backend\Listing\{
Listing, Listing,
Pager Pager
@ -31,7 +21,11 @@ use Dotclear\Helper\Html\Form\{
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
/** /**
* Backend feed posts lists. * @brief zoneclearFeedServer backend feed posts lists.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class PostsList extends Listing class PostsList extends Listing
{ {
@ -108,7 +102,7 @@ class PostsList extends Listing
{ {
$cat_title = (new Text('', __('None'))); $cat_title = (new Text('', __('None')));
if ($this->rs->cat_title if ($this->rs->cat_title
&& dcCore::app()->auth->check(dcCore::app()->auth->makePermissions([dcCore::app()->auth::PERMISSION_CATEGORIES]), dcCore::app()->blog?->id) && App::auth()->check(App::auth()->makePermissions([App::auth()::PERMISSION_CATEGORIES]), App::blog()->id())
) { ) {
$cat_title = (new Link()) $cat_title = (new Link())
->href('category.php?id=' . $this->rs->cat_id) ->href('category.php?id=' . $this->rs->cat_id)
@ -155,7 +149,7 @@ class PostsList extends Listing
->class('maximal') ->class('maximal')
->items([ ->items([
(new Link()) (new Link())
->href(dcCore::app()->getPostAdminURL($this->rs->post_type, $this->rs->post_id)) ->href(App::postTypes()->getPostAdminURL($this->rs->post_type, $this->rs->post_id))
->title(Html::escapeHTML($this->rs->getURL())) ->title(Html::escapeHTML($this->rs->getURL()))
->text(Html::escapeHTML(trim(Html::clean($this->rs->post_title)))), ->text(Html::escapeHTML(trim(Html::clean($this->rs->post_title)))),
]), ]),

View file

@ -1,24 +1,18 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Core\Process; use Dotclear\Core\Process;
/** /**
* Module prepend. * @brief zoneclearFeedServer prepend class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Prepend extends Process class Prepend extends Process
{ {
@ -34,11 +28,11 @@ class Prepend extends Process
} }
// public url for page of description of the flux // public url for page of description of the flux
dcCore::app()->url->register( App::url()->register(
'zoneclearFeedsPage', 'zoneclearFeedsPage',
'zcfeeds', 'zcfeeds',
'^zcfeeds(.*?)$', '^zcfeeds(.*?)$',
[UrlHandler::class, 'zoneclearFeedsPage'] UrlHandler::zoneclearFeedsPage(...)
); );
// report zoneclearFeedServer activities // report zoneclearFeedServer activities

View file

@ -1,30 +1,26 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use context; use Dotclear\App;
use dcCore; use Dotclear\Core\Frontend\Ctx;
use rsExtPost;
use rsExtPostPublic;
use Dotclear\Database\MetaRecord; use Dotclear\Database\MetaRecord;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
use Dotclear\Schema\Extension\Post;
use Dotclear\Schema\Extension\PostPublic;
/** /**
* @brief zoneclearFeedServer posts record extension.
* @ingroup zoneclearFeedServer
*
* Posts record extension to integrate feed info. * Posts record extension to integrate feed info.
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class RsExtPosts extends rsExtPost class RsExtPosts extends Post
{ {
/** @var array<string,mixed> $brother_extensions Stack posts record extensions */ /** @var array<string,mixed> $brother_extensions Stack posts record extensions */
public static array $brother_extensions = []; public static array $brother_extensions = [];
@ -39,7 +35,7 @@ class RsExtPosts extends rsExtPost
*/ */
public static function zcFeed(MetaRecord $rs, string $info): ?string public static function zcFeed(MetaRecord $rs, string $info): ?string
{ {
$meta = dcCore::app()->meta->getMetadata([ $meta = App::meta()->getMetadata([
'post_id' => $rs->f('post_id'), 'post_id' => $rs->f('post_id'),
'meta_type' => My::META_PREFIX . $info, 'meta_type' => My::META_PREFIX . $info,
'limit' => 1, 'limit' => 1,
@ -61,10 +57,10 @@ class RsExtPosts extends rsExtPost
$ext = static::$brother_extensions; $ext = static::$brother_extensions;
if (isset($ext[$type]) && is_callable($ext[$type])) { if (isset($ext[$type]) && is_callable($ext[$type])) {
$func = $ext[$type]; $func = $ext[$type];
} elseif (is_callable([rsExtPostPublic::class, $type])) { } elseif (is_callable([PostPublic::class, $type])) {
$func = [rsExtPostPublic::class, $type]; $func = [PostPublic::class, $type];
} elseif (is_callable([rsExtPost::class, $type])) { } elseif (is_callable([Post::class, $type])) {
$func = [rsExtPost::class, $type]; $func = [Post::class, $type];
} else { } else {
return ''; return '';
} }
@ -118,7 +114,7 @@ class RsExtPosts extends rsExtPost
{ {
$url = $rs->__call('zcFeed', ['url']); $url = $rs->__call('zcFeed', ['url']);
$site = $rs->__call('zcFeed', ['site']); $site = $rs->__call('zcFeed', ['site']);
$full = in_array(dcCore::app()->url->type, ZoneclearFeedServer::instance()->settings->post_title_redir); $full = in_array(App::url()->type, ZoneclearFeedServer::instance()->settings->post_title_redir);
return is_string($site) && is_string($url) && $full ? return is_string($site) && is_string($url) && $full ?
ZoneclearFeedServer::instance()::absoluteURL($site, $url) : ZoneclearFeedServer::instance()::absoluteURL($site, $url) :
@ -129,7 +125,7 @@ class RsExtPosts extends rsExtPost
* Get post content from post to feed. * Get post content from post to feed.
* *
* @param MetaRecord $rs The record instance * @param MetaRecord $rs The record instance
* @param mixed $absolute_urls Serve absolute URL (type "mixed" from rsExtPost) * @param mixed $absolute_urls Serve absolute URL (type "mixed" from Post)
* *
* @return string The post content * @return string The post content
*/ */
@ -140,14 +136,14 @@ class RsExtPosts extends rsExtPost
$content = self::zcFeedBrother('getContent', [&$rs, $absolute_urls]); $content = self::zcFeedBrother('getContent', [&$rs, $absolute_urls]);
if (is_string($url) && is_string($sitename) && $rs->f('post_type') == 'post') { if (is_string($url) && is_string($sitename) && $rs->f('post_type') == 'post') {
if (in_array(dcCore::app()->url->type, ZoneclearFeedServer::instance()->settings->post_full_tpl)) { if (in_array(App::url()->type, ZoneclearFeedServer::instance()->settings->post_full_tpl)) {
return $content . sprintf( return $content . sprintf(
'<p class="zoneclear-original"><em>%s</em></p>', '<p class="zoneclear-original"><em>%s</em></p>',
sprintf(__('Original post on <a href="%s">%s</a>'), $url, $sitename) sprintf(__('Original post on <a href="%s">%s</a>'), $url, $sitename)
); );
} }
$content = context::remove_html($content); $content = Ctx::remove_html($content);
$content = context::cut_string($content, 350); $content = Ctx::cut_string($content, 350);
$content = Html::escapeHTML($content); $content = Html::escapeHTML($content);
return sprintf( return sprintf(

View file

@ -1,21 +1,15 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
/** /**
* Module settings (type hinting). * @brief zoneclearFeedServer settings.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Settings class Settings
{ {

View file

@ -1,27 +1,21 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use ArrayObject; use ArrayObject;
use dcCore; use Dotclear\App;
use dcTemplate; use Dotclear\Core\Frontend\Tpl;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
use Dotclear\Helper\L10n; use Dotclear\Helper\L10n;
/** /**
* Frontend template blocks and values. * @brief zoneclearFeedServer frontend tempalte class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Template class Template
{ {
@ -82,67 +76,67 @@ class Template
return return
'<?php ' . $p . '<?php ' . $p .
'dcCore::app()->ctx->feeds_params = $zcfs_params;' . "\n" . 'App::frontend()->context()->feeds_params = $zcfs_params;' . "\n" .
'$zcfs = ' . ZoneclearFeedServer::class . '::instance();' . "\n" . '$zcfs = ' . ZoneclearFeedServer::class . '::instance();' . "\n" .
'dcCore::app()->ctx->feeds = $zcfs->getFeeds($zcfs_params); unset($zcfs_params,$zcfs);' . "\n" . 'App::frontend()->context()->feeds = $zcfs->getFeeds($zcfs_params); unset($zcfs_params,$zcfs);' . "\n" .
"?>\n" . "?>\n" .
'<?php while (dcCore::app()->ctx->feeds->fetch()) : ?>' . $c . '<?php endwhile; ' . '<?php while (App::frontend()->context()->feeds->fetch()) : ?>' . $c . '<?php endwhile; ' .
'dcCore::app()->ctx->feeds = null; dcCore::app()->ctx->feeds_params = null; ?>'; 'App::frontend()->context()->feeds = null; App::frontend()->context()->feeds_params = null; ?>';
} }
public static function FeedIf(ArrayObject $a, string $c): string public static function FeedIf(ArrayObject $a, string $c): string
{ {
$if = []; $if = [];
$operator = isset($a['operator']) && is_string($a['operator']) ? dcTemplate::getOperator($a['operator']) : '&&'; $operator = isset($a['operator']) && is_string($a['operator']) ? Tpl::getOperator($a['operator']) : '&&';
if (isset($a['type']) && is_string($a['type'])) { if (isset($a['type']) && is_string($a['type'])) {
$type = trim($a['type']); $type = trim($a['type']);
$type = !empty($type) ? $type : 'feed'; $type = !empty($type) ? $type : 'feed';
$if[] = 'dcCore::app()->ctx->feeds->feed_type == "' . addslashes($type) . '"'; $if[] = 'App::frontend()->context()->feeds->feed_type == "' . addslashes($type) . '"';
} }
if (isset($a['site_url']) && is_string($a['site_url'])) { if (isset($a['site_url']) && is_string($a['site_url'])) {
$url = trim($a['site_url']); $url = trim($a['site_url']);
if (substr($url, 0, 1) == '!') { if (substr($url, 0, 1) == '!') {
$url = substr($url, 1); $url = substr($url, 1);
$if[] = 'dcCore::app()->ctx->feeds->feed_url != "' . addslashes($url) . '"'; $if[] = 'App::frontend()->context()->feeds->feed_url != "' . addslashes($url) . '"';
} else { } else {
$if[] = 'dcCore::app()->ctx->feeds->feed_url == "' . addslashes($url) . '"'; $if[] = 'App::frontend()->context()->feeds->feed_url == "' . addslashes($url) . '"';
} }
} }
if (isset($a['feed_url']) && is_string($a['feed_url'])) { if (isset($a['feed_url']) && is_string($a['feed_url'])) {
$url = trim($a['feed_url']); $url = trim($a['feed_url']);
if (substr($url, 0, 1) == '!') { if (substr($url, 0, 1) == '!') {
$url = substr($url, 1); $url = substr($url, 1);
$if[] = 'dcCore::app()->ctx->feeds->feed_feed != "' . addslashes($url) . '"'; $if[] = 'App::frontend()->context()->feeds->feed_feed != "' . addslashes($url) . '"';
} else { } else {
$if[] = 'dcCore::app()->ctx->feeds->feed_feed == "' . addslashes($url) . '"'; $if[] = 'App::frontend()->context()->feeds->feed_feed == "' . addslashes($url) . '"';
} }
} }
if (isset($a['category']) && is_string($a['category'])) { if (isset($a['category']) && is_string($a['category'])) {
$category = addslashes(trim($a['category'])); $category = addslashes(trim($a['category']));
if (substr($category, 0, 1) == '!') { if (substr($category, 0, 1) == '!') {
$category = substr($category, 1); $category = substr($category, 1);
$if[] = '(dcCore::app()->ctx->feeds->cat_url != "' . $category . '")'; $if[] = '(App::frontend()->context()->feeds->cat_url != "' . $category . '")';
} else { } else {
$if[] = '(dcCore::app()->ctx->feeds->cat_url == "' . $category . '")'; $if[] = '(App::frontend()->context()->feeds->cat_url == "' . $category . '")';
} }
} }
if (isset($a['first'])) { if (isset($a['first'])) {
$sign = (bool) $a['first'] ? '=' : '!'; $sign = (bool) $a['first'] ? '=' : '!';
$if[] = 'dcCore::app()->ctx->feeds->index() ' . $sign . '= 0'; $if[] = 'App::frontend()->context()->feeds->index() ' . $sign . '= 0';
} }
if (isset($a['odd'])) { if (isset($a['odd'])) {
$sign = (bool) $a['odd'] ? '=' : '!'; $sign = (bool) $a['odd'] ? '=' : '!';
$if[] = '(dcCore::app()->ctx->feeds->index()+1)%2 ' . $sign . ' = 1'; $if[] = '(App::frontend()->context()->feeds->index()+1)%2 ' . $sign . ' = 1';
} }
if (isset($a['has_category'])) { if (isset($a['has_category'])) {
$sign = (bool) $a['has_category'] ? '' : '!'; $sign = (bool) $a['has_category'] ? '' : '!';
$if[] = $sign . 'dcCore::app()->ctx->feeds->cat_id'; $if[] = $sign . 'App::frontend()->context()->feeds->cat_id';
} }
if (isset($a['has_description'])) { if (isset($a['has_description'])) {
$sign = (bool) $a['has_description'] ? '' : '!'; $sign = (bool) $a['has_description'] ? '' : '!';
$if[] = $sign . 'dcCore::app()->ctx->feeds->feed_desc'; $if[] = $sign . 'App::frontend()->context()->feeds->feed_desc';
} }
return empty($if) ? return empty($if) ?
@ -155,7 +149,7 @@ class Template
$ret = Html::escapeHTML(isset($a['return']) && is_string($a['return']) ? $a['return'] : 'first'); $ret = Html::escapeHTML(isset($a['return']) && is_string($a['return']) ? $a['return'] : 'first');
return return
'<?php if (dcCore::app()->ctx->feeds->index() == 0) { ' . '<?php if (App::frontend()->context()->feeds->index() == 0) { ' .
"echo '" . addslashes($ret) . "'; } ?>"; "echo '" . addslashes($ret) . "'; } ?>";
} }
@ -164,79 +158,79 @@ class Template
$ret = Html::escapeHTML(isset($a['return']) && is_string($a['return']) ? $a['return'] : 'odd'); $ret = Html::escapeHTML(isset($a['return']) && is_string($a['return']) ? $a['return'] : 'odd');
return return
'<?php if ((dcCore::app()->ctx->feeds->index()+1)%2 == 1) { ' . '<?php if ((App::frontend()->context()->feeds->index()+1)%2 == 1) { ' .
"echo '" . addslashes($ret) . "'; } ?>"; "echo '" . addslashes($ret) . "'; } ?>";
} }
public static function FeedDesc(ArrayObject $a): string public static function FeedDesc(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->feed_desc'); return self::getValue($a, 'App::frontend()->context()->feeds->feed_desc');
} }
public static function FeedOwner(ArrayObject $a): string public static function FeedOwner(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->feed_owner'); return self::getValue($a, 'App::frontend()->context()->feeds->feed_owner');
} }
public static function FeedCategory(ArrayObject $a): string public static function FeedCategory(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->cat_title'); return self::getValue($a, 'App::frontend()->context()->feeds->cat_title');
} }
public static function FeedCategoryID(ArrayObject $a): string public static function FeedCategoryID(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->cat_id'); return self::getValue($a, 'App::frontend()->context()->feeds->cat_id');
} }
public static function FeedCategoryURL(ArrayObject $a): string public static function FeedCategoryURL(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->blog->url.dcCore::app()->url->getBase(\'category\').\'/\'.Html::sanitizeURL(dcCore::app()->ctx->feeds->cat_url)'); return self::getValue($a, 'App::blog()->url().App::url()->getBase(\'category\').\'/\'.Html::sanitizeURL(App::frontend()->context()->feeds->cat_url)');
} }
public static function FeedCategoryShortURL(ArrayObject $a): string public static function FeedCategoryShortURL(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->cat_url'); return self::getValue($a, 'App::frontend()->context()->feeds->cat_url');
} }
public static function FeedID(ArrayObject $a): string public static function FeedID(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->feed_id'); return self::getValue($a, 'App::frontend()->context()->feeds->feed_id');
} }
public static function FeedLang(ArrayObject $a): string public static function FeedLang(ArrayObject $a): string
{ {
return empty($a['full']) ? return empty($a['full']) ?
self::getValue($a, 'dcCore::app()->ctx->feeds->feed_lang') : self::getValue($a, 'App::frontend()->context()->feeds->feed_lang') :
'<?php $langs = ' . L10n::class . '::getISOcodes(); if (isset($langs[dcCore::app()->ctx->feeds->feed_lang])) { ?>' . '<?php $langs = ' . L10n::class . '::getISOcodes(); if (isset($langs[App::frontend()->context()->feeds->feed_lang])) { ?>' .
self::getValue($a, '$langs[dcCore::app()->ctx->feeds->feed_lang]') . self::getValue($a, '$langs[App::frontend()->context()->feeds->feed_lang]') .
'<?php } else { ?>' . '<?php } else { ?>' .
self::getValue($a, 'dcCore::app()->ctx->feeds->feed_lang') . self::getValue($a, 'App::frontend()->context()->feeds->feed_lang') .
'<?php ; } unset($langs); ?>'; '<?php ; } unset($langs); ?>';
} }
public static function FeedName(ArrayObject $a): string public static function FeedName(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->feed_name'); return self::getValue($a, 'App::frontend()->context()->feeds->feed_name');
} }
public static function FeedSiteURL(ArrayObject $a): string public static function FeedSiteURL(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->feed_url'); return self::getValue($a, 'App::frontend()->context()->feeds->feed_url');
} }
public static function FeedFeedURL(ArrayObject $a): string public static function FeedFeedURL(ArrayObject $a): string
{ {
return self::getValue($a, 'dcCore::app()->ctx->feeds->feed_feed'); return self::getValue($a, 'App::frontend()->context()->feeds->feed_feed');
} }
public static function FeedsHeader(ArrayObject $a, string $c): string public static function FeedsHeader(ArrayObject $a, string $c): string
{ {
return '<?php if (dcCore::app()->ctx->feeds->isStart()) : ?>' . $c . '<?php endif; ?>'; return '<?php if (App::frontend()->context()->feeds->isStart()) : ?>' . $c . '<?php endif; ?>';
} }
public static function FeedsFooter(ArrayObject $a, string $c): string public static function FeedsFooter(ArrayObject $a, string $c): string
{ {
return '<?php if (dcCore::app()->ctx->feeds->isEnd()) : ?>' . $c . '<?php endif; ?>'; return '<?php if (App::frontend()->context()->feeds->isEnd()) : ?>' . $c . '<?php endif; ?>';
} }
public static function FeedsCount(ArrayObject $a): string public static function FeedsCount(ArrayObject $a): string
@ -246,7 +240,7 @@ class Template
$more = isset($a['more']) && is_string($a['more']) ? addslashes($a['more']) : '%d sources'; $more = isset($a['more']) && is_string($a['more']) ? addslashes($a['more']) : '%d sources';
return return
"<?php \$fcount = dcCore::app()->ctx->feeds->count(); \n" . "<?php \$fcount = App::frontend()->context()->feeds->count(); \n" .
"if (\$fcount == 0) {\n" . "if (\$fcount == 0) {\n" .
" printf(__('" . $none . "'),\$fcount);\n" . " printf(__('" . $none . "'),\$fcount);\n" .
"} elseif (\$fcount == 1) {\n" . "} elseif (\$fcount == 1) {\n" .
@ -288,7 +282,7 @@ class Template
return return
'<?php $zcfs = ' . ZoneclearFeedServer::class . "::instance(); \n" . '<?php $zcfs = ' . ZoneclearFeedServer::class . "::instance(); \n" .
"\$fcount = \$zc->getPostsByFeed(array('feed_id'=>dcCore::app()->ctx->feeds->feed_id),true)->f(0); \n" . "\$fcount = \$zc->getPostsByFeed(array('feed_id'=>App::frontend()->context()->feeds->feed_id),true)->f(0); \n" .
"if (\$fcount == 0) {\n" . "if (\$fcount == 0) {\n" .
" printf(__('" . $none . "'),\$fcount);\n" . " printf(__('" . $none . "'),\$fcount);\n" .
"} elseif (\$fcount == 1) {\n" . "} elseif (\$fcount == 1) {\n" .
@ -300,6 +294,6 @@ class Template
protected static function getValue(ArrayObject $a, string $v): string protected static function getValue(ArrayObject $a, string $v): string
{ {
return '<?php echo ' . sprintf(dcCore::app()->tpl->getFilters($a), $v) . '; ?>'; return '<?php echo ' . sprintf(App::fontend()->template()->getFilters($a), $v) . '; ?>';
} }
} }

View file

@ -1,25 +1,18 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore;
use Dotclear\Core\Process; use Dotclear\Core\Process;
use Dotclear\Plugin\Uninstaller\Uninstaller; use Dotclear\Plugin\Uninstaller\Uninstaller;
/** /**
* Plugin Uninstaller actions. * @brief zoneclearFeedServer uninstall class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Uninstall extends Process class Uninstall extends Process
{ {
@ -30,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;
} }

View file

@ -1,21 +1,10 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use dcMeta;
use Dotclear\Database\Statement\{ use Dotclear\Database\Statement\{
DeleteStatement, DeleteStatement,
SelectStatement SelectStatement
@ -29,9 +18,11 @@ use Dotclear\Plugin\Uninstaller\{
}; };
/** /**
* Plugin Uninstaller Cleaner object. * @brief zoneclearFeedServer uninstall cleaner.
* @ingroup zoneclearFeedServer
* *
* This add special action for feed posts metadata. * @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class UninstallCleaner extends CleanerParent class UninstallCleaner extends CleanerParent
{ {
@ -66,7 +57,7 @@ class UninstallCleaner extends CleanerParent
public function values(): array public function values(): array
{ {
$sql = new SelectStatement(); $sql = new SelectStatement();
$sql->from(dcCore::app()->prefix . dcMeta::META_TABLE_NAME) $sql->from(App::con()->prefix() . App::meta()::META_TABLE_NAME)
->columns([ ->columns([
$sql->as($sql->count('*'), 'counter'), $sql->as($sql->count('*'), 'counter'),
]) ])
@ -92,7 +83,7 @@ class UninstallCleaner extends CleanerParent
{ {
if ($action == 'delete_all') { if ($action == 'delete_all') {
$sql = new DeleteStatement(); $sql = new DeleteStatement();
$sql->from(dcCore::app()->prefix . dcMeta::META_TABLE_NAME) $sql->from(App::con()->prefix() . App::meta()::META_TABLE_NAME)
->where($sql->like('meta_type', My::META_PREFIX . '%')) ->where($sql->like('meta_type', My::META_PREFIX . '%'))
->delete(); ->delete();

View file

@ -1,21 +1,10 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use dcNamespace;
use Dotclear\Database\Statement\{ use Dotclear\Database\Statement\{
SelectStatement, SelectStatement,
UpdateStatement UpdateStatement
@ -23,13 +12,17 @@ use Dotclear\Database\Statement\{
use Exception; use Exception;
/** /**
* Module versions upgrades. * @brief zoneclearFeedServer upgrade class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Upgrade class Upgrade
{ {
public static function preUpgrade(): void public static function preUpgrade(): void
{ {
$current = dcCore::app()->getVersion(My::id()); $current = App::version()->getVersion(My::id());
if (!is_string($current) || empty($current)) { if (!is_string($current) || empty($current)) {
return; return;
} }
@ -59,7 +52,7 @@ class Upgrade
'zoneclearFeedServer_post_title_redir' => 'post_title_redir', 'zoneclearFeedServer_post_title_redir' => 'post_title_redir',
]; ];
$cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME); $cur = App::blogWorkspace()->openBlogWorkspaceCursor();
foreach ($setting_ids as $old => $new) { foreach ($setting_ids as $old => $new) {
$cur->clean(); $cur->clean();
$cur->setField('setting_id', $new); $cur->setField('setting_id', $new);
@ -69,13 +62,13 @@ class Upgrade
$sql $sql
->where('setting_id = ' . $sql->quote($old)) ->where('setting_id = ' . $sql->quote($old))
->and('setting_ns = ' . $sql->quote('zoneclearFeedServer')) ->and('setting_ns = ' . $sql->quote('zoneclearFeedServer'))
->update(); ->update($cur);
} }
// use json rather than serialise for settings array // use json rather than serialise for settings array
$sql = new SelectStatement(); $sql = new SelectStatement();
$record = $sql $record = $sql
->from(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME) ->from(App::con()->prefix() . App::blogWorkspace()::NS_TABLE_NAME)
->where('setting_ns = ' . $sql->quote(My::id())) ->where('setting_ns = ' . $sql->quote(My::id()))
->select(); ->select();
@ -88,7 +81,7 @@ class Upgrade
'post_title_redir' => ['feed'], 'post_title_redir' => ['feed'],
]; ];
$cur = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME); $cur = App::blogWorkspace()->openBlogWorkspaceCursor();
while ($record->fetch()) { while ($record->fetch()) {
foreach ($setting_values as $key => $default) { foreach ($setting_values as $key => $default) {
try { try {
@ -105,7 +98,7 @@ class Upgrade
->where('setting_id = ' . $sql->quote($key)) ->where('setting_id = ' . $sql->quote($key))
->and('setting_ns = ' . $sql->quote($record->f('setting_ns'))) ->and('setting_ns = ' . $sql->quote($record->f('setting_ns')))
->and('blog_id ' . (null === $record->f('blog_id') ? 'IS NULL ' : ('= ' . $sql->quote($record->f('blog_id'))))) ->and('blog_id ' . (null === $record->f('blog_id') ? 'IS NULL ' : ('= ' . $sql->quote($record->f('blog_id')))))
->update(); ->update($cur);
} }
} }
} }
@ -115,7 +108,7 @@ class Upgrade
// change settings type of json string to array // change settings type of json string to array
$sql = new UpdateStatement(); $sql = new UpdateStatement();
$sql $sql
->ref(dcCore::app()->prefix . dcNamespace::NS_TABLE_NAME) ->ref(App::con()->prefix() . App::blogWorkspace()::NS_TABLE_NAME)
->column('setting_type') ->column('setting_type')
->value('array') ->value('array')
->where('setting_id ' . $sql->in([ ->where('setting_id ' . $sql->in([

View file

@ -1,31 +1,25 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use dcUrlHandlers; use Dotclear\Core\Frontend\Url;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
use Exception; use Exception;
/** /**
* Frontend URL handler. * @brief zoneclearFeedServer frontend URL handler.
* @ingroup zoneclearFeedServer
* *
* This adds public page that list feeds. * This adds public page that list feeds.
* And serve an endpoint to update feeds through js. * And serve an endpoint to update feeds through js.
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class UrlHandler extends dcUrlHandlers class UrlHandler extends Url
{ {
/** /**
* Feeds source page and update methods. * Feeds source page and update methods.
@ -38,14 +32,14 @@ class UrlHandler extends dcUrlHandlers
$s = $z->settings; $s = $z->settings;
# Not active # Not active
if (is_null(dcCore::app()->blog) || !$s->active) { if (!App::blog()->isDefined() || !$s->active) {
self::p404(); self::p404();
} }
# Update feeds (from ajax or other post resquest) # Update feeds (from ajax or other post resquest)
if ($args == '/zcfsupd' && 3 == $s->bhv_pub_upd) { if ($args == '/zcfsupd' && 3 == $s->bhv_pub_upd) {
$msg = ''; $msg = '';
if (!empty($_POST['blogId']) && Html::escapeJS(dcCore::app()->blog->id) == $_POST['blogId']) { if (!empty($_POST['blogId']) && Html::escapeJS(App::blog()->id()) == $_POST['blogId']) {
try { try {
if ($z->checkFeedsUpdate()) { if ($z->checkFeedsUpdate()) {
$msg = sprintf( $msg = sprintf(
@ -76,7 +70,7 @@ class UrlHandler extends dcUrlHandlers
# Server js # Server js
} elseif ($args == '/zcfsupd.js' && 3 == $s->bhv_pub_upd) { } elseif ($args == '/zcfsupd.js' && 3 == $s->bhv_pub_upd) {
dcCore::app()->tpl->setPath(dcCore::app()->tpl->getPath(), My::path() . '/default-templates'); App::frontend()->template()->setPath(App::frontend()->template()->getPath(), My::path() . '/default-templates');
self::serveDocument( self::serveDocument(
'zcfsupd.js', 'zcfsupd.js',
'text/javascript', 'text/javascript',
@ -86,16 +80,16 @@ class UrlHandler extends dcUrlHandlers
# Server feeds description page # Server feeds description page
} elseif (in_array($args, ['', '/']) && $s->pub_active) { } elseif (in_array($args, ['', '/']) && $s->pub_active) {
$theme = dcCore::app()->blog->settings->get('system')->get('theme'); $theme = App::blog()->settings()->get('system')->get('theme');
if (!is_string($theme)) { if (!is_string($theme)) {
self::p404(); self::p404();
} }
$tplset = dcCore::app()->themes->getDefine($theme)->get('tplset'); $tplset = App::themes()->getDefine($theme)->get('tplset');
$path = My::path() . '/default-templates/'; $path = My::path() . '/default-templates/';
if (!empty($tplset) && is_dir($path . $tplset)) { if (!empty($tplset) && is_dir($path . $tplset)) {
dcCore::app()->tpl->setPath(dcCore::app()->tpl->getPath(), $path . $tplset); App::frontend()->template()->setPath(App::frontend()->template()->getPath(), $path . $tplset);
} else { } else {
dcCore::app()->tpl->setPath(dcCore::app()->tpl->getPath(), $path . DC_DEFAULT_TPLSET); App::frontend()->template()->setPath(App::frontend()->template()->getPath(), $path . App::config()->defaultTplset());
} }
self::serveDocument('zcfeeds.html'); self::serveDocument('zcfeeds.html');
} }

View file

@ -1,29 +1,23 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use dcCore; use Dotclear\App;
use Dotclear\Helper\Html\Html; use Dotclear\Helper\Html\Html;
use Dotclear\Plugin\widgets\WidgetsStack; use Dotclear\Plugin\widgets\WidgetsStack;
use Dotclear\Plugin\widgets\WidgetsElement; use Dotclear\Plugin\widgets\WidgetsElement;
/** /**
* Widgets. * @brief zoneclearFeedServer widgets.
* @ingroup zoneclearFeedServer
* *
* A widget to list feeds source. * A widget to list feeds source.
* A widget to list feeds statistics. * A widget to list feeds statistics.
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class Widgets class Widgets
{ {
@ -36,7 +30,7 @@ class Widgets
->create( ->create(
'zcfssource', 'zcfssource',
__('Feeds server: sources'), __('Feeds server: sources'),
[self::class, 'publicSource'], self::publicSource(...),
null, null,
__('List sources of feeds') __('List sources of feeds')
) )
@ -85,7 +79,7 @@ class Widgets
->create( ->create(
'zcfsnumber', 'zcfsnumber',
__('Feeds server: numbers'), __('Feeds server: numbers'),
[self::class, 'publicNumber'], self::publicNumber(...),
null, null,
__('Show some numbers about feeds') __('Show some numbers about feeds')
) )
@ -140,7 +134,7 @@ class Widgets
if ($w->__get('offline') if ($w->__get('offline')
|| !$s->active || !$s->active
|| !$w->checkHomeOnly(dcCore::app()->url->type) || !$w->checkHomeOnly(App::url()->type)
) { ) {
return ''; return '';
} }
@ -173,7 +167,7 @@ class Widgets
if ($w->__get('pagelink') && $s->pub_active) { if ($w->__get('pagelink') && $s->pub_active) {
$pub = sprintf( $pub = sprintf(
'<p><strong><a href="%s">%s</a></strong></p>', '<p><strong><a href="%s">%s</a></strong></p>',
dcCore::app()->blog?->url . dcCore::app()->url->getBase('zoneclearFeedsPage'), App::blog()->url() . App::url()->getBase('zoneclearFeedsPage'),
Html::escapeHTML(is_string($w->__get('pagelink')) ? $w->__get('pagelink') : '') Html::escapeHTML(is_string($w->__get('pagelink')) ? $w->__get('pagelink') : '')
); );
} }
@ -199,7 +193,7 @@ class Widgets
if ($w->__get('offline') if ($w->__get('offline')
|| !$s->active || !$s->active
|| !$w->checkHomeOnly(dcCore::app()->url->type) || !$w->checkHomeOnly(App::url()->type)
) { ) {
return ''; return '';
} }
@ -221,7 +215,7 @@ class Widgets
if ($s->pub_active) { if ($s->pub_active) {
$text = sprintf( $text = sprintf(
'<a href="%s">%s</a>', '<a href="%s">%s</a>',
dcCore::app()->blog?->url . dcCore::app()->url->getBase('zoneclearFeedsPage'), App::blog()->url() . App::url()->getBase('zoneclearFeedsPage'),
$text $text
); );
} }

View file

@ -1,26 +1,11 @@
<?php <?php
/**
* @brief zoneclearFeedServer, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Jean-Christian Denis, BG, Pierre Van Glabeke
*
* @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\zoneclearFeedServer; namespace Dotclear\Plugin\zoneclearFeedServer;
use ArrayObject; use ArrayObject;
use dcAuth; use Dotclear\App;
use dcBlog;
use dcCategories;
use dcCore;
use dcMeta;
use dcUtils;
use Dotclear\Database\{ use Dotclear\Database\{
Cursor, Cursor,
MetaRecord MetaRecord
@ -44,29 +29,61 @@ use Dotclear\Helper\Text;
use Exception; use Exception;
/** /**
* Main module class. * @brief zoneclearFeedServer main class.
* @ingroup zoneclearFeedServer
*
* @author Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class ZoneclearFeedServer class ZoneclearFeedServer
{ {
/** @var int Net HTTP feed reader timeout */ /**
* .
*
* @var int NET_HTTP_TIMEOUT
*/
public const NET_HTTP_TIMEOUT = 5; public const NET_HTTP_TIMEOUT = 5;
/** @var string Net HTTP feed reader agent */ /**
* Net HTTP feed reader agent.
*
* @var string NET_HTTP_AGENT
*/
public const NET_HTTP_AGENT = 'zoneclearFeedServer - http://zoneclear.org'; public const NET_HTTP_AGENT = 'zoneclearFeedServer - http://zoneclear.org';
/** @var int Net HTTP feed reader max redirect */ /**
* Net HTTP feed reader max redirect.
*
* @var int NET_HTTP_MAX_REDIRECT
*/
public const NET_HTTP_MAX_REDIRECT = 2; public const NET_HTTP_MAX_REDIRECT = 2;
/** @var ZoneclearFeedServer Self instance */ /**
* Self instance.
*
* @var ZoneclearFeedServer $instance
*/
private static $instance; private static $instance;
/** @var Settings The settings instance */ /**
* .
*
* @var Settings $settings
*/
public readonly Settings $settings; public readonly Settings $settings;
/** @var null|string $lock File lock for update */ /**
* File lock for update.
*
* @var null|string $lock
*/
private static $lock = null; private static $lock = null;
/** @var null|string $user Affiliate user ID */ /**
* Affiliate user ID.
*
* @var null|string $user
*/
private $user = null; private $user = null;
/** /**
@ -98,7 +115,7 @@ class ZoneclearFeedServer
*/ */
public function openCursor(): Cursor public function openCursor(): Cursor
{ {
return dcCore::app()->con->openCursor(dcCore::app()->prefix . My::TABLE_NAME); return App::con()->openCursor(App::con()->prefix() . My::TABLE_NAME);
} }
/** /**
@ -109,7 +126,7 @@ class ZoneclearFeedServer
*/ */
public function updateFeed(int $id, Cursor $cur): void public function updateFeed(int $id, Cursor $cur): void
{ {
dcCore::app()->con->writeLock(dcCore::app()->prefix . My::TABLE_NAME); App::con()->writeLock(App::con()->prefix() . My::TABLE_NAME);
try { try {
if ($id < 1) { if ($id < 1) {
@ -121,18 +138,18 @@ class ZoneclearFeedServer
$cur->update(sprintf( $cur->update(sprintf(
"WHERE feed_id = %s AND blog_id = '%s' ", "WHERE feed_id = %s AND blog_id = '%s' ",
$id, $id,
dcCore::app()->con->escapeStr((string) dcCore::app()->blog?->id) App::con()->escapeStr(App::blog()->id())
)); ));
dcCore::app()->con->unlock(); App::con()->unlock();
$this->trigger(); $this->trigger();
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->con->unlock(); App::con()->unlock();
throw $e; throw $e;
} }
# --BEHAVIOR-- zoneclearFeedServerAfterUpdateFeed -- Cursor, int # --BEHAVIOR-- zoneclearFeedServerAfterUpdateFeed -- Cursor, int
dcCore::app()->callBehavior('zoneclearFeedServerAfterUpdateFeed', $cur, $id); App::behavior()->callBehavior('zoneclearFeedServerAfterUpdateFeed', $cur, $id);
} }
/** /**
@ -144,20 +161,20 @@ class ZoneclearFeedServer
*/ */
public function addFeed(Cursor $cur): int public function addFeed(Cursor $cur): int
{ {
dcCore::app()->con->writeLock(dcCore::app()->prefix . My::TABLE_NAME); App::con()->writeLock(App::con()->prefix() . My::TABLE_NAME);
try { try {
$cur->setField('feed_id', $this->getNextId()); $cur->setField('feed_id', $this->getNextId());
$cur->setField('blog_id', dcCore::app()->con->escapeStr((string) dcCore::app()->blog?->id)); $cur->setField('blog_id', App::con()->escapeStr(App::blog()->id()));
$cur->setField('feed_creadt', date('Y-m-d H:i:s')); $cur->setField('feed_creadt', date('Y-m-d H:i:s'));
$this->getFeedCursor($cur); $this->getFeedCursor($cur);
$cur->insert(); $cur->insert();
dcCore::app()->con->unlock(); App::con()->unlock();
$this->trigger(); $this->trigger();
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->con->unlock(); App::con()->unlock();
throw $e; throw $e;
} }
@ -165,7 +182,7 @@ class ZoneclearFeedServer
$id = is_numeric($cur->getField('feed_id')) ? (int) $cur->getField('feed_id') : 0; $id = is_numeric($cur->getField('feed_id')) ? (int) $cur->getField('feed_id') : 0;
# --BEHAVIOR-- zoneclearFeedServerAfterAddFeed -- Cursor, int # --BEHAVIOR-- zoneclearFeedServerAfterAddFeed -- Cursor, int
dcCore::app()->callBehavior('zoneclearFeedServerAfterAddFeed', $cur, $id); App::behavior()->callBehavior('zoneclearFeedServerAfterAddFeed', $cur, $id);
return $id; return $id;
} }
@ -193,7 +210,7 @@ class ZoneclearFeedServer
} }
$cur = $this->openCursor(); $cur = $this->openCursor();
dcCore::app()->con->writeLock(dcCore::app()->prefix . My::TABLE_NAME); App::con()->writeLock(App::con()->prefix() . My::TABLE_NAME);
$cur->setField('feed_upddt', date('Y-m-d H:i:s')); $cur->setField('feed_upddt', date('Y-m-d H:i:s'));
$cur->setField('feed_status', (int) $enable); $cur->setField('feed_status', (int) $enable);
@ -204,18 +221,18 @@ class ZoneclearFeedServer
$cur->update(sprintf( $cur->update(sprintf(
"WHERE feed_id = %s AND blog_id = '%s' ", "WHERE feed_id = %s AND blog_id = '%s' ",
$id, $id,
dcCore::app()->con->escapeStr((string) dcCore::app()->blog?->id) App::con()->escapeStr(App::blog()->id())
)); ));
dcCore::app()->con->unlock(); App::con()->unlock();
$this->trigger(); $this->trigger();
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->con->unlock(); App::con()->unlock();
throw $e; throw $e;
} }
# --BEHAVIOR-- zoneclearFeedServerAfterEnableFeed -- int, bool, int # --BEHAVIOR-- zoneclearFeedServerAfterEnableFeed -- int, bool, int
dcCore::app()->callBehavior('zoneclearFeedServerAfterEnableFeed', $id, $enable, $time); App::behavior()->callBehavior('zoneclearFeedServerAfterEnableFeed', $id, $enable, $time);
} }
# #
@ -231,12 +248,12 @@ class ZoneclearFeedServer
} }
# --BEHAVIOR-- zoneclearFeedServerBeforeDeleteFeed -- int # --BEHAVIOR-- zoneclearFeedServerBeforeDeleteFeed -- int
dcCore::app()->callBehavior('zoneclearFeedServerBeforeDeleteFeed', $id); App::behavior()->callBehavior('zoneclearFeedServerBeforeDeleteFeed', $id);
$sql = new DeleteStatement(); $sql = new DeleteStatement();
$sql->from(dcCore::app()->prefix . My::TABLE_NAME) $sql->from(App::con()->prefix() . My::TABLE_NAME)
->where('feed_id ' . $sql->in($id)) ->where('feed_id ' . $sql->in($id))
->and('blog_id = ' . $sql->quote((string) dcCore::app()->blog?->id)) ->and('blog_id = ' . $sql->quote(App::blog()->id()))
->delete(); ->delete();
$this->trigger(); $this->trigger();
@ -253,7 +270,7 @@ class ZoneclearFeedServer
public static function deletePostsMeta(?int $id): void public static function deletePostsMeta(?int $id): void
{ {
$sql = new DeleteStatement(); $sql = new DeleteStatement();
$sql->from(dcCore::app()->prefix . dcMeta::META_TABLE_NAME) $sql->from(App::con()->prefix() . App::meta()::META_TABLE_NAME)
->where('meta_type ' . $sql->in([ ->where('meta_type ' . $sql->in([
My::META_PREFIX . 'url', My::META_PREFIX . 'url',
My::META_PREFIX . 'author', My::META_PREFIX . 'author',
@ -287,18 +304,18 @@ class ZoneclearFeedServer
$sql->join( $sql->join(
(new JoinStatement()) (new JoinStatement())
->left() ->left()
->from(dcCore::app()->prefix . dcMeta::META_TABLE_NAME . ' F') ->from(App::con()->prefix() . App::meta()::META_TABLE_NAME . ' F')
->on('P.post_id = F.post_id') ->on('P.post_id = F.post_id')
->statement() ->statement()
); );
$params['sql'] = "AND P.blog_id = '" . dcCore::app()->con->escapeStr((string) dcCore::app()->blog?->id) . "' " . $params['sql'] = "AND P.blog_id = '" . App::con()->escapeStr(App::blog()->id()) . "' " .
"AND F.meta_type = '" . My::META_PREFIX . "id' " . "AND F.meta_type = '" . My::META_PREFIX . "id' " .
"AND F.meta_id = '" . dcCore::app()->con->escapeStr((string) $params['feed_id']) . "' "; "AND F.meta_id = '" . App::con()->escapeStr((string) $params['feed_id']) . "' ";
unset($params['feed_id']); unset($params['feed_id']);
$rs = dcCore::app()->blog?->getPosts($params, $count_only, $sql); $rs = App::blog()->getPosts($params, $count_only, $sql);
return is_null($rs) ? MetaRecord::newFromArray([]) : $rs; return is_null($rs) ? MetaRecord::newFromArray([]) : $rs;
} }
@ -332,17 +349,17 @@ class ZoneclearFeedServer
'C.cat_title, C.cat_url, C.cat_desc '; 'C.cat_title, C.cat_url, C.cat_desc ';
} }
$strReq .= 'FROM ' . dcCore::app()->prefix . My::TABLE_NAME . ' Z ' . $strReq .= 'FROM ' . App::con()->prefix() . My::TABLE_NAME . ' Z ' .
'LEFT OUTER JOIN ' . dcCore::app()->prefix . dcCategories::CATEGORY_TABLE_NAME . ' C ON Z.cat_id = C.cat_id '; 'LEFT OUTER JOIN ' . App::con()->prefix() . App::categories()::CATEGORY_TABLE_NAME . ' C ON Z.cat_id = C.cat_id ';
if (!empty($params['from']) && is_string($params['from'])) { if (!empty($params['from']) && is_string($params['from'])) {
$strReq .= $params['from'] . ' '; $strReq .= $params['from'] . ' ';
} }
$strReq .= "WHERE Z.blog_id = '" . dcCore::app()->con->escapeStr((string) dcCore::app()->blog?->id) . "' "; $strReq .= "WHERE Z.blog_id = '" . App::con()->escapeStr(App::blog()->id()) . "' ";
if (isset($params['feed_type']) && is_string($params['feed_type'])) { if (isset($params['feed_type']) && is_string($params['feed_type'])) {
$strReq .= "AND Z.feed_type = '" . dcCore::app()->con->escapeStr((string) $params['feed_type']) . "' "; $strReq .= "AND Z.feed_type = '" . App::con()->escapeStr((string) $params['feed_type']) . "' ";
} else { } else {
$strReq .= "AND Z.feed_type = 'feed' "; $strReq .= "AND Z.feed_type = 'feed' ";
} }
@ -353,21 +370,21 @@ class ZoneclearFeedServer
} elseif (is_numeric($params['feed_id'])) { } elseif (is_numeric($params['feed_id'])) {
$params['feed_id'] = [(int) $params['feed_id']]; $params['feed_id'] = [(int) $params['feed_id']];
} }
$strReq .= 'AND Z.feed_id ' . dcCore::app()->con->in($params['feed_id']); $strReq .= 'AND Z.feed_id ' . App::con()->in($params['feed_id']);
} }
if (isset($params['feed_feed']) && is_string($params['feed_feed'])) { if (isset($params['feed_feed']) && is_string($params['feed_feed'])) {
$strReq .= "AND Z.feed_feed = '" . dcCore::app()->con->escapeStr((string) $params['feed_feed']) . "' "; $strReq .= "AND Z.feed_feed = '" . App::con()->escapeStr((string) $params['feed_feed']) . "' ";
} }
if (isset($params['feed_url']) && is_string($params['feed_url'])) { if (isset($params['feed_url']) && is_string($params['feed_url'])) {
$strReq .= "AND Z.feed_url = '" . dcCore::app()->con->escapeStr((string) $params['feed_url']) . "' "; $strReq .= "AND Z.feed_url = '" . App::con()->escapeStr((string) $params['feed_url']) . "' ";
} }
if (isset($params['feed_status'])) { if (isset($params['feed_status'])) {
$strReq .= 'AND Z.feed_status = ' . ((int) $params['feed_status']) . ' '; $strReq .= 'AND Z.feed_status = ' . ((int) $params['feed_status']) . ' ';
} }
if (!empty($params['q']) && is_string($params['q'])) { if (!empty($params['q']) && is_string($params['q'])) {
$q = dcCore::app()->con->escapeStr((string) str_replace('*', '%', strtolower($params['q']))); $q = App::con()->escapeStr((string) str_replace('*', '%', strtolower($params['q'])));
$strReq .= "AND LOWER(Z.feed_name) LIKE '" . $q . "' "; $strReq .= "AND LOWER(Z.feed_name) LIKE '" . $q . "' ";
} }
@ -377,7 +394,7 @@ class ZoneclearFeedServer
if (!$count_only) { if (!$count_only) {
if (!empty($params['order']) && is_string($params['order'])) { if (!empty($params['order']) && is_string($params['order'])) {
$strReq .= 'ORDER BY ' . dcCore::app()->con->escapeStr((string) $params['order']) . ' '; $strReq .= 'ORDER BY ' . App::con()->escapeStr((string) $params['order']) . ' ';
} else { } else {
$strReq .= 'ORDER BY Z.feed_upddt DESC '; $strReq .= 'ORDER BY Z.feed_upddt DESC ';
} }
@ -388,11 +405,11 @@ class ZoneclearFeedServer
$params['limit'] = (int) $params['limit']; $params['limit'] = (int) $params['limit'];
} }
if (is_int($params['limit']) || is_array($params['limit'])) { if (is_int($params['limit']) || is_array($params['limit'])) {
$strReq .= dcCore::app()->con->limit($params['limit']); $strReq .= App::con()->limit($params['limit']);
} }
} }
return new MetaRecord(dcCore::app()->con->select($strReq)); return new MetaRecord(App::con()->select($strReq));
} }
/** /**
@ -405,7 +422,7 @@ class ZoneclearFeedServer
$sql = new SelectStatement(); $sql = new SelectStatement();
$rs = $sql $rs = $sql
->column($sql->max('feed_id')) ->column($sql->max('feed_id'))
->from(dcCore::app()->prefix . My::TABLE_NAME) ->from(App::con()->prefix() . My::TABLE_NAME)
->select(); ->select();
return (int) $rs?->f(0) + 1; return (int) $rs?->f(0) + 1;
@ -420,14 +437,14 @@ class ZoneclearFeedServer
{ {
try { try {
# Cache writable ? # Cache writable ?
if (!is_writable(DC_TPL_CACHE)) { if (!is_writable(App::config()->cacheRoot())) {
throw new Exception("Can't write in cache fodler"); throw new Exception("Can't write in cache fodler");
} }
# Set file path # Set file path
$f_md5 = md5((string) dcCore::app()->blog?->id); $f_md5 = md5(App::blog()->id());
$file = sprintf( $file = sprintf(
'%s/%s/%s/%s/%s.txt', '%s/%s/%s/%s/%s.txt',
DC_TPL_CACHE, App::config()->cacheRoot(),
My::id(), My::id(),
substr($f_md5, 0, 2), substr($f_md5, 0, 2),
substr($f_md5, 2, 2), substr($f_md5, 2, 2),
@ -480,7 +497,7 @@ class ZoneclearFeedServer
return false; return false;
} }
$tz = dcCore::app()->blog?->settings->get('system')->get('blog_timezone'); $tz = App::blog()->settings()->get('system')->get('blog_timezone');
Date::setTZ(is_string($tz) ? $tz : 'UTC'); Date::setTZ(is_string($tz) ? $tz : 'UTC');
$time = time(); $time = time();
@ -500,8 +517,8 @@ class ZoneclearFeedServer
$i = 0; $i = 0;
$cur_post = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcBlog::POST_TABLE_NAME); $cur_post = App::blog()->openPostCursor();
$cur_meta = dcCore::app()->con->openCursor(dcCore::app()->prefix . dcMeta::META_TABLE_NAME); $cur_meta = App::meta()->openMetaCursor();
while ($f->fetch()) { while ($f->fetch()) {
$row = new FeedRow($f); $row = new FeedRow($f);
@ -540,7 +557,7 @@ class ZoneclearFeedServer
# Set update time of this feed # Set update time of this feed
$this->enableFeed($row->id, (bool) $row->status, $time); $this->enableFeed($row->id, (bool) $row->status, $time);
dcCore::app()->con->begin(); App::con()->begin();
foreach ($feed->items as $item) { foreach ($feed->items as $item) {
$item_TS = $item->TS ? $item->TS : $time; $item_TS = $item->TS ? $item->TS : $time;
@ -555,7 +572,7 @@ class ZoneclearFeedServer
continue; continue;
} }
$item_link = dcCore::app()->con->escapeStr((string) $item_link); $item_link = App::con()->escapeStr((string) $item_link);
$is_new_published_entry = false; $is_new_published_entry = false;
# Not updated since last visit # Not updated since last visit
@ -576,15 +593,15 @@ class ZoneclearFeedServer
'P.post_id', 'P.post_id',
'P.post_status', 'P.post_status',
]) ])
->from($sql->as(dcCore::app()->prefix . dcBlog::POST_TABLE_NAME, 'P')) ->from($sql->as(App::con()->prefix() . App::blog()::POST_TABLE_NAME, 'P'))
->join( ->join(
(new JoinStatement()) (new JoinStatement())
->inner() ->inner()
->from($sql->as(dcCore::app()->prefix . dcMeta::META_TABLE_NAME, 'M')) ->from($sql->as(App::con()->prefix() . App::meta()::META_TABLE_NAME, 'M'))
->on('P.post_id = M.post_id') ->on('P.post_id = M.post_id')
->statement() ->statement()
) )
->where('blog_id = ' . $sql->quote((string) dcCore::app()->blog?->id)) ->where('blog_id = ' . $sql->quote(App::blog()->id()))
->and("meta_type = '" . My::META_PREFIX . "url'") ->and("meta_type = '" . My::META_PREFIX . "url'")
->and('meta_id = ' . $sql->quote($item_link)) ->and('meta_id = ' . $sql->quote($item_link))
->select(); ->select();
@ -609,14 +626,14 @@ class ZoneclearFeedServer
# Create entry # Create entry
if ($old_post->isEmpty()) { if ($old_post->isEmpty()) {
# Post # Post
$cur_post->setField('user_id', dcCore::app()->auth->userID()); $cur_post->setField('user_id', App::auth()->userID());
$cur_post->setField('post_format', 'xhtml'); $cur_post->setField('post_format', 'xhtml');
$cur_post->setField('post_status', $s->post_status_new); $cur_post->setField('post_status', $s->post_status_new ? App::blog()::POST_PUBLISHED : App::blog()::POST_UNPUBLISHED);
$cur_post->setField('post_open_comment', 0); $cur_post->setField('post_open_comment', 0);
$cur_post->setField('post_open_tb', 0); $cur_post->setField('post_open_tb', 0);
$post_id = dcCore::app()->auth->sudo( $post_id = App::auth()->sudo(
[dcCore::app()->blog, 'addPost'], App::blog()->addPost(...),
$cur_post $cur_post
); );
@ -629,22 +646,22 @@ class ZoneclearFeedServer
} else { } else {
$post_id = is_numeric($old_post->f('post_id')) ? (int) $old_post->f('post_id') : 0; $post_id = is_numeric($old_post->f('post_id')) ? (int) $old_post->f('post_id') : 0;
dcCore::app()->auth->sudo( App::auth()->sudo(
[dcCore::app()->blog, 'updPost'], App::blog()->updPost(...),
$post_id, $post_id,
$cur_post $cur_post
); );
# Quick delete old meta # Quick delete old meta
$sql = new DeleteStatement(); $sql = new DeleteStatement();
$sql->from(dcCore::app()->prefix . dcMeta::META_TABLE_NAME) $sql->from(App::con()->prefix() . App::meta()::META_TABLE_NAME)
->where('post_id = ' . $post_id) ->where('post_id = ' . $post_id)
->and($sql->like('meta_type', My::META_PREFIX . '%')) ->and($sql->like('meta_type', My::META_PREFIX . '%'))
->delete(); ->delete();
# Delete old tags # Delete old tags
dcCore::app()->auth->sudo( App::auth()->sudo(
[dcCore::app()->meta, 'delPostMeta'], App::meta()->delPostMeta(...),
$post_id, $post_id,
'tag' 'tag'
); );
@ -683,11 +700,11 @@ class ZoneclearFeedServer
$cur_meta->insert(); $cur_meta->insert();
# Add new tags # Add new tags
$tags = dcCore::app()->meta->splitMetaValues($row->tags); $tags = App::meta()->splitMetaValues($row->tags);
if ($row->get_tags) { if ($row->get_tags) {
# Some feed subjects contains more than one tag # Some feed subjects contains more than one tag
foreach ($item->subject as $subjects) { foreach ($item->subject as $subjects) {
$tmp = dcCore::app()->meta->splitMetaValues($subjects); $tmp = App::meta()->splitMetaValues($subjects);
$tags = array_merge($tags, $tmp); $tags = array_merge($tags, $tmp);
} }
$tags = array_unique($tags); $tags = array_unique($tags);
@ -709,33 +726,33 @@ class ZoneclearFeedServer
} }
if (!in_array($tag, $formated_tags)) { if (!in_array($tag, $formated_tags)) {
$formated_tags[] = $tag; $formated_tags[] = $tag;
dcCore::app()->auth->sudo( App::auth()->sudo(
[dcCore::app()->meta, 'delPostMeta'], App::meta()->delPostMeta(...),
$post_id, $post_id,
'tag', 'tag',
dcMeta::sanitizeMetaID($tag) App::meta()::sanitizeMetaID($tag)
); );
dcCore::app()->auth->sudo( App::auth()->sudo(
[dcCore::app()->meta, 'setPostMeta'], App::meta()->setPostMeta(...),
$post_id, $post_id,
'tag', 'tag',
dcMeta::sanitizeMetaID($tag) App::meta()::sanitizeMetaID($tag)
); );
} }
} }
} catch (Exception $e) { } catch (Exception $e) {
dcCore::app()->con->rollback(); App::con()->rollback();
$this->enableUser(false); $this->enableUser(false);
$this->unlockUpdate(); $this->unlockUpdate();
throw $e; throw $e;
} }
} }
dcCore::app()->con->commit(); App::con()->commit();
} }
# --BEHAVIOR-- zoneclearFeedServerAfterCheckFeedUpdate -- FeedRow # --BEHAVIOR-- zoneclearFeedServerAfterCheckFeedUpdate -- FeedRow
dcCore::app()->callBehavior('zoneclearFeedServerAfterCheckFeedUpdate', $row); App::behavior()->callBehavior('zoneclearFeedServerAfterCheckFeedUpdate', $row);
} }
} }
if ($enabled) { if ($enabled) {
@ -756,21 +773,18 @@ class ZoneclearFeedServer
# Enable # Enable
if ($enable) { if ($enable) {
// backup current user // backup current user
if (!is_null(dcCore::app()->auth->userID()) && !is_string(dcCore::app()->auth->userID())) { if (!is_null(App::auth()->userID()) && !is_string(App::auth()->userID())) {
throw new Exception('Unable to backup user'); throw new Exception('Unable to backup user');
} }
$this->user = dcCore::app()->auth->userID(); $this->user = App::auth()->userID();
// set zcfs posts user // set zcfs posts user
if (!dcCore::app()->auth->checkUser($this->settings->user)) { if (!App::auth()->checkUser($this->settings->user)) {
throw new Exception('Unable to set user'); throw new Exception('Unable to set user');
} }
# Disable # Disable
} else { } else {
// auth on branch My goes readonly
//dcCore::app()->auth = null;
//dcCore::app()->auth = new dcAuth();
// restore current user // restore current user
dcCore::app()->auth->checkUser($this->user ?? ''); App::auth()->checkUser($this->user ?? '');
} }
} }
@ -785,7 +799,7 @@ class ZoneclearFeedServer
{ {
try { try {
$feed_reader = new Reader(); $feed_reader = new Reader();
$feed_reader->setCacheDir(DC_TPL_CACHE); $feed_reader->setCacheDir(App::config()->cacheRoot());
$feed_reader->setTimeout(self::NET_HTTP_TIMEOUT); $feed_reader->setTimeout(self::NET_HTTP_TIMEOUT);
$feed_reader->setMaxRedirects(self::NET_HTTP_MAX_REDIRECT); $feed_reader->setMaxRedirects(self::NET_HTTP_MAX_REDIRECT);
$feed_reader->setUserAgent(self::NET_HTTP_AGENT); $feed_reader->setUserAgent(self::NET_HTTP_AGENT);
@ -801,7 +815,7 @@ class ZoneclearFeedServer
*/ */
private function trigger(): void private function trigger(): void
{ {
dcCore::app()->blog?->triggerBlog(); App::blog()->triggerBlog();
} }
/** /**
@ -864,7 +878,7 @@ class ZoneclearFeedServer
# Get super admins # Get super admins
$sql = new SelectStatement(); $sql = new SelectStatement();
$rs = $sql $rs = $sql
->from(dcCore::app()->prefix . dcAuth::USER_TABLE_NAME) ->from(App::con()->prefix() . App::auth()::USER_TABLE_NAME)
->columns([ ->columns([
'user_id', 'user_id',
'user_super', 'user_super',
@ -878,7 +892,7 @@ class ZoneclearFeedServer
if (!is_null($rs) && !$rs->isEmpty()) { if (!is_null($rs) && !$rs->isEmpty()) {
while ($rs->fetch()) { while ($rs->fetch()) {
$user_cn = dcUtils::getUserCN( $user_cn = App::users()->getUserCN(
$rs->f('user_id'), $rs->f('user_id'),
$rs->f('user_name'), $rs->f('user_name'),
$rs->f('user_firstname'), $rs->f('user_firstname'),
@ -898,22 +912,22 @@ class ZoneclearFeedServer
'U.user_firstname', 'U.user_firstname',
'U.user_displayname', 'U.user_displayname',
]) ])
->from($sql->as(dcCore::app()->prefix . dcAuth::USER_TABLE_NAME, 'U')) ->from($sql->as(App::con()->prefix() . App::auth()::USER_TABLE_NAME, 'U'))
->join( ->join(
(new JoinStatement()) (new JoinStatement())
->left() ->left()
->from($sql->as(dcCore::app()->prefix . dcAuth::PERMISSIONS_TABLE_NAME, 'P')) ->from($sql->as(App::con()->prefix() . App::auth()::PERMISSIONS_TABLE_NAME, 'P'))
->on('U.user_id = P.user_id') ->on('U.user_id = P.user_id')
->statement() ->statement()
) )
->where('U.user_status = 1') ->where('U.user_status = 1')
->and('P.blog_id = ' . $sql->quote((string) dcCore::app()->blog?->id)) ->and('P.blog_id = ' . $sql->quote(App::blog()->id()))
->and($sql->like('P.permissions', '%|admin|%')) ->and($sql->like('P.permissions', '%|admin|%'))
->select(); ->select();
if (!is_null($rs) && !$rs->isEmpty()) { if (!is_null($rs) && !$rs->isEmpty()) {
while ($rs->fetch()) { while ($rs->fetch()) {
$user_cn = dcUtils::getUserCN( $user_cn = App::users()->getUserCN(
$rs->f('user_id'), $rs->f('user_id'),
$rs->f('user_name'), $rs->f('user_name'),
$rs->f('user_firstname'), $rs->f('user_firstname'),
@ -943,7 +957,7 @@ class ZoneclearFeedServer
]); ]);
# --BEHAVIOR-- zoneclearFeedServerPublicUrlTypes -- ArrayObject # --BEHAVIOR-- zoneclearFeedServerPublicUrlTypes -- ArrayObject
dcCore::app()->callBehavior('zoneclearFeedServerPublicUrlTypes', $types); App::behavior()->callBehavior('zoneclearFeedServerPublicUrlTypes', $types);
return $types->getArrayCopy(); return $types->getArrayCopy();
} }