tag -> search stuff: basic search subscription implementation in SearchSub
This commit is contained in:
parent
08b430a247
commit
341bef5e01
@ -139,31 +139,61 @@ class SearchSubPlugin extends Plugin
|
||||
*/
|
||||
function onStartNoticeWhoGets(Notice $notice, array &$ni)
|
||||
{
|
||||
foreach ($notice->getTags() as $search) {
|
||||
$searchsub = new SearchSub();
|
||||
$searchsub->search = $search;
|
||||
$searchsub->find();
|
||||
// Warning: this is potentially very slow
|
||||
// with a lot of searches!
|
||||
$sub = new SearchSub();
|
||||
$sub->groupBy('search');
|
||||
$sub->find();
|
||||
while ($sub->fetch()) {
|
||||
$search = $sub->search;
|
||||
|
||||
while ($searchsub->fetch()) {
|
||||
// These constants are currently not actually used, iirc
|
||||
$ni[$searchsub->profile_id] = NOTICE_INBOX_SOURCE_SUB;
|
||||
if ($this->matchSearch($notice, $search)) {
|
||||
// Match? Find all those who subscribed to this
|
||||
// search term and get our delivery on...
|
||||
$searchsub = new SearchSub();
|
||||
$searchsub->search = $search;
|
||||
$searchsub->find();
|
||||
|
||||
while ($searchsub->fetch()) {
|
||||
// These constants are currently not actually used, iirc
|
||||
$ni[$searchsub->profile_id] = NOTICE_INBOX_SOURCE_SUB;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Does the given notice match the given fulltext search query?
|
||||
*
|
||||
* @param SearchAction $action
|
||||
* Warning: not guaranteed to match other search engine behavior, etc.
|
||||
* Currently using a basic case-insensitive substring match, which
|
||||
* probably fits with the 'LIKE' search but not the default MySQL
|
||||
* or Sphinx search backends.
|
||||
*
|
||||
* @param Notice $notice
|
||||
* @param string $search
|
||||
* @return boolean
|
||||
*/
|
||||
function matchSearch(Notice $notice, $search)
|
||||
{
|
||||
return (mb_stripos($notice->content, $search) !== false);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param NoticeSearchAction $action
|
||||
* @param string $q
|
||||
* @param Notice $notice
|
||||
* @return boolean hook result
|
||||
*/
|
||||
function onStartTagShowContent(SearchAction $action)
|
||||
function onStartNoticeSearchShowResults($action, $q, $notice)
|
||||
{
|
||||
$user = common_current_user();
|
||||
if ($user) {
|
||||
$search = $action->trimmed('search');
|
||||
$search = $q;
|
||||
$searchsub = SearchSub::pkeyGet(array('search' => $search,
|
||||
'profile_id' => $user->id));
|
||||
'profile_id' => $user->id));
|
||||
if ($searchsub) {
|
||||
$form = new SearchUnsubForm($action, $search);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user