#917730 by rfay, David_Rothstein: Fixed various RSS feed links (with tests).
parent
1a685474e6
commit
14779b97e1
|
@ -348,7 +348,7 @@ function drupal_get_html_head() {
|
|||
* This function can be called as long the HTML header hasn't been sent.
|
||||
*
|
||||
* @param $url
|
||||
* A url for the feed.
|
||||
* An internal system path or a fully qualified external URL of the feed.
|
||||
* @param $title
|
||||
* The title of the feed.
|
||||
*/
|
||||
|
@ -358,10 +358,14 @@ function drupal_add_feed($url = NULL, $title = '') {
|
|||
if (isset($url)) {
|
||||
$stored_feed_links[$url] = theme('feed_icon', array('url' => $url, 'title' => $title));
|
||||
|
||||
drupal_add_html_head_link(array('rel' => 'alternate',
|
||||
'type' => 'application/rss+xml',
|
||||
'title' => $title,
|
||||
'href' => $url));
|
||||
drupal_add_html_head_link(array(
|
||||
'rel' => 'alternate',
|
||||
'type' => 'application/rss+xml',
|
||||
'title' => $title,
|
||||
// Force the URL to be absolute, for consistency with other <link> tags
|
||||
// output by Drupal.
|
||||
'href' => url($url, array('absolute' => TRUE)),
|
||||
));
|
||||
}
|
||||
return $stored_feed_links;
|
||||
}
|
||||
|
|
|
@ -1866,7 +1866,8 @@ function theme_more_help_link($variables) {
|
|||
*
|
||||
* @param $variables
|
||||
* An associative array containing:
|
||||
* - url: The url of the feed.
|
||||
* - url: An internal system path or a fully qualified external URL of the
|
||||
* feed.
|
||||
* - title: A descriptive title of the feed.
|
||||
*/
|
||||
function theme_feed_icon($variables) {
|
||||
|
|
|
@ -990,7 +990,7 @@ function template_preprocess_forums(&$variables) {
|
|||
|
||||
if ($variables['tid'] && !in_array($variables['tid'], variable_get('forum_containers', array()))) {
|
||||
$variables['topics'] = theme('forum_topic_list', $variables);
|
||||
drupal_add_feed('taxonomy/term/' . $variables['tid'] . '/0/feed', 'RSS - ' . $title);
|
||||
drupal_add_feed('taxonomy/term/' . $variables['tid'] . '/feed', 'RSS - ' . $title);
|
||||
}
|
||||
else {
|
||||
$variables['topics'] = '';
|
||||
|
|
|
@ -2537,8 +2537,8 @@ function node_page_default() {
|
|||
$nodes = node_load_multiple($nids);
|
||||
$build = node_view_multiple($nodes);
|
||||
|
||||
$feed_url = url('rss.xml', array('absolute' => TRUE));
|
||||
drupal_add_feed($feed_url, variable_get('site_name', 'Drupal') . ' ' . t('RSS'));
|
||||
// 'rss.xml' is a path, not a file, registered in node_menu().
|
||||
drupal_add_feed('rss.xml', variable_get('site_name', 'Drupal') . ' ' . t('RSS'));
|
||||
$build['pager'] = array(
|
||||
'#theme' => 'pager',
|
||||
'#weight' => 5,
|
||||
|
|
|
@ -2277,3 +2277,85 @@ class DrupalGetRdfNamespacesTestCase extends DrupalWebTestCase {
|
|||
$this->assertTrue(!isset($ns['dc']), t('A prefix with conflicting namespaces is discarded.'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Basic tests for drupal_add_feed().
|
||||
*/
|
||||
class DrupalAddFeedTestCase extends DrupalWebTestCase {
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => 'drupal_add_feed() tests',
|
||||
'description' => 'Make sure that drupal_add_feed() works correctly with various constructs.',
|
||||
'group' => 'System',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test drupal_add_feed() with paths, URLs, and titles.
|
||||
*/
|
||||
function testBasicFeedAddNoTitle() {
|
||||
$path = $this->randomName(12);
|
||||
$external_url = 'http://' . $this->randomName(12) . '/' . $this->randomName(12);
|
||||
$fully_qualified_local_url = url($this->randomName(12), array('absolute' => TRUE));
|
||||
|
||||
$path_for_title = $this->randomName(12);
|
||||
$external_for_title = 'http://' . $this->randomName(12) . '/' . $this->randomName(12);
|
||||
$fully_qualified_for_title = url($this->randomName(12), array('absolute' => TRUE));
|
||||
|
||||
// Possible permutations of drupal_add_feed() to test.
|
||||
// - 'input_url': the path passed to drupal_add_feed(),
|
||||
// - 'output_url': the expected URL to be found in the header.
|
||||
// - 'title' == the title of the feed as passed into drupal_add_feed().
|
||||
$urls = array(
|
||||
'path without title' => array(
|
||||
'input_url' => $path,
|
||||
'output_url' => url($path, array('absolute' => TRUE)),
|
||||
'title' => '',
|
||||
),
|
||||
'external url without title' => array(
|
||||
'input_url' => $external_url,
|
||||
'output_url' => $external_url,
|
||||
'title' => '',
|
||||
),
|
||||
'local url without title' => array(
|
||||
'input_url' => $fully_qualified_local_url,
|
||||
'output_url' => $fully_qualified_local_url,
|
||||
'title' => '',
|
||||
),
|
||||
'path with title' => array(
|
||||
'input_url' => $path_for_title,
|
||||
'output_url' => url($path_for_title, array('absolute' => TRUE)),
|
||||
'title' => $this->randomName(12),
|
||||
),
|
||||
'external url with title' => array(
|
||||
'input_url' => $external_for_title,
|
||||
'output_url' => $external_for_title,
|
||||
'title' => $this->randomName(12),
|
||||
),
|
||||
'local url with title' => array(
|
||||
'input_url' => $fully_qualified_for_title,
|
||||
'output_url' => $fully_qualified_for_title,
|
||||
'title' => $this->randomName(12),
|
||||
),
|
||||
);
|
||||
|
||||
foreach ($urls as $description => $feed_info) {
|
||||
drupal_add_feed($feed_info['input_url'], $feed_info['title']);
|
||||
}
|
||||
|
||||
$this->drupalSetContent(drupal_get_html_head());
|
||||
foreach ($urls as $description => $feed_info) {
|
||||
$this->assertPattern($this->urlToRSSLinkPattern($feed_info['output_url'], $feed_info['title']), t('Found correct feed header for %description', array('%description' => $description)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a pattern representing the RSS feed in the page.
|
||||
*/
|
||||
function urlToRSSLinkPattern($url, $title = '') {
|
||||
// Escape any regular expression characters in the url ('?' is the worst).
|
||||
$url = preg_replace('/([+?.*])/', '[$0]', $url);
|
||||
$generated_pattern = '%<link +rel="alternate" +type="application/rss.xml" +title="' . $title . '" +href="' . $url . '" */>%';
|
||||
return $generated_pattern;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue