You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

189 lines
6.3 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
function wikiplugin_rss_info()
{
return [
'name' => tra('RSS Feed'),
'documentation' => 'PluginRSS',
'description' => tra('Display items from one or more RSS feeds'),
'prefs' => [ 'wikiplugin_rss' ],
'iconname' => 'rss',
'introduced' => 1,
'format' => 'html',
'filter' => 'striptags',
'tags' => [ 'basic' ],
'params' => [
'id' => [
'required' => true,
'name' => tra('IDs'),
'separator' => ':',
'filter' => 'int',
'description' => tr('List of feed IDs separated by colons. ex: %0', '<code>feedId:feedId2</code>'),
'since' => '1',
'default' => '',
'profile_reference' => 'rss',
],
'max' => [
'required' => false,
'name' => tra('Result Count'),
'filter' => 'int',
'description' => tra('Number of results displayed.'),
'since' => '1',
'default' => 10,
],
'date' => [
'required' => false,
'name' => tra('Date'),
'filter' => 'digits',
'description' => tra('Show date of each item (not shown by default)'),
'since' => '1',
'default' => 0,
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 1],
['text' => tra('No'), 'value' => 0]
]
],
'desc' => [
'required' => false,
'name' => tra('Description'),
'filter' => 'digits',
'description' => tra('Show feed descriptions (not shown by default)'),
'since' => '1',
'default' => 0,
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 1],
['text' => tra('No'), 'value' => 0]
]
],
'author' => [
'required' => false,
'name' => tra('Author'),
'filter' => 'digits',
'description' => tra('Show authors (not shown by default)'),
'since' => '1',
'default' => 0,
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 1],
['text' => tra('No'), 'value' => 0]
]
],
'icon' => [
'required' => false,
'name' => tra('Icon'),
'filter' => 'url',
'description' => tra('URL to a favicon to put before each entry'),
'since' => '5.0',
'default' => '',
],
'showtitle' => [
'required' => false,
'name' => tra('Show Title'),
'filter' => 'digits',
'description' => tra('Show the title of the feed (shown by default)'),
'since' => '6.0',
'default' => 1,
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 1],
['text' => tra('No'), 'value' => 0]
]
],
'ticker' => [
'required' => false,
'name' => tra('Ticker'),
'filter' => 'digits',
'description' => tra('Turn static feed display into ticker news like'),
'since' => '10.1',
'default' => 1,
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 1],
['text' => tra('No'), 'value' => 0]
]
],
'desclen' => [
'required' => false,
'name' => tra('Description Length'),
'filter' => 'digits',
'description' => tra('Max characters/length, truncates text to fit design'),
'since' => '10.1',
'default' => 0,
],
],
];
}
function wikiplugin_rss($data, $params)
{
$rsslib = TikiLib::lib('rss');
$params = array_merge(
[
'max' => 10,
'date' => 0,
'desc' => 0,
'author' => 0,
'icon' => '',
'showtitle' => 1,
'ticker' => 0,
'desclen' => 0,
],
$params
);
if (! isset($params['id'])) {
return WikiParser_PluginOutput::argumentError([ 'id' ]);
}
$params['id'] = (array) $params['id'];
$items = $rsslib->get_feed_items($params['id'], $params['max']);
$title = null;
if (count($params['id']) == 1) {
$module = $rsslib->get_rss_module(reset($params['id']));
if (isset($module['sitetitle'])) {
$title = [
'title' => $module['sitetitle'],
'link' => $module['siteurl'],
];
}
}
if ($params['desc'] > 0 && $params['desclen'] > 0) {
foreach ($items as &$item) {
$item['description'] = limit_text($item['description'], $params['desclen']);
}
}
$smarty = TikiLib::lib('smarty');
$smarty->assign('rsstitle', $title);
$smarty->assign('items', $items);
$smarty->assign('showdate', $params['date'] > 0);
$smarty->assign('showtitle', $params['showtitle'] > 0);
$smarty->assign('showdesc', $params['desc'] > 0);
$smarty->assign('showauthor', $params['author'] > 0);
$smarty->assign('icon', $params['icon']);
$smarty->assign('ticker', $params['ticker']);
return $smarty->fetch('wiki-plugins/wikiplugin_rss.tpl');
}
function limit_text($text, $limit)
{
if (str_word_count($text, 0) > $limit) {
$words = str_word_count($text, 2);
$pos = array_keys($words);
$text = substr($text, 0, $pos[$limit]) . '...';
}
return $text;
}