/** * Fetches the standard page view for a widget. * * @return vBCms_View_Widget - The resolved view, or array of views */ public function getPageView() { global $vbphrase, $vbulletin; // Ensure the model is loaded $this->assertWidget(); // Normalise widget config $config = $this->widget->getConfig(); // Use fallback template name if none configured $config['template_name'] = (isset($config['template_name']) AND $config['template_name']) ? $config['template_name'] : 'vbcms_widget_rss_page'; // Sanitize max items $config['max_items'] = max(min($config['max_items'], 20), 1); // Load RSS $rss = array(); if (!($rss = vB_Cache::instance()->read($this->getHash($this->widget->getId()), false, true))) { // get feed require_once DIR . '/includes/class_rss_poster.php'; $feed = new vB_RSS_Poster($vbulletin); $feed->fetch_xml($config['url']); // TODO: Add config values for encoding behaviour $feed->parse_xml(false, true, false, true); // get rss elements if ($rss['items'] = $feed->fetch_normalised_items()) { $rss['title'] = $feed->xml_array['channel']['title']; $rss['description'] = $feed->xml_array['channel']['description']; $rss['link'] = $feed->xml_array['channel']['link']; // check quantity if (sizeof($rss['items']) > $config['max_items']) { $rss['more'] = true; $rss['items'] = array_slice($rss['items'], 0, $config['max_items']); } $rss['url'] = vB::$vbulletin->input->xss_clean_url($config['url']); } // write cache vB_Cache::instance()->write($this->getHash($this->widget->getId()), $rss, $this->cache_ttl); } // Create view $view = new vBCms_View_Widget($config['template_name']); if (!$rss['items']) { $view->setDisplayView(false); } // Add widget details $view->class = $this->widget->getClass(); $view->title = $this->widget->getTitle(); $view->description = $this->widget->getDescription(); $view->widget_title = $this->widget->getTitle(); // Add rss $view->addArray($rss, 'rss_'); // Phrases $view->no_items = empty($rss['items']) ? $vbphrase['invalid_data'] : false; return $view; }
define('FEED_SAVE_ERROR', true); $_REQUEST['do'] = 'edit'; } else { $feeddata->save(); define('CP_REDIRECT', 'rssposter.php'); print_stop_message('saved_rssfeed_x_successfully', $feeddata->fetch_field('title')); } } else { $_POST['do'] = 'preview'; } } // ############################################################################# if ($_POST['do'] == 'preview') { require_once DIR . '/includes/class_rss_poster.php'; require_once DIR . '/includes/functions_wysiwyg.php'; $xml = new vB_RSS_Poster($vbulletin); $xml->fetch_xml($vbulletin->GPC['url']); if (empty($xml->xml_string)) { print_stop_message('unable_to_open_url'); } else { if ($xml->parse_xml() === false) { print_stop_message('xml_error_x_at_line_y', $xml->feedtype == 'unknown' ? 'Unknown Feed Type' : $xml->xml_object->error_string(), $xml->xml_object->error_line()); } } require_once DIR . '/includes/class_bbcode.php'; $bbcode_parser = new vB_BbCodeParser($vbulletin, fetch_tag_list()); $output = ''; $count = 0; foreach ($xml->fetch_items() as $item) { if ($vbulletin->GPC['maxresults'] and $count++ >= $vbulletin->GPC['maxresults']) { break;