From 9bdb7bef5dadb3cfb8e3ff661f68b5cc7a70c5cd Mon Sep 17 00:00:00 2001
From: redmatrix <redmatrix@redmatrix.me>
Date: Wed, 30 Sep 2015 19:27:53 -0700
Subject: add delivery reports to mail (not backported to redmatrix)

---
 mod/dreport.php | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 mod/mail.php    |  2 ++
 2 files changed, 49 insertions(+)

(limited to 'mod')

diff --git a/mod/dreport.php b/mod/dreport.php
index 31a6274c8..c320bf0e6 100644
--- a/mod/dreport.php
+++ b/mod/dreport.php
@@ -7,14 +7,44 @@ function dreport_content(&$a) {
 		return;
 	}
 
+	$table = 'item';
+
 	$channel = $a->get_channel();
 	
 	$mid = ((argc() > 1) ? argv(1) : '');
 
+	if($mid === 'mail') {
+		$table = 'mail';
+		$mid = ((argc() > 2) ? argv(2) : '');
+	}
+
+
 	if(! $mid) {
 		notice( t('Invalid message') . EOL);
 		return;
 	}
+
+	switch($table) {
+		case 'item':
+			$i = q("select id from item where mid = '%s' and author_xchan = '%s' ",
+				dbesc($mid),
+				dbesc($channel['channel_hash'])
+			);
+			break;
+		case 'mail':
+			$i = q("select id from mail where mid = '%s' and from_xchan = '%s'",
+				dbesc($mid),
+				dbesc($channel['channel_hash'])
+			);
+			break;
+		default:
+			break;
+	}
+
+	if(! $i) {
+		notice( t('Permission denied') . EOL);
+		return;
+	}
 	
 	$r = q("select * from dreport where dreport_xchan = '%s' and dreport_mid = '%s'",
 		dbesc($channel['channel_hash']),
@@ -33,6 +63,11 @@ function dreport_content(&$a) {
 	for($x = 0; $x < count($r); $x++ ) {
 		$r[$x]['name'] = escape_tags(substr($r[$x]['dreport_recip'],strpos($r[$x]['dreport_recip'],' ')));
 
+		// This has two purposes: 1. make the delivery report strings translateable, and
+		// 2. assign an ordering to item delivery results so we can group them and provide
+		// a readable report with more interesting events listed toward the top and lesser
+		// interesting items towards the bottom
+
 		switch($r[$x]['dreport_result']) {
 			case 'channel sync processed':
 				$r[$x]['gravity'] = 0;
@@ -61,6 +96,18 @@ function dreport_content(&$a) {
 				$r[$x]['dreport_result'] = t('permission denied');
 				$r[$x]['gravity'] = 6;
 				break;
+			case 'recipient not found':
+				$r[$x]['dreport_result'] = t('recipient not found');
+				break;
+			case 'mail recalled':
+				$r[$x]['dreport_result'] = t('mail recalled');
+				break;
+			case 'duplicate mail received':
+				$r[$x]['dreport_result'] = t('duplicate mail received');
+				break;
+			case 'mail delivered':
+				$r[$x]['dreport_result'] = t('mail delivered');
+				break;
 			default:
 				$r[$x]['gravity'] = 1;
 				break;
diff --git a/mod/mail.php b/mod/mail.php
index e4a5ebafd..525127a71 100644
--- a/mod/mail.php
+++ b/mod/mail.php
@@ -324,6 +324,7 @@ function mail_content(&$a) {
 		$mails[] = array(
 			'mailbox' => $mailbox,
 			'id' => $message['id'],
+			'mid' => $message['mid'],
 			'from_name' => $message['from']['xchan_name'],
 			'from_url' =>  chanlink_hash($message['from_xchan']),
 			'from_photo' => $message['from']['xchan_photo_s'],
@@ -333,6 +334,7 @@ function mail_content(&$a) {
 			'subject' => $message['title'],
 			'body' => smilies(bbcode($message['body']) . $s),
 			'delete' => t('Delete message'),
+			'dreport' => t('Delivery report'),
 			'recall' => t('Recall message'),
 			'can_recall' => (($channel['channel_hash'] == $message['from_xchan']) ? true : false),
 			'is_recalled' => (intval($message['mail_recalled']) ? t('Message has been recalled.') : ''),
-- 
cgit v1.2.3