Files
actions
accessadminpanel.php
accesstoken.php
all.php
allrss.php
apiaccountratelimitstatus.php
apiaccountupdatedeliverydevice.php
apiaccountupdateprofile.php
apiaccountupdateprofilebackgroundimage.php
apiaccountupdateprofilecolors.php
apiaccountupdateprofileimage.php
apiaccountverifycredentials.php
apiblockcreate.php
apiblockdestroy.php
apidirectmessage.php
apidirectmessagenew.php
apifavoritecreate.php
apifavoritedestroy.php
apifriendshipscreate.php
apifriendshipsdestroy.php
apifriendshipsexists.php
apifriendshipsshow.php
apigroupcreate.php
apigroupismember.php
apigroupjoin.php
apigroupleave.php
apigrouplist.php
apigrouplistall.php
apigroupmembership.php
apigroupshow.php
apihelptest.php
apioauthaccesstoken.php
apioauthauthorize.php
apioauthrequesttoken.php
apistatusesdestroy.php
apistatusesretweet.php
apistatusesretweets.php
apistatusesshow.php
apistatusesupdate.php
apistatusnetconfig.php
apistatusnetversion.php
apisubscriptions.php
apitimelinefavorites.php
apitimelinefriends.php
apitimelinegroup.php
apitimelinehome.php
apitimelinementions.php
apitimelinepublic.php
apitimelineretweetedbyme.php
apitimelineretweetedtome.php
apitimelineretweetsofme.php
apitimelinetag.php
apitimelineuser.php
apiuserfollowers.php
apiuserfriends.php
apiusershow.php
attachment.php
attachment_ajax.php
attachment_thumbnail.php
avatarbynickname.php
avatarsettings.php
block.php
blockedfromgroup.php
bookmarklet.php
confirmaddress.php
conversation.php
deletenotice.php
deleteuser.php
designadminpanel.php
disfavor.php
doc.php
editapplication.php
editgroup.php
emailsettings.php
favor.php
favorited.php
favoritesrss.php
featured.php
file.php
finishremotesubscribe.php
foaf.php
foafgroup.php
geocode.php
getfile.php
groupblock.php
groupbyid.php
groupdesignsettings.php
grouplogo.php
groupmembers.php
grouprss.php
groups.php
groupsearch.php
groupunblock.php
imsettings.php
inbox.php
invite.php
joingroup.php
leavegroup.php
login.php
logout.php
makeadmin.php
microsummary.php
newapplication.php
newgroup.php
newmessage.php
newnotice.php
noticesearch.php
noticesearchrss.php
nudge.php
oauthappssettings.php
oauthconnectionssettings.php
oembed.php
opensearch.php
othersettings.php
otp.php
outbox.php
passwordsettings.php
pathsadminpanel.php
peoplesearch.php
peopletag.php
postnotice.php
profilesettings.php
public.php
publicrss.php
publictagcloud.php
publicxrds.php
recoverpassword.php
register.php
remotesubscribe.php
repeat.php
replies.php
repliesrss.php
requesttoken.php
sandbox.php
showapplication.php
showfavorites.php
showgroup.php
showmessage.php
shownotice.php
showstream.php
silence.php
siteadminpanel.php
smssettings.php
subedit.php
subscribe.php
subscribers.php
subscriptions.php
sup.php
tag.php
tagother.php
tagrss.php
twitapisearchatom.php
twitapisearchjson.php
twitapitrends.php
unblock.php
unsandbox.php
unsilence.php
unsubscribe.php
updateprofile.php
useradminpanel.php
userauthorization.php
userbyid.php
userdesignsettings.php
usergroups.php
userrss.php
version.php
xrds.php
avatar
background
classes
db
doc-src
extlib
file
js
lib
local
locale
plugins
scripts
tests
theme
tpl
.gitignore
COPYING
EVENTS.txt
Makefile
README
apple-touch-icon.png
config.php.sample
favicon.ico
htaccess.sample
index.php
install.php
lighttpd.conf.example
gnu-social/actions/groupsearch.php
Craig Andrews f719720e8a Merge remote branch 'statusnet/0.8.x' into 0.9.x
Conflicts:
	lib/common.php
2009-10-11 13:39:10 -04:00

120 lines
3.9 KiB
PHP

<?php
/**
* Group search action class.
*
* PHP version 5
*
* @category Action
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @author Robin Millette <millette@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008, 2009, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
//require_once INSTALLDIR.'/lib/searchaction.php';
//require_once INSTALLDIR.'/lib/profilelist.php';
/**
* Group search action class.
*
* @category Action
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @author Robin Millette <millette@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*/
class GroupsearchAction extends SearchAction
{
function getInstructions()
{
return _('Search for groups on %%site.name%% by their name, location, or description. ' .
'Separate the terms by spaces; they must be 3 characters or more.');
}
function title()
{
return _('Group search');
}
function showResults($q, $page)
{
$user_group = new User_group;
$user_group->limit((($page-1)*GROUPS_PER_PAGE), GROUPS_PER_PAGE + 1);
$wheres = array('nickname', 'fullname', 'homepage', 'description', 'location');
foreach ($wheres as $where) {
$where_q = "$where like '%" . trim($user_group->escape($q), '\'') . '%\'';
$user_group->whereAdd($where_q, 'OR');
}
$cnt = $user_group->find();
if ($cnt > 0) {
$terms = preg_split('/[\s,]+/', $q);
$results = new GroupSearchResults($user_group, $terms, $this);
$results->show();
$user_group->free();
$this->pagination($page > 1, $cnt > GROUPS_PER_PAGE,
$page, 'groupsearch', array('q' => $q));
} else {
$this->element('p', 'error', _('No results.'));
$this->searchSuggestions($q);
if (common_logged_in()) {
$message = _('If you can\'t find the group you\'re looking for, you can [create it](%%action.newgroup%%) yourself.');
}
else {
$message = _('Why not [register an account](%%action.register%%) and [create the group](%%action.newgroup%%) yourself!');
}
$this->elementStart('div', 'guide');
$this->raw(common_markup_to_html($message));
$this->elementEnd('div');
$user_group->free();
}
}
function showScripts()
{
parent::showScripts();
$this->autofocus('q');
}
}
class GroupSearchResults extends GroupList
{
var $terms = null;
var $pattern = null;
function __construct($user_group, $terms, $action)
{
parent::__construct($user_group, null, $action);
$this->terms = array_map('preg_quote',
array_map('htmlspecialchars', $terms));
$this->pattern = '/('.implode('|',$terms).')/i';
}
function highlight($text)
{
return preg_replace($this->pattern, '<strong>\\1</strong>', htmlspecialchars($text));
}
}