]> git.mxchange.org Git - friendica.git/commitdiff
There is now a central function for item notifications
authorMichael Vogel <icarus@dabo.de>
Thu, 28 Jan 2016 21:58:05 +0000 (22:58 +0100)
committerMichael Vogel <icarus@dabo.de>
Thu, 28 Jan 2016 21:58:05 +0000 (22:58 +0100)
include/diaspora.php
include/enotify.php
include/items.php
include/ostatus.php

index b72239c4ceab1255dc7f297f831231747f6884c7..f1e6f7ff027e179cef664149a119b07f933c15aa 100644 (file)
@@ -14,6 +14,7 @@ require_once('include/queue_fn.php');
 require_once('include/lock.php');
 require_once('include/threads.php');
 require_once('mod/share.php');
+require_once('include/enotify.php');
 
 function diaspora_dispatch_public($msg) {
 
@@ -1598,47 +1599,6 @@ function diaspora_comment($importer,$xml,$msg) {
                proc_run('php','include/notifier.php','comment-import',$message_id);
        }
 
-       $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0 ",
-               dbesc($parent_item['uri']),
-               intval($importer['uid'])
-       );
-
-       if(count($myconv)) {
-               $importer_url = $a->get_baseurl() . '/profile/' . $importer['nickname'];
-
-               foreach($myconv as $conv) {
-
-                       // now if we find a match, it means we're in this conversation
-
-                       if(! link_compare($conv['author-link'],$importer_url))
-                               continue;
-
-                       require_once('include/enotify.php');
-
-                       $conv_parent = $conv['parent'];
-
-                       notification(array(
-                               'type'         => NOTIFY_COMMENT,
-                               'notify_flags' => $importer['notify-flags'],
-                               'language'     => $importer['language'],
-                               'to_name'      => $importer['username'],
-                               'to_email'     => $importer['email'],
-                               'uid'          => $importer['uid'],
-                               'item'         => $datarray,
-                               'link'             => $a->get_baseurl().'/display/'.urlencode($datarray['guid']),
-                               'source_name'  => $datarray['author-name'],
-                               'source_link'  => $datarray['author-link'],
-                               'source_photo' => $datarray['author-avatar'],
-                               'verb'         => ACTIVITY_POST,
-                               'otype'        => 'item',
-                               'parent'       => $conv_parent,
-                               'parent_uri'   => $parent_uri
-                       ));
-
-                       // only send one notification
-                       break;
-               }
-       }
        return;
 }
 
@@ -1793,7 +1753,6 @@ function diaspora_conversation($importer,$xml,$msg) {
                        intval($conversation['id'])
                );
 
-               require_once('include/enotify.php');
                notification(array(
                        'type' => NOTIFY_MAIL,
                        'notify_flags' => $importer['notify-flags'],
index e02c61383136f5350b01af64928883c5715e924c..80fd4d3363c968c84328b3b6681f29647f0cd529 100644 (file)
@@ -633,4 +633,98 @@ function notification($params) {
 
 }
 
+/**
+ * @brief 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
+ * @param str $profile (Optional) Can be used for connector post. Otherwise empty.
+ */
+function check_item_notification($itemid, $uid, $profile = "", $defaulttype = "") {
+
+       $user = q("SELECT `notify-flags`, `language`, `username`, `email` FROM `user` WHERE `uid` = %d", intval($uid));
+       if (!$user)
+               return false;
+
+       $owner = q("SELECT `id`, `url` FROM `contact` WHERE `self` AND `uid` = %d LIMIT 1", intval($uid));
+       if (!$owner)
+               return false;
+       $local_profile = $owner[0]["url"];
+
+       if ($profile == "")
+               $profile = $local_profile;
+
+       // Only act if it is a "real" post
+       // We need the additional check for the "local_profile" because of mixed situations on connector networks
+       $item = q("SELECT `id`, `mention`, `tag`,`parent`, `title`, `body`, `author-name`, `author-link`, `author-avatar`, `guid`,
+                       `parent-uri`, `uri`, `contact-id`
+                       FROM `item` WHERE `id` = %d AND `verb` IN ('%s', '') AND `type` != 'activity' AND
+                               `author-link` != '%s' AND `author-link` != '%s' LIMIT 1",
+               intval($itemid), dbesc(ACTIVITY_POST), dbesc($profile), dbesc($local_profile));
+       if (!$item)
+               return false;
+
+       // Generate the notification array
+       $params = array();
+       $params["uid"] = $uid;
+       $params["notify_flags"] = $user[0]["notify-flags"];
+       $params["language"] = $user[0]["language"];
+       $params["to_name"] = $user[0]["username"];
+       $params["to_email"] = $user[0]["email"];
+       $params["item"] = $item[0];
+       $params["parent"] = $item[0]["parent"];
+       $params["link"] = App::get_baseurl().'/display/'.urlencode($item[0]["guid"]);
+       $params["otype"] = 'item';
+       $params["source_name"] = $item[0]["author-name"];
+       $params["source_link"] = $item[0]["author-link"];
+       $params["source_photo"] = $item[0]["author-avatar"];
+
+       if ($item[0]["parent-uri"] === $item[0]["uri"]) {
+                // Send a notification for every new post?
+                $r = q("SELECT `notify_new_posts` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `notify_new_posts` LIMIT 1",
+                        intval($item[0]['contact-id']),
+                        intval($uid)
+                );
+                $send_notification = count($r);
+
+                if (!$send_notification) {
+                        $tags = q("SELECT `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` = %d AND `uid` = %d",
+                                intval(TERM_OBJ_POST), intval($itemid), intval(TERM_MENTION), intval($uid));
+
+                        if (count($tags)) {
+                                foreach ($tags AS $tag) {
+                                        $r = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND `notify_new_posts`",
+                                                normalise_link($tag["url"]), intval($uid));
+                                        if (count($r))
+                                                $send_notification = true;
+                                }
+                        }
+                }
+
+               if ($send_notification) {
+                       $params["type"] = NOTIFY_SHARE;
+                       $params["verb"] = ACTIVITY_TAG;
+               }
+       }
+
+       // Is the user mentioned in this post?
+       if ($item[0]["mention"] OR strpos($item[0]["tag"], "=".$profile."]") OR ($defaulttype == NOTIFY_TAGSELF)) {
+               $params["type"] = NOTIFY_TAGSELF;
+               $params["verb"] = ACTIVITY_TAG;
+       }
+
+       // Is it a post that the user had started or where he interacted?
+       $parent = q("SELECT `thread`.`iid` FROM `thread` INNER JOIN `item` ON `item`.`parent` = `thread`.`iid`
+                       WHERE `thread`.`iid` = %d AND `thread`.`uid` = %d AND NOT `thread`.`ignored` AND
+                               (`thread`.`mention` OR `item`.`author-link` = '%s')
+                       LIMIT 1",
+                       intval($item[0]["parent"]), intval($uid), dbesc($profile));
+       if ($parent AND !isset($params["type"])) {
+               $params["type"] = NOTIFY_COMMENT;
+               $params["verb"] = ACTIVITY_POST;
+       }
+
+       if (isset($params["type"]))
+               notification($params);
+}
 ?>
index cf044d883738716bcc917f84e25f211ab1076c3c..5a3e021f94c8acf0292c264bcae9fc236bdc830f 100644 (file)
@@ -16,6 +16,7 @@ require_once('include/ostatus.php');
 require_once('include/feed.php');
 require_once('include/Contact.php');
 require_once('mod/share.php');
+require_once('include/enotify.php');
 
 require_once('library/defuse/php-encryption-1.2.1/Crypto.php');
 
@@ -1313,67 +1314,15 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
        create_files_from_item($current_post);
 
        // Only check for notifications on start posts
-       if ($arr['parent-uri'] === $arr['uri']) {
+       if ($arr['parent-uri'] === $arr['uri'])
                add_thread($current_post);
-               logger('item_store: Check notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
-
-               // Send a notification for every new post?
-               $r = q("SELECT `notify_new_posts` FROM `contact` WHERE `id` = %d AND `uid` = %d AND `notify_new_posts` LIMIT 1",
-                       intval($arr['contact-id']),
-                       intval($arr['uid'])
-               );
-               $send_notification = count($r);
-
-               if (!$send_notification) {
-                       $tags = q("SELECT `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` = %d AND `uid` = %d",
-                               intval(TERM_OBJ_POST), intval($current_post), intval(TERM_MENTION), intval($arr['uid']));
-
-                       if (count($tags)) {
-                               foreach ($tags AS $tag) {
-                                       $r = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d AND `notify_new_posts`",
-                                               normalise_link($tag["url"]), intval($arr['uid']));
-                                       if (count($r))
-                                               $send_notification = true;
-                               }
-                       }
-               }
-
-               if ($send_notification) {
-                       logger('item_store: Send notification for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
-                       $u = q("SELECT * FROM user WHERE uid = %d LIMIT 1",
-                               intval($arr['uid']));
-
-                       $item = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d",
-                               intval($current_post),
-                               intval($arr['uid'])
-                       );
-
-                       $a = get_app();
-
-                       require_once('include/enotify.php');
-                       notification(array(
-                               'type'         => NOTIFY_SHARE,
-                               'notify_flags' => $u[0]['notify-flags'],
-                               'language'     => $u[0]['language'],
-                               'to_name'      => $u[0]['username'],
-                               'to_email'     => $u[0]['email'],
-                               'uid'          => $u[0]['uid'],
-                               'item'         => $item[0],
-                               'link'         => $a->get_baseurl().'/display/'.urlencode($arr['guid']),
-                               'source_name'  => $item[0]['author-name'],
-                               'source_link'  => $item[0]['author-link'],
-                               'source_photo' => $item[0]['author-avatar'],
-                               'verb'         => ACTIVITY_TAG,
-                               'otype'        => 'item',
-                               'parent'       => $arr['parent']
-                       ));
-                       logger('item_store: Notification sent for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG);
-               }
-       } else {
+       else {
                update_thread($parent_id);
                add_shadow_entry($arr);
        }
 
+       check_item_notification($current_post, $uid);
+
        if ($notify)
                proc_run('php', "include/notifier.php", $notify_type, $current_post);
 
@@ -1569,37 +1518,6 @@ function tag_deliver($uid,$item_id) {
                return;
        }
 
-
-       // send a notification
-
-       // use a local photo if we have one
-
-       $r = q("select * from contact where uid = %d and nurl = '%s' limit 1",
-               intval($u[0]['uid']),
-               dbesc(normalise_link($item['author-link']))
-       );
-       $photo = (($r && count($r)) ? $r[0]['thumb'] : $item['author-avatar']);
-
-
-       require_once('include/enotify.php');
-       notification(array(
-               'type'         => NOTIFY_TAGSELF,
-               'notify_flags' => $u[0]['notify-flags'],
-               'language'     => $u[0]['language'],
-               'to_name'      => $u[0]['username'],
-               'to_email'     => $u[0]['email'],
-               'uid'          => $u[0]['uid'],
-               'item'         => $item,
-               'link'         => $a->get_baseurl() . '/display/'.urlencode(get_item_guid($item['id'])),
-               'source_name'  => $item['author-name'],
-               'source_link'  => $item['author-link'],
-               'source_photo' => $photo,
-               'verb'         => ACTIVITY_TAG,
-               'otype'        => 'item',
-               'parent'       => $item['parent']
-       ));
-
-
        $arr = array('item' => $item, 'user' => $u[0], 'contact' => $r[0]);
 
        call_hooks('tagged', $arr);
@@ -3245,33 +3163,7 @@ function local_delivery($importer,$data) {
                                        }
 
                                        if($posted_id && $parent) {
-
                                                proc_run('php',"include/notifier.php","comment-import","$posted_id");
-
-                                               if((! $is_like) && (! $importer['self'])) {
-
-                                                       require_once('include/enotify.php');
-
-                                                       notification(array(
-                                                               'type'         => NOTIFY_COMMENT,
-                                                               'notify_flags' => $importer['notify-flags'],
-                                                               'language'     => $importer['language'],
-                                                               'to_name'      => $importer['username'],
-                                                               'to_email'     => $importer['email'],
-                                                               'uid'          => $importer['importer_uid'],
-                                                               'item'         => $datarray,
-                                                               'link'             => $a->get_baseurl().'/display/'.urlencode(get_item_guid($posted_id)),
-                                                               'source_name'  => stripslashes($datarray['author-name']),
-                                                               'source_link'  => $datarray['author-link'],
-                                                               'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
-                                                                       ? $importer['thumb'] : $datarray['author-avatar']),
-                                                               'verb'         => ACTIVITY_POST,
-                                                               'otype'        => 'item',
-                                                               'parent'       => $parent,
-                                                               'parent_uri'   => $parent_uri,
-                                                       ));
-
-                                               }
                                        }
 
                                        return 0;
@@ -3393,59 +3285,6 @@ function local_delivery($importer,$data) {
 
                                $posted_id = item_store($datarray);
 
-                               // find out if our user is involved in this conversation and wants to be notified.
-
-                               if(!x($datarray['type']) || $datarray['type'] != 'activity') {
-
-                                       $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0",
-                                               dbesc($top_uri),
-                                               intval($importer['importer_uid'])
-                                       );
-
-                                       if(count($myconv)) {
-                                               $importer_url = $a->get_baseurl() . '/profile/' . $importer['nickname'];
-
-                                               // first make sure this isn't our own post coming back to us from a wall-to-wall event
-                                               if(! link_compare($datarray['author-link'],$importer_url)) {
-
-
-                                                       foreach($myconv as $conv) {
-
-                                                               // now if we find a match, it means we're in this conversation
-
-                                                               if(! link_compare($conv['author-link'],$importer_url))
-                                                                       continue;
-
-                                                               require_once('include/enotify.php');
-
-                                                               $conv_parent = $conv['parent'];
-
-                                                               notification(array(
-                                                                       'type'         => NOTIFY_COMMENT,
-                                                                       'notify_flags' => $importer['notify-flags'],
-                                                                       'language'     => $importer['language'],
-                                                                       'to_name'      => $importer['username'],
-                                                                       'to_email'     => $importer['email'],
-                                                                       'uid'          => $importer['importer_uid'],
-                                                                       'item'         => $datarray,
-                                                                       'link'             => $a->get_baseurl().'/display/'.urlencode(get_item_guid($posted_id)),
-                                                                       'source_name'  => stripslashes($datarray['author-name']),
-                                                                       'source_link'  => $datarray['author-link'],
-                                                                       'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
-                                                                               ? $importer['thumb'] : $datarray['author-avatar']),
-                                                                       'verb'         => ACTIVITY_POST,
-                                                                       'otype'        => 'item',
-                                                                       'parent'       => $conv_parent,
-                                                                       'parent_uri'   => $parent_uri
-
-                                                               ));
-
-                                                               // only send one notification
-                                                               break;
-                                                       }
-                                               }
-                                       }
-                               }
                                continue;
                        }
                }
index 4ccd13130d1a8bc01f9780190047899b7dd3e022..f2e33b13272ac0fd5bc6c638227af76195ab926b 100644 (file)
@@ -561,29 +561,6 @@ function ostatus_import($xml,$importer,&$contact, &$hub) {
                }
 
                logger("Item was stored with id ".$item_id, LOGGER_DEBUG);
-               $item["id"] = $item_id;
-
-               if ($mention AND in_array($item["verb"], array(ACTIVITY_POST, ACTIVITY_SHARE))) {
-                       $u = q("SELECT `notify-flags`, `language`, `username`, `email` FROM user WHERE uid = %d LIMIT 1", intval($item['uid']));
-                       $r = q("SELECT `parent` FROM `item` WHERE `id` = %d", intval($item_id));
-
-                       notification(array(
-                               'type'         => NOTIFY_TAGSELF,
-                               'notify_flags' => $u[0]["notify-flags"],
-                               'language'     => $u[0]["language"],
-                               'to_name'      => $u[0]["username"],
-                               'to_email'     => $u[0]["email"],
-                               'uid'          => $item["uid"],
-                               'item'         => $item,
-                               'link'         => $a->get_baseurl().'/display/'.urlencode(get_item_guid($item_id)),
-                               'source_name'  => $item["author-name"],
-                               'source_link'  => $item["author-link"],
-                               'source_photo' => $item["author-avatar"],
-                               'verb'         => ACTIVITY_TAG,
-                               'otype'        => 'item',
-                               'parent'       => $r[0]["parent"]
-                       ));
-               }
        }
 }
 
@@ -1028,28 +1005,6 @@ function ostatus_completion($conversation_url, $uid, $item = array()) {
                // Add the conversation entry (but don't fetch the whole conversation)
                ostatus_store_conversation($newitem, $conversation_url);
 
-               if ($mention) {
-                       $u = q("SELECT `notify-flags`, `language`, `username`, `email` FROM user WHERE uid = %d LIMIT 1", intval($uid));
-                       $r = q("SELECT `parent` FROM `item` WHERE `id` = %d", intval($newitem));
-
-                       notification(array(
-                               'type'         => NOTIFY_TAGSELF,
-                               'notify_flags' => $u[0]["notify-flags"],
-                               'language'     => $u[0]["language"],
-                               'to_name'      => $u[0]["username"],
-                               'to_email'     => $u[0]["email"],
-                               'uid'          => $uid,
-                               'item'         => $arr,
-                               'link'         => $a->get_baseurl().'/display/'.urlencode(get_item_guid($newitem)),
-                               'source_name'  => $arr["author-name"],
-                               'source_link'  => $arr["author-link"],
-                               'source_photo' => $arr["author-avatar"],
-                               'verb'         => ACTIVITY_TAG,
-                               'otype'        => 'item',
-                               'parent'       => $r[0]["parent"]
-                       ));
-               }
-
                // If the newly created item is the top item then change the parent settings of the thread
                // This shouldn't happen anymore. This is supposed to be absolote.
                if ($arr["uri"] == $first_id) {