Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F1821467
feed.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
3 KB
Subscribers
None
feed.php
View Options
<?php
/**
* XML feed export
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Böhler <dev@aboehler.at>
*/
if
(!
defined
(
'DOKU_INC'
))
define
(
'DOKU_INC'
,
realpath
(
dirname
(
__FILE__
)
.
'/../../../'
)
.
'/'
);
if
(!
defined
(
'DOKU_PLUGIN'
))
define
(
'DOKU_PLUGIN'
,
DOKU_INC
.
'lib/plugins/'
);
require_once
(
DOKU_INC
.
'inc/init.php'
);
require_once
(
DOKU_INC
.
'inc/common.php'
);
require_once
(
DOKU_INC
.
'inc/events.php'
);
require_once
(
DOKU_INC
.
'inc/parserutils.php'
);
require_once
(
DOKU_INC
.
'inc/feedcreator.class.php'
);
require_once
(
DOKU_INC
.
'inc/auth.php'
);
require_once
(
DOKU_INC
.
'inc/pageutils.php'
);
require_once
(
DOKU_INC
.
'inc/httputils.php'
);
//close session
session_write_close
();
$id
=
$_REQUEST
[
'id'
];
$type
=
$conf
[
'rss_type'
];
switch
(
$type
)
{
case
'rss'
:
$type
=
'RSS0.91'
;
$mime
=
'text/xml'
;
break
;
case
'rss2'
:
$type
=
'RSS2.0'
;
$mime
=
'text/xml'
;
break
;
case
'atom'
:
$type
=
'ATOM0.3'
;
$mime
=
'application/xml'
;
break
;
case
'atom1'
:
$type
=
'ATOM1.0'
;
$mime
=
'application/atom+xml'
;
break
;
default
:
$type
=
'RSS1.0'
;
$mime
=
'application/xml'
;
}
// 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
(
$id
.
$_SERVER
[
'REMOTE_USER'
],
'.feed'
);
$cmod
=
@
filemtime
(
$cache
);
// 0 if not exists
if
(
$cmod
&&
(@
filemtime
(
DOKU_CONF
.
'local.php'
)
>
$cmod
||
@
filemtime
(
DOKU_CONF
.
'dokuwiki.php'
)
>
$cmod
)
)
{
// ignore cache if feed prefs may have changed
$cmod
=
0
;
}
// check cacheage and deliver if nothing has changed since last
// time or the update interval has not passed, also handles conditional requests
header
(
'Cache-Control: must-revalidate, post-check=0, pre-check=0'
);
header
(
'Pragma: public'
);
header
(
'Content-Type: application/xml; charset=utf-8'
);
if
(
$cmod
&&
(
(
$cmod
+
$conf
[
'rss_update'
]
>
time
())
||
(
(
$cmod
>
@
filemtime
(
$conf
[
'changelog'
]))
)
))
{
http_conditionalRequest
(
$cmod
);
if
(
$conf
[
'allowdebug'
])
header
(
"X-CacheUsed: $cache"
);
print
io_readFile
(
$cache
);
exit
;
}
else
{
http_conditionalRequest
(
time
());
}
// create new feed
$rss
=
new
DokuWikiFeedCreator
();
$rss
->
title
=
p_get_metadata
(
$id
,
'title'
,
METADATA_DONT_RENDER
);
$rss
->
title
.=
' · '
.
$conf
[
'title'
];
$rss
->
link
=
DOKU_URL
;
$rss
->
syndicationURL
=
DOKU_PLUGIN
.
'csstimeline/feed.php'
;
$rss
->
cssStyleSheet
=
DOKU_URL
.
'lib/exe/css.php?s=feed'
;
$author
=
p_get_metadata
(
$id
,
'creator'
,
METADATA_DONT_RENDER
);
$image
=
new
FeedImage
();
$image
->
title
=
$conf
[
'title'
];
$image
->
url
=
DOKU_URL
.
"lib/images/favicon.ico"
;
$image
->
link
=
DOKU_URL
;
$rss
->
image
=
$image
;
$page
=
rawWiki
(
$id
);
// get pages here
$po
=
&
plugin_load
(
'helper'
,
'csstimeline'
);
preg_match
(
'/'
.
str_replace
(
'/'
,
'
\/
'
,
$po
->
specialPattern
).
'/si'
,
$page
,
$matches
);
foreach
(
$matches
as
$match
)
{
$data
=
$po
->
handleMatch
(
$match
);
foreach
(
$data
[
'entries'
]
as
$entry
)
{
$item
=
new
FeedItem
();
$item
->
title
=
htmlspecialchars_decode
(
$entry
[
'title'
]);
if
(
$entry
[
'link'
])
$item
->
link
=
htmlspecialchars_decode
(
$entry
[
'link'
]);
else
$item
->
link
=
wl
(
$id
,
''
,
true
,
'&'
);
$item
->
description
=
hsc
(
strip_tags
(
htmlspecialchars_decode
(
$entry
[
'description'
])));
$item
->
date
=
date
(
'r'
,
strtotime
(
$entry
[
'date'
]));
$item
->
author
=
$author
;
$rss
->
addItem
(
$item
);
}
}
$feed
=
$rss
->
createFeed
(
$type
,
'utf-8'
);
// save cachefile
io_saveFile
(
$cache
,
$feed
);
// finally deliver
print
$feed
;
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Dec 24, 12:33 AM (1 d, 3 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
896904
Default Alt Text
feed.php (3 KB)
Attached To
rTL csstimeline PlugIn
Event Timeline
Log In to Comment