diff --git a/mod/display.php b/mod/display.php index 10862d57c..1f2e18708 100644 --- a/mod/display.php +++ b/mod/display.php @@ -356,11 +356,11 @@ function display_content(App $a, $update = false, $update_uid = 0) $o .= conversation($a, $conversation_items, 'display', $update_uid, false, 'commented', local_user()); // Preparing the meta header - $description = trim(HTML::toPlaintext(BBCode::convert($items["body"], false), 0, true)); - $title = trim(HTML::toPlaintext(BBCode::convert($items["title"], false), 0, true)); - $author_name = $items["author-name"]; + $description = trim(HTML::toPlaintext(BBCode::convert($items[0]["body"], false), 0, true)); + $title = trim(HTML::toPlaintext(BBCode::convert($items[0]["title"], false), 0, true)); + $author_name = $items[0]["author-name"]; - $image = $a->remove_baseurl($items["author-thumb"]); + $image = $a->remove_baseurl($items[0]["author-avatar"]); if ($title == "") { $title = $author_name; @@ -392,7 +392,7 @@ function display_content(App $a, $update = false, $update_uid = 0) $a->page['htmlhead'] .= ''."\n"; $a->page['htmlhead'] .= ''."\n"; $a->page['htmlhead'] .= ''."\n"; - $a->page['htmlhead'] .= ''."\n"; + $a->page['htmlhead'] .= ''."\n"; // Dublin Core $a->page['htmlhead'] .= ''."\n"; @@ -402,7 +402,7 @@ function display_content(App $a, $update = false, $update_uid = 0) $a->page['htmlhead'] .= ''."\n"; $a->page['htmlhead'] .= ''."\n"; $a->page['htmlhead'] .= ''."\n"; - $a->page['htmlhead'] .= ''."\n"; + $a->page['htmlhead'] .= ''."\n"; $a->page['htmlhead'] .= ''."\n"; $a->page['htmlhead'] .= ''."\n"; // article:tag diff --git a/mod/poco.php b/mod/poco.php index 671551f83..de3b42bb7 100644 --- a/mod/poco.php +++ b/mod/poco.php @@ -31,7 +31,7 @@ function poco_init(App $a) { $system_mode = true; } - $format = (($_GET['format']) ? $_GET['format'] : 'json'); + $format = defaults($_GET, 'format', 'json'); $justme = false; $global = false; @@ -76,11 +76,11 @@ function poco_init(App $a) { if ($justme) { $sql_extra = " AND `contact`.`self` = 1 "; + } else { + $sql_extra = ""; } -// else -// $sql_extra = " AND `contact`.`self` = 0 "; - if ($cid) { + if (!empty($cid)) { $sql_extra = sprintf(" AND `contact`.`id` = %d ", intval($cid)); } if (x($_GET, 'updatedSince')) { @@ -112,8 +112,9 @@ function poco_init(App $a) { } else { $totalResults = 0; } - $startIndex = intval($_GET['startIndex']); - if (! $startIndex) { + if (!empty($_GET['startIndex'])) { + $startIndex = intval($_GET['startIndex']); + } else { $startIndex = 0; } $itemsPerPage = ((x($_GET, 'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults); @@ -204,6 +205,10 @@ function poco_init(App $a) { if (is_array($contacts)) { if (DBM::is_result($contacts)) { foreach ($contacts as $contact) { + if (!isset($contact['updated'])) { + $contact['updated'] = ''; + } + if (! isset($contact['generation'])) { if ($global) { $contact['generation'] = 3; diff --git a/src/Model/Profile.php b/src/Model/Profile.php index 631ddd2f0..94d8de572 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -112,7 +112,7 @@ class Profile } } - $pdata = self::getByNickname($nickname, $user[0]['uid'], $profile); + $pdata = self::getByNickname($nickname, $user['uid'], $profile); if (empty($pdata) && empty($profiledata)) { logger('profile error: ' . $a->query_string, LOGGER_DEBUG); diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index ddbda750b..e37bfae56 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -2746,7 +2746,7 @@ class DFRN } $condition = ['uri' => $uri, 'uid' => $importer["importer_uid"]]; - $item = Item::selectFirst(['id', 'parent', 'contact-id', 'file'], $condition); + $item = Item::selectFirst(['id', 'parent', 'contact-id', 'file', 'deleted'], $condition); if (!DBM::is_result($item)) { logger("Item with uri " . $uri . " for user " . $importer["importer_uid"] . " wasn't found.", LOGGER_DEBUG); return; diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 40218b0df..1c0cffb30 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -55,9 +55,9 @@ class OStatus private static function fetchAuthor($xpath, $context, $importer, &$contact, $onlyfetch) { $author = []; - $author["author-link"] = $xpath->evaluate('atom:author/atom:uri/text()', $context)->item(0)->nodeValue; - $author["author-name"] = $xpath->evaluate('atom:author/atom:name/text()', $context)->item(0)->nodeValue; - $addr = $xpath->evaluate('atom:author/atom:email/text()', $context)->item(0)->nodeValue; + $author["author-link"] = XML::getFirstNodeValue($xpath, 'atom:author/atom:uri/text()', $context); + $author["author-name"] = XML::getFirstNodeValue($xpath, 'atom:author/atom:name/text()', $context); + $addr = XML::getFirstNodeValue($xpath, 'atom:author/atom:email/text()', $context); $aliaslink = $author["author-link"]; @@ -126,7 +126,7 @@ class OStatus $author["author-avatar"] = Probe::fixAvatar(current($avatarlist), $author["author-link"]); } - $displayname = $xpath->evaluate('atom:author/poco:displayName/text()', $context)->item(0)->nodeValue; + $displayname = XML::getFirstNodeValue($xpath, 'atom:author/poco:displayName/text()', $context); if ($displayname != "") { $author["author-name"] = $displayname; } @@ -155,27 +155,27 @@ class OStatus $contact['url'] = $author["author-link"]; $contact['nurl'] = normalise_link($contact['url']); - $value = $xpath->evaluate('atom:author/atom:uri/text()', $context)->item(0)->nodeValue; + $value = XML::getFirstNodeValue($xpath, 'atom:author/atom:uri/text()', $context); if ($value != "") { $contact["alias"] = $value; } - $value = $xpath->evaluate('atom:author/poco:displayName/text()', $context)->item(0)->nodeValue; + $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:displayName/text()', $context); if ($value != "") { $contact["name"] = $value; } - $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()', $context)->item(0)->nodeValue; + $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:preferredUsername/text()', $context); if ($value != "") { $contact["nick"] = $value; } - $value = $xpath->evaluate('atom:author/poco:note/text()', $context)->item(0)->nodeValue; + $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:note/text()', $context); if ($value != "") { $contact["about"] = HTML::toBBCode($value); } - $value = $xpath->evaluate('atom:author/poco:address/poco:formatted/text()', $context)->item(0)->nodeValue; + $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:address/poco:formatted/text()', $context); if ($value != "") { $contact["location"] = $value; } @@ -390,7 +390,7 @@ class OStatus $author = self::fetchAuthor($xpath, $entry, $importer, $contact, $stored); } - $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()', $entry)->item(0)->nodeValue; + $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:preferredUsername/text()', $context); if ($value != "") { $nickname = $value; } else { @@ -399,9 +399,9 @@ class OStatus $item = array_merge($header, $author); - $item["uri"] = $xpath->query('atom:id/text()', $entry)->item(0)->nodeValue; + $item["uri"] = XML::getFirstNodeValue($xpath, 'atom:id/text()', $entry); - $item["verb"] = $xpath->query('activity:verb/text()', $entry)->item(0)->nodeValue; + $item["verb"] = XML::getFirstNodeValue($xpath, 'activity:verb/text()', $entry); // Delete a message if (in_array($item["verb"], ['qvitter-delete-notice', ACTIVITY_DELETE, 'delete'])) { @@ -561,19 +561,18 @@ class OStatus */ private static function processPost($xpath, $entry, &$item, $importer) { - $item["body"] = HTML::toBBCode($xpath->query('atom:content/text()', $entry)->item(0)->nodeValue); - $item["object-type"] = $xpath->query('activity:object-type/text()', $entry)->item(0)->nodeValue; + $item["body"] = HTML::toBBCode(XML::getFirstNodeValue($xpath, 'atom:content/text()', $entry)); + $item["object-type"] = XML::getFirstNodeValue($xpath, 'activity:object-type/text()', $entry); if (($item["object-type"] == ACTIVITY_OBJ_BOOKMARK) || ($item["object-type"] == ACTIVITY_OBJ_EVENT)) { - $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue; - $item["body"] = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue; + $item["title"] = XML::getFirstNodeValue($xpath, 'atom:title/text()', $entry); + $item["body"] = XML::getFirstNodeValue($xpath, 'atom:summary/text()', $entry); } elseif ($item["object-type"] == ACTIVITY_OBJ_QUESTION) { - $item["title"] = $xpath->query('atom:title/text()', $entry)->item(0)->nodeValue; + $item["title"] = XML::getFirstNodeValue($xpath, 'atom:title/text()', $entry); } - $item["created"] = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue; - $item["edited"] = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue; - $conversation = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue; - $item['conversation-uri'] = $conversation; + $item["created"] = XML::getFirstNodeValue($xpath, 'atom:published/text()', $entry); + $item["edited"] = XML::getFirstNodeValue($xpath, 'atom:updated/text()', $entry); + $item['conversation-uri'] = XML::getFirstNodeValue($xpath, 'ostatus:conversation/text()', $entry); $conv = $xpath->query('ostatus:conversation', $entry); if (is_object($conv->item(0))) { @@ -661,7 +660,7 @@ class OStatus // Mastodon Content Warning if (($item["verb"] == ACTIVITY_POST) && $xpath->evaluate('boolean(atom:summary)', $entry)) { - $clear_text = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue; + $clear_text = XML::getFirstNodeValue($xpath, 'atom:summary/text()', $entry); if (!empty($clear_text)) { $item['content-warning'] = HTML::toBBCode($clear_text); } @@ -787,7 +786,7 @@ class OStatus $conv_data['protocol'] = PROTOCOL_SPLITTED_CONV; $conv_data['network'] = NETWORK_OSTATUS; - $conv_data['uri'] = $xpath->query('atom:id/text()', $entry)->item(0)->nodeValue; + $conv_data['uri'] = XML::getFirstNodeValue($xpath, 'atom:id/text()', $entry); $inreplyto = $xpath->query('thr:in-reply-to', $entry); if (is_object($inreplyto->item(0))) { @@ -798,8 +797,7 @@ class OStatus } } - $conv = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue; - $conv_data['conversation-uri'] = $conv; + $conv_data['conversation-uri'] = XML::getFirstNodeValue($xpath, 'ostatus:conversation/text()', $entry); $conv = $xpath->query('ostatus:conversation', $entry); if (is_object($conv->item(0))) { @@ -1003,7 +1001,7 @@ class OStatus $link_data = []; - $orig_uri = $xpath->query('atom:id/text()', $activityobjects)->item(0)->nodeValue; + $orig_uri = XML::getFirstNodeValue($xpath, 'atom:id/text()', $activityobjects); $links = $xpath->query("atom:link", $activityobjects); if ($links) { diff --git a/src/Util/Network.php b/src/Util/Network.php index c3ecaf606..393b993e3 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -410,7 +410,7 @@ class Network $matches = []; $new_location_info = @parse_url($curl_info['redirect_url']); $old_location_info = @parse_url($curl_info['url']); - + preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); $newurl = trim(array_pop($matches)); @@ -654,7 +654,7 @@ class Network public static function stripTrackingQueryParams($url) { $urldata = parse_url($url); - if (is_string($urldata["query"])) { + if (!empty($urldata["query"])) { $query = $urldata["query"]; parse_str($query, $querydata); @@ -838,14 +838,35 @@ class Network return ""; } + if (empty($parts1["scheme"])) { + $parts1["scheme"] = ''; + } + if (empty($parts2["scheme"])) { + $parts2["scheme"] = ''; + } + if ($parts1["scheme"] != $parts2["scheme"]) { return ""; } + if (empty($parts1["host"])) { + $parts1["host"] = ''; + } + if (empty($parts2["host"])) { + $parts2["host"] = ''; + } + if ($parts1["host"] != $parts2["host"]) { return ""; } + if (empty($parts1["port"])) { + $parts1["port"] = ''; + } + if (empty($parts2["port"])) { + $parts2["port"] = ''; + } + if ($parts1["port"] != $parts2["port"]) { return ""; } @@ -856,6 +877,13 @@ class Network $match .= ":".$parts1["port"]; } + if (empty($parts1["path"])) { + $parts1["path"] = ''; + } + if (empty($parts2["path"])) { + $parts2["path"] = ''; + } + $pathparts1 = explode("/", $parts1["path"]); $pathparts2 = explode("/", $parts2["path"]);