diff --git a/include/diaspora.php b/include/diaspora.php index a6e341729c..7c6a88064e 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -603,7 +603,7 @@ function diaspora_request($importer,$xml) { if(count($self) && $contact['rel'] == CONTACT_IS_FOLLOWER) { $arr = array(); - $arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), $importer['uid']); + $arr['uri'] = $arr['parent-uri'] = item_new_uri($a->get_hostname(), $importer['uid']); $arr['uid'] = $importer['uid']; $arr['contact-id'] = $self[0]['id']; $arr['wall'] = 1; @@ -827,18 +827,6 @@ function diaspora_post($importer,$xml,$msg) { return; } - // allocate a guid on our system - we aren't fixing any collisions. - // we're ignoring them - - $g = q("select * from guid where guid = '%s' limit 1", - dbesc($guid) - ); - if(! count($g)) { - q("insert into guid ( guid ) values ( '%s' )", - dbesc($guid) - ); - } - $created = unxmlify($xml->created_at); $private = ((unxmlify($xml->public) == 'false') ? 1 : 0); @@ -1041,10 +1029,10 @@ function diaspora_fetch_message($guid, $server, $level = 0) { } else { // Maybe it is a reshare of a photo that will be delivered at a later time (testing) logger('no content found: '.print_r($source_xml,true)); - $body = ""; + return false; } - if ($body == "") + if (trim($body) == "") return false; $item["tag"] = ''; @@ -1093,20 +1081,27 @@ function diaspora_reshare($importer,$xml,$msg) { $create_original_post = false; // Do we already have this item? - $r = q("SELECT `body`, `tag`, `app`, `author-link`, `plink` FROM `item` WHERE `guid` = '%s' AND `visible` AND NOT `deleted` AND `body` != '' LIMIT 1", + $r = q("SELECT `body`, `tag`, `app`, `created`, `author-link`, `plink` FROM `item` WHERE `guid` = '%s' AND `visible` AND NOT `deleted` AND `body` != '' LIMIT 1", dbesc($orig_guid), dbesc(NETWORK_DIASPORA) ); if(count($r)) { - logger('reshared message '.orig_guid." reshared by ".$guid.' already exists on system: '.$orig_url); + logger('reshared message '.$orig_guid." reshared by ".$guid.' already exists on system: '.$orig_url); // Maybe it is already a reshared item? // Then refetch the content, since there can be many side effects with reshared posts from other networks or reshares from reshares require_once('include/api.php'); if (api_share_as_retweet($r[0])) $r = array(); - else - $orig_url = $a->get_baseurl().'/display/'.$orig_guid; + else { + $body = $r[0]["body"]; + $str_tags = $r[0]["tag"]; + $app = $r[0]["app"]; + $orig_created = $r[0]["created"]; + $orig_author = $r[0]["author-link"]; + $create_original_post = ($body != ""); + $orig_url = $a->get_baseurl()."/display/".$orig_guid; + } } if (!count($r)) { @@ -1150,18 +1145,6 @@ function diaspora_reshare($importer,$xml,$msg) { $person = find_diaspora_person_by_handle($orig_author); - // allocate a guid on our system - we aren't fixing any collisions. - // we're ignoring them - - $g = q("select * from guid where guid = '%s' limit 1", - dbesc($guid) - ); - if(! count($g)) { - q("insert into guid ( guid ) values ( '%s' )", - dbesc($guid) - ); - } - $created = unxmlify($xml->created_at); $private = ((unxmlify($xml->public) == 'false') ? 1 : 0); @@ -1270,18 +1253,6 @@ function diaspora_asphoto($importer,$xml,$msg) { return; } - // allocate a guid on our system - we aren't fixing any collisions. - // we're ignoring them - - $g = q("select * from guid where guid = '%s' limit 1", - dbesc($guid) - ); - if(! count($g)) { - q("insert into guid ( guid ) values ( '%s' )", - dbesc($guid) - ); - } - $created = unxmlify($xml->created_at); $private = ((unxmlify($xml->public) == 'false') ? 1 : 0); @@ -1683,7 +1654,7 @@ function diaspora_conversation($importer,$xml,$msg) { dbesc($person['name']), dbesc($person['photo']), dbesc($person['url']), - intval($contact['id']), + intval($contact['id']), dbesc($subject), dbesc($body), 0, @@ -1705,7 +1676,7 @@ function diaspora_conversation($importer,$xml,$msg) { 'language' => $importer['language'], 'to_name' => $importer['username'], 'to_email' => $importer['email'], - 'uid' =>$importer['importer_uid'], + 'uid' =>$importer['uid'], 'item' => array('subject' => $subject, 'body' => $body), 'source_name' => $person['name'], 'source_link' => $person['url'], @@ -1852,7 +1823,7 @@ function diaspora_photo($importer,$xml,$msg,$attempt=1) { intval($importer['uid']), dbesc($status_message_guid) ); - if(! count($r)) { + if(!count($r)) { if($attempt <= 3) { q("INSERT INTO dsprphotoq (uid, msg, attempt) VALUES (%d, '%s', %d)", intval($importer['uid']), @@ -1860,6 +1831,20 @@ function diaspora_photo($importer,$xml,$msg,$attempt=1) { intval($attempt + 1) ); } + + $r = q("SELECT `id` FROM `item` WHERE `uid` = 0 AND `guid` = '%s' LIMIT 1", dbesc($status_message_guid)); + if(!count($r)) { + // Fetching the missing item as a public shadow + // To-Do: Doing it for every post that is missing + $item = array(); + $item["author-link"] = $contact['url']; + $item["owner-link"] = $contact['url']; + + DiasporaFetchGuidSub($status_message_guid, $item); + + logger("Storing missing item ".$status_message_guid." as public shadow", LOGGER_DEBUG); + } + logger('diaspora_photo: attempt = ' . $attempt . '; status message not found: ' . $status_message_guid . ' for photo: ' . $guid); return; } diff --git a/include/threads.php b/include/threads.php index d88307ecfb..3cfa025640 100644 --- a/include/threads.php +++ b/include/threads.php @@ -112,7 +112,7 @@ function update_thread_uri($itemuri, $uid) { } function update_thread($itemid, $setmention = false) { - $items = q("SELECT `uid`, `uri`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`, `moderated`, `visible`, `spam`, `starred`, `bookmark`, `contact-id`, + $items = q("SELECT `uid`, `guid`, `title`, `body`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`, `moderated`, `visible`, `spam`, `starred`, `bookmark`, `contact-id`, `deleted`, `origin`, `forum_mode`, `network` FROM `item` WHERE `id` = %d AND (`parent` = %d OR `parent` = 0) LIMIT 1", intval($itemid), intval($itemid)); if (!$items) @@ -126,7 +126,7 @@ function update_thread($itemid, $setmention = false) { $sql = ""; foreach ($item AS $field => $data) - if ($field != "uri") { + if (!in_array($field, array("guid", "title", "body"))) { if ($sql != "") $sql .= ", "; @@ -135,40 +135,20 @@ function update_thread($itemid, $setmention = false) { $result = q("UPDATE `thread` SET ".$sql." WHERE `iid` = %d", intval($itemid)); - logger("update_thread: Update thread for item ".$itemid." - ".print_r($result, true)." ".print_r($item, true), LOGGER_DEBUG); + logger("Update thread for item ".$itemid." - guid ".$item["guid"]." - ".print_r($result, true)." ".print_r($item, true), LOGGER_DEBUG); // Updating a shadow item entry - $items = q("SELECT `id`, `title`, `body`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`, - `moderated`, `visible`, `spam`, `starred`, `bookmark`, `deleted`, `origin`, `forum_mode`, `network` - FROM `item` WHERE `uri` = '%s' AND `uid` = 0 LIMIT 1", dbesc($item["uri"])); + $items = q("SELECT `id` FROM `item` WHERE `guid` = '%s' AND `uid` = 0 LIMIT 1", dbesc($item["guid"])); if (!$items) return; - $item = $items[0]; - - $result = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `network` = '%s' WHERE `id` = %d", + $result = q("UPDATE `item` SET `title` = '%s', `body` = '%s' WHERE `id` = %d", dbesc($item["title"]), dbesc($item["body"]), - dbesc($item["network"]), - intval($item["id"]) + intval($items[0]["id"]) ); - logger("update_thread: Updating public shadow for post ".$item["id"]." Result: ".print_r($result, true), LOGGER_DEBUG); - - /* - $sql = ""; - - foreach ($item AS $field => $data) - if ($field != "id") { - if ($sql != "") - $sql .= ", "; - - $sql .= "`".$field."` = '".dbesc($data)."'"; - } - //logger("update_thread: Updating public shadow for post ".$item["id"]." SQL: ".$sql, LOGGER_DEBUG); - $result = q("UPDATE `item` SET ".$sql." WHERE `id` = %d", intval($item["id"])); - logger("update_thread: Updating public shadow for post ".$item["id"]." Result: ".print_r($result, true), LOGGER_DEBUG); - */ + logger("Updating public shadow for post ".$items[0]["id"]." - guid ".$item["guid"]." Result: ".print_r($result, true), LOGGER_DEBUG); } function delete_thread_uri($itemuri, $uid) {