From 0360f7197aac062eb2fecf95969658ca56068deb Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Tue, 10 Jul 2018 14:27:56 +0200 Subject: [PATCH] Several more warnings ... (#5340) * Some more warnings removed * Even more warnings ... * Will it ever end? ;-) * Avoid warning in dbstructure * Origin and OStatus ... * There are more warnings solved ... yeah! * And again ... * We are not done yet * And more ... * And some new places ... * And more in the feeds * Avoid some more * And some backend stuff * Notifications cleared * Some more stuff * and again ... * It's getting fewer ... * Some warnings had been hidden in the notifications * Fix the fix * And another missing one ... * We need the owner here, not the user * Forgotten user * And more ... * And some more warnings disappeared ... * Some more frontend warnings * Some backend warnings removed * Fixed sidebar for "vier" * And more ... * Some more ... * And something for "remote self" * Am I stuck in an endless loop? * Fix: Clear tag and file field on update * Preset page content --- boot.php | 7 +- include/api.php | 3 +- include/conversation.php | 13 ++-- include/enotify.php | 26 ++++---- include/items.php | 12 ++-- include/text.php | 18 ++++-- index.php | 2 +- library/asn1.php | 2 +- mod/dfrn_notify.php | 5 +- mod/dirfind.php | 2 +- mod/display.php | 13 ++-- mod/fetch.php | 3 +- mod/item.php | 18 ++++-- mod/message.php | 8 ++- mod/network.php | 2 +- mod/notifications.php | 5 ++ mod/photo.php | 4 +- mod/photos.php | 3 + mod/ping.php | 3 + mod/poco.php | 4 +- mod/profile.php | 2 + mod/search.php | 5 ++ mod/xrd.php | 4 +- src/App.php | 23 ++++++- src/Content/OEmbed.php | 2 +- src/Content/Text/BBCode.php | 6 +- src/Content/Widget.php | 2 +- src/Database/DBStructure.php | 2 +- src/Model/Contact.php | 22 ++++--- src/Model/GContact.php | 17 +++-- src/Model/Item.php | 24 +++---- src/Model/Profile.php | 16 +++-- src/Module/Login.php | 2 +- src/Module/Magic.php | 10 +-- src/Network/Probe.php | 83 +++++++++++++++--------- src/Object/Image.php | 7 +- src/Protocol/DFRN.php | 5 ++ src/Protocol/Diaspora.php | 8 +-- src/Protocol/Feed.php | 107 +++++++++++++++---------------- src/Protocol/OStatus.php | 70 ++++++++++++-------- src/Protocol/PortableContact.php | 40 +++++++----- src/Util/Network.php | 8 +-- src/Util/ParseUrl.php | 36 ++++++----- src/Util/XML.php | 15 +++++ src/Worker/Delivery.php | 2 +- src/Worker/Queue.php | 3 +- view/theme/frio/php/default.php | 4 +- view/theme/vier/theme.php | 4 +- 48 files changed, 415 insertions(+), 267 deletions(-) diff --git a/boot.php b/boot.php index b45bc5767..03a376165 100644 --- a/boot.php +++ b/boot.php @@ -866,7 +866,7 @@ function goaway($path) */ function local_user() { - if (x($_SESSION, 'authenticated') && x($_SESSION, 'uid')) { + if (!empty($_SESSION['authenticated']) && !empty($_SESSION['uid'])) { return intval($_SESSION['uid']); } return false; @@ -909,6 +909,11 @@ function remote_user() // if (local_user()) { // return false; // } + + if (empty($_SESSION)) { + return false; + } + if (x($_SESSION, 'authenticated') && x($_SESSION, 'visitor_id')) { return intval($_SESSION['visitor_id']); } diff --git a/include/api.php b/include/api.php index dd8daa9e6..4e8e9c232 100644 --- a/include/api.php +++ b/include/api.php @@ -169,7 +169,8 @@ function api_login(App $a) $oauth1 = new FKOAuth1(); // login with oauth try { - list($consumer, $token) = $oauth1->verify_request(OAuthRequest::from_request()); + $request = OAuthRequest::from_request(); + list($consumer, $token) = $oauth1->verify_request($request); if (!is_null($token)) { $oauth1->loginUser($token->uid); Addon::callHooks('logged_in', $a->user); diff --git a/include/conversation.php b/include/conversation.php index 5ce02a55f..de7a13626 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -349,7 +349,10 @@ function localize_item(&$item) // add sparkle links to appropriate permalinks $author = ['uid' => 0, 'id' => $item['author-id'], 'network' => $item['author-network'], 'url' => $item['author-link']]; - $item['plink'] = Contact::magicLinkbyContact($author, $item['plink']); + + if (!empty($item['plink'])) { + $item['plink'] = Contact::magicLinkbyContact($author, $item['plink']); + } } /** @@ -482,7 +485,7 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order = $profile_owner = $a->profile['uid']; if (!$update) { $live_update_div = '
' . "\r\n" - . ""; } } elseif ($mode === 'community') { @@ -631,8 +634,8 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order = $tmp_item = [ 'template' => $tpl, - 'id' => (($preview) ? 'P0' : $item['item_id']), - 'guid' => (($preview) ? 'Q0' : $item['guid']), + 'id' => ($preview ? 'P0' : $item['id']), + 'guid' => ($preview ? 'Q0' : $item['guid']), 'network' => $item['network'], 'network_name' => ContactSelector::networkToName($item['network'], $profile_link), 'linktitle' => L10n::t('View %s\'s profile @ %s', $profile_name, $item['author-link']), @@ -679,7 +682,7 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order = $arr = ['item' => $item, 'output' => $tmp_item]; Addon::callHooks('display_item', $arr); - $threads[$threadsid]['id'] = $item['item_id']; + $threads[$threadsid]['id'] = $item['id']; $threads[$threadsid]['network'] = $item['network']; $threads[$threadsid]['items'] = [$arr['output']]; diff --git a/include/enotify.php b/include/enotify.php index f33b16f50..a19693816 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -34,7 +34,7 @@ function notification($params) $siteurl = System::baseUrl(true); $thanks = L10n::t('Thank You,'); $sitename = $a->config['sitename']; - if (!x($a->config['admin_name'])) { + if (empty($a->config['admin_name'])) { $site_admin = L10n::t('%s Administrator', $sitename); } else { $site_admin = L10n::t('%1$s, %2$s Administrator', $a->config['admin_name'], $sitename); @@ -93,6 +93,8 @@ function notification($params) } if ($params['type'] == NOTIFY_MAIL) { + $itemlink = $siteurl.'/message/'.$params['item']['id']; + $subject = L10n::t('[Friendica:Notify] New mail received at %s', $sitename); $preamble = L10n::t('%1$s sent you a new private message at %2$s.', $params['source_name'], $sitename); @@ -101,7 +103,6 @@ function notification($params) $sitelink = L10n::t('Please visit %s to view and/or reply to your private messages.'); $tsitelink = sprintf($sitelink, $siteurl.'/message/'.$params['item']['id']); $hsitelink = sprintf($sitelink, ''.$sitename.''); - $itemlink = $siteurl.'/message/'.$params['item']['id']; } if ($params['type'] == NOTIFY_COMMENT) { @@ -130,10 +131,11 @@ function notification($params) $item = null; if ($params['otype'] === 'item' && $parent_id) { - $item = Item::selectFirstForUser($params['uid'], [], ['id' => $parent_id]); + $item = Item::selectFirstForUser($params['uid'], Item::ITEM_FIELDLIST, ['id' => $parent_id]); } $item_post_type = item_post_type($item); + $itemlink = $item['plink']; // "a post" $dest_str = L10n::t('%1$s commented on [url=%2$s]a %3$s[/url]', @@ -242,6 +244,7 @@ function notification($params) } if ($params['type'] == NOTIFY_TAGSHARE) { + $itemlink = $params['link']; $subject = L10n::t('[Friendica:Notify] %s tagged your post', $params['source_name']); $preamble = L10n::t('%1$s tagged your post at %2$s', $params['source_name'], $sitename); @@ -253,10 +256,10 @@ function notification($params) $sitelink = L10n::t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); - $itemlink = $params['link']; } if ($params['type'] == NOTIFY_INTRO) { + $itemlink = $params['link']; $subject = L10n::t('[Friendica:Notify] Introduction received'); $preamble = L10n::t('You\'ve received an introduction from \'%1$s\' at %2$s', $params['source_name'], $sitename); @@ -270,7 +273,6 @@ function notification($params) $sitelink = L10n::t('Please visit %s to approve or reject the introduction.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); - $itemlink = $params['link']; switch ($params['verb']) { case ACTIVITY_FRIEND: @@ -300,6 +302,7 @@ function notification($params) } if ($params['type'] == NOTIFY_SUGGEST) { + $itemlink = $params['link']; $subject = L10n::t('[Friendica:Notify] Friend suggestion received'); $preamble = L10n::t('You\'ve received a friend suggestion from \'%1$s\' at %2$s', $params['source_name'], $sitename); @@ -316,11 +319,11 @@ function notification($params) $sitelink = L10n::t('Please visit %s to approve or reject the suggestion.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); - $itemlink = $params['link']; } if ($params['type'] == NOTIFY_CONFIRM) { if ($params['verb'] == ACTIVITY_FRIEND) { // mutual connection + $itemlink = $params['link']; $subject = L10n::t('[Friendica:Notify] Connection accepted'); $preamble = L10n::t('\'%1$s\' has accepted your connection request at %2$s', $params['source_name'], $sitename); @@ -334,8 +337,8 @@ function notification($params) $sitelink = L10n::t('Please visit %s if you wish to make any changes to this relationship.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); - $itemlink = $params['link']; } else { // ACTIVITY_FOLLOW + $itemlink = $params['link']; $subject = L10n::t('[Friendica:Notify] Connection accepted'); $preamble = L10n::t('\'%1$s\' has accepted your connection request at %2$s', $params['source_name'], $sitename); @@ -351,13 +354,13 @@ function notification($params) $sitelink = L10n::t('Please visit %s if you wish to make any changes to this relationship.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, ''.$sitename.''); - $itemlink = $params['link']; } } if ($params['type'] == NOTIFY_SYSTEM) { switch($params['event']) { case "SYSTEM_REGISTER_REQUEST": + $itemlink = $params['link']; $subject = L10n::t('[Friendica System Notify]') . ' ' . L10n::t('registration request'); $preamble = L10n::t('You\'ve received a registration request from \'%1$s\' at %2$s', $params['source_name'], $sitename); @@ -375,7 +378,6 @@ function notification($params) $sitelink = L10n::t('Please visit %s to approve or reject the request.'); $tsitelink = sprintf($sitelink, $params['link']); $hsitelink = sprintf($sitelink, ''.$sitename.'

'); - $itemlink = $params['link']; break; case "SYSTEM_DB_UPDATE_FAIL": break; @@ -572,7 +574,7 @@ function notification($params) $datarray['sitename'] = $sitename; $datarray['siteurl'] = $siteurl; $datarray['type'] = $params['type']; - $datarray['parent'] = $params['parent']; + $datarray['parent'] = $parent_id; $datarray['source_name'] = $params['source_name']; $datarray['source_link'] = $params['source_link']; $datarray['source_photo'] = $params['source_photo']; @@ -607,7 +609,7 @@ function notification($params) '$source_name' => $datarray['source_name'], '$source_link' => $datarray['source_link'], '$source_photo' => $datarray['source_photo'], - '$username' => $datarray['to_name'], + '$username' => $datarray['username'], '$hsitelink' => $datarray['hsitelink'], '$hitemlink' => $datarray['hitemlink'], '$thanks' => $datarray['thanks'], @@ -628,7 +630,7 @@ function notification($params) '$source_name' => $datarray['source_name'], '$source_link' => $datarray['source_link'], '$source_photo' => $datarray['source_photo'], - '$username' => $datarray['to_name'], + '$username' => $datarray['username'], '$tsitelink' => $datarray['tsitelink'], '$titemlink' => $datarray['titemlink'], '$thanks' => $datarray['thanks'], diff --git a/include/items.php b/include/items.php index ee514c8fc..ab50e159a 100644 --- a/include/items.php +++ b/include/items.php @@ -33,6 +33,8 @@ function add_page_info_data($data, $no_photos = false) { $data["type"] = "link"; } + $data["title"] = defaults($data, "title", ""); + if ((($data["type"] != "link") && ($data["type"] != "video") && ($data["type"] != "photo")) || ($data["title"] == $data["url"])) { return ""; } @@ -47,19 +49,19 @@ function add_page_info_data($data, $no_photos = false) { $text = "[attachment type='".$data["type"]."'"; - if ($data["text"] == "") { + if (empty($data["text"])) { $data["text"] = $data["title"]; } - if ($data["text"] == "") { + if (empty($data["text"])) { $data["text"] = $data["url"]; } - if ($data["url"] != "") { + if (!empty($data["url"])) { $text .= " url='".$data["url"]."'"; } - if ($data["title"] != "") { + if (!empty($data["title"])) { $text .= " title='".$data["title"]."'"; } @@ -427,7 +429,7 @@ function list_post_dates($uid, $wall) { $start_month = DateTimeFormat::utc($dstart, 'Y-m-d'); $end_month = DateTimeFormat::utc($dend, 'Y-m-d'); $str = day_translate(DateTimeFormat::utc($dnow, 'F')); - if (!$ret[$dyear]) { + if (empty($ret[$dyear])) { $ret[$dyear] = []; } $ret[$dyear][] = [$str, $end_month, $start_month]; diff --git a/include/text.php b/include/text.php index 0957d92d7..d6b40dcc2 100644 --- a/include/text.php +++ b/include/text.php @@ -643,13 +643,20 @@ function logger($msg, $level = 0) { } $callers = debug_backtrace(); + + if (count($callers) > 1) { + $function = $callers[1]['function']; + } else { + $function = ''; + } + $logline = sprintf("%s@%s\t[%s]:%s:%s:%s\t%s\n", DateTimeFormat::utcNow(DateTimeFormat::ATOM), $process_id, $LOGGER_LEVELS[$level], basename($callers[0]['file']), $callers[0]['line'], - $callers[1]['function'], + $function, $msg ); @@ -1280,7 +1287,8 @@ function prepare_body(array &$item, $attach = false, $is_preview = false) ]); } - $id = end(explode('/', $the_url)); + $url_parts = explode('/', $the_url); + $id = end($url_parts); $as .= replace_macros(get_markup_template('video_top.tpl'), [ '$video' => [ 'id' => $id, @@ -1710,11 +1718,11 @@ function reltoabs($text, $base) { * @return string */ function item_post_type($item) { - if (intval($item['event-id'])) { + if (!empty($item['event-id'])) { return L10n::t('event'); - } elseif (strlen($item['resource-id'])) { + } elseif (!empty($item['resource-id'])) { return L10n::t('photo'); - } elseif (strlen($item['verb']) && $item['verb'] !== ACTIVITY_POST) { + } elseif (!empty($item['verb']) && $item['verb'] !== ACTIVITY_POST) { return L10n::t('activity'); } elseif ($item['id'] != $item['parent']) { return L10n::t('comment'); diff --git a/index.php b/index.php index f65867feb..ed558e5fe 100644 --- a/index.php +++ b/index.php @@ -128,7 +128,7 @@ if ((x($_GET,'zrl')) && $a->mode == App::MODE_NORMAL) { // Valid profile links contain a path with "/profile/" and no query parameters if ((parse_url($_GET['zrl'], PHP_URL_QUERY) == "") && strstr(parse_url($_GET['zrl'], PHP_URL_PATH), "/profile/")) { - if ($_SESSION["visitor_home"] != $_GET["zrl"]) { + if (defaults($_SESSION, "visitor_home", "") != $_GET["zrl"]) { $_SESSION['my_url'] = $_GET['zrl']; $_SESSION['authenticated'] = 0; } diff --git a/library/asn1.php b/library/asn1.php index ac14a5b16..cda96b6c8 100644 --- a/library/asn1.php +++ b/library/asn1.php @@ -156,7 +156,7 @@ class ASN_BASE { if (($length & ASN_LONG_LEN)==ASN_LONG_LEN){ $tempLength = 0; for ($x=0; $x<($length & (ASN_LONG_LEN-1)); $x++){ - $tempLength = ord($string[$p++]) + ($tempLength * 256); + $tempLength = @ord($string[$p++]) + ($tempLength * 256); } $length = $tempLength; } diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index 10a0a792a..bfbf4c657 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -265,6 +265,8 @@ function dfrn_dispatch_private($user, $postdata) // Set the user id. This is important if this is a public contact $importer['importer_uid'] = $user['uid']; + $importer = array_merge($importer, $user); + logger('Importing post from ' . $msg['author'] . ' to ' . $user['nickname'] . ' with the private envelope.', LOGGER_DEBUG); // Now we should be able to import it @@ -333,7 +335,8 @@ function dfrn_notify_content(App $a) { ); if (!DBM::is_result($r)) { - $status = 1; + logger('No user data found for ' . $a->argv[1] . ' - SQL: ' . $sql_extra); + killme(); } logger("Remote rino version: ".$rino_remote." for ".$r[0]["url"], LOGGER_DATA); diff --git a/mod/dirfind.php b/mod/dirfind.php index dc86f03a6..d72c2d43d 100644 --- a/mod/dirfind.php +++ b/mod/dirfind.php @@ -185,7 +185,7 @@ function dirfind_content(App $a, $prefix = "") { $a->set_pager_itemspage($j->items_page); } - if (count($j->results)) { + if (!empty($j->results)) { $id = 0; diff --git a/mod/display.php b/mod/display.php index 1f2e18708..23f0492c6 100644 --- a/mod/display.php +++ b/mod/display.php @@ -140,29 +140,29 @@ function display_fetchauthor($a, $item) if (!$skip) { $author = ""; preg_match("/author='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") { + if (!empty($matches[1])) { $profiledata["name"] = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); } preg_match('/author="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") { + if (!empty($matches[1])) { $profiledata["name"] = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); } $profile = ""; preg_match("/profile='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") { + if (!empty($matches[1])) { $profiledata["url"] = $matches[1]; } preg_match('/profile="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") { + if (!empty($matches[1])) { $profiledata["url"] = $matches[1]; } $avatar = ""; preg_match("/avatar='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") { + if (!empty($matches[1])) { $profiledata["photo"] = $matches[1]; } preg_match('/avatar="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") { + if (!empty($matches[1])) { $profiledata["photo"] = $matches[1]; } $profiledata["nickname"] = $profiledata["name"]; @@ -212,6 +212,7 @@ function display_content(App $a, $update = false, $update_uid = 0) $item_parent_uri = $item['parent-uri']; } else { $item_id = (($a->argc > 2) ? $a->argv[2] : 0); + $item_parent = $item_id; if ($a->argc == 2) { $item_parent = 0; diff --git a/mod/fetch.php b/mod/fetch.php index da616ad5b..5f1b24a79 100644 --- a/mod/fetch.php +++ b/mod/fetch.php @@ -23,7 +23,8 @@ function fetch_init(App $a) $guid = $a->argv[2]; // Fetch the item - $fields = ['uid', 'title', 'body', 'guid', 'contact-id', 'private', 'created', 'app', 'location', 'coord', 'network']; + $fields = ['uid', 'title', 'body', 'guid', 'contact-id', 'private', 'created', 'app', 'location', 'coord', 'network', + 'event-id', 'resource-id', 'author-link', 'owner-link', 'attach']; $condition = ['wall' => true, 'private' => false, 'guid' => $guid, 'network' => [NETWORK_DFRN, NETWORK_DIASPORA]]; $item = Item::selectFirst($fields, $condition); if (!DBM::is_result($item)) { diff --git a/mod/item.php b/mod/item.php index 4e27a80cf..935b50d03 100644 --- a/mod/item.php +++ b/mod/item.php @@ -219,10 +219,10 @@ function item_post(App $a) { $str_contact_deny = $user['deny_cid']; } else { // use the posted permissions - $str_group_allow = perms2str($_REQUEST['group_allow']); - $str_contact_allow = perms2str($_REQUEST['contact_allow']); - $str_group_deny = perms2str($_REQUEST['group_deny']); - $str_contact_deny = perms2str($_REQUEST['contact_deny']); + $str_group_allow = perms2str(defaults($_REQUEST, 'group_allow', '')); + $str_contact_allow = perms2str(defaults($_REQUEST, 'contact_allow', '')); + $str_group_deny = perms2str(defaults($_REQUEST, 'group_deny', '')); + $str_contact_deny = perms2str(defaults($_REQUEST, 'contact_deny', '')); } $title = notags(trim(defaults($_REQUEST, 'title' , ''))); @@ -245,7 +245,6 @@ function item_post(App $a) { // If this is a comment, set the permissions from the parent. if ($parent_item) { - // for non native networks use the network of the original post as network of the item if (($parent_item['network'] != NETWORK_DIASPORA) && ($parent_item['network'] != NETWORK_OSTATUS) @@ -651,16 +650,18 @@ function item_post(App $a) { $conversation = dba::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $datarray['parent-uri']]); if (DBM::is_result($conversation)) { - if ($r['conversation-uri'] != '') { + if ($conversation['conversation-uri'] != '') { $datarray['conversation-uri'] = $conversation['conversation-uri']; } - if ($r['conversation-href'] != '') { + if ($conversation['conversation-href'] != '') { $datarray['conversation-href'] = $conversation['conversation-href']; } } if ($orig_post) { $datarray['edit'] = true; + } else { + $datarray['edit'] = false; } // Check for hashtags in the body and repair or add hashtag links @@ -674,6 +675,9 @@ function item_post(App $a) { // We set the datarray ID to -1 because in preview mode the dataray // doesn't have an ID. $datarray["id"] = -1; + $datarray["item_id"] = -1; + $datarray["author-network"] = NETWORK_DFRN; + $o = conversation($a,[array_merge($contact_record,$datarray)],'search', false, true); logger('preview: ' . $o); echo json_encode(['preview' => $o]); diff --git a/mod/message.php b/mod/message.php index ddd5d03d6..b414fe0e4 100644 --- a/mod/message.php +++ b/mod/message.php @@ -118,7 +118,7 @@ function message_content(App $a) } // Check if we should do HTML-based delete confirmation - if ($_REQUEST['confirm']) { + if (!empty($_REQUEST['confirm'])) { //
can't take arguments in its "action" parameter // so add any arguments as hidden inputs $query = explode_querystring($a->query_string); @@ -143,7 +143,7 @@ function message_content(App $a) } // Now check how the user responded to the confirmation query - if ($_REQUEST['canceled']) { + if (!empty($_REQUEST['canceled'])) { goaway($_SESSION['return_url']); } @@ -308,8 +308,10 @@ function message_content(App $a) WHERE `mail`.`uid` = %d $sql_extra ORDER BY `mail`.`created` ASC", intval(local_user()) ); + } else { + $messages = false; } - if (!count($messages)) { + if (!DBM::is_result($messages)) { notice(L10n::t('Message not available.') . EOL); return $o; } diff --git a/mod/network.php b/mod/network.php index 98ffd741f..154332f7d 100644 --- a/mod/network.php +++ b/mod/network.php @@ -833,7 +833,7 @@ function networkThreadedView(App $a, $update, $parent) $top_limit = DateTimeFormat::utcNow(); } - $items = dba::p("SELECT `item`.`parent-uri` AS `uri`, 0 AS `item_id`, `item`.$ordering AS `order_date` FROM `item` + $items = dba::p("SELECT `item`.`parent-uri` AS `uri`, 0 AS `item_id`, `item`.$ordering AS `order_date`, `author`.`url` AS `author-link` FROM `item` STRAIGHT_JOIN (SELECT `oid` FROM `term` WHERE `term` IN (SELECT SUBSTR(`term`, 2) FROM `search` WHERE `uid` = ? AND `term` LIKE '#%') AND `otype` = ? AND `type` = ? AND `uid` = 0) AS `term` ON `item`.`id` = `term`.`oid` diff --git a/mod/notifications.php b/mod/notifications.php index 7b63a8dd0..b113be030 100644 --- a/mod/notifications.php +++ b/mod/notifications.php @@ -79,6 +79,7 @@ function notifications_content(App $a) // Get the nav tabs for the notification pages $tabs = $nm->getTabs(); $notif_content = []; + $notif_nocontent = ''; // Notification results per page $perpage = 20; @@ -184,7 +185,11 @@ function notifications_content(App $a) $dfrn_tpl = get_markup_template('netfriend.tpl'); $knowyou = ''; + $lbl_knowyou = ''; $dfrn_text = ''; + $helptext = ''; + $helptext2 = ''; + $helptext3 = ''; if ($it['network'] === NETWORK_DFRN || $it['network'] === NETWORK_DIASPORA) { if ($it['network'] === NETWORK_DFRN) { diff --git a/mod/photo.php b/mod/photo.php index e899d671d..653802d30 100644 --- a/mod/photo.php +++ b/mod/photo.php @@ -39,7 +39,9 @@ function photo_init(App $a) if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { header('HTTP/1.1 304 Not Modified'); header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT"); - header('Etag: ' . $_SERVER['HTTP_IF_NONE_MATCH']); + if (!empty($_SERVER['HTTP_IF_NONE_MATCH'])) { + header('Etag: ' . $_SERVER['HTTP_IF_NONE_MATCH']); + } header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT"); header("Cache-Control: max-age=31536000"); if (function_exists('header_remove')) { diff --git a/mod/photos.php b/mod/photos.php index d969fd327..7c5f539d0 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -101,6 +101,8 @@ function photos_init(App $a) { if (local_user() && $a->data['user']['uid'] == local_user()) { $can_post = true; + } else { + $can_post = false; } if ($ret['success']) { @@ -950,6 +952,7 @@ function photos_content(App $a) $contact = null; $remote_contact = false; $contact_id = 0; + $edit = false; $owner_uid = $a->data['user']['uid']; diff --git a/mod/ping.php b/mod/ping.php index cbd280f53..196758b0d 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -278,6 +278,7 @@ function ping_init(App $a) if (DBM::is_result($intros)) { foreach ($intros as $intro) { $notif = [ + 'id' => 0, 'href' => System::baseUrl() . '/notifications/intros/' . $intro['id'], 'name' => $intro['name'], 'url' => $intro['url'], @@ -293,6 +294,7 @@ function ping_init(App $a) if (DBM::is_result($mails)) { foreach ($mails as $mail) { $notif = [ + 'id' => 0, 'href' => System::baseUrl() . '/message/' . $mail['id'], 'name' => $mail['from-name'], 'url' => $mail['from-url'], @@ -308,6 +310,7 @@ function ping_init(App $a) if (DBM::is_result($regs)) { foreach ($regs as $reg) { $notif = [ + 'id' => 0, 'href' => System::baseUrl() . '/admin/users/', 'name' => $reg['name'], 'url' => $reg['url'], diff --git a/mod/poco.php b/mod/poco.php index de3b42bb7..d263afc9a 100644 --- a/mod/poco.php +++ b/mod/poco.php @@ -23,9 +23,9 @@ function poco_init(App $a) { if ($a->argc > 1) { $user = notags(trim($a->argv[1])); } - if (! x($user)) { + if (empty($user)) { $c = q("SELECT * FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1"); - if (! DBM::is_result($c)) { + if (!DBM::is_result($c)) { System::httpExit(401); } $system_mode = true; diff --git a/mod/profile.php b/mod/profile.php index 93172397b..60741db72 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -282,6 +282,8 @@ function profile_content(App $a, $update = 0) if (!DBM::is_result($r)) { $sql_extra3 = sprintf(" AND `thread`.`contact-id` = %d ", intval(intval($a->profile['contact_id']))); + } else { + $sql_extra3 = ""; } // check if we serve a mobile device and get the user settings diff --git a/mod/search.php b/mod/search.php index 974680d2a..8f89e7200 100644 --- a/mod/search.php +++ b/mod/search.php @@ -74,6 +74,11 @@ function search_init(App $a) { dba::delete('search', ['uid' => local_user(), 'term' => $search]); } + /// @todo Check if there is a case at all that "aside" is prefilled here + if (!isset($a->page['aside'])) { + $a->page['aside'] = ''; + } + $a->page['aside'] .= search_saved_searches(); } else { diff --git a/mod/xrd.php b/mod/xrd.php index d251d41fe..29ee1057a 100644 --- a/mod/xrd.php +++ b/mod/xrd.php @@ -12,14 +12,14 @@ function xrd_init(App $a) { if ($a->argv[0] == 'xrd') { $uri = urldecode(notags(trim($_GET['uri']))); - if ($_SERVER['HTTP_ACCEPT'] == 'application/jrd+json') { + if (defaults($_SERVER, 'HTTP_ACCEPT', '') == 'application/jrd+json') { $mode = 'json'; } else { $mode = 'xml'; } } else { $uri = urldecode(notags(trim($_GET['resource']))); - if ($_SERVER['HTTP_ACCEPT'] == 'application/xrd+xml') { + if (defaults($_SERVER, 'HTTP_ACCEPT', '') == 'application/xrd+xml') { $mode = 'xml'; } else { $mode = 'json'; diff --git a/src/App.php b/src/App.php index a2bdd03df..097b5e541 100644 --- a/src/App.php +++ b/src/App.php @@ -174,7 +174,21 @@ class App $this->callstack['parser'] = []; $this->config = []; - $this->page = []; + + $this->page = [ + 'aside' => '', + 'bottom' => '', + 'content' => '', + 'end' => '', + 'footer' => '', + 'htmlhead' => '', + 'nav' => '', + 'page_title' => '', + 'right_aside' => '', + 'template' => '', + 'title' => '' + ]; + $this->pager = []; $this->query_string = ''; @@ -1154,7 +1168,12 @@ class App } } - $user_theme = defaults($_SESSION, 'theme', $system_theme); + if (!empty($_SESSION)) { + $user_theme = defaults($_SESSION, 'theme', $system_theme); + } else { + $user_theme = $system_theme; + } + // Specific mobile theme override if (($this->is_mobile || $this->is_tablet) && defaults($_SESSION, 'show-mobile', true)) { $system_mobile_theme = Config::get('system', 'mobile-theme'); diff --git a/src/Content/OEmbed.php b/src/Content/OEmbed.php index b09fd2249..360a0dc48 100644 --- a/src/Content/OEmbed.php +++ b/src/Content/OEmbed.php @@ -108,7 +108,7 @@ class OEmbed $txt = '{"type":"error"}'; } else { //save in cache $j = json_decode($txt); - if ($j->type != "error") { + if (!empty($j->type) && $j->type != "error") { dba::insert('oembed', [ 'url' => normalise_link($embedurl), 'maxwidth' => $a->videowidth, diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index b4270fec6..72d20da17 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -540,7 +540,7 @@ class BBCode extends BaseObject private static function convertAttachment($return, $simplehtml = false, $tryoembed = true) { $data = self::getAttachmentData($return); - if (!$data) { + if (empty($data) || empty($data["url"])) { return $return; } @@ -549,7 +549,7 @@ class BBCode extends BaseObject $data["title"] = str_replace(["http://", "https://"], "", $data["title"]); } - if (((strpos($data["text"], "[img=") !== false) || (strpos($data["text"], "[img]") !== false) || Config::get('system', 'always_show_preview')) && ($data["image"] != "")) { + if (((strpos($data["text"], "[img=") !== false) || (strpos($data["text"], "[img]") !== false) || Config::get('system', 'always_show_preview')) && !empty($data["image"])) { $data["preview"] = $data["image"]; $data["image"] = ""; } @@ -567,6 +567,8 @@ class BBCode extends BaseObject throw new Exception('OEmbed is disabled for this attachment.'); } } catch (Exception $e) { + $data["title"] = defaults($data, 'title', $data['url']); + if ($simplehtml != 4) { $return = sprintf('
', $data["type"]); } diff --git a/src/Content/Widget.php b/src/Content/Widget.php index 04dfbb8e0..ba5752012 100644 --- a/src/Content/Widget.php +++ b/src/Content/Widget.php @@ -264,7 +264,7 @@ class Widget $cid = $zcid = 0; - if (is_array($_SESSION['remote'])) { + if (!empty($_SESSION['remote'])) { foreach ($_SESSION['remote'] as $visitor) { if ($visitor['uid'] == $profile_uid) { $cid = $visitor['cid']; diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index 7f758c54d..54e896b69 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -409,7 +409,7 @@ class DBStructure // Compare the field structure field by field foreach ($structure["fields"] AS $fieldname => $parameters) { // Compare the field definition - $field_definition = $database[$name]["fields"][$fieldname]; + $field_definition = defaults($database[$name]["fields"], $fieldname, ['Collation' => '']); // Define the default collation if not given if (!isset($parameters['Collation']) && !empty($field_definition['Collation'])) { diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 1c6225a30..dcd6c37db 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -475,34 +475,34 @@ class Contact extends BaseObject $profile = $default; } - if (($profile["photo"] == "") && isset($default["photo"])) { + if (empty($profile["photo"]) && isset($default["photo"])) { $profile["photo"] = $default["photo"]; } - if (($profile["name"] == "") && isset($default["name"])) { + if (empty($profile["name"]) && isset($default["name"])) { $profile["name"] = $default["name"]; } - if (($profile["network"] == "") && isset($default["network"])) { + if (empty($profile["network"]) && isset($default["network"])) { $profile["network"] = $default["network"]; } - if (($profile["thumb"] == "") && isset($profile["photo"])) { + if (empty($profile["thumb"]) && isset($profile["photo"])) { $profile["thumb"] = $profile["photo"]; } - if (($profile["micro"] == "") && isset($profile["thumb"])) { + if (empty($profile["micro"]) && isset($profile["thumb"])) { $profile["micro"] = $profile["thumb"]; } - if ((($profile["addr"] == "") || ($profile["name"] == "")) && ($profile["gid"] != 0) + if ((empty($profile["addr"]) || empty($profile["name"])) && (defaults($profile, "gid", 0) != 0) && in_array($profile["network"], [NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS]) ) { Worker::add(PRIORITY_LOW, "UpdateGContact", $profile["gid"]); } // Show contact details of Diaspora contacts only if connected - if (($profile["cid"] == 0) && ($profile["network"] == NETWORK_DIASPORA)) { + if ((defaults($profile, "cid", 0) == 0) && (defaults($profile, "network", "") == NETWORK_DIASPORA)) { $profile["location"] = ""; $profile["about"] = ""; $profile["gender"] = ""; @@ -596,7 +596,7 @@ class Contact extends BaseObject $uid = local_user(); } - if ($contact['uid'] != $uid) { + if (empty($contact['uid']) || ($contact['uid'] != $uid)) { if ($uid == 0) { $profile_link = self::magicLink($contact['url']); $menu = ['profile' => [L10n::t('View Profile'), $profile_link, true]]; @@ -1533,8 +1533,12 @@ class Contact extends BaseObject $contact_record = [ 'id' => dba::lastInsertId(), - 'network' => NETWORK_OSTATUS + 'network' => NETWORK_OSTATUS, + 'name' => $name, + 'url' => $url, + 'photo' => $photo ]; + Contact::updateAvatar($photo, $importer["uid"], $contact_record["id"], true); /// @TODO Encapsulate this into a function/method diff --git a/src/Model/GContact.php b/src/Model/GContact.php index 488435331..99660ba60 100644 --- a/src/Model/GContact.php +++ b/src/Model/GContact.php @@ -787,11 +787,11 @@ class GContact // Bugfix: We had an error in the storing of keywords which lead to the "0" // This value is still transmitted via poco. - if ($contact["keywords"] == "0") { + if (!empty($contact["keywords"]) && ($contact["keywords"] == "0")) { unset($contact["keywords"]); } - if ($public_contact[0]["keywords"] == "0") { + if (!empty($public_contact[0]["keywords"]) && ($public_contact[0]["keywords"] == "0")) { $public_contact[0]["keywords"] = ""; } @@ -996,7 +996,7 @@ class GContact $statistics = json_decode($result["body"]); - if (is_object($statistics->config)) { + if (!empty($statistics->config)) { if ($statistics->config->instance_with_ssl) { $server = "https://"; } else { @@ -1006,8 +1006,7 @@ class GContact $server .= $statistics->config->instance_address; $hostname = $statistics->config->instance_address; - } else { - /// @TODO is_object() above means here no object, still $statistics is being used as object + } elseif (!empty($statistics)) { if ($statistics->instance_with_ssl) { $server = "https://"; } else { @@ -1019,7 +1018,7 @@ class GContact $hostname = $statistics->instance_address; } - if (is_object($statistics->users)) { + if (!empty($statistics->users)) { foreach ($statistics->users as $nick => $user) { $profile_url = $server."/".$user->nickname; @@ -1027,9 +1026,13 @@ class GContact "name" => $user->fullname, "addr" => $user->nickname."@".$hostname, "nick" => $user->nickname, - "about" => $user->bio, "network" => NETWORK_OSTATUS, "photo" => System::baseUrl()."/images/person-175.jpg"]; + + if (isset($user->bio)) { + $contact["about"] = $user->bio; + } + self::getId($contact); } } diff --git a/src/Model/Item.php b/src/Model/Item.php index c07733172..670d5b426 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -726,21 +726,21 @@ class Item extends BaseObject $author_owner_fields = ['author-name', 'author-avatar', 'author-link', 'owner-name', 'owner-avatar', 'owner-link']; foreach ($author_owner_fields as $field) { - if (isset($fields[$field])) { + if (array_key_exists($field, $fields)) { $fields[$field] = null; } } if (array_key_exists('tag', $fields)) { $tags = $fields['tag']; - unset($fields['tag']); + $fields['tag'] = null; } else { $tags = ''; } if (array_key_exists('file', $fields)) { $files = $fields['file']; - unset($fields['file']); + $fields['file'] = null; } else { $files = ''; } @@ -1329,12 +1329,7 @@ class Item extends BaseObject if ($item['network'] == NETWORK_PHANTOM) { logger('Missing network. Called by: '.System::callstack(), LOGGER_DEBUG); - $contact = Contact::getDetailsByURL($item['author-link'], $item['uid']); - if (!empty($contact['network'])) { - $item['network'] = $contact["network"]; - } else { - $item['network'] = NETWORK_DFRN; - } + $item['network'] = NETWORK_DFRN; logger("Set network to " . $item["network"] . " for " . $item["uri"], LOGGER_DEBUG); } @@ -1505,7 +1500,11 @@ class Item extends BaseObject put_item_in_cache($item); if ($notify) { + $item['edit'] = false; + $item['parent'] = $parent_id; Addon::callHooks('post_local', $item); + unset($item['edit']); + unset($item['parent']); } else { Addon::callHooks('post_remote', $item); } @@ -1896,6 +1895,8 @@ class Item extends BaseObject return; } + $origin = $item['origin']; + unset($item['id']); unset($item['parent']); unset($item['mention']); @@ -1918,7 +1919,7 @@ class Item extends BaseObject $parents = self::select(['uid', 'origin'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]); while ($parent = dba::fetch($parents)) { $users[$parent['uid']] = $parent['uid']; - if ($parent['origin'] && !$item['origin']) { + if ($parent['origin'] && !$origin) { $origin_uid = $parent['uid']; } } @@ -2449,7 +2450,7 @@ class Item extends BaseObject } // Prevent the forwarding of posts that are forwarded - if ($datarray["extid"] == NETWORK_DFRN) { + if (!empty($datarray["extid"]) && ($datarray["extid"] == NETWORK_DFRN)) { logger('Already forwarded', LOGGER_DEBUG); return false; } @@ -2940,6 +2941,7 @@ class Item extends BaseObject 'type' => 'activity', 'wall' => $item['wall'], 'origin' => 1, + 'network' => NETWORK_DFRN, 'gravity' => GRAVITY_ACTIVITY, 'parent' => $item['id'], 'parent-uri' => $item['uri'], diff --git a/src/Model/Profile.php b/src/Model/Profile.php index c006f1840..866065ec7 100644 --- a/src/Model/Profile.php +++ b/src/Model/Profile.php @@ -40,11 +40,11 @@ class Profile { $location = ''; - if ($profile['locality']) { + if (!empty($profile['locality'])) { $location .= $profile['locality']; } - if ($profile['region'] && ($profile['locality'] != $profile['region'])) { + if (!empty($profile['region']) && (defaults($profile, 'locality', '') != $profile['region'])) { if ($location) { $location .= ', '; } @@ -52,7 +52,7 @@ class Profile $location .= $profile['region']; } - if ($profile['country-name']) { + if (!empty($profile['country-name'])) { if ($location) { $location .= ', '; } @@ -307,6 +307,8 @@ class Profile $connect = false; } + $profile_url = ''; + // Is the local user already connected to that user? if ($connect && local_user()) { if (isset($profile['url'])) { @@ -437,9 +439,9 @@ class Profile 'fullname' => $profile['name'], 'firstname' => $firstname, 'lastname' => $lastname, - 'photo300' => $profile['contact_photo'], - 'photo100' => $profile['contact_thumb'], - 'photo50' => $profile['contact_micro'], + 'photo300' => defaults($profile, 'contact_photo', ''), + 'photo100' => defaults($profile, 'contact_thumb', ''), + 'photo50' => defaults($profile, 'contact_micro', ''), ]; } else { $diaspora = false; @@ -497,7 +499,7 @@ class Profile $p['photo'] = proxy_url($p['photo'], false, PROXY_SIZE_SMALL); } - $p['url'] = Contact::magicLink($p['url']); + $p['url'] = Contact::magicLink(defaults($p, 'url', $profile_url)); $tpl = get_markup_template('profile_vcard.tpl'); $o .= replace_macros($tpl, [ diff --git a/src/Module/Login.php b/src/Module/Login.php index 7d6470620..4df03f26d 100644 --- a/src/Module/Login.php +++ b/src/Module/Login.php @@ -248,7 +248,7 @@ class Login extends BaseModule // Make sure to refresh the last login time for the user if the user // stays logged in for a long time, e.g. with "Remember Me" $login_refresh = false; - if (!x($_SESSION['last_login_date'])) { + if (empty($_SESSION['last_login_date'])) { $_SESSION['last_login_date'] = DateTimeFormat::utcNow(); } if (strcmp(DateTimeFormat::utc('now - 12 hours'), $_SESSION['last_login_date']) > 0) { diff --git a/src/Module/Magic.php b/src/Module/Magic.php index ce41f228d..0b6874069 100644 --- a/src/Module/Magic.php +++ b/src/Module/Magic.php @@ -13,7 +13,7 @@ use dba; /** * Magic Auth (remote authentication) module. - * + * * Ported from Hubzilla: https://framagit.org/hubzilla/core/blob/master/Zotlabs/Module/Magic.php */ class Magic extends BaseModule @@ -31,7 +31,7 @@ class Magic extends BaseModule $test = ((x($_REQUEST, 'test')) ? intval($_REQUEST['test']) : 0); $owa = ((x($_REQUEST, 'owa')) ? intval($_REQUEST['owa']) : 0); - // NOTE: I guess $dest isn't just the profile url (could be also + // NOTE: I guess $dest isn't just the profile url (could be also // other profile pages e.g. photo). We need to find a solution // to be able to redirct to other pages than the contact profile. $cid = Contact::getIdForURL($dest); @@ -48,8 +48,8 @@ class Magic extends BaseModule $contact = dba::selectFirst('contact', ['id', 'nurl', 'url'], ['id' => $cid]); // Redirect if the contact is already authenticated on this site. - if (array_key_exists('id', $a->contact) && strpos($contact['nurl'], normalise_link(self::getApp()->get_baseurl())) !== false) { - if($test) { + if (!empty($a->contact) && array_key_exists('id', $a->contact) && strpos($contact['nurl'], normalise_link(self::getApp()->get_baseurl())) !== false) { + if ($test) { $ret['success'] = true; $ret['message'] .= 'Local site - you are already authenticated.' . EOL; return $ret; @@ -111,7 +111,7 @@ class Magic extends BaseModule } } - if($test) { + if ($test) { $ret['message'] = 'Not authenticated or invalid arguments' . EOL; return $ret; } diff --git a/src/Network/Probe.php b/src/Network/Probe.php index 8e44c8a50..d706089e8 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -697,6 +697,14 @@ class Probe } } + if (empty($result["network"])) { + $result["network"] = NETWORK_PHANTOM; + } + + if (empty($result["url"])) { + $result["url"] = $uri; + } + logger($uri." is ".$result["network"], LOGGER_DEBUG); if (empty($result["baseurl"])) { @@ -980,7 +988,7 @@ class Probe } } - if (is_array($webfinger["aliases"])) { + if (!empty($webfinger["aliases"]) && is_array($webfinger["aliases"])) { foreach ($webfinger["aliases"] as $alias) { if (normalise_link($alias) != normalise_link($data["url"]) && ! strstr($alias, "@")) { $data["alias"] = $alias; @@ -990,7 +998,7 @@ class Probe } } - if (substr($webfinger["subject"], 0, 5) == "acct:") { + if (!empty($webfinger["subject"]) && (substr($webfinger["subject"], 0, 5) == "acct:")) { $data["addr"] = substr($webfinger["subject"], 5); } @@ -1049,13 +1057,17 @@ class Probe return false; } + if (!isset($data["baseurl"])) { + $data["baseurl"] = ""; + } + if ($vcards->length > 0) { $vcard = $vcards->item(0); // We have to discard the guid from the hcard in favour of the guid from lrdd // Reason: Hubzilla doesn't use the value "uid" in the hcard like Diaspora does. $search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' uid ')]", $vcard); // */ - if (($search->length > 0) && ($data["guid"] == "")) { + if (($search->length > 0) && empty($data["guid"])) { $data["guid"] = $search->item(0)->nodeValue; } @@ -1089,21 +1101,23 @@ class Probe } $avatar = []; - $photos = $xpath->query("//*[contains(concat(' ', @class, ' '), ' photo ') or contains(concat(' ', @class, ' '), ' avatar ')]", $vcard); // */ - foreach ($photos as $photo) { - $attr = []; - foreach ($photo->attributes as $attribute) { - $attr[$attribute->name] = trim($attribute->value); - } + if (!empty($vcard)) { + $photos = $xpath->query("//*[contains(concat(' ', @class, ' '), ' photo ') or contains(concat(' ', @class, ' '), ' avatar ')]", $vcard); // */ + foreach ($photos as $photo) { + $attr = []; + foreach ($photo->attributes as $attribute) { + $attr[$attribute->name] = trim($attribute->value); + } - if (isset($attr["src"]) && isset($attr["width"])) { - $avatar[$attr["width"]] = $attr["src"]; - } + if (isset($attr["src"]) && isset($attr["width"])) { + $avatar[$attr["width"]] = $attr["src"]; + } - // We don't have a width. So we just take everything that we got. - // This is a Hubzilla workaround which doesn't send a width. - if ((sizeof($avatar) == 0) && !empty($attr["src"])) { - $avatar[] = $attr["src"]; + // We don't have a width. So we just take everything that we got. + // This is a Hubzilla workaround which doesn't send a width. + if ((sizeof($avatar) == 0) && !empty($attr["src"])) { + $avatar[] = $attr["src"]; + } } } @@ -1177,7 +1191,7 @@ class Probe return false; } - if (is_array($webfinger["aliases"])) { + if (!empty($webfinger["aliases"]) && is_array($webfinger["aliases"])) { foreach ($webfinger["aliases"] as $alias) { if (normalise_link($alias) != normalise_link($data["url"]) && ! strstr($alias, "@")) { $data["alias"] = $alias; @@ -1207,7 +1221,9 @@ class Probe $data["network"] = NETWORK_DIASPORA; // The Diaspora handle must always be lowercase - $data["addr"] = strtolower($data["addr"]); + if (!empty($data["addr"])) { + $data["addr"] = strtolower($data["addr"]); + } // We have to overwrite the detected value for "notify" since Hubzilla doesn't send it $data["notify"] = $data["baseurl"] . "/receive/users/" . $data["guid"]; @@ -1231,7 +1247,7 @@ class Probe { $data = []; - if (is_array($webfinger["aliases"])) { + if (!empty($webfinger["aliases"]) && is_array($webfinger["aliases"])) { foreach ($webfinger["aliases"] as $alias) { if (strstr($alias, "@") && !strstr(normalise_link($alias), "http://")) { $data["addr"] = str_replace('acct:', '', $alias); @@ -1239,7 +1255,7 @@ class Probe } } - if (is_string($webfinger["subject"]) && strstr($webfinger["subject"], "@") + if (!empty($webfinger["subject"]) && strstr($webfinger["subject"], "@") && !strstr(normalise_link($webfinger["subject"]), "http://") ) { $data["addr"] = str_replace('acct:', '', $webfinger["subject"]); @@ -1304,32 +1320,35 @@ class Probe return false; } $feed = $ret['body']; + $dummy1 = null; + $dummy2 = null; + $dummy2 = null; $feed_data = Feed::import($feed, $dummy1, $dummy2, $dummy3, true); if (!$feed_data) { return false; } - if ($feed_data["header"]["author-name"] != "") { + if (!empty($feed_data["header"]["author-name"])) { $data["name"] = $feed_data["header"]["author-name"]; } - if ($feed_data["header"]["author-nick"] != "") { + if (!empty($feed_data["header"]["author-nick"])) { $data["nick"] = $feed_data["header"]["author-nick"]; } - if ($feed_data["header"]["author-avatar"] != "") { + if (!empty($feed_data["header"]["author-avatar"])) { $data["photo"] = self::fixAvatar($feed_data["header"]["author-avatar"], $data["url"]); } - if ($feed_data["header"]["author-id"] != "") { + if (!empty($feed_data["header"]["author-id"])) { $data["alias"] = $feed_data["header"]["author-id"]; } - if ($feed_data["header"]["author-location"] != "") { + if (!empty($feed_data["header"]["author-location"])) { $data["location"] = $feed_data["header"]["author-location"]; } - if ($feed_data["header"]["author-about"] != "") { + if (!empty($feed_data["header"]["author-about"])) { $data["about"] = $feed_data["header"]["author-about"]; } // OStatus has serious issues when the the url doesn't fit (ssl vs. non ssl) // So we take the value that we just fetched, although the other one worked as well - if ($feed_data["header"]["author-link"] != "") { + if (!empty($feed_data["header"]["author-link"])) { $data["url"] = $feed_data["header"]["author-link"]; } @@ -1528,26 +1547,26 @@ class Probe return self::feed($feed_url, false); } - if ($feed_data["header"]["author-name"] != "") { + if (!empty($feed_data["header"]["author-name"])) { $data["name"] = $feed_data["header"]["author-name"]; } - if ($feed_data["header"]["author-nick"] != "") { + if (!empty($feed_data["header"]["author-nick"])) { $data["nick"] = $feed_data["header"]["author-nick"]; } - if ($feed_data["header"]["author-avatar"] != "") { + if (!empty($feed_data["header"]["author-avatar"])) { $data["photo"] = $feed_data["header"]["author-avatar"]; } - if ($feed_data["header"]["author-id"] != "") { + if (!empty($feed_data["header"]["author-id"])) { $data["alias"] = $feed_data["header"]["author-id"]; } $data["url"] = $url; $data["poll"] = $url; - if ($feed_data["header"]["author-link"] != "") { + if (!empty($feed_data["header"]["author-link"])) { $data["baseurl"] = $feed_data["header"]["author-link"]; } else { $data["baseurl"] = $data["url"]; diff --git a/src/Object/Image.php b/src/Object/Image.php index 7e6b758f1..50e93672d 100644 --- a/src/Object/Image.php +++ b/src/Object/Image.php @@ -731,8 +731,11 @@ class Image $headers=[]; $h = explode("\n", $a->get_curl_headers()); foreach ($h as $l) { - list($k,$v) = array_map("trim", explode(":", trim($l), 2)); - $headers[$k] = $v; + $data = array_map("trim", explode(":", trim($l), 2)); + if (count($data) > 1) { + list($k,$v) = $data; + $headers[$k] = $v; + } } if (array_key_exists('Content-Type', $headers)) $type = $headers['Content-Type']; diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index e37bfae56..60daa378c 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -77,6 +77,11 @@ class DFRN } foreach ($items as $item) { + // These values aren't sent when sending from the queue. + /// @todo Check if we can set these values from the queue or if they are needed at all. + $item["entry:comment-allow"] = defaults($item, "entry:comment-allow", true); + $item["entry:cid"] = defaults($item, "entry:cid", 0); + $entry = self::entry($doc, "text", $item, $owner, $item["entry:comment-allow"], $item["entry:cid"]); $root->appendChild($entry); } diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index ccd825d4e..d0fc182a2 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -3352,12 +3352,12 @@ class Diaspora $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]; } @@ -3382,12 +3382,12 @@ class Diaspora $profile = ""; preg_match("/profile='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") { + if (!empty($matches[1])) { $profile = $matches[1]; } preg_match('/profile="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") { + if (!empty($matches[1])) { $profile = $matches[1]; } diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index 7be2ef8b4..a68a2bd67 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -45,7 +45,7 @@ class Feed { } else { logger("Test Atom/RSS feed", LOGGER_DEBUG); } - if ($xml == "") { + if (empty($xml)) { logger('XML is empty.', LOGGER_DEBUG); return; } @@ -74,18 +74,18 @@ class Feed { // Is it RDF? if ($xpath->query('/rdf:RDF/rss:channel')->length > 0) { - $author["author-link"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:link/text()')->item(0)->nodeValue; - $author["author-name"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:title/text()')->item(0)->nodeValue; + $author["author-link"] = XML::getFirstNodeValue($xpath, '/rdf:RDF/rss:channel/rss:link/text()'); + $author["author-name"] = XML::getFirstNodeValue($xpath, '/rdf:RDF/rss:channel/rss:title/text()'); - if ($author["author-name"] == "") { - $author["author-name"] = $xpath->evaluate('/rdf:RDF/rss:channel/rss:description/text()')->item(0)->nodeValue; + if (empty($author["author-name"])) { + $author["author-name"] = XML::getFirstNodeValue($xpath, '/rdf:RDF/rss:channel/rss:description/text()'); } $entries = $xpath->query('/rdf:RDF/rss:item'); } // Is it Atom? if ($xpath->query('/atom:feed')->length > 0) { - $alternate = $xpath->query("atom:link[@rel='alternate']")->item(0)->attributes; + $alternate = XML::getFirstAttributes($xpath, "atom:link[@rel='alternate']"); if (is_object($alternate)) { foreach ($alternate AS $attribute) { if ($attribute->name == "href") { @@ -94,11 +94,8 @@ class Feed { } } - if ($author["author-link"] == "") { - $author["author-link"] = $author["author-id"]; - } - if ($author["author-link"] == "") { - $self = $xpath->query("atom:link[@rel='self']")->item(0)->attributes; + if (empty($author["author-link"])) { + $self = XML::getFirstAttributes($xpath, "atom:link[@rel='self']"); if (is_object($self)) { foreach ($self AS $attribute) { if ($attribute->name == "href") { @@ -108,27 +105,27 @@ class Feed { } } - if ($author["author-link"] == "") { - $author["author-link"] = $xpath->evaluate('/atom:feed/atom:id/text()')->item(0)->nodeValue; + if (empty($author["author-link"])) { + $author["author-link"] = XML::getFirstNodeValue($xpath, '/atom:feed/atom:id/text()'); } - $author["author-avatar"] = $xpath->evaluate('/atom:feed/atom:logo/text()')->item(0)->nodeValue; + $author["author-avatar"] = XML::getFirstNodeValue($xpath, '/atom:feed/atom:logo/text()'); - $author["author-name"] = $xpath->evaluate('/atom:feed/atom:title/text()')->item(0)->nodeValue; + $author["author-name"] = XML::getFirstNodeValue($xpath, '/atom:feed/atom:title/text()'); - if ($author["author-name"] == "") { - $author["author-name"] = $xpath->evaluate('/atom:feed/atom:subtitle/text()')->item(0)->nodeValue; + if (empty($author["author-name"])) { + $author["author-name"] = XML::getFirstNodeValue($xpath, '/atom:feed/atom:subtitle/text()'); } - if ($author["author-name"] == "") { - $author["author-name"] = $xpath->evaluate('/atom:feed/atom:author/atom:name/text()')->item(0)->nodeValue; + if (empty($author["author-name"])) { + $author["author-name"] = XML::getFirstNodeValue($xpath, '/atom:feed/atom:author/atom:name/text()'); } - $value = $xpath->evaluate('atom:author/poco:displayName/text()')->item(0)->nodeValue; + $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:displayName/text()'); if ($value != "") { $author["author-name"] = $value; } if ($simulate) { - $author["author-id"] = $xpath->evaluate('/atom:feed/atom:author/atom:uri/text()')->item(0)->nodeValue; + $author["author-id"] = XML::getFirstNodeValue($xpath, '/atom:feed/atom:author/atom:uri/text()'); - $value = $xpath->evaluate('atom:author/poco:preferredUsername/text()')->item(0)->nodeValue; + $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:preferredUsername/text()'); if ($value != "") { $author["author-nick"] = $value; } @@ -140,7 +137,7 @@ class Feed { if ($value != "") { $author["author-about"] = $value; } - $avatar = $xpath->evaluate("atom:author/atom:link[@rel='avatar']")->item(0)->attributes; + $avatar = XML::getFirstAttributes($xpath, "atom:author/atom:link[@rel='avatar']"); if (is_object($avatar)) { foreach ($avatar AS $attribute) { if ($attribute->name == "href") { @@ -159,20 +156,20 @@ class Feed { // Is it RSS? if ($xpath->query('/rss/channel')->length > 0) { - $author["author-link"] = $xpath->evaluate('/rss/channel/link/text()')->item(0)->nodeValue; + $author["author-link"] = XML::getFirstNodeValue($xpath, '/rss/channel/link/text()'); - $author["author-name"] = $xpath->evaluate('/rss/channel/title/text()')->item(0)->nodeValue; - $author["author-avatar"] = $xpath->evaluate('/rss/channel/image/url/text()')->item(0)->nodeValue; + $author["author-name"] = XML::getFirstNodeValue($xpath, '/rss/channel/title/text()'); + $author["author-avatar"] = XML::getFirstNodeValue($xpath, '/rss/channel/image/url/text()'); - if ($author["author-name"] == "") { - $author["author-name"] = $xpath->evaluate('/rss/channel/copyright/text()')->item(0)->nodeValue; + if (empty($author["author-name"])) { + $author["author-name"] = XML::getFirstNodeValue($xpath, '/rss/channel/copyright/text()'); } - if ($author["author-name"] == "") { - $author["author-name"] = $xpath->evaluate('/rss/channel/description/text()')->item(0)->nodeValue; + if (empty($author["author-name"])) { + $author["author-name"] = XML::getFirstNodeValue($xpath, '/rss/channel/description/text()'); } - $author["edited"] = $author["created"] = $xpath->query('/rss/channel/pubDate/text()')->item(0)->nodeValue; + $author["edited"] = $author["created"] = XML::getFirstNodeValue($xpath, '/rss/channel/pubDate/text()'); - $author["app"] = $xpath->evaluate('/rss/channel/generator/text()')->item(0)->nodeValue; + $author["app"] = XML::getFirstNodeValue($xpath, '/rss/channel/generator/text()'); $entries = $xpath->query('/rss/channel/item'); } @@ -180,7 +177,7 @@ class Feed { if (!$simulate) { $author["author-link"] = $contact["url"]; - if ($author["author-name"] == "") { + if (empty($author["author-name"])) { $author["author-name"] = $contact["name"]; } $author["author-avatar"] = $contact["thumb"]; @@ -215,9 +212,9 @@ class Feed { $item = array_merge($header, $author); - $alternate = $xpath->query("atom:link[@rel='alternate']", $entry)->item(0)->attributes; + $alternate = XML::getFirstAttributes($xpath, "atom:link[@rel='alternate']", $entry); if (!is_object($alternate)) { - $alternate = $xpath->query("atom:link", $entry)->item(0)->attributes; + $alternate = XML::getFirstAttributes($xpath, "atom:link", $entry); } if (is_object($alternate)) { foreach ($alternate AS $attribute) { @@ -226,19 +223,19 @@ class Feed { } } } - if ($item["plink"] == "") { + if (empty($item["plink"])) { $item["plink"] = XML::getFirstNodeValue($xpath, 'link/text()', $entry); } - if ($item["plink"] == "") { + if (empty($item["plink"])) { $item["plink"] = XML::getFirstNodeValue($xpath, 'rss:link/text()', $entry); } $item["uri"] = XML::getFirstNodeValue($xpath, 'atom:id/text()', $entry); - if ($item["uri"] == "") { + if (empty($item["uri"])) { $item["uri"] = XML::getFirstNodeValue($xpath, 'guid/text()', $entry); } - if ($item["uri"] == "") { + if (empty($item["uri"])) { $item["uri"] = $item["plink"]; } @@ -260,23 +257,23 @@ class Feed { $item["title"] = XML::getFirstNodeValue($xpath, 'atom:title/text()', $entry); - if ($item["title"] == "") { + if (empty($item["title"])) { $item["title"] = XML::getFirstNodeValue($xpath, 'title/text()', $entry); } - if ($item["title"] == "") { + if (empty($item["title"])) { $item["title"] = XML::getFirstNodeValue($xpath, 'rss:title/text()', $entry); } $published = XML::getFirstNodeValue($xpath, 'atom:published/text()', $entry); - if ($published == "") { + if (empty($published)) { $published = XML::getFirstNodeValue($xpath, 'pubDate/text()', $entry); } - if ($published == "") { + if (empty($published)) { $published = XML::getFirstNodeValue($xpath, 'dc:date/text()', $entry); } $updated = XML::getFirstNodeValue($xpath, 'atom:updated/text()', $entry); - if ($updated == "") { + if (empty($updated)) { $updated = $published; } if ($published != "") { @@ -287,10 +284,10 @@ class Feed { } $creator = XML::getFirstNodeValue($xpath, 'author/text()', $entry); - if ($creator == "") { + if (empty($creator)) { $creator = XML::getFirstNodeValue($xpath, 'atom:author/atom:name/text()', $entry); } - if ($creator == "") { + if (empty($creator)) { $creator = XML::getFirstNodeValue($xpath, 'dc:creator/text()', $entry); } if ($creator != "") { @@ -324,8 +321,10 @@ class Feed { $type = $attribute->textContent; } } - if (strlen($item["attach"])) { + if (!empty($item["attach"])) { $item["attach"] .= ','; + } else { + $item["attach"] = ''; } $attachments[] = ["link" => $href, "type" => $type, "length" => $length]; @@ -345,16 +344,16 @@ class Feed { $tags .= $taglink; } - $body = trim($xpath->evaluate('atom:content/text()', $entry)->item(0)->nodeValue); + $body = trim(XML::getFirstNodeValue($xpath, 'atom:content/text()', $entry)); - if ($body == "") { - $body = trim($xpath->evaluate('content:encoded/text()', $entry)->item(0)->nodeValue); + if (empty($body)) { + $body = trim(XML::getFirstNodeValue($xpath, 'content:encoded/text()', $entry)); } - if ($body == "") { - $body = trim($xpath->evaluate('description/text()', $entry)->item(0)->nodeValue); + if (empty($body)) { + $body = trim(XML::getFirstNodeValue($xpath, 'description/text()', $entry)); } - if ($body == "") { - $body = trim($xpath->evaluate('atom:summary/text()', $entry)->item(0)->nodeValue); + if (empty($body)) { + $body = trim(XML::getFirstNodeValue($xpath, 'atom:summary/text()', $entry)); } // remove the content of the title if it is identically to the body diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php index 1c0cffb30..36f3faf2d 100644 --- a/src/Protocol/OStatus.php +++ b/src/Protocol/OStatus.php @@ -61,14 +61,16 @@ class OStatus $aliaslink = $author["author-link"]; - $alternate = $xpath->query("atom:author/atom:link[@rel='alternate']", $context)->item(0)->attributes; - if (is_object($alternate)) { - foreach ($alternate as $attributes) { + $alternate_item = $xpath->query("atom:author/atom:link[@rel='alternate']", $context)->item(0); + if (is_object($alternate_item)) { + foreach ($alternate_item->attributes as $attributes) { if (($attributes->name == "href") && ($attributes->textContent != "")) { $author["author-link"] = $attributes->textContent; } } } + $author["author-id"] = Contact::getIdForURL($author["author-link"]); + $author["contact-id"] = $contact["id"]; $contact = null; @@ -131,9 +133,7 @@ class OStatus $author["author-name"] = $displayname; } - $author["owner-name"] = $author["author-name"]; - $author["owner-link"] = $author["author-link"]; - $author["owner-avatar"] = $author["author-avatar"]; + $author["owner-id"] = $author["author-id"]; // Only update the contacts if it is an OStatus contact if (DBM::is_result($contact) && ($contact['id'] > 0) && !$onlyfetch && ($contact["network"] == NETWORK_OSTATUS)) { @@ -206,12 +206,16 @@ class OStatus dba::update('contact', $fields, ['id' => $cid], $old_contact); // Update the avatar - Contact::updateAvatar($author["author-avatar"], 0, $cid); + if (!empty($author["author-avatar"])) { + Contact::updateAvatar($author["author-avatar"], 0, $cid); + } } $contact["generation"] = 2; $contact["hide"] = false; // OStatus contacts are never hidden - $contact["photo"] = $author["author-avatar"]; + if (!empty($author["author-avatar"])) { + $contact["photo"] = $author["author-avatar"]; + } $gcid = GContact::update($contact); GContact::link($gcid, $contact["uid"], $contact["id"]); @@ -325,12 +329,15 @@ class OStatus $xpath->registerNamespace('statusnet', NAMESPACE_STATUSNET); $hub = ""; - $hub_attributes = $xpath->query("/atom:feed/atom:link[@rel='hub']")->item(0)->attributes; - if (is_object($hub_attributes)) { - foreach ($hub_attributes as $hub_attribute) { - if ($hub_attribute->name == "href") { - $hub = $hub_attribute->textContent; - logger("Found hub ".$hub, LOGGER_DEBUG); + $hub_items = $xpath->query("/atom:feed/atom:link[@rel='hub']")->item(0); + if (is_object($hub_items)) { + $hub_attributes = $hub_items->attributes; + if (is_object($hub_attributes)) { + foreach ($hub_attributes as $hub_attribute) { + if ($hub_attribute->name == "href") { + $hub = $hub_attribute->textContent; + logger("Found hub ".$hub, LOGGER_DEBUG); + } } } } @@ -390,7 +397,7 @@ class OStatus $author = self::fetchAuthor($xpath, $entry, $importer, $contact, $stored); } - $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:preferredUsername/text()', $context); + $value = XML::getFirstNodeValue($xpath, 'atom:author/poco:preferredUsername/text()', $entry); if ($value != "") { $nickname = $value; } else { @@ -441,6 +448,7 @@ class OStatus } if ($item["verb"] == NAMESPACE_OSTATUS."/unfollow") { + $dummy = null; Contact::removeFollower($importer, $contact, $item, $dummy); continue; } @@ -611,9 +619,12 @@ class OStatus foreach ($category->attributes as $attributes) { if ($attributes->name == "term") { $term = $attributes->textContent; - if (strlen($item["tag"])) { + if (!empty($item["tag"])) { $item["tag"] .= ','; + } else { + $item["tag"] = ''; } + $item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]"; } } @@ -1008,15 +1019,15 @@ class OStatus $link_data = self::processLinks($links, $item); } - $orig_body = $xpath->query('atom:content/text()', $activityobjects)->item(0)->nodeValue; - $orig_created = $xpath->query('atom:published/text()', $activityobjects)->item(0)->nodeValue; - $orig_edited = $xpath->query('atom:updated/text()', $activityobjects)->item(0)->nodeValue; + $orig_body = XML::getFirstNodeValue($xpath, 'atom:content/text()', $activityobjects); + $orig_created = XML::getFirstNodeValue($xpath, 'atom:published/text()', $activityobjects); + $orig_edited = XML::getFirstNodeValue($xpath, 'atom:updated/text()', $activityobjects); $orig_author = self::fetchAuthor($xpath, $activityobjects, $importer, $dummy, false); $item["author-name"] = $orig_author["author-name"]; $item["author-link"] = $orig_author["author-link"]; - $item["author-avatar"] = $orig_author["author-avatar"]; + $item["author-id"] = $orig_author["author-id"]; $item["body"] = HTML::toBBCode($orig_body); $item["created"] = $orig_created; @@ -1024,9 +1035,9 @@ class OStatus $item["uri"] = $orig_uri; - $item["verb"] = $xpath->query('activity:verb/text()', $activityobjects)->item(0)->nodeValue; + $item["verb"] = XML::getFirstNodeValue($xpath, 'activity:verb/text()', $activityobjects); - $item["object-type"] = $xpath->query('activity:object-type/text()', $activityobjects)->item(0)->nodeValue; + $item["object-type"] = XML::getFirstNodeValue($xpath, 'activity:object-type/text()', $activityobjects); $inreplyto = $xpath->query('thr:in-reply-to', $activityobjects); if (is_object($inreplyto->item(0))) { @@ -1055,7 +1066,7 @@ class OStatus foreach ($links as $link) { $attribute = self::readAttributes($link); - if (($attribute['rel'] != "") && ($attribute['href'] != "")) { + if (!empty($attribute['rel']) && !empty($attribute['href'])) { switch ($attribute['rel']) { case "alternate": $item["plink"] = $attribute['href']; @@ -1077,13 +1088,15 @@ class OStatus if ($filetype == 'image') { $link_data['add_body'] .= "\n[img]".$attribute['href'].'[/img]'; } else { - if (strlen($item["attach"])) { + if (!empty($item["attach"])) { $item["attach"] .= ','; + } else { + $item["attach"] = ''; } if (!isset($attribute['length'])) { $attribute['length'] = "0"; } - $item["attach"] .= '[attach]href="'.$attribute['href'].'" length="'.$attribute['length'].'" type="'.$attribute['type'].'" title="'.$attribute['title'].'"[/attach]'; + $item["attach"] .= '[attach]href="'.$attribute['href'].'" length="'.$attribute['length'].'" type="'.$attribute['type'].'" title="'.defaults($attribute, 'title', '').'"[/attach]'; } break; case "related": @@ -1097,7 +1110,7 @@ class OStatus } break; case "self": - if ($item["plink"] == '') { + if (empty($item["plink"])) { $item["plink"] = $attribute['href']; } $link_data['self'] = $attribute['href']; @@ -1627,6 +1640,7 @@ class OStatus } $contact = self::contactEntry($repeated_item['author-link'], $owner); + $contact['account-type'] = $contact['contact-type']; $title = $owner["nick"]." repeated a notice by ".$contact["nick"]; @@ -1972,10 +1986,10 @@ class OStatus if (isset($parent_item)) { $conversation = dba::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $parent_item]); 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']; } } diff --git a/src/Protocol/PortableContact.php b/src/Protocol/PortableContact.php index 719148a8e..580f45858 100644 --- a/src/Protocol/PortableContact.php +++ b/src/Protocol/PortableContact.php @@ -120,7 +120,9 @@ class PortableContact $contact_type = -1; $generation = 0; - $name = $entry->displayName; + if (!empty($entry->displayName)) { + $name = $entry->displayName; + } if (isset($entry->urls)) { foreach ($entry->urls as $url) { @@ -419,7 +421,7 @@ class PortableContact GContact::update($contact); - if (trim($noscrape["updated"]) != "") { + if (!empty($noscrape["updated"])) { $fields = ['last_contact' => DateTimeFormat::utcNow()]; dba::update('gcontact', $fields, ['nurl' => normalise_link($profile)]); @@ -1027,7 +1029,7 @@ class PortableContact if (!$serverret["success"] || ($serverret["body"] == "") || empty($xmlobj) || !is_object($xmlobj)) { // Workaround for bad configured servers (known nginx problem) - if (!in_array($serverret["debug"]["http_code"], ["403", "404"])) { + if (!empty($serverret["debug"]) && !in_array($serverret["debug"]["http_code"], ["403", "404"])) { $failure = true; } $possible_failure = true; @@ -1174,17 +1176,19 @@ class PortableContact if (!empty($data->channels_total)) { $registered_users = $data->channels_total; } - switch ($data->register_policy) { - case "REGISTER_OPEN": - $register_policy = REGISTER_OPEN; - break; - case "REGISTER_APPROVE": - $register_policy = REGISTER_APPROVE; - break; - case "REGISTER_CLOSED": - default: - $register_policy = REGISTER_CLOSED; - break; + if (!empty($data->register_policy)) { + switch ($data->register_policy) { + case "REGISTER_OPEN": + $register_policy = REGISTER_OPEN; + break; + case "REGISTER_APPROVE": + $register_policy = REGISTER_APPROVE; + break; + case "REGISTER_CLOSED": + default: + $register_policy = REGISTER_CLOSED; + break; + } } } else { // Test for Hubzilla, Redmatrix or Friendica @@ -1266,7 +1270,7 @@ class PortableContact $network = NETWORK_DIASPORA; } - if ($data->registrations_open) { + if (!empty($data->registrations_open) && $data->registrations_open) { $register_policy = REGISTER_OPEN; } else { $register_policy = REGISTER_CLOSED; @@ -1317,7 +1321,9 @@ class PortableContact if (isset($data->version)) { $network = NETWORK_DFRN; - $noscrape = defaults($data->no_scrape_url, ''); + if (!empty($data->no_scrape_url)) { + $noscrape = $data->no_scrape_url; + } $version = $data->version; $site_name = $data->site_name; $info = $data->info; @@ -1515,7 +1521,7 @@ class PortableContact if ($serverdata) { $servers = json_decode($serverdata); - if (is_array($servers->pods)) { + if (!empty($servers->pods)) { foreach ($servers->pods as $server) { Worker::add(PRIORITY_LOW, "DiscoverPoCo", "server", "https://".$server->host); } diff --git a/src/Util/Network.php b/src/Util/Network.php index 393b993e3..49c137e6c 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -101,7 +101,7 @@ class Network $a = get_app(); $parts = parse_url($url); - $path_parts = explode('/', $parts['path']); + $path_parts = explode('/', defaults($parts, 'path', '')); foreach ($path_parts as $part) { if (strlen($part) <> mb_strlen($part)) { $parts2[] = rawurlencode($part); @@ -250,7 +250,7 @@ class Network $newurl = $curl_info['redirect_url']; - if (($new_location_info['path'] == '') && ($new_location_info['host'] != '')) { + if (empty($new_location_info['path']) && !empty($new_location_info['host'])) { $newurl = $new_location_info['scheme'] . '://' . $new_location_info['host'] . $old_location_info['path']; } @@ -890,8 +890,8 @@ class Network $i = 0; $path = ""; do { - $path1 = $pathparts1[$i]; - $path2 = $pathparts2[$i]; + $path1 = defaults($pathparts1, $i, ''); + $path2 = defaults($pathparts2, $i, ''); if ($path1 == $path2) { $path .= $path1."/"; diff --git a/src/Util/ParseUrl.php b/src/Util/ParseUrl.php index b267c6108..8fff3bcd8 100644 --- a/src/Util/ParseUrl.php +++ b/src/Util/ParseUrl.php @@ -159,19 +159,21 @@ class ParseUrl if ($do_oembed) { $oembed_data = OEmbed::fetchURL($url); - if (!in_array($oembed_data->type, ["error", "rich", ""])) { - $siteinfo["type"] = $oembed_data->type; - } + if (!empty($oembed_data->type)) { + if (!in_array($oembed_data->type, ["error", "rich", ""])) { + $siteinfo["type"] = $oembed_data->type; + } - if (($oembed_data->type == "link") && ($siteinfo["type"] != "photo")) { - if (isset($oembed_data->title)) { - $siteinfo["title"] = trim($oembed_data->title); - } - if (isset($oembed_data->description)) { - $siteinfo["text"] = trim($oembed_data->description); - } - if (isset($oembed_data->thumbnail_url)) { - $siteinfo["image"] = $oembed_data->thumbnail_url; + if (($oembed_data->type == "link") && ($siteinfo["type"] != "photo")) { + if (isset($oembed_data->title)) { + $siteinfo["title"] = trim($oembed_data->title); + } + if (isset($oembed_data->description)) { + $siteinfo["text"] = trim($oembed_data->description); + } + if (isset($oembed_data->thumbnail_url)) { + $siteinfo["image"] = $oembed_data->thumbnail_url; + } } } } @@ -251,9 +253,9 @@ class ParseUrl } } - $attr["content"] = trim(html_entity_decode($attr["content"], ENT_QUOTES, "UTF-8")); + if (!empty($attr["content"])) { + $attr["content"] = trim(html_entity_decode($attr["content"], ENT_QUOTES, "UTF-8")); - if ($attr["content"] != "") { switch (strtolower($attr["name"])) { case "fulltitle": $siteinfo["title"] = trim($attr["content"]); @@ -319,9 +321,9 @@ class ParseUrl } } - $attr["content"] = trim(html_entity_decode($attr["content"], ENT_QUOTES, "UTF-8")); + if (!empty($attr["content"])) { + $attr["content"] = trim(html_entity_decode($attr["content"], ENT_QUOTES, "UTF-8")); - if ($attr["content"] != "") { switch (strtolower($attr["property"])) { case "og:image": $siteinfo["image"] = $attr["content"]; @@ -363,7 +365,7 @@ class ParseUrl "height" => $photodata[1]]; } } - } elseif ($siteinfo["image"] != "") { + } elseif (!empty($siteinfo["image"])) { $src = self::completeUrl($siteinfo["image"], $url); unset($siteinfo["image"]); diff --git a/src/Util/XML.php b/src/Util/XML.php index 03e17a554..e06a92d25 100644 --- a/src/Util/XML.php +++ b/src/Util/XML.php @@ -446,4 +446,19 @@ class XML return $first_item->nodeValue; } + + public static function getFirstAttributes($xpath, $element, $context = null) + { + $result = $xpath->query($element, $context); + if (!is_object($result)) { + return false; + } + + $first_item = $result->item(0); + if (!is_object($first_item)) { + return false; + } + + return $first_item->attributes; + } } diff --git a/src/Worker/Delivery.php b/src/Worker/Delivery.php index 4e76c68f7..8b5b96d5b 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(Item::ITEM_FIELDLIST, $condition, $params); + $itemdata = Item::select([], $condition, $params); $items = []; while ($item = Item::fetch($itemdata)) { diff --git a/src/Worker/Queue.php b/src/Worker/Queue.php index 89ec28262..c8ba5795a 100644 --- a/src/Worker/Queue.php +++ b/src/Worker/Queue.php @@ -11,6 +11,7 @@ use Friendica\Core\Worker; use Friendica\Database\DBM; use Friendica\Model\Queue as QueueModel; use Friendica\Model\PushSubscriber; +use Friendica\Model\User; use Friendica\Protocol\DFRN; use Friendica\Protocol\Diaspora; use Friendica\Protocol\PortableContact; @@ -106,7 +107,7 @@ class Queue $data = $q_item['content']; $public = $q_item['batch']; - $owner = $user; + $owner = User::getOwnerDataById($user['uid']); $deliver_status = 0; diff --git a/view/theme/frio/php/default.php b/view/theme/frio/php/default.php index 428d88788..99baa8efc 100644 --- a/view/theme/frio/php/default.php +++ b/view/theme/frio/php/default.php @@ -21,8 +21,8 @@ if (!isset($minimal)) { ?> - <?php if (x($page, 'title')) echo $page['title'] ?> - + <?php if (!empty($page['title'])) echo $page['title'] ?> + set_template_engine('smarty3'); - 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()) { + if (!empty($a->argv[0])) { + if ($a->argv[0] . defaults($a->argv, 1, '') === "profile".$a->user['nickname'] || $a->argv[0] === "network" && local_user()) { vier_community_info(); $a->page['htmlhead'] .= "\n";