diff --git a/include/api.php b/include/api.php
index ad991485a..42868aa9e 100644
--- a/include/api.php
+++ b/include/api.php
@@ -579,7 +579,9 @@ function api_get_user(App $a, $contact_id = null)
// $called_api is the API path exploded on / and is expected to have at least 2 elements
if (is_null($user) && ($a->argc > (count($called_api) - 1)) && (count($called_api) > 0)) {
$argid = count($called_api);
- list($user, $null) = explode(".", $a->argv[$argid]);
+ if (!empty($a->argv[$argid])) {
+ list($user, $null) = explode(".", $a->argv[$argid]);
+ }
if (is_numeric($user)) {
$user = dbesc(api_unique_id_to_nurl(intval($user)));
diff --git a/include/conversation.php b/include/conversation.php
index 438019fd0..5ce02a55f 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -721,6 +721,8 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order =
continue;
}
+ /// @todo Check if this call is needed or not
+ $arr = ['item' => $item];
Addon::callHooks('display_item', $arr);
$item['pagedrop'] = $page_dropping;
diff --git a/mod/display.php b/mod/display.php
index 920cb454f..1f2e18708 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -65,13 +65,13 @@ function display_init(App $a)
$item = Item::selectFirstForUser(local_user(), $fields, ['id' => $a->argv[2], 'private' => false, 'uid' => 0]);
}
- if (!DBM::is_result($item) || $item['deleted']) {
+ if (!DBM::is_result($item)) {
$a->error = 404;
notice(L10n::t('Item not found.') . EOL);
return;
}
- if (strstr($_SERVER['HTTP_ACCEPT'], 'application/atom+xml')) {
+ if (!empty($_SERVER['HTTP_ACCEPT']) && strstr($_SERVER['HTTP_ACCEPT'], 'application/atom+xml')) {
logger('Directly serving XML for id '.$item["id"], LOGGER_DEBUG);
displayShowFeed($item["id"], false);
}
@@ -347,19 +347,20 @@ function display_content(App $a, $update = false, $update_uid = 0)
Item::update(['unseen' => false], $condition);
}
- $items = conv_sort(Item::inArray($items_obj), "`commented`");
+ $items = Item::inArray($items_obj);
+ $conversation_items = conv_sort($items, "`commented`");
if (!$update) {
$o .= "";
}
- $o .= conversation($a, $items, 'display', $update_uid, false, 'commented', local_user());
+ $o .= conversation($a, $conversation_items, 'display', $update_uid, false, 'commented', local_user());
// Preparing the meta header
- $description = trim(HTML::toPlaintext(BBCode::convert($s[0]["body"], false), 0, true));
- $title = trim(HTML::toPlaintext(BBCode::convert($s[0]["title"], false), 0, true));
- $author_name = $s[0]["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($s[0]["author-thumb"]);
+ $image = $a->remove_baseurl($items[0]["author-avatar"]);
if ($title == "") {
$title = $author_name;
@@ -391,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";
@@ -401,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/friendica.php b/mod/friendica.php
index 1929150f2..e75e9ceba 100644
--- a/mod/friendica.php
+++ b/mod/friendica.php
@@ -11,7 +11,7 @@ use Friendica\Database\DBM;
function friendica_init(App $a)
{
- if ($a->argv[1] == "json") {
+ if (!empty($a->argv[1]) && ($a->argv[1] == "json")) {
$register_policy = ['REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN'];
$sql_extra = '';
diff --git a/mod/network.php b/mod/network.php
index 7c1ff0afa..98ffd741f 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -699,9 +699,7 @@ function networkThreadedView(App $a, $update, $parent)
$order_mode = 'commented';
}
- if ($sql_order == '') {
- $sql_order = "$sql_table.$ordering";
- }
+ $sql_order = "$sql_table.$ordering";
if (x($_GET, 'offset')) {
$sql_range = sprintf(" AND $sql_order <= '%s'", dbesc($_GET['offset']));
diff --git a/mod/ping.php b/mod/ping.php
index 8028d69ed..cbd280f53 100644
--- a/mod/ping.php
+++ b/mod/ping.php
@@ -130,7 +130,7 @@ function ping_init(App $a)
$condition = ["`unseen` AND `uid` = ? AND `contact-id` != ?", local_user(), local_user()];
$fields = ['id', 'parent', 'verb', 'author-name', 'unseen', 'author-link', 'author-avatar', 'contact-avatar',
- 'network', 'created', 'object', 'parent-author-name', 'parent-author-link', 'parent-guid'];
+ 'network', 'created', 'object', 'parent-author-name', 'parent-author-link', 'parent-guid', 'wall'];
$params = ['order' => ['created' => true]];
$items = Item::selectForUser(local_user(), $fields, $condition, $params);
@@ -487,7 +487,7 @@ function ping_get_notifications($uid)
if ($notification["visible"]
&& !$notification["deleted"]
- && !(x($result, $notification["parent"]) && is_array($result[$notification["parent"]]))
+ && !(x($result, $notification["parent"]) && !empty($result[$notification["parent"]]))
) {
// Should we condense the notifications or show them all?
if (PConfig::get(local_user(), 'system', 'detailed_notif')) {
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/mod/receive.php b/mod/receive.php
index 41f2225cb..adb758e38 100644
--- a/mod/receive.php
+++ b/mod/receive.php
@@ -43,9 +43,7 @@ function receive_post(App $a)
logger('mod-diaspora: receiving post', LOGGER_DEBUG);
- $xml = urldecode($_POST['xml']);
-
- if (!$xml) {
+ if (empty($_POST['xml'])) {
$postdata = file_get_contents("php://input");
if ($postdata == '') {
System::httpExit(500);
@@ -54,6 +52,8 @@ function receive_post(App $a)
logger('mod-diaspora: message is in the new format', LOGGER_DEBUG);
$msg = Diaspora::decodeRaw($importer, $postdata);
} else {
+ $xml = urldecode($_POST['xml']);
+
logger('mod-diaspora: decode message in the old format', LOGGER_DEBUG);
$msg = Diaspora::decode($importer, $xml);
diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php
index 33b3503ec..b4270fec6 100644
--- a/src/Content/Text/BBCode.php
+++ b/src/Content/Text/BBCode.php
@@ -571,9 +571,9 @@ class BBCode extends BaseObject
$return = sprintf('
', $data["type"]);
}
- if ($data["image"] != "") {
+ if (!empty($data["image"])) {
$return .= sprintf('

', $data["url"], self::proxyUrl($data["image"], $simplehtml), $data["title"]);
- } elseif ($data["preview"] != "") {
+ } elseif (!empty($data["preview"])) {
$return .= sprintf('

', $data["url"], self::proxyUrl($data["preview"], $simplehtml), $data["title"]);
}
diff --git a/src/Core/L10n.php b/src/Core/L10n.php
index 277b3401d..24be01095 100644
--- a/src/Core/L10n.php
+++ b/src/Core/L10n.php
@@ -144,6 +144,10 @@ class L10n
{
$a = get_app();
+ if (empty($s)) {
+ return '';
+ }
+
if (x($a->strings, $s)) {
$t = $a->strings[$s];
$s = is_array($t) ? $t[0] : $t;
diff --git a/src/Core/System.php b/src/Core/System.php
index abc39e5a2..84a64ab9a 100644
--- a/src/Core/System.php
+++ b/src/Core/System.php
@@ -152,12 +152,8 @@ EOT;
if (isset($description["title"])) {
$tpl = get_markup_template('http_status.tpl');
- echo replace_macros(
- $tpl,
- [
- '$title' => $description["title"],
- '$description' => $description["description"]]
- );
+ echo replace_macros($tpl, ['$title' => $description["title"],
+ '$description' => defaults($description, 'description', '')]);
}
killme();
diff --git a/src/Model/GContact.php b/src/Model/GContact.php
index c413bef4f..488435331 100644
--- a/src/Model/GContact.php
+++ b/src/Model/GContact.php
@@ -662,6 +662,11 @@ class GContact
$last_failure_str = '';
$last_contact_str = '';
+ if (empty($contact["network"])) {
+ logger("Empty network for contact url ".$contact["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
+ return false;
+ }
+
if (in_array($contact["network"], [NETWORK_PHANTOM])) {
logger("Invalid network for contact url ".$contact["url"]." - Called by: ".System::callstack(), LOGGER_DEBUG);
return false;
diff --git a/src/Model/Item.php b/src/Model/Item.php
index 162387185..f10c20936 100644
--- a/src/Model/Item.php
+++ b/src/Model/Item.php
@@ -51,7 +51,7 @@ class Item extends BaseObject
'attach', 'tag', 'bookmark', 'deleted', 'extid',
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
'author-id', 'author-link', 'owner-link', 'contact-uid',
- 'signed_text', 'signature', 'signer'];
+ 'signed_text', 'signature', 'signer', 'network'];
// Field list for "item-content" table that is mixed with the item table
const MIXED_CONTENT_FIELDLIST = ['title', 'content-warning', 'body', 'location',
@@ -1030,10 +1030,8 @@ class Item extends BaseObject
private static function guid($item, $notify)
{
- $guid = notags(trim($item['guid']));
-
- if (!empty($guid)) {
- return $guid;
+ if (!empty($item['guid'])) {
+ return notags(trim($item['guid']));
}
if ($notify) {
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/Object/Post.php b/src/Object/Post.php
index 216008974..f9da142fe 100644
--- a/src/Object/Post.php
+++ b/src/Object/Post.php
@@ -356,8 +356,8 @@ class Post extends BaseObject
'guid' => urlencode($item['guid']),
'isevent' => $isevent,
'attend' => $attend,
- 'linktitle' => L10n::t('View %s\'s profile @ %s', $profile_name, defaults($item, 'author-link', $item['url'])),
- 'olinktitle' => L10n::t('View %s\'s profile @ %s', htmlentities($this->getOwnerName()), defaults($item, 'owner-link', $item['url'])),
+ 'linktitle' => L10n::t('View %s\'s profile @ %s', $profile_name, $item['author-link']),
+ 'olinktitle' => L10n::t('View %s\'s profile @ %s', htmlentities($this->getOwnerName()), $item['owner-link']),
'to' => L10n::t('to'),
'via' => L10n::t('via'),
'wall' => L10n::t('Wall-to-Wall'),
diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php
index 72ab89d92..e37bfae56 100644
--- a/src/Protocol/DFRN.php
+++ b/src/Protocol/DFRN.php
@@ -952,10 +952,10 @@ class DFRN
if (isset($parent_item)) {
$conversation = dba::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $item['parent-uri']]);
if (DBM::is_result($conversation)) {
- if ($r['conversation-uri'] != '') {
+ if ($conversation['conversation-uri'] != '') {
$conversation_uri = $conversation['conversation-uri'];
}
- if ($r['conversation-href'] != '') {
+ if ($conversation['conversation-href'] != '') {
$conversation_href = $conversation['conversation-href'];
}
}
@@ -1534,8 +1534,8 @@ class DFRN
private static function fetchauthor($xpath, $context, $importer, $element, $onlyfetch, $xml = "")
{
$author = [];
- $author["name"] = $xpath->evaluate($element."/atom:name/text()", $context)->item(0)->nodeValue;
- $author["link"] = $xpath->evaluate($element."/atom:uri/text()", $context)->item(0)->nodeValue;
+ $author["name"] = XML::getFirstNodeValue($xpath, $element."/atom:name/text()", $context);
+ $author["link"] = XML::getFirstNodeValue($xpath, $element."/atom:uri/text()", $context);
$fields = ['id', 'uid', 'url', 'network', 'avatar-date', 'avatar', 'name-date', 'uri-date', 'addr',
'name', 'nick', 'about', 'location', 'keywords', 'xmpp', 'bdyear', 'bd', 'hidden', 'contact-type'];
@@ -1606,33 +1606,33 @@ class DFRN
}
// Update contact data
- $value = $xpath->evaluate($element . "/dfrn:handle/text()", $context)->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, $element . "/dfrn:handle/text()", $context);
if ($value != "") {
$poco["addr"] = $value;
}
- $value = $xpath->evaluate($element . "/poco:displayName/text()", $context)->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, $element . "/poco:displayName/text()", $context);
if ($value != "") {
$poco["name"] = $value;
}
- $value = $xpath->evaluate($element . "/poco:preferredUsername/text()", $context)->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, $element . "/poco:preferredUsername/text()", $context);
if ($value != "") {
$poco["nick"] = $value;
}
- $value = $xpath->evaluate($element . "/poco:note/text()", $context)->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, $element . "/poco:note/text()", $context);
if ($value != "") {
$poco["about"] = $value;
}
- $value = $xpath->evaluate($element . "/poco:address/poco:formatted/text()", $context)->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, $element . "/poco:address/poco:formatted/text()", $context);
if ($value != "") {
$poco["location"] = $value;
}
/// @todo Only search for elements with "poco:type" = "xmpp"
- $value = $xpath->evaluate($element . "/poco:ims/poco:value/text()", $context)->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, $element . "/poco:ims/poco:value/text()", $context);
if ($value != "") {
$poco["xmpp"] = $value;
}
@@ -1645,7 +1645,7 @@ class DFRN
/// - poco:country
// If the "hide" element is present then the profile isn't searchable.
- $hide = intval($xpath->evaluate($element . "/dfrn:hide/text()", $context)->item(0)->nodeValue == "true");
+ $hide = intval(XML::getFirstNodeValue($xpath, $element . "/dfrn:hide/text()", $context) == "true");
logger("Hidden status for contact " . $contact_old["url"] . ": " . $hide, LOGGER_DEBUG);
@@ -1667,7 +1667,7 @@ class DFRN
}
// "dfrn:birthday" contains the birthday converted to UTC
- $birthday = $xpath->evaluate($element . "/dfrn:birthday/text()", $context)->item(0)->nodeValue;
+ $birthday = XML::getFirstNodeValue($xpath, $element . "/poco:birthday/text()", $context);
if (strtotime($birthday) > time()) {
$bd_timestamp = strtotime($birthday);
@@ -1676,7 +1676,7 @@ class DFRN
}
// "poco:birthday" is the birthday in the format "yyyy-mm-dd"
- $value = $xpath->evaluate($element . "/poco:birthday/text()", $context)->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, $element . "/poco:birthday/text()", $context);
if (!in_array($value, ["", "0000-00-00", "0001-01-01"])) {
$bdyear = date("Y");
@@ -2410,9 +2410,9 @@ class DFRN
$item["source"] = $xml;
// Get the uri
- $item["uri"] = $xpath->query("atom:id/text()", $entry)->item(0)->nodeValue;
+ $item["uri"] = XML::getFirstNodeValue($xpath, "atom:id/text()", $entry);
- $item["edited"] = $xpath->query("atom:updated/text()", $entry)->item(0)->nodeValue;
+ $item["edited"] = XML::getFirstNodeValue($xpath, "atom:updated/text()", $entry);
$current = Item::selectFirst(['id', 'uid', 'edited', 'body'],
['uri' => $item["uri"], 'uid' => $importer["importer_uid"]]
@@ -2435,11 +2435,11 @@ class DFRN
$item["author-link"] = $author["link"];
$item["author-id"] = Contact::getIdForURL($author["link"], 0);
- $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["created"] = XML::getFirstNodeValue($xpath, "atom:published/text()", $entry);
- $item["body"] = $xpath->query("dfrn:env/text()", $entry)->item(0)->nodeValue;
+ $item["body"] = XML::getFirstNodeValue($xpath, "dfrn:env/text()", $entry);
$item["body"] = str_replace([' ',"\t","\r","\n"], ['','','',''], $item["body"]);
// make sure nobody is trying to sneak some html tags by us
$item["body"] = notags(base64url_decode($item["body"]));
@@ -2472,18 +2472,15 @@ class DFRN
// We don't need the content element since "dfrn:env" is always present
//$item["body"] = $xpath->query("atom:content/text()", $entry)->item(0)->nodeValue;
- $item["location"] = $xpath->query("dfrn:location/text()", $entry)->item(0)->nodeValue;
+ $item["location"] = XML::getFirstNodeValue($xpath, "dfrn:location/text()", $entry);
- $georsspoint = $xpath->query("georss:point", $entry);
- if ($georsspoint) {
- $item["coord"] = $georsspoint->item(0)->nodeValue;
- }
+ $item["coord"] = XML::getFirstNodeValue($xpath, "georss:point", $entry);
- $item["private"] = $xpath->query("dfrn:private/text()", $entry)->item(0)->nodeValue;
+ $item["private"] = XML::getFirstNodeValue($xpath, "dfrn:private/text()", $entry);
- $item["extid"] = $xpath->query("dfrn:extid/text()", $entry)->item(0)->nodeValue;
+ $item["extid"] = XML::getFirstNodeValue($xpath, "dfrn:extid/text()", $entry);
- if ($xpath->query("dfrn:bookmark/text()", $entry)->item(0)->nodeValue == "true") {
+ if (XML::getFirstNodeValue($xpath, "dfrn:bookmark/text()", $entry) == "true") {
$item["bookmark"] = true;
}
@@ -2496,18 +2493,18 @@ class DFRN
}
}
- $item["guid"] = $xpath->query("dfrn:diaspora_guid/text()", $entry)->item(0)->nodeValue;
+ $item["guid"] = XML::getFirstNodeValue($xpath, "dfrn:diaspora_guid/text()", $entry);
// We store the data from "dfrn:diaspora_signature" in a different table, this is done in "Item::insert"
- $dsprsig = unxmlify($xpath->query("dfrn:diaspora_signature/text()", $entry)->item(0)->nodeValue);
+ $dsprsig = unxmlify(XML::getFirstNodeValue($xpath, "dfrn:diaspora_signature/text()", $entry));
if ($dsprsig != "") {
$item["dsprsig"] = $dsprsig;
}
- $item["verb"] = $xpath->query("activity:verb/text()", $entry)->item(0)->nodeValue;
+ $item["verb"] = XML::getFirstNodeValue($xpath, "activity:verb/text()", $entry);
- if ($xpath->query("activity:object-type/text()", $entry)->item(0)->nodeValue != "") {
- $item["object-type"] = $xpath->query("activity:object-type/text()", $entry)->item(0)->nodeValue;
+ if (XML::getFirstNodeValue($xpath, "activity:object-type/text()", $entry) != "") {
+ $item["object-type"] = XML::getFirstNodeValue($xpath, "activity:object-type/text()", $entry);
}
$object = $xpath->query("activity:object", $entry)->item(0);
@@ -2544,8 +2541,10 @@ class DFRN
$termhash = array_shift($parts);
$termurl = implode(":", $parts);
- if (strlen($item["tag"])) {
+ if (!empty($item["tag"])) {
$item["tag"] .= ",";
+ } else {
+ $item["tag"] = "";
}
$item["tag"] .= $termhash . "[url=" . $termurl . "]" . $term . "[/url]";
@@ -2561,7 +2560,7 @@ class DFRN
self::parseLinks($links, $item);
}
- $item['conversation-uri'] = $xpath->query('ostatus:conversation/text()', $entry)->item(0)->nodeValue;
+ $item['conversation-uri'] = XML::getFirstNodeValue($xpath, 'ostatus:conversation/text()', $entry);
$conv = $xpath->query('ostatus:conversation', $entry);
if (is_object($conv->item(0))) {
@@ -2747,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;
@@ -2835,11 +2834,11 @@ class DFRN
logger("Import DFRN message for user " . $importer["importer_uid"] . " from contact " . $importer["id"], LOGGER_DEBUG);
// is it a public forum? Private forums aren't exposed with this method
- $forum = intval($xpath->evaluate("/atom:feed/dfrn:community/text()")->item(0)->nodeValue);
+ $forum = intval(XML::getFirstNodeValue($xpath, "/atom:feed/dfrn:community/text()"));
// The account type is new since 3.5.1
if ($xpath->query("/atom:feed/dfrn:account_type")->length > 0) {
- $accounttype = intval($xpath->evaluate("/atom:feed/dfrn:account_type/text()")->item(0)->nodeValue);
+ $accounttype = intval(XML::getFirstNodeValue($xpath, "/atom:feed/dfrn:account_type/text()"));
if ($accounttype != $importer["contact-type"]) {
dba::update('contact', ['contact-type' => $accounttype], ['id' => $importer["id"]]);
@@ -2887,7 +2886,7 @@ class DFRN
$newentries = [];
$entries = $xpath->query("/atom:feed/atom:entry");
foreach ($entries as $entry) {
- $created = $xpath->query("atom:published/text()", $entry)->item(0)->nodeValue;
+ $created = XML::getFirstNodeValue($xpath, "atom:published/text()", $entry);
$newentries[strtotime($created)] = $entry;
}
diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php
index d567be144..2ce54317e 100644
--- a/src/Protocol/Diaspora.php
+++ b/src/Protocol/Diaspora.php
@@ -1349,7 +1349,7 @@ class Diaspora
$author = "";
// Fetch the author - for the old and the new Diaspora version
- if ($source_xml->post->status_message->diaspora_handle) {
+ if ($source_xml->post->status_message && $source_xml->post->status_message->diaspora_handle) {
$author = (string)$source_xml->post->status_message->diaspora_handle;
} elseif ($source_xml->author && ($source_xml->getName() == "status_message")) {
$author = (string)$source_xml->author;
@@ -2165,7 +2165,7 @@ class Diaspora
}
// Send all existing comments and likes to the requesting server
- $comments = Item::select(['id', 'verb', 'self'], ['parent' => $item['id']]);
+ $comments = Item::select(['id', 'parent', 'verb', 'self'], ['parent' => $item['id']]);
while ($comment = Item::fetch($comments)) {
if ($comment['id'] == $comment['parent']) {
continue;
diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php
index 29ab21d1f..7be2ef8b4 100644
--- a/src/Protocol/Feed.php
+++ b/src/Protocol/Feed.php
@@ -11,6 +11,7 @@ use Friendica\Core\System;
use Friendica\Model\Item;
use Friendica\Util\Network;
use Friendica\Content\Text\HTML;
+use Friendica\Util\XML;
use dba;
use DOMDocument;
@@ -131,11 +132,11 @@ class Feed {
if ($value != "") {
$author["author-nick"] = $value;
}
- $value = $xpath->evaluate('atom:author/poco:address/poco:formatted/text()')->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:address/poco:formatted/text()');
if ($value != "") {
$author["author-location"] = $value;
}
- $value = $xpath->evaluate('atom:author/poco:note/text()')->item(0)->nodeValue;
+ $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:note/text()');
if ($value != "") {
$author["author-about"] = $value;
}
@@ -149,9 +150,9 @@ class Feed {
}
}
- $author["edited"] = $author["created"] = $xpath->query('/atom:feed/atom:updated/text()')->item(0)->nodeValue;
+ $author["edited"] = $author["created"] = XML::getFirstNodeValue($xpath, '/atom:feed/atom:updated/text()');
- $author["app"] = $xpath->evaluate('/atom:feed/atom:generator/text()')->item(0)->nodeValue;
+ $author["app"] = XML::getFirstNodeValue($xpath, '/atom:feed/atom:generator/text()');
$entries = $xpath->query('/atom:feed/atom:entry');
}
@@ -226,16 +227,16 @@ class Feed {
}
}
if ($item["plink"] == "") {
- $item["plink"] = $xpath->evaluate('link/text()', $entry)->item(0)->nodeValue;
+ $item["plink"] = XML::getFirstNodeValue($xpath, 'link/text()', $entry);
}
if ($item["plink"] == "") {
- $item["plink"] = $xpath->evaluate('rss:link/text()', $entry)->item(0)->nodeValue;
+ $item["plink"] = XML::getFirstNodeValue($xpath, 'rss:link/text()', $entry);
}
- $item["uri"] = $xpath->evaluate('atom:id/text()', $entry)->item(0)->nodeValue;
+ $item["uri"] = XML::getFirstNodeValue($xpath, 'atom:id/text()', $entry);
if ($item["uri"] == "") {
- $item["uri"] = $xpath->evaluate('guid/text()', $entry)->item(0)->nodeValue;
+ $item["uri"] = XML::getFirstNodeValue($xpath, 'guid/text()', $entry);
}
if ($item["uri"] == "") {
$item["uri"] = $item["plink"];
@@ -257,23 +258,23 @@ class Feed {
}
}
- $item["title"] = $xpath->evaluate('atom:title/text()', $entry)->item(0)->nodeValue;
+ $item["title"] = XML::getFirstNodeValue($xpath, 'atom:title/text()', $entry);
if ($item["title"] == "") {
- $item["title"] = $xpath->evaluate('title/text()', $entry)->item(0)->nodeValue;
+ $item["title"] = XML::getFirstNodeValue($xpath, 'title/text()', $entry);
}
if ($item["title"] == "") {
- $item["title"] = $xpath->evaluate('rss:title/text()', $entry)->item(0)->nodeValue;
+ $item["title"] = XML::getFirstNodeValue($xpath, 'rss:title/text()', $entry);
}
- $published = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue;
+ $published = XML::getFirstNodeValue($xpath, 'atom:published/text()', $entry);
if ($published == "") {
- $published = $xpath->query('pubDate/text()', $entry)->item(0)->nodeValue;
+ $published = XML::getFirstNodeValue($xpath, 'pubDate/text()', $entry);
}
if ($published == "") {
- $published = $xpath->query('dc:date/text()', $entry)->item(0)->nodeValue;
+ $published = XML::getFirstNodeValue($xpath, 'dc:date/text()', $entry);
}
- $updated = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue;
+ $updated = XML::getFirstNodeValue($xpath, 'atom:updated/text()', $entry);
if ($updated == "") {
$updated = $published;
@@ -284,18 +285,18 @@ class Feed {
if ($updated != "") {
$item["edited"] = $updated;
}
- $creator = $xpath->query('author/text()', $entry)->item(0)->nodeValue;
+ $creator = XML::getFirstNodeValue($xpath, 'author/text()', $entry);
if ($creator == "") {
- $creator = $xpath->query('atom:author/atom:name/text()', $entry)->item(0)->nodeValue;
+ $creator = XML::getFirstNodeValue($xpath, 'atom:author/atom:name/text()', $entry);
}
if ($creator == "") {
- $creator = $xpath->query('dc:creator/text()', $entry)->item(0)->nodeValue;
+ $creator = XML::getFirstNodeValue($xpath, 'dc:creator/text()', $entry);
}
if ($creator != "") {
$item["author-name"] = $creator;
}
- $creator = $xpath->query('dc:creator/text()', $entry)->item(0)->nodeValue;
+ $creator = XML::getFirstNodeValue($xpath, 'dc:creator/text()', $entry);
if ($creator != "") {
$item["author-name"] = $creator;
diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php
index 4ef80ddca..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) {
@@ -1173,12 +1171,12 @@ class OStatus
$guid = "";
preg_match("/guid='(.*?)'/ism", $attributes, $matches);
- if ($matches[1] != "") {
+ if (!empty($matches[1])) {
$guid = $matches[1];
}
preg_match('/guid="(.*?)"/ism', $attributes, $matches);
- if ($matches[1] != "") {
+ if (!empty($matches[1])) {
$guid = $matches[1];
}
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"]);
diff --git a/src/Util/XML.php b/src/Util/XML.php
index 8dc540324..03e17a554 100644
--- a/src/Util/XML.php
+++ b/src/Util/XML.php
@@ -431,4 +431,19 @@ class XML
}
return $x;
}
+
+ public static function getFirstNodeValue($xpath, $element, $context = null)
+ {
+ $result = $xpath->evaluate($element, $context);
+ if (!is_object($result)) {
+ return '';
+ }
+
+ $first_item = $result->item(0);
+ if (!is_object($first_item)) {
+ return '';
+ }
+
+ return $first_item->nodeValue;
+ }
}
diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php
index 0c8ff27fa..4e76c68f7 100644
--- a/src/Worker/Delivery.php
+++ b/src/Worker/Delivery.php
@@ -61,7 +61,7 @@ class Delivery extends BaseObject
$condition = ['id' => [$item_id, $parent_id], 'visible' => true, 'moderated' => false];
$params = ['order' => ['id']];
- $itemdata = Item::select([], $condition, $params);
+ $itemdata = Item::select(Item::ITEM_FIELDLIST, $condition, $params);
$items = [];
while ($item = Item::fetch($itemdata)) {
@@ -259,6 +259,10 @@ class Delivery extends BaseObject
return;
}
+ $user = dba::selectFirst('user', [], ['uid' => $target_uid]);
+
+ $target_importer = array_merge($target_importer, $user);
+
// Set the user id. This is important if this is a public contact
$target_importer['importer_uid'] = $target_uid;
DFRN::import($atom, $target_importer);
diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php
index cc08a7d71..b99433f81 100644
--- a/view/theme/vier/theme.php
+++ b/view/theme/vier/theme.php
@@ -29,10 +29,12 @@ function vier_init(App $a)
$a->set_template_engine('smarty3');
- if ($a->argv[0].$a->argv[1] === "profile".$a->user['nickname'] || $a->argv[0] === "network" && local_user()) {
- vier_community_info();
+ if (!empty($a->argv[0]) && !empty($a->argv[1])) {
+ if ($a->argv[0].$a->argv[1] === "profile".$a->user['nickname'] || $a->argv[0] === "network" && local_user()) {
+ vier_community_info();
- $a->page['htmlhead'] .= "
\n";
+ $a->page['htmlhead'] .= "
\n";
+ }
}
if ($a->is_mobile || $a->is_tablet) {
@@ -104,7 +106,7 @@ EOT;
// Hide the left menu bar
/// @TODO maybe move this static array out where it should belong?
- if (($a->page['aside'] == "") && in_array($a->argv[0], ["community", "events", "help", "manage", "notifications",
+ if (empty($a->page['aside']) && in_array($a->argv[0], ["community", "events", "help", "manage", "notifications",
"probe", "webfinger", "login", "invite", "credits"])) {
$a->page['htmlhead'] .= "
";
}