mirror of
https://github.com/e107inc/e107.git
synced 2025-01-17 20:58:30 +01:00
611 lines
15 KiB
PHP
611 lines
15 KiB
PHP
<?php
|
|
|
|
if(!defined('e107_INIT'))
|
|
{
|
|
exit;
|
|
}
|
|
/* NOTES
|
|
|
|
USERLIST = 253,254,250,251,0
|
|
|
|
output of forumthreads feed in v1.0.4
|
|
====
|
|
thread_thread (content of first post in topic)
|
|
thread_id
|
|
thread_name
|
|
thread_datestamp
|
|
thread_parent (is the id of the thread that the reply belongs to. For forumthreads, the value is 0.)
|
|
thread_user (creator of topic in 'userid.username' format)
|
|
thread_views
|
|
thread_lastpost (datestamp of last post in topic)
|
|
thread_lastuser (user id of user who posted last in the topic. In v1: 'userid.username')
|
|
thread_total_replies
|
|
user_name (creator of topic in v1 in 'username' format)
|
|
user_email (email address of user from user table)
|
|
|
|
output of forumposts in v1.0.4
|
|
=====
|
|
parent_name (thread name)
|
|
thread_thread = (content of post, can be reply)
|
|
thread_id
|
|
thread_name (empty for reply)
|
|
thread_datestamp
|
|
thread parent (value is 0 if it is the first post in a topic, contains the topic number if it is a reply)
|
|
thread_user (creator of topic in 'userid.username' format)
|
|
thread_views
|
|
thread_lastuser (user id of user who posted last in the topic. In v1: 'userid.username'. Empty for replies)
|
|
thread_total_replies
|
|
forum_id
|
|
forum_name
|
|
forum_class
|
|
user_name (creator of topic in v1 in 'username' format)
|
|
user_email (email address of user from user table)
|
|
*/
|
|
|
|
// v2.x Standard
|
|
class forum_rss // plugin-folder + '_rss'
|
|
{
|
|
private $rssQuery;
|
|
|
|
/**
|
|
* Admin RSS Configuration
|
|
*/
|
|
function config()
|
|
{
|
|
$config = array();
|
|
|
|
|
|
$config[] = array(
|
|
'name' => "Forum / All forum topics",
|
|
'url' => '6',
|
|
'topic_id' => '',
|
|
'path' => 'forum|threads',
|
|
'text' => 'This feed lists all the forum topics across the whole forum.',
|
|
'class' => '1',
|
|
'limit' => '9',
|
|
);
|
|
|
|
//forum threads (new url)
|
|
$config[] = array(
|
|
'name' => "Forum / All forum topics",
|
|
'url' => 'forumthreads',
|
|
'topic_id' => '',
|
|
// 'path' => 'forum|threads',
|
|
'text' => 'This feeds lists all the forum topics across the whole forum.',
|
|
'class' => '0',
|
|
'limit' => '9',
|
|
);
|
|
|
|
//forum posts (old url)
|
|
$config[] = array(
|
|
'name' => "Forum / All forum posts",
|
|
'url' => '7',
|
|
'topic_id' => '',
|
|
// 'path' => 'forum|posts',
|
|
'text' => 'This feed lists all the forum posts.',
|
|
'class' => '1',
|
|
'limit' => '9',
|
|
);
|
|
|
|
//forum posts (new url)
|
|
$config[] = array(
|
|
'name' => "Forum / All forum posts",
|
|
'url' => 'forumposts',
|
|
'topic_id' => '',
|
|
// 'path' => 'forum|posts',
|
|
'text' => 'This feed lists all the forum posts.',
|
|
'class' => '0',
|
|
'limit' => '9',
|
|
);
|
|
|
|
//forum topic (old url)
|
|
$config[] = array(
|
|
'name' => "Forum / All posts of a specific forum topic",
|
|
'url' => '8',
|
|
'topic_id' => '*',
|
|
// 'path' => 'forum|topic',
|
|
'text' => 'This feed lists all posts in a specific forum topic.',
|
|
'class' => '1',
|
|
'limit' => '9',
|
|
);
|
|
|
|
//forum topic (new url)
|
|
$config[] = array(
|
|
'name' => "Forum / All posts of a specific forum topic",
|
|
'url' => 'forumtopic',
|
|
'topic_id' => '*',
|
|
// 'path' => 'forum|topic',
|
|
'text' => 'This feed lists all posts in a specific forum topic.',
|
|
'class' => '0',
|
|
'limit' => '9',
|
|
);
|
|
|
|
//forum name (old url)
|
|
$config[] = array(
|
|
'name' => "Forum / All forums",
|
|
'url' => '11',
|
|
'topic_id' => '*',
|
|
// 'path' => 'forum|name',
|
|
'text' => 'This feed lists all the topics in a specific forum.',
|
|
'class' => '1',
|
|
'limit' => '9',
|
|
);
|
|
|
|
//forum name (new url)
|
|
$config[] = array(
|
|
'name' => "Forum / All forums",
|
|
'url' => 'forumname',
|
|
'topic_id' => '*',
|
|
// 'path' => 'forum|name',
|
|
'text' => 'This feed lists all the topics in a specific forum.',
|
|
'class' => '0',
|
|
'limit' => '9',
|
|
);
|
|
|
|
return $config;
|
|
}
|
|
|
|
|
|
/**
|
|
* Compile RSS Data
|
|
* @param $parms array url, limit, id
|
|
* @return array|bool
|
|
*/
|
|
function data($parms=null)
|
|
{
|
|
$sqlrss = e107::getDb();
|
|
|
|
$rss = array();
|
|
$limit = $parms['limit'];
|
|
$topicid = $parms['id'];
|
|
|
|
switch($parms['url'])
|
|
{
|
|
// List of all forum topics, including content of first post. Does not list replies.
|
|
case 'forumthreads':
|
|
case 6:
|
|
$rssQuery =
|
|
"SELECT
|
|
t.thread_id,
|
|
t.thread_name,
|
|
t.thread_datestamp,
|
|
t.thread_user,
|
|
t.thread_user_anon,
|
|
p.post_entry,
|
|
p.post_datestamp,
|
|
p.post_user_anon,
|
|
p.post_user,
|
|
u.user_name,
|
|
u.user_email,
|
|
f.forum_sef
|
|
FROM
|
|
#forum_thread AS t
|
|
LEFT JOIN
|
|
#forum_post as p
|
|
ON p.post_thread = t.thread_id
|
|
AND p.post_id in
|
|
(
|
|
SELECT MIN(post_id)
|
|
FROM #forum_post
|
|
GROUP BY post_thread
|
|
)
|
|
LEFT JOIN
|
|
#user AS u
|
|
ON t.thread_user = u.user_id
|
|
LEFT JOIN
|
|
#forum AS f
|
|
ON f.forum_id = t.thread_forum_id
|
|
WHERE
|
|
f.forum_class IN (".USERCLASS_LIST.")
|
|
ORDER BY
|
|
t.thread_datestamp DESC
|
|
LIMIT 0," . $limit;
|
|
|
|
$sqlrss->gen($rssQuery);
|
|
$tmp = $sqlrss->db_getList();
|
|
|
|
$rss = array();
|
|
$i = 0;
|
|
|
|
foreach($tmp as $value)
|
|
{
|
|
// Generate SEF topic link
|
|
$topic_link =
|
|
e107::url(
|
|
'forum',
|
|
'topic',
|
|
array
|
|
(
|
|
'forum_sef' => $value['forum_sef'],
|
|
'thread_id' => $value['thread_id'],
|
|
'thread_sef' => eHelper::title2sef($value['thread_name']),
|
|
),
|
|
array('mode' => 'full')
|
|
);
|
|
|
|
|
|
// Check if post was done anonymously
|
|
if($value['thread_user_anon']) // Anonymous user entered specific name
|
|
{
|
|
$rss[$i]['author'] = $value['thread_user_anon'];
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
elseif(empty($value['post_user_anon']) && $value['post_user'] == 0) // No specific username entered, use LAN_ANONYMOUS
|
|
{
|
|
$rss[$i]['author'] = LAN_ANONYMOUS;
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
else // Post by a user who was logged in
|
|
{
|
|
$rss[$i]['author'] = $value['user_name'];
|
|
$rss[$i]['author_email'] = $value['user_email']; // must include an email address to be valid.
|
|
}
|
|
|
|
|
|
$rss[$i]['title'] = $value['thread_name'];
|
|
//$rss[$i]['link'] = SITEURLBASE . e_PLUGIN_ABS . "forum/forum_viewtopic.php?" . $value['thread_id'];
|
|
$rss[$i]['link'] = $topic_link;
|
|
$rss[$i]['description'] = $value['post_entry'];
|
|
$rss[$i]['datestamp'] = $value['thread_datestamp'];
|
|
|
|
$i++;
|
|
}
|
|
break;
|
|
|
|
// List of all forum posts (first post and replies) across all forums
|
|
case 'forumposts':
|
|
case 7:
|
|
$rssQuery = "
|
|
SELECT
|
|
t.thread_id,
|
|
t.thread_name,
|
|
t.thread_datestamp,
|
|
t.thread_user,
|
|
f.forum_id,
|
|
f.forum_name,
|
|
f.forum_class,
|
|
f.forum_sef,
|
|
p.post_entry,
|
|
p.post_datestamp,
|
|
p.post_user,
|
|
p.post_user_anon,
|
|
u.user_name,
|
|
u.user_email
|
|
FROM
|
|
#forum_thread AS t
|
|
LEFT JOIN
|
|
#forum_post as p
|
|
ON p.post_thread = t.thread_id
|
|
LEFT JOIN
|
|
#user AS u
|
|
ON p.post_user = u.user_id
|
|
LEFT JOIN
|
|
#forum AS f
|
|
ON f.forum_id = t.thread_forum_id
|
|
WHERE
|
|
f.forum_class IN(".USERCLASS_LIST.")
|
|
ORDER BY
|
|
t.thread_datestamp
|
|
DESC
|
|
LIMIT 0," . $limit;
|
|
|
|
$sqlrss->gen($rssQuery);
|
|
$tmp = $sqlrss->db_getList();
|
|
|
|
$rss = array();
|
|
$i = 0;
|
|
|
|
foreach($tmp as $value)
|
|
{
|
|
// Generate SEF link
|
|
$topic_link =
|
|
e107::url(
|
|
'forum',
|
|
'topic',
|
|
array
|
|
(
|
|
'forum_sef' => $value['forum_sef'],
|
|
'thread_id' => $value['thread_id'],
|
|
'thread_sef' => eHelper::title2sef($value['thread_name']),
|
|
),
|
|
array('mode' => 'full')
|
|
);
|
|
|
|
// Check if post was done anonymously
|
|
if($value['post_user_anon']) // Anonymous user entered specific name
|
|
{
|
|
$rss[$i]['author'] = $value['post_user_anon'];
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
elseif(empty($value['post_user_anon']) && $value['post_user'] == 0) // No specific username entered, use LAN_ANONYMOUS
|
|
{
|
|
$rss[$i]['author'] = LAN_ANONYMOUS;
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
else // Post by a user who was logged in
|
|
{
|
|
$rss[$i]['author'] = $value['user_name'];
|
|
$rss[$i]['author_email'] = $value['user_email']; // must include an email address to be valid.
|
|
}
|
|
|
|
|
|
// FIXME - reply or topic start? If reply add "RE:" to title
|
|
/*if($value['parent_name'])
|
|
{
|
|
$rss[$i]['title'] = "Re: " . $value['parent_name'];
|
|
$rss[$i]['link'] = SITEURLBASE . e_PLUGIN_ABS . "forum/forum_viewtopic.php?" . $value['thread_parent'];
|
|
}
|
|
else
|
|
{
|
|
$rss[$i]['title'] = $value['thread_name'];
|
|
$rss[$i]['link'] = SITEURLBASE . e_PLUGIN_ABS . "forum/forum_viewtopic.php?" . $value['thread_id'];
|
|
}*/
|
|
|
|
$rss[$i]['title'] = $value['thread_name'];
|
|
$rss[$i]['link'] = $topic_link;
|
|
$rss[$i]['description'] = $value['post_entry'];
|
|
$rss[$i]['datestamp'] = $value['post_datestamp'];
|
|
|
|
$i++;
|
|
}
|
|
break;
|
|
|
|
// Lists all posts in a specific forum topic
|
|
case 'forumtopic':
|
|
case 8:
|
|
if(!$topicid)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// Select first post (initial post in topic)
|
|
$this->rssQuery = "
|
|
SELECT
|
|
t.thread_id,
|
|
t.thread_name,
|
|
t.thread_datestamp,
|
|
t.thread_user,
|
|
p.post_entry,
|
|
p.post_datestamp,
|
|
u.user_name,
|
|
u.user_email,
|
|
f.forum_sef
|
|
FROM
|
|
#forum_thread AS t
|
|
LEFT JOIN
|
|
#forum_post as p
|
|
ON p.post_thread = t.thread_id
|
|
AND p.post_id IN
|
|
(
|
|
SELECT MIN(post_id)
|
|
FROM #forum_post
|
|
GROUP BY post_thread
|
|
)
|
|
LEFT JOIN
|
|
#user AS u
|
|
ON t.thread_user = u.user_id
|
|
LEFT JOIN
|
|
#forum AS f
|
|
ON f.forum_id = t.thread_forum_id
|
|
WHERE
|
|
f.forum_class IN (".USERCLASS_LIST.")
|
|
AND
|
|
p.post_thread = ".intval($topicid)."
|
|
LIMIT 0,1";
|
|
|
|
|
|
$sqlrss->gen($this->rssQuery);
|
|
$topic = $sqlrss->fetch();
|
|
|
|
// Replies (exclude first post)
|
|
$this->rssQuery = "
|
|
SELECT
|
|
t.thread_id,
|
|
t.thread_name,
|
|
t.thread_datestamp,
|
|
t.thread_user,
|
|
t.thread_user_anon,
|
|
p.post_entry,
|
|
p.post_datestamp,
|
|
p.post_user,
|
|
p.post_user_anon,
|
|
u.user_name,
|
|
u.user_email,
|
|
f.forum_sef
|
|
FROM
|
|
#forum_thread AS t
|
|
LEFT JOIN
|
|
#forum_post as p
|
|
ON p.post_thread = t.thread_id
|
|
AND p.post_id NOT IN
|
|
(
|
|
SELECT MIN(post_id)
|
|
FROM #forum_post
|
|
GROUP BY post_thread
|
|
)
|
|
LEFT JOIN
|
|
#user AS u
|
|
ON t.thread_user = u.user_id
|
|
LEFT JOIN
|
|
#forum AS f
|
|
ON f.forum_id = t.thread_forum_id
|
|
WHERE
|
|
f.forum_class IN (".USERCLASS_LIST.")
|
|
AND
|
|
p.post_thread = ".intval($topicid);
|
|
|
|
$sqlrss->gen($this->rssQuery);
|
|
$replies = $sqlrss->db_getList();
|
|
|
|
$rss = array();
|
|
$i = 0;
|
|
|
|
$topic_link =
|
|
e107::url(
|
|
'forum',
|
|
'topic',
|
|
array
|
|
(
|
|
'forum_sef' => $topic['forum_sef'],
|
|
'thread_id' => $topic['thread_id'],
|
|
'thread_sef' => eHelper::title2sef($topic['thread_name']),
|
|
),
|
|
array('mode' => 'full')
|
|
);
|
|
|
|
|
|
// Check if post was done anonymously
|
|
if($topic['thread_user_anon']) // Anonymous user entered specific name
|
|
{
|
|
$rss[$i]['author'] = $topic['thread_user_anon'];
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
elseif(empty($topic['thread_user_anon']) && $topic['thread_user'] == 0) // No specific username entered, use LAN_ANONYMOUS
|
|
{
|
|
$rss[$i]['author'] = LAN_ANONYMOUS;
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
else // Post by a user who was logged in
|
|
{
|
|
$rss[$i]['author'] = $topic['user_name'];
|
|
$rss[$i]['author_email'] = $topic['user_email']; // must include an email address to be valid.
|
|
}
|
|
|
|
$rss[$i]['title'] = $topic['thread_name'];
|
|
$rss[$i]['link'] = $topic_link;
|
|
$rss[$i]['description'] = $topic['post_entry'];
|
|
$rss[$i]['datestamp'] = $topic['thread_datestamp'];
|
|
$i++;
|
|
|
|
foreach($replies as $value)
|
|
{
|
|
|
|
// Check if post was done anonymously
|
|
if($value['post_user_anon']) // Anonymous user entered specific name
|
|
{
|
|
$rss[$i]['author'] = $value['post_user_anon'];
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
elseif(empty($value['post_user_anon']) && $value['post_user'] == 0) // No specific username entered, use LAN_ANONYMOUS
|
|
{
|
|
$rss[$i]['author'] = LAN_ANONYMOUS;
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
else // Post by a user who was logged in
|
|
{
|
|
$rss[$i]['author'] = $value['user_name'];
|
|
$rss[$i]['author_email'] = $value['user_email']; // must include an email address to be valid.
|
|
}
|
|
|
|
$rss[$i]['title'] = "Re: " . $topic['thread_name'];
|
|
$rss[$i]['link'] = $topic_link;
|
|
$rss[$i]['description'] = $value['post_entry'];
|
|
$rss[$i]['datestamp'] = $value['post_datestamp'];
|
|
$i++;
|
|
}
|
|
|
|
break;
|
|
|
|
// Lists all the topics in a specific forum
|
|
case 'forumname':
|
|
case 11:
|
|
if(!$topicid)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$this->rssQuery = "
|
|
SELECT
|
|
f.forum_id,
|
|
f.forum_name,
|
|
f.forum_class,
|
|
f.forum_sef,
|
|
t.thread_id,
|
|
t.thread_name,
|
|
t.thread_datestamp,
|
|
t.thread_user,
|
|
t.thread_user_anon,
|
|
p.post_entry,
|
|
u.user_name,
|
|
u.user_email
|
|
FROM
|
|
#forum_thread as t
|
|
LEFT JOIN
|
|
#user AS u
|
|
ON t.thread_user = u.user_id
|
|
LEFT JOIN
|
|
#forum AS f
|
|
ON f.forum_id = t.thread_forum_id
|
|
LEFT JOIN
|
|
#forum_post as p
|
|
ON p.post_thread = t.thread_id
|
|
AND p.post_id IN
|
|
(
|
|
SELECT MIN(post_id)
|
|
FROM #forum_post
|
|
GROUP BY post_thread
|
|
)
|
|
WHERE
|
|
t.thread_forum_id = ".intval($topicid)."
|
|
AND
|
|
f.forum_class IN (".USERCLASS_LIST.")
|
|
ORDER BY
|
|
t.thread_datestamp
|
|
DESC
|
|
LIMIT 0," . $limit;
|
|
|
|
$sqlrss->gen($this->rssQuery);
|
|
$tmp = $sqlrss->db_getList();
|
|
|
|
// $this->contentType = $this->contentType . " : " . $tmp[1]['forum_name'];
|
|
|
|
$rss = array();
|
|
$i = 0;
|
|
|
|
foreach($tmp as $value)
|
|
{
|
|
|
|
$topic_link =
|
|
e107::url(
|
|
'forum',
|
|
'topic',
|
|
array
|
|
(
|
|
'forum_sef' => $value['forum_sef'],
|
|
'thread_id' => $value['thread_id'],
|
|
'thread_sef' => eHelper::title2sef($value['thread_name']),
|
|
),
|
|
array('mode' => 'full')
|
|
);
|
|
|
|
// Check if post was done anonymously
|
|
if($value['thread_user_anon']) // Anonymous user entered specific name
|
|
{
|
|
$rss[$i]['author'] = $value['thread_user_anon'];
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
elseif(empty($value['thread_user_anon']) && $value['thread_user'] == 0) // No specific username entered, use LAN_ANONYMOUS
|
|
{
|
|
$rss[$i]['author'] = LAN_ANONYMOUS;
|
|
$rss[$i]['author_email'] = "anonymous@anonymous.com";
|
|
}
|
|
else // Post by a user who was logged in
|
|
{
|
|
$rss[$i]['author'] = $value['user_name'];
|
|
$rss[$i]['author_email'] = $value['user_email']; // must include an email address to be valid.
|
|
}
|
|
|
|
$rss[$i]['title'] = $value['thread_name'];
|
|
$rss[$i]['link'] = $topic_link;
|
|
$rss[$i]['description'] = $value['post_entry'];
|
|
$rss[$i]['datestamp'] = $value['thread_datestamp'];
|
|
|
|
$i++;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return $rss;
|
|
|
|
}
|
|
} |