2010-11-08 20:30:00 -05:00
< ? php
2011-09-09 00:42:52 -04:00
function search_saved_searches () {
$o = '' ;
2012-11-22 11:14:22 -05:00
if ( ! feature_enabled ( local_user (), 'savedsearch' ))
return $o ;
2011-12-01 21:27:45 -05:00
$r = q ( " select `id`,`term` from `search` WHERE `uid` = %d " ,
2011-09-09 00:42:52 -04:00
intval ( local_user ())
);
if ( count ( $r )) {
2012-10-02 10:03:20 -04:00
$saved = array ();
2011-09-09 00:42:52 -04:00
foreach ( $r as $rr ) {
2012-10-02 10:03:20 -04:00
$saved [] = array (
'id' => $rr [ 'id' ],
'term' => $rr [ 'term' ],
'encodedterm' => urlencode ( $rr [ 'term' ]),
'delete' => t ( 'Remove term' ),
'selected' => ( $search == $rr [ 'term' ]),
);
2011-09-09 00:42:52 -04:00
}
2012-10-02 10:03:20 -04:00
2013-01-13 08:50:55 -05:00
2012-10-02 10:03:20 -04:00
$tpl = get_markup_template ( " saved_searches_aside.tpl " );
$o .= replace_macros ( $tpl , array (
'$title' => t ( 'Saved Searches' ),
'$add' => '' ,
'$searchbox' => '' ,
'$saved' => $saved ,
));
2013-01-13 08:50:55 -05:00
}
2011-09-09 00:42:52 -04:00
return $o ;
}
function search_init ( & $a ) {
$search = (( x ( $_GET , 'search' )) ? notags ( trim ( rawurldecode ( $_GET [ 'search' ]))) : '' );
if ( local_user ()) {
if ( x ( $_GET , 'save' ) && $search ) {
$r = q ( " select * from `search` where `uid` = %d and `term` = '%s' limit 1 " ,
intval ( local_user ()),
dbesc ( $search )
);
if ( ! count ( $r )) {
q ( " insert into `search` ( `uid`,`term` ) values ( %d, '%s') " ,
intval ( local_user ()),
dbesc ( $search )
);
}
}
if ( x ( $_GET , 'remove' ) && $search ) {
q ( " delete from `search` where `uid` = %d and `term` = '%s' limit 1 " ,
intval ( local_user ()),
dbesc ( $search )
);
}
$a -> page [ 'aside' ] .= search_saved_searches ();
}
2012-09-06 19:24:34 -04:00
else {
2011-10-11 22:27:58 -04:00
unset ( $_SESSION [ 'theme' ]);
2012-09-06 19:24:34 -04:00
unset ( $_SESSION [ 'mobile-theme' ]);
}
2011-10-11 22:27:58 -04:00
2011-09-09 00:42:52 -04:00
}
2010-11-08 20:30:00 -05:00
2010-12-12 21:43:32 -05:00
function search_post ( & $a ) {
if ( x ( $_POST , 'search' ))
$a -> data [ 'search' ] = $_POST [ 'search' ];
}
2010-11-08 20:30:00 -05:00
function search_content ( & $a ) {
2011-04-21 20:29:47 -04:00
if (( get_config ( 'system' , 'block_public' )) && ( ! local_user ()) && ( ! remote_user ())) {
notice ( t ( 'Public access denied.' ) . EOL );
return ;
}
2012-05-26 05:51:48 -04:00
2011-08-17 12:36:24 -04:00
nav_set_selected ( 'search' );
2011-04-21 20:29:47 -04:00
2011-04-12 20:58:16 -04:00
require_once ( " include/bbcode.php " );
require_once ( 'include/security.php' );
require_once ( 'include/conversation.php' );
2012-10-09 11:41:33 -04:00
$o = '<h3>' . t ( 'Search' ) . '</h3>' ;
2010-11-08 20:30:00 -05:00
2010-12-12 21:43:32 -05:00
if ( x ( $a -> data , 'search' ))
$search = notags ( trim ( $a -> data [ 'search' ]));
else
$search = (( x ( $_GET , 'search' )) ? notags ( trim ( rawurldecode ( $_GET [ 'search' ]))) : '' );
2010-11-08 20:30:00 -05:00
2012-04-24 01:41:32 -04:00
$tag = false ;
if ( x ( $_GET , 'tag' )) {
$tag = true ;
$search = (( x ( $_GET , 'tag' )) ? notags ( trim ( rawurldecode ( $_GET [ 'tag' ]))) : '' );
}
2011-09-09 00:42:52 -04:00
$o .= search ( $search , 'search-box' , '/search' ,(( local_user ()) ? true : false ));
2010-11-08 20:30:00 -05:00
2012-05-19 05:42:11 -04:00
if ( strpos ( $search , '#' ) === 0 ) {
$tag = true ;
$search = substr ( $search , 1 );
}
2012-05-20 00:53:27 -04:00
if ( strpos ( $search , '@' ) === 0 ) {
require_once ( 'mod/dirfind.php' );
return dirfind_content ( $a );
}
2012-05-19 05:42:11 -04:00
2010-11-08 20:30:00 -05:00
if ( ! $search )
return $o ;
2013-01-13 03:37:15 -05:00
if ( get_config ( 'system' , 'only_tag_search' ))
$tag = true ;
2013-01-11 02:51:58 -05:00
if ( $tag ) {
2013-11-02 21:07:44 -04:00
$sql_extra = " " ;
$sql_table = sprintf ( " `item` INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` " ,
dbesc ( protect_sprintf ( $search )), intval ( TERM_OBJ_POST ), intval ( TERM_HASHTAG ), intval ( local_user ()));
2014-03-16 17:42:47 -04:00
$sql_order = " `item`.`id` " ;
2013-01-13 08:50:55 -05:00
} else {
if ( get_config ( 'system' , 'use_fulltext_engine' )) {
$sql_extra = sprintf ( " AND MATCH (`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode) " , dbesc ( protect_sprintf ( $search )));
} else {
$sql_extra = sprintf ( " AND `item`.`body` REGEXP '%s' " , dbesc ( protect_sprintf ( preg_quote ( $search ))));
}
2013-01-11 02:51:58 -05:00
$sql_table = " `item` " ;
2013-10-14 18:49:13 -04:00
$sql_order = " `item`.`received` " ;
2013-01-13 08:50:55 -05:00
}
2012-04-24 01:41:32 -04:00
2011-07-03 08:00:11 -04:00
// Here is the way permissions work in the search module...
2012-03-20 17:55:18 -04:00
// Only public posts can be shown
2011-07-03 08:00:11 -04:00
// OR your own posts if you are a logged in member
2014-03-16 12:12:56 -04:00
// No items will be shown if the member has a blocked profile wall.
2010-11-08 20:30:00 -05:00
2012-11-27 21:30:46 -05:00
if ( ( ! get_config ( 'alt_pager' , 'global' )) && ( ! get_pconfig ( local_user (), 'system' , 'alt_pager' )) ) {
2012-07-14 14:21:58 -04:00
$r = q ( " SELECT distinct(`item`.`uri`) as `total`
2014-03-09 04:19:14 -04:00
FROM $sql_table INNER JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
INNER JOIN `user` ON `user` . `uid` = `item` . `uid`
2012-07-14 14:21:58 -04:00
WHERE `item` . `visible` = 1 AND `item` . `deleted` = 0 and `item` . `moderated` = 0
2014-03-09 04:19:14 -04:00
AND (( `item` . `allow_cid` = '' AND `item` . `allow_gid` = '' AND `item` . `deny_cid` = '' AND `item` . `deny_gid` = '' AND `item` . `private` = 0 AND `user` . `hidewall` = 0 )
2013-01-27 16:14:13 -05:00
OR ( `item` . `uid` = % d ))
2013-01-29 19:31:27 -05:00
$sql_extra " ,
2012-07-14 14:21:58 -04:00
intval ( local_user ())
);
2013-01-29 19:31:27 -05:00
// $sql_extra group by `item`.`uri` ",
2012-07-14 14:21:58 -04:00
if ( count ( $r ))
$a -> set_pager_total ( count ( $r ));
if ( ! count ( $r )) {
info ( t ( 'No results.' ) . EOL );
return $o ;
}
2010-11-08 20:30:00 -05:00
}
2013-02-20 15:47:36 -05:00
$r = q ( " SELECT `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,
2012-06-02 03:40:38 -04:00
`contact` . `name` , `contact` . `photo` , `contact` . `url` , `contact` . `alias` , `contact` . `rel` ,
2011-04-11 06:22:09 -04:00
`contact` . `network` , `contact` . `thumb` , `contact` . `self` , `contact` . `writable` ,
2010-11-08 20:30:00 -05:00
`contact` . `id` AS `cid` , `contact` . `uid` AS `contact-uid` ,
2013-01-27 16:14:13 -05:00
`user` . `nickname` , `user` . `uid` , `user` . `hidewall`
2014-03-09 04:19:14 -04:00
FROM $sql_table INNER JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
INNER JOIN `user` ON `user` . `uid` = `item` . `uid`
2012-01-23 23:56:11 -05:00
WHERE `item` . `visible` = 1 AND `item` . `deleted` = 0 and `item` . `moderated` = 0
2012-03-20 17:55:18 -04:00
AND (( `item` . `allow_cid` = '' AND `item` . `allow_gid` = '' AND `item` . `deny_cid` = '' AND `item` . `deny_gid` = '' AND `item` . `private` = 0 AND `user` . `hidewall` = 0 )
2013-01-27 16:14:13 -05:00
OR ( `item` . `uid` = % d ))
2012-04-24 01:41:32 -04:00
$sql_extra
2013-10-14 18:49:13 -04:00
ORDER BY $sql_order DESC LIMIT % d , % d " ,
2010-11-09 00:10:53 -05:00
intval ( local_user ()),
2011-07-04 23:57:07 -04:00
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
2010-11-08 20:30:00 -05:00
);
2013-01-29 19:31:27 -05:00
// group by `item`.`uri`
2010-11-08 20:30:00 -05:00
2012-07-14 14:21:58 -04:00
if ( ! count ( $r )) {
info ( t ( 'No results.' ) . EOL );
return $o ;
}
2013-10-14 18:49:13 -04:00
if ( $tag )
2012-04-24 01:41:32 -04:00
$o .= '<h2>Items tagged with: ' . $search . '</h2>' ;
else
$o .= '<h2>Search results for: ' . $search . '</h2>' ;
2011-04-11 04:31:04 -04:00
$o .= conversation ( $a , $r , 'search' , false );
2010-11-24 21:37:10 -05:00
2012-11-27 21:30:46 -05:00
if ( get_config ( 'alt_pager' , 'global' ) || get_pconfig ( local_user (), 'system' , 'alt_pager' ) ) {
$o .= alt_pager ( $a , count ( $r ));
2012-07-14 14:21:58 -04:00
}
else {
2012-11-27 21:30:46 -05:00
$o .= paginate ( $a );
2012-07-14 14:21:58 -04:00
}
2010-11-24 21:37:10 -05:00
2010-11-08 20:30:00 -05:00
return $o ;
}