Esempio n. 1
0
 function getFeed($feedID, $force = FALSE)
 {
     global $tp, $e107, $sql, $eArrayStorage, $admin_log;
     $this->readFeedList();
     // Make sure we've got the feed data.
     if (!isset($this->feedList[$feedID])) {
         if (NEWSFEED_DEBUG) {
             echo "Invalid feed number: {$feedID}<br />";
         }
         return FALSE;
     }
     if ($force || !isset($this->newsList[$feedID]['newsfeed_data']) || !$this->newsList[$feedID]['newsfeed_data']) {
         // 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))) {
             // 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);
             }
             require_once e_HANDLER . 'xml_class.php';
             $xml = new xmlClass();
             require_once e_HANDLER . 'magpie_rss.php';
             $dbData = array();
             // In case we need to update DB
             if ($rawData = $xml->getRemoteFile($this->feedList[$feedID]['newsfeed_url'])) {
                 // Need to update feed
                 $rss = new MagpieRSS($rawData);
                 list($newsfeed_image, $newsfeed_showmenu, $newsfeed_showmain) = explode("::", $this->feedList[$feedID]['newsfeed_image']);
                 $temp['channel'] = $rss->channel;
                 if ($newsfeed_showmenu == 0 || $newsfeed_showmain == 0) {
                     $temp['items'] = $rss->items;
                     // Unlimited items
                 } else {
                     $temp['items'] = array_slice($rss->items, 0, max($newsfeed_showmenu, $newsfeed_showmain));
                     // Limited items
                 }
                 $newsfeed_des = FALSE;
                 if ($this->feedList[$feedID]['newsfeed_description'] == 'default') {
                     $temp['newsfeed_description'] = 'default';
                     // This prevents db writes if no better data found
                     if ($rss->channel['description']) {
                         $newsfeed_des = $tp->toDB($rss->channel['description']);
                         $temp['newsfeed_description'] = $newsfeed_des;
                     } else {
                         if ($rss->channel['tagline']) {
                             $newsfeed_des = $tp->toDB($rss->channel['tagline']);
                             $temp['newsfeed_description'] = $newsfeed_des;
                         }
                     }
                     if ($temp['newsfeed_description'] != $this->feedList[$feedID]['newsfeed_description']) {
                         // Need to write updated feed name to DB
                         $this->feedList[$feedID]['newsfeed_description'] = $temp['newsfeed_description'];
                         $dbData['newsfeed_description'] = $temp['newsfeed_description'];
                         if ($this->useCache) {
                             $e107->ecache->clear(NEWSFEED_LIST_CACHE_TAG);
                             // Clear the newsfeed cache so its re-read next time
                         }
                     }
                 }
                 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>";
                 } else {
                     $temp['newsfeed_image_link'] = "<img src='" . $this->feedList[$feedID]['newsfeed_image'] . "' alt='' />";
                 }
                 $serializedArray = $eArrayStorage->WriteArray($temp, FALSE);
                 $now = time();
                 $this->newsList[$feedID]['newsfeed_data'] = $serializedArray;
                 $this->newsList[$feedID]['newsfeed_timestamp'] = $now;
                 if ($this->useCache) {
                     $e107->ecache->set(NEWSFEED_NEWS_CACHE_TAG . $feedID, $serializedArray);
                 } else {
                     $dbData['newsfeed_data'] = addslashes($serializedArray);
                     $dbData['newsfeed_timestamp'] = $now;
                 }
                 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 (NEWSFEED_DEBUG) {
                             echo NFLAN_48 . "<br /><br />" . var_dump($dbData);
                         }
                     }
                 }
                 unset($rss);
             } else {
                 if (NEWSFEED_DEBUG) {
                     echo $xml->error;
                 }
                 return FALSE;
             }
         }
     }
     return $eArrayStorage->ReadArray($this->newsList[$feedID]['newsfeed_data']);
 }