aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/message.php8
-rw-r--r--include/msglib.php28
-rw-r--r--include/zot.php8
3 files changed, 34 insertions, 10 deletions
diff --git a/include/message.php b/include/message.php
index 4a673b961..936c01631 100644
--- a/include/message.php
+++ b/include/message.php
@@ -4,6 +4,7 @@
require_once('include/crypto.php');
require_once('include/attach.php');
+require_once('include/msglib.php');
function mail_prepare_binary($item) {
@@ -498,11 +499,8 @@ function private_messages_drop($channel_id, $messageitem_id, $drop_conversation
}
else {
xchan_mail_query($x[0]);
- $x[0]['mail_deleted'] = true;
- $r = q("DELETE FROM mail WHERE id = %d AND channel_id = %d",
- intval($messageitem_id),
- intval($channel_id)
- );
+ $x[0]['mail_deleted'] = true;
+ msg_drop($messageitem_id, $channel_id, $x[0]['conv_guid']);
build_sync_packet($channel_id,array('mail' => array(encode_mail($x,true))));
return true;
}
diff --git a/include/msglib.php b/include/msglib.php
new file mode 100644
index 000000000..f0bf523de
--- /dev/null
+++ b/include/msglib.php
@@ -0,0 +1,28 @@
+<?php
+
+/* Common private message processing functions */
+
+function msg_drop($message_id, $channel_id, $conv_guid) {
+
+ // Delete message
+ $r = q("DELETE FROM mail WHERE id = %d AND channel_id = %d",
+ intval($message_id),
+ intval($channel_id)
+ );
+
+ // Get new first message...
+ $r = q("SELECT mid, parent_mid FROM mail WHERE conv_guid = '%s' AND channel_id = %d ORDER BY id ASC LIMIT 1",
+ dbesc($conv_guid),
+ intval($channel_id)
+ );
+ // ...and if wasn't first before...
+ if ($r[0]['mid'] != $r[0]['parent_mid']) {
+ // ...refer whole thread to it
+ q("UPDATE mail SET parent_mid = '%s', mail_isreply = abs(mail_isreply - 1) WHERE conv_guid = '%s' AND channel_id = %d",
+ dbesc($r[0]['mid']),
+ dbesc($conv_guid),
+ intval($channel_id)
+ );
+ }
+
+}
diff --git a/include/zot.php b/include/zot.php
index b29e86dfa..e31d650d2 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -12,6 +12,7 @@ require_once('include/crypto.php');
require_once('include/items.php');
require_once('include/queue_fn.php');
require_once('include/perm_upgrade.php');
+require_once('include/msglib.php');
/**
@@ -2331,16 +2332,13 @@ function process_mail_delivery($sender, $arr, $deliveries) {
}
- $r = q("select id from mail where mid = '%s' and channel_id = %d limit 1",
+ $r = q("select id, conv_guid from mail where mid = '%s' and channel_id = %d limit 1",
dbesc($arr['mid']),
intval($channel['channel_id'])
);
if($r) {
if(intval($arr['mail_recalled'])) {
- $x = q("delete from mail where id = %d and channel_id = %d",
- intval($r[0]['id']),
- intval($channel['channel_id'])
- );
+ msg_drop($r[0]['id'], $channel['channel_id'], $r[0]['conv_guid']);
$DR->update('mail recalled');
$result[] = $DR->get();
logger('mail_recalled');