diff options
author | brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2009-10-22 18:20:10 +0000 |
---|---|---|
committer | brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2009-10-22 18:20:10 +0000 |
commit | b36bf0e97e8dfbf2dcd07d4173392a3dcfbc2df0 (patch) | |
tree | eadba4e265c097359389b866919201858c5ffdd5 | |
parent | cb01252489f233535e2057457cfe90920f82f96d (diff) | |
download | elgg-b36bf0e97e8dfbf2dcd07d4173392a3dcfbc2df0.tar.gz elgg-b36bf0e97e8dfbf2dcd07d4173392a3dcfbc2df0.tar.bz2 |
Pulling in MITRE's search core. Fo'rizzle this time. Yo.
git-svn-id: http://code.elgg.org/elgg/trunk@3572 36083f99-b078-4883-b0ff-0f9b5a30f544
24 files changed, 773 insertions, 453 deletions
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 7a10cd809..2b2180532 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -724,7 +724,7 @@ function elgg_view_entity_list($entities, $count, $offset, $limit, $fullview = t $context = get_context(); - $html = elgg_view('search/entity_list',array( + $html = elgg_view('entities/entity_list',array( 'entities' => $entities, 'count' => $count, 'offset' => $offset, @@ -992,7 +992,7 @@ function elgg_count_comments($entity) { * @return string The HTML (etc) representing the listing */ function elgg_view_listing($icon, $info) { - return elgg_view('search/listing',array('icon' => $icon, 'info' => $info)); + return elgg_view('entities/entity_listing',array('icon' => $icon, 'info' => $info)); } /** diff --git a/engine/lib/entities.php b/engine/lib/entities.php index 373654431..7fe849421 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -63,6 +63,13 @@ abstract class ElggEntity implements */ protected $temp_annotations; + + /** + * Volatile data structure for this object, allows for storage of data + * in-memory that isn't sync'd back to the metadata table. + */ + protected $volatile; + /** * Initialise the attributes array. * This is vital to distinguish between metadata and base parameters. @@ -84,6 +91,9 @@ abstract class ElggEntity implements if (!is_array($this->temp_annotations)) { $this->temp_annotations = array(); } + if (!is_array($this->volatile)) { + $this->volatile = array(); + } $this->attributes['guid'] = ""; $this->attributes['type'] = ""; @@ -325,6 +335,35 @@ abstract class ElggEntity implements } } + + /** + * Get a piece of volatile (non-persisted) data on this entity + */ + public function getVolatileData($name) { + if (!is_array($this->volatile)) { + $this->volatile = array(); + } + + if (array_key_exists($name, $this->volatile)) { + return $this->volatile[$name]; + } else { + return NULL; + } + } + + + /** + * Set a piece of volatile (non-persisted) data on this entity + */ + public function setVolatileData($name, $value) { + if (!is_array($this->volatile)) { + $this->volatile = array(); + } + + $this->volatile[$name] = $value; + } + + /** * Remove all entities associated with this entity * diff --git a/engine/lib/search.php b/engine/lib/search.php deleted file mode 100644 index 0f6c0a12d..000000000 --- a/engine/lib/search.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php -/** - * Elgg search helper functions. - * - * @package Elgg - * @subpackage Core - * @author Curverider Ltd <info@elgg.com> - * @link http://elgg.org/ - */ - -/** - * Initialise search helper functions. - * - */ -function search_init() { - register_page_handler('search','search_page_handler'); -} - -/** - * Page handler for search - * - * @param array $page Page elements from pain page handler - */ -function search_page_handler($page) { - global $CONFIG; - - if(!get_input('tag')) { - set_input('tag', $page[0]); - } - - if (isset($page[0])) { - switch ($page[0]) { - case 'user' : - case 'users' : - include_once($CONFIG->path . "search/users.php"); - break; - - case 'group' : - case 'groups' : - include_once($CONFIG->path . "search/groups.php"); - break; - - default: - include_once($CONFIG->path . "search/index.php"); - } - } else { - include_once($CONFIG->path . "search/index.php"); - } -} - -/** Register init system event **/ -register_elgg_event_handler('init','system','search_init');
\ No newline at end of file diff --git a/mod/search/index.php b/mod/search/index.php new file mode 100644 index 000000000..7cbf6121c --- /dev/null +++ b/mod/search/index.php @@ -0,0 +1,146 @@ +<?php + + /** Main search page */ + +global $CONFIG; + +$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 +} else { + $limit = get_input('limit', 10); // 12 items in gallery view +} +$searchtype = get_input('searchtype', 'all'); +$object_type = get_input('object_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); + + +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)) { + $owner_guid_array = array(); + foreach($friends as $friend) { + $owner_guid_array[] = $friend->guid; + } + } else { + $owner_guid = -1; + } +} + +// 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)) + 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)); + } + } + add_submenu_item(elgg_echo('all'), $CONFIG->wwwroot . "pg/search/?tag=". urlencode($tag) ."&owner_guid=" . urlencode($owner_guid)); + +} + +$body = ''; +if (!empty($tag)) { + + // 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); + } else { + if (empty($objecttype)) $objecttype = 'object'; + $itemtitle = 'item:' . $objecttype; + 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)); + + 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 + )); + } else { + $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); + + +?>
\ No newline at end of file diff --git a/mod/search/languages/en.php b/mod/search/languages/en.php new file mode 100644 index 000000000..52c29c7ed --- /dev/null +++ b/mod/search/languages/en.php @@ -0,0 +1,10 @@ +<?php + + $language_array = array('search:enterterm' => 'Enter a search term:', + 'search:noresults' => 'No results.', + 'search:matched' => 'Matched: ' + ); + +add_translation('en', $language_array); + +?> diff --git a/mod/search/manifest.xml b/mod/search/manifest.xml new file mode 100644 index 000000000..1f8415445 --- /dev/null +++ b/mod/search/manifest.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<plugin_manifest> + <field key="author" value="Curverider Ltd, The MITRE Corporation" /> + <field key="version" value="1.7" /> + <field key="description" value="Allow search across entities of the site" /> + <field key="website" value="http://www.elgg.org/" /> + <field key="copyright" value="(C) Curverider 2008-2009, MITRE 2009" /> + <field key="licence" value="GNU Public License version 2" /> + <field key="elgg_version" value="2009030702" /> +</plugin_manifest>
\ No newline at end of file diff --git a/mod/search/start.php b/mod/search/start.php new file mode 100644 index 000000000..24b038c7a --- /dev/null +++ b/mod/search/start.php @@ -0,0 +1,116 @@ +<?php + + /** + * Elgg core search. + * + * @package Elgg + * @subpackage Core + * @author Curverider Ltd <info@elgg.com>, The MITRE Corporation <http://www.mitre.org> + * @link http://elgg.org/ + */ + +/** + * Initialise search helper functions. + * + */ +function search_init() { + global $CONFIG; + + // page handler for search actions and results + register_page_handler('search','search_page_handler'); + + // hook into the search callback to use the metadata system (this is the part that will go away!) + register_plugin_hook('search:entities', 'all', 'search_original_hook'); + + // list of available search types should include our base parts + register_plugin_hook('searchtypes', 'all', 'search_base_search_types_hook'); + + // add in CSS for search elements + extend_view('css', 'search/css'); +} + +/** + * Page handler for search + * + * @param array $page Page elements from pain page handler + */ +function search_page_handler($page) { + global $CONFIG; + + if(!get_input('tag')) { + set_input('tag', $page[0]); + } + + include_once($CONFIG->path . "mod/search/index.php"); +} + +/** + * Core search hook. + * Returns an object with two parts: + * ->entities: an array of instantiated entities that have been decorated with + * volatile "search" data indicating what they matched. These are + * the entities to be displayed to the user on this page. + * ->total: total number of entities overall. This function can update this + * limit to ask for more pages in the pagination. + */ +function search_original_hook($hook, $type, $returnvalue, $params) { + $tag = $params['tag']; + $offset = $params['offset']; // starting page + $limit = $params['limit']; // number per page + $searchtype = $params['searchtype']; // the search type we're looking for + $object_type = $params['object_type']; + $subtype = $params['subtype']; + $owner_guid = $params['owner_guid']; + $tagtype = $params['tagtype']; + + $count = get_entities_from_metadata($tagtype, elgg_strtolower($tag), $object_type, $subtype, $owner_guid, $limit, $offset, "", 0, TRUE, FALSE); + $ents = get_entities_from_metadata($tagtype, elgg_strtolower($tag), $object_type, $subtype, $owner_guid, $limit, $offset, "", 0, FALSE, FALSE); + + /* + * Foreach entity + * get the metadata keys + * If the value matches, hang onto the key + * add all the matched keys to VolatileData + * This tells us *why* each entity matched + */ + foreach ($ents as $ent) { + $metadata = get_metadata_for_entity($ent->getGUID()); + $matched = array(); + if ($metadata) { + foreach ($metadata as $tuple) { + if ($tag === $tuple->value) { + // This is one of the matching elements + $matched[] = $tuple->name; + } + } + $ent->setVolatileData('search', $matched); + } + } + + // merge in our entities with any coming in from elsewhere + $returnvalue->entities = array_merge($returnvalue->entities, $ents); + + // expand the total entity count if necessary + if ($count > $returnvalue->total) { + $returnvalue->total = $count; + } + + return $returnvalue; +} + +/** + * return our base search types (right now, we have none) + */ +function search_base_search_types_hook($hook, $type, $returnvalue, $params) { + if (!is_array($returnvalue)) { + $returnvalue = array(); + } + + return $returnvalue; +} + +/** Register init system event **/ + +register_elgg_event_handler('init','system','search_init'); + +?> diff --git a/mod/search/views/default/page_elements/searchbox.php b/mod/search/views/default/page_elements/searchbox.php new file mode 100644 index 000000000..4bab36be9 --- /dev/null +++ b/mod/search/views/default/page_elements/searchbox.php @@ -0,0 +1,4 @@ +<form id="searchform" action="<?php echo $vars['url']; ?>pg/search/" method="get"> + <input type="text" size="21" name="tag" value="<?php echo elgg_echo('search'); ?>" onclick="if (this.value=='<?php echo elgg_echo('search'); ?>') { this.value='' }" class="search_input" /> + <input type="submit" value="<?php echo elgg_echo('search:go'); ?>" class="search_submit_button" /> +</form> diff --git a/mod/search/views/default/search/css.php b/mod/search/views/default/search/css.php new file mode 100644 index 000000000..27b532727 --- /dev/null +++ b/mod/search/views/default/search/css.php @@ -0,0 +1,67 @@ +.searchtype { +background: #FFFACD; +color: black; +} + +.searchtypes { +border: 1px #EEEEEE solid; +padding: 4px; +margin: 6px; +} + +#searchform input.search_input { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + background-color:#FFFFFF; + border:1px solid #BBBBBB; + color:#999999; + font-size:12px; + font-weight:bold; + margin:0pt; + padding:2px; + width:180px; + height:12px; +} +#searchform input.search_submit_button { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + color:#333333; + background: #cccccc; + border:none; + font-size:12px; + font-weight:bold; + margin:0px; + padding:2px; + width:auto; + height:18px; + cursor:pointer; +} +#searchform input.search_submit_button:hover { + color:#ffffff; + background: #4690d6; +} + + +.search_listing { + display: block; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + background:white; + margin:0 10px 5px 10px; + padding:5px; +} + +.entity_gallery_item .search_listing { + background: none; + text-align: center; +} + +/* override the entity container piece */ +.search_listing .entity_listing { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + background: transparent; + margin: 0; + padding: 0; +} + diff --git a/views/default/search/entity_list.php b/mod/search/views/default/search/entity_list.php index 07e76e955..d709210df 100644 --- a/views/default/search/entity_list.php +++ b/mod/search/views/default/search/entity_list.php @@ -1,64 +1,66 @@ -<?php
-/**
- * @package Elgg
- * @author Curverider
- * @link http://elgg.com/
- */
-
-$context = $vars['context'];
-$offset = $vars['offset'];
-$entities = $vars['entities'];
-$limit = $vars['limit'];
-$count = $vars['count'];
-$baseurl = $vars['baseurl'];
-$context = $vars['context'];
-$viewtype = $vars['viewtype'];
-$pagination = $vars['pagination'];
-$fullview = $vars['fullview'];
-
-$html = "";
-$nav = "";
-
-if (isset($vars['viewtypetoggle'])) {
- $viewtypetoggle = $vars['viewtypetoggle'];
-} else {
- $viewtypetoggle = true;
-}
-
-if ($context == "search" && $count > 0 && $viewtypetoggle) {
- $nav .= elgg_view("navigation/viewtype",array(
- 'baseurl' => $baseurl,
- 'offset' => $offset,
- 'count' => $count,
- 'viewtype' => $viewtype,
- ));
-}
-
-if ($pagination) {
- $nav .= elgg_view('navigation/pagination',array(
- 'baseurl' => $baseurl,
- 'offset' => $offset,
- 'count' => $count,
- 'limit' => $limit,
- ));
-}
-
-$html .= $nav;
-
-if ($viewtype == "list") {
- if (is_array($entities) && sizeof($entities) > 0) {
- foreach($entities as $entity) {
- $html .= elgg_view_entity($entity, $fullview);
- }
- }
-} else {
- if (is_array($entities) && sizeof($entities) > 0) {
- $html .= elgg_view("search/gallery",array('entities' => $entities));
- }
-}
-
-if ($count) {
- $html .= $nav;
-}
-
-echo $html;
\ No newline at end of file +<?php +$context = $vars['context']; +$offset = $vars['offset']; +$entities = $vars['entities']; +$limit = $vars['limit']; +$count = $vars['count']; +$baseurl = $vars['baseurl']; +$context = $vars['context']; +$viewtype = $vars['viewtype']; +$pagination = $vars['pagination']; +$fullview = $vars['fullview']; + +$html = ""; +$nav = ""; +if (isset($vars['viewtypetoggle'])) { + $viewtypetoggle = $vars['viewtypetoggle']; +} else { + $viewtypetoggle = true; +} + +if ($context == "search" && $count > 0 && $viewtypetoggle) { + $nav .= elgg_view("navigation/viewtype",array( + + 'baseurl' => $baseurl, + 'offset' => $offset, + 'count' => $count, + 'viewtype' => $viewtype, + + )); +} + +if ($pagination) + $nav .= elgg_view('navigation/pagination',array( + + 'baseurl' => $baseurl, + 'offset' => $offset, + 'count' => $count, + 'limit' => $limit, + + )); + +$html .= $nav; + +if ($viewtype == "list") { + if (is_array($entities) && sizeof($entities) > 0) { + foreach($entities as $entity) { + // print out the entity + $ev = elgg_view_entity($entity, $fullview); + // then add the search decorations around it + $html .= elgg_view('search/listing', array('entity_view' => $ev, + 'search_types' => $entity->getVolatileData('search'))); + + } + } +} else if ($viewtype == "gallery") { + if (is_array($entities) && sizeof($entities) > 0) { + $html .= elgg_view("search/gallery",array('entities' => $entities)); + } +} + +if ($count) { + $html .= $nav; +} +echo $html; + +?> diff --git a/mod/search/views/default/search/gallery.php b/mod/search/views/default/search/gallery.php new file mode 100644 index 000000000..753a38684 --- /dev/null +++ b/mod/search/views/default/search/gallery.php @@ -0,0 +1,55 @@ +<?php + + /** + * Elgg gallery view + * + * @package Elgg + * @subpackage Core + + * @author Curverider Ltd + + * @link http://elgg.org/ + */ + + $entities = $vars['entities']; + if (is_array($entities) && sizeof($entities) > 0) { + +?> + + <table class="entity_gallery"> + +<?php + + $col = 0; + foreach($entities as $entity) { + if ($col == 0) { + + echo "<tr>"; + + } + echo "<td class=\"entity_gallery_item\">"; + + $ev = elgg_view_entity($entity, $fullview); + + echo elgg_view('search/listing', array('entity_view' => $ev, + 'search_types' => $entity->getVolatileData('search'))); + + + echo "</td>"; + $col++; + if ($col > 3) { + echo "</tr>"; + $col = 0; + } + } + if ($col > 0) echo "</tr>"; + +?> + + </table> + +<?php + + } + +?>
\ No newline at end of file diff --git a/mod/search/views/default/search/gallery_listing.php b/mod/search/views/default/search/gallery_listing.php new file mode 100644 index 000000000..bbecaf202 --- /dev/null +++ b/mod/search/views/default/search/gallery_listing.php @@ -0,0 +1,16 @@ +<?php +/** + * Elgg search listing: gallery view + * + * DEPRECATED VIEW: use entities/gallery_listing instead + * + * @package Elgg + * @subpackage Core + * @author Curverider Ltd + * @link http://elgg.org/ + */ + + + echo elgg_view('entities/gallery_listing', $vars); + +?>
\ No newline at end of file diff --git a/mod/search/views/default/search/listing.php b/mod/search/views/default/search/listing.php new file mode 100644 index 000000000..e3ad91ba8 --- /dev/null +++ b/mod/search/views/default/search/listing.php @@ -0,0 +1,35 @@ +<?php + + /** + * Elgg search listing + * + * @package Elgg + * @subpackage Core + + * @author Curverider Ltd + + * @link http://elgg.org/ + */ + +?> + + <div class="search_listing"> + +<?php + +echo $vars['entity_view']; + +if ($vars['search_types'] && is_array($vars['search_types'])) { + echo '<div class="searchtypes">' . elgg_echo('search:matched'); + foreach ($vars['search_types'] as $st) { + echo '<span class="searchtype">' . elgg_echo($st) . '</span> '; + } + echo '</div>'; + +} + + + + +?> + </div> diff --git a/views/default/search/startblurb.php b/mod/search/views/default/search/startblurb.php index 7c78cbf16..0115438f2 100644 --- a/views/default/search/startblurb.php +++ b/mod/search/views/default/search/startblurb.php @@ -1,15 +1,15 @@ -<?php
-/**
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
- * @link http://elgg.org/
- */
-?>
-<div class="contentWrapper">
- <?php
-
- echo sprintf(elgg_echo("tag:search:startblurb"),$vars['tag']);
-
- ?>
+<?php +/** + * @package Elgg + * @subpackage Core + * @author Curverider Ltd + * @link http://elgg.org/ + */ +?> +<div class="contentWrapper"> + <?php + + echo sprintf(elgg_echo("tag:search:startblurb"),$vars['tag']); + + ?> </div>
\ No newline at end of file diff --git a/search/groups.php b/search/groups.php deleted file mode 100644 index c31e421f0..000000000 --- a/search/groups.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php
-/**
- * Generic search viewer
- * Given a GUID, this page will try and display any entity
- *
- * @package Elgg
- * @subpackage Core - * @author Curverider Ltd - * @link http://elgg.org/
- */
-
-// Load Elgg engine
-require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
-// Set context
-set_context('search');
-
-// Get input
-$tag = stripslashes(get_input('tag'));
-
-if (!empty($tag)) {
- $title = sprintf(elgg_echo('groups:searchtitle'),$tag);
- $body = "";
- $body .= elgg_view_title($title); // elgg_view_title(sprintf(elgg_echo('searchtitle'),$tag));
- $body .= elgg_view('group/search/startblurb',array('tag' => $tag));
- $body .= list_group_search($tag);
- //$body = elgg_view_layout('two_column_left_sidebar','',$body);
-} else {
- $title = elgg_echo('item:group');
- $body .= elgg_view_title($title);
- $body .= list_entities('groups');
-}
-
-$body = elgg_view_layout('two_column_left_sidebar','',$body);
-page_draw($title,$body);
\ No newline at end of file diff --git a/search/index.php b/search/index.php deleted file mode 100644 index 9ae3533d6..000000000 --- a/search/index.php +++ /dev/null @@ -1,85 +0,0 @@ -<?php
-/**
- * Generic search viewer
- * Given a GUID, this page will try and display any entity
- *
- * @package Elgg
- * @subpackage Core - * @author Curverider Ltd - * @link http://elgg.org/
- */
-
-// Load Elgg engine
-require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
-// Set context
-set_context('search');
-
-// Get input
-$tag = stripslashes(get_input('tag'));
-$subtype = stripslashes(get_input('subtype'));
-if (!$objecttype = stripslashes(get_input('object'))) {
- $objecttype = "";
-}
-if (!$md_type = stripslashes(get_input('tagtype'))) {
- $md_type = "";
-}
-$owner_guid = (int)get_input('owner_guid',0);
-if (substr_count($owner_guid,',')) {
- $owner_guid_array = explode(",",$owner_guid);
-} else {
- $owner_guid_array = $owner_guid;
-}
-$friends = (int) get_input('friends',0);
-if ($friends > 0) {
- if ($friends = get_user_friends($friends,'',9999)) {
- $owner_guid_array = array();
- foreach($friends as $friend) {
- $owner_guid_array[] = $friend->guid;
- }
- } else {
- $owner_guid = -1;
- }
-}
-
-// Set up submenus
-if ($object_types = get_registered_entity_types()) {
- foreach($object_types as $object_type => $subtype_array) {
- if (is_array($subtype_array) && sizeof($subtype_array))
- foreach($subtype_array as $object_subtype) {
- $label = 'item:' . $object_type;
- if (!empty($object_subtype)) {
- $label .= ':' . $object_subtype;
- }
- global $CONFIG;
- add_submenu_item(elgg_echo($label), $CONFIG->wwwroot . "pg/search/?tag=". urlencode($tag) ."&subtype=" . $object_subtype . "&object=". urlencode($object_type) ."&tagtype=" . urlencode($md_type) . "&owner_guid=" . urlencode($owner_guid));
- }
- }
- add_submenu_item(elgg_echo('all'), $CONFIG->wwwroot . "pg/search/?tag=". urlencode($tag) ."&owner_guid=" . urlencode($owner_guid));
-
-}
-
-if (empty($objecttype) && empty($subtype)) {
- $title = sprintf(elgg_echo('searchtitle'),$tag);
-} else {
- if (empty($objecttype)) {
- $objecttype = 'object';
- }
- $itemtitle = 'item:' . $objecttype;
- if (!empty($subtype)) {
- $itemtitle .= ':' . $subtype;
- }
- $itemtitle = elgg_echo($itemtitle);
- $title = sprintf(elgg_echo('advancedsearchtitle'),$itemtitle,$tag);
-}
-
-if (!empty($tag)) {
- $body = "";
- $body .= elgg_view_title($title); // elgg_view_title(sprintf(elgg_echo('searchtitle'),$tag));
- $body .= trigger_plugin_hook('search','',$tag,"");
- $body .= elgg_view('search/startblurb',array('tag' => $tag));
- $body .= list_entities_from_metadata($md_type, elgg_strtolower($tag), $objecttype, $subtype, $owner_guid_array, 10, false, false);
- $body = elgg_view_layout('two_column_left_sidebar','',$body);
-}
-
-page_draw($title,$body);
\ No newline at end of file diff --git a/search/users.php b/search/users.php deleted file mode 100644 index 62296e7e7..000000000 --- a/search/users.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php
-/**
- * Generic search viewer
- * Given a GUID, this page will try and display any entity
- *
- * @package Elgg
- * @subpackage Core - * @author Curverider Ltd - * @link http://elgg.org/
- */
-
-// Load Elgg engine
-require_once(dirname(dirname(__FILE__)) . "/engine/start.php"); -
-// Set context
-set_context('search');
-
-// Get input
-$tag = stripslashes(get_input('tag'));
-
-if (!empty($tag)) {
- $title = sprintf(elgg_echo('users:searchtitle'),$tag);
- $body = "";
- $body .= elgg_view_title($title); // elgg_view_title(sprintf(elgg_echo('searchtitle'),$tag));
- $body .= elgg_view('user/search/startblurb',array('tag' => $tag));
- $body .= list_user_search($tag);
- //$body = elgg_view_layout('two_column_left_sidebar','',$body);
-} else {
- $title = elgg_echo('item:user');
- $body .= elgg_view_title($title);
- $body .= list_entities('user');
-}
-
-$body = elgg_view_layout('two_column_left_sidebar','',$body);
-page_draw($title,$body);
\ No newline at end of file diff --git a/views/default/css.php b/views/default/css.php index feca46216..da91e07a8 100644 --- a/views/default/css.php +++ b/views/default/css.php @@ -560,37 +560,6 @@ HORIZONTAL ELGG TOPBAR display:none; position:relative; } -#searchform input.search_input { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - background-color:#FFFFFF; - border:1px solid #BBBBBB; - color:#999999; - font-size:12px; - font-weight:bold; - margin:0pt; - padding:2px; - width:180px; - height:12px; -} -#searchform input.search_submit_button { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - color:#333333; - background: #cccccc; - border:none; - font-size:12px; - font-weight:bold; - margin:0px; - padding:2px; - width:auto; - height:18px; - cursor:pointer; -} -#searchform input.search_submit_button:hover { - color:#ffffff; - background: #4690d6; -} /* *************************************** @@ -1274,9 +1243,9 @@ p.user_menu_friends_of { } /* *************************************** - SEARCH LISTINGS + ENTITY LISTINGS *************************************** */ -.search_listing { +.entity_listing { display: block; -webkit-border-radius: 8px; -moz-border-radius: 8px; @@ -1284,80 +1253,80 @@ p.user_menu_friends_of { margin:0 10px 5px 10px; padding:5px; } -.search_listing_icon { +.entity_listing_icon { float:left; } -.search_listing_icon img { +.entity_listing_icon img { width: 40px; } -.search_listing_icon .avatar_menu_button img { +.entity_listing_icon .avatar_menu_button img { width: 15px; } -.search_listing_info { +.entity_listing_info { margin-left: 50px; min-height: 40px; } /* IE 6 fix */ -* html .search_listing_info { +* html .entity_listing_info { height:40px; } -.search_listing_info p { +.entity_listing_info p { margin:0 0 3px 0; line-height:1.2em; } -.search_listing_info p.owner_timestamp { +.entity_listing_info p.owner_timestamp { margin:0; padding:0; color:#666666; font-size: 90%; } -table.search_gallery { +table.entity_gallery { border-spacing: 10px; margin:0 0 0 0; } -.search_gallery td { +.entity_gallery td { padding: 5px; } -.search_gallery_item { +.entity_gallery_item { background: white; -webkit-border-radius: 8px; -moz-border-radius: 8px; width:170px; } -.search_gallery_item:hover { +.entity_gallery_item:hover { background: black; color:white; } -.search_gallery_item .search_listing { +.entity_gallery_item .entity_listing { background: none; text-align: center; } -.search_gallery_item .search_listing_header { +.entity_gallery_item .entity_listing_header { text-align: center; } -.search_gallery_item .search_listing_icon { +.entity_gallery_item .entity_listing_icon { position: relative; text-align: center; } -.search_gallery_item .search_listing_info { +.entity_gallery_item .entity_listing_info { margin: 5px; } -.search_gallery_item .search_listing_info p { +.entity_gallery_item .entity_listing_info p { margin: 5px; margin-bottom: 10px; } -.search_gallery_item .search_listing { +.entity_gallery_item .entity_listing { background: none; text-align: center; } -.search_gallery_item .search_listing_icon { +.entity_gallery_item .entity_listing_icon { position: absolute; margin-bottom: 20px; } -.search_gallery_item .search_listing_info { +.entity_gallery_item .entity_listing_info { margin: 5px; } -.search_gallery_item .search_listing_info p { +.entity_gallery_item .entity_listing_info p { margin: 5px; margin-bottom: 10px; } @@ -2376,7 +2345,7 @@ h3.settings { .admin_statistics table tr:hover { background: #E4E4E4; } -.admin_users_online .search_listing { +.admin_users_online .entity_listing { margin:0 0 5px 0; padding:5px; border:2px solid #cccccc; diff --git a/views/default/entities/entity_list.php b/views/default/entities/entity_list.php new file mode 100644 index 000000000..81fd102e3 --- /dev/null +++ b/views/default/entities/entity_list.php @@ -0,0 +1,62 @@ +<?php + + $context = $vars['context']; + $offset = $vars['offset']; + $entities = $vars['entities']; + $limit = $vars['limit']; + $count = $vars['count']; + $baseurl = $vars['baseurl']; + $context = $vars['context']; + $viewtype = $vars['viewtype']; + $pagination = $vars['pagination']; + $fullview = $vars['fullview']; + + $html = ""; + $nav = ""; + + if (isset($vars['viewtypetoggle'])) { + $viewtypetoggle = $vars['viewtypetoggle']; + } else { + $viewtypetoggle = true; + } + + if ($context == "search" && $count > 0 && $viewtypetoggle) { + $nav .= elgg_view("navigation/viewtype",array( + + 'baseurl' => $baseurl, + 'offset' => $offset, + 'count' => $count, + 'viewtype' => $viewtype, + + )); + } + + if ($pagination) + $nav .= elgg_view('navigation/pagination',array( + + 'baseurl' => $baseurl, + 'offset' => $offset, + 'count' => $count, + 'limit' => $limit, + + )); + + $html .= $nav; + + if ($viewtype == "list") { + if (is_array($entities) && sizeof($entities) > 0) { + foreach($entities as $entity) { + $html .= elgg_view_entity($entity, $fullview); + } + } + } else { + if (is_array($entities) && sizeof($entities) > 0) + $html .= elgg_view("entities/gallery",array('entities' => $entities)); + } + + if ($count) + $html .= $nav; + + echo $html; + +?> diff --git a/views/default/entities/entity_listing.php b/views/default/entities/entity_listing.php new file mode 100644 index 000000000..dd07e7d01 --- /dev/null +++ b/views/default/entities/entity_listing.php @@ -0,0 +1,37 @@ +<?php + + /** + * Elgg search listing + * + * @package Elgg + * @subpackage Core + + * @author Curverider Ltd + + * @link http://elgg.org/ + */ + +?> + + <div class="entity_listing"> + + <div class="entity_listing_icon"> + <?php + + echo $vars['icon']; + + ?> + </div> + <div class="entity_listing_info"> + <?php + + echo $vars['info']; + + ?> + </div> + + </div> + +<?php + +?>
\ No newline at end of file diff --git a/views/default/search/gallery.php b/views/default/entities/gallery.php index 52c4d0b92..a2701ed0c 100644 --- a/views/default/search/gallery.php +++ b/views/default/entities/gallery.php @@ -1,44 +1,44 @@ -<?php
-/**
- * Elgg gallery view
- *
- * @package Elgg
+<?php +/** + * Elgg gallery view + * + * @package Elgg * @subpackage Core * @author Curverider Ltd - * @link http://elgg.org/
- */
-
-$entities = $vars['entities'];
-if (is_array($entities) && sizeof($entities) > 0) {
-
-?>
-
-<table class="search_gallery">
-
-<?php
-
- $col = 0;
- foreach($entities as $entity) {
- if ($col == 0) {
-
- echo "<tr>";
-
- }
- echo "<td class=\"search_gallery_item\">";
- echo elgg_view_entity($entity);
- echo "</td>";
- $col++;
- if ($col > 3) {
- echo "</tr>";
- $col = 0;
- }
- }
- if ($col > 0) echo "</tr>";
-
-?>
-
-</table>
-
-<?php
-
+ * @link http://elgg.org/ + */ + +$entities = $vars['entities']; +if (is_array($entities) && sizeof($entities) > 0) { + +?> + +<table class="entity_gallery"> + +<?php + + $col = 0; + foreach($entities as $entity) { + if ($col == 0) { + + echo "<tr>"; + + } + echo "<td class=\"entity_gallery_item\">"; + echo elgg_view_entity($entity); + echo "</td>"; + $col++; + if ($col > 3) { + echo "</tr>"; + $col = 0; + } + } + if ($col > 0) echo "</tr>"; + +?> + +</table> + +<?php + }
\ No newline at end of file diff --git a/views/default/search/gallery_listing.php b/views/default/entities/gallery_listing.php index 900b22832..5421bcecb 100644 --- a/views/default/search/gallery_listing.php +++ b/views/default/entities/gallery_listing.php @@ -1,32 +1,32 @@ -<?php
-/**
- * Elgg search listing: gallery view
- *
- * @package Elgg
+<?php +/** + * Elgg entity listing: gallery view + * + * @package Elgg * @subpackage Core * @author Curverider Ltd - * @link http://elgg.org/
- */
-
-?>
-
-<div class="search_listing">
-
- <div class="search_listing_header">
-
- <?php
-
- echo $vars['icon'];
-
- ?>
-
- </div>
- <div class="search_listing_info">
- <?php
-
- echo $vars['info'];
-
- ?>
- </div>
-
+ * @link http://elgg.org/ + */ + +?> + +<div class="entity_listing"> + + <div class="entity_listing_header"> + + <?php + + echo $vars['icon']; + + ?> + + </div> + <div class="entity_listing_info"> + <?php + + echo $vars['info']; + + ?> + </div> + </div>
\ No newline at end of file diff --git a/views/default/page_elements/elgg_topbar.php b/views/default/page_elements/elgg_topbar.php index b9609910c..00240f35e 100644 --- a/views/default/page_elements/elgg_topbar.php +++ b/views/default/page_elements/elgg_topbar.php @@ -66,10 +66,7 @@ </div> <div id="elgg_topbar_container_search"> -<form id="searchform" action="<?php echo $vars['url']; ?>pg/search/" method="get"> - <input type="text" size="21" name="tag" value="<?php echo elgg_echo('search'); ?>" onclick="if (this.value=='<?php echo elgg_echo('search'); ?>') { this.value='' }" class="search_input" /> - <input type="submit" value="<?php echo elgg_echo('search:go'); ?>" class="search_submit_button" /> -</form> +<?php echo elgg_view('page_elements/searchbox'); ?> </div> </div><!-- /#elgg_topbar --> diff --git a/views/default/search/listing.php b/views/default/search/listing.php deleted file mode 100644 index fa1719069..000000000 --- a/views/default/search/listing.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php
-/**
- * Elgg search listing
- *
- * @package Elgg
- * @subpackage Core - * @author Curverider Ltd - * @link http://elgg.org/
- */
-
-if (isset($vars['search_viewtype']) && $vars['search_viewtype'] == "gallery") {
- echo elgg_view("search/gallery_listing",$vars);
-} else {
-
-?>
-
-<div class="search_listing">
-
- <div class="search_listing_icon">
- <?php
-
- echo $vars['icon'];
-
- ?>
- </div>
- <div class="search_listing_info">
- <?php
-
- echo $vars['info'];
-
- ?>
- </div>
-
-</div>
-
-<?php
-
-}
\ No newline at end of file |