',
'#type' => 'select',
@@ -999,40 +981,40 @@ function privatemsg_list_form($messages,
);
drupal_add_js(drupal_get_path('module', 'privatemsg') .'/privatemsg.js');
- drupal_add_js(array('privatemsg' => $js), 'setting');
+ if (isset($js)) {
+ drupal_add_js(array('privatemsg' => $js), 'setting');
+ }
return $form;
}
-function privatemsg_list_form_submit($form_id, $form_values) {
- global $user;
-
+function privatemsg_list_form_submit($form, &$form_state) {
$selected = array();
- foreach ($form_values['messages'] as $mid => $message) {
+ foreach ($form_state['values']['messages'] as $mid => $message) {
if ($message['selected']) {
$selected[$mid] = $message;
$placeholders[] = '%d';
}
}
- if (!$selected && ($form_values['op'] != t('Empty recycle bin'))) {
+ if (!$selected && ($form_state['clicked_button']['#value'] != t('Empty recycle bin'))) {
return;
}
$args = array_keys($selected);
- $args[] = $form_values['account']->uid;
+ $args[] = $form_state['values']['account']->uid;
$where1 = 'WHERE id IN ('. implode(', ', $placeholders) .') AND ';
$where = $where1 .'recipient = %d';
$new = 0;
- switch ($form_values['op']) {
+ switch ($form_state['clicked_button']['#value']) {
case t('Delete'):
if ($_POST['js_bypass'] == 1) {
foreach ($selected as $mid => $message) {
_privatemsg_delete($mid);
}
- drupal_set_message(t('The selected messages have been deleted.'));
+ drupal_set_message(t('Messages deleted.'));
}
else {
- $_SESSION['privatemsg'] = $form_values['messages'];
- $_SESSION['fromfolder'] = intval(arg(2));
+ $form_state['storage']['privatemsg'] = $form_state['values']['messages'];
+ $form_state['storage']['fromfolder'] = intval(arg(2));
drupal_goto('privatemsg/delete/multiple');
}
break;
@@ -1042,38 +1024,33 @@ function privatemsg_list_form_submit($fo
case t('Mark as read'):
array_unshift($args, $new);
db_query('UPDATE {privatemsg} SET newmsg = %d '. $where, $args);
-
- drupal_set_message(t('The selected messages have been updated.'));
break;
case t('Move to folder'):
- $fid = $form_values['folder'];
+ $fid = $form_state['values']['folder'];
if ($fid == 'new') {
- $_SESSION['privatemsg'] = $form_values['messages'];
- $_SESSION['fromfolder'] = intval(arg(2));
+ $form_state['storage']['privatemsg'] = $form_state['values']['messages'];
+ $form_state['storage']['fromfolder'] = intval(arg(2));
drupal_goto('privatemsg/folders/movetonew');
}
- _privatemsg_move_folder($where, $args, $fid, $form_values['extra_folders']);
+ _privatemsg_move_folder($where, $args, $fid, $form_state['values']['extra_folders']);
break;
case t('Delete permanently'):
foreach (array_keys($selected) as $mid) {
_privatemsg_delete($mid, 2);
}
- drupal_set_message(t('The selected messages have been deleted permanently.'));
+ drupal_set_message(t('Your messages have been deleted permanently'));
break;
- case t('Restore'):
+ case t('Move to inbox'):
db_query('UPDATE {privatemsg} SET recipient_del = 0 '. $where, $args);
$where = $where1 .'author = %d';
db_query('UPDATE {privatemsg} SET author_del = 0 '. $where, $args);
-
- drupal_set_message(t('The selected messages have been restored.'));
-
break;
case t('Empty recycle bin'):
- $result = db_query('SELECT id FROM {privatemsg} p WHERE p.recipient = %d AND p.recipient_del = 1 UNION SELECT id FROM {privatemsg} p WHERE p.author = %d AND p.author_del = 1', $user->uid, $user->uid);
- while ($message = db_fetch_object($result)) {
- _privatemsg_delete($message->id, 2);
+ $result = db_query('SELECT id FROM privatemsg p WHERE p.recipient = %d AND p.recipient_del = 1 UNION SELECT id FROM privatemsg p WHERE p.author = %d AND p.author_del = 1', $GLOBALS['user']->uid, $GLOBALS['user']->uid);
+ while ($message = db_fetch_array($result)) {
+ _privatemsg_delete($message['id'], 2);
}
- drupal_set_message('Recycle bin emptied.');
+ drupal_set_message('Recycle bin emptied');
break;
}
}
@@ -1084,7 +1061,7 @@ function _privatemsg_move_folder($where,
$msg_count = count($args);
$folder = $extra_folders[$fid];
- $link = l(t('%folder', array('%folder' => $folder)), 'privatemsg/list/'. $fid, array(), NULL, NULL, FALSE, TRUE);
+ $link = l(t('%folder', array('%folder' => $folder)), 'privatemsg/list/'. $fid, array('html' => TRUE));
if ($msg_count == 1) {
drupal_set_message(t('Your message has been moved to !link.', array('!link' => $link)));
@@ -1136,7 +1113,7 @@ function privatemsg_manage_folders() {
/**
* Form to add a new folder.
*/
-function privatemsg_new_folder_form() {
+function privatemsg_new_folder_form(&$form_state) {
if (arg(2) == 'movetonew') {
$movetonew = TRUE;
}
@@ -1144,10 +1121,10 @@ function privatemsg_new_folder_form() {
$movetonew = FALSE;
}
- if (isset($_SESSION['privatemsg'])) {
+ if (isset($form_state['storage']['privatemsg'])) {
$name_desc = t('Enter a name for the new folder.');
$form['messages'] = array('#tree' => TRUE);
- foreach ($_SESSION['privatemsg'] as $mid => $message) {
+ foreach ($form_state['storage']['privatemsg'] as $mid => $message) {
if ($message['selected']) {
$form['messages'][$mid] = array(
'#type' => 'hidden',
@@ -1162,7 +1139,7 @@ function privatemsg_new_folder_form() {
}
}
- $to_fid = $_SESSION['fromfolder'];
+ $to_fid = $form_state['storage']['fromfolder'];
if (empty($to_fid)) {
$path = 'privatemsg';
}
@@ -1194,38 +1171,42 @@ function privatemsg_new_folder_form() {
return $form;
}
-function privatemsg_new_folder_form_validate($form_id, $form_values) {
+function privatemsg_new_folder_form_validate($form, &$form_state) {
global $user;
- if (!empty($form_values['name']) && db_result(db_query("SELECT name FROM {privatemsg_folder} WHERE name = '%s' AND uid = %d", $form_values['name'], $user->uid))) {
+ if (!empty($form_state['values']['name']) && db_result(db_query("SELECT name FROM {privatemsg_folder} WHERE name = '%s' AND uid = %d", $form_state['values']['name'], $user->uid))) {
form_set_error('name', t('A folder with this name already exists.'));
}
- if (empty($form_values['name'])) {
+ if (empty($form_state['values']['name'])) {
form_set_error('name', t('You must specify a name for the new folder.'));
}
}
-function privatemsg_new_folder_form_submit($form_id, $form_values) {
+function privatemsg_new_folder_form_submit($form, &$form_state) {
global $user;
- $fid = db_next_id('{privatemsg_folder}_fid');
- db_query("INSERT INTO {privatemsg_folder} (fid, uid, name) VALUES (%d, %d, '%s')", $fid, $user->uid, $form_values['name']);
-
- if (isset($form_values['messages']) && is_array($form_values['messages'])) {
- unset($_SESSION['privatemsg']);
- foreach ($form_values['messages'] as $key => $value) {
+ $record = array(
+ 'uid' => $user->uid,
+ 'name' => $form_state['values']['name'],
+ );
+ drupal_write_record('privatemsg_folder', $record);
+ //db_query("INSERT INTO {privatemsg_folder} (fid, uid, name) VALUES (%d, %d, '%s')", $fid, $user->uid, $form_state['values']['name']);
+
+ if (isset($form_state['values']['messages']) && is_array($form_state['values']['messages'])) {
+ unset($form_state['storage']['privatemsg']);
+ foreach ($form_state['values']['messages'] as $key => $value) {
db_query("UPDATE {privatemsg} SET folder = %d WHERE id = %d AND recipient = %d", $fid, $key, $user->uid);
}
- $link = l(t('%folder', array('%folder' => $form_values['name'])), 'privatemsg/list/'. $fid, array(), NULL, NULL, FALSE, TRUE);
+ $link = l(t('%folder', array('%folder' => $form_state['values']['name'])), 'privatemsg/list/'. $fid, array('html' => TRUE));
- if (count($form_values['messages']) == 1) {
+ if (count($form_state['values']['messages']) == 1) {
drupal_set_message(t('Your message has been moved to !link.', array('!link' => $link)));
}
- elseif (count($form_values['messages']) > 1) {
+ elseif (count($form_state['values']['messages']) > 1) {
drupal_set_message(t('Your messages have been moved to !link.', array('!link' => $link)));
}
- $to_fid = $_SESSION['fromfolder'];
- unset($_SESSION['fromfolder']);
+ $to_fid = $form_state['storage']['fromfolder'];
+ unset($form_state['storage']['fromfolder']);
if (empty($to_fid)) {
drupal_goto('privatemsg');
}
@@ -1241,10 +1222,10 @@ function privatemsg_new_folder_form_subm
}
else {
drupal_set_message(t('Folder created successfully.'));
- if (isset($_SESSION['privatemsg'])) {
- unset($_SESSION['privatemsg']);
- $to_fid = $_SESSION['fromfolder'];
- unset($_SESSION['fromfolder']);
+ if (isset($form_state['storage']['privatemsg'])) {
+ unset($form_state['storage']['privatemsg']);
+ $to_fid = $form_state['storage']['fromfolder'];
+ unset($form_state['storage']['fromfolder']);
if (empty($to_fid)) {
drupal_goto('privatemsg');
}
@@ -1258,7 +1239,7 @@ function privatemsg_new_folder_form_subm
/**
* Display form to rename a folder.
*/
-function privatemsg_rename_folder_form($fid) {
+function privatemsg_rename_folder_form($form_id, $fid) {
$folder = db_result(db_query("SELECT name FROM {privatemsg_folder} WHERE fid = %d", $fid));
if (empty($folder)) {
drupal_set_message(t('Folder does not exist.'));
@@ -1286,24 +1267,24 @@ function privatemsg_rename_folder_form($
return $form;
}
-function privatemsg_rename_folder_form_validate($form_id, $form_values) {
+function privatemsg_rename_folder_form_validate($form, &$form_state) {
global $user;
- if (!empty($form_values['new_name']) &&
- $form_values['new_name'] != $form_values['old_name'] &&
- db_result(db_query("SELECT name FROM {privatemsg_folder} WHERE name = '%s' AND uid = %d", $form_values['new_name'], $user->uid))) {
+ if (!empty($form_state['values']['new_name']) &&
+ $form_state['values']['new_name'] != $form_state['values']['old_name'] &&
+ db_result(db_query("SELECT name FROM {privatemsg_folder} WHERE name = '%s' AND uid = %d", $form_state['values']['new_name'], $user->uid))) {
form_set_error('new_name', t('A folder with this name already exists.'));
}
- if (empty($form_values['new_name'])) {
+ if (empty($form_state['values']['new_name'])) {
form_set_error('new_name', t('You must specify a name for the new folder.'));
}
}
-function privatemsg_rename_folder_form_submit($form_id, $form_values) {
- if ($form_values['new_name'] != $form_values['old_name']) {
- db_query("UPDATE {privatemsg_folder} SET name = '%s' WHERE fid = %d", $form_values['new_name'], intval(arg(2)));
+function privatemsg_rename_folder_form_submit($form, &$form_state) {
+ if ($form_state['values']['new_name'] != $form_state['values']['old_name']) {
+ db_query("UPDATE {privatemsg_folder} SET name = '%s' WHERE fid = %d", $form_state['values']['new_name'], intval(arg(2)));
drupal_set_message(t('Folder name changed from %old_name to %new_name.',
- array('%old_name' => $form_values['old_name'],
- '%new_name' => $form_values['new_name'])));
+ array('%old_name' => $form_state['values']['old_name'],
+ '%new_name' => $form_state['values']['new_name'])));
}
else {
drupal_set_message(t('Folder name left the same.'));
@@ -1329,11 +1310,11 @@ function privatemsg_empty_folder_form($f
return $form;
}
-function privatemsg_empty_folder_form_submit($form_id, $form_values) {
+function privatemsg_empty_folder_form_submit($form, &$form_state) {
global $user;
$fid = intval(arg(2));
- if ($fid == 0 || $form_values['empty'] != 1) {
+ if ($fid == 0 || $form_state['values']['empty'] != 1) {
drupal_goto('privatemsg/folders');
}
@@ -1341,7 +1322,7 @@ function privatemsg_empty_folder_form_su
db_query("UPDATE {privatemsg} SET author_del = 1 WHERE author = %d", $user->uid);
}
else if ($fid > 1 && !db_result(db_query('SELECT fid FROM {privatemsg_folder} WHERE fid = %d AND uid = %d', $fid, $user->uid))) {
- watchdog('privatemsg', t('Attempted use of unauthorized folder'), WATCHDOG_WARNING);
+ watchdog('privatemsg', 'Attempted use of unauthorized folder', array(), WATCHDOG_WARNING);
return drupal_access_denied();
}
else {
@@ -1370,16 +1351,16 @@ function privatemsg_delete_folder_form($
return $form;
}
-function privatemsg_delete_folder_form_submit($form_id, $form_values) {
+function privatemsg_delete_folder_form_submit($form, &$form_state) {
global $user;
$fid = intval(arg(2));
- if ($fid == 0 || $form_values['delete'] != 1) {
+ if ($fid == 0 || $form_state['values']['delete'] != 1) {
drupal_goto('privatemsg/folders');
}
if (!db_result(db_query("SELECT fid FROM {privatemsg_folder} WHERE fid = %d AND uid = %d", $fid, $user->uid))) {
- watchdog('privatemsg', t('Attempted use of unauthorized folder'), WATCHDOG_WARNING);
+ watchdog('privatemsg', 'Attempted use of unauthorized folder', array(), WATCHDOG_WARNING);
return drupal_access_denied();
}
db_query("DELETE FROM {privatemsg_folder} WHERE fid = %d", $fid);
@@ -1392,7 +1373,7 @@ function privatemsg_delete_folder_form_s
/**
* Provides a form to write a private message.
*/
-function privatemsg_new_form($message = NULL) {
+function privatemsg_new_form(&$form_state, $message = NULL) {
global $user;
if (!isset($message)) {
$message = 0;
@@ -1401,21 +1382,21 @@ function privatemsg_new_form($message =
if ($op == 'reply') {
$message = arg(2);
}
- else if (($uid = arg(2)) && ($msg->recipient = db_result(db_query('SELECT name FROM {users} WHERE uid = %d', $uid)))) {
+ else if (($uid = arg(2)) && ($msg['recipient'] = db_result(db_query('SELECT name FROM {users} WHERE uid = %d', $uid)))) {
if (!privatemsg_message_allowed($uid, $user->uid)) {
- drupal_set_message(t('You cannot contact %recipient', array('%recipient' => $msg->recipient)));
+ drupal_set_message(t('You cannot contact %recipient', array('%recipient' => $msg['recipient'])));
drupal_goto("user/$uid");
}
$message = $msg;
}
}
- if ($message && !is_object($message)) {
+ if ($message && !is_array($message)) {
// This is a reply to another message
- $message = db_fetch_object(db_query('SELECT thread, subject, message, u.name AS recipient FROM {privatemsg} p INNER JOIN {users} u ON u.uid = p.author WHERE id = %d AND recipient = %d', $message, $user->uid));
+ $message = db_fetch_array(db_query('SELECT thread, subject, message, u.name AS recipient FROM {privatemsg} p INNER JOIN {users} u ON u.uid = p.author WHERE id = %d AND recipient = %d', $message, $user->uid));
- if (!stristr($message->subject, t('Re:'))) {
- $message->subject = t('Re: ') . $message->subject;
+ if (!stristr($message['subject'], t('Re:'))) {
+ $message['subject'] = t('Re:') .' '. $message['subject'];
}
// quoting; [quote] if default input format uses bbcode or quote, else > quoting
@@ -1426,113 +1407,106 @@ function privatemsg_new_form($message =
}
}
if (isset($bbcode)) {
- $message->message = "\n\n[quote=". $message->recipient .']'. $message->message .'[/quote]';
+ $message['message'] = "\n\n[quote=". $message['recipient'] .']'. $message['message'] .'[/quote]';
}
else {
- $message->message = "\n\n\n". str_replace("\n", "\n> ", "\n". $message->message);
+ $message['message'] = "\n\n\n". str_replace("\n", "\n> ", "\n". $message['message']);
}
}
- if (!is_object($message)) {
- $message = new stdClass();
+ if (!is_array($message)) {
+ $message = array();
}
// The first if can provide a partial message, so we fill it in to avoid
// notices. Also we remove the message if it's a reply in a threaded view,
// the original message will be seen anyways.
- if (!isset($message->subject) || variable_get('privatemsg_threaded_view', 0)) {
- $message->message = '';
+ if (variable_get('privatemsg_threaded_view', 0)) {
+ $message['message'] = '';
+ }
+ foreach (array('subject', 'recipient', 'format', 'message') as $key) {
+ if (!isset($message[$key])) {
+ $message[$key] = '';
+ }
}
if (isset($_SESSION['recipients'])) {
- $recipient = implode(', ', $_SESSION['recipients']);
+ $message['recipient'] = implode(', ', $_SESSION['recipients']);
unset($_SESSION['recipients']);
}
- $form['thread'] = array('#type' => 'value', '#value' => isset($message->thread) ? $message->thread : 0);
+ if (isset($form_state['post']['op']) && $form_state['post']['op'] == t('Preview')) {
+ $message['subject'] = $form_state['post']['subject'];
+ $message['message'] = $form_state['post']['privatemsgbody'];
+ $message['format'] = $form_state['post']['format'];
+ $message['timestamp'] = time();
+ $message['newmsg'] = TRUE;
+ $message['folder'] = 1;
+ $message['uid'] = $message['author'] = $user->uid;
+ $message['name'] = $user->name;
+ $message['recipient'] = $form_state['post']['recipient'];
+ $message['preview'] = TRUE;
+
+ // Allow other modules to change the message.
+ privatemsg_invoke_privatemsg($message, 'view');
+ $form['#prefix'] = '
' .
+ theme('privatemsg_view', $message, TRUE) .
+ '
';
+ drupal_set_title(t('Preview message'));
+ }
+
+ if (!isset($form['thread'])) {
+ $form['thread'] = array('#type' => 'value', '#value' => isset($message['thread']) ? $message['thread'] : 0);
+ }
$form['header']['#theme'] = 'privatemsg_new_msg_header';
- $form['header']['recipient'] = array(
- '#type' => 'textfield',
- '#title' => t('To'),
- '#description' => t('Separate multiple names with commas.'),
- '#default_value' => isset($recipient) ? $recipient : $message->recipient,
- '#autocomplete_path' => 'privatemsg/autocomplete',
- '#size' => 50,
- '#maxlength' => 1000,
- '#required' => TRUE,
- );
+ if (!isset($form['header']['recipient'])) {
+ $form['header']['recipient'] = array(
+ '#type' => 'textfield',
+ '#title' => t('To'),
+ '#description' => t('Separate multiple names with commas.'),
+ '#default_value' => $message['recipient'],
+ '#autocomplete_path' => 'privatemsg/autocomplete',
+ '#size' => 50,
+ '#maxlength' => 1000,
+ '#required' => TRUE,
+ );
+ }
$form['header']['subject'] = array(
'#type' => 'textfield',
'#title' => t('Subject'),
- '#default_value' => $message->subject,
+ '#default_value' => $message['subject'],
'#size' => 50,
'#maxlength' => 64,
'#required' => TRUE,
);
$form['privatemsgbody'] = array(
'#type' => 'textarea',
- '#title' => empty($message->thread) ? t('Message') : t('Reply'),
- '#default_value' => $message->message,
+ '#title' => empty($message['thread']) ? t('Message') : t('Reply'),
+ '#default_value' => $message['message'],
'#cols' => 80,
'#rows' => 6,
);
- $form['filter_form'] = filter_form($message->format);
+ $form['filter_form'] = filter_form($message['format']);
$form['preview'] = array(
'#type' => 'submit',
- '#value' => t('Preview'),
- '#prefix' => '
'
+ '#value' => t('Preview')
+ );
+ $form['preview_msg'] = array(
+ '#weight' => -5,
+ '#value' => '',
);
$form['send'] = array(
'#type' => 'submit',
'#value' => t('Send private message')
);
- $form['cancel'] = array(
- '#value' => l(t('Cancel'), arg(1) == 'reply' ? 'privatemsg/view/'. arg(2) : 'privatemsg'),
- '#suffix' => '
'
- );
-
- $form['#after_build'] = array('_privatemsg_new_preview');
drupal_add_js(drupal_get_path('module', 'privatemsg') .'/privatemsg.js');
return $form;
}
-function _privatemsg_new_preview($form, $form_values) {
- if ($form_values['op'] == t('Preview')) {
- $pass = TRUE;
- $recipients = explode(',', $form_values['recipient']);
- foreach ($recipients as $recipient) {
- $recipient = user_load(array('name' => trim($recipient)));
- if (!$recipient->uid) {
- $pass = FALSE;
- }
- }
- if ($pass) {
- global $user;
- $message->subject = $form_values['subject'];
- $message->message = $form_values['privatemsgbody'];
- $message->format = $form_values['format'];
- $message->timestamp = time();
- $message->newmsg = TRUE;
- $message->folder = 1;
- $message->uid = $message->author = $user->uid;
- $message->name = $user->name;
- $message->recipient = implode(', ', $recipients);
- $message->preview = TRUE;
- // Allow other modules to change the message.
- privatemsg_invoke_privatemsg($message, 'view');
- $form['preview'] = array(
- '#prefix' => '
',
- '#value' => theme('privatemsg_view', $message, TRUE),
- '#suffix' => '
');
- drupal_set_title(t('Preview message'));
- }
- }
- return $form;
-}
-function privatemsg_new_form_validate($form_id, $form_values) {
- if (!empty($form_values['recipient'])) {
- $recipients = explode(',', $form_values['recipient']);
+function privatemsg_new_form_validate($form, &$form_state) {
+ if (!empty($form_state['values']['recipient'])) {
+ $recipients = explode(',', $form_state['values']['recipient']);
foreach ($recipients as $recipient) {
$account = user_load(array('name' => trim($recipient)));
if (!$account) {
@@ -1543,46 +1517,47 @@ function privatemsg_new_form_validate($f
}
}
}
- if (!isset($form_values['format']) || !filter_access($form_values['format'])) {
+ if (!isset($form_state['values']['format']) || !filter_access($form_state['values']['format'])) {
form_set_error('format', t('The supplied input format is invalid.'));
}
- if (empty($form_values['privatemsgbody'])) {
+ if (empty($form_state['values']['privatemsgbody'])) {
form_set_error('privatemsgbody', t('Message field is required.'));
}
}
-function privatemsg_new_form_submit($form_id, $form_values) {
+function privatemsg_new_form_submit($form, &$form_state) {
global $user;
static $seen = array();
- if ($form_values['op'] != t('Send private message')) {
- return FALSE;
- }
+ if ($form_state['clicked_button']['#value'] == t('Send private message')) {
+ // Do not allow sending a message to yourself.
+ $seen[$user->name] = TRUE;
+ $recipients = explode(',', $form_state['values']['recipient']);
+ $sent = FALSE;
+ foreach ($recipients as $recipient) {
+ $recipient = trim($recipient);
+ if (isset($seen[$recipient])) {
+ continue;
+ }
+ $seen[$recipient] = TRUE;
+ $recipient = user_load(array('name' => $recipient));
+ $message_id = _privatemsg_send($user, $recipient, $form_state['values']['subject'], $form_state['values']['privatemsgbody'], $form_state['values']['format'], $form_state['values']['thread']);
+ if ($message_id) {
+ // Load the message for consistency.
+ $message = privatemsg_load($message_id);
+ // Tell the other modules a new private message has been sent.
+ privatemsg_invoke_privatemsg($message, 'sent');
+ $sent = TRUE;
+ }
+ }
- // Do not allow sending a message to yourself.
- $seen[$user->name] = TRUE;
- $recipients = explode(',', $form_values['recipient']);
- $sent = FALSE;
- foreach ($recipients as $recipient) {
- $recipient = trim($recipient);
- if (isset($seen[$recipient])) {
- continue;
- }
- $seen[$recipient] = TRUE;
- $recipient = user_load(array('name' => $recipient));
- $message_id = _privatemsg_send($user, $recipient, $form_values['subject'], $form_values['privatemsgbody'], $form_values['format'], $form_values['thread']);
- if ($message_id) {
- // Load the message for consistency.
- $message = privatemsg_load($message_id);
- // Tell the other modules a new private message has been sent.
- privatemsg_invoke_privatemsg($message, 'sent');
- $sent = TRUE;
+ if ($sent) {
+ drupal_set_message(t('Message sent.'));
}
+ drupal_goto($user->uid ? 'privatemsg' : '');
}
-
- if ($sent) {
- drupal_set_message(t('Message sent.'));
+ else if ($form_state['clicked_button']['#value'] == t('Preview')) {
+ $form_state['redirect'] = FALSE;
}
- drupal_goto($user->uid ? 'privatemsg' : '');
}
/**
@@ -1601,8 +1576,7 @@ function privatemsg_new_form_submit($for
* @param $type
* Type of the message as defined on admin/build/privatemsg .
* @param $variables
- * If this message is a subscriptions mail, the variables used to compose the
- * message.
+ * If this message is a subscriptions mail, the variables used to compose the message.
**/
function privatemsg_send_privatemsg($recipient, $subject, $body, $format = FILTER_FORMAT_DEFAULT, $thread = 0, $type = 'private-message', $variables = array()) {
global $user;
@@ -1615,9 +1589,9 @@ function _privatemsg_send($sender, $reci
return;
}
- // Hook to allow other modules to alter any aspect of a privatemsg by
- // accepting these params by reference. Any module can cancel a privatemsg by
- // returning false here
+ // hook to allow other modules to alter any aspect of a privatemsg
+ // by accepting these params by reference. Any module can cancel a
+ // privatemsg by returning false here
foreach (module_implements('privatemsg_alter') as $name) {
$function = $name .'_privatemsg_alter';
if (!$function($sender, $recipient, $subject, $body, $format, $thread, $type)) {
@@ -1627,37 +1601,51 @@ function _privatemsg_send($sender, $reci
if ($sender->uid == $recipient->uid) {
return FALSE;
}
- $message_id = db_next_id('{privatemsg}_id');
+ $message_id = db_last_insert_id('{privatemsg}', 'id') + 1;
if (!$thread) {
- $thread = db_next_id('{privatemsg}_thread');
+ $thread = db_last_insert_id('{privatemsg}', 'thread');
}
$variables = array();
foreach ($original_variables as $name => $value) {
$variables[str_replace('!', '!original_', $name)] = $value;
}
- $result = db_query("INSERT INTO {privatemsg} (id, author, recipient, subject, message, timestamp, newmsg, hostname, format, thread, type, variables) VALUES (%d, %d, %d, '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s')", $message_id, $sender->uid, $recipient->uid, $subject, $body, time(), 1, getenv('REMOTE_ADDR'), $format, $thread, $type, serialize($variables));
+
+ $message = array(
+ 'author' => $sender->uid,
+ 'recipient' => $recipient->uid,
+ 'subject' => $subject,
+ 'message' => $body,
+ 'timestamp' => time(),
+ 'newmsg' => 1,
+ 'hostname' => getenv('REMOTE_ADDR'),
+ 'format' => $format,
+ 'thread' => $thread,
+ 'type' => $type,
+ 'variables' => serialize($variables),
+ );
+ $result = drupal_write_record('privatemsg', $message);
+ //$result = db_query("INSERT INTO {privatemsg} (id, author, recipient, subject, message, timestamp, newmsg, hostname, format, thread, type, variables) VALUES (%d, %d, %d, '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s')", $message_id, $sender->uid, $recipient->uid, $subject, $body, time(), 1, getenv('REMOTE_ADDR'), $format, $thread, $type, serialize($variables));
if ($points = variable_get('privatemsg_userpoints', 0)) {
module_invoke('userpoints', 'userpointsapi', 'points', $points, $sender->uid, 'privatemsg');
}
module_invoke('pm_subscriptions', 'subscriptions_handle', privatemsg_load($message_id));
- return $result ? $message_id : $result;
+ return ($result == SAVED_NEW) ? db_last_insert_id('privatemsg', 'id') : FALSE;
}
/**
- * Return a version of type that can be used as an object property key
- * (change whitespace to _)
+ * Return a version of type that can be used as an object property key (change whitespace to _)
*/
function _privatemsg_get_type_key($type) {
- return 'privatemsg_allow_'. preg_replace('/\s+/', '_', $type);
+ return 'privatemsg_allow_' . preg_replace('/\s+/', '_', $type);
}
/**
* Display a user's contacts list and let them write a PM to multiple contacts.
*/
function privatemsg_contacts_form() {
- $contacts = array();
global $user;
+ $contacts = array();
// Add people who have messaged the user to the contact list.
$result = db_query("SELECT DISTINCT u.name, u.uid FROM {privatemsg} AS p "
@@ -1665,8 +1653,8 @@ function privatemsg_contacts_form() {
."p.recipient = %d AND p.author != %d AND p.timestamp > "
."(UNIX_TIMESTAMP(NOW()) - (3600 * 24 * 30)) ORDER BY "
."u.name", $user->uid, $user->uid);
- while ($author = db_fetch_object($result)) {
- $contacts[check_plain($author->name)] = $author->uid;
+ while ($author = db_fetch_array($result)) {
+ $contacts[check_plain($author['name'])] = $author['uid'];
}
// Add people the user has messaged to the contact list.
@@ -1675,15 +1663,15 @@ function privatemsg_contacts_form() {
."p.author = %d AND p.timestamp > "
."(UNIX_TIMESTAMP(NOW()) - (3600 * 24 * 30)) ORDER BY "
."u.name", $user->uid, $user->uid);
- while ($author = db_fetch_object($result)) {
- $contacts[check_plain($author->name)] = $author->uid;
+ while ($author = db_fetch_array($result)) {
+ $contacts[check_plain($author['name'])] = $author['uid'];
}
if (module_exists('buddylist')) {
$result = db_query("SELECT u.name, u.uid FROM {buddylist} AS b LEFT JOIN "
."{users} AS u ON b.buddy = u.uid WHERE b.uid = %d", $user->uid);
- while ($buddy = db_fetch_object($result)) {
- $contacts[check_plain($buddy->name)] = $buddy->uid;
+ while ($buddy = db_fetch_array($result)) {
+ $contacts[check_plain($buddy['name'])] = $buddy['uid'];
}
}
@@ -1731,9 +1719,10 @@ function privatemsg_contacts_form() {
return $form;
}
-function privatemsg_contacts_form_submit($form_id, $form_values) {
- if ($form_values['op'] == t('Write private message')) {
- foreach ($form_values['contacts'] as $uid => $contact) {
+function privatemsg_contacts_form_submit($form, &$form_state) {
+ if ($form_state['clicked_button']['#value'] == t('Write private message')) {
+ $recipients = array();
+ foreach ($form_state['values']['contacts'] as $uid => $contact) {
if ($contact['selected']) {
$recipients[] = $contact['name'];
}
@@ -1748,8 +1737,8 @@ function privatemsg_contacts_form_submit
/**
* Display a private message to a user.
*
- * We calculate previous and next message here. Let's assume the order is from
- * oldest to newest. The next message is then the first row from:
+ * We calculate previous and next message here. Let's assume the order is
+ * from oldest to newest. The next message is then the first row from:
* SELECT id FROM privatemsg WHERE timestamp > %d ORDER BY timestamp ASC
* The code below is the abstraction of this to every field and ASC/DESC.
*/
@@ -1757,18 +1746,18 @@ function privatemsg_view($message_id) {
global $user;
if ($message = privatemsg_load($message_id)) {
$threaded_view = variable_get('privatemsg_threaded_view', 0);
- if (isset($_SESSION['privatemsg_list_sql'])) {
+ if (isset($form_state['storage']['privatemsg_list_sql'])) {
// This is the SQL assembled in privatemsg_list
- $sql = $_SESSION['privatemsg_list_sql']['sql'];
+ $sql = $form_state['storage']['privatemsg_list_sql']['sql'];
// These are the arguments, again from privatemsg_list
- $args = $_SESSION['privatemsg_list_sql']['args'];
+ $args = $form_state['storage']['privatemsg_list_sql']['args'];
// This is the field we are ordering on.
- $field = $_SESSION['privatemsg_list_sql']['field'];
+ $field = $form_state['storage']['privatemsg_list_sql']['field'];
// This is either ASC or DESC.
- $sort = $_SESSION['privatemsg_list_sql']['sort'];
+ $sort = $form_state['storage']['privatemsg_list_sql']['sort'];
if ($threaded_view) {
$sql .= ' AND thread != %d';
- $args[] = $message->thread;
+ $args[] = $message['thread'];
}
$placeholder = ($field == 'type' || $field == 'subject') ? "'%s'" : '%d';
$args[] = $message->$field;
@@ -1785,26 +1774,26 @@ function privatemsg_view($message_id) {
$next_sort = 'DESC';
}
if ($previous_id = db_result(db_query_range("$sql AND $field $prev_operator $placeholder ORDER BY $field $prev_sort", $args, 0, 1))) {
- $previous_link = l(t('Previous'), 'privatemsg/view/'. $previous_id, array(), NULL, 'message-'. $previous_id);
+ $previous_link = l(t('Previous'), 'privatemsg/view/'. $previous_id, array('fragment' => 'message-'. $previous_id));
}
else {
$previous_link = '';
}
if ($next_id = db_result(db_query_range("$sql AND $field $next_operator $placeholder ORDER BY $field $next_sort", $args, 0, 1))) {
- $next_link = l(t('Next'), 'privatemsg/view/'. $next_id, array(), NULL, 'message-'. $next_id);
+ $next_link = l(t('Next'), 'privatemsg/view/'. $next_id, array('fragment' => 'message-'. $next_id));
}
else {
$next_link = '';
}
}
- if ($threaded_view && $message->thread) {
- $result = db_query('SELECT p.id, u.uid, u.name, p.author, p.timestamp, p.subject, p.message, p.newmsg, p.recipient, p.folder, p.format FROM {privatemsg} p INNER JOIN {users} u ON p.author = u.uid WHERE p.thread = %d ORDER BY timestamp ASC', $message->thread);
+ if ($threaded_view && $message['thread']) {
+ $result = db_query('SELECT p.id, u.uid, u.name, p.author, p.timestamp, p.subject, p.message, p.newmsg, p.recipient, p.folder, p.format FROM {privatemsg} p INNER JOIN {users} u ON p.author = u.uid WHERE p.thread = %d ORDER BY timestamp ASC', $message['thread']);
$messages = '';
- while ($message = db_fetch_object($result)) {
+ while ($message = db_fetch_array($result)) {
if (!isset($first)) {
$first = $message;
}
- if ($message->recipient == $user->uid) {
+ if ($message['recipient'] == $user->uid) {
$last = $message;
}
$messages .= _privatemsg_view($message);
@@ -1814,10 +1803,13 @@ function privatemsg_view($message_id) {
$first = $message;
$messages = _privatemsg_view($message);
}
- $output = theme('privatemsg_links', $previous_link, $next_link);
+ $output = '';
+ if (isset($previous_link)) {
+ $output .= theme('privatemsg_links', $previous_link, $next_link);
+ }
$output .= $messages;
- if ($last->recipient == $user->uid) {
- $output .= drupal_get_form('privatemsg_new_form', $last->id);
+ if (isset($last) && $last['recipient'] == $user->uid) {
+ $output .= drupal_get_form('privatemsg_new_form', $last['id']);
}
return $output;
}
@@ -1828,8 +1820,8 @@ function _privatemsg_view($message) {
global $user;
// Allow other modules to change the message.
privatemsg_invoke_privatemsg($message, 'view');
- if ($message->newmsg && $user->uid == $message->recipient) {
- db_query("UPDATE {privatemsg} SET newmsg = 0 WHERE id = %d", $message->id);
+ if ($message['newmsg'] && $user->uid == $message['recipient']) {
+ db_query("UPDATE {privatemsg} SET newmsg = 0 WHERE id = %d", $message['id']);
}
return theme('privatemsg_view', $message, FALSE);
}
@@ -1837,13 +1829,13 @@ function _privatemsg_view($message) {
/**
* Add the action form to the view message screen.
*/
-function privatemsg_view_form($message) {
+function privatemsg_view_form(&$form_state, $message) {
global $user;
$folders = privatemsg_load_folders($user->uid);
$extra_folders = array();
foreach ($folders as $folder) {
- if ($folder['fid'] != 1 && $folder['fid'] != $message->folder) {
+ if ($folder['fid'] != 1 && $folder['fid'] != $message['folder']) {
$extra_folders[$folder['fid']] = $folder['name'];
}
}
@@ -1851,15 +1843,15 @@ function privatemsg_view_form($message)
$form['pm_id'] = array(
'#type' => 'hidden',
- '#value' => $message->id,
+ '#value' => $message['id'],
);
$form['pm_fid'] = array(
'#type' => 'hidden',
- '#value' => $message->folder,
+ '#value' => $message['folder'],
);
$form['author']= array(
'#type' => 'value',
- '#value' => $message->author,
+ '#value' => $message['author'],
);
$form['js_bypass'] = array(
'#type' => 'hidden',
@@ -1875,7 +1867,7 @@ function privatemsg_view_form($message)
$form['actions']['text'] = array(
'#value' => '
'. t('With this message:') .'
',
);
- if ($user->uid == $message->recipient) {
+ if ($user->uid == $message['recipient']) {
$form['actions']['reply'] = array(
'#type' => 'submit',
'#value' => t('Reply'),
@@ -1894,11 +1886,14 @@ function privatemsg_view_form($message)
);
}
- if ($user->uid == $message->recipient) {
- // Avoid listing the recycle bin as a folder when the delete button is
- // available.
- unset($extra_folders[PRIVATEMSG_FOLDER_RECYCLE_BIN]);
+ $form['actions']['unread'] = array(
+ '#type' => 'submit',
+ '#value' => t('Mark as Unread'),
+ '#prefix' => ' ',
+ '#attributes' => array('class' => 'pm-add-unread pm-spacer'),
+ );
+ if ($user->uid == $message['recipient']) {
$form['actions']['folder'] = array(
'#type' => 'select',
'#options' => $extra_folders,
@@ -1909,6 +1904,12 @@ function privatemsg_view_form($message)
'#type' => 'submit',
'#value' => t('Move to folder'),
);
+ if (!privatemsg_user_blocked($message['author'])) {
+ $form['actions']['block'] = array(
+ '#type' => 'submit',
+ '#value' => t('Block this user'),
+ );
+ }
}
if ($del == '2') {
@@ -1933,29 +1934,35 @@ function privatemsg_view_form($message)
return $form;
}
-function privatemsg_view_form_submit($form_id, $form_values) {
+function privatemsg_view_form_submit($form, &$form_state) {
global $user;
- switch ($form_values['op']) {
+ switch ($form_state['clicked_button']['#value']) {
case t('Reply'):
- drupal_goto('privatemsg/reply/'. $form_values['pm_id']);
+ drupal_goto('privatemsg/reply/'. $form_state['values']['pm_id']);
case t('Delete'):
if ($_POST['js_bypass'] == 1) {
- drupal_goto('privatemsg/delete/'. $form_values['pm_id']);
+ drupal_goto('privatemsg/delete/'. $form_state['values']['pm_id']);
}
- drupal_goto('privatemsg/delete/confirm/'. $form_values['pm_id']);
+ drupal_goto('privatemsg/delete/confirm/'. $form_state['values']['pm_id']);
+ case t('Mark as Unread'):
+ db_query("UPDATE {privatemsg} SET newmsg = 1 WHERE id = %d", $form_state['values']['pm_id']);
+ drupal_goto('privatemsg/list/'. $form_state['values']['pm_fid']);
+ case t('Block this user'):
+ privatemsg_block_user($form_state['values']['author']);
+ break;
case t('Move to folder'):
- $fid = $form_values['folder'];
+ $fid = $form_state['values']['folder'];
if ($fid == 'new') {
- $_SESSION['privatemsg'] = array(
- $form_values['pm_id'] => array('selected' => TRUE)
+ $form_state['storage']['privatemsg'] = array(
+ $form_state['values']['pm_id'] => array('selected' => TRUE)
);
- $_SESSION['fromfolder'] = 'view/'. intval($form_values['pm_id']);
+ $form_state['storage']['fromfolder'] = 'view/'. intval($form_state['values']['pm_id']);
drupal_goto('privatemsg/folders/movetonew');
}
- db_query("UPDATE {privatemsg} SET folder = %d WHERE id = %d AND recipient = %d", $fid, $form_values['pm_id'], $user->uid);
- $link = l(t('%folder', array('%folder' => $form_values['extra_folders'][$fid])), 'privatemsg/list/'. $fid, array(), NULL, NULL, FALSE, TRUE);
+ db_query("UPDATE {privatemsg} SET folder = %d WHERE id = %d AND recipient = %d", $fid, $form_state['values']['pm_id'], $user->uid);
+ $link = l(t('%folder', array('%folder' => $form_state['values']['extra_folders'][$fid])), 'privatemsg/list/'. $fid, array('html' => TRUE));
drupal_set_message(t('Your message has been moved to !link.', array('!link' => $link)));
break;
@@ -1964,13 +1971,13 @@ function privatemsg_view_form_submit($fo
function privatemsg_back_to_list($message_id) {
global $user;
- $message = db_fetch_object(db_query("SELECT folder, recipient FROM {privatemsg} WHERE id = %d", $message_id));
+ $message = db_fetch_array(db_query("SELECT folder, recipient FROM {privatemsg} WHERE id = %d", $message_id));
- if ($message->fid > 0) {
+ if ($message['folder'] > 0) {
drupal_goto('privatemsg/list/'. $fid);
}
else {
- drupal_goto('privatemsg'. ($user->uid == $message->recipient ? '' : '/'. $message->recipient));
+ drupal_goto('privatemsg'. ($user->uid == $message['recipient'] ? '' : '/'. $message['recipient']));
}
}
@@ -1987,7 +1994,7 @@ function privatemsg_delete() {
}
if (arg(2) == 'multiple') {
- if (empty($_SESSION['privatemsg']) || !is_array($_SESSION['privatemsg'])) {
+ if (empty($form_state['storage']['privatemsg']) || !is_array($form_state['storage']['privatemsg'])) {
drupal_goto('priatemsg');
}
return drupal_get_form('privatemsg_delete_multiple_form');
@@ -2009,22 +2016,22 @@ function privatemsg_delete_form($mid) {
return $form;
}
-function privatemsg_delete_form_submit($form_id, $form_values) {
+function privatemsg_delete_form_submit($form, &$form_state) {
drupal_goto('privatemsg/delete/'. arg(3));
}
function privatemsg_delete_multiple_form() {
- foreach ($_SESSION['privatemsg'] as $mid => $message) {
+ foreach ($form_state['storage']['privatemsg'] as $mid => $message) {
if ($message['selected']) {
$messages[] = $message['subject'];
}
}
- if ($_SESSION['fromfolder'] == 0) {
+ if ($form_state['storage']['fromfolder'] == 0) {
$cancel_path = 'privatemsg';
}
else {
- $cancel_path = 'privatemsg/list/'. $_SESSION['fromfolder'];
+ $cancel_path = 'privatemsg/list/'. $form_state['storage']['fromfolder'];
}
$message = t('Are you sure you wish to delete the following messages?')
@@ -2036,20 +2043,20 @@ function privatemsg_delete_multiple_form
return $form;
}
-function privatemsg_delete_multiple_form_submit($form_id, $form_values) {
- foreach ($_SESSION['privatemsg'] as $mid => $message) {
+function privatemsg_delete_multiple_form_submit($form, &$form_state) {
+ foreach ($form_state['storage']['privatemsg'] as $mid => $message) {
if ($message['selected']) {
_privatemsg_delete($mid);
}
}
- if ($_SESSION['fromfolder'] == 0) {
+ if ($form_state['storage']['fromfolder'] == 0) {
$path = 'privatemsg';
}
else {
- $path = 'privatemsg/list/'. $_SESSION['fromfolder'];
+ $path = 'privatemsg/list/'. $form_state['storage']['fromfolder'];
}
- unset($_SESSION['privatemsg'], $_SESSION['fromfolder']);
+ unset($form_state['storage']['privatemsg'], $form_state['storage']['fromfolder']);
drupal_set_message(t('Messages deleted.'));
@@ -2061,14 +2068,14 @@ function _privatemsg_delete($id, $delete
$result = db_query('SELECT author, recipient, folder FROM {privatemsg} WHERE (recipient = %d OR author = %d) AND id = %d', $user->uid, $user->uid, $id);
- if ($message = db_fetch_object($result)) {
- if ($message->author == $user->uid) {
+ if ($message = db_fetch_array($result)) {
+ if ($message['author'] == $user->uid) {
db_query('UPDATE {privatemsg} SET author_del = %d WHERE id = %d', $deleted_status, $id);
$retval = 1;
}
- if ($message->recipient == $user->uid) {
+ if ($message['recipient'] == $user->uid) {
db_query('UPDATE {privatemsg} SET recipient_del = %d WHERE id = %d', $deleted_status, $id);
- $retval = $message->folder;
+ $retval = $message['folder'];
}
// Notify other modules that a message is deleted.
privatemsg_invoke_privatemsg($message, 'delete');
@@ -2089,9 +2096,6 @@ function _privatemsg_get_new_messages($u
return $cache[$uid];
}
-/**
- * Implementation of hook_userpoints.
- */
function privatemsg_userpoints($op, $new_points = 0, $uid = 0, $event = '') {
switch ($op) {
case 'setting':
@@ -2104,47 +2108,75 @@ function privatemsg_userpoints($op, $new
}
/**
- * Implementation of hook_simpletest.
+ * Implementation of hook_theme().
*/
-function privatemsg_simpletest() {
- $dir = drupal_get_path('module', 'privatemsg') .'/tests';
- $tests = file_scan_directory($dir, '\.test$');
- return array_keys($tests);
+function privatemsg_theme() {
+ $themes = array();
+
+ $themes['privatemsg_view'] = array('arguments' => array(
+ 'message' => array(),
+ 'preview' => FALSE,
+ 'prev' => 0,
+ 'next' => 0,
+ ));
+ $themes['privatemsg_message_table'] = array('arguments' => array(
+ 'form' => array(),
+ ));
+ $themes['privatemsg_contacts_table'] = array('arguments' => array(
+ 'form' => array(),
+ ));
+ $themes['privatemsg_new_msg_header'] = array('arguments' => array(
+ 'form' => array(),
+ ));
+ $themes['privatemsg_username'] = array('arguments' => array(
+ 'user' => new stdClass(),
+ ));
+ $themes['privatemsg_links'] = array('arguments' => array(
+ 'previous_link' => '',
+ 'next_link' => '',
+ ));
+ $themes['privatemsg_block_inbox'] = array('arguments' => array(
+ 'new' => FALSE,
+ ));
+
+ return $themes;
}
/**
* @addtogroup theme_system
*
- * Privatemsg module specific theme functions.
+ * Privatemsg module specific theme functions
* @{
- */
+**/
/**
- * Returns content to view a private message.
- *
- * @param message
- */
+ Returns content to view a private message
+
+ @param message
+**/
function theme_privatemsg_view($message, $preview = FALSE, $prev = 0, $next = 0) {
+ drupal_add_css(drupal_get_path('module', 'privatemsg') .'/privatemsg.css');
$option = variable_get('privatemsg_view_actions', '3');
global $user;
+ $output = '';
if ($option == '4') {
$links = array();
- if ($message->recipient == $user->uid) {
- $author = user_load(array('uid' => $message->uid));
+ if ($message['recipient'] == $user->uid) {
+ $author = user_load(array('uid' => $message['uid']));
if ($author->uid && $author->privatemsg_allow) {
- $links['privatemsg_reply'] = array('title' => t('Reply to this message'), 'href' => 'privatemsg/reply/'. $message->id);
+ $links['privatemsg_reply'] = array('title' => t('Reply to this message'), 'href' => 'privatemsg/reply/'. $message['id']);
}
else {
$links['privatemsg_noreply'] = array('title' => t('Sender does not accept replies'), 'href' => NULL);
}
}
- if ($message->recipient == $user->uid || variable_get('privatemsg_sent_status', 1)) {
- $links['privatemsg_delete'] = array('title' => t('Delete this message'), 'href' => 'privatemsg/delete/'. $message->id, 'attributes' => array('onclick' => "return confirm('". t('Are you sure you want to delete this message?') ."')"));
+ if ($message['recipient'] == $user->uid || variable_get('privatemsg_sent_status', 1)) {
+ $links['privatemsg_delete'] = array('title' => t('Delete this message'), 'href' => 'privatemsg/delete/'. $message['id'], 'attributes' => array('onclick' => "return confirm('". t('Are you sure you want to delete this message?') ."')"));
}
- $links['privatemsg_list'] = array('title' => t('List messages'), 'href' => ($message->recipient == $user->uid && $message->folder) ? 'privatemsg/list/'. $message->folder : 'privatemsg');
- if ($message->id) {
+ $links['privatemsg_list'] = array('title' => t('List messages'), 'href' => ($message['recipient'] == $user->uid && $message['folder']) ? 'privatemsg/list/'. $message['folder'] : 'privatemsg');
+ if ($message['id']) {
$link_display = '
'. theme('links', $links) .'
';
}
}
@@ -2154,15 +2186,7 @@ function theme_privatemsg_view($message,
$pm_from = $user->name;
}
else {
- $pm_from = theme('privatemsg_username', $message);
- if ($message->author != $user->uid) {
- if (!privatemsg_user_blocked($message->author)) {
- $pm_from .= t('
(Block user)', array('!block-link' => url('privatemsg/block/'. $message->author, drupal_get_destination())));
- }
- else {
- $pm_from .= t('
(Unblock user)', array('!block-link' => url('privatemsg/block/'. $message->author, drupal_get_destination())));
- }
- }
+ $pm_from = theme('privatemsg_username', user_load(array('uid' => $message['author'])));
}
$rows[] = array(
array('data' => t('From:'), 'class' => 'title-cell', 'nowrap' => 'nowrap'),
@@ -2171,10 +2195,10 @@ function theme_privatemsg_view($message,
// To row.
if ($preview) {
- $pm_to = $message->recipient;
+ $pm_to = $message['recipient'];
}
else {
- $pm_to = theme('privatemsg_username', user_load(array('uid' => $message->recipient)));
+ $pm_to = theme('privatemsg_username', user_load(array('uid' => $message['recipient'])));
}
$rows[] = array(
array('data' => t('To:'), 'class' => 'title-cell', 'nowrap' => 'nowrap'),
@@ -2182,14 +2206,14 @@ function theme_privatemsg_view($message,
);
// Subject row.
- $subject = check_plain($message->subject);
+ $subject = check_plain($message['subject']);
$rows[] = array(
array('data' => t('Subject:'), 'class' => 'title-cell', 'nowrap' => 'nowrap'),
array('data' => $subject, 'class' => 'data-cell'),
);
// Date row.
- $date = format_date($message->timestamp);
+ $date = format_date($message['timestamp']);
$rows[] = array(
array('data' => t('Date:'), 'class' => 'title-cell', 'nowrap' => 'nowrap'),
array('data' => $date, 'class' => 'data-cell'),
@@ -2197,7 +2221,7 @@ function theme_privatemsg_view($message,
// Message body.
$body = '
'
- . check_markup($message->message, $message->format, FALSE) .'
';
+ . check_markup($message['message'], $message['format'], FALSE) .'
';
/* $rows[] = array(
array('data' => $body, 'class' => 'pm-body', 'colspan' => 5),
);*/
@@ -2208,7 +2232,12 @@ function theme_privatemsg_view($message,
if (!$preview && ($option == '1' || $option == '3')) {
$output .= $form;
}
- $output .= theme('table', NULL, $rows, array('id' => 'message-'. $message->id, 'class' => 'pm-view-table'));
+ if (isset($message['id'])) {
+ $output .= theme('table', NULL, $rows, array('id' => 'message-'. $message['id'], 'class' => 'pm-view-table'));
+ }
+ else {
+ $output .= theme('table', NULL, $rows, array('id' => 'newmessage', 'class' => 'pm-view-table'));
+ }
$output .= $body;
if (!$preview && ($option == '2' || $option == '3')) {
$output .= $form;
@@ -2245,7 +2274,7 @@ function theme_privatemsg_message_table(
}
if (count($rows) == 0) {
- $rows[] = array(array('data' => t('No messages.'), 'colspan' => 5));
+ $rows[] = array(array('data' => t('No messages.'), 'colspan' => 4));
$select_cell = NULL;
}
else {
@@ -2259,6 +2288,7 @@ function theme_privatemsg_message_table(
}
function theme_privatemsg_contacts_table($form) {
+ drupal_add_css(drupal_get_path('module', 'privatemsg') .'/privatemsg.css');
$rows = array();
foreach (element_children($form) as $key) {
@@ -2287,6 +2317,7 @@ function theme_privatemsg_contacts_table
}
function theme_privatemsg_new_msg_header($form) {
+ drupal_add_css(drupal_get_path('module', 'privatemsg') .'/privatemsg.css');
$rows = array();
$title = $form['recipient']['#title'] .':';
@@ -2332,7 +2363,7 @@ function theme_privatemsg_block_inbox($n
/** @} End of addtogroup theme_system
*
- */
+**/
/**
* Return autocomplete results for usernames.
@@ -2351,8 +2382,8 @@ function privatemsg_autocomplete($string
$result = db_query_range($sql, $search, 0, 10);
$prefix = count($names) ? implode(', ', $names) .', ' : '';
$matches = array();
- while ($user = db_fetch_object($result)) {
- $matches[$prefix . $user->name] = check_plain($user->name);
+ while ($user = db_fetch_array($result)) {
+ $matches[$prefix . $user['name']] = check_plain($user['name']);
}
print drupal_to_js($matches);
exit();
@@ -2388,10 +2419,6 @@ function privatemsg_folder_access($uid,
return FALSE;
}
- if (intval($fid) == 0) {
- return FALSE;
- }
-
// Check the database for the user ID of the folder.
$owner = db_result(db_query("SELECT uid FROM {privatemsg_folder} WHERE fid = %d", $fid));
if ($owner == $uid) {
@@ -2404,18 +2431,27 @@ function privatemsg_folder_access($uid,
function _privatemsg_prune() {
// move deleted message older than 1 month to archive table, and optimize table
$result = db_query('SELECT * FROM {privatemsg} WHERE author_del = 1 AND recipient_del = 1 AND timestamp < %d', time() - 3600*24*30);
- while ($message = db_fetch_object($result)) {
- db_query("INSERT INTO {privatemsg_archive} (id, author, recipient, subject, message, timestamp, hostname, format, folder, thread, type) VALUES (%d, %d, %d, '%s', '%s', %d, '%s', %d, %d, %d, '%s')", $message->id, $message->author, $message->recipient, $message->subject, $message->message, $message->timestamp, $message->hostname, $message->format, $message->folder, $message->thread, $message->type);
- db_query('DELETE FROM {privatemsg} WHERE id = %d', $message->id);
+ while ($message = db_fetch_array($result)) {
+ /*$data = array(
+ 'id' => $message['id'],
+ 'author' => $message['author'],
+ 'recipient' => $message['recipient'],
+ 'subject' => $message['subject'],
+ 'message' => $message['message'],
+ 'timestamp' => $message['timestamp'],
+ 'hostname' => $message['hostname'],
+ 'format' => $message['format'],
+ 'folder' => $message['folder'],
+ 'thread' => $message['thread'],
+ 'type' => $message['type'],
+ );*/
+ drupal_write_record('privatemsg_archive', $message);
+ //db_query("INSERT INTO {privatemsg_archive} (id, author, recipient, subject, message, timestamp, hostname, format, folder, thread, type) VALUES (%d, %d, %d, '%s', '%s', %d, '%s', %d, %d, %d, '%s')", $message['id'], $message['author'], $message['recipient'], $message['subject'], $message['message'], $message['timestamp'], $message['hostname'], $message['format'], $message['folder'], $message['thread'], $message['type']);
+ db_query('DELETE FROM {privatemsg} WHERE id = %d', $message['id']);
// Notify other modules that a message is pruned.
privatemsg_invoke_privatemsg($message, 'prune');
}
-
- // this is MySQL-specific
- if (!strncmp($GLOBALS['db_type'], 'mysql', 5)) {
- db_query('OPTIMIZE TABLE {privatemsg}');
- }
}
/**
@@ -2453,12 +2489,133 @@ function privatemsg_load($message_id) {
$params[] = $user->uid;
}
$result = db_query($sql, $params);
- return db_fetch_object($result);
+ return db_fetch_array($result);
}
-function _privatemsg_user_add_defaults(&$account) {
- if (!isset($account->privatemsg_allow)) {
- $account->privatemsg_allow = variable_get('privatemsg_default_allow', 1);
- $account->privatemsg_setmessage_notify = variable_get('privatemsg_default_setmessage_notify', 1);
+/**
+ * Provides a callback function for a special permission type of privatemsg.
+ */
+function privatemsg_special_access1() {
+ global $user;
+ return !$user->uid || user_access('access private messages');
+}
+
+/**
+ * Provides a callback function for a special permission type of privatemsg.
+ */
+function privatemsg_special_access2() {
+ global $user;
+ return user_access('access private messages') && $user->uid;
+}
+
+/**
+ * Provides a callback function for a special permission type of privatemsg.
+ */
+function privatemsg_special_access3() {
+ global $user;
+ return user_access('create new folder') && $user->uid;
+}
+
+/**
+ * Provides a callback function for a special permission type of privatemsg.
+ */
+function privatemsg_special_access4() {
+ global $user;
+ if (arg(0) == 'user' && arg(2) == 'privatemsg' && is_numeric(arg(1))) {
+ if ($user->uid == arg(1)) {
+ return $user->privatemsg_allow;
+ }
+ else if (user_access('administer private messages')) {
+ $account = user_load(array('uid' => arg(1)));
+ return $account->privatemsg_allow;
+ }
+ }
+ return false;
+}
+
+/**
+ * Provides a callback function for a special permission type of privatemsg.
+ */
+function privatemsg_special_access5() {
+ global $user;
+ return arg(0) == 'privatemsg' && is_numeric(arg(1)) && ($user->uid == arg(1) || user_access('administer private messages'));
+}
+
+/**
+ * Provides a callback function for a special permission type of privatemsg.
+ */
+function privatemsg_special_access6($account) {
+ global $user;
+ return ($user->uid == $account->uid || user_access('administer private messages')) && $account->privatemsg_allow;
+}
+
+/**
+ * Tests, whether the user has the right to manipulate the given folder.
+ */
+function privatemsg_administer_folder_permission($fid) {
+ global $user;
+ return privatemsg_folder_access($user->uid, $fid) && user_access('administer private messages');
+}
+
+/**
+ * Function that just returns true. (For access control.)
+ */
+function privatemsg_return_true() {
+ return true;
+}
+
+/**
+ * Function that determines the title for the /block site.
+ */
+function privatemsg_get_block_title($account) {
+ $title = t(privatemsg_user_blocked($account->uid) ? 'Unblock @user' : 'Block @user');
+ return str_replace('@user', $account->name, $title);
+}
+
+/**
+ * Callback for the /block site.
+ */
+function privatemsg_get_block_form($account) {
+ return drupal_get_form(privatemsg_user_blocked($account->uid) ? 'privatemsg_unblock_user_form ' : 'privatemsg_block_user_form', $account);
+}
+
+/**
+ * Returns the title for the inbox site.
+ */
+function privatemsg_get_inbox_title() {
+ global $user;
+
+ $new = _privatemsg_get_new_messages();
+
+ if ($new && strncmp($_GET['q'], 'privatemsg', 10) && property_exists($user, 'privatemsg_setmessage_notify') &&
+ $user->privatemsg_setmessage_notify && user_access('access private messages')) {
+ $m = drupal_set_message();
+ if (empty($m)) {
+ drupal_set_message(strtr(
+ format_plural($new,
+ 'You have a new