$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` IN ('%s', '%s') AND `network` != '%s'",
intval($importer["uid"]), dbesc(normalise_link($author["author-link"])),
dbesc(normalise_link($aliaslink)), dbesc(NETWORK_STATUSNET));
+
if (dbm::is_result($r)) {
$contact = $r[0];
$author["contact-id"] = $r[0]["id"];
// Should not happen
$contact = dba::fetch_first("SELECT * FROM `contact` WHERE `uid` = ? AND `addr` = ? AND `network` != ?",
$importer["uid"], $addr, NETWORK_STATUSNET);
+
if (dbm::is_result($contact)) {
$author["contact-id"] = $contact["id"];
$author["author-link"] = $contact["url"];
$avatarlist = array();
$avatars = $xpath->query("atom:author/atom:link[@rel='avatar']", $context);
- foreach($avatars AS $avatar) {
+ foreach ($avatars AS $avatar) {
$href = "";
$width = 0;
- foreach($avatar->attributes AS $attributes) {
- if ($attributes->name == "href")
+ foreach ($avatar->attributes AS $attributes) {
+ if ($attributes->name == "href") {
$href = $attributes->textContent;
- if ($attributes->name == "width")
+ }
+ if ($attributes->name == "width") {
$width = $attributes->textContent;
+ }
}
- if (($width > 0) AND ($href != ""))
+ if (($width > 0) AND ($href != "")) {
$avatarlist[$width] = $href;
+ }
}
if (count($avatarlist) > 0) {
krsort($avatarlist);
}
$displayname = $xpath->evaluate('atom:author/poco:displayName/text()', $context)->item(0)->nodeValue;
- if ($displayname != "")
+ if ($displayname != "") {
$author["author-name"] = $displayname;
+ }
$author["owner-name"] = $author["author-name"];
$author["owner-link"] = $author["author-link"];
foreach ($category->attributes AS $attributes) {
if ($attributes->name == "term") {
$term = $attributes->textContent;
- if(strlen($item["tag"])) {
+ if (strlen($item["tag"])) {
$item["tag"] .= ',';
}
$item["tag"] .= "#[url=".App::get_baseurl()."/search?tag=".$term."]".$term."[/url]";
$item_id = self::completion($conversation, $importer["uid"], $item, $self);
if (!$item_id) {
+ // Store the conversation data. This is normally done in "item_store"
+ // but since something went wrong, we want to be sure to save the data.
+ store_conversation($item);
logger("Error storing item", LOGGER_DEBUG);
continue;
}
return $base_url."/conversation/".$conversation_id;
}
+ /**
+ * @brief Fetches a shared object from a given conversation object
+ *
+ * Sometimes GNU Social seems to fail when returning shared objects.
+ * Then they don't contains all needed data.
+ * We then try to find this object in the conversation
+ *
+ * @param string $id Message id
+ * @param object $conversation Conversation object
+ *
+ * @return object The shared object
+ */
+ private function shared_object($id, $conversation) {
+ if (!is_array($conversation->items)) {
+ return false;
+ }
+ foreach ($conversation->items AS $single_conv) {
+ if ($single_conv->id == $id) {
+ return $single_conv;
+ }
+ }
+ return false;
+ }
+
/**
* @brief Fetches actor details of a given actor and user id
*
($item["verb"] == ACTIVITY_LIKE) OR ($conversation_url == "")) {
$item_stored = item_store($item, $all_threads);
return $item_stored;
- } elseif (count($item) > 0) {
- $item = store_conversation($item);
}
// Get the parent
STRAIGHT_JOIN `item` ON `item`.`parent` = `thritem`.`parent`
WHERE `term`.`uid` = %d AND `term`.`otype` = %d AND `term`.`type` = %d AND `term`.`url` = '%s'",
intval($uid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION), dbesc($conversation_url));
-
-/* 2016-10-23: The old query will be kept until we are sure that the query above is a good and fast replacement
-
- $parents = q("SELECT `id`, `parent`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `id` IN
- (SELECT `parent` FROM `item` WHERE `id` IN
- (SELECT `oid` FROM `term` WHERE `uid` = %d AND `otype` = %d AND `type` = %d AND `url` = '%s'))",
- intval($uid), intval(TERM_OBJ_POST), intval(TERM_CONVERSATION), dbesc($conversation_url));
-*/
if ($parents)
$parent = $parents[0];
elseif (count($item) > 0) {
continue;
}
+ /// @TODO One statment is okay (until if () )
$arr = array();
$arr["network"] = $details["network"];
$arr["uri"] = $single_conv->id;
if (is_array($single_conv->object))
$single_conv->object = $single_conv->object[0];
- logger("Found reshared item ".$single_conv->object->id);
+ // Sometimes GNU Social doesn't returns a complete object
+ if (!isset($single_conv->object->actor->url)) {
+ $object = self::shared_object($single_conv->object->id, $conversation);
+ if (is_object($object)) {
+ $single_conv->object = $object;
+ }
+ }
- // $single_conv->object->context->conversation;
+ if (isset($single_conv->object->actor->url)) {
+ logger("Found reshared item ".$single_conv->object->id);
- if (isset($single_conv->object->object->id))
- $arr["uri"] = $single_conv->object->object->id;
- else
- $arr["uri"] = $single_conv->object->id;
+ // $single_conv->object->context->conversation;
- if (isset($single_conv->object->object->url))
- $plink = self::convert_href($single_conv->object->object->url);
- else
- $plink = self::convert_href($single_conv->object->url);
+ if (isset($single_conv->object->object->id)) {
+ $arr["uri"] = $single_conv->object->object->id;
+ } else {
+ $arr["uri"] = $single_conv->object->id;
+ }
+ if (isset($single_conv->object->object->url)) {
+ $plink = self::convert_href($single_conv->object->object->url);
+ } else {
+ $plink = self::convert_href($single_conv->object->url);
+ }
+ if (isset($single_conv->object->object->content)) {
+ $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->object->object->content));
+ } else {
+ $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->object->content));
+ }
+ $arr["plink"] = $plink;
- if (isset($single_conv->object->object->content))
- $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->object->object->content));
- else
- $arr["body"] = add_page_info_to_body(html2bbcode($single_conv->object->content));
+ $arr["created"] = $single_conv->object->published;
+ $arr["edited"] = $single_conv->object->published;
- $arr["plink"] = $plink;
+ $arr["author-name"] = $single_conv->object->actor->displayName;
+ if ($arr["owner-name"] == '') {
+ $arr["author-name"] = $single_conv->object->actor->contact->displayName;
+ }
+ $arr["author-link"] = $single_conv->object->actor->url;
+ $arr["author-avatar"] = Probe::fixAvatar($single_conv->object->actor->image->url, $arr["author-link"]);
- $arr["created"] = $single_conv->object->published;
- $arr["edited"] = $single_conv->object->published;
+ $arr["app"] = $single_conv->object->provider->displayName."#";
+ //$arr["verb"] = $single_conv->object->verb;
- $arr["author-name"] = $single_conv->object->actor->displayName;
- if ($arr["owner-name"] == '') {
- $arr["author-name"] = $single_conv->object->actor->contact->displayName;
+ $arr["location"] = $single_conv->object->location->displayName;
+ $arr["coord"] = trim($single_conv->object->location->lat." ".$single_conv->object->location->lon);
}
- $arr["author-link"] = $single_conv->object->actor->url;
- $arr["author-avatar"] = Probe::fixAvatar($single_conv->object->actor->image->url, $arr["author-link"]);
-
- $arr["app"] = $single_conv->object->provider->displayName."#";
- //$arr["verb"] = $single_conv->object->verb;
-
- $arr["location"] = $single_conv->object->location->displayName;
- $arr["coord"] = trim($single_conv->object->location->lat." ".$single_conv->object->location->lon);
}
if ($arr["location"] == "")
// Copy fields from given item array
if (isset($item["uri"]) AND (($item["uri"] == $arr["uri"]) OR ($item["uri"] == $single_conv->id))) {
- $copy_fields = array("owner-name", "owner-link", "owner-avatar", "author-name", "author-link", "author-avatar",
- "gravity", "body", "object-type", "object", "verb", "created", "edited", "coord", "tag",
- "title", "attach", "app", "type", "location", "contact-id", "uri");
- foreach ($copy_fields AS $field)
- if (isset($item[$field]))
- $arr[$field] = $item[$field];
-
+ logger('Use stored item array for item with URI '.$item["uri"], LOGGER_DEBUG);
+ $newitem = item_store($item);
+ $item = array();
+ $item_stored = $newitem;
+ } else {
+ $newitem = item_store($arr);
}
- $newitem = item_store($arr);
if (!$newitem) {
logger("Item wasn't stored ".print_r($arr, true), LOGGER_DEBUG);
continue;
}
- if (isset($item["uri"]) AND ($item["uri"] == $arr["uri"])) {
- $item = array();
- $item_stored = $newitem;
- }
-
logger('Stored new item '.$plink.' for parent '.$arr["parent-uri"].' under id '.$newitem, LOGGER_DEBUG);
// Add the conversation entry (but don't fetch the whole conversation)
$owner = $r[0];
- if(!strlen($last_update))
+ if (!strlen($last_update))
$last_update = 'now -30 days';
$check_date = datetime_convert('UTC','UTC',$last_update,'Y-m-d H:i:s');