diff --git a/actions/noticesearch.php b/actions/noticesearch.php index 8b2082e8c2..0a9f4c37fe 100644 --- a/actions/noticesearch.php +++ b/actions/noticesearch.php @@ -69,6 +69,19 @@ class NoticesearchAction extends SearchAction { $page, 'noticesearch', array('q' => $q)); } + function show_header($arr) { + if ($arr) { + $q = $arr[0]; + } + if ($q) { + common_element('link', array('rel' => 'alternate', + 'href' => common_local_url('noticesearchrss', + array('q' => $q)), + 'type' => 'application/rss+xml', + 'title' => _t('Search Stream Feed'))); + } + } + # XXX: refactor and combine with StreamAction::show_notice() function show_notice($notice, $terms) { diff --git a/actions/noticesearchrss.php b/actions/noticesearchrss.php new file mode 100644 index 0000000000..f5834c4c1c --- /dev/null +++ b/actions/noticesearchrss.php @@ -0,0 +1,72 @@ +. + */ + +if (!defined('LACONICA')) { exit(1); } + +require_once(INSTALLDIR.'/lib/rssaction.php'); + +// Formatting of RSS handled by Rss10Action + +class NoticesearchrssAction extends Rss10Action { + + function init() { + return true; + } + + function get_notices($limit=0) { + + $q = $this->trimmed('q'); + $notices = array(); + + $notice = new Notice(); + + # lcase it for comparison + $q = strtolower($q); + + $notice->whereAdd('MATCH(content) against (\''.addslashes($q).'\')'); + + # Ask for an extra to see if there's more. + + if ($limit != 0) { + $notice->limit(0, $limit); + } + + $notice->find(); + + while ($notice->fetch()) { + $notices[] = clone($notice); + } + + return $notices; + } + + function get_channel() { + global $config; + $q = $this->trimmed('q'); + $c = array('url' => common_local_url('noticesearchrss', array('q' => $q)), + 'title' => $config['site']['name'] . _t(' Search Stream for "' . $q . '"'), + 'link' => common_local_url('noticesearch', array('q' => $q)), + 'description' => _t('All updates matching search term "') . $q . '"'); + return $c; + } + + function get_image() { + return NULL; + } +} \ No newline at end of file diff --git a/htaccess.sample b/htaccess.sample index 48ee74bfac..8c9e16c470 100644 --- a/htaccess.sample +++ b/htaccess.sample @@ -35,6 +35,7 @@ RewriteRule ^settings/im$ index.php?action=imsettings [L,QSA] RewriteRule ^search/people$ index.php?action=peoplesearch [L,QSA] RewriteRule ^search/notice$ index.php?action=noticesearch [L,QSA] +RewriteRule ^search/notice/rss$ index.php?action=noticesearchrss [L,QSA] RewriteRule ^notice/new$ index.php?action=newnotice [L,QSA] RewriteRule ^notice/(\d+)$ index.php?action=shownotice¬ice=$1 [L,QSA] diff --git a/lib/searchaction.php b/lib/searchaction.php index bf598ea93d..a9fb77fd3c 100644 --- a/lib/searchaction.php +++ b/lib/searchaction.php @@ -26,7 +26,10 @@ class SearchAction extends Action { $this->show_form(); } - function show_top($error=NULL) { + function show_top($arr=NULL) { + if ($arr) { + $error = $arr[1]; + } if ($error) { common_element('p', 'error', $error); } else { @@ -42,12 +45,17 @@ class SearchAction extends Action { function get_title() { return NULL; } + + function show_header($arr) { + return; + } function show_form($error=NULL) { $q = $this->trimmed('q'); $page = $this->trimmed('page', 1); - common_show_header($this->get_title(), NULL, $error, array($this, 'show_top')); + common_show_header($this->get_title(), array($this, 'show_header'), array($q, $error), + array($this, 'show_top')); common_element_start('form', array('method' => 'post', 'id' => 'login', 'action' => common_local_url($this->trimmed('action')))); diff --git a/lib/util.php b/lib/util.php index d86cc5e4c0..7627cafdcd 100644 --- a/lib/util.php +++ b/lib/util.php @@ -778,6 +778,8 @@ function common_fancy_url($action, $args=NULL) { return common_path('search/people' . (($args) ? ('?' . http_build_query($args)) : '')); case 'noticesearch': return common_path('search/notice' . (($args) ? ('?' . http_build_query($args)) : '')); + case 'noticesearchrss': + return common_path('search/notice/rss' . (($args) ? ('?' . http_build_query($args)) : '')); default: return common_simple_url($action, $args); }