]> git.mxchange.org Git - friendica.git/blobdiff - include/enotify.php
Improvements:
[friendica.git] / include / enotify.php
index 50e23930e945ffca8eeff4f804d37c37ee6dbac4..f509367efbd8edd21cf2cf80351980c4dfdac089 100644 (file)
@@ -4,26 +4,23 @@
  */
 
 use Friendica\Content\Text\BBCode;
-use Friendica\Core\Config;
 use Friendica\Core\Hook;
-use Friendica\Core\L10n;
 use Friendica\Core\Logger;
 use Friendica\Core\Renderer;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
-use Friendica\Model\Contact;
 use Friendica\DI;
 use Friendica\Model\Item;
 use Friendica\Model\ItemContent;
+use Friendica\Model\Notification;
 use Friendica\Model\User;
 use Friendica\Model\UserItem;
 use Friendica\Protocol\Activity;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Emailer;
-use Friendica\Util\Strings;
 
 /**
- * @brief Creates a notification entry and possibly sends a mail
+ * Creates a notification entry and possibly sends a mail
  *
  * @param array $params Array with the elements:
  *                      uid, item, parent, type, otype, verb, event,
@@ -57,15 +54,15 @@ function notification($params)
        $params['to_email']     = ($params['to_email']     ?? '') ?: $user['email'];
 
        // from here on everything is in the recipients language
-       $l10n = L10n::withLang($params['language']);
+       $l10n = DI::l10n()->withLang($params['language']);
 
        $banner = $l10n->t('Friendica Notification');
        $product = FRIENDICA_PLATFORM;
        $siteurl = DI::baseUrl()->get(true);
        $thanks = $l10n->t('Thank You,');
-       $sitename = Config::get('config', 'sitename');
-       if (Config::get('config', 'admin_name')) {
-               $site_admin = $l10n->t('%1$s, %2$s Administrator', Config::get('config', 'admin_name'), $sitename);
+       $sitename = DI::config()->get('config', 'sitename');
+       if (DI::config()->get('config', 'admin_name')) {
+               $site_admin = $l10n->t('%1$s, %2$s Administrator', DI::config()->get('config', 'admin_name'), $sitename);
        } else {
                $site_admin = $l10n->t('%s Administrator', $sitename);
        }
@@ -164,7 +161,7 @@ function notification($params)
 
                // if it's a post figure out who's post it is.
                $item = null;
-               if ($params['otype'] === 'item' && $parent_id) {
+               if ($params['otype'] === Notification::OTYPE_ITEM && $parent_id) {
                        $item = Item::selectFirstForUser($params['uid'], Item::ITEM_FIELDLIST, ['id' => $parent_id, 'deleted' => false]);
                }
 
@@ -184,10 +181,10 @@ function notification($params)
                // First go for the general message
 
                // "George Bull's post"
-               if ($params['activity']['explicit_tagged']) {
-                       $message = '%1$s tagged you on %2$s\'s %3$s %4$s';
-               } elseif ($params['activity']['origin_comment']) {
+               if ($params['activity']['origin_comment']) {
                        $message = '%1$s replied to you on %2$s\'s %3$s %4$s';
+               } elseif ($params['activity']['explicit_tagged']) {
+                       $message = '%1$s tagged you on %2$s\'s %3$s %4$s';
                } else {
                        $message = '%1$s commented on %2$s\'s %3$s %4$s';
                }
@@ -198,10 +195,10 @@ function notification($params)
 
                // "your post"
                if ($params['activity']['origin_thread']) {
-                       if ($params['activity']['explicit_tagged']) {
-                               $message = '%1$s tagged you on your %2$s %3$s';
-                       } elseif ($params['activity']['origin_comment']) {
+                       if ($params['activity']['origin_comment']) {
                                $message = '%1$s replied to you on your %2$s %3$s';
+                       } elseif ($params['activity']['explicit_tagged']) {
+                               $message = '%1$s tagged you on your %2$s %3$s';
                        } else {
                                $message = '%1$s commented on your %2$s %3$s';
                        }
@@ -209,10 +206,10 @@ function notification($params)
                        $dest_str = $l10n->t($message, $params['source_name'], $item_post_type, $title);
                // "their post"
                } elseif ($item['author-link'] == $params['source_link']) {
-                       if ($params['activity']['explicit_tagged']) {
-                               $message = '%1$s tagged you on their %2$s %3$s';
-                       } elseif ($params['activity']['origin_comment']) {
+                       if ($params['activity']['origin_comment']) {
                                $message = '%1$s replied to you on their %2$s %3$s';
+                       } elseif ($params['activity']['explicit_tagged']) {
+                               $message = '%1$s tagged you on their %2$s %3$s';
                        } else {
                                $message = '%1$s commented on their %2$s %3$s';
                        }
@@ -486,47 +483,25 @@ function notification($params)
        $notify_id = 0;
 
        if ($show_in_notification_page) {
-               Logger::log("adding notification entry", Logger::DEBUG);
-
-               /// @TODO One statement is enough
-               $datarray = [];
-               $datarray['name']  = $params['source_name'];
-               $datarray['name_cache'] = strip_tags(BBCode::convert($params['source_name']));
-               $datarray['url']   = $params['source_link'];
-               $datarray['photo'] = $params['source_photo'];
-               $datarray['date']  = DateTimeFormat::utcNow();
-               $datarray['uid']   = $params['uid'];
-               $datarray['link']  = $itemlink;
-               $datarray['iid']   = $item_id;
-               $datarray['parent'] = $parent_id;
-               $datarray['type']  = $params['type'];
-               $datarray['verb']  = $params['verb'];
-               $datarray['otype'] = $params['otype'];
-               $datarray['abort'] = false;
-
-               Hook::callAll('enotify_store', $datarray);
-
-               if ($datarray['abort']) {
-                       return false;
-               }
-
-               // create notification entry in DB
-               $fields = ['name' => $datarray['name'], 'url' => $datarray['url'],
-                       'photo' => $datarray['photo'], 'date' => $datarray['date'], 'uid' => $datarray['uid'],
-                       'link' => $datarray['link'], 'iid' => $datarray['iid'], 'parent' => $datarray['parent'],
-                       'type' => $datarray['type'], 'verb' => $datarray['verb'], 'otype' => $datarray['otype'],
-                       'name_cache' => $datarray["name_cache"]];
-               DBA::insert('notify', $fields);
+               $notification = DI::notification()->insert([
+                       'name'   => $params['source_name'],
+                       'url'    => $params['source_link'],
+                       'photo'  => $params['source_photo'],
+                       'uid'    => $params['uid'],
+                       'iid'    => $item_id,
+                       'parent' => $parent_id,
+                       'type'   => $params['type'],
+                       'verb'   => $params['verb'],
+                       'otype'  => $params['otype'],
+               ]);
 
-               $notify_id = DBA::lastInsertId();
+               $notification->link = DI::baseUrl() . '/notification/view/' . $notification->id;
+               $notification->msg  = Renderer::replaceMacros($epreamble, ['$itemlink' => $notification->link]);
 
-               $itemlink = DI::baseUrl().'/notify/view/'.$notify_id;
-               $msg = Renderer::replaceMacros($epreamble, ['$itemlink' => $itemlink]);
-               $msg_cache = format_notification_message($datarray['name_cache'], strip_tags(BBCode::convert($msg)));
+               DI::notification()->update($notification);
 
-               $fields = ['msg' => $msg, 'msg_cache' => $msg_cache];
-               $condition = ['id' => $notify_id, 'uid' => $params['uid']];
-               DBA::update('notify', $fields, $condition);
+               $itemlink  = $notification->link;
+               $notify_id = $notification->id;
        }
 
        // send email notification if notification preferences permit
@@ -590,7 +565,7 @@ function notification($params)
 
                // check whether sending post content in email notifications is allowed
                // always true for SYSTEM_EMAIL
-               $content_allowed = ((!Config::get('system', 'enotify_no_content')) || ($params['type'] == SYSTEM_EMAIL));
+               $content_allowed = ((!DI::config()->get('system', 'enotify_no_content')) || ($params['type'] == SYSTEM_EMAIL));
 
                // load the template for private message notifications
                $tpl = Renderer::getMarkupTemplate('email_notify_html.tpl');
@@ -652,7 +627,7 @@ function notification($params)
 }
 
 /**
- * @brief Checks for users who should be notified
+ * Checks for users who should be notified
  *
  * @param int $itemid ID of the item for which the check should be done
  * @throws \Friendica\Network\HTTPException\InternalServerErrorException
@@ -667,7 +642,7 @@ function check_user_notification($itemid) {
 }
 
 /**
- * @brief Checks for item related notifications and sends them
+ * Checks for item related notifications and sends them
  *
  * @param int    $itemid            ID of the item for which the check should be done
  * @param int    $uid               User ID
@@ -704,6 +679,11 @@ function check_item_notification($itemid, $uid, $notification_type) {
        $params['activity']['thread_comment'] = ($notification_type & UserItem::NOTIF_COMMENT_PARTICIPATION);
        $params['activity']['thread_activity'] = ($notification_type & UserItem::NOTIF_ACTIVITY_PARTICIPATION);
 
+       // Tagging a user in a direct post (first comment level) means a direct comment
+       if ($params['activity']['explicit_tagged'] && ($notification_type & UserItem::NOTIF_DIRECT_THREAD_COMMENT)) {
+               $params['activity']['origin_comment'] = true;
+       }
+
        if ($notification_type & UserItem::NOTIF_SHARED) {
                $params['type'] = NOTIFY_SHARE;
                $params['verb'] = Activity::POST;
@@ -731,27 +711,3 @@ function check_item_notification($itemid, $uid, $notification_type) {
 
        notification($params);
 }
-
-/**
- * @brief Formats a notification message with the notification author
- *
- * Replace the name with {0} but ensure to make that only once. The {0} is used
- * later and prints the name in bold.
- *
- * @param string $name
- * @param string $message
- * @return string Formatted message
- */
-function format_notification_message($name, $message) {
-       if ($name != '') {
-               $pos = strpos($message, $name);
-       } else {
-               $pos = false;
-       }
-
-       if ($pos !== false) {
-               $message = substr_replace($message, '{0}', $pos, strlen($name));
-       }
-
-       return $message;
-}