array( 'title' => t('administer user locations'), ), 'view own user location' => array( 'title' => t('view own user location'), ), 'view all user locations' => array( 'title' => t('view all user locations'), ), 'set own user location' => array( 'title' => t('set own user location'), ), ); } /** * Implements hook_form_FORM_ID_alter(). * Alter the user_admin_settings form. */ function location_user_form_user_admin_settings_alter(&$form, &$form_state, $form_id) { if (isset($form_state['values']['location_settings_user'])) { $settings = $form_state['values']['location_settings_user']; } else { $settings = variable_get('location_settings_user', array()); } $form['location_settings_user'] = location_settings($settings); $form['location_settings_user']['#title'] = t('User locations'); $form['location_settings_user']['form']['register'] = array( '#type' => 'checkbox', '#title' => t('Collect during registration'), '#default_value' => isset($settings['form']['register']) ? $settings['form']['register'] : FALSE, '#weight' => -5, ); } /** * Implements hook_user_load(). * * @todo * Make this load all locations at once instead of running separate queries * for each user to enhance performance. * location_load_locations() and location_load_location() will need * changing to make this happen. */ function location_user_user_load($users) { foreach ($users as $uid => $user) { $users[$uid]->locations = location_load_locations($user->uid, 'uid'); $users[$uid]->location = count($users[$uid]->locations) ? $users[$uid]->locations[0] : array(); } } /** * Implements hook_user_insert(). */ function location_user_user_insert(&$edit, $account, $category) { if (!empty($edit['locations'])) { location_save_locations($edit['locations'], array('uid' => $account->uid)); } unset($edit['locations']); } /** * Implements hook_user_update(). */ function location_user_user_update(&$edit, $account, $category) { if (!empty($edit['locations'])) { location_save_locations($edit['locations'], array('uid' => $account->uid)); } unset($edit['locations']); } /** * Implements hook_user_delete(). */ function location_user_user_delete($account) { $locations = array(); location_save_locations($locations, array('uid' => $account->uid)); } /** * Implements hook_user_view(). */ function location_user_user_view($account, $view_mode, $langcode) { global $user; if ((($user->uid == $account->uid) && user_access('view own user location')) || user_access('administer users') || user_access('view all user locations') || user_access('administer user locations')) { if (variable_get('location_display_location', 1) && isset($account->locations) && count($account->locations)) { $settings = variable_get('location_settings_user', array()); $account->content['locations'] = location_display($settings, $account->locations); } } } /** * Implements hook_form_FORM_ID_alter(). * Alter the user profile form. */ function location_user_form_user_profile_form_alter(&$form, &$form_state, $form_id) { global $user; if ($form['#user_category'] == 'account') { $account = $form['#user']; if ((($user->uid == $account->uid) && user_access('set own user location')) || user_access('administer user locations')) { $settings = variable_get('location_settings_user', array()); $form['locations'] = location_form($settings, $account->locations); } } } /** * Implements hook_form_FORM_ID_alter(). * Alter the user registration form. */ function location_user_form_user_register_form_alter(&$form, &$form_state, $form_id) { $settings = variable_get('location_settings_user', array()); if (isset($settings['form']['register']) && $settings['form']['register']) { $form['locations'] = location_form($settings, array()); } } /** * Implements hook_locationapi(). */ function location_user_locationapi(&$obj, $op, $a3 = NULL, $a4 = NULL, $a5 = NULL) { switch ($op) { case 'instance_links': foreach ($obj as $k => $v) { if ($v['uid'] != 0) { $account = user_load($v['uid']); $obj[$k]['href'] = 'user/' . $v['uid']; $obj[$k]['title'] = $account->name; $obj[$k]['type'] = t('User location'); } } } }