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