]> git.mxchange.org Git - friendica.git/commitdiff
Check for duplicated postings from connectors
authorMichael Vogel <ike@pirati.ca>
Mon, 17 Oct 2016 19:17:11 +0000 (19:17 +0000)
committerMichael Vogel <ike@pirati.ca>
Mon, 17 Oct 2016 19:17:11 +0000 (19:17 +0000)
mod/item.php

index e9056d08ccd9b6b3b24a812f1f38b907e4c31c02..a28cc90d1bdf546ee827c6568936cf6f3476e29f 100644 (file)
@@ -175,6 +175,19 @@ function item_post(&$a) {
        $app         = ((x($_REQUEST,'source'))      ? strip_tags($_REQUEST['source'])  : '');
        $extid       = ((x($_REQUEST,'extid'))       ? strip_tags($_REQUEST['extid'])  : '');
 
+       // Check for multiple posts with the same message id (when the post was created via API)
+       if (($message_id != "") AND ($profile_uid != 0)) {
+               $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+                       dbesc($message_id),
+                       intval($profile_uid)
+               );
+
+                if(count($r)) {
+                       logger("Message with URI ".$message_id." already exists for user ".$profile_uid, LOGGER_DEBUG);
+                       return;
+               }
+       }
+
        $allow_moderated = false;
 
        // here is where we are going to check for permission to post a moderated comment.
@@ -992,16 +1005,35 @@ function item_post(&$a) {
                // Insert an item entry for UID=0 for global entries
                // We have to remove or change some data before that,
                // so that the post appear like a regular received post.
-               unset($datarray['self']);
-               unset($datarray['wall']);
-               unset($datarray['origin']);
-
-               if (in_array($datarray['type'], array("net-comment", "wall-comment")))
-                       $datarray['type'] = 'remote-comment';
-               elseif ($datarray['type'] == 'wall')
-                       $datarray['type'] = 'remote';
-
-               add_shadow_entry($datarray);
+               // Additionally there is some data that isn't a database field.
+               $arr = $datarray;
+
+               $arr['app'] = $arr['source'];
+               unset($arr['source']);
+
+               unset($arr['self']);
+               unset($arr['wall']);
+               unset($arr['origin']);
+               unset($arr['api_source']);
+               unset($arr['message_id']);
+               unset($arr['profile_uid']);
+               unset($arr['post_id']);
+               unset($arr['dropitems']);
+               unset($arr['commenter']);
+               unset($arr['return']);
+               unset($arr['preview']);
+               unset($arr['post_id_random']);
+               unset($arr['emailcc']);
+               unset($arr['pubmail_enable']);
+               unset($arr['category']);
+               unset($arr['jsreload']);
+
+               if (in_array($arr['type'], array("net-comment", "wall-comment")))
+                       $arr['type'] = 'remote-comment';
+               elseif ($arr['type'] == 'wall')
+                       $arr['type'] = 'remote';
+
+               add_shadow_entry($arr);
        }
 
        // This is a real juggling act on shared hosting services which kill your processes