2015-04-25 19:25:03 +00:00
|
|
|
<?php
|
2021-09-11 09:56:57 +00:00
|
|
|
/**
|
|
|
|
* @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
|
|
|
|
*/
|
2015-04-25 19:25:03 +00:00
|
|
|
|
|
|
|
if (!defined('DC_RC_PATH')) {
|
2018-02-15 01:37:19 +00:00
|
|
|
return null;
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# Namespace for settings
|
|
|
|
$core->blog->settings->addNamespace('zoneclearFeedServer');
|
|
|
|
$s = $core->blog->settings->zoneclearFeedServer;
|
|
|
|
|
|
|
|
# Widgets
|
2021-09-12 20:35:57 +00:00
|
|
|
require_once dirname(__FILE__) . '/_widgets.php';
|
2015-04-25 19:25:03 +00:00
|
|
|
|
2021-09-12 20:35:57 +00:00
|
|
|
$core->addBehavior('coreBlogGetPosts', ['zcfsPublicBehaviors', 'coreBlogGetPosts']);
|
2015-04-25 19:25:03 +00:00
|
|
|
|
|
|
|
if (!$s->zoneclearFeedServer_active) {
|
2021-09-11 09:56:57 +00:00
|
|
|
return null;
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
if (1 == $s->zoneclearFeedServer_bhv_pub_upd) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$core->addBehavior('publicBeforeDocument', ['zcfsPublicBehaviors', 'publicDocument']);
|
|
|
|
} elseif (2 == $s->zoneclearFeedServer_bhv_pub_upd) {
|
|
|
|
$core->addBehavior('publicAfterDocument', ['zcfsPublicBehaviors', 'publicAfterDocument']);
|
|
|
|
} elseif (3 == $s->zoneclearFeedServer_bhv_pub_upd) {
|
|
|
|
$core->addBehavior('publicHeadContent', ['zcfsPublicBehaviors', 'publicHeadContent']);
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# Take care about tweakurls (thanks Mathieu M.)
|
|
|
|
if (version_compare($core->plugins->moduleInfo('tweakurls', 'version'), '0.8', '>=')) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$core->addbehavior('zoneclearFeedServerAfterPostCreate', ['zoneclearFeedServer', 'tweakurlsAfterPostCreate']);
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# Register tempalte blocks
|
2021-09-12 20:35:57 +00:00
|
|
|
$tpl_blocks = [
|
2021-09-11 09:56:57 +00:00
|
|
|
'Feeds',
|
|
|
|
'FeedsFooter',
|
|
|
|
'FeedsHeader',
|
|
|
|
'FeedIf'
|
2021-09-12 20:35:57 +00:00
|
|
|
];
|
2015-04-25 19:25:03 +00:00
|
|
|
foreach($tpl_blocks as $v) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$core->tpl->addBlock('zc' .$v, ['zcfsTemplate', $v]);
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# Register tempalte values
|
2021-09-12 20:35:57 +00:00
|
|
|
$tpl_values = [
|
2021-09-11 09:56:57 +00:00
|
|
|
'FeedsCount',
|
|
|
|
'FeedsEntriesCount',
|
|
|
|
'FeedEntriesCount',
|
|
|
|
'FeedCategory',
|
|
|
|
'FeedCategoryID',
|
|
|
|
'FeedCategoryURL',
|
|
|
|
'FeedCategoryShortURL',
|
|
|
|
'FeedID',
|
|
|
|
'FeedIfFirst',
|
|
|
|
'FeedIfOdd',
|
|
|
|
'FeedLang',
|
|
|
|
'FeedName',
|
|
|
|
'FeedOwner',
|
|
|
|
'FeedDesc',
|
|
|
|
'FeedSiteURL',
|
|
|
|
'FeedFeedURL'
|
2021-09-12 20:35:57 +00:00
|
|
|
];
|
2015-04-25 19:25:03 +00:00
|
|
|
foreach($tpl_values as $v) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$core->tpl->addValue('zc' . $v, ['zcfsTemplate', $v]);
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @ingroup DC_PLUGIN_ZONECLEARFEEDSERVER
|
|
|
|
* @brief Mix your blog with a feeds planet - public methods.
|
|
|
|
* @since 2.6
|
|
|
|
*/
|
|
|
|
class zcfsPublicBehaviors
|
|
|
|
{
|
2021-09-11 09:56:57 +00:00
|
|
|
/**
|
|
|
|
* Remember others post extension.
|
|
|
|
*
|
|
|
|
* @param record $rs record instance
|
|
|
|
*/
|
|
|
|
public static function coreBlogGetPosts(record $rs)
|
|
|
|
{
|
|
|
|
$GLOBALS['beforeZcFeedRsExt'] = $rs->extensions();
|
|
|
|
$rs->extend('zcfsRsExtPosts');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Update feeds after contents.
|
|
|
|
*
|
|
|
|
* @param dcCore $core dcCore instance
|
|
|
|
* @return string Document
|
|
|
|
*/
|
|
|
|
public static function publicAfterDocument(dcCore $core)
|
|
|
|
{
|
|
|
|
# Limit feeds update to home page et feed page
|
|
|
|
# Like publishScheduledEntries
|
2021-09-12 20:35:57 +00:00
|
|
|
if (!in_array($core->url->type, ['default', 'feed'])) {
|
2021-09-11 09:56:57 +00:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
self::publicDocument($core);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generic behavior for before and after public content.
|
|
|
|
*
|
|
|
|
* @param dcCore $core dcCore instance
|
|
|
|
* @return null NULL
|
|
|
|
*/
|
|
|
|
public static function publicDocument(dcCore $core)
|
|
|
|
{
|
|
|
|
$zc = new zoneclearFeedServer($core);
|
|
|
|
$zc->checkFeedsUpdate();
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Update feeds by an Ajax request (background).
|
|
|
|
*
|
|
|
|
* @param dcCore $core dcCore instance
|
|
|
|
* @param context $_ctx context instance
|
|
|
|
* @return string HTML content
|
|
|
|
*/
|
|
|
|
public static function publicHeadContent(dcCore $core, context $_ctx)
|
|
|
|
{
|
|
|
|
# Limit update to home page
|
|
|
|
if ($core->url->type != 'default') {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
$blog_url = html::escapeJS(
|
2021-09-12 20:35:57 +00:00
|
|
|
$core->blog->url .
|
|
|
|
$core->url->getBase('zoneclearFeedsPage') .
|
2021-09-11 09:56:57 +00:00
|
|
|
'/zcfsupd'
|
|
|
|
);
|
|
|
|
$blog_id = html::escapeJS($core->blog->id);
|
|
|
|
|
|
|
|
echo
|
2021-09-12 20:35:57 +00:00
|
|
|
"\n<!-- JS for zoneclearFeedServer --> \n" .
|
|
|
|
dcutils::jsLoad($core->blog->url . $core->url->getBase('zoneclearFeedsPage') . '/zcfsupd.js') .
|
|
|
|
"<script type=\"text/javascript\"> \n//<![CDATA[\n" .
|
|
|
|
" \$(function(){if(!document.getElementById){return;} " .
|
|
|
|
" $('body').zoneclearFeedServer({blog_url:'" .
|
|
|
|
$blog_url . "',blog_id:'" . $blog_id . "'}); " .
|
|
|
|
" })\n" .
|
|
|
|
"//]]>\n</script>\n";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @ingroup DC_PLUGIN_ZONECLEARFEEDSERVER
|
|
|
|
* @brief Mix your blog with a feeds planet - rs methods.
|
|
|
|
* @since 2.6
|
|
|
|
*/
|
|
|
|
class zcfsRsExtPosts extends rsExtPost
|
|
|
|
{
|
2021-09-11 09:56:57 +00:00
|
|
|
/**
|
|
|
|
* Get feed meta.
|
|
|
|
*
|
|
|
|
* @param record $rs record instance
|
|
|
|
* @param string $info Feed info key
|
|
|
|
* @return string Feed info value
|
|
|
|
*/
|
|
|
|
public static function zcFeed($rs, $info)
|
|
|
|
{
|
2021-09-12 20:35:57 +00:00
|
|
|
$meta = $rs->core->meta->getMetadata([
|
|
|
|
'post_id' => $rs->post_id,
|
|
|
|
'meta_type' => 'zoneclearfeed_' . $info,
|
|
|
|
'limit' => 1
|
|
|
|
]);
|
2021-09-11 09:56:57 +00:00
|
|
|
|
|
|
|
return $meta->isEmpty() ? null : $meta->meta_id;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Call other rs extension.
|
|
|
|
*
|
|
|
|
* @param string $type Type of extension
|
|
|
|
* @param array $args Arguments
|
|
|
|
* @return mixed record extension ressource
|
|
|
|
*/
|
|
|
|
public static function zcFeedBrother($type, $args)
|
|
|
|
{
|
|
|
|
if (!empty($GLOBALS['beforeZcFeedRsExt'][$type])) {
|
|
|
|
$func = $GLOBALS['beforeZcFeedRsExt'][$type];
|
2021-09-12 20:35:57 +00:00
|
|
|
} elseif (is_callable('rsExtPostPublic', $type)) {
|
|
|
|
$func = ['rsExtPostPublic', $type];
|
|
|
|
} else {
|
|
|
|
$func = ['rsExtPost', $type];
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return call_user_func_array($func, $args);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get author link from post to feed.
|
|
|
|
*
|
|
|
|
* @param record $rs record instance
|
|
|
|
* @return string Author link
|
|
|
|
*/
|
|
|
|
public static function getAuthorLink($rs)
|
|
|
|
{
|
2021-09-12 20:35:57 +00:00
|
|
|
$author = $rs->zcFeed('author');
|
|
|
|
$site = $rs->zcFeed('site');
|
2021-09-11 09:56:57 +00:00
|
|
|
$sitename = $rs->zcFeed('sitename');
|
|
|
|
|
2021-09-12 20:35:57 +00:00
|
|
|
return $author && $sitename ?
|
|
|
|
sprintf('%s (<a href="%s">%s</a>)', $author, $site, $sitename) :
|
|
|
|
self::zcFeedBrother('getAuthorLink', [&$rs]);
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get author CN from post to feed.
|
|
|
|
*
|
|
|
|
* @param record $rs record instance
|
|
|
|
* @return string Author CN
|
|
|
|
*/
|
|
|
|
public static function getAuthorCN($rs)
|
|
|
|
{
|
|
|
|
$author = $rs->zcFeed('author');
|
|
|
|
return $author ?
|
|
|
|
$author :
|
2021-09-12 20:35:57 +00:00
|
|
|
self::zcFeedBrother('getAuthorCN', [&$rs]);
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get post link from post to feed.
|
|
|
|
*
|
|
|
|
* @param record $rs record instance
|
|
|
|
* @return string Post link
|
|
|
|
*/
|
|
|
|
public static function getURL($rs)
|
|
|
|
{
|
|
|
|
$url = $rs->zcFeed('url');
|
|
|
|
$types = @unserialize($rs->core->blog->settings->zoneclearFeedServer->zoneclearFeedServer_post_title_redir);
|
|
|
|
$full = is_array($types) && in_array($rs->core->url->type, $types);
|
|
|
|
|
|
|
|
return $url && $full ?
|
|
|
|
zoneclearFeedServer::absoluteURL($rs->zcFeed('site'), $url) :
|
2021-09-12 20:35:57 +00:00
|
|
|
self::zcFeedBrother('getURL', [&$rs]);
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get post content from post to feed.
|
|
|
|
*
|
|
|
|
* @param record $rs record instance
|
|
|
|
* @return string Post content
|
|
|
|
*/
|
2021-09-12 20:35:57 +00:00
|
|
|
public static function getContent($rs, $absolute_urls = false)
|
2021-09-11 09:56:57 +00:00
|
|
|
{
|
|
|
|
$url = $rs->zcFeed('url');
|
|
|
|
$sitename = $rs->zcFeed('sitename');
|
2021-09-12 20:35:57 +00:00
|
|
|
$content = self::zcFeedBrother('getContent', [&$rs, $absolute_urls]);
|
2021-09-11 09:56:57 +00:00
|
|
|
|
|
|
|
if ($url && $sitename && $rs->post_type == 'post') {
|
|
|
|
$types = @unserialize($rs->core->blog->settings->zoneclearFeedServer->zoneclearFeedServer_post_full_tpl);
|
|
|
|
|
|
|
|
if (is_array($types) && in_array($rs->core->url->type, $types)) {
|
|
|
|
|
2021-09-12 20:35:57 +00:00
|
|
|
return $content . sprintf(
|
|
|
|
'<p class="zoneclear-original"><em>%s</em></p>',
|
|
|
|
sprintf(__('Original post on <a href="%s">%s</a>'), $url, $sitename)
|
|
|
|
);
|
|
|
|
} else {
|
2021-09-11 09:56:57 +00:00
|
|
|
$content = context::remove_html($content);
|
2021-09-12 20:35:57 +00:00
|
|
|
$content = context::cut_string($content, 350);
|
2021-09-11 09:56:57 +00:00
|
|
|
$content = html::escapeHTML($content);
|
|
|
|
|
2021-09-12 20:35:57 +00:00
|
|
|
return sprintf(
|
|
|
|
'<p>%s... <em><a href="%s" title="%s">%s</a></em></p>',
|
|
|
|
$content,
|
|
|
|
self::getURL($rs),
|
|
|
|
__('Read more details about this feed'),
|
|
|
|
__('Continue reading')
|
|
|
|
);
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
2021-09-12 20:35:57 +00:00
|
|
|
} else {
|
2021-09-11 09:56:57 +00:00
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
}
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @ingroup DC_PLUGIN_ZONECLEARFEEDSERVER
|
|
|
|
* @brief Mix your blog with a feeds planet - url handler methods.
|
|
|
|
* @since 2.6
|
|
|
|
*/
|
|
|
|
class zcfsUrlHandler extends dcUrlHandlers
|
|
|
|
{
|
2021-09-11 09:56:57 +00:00
|
|
|
/**
|
|
|
|
* Feeds source page and update methods.
|
|
|
|
*
|
|
|
|
* @param array $args Page arguments
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public static function zcFeedsPage($args)
|
|
|
|
{
|
|
|
|
global $core, $_ctx;
|
|
|
|
$s = $core->blog->settings->zoneclearFeedServer;
|
|
|
|
|
|
|
|
# Not active
|
|
|
|
if (!$s->zoneclearFeedServer_active) {
|
|
|
|
self::p404();
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Update feeds (from ajax or other post resquest)
|
2021-09-12 20:35:57 +00:00
|
|
|
if ($args == '/zcfsupd' && 3 == $s->zoneclearFeedServer_bhv_pub_upd) {
|
2021-09-11 09:56:57 +00:00
|
|
|
$msg = '';
|
2021-09-12 20:35:57 +00:00
|
|
|
if (!empty($_POST['blogId']) && html::escapeJS($core->blog->id) == $_POST['blogId']) {
|
2021-09-11 09:56:57 +00:00
|
|
|
try {
|
|
|
|
$zc = new zoneclearFeedServer($core);
|
|
|
|
if ($zc->checkFeedsUpdate()) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$msg = sprintf(
|
|
|
|
'<status>%s</status><message>s%</message>',
|
|
|
|
'ok',
|
|
|
|
'Feeds updated successfully'
|
|
|
|
);
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception $e) {}
|
|
|
|
}
|
|
|
|
if (empty($msg)) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$msg = sprintf(
|
|
|
|
'<status>%s</status><message>s%</message>',
|
|
|
|
'failed',
|
|
|
|
'Failed to update feeds'
|
|
|
|
);
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
header('Content-Type: application/xml; charset=UTF-8');
|
|
|
|
echo
|
2021-09-12 20:35:57 +00:00
|
|
|
'<?xml version="1.0" encoding="utf-8"?> ' . "\n" .
|
|
|
|
'<response><rsp>' . "\n" .
|
|
|
|
$msg . "\n" .
|
2021-09-11 09:56:57 +00:00
|
|
|
'</rsp></response>';
|
|
|
|
|
|
|
|
exit(1);
|
2021-09-12 20:35:57 +00:00
|
|
|
|
2021-09-11 09:56:57 +00:00
|
|
|
# Server js
|
2021-09-12 20:35:57 +00:00
|
|
|
} elseif ($args == '/zcfsupd.js' && 3 == $s->zoneclearFeedServer_bhv_pub_upd) {
|
|
|
|
$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__) . '/default-templates');
|
2021-09-11 09:56:57 +00:00
|
|
|
self::serveDocument(
|
|
|
|
'zcfsupd.js',
|
|
|
|
'text/javascript',
|
|
|
|
false,
|
|
|
|
false
|
|
|
|
);
|
2021-09-12 20:35:57 +00:00
|
|
|
|
2021-09-11 09:56:57 +00:00
|
|
|
# Server feeds description page
|
2021-09-12 20:35:57 +00:00
|
|
|
} elseif (in_array($args, ['', '/']) && $s->zoneclearFeedServer_pub_active) {
|
|
|
|
$tplset = $core->themes->moduleInfo($core->blog->settings->system->theme, 'tplset');
|
|
|
|
$path = dirname(__FILE__) . '/default-templates/';
|
|
|
|
if (!empty($tplset) && is_dir($path . $tplset)) {
|
|
|
|
$core->tpl->setPath($core->tpl->getPath(), $path . $tplset);
|
|
|
|
} else {
|
|
|
|
$core->tpl->setPath($core->tpl->getPath(), $path . DC_DEFAULT_TPLSET);
|
|
|
|
}
|
2021-09-11 09:56:57 +00:00
|
|
|
self::serveDocument('zcfeeds.html');
|
|
|
|
}
|
|
|
|
# Unknow
|
|
|
|
else {
|
|
|
|
self::p404();
|
|
|
|
}
|
2015-04-25 19:25:03 +00:00
|
|
|
|
2021-09-11 09:56:57 +00:00
|
|
|
return null;
|
|
|
|
}
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @ingroup DC_PLUGIN_ZONECLEARFEEDSERVER
|
|
|
|
* @brief Mix your blog with a feeds planet - template methods.
|
|
|
|
* @since 2.6
|
|
|
|
*/
|
|
|
|
class zcfsTemplate
|
|
|
|
{
|
2021-09-11 09:56:57 +00:00
|
|
|
public static function Feeds($a, $c)
|
|
|
|
{
|
|
|
|
$lastn = -1;
|
|
|
|
$p = '';
|
|
|
|
if (isset($a['lastn'])) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$lastn = abs((integer) $a['lastn']) +0;
|
|
|
|
$p .= "\$zcfs_params['limit'] = " . $lastn . ";\n";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
if (isset($a['cat_id'])) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$p .= "@\$zcfs_params['sql'] .= 'AND Z.cat_id = " . addslashes($a['cat_id']) . " ';\n";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
if (isset($a['no_category'])) {
|
|
|
|
$p .= "@\$zcfs_params['sql'] .= 'AND Z.cat_id IS NULL ';\n";
|
|
|
|
}
|
|
|
|
if (!empty($a['site_url'])) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$p .= "\$zcfs_params['feed_url'] = '" . addslashes($a['site_url']) . "';\n";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
if (isset($a['feed_status'])) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$p .= "\$zcfs_params['feed_status'] = " . ((integer) $a['feed_status']) . ";\n";
|
|
|
|
} else {
|
2021-09-11 09:56:57 +00:00
|
|
|
$p .= "\$zcfs_params['feed_status'] = 1;\n";
|
|
|
|
}
|
|
|
|
if (!empty($a['feed_url'])) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$p .= "\$zcfs_params['feed_feed'] = '" . addslashes($a['feed_url']) . "';\n";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
if (isset($a['feed_owner'])) {
|
2021-09-12 20:35:57 +00:00
|
|
|
$p .= "@\$zcfs_params['sql'] .= \"AND Z.feed_owner = '" . addslashes($a['author']) . "' \";\n";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
$sortby = 'feed_creadt';
|
|
|
|
$order = 'desc';
|
|
|
|
if (isset($a['sortby'])) {
|
|
|
|
switch ($a['sortby']) {
|
2021-09-12 20:35:57 +00:00
|
|
|
case 'name': $sortby = 'lowername'; break;
|
|
|
|
case 'owner' : $sortby = 'feed_owner'; break;
|
|
|
|
case 'date' : $sortby = 'feed_dt'; break;
|
|
|
|
case 'update' : $sortby = 'feed_upddt'; break;
|
|
|
|
case 'id' : $sortby = 'feed_id'; break;
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
}
|
2021-09-12 20:35:57 +00:00
|
|
|
if (isset($a['order']) && preg_match('/^(desc|asc)$/i', $a['order'])) {
|
2021-09-11 09:56:57 +00:00
|
|
|
$order = $a['order'];
|
|
|
|
}
|
2021-09-12 20:35:57 +00:00
|
|
|
$p .= "\$zcfs_params['order'] = '" . $sortby . " " . $order . "';\n";
|
2021-09-11 09:56:57 +00:00
|
|
|
|
|
|
|
return
|
2021-09-12 20:35:57 +00:00
|
|
|
'<?php ' . $p .
|
|
|
|
'$_ctx->feeds_params = $zcfs_params;' . "\n" .
|
|
|
|
'$zcfs = new zoneclearFeedServer($core);' . "\n" .
|
|
|
|
'$_ctx->feeds = $zcfs->getFeeds($zcfs_params); unset($zcfs_params,$zcfs);' . "\n" .
|
|
|
|
"?>\n" .
|
|
|
|
'<?php while ($_ctx->feeds->fetch()) : ?>' . $c . '<?php endwhile; ' .
|
2021-09-11 09:56:57 +00:00
|
|
|
'$_ctx->feeds = null; $_ctx->feeds_params = null; ?>';
|
|
|
|
}
|
|
|
|
|
2021-09-12 20:35:57 +00:00
|
|
|
public static function FeedIf($a, $c)
|
2021-09-11 09:56:57 +00:00
|
|
|
{
|
2021-09-12 20:35:57 +00:00
|
|
|
$if = [];
|
2021-09-11 09:56:57 +00:00
|
|
|
|
|
|
|
$operator = isset($a['operator']) ? self::getOperator($a['operator']) : '&&';
|
|
|
|
|
|
|
|
if (isset($a['type'])) {
|
|
|
|
$type = trim($a['type']);
|
|
|
|
$type = !empty($type) ? $type : 'feed';
|
2021-09-12 20:35:57 +00:00
|
|
|
$if[] = '$_ctx->feeds->feed_type == "' . addslashes($type) . '"';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
if (isset($a['site_url'])) {
|
|
|
|
$url = trim($a['feed_url']);
|
|
|
|
if (substr($url, 0, 1) == '!') {
|
|
|
|
$url = substr($url, 1);
|
2021-09-12 20:35:57 +00:00
|
|
|
$if[] = '$_ctx->feeds->feed_url != "' . addslashes($url) . '"';
|
|
|
|
} else {
|
|
|
|
$if[] = '$_ctx->feeds->feed_url == "' . addslashes($url) . '"';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (isset($a['feed_url'])) {
|
|
|
|
$url = trim($a['feed_feed']);
|
|
|
|
if (substr($url, 0, 1) == '!') {
|
|
|
|
$url = substr($url, 1);
|
2021-09-12 20:35:57 +00:00
|
|
|
$if[] = '$_ctx->feeds->feed_feed != "' . addslashes($url) . '"';
|
|
|
|
} else {
|
|
|
|
$if[] = '$_ctx->feeds->feed_feed == "' . addslashes($url) . '"';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (isset($a['category'])) {
|
|
|
|
$category = addslashes(trim($a['category']));
|
|
|
|
if (substr($category, 0, 1) == '!') {
|
|
|
|
$category = substr($category, 1);
|
2021-09-12 20:35:57 +00:00
|
|
|
$if[] = '($_ctx->feeds->cat_url != "' . $category . '")';
|
|
|
|
} else {
|
|
|
|
$if[] = '($_ctx->feeds->cat_url == "' . $category . '")';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (isset($a['first'])) {
|
|
|
|
$sign = (boolean) $a['first'] ? '=' : '!';
|
2021-09-12 20:35:57 +00:00
|
|
|
$if[] = '$_ctx->feeds->index() ' . $sign . '= 0';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
if (isset($a['odd'])) {
|
|
|
|
$sign = (boolean) $a['odd'] ? '=' : '!';
|
2021-09-12 20:35:57 +00:00
|
|
|
$if[] = '($_ctx->feeds->index()+1)%2 ' .$sign. ' = 1';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
if (isset($a['has_category'])) {
|
|
|
|
$sign = (boolean) $a['has_category'] ? '' : '!';
|
2021-09-12 20:35:57 +00:00
|
|
|
$if[] = $sign . '$_ctx->feeds->cat_id';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
if (isset($a['has_description'])) {
|
|
|
|
$sign = (boolean) $a['has_description'] ? '' : '!';
|
2021-09-12 20:35:57 +00:00
|
|
|
$if[] = $sign . '$_ctx->feeds->feed_desc';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return empty($if) ?
|
|
|
|
$c :
|
2021-09-12 20:35:57 +00:00
|
|
|
'<?php if(' . implode(' ' . $operator . ' ', $if) . ') : ?>' . $c . '<?php endif; ?>';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedIfFirst($a)
|
|
|
|
{
|
|
|
|
$ret = isset($a['return']) ? $a['return'] : 'first';
|
|
|
|
$ret = html::escapeHTML($ret);
|
|
|
|
|
|
|
|
return
|
2021-09-12 20:35:57 +00:00
|
|
|
'<?php if ($_ctx->feeds->index() == 0) { ' .
|
|
|
|
"echo '" . addslashes($ret) . "'; } ?>";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedIfOdd($a)
|
|
|
|
{
|
|
|
|
$ret = isset($a['return']) ? $a['return'] : 'odd';
|
|
|
|
$ret = html::escapeHTML($ret);
|
|
|
|
|
|
|
|
return
|
2021-09-12 20:35:57 +00:00
|
|
|
'<?php if (($_ctx->feeds->index()+1)%2 == 1) { ' .
|
|
|
|
"echo '" . addslashes($ret) . "'; } ?>";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedDesc($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->feed_desc');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedOwner($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->feed_owner');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedCategory($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->cat_title');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedCategoryID($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->cat_id');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedCategoryURL($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$core->blog->url.$core->url->getBase(\'category\').\'/\'.html::sanitizeURL($_ctx->feeds->cat_url)');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedCategoryShortURL($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->cat_url');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedID($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->feed_id');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedLang($a)
|
|
|
|
{
|
|
|
|
$f = $GLOBALS['core']->tpl->getFilters($a);
|
|
|
|
|
|
|
|
return empty($a['full']) ?
|
2021-09-12 20:35:57 +00:00
|
|
|
'<?php echo ' . sprintf($f, '$_ctx->feeds->feed_lang') . '; ?>' :
|
|
|
|
'<?php $langs = l10n::getISOcodes(); if (isset($langs[$_ctx->feeds->feed_lang])) { echo ' .
|
|
|
|
sprintf($f, '$langs[$_ctx->feeds->feed_lang]') .'; } else { echo ' .
|
|
|
|
sprintf($f, '$_ctx->feeds->feed_lang') . '; } unset($langs); ?>';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedName($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->feed_name');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedSiteURL($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->feed_url');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedFeedURL($a)
|
|
|
|
{
|
|
|
|
return self::getValue($a, '$_ctx->feeds->feed_feed');
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedsHeader($a, $c)
|
|
|
|
{
|
2021-09-12 20:35:57 +00:00
|
|
|
return "<?php if (\$_ctx->feeds->isStart()) : ?>" . $c . "<?php endif; ?>";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedsFooter($a, $c)
|
|
|
|
{
|
2021-09-12 20:35:57 +00:00
|
|
|
return "<?php if (\$_ctx->feeds->isEnd()) : ?>" . $c . "<?php endif; ?>";
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedsCount($a)
|
|
|
|
{
|
|
|
|
$none = 'no sources';
|
|
|
|
$one = 'one source';
|
|
|
|
$more = '%d sources';
|
|
|
|
|
|
|
|
if (isset($a['none'])) {
|
|
|
|
$none = addslashes($a['none']);
|
|
|
|
}
|
|
|
|
if (isset($a['one'])) {
|
|
|
|
$one = addslashes($a['one']);
|
|
|
|
}
|
|
|
|
if (isset($a['more'])) {
|
|
|
|
$more = addslashes($a['more']);
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
2021-09-12 20:35:57 +00:00
|
|
|
"<?php \$fcount = \$_ctx->feeds->count(); \n" .
|
|
|
|
"if (\$fcount == 0) {\n" .
|
|
|
|
" printf(__('" . $none . "'),\$fcount);\n" .
|
|
|
|
"} elseif (\$fcount == 1) {\n" .
|
|
|
|
" printf(__('" . $one . "'),\$fcount);\n" .
|
|
|
|
"} else {\n" .
|
|
|
|
" printf(__('" . $more . "'),\$fcount);\n" .
|
2021-09-11 09:56:57 +00:00
|
|
|
"} unset(\$fcount); ?>";
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedsEntriesCount($a)
|
|
|
|
{
|
|
|
|
$none = __('no entries');
|
|
|
|
$one = __('one entry');
|
|
|
|
$more = __('%d entries');
|
|
|
|
|
|
|
|
if (isset($a['none'])) {
|
|
|
|
$none = addslashes($a['none']);
|
|
|
|
}
|
|
|
|
if (isset($a['one'])) {
|
|
|
|
$one = addslashes($a['one']);
|
|
|
|
}
|
|
|
|
if (isset($a['more'])) {
|
|
|
|
$more = addslashes($a['more']);
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
2021-09-12 20:35:57 +00:00
|
|
|
"<?php \$fcount = 0; \$allfeeds = \$_ctx->feeds->zc->getFeeds(); \n" .
|
|
|
|
"if (!\$allfeeds->isEmpty()) { \n" .
|
|
|
|
" while (\$allfeeds->fetch()) { " .
|
|
|
|
" \$fcount += (integer) \$_ctx->feeds->zc->getPostsByFeed(array('feed_id'=>\$allfeeds->feed_id),true)->f(0); " .
|
|
|
|
" } \n" .
|
|
|
|
"} \n" .
|
|
|
|
"if (\$fcount == 0) {\n" .
|
|
|
|
" printf(__('" . $none . "'),\$fcount);\n" .
|
|
|
|
"} elseif (\$fcount == 1) {\n" .
|
|
|
|
" printf(__('" . $one . "'),\$fcount);\n" .
|
|
|
|
"} else {\n" .
|
|
|
|
" printf(__('" . $more . "'),\$fcount);\n" .
|
2021-09-11 09:56:57 +00:00
|
|
|
"} unset(\$allfeeds,\$fcount); ?>";
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function FeedEntriesCount($a)
|
|
|
|
{
|
|
|
|
$none = 'no entries';
|
|
|
|
$one = 'one entry';
|
|
|
|
$more = '%d entries';
|
|
|
|
|
|
|
|
if (isset($a['none'])) {
|
|
|
|
$none = addslashes($a['none']);
|
|
|
|
}
|
|
|
|
if (isset($a['one'])) {
|
|
|
|
$one = addslashes($a['one']);
|
|
|
|
}
|
|
|
|
if (isset($a['more'])) {
|
|
|
|
$more = addslashes($a['more']);
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
"<?php \$fcount = \$_ctx->feeds->zc->getPostsByFeed(array('feed_id'=>\$_ctx->feeds->feed_id),true)->f(0); \n".
|
2021-09-12 20:35:57 +00:00
|
|
|
"if (\$fcount == 0) {\n" .
|
|
|
|
" printf(__('" . $none . "'),\$fcount);\n" .
|
|
|
|
"} elseif (\$fcount == 1) {\n" .
|
|
|
|
" printf(__('" . $one . "'),\$fcount);\n" .
|
|
|
|
"} else {\n" .
|
|
|
|
" printf(__('" . $more . "'),\$fcount);\n" .
|
2021-09-11 09:56:57 +00:00
|
|
|
"} unset(\$fcount); ?>";
|
|
|
|
}
|
|
|
|
|
2021-09-12 20:35:57 +00:00
|
|
|
protected static function getValue($a, $v)
|
2021-09-11 09:56:57 +00:00
|
|
|
{
|
2021-09-12 20:35:57 +00:00
|
|
|
return '<?php echo ' . sprintf($GLOBALS['core']->tpl->getFilters($a), $v) . '; ?>';
|
2021-09-11 09:56:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected static function getOperator($op)
|
|
|
|
{
|
|
|
|
switch (strtolower($op))
|
|
|
|
{
|
|
|
|
case 'or':
|
|
|
|
case '||':
|
|
|
|
return '||';
|
|
|
|
case 'and':
|
|
|
|
case '&&':
|
|
|
|
default:
|
|
|
|
return '&&';
|
|
|
|
}
|
|
|
|
}
|
2015-07-19 23:17:56 +00:00
|
|
|
}
|
|
|
|
|
2021-09-12 20:35:57 +00:00
|
|
|
$core->addBehavior('publicBreadcrumb', ['extZcfeeds', 'publicBreadcrumb']);
|
2015-07-19 23:17:56 +00:00
|
|
|
|
|
|
|
class extZcfeeds
|
|
|
|
{
|
2021-09-12 20:35:57 +00:00
|
|
|
public static function publicBreadcrumb($context, $separator)
|
2015-07-19 23:17:56 +00:00
|
|
|
{
|
|
|
|
if ($context == 'zoneclearFeedsPage') {
|
|
|
|
return __('List of feeds');
|
|
|
|
}
|
|
|
|
}
|
2015-04-25 19:25:03 +00:00
|
|
|
}
|