Oh no! Where's the JavaScript?
Your Web browser does not have JavaScript enabled or does not support JavaScript. Please enable JavaScript on your Web browser to properly view this Web site, or upgrade to a Web browser that does support JavaScript.
Sign In
Not a member yet? Click here to register.

Bug in infusions/rss_feeds_panel/feeds/rss_forums.php


Print Track

1 reply

Found the problem!

Changed LEFT JOIN ".DB_POSTS." p ON t.thread_id = p.post_id
to
LEFT JOIN ".DB_POSTS." p ON t.thread_id = p.thread_id

After that at least the correct thread is shown but not the correct post. Fixed that to. Removed the GROUP BY. Now the latest 10 forum posts are shown.

Experienced programmers please take a look if I did it OK.

Edit in the meantime I found more problems. Code below is updated, put comments where I changed things.
Complete code from rss_forums.php
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) PHP-Fusion Inc
| https://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: rss_forums.php
| Author: PHP-Fusion Development Team
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
require_once dirname(__FILE__).'../../../../maincore.php';

if (file_exists(INFUSIONS.'rss_feeds_panel/locale/'.LOCALESET.'rss.php')) {
 $locale = fusion_get_locale('', INFUSIONS.'rss_feeds_panel/locale/'.LOCALESET.'rss.php');
} else {
 $locale = fusion_get_locale('', INFUSIONS.'rss_feeds_panel/locale/English/rss.php');
}

require_once INFUSIONS.'rss_feeds_panel/RSS.php';

    $result = dbquery("SELECT f.forum_id, f.forum_name, f.forum_lastpost, f.forum_postcount,
 f.forum_threadcount, f.forum_lastuser, f.forum_access,
 t.thread_id, t.thread_lastpost, t.thread_lastpostid, t.thread_subject, t.thread_postcount, t.thread_views, t.thread_lastuser, t.thread_poll,
 p.post_message, p.post_id
 FROM ".DB_FORUMS." f
 LEFT JOIN ".DB_THREADS." t ON f.forum_id = t.forum_id
 LEFT JOIN ".DB_POSTS." p ON t.thread_id = p.thread_id
 ".(multilang_table('FO') ? "WHERE f.forum_language='".LANGUAGE."' AND" : "WHERE")." f.forum_access=0 AND t.thread_hidden='0'
 ORDER BY p.post_datestamp DESC LIMIT 0,10
   "); // mod Wanabo, added , p.post_id so the link matches the content and is used in line 46. #post_'.$data['post_id']

 header('Content-Type: application/rss+xml; charset='.$locale['charset']);

// $rss = new RSS('forums', $settings['sitename'].' - '.$locale['rss_forums'].(multilang_table('FO') ? $locale['rss_in'].LANGUAGE : ''));
 $rss = new RSS('forums', $settings['sitename'].' - '.$locale['rss_forums']); // mod Wanabo, shorter title.

 if (dbrows($result) != 0) {
 while ($data = dbarray($result)) {
 $rss->AddItem($data['thread_subject'].' ['.$data['forum_name'].']', $settings['siteurl'].'forum/viewthread.php?forum_id='.$data['forum_id'].'&thread_id='.$data['thread_id'].'&pid='.$data['post_id'].'#post_'.$data['post_id'], nl2br(parseubb(parsesmileys(preg_replace('/\[quote.*\].*\[\/quote\]\s+/si', '', $data['post_message']))))); // mod Wanabo, added , p.post_id so I can get content for #post_'.$data['post_id'] and &pid. With &pid jumping to the correct forum post. Added nl2br, parseubb, parsesmiley and strip quotes for more beautyfull and readable feed contents.
 }

 } else {
 $rss->AddItem($settings['sitename'].' - '.$locale['rss_forums'], $settings['siteurl'], $locale['rss_nodata']);
 }

 $rss->Write();


In RSS.php I added some fixes to validate the feed. Pleas see my comments. Especially <guid> is important if you want to feed your rss to for example social media.
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) PHP-Fusion Inc
| https://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: RSS.php
| Author: RobiNN
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/

// use \PHPFusion\Rewrite\Permalinks;

class RSS {
 private $max_items = 50000;
 private $items_count = 0;
 private $item_count = 0;
 private $buffer_size = 1000;
 private $writer;
 private $title;
 private $feed_url;
 private $description;

 public function __construct($feed_url = '', $title = NULL, $description = NULL) {
 $this->writer = new XMLWriter();
 $this->feed_url = $feed_url;
 $this->title = $title;
 $this->description = $description;

 //if (fusion_get_settings('site_seo') == 1 && !defined('IN_PERMALINK')) {
 // Permalinks::getPermalinkInstance()->handle_url_routing('');
 // }
 }

 private function CreateXML() {
 $this->item_count++;

 $this->writer->openMemory();
 $this->writer->startDocument('1.0', 'UTF-8');
 $this->writer->setIndent(TRUE);
 $this->writer->startElement('rss');
 $this->writer->writeAttribute('version', '2.0');
 $this->writer->writeAttribute('xmlns:content', 'http://purl.org/rss/1.0/modules/content/');
 $this->writer->writeAttribute('xmlns:atom', 'http://www.w3.org/2005/Atom');

 $this->writer->startElement('channel');

 $title = !empty($this->title) ? $this->title : fusion_get_settings('sitename');
 $this->writer->writeElement('title', $title);

 $this->writer->startElement('atom:link');
 $this->writer->writeAttribute('href', fusion_get_settings('siteurl').'infusions/rss_feeds_panel/feeds/rss_'.$this->feed_url.'.php');
 $this->writer->writeAttribute('rel', 'self');
 $this->writer->writeAttribute('type', 'application/rss+xml');
 $this->writer->endElement(); // close atom:link

 $this->writer->writeElement('link', fusion_get_settings('siteurl'));

 $description = !empty($this->description) ? $this->description : fusion_get_settings('description');
 $this->writer->writeElement('description', html_entity_decode($description)); // mod Wanabo, (html_entity_decode) fix for error element should not contain HTML
 }

 private function CloseXML() {
 if ($this->writer !== NULL) {
 $this->writer->endElement(); // close channel
 $this->writer->endElement(); // close rss
 $this->writer->endDocument();
 $this->Flush();
 }
 }

 public function Write() {
 $this->CloseXML();
 }

 private function Flush() {
 echo $this->writer->flush(TRUE);
 }

 public function AddItem($title, $link, $description) {
 if ($this->items_count === 0) {
 $this->CreateXML();
 } else if ($this->items_count % $this->max_items === 0) {
 $this->CloseXML();
 $this->CreateXML();
 }

 if ($this->items_count % $this->buffer_size === 0) {
 $this->Flush();
 }

 $this->writer->startElement('item');

 $this->writer->startElement('title');
 $this->writer->writeCData(html_entity_decode($title));
 $this->writer->endElement(); // close title

 $this->writer->writeElement('link', $link);

 if (!empty($description)) {
 $this->writer->startElement('description');
 $this->writer->writeCData(html_entity_decode($description));
 $this->writer->endElement(); // close description
 }

 $this->writer->writeElement('guid', html_entity_decode($link)); // mod Wanabo, added guid for becoming a valid RSS feed
 $this->writer->endElement(); // close item

 $this->items_count++;
 }
}
author Wanabo
forumSuspected Bugs and Errors - 8
replies2 posts
viewed115 times
activeLast updated on 2 months ago

Hot Questions

Druid
Latest Comment Panel
Druid - 7 posts
Basti
N
Incorrect Validation Code
Nomak - 25 posts
B
Index.php always broken
bobesama - 19 posts
starefossen
PHP 5.3/6 Comparability Problems
starefossen - 8 posts
R
You can view all discussion threads in this forum.
You can start a new discussion thread in this forum.
You cannot reply in this discussion thread.
You cannot start on a poll in this forum.
You cannot upload attachments in this forum.
You can download attachments in this forum.
Users who participated in discussion: Wanabo