pm_block_user.pages.inc in Privatemsg 7
Same filename and directory in other branches
User menu callbacks for pm_block_user.module.
File
pm_block_user/pm_block_user.pages.incView source
<?php
/**
* @file
* User menu callbacks for pm_block_user.module.
*/
function pm_block_user_form($form, $form_state, $author) {
global $user;
$form['author'] = array(
'#type' => 'value',
'#value' => $author,
);
$form['recipient'] = array(
'#type' => 'value',
'#value' => $user,
);
$form['destination'] = array(
'#type' => 'value',
'#value' => isset($_GET['destination']) ? $_GET['destination'] : 'messages/',
);
if (pm_block_user_has_blocked($author, $user)) {
$form['block_action'] = array(
'#type' => 'value',
'#value' => 'unblock_user',
);
return confirm_form($form, t('You have previously blocked "@author" from sending you any more messages. Are you sure you want to unblock this user?', array(
'@author' => privatemsg_recipient_format($author, array(
'plain' => TRUE,
)),
)), isset($_GET['destination']) ? $_GET['destination'] : 'messages/', '', t('Unblock @author', array(
'@author' => privatemsg_recipient_format($author, array(
'plain' => TRUE,
)),
)), t('Cancel'));
}
else {
$form['block_action'] = array(
'#type' => 'value',
'#value' => 'block_user',
);
return confirm_form($form, t('Are you sure you want to block "@author" from sending you any more messages?', array(
'@author' => privatemsg_recipient_format($author, array(
'plain' => TRUE,
)),
)), isset($_GET['destination']) ? $_GET['destination'] : 'messages/', '', t('Block @author', array(
'@author' => privatemsg_recipient_format($author, array(
'plain' => TRUE,
)),
)), t('Cancel'));
}
}
/**
* Submit callback for block user confirmation form.
*/
function pm_block_user_form_submit($form, &$form_state) {
if ($form_state['values']['confirm']) {
switch ($form_state['values']['block_action']) {
case 'block_user':
db_insert('pm_block_user')
->fields(array(
'author' => $form_state['values']['author']->uid,
'recipient' => $form_state['values']['recipient']->uid,
))
->execute();
drupal_set_message(t('@author has been blocked from sending you any further messages.', array(
'@author' => privatemsg_recipient_format($form_state['values']['author'], array(
'plain' => TRUE,
)),
)));
break;
case 'unblock_user':
db_delete('pm_block_user')
->condition('author', $form_state['values']['author']->uid)
->condition('recipient', $form_state['values']['recipient']->uid)
->execute();
drupal_set_message(t('@author is now allowed to send you new messages.', array(
'@author' => privatemsg_recipient_format($form_state['values']['author'], array(
'plain' => TRUE,
)),
)));
break;
}
}
$form_state['redirect'] = $form_state['values']['destination'];
}
/**
* Formbuilder function to build a simple form to block users.
*/
function pm_block_user_list() {
global $user;
$form['new'] = array(
'#type' => 'fieldset',
'#title' => t('Block a user'),
);
$form['new']['name'] = array(
'#type' => 'textfield',
'#title' => t('Username'),
'#autocomplete_path' => 'messages/user/autocomplete',
'#description' => t('Separate multiple names with commas.'),
'#required' => TRUE,
);
$form['new']['submit'] = array(
'#type' => 'submit',
'#value' => t('Block user'),
'#validate' => array(
'pm_block_user_block_validate',
),
'#submit' => array(
'pm_block_user_block_submit',
),
);
$header = array(
array(
'data' => t('Username'),
'field' => 'u.name',
'sort' => 'asc',
),
array(
'data' => t('Operations'),
),
);
$select = db_select('pm_block_user', 'pmb')
->extend('PagerDefault')
->extend('TableSort')
->fields('pmb', array(
'author',
))
->condition('pmb.recipient', $user->uid)
->limit(20)
->orderByHeader($header);
// Only show existing users, therefore join users.
$select
->innerJoin('users', 'u', 'u.uid = pmb.author');
$rows = array();
foreach ($select
->execute() as $row) {
$rows[] = array(
theme('username', array(
'account' => user_load($row->author),
)),
l(t('unblock'), 'messages/block/' . $row->author, array(
'query' => drupal_get_destination(),
)),
);
}
$form['#header'] = $header;
$form['#rows'] = $rows;
return $form;
}
/**
* Validate user names.
*/
function pm_block_user_block_validate($form, &$form_state) {
global $user;
list($accounts, $invalid) = _privatemsg_parse_userstring($form_state['values']['name'], array(
'user',
));
// Remove accounts that can not be blocked.
if (!empty($accounts)) {
foreach ($accounts as $id => $account) {
// Only authors can be blocked.
if ($account->type != 'user') {
drupal_set_message(t('Only users can be blocked.'));
unset($accounts[$id]);
continue;
}
// Check if the user can not be blocked because of a rule.
if (_pm_block_user_rule_exists($account, $user, PM_BLOCK_USER_DISALLOW_BLOCKING)) {
drupal_set_message(t('You are not allowed to block !account.', array(
'!account' => theme('username', array(
'account' => $account,
)),
)), 'warning');
unset($accounts[$id]);
continue;
}
// Check if the user is already blocked.
if (pm_block_user_has_blocked($account, $user)) {
drupal_set_message(t('You have already blocked !account.', array(
'!account' => theme('username', array(
'account' => $account,
)),
)), 'warning');
unset($accounts[$id]);
continue;
}
// Do not allow users to block themself.
if ($user->uid == $account->uid) {
drupal_set_message(t('You can not block yourself.'), 'warning');
unset($accounts[$id]);
continue;
}
}
}
// Display warning about invalid user names.
if (!empty($invalid)) {
drupal_set_message(t('The following users do not exist: @invalid.', array(
'@invalid' => implode(", ", $invalid),
)), 'warning');
}
// If there are no accounts left, display error.
if (empty($accounts)) {
form_set_error('name', t('You are either not allowed to block these users or the users do not exist.'));
}
else {
$form_state['valid_accounts'] = $accounts;
}
}
/**
* Submit callback for block user form.
*/
function pm_block_user_block_submit($form, &$form_state) {
global $user;
$insert = db_insert('pm_block_user')
->fields(array(
'author',
'recipient',
));
foreach ($form_state['valid_accounts'] as $account) {
$insert
->values(array(
'author' => $account->uid,
'recipient' => $user->uid,
));
drupal_set_message(t('!author has been blocked from sending you any further messages.', array(
'!author' => theme('username', array(
'account' => $account,
)),
)));
}
$insert
->execute();
}
/**
* Theme function to theme the blocked user listing.
*/
function theme_pm_block_user_list($variables) {
$form = $variables['form'];
return drupal_render_children($form) . theme('table', array(
'header' => $form['#header'],
'rows' => $form['#rows'],
)) . theme('pager');
}
Functions
Name | Description |
---|---|
pm_block_user_block_submit | Submit callback for block user form. |
pm_block_user_block_validate | Validate user names. |
pm_block_user_form | @file User menu callbacks for pm_block_user.module. |
pm_block_user_form_submit | Submit callback for block user confirmation form. |
pm_block_user_list | Formbuilder function to build a simple form to block users. |
theme_pm_block_user_list | Theme function to theme the blocked user listing. |