' . t('Fetches google map directions.') . '

'; return $output; } } /** * Implements hook_init(). */ function getdirections_init() { if (! module_load_include('inc', 'getdirections', 'getdirections.config')) { define('GETDIRECTIONS_WAYPOINTS_MAX', 8); } module_load_include('inc', 'getdirections', 'getdirections.api'); if (module_exists('colorbox')) { $getdirections_colorbox = variable_get('getdirections_colorbox', array( 'enable' => 0, 'width' => 600, 'height' => 600, )); $settings = array('getdirections_colorbox' => $getdirections_colorbox); drupal_add_js($settings, 'setting'); drupal_add_js(GETDIRECTIONS_PATH . '/getdirections.js'); } } /** * Implements hook_permission(). */ function getdirections_permission() { return array( 'access gmap getdirections' => array( 'title' => t('Access Getdirections'), 'description' => t('View and use the Getdirections module.') ), 'access user getdirections' => array( 'title' => t('Access user Getdirections'), 'description' => t('View users with the Getdirections module.') ), ); } /** * Implement hook_menu(). */ function getdirections_menu() { $items = array(); $items['admin/config/services/getdirections'] = array( 'title' => 'Get directions', 'description' => 'Configure Get directions', 'page callback' => 'drupal_get_form', 'page arguments' => array('getdirections_settings_form'), 'access arguments' => array('administer site configuration'), 'type' => MENU_NORMAL_ITEM, 'file' => 'getdirections.admin.inc', ); $items['getdirections'] = array( 'title' => 'Get directions', 'access arguments' => array('access gmap getdirections'), 'page callback' => 'getdirections_direction', 'type' => MENU_SUGGESTED_ITEM, ); // location enabled $items['getdirections/location/%getdirections_fromto/%getdirections_id'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_setlocation', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); $items['getdirections/locations/%getdirections_id/%getdirections_id'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_setlocations', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); $items['getdirections/locations_via/%getdirections_via'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_setlocations_via', 'page arguments' => array(2), 'type' => MENU_CALLBACK, ); $items['getdirections/location_user/%getdirections_fromto/%getdirections_uid'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_user_location', 'page callback' => 'getdirections_user_setlocation', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); $items['getdirections/locations_user/%getdirections_uid/%getdirections_uid'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_user_location', 'page callback' => 'getdirections_user_setlocations', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); $items['getdirections/location_n2u/%getdirections_id/%getdirections_uid'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_user_location', 'page callback' => 'getdirections_n2u_setlocation', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); $items['getdirections/location_u2n/%getdirections_uid/%getdirections_id'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_user_location', 'page callback' => 'getdirections_u2n_setlocation', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); //////////////////////////////// $items['getdirections/location_n2cu/%getdirections_id/%getdirections_uid'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_n2cu_setlocation', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); $items['getdirections/location_cu2n/%getdirections_uid/%getdirections_id'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_cu2n_setlocation', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); //////////////////////////////// $items['getdirections/locations_user_via/%getdirections_via'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_user_setlocations_via', 'page arguments' => array(2), 'type' => MENU_CALLBACK, ); $items['getdirections/latlon/%getdirections_fromto/%getdirections_latlon/%'] = array( 'title' => 'Get directions', 'access arguments' => array('access gmap getdirections'), 'page callback' => 'getdirections_latlon', 'page arguments' => array(2, 3, 4), 'type' => MENU_CALLBACK, ); $items['getdirections/latlons/%'] = array( 'title' => 'Get directions', 'access arguments' => array('access gmap getdirections'), 'page callback' => 'getdirections_latlons', 'page arguments' => array(2), 'type' => MENU_CALLBACK, ); $items['getdirections/location_id/%getdirections_fromto/%getdirections_id'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_setlocation_id', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); if (module_exists('getlocations_fields')) { if (getlocations_get_vocabularies()) { // taxonomy_term $items['getdirections/location_term/%getdirections_fromto/%getdirections_id'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_term_setlocation', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); } if (getlocations_check_entity_type('comment')) { // comment $items['getdirections/location_comment/%getdirections_fromto/%getdirections_id'] = array( 'title' => 'Get directions', 'access callback' => 'getdirections_access_location', 'page callback' => 'getdirections_comment_setlocation', 'page arguments' => array(2, 3), 'type' => MENU_CALLBACK, ); } } $items['getdirections_box'] = array( 'title' => 'Get directions', 'access arguments' => array('access gmap getdirections'), 'page callback' => 'getdirections_direction_box', 'type' => MENU_CALLBACK, ); if (module_exists('date_popup')) { $items['getdirections/getdirections_get_datestamp'] = array( 'access arguments' => array('access gmap getdirections'), 'page callback' => 'getdirections_get_datestamp', 'type' => MENU_CALLBACK, ); } if (module_exists('smart_ip')) { $items['getdirections/smart_ip'] = array( 'page callback' => 'getdirections_smart_ip', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); } if (module_exists('ip_geoloc')) { $items['getdirections/ip_geoloc'] = array( 'page callback' => 'getdirections_ip_geoloc', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); } return $items; } /** * menu placeholder functions */ function getdirections_fromto_load($arg) { $allowed = array('from', 'to'); return ( in_array($arg, $allowed) ? $arg : FALSE); return $arg; } function getdirections_id_load($arg) { return (is_numeric($arg) && $arg > 0 ? $arg : FALSE); } function getdirections_uid_load($arg) { return ((is_numeric($arg) && $arg > 0 && getdirections_user_check($arg)) ? $arg : FALSE); } function getdirections_via_load($arg) { if (stristr($arg, ',')) { $x = explode(',', $arg); foreach ($x as $v) { if (! is_numeric($v)) { return FALSE; } } return $arg; } return FALSE; } function getdirections_latlon_load($arg) { if (getdirections_latlon_check($arg)) { return $arg; } return FALSE; } /** * menu access functions */ function getdirections_access_location() { if (user_access('access gmap getdirections')) { if (getdirections_get_current_supported_module()) { return TRUE; } } return FALSE; } function getdirections_access_user_location() { if (user_access('access user getdirections')) { if (getdirections_get_current_supported_module()) { return TRUE; } } return FALSE; } /** * Function to setup the map and form * * @param string $direction * Optional. The direction the supplied input applies to * @param string $location * Optional. The string to search with * @param string $country * Optional. The country * @param string $latlon * Optional. Comma delimited string containing latitude and longitude * @return * Returns the themed map and form */ function getdirections_direction($direction='', $location='', $country='', $latlon='', $id=0, $type='node', $width='', $height='') { if (! getdirections_check()) { return t('You need to !c first.', array('!c' => l('configure Getdirections', 'admin/config/services/getdirections'))); } $getdirections_defaults = getdirections_defaults(); $getdirections_misc = getdirections_misc_defaults(); getdirections_setup_map($getdirections_defaults, $getdirections_misc); $getdirections_settings = getdirections_get_settings($getdirections_defaults, $getdirections_misc); $getdirections_settings['switchfromto'] = $getdirections_misc['switchfromto']; drupal_add_js(array('getdirections' => $getdirections_settings), 'setting'); if ($getdirections_misc['keep_title'] && $id && $direction) { if ($direction == 'to') { $direction_translated = t('to'); } elseif ($direction == 'from') { $direction_translated = t('from'); } if ($type == 'node') { $node = node_load($id); drupal_set_title(t('Get directions @d !t', array('@d' => $direction_translated, '!t' => $node->title))); } elseif ($type == 'user') { $account = user_load($id); drupal_set_title(t('Get directions @d !t', array('@d' => $direction_translated, '!t' => $account->name))); } elseif ($type == 'term') { $term = taxonomy_term_load($id); drupal_set_title(t('Get directions @d !t', array('@d' => $direction_translated, '!t' => $term->name))); } elseif ($type == 'location') { $t = getdirections_get_lid_title($id); if ($t) { drupal_set_title(t('Get directions @d !t', array('@d' => $direction_translated, '!t' => $t))); } } } if (empty($width)) { $width = $getdirections_defaults['width']; } if (empty($height)) { $height = $getdirections_defaults['height']; } // remove brackets if any $latlon = preg_replace("/^\(|\)$/", '', $latlon); $raw_form = drupal_get_form('getdirections_direction_form', $direction, $location, $country, $latlon); $form = render($raw_form); return theme('getdirections_show', array('form' => $form, 'width' => $width, 'height' => $height, 'nid' => $id, 'type' => $type) ); } /** * Function to setup the map * * @param string $fromlocs * Required. The string to display for From. * @param string $fromlatlon * Required. The location point for From. In decimal latitude,longitude * @param string $tolocs * Required. The string to display for To. * @param string $tolatlon * Required. The location point for To. In decimal latitude,longitude * @return * Returns the themed map. */ function getdirections_locations($fromlocs, $fromlatlon, $tolocs, $tolatlon, $width='', $height='') { if (! getdirections_check()) { return t('You need to !c first.', array('!c' => l('configure Getdirections', 'admin/config/services/getdirections'))); } $getdirections_defaults = getdirections_defaults(); $getdirections_misc = getdirections_misc_defaults(); getdirections_setup_map($getdirections_defaults, $getdirections_misc); $getdirections_settings = getdirections_get_settings($getdirections_defaults, $getdirections_misc); // remove brackets if any $fromlatlon = preg_replace("/^\(|\)$/", '', $fromlatlon); $getdirections_settings['fromlatlon'] = $fromlatlon; $tolatlon = preg_replace("/^\(|\)$/", '', $tolatlon); $getdirections_settings['tolatlon'] = $tolatlon; drupal_add_js(array('getdirections' => $getdirections_settings), 'setting'); if (empty($width)) { $width = $getdirections_defaults['width']; } if (empty($height)) { $height = $getdirections_defaults['height']; } return theme('getdirections_show_locations', array('width' => $width, 'height' => $height, 'fromlocs' => $fromlocs, 'tolocs' => $tolocs)); } /** * Function to setup the map * * @param array $locs * Required. An array of location descriptions. * @param array $latlons * Required. An array of decimal latitude,longitude * @return * Returns the themed map. */ function getdirections_locations_via($locs, $latlons, $width='', $height='') { if (! getdirections_check()) { return t('You need to !c first.', array('!c' => l('configure Getdirections', 'admin/config/services/getdirections'))); } $getdirections_defaults = getdirections_defaults(); $getdirections_misc = getdirections_misc_defaults(); getdirections_setup_map($getdirections_defaults, $getdirections_misc); $getdirections_settings = getdirections_get_settings($getdirections_defaults, $getdirections_misc); $getdirections_settings['latlons'] = implode('|', $latlons); drupal_add_js(array('getdirections' => $getdirections_settings), 'setting'); if (empty($width)) { $width = $getdirections_defaults['width']; } if (empty($height)) { $height = $getdirections_defaults['height']; } return theme('getdirections_show_locations_via', array('width' => $width, 'height' => $height, 'locs' => $locs)); } function getdirections_get_settings($getdirections_defaults, $getdirections_misc) { global $language; $lla = explode(',', $getdirections_defaults['latlong']); $settings = array( 'lat' => $lla[0], 'lng' => $lla[1], 'zoom' => $getdirections_defaults['zoom'], 'maptype' => $getdirections_defaults['maptype'], 'controltype' => $getdirections_defaults['controltype'], 'mtc' => $getdirections_defaults['mtc'], 'baselayers' => $getdirections_defaults['baselayers'], 'scale' => $getdirections_defaults['behavior']['scale'], 'overview' => $getdirections_defaults['behavior']['overview'], 'googlebar' => $getdirections_defaults['behavior']['googlebar'], 'mylocale' => $language->language, 'waypoints' => intval($getdirections_defaults['waypoints']), 'waypoint_color' => $getdirections_defaults['waypoint_color'], 'show_distance' => ($getdirections_misc['show_distance'] ? t('Total distance') : ''), 'trafficinfo' => $getdirections_misc['trafficinfo'], 'show_duration' => ($getdirections_misc['show_duration'] ? t('Total duration') : ''), ); if (variable_get('getdirections_use_v3', 0)) { $settings['scrollwheel'] = $getdirections_defaults['behavior']['scrollwheel']; $settings['draggable'] = $getdirections_defaults['behavior']['draggable']; $settings['unitsystem'] = $getdirections_defaults['unitsystem']; $settings['overview_opened'] = $getdirections_defaults['behavior']['overview_opened']; $settings['streetview_show'] = $getdirections_defaults['streetview_show']; $settings['pancontrol'] = $getdirections_defaults['pancontrol']; $settings['advanced_autocomplete'] = $getdirections_defaults['advanced_autocomplete']; $settings['advanced_autocomplete_bias'] = $getdirections_defaults['advanced_autocomplete_bias']; $settings['advanced_autocomplete_via'] = $getdirections_defaults['advanced_autocomplete_via']; $settings['panoramio_show'] = $getdirections_misc['panoramio_show']; $settings['panoramio_state'] = $getdirections_misc['panoramio_state']; $settings['bicycleinfo'] = $getdirections_misc['bicycleinfo']; $settings['bicycleinfo_state'] = $getdirections_misc['bicycleinfo_state']; $settings['transitinfo'] = $getdirections_misc['transitinfo']; $settings['transitinfo_state'] = $getdirections_misc['transitinfo_state']; $settings['trafficinfo_state'] = $getdirections_misc['trafficinfo_state']; $settings['geolocation_enable'] = $getdirections_misc['geolocation_enable']; $settings['geolocation_option'] = $getdirections_misc['geolocation_option']; $settings['waypoints_optimise'] = intval($getdirections_defaults['waypoints_optimise']); $settings['transit_date_format'] = $getdirections_defaults['transit_date_format']; $settings['map_backgroundcolor'] = $getdirections_defaults['map_backgroundcolor']; } $settings['use_https'] = $getdirections_defaults['use_https']; return $settings; } /** * Function to setup the form * * @param string $fromto * Optional. The direction the supplied input applies to * @param string $loc * Optional. The string to search with * @param string $country * Optional. The country * @param string $latlon * Optional. Comma delimited string containing latitude and longitude * @return * Returns the form */ function getdirections_direction_form($form, &$form_state, $fromto='', $loc='', $country='', $latlon='') { $getdirections_defaults = getdirections_defaults(); $islocation = module_exists('location'); $isgetlocations_fields = module_exists('getlocations_fields'); if ($getdirections_defaults['use_country_dropdown'] && ($islocation || $isgetlocations_fields) && ! $getdirections_defaults['advanced_autocomplete']) { $default_country = ($islocation ? variable_get('location_default_country', '') : variable_get('site_default_country', '')); $countries = array( '#type' => 'select', '#title' => t('Country'), '#options' => array_merge(array('' => t('Please select')), ($islocation ? _location_supported_countries() : getlocations_fields_get_countries_list())), '#default_value' => $default_country, ); } $setdirections = "Drupal.getdirections.mygetDirections(); return false;"; // weights if (getdirections_is_advanced()) { $from_country_weight = 1; $from_weight = 2; $to_country_weight = 3; $to_weight = 4; } else { $from_weight = 1; $from_country_weight = 2; $to_weight = 3; $to_country_weight = 4; } $form = array( '#action' => '#', '#attributes' => array( 'class' => 'getdirections_form', 'onsubmit' => $setdirections, ), ); if ($fromto == 'from') { $form['from'] = array( '#type' => 'hidden', '#value' => $latlon, ); if (empty($loc)) { if (empty($country)) { $mfrom = t('Starting point'); } else { $mfrom = drupal_strtoupper($country); } } else { $mfrom = $loc; } $form['mfrom'] = array( '#type' => 'item', '#title' => t('From'), '#markup' => $mfrom, ); } else { $from_desc = t('Enter the address, postcode and/or city and country from where you want to start your journey.'); if ( getdirections_is_advanced() && $getdirections_defaults['advanced_autocomplete']) { $from_desc = t('Start typing the address of your starting point, then select from the dropdown menu.'); } if ($getdirections_defaults['use_country_dropdown'] && ($islocation || $isgetlocations_fields) && ! $getdirections_defaults['advanced_autocomplete']) { $form['country_from'] = $countries; $form['country_from']['#weight'] = $from_country_weight; $from_desc = t('Enter the address, postcode and/or city from where you want to start your journey.'); } $form['from'] = array( '#type' => 'textfield', '#title' => t('Starting from'), '#size' => $getdirections_defaults['from_width'], '#required' => TRUE, '#description' => $from_desc, '#weight' => $from_weight, ); } if ($fromto == 'to') { $form['to'] = array( '#type' => 'hidden', '#value' => $latlon, ); if (empty($loc)) { if (empty($country)) { $mto = t('Destination'); } else { $mto = drupal_strtoupper($country); } } else { $mto = $loc; } $form['mto'] = array( '#type' => 'item', '#title' => t('To'), '#markup' => $mto, ); } else { $to_desc = t('Enter the address, postcode and/or city and country of your journey destination.'); if ( getdirections_is_advanced() && $getdirections_defaults['advanced_autocomplete']) { $to_desc = t('Start typing the address of your destination, then select from the dropdown menu.'); } if ($getdirections_defaults['use_country_dropdown'] && ($islocation || $isgetlocations_fields) && ! $getdirections_defaults['advanced_autocomplete']) { $form['country_to'] = $countries; $form['country_to']['#weight'] = $to_country_weight; $to_desc = t('Enter the address, postcode and/or city of your journey destination.'); } $form['to'] = array( '#type' => 'textfield', '#title' => t('Destination'), '#size' => $getdirections_defaults['to_width'], '#required' => TRUE, '#description' => $to_desc, '#weight' => $to_weight, ); } $wt = 6; if (variable_get('getdirections_use_v3', 0)) { if ($getdirections_defaults['travelmode_show']) { $form['travelmode'] = array( '#type' => 'select', '#title' => t('Travel mode'), '#options' => array( 'driving' => t('Driving'), 'walking' => t('Walking'), 'bicycling' => t('Bicycling'), 'transit' => t('Public transport'), ), '#default_value' => 'driving', '#weight' => $wt, ); $wt = $wt + 2; if (module_exists('date_popup')) { $form['transit_date_select'] = array( '#type' => 'select', '#title' => t('Date select'), '#options' => array( 'depart' => t('Departure time'), 'arrive' => t('Arrival time'), ), '#default_value' => 'depart', '#prefix' => '
', '#weight' => $wt, ); $wt = $wt + 2; if ($getdirections_defaults['transit_date_format'] == 'int') { $fmt = 'j/n/Y H:i'; } else { $fmt = 'n/j/Y H:i'; } $form['transit_dates'] = array( '#type' => 'date_popup', '#default_value' => '', '#date_year_range' => '-0:+1', '#date_format' => $fmt, '#mindate' => "+0", '#suffix' => '
', '#weight' => $wt, ); $wt = $wt + 2; } } if ($getdirections_defaults['travelextras_show']) { $form['travelextras'] = array( '#type' => 'checkboxes', '#title' => t('Travel options'), '#options' => array( 'avoidhighways' => t('Avoid Highways'), 'avoidtolls' => t('Avoid Tolls'), 'altroute' => t('Alternative routes'), ), '#weight' => $wt, ); $wt = $wt + 2; } } if (getdirections_is_advanced() && $getdirections_defaults['advanced_autocomplete'] && $getdirections_defaults['waypoints'] > 0 && $getdirections_defaults['advanced_autocomplete_via'] && ! $getdirections_defaults['advanced_alternate']) { for ($ct = 1; $ct <= $getdirections_defaults['waypoints']; $ct++) { $form['via_autocomplete_' . $ct] = array( '#type' => 'textfield', '#title' => t('Via !c', array('!c' => $ct)), '#size' => $getdirections_defaults['advanced_autocomplete_via_width'], '#weight' => $wt, ); $wt = $wt + 2; } } $getdirections_misc = getdirections_misc_defaults(); if ($getdirections_misc['trafficinfo']) { $form['trafficinfo'] = array( '#type' => 'markup', '#markup' => '', '#weight' => $wt, ); $wt = $wt + 2; } if (variable_get('getdirections_use_v3', 0)) { if ($getdirections_misc['bicycleinfo']) { $form['bicycleinfo'] = array( '#type' => 'markup', '#markup' => '', '#weight' => $wt, ); $wt = $wt + 2; } if ($getdirections_misc['transitinfo']) { $form['transitinfo'] = array( '#type' => 'markup', '#markup' => '', '#weight' => $wt, ); $wt = $wt + 2; } if ($getdirections_misc['panoramio_show']) { $form['panoramio'] = array( '#type' => 'markup', '#markup' => '', '#weight' => $wt, ); $wt = $wt + 2; } } if ($getdirections_misc['switchfromto'] && ! $fromto && ! getdirections_is_advanced()) { $form['switchfromto'] = array( '#type' => 'markup', '#markup' => '', '#weight' => $wt, ); $wt = $wt + 2; } if (getdirections_is_advanced()) { $form['next'] = array( '#type' => 'button', '#value' => t('Next'), '#attributes' => array('onclick' => 'Drupal.getdirections.nextbtn(); return false;'), '#weight' => $wt, ); $wt = $wt + 2; } $form['submit'] = array( '#type' => 'submit', '#value' => t('Get Directions'), '#weight' => $wt, ); return $form; } /** * Some defaults. */ function getdirections_defaults() { $getdirections_use_v3 = variable_get('getdirections_use_v3', 0); if (module_exists('getlocations_fields') && ! $getdirections_use_v3) { variable_set('getdirections_use_v3', 1); $getdirections_use_v3 = 1; } // no gmap for v3 googlemap API if ($getdirections_use_v3) { $defaults = array( 'api_version' => 3, 'width' => '300px', 'height' => '200px', 'zoom' => 3, 'controltype' => 'small', 'pancontrol' => 1, 'latlong' => '40,0', 'maptype' => 'Map', 'mtc' => 'standard', 'baselayers' => array( 'Map' => 1, 'Satellite' => 1, 'Hybrid' => 1, 'Physical' => 1, ), 'behavior' => array( 'scale' => 0, 'scrollwheel' => 0, 'draggable' => 1, 'overview' => 0, 'overview_opened' => 0, 'googlebar' => 0, ), 'unitsystem' => 'metric', 'from_width' => 20, 'to_width' => 20, 'travelmode_show' => 0, 'transit_dates' => 0, 'transit_date_format' => 'int', 'travelextras_show' => 0, 'streetview_show' => 0, 'use_advanced' => 0, 'use_country_dropdown' => 1, 'waypoints' => 0, 'waypoint_color' => 'white', 'waypoints_optimise' => 0, 'advanced_alternate' => 0, 'advanced_autocomplete' => 0, 'advanced_autocomplete_bias' => 0, 'advanced_autocomplete_via' => 0, 'advanced_autocomplete_via_width' => 20, 'map_backgroundcolor' => '', ); } else { if (module_exists('gmap')) { $defaults = gmap_defaults(); $defaults['api_version'] = GMAP_API_VERSION; $defaults['from_width'] = 20; $defaults['to_width'] = 20; $defaults['use_advanced'] = 0; $defaults['waypoints'] = 0; $defaults['waypoint_color'] = 'white'; $defaults['waypoints_optimise'] = 0; $defaults['advanced_alternate'] = 0; $defaults['advanced_autocomplete'] = 0; $defaults['advanced_autocomplete_bias'] = 0; $defaults['advanced_autocomplete_via'] = 0; $defaults['advanced_autocomplete_via_width'] = 20; } else { $defaults = array( 'api_version' => 2, 'width' => '300px', 'height' => '200px', 'zoom' => 3, 'controltype' => 'small', 'latlong' => '40,0', 'maptype' => 'Map', 'mtc' => 'standard', 'baselayers' => array( 'Map' => 1, 'Satellite' => 1, 'Hybrid' => 1, 'Physical' => 0, ), 'behavior' => array( 'scale' => 0, 'overview' => 0, 'googlebar' => 0, ), 'from_width' => 20, 'to_width' => 20, 'use_advanced' => 0, 'waypoints' => 0, 'waypoint_color' => 'white', 'waypoints_optimise' => 0, 'advanced_alternate' => 0, 'advanced_autocomplete' => 0, 'advanced_autocomplete_bias' => 0, 'advanced_autocomplete_via' => 0, 'advanced_autocomplete_via_width' => 20, ); } } $defaults['use_country_dropdown'] = 1; global $is_https; $defaults['use_https'] = ($is_https ? 1 : 0); $getdirections_defaults = variable_get('getdirections_default', array()); // array_merge deletes things in $defaults that are not in $getdirections_defaults ;-/ // roll my own $newdefaults = array(); foreach ($defaults AS $k => $v) { if (is_array($v)) { foreach ($defaults[$k] AS $k1 => $v1) { if (isset($getdirections_defaults[$k][$k1])) { $newdefaults[$k][$k1] = $getdirections_defaults[$k][$k1]; } else { $newdefaults[$k][$k1] = $v1; } } } else { if (isset($getdirections_defaults[$k])) { $newdefaults[$k] = $getdirections_defaults[$k]; } else { $newdefaults[$k] = $v; } } } return $newdefaults; } function getdirections_misc_defaults() { $getdirections_misc = variable_get('getdirections_misc', array( 'keep_title' => 0, 'show_distance' => 0, 'trafficinfo' => 0, 'trafficinfo_state' => 0, 'bicycleinfo' => 0, 'bicycleinfo_state' => 0, 'switchfromto' => 0, 'show_duration' => 0, 'panoramio_show' => 0, 'panoramio_state' => 0, 'transitinfo' => 0, 'transitinfo_state' => 0, 'geolocation_enable' => 0, 'geolocation_option' => 1, 'geolocation_mobile_check' => 1, )); return $getdirections_misc; } /** * Function to setup the map and form * * @param string $direction * Required. The direction the supplied input applies to * @param int $nid * Required. The nid of the location node * @return * Returns the themed map and form */ function getdirections_setlocation($direction, $nid, $width='', $height='') { if (is_numeric($nid) && $nid) { $vid = getdirections_get_vid($nid); $location = getdirections_load_locations($vid); if (count($location)) { $country = (isset($location[0]['country']) ? $location[0]['country'] : ''); $latlon = $location[0]['latitude'] . ',' . $location[0]['longitude']; // sanity check if (! getdirections_latlon_check($latlon)) { watchdog('getdirections', 'Lat, Lon failed for node id !nid', array('!nid' => $nid), WATCHDOG_WARNING); $latlon = getdirections_load_latlon_defaults(); } // $locs only used for display now $locs = _getdirections_loadaddress($location[0]); $content = getdirections_direction($direction, $locs, $country, $latlon, $nid, 'node', $width, $height); return $content; } } return getdirections_direction(); } /** * Function to setup the map and form * * @param string $direction * Required. The direction the supplied input applies to * @param int $uid * Required. The uid of the location owner * @return * Returns the themed map and form */ function getdirections_user_setlocation($direction, $uid, $width='', $height='') { if (is_numeric($uid) && $uid) { $location = getdirections_load_locations($uid, 'uid'); if (count($location)) { $country = (isset($location[0]['country']) ? $location[0]['country'] : ''); $latlon = $location[0]['latitude'] . ',' . $location[0]['longitude']; // sanity check if (! getdirections_latlon_check($latlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !uid', array('!uid' => $uid), WATCHDOG_WARNING); $latlon = getdirections_load_latlon_defaults(); } // $locs only used for display now $locs = _getdirections_loadaddress($location[0]); $content = getdirections_direction($direction, $locs, $country, $latlon, $uid, 'user', $width, $height); return $content; } } return getdirections_direction(); } /** * Function to setup the map * * @param int $fromnid * Required. The nid of the starting point * @param int $tonid * Required. The nid of the destination * @return * Returns the themed map */ function getdirections_setlocations($fromnid, $tonid, $width='', $height='') { if (is_numeric($fromnid) && $fromnid && is_numeric($tonid) && $tonid) { // From $fromvid = getdirections_get_vid($fromnid); $fromlocation = getdirections_load_locations($fromvid); if (count($fromlocation)) { $fromlatlon = $fromlocation[0]['latitude'] . ',' . $fromlocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($fromlatlon)) { watchdog('getdirections', 'Lat, Lon failed for node id !nid', array('!nid' => $fromnid), WATCHDOG_WARNING); $fromlatlon = getdirections_load_latlon_defaults(); } $fromlocs = _getdirections_loadaddress($fromlocation[0]); // To $tovid = getdirections_get_vid($tonid); $tolocation = getdirections_load_locations($tovid); if (count($tolocation)) { $tolatlon = $tolocation[0]['latitude'] . ',' . $tolocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($tolatlon)) { watchdog('getdirections', 'Lat, Lon failed for node id !nid', array('!nid' => $tonid), WATCHDOG_WARNING); $tolatlon = getdirections_load_latlon_defaults(); } $tolocs = _getdirections_loadaddress($tolocation[0]); $content = getdirections_locations($fromlocs, $fromlatlon, $tolocs, $tolatlon, $width, $height); return $content; } } } return getdirections_direction(); } /** * Function to setup the map * * @param int $fromuid * Required. The uid of the starting point * @param int $touid * Required. The uid of the destination * @return * Returns the themed map */ function getdirections_user_setlocations($fromuid, $touid, $width='', $height='') { if (is_numeric($fromuid) && $fromuid && is_numeric($touid) && $touid) { // From $fromlocation = getdirections_load_locations($fromuid, 'uid'); if (count($fromlocation)) { $fromlatlon = $fromlocation[0]['latitude'] . ',' . $fromlocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($fromlatlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !nid', array('!nid' => $fromuid), WATCHDOG_WARNING); $fromlatlon = getdirections_load_latlon_defaults(); } $fromlocs = _getdirections_loadaddress($fromlocation[0]); // To $tolocation = getdirections_load_locations($touid, 'uid'); if (count($tolocation)) { $tolatlon = $tolocation[0]['latitude'] . ',' . $tolocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($tolatlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !nid', array('!nid' => $touid), WATCHDOG_WARNING); $tolatlon = getdirections_load_latlon_defaults(); } $tolocs = _getdirections_loadaddress($tolocation[0]); $content = getdirections_locations($fromlocs, $fromlatlon, $tolocs, $tolatlon, $width, $height); return $content; } } } return getdirections_direction(); } /** * Function to setup the map to display waypoints * * @param string $nids * Required. A comma delimited list of nids * @return * Returns the themed map */ function getdirections_setlocations_via($nids, $width='', $height='') { $arrnids = explode(',', $nids); foreach ($arrnids AS $key => $nid) { if ($key > GETDIRECTIONS_WAYPOINTS_MAX && $key < count($arrnids)) { continue; } if (! is_numeric($nid) || ! $nid) { continue; } $vid = getdirections_get_vid($nid); $location = getdirections_load_locations($vid); if (! count($location)) { continue; } $locs = _getdirections_loadaddress($location[0]); $latlon = $location[0]['latitude'] . ',' . $location[0]['longitude']; // sanity check if (! getdirections_latlon_check($latlon)) { watchdog('getdirections', 'Lat, Lon failed for node id !nid', array('!nid' => $nid), WATCHDOG_WARNING); continue; } $latlons[] = $latlon; } $content = getdirections_locations_via($locs, $latlons, $width, $height); return $content; } function getdirections_latlons($lls, $width='', $height='') { $latlons = array(); $locs = array(); $arrlls = explode('|', $lls); foreach ($arrlls AS $key => $ll) { if ($key > GETDIRECTIONS_WAYPOINTS_MAX && $key < count($arrlls)) { continue; } if (! getdirections_latlon_check($ll)) { watchdog('getdirections', 'Lat, Lon failed for !ll', array('!ll' => $ll), WATCHDOG_WARNING); continue; } $latlons[] = $ll; } $content = getdirections_locations_via($locs, $latlons, $width, $height); return $content; } /** * Function to setup the map * * @param int $nid * Required. The nid of the starting point * @param int $uid * Required. The uid of the destination * @return * Returns the themed map */ function getdirections_n2u_setlocation($nid, $uid, $width='', $height='') { if (is_numeric($uid) && $uid && is_numeric($nid) && $nid) { // From $vid = getdirections_get_vid($nid); $fromlocation = getdirections_load_locations($vid); if (count($fromlocation)) { $fromlatlon = $fromlocation[0]['latitude'] . ',' . $fromlocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($fromlatlon)) { watchdog('getdirections', 'Lat, Lon failed for node id !nid', array('!nid' => $nid), WATCHDOG_WARNING); $fromlatlon = getdirections_load_latlon_defaults(); } $fromlocs = _getdirections_loadaddress($fromlocation[0]); // To $tolocation = getdirections_load_locations($uid, 'uid'); if (count($tolocation)) { $tolatlon = $tolocation[0]['latitude'] . ',' . $tolocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($tolatlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !nid', array('!nid' => $uid), WATCHDOG_WARNING); $tolatlon = getdirections_load_latlon_defaults(); } $tolocs = _getdirections_loadaddress($tolocation[0]); $content = getdirections_locations($fromlocs, $fromlatlon, $tolocs, $tolatlon, $width, $height); return $content; } } } return getdirections_direction(); } /** * Function to setup the map and form * * @param int $uid * Required. The uid of the starting point * @param int $nid * Required. The nid of the destination * @return * Returns the themed map */ function getdirections_u2n_setlocation($uid, $nid, $width='', $height='') { if (is_numeric($uid) && $uid && is_numeric($nid) && $nid) { // From $fromlocation = getdirections_load_locations($uid, 'uid'); if (count($fromlocation)) { $fromlatlon = $fromlocation[0]['latitude'] . ',' . $fromlocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($fromlatlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !nid', array('!nid' => $uid), WATCHDOG_WARNING); $fromlatlon = getdirections_load_latlon_defaults(); } $fromlocs = _getdirections_loadaddress($fromlocation[0]); // To $vid = getdirections_get_vid($nid); $tolocation = getdirections_load_locations($vid); if (count($tolocation)) { $tolatlon = $tolocation[0]['latitude'] . ',' . $tolocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($tolatlon)) { watchdog('getdirections', 'Lat, Lon failed for node id !nid', array('!nid' => $nid), WATCHDOG_WARNING); $tolatlon = getdirections_load_latlon_defaults(); } $tolocs = _getdirections_loadaddress($tolocation[0]); $content = getdirections_locations($fromlocs, $fromlatlon, $tolocs, $tolatlon, $width, $height); return $content; } } } return getdirections_direction(); } ////////////////////////////// /** * Function to setup the map * * @param int $nid * Required. The nid of the starting point * @param int $uid * Required. The uid of the destination * @return * Returns the themed map */ function getdirections_n2cu_setlocation($nid, $uid, $width='', $height='') { global $user; if (is_numeric($uid) && $uid && $user->uid == $uid && is_numeric($nid) && $nid) { // From $vid = getdirections_get_vid($nid); $fromlocation = getdirections_load_locations($vid); if (count($fromlocation)) { $fromlatlon = $fromlocation[0]['latitude'] . ',' . $fromlocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($fromlatlon)) { watchdog('getdirections', 'Lat, Lon failed for node id !nid', array('!nid' => $nid), WATCHDOG_WARNING); $fromlatlon = getdirections_load_latlon_defaults(); } $fromlocs = _getdirections_loadaddress($fromlocation[0]); // To $tolocation = getdirections_load_locations($uid, 'uid'); if (count($tolocation)) { $tolatlon = $tolocation[0]['latitude'] . ',' . $tolocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($tolatlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !nid', array('!nid' => $uid), WATCHDOG_WARNING); $tolatlon = getdirections_load_latlon_defaults(); } $tolocs = _getdirections_loadaddress($tolocation[0]); $content = getdirections_locations($fromlocs, $fromlatlon, $tolocs, $tolatlon, $width, $height); return $content; } } } return getdirections_direction(); } /** * Function to setup the map and form * * @param int $uid * Required. The uid of the starting point * @param int $nid * Required. The nid of the destination * @return * Returns the themed map */ function getdirections_cu2n_setlocation($uid, $nid, $width='', $height='') { global $user; if (is_numeric($uid) && $uid && $user->uid == $uid && is_numeric($nid) && $nid) { // From $fromlocation = getdirections_load_locations($uid, 'uid'); if (count($fromlocation)) { $fromlatlon = $fromlocation[0]['latitude'] . ',' . $fromlocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($fromlatlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !nid', array('!nid' => $uid), WATCHDOG_WARNING); $fromlatlon = getdirections_load_latlon_defaults(); } $fromlocs = _getdirections_loadaddress($fromlocation[0]); // To $vid = getdirections_get_vid($nid); $tolocation = getdirections_load_locations($vid); if (count($tolocation)) { $tolatlon = $tolocation[0]['latitude'] . ',' . $tolocation[0]['longitude']; // sanity check if (! getdirections_latlon_check($tolatlon)) { watchdog('getdirections', 'Lat, Lon failed for node id !nid', array('!nid' => $nid), WATCHDOG_WARNING); $tolatlon = getdirections_load_latlon_defaults(); } $tolocs = _getdirections_loadaddress($tolocation[0]); $content = getdirections_locations($fromlocs, $fromlatlon, $tolocs, $tolatlon, $width, $height); return $content; } } } return getdirections_direction(); } ////////////////////////////// /** * Function to setup the map to display waypoints * * @param $uids * Required. A comma delimited list of uids * @return * Returns the themed map */ function getdirections_user_setlocations_via($uids, $width='', $height='') { $arruids = explode(',', $uids); foreach ($arruids AS $key => $uid) { if ($key > GETDIRECTIONS_WAYPOINTS_MAX && $key < count($arruids)) { continue; } if (! is_numeric($uid) || ! $uid) { continue; } $locations = getdirections_load_locations($uid, 'uid'); if (! count($locations)) { continue; } $locs = _getdirections_loadaddress($locations[0]); $latlon = $locations[0]['latitude'] . ',' . $locations[0]['longitude']; // sanity check if (! getdirections_latlon_check($latlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !nid', array('!nid' => $uid), WATCHDOG_WARNING); continue; } $latlons[] = $latlon; } $content = getdirections_locations_via($locs, $latlons, $width, $height); return $content; } /** * Function to setup the map and form * * @param string $direction * Required. The direction the supplied input applies to * @param string $latlon * Required. A latitude,longitude pair * @param string $locs * Optional. a description of the target. * @return * Returns the themed map and form */ function getdirections_latlon($direction, $latlon, $locs='', $width='', $height='') { $country = ''; $nid = 0; $type = 'other'; if (! getdirections_latlon_check($latlon)) { watchdog('getdirections', 'Lat, Lon failed for user id !uid', array('!uid' => $uid), WATCHDOG_WARNING); $latlon = getdirections_load_latlon_defaults(); } $content = getdirections_direction($direction, $locs, $country, $latlon, $nid, $type, $width, $height); return $content; } /** * Function to setup the map and form * * @param string $direction * Required. The direction the supplied input applies to * @param int $lid * Required. The lid of the location * @return * Returns the themed map and form */ function getdirections_setlocation_id($direction, $lid, $width='', $height='') { if (is_numeric($lid) && $lid) { $location = getdirections_load_location($lid); if (count($location)) { $country = (isset($location['country']) ? $location['country'] : ''); $latlon = $location['latitude'] . ',' . $location['longitude']; // sanity check if (! getdirections_latlon_check($latlon)) { watchdog('getdirections', 'Lat, Lon failed for location id !lid', array('!lid' => $lid), WATCHDOG_WARNING); $latlon = getdirections_load_latlon_defaults(); } // $locs only used for display now $locs = _getdirections_loadaddress($location); $content = getdirections_direction($direction, $locs, $country, $latlon, $lid, 'location', $width, $height); return $content; } } return getdirections_direction(); } /** * Function to setup the map and form * * @param string $direction * Required. The direction the supplied input applies to * @param int $tid * Required. The tid of the location enabled taxonomy term * @return * Returns the themed map and form */ function getdirections_term_setlocation($direction, $tid, $width='', $height='') { if (is_numeric($tid) && $tid) { $locations = getdirections_load_locations($tid, 'tid'); if (count($locations)) { $country = (isset($locations[0]['country']) ? $locations[0]['country'] : ''); $latlon = $locations[0]['latitude'] . ',' . $locations[0]['longitude']; // sanity check if (! getdirections_latlon_check($latlon)) { watchdog('getdirections', 'Lat, Lon failed for term id !tid', array('!tid' => $tid), WATCHDOG_WARNING); $latlon = getdirections_load_latlon_defaults(); } // $locs only used for display now #$loc = _getdirections_loadaddress($location[0]); $term = taxonomy_term_load($tid); $locs = $term->name; $content = getdirections_direction($direction, $locs, $country, $latlon, $tid, 'term', $width, $height); return $content; } } return getdirections_direction(); } /** * Function to setup the map and form * * @param string $direction * Required. The direction the supplied input applies to * @param int $cid * Required. The cid of the location enabled comment * @return * Returns the themed map and form */ function getdirections_comment_setlocation($direction, $cid, $width='', $height='') { if (is_numeric($cid) && $cid) { $locations = getdirections_load_locations($cid, 'cid'); if (count($locations)) { $country = (isset($locations[0]['country']) ? $locations[0]['country'] : ''); $latlon = $locations[0]['latitude'] . ',' . $locations[0]['longitude']; // sanity check if (! getdirections_latlon_check($latlon)) { watchdog('getdirections', 'Lat, Lon failed for comment id !cid', array('!cid' => $cid), WATCHDOG_WARNING); $latlon = getdirections_load_latlon_defaults(); } $comment = comment_load($cid); // $locs only used for display now $locs = $comment->subject; $content = getdirections_direction($direction, $locs, $country, $latlon, $cid, 'comment', $width, $height); return $content; } } return getdirections_direction(); } /** * Function to setup the map scripts * * @param $defaults * Required. the current settings. * Sets up the call to googlemaps, css and the relevant getdirections js in html head */ function getdirections_setup_map($defaults, $misc_defaults) { global $language; $getdirections_paths = getdirections_paths_get(); if (variable_get('getdirections_use_v3', 0)) { // v3 googlemaps API $key = variable_get('getdirections_api3_key', ''); $query = array(); if (! empty($key)) { $query['key'] = $key; } $query['sensor'] = 'false'; $query['language'] = $language->language; $libraries = array(); if ($defaults['advanced_autocomplete']) { $libraries[] = 'places'; } if ($misc_defaults['panoramio_show']) { $libraries[] = 'panoramio'; } // more libraries here // load libraries if any if (count($libraries)) { $query['libraries'] = implode(',', $libraries); } $scheme = ($defaults['use_https'] ? 'https' : 'http'); $gmapdomain = "maps.google.com/maps/api/js"; if (! empty($key)) { $gmapdomain = "maps.googleapis.com/maps/api/js"; } $gmaplink = url($scheme . '://' . $gmapdomain, array('query' => $query)); if ($defaults['use_advanced']) { if ($defaults['advanced_alternate']) { $js = $getdirections_paths['getdirections_v3b_path']; } else { $js = $getdirections_paths['getdirections_v3a_path']; } } else { $js = $getdirections_paths['getdirections_v3_path']; } } else { // v2 googlemaps API if (module_exists('gmap')) { $query = array( 'file' => 'api', 'v' => ($defaults['api_version'] ? $defaults['api_version'] : GMAP_API_VERSION), 'key' => gmap_get_key(), 'hl' => $language->language, ); } else { $query = array( 'file' => 'api', 'v' => ($defaults['api_version'] ? $defaults['api_version'] : '2'), 'key' => variable_get('getdirections_api_key', ''), 'hl' => $language->language, ); } $scheme = 'http://maps.google.com/maps'; if ($defaults['use_https']) { $scheme = 'https://maps-api-ssl.google.com/maps'; } $gmaplink = url($scheme, array('query' => $query)); if ($defaults['use_advanced']) { $js = $getdirections_paths['getdirections_v2a_path']; } else { $js = $getdirections_paths['getdirections_v2_path']; } } drupal_add_js($gmaplink, 'external'); drupal_add_css(GETDIRECTIONS_PATH . '/getdirections.css'); drupal_add_js($js); } /** * Implements hook_views_api(). */ function getdirections_views_api() { return array('api' => 3); } /** * Function to collect an address * * @param array $location * * @return * Returns array. */ function _getdirections_loadaddress($location, $addcountry = TRUE) { // theme it so others can change it return theme('getdirections_loadaddress', array('location' => $location, 'addcountry' => $addcountry)); } /** * Function to check the user status and existence * * @param int $uid * * @return * Returns status. */ function getdirections_user_check($uid) { $query = db_select('users', 'u')->fields('u', array('status'))->condition('u.uid', $uid); $row = $query->execute()->fetchAssoc(); return (isset($row['status']) && $row['status'] ? TRUE : FALSE); } /** * Function to get the vid from node table. * * @param int $nid * * @return * Returns vid. */ function getdirections_get_vid($nid) { if (is_numeric($nid) && $nid ) { $query = db_select('node', 'n')->fields('n', array('vid'))->condition('n.nid', $nid); $row = $query->execute()->fetchAssoc(); return (isset($row['vid']) && $row['vid'] ? $row['vid'] : FALSE); } return FALSE; } function getdirections_get_nid($vid) { if (is_numeric($vid) && $vid ) { $query = db_select('node', 'n')->fields('n', array('nid'))->condition('n.vid', $vid); $row = $query->execute()->fetchAssoc(); return (isset($row['nid']) && $row['nid'] ? $row['nid'] : FALSE); } return FALSE; } function getdirections_get_nid_from_lid($lid) { if ($lid) { $query = FALSE; if (module_exists('getlocations_fields')) { $nid = getlocations_get_nid_from_lid($lid); if ($nid) { return $nid; } } elseif (module_exists('location')) { $query = db_select('location_instance', 'i')->fields('i', array('nid'))->condition('i.lid', $lid); } if ($query) { $row = $query->execute()->fetchAssoc(); return (isset($row['nid']) && $row['nid'] ? $row['nid'] : FALSE); } } return FALSE; } function getdirections_get_tid_from_lid($lid) { $tid = FALSE; if (module_exists('getlocations_fields')) { $tid = getlocations_get_tid_from_lid($lid); } if ($tid) { return $tid; } return FALSE; } function getdirections_get_lid_title($lid) { if ($lid) { $query = FALSE; if (module_exists('getlocations_fields')) { $query = db_select('getlocations_fields', 'i')->fields('i', array('name'))->condition('i.glid', $lid); } elseif (module_exists('location')) { $query = db_select('location', 'i')->fields('i', array('name'))->condition('i.lid', $lid); } if ($query) { $row = $query->execute()->fetchAssoc(); return (isset($row['name']) && $row['name'] ? $row['name'] : FALSE); } } return FALSE; } function getdirections_is_advanced() { $defaults = getdirections_defaults(); if ( isset($defaults['use_advanced']) && $defaults['use_advanced']) { return TRUE; } return FALSE; } function getdirections_load_latlon_defaults() { $getdirections_defaults = getdirections_defaults(); return $getdirections_defaults['latlong']; } function getdirections_check() { $check = variable_get('getdirections_default', 'xxx'); if ($check == 'xxx') { return FALSE; } return TRUE; } /** * Function to check a lat,lon string * * @param string $latlon * * @return * Returns true or false */ function getdirections_latlon_check($latlon) { if (! empty($latlon) && preg_match("/[0-9.\-],[0-9.\-]/", $latlon)) { $ll = explode(',', $latlon); if (isset($ll[0]) && is_numeric($ll[0]) && $ll[0] <> 0 && isset($ll[1]) && is_numeric($ll[1]) && $ll[1] <> 0) { return $latlon; } } return FALSE; } // for colorbox and suchlike function getdirections_direction_box() { $a1 = FALSE; $a2 = FALSE; $a3 = FALSE; $a4 = FALSE; if (arg(1)) { $a1 = arg(1); } if (arg(2)) { $a2 = arg(2); } if (arg(3)) { $a3 = arg(3); } if (arg(4)) { $a4 = arg(4); } if ($a1 == 'location' && ($a2 == 'from' || $a2 == 'to') && is_numeric($a3) ) { $content = getdirections_setlocation($a2, $a3); } elseif ($a1 == 'locations' && is_numeric($a2) && is_numeric($a3)) { $content = getdirections_setlocations($a2, $a3); } elseif ($a1 == 'locations_via' && $a2) { $content = getdirections_setlocations_via($a2); } elseif ($a1 == 'locations_user_via' && $a2) { $content = getdirections_user_setlocations_via($a2); } elseif ($a1 == 'location_user' && ($a2 == 'from' || $a2 == 'to') && is_numeric($a3)) { $content = getdirections_user_setlocation($a2, $a3); } elseif ($a1 == 'locations_users' && is_numeric($a2) && is_numeric($a3)) { $content = getdirections_user_setlocations($a2, $a3); } elseif ($a1 == 'location_n2u' && is_numeric($a2) && is_numeric($a3)) { $content = getdirections_n2u_setlocation($a2, $a3); } elseif ($a1 == 'location_u2n' && is_numeric($a2) && is_numeric($a3)) { $content = getdirections_u2n_setlocation($a2, $a3); } elseif ($a1 == 'latlon' && ($a2 == 'from' || $a2 == 'to')) { $content = getdirections_latlon($a2, $a3, $a4); } elseif ($a1 == 'latlons' && $a2) { $content = getdirections_latlons($a2); } elseif ($a1 == 'location_id' && ($a2 == 'from' || $a2 == 'to')) { $content = getdirections_setlocation_id($a2, $a3); } elseif ($a1 == 'location_term' && ($a2 == 'from' || $a2 == 'to')) { $content = getdirections_term_setlocation($a2, $a3); } elseif ($a1 == 'location_comment' && ($a2 == 'from' || $a2 == 'to')) { $content = getdirections_comment_setlocation($a2, $a3); } else { $content = getdirections_direction(); } $output = theme('getdirections_box', array('content' => $content)); print $output; exit; } function getdirections_load_locations($id, $key = 'vid') { $locations = ''; $module = getdirections_get_current_supported_module(); if ($module == 'getlocations_fields') { $locations = getlocations_fields_load_locations($id, $key); } elseif ($module == 'location_node' || $module == 'location_cck' ) { $locations = location_load_locations($id, $key); } elseif ($module == 'geofield') { $locations = getdirections_other_load_locations($id, $key, 'geofield'); } elseif ($module == 'geolocation') { $locations = getdirections_other_load_locations($id, $key, 'geolocation'); } return $locations; } function getdirections_load_location($lid) { $location = ''; if (module_exists('getlocations_fields')) { $location = getlocations_fields_load_location($lid); } elseif (module_exists('location')) { $location = location_load_location($lid); } return $location; } function getdirections_other_load_locations($id, $key = 'vid', $module = '') { global $language; $locations = array(); if (empty($module)) { return $locations; } if ($key == 'nid') { $entity_type = 'node'; $obj = node_load($id); $location_name = $obj->title; } elseif ($key == 'vid') { $entity_type = 'node'; $obj = node_load(NULL, $id); $location_name = $obj->title; } elseif ($key == 'uid') { $entity_type = 'user'; $obj = user_load($id); $location_name = $obj->name; } elseif ($key == 'tid') { $entity_type = 'taxonomy_term'; $obj = taxonomy_term_load($id); $location_name = $obj->name; } elseif ($key == 'cid') { $entity_type = 'comment'; $obj = comment_load($id); $location_name = $obj->subject; } // get the field_xxx names $objfields = array(); foreach ($obj AS $k => $therest) { if (preg_match("/^field_/", $k)) { $objfields[] = $k; } } if (empty($objfields)) { return $locations; } // find a geofield if ($module == 'geofield') { $type = 'geofield'; $geofields = getdirections_other_get_fieldname($type, $module, $entity_type); if (! empty($geofields)) { $geofield = ''; foreach ($objfields AS $field) { if (in_array($field, $geofields)) { $geofield = $field; } } if ( empty($geofield)) { return $locations; } // got one $geo = $obj->{$geofield}; $geo_keys = array_keys($geo); foreach ($geo_keys AS $lang) { if ($lang == $language->language || (isset($obj->language) && $lang == $obj->language) || $lang == 'und') { $ct = 0; foreach ($geo[$lang] AS $g) { $locations[$ct]['latitude'] = $g['lat']; $locations[$ct]['longitude'] = $g['lon']; $locations[$ct][$key] = $id; if ($key == 'vid') { $locations[$ct]['nid'] = getdirections_get_nid($id); } $locations[$ct]['key'] = $key; $ct++; } } } } } elseif ($module == 'geolocation') { $type = 'geolocation_latlng'; $geolocationfields = getdirections_other_get_fieldname($type, $module, $entity_type); if (! empty($geolocationfields)) { $geolocationfield = ''; foreach ($objfields AS $field) { // test for geolocationfields if (in_array($field, $geolocationfields)) { $geolocationfield = $field; } } if (empty($geolocationfield)) { return $locations; } // got one $geo = $obj->{$geolocationfield}; $geo_keys = array_keys($geo); foreach ($geo_keys AS $lang) { if ($lang == $language->language || (isset($obj->language) && $lang == $obj->language) || $lang == 'und') { $ct = 0; foreach ($geo[$lang] AS $g) { $locations[$ct]['latitude'] = $g['lat']; $locations[$ct]['longitude'] = $g['lng']; $locations[$ct][$key] = $id; if ($key == 'vid') { $locations[$ct]['nid'] = getdirections_get_nid($id); } $locations[$ct]['key'] = $key; $locations[$ct]['name'] = $location_name; $ct++; } } } } } // addressfield if (module_exists('addressfield')) { // find an addressfield $type = 'addressfield'; $addressfields = getdirections_other_get_fieldname($type, 'addressfield', $entity_type); if (! empty($addressfields)) { foreach ($objfields AS $field) { if (in_array($field, $addressfields)) { $addressfield = $field; } } if (empty($addressfield)) { return $locations; } // got one $addr = $obj->{$addressfield}; $addr_keys = array_keys($addr); foreach ($addr_keys AS $lang) { if ($lang == $language->language || (isset($obj->language) && $lang == $obj->language) || $lang == 'und') { $ct = 0; foreach ($addr[$lang] AS $a) { $locations[$ct] += getdirections_addressfield_convert($a); $ct++; } } } } } return $locations; } function getdirections_other_get_fieldname($type, $module, $entity_type = '') { $query = db_select('field_config', 'fc'); $query->fields('fc', array('field_name')); $query->join('field_config_instance', 'i', 'fc.id = i.field_id'); $query->condition('fc.module', $module); $query->condition('fc.type', $type); $query->condition('fc.active', 1); $query->condition('fc.storage_active', 1); if (! empty($entity_type)) { $query->condition('i.entity_type', $entity_type); } $rows = $query->execute(); $field_names = array(); foreach ($rows AS $row) { $field_names[] = $row->field_name; } return $field_names; } function getdirections_paths_get() { $getdirections_paths = variable_get('getdirections_paths', array( 'getdirections_v2_path' => GETDIRECTIONS_PATH . '/getdirections_v2.js', 'getdirections_v2a_path' => GETDIRECTIONS_PATH . '/getdirections_v2a.js', 'getdirections_v3_path' => GETDIRECTIONS_PATH . '/getdirections_v3.js', 'getdirections_v3a_path' => GETDIRECTIONS_PATH . '/getdirections_v3a.js', 'getdirections_v3b_path' => GETDIRECTIONS_PATH . '/getdirections_v3b.js', )); return $getdirections_paths; } function getdirections_get_datestamp() { $d = $_GET['d']; $t = $_GET['t']; $date = $d . ' ' . $t; $time = strtotime($date); drupal_json_output(array('content' => ($time * 1000))); } function getdirections_is_mobile() { $getdirections_misc_defaults = getdirections_misc_defaults(); if (! $getdirections_misc_defaults['geolocation_mobile_check']) { return TRUE; } $getdirections_ua = getdirections_ua_get(); $str = "/" . $getdirections_ua['ua_string'] . "/i"; $is_mobile = FALSE; $ua = $_SERVER['HTTP_USER_AGENT']; if (preg_match($str, $ua)) { $is_mobile = TRUE; } return $is_mobile; } function getdirections_ua_get() { $default = array('ua_string' => "iphone|ipad|android|blackberry|blazer|bolt|symbian|mobile safari|fennec|gobrowser|iemobile|maemo browser|profile midp|minimo|kindle|opera mini|opera mobi|skyfire|teashark|uzardweb"); $getdirections_ua = variable_get('getdirections_ua', $default); return $getdirections_ua; } /** * @return * Returns location array * */ function getdirections_smart_ip() { if (module_exists('smart_ip')) { global $user; $location = FALSE; if ($user->uid > 0 && isset($user->data['geoip_location'])) { $location = $user->data['geoip_location']; } elseif (isset($_SESSION['smart_ip']['location'])) { $location = $_SESSION['smart_ip']['location']; } drupal_json_output($location); } exit; } /** * @return * Returns location array * */ function getdirections_ip_geoloc() { if (module_exists('ip_geoloc')) { $location = FALSE; if (isset($_SESSION['ip_geoloc']['location'])) { $location = $_SESSION['ip_geoloc']['location']; } drupal_json_output($location); } exit; } function getdirections_supported_modules() { return array( 'getlocations_fields', 'geofield', 'geolocation', 'location_node', 'location_cck', ); } function getdirections_get_current_supported_module() { $modules = getdirections_supported_modules(); foreach ($modules AS $module) { if (module_exists($module)) { return $module; } } return FALSE; } function getdirections_addressfield_convert($address) { $location = theme('getdirections_addressfield_convert', array('address' => $address)); return $location; } /** * Implements hook_theme(). * * This lets us tell Drupal about our theme functions and their variables. */ function getdirections_theme() { return array( 'getdirections_show' => array( 'variables' => array( 'form' => NULL, 'width' => '', 'height' => '', 'nid' => 0, 'type' => '', ), ), 'getdirections_show_locations' => array( 'variables' => array( 'width' => '', 'height' => '', 'fromlocs' => '', 'tolocs' => '', ), ), 'getdirections_show_locations_via' => array( 'variables' => array( 'width' => '', 'height' => '', 'locs' => NULL, ), ), 'getdirections_direction_form' => array( 'render element' => 'form', ), 'getdirections_box' => array( 'variables' => array('content' => NULL), 'template' => 'getdirections_box', ), 'getdirections_loadaddress' => array( 'variables' => array( 'location' => array(), 'addcountry' => FALSE, ), ), 'getdirections_addressfield_loadaddress' => array( 'variables' => array( 'address' => array(), 'addcountry' => FALSE, ), ), 'getdirections_addressfield_convert' => array( 'variables' => array( 'address' => array(), ), ), ); } /** * Theme to use for when one or no locations are supplied. * */ function theme_getdirections_show($variables) { $form = $variables['form']; $width = $variables['width']; $height = $variables['height']; $nid = $variables['nid']; $type = $variables['type']; $output = ''; $getdirections_returnlink_default = array( 'page_enable' => 0, 'page_link' => t('Return to page'), 'user_enable' => 0, 'user_link' => t('Return to page'), 'term_enable' => 0, 'term_link' => t('Return to page'), 'comment_enable' => 0, 'comment_link' => t('Return to page'), ); $getdirections_returnlink = variable_get('getdirections_returnlink', $getdirections_returnlink_default); $returnlink = FALSE; if (isset($getdirections_returnlink['page_enable']) && $getdirections_returnlink['page_enable'] && $nid > 0 && $type == 'node') { $node = node_load($nid); if ($node) { $linktext = $getdirections_returnlink['page_link']; if ( preg_match("/%t/", $linktext)) { $linktext = preg_replace("/%t/", $node->title, $linktext); } $l = l($linktext, 'node/' . $node->nid); $returnlink = ''; } } elseif (isset($getdirections_returnlink['user_enable']) && $getdirections_returnlink['user_enable'] && $nid > 0 && $type == 'user') { // $nid is actually uid $account = user_load($nid); if ($account) { $linktext = $getdirections_returnlink['user_link']; if ( preg_match("/%n/", $linktext)) { $linktext = preg_replace("/%n/", $account->name, $linktext); } $l = l($linktext, 'user/' . $account->uid); $returnlink = ''; } } elseif (isset($getdirections_returnlink['page_enable']) && $getdirections_returnlink['page_enable'] && $nid > 0 && $type == 'location') { // $nid is actually lid $id = getdirections_get_nid_from_lid($nid); if ($id) { $node = node_load($id); $linktext = $getdirections_returnlink['page_link']; if ( preg_match("/%t/", $linktext)) { $linktext = preg_replace("/%t/", $node->title, $linktext); } $l = l($linktext, 'node/' . $node->nid); $returnlink = ''; } } elseif (isset($getdirections_returnlink['term_enable']) && $getdirections_returnlink['term_enable'] && $nid > 0 && $type == 'term') { // $nid is actually tid $term = taxonomy_term_load($nid); if ($term) { $linktext = $getdirections_returnlink['term_link']; if ( preg_match("/%n/", $linktext)) { $linktext = preg_replace("/%n/", $term->name, $linktext); } $l = l($linktext, 'taxonomy/term/' . $term->tid); $returnlink = ''; } } elseif (isset($getdirections_returnlink['comment_enable']) && $getdirections_returnlink['comment_enable'] && $nid > 0 && $type == 'comment') { // $nid is actually cid $comment = comment_load($nid); if ($comment) { $linktext = $getdirections_returnlink['comment_link']; if ( preg_match("/%n/", $linktext)) { $linktext = preg_replace("/%n/", $comment->subject, $linktext); } $l = l($linktext, 'comment/' . $comment->cid); $returnlink = ''; } } if ($returnlink) { $output .= $returnlink; } $output .= $form; $getdirections_defaults = getdirections_defaults(); $getdirections_misc = getdirections_misc_defaults(); if ($getdirections_misc['show_distance']) { $output .= '
'; } if ($getdirections_misc['show_duration']) { $output .= '
'; } $help = ''; if (getdirections_is_advanced()) { if ($getdirections_defaults['waypoints'] > 0 && ! $getdirections_defaults['advanced_alternate'] ) { $help = t('Drag to activate a waypoint', array('!c' => $getdirections_defaults['waypoint_color'])); if ($getdirections_defaults['advanced_autocomplete'] && $getdirections_defaults['advanced_autocomplete_via'] ) { $help .= ' ' . t('or use the Autocomplete boxes'); } } elseif ($getdirections_defaults['advanced_alternate']) { $help = t('You can drag the route to change it'); } } $output .= '
' . $help . '
'; $header = array(); $rows[] = array( array( 'data' => '
', 'valign' => 'top', 'align' => 'center', 'class' => 'getdirections-map', ), array( 'data' => (getdirections_is_advanced() && $getdirections_defaults['advanced_alternate'] ? '' : '') . '
', 'valign' => 'top' , 'align' => 'left', 'class' => 'getdirections-list', ), ); $output .= '
' . theme('table', array('header' => $header, 'rows' => $rows)) . '
'; return $output; } /** * Theme to use for when both locations are supplied. * */ function theme_getdirections_show_locations($variables) { $width = $variables['width']; $height = $variables['height']; $fromlocs = $variables['fromlocs']; $tolocs = $variables['tolocs']; $output = ""; $output .= "
" . $fromlocs . "
"; $output .= "
" . $tolocs . "
"; $getdirections_misc = getdirections_misc_defaults(); if ($getdirections_misc['show_distance']) { $output .= '
'; } if ($getdirections_misc['show_duration']) { $output .= '
'; } $header = array(); $rows[] = array( array( 'data' => '
', 'valign' => 'top', 'align' => 'center', 'class' => 'getdirections-map', ), array( 'data' => '
', 'valign' => 'top' , 'align' => 'left', 'class' => 'getdirections-list', ), ); $output .= '
' . theme('table', array('header' => $header, 'rows' => $rows)) . '
'; return $output; } /** * Theme to use for when both locations are supplied with waypoints. * */ function theme_getdirections_show_locations_via($variables) { $width = $variables['width']; $height = $variables['height']; $locs = $variables['locs']; $output = ""; foreach ($locs AS $key => $loc) { if ($key == 0) { $label = t('From'); } elseif ($key == count($locs)-1) { $label = t('To'); } else { $label = t('Via'); } $output .= "
" . $loc . "
"; } $getdirections_misc = getdirections_misc_defaults(); if ($getdirections_misc['show_distance']) { $output .= '
'; } if ($getdirections_misc['show_duration']) { $output .= '
'; } $header = array(); $rows[] = array( array( 'data' => '
', 'valign' => 'top', 'align' => 'center', 'class' => 'getdirections-map', ), array( 'data' => '
', 'valign' => 'top' , 'align' => 'left', 'class' => 'getdirections-list', ), ); $output .= '
' . theme('table', array('header' => $header, 'rows' => $rows)) . '
'; return $output; } function theme_getdirections_direction_form($variables) { $form = $variables['form']; // if you want to do fancy things with the form, do it here ;-) $getdirections_defaults = getdirections_defaults(); $getdirections_misc = getdirections_misc_defaults(); if (isset($form['mto'])) { $form['mto']['#prefix'] = '
'; $form['mto']['#suffix'] = '
'; } if (isset($form['mfrom'])) { $form['mfrom']['#prefix'] = '
'; $form['mfrom']['#suffix'] = '
'; } if (isset($form['travelmode'])) { $form['travelmode']['#prefix'] = '
'; $form['travelmode']['#suffix'] = '
'; } if (isset($form['travelextras'])) { $form['travelextras']['#prefix'] = '
'; $form['travelextras']['#suffix'] = '
'; } if (! $getdirections_defaults['advanced_autocomplete']) { if ($getdirections_misc['geolocation_enable'] && getdirections_is_mobile()) { if ($getdirections_misc['geolocation_option'] == 1) { // html5 geolocation $geolocation_button = ''; $geolocation_button .= ''; $form['from']['#field_suffix'] = '   ' . $geolocation_button; } elseif ($getdirections_misc['geolocation_option'] == 2 && module_exists('smart_ip')) { // smart ip $geolocation_button = ''; $geolocation_button .= ''; $form['from']['#field_suffix'] = '   ' . $geolocation_button; } elseif ($getdirections_misc['geolocation_option'] == 3 && module_exists('ip_geoloc')) { // ip_geoloc $geolocation_button = ''; $geolocation_button .= ''; $form['from']['#field_suffix'] = '   ' . $geolocation_button; } } } if (getdirections_is_advanced()) { $desc = t('Fill in the form below.
You can also click on the map and move the marker.'); if (isset($form['country_from'])) { $desc = t('Select a country first, then type in a town.
You can also click on the map and move the marker.'); $form['country_from']['#prefix'] = '
'; $form['country_from']['#suffix'] = '
'; } if (isset($form['from']) && $form['from']['#type'] == 'textfield' && (module_exists('location') || module_exists('getlocations_fields')) && ! $getdirections_defaults['advanced_autocomplete'] && isset($form['country_from']) ) { $form['from']['#suffix'] = '
'; } if (isset($form['country_to'])) { $form['country_to']['#prefix'] = '
'; $form['country_to']['#suffix'] = '
'; } if (isset($form['to']) && $form['to']['#type'] == 'textfield' && (module_exists('location') || module_exists('getlocations_fields')) && ! $getdirections_defaults['advanced_autocomplete'] && isset($form['country_to']) ) { $form['to']['#suffix'] = '
'; } if ($getdirections_defaults['advanced_autocomplete'] && $getdirections_defaults['waypoints'] > 0 && $getdirections_defaults['advanced_autocomplete_via'] && ! $getdirections_defaults['advanced_alternate'] ) { for ($ct = 1; $ct <= $getdirections_defaults['waypoints']; $ct++) { if ($ct == 1) { $form['via_autocomplete_' . $ct]['#prefix'] = '
'; $form['via_autocomplete_' . $ct]['#suffix'] = '
'; } elseif ($ct == $getdirections_defaults['waypoints']) { $form['via_autocomplete_' . $ct]['#prefix'] = '
'; $form['via_autocomplete_' . $ct]['#suffix'] = '
'; } else { $form['via_autocomplete_' . $ct]['#prefix'] = '
'; $form['via_autocomplete_' . $ct]['#suffix'] = '
'; } } } } else { if (isset($form['country_from'])) { $form['country_from']['#prefix'] = '
'; $form['country_from']['#suffix'] = '
'; } if (isset($form['country_to'])) { $form['country_to']['#prefix'] = '
'; $form['country_to']['#suffix'] = '
'; } $desc = t('Fill in the form below.'); } if (isset($form['trafficinfo'])) { $form['trafficinfo']['#prefix'] = '
'; $form['trafficinfo']['#suffix'] = '
'; } if (isset($form['bicycleinfo'])) { $form['bicycleinfo']['#prefix'] = '
'; $form['bicycleinfo']['#suffix'] = '
'; } if (isset($form['transitinfo'])) { $form['transitinfo']['#prefix'] = '
'; $form['transitinfo']['#suffix'] = '
'; } if (isset($form['panoramio'])) { $form['panoramio']['#prefix'] = '
'; $form['panoramio']['#suffix'] = '
'; } if (isset($form['switchfromto'])) { $form['switchfromto']['#prefix'] = '
'; $form['switchfromto']['#suffix'] = '
'; } if (isset($form['next'])) { $form['next']['#prefix'] = '
'; $form['next']['#suffix'] = '
'; } if (isset($form['submit'])) { $form['submit']['#prefix'] = '
'; $form['submit']['#suffix'] = '
'; } $output = '

' . $desc . '

'; $output .= drupal_render_children($form); return $output; } function template_preprocess_getdirections_box(&$variables) { if (module_exists('admin_menu')) { admin_menu_suppress(); } drupal_add_js(GETDIRECTIONS_PATH . '/getdirections_box.js'); // Construct page title if (drupal_get_title()) { $head_title = array(strip_tags(drupal_get_title()), variable_get('site_name', 'Drupal')); } else { $head_title = array(variable_get('site_name', 'Drupal')); if (variable_get('site_slogan', '')) { $head_title[] = variable_get('site_slogan', ''); } } $variables['head_title'] = implode(' | ', $head_title); $variables['base_path'] = base_path(); $variables['head'] = drupal_get_html_head(); $variables['language'] = $GLOBALS['language']; $variables['language']->dir = $GLOBALS['language']->direction ? 'rtl' : 'ltr'; $variables['css'] = drupal_add_css(); $variables['styles'] = drupal_get_css(); $variables['scripts'] = drupal_get_js(); $variables['title'] = drupal_get_title(); // Closure should be filled last. $variables['closure'] = theme('closure'); // Compile a list of classes that are going to be applied to the body element. // This allows advanced theming based on context (home page, node of certain type, etc.). $body_classes = array(); // Add a class that tells us whether we're on the front page or not. $body_classes[] = $variables['is_front'] ? 'front' : 'not-front'; // Add a class that tells us whether the page is viewed by an authenticated user or not. $body_classes[] = $variables['logged_in'] ? 'logged-in' : 'not-logged-in'; $body_classes[] = 'no-sidebars'; // Implode with spaces. $variables['body_classes'] = implode(' ', $body_classes); } function theme_getdirections_loadaddress($variables) { $location = $variables['location']; $addcountry = $variables['addcountry']; $loc = array(); if (isset($location['name']) && $location['name']) { $loc[] = $location['name']; } if (isset($location['street']) && $location['street']) { $loc[] = $location['street']; } if (isset($location['additional']) && $location['additional']) { $loc[] = $location['additional']; } if (isset($location['city']) && $location['city']) { $loc[] = $location['city']; } if (isset($location['province_name']) && $location['province_name']) { $loc[] = $location['province_name']; } if (isset($location['postal_code']) && $location['postal_code']) { $loc[] = $location['postal_code']; } if ($addcountry) { if (isset($location['country']) && $location['country']) { $loc[] = drupal_strtoupper($location['country']); } } $output = implode(', ', $loc); return $output; } function theme_getdirections_addressfield_loadaddress($variables) { $address = $variables['address']; $addcountry = $variables['addcountry']; $location = getdirections_addressfield_convert($address); return theme('getdirections_loadaddress', array('location' => $location, 'addcountry' => $addcountry)); } function theme_getdirections_addressfield_convert($variables) { $address = $variables['address']; $location = array(); if (is_array($address) && ! empty($address)) { $name = array(); if (isset($address['name_line']) && $address['name_line']) { $name[] = $address['name_line']; } if (isset($address['first_name']) && $address['first_name']) { if (isset($address['last_name']) && $address['last_name']) { $name[] = $address['first_name'] . ' ' . $address['last_name']; } else { $name[] = $address['first_name']; } } elseif (isset($address['last_name']) && $address['last_name']) { $name[] = $address['last_name']; } if (isset($address['organisation_name']) && $address['organisation_name']) { $name[] = $address['organisation_name']; } $location['name'] = (count($name) ? implode(", ", $name) : ''); $location['street'] = $address['thoroughfare']; $additional = array(); if ($address['premise']) { $additional[] = $address['premise']; } if ($address['sub_premise']) { $additional[] = $address['sub_premise']; } $location['additional'] = (count($additional) ? implode(", ", $additional) : ''); $city = array(); if ($address['dependent_locality']) { $city[] = $address['dependent_locality']; } if ($address['locality']) { $city[] = $address['locality']; } $location['city'] = (count($city) ? implode(", ", $city) : ''); $admin_area = array(); if ($address['sub_administrative_area']) { $admin_area[] = $address['sub_administrative_area']; } if ($address['administrative_area']) { $admin_area[] = $address['administrative_area']; } $location['province_name'] = (count($admin_area) ? implode(", ", $admin_area) :''); $location['postal_code'] = drupal_strtoupper($address['postal_code']); $location['country_name'] = (isset($address['country_name']) ? $address['country_name'] : $address['country']); $location['country'] = $address['country']; } return $location; }