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; } } } ?>