/** * Search for events * * @param array $options search options * * @return array */ function event_manager_search_events($options = array()) { $defaults = array('past_events' => false, 'count' => false, 'container_guid' => null, 'query' => false, 'meattending' => false, 'owning' => false, 'friendsattending' => false, 'region' => null, 'latitude' => null, 'longitude' => null, 'distance' => null, 'event_type' => false, 'past_events' => false, 'search_type' => "list", 'user_guid' => elgg_get_logged_in_user_guid()); $options = array_merge($defaults, $options); $entities_options = array('type' => 'object', 'subtype' => 'event', 'offset' => $options['offset'], 'limit' => $options['limit'], 'joins' => array(), 'wheres' => array(), 'order_by_metadata' => array("name" => 'start_day', "direction" => 'ASC', "as" => "integer")); if ($options["container_guid"]) { // limit for a group $entities_options['container_guid'] = $options['container_guid']; } if ($options['query']) { $entities_options["joins"][] = "JOIN " . elgg_get_config("dbprefix") . "objects_entity oe ON e.guid = oe.guid"; $entities_options['wheres'][] = event_manager_search_get_where_sql('oe', array('title', 'description'), $options); } if (!empty($options['start_day'])) { $entities_options['metadata_name_value_pairs'][] = array('name' => 'start_day', 'value' => $options['start_day'], 'operand' => '>='); } if (!empty($options['end_day'])) { $entities_options['metadata_name_value_pairs'][] = array('name' => 'end_ts', 'value' => $options['end_day'], 'operand' => '<='); } if (!$options['past_events']) { // only show from current day or newer $entities_options['metadata_name_value_pairs'][] = array('name' => 'start_day', 'value' => mktime(0, 0, 1), 'operand' => '>='); } if ($options['meattending'] && !empty($options["user_guid"])) { $entities_options['joins'][] = "JOIN " . elgg_get_config("dbprefix") . "entity_relationships e_r ON e.guid = e_r.guid_one"; $entities_options['wheres'][] = "e_r.guid_two = " . $options["user_guid"]; $entities_options['wheres'][] = "e_r.relationship = '" . EVENT_MANAGER_RELATION_ATTENDING . "'"; } if ($options['owning'] && !empty($options["user_guid"])) { $entities_options['owner_guids'] = array($options["user_guid"]); } if ($options["region"]) { $entities_options['metadata_name_value_pairs'][] = array('name' => 'region', 'value' => $options["region"]); } if ($options["event_type"]) { $entities_options['metadata_name_value_pairs'][] = array('name' => 'event_type', 'value' => $options["event_type"]); } if ($options['friendsattending'] && !empty($options["user_guid"])) { $friends_guids = array(); $user = get_entity($options["user_guid"]); if ($friends = $user->getFriends("", false)) { foreach ($friends as $friend) { $friends_guids[] = $friend->getGUID(); } $entities_options['joins'][] = "JOIN " . elgg_get_config("dbprefix") . "entity_relationships e_ra ON e.guid = e_ra.guid_one"; $entities_options['wheres'][] = "(e_ra.guid_two IN (" . implode(", ", $friends_guids) . "))"; } else { // return no result $entities_options['joins'] = array(); $entities_options['wheres'] = array("(1=0)"); } } if ($options["search_type"] == "onthemap" && !empty($options['latitude']) && !empty($options['longitude']) && !empty($options['distance'])) { $entities_options["latitude"] = $options['latitude']; $entities_options["longitude"] = $options['longitude']; $entities_options["distance"] = $options['distance']; $entities = elgg_get_entities_from_location($entities_options); $entities_options['count'] = true; $count_entities = elgg_get_entities_from_location($entities_options); } else { $entities = elgg_get_entities_from_metadata($entities_options); $entities_options['count'] = true; $count_entities = elgg_get_entities_from_metadata($entities_options); } $result = array("entities" => $entities, "count" => $count_entities); return $result; }
/** * Search for events * * @param array $options search options * * @return array */ function event_manager_search_events($options = []) { $dbprefix = elgg_get_config('dbprefix'); $defaults = ['past_events' => false, 'count' => false, 'limit' => (int) get_input('limit', 10), 'offset' => (int) get_input('offset', 0), 'container_guid' => null, 'query' => false, 'meattending' => false, 'owning' => false, 'friendsattending' => false, 'region' => null, 'latitude' => null, 'longitude' => null, 'distance' => null, 'event_type' => false, 'event_start' => null, 'event_end' => null, 'search_type' => "list", 'user_guid' => elgg_get_logged_in_user_guid()]; $options = array_merge($defaults, $options); $entities_options = ['type' => 'object', 'subtype' => 'event', 'offset' => $options['offset'], 'limit' => $options['limit'], 'joins' => [], 'wheres' => [], 'order_by_metadata' => ['name' => 'event_start', 'direction' => 'ASC', 'as' => 'integer']]; if ($options['container_guid']) { // limit for a group $entities_options['container_guid'] = $options['container_guid']; } if ($options['query']) { $entities_options['joins'][] = "JOIN {$dbprefix}objects_entity oe ON e.guid = oe.guid"; $entities_options['wheres'][] = event_manager_search_get_where_sql('oe', ['title', 'description'], $options); } if (!empty($options['event_start'])) { $entities_options['metadata_name_value_pairs'][] = ['name' => 'event_start', 'value' => $options['event_start'], 'operand' => '>=']; } if (!empty($options['event_end'])) { $options['event_end'] += 86400; // add one day $entities_options['metadata_name_value_pairs'][] = ['name' => 'event_end', 'value' => $options['event_end'], 'operand' => '<=']; } if (!$options['past_events']) { // only show from current day or newer (or where event is still running) $current_time = gmmktime(0, 0, 1); if ($options['event_end']) { $entities_options['metadata_name_value_pairs'][] = ['name' => 'event_start', 'value' => $current_time, 'operand' => '>=']; } else { // start date $event_start_id = elgg_get_metastring_id('event_start'); $entities_options['joins'][] = "JOIN {$dbprefix}metadata md_start ON e.guid = md_start.entity_guid"; $entities_options['joins'][] = "JOIN {$dbprefix}metastrings msv_start ON md_start.value_id = msv_start.id"; $entities_options['wheres'][] = "md_start.name_id = {$event_start_id}"; // end date $event_end_id = elgg_get_metastring_id('event_end'); $entities_options['joins'][] = "JOIN {$dbprefix}metadata md_end ON e.guid = md_end.entity_guid"; $entities_options['joins'][] = "JOIN {$dbprefix}metastrings msv_end ON md_end.value_id = msv_end.id"; $entities_options['wheres'][] = "md_end.name_id = {$event_end_id}"; // event start > now $time_start = "(msv_start.string >= {$current_time})"; // or event start before end and end after now $time_end = "((msv_start.string < {$current_time}) AND (msv_end.string > {$current_time}))"; $entities_options['wheres'][] = "({$time_start} OR {$time_end})"; } } if ($options['meattending'] && !empty($options['user_guid'])) { $entities_options['joins'][] = "JOIN {$dbprefix}entity_relationships e_r ON e.guid = e_r.guid_one"; $entities_options['wheres'][] = 'e_r.guid_two = ' . $options['user_guid']; $entities_options['wheres'][] = 'e_r.relationship = "' . EVENT_MANAGER_RELATION_ATTENDING . '"'; } if ($options['owning'] && !empty($options['user_guid'])) { $entities_options['owner_guids'] = [$options['user_guid']]; } if ($options['region']) { $entities_options['metadata_name_value_pairs'][] = ['name' => 'region', 'value' => $options['region']]; } if ($options['event_type']) { $entities_options['metadata_name_value_pairs'][] = ['name' => 'event_type', 'value' => $options['event_type']]; } if ($options['friendsattending'] && !empty($options['user_guid'])) { $friends_guids = []; $user = get_entity($options['user_guid']); if ($friends = $user->getFriends('', false)) { foreach ($friends as $friend) { $friends_guids[] = $friend->getGUID(); } $entities_options['joins'][] = "JOIN {$dbprefix}entity_relationships e_ra ON e.guid = e_ra.guid_one"; $entities_options['wheres'][] = '(e_ra.guid_two IN (' . implode(', ', $friends_guids) . '))'; } else { // return no result $entities_options['joins'] = []; $entities_options['wheres'] = ['(1=0)']; } } if ($options['search_type'] == 'onthemap' && !empty($options['latitude']) && !empty($options['longitude']) && !empty($options['distance'])) { $entities_options['latitude'] = $options['latitude']; $entities_options['longitude'] = $options['longitude']; $entities_options['distance'] = $options['distance']; $entities = elgg_get_entities_from_location($entities_options); $entities_options['count'] = true; $count_entities = elgg_get_entities_from_location($entities_options); } else { $entities = elgg_get_entities_from_metadata($entities_options); $entities_options['count'] = true; $count_entities = elgg_get_entities_from_metadata($entities_options); } $result = ['entities' => $entities, 'count' => $count_entities]; return $result; }