diff options
Diffstat (limited to 'mod/search/index.php')
-rw-r--r-- | mod/search/index.php | 273 |
1 files changed, 0 insertions, 273 deletions
diff --git a/mod/search/index.php b/mod/search/index.php deleted file mode 100644 index 4da6f95ef..000000000 --- a/mod/search/index.php +++ /dev/null @@ -1,273 +0,0 @@ -<?php -/** - * Elgg search page - * - * @todo much of this code should be pulled out into a library of functions - */ - -// Search supports RSS -global $autofeed; -$autofeed = true; - -// $search_type == all || entities || trigger plugin hook -$search_type = get_input('search_type', 'all'); - -// @todo there is a bug in get_input that makes variables have slashes sometimes. -// XSS protection is more important that searching for HTML. -$query = stripslashes(get_input('q', get_input('tag', ''))); - -// get limit and offset. override if on search dashboard, where only 2 -// of each most recent entity types will be shown. -$limit = ($search_type == 'all') ? 2 : get_input('limit', 10); -$offset = ($search_type == 'all') ? 0 : get_input('offset', 0); - -$entity_type = get_input('entity_type', ELGG_ENTITIES_ANY_VALUE); -$entity_subtype = get_input('entity_subtype', ELGG_ENTITIES_ANY_VALUE); -$owner_guid = get_input('owner_guid', ELGG_ENTITIES_ANY_VALUE); -$container_guid = get_input('container_guid', ELGG_ENTITIES_ANY_VALUE); -$friends = get_input('friends', ELGG_ENTITIES_ANY_VALUE); -$sort = get_input('sort'); -switch ($sort) { - case 'relevance': - case 'created': - case 'updated': - case 'action_on': - case 'alpha': - break; - - default: - $sort = 'relevance'; - break; -} - -$order = get_input('sort', 'desc'); -if ($order != 'asc' && $order != 'desc') { - $order = 'desc'; -} - -// set up search params -$params = array( - 'query' => $query, - 'offset' => $offset, - 'limit' => $limit, - 'sort' => $sort, - 'order' => $order, - 'search_type' => $search_type, - 'type' => $entity_type, - 'subtype' => $entity_subtype, -// 'tag_type' => $tag_type, - 'owner_guid' => $owner_guid, - 'container_guid' => $container_guid, -// 'friends' => $friends - 'pagination' => ($search_type == 'all') ? FALSE : TRUE -); - -$types = get_registered_entity_types(); -$custom_types = elgg_trigger_plugin_hook('search_types', 'get_types', $params, array()); - -// add sidebar items for all and native types -// @todo should these maintain any existing type / subtype filters or reset? -$data = htmlspecialchars(http_build_query(array( - 'q' => $query, - 'entity_subtype' => $entity_subtype, - 'entity_type' => $entity_type, - 'owner_guid' => $owner_guid, - 'search_type' => 'all', - //'friends' => $friends -))); -$url = elgg_get_site_url() . "search?$data"; -$menu_item = new ElggMenuItem('all', elgg_echo('all'), $url); -elgg_register_menu_item('page', $menu_item); - -foreach ($types as $type => $subtypes) { - // @todo when using index table, can include result counts on each of these. - if (is_array($subtypes) && count($subtypes)) { - foreach ($subtypes as $subtype) { - $label = "item:$type:$subtype"; - - $data = htmlspecialchars(http_build_query(array( - 'q' => $query, - 'entity_subtype' => $subtype, - 'entity_type' => $type, - 'owner_guid' => $owner_guid, - 'search_type' => 'entities', - 'friends' => $friends - ))); - - $url = elgg_get_site_url()."search?$data"; - $menu_item = new ElggMenuItem($label, elgg_echo($label), $url); - elgg_register_menu_item('page', $menu_item); - } - } else { - $label = "item:$type"; - - $data = htmlspecialchars(http_build_query(array( - 'q' => $query, - 'entity_type' => $type, - 'owner_guid' => $owner_guid, - 'search_type' => 'entities', - 'friends' => $friends - ))); - - $url = elgg_get_site_url() . "search?$data"; - - $menu_item = new ElggMenuItem($label, elgg_echo($label), $url); - elgg_register_menu_item('page', $menu_item); - } -} - -// add sidebar for custom searches -foreach ($custom_types as $type) { - $label = "search_types:$type"; - - $data = htmlspecialchars(http_build_query(array( - 'q' => $query, - 'entity_subtype' => $entity_subtype, - 'entity_type' => $entity_type, - 'owner_guid' => $owner_guid, - 'search_type' => $type, - 'friends' => $friends - ))); - - $url = elgg_get_site_url()."search?$data"; - - $menu_item = new ElggMenuItem($label, elgg_echo($label), $url); - elgg_register_menu_item('page', $menu_item); -} - - -// check that we have an actual query -if (!$query) { - $body = elgg_view_title(elgg_echo('search:search_error')); - $body .= elgg_echo('search:no_query'); - $layout = elgg_view_layout('one_sidebar', array('content' => $body)); - echo elgg_view_page($title, $layout); - - return; -} - -// start the actual search -$results_html = ''; - -if ($search_type == 'all' || $search_type == 'entities') { - // to pass the correct current search type to the views - $current_params = $params; - $current_params['search_type'] = 'entities'; - - // foreach through types. - // if a plugin returns FALSE for subtype ignore it. - // if a plugin returns NULL or '' for subtype, pass to generic type search function. - // if still NULL or '' or empty(array()) no results found. (== don't show??) - foreach ($types as $type => $subtypes) { - if ($search_type != 'all' && $entity_type != $type) { - continue; - } - - if (is_array($subtypes) && count($subtypes)) { - foreach ($subtypes as $subtype) { - // no need to search if we're not interested in these results - // @todo when using index table, allow search to get full count. - if ($search_type != 'all' && $entity_subtype != $subtype) { - continue; - } - $current_params['subtype'] = $subtype; - $current_params['type'] = $type; - - $results = elgg_trigger_plugin_hook('search', "$type:$subtype", $current_params, NULL); - if ($results === FALSE) { - // someone is saying not to display these types in searches. - continue; - } elseif (is_array($results) && !count($results)) { - // no results, but results searched in hook. - } elseif (!$results) { - // no results and not hooked. use default type search. - // don't change the params here, since it's really a different subtype. - // Will be passed to elgg_get_entities(). - $results = elgg_trigger_plugin_hook('search', $type, $current_params, array()); - } - - if (is_array($results['entities']) && $results['count']) { - if ($view = search_get_search_view($current_params, 'list')) { - $results_html .= elgg_view($view, array( - 'results' => $results, - 'params' => $current_params, - )); - } - } - } - } - - // pull in default type entities with no subtypes - $current_params['type'] = $type; - $current_params['subtype'] = ELGG_ENTITIES_NO_VALUE; - - $results = elgg_trigger_plugin_hook('search', $type, $current_params, array()); - if ($results === FALSE) { - // someone is saying not to display these types in searches. - continue; - } - - if (is_array($results['entities']) && $results['count']) { - if ($view = search_get_search_view($current_params, 'list')) { - $results_html .= elgg_view($view, array( - 'results' => $results, - 'params' => $current_params, - )); - } - } - } -} - -// call custom searches -if ($search_type != 'entities' || $search_type == 'all') { - if (is_array($custom_types)) { - foreach ($custom_types as $type) { - if ($search_type != 'all' && $search_type != $type) { - continue; - } - - $current_params = $params; - $current_params['search_type'] = $type; - // custom search types have no subtype. - unset($current_params['subtype']); - - $results = elgg_trigger_plugin_hook('search', $type, $current_params, array()); - - if ($results === FALSE) { - // someone is saying not to display these types in searches. - continue; - } - - if (is_array($results['entities']) && $results['count']) { - if ($view = search_get_search_view($current_params, 'list')) { - $results_html .= elgg_view($view, array( - 'results' => $results, - 'params' => $current_params, - )); - } - } - } - } -} - -// highlight search terms -$searched_words = search_remove_ignored_words($query, 'array'); -$highlighted_query = search_highlight_words($searched_words, $query); - -$body = elgg_view_title(elgg_echo('search:results', array("\"$highlighted_query\""))); - -if (!$results_html) { - $body .= elgg_view('search/no_results'); -} else { - $body .= $results_html; -} - -// this is passed the original params because we don't care what actually -// matched (which is out of date now anyway). -// we want to know what search type it is. -$layout_view = search_get_search_view($params, 'layout'); -$layout = elgg_view($layout_view, array('params' => $params, 'body' => $body)); - -$title = elgg_echo('search:results', array("\"{$params['query']}\"")); - -echo elgg_view_page($title, $layout); |