Example #1
0
function search_by_proximity_hook($hook, $type, $return, $params)
{
    $query = $params['query'];
    $coords = elgg_geocode_location($query);
    if (!$coords) {
        return $return;
    }
    $registered_entities = elgg_get_config('registered_entities');
    $options = array('types' => array('object', 'user', 'group'), 'subtypes' => array_merge($registered_entities['object'], $registered_entities['user'], $registered_entities['group']), 'limit' => get_input('limit', 20), 'offset' => get_input('proximity_offset', 0), 'offset_key' => 'proximity_offset', 'count' => true);
    $options = add_order_by_proximity_clauses($options, $coords['lat'], $coords['long']);
    $options = add_distance_constraint_clauses($options, $coords['lat'], $coords['long'], SEARCH_RADIUS);
    $count = elgg_get_entities($options);
    if ($count) {
        $options['count'] = false;
        $entities = elgg_get_entities($options);
    }
    if ($entities) {
        foreach ($entities as $entity) {
            $name = search_get_highlighted_relevant_substrings(isset($entity->name) ? $entity->name : $entity->title, $query);
            $entity->setVolatileData('search_matched_title', $name);
            $location = search_get_highlighted_relevant_substrings($entity->getLocation(), $query);
            $entity->setVolatileData('search_matched_location', $location);
            $distance = get_distance($entity->getLatitude(), $entity->getLongitude(), $coords['lat'], $coords['long']);
            // distance in metres
            $distance = round($distance / 1000, 2);
            // distance in km
            $distance_str = elgg_echo('geo:search:proximity', array($query, $distance));
            $entity->setVolatileData('search_proximity', $distance_str);
        }
    }
    return array('entities' => $entities, 'count' => $count);
}
/**
 * Set session geopositioning
 * Cache geocode along the way
 * 
 * @param string $location
 * @param float $latitude
 * @param float $longitude
 * @return void
 */
function set_geopositioning($location = '', $latitude = 0, $longitude = 0)
{
    $location = sanitize_string($location);
    $lat = (double) $latitude;
    $long = (double) $longitude;
    $latlong = elgg_geocode_location($location);
    if ($latlong) {
        $latitude = elgg_extract('lat', $latlong);
        $longitude = elgg_extract('long', $latlong);
    } else {
        if ($location && $latitude && $longitude) {
            $dbprefix = elgg_get_config('dbprefix');
            $query = "INSERT INTO {$dbprefix}geocode_cache\n\t\t\t\t(location, lat, `long`) VALUES ('{$location}', '{$lat}', '{$long}')\n\t\t\t\tON DUPLICATE KEY UPDATE lat='{$lat}', `long`='{$long}'";
            insert_data($query);
        }
    }
    $_SESSION['geopositioning'] = array('location' => $location, 'latitude' => (double) $latitude, 'longitude' => (double) $longitude);
}
Example #3
0
/**
 * Set session geopositioning
 * Cache geocode along the way
 *
 * @param string $location
 * @param float $latitude
 * @param float $longitude
 * @return void
 */
function set_geopositioning($location = '', $latitude = 0, $longitude = 0)
{
    $location = sanitize_string($location);
    $lat = (double) $latitude;
    $long = (double) $longitude;
    if (!$lat && !$long) {
        $latlong = elgg_geocode_location($location);
        if ($latlong) {
            $latitude = elgg_extract('lat', $latlong);
            $longitude = elgg_extract('long', $latlong);
        }
    }
    $_SESSION['geopositioning'] = array('location' => $location, 'latitude' => (double) $latitude, 'longitude' => (double) $longitude);
}
Example #4
0
/**
 * Geocode entity location and set latitude and longitude when 'location' metadata is created/updated
 *
 * @param type $event
 * @param type $type
 * @param type $metadata
 */
function hj_framework_geocode_location_metadata($event, $type, $metadata)
{
    if ($metadata->name != 'location') {
        return true;
    }
    switch ($event) {
        case 'create':
        case 'update':
            $location = $metadata->value;
            if (is_array($location)) {
                $location = implode(', ', $location);
            }
            $coordinates = elgg_geocode_location($metadata->value);
            if ($coordinates) {
                $entity = get_entity($metadata->entity_guid);
                $entity->setLatLong($coordinates['lat'], $coordinates['long']);
            } else {
                register_error(elgg_echo('hj:framework:geocode:error'));
            }
            break;
        default:
            return true;
            break;
    }
}