diff options
Diffstat (limited to 'mod/search/index.php')
| -rw-r--r-- | mod/search/index.php | 123 | 
1 files changed, 110 insertions, 13 deletions
| diff --git a/mod/search/index.php b/mod/search/index.php index f9a96a60b..2927e6616 100644 --- a/mod/search/index.php +++ b/mod/search/index.php @@ -4,15 +4,15 @@  $search_type = get_input('search_type', 'all');  // @todo there is a bug in get_input that makes variables have slashes sometimes. -$query = sanitise_string(stripslashes(get_input('q', get_input('tag', '', FALSE), FALSE))); +$query = stripslashes(get_input('q', get_input('tag', '', FALSE), FALSE));  // 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', ''); +$entity_type = get_input('entity_type', NULL); +$entity_subtype = get_input('entity_subtype', NULL);  $owner_guid = get_input('owner_guid', NULL);  $friends = (int)get_input('friends', 0); @@ -22,17 +22,97 @@ $params = array(  	'offset' => $offset,  	'limit' => $limit,  	'search_type' => $search_type, -	'type' => $type, -	'subtype' => $subtype, -	'tag_type' => $tag_type, +	'type' => $entity_type, +	'subtype' => $entity_subtype, +//	'tag_type' => $tag_type,  	'owner_guid' => $owner_guid, -	'friends' => $friends +//	'friends' => $friends  );  $results_html = ''; -if ($search_type == 'entities' || $search_type == 'all') { -	$types = get_registered_entity_types(); +//$results_html .= elgg_view_title(elgg_echo('search:results')) . "<input type=\"text\" value=\"$query\" />"; +$results_html .= elgg_view_title(elgg_echo('search:results')); +$types = get_registered_entity_types(); +$custom_types = trigger_plugin_hook('search_types', 'get_types', $params, array()); + +// add submenu items for all and native types +// @todo should these maintain any existing type / subtype filters or reset? +$data = http_build_query(array( +	'q' => urlencode($query), +	'entity_subtype' => urlencode($subtype), +	'entity_type' => urlencode($type), +	'owner_guid' => urlencode($owner_guid), +	'search_type' => 'all', +	'friends' => $friends +)); +$url = "{$CONFIG->wwwroot}pg/search/?$data"; +add_submenu_item(elgg_echo('all'), $url); + +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 = http_build_query(array( +				'q' => urlencode($query), +				'entity_subtype' => urlencode($subtype), +				'entity_type' => urlencode($type), +				'owner_guid' => urlencode($owner_guid), +				'search_type' => 'entities', +				'friends' => $friends +			)); + +			$url = "{$CONFIG->wwwroot}pg/search/?$data"; + +			add_submenu_item(elgg_echo($label), $url); +		} +	} else { +		$label = "item:$type"; + +		$data = http_build_query(array( +			'q' => urlencode($query), +			'entity_type' => urlencode($type), +			'owner_guid' => urlencode($owner_guid), +			'search_type' => 'entities', +			'friends' => $friends +		)); + +		$url = "{$CONFIG->wwwroot}pg/search/?$data"; + +		add_submenu_item(elgg_echo($label), $url); +	} +} + +// add submenu for custom searches +foreach ($custom_types as $type) { +	$label = "search_types:$type"; + +	$data = http_build_query(array( +		'q' => urlencode($query), +		'entity_subtype' => $entity_subtype, +		'entity_type' => urlencode($entity_type), +		'owner_guid' => urlencode($owner_guid), +		'search_type' => $type, +		'friends' => $friends +	)); + +	$url = "{$CONFIG->wwwroot}pg/search/?$data"; + +	add_submenu_item(elgg_echo($label), $url); +} + +// check that we have an actual query +if (!$query) { +	$body .= "No query."; +	$layout = elgg_view_layout('two_column_left_sidebar', '', $body); +	page_draw($title, $layout); + +	return; +} + +if ($search_type == 'all' || $search_type == 'entities') {  	// to pass the correct search type to the views  	$params['search_type'] = 'entities'; @@ -41,8 +121,17 @@ if ($search_type == 'entities' || $search_type == 'all') {  	// 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; +				}  				$params['subtype'] = $subtype;  				$params['type'] = $type; @@ -83,12 +172,16 @@ if ($search_type == 'entities' || $search_type == 'all') {  }  // call custom searches -if ($search_type == 'all' || $search_type != 'entities') { +if ($search_type != 'entities' || $search_type == 'all') {  	// get custom search types  	$types = trigger_plugin_hook('search_types', 'get_types', $params, array());  	if (is_array($types)) {  		foreach ($types as $type) { +			if ($search_type != 'all' && $search_type != $type) { +				continue; +			} +  			$params['search_type'] = $type;  			unset($params['subtype']); @@ -115,11 +208,15 @@ if ($search_type == 'all' || $search_type != 'entities') {  call search_section_start to display long bar with types and titles  call search - -  */ -$layout = elgg_view_layout('two_column_left_sidebar', '', $results_html); +if (!$results_html) { +	$body = elgg_echo('search:no_results'); +} else { +	$body = $results_html; +} + +$layout = elgg_view_layout('two_column_left_sidebar', '', $body);  page_draw($title, $layout); | 
