function search_content(&$a) { if (get_config('system', 'block_public') && !local_user() && !remote_user()) { notice(t('Public access denied.') . EOL); return; } if (get_config('system', 'local_search') and !local_user()) { notice(t('Public access denied.') . EOL); return; //http_status_exit(403); //killme(); } nav_set_selected('search'); $o = '<h3>' . t('Search') . '</h3>'; if (x($a->data, 'search')) { $search = notags(trim($a->data['search'])); } else { $search = x($_GET, 'search') ? notags(trim(rawurldecode($_GET['search']))) : ''; } $tag = false; if (x($_GET, 'tag')) { $tag = true; $search = x($_GET, 'tag') ? notags(trim(rawurldecode($_GET['tag']))) : ''; } $o .= search($search, 'search-box', '/search', local_user() ? true : false, false); if (strpos($search, '#') === 0) { $tag = true; $search = substr($search, 1); } if (strpos($search, '@') === 0) { return dirfind_content($a); } if (strpos($search, '!') === 0) { return dirfind_content($a); } if (x($_GET, 'search-option')) { switch ($_GET['search-option']) { case 'fulltext': break; case 'tags': $tag = true; break; case 'contacts': return dirfind_content($a, "@"); break; case 'forums': return dirfind_content($a, "!"); break; } } if (!$search) { return $o; } if (get_config('system', 'only_tag_search')) { $tag = true; } // Here is the way permissions work in the search module... // Only public posts can be shown // OR your own posts if you are a logged in member // No items will be shown if the member has a blocked profile wall. if ($tag) { logger("Start tag search for '" . $search . "'", LOGGER_DEBUG); $r = q("SELECT STRAIGHT_JOIN `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,\n\t\t\t\t`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,\n\t\t\t\t`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,\n\t\t\t\t`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`\n\t\t\tFROM `term`\n\t\t\t\tINNER JOIN `item` ON `item`.`id`=`term`.`oid`\n\t\t\t\tINNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`\n\t\t\tWHERE `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated`\n\t\t\t\tAND (`term`.`uid` = 0 OR (`term`.`uid` = %d AND NOT `term`.`global`)) AND `term`.`otype` = %d AND `term`.`type` = %d AND `term`.`term` = '%s'\n\t\t\tORDER BY term.created DESC LIMIT %d , %d ", intval(local_user()), intval(TERM_OBJ_POST), intval(TERM_HASHTAG), dbesc(protect_sprintf($search)), intval($a->pager['start']), intval($a->pager['itemspage'])); } else { logger("Start fulltext search for '" . $search . "'", LOGGER_DEBUG); 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)))); } $r = q("SELECT STRAIGHT_JOIN `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,\n\t\t\t\t`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,\n\t\t\t\t`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,\n\t\t\t\t`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`\n\t\t\tFROM `item`\n\t\t\t\tINNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`\n\t\t\tWHERE `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated`\n\t\t\t\tAND (`item`.`uid` = 0 OR (`item`.`uid` = %s AND (`item`.`private` OR NOT `item`.`network` IN ('%s', '%s', '%s'))))\n\t\t\t\t{$sql_extra}\n\t\t\tGROUP BY `item`.`uri` ORDER BY `item`.`id` DESC LIMIT %d , %d ", intval(local_user()), dbesc(NETWORK_DFRN), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DIASPORA), intval($a->pager['start']), intval($a->pager['itemspage'])); } if (!count($r)) { info(t('No results.') . EOL); return $o; } if ($tag) { $title = sprintf(t('Items tagged with: %s'), $search); } else { $title = sprintf(t('Search results for: %s'), $search); } $o .= replace_macros(get_markup_template("section_title.tpl"), array('$title' => $title)); logger("Start Conversation for '" . $search . "'", LOGGER_DEBUG); $o .= conversation($a, $r, 'search', false); $o .= alt_pager($a, count($r)); logger("Done '" . $search . "'", LOGGER_DEBUG); return $o; }
function search_content(&$a) { if (get_config('system', 'block_public') && !local_user() && !remote_user()) { notice(t('Public access denied.') . EOL); return; } nav_set_selected('search'); require_once "include/bbcode.php"; require_once 'include/security.php'; require_once 'include/conversation.php'; $o = '<h3>' . t('Search') . '</h3>'; if (x($a->data, 'search')) { $search = notags(trim($a->data['search'])); } else { $search = x($_GET, 'search') ? notags(trim(rawurldecode($_GET['search']))) : ''; } $tag = false; if (x($_GET, 'tag')) { $tag = true; $search = x($_GET, 'tag') ? notags(trim(rawurldecode($_GET['tag']))) : ''; } $o .= search($search, 'search-box', '/search', local_user() ? true : false); if (strpos($search, '#') === 0) { $tag = true; $search = substr($search, 1); } if (strpos($search, '@') === 0) { require_once 'mod/dirfind.php'; return dirfind_content($a); } if (!$search) { return $o; } if (get_config('system', 'only_tag_search')) { $tag = true; } if ($tag) { $sql_extra = ""; $sql_table = sprintf("`item` INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d) AS `term` ON `item`.`id` = `term`.`oid` ", dbesc(protect_sprintf($search)), intval(TERM_OBJ_POST), intval(TERM_HASHTAG)); $sql_order = "`item`.`id`"; } 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)))); } $sql_table = "`item`"; $sql_order = "`item`.`id`"; //$sql_order = "`item`.`received`"; } // Here is the way permissions work in the search module... // Only public posts can be shown // OR your own posts if you are a logged in member // No items will be shown if the member has a blocked profile wall. if (!get_config('alt_pager', 'global') && !get_pconfig(local_user(), 'system', 'alt_pager')) { $r = q("SELECT distinct(`item`.`uri`) as `total`\n\t\t FROM {$sql_table} INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`\n\t\t AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0\n\t\t\tINNER JOIN `user` ON `user`.`uid` = `item`.`uid`\n\t\t WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0\n\t\t AND (( `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0)\n\t\t\t OR ( `item`.`uid` = %d ))\n\t\t {$sql_extra} ", intval(local_user())); // $sql_extra group by `item`.`uri` ", if (count($r)) { $a->set_pager_total(count($r)); } if (!count($r)) { info(t('No results.') . EOL); return $o; } } $r = q("SELECT `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,\n\t\t`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,\n\t\t`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, \n\t\t`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,\n\t\t`user`.`nickname`, `user`.`uid`, `user`.`hidewall`\n\t\tFROM {$sql_table} INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`\n\t\tAND `contact`.`blocked` = 0 AND `contact`.`pending` = 0\n\t\tINNER JOIN `user` ON `user`.`uid` = `item`.`uid`\n\t\tWHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0\n\t\tAND (( `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0 ) \n\t\t\tOR ( `item`.`uid` = %d ))\n\t\t{$sql_extra} GROUP BY `item`.`uri`\n\t\tORDER BY {$sql_order} DESC LIMIT %d , %d ", intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage'])); // group by `item`.`uri` if (!count($r)) { info(t('No results.') . EOL); return $o; } if ($tag) { $o .= '<h2>Items tagged with: ' . $search . '</h2>'; } else { $o .= '<h2>Search results for: ' . $search . '</h2>'; } $o .= conversation($a, $r, 'search', false); if (get_config('alt_pager', 'global') || get_pconfig(local_user(), 'system', 'alt_pager')) { $o .= alt_pager($a, count($r)); } else { $o .= paginate($a); } return $o; }
function search_content(&$a) { if (get_config('system', 'block_public') && !local_user() && !remote_user()) { notice(t('Public access denied.') . EOL); return; } if (get_config('system', 'local_search') and !local_user()) { http_status_exit(403, array("title" => t("Public access denied."), "description" => t("Only logged in users are permitted to perform a search."))); killme(); //notice(t('Public access denied.').EOL); //return; } if (get_config('system', 'permit_crawling') and !local_user()) { // Default values: // 10 requests are "free", after the 11th only a call per minute is allowed $free_crawls = intval(get_config('system', 'free_crawls')); if ($free_crawls == 0) { $free_crawls = 10; } $crawl_permit_period = intval(get_config('system', 'crawl_permit_period')); if ($crawl_permit_period == 0) { $crawl_permit_period = 10; } $remote = $_SERVER["REMOTE_ADDR"]; $result = Cache::get("remote_search:" . $remote); if (!is_null($result)) { $resultdata = json_decode($result); if ($resultdata->time > time() - $crawl_permit_period and $resultdata->accesses > $free_crawls) { http_status_exit(429, array("title" => t("Too Many Requests"), "description" => t("Only one search per minute is permitted for not logged in users."))); killme(); } Cache::set("remote_search:" . $remote, json_encode(array("time" => time(), "accesses" => $resultdata->accesses + 1)), CACHE_HOUR); } else { Cache::set("remote_search:" . $remote, json_encode(array("time" => time(), "accesses" => 1)), CACHE_HOUR); } } nav_set_selected('search'); $o = '<h3>' . t('Search') . '</h3>'; if (x($a->data, 'search')) { $search = notags(trim($a->data['search'])); } else { $search = x($_GET, 'search') ? notags(trim(rawurldecode($_GET['search']))) : ''; } $tag = false; if (x($_GET, 'tag')) { $tag = true; $search = x($_GET, 'tag') ? notags(trim(rawurldecode($_GET['tag']))) : ''; } $o .= search($search, 'search-box', '/search', local_user() ? true : false, false); if (strpos($search, '#') === 0) { $tag = true; $search = substr($search, 1); } if (strpos($search, '@') === 0) { return dirfind_content($a); } if (strpos($search, '!') === 0) { return dirfind_content($a); } if (x($_GET, 'search-option')) { switch ($_GET['search-option']) { case 'fulltext': break; case 'tags': $tag = true; break; case 'contacts': return dirfind_content($a, "@"); break; case 'forums': return dirfind_content($a, "!"); break; } } if (!$search) { return $o; } if (get_config('system', 'only_tag_search')) { $tag = true; } // Here is the way permissions work in the search module... // Only public posts can be shown // OR your own posts if you are a logged in member // No items will be shown if the member has a blocked profile wall. if ($tag) { logger("Start tag search for '" . $search . "'", LOGGER_DEBUG); $r = q("SELECT STRAIGHT_JOIN `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,\n\t\t\t\t`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,\n\t\t\t\t`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,\n\t\t\t\t`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`\n\t\t\tFROM `term`\n\t\t\t\tINNER JOIN `item` ON `item`.`id`=`term`.`oid`\n\t\t\t\tINNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`\n\t\t\tWHERE `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated`\n\t\t\t\tAND (`term`.`uid` = 0 OR (`term`.`uid` = %d AND NOT `term`.`global`)) AND `term`.`otype` = %d AND `term`.`type` = %d AND `term`.`term` = '%s'\n\t\t\tORDER BY term.created DESC LIMIT %d , %d ", intval(local_user()), intval(TERM_OBJ_POST), intval(TERM_HASHTAG), dbesc(protect_sprintf($search)), intval($a->pager['start']), intval($a->pager['itemspage'])); } else { logger("Start fulltext search for '" . $search . "'", LOGGER_DEBUG); 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)))); } $r = q("SELECT STRAIGHT_JOIN `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,\n\t\t\t\t`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,\n\t\t\t\t`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,\n\t\t\t\t`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`\n\t\t\tFROM `item`\n\t\t\t\tINNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`\n\t\t\tWHERE `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated`\n\t\t\t\tAND (`item`.`uid` = 0 OR (`item`.`uid` = %s AND (`item`.`private` OR NOT `item`.`network` IN ('%s', '%s', '%s'))))\n\t\t\t\t{$sql_extra}\n\t\t\tGROUP BY `item`.`uri` ORDER BY `item`.`id` DESC LIMIT %d , %d ", intval(local_user()), dbesc(NETWORK_DFRN), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DIASPORA), intval($a->pager['start']), intval($a->pager['itemspage'])); } if (!count($r)) { info(t('No results.') . EOL); return $o; } if ($tag) { $title = sprintf(t('Items tagged with: %s'), $search); } else { $title = sprintf(t('Search results for: %s'), $search); } $o .= replace_macros(get_markup_template("section_title.tpl"), array('$title' => $title)); logger("Start Conversation for '" . $search . "'", LOGGER_DEBUG); $o .= conversation($a, $r, 'search', false); $o .= alt_pager($a, count($r)); logger("Done '" . $search . "'", LOGGER_DEBUG); return $o; }
function search_content(&$a) { if (get_config('system', 'block_public') && !local_user() && !remote_user()) { notice(t('Public access denied.') . EOL); return; } nav_set_selected('search'); require_once "include/bbcode.php"; require_once 'include/security.php'; require_once 'include/conversation.php'; $o = '<div id="live-search"></div>' . "\r\n"; $o .= '<h3>' . t('Search') . '</h3>'; if (x($a->data, 'search')) { $search = notags(trim($a->data['search'])); } else { $search = x($_GET, 'search') ? notags(trim(rawurldecode($_GET['search']))) : ''; } $tag = false; if (x($_GET, 'tag')) { $tag = true; $search = x($_GET, 'tag') ? notags(trim(rawurldecode($_GET['tag']))) : ''; } $o .= search($search, 'search-box', '/search', local_user() ? true : false); if (strpos($search, '#') === 0) { $tag = true; $search = substr($search, 1); } if (strpos($search, '@') === 0) { require_once 'mod/dirfind.php'; return dirfind_content($a); } if (!$search) { return $o; } if (get_config('system', 'use_fulltext_engine')) { if ($tag) { $sql_extra = sprintf(" AND MATCH (`item`.`tag`) AGAINST ('" . '"%s"' . "' in boolean mode) ", '#' . dbesc(protect_sprintf($search))); } else { $sql_extra = sprintf(" AND MATCH (`item`.`body`) AGAINST ('" . '"%s"' . "' in boolean mode) ", dbesc(protect_sprintf($search))); } } else { if ($tag) { $sql_extra = sprintf(" AND `item`.`tag` REGEXP '%s' ", dbesc('\\]' . protect_sprintf(preg_quote($search)) . '\\[')); } else { $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search)))); } } // Here is the way permissions work in the search module... // Only public posts can be shown // OR your own posts if you are a logged in member // No items will be shown if the member has a blocked profile wall. $r = q("SELECT distinct(`item`.`uri`) as `total`\n\t\tFROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `user` ON `user`.`uid` = `item`.`uid`\n\t\tWHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0\n\t\tAND (( `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0) \n\t\t\tOR `item`.`uid` = %d )\n\t\tAND `contact`.`blocked` = 0 AND `contact`.`pending` = 0\n\t\t{$sql_extra} group by `item`.`uri` ", intval(local_user())); if (count($r)) { $a->set_pager_total(count($r)); } if (!count($r)) { info(t('No results.') . EOL); return $o; } $r = q("SELECT distinct(`item`.`uri`), `item`.*, `item`.`id` AS `item_id`, \n\t\t`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,\n\t\t`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, \n\t\t`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,\n\t\t`user`.`nickname`\n\t\tFROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`\n\t\tLEFT JOIN `user` ON `user`.`uid` = `item`.`uid`\n\t\tWHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0\n\t\tAND (( `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0 ) \n\t\t\tOR `item`.`uid` = %d )\n\t\tAND `contact`.`blocked` = 0 AND `contact`.`pending` = 0\n\t\t{$sql_extra}\n\t\tgroup by `item`.`uri`\t\n\t\tORDER BY `received` DESC LIMIT %d , %d ", intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage'])); if ($tag) { $o .= '<h2>Items tagged with: ' . $search . '</h2>'; } else { $o .= '<h2>Search results for: ' . $search . '</h2>'; } $o .= conversation($a, $r, 'search', false); $o .= paginate($a); return $o; }