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