* Email notification options
* @{
*/
-define('NOTIFY_INTRO', 0x0001);
-define('NOTIFY_CONFIRM', 0x0002);
-define('NOTIFY_WALL', 0x0004);
-define('NOTIFY_COMMENT', 0x0008);
-define('NOTIFY_MAIL', 0x0010);
-define('NOTIFY_SUGGEST', 0x0020);
-define('NOTIFY_PROFILE', 0x0040);
-define('NOTIFY_TAGSELF', 0x0080);
-define('NOTIFY_TAGSHARE', 0x0100);
-define('NOTIFY_POKE', 0x0200);
-define('NOTIFY_SHARE', 0x0400);
-
-define('SYSTEM_EMAIL', 0x4000);
-
-define('NOTIFY_SYSTEM', 0x8000);
+define('NOTIFY_INTRO', 1);
+define('NOTIFY_CONFIRM', 2);
+define('NOTIFY_WALL', 4);
+define('NOTIFY_COMMENT', 8);
+define('NOTIFY_MAIL', 16);
+define('NOTIFY_SUGGEST', 32);
+define('NOTIFY_PROFILE', 64);
+define('NOTIFY_TAGSELF', 128);
+define('NOTIFY_TAGSHARE', 256);
+define('NOTIFY_POKE', 512);
+define('NOTIFY_SHARE', 1024);
+
+define('SYSTEM_EMAIL', 16384);
+
+define('NOTIFY_SYSTEM', 32768);
/* @}*/
$o .= $header;
- $r = q("SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb`
- FROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`
- WHERE `mail`.`uid` = %d AND `mail`.`id` = %d LIMIT 1",
- intval(local_user()),
- intval($a->argv[1])
+ $message = DBA::fetchFirst("
+ SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb`
+ FROM `mail`
+ LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`
+ WHERE `mail`.`uid` = ? AND `mail`.`id` = ?
+ LIMIT 1",
+ local_user(),
+ $a->argv[1]
);
- if (DBA::isResult($r)) {
- $contact_id = $r[0]['contact-id'];
- $convid = $r[0]['convid'];
-
- $sql_extra = sprintf(" and `mail`.`parent-uri` = '%s' ", DBA::escape($r[0]['parent-uri']));
- if ($convid)
- $sql_extra = sprintf(" and ( `mail`.`parent-uri` = '%s' OR `mail`.`convid` = '%d' ) ",
- DBA::escape($r[0]['parent-uri']),
- intval($convid)
- );
+ if (DBA::isResult($message)) {
+ $contact_id = $message['contact-id'];
- $messages = q("SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb`
- FROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`
- WHERE `mail`.`uid` = %d $sql_extra ORDER BY `mail`.`created` ASC",
- intval(local_user())
+ $params = [
+ local_user(),
+ $message['parent-uri']
+ ];
+
+ if ($message['convid']) {
+ $sql_extra = "AND (`mail`.`parent-uri` = ? OR `mail`.`convid` = ?)";
+ $params[] = $message['convid'];
+ } else {
+ $sql_extra = "AND `mail`.`parent-uri` = ?";
+ }
+ $messages_stmt = DBA::p("
+ SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb`
+ FROM `mail`
+ LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`
+ WHERE `mail`.`uid` = ?
+ $sql_extra
+ ORDER BY `mail`.`created` ASC",
+ ...$params
);
+
+ $messages = DBA::toArray($messages_stmt);
+
+ DBA::update('mail', ['seen' => 1], ['parent-uri' => $message['parent-uri'], 'uid' => local_user()]);
+
+ if ($message['convid']) {
+ // Clear Diaspora private message notifications
+ DBA::update('notify', ['seen' => 1], ['type' => NOTIFY_MAIL, 'parent' => $message['convid'], 'uid' => local_user()]);
+ }
+ // Clear DFRN private message notifications
+ DBA::update('notify', ['seen' => 1], ['type' => NOTIFY_MAIL, 'parent' => $message['parent-uri'], 'uid' => local_user()]);
} else {
$messages = false;
}
+
if (!DBA::isResult($messages)) {
notice(L10n::t('Message not available.') . EOL);
return $o;
}
- $r = q("UPDATE `mail` SET `seen` = 1 WHERE `parent-uri` = '%s' AND `uid` = %d",
- DBA::escape($r[0]['parent-uri']),
- intval(local_user())
- );
-
$tpl = Renderer::getMarkupTemplate('msg-header.tpl');
$a->page['htmlhead'] .= Renderer::replaceMacros($tpl, [
'$baseurl' => System::baseUrl(true),
$unknown = false;
foreach ($messages as $message) {
- if ($message['unknown'])
+ if ($message['unknown']) {
$unknown = true;
+ }
+
if ($message['from-url'] == $myprofile) {
$from_url = $myprofile;
$sparkle = '';
$participants = L10n::t("%s and You", $rr['from-name']);
}
- $subject_e = (($rr['mailseen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>');
$body_e = $rr['body'];
$to_name_e = $rr['name'];
'$from_addr' => defaults($contact, 'addr', ''),
'$sparkle' => ' sparkle',
'$from_photo' => ProxyUtils::proxifyUrl($from_photo, false, ProxyUtils::SIZE_THUMB),
- '$subject' => $subject_e,
+ '$subject' => $rr['title'],
'$delete' => L10n::t('Delete conversation'),
'$body' => $body_e,
'$to_name' => $to_name_e,
$format = 'json';
}
- $tags = [];
- $comments = [];
- $likes = [];
- $dislikes = [];
- $friends = [];
- $posts = [];
$regs = [];
- $mails = [];
$notifications = [];
$intro_count = 0;
}
}
- if (DBA::isResult($mails)) {
- foreach ($mails as $mail) {
- $notif = [
- 'id' => 0,
- 'href' => System::baseUrl() . '/message/' . $mail['id'],
- 'name' => $mail['from-name'],
- 'url' => $mail['from-url'],
- 'photo' => $mail['from-photo'],
- 'date' => $mail['created'],
- 'seen' => false,
- 'message' => L10n::t('{0} sent you a message'),
- ];
- $notifs[] = $notif;
- }
- }
-
if (DBA::isResult($regs)) {
foreach ($regs as $reg) {
$notif = [
if ($format == 'json') {
$data['groups'] = $groups_unseen;
$data['forums'] = $forums_unseen;
- $data['notify'] = $sysnotify_count + $intro_count + $mail_count + $register_count;
+ $data['notify'] = $sysnotify_count + $intro_count + $register_count;
$data['notifications'] = $notifications;
$data['sysmsgs'] = [
'notice' => $sysmsgs,
$order = "DESC";
$quit = false;
- $a = get_app();
-
do {
$r = q(
"SELECT `notify`.*, `item`.`visible`, `item`.`deleted`
* @param array $notifs Complete list of notification
* @param array $sysmsgs List of system notice messages
* @param array $sysmsgs_info List of system info messages
- * @param int $groups_unseen Number of unseen group items
- * @param int $forums_unseen Number of unseen forum items
+ * @param array $groups_unseen List of unseen group messages
+ * @param array $forums_unseen List of unseen forum messages
*
* @return array XML-transform ready data array
*/
"to_email" => $importer["email"],
"uid" => $importer["importer_uid"],
"item" => $msg,
+ "parent" => $msg["parent-uri"],
"source_name" => $msg["from-name"],
"source_link" => $importer["url"],
"source_photo" => $importer["thumb"],
return false;
}
- q(
- "INSERT INTO `mail` (`uid`, `guid`, `convid`, `from-name`,`from-photo`,`from-url`,`contact-id`,`title`,`body`,`seen`,`reply`,`uri`,`parent-uri`,`created`)
- VALUES (%d, '%s', %d, '%s', '%s', '%s', %d, '%s', '%s', %d, %d, '%s','%s','%s')",
- intval($importer["uid"]),
- DBA::escape($msg_guid),
- intval($conversation["id"]),
- DBA::escape($person["name"]),
- DBA::escape($person["photo"]),
- DBA::escape($person["url"]),
- intval($contact["id"]),
- DBA::escape($subject),
- DBA::escape($body),
- 0,
- 0,
- DBA::escape($message_uri),
- DBA::escape($author.":".$guid),
- DBA::escape($msg_created_at)
- );
+ DBA::insert('mail', [
+ 'uid' => $importer['uid'],
+ 'guid' => $msg_guid,
+ 'convid' => $conversation['id'],
+ 'from-name' => $person['name'],
+ 'from-photo' => $person['photo'],
+ 'from-url' => $person['url'],
+ 'contact-id' => $contact['id'],
+ 'title' => $subject,
+ 'body' => $body,
+ 'seen' => 0,
+ 'reply' => 0,
+ 'uri' => $message_uri,
+ 'parent-uri' => $author . ':' . $guid,
+ 'created' => $msg_created_at
+ ]);
+
+ $message_id = DBA::lastInsertId();
DBA::unlock();
DBA::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $conversation["id"]]);
- notification(
- [
+ notification([
"type" => NOTIFY_MAIL,
"notify_flags" => $importer["notify-flags"],
"language" => $importer["language"],
"to_name" => $importer["username"],
"to_email" => $importer["email"],
- "uid" =>$importer["uid"],
- "item" => ["id" => $conversation["id"], "title" => $subject, "subject" => $subject, "body" => $body],
+ "uid" => $importer["uid"],
+ "item" => ["id" => $message_id, "title" => $subject, "subject" => $subject, "body" => $body],
+ "parent" => $conversation["id"],
"source_name" => $person["name"],
"source_link" => $person["url"],
"source_photo" => $person["photo"],
"verb" => ACTIVITY_POST,
- "otype" => "mail"]
- );
+ "otype" => "mail"
+ ]);
+
return true;
}
return false;
}
- q(
- "INSERT INTO `mail` (`uid`, `guid`, `convid`, `from-name`,`from-photo`,`from-url`,`contact-id`,`title`,`body`,`seen`,`reply`,`uri`,`parent-uri`,`created`)
- VALUES ( %d, '%s', %d, '%s', '%s', '%s', %d, '%s', '%s', %d, %d, '%s','%s','%s')",
- intval($importer["uid"]),
- DBA::escape($guid),
- intval($conversation["id"]),
- DBA::escape($person["name"]),
- DBA::escape($person["photo"]),
- DBA::escape($person["url"]),
- intval($contact["id"]),
- DBA::escape($conversation["subject"]),
- DBA::escape($body),
- 0,
- 1,
- DBA::escape($message_uri),
- DBA::escape($author.":".$conversation["guid"]),
- DBA::escape($created_at)
- );
+ DBA::insert('mail', [
+ 'uid' => $importer['uid'],
+ 'guid' => $guid,
+ 'convid' => $conversation['id'],
+ 'from-name' => $person['name'],
+ 'from-photo' => $person['photo'],
+ 'from-url' => $person['url'],
+ 'contact-id' => $contact['id'],
+ 'title' => $conversation['subject'],
+ 'body' => $body,
+ 'seen' => 0,
+ 'reply' => 1,
+ 'uri' => $message_uri,
+ 'parent-uri' => $author.":".$conversation['guid'],
+ 'created' => $created_at
+ ]);
+
+ $message_id = DBA::lastInsertId();
DBA::unlock();
DBA::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $conversation["id"]]);
+
+ notification([
+ "type" => NOTIFY_MAIL,
+ "notify_flags" => $importer["notify-flags"],
+ "language" => $importer["language"],
+ "to_name" => $importer["username"],
+ "to_email" => $importer["email"],
+ "uid" => $importer["uid"],
+ "item" => ["id" => $message_id, "title" => $conversation["subject"], "subject" => $conversation["subject"], "body" => $body],
+ "parent" => $conversation["id"],
+ "source_name" => $person["name"],
+ "source_link" => $person["url"],
+ "source_photo" => $person["photo"],
+ "verb" => ACTIVITY_POST,
+ "otype" => "mail"
+ ]);
+
return true;
}
<div class="text-muted time ago pull-right" title="{{$date}}">{{$ago}}</div>
<h4 class="media-heading">{{$from_name}}</h4>
- <div class="mail-list-subject"><a href="message/{{$id}}">{{$subject}}</a></div>
+ <div class="mail-list-subject">
+ <a href="message/{{$id}}">
+ {{if !$seen}}
+ <strong>
+ {{/if}}
+ {{$subject}}
+ {{if !$seen}}
+ </strong>
+ {{/if}}
+ </a></div>
<a href="message/dropconv/{{$id}}" onclick="return confirmDelete();" title="{{$delete}}" class="pull-right" onmouseover="imgbright(this);" onmouseout="imgdull(this);">
<i class="faded-icon fa fa-trash"></i>
</a>