]> git.mxchange.org Git - friendica.git/blobdiff - include/items.php
Merge remote branch 'upstream/master'
[friendica.git] / include / items.php
index 8279b6bba7540b6e88e2c29bcfc8bdc654535641..cbb4b5abcfa5a508048a967c3a514499ca074a9c 100755 (executable)
@@ -378,10 +378,12 @@ function title_is_body($title, $body) {
 
        $title = strip_tags($title);
        $title = trim($title);
+       $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8');
        $title = str_replace(array("\n", "\r", "\t", " "), array("","","",""), $title);
 
        $body = strip_tags($body);
        $body = trim($body);
+       $body = html_entity_decode($body, ENT_QUOTES, 'UTF-8');
        $body = str_replace(array("\n", "\r", "\t", " "), array("","","",""), $body);
 
        if (strlen($title) < strlen($body))
@@ -792,6 +794,8 @@ function get_atom_elements($feed,$item) {
        // There is some better way to parse this array - but it didn't worked for me.
        $child = $item->feed->data["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["feed"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["entry"][0]["child"]["http://activitystrea.ms/spec/1.0/"][object][0]["child"];
        if (is_array($child)) {
+               logger('get_atom_elements: Looking for status.net repeated message');
+
                $message = $child["http://activitystrea.ms/spec/1.0/"]["object"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10]["content"][0]["data"];
                $author = $child[SIMPLEPIE_NAMESPACE_ATOM_10]["author"][0]["child"][SIMPLEPIE_NAMESPACE_ATOM_10];
                $uri = $author["uri"][0]["data"];
@@ -800,6 +804,8 @@ function get_atom_elements($feed,$item) {
                $avatar = $avatar["href"];
 
                if (($name != "") and ($uri != "") and ($avatar != "") and ($message != "")) {
+                       logger('get_atom_elements: fixing sender of repeated message');
+
                        $res["owner-name"] = $res["author-name"];
                        $res["owner-link"] = $res["author-link"];
                        $res["owner-avatar"] = $res["author-avatar"];
@@ -2136,7 +2142,7 @@ function local_delivery($importer,$data) {
                }
        }
 
-       if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $importer['avatar-date'])) {
+       if(($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $importer['avatar-date'])) {
                logger('local_delivery: Updating photo for ' . $importer['name']);
                require_once("Photo.php");
                $photo_failure = false;
@@ -2194,7 +2200,7 @@ function local_delivery($importer,$data) {
                }
        }
 
-       if((is_array($contact)) && ($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) {
+       if(($name_updated) && (strlen($new_name)) && ($name_updated > $importer['name-date'])) {
                $r = q("select * from contact where uid = %d and id = %d limit 1",
                        intval($importer['importer_uid']),
                        intval($importer['id'])
@@ -2459,6 +2465,7 @@ function local_delivery($importer,$data) {
 
                                        $is_a_remote_delete = false;
 
+                                       // POSSIBLE CLEANUP --> Why select so many fields when only forum_mode and wall are used?
                                        $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`,`item`.`wall`, 
                                                `contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item` 
                                                LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` 
@@ -2472,7 +2479,7 @@ function local_delivery($importer,$data) {
                                                intval($importer['importer_uid'])
                                        );
                                        if($r && count($r))
-                                               $is_a_remote_delete = true;                     
+                                               $is_a_remote_delete = true;
 
                                        // Does this have the characteristics of a community or private group comment?
                                        // If it's a reply to a wall post on a community/prvgroup page it's a 
@@ -2777,12 +2784,14 @@ function local_delivery($importer,$data) {
                                $parent = 0;
 
                                if($posted_id) {
-                                       $r = q("SELECT `parent` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+                                       $r = q("SELECT `parent`, `parent-uri` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
                                                intval($posted_id),
                                                intval($importer['importer_uid'])
                                        );
-                                       if(count($r))
+                                       if(count($r)) {
                                                $parent = $r[0]['parent'];
+                                               $parent_uri = $r[0]['parent-uri'];
+                                       }
                        
                                        if(! $is_like) {
                                                $r1 = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `uid` = %d AND `parent` = %d",
@@ -2799,7 +2808,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'])) {
@@ -2822,7 +2831,7 @@ function local_delivery($importer,$data) {
                                                                'verb'         => ACTIVITY_POST,
                                                                'otype'        => 'item',
                                                                'parent'       => $parent,
-
+                                                               'parent_uri'   => $parent_uri,
                                                        ));
 
                                                }
@@ -2971,6 +2980,7 @@ function local_delivery($importer,$data) {
                                                                        'verb'         => ACTIVITY_POST,
                                                                        'otype'        => 'item',
                                                                        'parent'       => $conv_parent,
+                                                                       'parent_uri'   => $parent_uri
 
                                                                ));
 
@@ -3060,7 +3070,8 @@ function local_delivery($importer,$data) {
                        $datarray['uid'] = $importer['importer_uid'];
                        $datarray['contact-id'] = $importer['id'];
 
-                       if(! link_compare($datarray['owner-link'],$contact['url'])) {
+
+                       if(! link_compare($datarray['owner-link'],$importer['url'])) {
                                // The item owner info is not our contact. It's OK and is to be expected if this is a tgroup delivery, 
                                // but otherwise there's a possible data mixup on the sender's system.
                                // the tgroup delivery code called from item_store will correct it if it's a forum,
@@ -3338,7 +3349,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
        if(strlen($item['owner-name']))
                $o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']);
 
-       if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || ($item['thr-parent'])) {
+       if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) {
                $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
                $o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' .  xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['parent']) . '" />' . "\r\n";
        }
@@ -3701,6 +3712,7 @@ function drop_item($id,$interactive = true) {
 
        if((local_user() == $item['uid']) || (remote_user() == $item['contact-id']) || (! $interactive)) {
 
+               logger('delete item: ' . $item['id'], LOGGER_DEBUG);
                // delete the item
 
                $r = q("UPDATE `item` SET `deleted` = 1, `title` = '', `body` = '', `edited` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1",