From b0fe94b4b33126d0bfb1c10869262d47e31a337d Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 6 Jul 2024 11:29:36 +0000 Subject: adjust release date --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 9d8b2178f..248df1c81 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,4 @@ -Hubzilla 9.2 (2024-??-??) +Hubzilla 9.2 (2024-07-06) - Fail to import more gracefully if a channel has already been imported at some point but was deleted again - Use the doubleleft template by default for admin pages to work around some display issues - Reflect the censored state in the local xchan -- cgit v1.2.3 From 2ddc0875128e17a9e36393974d721f19ccbe64e3 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 7 Jul 2024 13:24:26 +0000 Subject: notifications: provide possibility to only display system notofications --- Zotlabs/Widget/Notifications.php | 2 ++ view/pdl/mod_admin.pdl | 1 + view/tpl/notifications_widget.tpl | 45 ++++++++++++++++++++++----------------- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/Zotlabs/Widget/Notifications.php b/Zotlabs/Widget/Notifications.php index b16303be6..eeef1d7d4 100644 --- a/Zotlabs/Widget/Notifications.php +++ b/Zotlabs/Widget/Notifications.php @@ -173,6 +173,8 @@ class Notifications { '$notifications' => $notifications, '$no_notifications' => t('Sorry, you have got no notifications at the moment'), '$loading' => t('Loading'), + '$sys_only' => empty($arr['sys_only']) ? 0 : 1 + ]); return $o; diff --git a/view/pdl/mod_admin.pdl b/view/pdl/mod_admin.pdl index f5e46baed..39bccd466 100644 --- a/view/pdl/mod_admin.pdl +++ b/view/pdl/mod_admin.pdl @@ -1,5 +1,6 @@ [template]doubleleft[/template] [region=aside] +[widget=notifications][var=sys_only]1[/var][/widget] [widget=admin][/widget] [/region] [region=content] diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index a9d98dae9..30547da97 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -5,6 +5,7 @@ var sse_partial_result = false; var sse_rmids = []; var sse_fallback_interval; + var sse_sys_only = {{$sys_only}}; $(document).ready(function() { let notifications_parent; @@ -219,8 +220,9 @@ } function sse_bs_counts() { - if(sse_bs_active) + if(sse_bs_active || sse_sys_only) { return; + } sse_bs_active = true; @@ -238,10 +240,11 @@ function sse_bs_notifications(e, replace, followup) { - if(sse_bs_active) + if(sse_bs_active || sse_sys_only) { return; + } - var manual = false; + let manual = false; if(typeof replace === 'undefined') replace = e.data.replace; @@ -302,9 +305,23 @@ function sse_handleNotifications(obj, replace, followup) { - var primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files']; - var secondary_notifications = ['network', 'forums', 'all_events', 'pubs']; - var all_notifications = primary_notifications.concat(secondary_notifications); + // notice and info + + if(obj.notice) { + $(obj.notice.notifications).each(function() { + toast(this, 'danger'); + }); + } + + if(obj.info) { + $(obj.info.notifications).each(function(){ + toast(this, 'info'); + }); + } + + let primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files']; + let secondary_notifications = ['network', 'forums', 'all_events', 'pubs']; + let all_notifications = primary_notifications.concat(secondary_notifications); all_notifications.forEach(function(type, index) { if(typeof obj[type] === typeof undefined) @@ -336,20 +353,6 @@ sse_setNotificationsStatus(); - // notice and info - - if(obj.notice) { - $(obj.notice.notifications).each(function() { - toast(this, 'danger'); - }); - } - - if(obj.info) { - $(obj.info.notifications).each(function(){ - toast(this, 'info'); - }); - } - // load more notifications if visible notifications count becomes low if(sse_type && sse_offset != -1 && $('#nav-' + sse_type + '-menu').children(':not(.tt-filter-active)').length < 15) { sse_bs_notifications(sse_type, false, true); @@ -533,6 +536,7 @@ } +{{if !$sys_only}}
{{$no_notifications}}... @@ -604,3 +608,4 @@ {{/foreach}}
+{{/if}} -- cgit v1.2.3 From 5cbae0fb81078a60c9fa507be9c725856d7ecb29 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 8 Jul 2024 20:35:08 +0000 Subject: improve handling of sse especially in relation with page reloads --- Zotlabs/Lib/XConfig.php | 2 +- Zotlabs/Module/Admin/Channels.php | 2 +- Zotlabs/Module/Sse.php | 51 +++++++++++++++++++++------------------ boot.php | 28 +++++---------------- 4 files changed, 36 insertions(+), 47 deletions(-) diff --git a/Zotlabs/Lib/XConfig.php b/Zotlabs/Lib/XConfig.php index 76ac8dc7a..5eed9224e 100644 --- a/Zotlabs/Lib/XConfig.php +++ b/Zotlabs/Lib/XConfig.php @@ -83,7 +83,7 @@ class XConfig { return $default; if(! array_key_exists($xchan, \App::$config)) - load_xconfig($xchan); + self::Load($xchan); if((! array_key_exists($family, \App::$config[$xchan])) || (! array_key_exists($key, \App::$config[$xchan][$family]))) return $default; diff --git a/Zotlabs/Module/Admin/Channels.php b/Zotlabs/Module/Admin/Channels.php index 52b661420..cd1d2b6fe 100644 --- a/Zotlabs/Module/Admin/Channels.php +++ b/Zotlabs/Module/Admin/Channels.php @@ -126,7 +126,7 @@ class Channels { goaway(z_root() . '/admin/channels' ); } - $key = (($_REQUEST['key']) ? dbesc($_REQUEST['key']) : 'channel_id'); + $key = ((isset($_REQUEST['key']) && $_REQUEST['key']) ? dbesc($_REQUEST['key']) : 'channel_id'); $dir = 'asc'; if(array_key_exists('dir',$_REQUEST)) $dir = ((intval($_REQUEST['dir'])) ? 'asc' : 'desc'); diff --git a/Zotlabs/Module/Sse.php b/Zotlabs/Module/Sse.php index 5baa90128..41ff24352 100644 --- a/Zotlabs/Module/Sse.php +++ b/Zotlabs/Module/Sse.php @@ -31,13 +31,14 @@ class Sse extends Controller { // this is important! session_write_close(); + ignore_user_abort(true); self::$uid = local_channel(); self::$ob_hash = get_observer_hash(); self::$sse_id = false; self::$vnotify = -1; - if(! self::$ob_hash) { + if (!self::$ob_hash) { if(session_id()) { self::$sse_id = true; self::$ob_hash = 'sse_id.' . session_id(); @@ -55,7 +56,7 @@ class Sse extends Controller { self::$sse_enabled = Config::Get('system', 'sse_enabled', 0); - if(self::$sse_enabled) { + if (self::$sse_enabled) { // Server Sent Events @@ -73,7 +74,7 @@ class Sse extends Controller { $i = 0; } - if(!self::$sse_id && $i === 0) { + if (!self::$sse_id && $i === 0) { // Update chat presence indication about once per minute $r = q("select cp_id, cp_room from chatpresence where cp_xchan = '%s' and cp_client = '%s' and cp_room = 0 limit 1", dbesc(self::$ob_hash), @@ -82,7 +83,7 @@ class Sse extends Controller { $basic_presence = false; - if($r) { + if ($r) { $basic_presence = true; q("update chatpresence set cp_last = '%s' where cp_id = %d", dbesc(datetime_convert()), @@ -90,7 +91,7 @@ class Sse extends Controller { ); } - if(!$basic_presence) { + if (!$basic_presence) { q("insert into chatpresence ( cp_xchan, cp_last, cp_status, cp_client) values( '%s', '%s', '%s', '%s' ) ", dbesc(self::$ob_hash), @@ -101,16 +102,17 @@ class Sse extends Controller { } } - XConfig::Load(self::$ob_hash); $result = []; + + XConfig::Load(self::$ob_hash); + $lock = XConfig::Get(self::$ob_hash, 'sse', 'lock'); if (!$lock) { $result = XConfig::Get(self::$ob_hash, 'sse', 'notifications', []); } - // We do not have the local_channel in the addon. // Reset pubs here if the app is not installed. if (self::$uid && (!(self::$vnotify & VNOTIFY_PUBS) || !Apps::system_app_installed(self::$uid, 'Public Stream'))) { @@ -119,35 +121,38 @@ class Sse extends Controller { } } - if($result) { + if ($result) { echo "event: notifications\n"; echo 'data: ' . json_encode($result); echo "\n\n"; - - XConfig::Set(self::$ob_hash, 'sse', 'notifications', []); - unset($result); + } + else { + // if no result we will send a heartbeat to keep connected + echo "event: heartbeat\n"; + echo 'data: {}'; + echo "\n\n"; } - // always send heartbeat to detect disconnected clients - echo "event: heartbeat\n"; - echo 'data: {}'; - echo "\n\n"; - - if(ob_get_length() > 0) + if (connection_status() != CONNECTION_NORMAL || connection_aborted()) { ob_end_flush(); + flush(); - flush(); - - if(connection_status() != CONNECTION_NORMAL || connection_aborted()) { - //TODO: this does not seem to be triggered XConfig::Set(self::$ob_hash, 'sse', 'timestamp', NULL_DATE); - break; + + exit; } - $i++; + ob_flush(); + flush(); + + if ($result) { + XConfig::Set(self::$ob_hash, 'sse', 'notifications', []); + } usleep($sleep); + $i++; + } } diff --git a/boot.php b/boot.php index 52c222b0a..88482cf2d 100644 --- a/boot.php +++ b/boot.php @@ -1928,19 +1928,11 @@ function notice($s) { } } - $t = get_xconfig($hash, 'sse', 'timestamp', NULL_DATE); + $x = get_xconfig($hash, 'sse', 'notifications', []); - if (datetime_convert('UTC', 'UTC', $t) < datetime_convert('UTC', 'UTC', '- 30 seconds')) { - set_xconfig($hash, 'sse', 'notifications', []); - } - - $x = get_xconfig($hash, 'sse', 'notifications'); - - if ($x === false) - $x = []; - - if (isset($x['notice']) && in_array($s, $x['notice']['notifications'])) + if (isset($x['notice']) && in_array($s, $x['notice']['notifications'])) { return; + } if (App::$interactive) { $x['notice']['notifications'][] = $s; @@ -1988,19 +1980,11 @@ function info($s) { } } - $t = get_xconfig($hash, 'sse', 'timestamp', NULL_DATE); + $x = get_xconfig($hash, 'sse', 'notifications', []); - if (datetime_convert('UTC', 'UTC', $t) < datetime_convert('UTC', 'UTC', '- 30 seconds')) { - set_xconfig($hash, 'sse', 'notifications', []); - } - - $x = get_xconfig($hash, 'sse', 'notifications'); - - if ($x === false) - $x = []; - - if (isset($x['info']) && in_array($s, $x['info']['notifications'])) + if (isset($x['info']) && in_array($s, $x['info']['notifications'])) { return; + } if (App::$interactive) { $x['info']['notifications'][] = $s; -- cgit v1.2.3 From d2b06995c7bf14f0ba972099f6bfcd264d4ed0af Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 10 Jul 2024 08:40:51 +0000 Subject: more work on making sure system notifications appear on page reload --- Zotlabs/Module/Sse.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Sse.php b/Zotlabs/Module/Sse.php index 41ff24352..ae8860cd2 100644 --- a/Zotlabs/Module/Sse.php +++ b/Zotlabs/Module/Sse.php @@ -138,6 +138,7 @@ class Sse extends Controller { flush(); XConfig::Set(self::$ob_hash, 'sse', 'timestamp', NULL_DATE); + XConfig::Set(self::$ob_hash, 'sse', 'notifications', []); exit; } @@ -145,12 +146,12 @@ class Sse extends Controller { ob_flush(); flush(); + usleep($sleep); + if ($result) { XConfig::Set(self::$ob_hash, 'sse', 'notifications', []); } - usleep($sleep); - $i++; } -- cgit v1.2.3 From 78e68519e89e235db0e5d54982f1ea3aba4b3654 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 10 Jul 2024 08:52:23 +0000 Subject: do not handle non sys notifications if we are in sys only mode --- view/tpl/notifications_widget.tpl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index 30547da97..0b3b463bc 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -319,6 +319,10 @@ }); } + if (sse_sys_only) { + return; + } + let primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files']; let secondary_notifications = ['network', 'forums', 'all_events', 'pubs']; let all_notifications = primary_notifications.concat(secondary_notifications); @@ -329,7 +333,6 @@ var count = Number(obj[type].count); - if(obj[type].count) { $('.' + type + '-button').fadeIn(); if(replace || followup) { -- cgit v1.2.3 From 0bcecc4baa8665e44a459be5620e7a1943fbbaf8 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 15 Jul 2024 10:12:02 +0000 Subject: make sure we always have an object which was not the case when repeating one of our own items --- Zotlabs/Module/Share.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Zotlabs/Module/Share.php b/Zotlabs/Module/Share.php index ea9313fa8..db0acb6f5 100644 --- a/Zotlabs/Module/Share.php +++ b/Zotlabs/Module/Share.php @@ -94,6 +94,12 @@ class Share extends \Zotlabs\Web\Controller { else killme(); + $object = Activity::fetch_item([ 'id' => $item['mid'] ]); + + if (!$object) { + killme(); + } + $arr['aid'] = $item['aid']; $arr['uid'] = $item['uid']; @@ -121,7 +127,7 @@ class Share extends \Zotlabs\Web\Controller { $arr['owner_xchan'] = $item['author_xchan']; $arr['source_xchan'] = ''; - $arr['obj'] = $item['obj']; + $arr['obj'] = $object; $arr['obj_type'] = $item['obj_type']; $arr['verb'] = ACTIVITY_SHARE; -- cgit v1.2.3 From 28c8229218c93e67c27eb3adcdafc984f24f2d3c Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 15 Jul 2024 10:16:54 +0000 Subject: always use ob_end_flush() and reduce code duplication --- Zotlabs/Module/Sse.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Zotlabs/Module/Sse.php b/Zotlabs/Module/Sse.php index ae8860cd2..df4a74f7b 100644 --- a/Zotlabs/Module/Sse.php +++ b/Zotlabs/Module/Sse.php @@ -133,19 +133,18 @@ class Sse extends Controller { echo "\n\n"; } - if (connection_status() != CONNECTION_NORMAL || connection_aborted()) { + if (ob_get_length() > 0) { ob_end_flush(); - flush(); + } + + flush(); + if (connection_status() != CONNECTION_NORMAL || connection_aborted()) { XConfig::Set(self::$ob_hash, 'sse', 'timestamp', NULL_DATE); XConfig::Set(self::$ob_hash, 'sse', 'notifications', []); - exit; } - ob_flush(); - flush(); - usleep($sleep); if ($result) { -- cgit v1.2.3 From 2d467a15ba9037f33b1f168995bc4fe7140c415d Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 15 Jul 2024 10:29:12 +0000 Subject: dbesc the workinfo json --- Zotlabs/Lib/QueueWorker.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Lib/QueueWorker.php b/Zotlabs/Lib/QueueWorker.php index 24114438e..9e28999c9 100644 --- a/Zotlabs/Lib/QueueWorker.php +++ b/Zotlabs/Lib/QueueWorker.php @@ -59,7 +59,7 @@ class QueueWorker { $transaction = new \DbaTransaction(\DBA::$dba); $r = q("INSERT INTO workerq (workerq_priority, workerq_data, workerq_uuid, workerq_cmd) VALUES (%d, '%s', '%s', '%s')", intval($priority), - $workinfo_json, + dbesc($workinfo_json), dbesc($uuid), dbesc($argv[0]) ); @@ -105,7 +105,7 @@ class QueueWorker { $transaction = new \DbaTransaction(\DBA::$dba); $r = q("INSERT INTO workerq (workerq_priority, workerq_data, workerq_uuid, workerq_cmd) VALUES (%d, '%s', '%s', '%s')", intval($priority), - $workinfo_json, + dbesc($workinfo_json), dbesc($uuid), dbesc($argv[0]) ); -- cgit v1.2.3 From 6ced7ecf896cfcbe6508f13e6a1629fcd7802539 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 15 Jul 2024 10:34:43 +0000 Subject: missing pdl for mod import --- boot.php | 2 +- view/pdl/mod_import.pdl | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 view/pdl/mod_import.pdl diff --git a/boot.php b/boot.php index 88482cf2d..3e07bcaaf 100644 --- a/boot.php +++ b/boot.php @@ -66,7 +66,7 @@ require_once('include/security.php'); define('PLATFORM_NAME', 'hubzilla'); -define('STD_VERSION', '9.3'); +define('STD_VERSION', '9.3.1'); define('ZOT_REVISION', '6.0'); define('DB_UPDATE_VERSION', 1263); diff --git a/view/pdl/mod_import.pdl b/view/pdl/mod_import.pdl new file mode 100644 index 000000000..9f0bb4d9a --- /dev/null +++ b/view/pdl/mod_import.pdl @@ -0,0 +1,8 @@ +[region=aside] +[/region] +[region=content] +$content +[/region] +[region=right_aside] +[widget=notifications][/widget] +[/region] -- cgit v1.2.3 From aff11443b4a4e0810b6cdb2055e0a39ea8f4cf18 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 17 Jul 2024 13:17:30 +0000 Subject: gd: check if function exists - obviously this can change after the initial install where we check this --- Zotlabs/Photo/PhotoGd.php | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Zotlabs/Photo/PhotoGd.php b/Zotlabs/Photo/PhotoGd.php index 4a47f97ee..a81d9cae2 100644 --- a/Zotlabs/Photo/PhotoGd.php +++ b/Zotlabs/Photo/PhotoGd.php @@ -160,16 +160,28 @@ class PhotoGd extends PhotoDriver { case 'image/png': $quality = Config::Get('system', 'png_quality'); - if((! $quality) || ($quality > 9)) + + if((! $quality) || ($quality > 9)) { $quality = PNG_QUALITY; - \imagepng($this->image, NULL, $quality); + } + + if (function_exists('imagepng')) { + \imagepng($this->image, NULL, $quality); + } + break; case 'image/webp': $quality = Config::Get('system', 'webp_quality'); - if((! $quality) || ($quality > 100)) + + if((! $quality) || ($quality > 100)) { $quality = WEBP_QUALITY; - \imagewebp($this->image, NULL, $quality); + } + + if (function_exists('imagewebp')) { + \imagewebp($this->image, NULL, $quality); + } + break; case 'image/jpeg': @@ -177,9 +189,15 @@ class PhotoGd extends PhotoDriver { default: $quality = Config::Get('system', 'jpeg_quality'); - if((! $quality) || ($quality > 100)) + + if((! $quality) || ($quality > 100)) { $quality = JPEG_QUALITY; - \imagejpeg($this->image, NULL, $quality); + } + + if (function_exists('imagejpeg')) { + \imagejpeg($this->image, NULL, $quality); + } + break; } -- cgit v1.2.3 From 5f66ad5bc593602153c037d42c25c70139185ab1 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 17 Jul 2024 13:22:17 +0000 Subject: fix php warning --- Zotlabs/Lib/Activity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 9178dac39..ae43a43b5 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -3271,7 +3271,7 @@ class Activity { return $content; } - if ($act['type'] === 'Event') { + if (isset($act['type']) && $act['type'] === 'Event') { $adjust = false; $event = []; $event['event_hash'] = $act['id']; -- cgit v1.2.3 From 2cfdbbd956c510071b57a776b38580a2b5971cc7 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 17 Jul 2024 14:34:46 +0000 Subject: sse: revert removing of reset after 30 seconds and save a db lookup if we have just reset --- boot.php | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/boot.php b/boot.php index 3e07bcaaf..b20acb18f 100644 --- a/boot.php +++ b/boot.php @@ -1928,7 +1928,18 @@ function notice($s) { } } - $x = get_xconfig($hash, 'sse', 'notifications', []); + $x = null; + + $t = get_xconfig($hash, 'sse', 'timestamp', NULL_DATE); + + if (datetime_convert('UTC', 'UTC', $t) < datetime_convert('UTC', 'UTC', '- 30 seconds')) { + set_xconfig($hash, 'sse', 'notifications', []); + $x = []; + } + + if ($x === null) { + $x = get_xconfig($hash, 'sse', 'notifications', []); + } if (isset($x['notice']) && in_array($s, $x['notice']['notifications'])) { return; @@ -1980,7 +1991,18 @@ function info($s) { } } - $x = get_xconfig($hash, 'sse', 'notifications', []); + $x = null; + + $t = get_xconfig($hash, 'sse', 'timestamp', NULL_DATE); + + if (datetime_convert('UTC', 'UTC', $t) < datetime_convert('UTC', 'UTC', '- 30 seconds')) { + set_xconfig($hash, 'sse', 'notifications', []); + $x = []; + } + + if ($x === null) { + $x = get_xconfig($hash, 'sse', 'notifications', []); + } if (isset($x['info']) && in_array($s, $x['info']['notifications'])) { return; -- cgit v1.2.3 From 6d1f34284b0f4a46932305266ee00d8606c94dc7 Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 17 Jul 2024 14:58:49 +0000 Subject: bump version --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index b20acb18f..473de2cef 100644 --- a/boot.php +++ b/boot.php @@ -66,7 +66,7 @@ require_once('include/security.php'); define('PLATFORM_NAME', 'hubzilla'); -define('STD_VERSION', '9.3.1'); +define('STD_VERSION', '9.3.2'); define('ZOT_REVISION', '6.0'); define('DB_UPDATE_VERSION', 1263); -- cgit v1.2.3 From 65185a70d593d98570baa4599f562a0d05151d83 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 18 Jul 2024 08:52:28 +0000 Subject: changelog --- CHANGELOG | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 248df1c81..25189c97b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,15 @@ +Hubzilla 9.2.1 (2024-07-18) + - Fix fatal error if gd function image{jpeg, png, webp}() does not exist for some reason + - Add missing pdl for mod import + - Escape queueworker json data + - Fix missing object when repeating own posts + - Improve display of system notifications in relation with page reloads + - Add possibility to only display system notifications with notifications widget + - Fix layout issue with socialauth addon + - Save a db lookup if we have just reset notifications in sse addon + - Fix php error if attachment was an empty string in pubcrawl addon + + Hubzilla 9.2 (2024-07-06) - Fail to import more gracefully if a channel has already been imported at some point but was deleted again - Use the doubleleft template by default for admin pages to work around some display issues -- cgit v1.2.3