D7net Mini Sh3LL v1

 
OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : OFF
Directory (0755) :  /var/www/html/hpsc/../antarctic-drupal-7.89/modules/tracker/../toolbar/../menu/../../sites/all/modules/popup/../gmap/

 Home   ☍ Command   ☍ Upload File   ☍Info Server   ☍ Buat File   ☍ Mass deface   ☍ Jumping   ☍ Config   ☍ Symlink   ☍ About 

Current File : /var/www/html/hpsc/../antarctic-drupal-7.89/modules/tracker/../toolbar/../menu/../../sites/all/modules/popup/../gmap/gmap_location.module
<?php

/**
 * @file
 * GMap Location module is a module to add some gmap
 * funcationality based on location.modules information.
 *
 * The main functions are to provide a map showing all of the
 * nodes or users that have location information on a map.
 */

/**
 * Implements hook_theme().
 */
function gmap_location_theme() {
  return array(
    'gmap_location_user_page' => array(
      'variables' => array(
        'header' => '',
        'map' => '',
        'footer' => '',
      ),
    ),
    'gmap_location_node_page' => array(
      'variables' => array(
        'count' => 0,
        'header' => '',
        'map' => '',
        'footer' => '',
      ),
    ),
    // @@@ Test this one thoroughly.
    'gmap_location_infowindow_node' => array(
      'pattern' => 'gmap_location_infowindow_node__',
      'variables' => array(
        'node' => NULL,
        'opt' => NULL,
      ),
    ),
    'gmap_location_infowindow_user' => array(
      'variables' => array(
        'account' => NULL,
      ),
    ),
  );
}

/**
 * Implements hook_permission().
 */
function gmap_location_permission() {
  return array(
    'view node map' => array(
      'title' => t('View node map'),
      'description' => t('See the sitewide node map.'),
    ),
    'view user map' => array(
      'title' => t('View user map'),
      'description' => t('See the sitewide user map.'),
    ),
    'view user location details' => array(
      'title' => t('View user location details'),
      'description' => t('See the users associated with markers on the sitewide user map.'),
    ),
  );
}

/**
 * Get the user map variable defaults.
 */
function _gmap_location_user_map_defaults() {
  return array(
    'macro' => '[gmap |id=usermap|center=40,0|zoom=3|width=100%|height=400px]',
    'header' => 'This map illustrates the extent of users of this website. Each marker indicates a user that has entered their locations.',
    'footer' => '',
    'markermode' => 1,
  );
}

/**
 * Get the node map variable defaults.
 */
function _gmap_location_node_map_defaults() {
  return array(
    'macro' => '[gmap |id=nodemap|center=40,0|zoom=3|width=100%|height=400px]',
    'header' => 'This map illustrates the locations of the nodes on this website. Each marker indicates a node associated with a specific location.',
    'footer' => '',
    'markermode' => 1,
  );
}

/**
 * Implements hook_menu().
 */
function gmap_location_menu() {
  $items['map/user'] = array(
    'type' => MENU_NORMAL_ITEM,
    'title' => 'User locations',
    'access arguments' => array('view user map'),
    'page callback' => 'gmap_location_user_page',
  );
  $items['map/user/load'] = array(
    'type' => MENU_CALLBACK,
    'access arguments' => array('view user map'),
    'page callback' => 'gmap_location_user_point',
  );
  $items['map/node'] = array(
    'type' => MENU_NORMAL_ITEM,
    'title' => 'Node locations',
    'access arguments' => array('view node map'),
    'page callback' => 'gmap_location_node_page',
  );
  $items['map/node/load/%node/%'] = array(
    'type' => MENU_CALLBACK,
    'access arguments' => array('view node map'),
    'page callback' => 'gmap_location_node_point',
    'page arguments' => array(3, 4),
  );
  $items['admin/config/services/gmap_location'] = array(
    'type' => MENU_NORMAL_ITEM,
    'title' => 'GMap Location',
    'access arguments' => array('administer site configuration'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('gmap_location_admin_settings'),
    'description' => 'Configure GMap Location settings.',
  );
  return $items;
}

/**
 * Draws a page with a google map that has all of the site users.
 */
function gmap_location_user_page() {
  $markertypes = variable_get('gmap_role_markers', array(DRUPAL_AUTHENTICATED_RID => 'drupal'));
  $usermap = variable_get('gmap_user_map', _gmap_location_user_map_defaults());
  $map = array_merge(gmap_defaults(), gmap_parse_macro($usermap['macro']));
  $mode = $usermap['markermode'];
  $map['rmtcallback'] = url('map/user/load');
  $map['markermode'] = $usermap['markermode'];

  // Find the highest rid, if available, for each user with a location.

  $result = db_query("
    SELECT
      u.name, MAX(r.rid) as role, i.uid, i.lid, l.latitude, l.longitude
    FROM
      {users} u
    INNER JOIN
      {location_instance} i
      ON
        u.uid = i.uid
    INNER JOIN
      {location} l
      ON
        i.lid = l.lid
    LEFT JOIN
      {users_roles} r
      ON
        i.uid = r.uid
    WHERE
      u.status = 1
    AND
      u.access != 0
    AND
      (l.latitude != 0 OR l.longitude != 0)
    GROUP BY
      i.uid, i.lid, u.name, l.latitude, l.longitude");
  // The u.name, l.latitude, and l.longitude in the GROUP BY are needed for
  // PostgreSQL.

  foreach ($result as $row) {
    // Determine marker type to show.
    $marker = $markertypes[DRUPAL_AUTHENTICATED_RID];
    if ($row->role && isset($markertypes[$row->role])) {
      $marker = $markertypes[$row->role];
    }

    // Users with the 'view user location details'
    // permission are allowed to see who each marker represents.
    if (user_access('view user location details')) {
      if ($mode == 1) {
        $newmarker['rmt'] = $row->uid;
      }
      elseif ($mode == 2) {
        $newmarker['link'] = url('user/' . $row->uid);
      }
      $newmarker['latitude'] = $row->latitude;
      $newmarker['longitude'] = $row->longitude;
      $newmarker['markername'] = $marker;
      $newmarker['opts']['title'] = check_plain($row->name);
    }
    else {
      $newmarker['latitude'] = $row->latitude;
      $newmarker['longitude'] = $row->longitude;
      $newmarker['markername'] = $marker;
    }
    $map['markers'][] = $newmarker;
  }

  // @@@ Move to gmap_addons.
  /*
  if (user_access('view user location details')
  && function_exists('buddylist_get_buddies') && count($locationbyuser)>0) {
  // Create lines for buddies.
  if (!isset($thismap['shapes'])) {
  $thismap['shapes']=array();
  }
  ksort($locationbyuser);
  foreach ($locationbyuser as $key => $value) {
  $buddies= buddylist_get_buddies($key);
  foreach ($buddies as $bkey => $bvalue) {
  if ($bkey > $key && isset($locationbyuser[$bkey])) {
  $thismap['shape'][] = array(
  'points' => array($locationbyuser[$key], $locationbyuser[$bkey]),
  'type' => 'line'
  );
  }
  }
  }
  }
  */
  $element = array(
    '#type' => 'gmap',
    '#gmap_settings' => $map,
  );

  return theme('gmap_location_user_page', array(
      'header' => $usermap['header'],
      'map' => drupal_render($element),
      'footer' => $usermap['footer'],
    )
  );
}

/**
 * AHAH callback for getting the contents of a user point popup.
 */
function gmap_location_user_point() {
  $uid = arg(3);
  if (is_numeric($uid) && $account = user_load($uid)) {
    echo theme('gmap_location_infowindow_user', array('account' => $account));
    exit();
  }
}

/**
 * Theme function for displaying the user page.
 */
function theme_gmap_location_user_page(&$vars) {
  $header = $vars['header'];
  $map = $vars['map'];
  $footer = $vars['footer'];

  global $user;

  $output = "<p>$header</p>\n<p>$map</p>\n<p>$footer</p>";

  if ($user->uid > 0) {
    $output .= '<p>' . t('To add/change your location to the user map, <a href="@url">edit your location</a>.', array('@url' => url('user/' . $user->uid . '/edit'))) . '</p>';
  }

  return $output;
}

/**
 * Draws a page with a google map with the node on it.
 *
 * Or if no node is set all of the nodes on it.
 *
 * @param int $nid
 *   The node nid to draw on the map.
 *   If this is not set, or is null then all of the nodes will be drawn.
 */
function gmap_location_node_page($nid = NULL) {

  $nodemap = variable_get('gmap_node_map', _gmap_location_node_map_defaults());
  $markertypes = variable_get('gmap_node_markers', array());

  $map = array_merge(
    gmap_defaults(),
    gmap_parse_macro($nodemap['macro']));

  $mode = $nodemap['markermode'];
  $map['rmtcallback'] = url('map/node/load');
  $map['markermode'] = $nodemap['markermode'];

  if (!isset($map['markers']) || !is_array($map['markers'])) {
    $map['markers'] = array();
  }

  $query = db_select('node', 'n');

  $query
    ->condition('n.status', 1)
    ->condition(db_or()->condition('l.latitude', 0, '!=')->condition('l.longitude', 0, '!='))
    ->fields('n', array('nid', 'type', 'title'))
    ->fields('l', array('latitude', 'longitude'));
  $query->innerjoin('location_instance', 'i', 'n.vid = i.vid');
  $query->innerjoin('location', 'l', 'l.lid = i.lid');

  if (is_numeric($nid) && $nid > 0) {
    $query->condition('n.nid', $nid);
  }

  if (module_exists('gmap_taxonomy')) {
    $query
      ->fields('m', array('marker'))
      ->leftjoin('gmap_taxonomy_node', 'm', 'n.nid = m.nid');
  }
  $query->addTag('node_access');
  $result = $query->execute();

  $count = 0;
  foreach ($result as $row) {
    $count++;
    $newmarker = array();
    if ($mode == 1) {
      // Popup.
      $newmarker['rmt'] = $row->nid . '/0';
    }
    elseif ($mode == 2) {
      // Link.
      $newmarker['link'] = url('node/' . $row->nid);
    }

    $newmarker['latitude'] = $row->latitude;
    $newmarker['longitude'] = $row->longitude;
    $newmarker['markername'] = isset($markertypes[$row->type]) ? $markertypes[$row->type] : 'drupal';
    if (isset($row->marker) && !empty($row->marker)) {
      $newmarker['markername'] = $row->marker;
    }
    $newmarker['opts']['title'] = $row->title;
    $map['markers'][] = $newmarker;
  }

  // Special stuff for single marker.
  if ($count == 1) {
    // Center map on only marker.
    $map['latitude'] = $map['markers'][0]['latitude'];
    $map['longitude'] = $map['markers'][0]['longitude'];

    // Autoclick in single marker case.
    if ($mode == 1) {
      $map['markers'][0]['autoclick'] = TRUE;
    }
  }

  // Special cases for single node view.
  if (is_numeric($nid) && $node = node_load($nid)) {

    // Organic groups. Group nodes are displayed as
    // a map of the users who belong to the group.
    if (user_access('view user location details') && function_exists('og_is_group_type') && og_is_group_type($node->type)) {
      $rolemarkers = variable_get('gmap_role_markers', array());
      // Reset markers.
      $map['markers'] = array();

      $result = db_query("
        SELECT
          MAX(r.rid) as role, i.uid, l.latitude, l.longitude
        FROM
          {og_uid} o
        INNER JOIN {location_instance} i
          ON i.uid = o.uid
        INNER JOIN {location} l
          ON l.lid = i.lid
        LEFT JOIN {users_roles} r
          ON i.uid = r.uid
        WHERE
          o.nid = :nid
        AND
          o.is_active >= 1
        AND
          (l.latitude != 0 OR l.longitude != 0)
        GROUP BY
          o.uid",
        array(
          ':nid' => $nid,
        )
      );

      foreach ($result as $row) {
        $newmarker = array();
        $newmarker['rmt'] = $nid . '/' . $row->uid;

        // Determine marker type to show.
        $newmarker['markername'] = $markertypes[DRUPAL_AUTHENTICATED_RID];
        if ($row->role && isset($rolemarkers[$row->role])) {
          $newmarker['markername'] = $rolemarkers[$row->role];
        }
        $newmarker['latitude'] = $row->latitude;
        $newmarker['longitude'] = $row->longitude;
        $map['markers'][] = $newmarker;
      }
    }
  }
  $element = array(
    '#type' => 'gmap',
    '#gmap_settings' => $map,
  );
  return theme('gmap_location_node_page', array(
      'count' => $count,
      'header' => $nodemap['header'],
      'map' => drupal_render($element),
      'footer' => $nodemap['footer'],
    )
  );
}

/**
 * AHAH callback for getting the contents of a node point popup.
 */
function gmap_location_node_point($node, $opt) {
  $output = '';
  // @@@ Make sure $node->type is an ok thing to do here..
  echo theme(array(
    "gmap_location_infowindow_node__$node->type",
    'gmap_location_infowindow_node',
  ), array(
    'node' => $node,
    'opt' => $opt,
  ));
  // exit();
  return NULL;
}

/**
 * Theme function for displaying the node page.
 */
function theme_gmap_location_node_page(&$vars) {
  $count = $vars['count'];
  $header = $vars['header'];
  $map = $vars['map'];
  $footer = $vars['footer'];

  $output = '';
  if ($header) {
    $output .= "<p>$header</p>";
  }
  $output .= $map;
  if ($footer) {
    $output .= "<p>$footer</p>";
  }
  return $output;
}

/**
 * Admin Settings Page.
 */
function gmap_location_admin_settings() {
  $form['user'] = array(
    '#type' => 'fieldset',
    '#title' => t('User settings'),
  );

  // gmap_user_map defaults.
  $temp = variable_get('gmap_user_map', _gmap_location_user_map_defaults());

  $form['user']['gmap_user_map'] = array(
    '#type' => 'fieldset',
    '#title' => t('User Map (<em>map/user</em>)'),
    '#tree' => TRUE,
  );
  $form['user']['gmap_user_map']['macro'] = array(
    '#type' => 'textfield',
    '#title' => t('Macro'),
    '#default_value' => $temp['macro'],
    '#size' => 50,
    '#maxlength' => 500,
    '#description' => t(
      'The GMap macro used when the user information is displayed. See the !macros_link.',
      array(
        '!macros_link' => l(
          'documentation on GMap macros',
          'http://drupal.org/documentation/modules/gmap/macros',
          array(
            'attributes' => array(
              'target' => '_blank',
            ),
          )
        ),
      )
    ),
  );
  $form['user']['gmap_user_map']['header'] = array(
    '#type' => 'textarea',
    '#title' => t('Page header'),
    '#description' => t('Text at the top of the user map.', array('@url' => url('map/user'))),
    '#default_value' => $temp['header'],
    '#cols' => 50,
    '#rows' => 6,
  );
  $form['user']['gmap_user_map']['footer'] = array(
    '#type' => 'textarea',
    '#title' => t('Page footer'),
    '#description' => t('Text at the bottom of the user map.'),
    '#default_value' => $temp['footer'],
    '#cols' => 50,
    '#rows' => 6,
  );
  $form['user']['gmap_user_map']['markermode'] = array(
    '#type' => 'radios',
    '#title' => t('Marker action'),
    '#description' => t('Perform this action when a marker is clicked.'),
    '#options' => array(t('Do nothing'), t('Open info window'), t('Open link')),
    '#default_value' => $temp['markermode'],
  );

  // Option to use a different marker for each role.
  $form['user']['gmap_role_markers'] = array(
    '#type' => 'fieldset',
    '#title' => t('Markers per role'),
    '#description' => t('Choose a marker to represent each user role on the user map. If a user belongs to multiple roles, the marker for the highest Role ID will be used.'),
    '#tree' => TRUE,
  );

  // Retrieve and sort list of roles, sans anonymous user.
  $roles = user_roles(TRUE);
  // asort($roles);

  $defaults = variable_get('gmap_role_markers', array());

  // Create a selection box per role.
  foreach ($roles as $rid => $role) {
    $form['user']['gmap_role_markers'][$rid] = array(
      '#type' => 'gmap_markerchooser',
      '#title' => t('%role (Role ID: %rid)', array('%role' => $role, '%rid' => $rid)),
      '#default_value' => isset($defaults[$rid]) ? $defaults[$rid] : 'drupal',
    );
  }

  $form['node'] = array(
    '#type' => 'fieldset',
    '#title' => t('Node settings'),
  );

  // gmap_node_map defaults.
  $temp = variable_get('gmap_node_map', _gmap_location_node_map_defaults());

  $form['node']['gmap_node_map'] = array(
    '#type' => 'fieldset',
    '#title' => t('Node Map (<em>map/node</em>)'),
    '#tree' => TRUE,
  );
  $form['node']['gmap_node_map']['macro'] = array(
    '#type' => 'textfield',
    '#title' => t('Macro'),
    '#default_value' => $temp['macro'],
    '#size' => 50,
    '#maxlength' => 500,
    '#description' => t(
      'The GMap macro used when the node information is displayed. See the !macros_link.',
      array(
        '!macros_link' => l(
          'documentation on GMap macros',
          'http://drupal.org/documentation/modules/gmap/macros',
          array(
            'attributes' => array(
              'target' => '_blank',
            ),
          )
        ),
      )
    ),
  );
  $form['node']['gmap_node_map']['header'] = array(
    '#type' => 'textarea',
    '#title' => t('Page header'),
    '#description' => t('Text at the top of the node map.'),
    '#default_value' => $temp['header'],
    '#cols' => 50,
    '#rows' => 6,
  );
  $form['node']['gmap_node_map']['footer'] = array(
    '#type' => 'textarea',
    '#title' => t('Page footer'),
    '#description' => t('Text at the bottom of the node map.'),
    '#default_value' => $temp['footer'],
    '#cols' => 50,
    '#rows' => 6,
  );
  $form['node']['gmap_node_map']['markermode'] = array(
    '#type' => 'radios',
    '#title' => t('Marker action'),
    '#description' => t('Perform this action when a marker is clicked.'),
    '#options' => array(t('Do nothing'), t('Open info window'), t('Open link')),
    '#default_value' => $temp['markermode'],
  );

  // Option to use a different marker for each content type.
  $form['node']['gmap_node_markers'] = array(
    '#type' => 'fieldset',
    '#title' => t('Markers per content type'),
    '#description' => t('Choose a marker to represent each type of content on the node map.'),
    '#tree' => TRUE,
  );

  $ntypes = node_type_get_types();

  $defaults = variable_get('gmap_node_markers', array());

  foreach ($ntypes as $key => $value) {
    $form['node']['gmap_node_markers'][$key] = array(
      '#type' => 'gmap_markerchooser',
      '#title' => t('Marker for %type', array('%type' => gmap_location_t("nodetype:type:$key:name", $value->name))),
      '#default_value' => isset($defaults[$key]) ? $defaults[$key] : 'drupal',
    );
    $settings = variable_get("location_settings_node_$key", FALSE);
    if (!((isset($settings['multiple']['max']) && $settings['multiple']['max']) || variable_get("location_maxnum_$key", 0))) {
      $form['node']['gmap_node_markers'][$key]['#description'] = t('This content type is not currently Location enabled.');
    }
  }
  return system_settings_form($form);
}

/**
 * Implements hook_block_info().
 */
function gmap_location_block_info() {
  return array(
    0 => array(
      'info' => t('Location map'),
      // @@@ Check whether we can fix this by telling drupal what js to use.
      'cache' => DRUPAL_NO_CACHE,
    ),
    1 => array(
      'info' => t('Author map'),
      // @@@
      'cache' => DRUPAL_NO_CACHE,
    ),
  );
}

/**
 * Implements hook_block_configure().
 */
function gmap_location_block_configure($delta = '') {
  // Location map.
  if ($delta == 0) {
    $form['gmap_location_block_macro'] = array(
      '#type' => 'textfield',
      '#title' => t('Map Macro'),
      '#size' => 60,
      '#maxlength' => 500,
      '#description' => t('A macro to be used as a base map for the location block.  This map will be recentered on the location, so the center is not that important. <p>Alternate base map macros can be entered for a specific node type below.'),
      '#default_value' => variable_get('gmap_location_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]'),
    );

    $ntypes = node_type_get_types();
    foreach ($ntypes as $key => $value) {
      $settings = variable_get("location_settings_node_$key", FALSE);
      if ((isset($settings['multiple']['max']) && $settings['multiple']['max']) || variable_get("location_maxnum_$key", 0)) {
        $form["gmap_location_block_macro_$key"] = array(
          '#type' => 'textfield',
          '#title' => t('Map Macro for %type', array('%type' => gmap_location_t("nodetype:type:$key:name", $value->name))),
          '#size' => 60,
          '#maxlength' => 500,
          '#default_value' => variable_get("gmap_location_block_macro_$key", ''),
        );
      }
    }
  }
  // Author map.
  elseif ($delta == 1) {
    $form['gmap_location_author_block_macro'] = array(
      '#type' => 'textfield',
      '#title' => t('Map Macro'),
      '#size' => 60,
      '#maxlength' => 500,
      '#description' => t('A macro to be used as a base map for the location block author.  This map will be recentered on the location, so the center is not that important.'),
      '#default_value' => variable_get('gmap_location_author_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]'),
    );

    $ntypes = node_type_get_types();
    foreach ($ntypes as $type => $name) {
      $ntypes[$type] = check_plain(gmap_location_t("nodetype:type:$type:name", $name));
    }
    $form['gmap_location_author_block_types'] = array(
      '#type' => 'checkboxes',
      '#title' => t('Enable author block for the following content types'),
      '#options' => $ntypes,
      '#default_value' => variable_get('gmap_location_author_block_types', array()),
    );

    $form['gmap_location_author_block_marker'] = array(
      '#type' => 'gmap_markerchooser',
      '#title' => t('Marker to use for author map'),
      '#default_value' => variable_get('gmap_location_author_block_marker', 'drupal'),
    );
  }
  return $form;
}

/**
 * Implements hook_block_save().
 */
function gmap_location_block_save($delta = '', $edit = array()) {
  if ($delta == 0) {
    // Save macro, if customized.
    $macro = trim($edit['gmap_location_block_macro']);
    if ($macro == '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]' || empty($macro)) {
      // If the user doesn't customize the variable, don't set it.
      // This saves a lot of headache in the future.
      variable_del('gmap_location_block_macro');
    }
    else {
      variable_set('gmap_location_block_macro', $macro);
    }

    // Save node type specific macros.
    $ntypes = node_type_get_types();
    foreach ($ntypes as $key => $value) {
      $settings = variable_get("location_settings_node_$key", FALSE);
      if ((isset($settings['multiple']['max']) && $settings['multiple']['max']) || variable_get("location_maxnum_$key", 0)) {
        $val = trim($edit["gmap_location_block_macro_$key"]);
        if (empty($val)) {
          variable_del("gmap_location_block_macro_$key");
        }
        else {
          variable_set('gmap_location_block_macro_' . $key, $edit['gmap_location_block_macro_' . $key]);
        }
      }
    }
  }
  elseif ($delta == 1) {
    // Save macro, if customized.
    $macro = trim($edit['gmap_location_author_block_macro']);
    if ($macro == '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]' || empty($macro)) {
      // If the user doesn't customize the variable, don't set it.
      // This saves a lot of headache in the future.
      variable_del('gmap_location_author_block_macro');
    }
    else {
      variable_set('gmap_location_author_block_macro', $macro);
    }

    // Save "enabled on" types.
    variable_set('gmap_location_author_block_types', array_keys(array_filter($edit['gmap_location_author_block_types'])));
    // Save marker.
    variable_set('gmap_location_author_block_marker', $edit['gmap_location_author_block_marker']);
  }
}

/**
 * Implements hook_block_view().
 */
function gmap_location_block_view($delta = '') {
  switch ($delta) {
    case 0:
      if (arg(0) == 'node' && is_numeric(arg(1))) {
        return _gmap_location_block_view(arg(1));
      }
      break;

    case 1:
      if (arg(0) == 'node' && is_numeric(arg(1))) {
        return _gmap_location_author_block_view(arg(1));
      }
      break;
  }
}

/**
 * Location block view.
 */
function _gmap_location_block_view($nid) {
  $block = array();
  $node = node_load($nid);
  if (!empty($node->locations)) {
    $markertypes = variable_get('gmap_node_markers', array());
    $markers = array();
    $count = 0;
    foreach ($node->locations as $loc) {
      // @@@ Todo: Client side geocoding
      if (location_has_coordinates($loc)) {
        $count++;
        $markername = isset($markertypes[$node->type]) ? $markertypes[$node->type] : 'drupal';
        if (module_exists('gmap_taxonomy')) {
          $t = db_query('SELECT marker FROM {gmap_taxonomy_node} WHERE nid = :nid', array(':nid' => $node->nid))
            ->fetchField();
          if (!empty($t)) {
            $markername = $t;
          }
        }

        $markertitle = $node->title;
        if (!empty($loc['name'])) {
          $markertitle = $loc['name'];
        }

        $markers[] = array(
          'latitude' => $loc['latitude'],
          'longitude' => $loc['longitude'],
          'markername' => $markername,
          'offset' => $count - 1,
          'opts' => array('title' => $markertitle),
        );
      }
    }
    if (!empty($markers)) {
      $macro = variable_get('gmap_location_block_macro_' . $node->type, '');
      if (empty($macro)) {
        $macro = variable_get('gmap_location_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]');
      }
      $map = gmap_parse_macro($macro);
      $map['latitude'] = $markers[0]['latitude'];
      $map['longitude'] = $markers[0]['longitude'];
      $map['markers'] = $markers;
      $block['subject'] = t('Location', array(), array('context' => 'geolocation'));
      $element = array(
        '#type' => 'gmap',
        '#gmap_settings' => $map,
      );
      // @@@ Better theme
      $block['content'] = drupal_render($element);
    }
  }
  return $block;
}

/**
 * Location author block view.
 */
function _gmap_location_author_block_view($nid) {
  $block = array();
  $node = node_load($nid);
  if (in_array($node->type, variable_get('gmap_location_author_block_types', array()))) {
    $markername = variable_get('gmap_location_author_block_marker', 'drupal');
    $author = user_load($node->uid);
    $markers = array();
    $count = 0;
    foreach ($author->locations as $loc) {
      // @@@ Todo: Client side geocoding
      if ($loc['latitude'] || $loc['longitude']) {
        $count++;
      }

      $markertitle = $author->name;
      if (!empty($loc['name'])) {
        $markertitle = $loc['name'];
      }

      $markers[] = array(
        'latitude' => $loc['latitude'],
        'longitude' => $loc['longitude'],
        'markername' => $markername,
        'offset' => $count - 1,
        'opts' => array('title' => $markertitle),
      );
    }
    if (!empty($markers)) {
      $macro = variable_get('gmap_location_author_block_macro', '[gmap |width=100% |height=200px |control=None |behavior=+autozoom +notype]');
      $map = gmap_parse_macro($macro);
      $map['latitude'] = $markers[0]['latitude'];
      $map['longitude'] = $markers[0]['longitude'];
      $map['markers'] = $markers;
      $block['subject'] = t('Author Location');
      $element = array(
        '#type' => 'gmap',
        '#gmap_settings' => $map,
      );
      // @@@ Better theme.
      $block['content'] = drupal_render($element);
    }
  }
  return $block;
}

/**
 * Default theme for image nodes.
 *
 * @@@ Todo: Move to a tpl.
 */
function theme_gmap_location_infowindow_node__image(&$vars) {
  $node = $vars['node'];
  $out = '<a href="' . url('node/' . $node->nid) . '">' . check_plain($node->title) . '</a> <br />';
  $out .= image_display($node, 'thumbnail');
  return $out;
}

// @@@ This is not thoroughly tested for 5.x yet!
// @@@ Or 6.x for that matter!
// @@@ 7.x is right out!
/**
 * Theme an Organic Groups node info window.
 */
function theme_gmap_location_infowindow_node__og(&$vars) {
  $node = $vars['node'];
  $opt = $vars['opt'];
  if (is_numeric($opt) && $account = user_load($opt)) {
    $output = theme('user_picture', array('account' => $account));
    $output .= theme('username', array('account' => $account));
    echo $output;
    exit();
  }
}

// @@@ This is completely wrong.
/**
 * Theme a node info window.
 * @ingroup themable
 */
function theme_gmap_location_infowindow_node(&$vars) {
  $node = $vars['node'];
  // Allow a module (where the module name matches the node type name)
  // to define a custom display for the google map label.
  // For this to work with flexinode defined data types,
  // a module called 'flexinode_#.module' in your site's module
  // directory and add theme_hook_gmapnodelabel($node, $location) to it.
  // Be sure to enable your 'flexinode_#.module'.
  // Make sure it all goes on one line.
  $return = '<div class="gmapnodelabel gmapnodelabel-';
  $return .= drupal_clean_css_identifier($node->type);
  $return .= '">';
  $return .= strtr(drupal_render(node_view($node, 'teaser')), "'\n\r", '"  ');
  $return .= '</div>';

  return $return;
}

/**
 * Default theme for user infowindows.
 */
function theme_gmap_location_infowindow_user(&$vars) {
  $account = $vars['account'];
  $returntxt = theme('user_picture', array('account' => $account));
  $returntxt .= theme('username', array('account' => $account));
  return $returntxt;
}

/**
 * Implements hook_node_type().
 */
function gmap_location_node_type($op, $info) {
  $temp = variable_get('gmap_node_markers', array());
  switch ($op) {
    case 'delete':
      unset($temp[$info->type]);
      break;

    case 'insert':
      $temp[$info->type] = 'drupal';
      break;

    case 'update':
      if (!empty($info->old_type) && $info->old_type != $info->type) {
        $temp[$info->type] = $temp[$info->old_type];
        unset($temp[$info->old_type]);
      }
      break;
  }
  variable_set('gmap_node_markers', $temp);
}

/**
 * Wrapper function for i18n_string_build() if i18n_string enabled.
 */
function gmap_location_t($name, $string) {
  if (module_exists('i18n_string')) {
    return i18n_string_build($name, $string);
  }
  else {
    return $string;
  }
}

AnonSec - 2021 | Recode By D7net