The following error appears when replying to a message in read_all mode:

Failed to send a message to admin, leighton, moonray. PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '50-1-user' for key 1: INSERT INTO {pm_index} (mid, thread_id, recipient, type, is_new, deleted) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5), (:db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9, :db_insert_placeholder_10, :db_insert_placeholder_11), (:db_insert_placeholder_12, :db_insert_placeholder_13, :db_insert_placeholder_14, :db_insert_placeholder_15, :db_insert_placeholder_16, :db_insert_placeholder_17), (:db_insert_placeholder_18, :db_insert_placeholder_19, :db_insert_placeholder_20, :db_insert_placeholder_21, :db_insert_placeholder_22, :db_insert_placeholder_23), (:db_insert_placeholder_24, :db_insert_placeholder_25, :db_insert_placeholder_26, :db_insert_placeholder_27, :db_insert_placeholder_28, :db_insert_placeholder_29), (:db_insert_placeholder_30, :db_insert_placeholder_31, :db_insert_placeholder_32, :db_insert_placeholder_33, :db_insert_placeholder_34, :db_insert_placeholder_35); Array ( [:db_insert_placeholder_0] => 50 [:db_insert_placeholder_1] => 50 [:db_insert_placeholder_2] => 1 [:db_insert_placeholder_3] => user [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => 0 [:db_insert_placeholder_6] => 58 [:db_insert_placeholder_7] => 50 [:db_insert_placeholder_8] => 1 [:db_insert_placeholder_9] => user [:db_insert_placeholder_10] => 0 [:db_insert_placeholder_11] => 0 [:db_insert_placeholder_12] => 63 [:db_insert_placeholder_13] => 50 [:db_insert_placeholder_14] => 1 [:db_insert_placeholder_15] => user [:db_insert_placeholder_16] => 0 [:db_insert_placeholder_17] => 0 [:db_insert_placeholder_18] => 64 [:db_insert_placeholder_19] => 50 [:db_insert_placeholder_20] => 1 [:db_insert_placeholder_21] => user [:db_insert_placeholder_22] => 1 [:db_insert_placeholder_23] => 0 [:db_insert_placeholder_24] => 64 [:db_insert_placeholder_25] => 50 [:db_insert_placeholder_26] => 3 [:db_insert_placeholder_27] => user [:db_insert_placeholder_28] => 1 [:db_insert_placeholder_29] => 0 [:db_insert_placeholder_30] => 64 [:db_insert_placeholder_31] => 50 [:db_insert_placeholder_32] => 96 [:db_insert_placeholder_33] => user [:db_insert_placeholder_34] => 1 [:db_insert_placeholder_35] => 0 ) in _privatemsg_send() (line 1822 of /Users/balarama/Sites/git/foodfeed/web/sites/all/modules/contrib/privatemsg/privatemsg.module).

This is because the read_all mode portion of _privatemsg_send() tries to add the author to all existing messages, even though he/she already is included.

Comments

Berdir’s picture

Hm, if he already is included, he should not trigger the read all mode?

But yes, we should make that error-proof.

liminu’s picture

Subscribe, some update?

estebant’s picture

It seems to work adding the following condition to the function _privatemsg_send($message), in privatemsg.module

    // 2) Save message to recipients.
    // Each recipient gets a record in the pm_index table.
    foreach ($message->recipients as $recipient) {
+     if($recipient->recipient != $message->author->uid) {
        $query->values(array(
          'mid' => $mid,
          'thread_id' => $message->thread_id,
          'recipient' => $recipient->recipient,
          'type' => $recipient->type,
          'is_new' => 1,
          'deleted' => 0,
        ));
+     }
    }
estebant’s picture

And/or you may need to get rid of this piece of code:

-    if (isset($message->read_all) && $message->read_all && isset($message->thread_id)) {
-      // The message was sent in read all mode, add the author as recipient to all
-      // existing messages.
-      $query_messages = _privatemsg_assemble_query('messages', array($message->thread_id), NULL);
-      foreach ($query_messages->execute()->fetchCol() as $mid) {
-        $query->values(array(
-          'mid' => $mid,
-          'thread_id' => $message->thread_id,
-          'recipient' => $message->author->uid,
-          'type' => 'user',
-          'is_new' => 0,
-          'deleted' => 0,
-        ));
-      }
-    }
ivnish’s picture

Status: Active » Closed (outdated)