X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FMail.php;h=96a54937548cb03dfed6b696d8b7733cae906d7d;hb=6a376c29d85cb3e3b5ccf99bc604da472a7191c7;hp=a0474f7557f106b2fa252f40dc4abdb62d812a5e;hpb=8c878a7ad3a3c6bfa0b8217e854e0e2629804059;p=friendica.git diff --git a/src/Model/Mail.php b/src/Model/Mail.php index a0474f7557..96a5493754 100644 --- a/src/Model/Mail.php +++ b/src/Model/Mail.php @@ -1,23 +1,96 @@ $msg['parent-uri']]); + } + + if (empty($msg['convid'])) { + $mail = DBA::selectFirst('mail', ['convid'], ["`convid` != 0 AND `parent-uri` = ?", $msg['parent-uri']]); + if (DBA::isResult($mail)) { + $msg['convid'] = $mail['convid']; + } + } + + if (empty($msg['guid'])) { + $host = parse_url($msg['from-url'], PHP_URL_HOST); + $msg['guid'] = Item::guidFromUri($msg['uri'], $host); + } + + $msg['created'] = (!empty($msg['created']) ? DateTimeFormat::utc($msg['created']) : DateTimeFormat::utcNow()); + + DBA::lock('mail'); + + if (DBA::exists('mail', ['uri' => $msg['uri'], 'uid' => $msg['uid']])) { + DBA::unlock(); + Logger::info('duplicate message already delivered.'); + return false; + } + + DBA::insert('mail', $msg); + + $msg['id'] = DBA::lastInsertId(); + + DBA::unlock(); + + if (!empty($msg['convid'])) { + DBA::update('conv', ['updated' => DateTimeFormat::utcNow()], ['id' => $msg['convid']]); + } + + // send notifications. + $notif_params = [ + 'type' => NOTIFY_MAIL, + 'notify_flags' => $user['notify-flags'], + 'language' => $user['language'], + 'to_name' => $user['username'], + 'to_email' => $user['email'], + 'uid' => $user['uid'], + 'item' => $msg, + 'parent' => 0, + 'source_name' => $msg['from-name'], + 'source_link' => $msg['from-url'], + 'source_photo' => $msg['from-photo'], + 'verb' => ACTIVITY_POST, + 'otype' => 'mail' + ]; + + notification($notif_params); + + Logger::info('Mail is processed, notification was sent.', ['id' => $msg['id'], 'uri' => $msg['uri']]); + + return $msg['id']; + } + /** * Send private message * @@ -25,28 +98,32 @@ class Mail * @param string $body message body, default empty * @param string $subject message subject, default empty * @param string $replyto reply to + * @return int + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function send($recipient = 0, $body = '', $subject = '', $replyto = '') { - $a = get_app(); + $a = \get_app(); if (!$recipient) { return -1; } if (!strlen($subject)) { - $subject = t('[no subject]'); + $subject = L10n::t('[no subject]'); } - $me = dba::selectFirst('contact', [], ['uid' => local_user(), 'self' => true]); - $contact = dba::selectFirst('contact', [], ['id' => $recipient, 'uid' => local_user()]); + $me = DBA::selectFirst('contact', [], ['uid' => local_user(), 'self' => true]); + $contact = DBA::selectFirst('contact', [], ['id' => $recipient, 'uid' => local_user()]); if (!(count($me) && (count($contact)))) { return -2; } - $guid = get_guid(32); - $uri = 'urn:X-dfrn:' . System::baseUrl() . ':' . local_user() . ':' . $guid; + Photo::setPermissionFromBody($body, local_user(), $me['id'], '<' . $contact['id'] . '>', '', '', ''); + + $guid = System::createUUID(); + $uri = Item::newURI(local_user(), $guid); $convid = 0; $reply = false; @@ -55,16 +132,15 @@ class Mail if (strlen($replyto)) { $reply = true; - $r = q("SELECT `convid` FROM `mail` WHERE `uid` = %d AND (`uri` = '%s' OR `parent-uri` = '%s') LIMIT 1", - intval(local_user()), - dbesc($replyto), - dbesc($replyto) - ); - if (DBM::is_result($r)) { - $convid = $r[0]['convid']; + $condition = ["`uid` = ? AND (`uri` = ? OR `parent-uri` = ?)", + local_user(), $replyto, $replyto]; + $mail = DBA::selectFirst('mail', ['convid'], $condition); + if (DBA::isResult($mail)) { + $convid = $mail['convid']; } } + $convuri = ''; if (!$convid) { // create a new conversation $recip_host = substr($contact['url'], strpos($contact['url'], '://') + 3); @@ -73,21 +149,21 @@ class Mail $recip_handle = (($contact['addr']) ? $contact['addr'] : $contact['nick'] . '@' . $recip_host); $sender_handle = $a->user['nickname'] . '@' . substr(System::baseUrl(), strpos(System::baseUrl(), '://') + 3); - $conv_guid = get_guid(32); + $conv_guid = System::createUUID(); $convuri = $recip_handle . ':' . $conv_guid; $handles = $recip_handle . ';' . $sender_handle; $fields = ['uid' => local_user(), 'guid' => $conv_guid, 'creator' => $sender_handle, - 'created' => datetime_convert(), 'updated' => datetime_convert(), + 'created' => DateTimeFormat::utcNow(), 'updated' => DateTimeFormat::utcNow(), 'subject' => $subject, 'recips' => $handles]; - if (dba::insert('conv', $fields)) { - $convid = dba::lastInsertId(); + if (DBA::insert('conv', $fields)) { + $convid = DBA::lastInsertId(); } } if (!$convid) { - logger('send message: conversation not found.'); + Logger::log('send message: conversation not found.'); return -4; } @@ -96,7 +172,7 @@ class Mail } $post_id = null; - $success = dba::insert( + $success = DBA::insert( 'mail', [ 'uid' => local_user(), @@ -113,12 +189,12 @@ class Mail 'replied' => 0, 'uri' => $uri, 'parent-uri' => $replyto, - 'created' => datetime_convert() + 'created' => DateTimeFormat::utcNow() ] ); if ($success) { - $post_id = dba::lastInsertId(); + $post_id = DBA::lastInsertId(); } /** @@ -142,13 +218,13 @@ class Mail } $image_uri = substr($image, strrpos($image, '/') + 1); $image_uri = substr($image_uri, 0, strpos($image_uri, '-')); - dba::update('photo', ['allow-cid' => '<' . $recipient . '>'], ['resource-id' => $image_uri, 'album' => 'Wall Photos', 'uid' => local_user()]); + Photo::update(['allow-cid' => '<' . $recipient . '>'], ['resource-id' => $image_uri, 'album' => 'Wall Photos', 'uid' => local_user()]); } } } if ($post_id) { - Worker::add(PRIORITY_HIGH, "Notifier", "mail", $post_id); + Worker::add(PRIORITY_HIGH, "Notifier", Delivery::MAIL, $post_id); return intval($post_id); } else { return -3; @@ -156,23 +232,26 @@ class Mail } /** - * @param string $recipient recipient, default empty + * @param array $recipient recipient, default empty * @param string $body message body, default empty * @param string $subject message subject, default empty * @param string $replyto reply to, default empty + * @return int + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException */ - public static function sendWall($recipient = '', $body = '', $subject = '', $replyto = '') + public static function sendWall(array $recipient = [], $body = '', $subject = '', $replyto = '') { if (!$recipient) { return -1; } if (!strlen($subject)) { - $subject = t('[no subject]'); + $subject = L10n::t('[no subject]'); } - $guid = get_guid(32); - $uri = 'urn:X-dfrn:' . System::baseUrl() . ':' . local_user() . ':' . $guid; + $guid = System::createUUID(); + $uri = Item::newURI(local_user(), $guid); $me = Probe::uri($replyto); @@ -180,7 +259,7 @@ class Mail return -2; } - $conv_guid = get_guid(32); + $conv_guid = System::createUUID(); $recip_handle = $recipient['nickname'] . '@' . substr(System::baseUrl(), strpos(System::baseUrl(), '://') + 3); @@ -193,18 +272,18 @@ class Mail $convid = null; $fields = ['uid' => $recipient['uid'], 'guid' => $conv_guid, 'creator' => $sender_handle, - 'created' => datetime_convert(), 'updated' => datetime_convert(), + 'created' => DateTimeFormat::utcNow(), 'updated' => DateTimeFormat::utcNow(), 'subject' => $subject, 'recips' => $handles]; - if (dba::insert('conv', $fields)) { - $convid = dba::lastInsertId(); + if (DBA::insert('conv', $fields)) { + $convid = DBA::lastInsertId(); } - + if (!$convid) { - logger('send message: conversation not found.'); + Logger::log('send message: conversation not found.'); return -4; } - dba::insert( + DBA::insert( 'mail', [ 'uid' => $recipient['uid'], @@ -221,7 +300,7 @@ class Mail 'replied' => 0, 'uri' => $uri, 'parent-uri' => $replyto, - 'created' => datetime_convert(), + 'created' => DateTimeFormat::utcNow(), 'unknown' => 1 ] );