uiredesign

This commit is contained in:
Robin Millette 2009-01-23 01:00:57 +00:00 committed by Robin Millette
parent e33d80fe9d
commit 4a4efc3b0a
2 changed files with 112 additions and 69 deletions

View File

@ -1,5 +1,16 @@
<?php <?php
/* /**
* People 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 * Laconica - a distributed open-source microblogging tool
* Copyright (C) 2008, Controlez-Vous, Inc. * Copyright (C) 2008, Controlez-Vous, Inc.
* *
@ -17,26 +28,37 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
if (!defined('LACONICA')) { exit(1); } if (!defined('LACONICA')) {
exit(1);
}
require_once(INSTALLDIR.'/lib/searchaction.php'); require_once INSTALLDIR.'/lib/searchaction.php';
require_once(INSTALLDIR.'/lib/profilelist.php'); require_once INSTALLDIR.'/lib/profilelist.php';
/**
* People 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 PeoplesearchAction extends SearchAction class PeoplesearchAction extends SearchAction
{ {
function getInstructions()
function get_instructions()
{ {
return _('Search for people on %%site.name%% by their name, location, or interests. ' . return _('Search for people on %%site.name%% by their name, location, or interests. ' .
'Separate the terms by spaces; they must be 3 characters or more.'); 'Separate the terms by spaces; they must be 3 characters or more.');
} }
function get_title() function title()
{ {
return _('People search'); return _('People search');
} }
function show_results($q, $page) function showResults($q, $page)
{ {
$profile = new Profile(); $profile = new Profile();
@ -57,28 +79,27 @@ class PeoplesearchAction extends SearchAction
} }
if ($cnt > 0) { if ($cnt > 0) {
$terms = preg_split('/[\s,]+/', $q); $terms = preg_split('/[\s,]+/', $q);
$results = new PeopleSearchResults($profile, $terms); $results = new PeopleSearchResults($profile, $terms, $this);
$results->show_list(); $results->show();
} else { } else {
$this->element('p', 'error', _('No results')); $this->element('p', 'error', _('No results'));
} }
$profile->free(); $profile->free();
common_pagination($page > 1, $cnt > PROFILES_PER_PAGE, $this->pagination($page > 1, $cnt > PROFILES_PER_PAGE,
$page, 'peoplesearch', array('q' => $q)); $page, 'peoplesearch', array('q' => $q));
} }
} }
class PeopleSearchResults extends ProfileList class PeopleSearchResults extends ProfileList
{ {
var $terms = null; var $terms = null;
var $pattern = null; var $pattern = null;
function __construct($profile, $terms) function __construct($profile, $terms, $action)
{ {
parent::__construct($profile); parent::__construct($profile, $terms, $action);
$this->terms = array_map('preg_quote', $this->terms = array_map('preg_quote',
array_map('htmlspecialchars', $terms)); array_map('htmlspecialchars', $terms));
$this->pattern = '/('.implode('|',$terms).')/i'; $this->pattern = '/('.implode('|',$terms).')/i';
@ -89,3 +110,4 @@ class PeopleSearchResults extends ProfileList
return preg_replace($this->pattern, '<strong>\\1</strong>', htmlspecialchars($text)); return preg_replace($this->pattern, '<strong>\\1</strong>', htmlspecialchars($text));
} }
} }

View File

@ -1,5 +1,16 @@
<?php <?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 * Laconica - a distributed open-source microblogging tool
* Copyright (C) 2008, Controlez-Vous, Inc. * Copyright (C) 2008, Controlez-Vous, Inc.
* *
@ -17,12 +28,30 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
if (!defined('LACONICA')) { exit(1); } 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 class SearchAction extends Action
{ {
/**
function is_readonly() * Return true if read only.
*
* @return boolean true
*/
function isReadOnly()
{ {
return true; return true;
} }
@ -30,27 +59,41 @@ class SearchAction extends Action
function handle($args) function handle($args)
{ {
parent::handle($args); parent::handle($args);
$this->show_form(); $this->showPage();
} }
function show_top($arr=null) /**
* Show tabset for this page
*
* Uses the SearchGroupNav widget
*
* @return void
* @see SearchGroupNav
*/
function showLocalNav()
{
$nav = new SearchGroupNav($this);
$nav->show();
}
function showTop($arr=null)
{ {
if ($arr) { if ($arr) {
$error = $arr[1]; $error = $arr[1];
} }
if ($error) { if ($error) {
common_element('p', 'error', $error); $this->element('p', 'error', $error);
} else { } else {
$instr = $this->get_instructions(); $instr = $this->getInstructions();
$output = common_markup_to_html($instr); $output = common_markup_to_html($instr);
common_element_start('div', 'instructions'); $this->elementStart('div', 'instructions');
common_raw($output); $this->raw($output);
common_element_end('div'); $this->elementEnd('div');
} }
$this->search_menu();
} }
function get_title() function title()
{ {
return null; return null;
} }
@ -60,59 +103,37 @@ class SearchAction extends Action
return; return;
} }
function show_form($error=null) function showNoticeForm() {
// remote post notice form
}
function showContent() {
$this->showTop();
$this->showForm();
}
function showForm($error=null)
{ {
global $config; global $config;
$q = $this->trimmed('q'); $q = $this->trimmed('q');
$page = $this->trimmed('page', 1); $page = $this->trimmed('page', 1);
$this->elementStart('form', array('method' => 'get',
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', 'id' => 'login',
'action' => common_local_url($this->trimmed('action')))); 'action' => common_local_url($this->trimmed('action'))));
common_element_start('p'); $this->elementStart('p');
if (!isset($config['site']['fancy']) || !$config['site']['fancy']) { if (!isset($config['site']['fancy']) || !$config['site']['fancy']) {
common_element('input', array('name' => 'action', $this->hidden('action', $this->trimmed('action'));
'type' => 'hidden',
'value' => $this->trimmed('action')));
} }
common_element('input', array('name' => 'q', $this->input('q', '', $q);
'id' => 'q', $this->text(' ');
'type' => 'text', $this->submit('search', 'Search');
'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'); $this->elementEnd('p');
common_element_end('form'); $this->elementEnd('form');
if ($q) { if ($q) {
$this->show_results($q, $page); $this->showResults($q, $page);
} }
common_show_footer();
}
function search_menu()
{
# action => array('prompt', 'title', $args)
$action = $this->trimmed('action');
$menu =
array('peoplesearch' =>
array(
_('People'),
_('Find people on this site'),
($action != 'peoplesearch' && $this->trimmed('q')) ? array('q' => $this->trimmed('q')) : null),
'noticesearch' =>
array( _('Text'),
_('Find content of notices'),
($action != 'noticesearch' && $this->trimmed('q')) ? array('q' => $this->trimmed('q')) : null)
);
$this->nav_menu($menu);
} }
} }