aboutsummaryrefslogtreecommitdiff
path: root/mod/search/index.php
diff options
context:
space:
mode:
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>2009-11-06 01:46:36 +0000
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>2009-11-06 01:46:36 +0000
commit5d96c9b12fe0ea953ef95af952e588a1898ef1fc (patch)
tree0d4555c86b3d5c744f46cc37e0b7b45a106017e6 /mod/search/index.php
parent06169d33aae4d27129c77baaee9ecb064683e576 (diff)
downloadelgg-5d96c9b12fe0ea953ef95af952e588a1898ef1fc.tar.gz
elgg-5d96c9b12fe0ea953ef95af952e588a1898ef1fc.tar.bz2
Updated search for FTS.
git-svn-id: http://code.elgg.org/elgg/trunk@3619 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'mod/search/index.php')
-rw-r--r--mod/search/index.php296
1 files changed, 213 insertions, 83 deletions
diff --git a/mod/search/index.php b/mod/search/index.php
index 7cbf6121c..30f33f9f1 100644
--- a/mod/search/index.php
+++ b/mod/search/index.php
@@ -1,6 +1,136 @@
<?php
- /** Main search page */
+// $search_type == all || entities || trigger plugin hook
+$search_type = get_input('search_type', 'all');
+$query = sanitise_string(get_input('query', 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);
+
+$type = get_input('type', '');
+$subtype = get_input('subtype', '');
+$owner_guid = get_input('owner_guid', NULL);
+$friends = (int)get_input('friends', 0);
+
+// set up search params
+$params = array(
+ 'query' => $query,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'search_type' => $search_type,
+ 'type' => $type,
+ 'subtype' => $subtype,
+ 'tag_type' => $tag_type,
+ 'owner_guid' => $owner_guid,
+ 'friends' => $friends
+);
+
+$results_html = '';
+if ($search_type == 'entities' || $search_type == 'all') {
+ $types = get_registered_entity_types();
+
+ // to pass the correct search type to the views
+ $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 (is_array($subtypes) && count($subtypes)) {
+ foreach ($subtypes as $subtype) {
+ $params['subtype'] = $subtype;
+ $params['type'] = $type;
+
+ $entities = trigger_plugin_hook('search', "$type:$subtype", $params, NULL);
+ if ($entities === FALSE) {
+ // someone is saying not to display these types in searches.
+ continue;
+ } elseif (is_array($entities) && !count($entities)) {
+ // no results, but results searched in hook.
+ } elseif (!$entities) {
+ // 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 = trigger_plugin_hook('search', $type, $params, array());
+ }
+
+ if (is_array($results['entities']) && $results['count']) {
+ $results_html .= search_get_listing_html($results['entities'], $results['count'], $params);
+ }
+ }
+ }
+
+ // pull in default type entities with no subtypes
+ // @todo this might currently means "all entities regardless of subtype"
+ $params['type'] = $type;
+ $params['subtype'] = 0;
+
+ $results = trigger_plugin_hook('search', $type, $params, array());
+ if ($results === FALSE) {
+ // someone is saying not to display these types in searches.
+ continue;
+ }
+
+ if (is_array($results['entities']) && $results['count']) {
+ $results_html .= search_get_listing_html($results['entities'], $results['count'], $params);
+ }
+ }
+}
+
+// call custom searches
+if ($search_type == 'all' || $search_type != 'entities') {
+ // get custom search types
+ $types = trigger_plugin_hook('search_types', 'get_types', $params, array());
+
+ if (is_array($types)) {
+ foreach ($types as $type) {
+ $params['search_type'] = $type;
+ unset($params['subtype']);
+
+ $results = trigger_plugin_hook('search', $type, $params, array());
+
+ if ($results === FALSE) {
+ // someone is saying not to display these types in searches.
+ continue;
+ }
+
+ if (is_array($results['entities']) && $results['count']) {
+ $results_html .= search_get_listing_html($results['entities'], $results['count'], $params);
+ }
+ }
+ }
+}
+
+//if ($search_type !== 'all') {
+// var_dump('here');
+// $entities = trigger_plugin_hook('search', $search_type, '', $return);
+//}
+/*
+
+call search_section_start to display long bar with types and titles
+call search
+
+
+
+*/
+
+$layout = elgg_view_layout('single_column', '', $results_html);
+
+page_draw($title, $layout);
+
+
+
+
+
+
+
+return;
+
+
+/** Main search page */
global $CONFIG;
@@ -8,28 +138,25 @@ $tag = get_input('tag');
$offset = get_input('offset', 0);
$viewtype = get_input('search_viewtype','list');
if ($viewtype == 'gallery') {
- $limit = get_input('limit', 12); // 10 items in list view
+ $limit = get_input('limit', 12); // 10 items in list view
} else {
- $limit = get_input('limit', 10); // 12 items in gallery view
+ $limit = get_input('limit', 10); // 12 items in gallery view
}
$searchtype = get_input('searchtype', 'all');
-$object_type = get_input('object_type', '');
+$type = get_input('type', '');
$subtype = get_input('subtype', '');
$owner_guid = get_input('owner_guid', '');
$tagtype = get_input('tagtype', '');
$friends = (int)get_input('friends', 0);
+$title = sprintf(elgg_echo('searchtitle'), $tag);
-
-$title = sprintf(elgg_echo('searchtitle'), $tag);
-
-
-if (substr_count($owner_guid,',')) {
- $owner_guid_array = explode(",",$owner_guid);
+if (substr_count($owner_guid, ',')) {
+ $owner_guid_array = explode(',', $owner_guid);
} else {
$owner_guid_array = $owner_guid;
}
if ($friends > 0) {
- if ($friends = get_user_friends($friends,'',9999)) {
+ if ($friends = get_user_friends($friends, '', 9999)) {
$owner_guid_array = array();
foreach($friends as $friend) {
$owner_guid_array[] = $friend->guid;
@@ -40,107 +167,110 @@ if ($friends > 0) {
}
// Set up submenus
-if ($object_types = get_registered_entity_types()) {
-
- foreach($object_types as $ot => $subtype_array) {
- if (is_array($subtype_array) && sizeof($subtype_array))
+if ($types = get_registered_entity_types()) {
+ foreach($types as $ot => $subtype_array) {
+ if (is_array($subtype_array) && count($subtype_array)) {
foreach($subtype_array as $object_subtype) {
$label = 'item:' . $ot;
- if (!empty($object_subtype)) $label .= ':' . $object_subtype;
- add_submenu_item(elgg_echo($label), $CONFIG->wwwroot . "pg/search/?tag=". urlencode($tag) ."&subtype=" . $object_subtype . "&object_type=". urlencode($ot) ."&tagtype=" . urlencode($md_type) . "&owner_guid=" . urlencode($owner_guid));
+ if (!empty($object_subtype)) {
+ $label .= ':' . $object_subtype;
+ }
+
+ $data = http_build_query(array(
+ 'tag' => urlencode($tag),
+ 'subtype' => $object_subtype,
+ 'type' => urlencode($ot),
+ //'tagtype' => urlencode($md_type),
+ 'owner_guid' => urlencode($owner_guid)
+ ));
+
+ $url = "{$CONFIG->wwwroot}pg/search/?$data";
+
+ add_submenu_item(elgg_echo($label), $url);
}
+ }
}
- add_submenu_item(elgg_echo('all'), $CONFIG->wwwroot . "pg/search/?tag=". urlencode($tag) ."&owner_guid=" . urlencode($owner_guid));
-
+
+ $data = http_build_query(array(
+ 'tag' => urlencode($tag),
+ 'owner_guid' => urlencode($owner_guid)
+ ));
+
+ add_submenu_item(elgg_echo('all'), "{$CONFIG->wwwroot}pg/search/?$data");
+}
+
+// pull in search types for external or aggregated searches.
+if ($search_types = trigger_plugin_hook('search', 'types', '', NULL, array())) {
+
}
$body = '';
if (!empty($tag)) {
+ // start with blank results.
+ $results = array(
+ 'entities' => array(),
+ 'total' => 0
+ );
+
+ // do the actual searchts
+ $params = array(
+ 'tag' => $tag,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'searchtype' => $searchtype,
+ 'type' => $type,
+ 'subtype' => $subtype,
+ 'tagtype' => $tagtype,
+ 'owner_guid' => $owner_guid_array
+ );
+
+ $results = trigger_plugin_hook('search', 'entities', $params, $results);
- // blank the results to start off
- $results = new stdClass();
- $results->entities = array();
- $results->total = 0;
-
- // do the actual search
- $results = trigger_plugin_hook('search:entities', '', array('tag' => $tag,
- 'offset' => $offset,
- 'limit' => $limit,
- 'searchtype' => $searchtype,
- 'object_type' => $object_type,
- 'subtype' => $subtype,
- 'tagtype' => $tagtype,
- 'owner_guid' => $owner_guid_array
- ),
- $results);
-
- /* // this piece is for future work, to setup submenus for searchtypes
- $searchtypes = trigger_plugin_hook('search:types', '', NULL, array());
- add_submenu_item(elgg_echo('search:type:all'),
- $CONFIG->wwwroot . "pg/search/?tag=". urlencode($tag) ."&searchtype=all");
-
- foreach ($searchtypes as $st) {
- add_submenu_item(elgg_echo('search:type:' . $st),
- $CONFIG->wwwroot . "pg/search/?tag=". urlencode($tag) ."&searchtype=" . $st);
- }
- */
-
-
- if (empty($objecttype) && empty($subtype)) {
- $title = sprintf(elgg_echo('searchtitle'),$tag);
+ if (empty($type) && empty($subtype)) {
+ $title = sprintf(elgg_echo('searchtitle'),$tag);
} else {
- if (empty($objecttype)) $objecttype = 'object';
- $itemtitle = 'item:' . $objecttype;
- if (!empty($subtype)) $itemtitle .= ':' . $subtype;
+ if (empty($type)) {
+ $type = 'object';
+ }
+ $itemtitle = 'item:' . $type;
+ if (!empty($subtype)) {
+ $itemtitle .= ':' . $subtype;
+ }
$itemtitle = elgg_echo($itemtitle);
$title = sprintf(elgg_echo('advancedsearchtitle'),$itemtitle,$tag);
}
-
-
-
-
- //print_r($results);
$body .= elgg_view_title($title); // elgg_view_title(sprintf(elgg_echo('searchtitle'),$tag));
// call the old (now-deprecated) search hook here
$body .= trigger_plugin_hook('search','',$tag, '');
- $body .= elgg_view('search/startblurb', array('tag' => $tag));
+ $body .= elgg_view('search/startblurb', array('query' => $query));
if ($results->total > 0) {
-
-
- $body .= elgg_view('search/entity_list', array('entities' => $results->entities,
- 'count' => $results->total,
- 'offset' => $offset,
- 'limit' => $limit,
- 'baseurl' => $_SERVER['REQUEST_URI'],
- 'fullview' => false,
- 'context' => 'search',
- 'viewtypetoggle' => true,
- 'viewtype' => $viewtype,
- 'pagination' => true
- ));
+ $body .= elgg_view('search/entity_list', array(
+ 'entities' => $results->entities,
+ 'count' => $results->total,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'baseurl' => $_SERVER['REQUEST_URI'],
+ 'fullview' => false,
+ 'context' => 'search',
+ 'viewtypetoggle' => true,
+ 'viewtype' => $viewtype,
+ 'pagination' => true
+ ));
} else {
- $body .= elgg_view('page_elements/contentwrapper', array('body' => elgg_echo('search:noresults')));
+ $body .= elgg_view('page_elements/contentwrapper', array('body' => elgg_echo('search:noresults')));
}
-
-
-
elgg_view_entity_list($results->entities, count($results->entities), 0, count($results->entities), false);
} else {
// if no tag was given, give the user a box to input a search term
$body .= elgg_view_title(elgg_echo('search:enterterm'));
$body .= elgg_view('page_elements/contentwrapper', array('body' => '<div>' . elgg_view('page_elements/searchbox') . '</div>'));
-
-
}
-$layout = elgg_view_layout('two_column_left_sidebar','',$body);
-
-
-page_draw($title, $layout);
+$layout = elgg_view_layout('two_column_left_sidebar','',$body);
-?> \ No newline at end of file
+page_draw($title, $layout); \ No newline at end of file