2015-04-19 16:46:59 +02:00

152 lines
4.5 KiB
Plaintext

<?php
/**
* @file
* Associate locations with users.
*/
/**
* Implements hook_permission().
*/
function location_user_permission() {
return array(
'administer user locations' => 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');
}
}
}
}