uid);
while ($msg = db_fetch_object($result)) {
$form = form_hidden('destination', $_GET['q']);
$form .= form_hidden('mid', $msg->mid);
$form .= form_hidden('sid', $msg->sid);
$form .= form_submit(t('Confirm and delete'));
$form .= form_submit(t('Delete'));
$form = form($form, 'post', url('im/delete'));
drupal_set_message('
'. t('%user says at %date: ', array('%user' => $msg->name, '%date' => format_date($msg->timestamp))) .'
'. $msg->message .''. $form .'
','message');
}
}
else {
$items[] = array('path' => 'im/send', 'title' => t('Instant message sent'),
'callback' => 'im_page',
'access' => user_access('send instant messages'),
'type' => MENU_CALLBACK);
$items[] = array('path' => 'im/delete', 'title' => t('Delete instant message.'),
'callback' => 'im_delete',
'access' => user_access('delete instant messages'),
'type' => MENU_CALLBACK);
}
return $items;
}
/**
* Menu callback
*
*/
function im_page() {
global $user;
$edit = $_POST['edit'];
if (strlen($edit['message'])) {
$edit['message'] = db_escape_string($edit['message']);
db_query("INSERT INTO {im} (sid, rid, message, timestamp) VALUES (%d, %d, '%s', %d)", $user->uid, $edit['receiver'], $edit['message'], time());
}
drupal_set_message(t('Message sent.'));
drupal_goto($edit['destination']);
}
/**
* Menu callback
*/
function im_delete() {
$edit = $_POST['edit'];
$op = $_POST['op'];
global $user;
switch ($op) {
case t('Delete'):
if (is_numeric($edit['mid'])) {
db_query("DELETE FROM {im} WHERE mid = %d AND rid = %d", $edit['mid'], $user->uid);
}
unset($_SESSION['messages']);
drupal_set_message(t('Message deleted.'));
break;
case t('Confirm and delete'):
db_query("INSERT INTO {im} (sid, rid, message, timestamp) VALUES (%d, %d, '%s', %d)", $edit['sid'], $user->uid, t('Message confirmed.'), time());
if (is_numeric($edit['mid'])) {
db_query("DELETE FROM {im} WHERE mid = %d AND rid = %d", $edit['mid'], $user->uid);
}
unset($_SESSION['messages']);
drupal_set_message(t('Message confirmed and deleted.'));
break;
}
drupal_goto($edit['destination']);
}
/**
* Implementation of hook_block().
*
* Displays the messaging form
*/
function im_block($op = 'list', $delta = 0) {
if ($op == 'list') {
$block['0']['info'] = t('IM block.');
return $block;
}
else {
$block = array();
switch ($delta) {
case '0':
global $user;
if (user_access('send instant messages')) {
// Count users with activity in the past defined period.
$time_period = variable_get('user_block_seconds_online', 2700);
// Perform database queries to gather online user lists.
$users = db_query('SELECT DISTINCT s.uid, u.name, MAX(s.timestamp) AS max_timestamp FROM {sessions} s INNER JOIN {users} u ON s.uid = u.uid WHERE s.timestamp >= %d AND s.uid != 0 GROUP BY s.uid ORDER BY max_timestamp DESC', time() - $time_period );
// Display a list of currently online users for selection.
if (db_num_rows($users)) {
$items = array();
while ($uid = db_fetch_object($users)) {
$items[] = array($uid->uid => $uid->name);
}
}
$form = form_textfield(t('Message'), 'message', $edit['message'], 20, 255);
$form .= form_select(t('Select user'), 'receiver', '', $items);
$form .= form_hidden('destination', $_GET['q']);
$form .= form_submit(t('Go!'));
$block['content'] = form($form, 'post', url('im/send'));
}
$block['subject'] = t('Instant message');
return $block;
}
}
}
?>