function legal_user in Legal 6.8
Same name and namespace in other branches
- 5 legal.module \legal_user()
- 6.7 legal.module \legal_user()
Implementation of hook_user().
File
- ./
legal.module, line 213 - Displays Terms & Conditions, and makes sure they are accepted before registration is accepted.
Code
function legal_user($op, &$edit, &$account, $category = FALSE) {
global $user;
global $language;
switch ($op) {
case 'register':
$conditions = legal_get_conditions($language->language);
// Do nothing if no Terms and Conditions text set.
if (empty($conditions['conditions'])) {
return;
}
$form_fields = legal_display_fields($conditions);
/**
* Disable checkbox if:
* - user is already registered (administer users)
* - users with 'administer users' can access
* registration on admin/user/user/create.
*/
if (!empty($user->uid)) {
$form_fields['legal']['legal_accept']['#attributes'] = array(
'disabled' => 'disabled',
);
$form_fields['legal']['legal_accept']['#required'] = FALSE;
if (is_array($conditions['extras'])) {
foreach ($conditions['extras'] as $key => $label) {
if (!empty($label)) {
$form_fields['legal'][$key]['#attributes'] = array(
'disabled' => 'disabled',
);
$form_fields['legal'][$key]['#required'] = FALSE;
}
}
}
}
else {
$form_fields['legal']['legal_accept']['#default_value'] = $edit['legal_accept'];
}
$form = theme('legal_display', $form_fields);
return $form;
case 'login':
if ($user->uid == 1) {
break;
}
// Get last accepted version for this account.
$legal_account = legal_get_accept($user->uid);
// If no version has been accepted yet,
// get version with current language revision.
if (empty($legal_account['version'])) {
$conditions = legal_get_conditions($language->language);
// No conditions set yet.
if (empty($conditions['conditions'])) {
return;
}
}
else {
// Get version/revision of last accepted language.
$conditions = legal_get_conditions($legal_account['language']);
// No conditions set yet.
if (empty($conditions['conditions'])) {
return;
}
// Check latest version of T&C has been accepted.
$accepted = legal_version_check($user->uid, $conditions['version'], $conditions['revision'], $legal_account);
if ($accepted) {
return;
}
}
$uid = $user->uid;
// Destroy the current session.
session_destroy();
session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy_sid', 'sess_gc');
$null = NULL;
user_module_invoke('logout', $null, $user);
// We have to use $GLOBALS to unset a global variable.
$user = user_load(array(
'uid' => 0,
));
$query = NULL;
// Deal with destination from password reset one time login link.
if (arg(0) == 'user' && arg(1) == 'reset') {
$query = array(
'destination' => "user/{$uid}/edit",
);
}
if (!empty($_REQUEST['destination'])) {
$query = array(
'destination' => $_REQUEST['destination'],
);
}
unset($_REQUEST['destination']);
$signatory = db_fetch_object(db_query_range('SELECT * FROM {users} WHERE uid = %d', $uid, 0, 1));
drupal_goto('legal_accept/' . $signatory->uid . '/' . md5($signatory->name . $signatory->pass . $signatory->login), $query);
break;
case 'form':
if ($category != 'account') {
return;
}
// Get last accepted version for this account.
$legal_account = legal_get_accept($account->uid);
// If no version has been accepted yet,
// get version with current language revision.
if (empty($legal_account['version'])) {
$conditions = legal_get_conditions($language->language);
// No conditions set yet.
if (empty($conditions['conditions'])) {
return;
}
}
else {
// Get version/revision last accepted language.
$conditions = legal_get_conditions($legal_account['language']);
// No conditions set yet.
if (empty($conditions['conditions'])) {
return;
}
// Check latest version of T&C has been accepted.
$accepted = legal_version_check($account->uid, $conditions['version'], $conditions['revision'], $legal_account);
// Enable language switching if version
// accepted and revision up to date.
if ($accepted && $legal_account['language'] != $language->language) {
$conditions = legal_get_conditions($language->language);
}
}
$form_fields = legal_display_fields($conditions);
if ($accepted === TRUE) {
$form_fields['legal']['legal_accept']['#value'] = 1;
if (!empty($conditions['extras'])) {
foreach ($conditions['extras'] as $key => $label) {
if (!empty($label)) {
$form_fields['legal'][$key]['#value'] = 1;
}
}
}
}
// Disable checkbox if:
// - user is not account owner;
// - latest T&C has already been accepted.
if ($account->uid != $user->uid || $accepted == TRUE) {
$form_fields['legal']['legal_accept']['#attributes'] = array(
'disabled' => 'disabled',
);
if (!empty($conditions['extras'])) {
reset($conditions['extras']);
foreach ($conditions['extras'] as $key => $label) {
if (!empty($label)) {
$form_fields['legal'][$key]['#attributes'] = array(
'disabled' => 'disabled',
);
}
}
}
}
// Not required if user is not account owner.
if ($account->uid != $user->uid) {
$form_fields['legal']['legal_accept']['#required'] = FALSE;
if (!empty($conditions['extras'])) {
reset($conditions['extras']);
foreach ($conditions['extras'] as $key => $label) {
if (!empty($label)) {
$form_fields['legal'][$key]['#required'] = FALSE;
}
}
}
}
// Enable account owner to accept.
if ($account->uid == $user->uid && $accepted != TRUE) {
$form_fields['legal']['legal_accept']['#default_value'] = isset($edit['legal_accept']) ? $edit['legal_accept'] : '';
$form_fields['legal']['legal_accept']['#required'] = TRUE;
if (!empty($conditions['extras'])) {
reset($conditions['extras']);
foreach ($conditions['extras'] as $key => $label) {
if (!empty($label)) {
$form_fields['legal'][$key]['#default_value'] = isset($edit[$key]) ? $edit[$key] : '';
$form_fields['legal'][$key]['#required'] = TRUE;
}
}
}
}
$form = theme('legal_display', $form_fields);
return $form;
break;
case 'insert':
$conditions = legal_get_conditions($language->language);
if (empty($conditions['conditions'])) {
return;
}
// Record the accepted state before removing legal_accept from $edit.
$accepted = $edit['legal_accept'];
$edit['legal_accept'] = NULL;
$edit['conditions'] = NULL;
foreach ($conditions['extras'] as $key => $label) {
$edit[$key] = NULL;
}
// Don't insert if user is already registered (administrator).
if (!empty($user->uid)) {
break;
}
if ($accepted) {
legal_save_accept($conditions['version'], $conditions['revision'], $conditions['language'], $account->uid);
}
break;
case 'update':
$conditions = legal_get_conditions($language->language);
if (empty($conditions['conditions'])) {
return;
}
// Record the accepted state before removing legal_accept from $edit.
$accepted = $edit['legal_accept'];
$edit['legal_accept'] = NULL;
$edit['conditions'] = NULL;
foreach ($conditions['extras'] as $key => $label) {
$edit[$key] = NULL;
}
if ($account->uid != $user->uid) {
break;
}
// If already accepted skip data entry.
$previously_accepted = legal_version_check($account->uid, $conditions['version'], $conditions['revision']);
if ($previously_accepted === TRUE) {
break;
}
if ($accepted) {
legal_save_accept($conditions['version'], $conditions['revision'], $conditions['language'], $account->uid);
}
break;
}
}