<?php
-/*
+/**
+ * Base search action class.
+ *
+ * PHP version 5
+ *
+ * @category Action
+ * @package Laconica
+ * @author Evan Prodromou <evan@controlyourself.ca>
+ * @author Robin Millette <millette@controlyourself.ca>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://laconi.ca/
+ *
* Laconica - a distributed open-source microblogging tool
* Copyright (C) 2008, Controlez-Vous, Inc.
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-if (!defined('LACONICA')) { exit(1); }
-
-class SearchAction extends Action {
-
- function handle($args) {
- parent::handle($args);
- $this->show_form();
- }
-
- function show_top($arr=NULL) {
- if ($arr) {
- $error = $arr[1];
- }
- if ($error) {
- common_element('p', 'error', $error);
- } else {
- $instr = $this->get_instructions();
- $output = common_markup_to_html($instr);
- common_element_start('div', 'instructions');
- common_raw($output);
- common_element_end('div');
- }
- $this->search_menu();
- }
-
- 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(), array($this, 'show_header'), array($q, $error),
- array($this, 'show_top'));
- common_element_start('form', array('method' => 'get',
- 'id' => 'login',
- 'action' => common_local_url($this->trimmed('action'))));
- common_element_start('p');
- common_element('input', array('name' => 'q',
- 'id' => 'q',
- 'type' => 'text',
- 'class' => 'input_text',
- 'value' => ($q) ? $q : ''));
- common_text(' ');
- common_element('input', array('type' => 'submit',
- 'id' => 'search',
- 'name' => 'search',
- 'class' => 'submit',
- 'value' => _('Search')));
-
- common_element_end('p');
- common_element_end('form');
- if ($q) {
- $this->show_results($q, $page);
- }
- common_show_footer();
- }
-
- function search_menu() {
- # action => array('prompt', 'title')
- static $menu =
- array('peoplesearch' =>
- array('People',
- 'Find people on this site'),
- 'noticesearch' =>
- array('Text',
- 'Find content of notices'));
- $this->nav_menu($menu);
- }
+if (!defined('LACONICA')) {
+ exit(1);
+}
+
+require_once INSTALLDIR.'/lib/searchgroupnav.php';
+
+/**
+ * Base search action class.
+ *
+ * @category Action
+ * @package Laconica
+ * @author Evan Prodromou <evan@controlyourself.ca>
+ * @author Robin Millette <millette@controlyourself.ca>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://laconi.ca/
+ */
+class SearchAction extends Action
+{
+ /**
+ * Return true if read only.
+ *
+ * @return boolean true
+ */
+ function isReadOnly()
+ {
+ return true;
+ }
+
+ function handle($args)
+ {
+ parent::handle($args);
+ $this->showPage();
+ }
+
+ /**
+ * Show tabset for this page
+ *
+ * Uses the SearchGroupNav widget
+ *
+ * @return void
+ * @see SearchGroupNav
+ */
+
+ function showLocalNav()
+ {
+ $nav = new SearchGroupNav($this, $this->trimmed('q'));
+ $nav->show();
+ }
+
+ function showTop($arr=null)
+ {
+ $error = null;
+ if ($arr) {
+ $error = $arr[1];
+ }
+ if (!empty($error)) {
+ $this->element('p', 'error', $error);
+ } else {
+ $instr = $this->getInstructions();
+ $output = common_markup_to_html($instr);
+ $this->elementStart('div', 'instructions');
+ $this->raw($output);
+ $this->elementEnd('div');
+ }
+ }
+
+ function title()
+ {
+ return null;
+ }
+
+ function showNoticeForm() {
+ // remote post notice form
+ }
+
+ function showContent() {
+ $this->showTop();
+ $this->showForm();
+ }
+
+ function showForm($error=null)
+ {
+ $q = $this->trimmed('q');
+ $page = $this->trimmed('page', 1);
+ $this->elementStart('form', array('method' => 'get',
+ 'id' => 'form_search',
+ 'class' => 'form_settings',
+ 'action' => common_local_url($this->trimmed('action'))));
+ $this->elementStart('fieldset');
+ $this->element('legend', null, _('Search site'));
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ if (!common_config('site', 'fancy')) {
+ $this->hidden('action', $this->trimmed('action'));
+ }
+ $this->input('q', 'Keyword(s)', $q);
+ $this->submit('search', 'Search');
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ if ($q) {
+ $this->showResults($q, $page);
+ }
+ }
+
+ function searchSuggestions($q) {
+ $qe = urlencode($q);
+ $message = sprintf(_(<<<E_O_T
+* Make sure all words are spelled correctly.
+* Try different keywords.
+* Try more general keywords.
+* Try fewer keywords.
+
+You can also try your search on other engines:
+
+* [Twingly](http://www.twingly.com/search?q=%s&content=microblog&site=identi.ca)
+* [Tweet scan](http://www.tweetscan.com/indexi.php?s=%s)
+* [Google](http://www.google.com/search?q=site%%3A%%%%site.server%%%%+%s)
+* [Yahoo](http://search.yahoo.com/search?p=site%%3A%%%%site.server%%%%+%s)
+
+
+E_O_T
+), $qe, $qe, $qe, $qe);
+ $this->elementStart('dl', array('id' => 'help_search', 'class' => 'help'));
+ $this->element('dt', null, _('Search help'));
+ $this->elementStart('dd', 'instructions');
+ $this->raw(common_markup_to_html($message));
+ $this->elementEnd('dd');
+ $this->elementEnd('div');
+ }
}
+