aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG12
-rw-r--r--Zotlabs/Lib/Apps.php42
-rw-r--r--Zotlabs/Lib/Queue.php2
-rw-r--r--Zotlabs/Lib/ThreadItem.php2
-rw-r--r--Zotlabs/Module/Channel.php12
-rw-r--r--Zotlabs/Module/Item.php2
-rw-r--r--Zotlabs/Module/Network.php10
-rw-r--r--Zotlabs/Module/Search.php5
-rw-r--r--Zotlabs/Widget/Activity_filter.php10
-rw-r--r--Zotlabs/Widget/Cover_photo.php2
-rw-r--r--Zotlabs/Widget/Notifications.php6
-rw-r--r--Zotlabs/Widget/Pinned.php28
-rw-r--r--boot.php5
-rw-r--r--include/bbcode.php27
-rw-r--r--include/conversation.php6
-rw-r--r--include/html2plain.php47
-rw-r--r--include/items.php6
-rw-r--r--include/network.php12
18 files changed, 146 insertions, 90 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 466457ea5..428acea7c 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,15 @@
+Hubzilla 5.4.1 (2021-03-09)
+ - Fix profile not found if not logged in
+ - Fix summary not reset on cancel
+ - Fix summary not saved with aoutosave draft
+ - Fix unexpected trigger of buttons when pressing enter in input fields
+ - Fix spanish plural expression
+ - Fix undefined page-end on non dynamic pages
+
+ Addons
+ - Pubcrawl: fix regression in pubcrawl_follow_mod_init()
+
+
Hubzilla 5.4 (2021-03-08)
- Add new connections to privacy group independend from the default privacy group settings
- group_add() return group hash to save a lookup
diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php
index d77a3fda2..5ef4ecc8d 100644
--- a/Zotlabs/Lib/Apps.php
+++ b/Zotlabs/Lib/Apps.php
@@ -551,7 +551,7 @@ class Apps {
'$app' => $papp,
'$icon' => $icon,
'$hosturl' => $hosturl,
- '$purchase' => (($papp['page'] && (! $installed)) ? t('Purchase') : ''),
+ '$purchase' => ((isset($papp['page']) && (! $installed)) ? t('Purchase') : ''),
'$installed' => $installed,
'$action_label' => (($hosturl && in_array($mode, ['view','install'])) ? $install_action : ''),
'$edit' => ((local_channel() && $installed && $mode == 'edit') ? t('Edit') : ''),
@@ -559,8 +559,8 @@ class Apps {
'$undelete' => ((local_channel() && $mode == 'edit') ? t('Undelete') : ''),
'$settings_url' => ((local_channel() && $installed && $mode == 'list') ? $papp['settings_url'] : ''),
'$deleted' => $papp['deleted'],
- '$feature' => (($papp['embed'] || $mode == 'edit') ? false : true),
- '$pin' => (($papp['embed'] || $mode == 'edit') ? false : true),
+ '$feature' => ((isset($papp['embed']) || $mode == 'edit') ? false : true),
+ '$pin' => ((isset($papp['embed']) || $mode == 'edit') ? false : true),
'$featured' => ((strpos($papp['categories'], 'nav_featured_app') === false) ? false : true),
'$pinned' => ((strpos($papp['categories'], 'nav_pinned_app') === false) ? false : true),
'$navapps' => (($mode == 'nav') ? true : false),
@@ -1276,58 +1276,58 @@ class Apps {
$ret['type'] = 'personal';
- if($app['app_id'])
+ if(!empty($app['app_id']))
$ret['guid'] = $app['app_id'];
- if($app['app_sig'])
+ if(!empty($app['app_sig']))
$ret['sig'] = $app['app_sig'];
- if($app['app_author'])
+ if(!empty($app['app_author']))
$ret['author'] = $app['app_author'];
- if($app['app_name'])
+ if(!empty($app['app_name']))
$ret['name'] = $app['app_name'];
- if($app['app_desc'])
+ if(!empty($app['app_desc']))
$ret['desc'] = $app['app_desc'];
- if($app['app_url'])
+ if(!empty($app['app_url']))
$ret['url'] = $app['app_url'];
- if($app['app_photo'])
+ if(!empty($app['app_photo']))
$ret['photo'] = $app['app_photo'];
- if($app['app_icon'])
+ if(!empty($app['app_icon']))
$ret['icon'] = $app['app_icon'];
- if($app['app_version'])
+ if(!empty($app['app_version']))
$ret['version'] = $app['app_version'];
- if($app['app_addr'])
+ if(!empty($app['app_addr']))
$ret['addr'] = $app['app_addr'];
- if($app['app_price'])
+ if(!empty($app['app_price']))
$ret['price'] = $app['app_price'];
- if($app['app_page'])
+ if(!empty($app['app_page']))
$ret['page'] = $app['app_page'];
- if($app['app_requires'])
+ if(!empty($app['app_requires']))
$ret['requires'] = $app['app_requires'];
- if($app['app_system'])
+ if(!empty($app['app_system']))
$ret['system'] = $app['app_system'];
- if($app['app_options'])
+ if(!empty($app['app_options']))
$ret['options'] = $app['app_options'];
- if($app['app_plugin'])
+ if(!empty($app['app_plugin']))
$ret['plugin'] = trim($app['app_plugin']);
- if($app['app_deleted'])
+ if(!empty($app['app_deleted']))
$ret['deleted'] = $app['app_deleted'];
- if($app['term']) {
+ if(!empty($app['term']) && is_array($app['term'])) {
$s = '';
foreach($app['term'] as $t) {
if($s)
diff --git a/Zotlabs/Lib/Queue.php b/Zotlabs/Lib/Queue.php
index 779719d8b..ba314ded3 100644
--- a/Zotlabs/Lib/Queue.php
+++ b/Zotlabs/Lib/Queue.php
@@ -116,7 +116,7 @@ class Queue {
dbesc(($arr['driver']) ? $arr['driver'] : 'zot6'),
dbesc($arr['posturl']),
intval(1),
- intval(($arr['priority']) ? $arr['priority'] : 0),
+ intval(isset($arr['priority']) ? $arr['priority'] : 0),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
diff --git a/Zotlabs/Lib/ThreadItem.php b/Zotlabs/Lib/ThreadItem.php
index 2fb07c1cb..c0d5c001b 100644
--- a/Zotlabs/Lib/ThreadItem.php
+++ b/Zotlabs/Lib/ThreadItem.php
@@ -43,7 +43,7 @@ class ThreadItem {
$observer = \App::get_observer();
// Prepare the children
- if($data['children']) {
+ if(isset($data['children'])) {
foreach($data['children'] as $item) {
/*
diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php
index 5b8dbaac4..ab5000b9a 100644
--- a/Zotlabs/Module/Channel.php
+++ b/Zotlabs/Module/Channel.php
@@ -27,8 +27,8 @@ class Channel extends Controller {
function init() {
- if (in_array(substr($_GET['search'], 0, 1), ['@', '!', '?']) || strpos($_GET['search'], 'https://') === 0)
- goaway('search' . '?f=&search=' . $_GET['search']);
+ if (array_key_exists('search', $_GET) && (in_array(substr($_GET['search'], 0, 1), ['@', '!', '?']) || strpos($_GET['search'], 'https://') === 0))
+ goaway(z_root() . '/search?f=&search=' . $_GET['search']);
$which = null;
if (argc() > 1)
@@ -155,7 +155,7 @@ class Channel extends Controller {
intval($channel['channel_id'])
);
- opengraph_add_meta($r ? $r[0] : [], $channel);
+ opengraph_add_meta((isset($r) && count($r) ? $r[0] : []), $channel);
}
function get($update = 0, $load = false) {
@@ -168,7 +168,7 @@ class Channel extends Controller {
if (strpos($mid, 'b64.') === 0)
$decoded = @base64url_decode(substr($mid, 4));
- if ($decoded)
+ if (isset($decoded))
$mid = $decoded;
$datequery = ((x($_GET, 'dend') && is_a_date_arg($_GET['dend'])) ? notags($_GET['dend']) : '');
@@ -420,7 +420,7 @@ class Channel extends Controller {
if ((!$update) && (!$load)) {
- if ($decoded)
+ if (isset($decoded))
$mid = 'b64.' . base64url_encode($mid);
// This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
@@ -486,7 +486,7 @@ class Channel extends Controller {
$o .= conversation($items, $mode, $update, $page_mode);
- if ($mid && $items[0]['title'])
+ if ($mid && count($items) > 0 && isset($items[0]['title']))
App::$page['title'] = $items[0]['title'] . " - " . App::$page['title'];
}
diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php
index f3e8e4e57..32c146bce 100644
--- a/Zotlabs/Module/Item.php
+++ b/Zotlabs/Module/Item.php
@@ -821,12 +821,10 @@ class Item extends Controller {
// and will require alternatives for alternative content-types (text/html, text/markdown, text/plain, etc.)
// we may need virtual or template classes to implement the possible alternatives
- $summary = cleanup_bbcode($summary);
$body = cleanup_bbcode($body);
// Look for tags and linkify them
- $results = linkify_tags($summary, ($uid) ? $uid : $profile_uid);
$results = linkify_tags($body, ($uid) ? $uid : $profile_uid);
if($results) {
diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php
index 84c2463d6..4f9450f2f 100644
--- a/Zotlabs/Module/Network.php
+++ b/Zotlabs/Module/Network.php
@@ -20,13 +20,15 @@ class Network extends \Zotlabs\Web\Controller {
return;
}
- if(in_array(substr($_GET['search'],0,1),[ '@', '!', '?']) || strpos($_GET['search'], 'https://') === 0)
- goaway('search' . '?f=&search=' . $_GET['search']);
+ $search = $_GET['search'] ?? '';
+
+ if(in_array(substr($search, 0, 1),[ '@', '!', '?']) || strpos($search, 'https://') === 0)
+ goaway(z_root() . '/search?f=&search=' . $search);
if(count($_GET) < 2) {
$network_options = get_pconfig(local_channel(),'system','network_page_default');
if($network_options)
- goaway('network' . '?f=&' . $network_options);
+ goaway(z_root() . '/network?f=&' . $network_options);
}
$channel = App::get_channel();
@@ -80,7 +82,7 @@ class Network extends \Zotlabs\Web\Controller {
break;
}
- $search = (($_GET['search']) ? $_GET['search'] : '');
+ $search = $_GET['search'] ?? '';
if($search) {
if(strpos($search,'#') === 0) {
$hashtags = substr($search,1);
diff --git a/Zotlabs/Module/Search.php b/Zotlabs/Module/Search.php
index eeeff9613..8a87d98f7 100644
--- a/Zotlabs/Module/Search.php
+++ b/Zotlabs/Module/Search.php
@@ -14,7 +14,6 @@ class Search extends Controller {
App::$data['search'] = escape_tags($_REQUEST['search']);
}
-
function get($update = 0, $load = false) {
if ((get_config('system', 'block_public')) || (get_config('system', 'block_public_search'))) {
@@ -194,7 +193,7 @@ class Search extends Controller {
if (local_channel()) {
$r = q("SELECT mid, MAX(id) as item_id from item
- WHERE ((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' AND item.deny_gid = '' AND item_private = 0 )
+ WHERE ((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' AND item.deny_gid = '' AND item_private = 0 )
OR ( item.uid = %d )) OR item.owner_xchan = '%s' )
$item_normal
$sql_extra
@@ -210,7 +209,7 @@ class Search extends Controller {
and owner_xchan in ( " . stream_perms_xchans(($observer) ? (PERMS_NETWORK | PERMS_PUBLIC) : PERMS_PUBLIC) . " ))
$pub_sql ) OR owner_xchan = '%s')
$item_normal
- $sql_extra
+ $sql_extra
group by mid, created order by created desc $pager_sql",
dbesc($sys['xchan_hash'])
);
diff --git a/Zotlabs/Widget/Activity_filter.php b/Zotlabs/Widget/Activity_filter.php
index 002a642cb..9200811b4 100644
--- a/Zotlabs/Widget/Activity_filter.php
+++ b/Zotlabs/Widget/Activity_filter.php
@@ -64,6 +64,8 @@ class Activity_filter {
);
if($groups) {
+ $group_active = '';
+
foreach($groups as $g) {
if(x($_GET,'gid')) {
$group_active = (($_GET['gid'] == $g['id']) ? 'active' : '');
@@ -95,6 +97,8 @@ class Activity_filter {
$channel = App::get_channel();
if($forums) {
+ $forum_active = '';
+
foreach($forums as $f) {
if(x($_GET,'pf') && x($_GET,'cid')) {
$forum_active = ((x($_GET,'pf') && $_GET['cid'] == $f['abook_id']) ? 'active' : '');
@@ -103,10 +107,10 @@ class Activity_filter {
$fsub[] = [
'label' => $f['xchan_name'],
'img' => $f['xchan_photo_s'],
- 'url' => (($f['private_forum']) ? $f['xchan_url'] . '/?f=&zid=' . $channel['xchan_addr'] : z_root() . '/' . $cmd . '/?f=&pf=1&cid=' . $f['abook_id']),
+ 'url' => ((isset($f['private_forum'])) ? $f['xchan_url'] . '/?f=&zid=' . $channel['xchan_addr'] : z_root() . '/' . $cmd . '/?f=&pf=1&cid=' . $f['abook_id']),
'sel' => $forum_active,
'title' => t('Show posts to this forum'),
- 'lock' => (($f['private_forum']) ? 'lock' : '')
+ 'lock' => ((isset($f['private_forum'])) ? 'lock' : '')
];
}
@@ -160,6 +164,8 @@ class Activity_filter {
);
if($terms) {
+ $file_active = '';
+
foreach($terms as $t) {
if(x($_GET,'file')) {
$file_active = (($_GET['file'] == $t['term']) ? 'active' : '');
diff --git a/Zotlabs/Widget/Cover_photo.php b/Zotlabs/Widget/Cover_photo.php
index 955048992..97323ea8c 100644
--- a/Zotlabs/Widget/Cover_photo.php
+++ b/Zotlabs/Widget/Cover_photo.php
@@ -9,7 +9,7 @@ class Cover_photo {
require_once('include/channel.php');
$o = '';
- if(\App::$module == 'channel' && $_REQUEST['mid'])
+ if(\App::$module == 'channel' && isset($_REQUEST['mid']))
return '';
$channel_id = 0;
diff --git a/Zotlabs/Widget/Notifications.php b/Zotlabs/Widget/Notifications.php
index e2a543f80..dd5a6cd46 100644
--- a/Zotlabs/Widget/Notifications.php
+++ b/Zotlabs/Widget/Notifications.php
@@ -175,13 +175,13 @@ class Notifications {
];
}
- $o = replace_macros(get_markup_template('notifications_widget.tpl'), array(
+ $o = replace_macros(get_markup_template('notifications_widget.tpl'), [
'$module' => \App::$module,
'$notifications' => $notifications,
'$no_notifications' => t('Sorry, you have got no notifications at the moment'),
'$loading' => t('Loading'),
- '$startpage' => $channel['channel_startpage']
- ));
+ '$startpage' => ($channel ? $channel['channel_startpage'] : '')
+ ]);
return $o;
diff --git a/Zotlabs/Widget/Pinned.php b/Zotlabs/Widget/Pinned.php
index 0a7806908..cad139a91 100644
--- a/Zotlabs/Widget/Pinned.php
+++ b/Zotlabs/Widget/Pinned.php
@@ -43,7 +43,7 @@ class Pinned {
$midb64 = 'b64.' . base64url_encode($item['mid']);
- if(in_array($observer['xchan_hash'], get_pconfig($item['uid'], 'pinned_hide', $midb64, [])))
+ if(isset($observer['xchan_hash']) && in_array($observer['xchan_hash'], get_pconfig($item['uid'], 'pinned_hide', $midb64, [])))
continue;
$author = channelx_by_hash($item['author_xchan']);
@@ -67,7 +67,7 @@ class Pinned {
$conv_responses['attendno'] = [ 'title' => t('Not attending','title') ];
$conv_responses['attendmaybe'] = [ 'title' => t('Might attend','title') ];
if($commentable && $observer) {
- $attend = array( t('I will attend'), t('I will not attend'), t('I might attend'));
+ $attend = [ t('I will attend'), t('I will not attend'), t('I might attend') ];
$isevent = true;
}
}
@@ -78,7 +78,7 @@ class Pinned {
$conv_responses['disagree'] = [ 'title' => t('Disagree','title') ];
$conv_responses['abstain'] = [ 'title' => t('Abstain','title') ];
if($commentable && $observer) {
- $conlabels = array( t('I agree'), t('I disagree'), t('I abstain'));
+ $conlabels = [ t('I agree'), t('I disagree'), t('I abstain') ];
$canvote = true;
}
}
@@ -93,14 +93,13 @@ class Pinned {
// This actually turns out not to be possible in some protocol stacks without opening up hundreds of new issues.
// Will allow it only for uri resolvable sources.
if(strpos($item['mid'],'http') === 0) {
- $share = []; //Not yet ready for primetime
- //$share = array( t('Repeat This'), t('repeat'));
+ $share = []; // Isn't yet ready for primetime
+ //$share = [ t('Repeat This'), t('repeat') ];
}
- $embed = array( t('Share This'), t('share'));
+ $embed = [ t('Share This'), t('share') ];
}
-
- if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
- $is_new = true;
+
+ $is_new = boolval(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0);
$body = prepare_body($item,true);
@@ -118,7 +117,7 @@ class Pinned {
'isevent' => $isevent,
'attend' => $attend,
'consensus' => $consensus,
- 'conlabels' => $conlabels,
+ 'conlabels' => ($canvote ? $conlabels : []),
'canvote' => $canvote,
'linktitle' => sprintf( t('View %s\'s profile - %s'), $profile_name, ($author['xchan_addr'] ? $author['xchan_addr'] : $author['xchan_url']) ),
'olinktitle' => sprintf( t('View %s\'s profile - %s'), $owner['xchan_name'], ($owner['xchan_addr'] ? $owner['xchan_addr'] : $owner['xchan_url']) ),
@@ -135,7 +134,6 @@ class Pinned {
'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
'editedtime' => (($item['edited'] != $item['created']) ? sprintf( t('last edited: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r') ) : ''),
'expiretime' => ($item['expires'] > NULL_DATE ? sprintf( t('Expires: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['expires'], 'r') ) : ''),
- 'lock' => $lock,
'verified' => $verified,
'forged' => $forged,
'location' => $location,
@@ -150,12 +148,12 @@ class Pinned {
'event' => $body['event'],
'has_tags' => (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false),
// Item toolbar buttons
- 'share' => $share,
- 'embed' => $embed,
+ 'share' => (isset($share) && count($share) ? $share : false),
+ 'embed' => (isset($embed) && count($embed) ? $embed : false),
'plink' => get_plink($item),
'pinned' => t('Pinned post'),
- 'pinme' => (($observer['xchan_hash'] == $owner['xchan_hash']) ? t('Unpin from the top') : ''),
- 'hide' => (! $is_new && $observer && ($observer['xchan_hash'] != $owner['xchan_hash']) ? t("Don't show") : ''),
+ 'pinme' => (isset($observer['xchan_hash']) && $observer['xchan_hash'] == $owner['xchan_hash'] ? t('Unpin from the top') : ''),
+ 'hide' => (! $is_new && isset($observer['xchan_hash']) && $observer['xchan_hash'] != $owner['xchan_hash'] ? t("Don't show") : ''),
// end toolbar buttons
'modal_dismiss' => t('Close'),
'responses' => $conv_responses
diff --git a/boot.php b/boot.php
index 520cf464a..ec79b3dce 100644
--- a/boot.php
+++ b/boot.php
@@ -2316,13 +2316,14 @@ function construct_page() {
$navbar = get_pconfig($uid,'system','navbar',$navbar);
}
- if($comanche && App::$layout['navbar']) {
+ if($comanche && isset(App::$layout['navbar'])) {
$navbar = App::$layout['navbar'];
}
if (App::$module == 'setup') {
$installing = true;
- } else {
+ }
+ else {
nav($navbar);
}
diff --git a/include/bbcode.php b/include/bbcode.php
index a5ef6760b..388a828c4 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -152,6 +152,18 @@ function bb_spacefy($st) {
}
// The previously spacefied [noparse][ i ]italic[ /i ][/noparse],
+// now turns back returning [noparse][i]italic[/i][/noparse]
+function bb_unspacefy($st) {
+ $whole_match = $st[0];
+ $captured = $st[1];
+ $spacefied = preg_replace("/\[ (.*?) \]/", "[$1]", $captured);
+ $new_str = str_replace($captured, $spacefied, $whole_match);
+
+ return $new_str;
+}
+
+
+// The previously spacefied [noparse][ i ]italic[ /i ][/noparse],
// now turns back and the [noparse] tags are trimmed
// returning [i]italic[/i]
@@ -1097,6 +1109,9 @@ function bbcode($Text, $options = []) {
if (strpos($Text,'[pre]') !== false) {
$Text = preg_replace_callback("/\[pre\](.*?)\[\/pre\]/ism", 'bb_spacefy',$Text);
}
+ if (strpos($Text,'[summary]') !== false) {
+ $Text = preg_replace_callback("/\[summary\](.*?)\[\/summary\]/ism", 'bb_spacefy',$Text);
+ }
$Text = bb_format_attachdata($Text);
@@ -1438,11 +1453,6 @@ function bbcode($Text, $options = []) {
$Text = preg_replace("/\[font=(.*?)\](.*?)\[\/font\]/sm", "<span style=\"font-family: $1;\">$2</span>", $Text);
}
-
- if(strpos($Text,'[/summary]') !== false) {
- $Text = preg_replace_callback("/^(.*?)\[summary\](.*?)\[\/summary\](.*?)$/is", 'bb_summary', $Text);
- }
-
// Check for [spoiler] text
$endlessloop = 0;
while ((strpos($Text, "[/spoiler]")!== false) and (strpos($Text, "[spoiler]") !== false) and (++$endlessloop < 20)) {
@@ -1611,6 +1621,13 @@ function bbcode($Text, $options = []) {
}
+ if (strpos($Text,'[summary]') !== false) {
+ $Text = preg_replace_callback("/\[summary\](.*?)\[\/summary\]/ism", 'bb_unspacefy',$Text);
+ }
+ if(strpos($Text,'[/summary]') !== false) {
+ $Text = preg_replace_callback("/^(.*?)\[summary\](.*?)\[\/summary\](.*?)$/is", 'bb_summary', $Text);
+ }
+
// Unhide all [noparse] contained bbtags unspacefying them
// and triming the [noparse] tag.
if (strpos($Text,'[noparse]') !== false) {
diff --git a/include/conversation.php b/include/conversation.php
index ae69b7a01..f3e5fafa7 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -865,7 +865,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa
$x = [ 'mode' => $mode, 'item' => $item ];
call_hooks('stream_item',$x);
- if($x['item']['blocked'])
+ if(isset($x['item']['blocked']))
continue;
$item = $x['item'];
@@ -1563,7 +1563,7 @@ function sort_item_children($items) {
$result = $items;
usort($result,'sort_thr_created_rev');
foreach($result as $k => $i) {
- if($result[$k]['children']) {
+ if(isset($result[$k]['children'])) {
$result[$k]['children'] = sort_item_children($result[$k]['children']);
}
}
@@ -1573,7 +1573,7 @@ function sort_item_children($items) {
function add_children_to_list($children, &$arr) {
foreach($children as $y) {
$arr[] = $y;
- if($y['children'])
+ if(isset($y['children']))
add_children_to_list($y['children'], $arr);
}
}
diff --git a/include/html2plain.php b/include/html2plain.php
index 91a1f14cb..bf8581bdb 100644
--- a/include/html2plain.php
+++ b/include/html2plain.php
@@ -76,28 +76,47 @@ function quotelevel($message, $wraplength = 75)
return(implode("\n", $newlines));
}
+
function collecturls($message) {
+
$pattern = '/<a.*?href="(.*?)".*?>(.*?)<\/a>/is';
preg_match_all($pattern, $message, $result, PREG_SET_ORDER);
-
- $urls = array();
- foreach ($result as $treffer) {
- // A list of some links that should be ignored
- $list = array("/user/", "/tag/", "/group/", "/profile/", "/channel/", "/search?search=", "/search?tag=", "mailto:", "/u/", "/node/",
- "//facebook.com/profile.php?id=", "//plus.google.com/");
- foreach ($list as $listitem)
- if (strpos($treffer[1], $listitem) !== false)
- $ignore = true;
-
- if ((strpos($treffer[1], "//plus.google.com/") !== false) and (strpos($treffer[1], "/posts") !== false))
+
+ $urls = [];
+ if ($result) {
+ $ignore = false;
+ foreach ($result as $treffer) {
+ // A list of some links that should be ignored
+ $list = [
+ "/user/",
+ "/tag/",
+ "/group/",
+ "/profile/",
+ "/channel/",
+ "/search?search=",
+ "/search?tag=",
+ "mailto:",
+ "/u/",
+ "/node/",
+ "//facebook.com/profile.php?id=",
+ "//plus.google.com/"
+ ];
+ foreach ($list as $listitem)
+ if (strpos($treffer[1], $listitem) !== false)
+ $ignore = true;
+
+ if ((strpos($treffer[1], "//plus.google.com/") !== false) and (strpos($treffer[1], "/posts") !== false))
$ignore = false;
-
- if (!$ignore)
- $urls[$treffer[1]] = $treffer[1];
+
+ if (! $ignore)
+ $urls[$treffer[1]] = $treffer[1];
+ }
}
+
return($urls);
}
+
function html2plain($html, $wraplength = 75, $compact = false)
{
diff --git a/include/items.php b/include/items.php
index a1198bb4d..c6a5f40a6 100644
--- a/include/items.php
+++ b/include/items.php
@@ -1432,7 +1432,7 @@ function purify_imported_object($obj) {
elseif (is_string($obj)) {
$ret = purify_html($obj);
}
-
+
return $ret;
}
@@ -4334,8 +4334,8 @@ function fetch_post_tags($items, $link = false) {
foreach($imeta as $i) {
if(array_key_exists('item_id',$items[$x])) {
if($i['iid'] == $items[$x]['item_id']) {
- if(! is_array($items[$x]['iconfig']))
- $items[$x]['iconfig'] = array();
+ if(! isset($items[$x]['iconfig']))
+ $items[$x]['iconfig'] = [];
$i['v'] = ((preg_match('|^a:[0-9]+:{.*}$|s',$i['v'])) ? unserialize($i['v']) : $i['v']);
$items[$x]['iconfig'][] = $i;
}
diff --git a/include/network.php b/include/network.php
index f5ff48fce..fcc7b4289 100644
--- a/include/network.php
+++ b/include/network.php
@@ -1134,11 +1134,15 @@ function discover_by_webbie($webbie, $protocol = '') {
foreach($x['links'] as $link) {
if(array_key_exists('rel',$link)) {
if($link['rel'] === PROTOCOL_ZOT6 && ((! $protocol) || (strtolower($protocol) === 'zot6'))) {
+
logger('zot6 found for ' . $webbie, LOGGER_DEBUG);
$record = Zotfinger::exec($link['href']);
+ if (! $record) {
+ logger('Record not found for ' . $link['href']);
+ continue;
+ }
// Check the HTTP signature
-
$hsig = $record['signature'];
if($hsig && $hsig['signer'] === $link['href'] && $hsig['header_valid'] === true && $hsig['content_valid'] === true)
$hsig_valid = true;
@@ -1226,7 +1230,7 @@ function webfinger_rfc7033($webbie, $zot = false) {
if($m['scheme'] !== 'https')
return false;
- $rhs = $m['host'] . (($m['port']) ? ':' . $m['port'] : '');
+ $rhs = $m['host'] . (array_key_exists('port', $m) ? ':' . $m['port'] : '');
$resource = urlencode($webbie);
}
}
@@ -1957,10 +1961,10 @@ function service_plink($contact, $guid) {
$m = parse_url($contact['xchan_url']);
if($m) {
- $url = $m['scheme'] . '://' . $m['host'] . (($m['port']) ? ':' . $m['port'] : '');
+ $url = $m['scheme'] . '://' . $m['host'] . (array_key_exists('port', $m) ? ':' . $m['port'] : '');
}
else {
- $url = 'https://' . substr($contact['xchan_addr'],strpos($contact['xchan_addr'],'@')+1);
+ $url = 'https://' . substr($contact['xchan_addr'], strpos($contact['xchan_addr'], '@') + 1);
}
$handle = substr($contact['xchan_addr'], 0, strpos($contact['xchan_addr'],'@'));