diff options
Diffstat (limited to 'include/message.php')
-rw-r--r-- | include/message.php | 103 |
1 files changed, 79 insertions, 24 deletions
diff --git a/include/message.php b/include/message.php index 4b0236db8..820d814b6 100644 --- a/include/message.php +++ b/include/message.php @@ -28,8 +28,6 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto=' // $expires = datetime_convert(date_default_timezone_get(),'UTC',$expires); - - if($uid) { $r = q("select * from channel where channel_id = %d limit 1", intval($uid) @@ -49,18 +47,20 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto=' // look for any existing conversation structure + $conv_guid = ''; if(strlen($replyto)) { - $r = q("select convid from mail where channel_id = %d and ( mid = '%s' or parent_mid = '%s' ) limit 1", + $r = q("select conv_guid from mail where channel_id = %d and ( mid = '%s' or parent_mid = '%s' ) limit 1", intval(local_channel()), dbesc($replyto), dbesc($replyto) ); - if($r) - $convid = $r[0]['convid']; + if($r) { + $conv_guid = $r[0]['conv_guid']; + } } - if(! $convid) { + if(! $conv_guid) { // create a new conversation @@ -93,16 +93,28 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto=' dbesc($conv_guid), intval(local_channel()) ); - if($r) - $convid = $r[0]['id']; + if($r) { + $retconv = $r[0]; + $retconv['subject'] = base64url_decode(str_rot47($retconv['subject'])); + } + } + + if(! $retconv) { + $r = q("select * from conv where guid = '%s' and uid = %d limit 1", + dbesc($conv_guid), + intval(local_channel()) + ); + if($r) { + $retconv = $r[0]; + $retconv['subject'] = base64url_decode(str_rot47($retconv['subject'])); + } } - if(! $convid) { + if(! $retconv) { $ret['message'] = 'conversation not found'; return $ret; } - // generate a unique message_id do { @@ -174,10 +186,10 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto=' - $r = q("INSERT INTO mail ( account_id, convid, mail_obscured, channel_id, from_xchan, to_xchan, title, body, attach, mid, parent_mid, created, expires ) - VALUES ( %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", + $r = q("INSERT INTO mail ( account_id, conv_guid, mail_obscured, channel_id, from_xchan, to_xchan, title, body, attach, mid, parent_mid, created, expires ) + VALUES ( %d, '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", intval($channel['channel_account_id']), - intval($convid), + dbesc($conv_guid), intval(1), intval($channel['channel_id']), dbesc($channel['channel_hash']), @@ -197,8 +209,11 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto=' dbesc($mid), intval($channel['channel_id']) ); - if($r) + if($r) { $post_id = $r[0]['id']; + $retmail = $r[0]; + xchan_mail_query($retmail); + } else { $ret['message'] = t('Stored post could not be verified.'); return $ret; @@ -242,6 +257,9 @@ function send_message($uid = 0, $recipient='', $body='', $subject='', $replyto=' $ret['success'] = true; $ret['message_item'] = intval($post_id); + $ret['conv'] = $retconv; + $ret['mail'] = $retmail; + return $ret; } @@ -367,30 +385,67 @@ function private_messages_fetch_message($channel_id, $messageitem_id, $updatesee function private_messages_drop($channel_id, $messageitem_id, $drop_conversation = false) { + + $x = q("select * from mail where id = %d and channel_id = %d limit 1", + intval($messageitem_id), + intval($channel_id) + ); + if(! $x) + return false; + + $conversation = null; + + if($x[0]['conv_guid']) { + $y = q("select * from conv where guid = '%s' and uid = %d limit 1", + dbesc($x[0]['conv_guid']), + intval($channel_id) + ); + if($y) { + $conversation = $y[0]; + $conversation['subject'] = base64url_decode(str_rot47($conversation['subject'])); + } + } + if($drop_conversation) { - // find the parent_id - $p = q("SELECT parent_mid FROM mail WHERE id = %d AND channel_id = %d LIMIT 1", - intval($messageitem_id), + $m = array(); + $m['conv'] = array($conversation); + $m['conv'][0]['deleted'] = 1; + + $z = q("select * from mail where parent_mid = '%s' and channel_id = %d", + dbesc($x[0]['parent_mid']), intval($channel_id) ); - if($p) { - $r = q("DELETE FROM mail WHERE parent_mid = '%s' AND channel_id = %d ", - dbesc($p[0]['parent_mid']), + if($z) { + q("delete from conv where guid = '%s' and uid = %d limit 1", + dbesc($x[0]['conv_guid']), + intval($channel_id) + ); + $m['mail'] = array(); + foreach($z as $zz) { + xchan_mail_query($zz); + $zz['mail_deleted'] = 1; + $m['mail'][] = encode_mail($zz,true); + } + q("DELETE FROM mail WHERE parent_mid = '%s' AND channel_id = %d ", + dbesc($x[0]['parent_mid']), intval($channel_id) ); - if($r) - return true; } + build_sync_packet($channel_id,$m); + return true; } 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) ); - if($r) - return true; + build_sync_packet($channel_id,array('mail' => array(encode_mail($x,true)))); + return true; } return false; + } |