summaryrefslogtreecommitdiff
path: root/feed.php
diff options
context:
space:
mode:
authorGerrit Uitslag <klapinklapin@gmail.com>2014-09-28 15:36:21 +0200
committerGerrit Uitslag <klapinklapin@gmail.com>2014-09-28 15:36:21 +0200
commit0c1b02bead38d5a58032a1c88cf3ca53bbc4a4d9 (patch)
treeb9cb574a1964f28dda648795010a5be056b80618 /feed.php
parent618191d008b98cb421694c541145c863d7b300ce (diff)
parentda9572711f54d13ce3c5506971154b0bc359723f (diff)
downloadrpg-0c1b02bead38d5a58032a1c88cf3ca53bbc4a4d9.tar.gz
rpg-0c1b02bead38d5a58032a1c88cf3ca53bbc4a4d9.tar.bz2
Merge remote-tracking branch 'origin/master' into FS#2697searchpagereadonly
Conflicts: inc/lang/hr/searchpage.txt inc/lang/ko/searchpage.txt
Diffstat (limited to 'feed.php')
-rw-r--r--feed.php48
1 files changed, 29 insertions, 19 deletions
diff --git a/feed.php b/feed.php
index 8f2ac0b4c..a63e22164 100644
--- a/feed.php
+++ b/feed.php
@@ -15,13 +15,19 @@ require_once(DOKU_INC.'inc/init.php');
//close session
session_write_close();
+//feed disabled?
+if(!actionOK('rss')) {
+ http_status(404);
+ echo '<error>RSS feed is disabled.</error>';
+ exit;
+}
+
// get params
$opt = rss_parseOptions();
// the feed is dynamic - we need a cache for each combo
// (but most people just use the default feed so it's still effective)
-$cache = getCacheName(join('', array_values($opt)).$_SERVER['REMOTE_USER'], '.feed');
-$key = join('', array_values($opt)).$_SERVER['REMOTE_USER'];
+$key = join('', array_values($opt)).'$'.$_SERVER['REMOTE_USER'].'$'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'];
$cache = new cache($key, '.feed');
// prepare cache depends
@@ -121,6 +127,8 @@ function rss_parseOptions() {
'items' => array('int', 'num', $conf['recent']),
// Boolean, only used in rc mode
'show_minor' => array('bool', 'minor', false),
+ // String, only used in list mode
+ 'sort' => array('str', 'sort', 'natural'),
// String, only used in search mode
'search_query' => array('str', 'q', null),
// One of: pages, media, both
@@ -132,15 +140,14 @@ function rss_parseOptions() {
$opt['items'] = max(0, (int) $opt['items']);
$opt['show_minor'] = (bool) $opt['show_minor'];
+ $opt['sort'] = valid_input_set('sort', array('default' => 'natural', 'date'), $opt);
$opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none');
- $type = valid_input_set(
- 'type', array(
- 'rss', 'rss2', 'atom', 'atom1', 'rss1',
- 'default' => $conf['rss_type']
- ),
- $_REQUEST
+ $type = $INPUT->valid(
+ 'type',
+ array( 'rss', 'rss2', 'atom', 'atom1', 'rss1'),
+ $conf['rss_type']
);
switch($type) {
case 'rss':
@@ -293,18 +300,19 @@ function rss_buildItems(&$rss, &$data, $opt) {
case 'diff':
case 'htmldiff':
if($ditem['media']) {
- $revs = getRevisions($id, 0, 1, 8192, true);
+ $medialog = new MediaChangeLog($id);
+ $revs = $medialog->getRevisions(0, 1);
$rev = $revs[0];
$src_r = '';
$src_l = '';
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)), 300)) {
- $more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id));
- $src_r = ml($id, $more);
+ $more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
+ $src_r = ml($id, $more, true, '&amp;', true);
}
if($rev && $size = media_image_preview_size($id, $rev, new JpegMeta(mediaFN($id, $rev)), 300)) {
$more = 'rev='.$rev.'&w='.$size[0].'&h='.$size[1];
- $src_l = ml($id, $more);
+ $src_l = ml($id, $more, true, '&amp;', true);
}
$content = '';
if($src_r) {
@@ -318,7 +326,8 @@ function rss_buildItems(&$rss, &$data, $opt) {
} else {
require_once(DOKU_INC.'inc/DifferenceEngine.php');
- $revs = getRevisions($id, 0, 1);
+ $pagelog = new PageChangeLog($id);
+ $revs = $pagelog->getRevisions(0, 1);
$rev = $revs[0];
if($rev) {
@@ -347,8 +356,8 @@ function rss_buildItems(&$rss, &$data, $opt) {
case 'html':
if($ditem['media']) {
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)))) {
- $more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id));
- $src = ml($id, $more);
+ $more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
+ $src = ml($id, $more, true, '&amp;', true);
$content = '<img src="'.$src.'" alt="'.$id.'" />';
} else {
$content = '';
@@ -378,8 +387,8 @@ function rss_buildItems(&$rss, &$data, $opt) {
default:
if($ditem['media']) {
if($size = media_image_preview_size($id, false, new JpegMeta(mediaFN($id)))) {
- $more = 'w='.$size[0].'&h='.$size[1].'t='.@filemtime(mediaFN($id));
- $src = ml($id, $more);
+ $more = 'w='.$size[0].'&h='.$size[1].'&t='.@filemtime(mediaFN($id));
+ $src = ml($id, $more, true, '&amp;', true);
$content = '<img src="'.$src.'" alt="'.$id.'" />';
} else {
$content = '';
@@ -399,6 +408,7 @@ function rss_buildItems(&$rss, &$data, $opt) {
if($userInfo) {
switch($conf['showuseras']) {
case 'username':
+ case 'username_link':
$item->author = $userInfo['name'];
break;
default:
@@ -473,7 +483,7 @@ function rssListNamespace($opt) {
global $conf;
$ns = ':'.cleanID($opt['namespace']);
- $ns = str_replace(':', '/', $ns);
+ $ns = utf8_encodeFN(str_replace(':', '/', $ns));
$data = array();
$search_opts = array(
@@ -481,7 +491,7 @@ function rssListNamespace($opt) {
'pagesonly' => true,
'listfiles' => true
);
- search($data, $conf['datadir'], 'search_universal', $search_opts, $ns);
+ search($data, $conf['datadir'], 'search_universal', $search_opts, $ns, $lvl = 1, $opt['sort']);
return $data;
}