mirror of
https://github.com/e107inc/e107.git
synced 2025-08-05 14:17:49 +02:00
Issue #427 - Newsfeed fixes. Admin entries were not updating. BC fixes for cached v1 data.
This commit is contained in:
@@ -47,6 +47,7 @@ if (isset($_POST['createFeed']) || isset($_POST['updateFeed']))
|
|||||||
$feed['newsfeed_updateint'] = intval($_POST['newsfeed_updateint']);
|
$feed['newsfeed_updateint'] = intval($_POST['newsfeed_updateint']);
|
||||||
$feed['newsfeed_data'] = ''; // Start with blank data feed
|
$feed['newsfeed_data'] = ''; // Start with blank data feed
|
||||||
$feed['newsfeed_timestamp'] = 0; // This should force an immediate update
|
$feed['newsfeed_timestamp'] = 0; // This should force an immediate update
|
||||||
|
|
||||||
if (isset($_POST['createFeed']))
|
if (isset($_POST['createFeed']))
|
||||||
{
|
{
|
||||||
if ($sql->insert('newsfeed',$feed))
|
if ($sql->insert('newsfeed',$feed))
|
||||||
@@ -61,7 +62,9 @@ if (isset($_POST['createFeed']) || isset($_POST['updateFeed']))
|
|||||||
}
|
}
|
||||||
elseif (isset($_POST['updateFeed']))
|
elseif (isset($_POST['updateFeed']))
|
||||||
{
|
{
|
||||||
if ($sql->insert('newsfeed',$feed, " WHERE newsfeed_id=".intval($_POST['newsfeed_id'])))
|
$feed['WHERE'] = "newsfeed_id=".intval($_POST['newsfeed_id']);
|
||||||
|
|
||||||
|
if($sql->update('newsfeed',$feed))
|
||||||
{
|
{
|
||||||
$admin_log->logArrayAll('NEWSFD_02', $feed);
|
$admin_log->logArrayAll('NEWSFD_02', $feed);
|
||||||
$mes->addSuccess(LAN_UPDATED);
|
$mes->addSuccess(LAN_UPDATED);
|
||||||
@@ -96,7 +99,7 @@ if($headline_total = $sql->db_Select("newsfeed"))
|
|||||||
$nfArray = $sql->rows();
|
$nfArray = $sql->rows();
|
||||||
|
|
||||||
$text = "
|
$text = "
|
||||||
<table class='table adminlist'>
|
<table class='table table-striped'>
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style='width: 5%; text-align: center;' />
|
<col style='width: 5%; text-align: center;' />
|
||||||
<col style='width: 40%;' />
|
<col style='width: 40%;' />
|
||||||
@@ -104,14 +107,15 @@ if($headline_total = $sql->db_Select("newsfeed"))
|
|||||||
<col style='width: 25%; text-align: center;' />
|
<col style='width: 25%; text-align: center;' />
|
||||||
<col style='width: 10%; text-align: center;' />
|
<col style='width: 10%; text-align: center;' />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<td>".LAN_ID."</td>
|
<th>".LAN_ID."</th>
|
||||||
<td>".LAN_NAME."</td>
|
<th>".LAN_NAME."</th>
|
||||||
<td>".NFLAN_26."</td>
|
<th>".NFLAN_26."</th>
|
||||||
<td>".NFLAN_12."</td>
|
<th>".NFLAN_12."</th>
|
||||||
<td class='center options'>".LAN_OPTIONS."</td>
|
<th class='center options'>".LAN_OPTIONS."</th>
|
||||||
</tr>\n";
|
</tr>
|
||||||
|
</thead>\n";
|
||||||
|
|
||||||
$active = array(NFLAN_13,NFLAN_14,NFLAN_20,NFLAN_21);
|
$active = array(NFLAN_13,NFLAN_14,NFLAN_20,NFLAN_21);
|
||||||
|
|
||||||
@@ -157,7 +161,7 @@ else
|
|||||||
|
|
||||||
$text = "
|
$text = "
|
||||||
<form method='post' action='".e_SELF."'>\n
|
<form method='post' action='".e_SELF."'>\n
|
||||||
<table class='table adminform'>
|
<table class='table'>
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col class='col-label' />
|
<col class='col-label' />
|
||||||
<col style='col-control' />
|
<col style='col-control' />
|
||||||
@@ -169,7 +173,7 @@ else
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>".LAN_URL."</td>
|
<td>".LAN_URL."</td>
|
||||||
<td>".$frm->text('newsfeed_url', $newsfeed_url, '250')."<span class='field-help'>".NFLAN_10."</span></td>
|
<td>".$frm->text('newsfeed_url', $newsfeed_url, '250', 'size=xxlarge')."<span class='field-help'>".NFLAN_10."</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>".NFLAN_11."</td>
|
<td>".NFLAN_11."</td>
|
||||||
|
@@ -63,14 +63,20 @@ class newsfeedClass
|
|||||||
// Ensures the feed list is loaded - uses cache if available
|
// Ensures the feed list is loaded - uses cache if available
|
||||||
function readFeedList($force=FALSE)
|
function readFeedList($force=FALSE)
|
||||||
{
|
{
|
||||||
global $sql;
|
$sql = e107::getDb();
|
||||||
|
|
||||||
if ($this->validFeedList && !$force)
|
if ($this->validFeedList && !$force)
|
||||||
{
|
{
|
||||||
return; // Already got list
|
return; // Already got list
|
||||||
}
|
}
|
||||||
if ($this->useCache)
|
if($this->useCache) // Cache enabled - try to read from that first
|
||||||
{ // Cache enabled - try to read from that first
|
{
|
||||||
global $e107, $eArrayStorage;
|
|
||||||
|
$eArrayStorage = e107::getArrayStorage();
|
||||||
|
|
||||||
|
global $e107;
|
||||||
|
|
||||||
|
|
||||||
if (!$force && $temp = $e107->ecache->retrieve(NEWSFEED_LIST_CACHE_TAG))
|
if (!$force && $temp = $e107->ecache->retrieve(NEWSFEED_LIST_CACHE_TAG))
|
||||||
{
|
{
|
||||||
$this->feedList = $eArrayStorage->ReadArray($temp);
|
$this->feedList = $eArrayStorage->ReadArray($temp);
|
||||||
@@ -79,25 +85,31 @@ class newsfeedClass
|
|||||||
}
|
}
|
||||||
|
|
||||||
$fieldList = '*';
|
$fieldList = '*';
|
||||||
|
|
||||||
if ($this->useCache)
|
if ($this->useCache)
|
||||||
{ // Get all fields except the actual news
|
{ // Get all fields except the actual news
|
||||||
$fieldList = 'newsfeed_id, newsfeed_name, newsfeed_url, newsfeed_timestamp, newsfeed_description, newsfeed_image, newsfeed_active, newsfeed_updateint';
|
$fieldList = 'newsfeed_id, newsfeed_name, newsfeed_url, newsfeed_timestamp, newsfeed_description, newsfeed_image, newsfeed_active, newsfeed_updateint';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($sql -> db_Select("newsfeed", $fieldList, '`newsfeed_active` > 0')) // Read in all the newsfeed info on the first go
|
if ($sql -> db_Select("newsfeed", $fieldList, '`newsfeed_active` > 0')) // Read in all the newsfeed info on the first go
|
||||||
{
|
{
|
||||||
while ($row = $sql->db_Fetch(MYSQL_ASSOC))
|
while ($row = $sql->db_Fetch(MYSQL_ASSOC))
|
||||||
{
|
{
|
||||||
$nfID = $row['newsfeed_id'];
|
$nfID = $row['newsfeed_id'];
|
||||||
|
|
||||||
if (isset($row['newsfeed_data']))
|
if (isset($row['newsfeed_data']))
|
||||||
{
|
{
|
||||||
$this->newsList[$nfID]['newsfeed_data'] = $row['newsfeed_data']; // Pull out the actual news - might as well since we're here
|
$this->newsList[$nfID]['newsfeed_data'] = $row['newsfeed_data']; // Pull out the actual news - might as well since we're here
|
||||||
$this->newsList[$nfID]['newsfeed_timestamp'] = $row['newsfeed_timestamp'];
|
$this->newsList[$nfID]['newsfeed_timestamp'] = $row['newsfeed_timestamp'];
|
||||||
|
|
||||||
unset($row['newsfeed_data']); // Don't keep this in memory twice!
|
unset($row['newsfeed_data']); // Don't keep this in memory twice!
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->feedList[$nfID] = $row; // Put the rest into the feed data
|
$this->feedList[$nfID] = $row; // Put the rest into the feed data
|
||||||
}
|
}
|
||||||
$this->validFeedList = TRUE;
|
$this->validFeedList = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->useCache)
|
if ($this->useCache)
|
||||||
{ // Cache enabled - we need to save some updated info
|
{ // Cache enabled - we need to save some updated info
|
||||||
$temp = $eArrayStorage->WriteArray($this->feedList, FALSE);
|
$temp = $eArrayStorage->WriteArray($this->feedList, FALSE);
|
||||||
@@ -109,7 +121,11 @@ class newsfeedClass
|
|||||||
// Returns the info for a single feed - from cache or memory as appropriate. If time expired, updates the feed.
|
// Returns the info for a single feed - from cache or memory as appropriate. If time expired, updates the feed.
|
||||||
function getFeed($feedID, $force = FALSE)
|
function getFeed($feedID, $force = FALSE)
|
||||||
{
|
{
|
||||||
global $tp, $e107, $sql, $eArrayStorage, $admin_log;
|
global $e107, $admin_log;
|
||||||
|
|
||||||
|
$tp = e107::getParser();
|
||||||
|
$sql = e107::getDb();
|
||||||
|
$eArrayStorage = e107::getArrayStorage();
|
||||||
|
|
||||||
$this->readFeedList(); // Make sure we've got the feed data.
|
$this->readFeedList(); // Make sure we've got the feed data.
|
||||||
|
|
||||||
@@ -118,21 +134,35 @@ class newsfeedClass
|
|||||||
if (NEWSFEED_DEBUG) echo "Invalid feed number: {$feedID}<br />";
|
if (NEWSFEED_DEBUG) echo "Invalid feed number: {$feedID}<br />";
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(strpos($this->newsList[$feedID]['newsfeed_data'],'MagpieRSS')) //BC Fix to update newsfeed_data from v1 to v2 spec.
|
||||||
|
{
|
||||||
|
$force = true;
|
||||||
|
}
|
||||||
|
|
||||||
if ($force || !isset($this->newsList[$feedID]['newsfeed_data']) || !$this->newsList[$feedID]['newsfeed_data'])
|
if ($force || !isset($this->newsList[$feedID]['newsfeed_data']) || !$this->newsList[$feedID]['newsfeed_data'])
|
||||||
{ // No data already in memory
|
{ // No data already in memory
|
||||||
if ($force || !($this->newsList[$feedID]['newsfeed_data'] = $e107->ecache->retrieve(NEWSFEED_NEWS_CACHE_TAG.$feedID, $this->feedList[$feedID]['newsfeed_updateint']/60)))
|
if ($force || !($this->newsList[$feedID]['newsfeed_data'] = $e107->ecache->retrieve(NEWSFEED_NEWS_CACHE_TAG.$feedID, $this->feedList[$feedID]['newsfeed_updateint']/60)))
|
||||||
{ // Need to re-read from source - either no cached data yet, or cache expired
|
{ // Need to re-read from source - either no cached data yet, or cache expired
|
||||||
if (NEWSFEED_DEBUG) $admin_log->e_log_event(10,debug_backtrace(),"DEBUG","Newsfeed update","Refresh item: ".$feedID,FALSE,LOG_TO_ROLLING);
|
|
||||||
|
if (NEWSFEED_DEBUG)
|
||||||
|
{
|
||||||
|
$admin_log->e_log_event(10,debug_backtrace(),"DEBUG","Newsfeed update","Refresh item: ".$feedID,FALSE,LOG_TO_ROLLING);
|
||||||
|
}
|
||||||
|
|
||||||
require_once(e_HANDLER.'xml_class.php');
|
require_once(e_HANDLER.'xml_class.php');
|
||||||
$xml = new xmlClass;
|
$xml = new xmlClass;
|
||||||
require_once(e_HANDLER.'magpie_rss.php');
|
require_once(e_HANDLER.'magpie_rss.php');
|
||||||
|
|
||||||
$dbData = array(); // In case we need to update DB
|
$dbData = array(); // In case we need to update DB
|
||||||
if($rawData = $xml->getRemoteFile($this->feedList[$feedID]['newsfeed_url']))
|
|
||||||
{ // Need to update feed
|
if($rawData = $xml->getRemoteFile($this->feedList[$feedID]['newsfeed_url'])) // Need to update feed
|
||||||
|
{
|
||||||
$rss = new MagpieRSS( $rawData );
|
$rss = new MagpieRSS( $rawData );
|
||||||
list($newsfeed_image, $newsfeed_showmenu, $newsfeed_showmain) = explode("::", $this->feedList[$feedID]['newsfeed_image']);
|
list($newsfeed_image, $newsfeed_showmenu, $newsfeed_showmain) = explode("::", $this->feedList[$feedID]['newsfeed_image']);
|
||||||
|
|
||||||
$temp['channel'] = $rss->channel;
|
$temp['channel'] = $rss->channel;
|
||||||
|
|
||||||
if (($newsfeed_showmenu == 0) || ($newsfeed_showmain == 0))
|
if (($newsfeed_showmenu == 0) || ($newsfeed_showmain == 0))
|
||||||
{
|
{
|
||||||
$temp['items'] = $rss->items; // Unlimited items
|
$temp['items'] = $rss->items; // Unlimited items
|
||||||
@@ -143,15 +173,17 @@ class newsfeedClass
|
|||||||
}
|
}
|
||||||
|
|
||||||
$newsfeed_des = FALSE;
|
$newsfeed_des = FALSE;
|
||||||
|
|
||||||
if($this->feedList[$feedID]['newsfeed_description'] == 'default')
|
if($this->feedList[$feedID]['newsfeed_description'] == 'default')
|
||||||
{
|
{
|
||||||
$temp['newsfeed_description'] = 'default'; // This prevents db writes if no better data found
|
$temp['newsfeed_description'] = 'default'; // This prevents db writes if no better data found
|
||||||
|
|
||||||
if($rss->channel['description'])
|
if($rss->channel['description'])
|
||||||
{
|
{
|
||||||
$newsfeed_des = $tp -> toDB($rss->channel['description']);
|
$newsfeed_des = $tp -> toDB($rss->channel['description']);
|
||||||
$temp['newsfeed_description'] = $newsfeed_des;
|
$temp['newsfeed_description'] = $newsfeed_des;
|
||||||
}
|
}
|
||||||
else if($rss->channel['tagline'])
|
elseif($rss->channel['tagline'])
|
||||||
{
|
{
|
||||||
$newsfeed_des = $tp -> toDB($rss -> channel['tagline']);
|
$newsfeed_des = $tp -> toDB($rss -> channel['tagline']);
|
||||||
$temp['newsfeed_description'] = $newsfeed_des;
|
$temp['newsfeed_description'] = $newsfeed_des;
|
||||||
@@ -167,6 +199,7 @@ class newsfeedClass
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($newsfeed_image == 'default')
|
if ($newsfeed_image == 'default')
|
||||||
{
|
{
|
||||||
$temp['newsfeed_image_link'] = "<a href='".$rss->image['link']."' rel='external'><img src='".$rss->image['url']."' alt='".$rss->image['title']."' style='vertical-align: middle;' /></a>";
|
$temp['newsfeed_image_link'] = "<a href='".$rss->image['link']."' rel='external'><img src='".$rss->image['url']."' alt='".$rss->image['title']."' style='vertical-align: middle;' /></a>";
|
||||||
@@ -175,6 +208,7 @@ class newsfeedClass
|
|||||||
{
|
{
|
||||||
$temp['newsfeed_image_link'] = "<img src='".$this->feedList[$feedID]['newsfeed_image']."' alt='' />";
|
$temp['newsfeed_image_link'] = "<img src='".$this->feedList[$feedID]['newsfeed_image']."' alt='' />";
|
||||||
}
|
}
|
||||||
|
|
||||||
$serializedArray = $eArrayStorage->WriteArray($temp, FALSE);
|
$serializedArray = $eArrayStorage->WriteArray($temp, FALSE);
|
||||||
|
|
||||||
$now = time();
|
$now = time();
|
||||||
@@ -190,8 +224,9 @@ class newsfeedClass
|
|||||||
$dbData['newsfeed_data'] =addslashes($serializedArray);
|
$dbData['newsfeed_data'] =addslashes($serializedArray);
|
||||||
$dbData['newsfeed_timestamp'] = $now;
|
$dbData['newsfeed_timestamp'] = $now;
|
||||||
}
|
}
|
||||||
if (count($dbData))
|
|
||||||
{ // Only write the feed data to DB if not using cache. Write description if changed
|
if (count($dbData)) // Only write the feed data to DB if not using cache. Write description if changed
|
||||||
|
{
|
||||||
if(FALSE === $sql->db_UpdateArray('newsfeed', $dbData, " WHERE newsfeed_id=".$feedID))
|
if(FALSE === $sql->db_UpdateArray('newsfeed', $dbData, " WHERE newsfeed_id=".$feedID))
|
||||||
{
|
{
|
||||||
if (NEWSFEED_DEBUG) echo NFLAN_48."<br /><br />".var_dump($dbData);
|
if (NEWSFEED_DEBUG) echo NFLAN_48."<br /><br />".var_dump($dbData);
|
||||||
@@ -206,15 +241,21 @@ class newsfeedClass
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $eArrayStorage->ReadArray($this->newsList[$feedID]['newsfeed_data']);
|
return $eArrayStorage->ReadArray($this->newsList[$feedID]['newsfeed_data']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Return text for the required news feeds (loads info as necessary)
|
// Return text for the required news feeds (loads info as necessary)
|
||||||
// Uses different templates for main and menu areas
|
// Uses different templates for main and menu areas
|
||||||
function newsfeedInfo($which, $where = 'main')
|
function newsfeedInfo($which, $where = 'main')
|
||||||
{
|
{
|
||||||
global $tp, $sql;
|
|
||||||
|
$tp = e107::getParser();
|
||||||
|
$sql = e107::getDb();
|
||||||
|
|
||||||
global $NEWSFEED_MAIN_START, $NEWSFEED_MAIN, $NEWSFEED_MAIN_END;
|
global $NEWSFEED_MAIN_START, $NEWSFEED_MAIN, $NEWSFEED_MAIN_END;
|
||||||
global $NEWSFEED_MENU_START, $NEWSFEED_MENU, $NEWSFEED_MENU_END;
|
global $NEWSFEED_MENU_START, $NEWSFEED_MENU, $NEWSFEED_MENU_END;
|
||||||
|
|
||||||
@@ -247,6 +288,7 @@ class newsfeedClass
|
|||||||
if (($rss = $this->getFeed($nfID))) // Call ensures that feed is updated if necessary
|
if (($rss = $this->getFeed($nfID))) // Call ensures that feed is updated if necessary
|
||||||
{
|
{
|
||||||
list($newsfeed_image, $newsfeed_showmenu, $newsfeed_showmain) = explode("::", $feed['newsfeed_image']);
|
list($newsfeed_image, $newsfeed_showmenu, $newsfeed_showmain) = explode("::", $feed['newsfeed_image']);
|
||||||
|
|
||||||
$numtoshow = intval($where == 'main' ? $newsfeed_showmain : $newsfeed_showmenu);
|
$numtoshow = intval($where == 'main' ? $newsfeed_showmain : $newsfeed_showmenu);
|
||||||
$numtoshow = ($numtoshow > 0 ? $numtoshow : 999);
|
$numtoshow = ($numtoshow > 0 ? $numtoshow : 999);
|
||||||
|
|
||||||
@@ -269,12 +311,13 @@ class newsfeedClass
|
|||||||
}
|
}
|
||||||
|
|
||||||
$FEEDLASTBUILDDATE = NFLAN_33.$pubbed;
|
$FEEDLASTBUILDDATE = NFLAN_33.$pubbed;
|
||||||
$FEEDCOPYRIGHT = $tp -> toHTML($rss['channel']['copyright'], FALSE);
|
$FEEDCOPYRIGHT = $tp -> toHTML(vartrue($rss['channel']['copyright']), FALSE);
|
||||||
$FEEDTITLE = "<a href='".$rss['channel']['link']."' rel='external'>".$rss['channel']['title']."</a>";
|
$FEEDTITLE = "<a href='".$rss['channel']['link']."' rel='external'>".vartrue($rss['channel']['title'])."</a>";
|
||||||
$FEEDLINK = $rss['channel']['link'];
|
$FEEDLINK = $rss['channel']['link'];
|
||||||
if($newsfeed_active == 2 or $newsfeed_active == 3)
|
|
||||||
|
if($feed['newsfeed_active'] == 2 or $feed['newsfeed_active'] == 3)
|
||||||
{
|
{
|
||||||
$LINKTOMAIN = "<a href='".e_PLUGIN."newsfeed/newsfeed.php?show.{$newsfeed_id}'>".NFLAN_39."</a>";
|
$LINKTOMAIN = "<a href='".e_PLUGIN."newsfeed/newsfeed.php?show.".$feed['newsfeed_id']."'>".NFLAN_39."</a>";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -288,10 +331,12 @@ class newsfeedClass
|
|||||||
while($i < $numtoshow)
|
while($i < $numtoshow)
|
||||||
{
|
{
|
||||||
$item = $rss['items'][$i];
|
$item = $rss['items'][$i];
|
||||||
|
|
||||||
$FEEDITEMLINK = "<a href='".$item['link']."' rel='external'>".$tp -> toHTML($item['title'], FALSE)."</a>\n";
|
$FEEDITEMLINK = "<a href='".$item['link']."' rel='external'>".$tp -> toHTML($item['title'], FALSE)."</a>\n";
|
||||||
$FEEDITEMLINK = str_replace('&', '&', $FEEDITEMLINK);
|
$FEEDITEMLINK = str_replace('&', '&', $FEEDITEMLINK);
|
||||||
$feeditemtext = preg_replace("#\[[a-z0-9=]+\]|\[\/[a-z]+\]|\{[A-Z_]+\}#si", "", strip_tags($item['description']));
|
$feeditemtext = preg_replace("#\[[a-z0-9=]+\]|\[\/[a-z]+\]|\{[A-Z_]+\}#si", "", strip_tags($item['description']));
|
||||||
$FEEDITEMCREATOR = $tp -> toHTML($item['author'], FALSE);
|
$FEEDITEMCREATOR = $tp -> toHTML(vartrue($item['author']), FALSE);
|
||||||
|
|
||||||
if ($where == 'main')
|
if ($where == 'main')
|
||||||
{
|
{
|
||||||
if($NEWSFEED_COLLAPSE)
|
if($NEWSFEED_COLLAPSE)
|
||||||
@@ -346,7 +391,7 @@ class newsfeedClass
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$ret['title'] = $newsfeed_name." ".$NEWSFEED_MAIN_CAPTION;
|
$ret['title'] = $feed['newsfeed_name']." ".$NEWSFEED_MAIN_CAPTION;
|
||||||
}
|
}
|
||||||
$ret['text'] = $text;
|
$ret['text'] = $text;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user