From c63c713ac43f61b0ecca6d50b8abdfcb368445ad Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Thu, 16 Apr 2026 14:49:26 +0200 Subject: [PATCH 01/13] Clean up commas in generated content. --- bmlt-meeting-list.php | 2 +- public/class-bread-content-generator.php | 10 ++++++---- readme.txt | 5 ++++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/bmlt-meeting-list.php b/bmlt-meeting-list.php index 071639c..2ff3172 100644 --- a/bmlt-meeting-list.php +++ b/bmlt-meeting-list.php @@ -11,7 +11,7 @@ * Plugin Name: Bread * Plugin URI: https://bmlt.app * Description: Maintains and generates PDF Meeting Lists from BMLT. - * Version: 2.9.11 + * Version: 2.9.12 * Author: bmlt-enabled * Author URI: https://bmlt.app/ * License: GPL-2.0+ diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php index 2d9dcbb..6e0974b 100644 --- a/public/class-bread-content-generator.php +++ b/public/class-bread-content-generator.php @@ -445,6 +445,7 @@ private function write_single_meeting(array $meeting_value, string $template, ar $search_strings = array(); $replacements = array(); $clean_up = array( + chr(194) . chr(160) => ' ', '' => '', ' ' => '', '' => '', @@ -465,10 +466,6 @@ private function write_single_meeting(array $meeting_value, string $template, ar ',
' => '
', ',
' => '
', '

,' => '

', - ", , ," => ",", - ", *," => ",", - ", ," => ",", - " , " => " ", ", (" => " (", ', ' ' 0); + return $data; } /** diff --git a/readme.txt b/readme.txt index 777f2dd..60186e5 100644 --- a/readme.txt +++ b/readme.txt @@ -5,7 +5,7 @@ Tags: meeting list, bmlt, narcotics anonymous, na Requires PHP: 8.1 Requires at least: 6.2 Tested up to: 6.9 -Stable tag: 2.9.11 +Stable tag: 2.9.12 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -55,6 +55,9 @@ Follow all these steps, keep in mind that once you start using bread, it's not g == Changelog == += 2.9.12 = +* Cleaned up commas after blank fields + = 2.9.11 = * Corrected Greek Translation From c7edb6d4a9c34db10e63a3218133b4c874f6b67e Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Fri, 17 Apr 2026 20:07:20 +0200 Subject: [PATCH 02/13] Use Regular Expressions for more power --- admin/partials/bread-admin-display.php | 2 +- public/class-bread-content-generator.php | 67 +++++++++++------------- 2 files changed, 33 insertions(+), 36 deletions(-) diff --git a/admin/partials/bread-admin-display.php b/admin/partials/bread-admin-display.php index 8600897..40111dd 100644 --- a/admin/partials/bread-admin-display.php +++ b/admin/partials/bread-admin-display.php @@ -123,7 +123,7 @@ function admin_options_page() $num = delete_transient($this->bread->get_TransientKey($this->bread->getRequestedSetting())); if ($num > 0) { /* translators: string is number of cache entries deleted */ - echo "

" . esc_html(sprintf(__('%s Cache entries deleted', 'bread')), esc_attr($num))."

"; + echo "

" . esc_html(sprintf(__('%s Cache entries deleted', 'bread'), esc_attr($num), 'bread'))."

"; } } } diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php index 6e0974b..ae73178 100644 --- a/public/class-bread-content-generator.php +++ b/public/class-bread-content-generator.php @@ -78,6 +78,24 @@ class Bread_ContentGenerator 'hrs' => 'duration_h', "area" => 'area_name', ); + /** + * Simple clean up the output + * + * @var array + */ + private array $clean_up; + /** + * Simple clean up the output + * + * @var array + */ + private array $preg_clean_up = array( + '/<[a-z]+\s*>[\s,]*<\/.*>/i' => '', + '/\s\s+/i' => ' ', + '/\([\s,]*\)\s*/i' => '', + '/(

|
|)\s*,/i' => '\1', + '/,\s*([,(]| '\1', + ); /** * The constuctor sets things up so that we are ready to generate. * @@ -146,6 +164,16 @@ function __construct(Mpdf $mpdf, Bread $bread, array $result_meetings, Bread_For $this->mpdf->SetWatermarkImage($this->options['watermark'], 0.2, 'F'); $this->mpdf->showWatermarkImage = true; } + $this->clean_up = array( + // TineMCE sometimes inserts non-breaking spaces. + chr(194) . chr(160) => ' ', + // This line_break stuff seems to be some legacy mechanism + '
' => 'line_break', + '
' => 'line_break', + 'line_break line_break' => '
', + 'line_breakline_break' => '
', + 'line_break' => '
', + ); } /** * Generates the contents of the meeting list. @@ -442,44 +470,13 @@ private function write_single_meeting(array $meeting_value, string $template, ar '/>' . substr($data, $qr_end + 1); } - $search_strings = array(); - $replacements = array(); - $clean_up = array( - chr(194) . chr(160) => ' ', - '' => '', - ' ' => '', - '' => '', - ' ' => '', - '' => '', - ' ' => '', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - '

' => '', - '()' => '', - '
' => 'line_break', - '
' => 'line_break', - 'line_break line_break' => '
', - 'line_breakline_break' => '
', - 'line_break' => '
', - '
,' => '
', - ',
' => '
', - ',
' => '
', - '

,' => '

', - ", (" => " (", - ', ' ' $value) { - $search_strings[] = $key; - $replacements[] = $value; - } - $data = str_replace($search_strings, $replacements, $data); + $data = str_replace(array_keys($this->clean_up), array_values($this->clean_up), $data); + $data = preg_replace(array_keys($this->preg_clean_up), array_values($this->preg_clean_up), $data); do { - $data = preg_replace('/,\s*,/i', ',', $data, -1, $count); + $data = preg_replace('/,\s*([,(]| 0); - + $data = preg_replace('/\s+,/i',',',$data); return $data; } /** From c10ba10379e0267a5d06c4640bacb68da36cf54a Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Sat, 18 Apr 2026 00:17:15 +0200 Subject: [PATCH 03/13] Clean up some warnings --- admin/class-bread-admin.php | 7 ++++--- admin/partials/bread-admin-display.php | 4 ++-- includes/class-bread.php | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/admin/class-bread-admin.php b/admin/class-bread-admin.php index 29aa161..7ba35ff 100644 --- a/admin/class-bread-admin.php +++ b/admin/class-bread-admin.php @@ -394,9 +394,10 @@ function pwsix_process_settings_import() $settings['authors'] = array(wp_get_current_user()->ID); $this->bread->setOptions($settings); update_option($this->bread->getOptionsName(), $this->bread->getOptions()); - setcookie('current-meeting-list', $this->bread->getRequestedSetting(), time() + 10); - setcookie('bread_import_file', $import_file, time() + 10); - wp_safe_redirect(admin_url('?page=bmlt-enabled-bread')); + $url = admin_url('?page=bmlt-enabled-bread¤t-meeting-list=' . $this->bread->getRequestedSetting() + . '&bread_import_file=' . basename($import_file)); + echo(""); + die(); } function my_theme_add_editor_styles() { diff --git a/admin/partials/bread-admin-display.php b/admin/partials/bread-admin-display.php index 40111dd..d174266 100644 --- a/admin/partials/bread-admin-display.php +++ b/admin/partials/bread-admin-display.php @@ -110,8 +110,8 @@ function admin_options_page()

'; - if (isset($_COOKIE['bread_import_file'])) { + echo '
'; + if (isset($_GET['bread_import_file'])) { echo '

'.esc_html(__('File loaded', 'bread')).'

'; delete_transient($this->bread->get_TransientKey($this->bread->getRequestedSetting())); } elseif (isset($_POST['bmltmeetinglistsave']) && $_POST['bmltmeetinglistsave']) { diff --git a/includes/class-bread.php b/includes/class-bread.php index 80fa3e6..94da329 100644 --- a/includes/class-bread.php +++ b/includes/class-bread.php @@ -656,6 +656,7 @@ private function fillUnsetOptionsInner() $this->fillUnsetOption('margin_left', 3); $this->fillUnsetOption('margin_right', 3); $this->fillUnsetOption('margin_footer', 5); + $this->fillUnsetOption('margin_header', 10); $this->fillUnsetOption('column_gap', "5"); $this->fillUnsetOption('content_line_height', '1.0'); $this->fillUnsetOption('page_size', 'legal'); From 0fcbbfd41afd9f9371246748bd50a6392bee4678 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Sat, 18 Apr 2026 19:21:52 +0200 Subject: [PATCH 04/13] use esc_url_raw --- admin/class-bread-admin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/class-bread-admin.php b/admin/class-bread-admin.php index 7ba35ff..05cb392 100644 --- a/admin/class-bread-admin.php +++ b/admin/class-bread-admin.php @@ -396,7 +396,7 @@ function pwsix_process_settings_import() update_option($this->bread->getOptionsName(), $this->bread->getOptions()); $url = admin_url('?page=bmlt-enabled-bread¤t-meeting-list=' . $this->bread->getRequestedSetting() . '&bread_import_file=' . basename($import_file)); - echo(""); + echo ""; die(); } function my_theme_add_editor_styles() From c386b238285598ffe76247cff2ef5d4b4fbfe178 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Sat, 18 Apr 2026 20:04:12 +0200 Subject: [PATCH 05/13] fix comment --- public/class-bread-content-generator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php index ae73178..7cf3f47 100644 --- a/public/class-bread-content-generator.php +++ b/public/class-bread-content-generator.php @@ -85,7 +85,7 @@ class Bread_ContentGenerator */ private array $clean_up; /** - * Simple clean up the output + * Regular expressions for clean up the output * * @var array */ From f0407926041917d61089648fd3ec53534383e571 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:39:36 +0200 Subject: [PATCH 06/13] Lint --- public/class-bread-content-generator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php index 7cf3f47..4d27df8 100644 --- a/public/class-bread-content-generator.php +++ b/public/class-bread-content-generator.php @@ -476,7 +476,7 @@ private function write_single_meeting(array $meeting_value, string $template, ar do { $data = preg_replace('/,\s*([,(]| 0); - $data = preg_replace('/\s+,/i',',',$data); + $data = preg_replace('/\s+,/i', ',', $data); return $data; } /** From fe9fb6af42c4bbfa0bf5224af1bfc09d70dc4661 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Sun, 19 Apr 2026 20:44:24 +0200 Subject: [PATCH 07/13] fix to regexp --- public/class-bread-content-generator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php index 4d27df8..a4997ba 100644 --- a/public/class-bread-content-generator.php +++ b/public/class-bread-content-generator.php @@ -93,7 +93,7 @@ class Bread_ContentGenerator '/<[a-z]+\s*>[\s,]*<\/.*>/i' => '', '/\s\s+/i' => ' ', '/\([\s,]*\)\s*/i' => '', - '/(

|
|)\s*,/i' => '\1', + '/(

]*>>|
|]*>)\s*,/i' => '\1', '/,\s*([,(]| '\1', ); /** From 4aef001920982f86cea8f6817a2f9fae496450b5 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Mon, 20 Apr 2026 01:45:49 +0200 Subject: [PATCH 08/13] More RegExp fixes --- public/class-bread-content-generator.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php index a4997ba..d0ca12e 100644 --- a/public/class-bread-content-generator.php +++ b/public/class-bread-content-generator.php @@ -93,8 +93,8 @@ class Bread_ContentGenerator '/<[a-z]+\s*>[\s,]*<\/.*>/i' => '', '/\s\s+/i' => ' ', '/\([\s,]*\)\s*/i' => '', - '/(

]*>>|
|]*>)\s*,/i' => '\1', - '/,\s*([,(]| '\1', + '/(<\/?p>|
|]*>|\))\s*,/i' => '\1', + '/,\s*(,| \(| '\1', ); /** * The constuctor sets things up so that we are ready to generate. @@ -474,7 +474,7 @@ private function write_single_meeting(array $meeting_value, string $template, ar $data = preg_replace(array_keys($this->preg_clean_up), array_values($this->preg_clean_up), $data); do { - $data = preg_replace('/,\s*([,(]| 0); $data = preg_replace('/\s+,/i', ',', $data); return $data; From 20648dc403a5925aa970b2f5e5f88a41a2918b55 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Tue, 21 Apr 2026 00:34:37 +0200 Subject: [PATCH 09/13] Do not restart session after file import --- public/class-bread-meeting-enhancer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/class-bread-meeting-enhancer.php b/public/class-bread-meeting-enhancer.php index 9518139..40029fe 100644 --- a/public/class-bread-meeting-enhancer.php +++ b/public/class-bread-meeting-enhancer.php @@ -24,7 +24,7 @@ public function enhance_meeting(&$meeting_value, $lang, $formatsManager, $format { if ($formatStartTime) { $duration = explode(':', $meeting_value['duration_time']); - $minutes = intval($duration[0]) * 60 + intval($duration[1]) + intval($duration[2]); + $minutes = intval($duration[0]) * 60 + intval($duration[1]); $meeting_value['duration_m'] = $minutes; $meeting_value['duration_h'] = rtrim(rtrim(number_format($minutes / 60, 2), 0), '.'); $space = ' '; From 9b0263e5416c28af2db097039ed2bc73f66cf361 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Tue, 21 Apr 2026 00:35:10 +0200 Subject: [PATCH 10/13] FIninsh checkin --- admin/class-bread-admin.php | 10 ++++----- admin/partials/bread-admin-display.php | 28 ++++++++++++-------------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/admin/class-bread-admin.php b/admin/class-bread-admin.php index 05cb392..97e5730 100644 --- a/admin/class-bread-admin.php +++ b/admin/class-bread-admin.php @@ -394,10 +394,7 @@ function pwsix_process_settings_import() $settings['authors'] = array(wp_get_current_user()->ID); $this->bread->setOptions($settings); update_option($this->bread->getOptionsName(), $this->bread->getOptions()); - $url = admin_url('?page=bmlt-enabled-bread¤t-meeting-list=' . $this->bread->getRequestedSetting() - . '&bread_import_file=' . basename($import_file)); - echo ""; - die(); + return $file_name; } function my_theme_add_editor_styles() { @@ -470,6 +467,7 @@ function admin_submenu_link($parent_slug) } function admin_options_page() { + $filename = ''; if (!empty($_POST['pwsix_action']) && (!isset($_POST['bmltmeetinglistsave']) || $_POST['bmltmeetinglistsave'] != 'Save Changes')) { switch ($_POST['pwsix_action']) { case 'settings_admin': @@ -482,7 +480,7 @@ function admin_options_page() $this->pwsix_process_settings_export(); break; case 'import_settings': - $this->pwsix_process_settings_import(); + $filename = $this->pwsix_process_settings_import(); break; default: break; @@ -492,7 +490,7 @@ function admin_options_page() $this->bread->getConfigurationForSettingId($this->bread->getRequestedSetting()); } include_once plugin_dir_path(__FILE__) . 'partials/bread-admin-display.php'; - (new Bread_AdminDisplay($this))->admin_options_page(); + (new Bread_AdminDisplay($this))->admin_options_page($filename); } function pwsix_process_wizard() { diff --git a/admin/partials/bread-admin-display.php b/admin/partials/bread-admin-display.php index d174266..1668bf8 100644 --- a/admin/partials/bread-admin-display.php +++ b/admin/partials/bread-admin-display.php @@ -98,36 +98,36 @@ private function select_service_body_options(int $i)

'; - if (isset($_GET['bread_import_file'])) { - echo '

'.esc_html(__('File loaded', 'bread')).'

'; + if (!empty($filename)) { + echo '
'; + echo '

'.esc_html(__('File loaded: ', 'bread')).$filename.'

'; + echo '
'; delete_transient($this->bread->get_TransientKey($this->bread->getRequestedSetting())); - } elseif (isset($_POST['bmltmeetinglistsave']) && $_POST['bmltmeetinglistsave']) { + } + + if (isset($_POST['bmltmeetinglistsave']) && $_POST['bmltmeetinglistsave']) { if (!$this->admin->current_user_can_modify()) { + echo '
'; echo '

'.esc_html(__('You do not have permission to save this configuation!', 'bread')).'

'; + echo '
'; } else { $this->admin->save_admin_options(); - echo '

'.esc_html(__('Your changes were successfully saved!', 'bread')).'

'; + echo '
'; + echo '

'.esc_html(__('Your changes were successfully saved!', 'bread')).'

'; $num = delete_transient($this->bread->get_TransientKey($this->bread->getRequestedSetting())); if ($num > 0) { /* translators: string is number of cache entries deleted */ echo "

" . esc_html(sprintf(__('%s Cache entries deleted', 'bread'), esc_attr($num), 'bread'))."

"; } + echo '
'; } } - echo '
'; $this->bread->fillUnsetOptions(); $dir = str_starts_with(get_locale(), 'fa') ? 'rtl' : 'ltr'; @@ -193,5 +193,3 @@ function admin_options_page() } } ?> - - \ No newline at end of file From df10bebcd2d8619f8da14cfddaddb2dad59077e7 Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Thu, 23 Apr 2026 12:50:28 +0200 Subject: [PATCH 11/13] Fix Bugs --- bmlt-meeting-list.php | 2 +- composer.json | 2 +- composer.lock | 292 +++++++++++++++-------- public/class-bread-content-generator.php | 20 +- readme.txt | 2 + 5 files changed, 207 insertions(+), 111 deletions(-) diff --git a/bmlt-meeting-list.php b/bmlt-meeting-list.php index 2ff3172..1314b5d 100644 --- a/bmlt-meeting-list.php +++ b/bmlt-meeting-list.php @@ -30,7 +30,7 @@ * Start at version 2.8.0 and use SemVer - https://semver.org * Rename this for your plugin and update it as you release new versions. */ -define('BREAD_VERSION', '2.9.7'); +define('BREAD_VERSION', '2.9.12'); /** * The code that runs during plugin activation. diff --git a/composer.json b/composer.json index 52014a7..0d07a5b 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ } ], "require": { - "mpdf/mpdf": "8.2.3", + "mpdf/mpdf": "8.3.1", "monolog/monolog": "3.8.1", "mpdf/qrcode": "^1.0", "myclabs/deep-copy": "1.11.1" diff --git a/composer.lock b/composer.lock index 34a84c1..5a8dee5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "229e9dd4bab5aa9f641dbb72c059a63e", + "content-hash": "c1abca03a9f90ce7b858909fcbbcba2f", "packages": [ { "name": "monolog/monolog", @@ -111,16 +111,16 @@ }, { "name": "mpdf/mpdf", - "version": "v8.2.3", + "version": "v8.3.1", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "6f723a96becf989a831e38caf758d28364a69939" + "reference": "2a454ec334109911fdb323a284c19dbf3f049810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/6f723a96becf989a831e38caf758d28364a69939", - "reference": "6f723a96becf989a831e38caf758d28364a69939", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/2a454ec334109911fdb323a284c19dbf3f049810", + "reference": "2a454ec334109911fdb323a284c19dbf3f049810", "shasum": "" }, "require": { @@ -130,7 +130,7 @@ "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", "myclabs/deep-copy": "^1.7", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", "psr/http-message": "^1.0 || ^2.0", "psr/log": "^1.0 || ^2.0 || ^3.0", "setasign/fpdi": "^2.1" @@ -144,6 +144,7 @@ }, "suggest": { "ext-bcmath": "Needed for generation of some types of barcodes", + "ext-imagick": "Needed if developing the Mpdf library", "ext-xml": "Needed mainly for SVG manipulation", "ext-zlib": "Needed for compression of embedded resources, such as fonts" }, @@ -178,7 +179,7 @@ "utf-8" ], "support": { - "docs": "http://mpdf.github.io", + "docs": "https://mpdf.github.io", "issues": "https://github.com/mpdf/mpdf/issues", "source": "https://github.com/mpdf/mpdf" }, @@ -188,7 +189,7 @@ "type": "custom" } ], - "time": "2024-03-11T12:55:53+00:00" + "time": "2026-03-11T10:58:44+00:00" }, { "name": "mpdf/psr-http-message-shim", @@ -284,16 +285,16 @@ }, { "name": "mpdf/qrcode", - "version": "v1.2.1", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/mpdf/qrcode.git", - "reference": "5320c512776aa3c199bd8be8f707ec83d9779d85" + "reference": "d4fa19117a7241c30ac84902b6236a02c7a3f268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/qrcode/zipball/5320c512776aa3c199bd8be8f707ec83d9779d85", - "reference": "5320c512776aa3c199bd8be8f707ec83d9779d85", + "url": "https://api.github.com/repos/mpdf/qrcode/zipball/d4fa19117a7241c30ac84902b6236a02c7a3f268", + "reference": "d4fa19117a7241c30ac84902b6236a02c7a3f268", "shasum": "" }, "require": { @@ -301,7 +302,7 @@ "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "mockery/mockery": "^0.9.5", + "mockery/mockery": "^0.9.5 || ^1.0", "squizlabs/php_codesniffer": "^3.4", "tracy/tracy": "^2.5", "yoast/phpunit-polyfills": "^1.0" @@ -340,7 +341,7 @@ ], "support": { "issues": "https://github.com/mpdf/qrcode/issues", - "source": "https://github.com/mpdf/qrcode/tree/v1.2.1" + "source": "https://github.com/mpdf/qrcode/tree/v1.2.2" }, "funding": [ { @@ -348,7 +349,7 @@ "type": "custom" } ], - "time": "2024-06-04T13:40:39+00:00" + "time": "2025-12-19T16:21:49+00:00" }, { "name": "myclabs/deep-copy", @@ -564,31 +565,31 @@ }, { "name": "setasign/fpdi", - "version": "v2.6.3", + "version": "v2.6.6", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + "reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/de0cf35911be3e9ea63b48e0f307883b1c7c48ac", + "reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac", "shasum": "" }, "require": { "ext-zlib": "*", - "php": "^7.1 || ^8.0" + "php": ">=7.2 <=8.5.99999" }, "conflict": { "setasign/tfpdf": "<1.31" }, "require-dev": { - "phpunit/phpunit": "^7", + "phpunit/phpunit": "^8.5.52", "setasign/fpdf": "~1.8.6", "setasign/tfpdf": "~1.33", "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "^6.2" + "tecnickcom/tcpdf": "^6.8" }, "suggest": { "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." @@ -624,7 +625,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.3" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.6" }, "funding": [ { @@ -632,22 +633,22 @@ "type": "tidelift" } ], - "time": "2025-02-05T13:22:35+00:00" + "time": "2026-03-13T08:38:20+00:00" } ], "packages-dev": [ { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -666,7 +667,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -690,9 +691,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phar-io/manifest", @@ -814,35 +815,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "11.0.9", + "version": "11.0.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.4.0", + "nikic/php-parser": "^5.7.0", "php": ">=8.2", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-text-template": "^4.0.1", "sebastian/code-unit-reverse-lookup": "^4.0.1", "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.0", + "sebastian/environment": "^7.2.1", "sebastian/lines-of-code": "^3.0.1", "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.2.3" + "theseer/tokenizer": "^1.3.1" }, "require-dev": { - "phpunit/phpunit": "^11.5.2" + "phpunit/phpunit": "^11.5.46" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -880,40 +881,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" } ], - "time": "2025-02-25T13:26:39+00:00" + "time": "2025-12-24T07:01:01+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "5.1.0", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -941,15 +954,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2024-08-27T05:02:59+00:00" + "time": "2026-02-02T13:52:54+00:00" }, { "name": "phpunit/php-invoker", @@ -1294,16 +1319,16 @@ }, { "name": "sebastian/code-unit", - "version": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca" + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", - "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { @@ -1339,7 +1364,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" }, "funding": [ { @@ -1347,7 +1372,7 @@ "type": "github" } ], - "time": "2024-12-12T09:59:06+00:00" + "time": "2025-03-19T07:56:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1407,16 +1432,16 @@ }, { "name": "sebastian/comparator", - "version": "6.3.0", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115" + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115", - "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { @@ -1435,7 +1460,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.2-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -1475,15 +1500,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2025-01-06T10:28:19+00:00" + "time": "2026-01-24T09:26:40+00:00" }, { "name": "sebastian/complexity", @@ -1612,23 +1649,23 @@ }, { "name": "sebastian/environment", - "version": "7.2.0", + "version": "7.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", - "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "suggest": { "ext-posix": "*" @@ -1664,28 +1701,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" } ], - "time": "2024-07-03T04:54:44+00:00" + "time": "2025-05-21T11:55:47+00:00" }, { "name": "sebastian/exporter", - "version": "6.3.0", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { @@ -1699,7 +1748,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -1742,15 +1791,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-12-05T09:17:50+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", @@ -1988,23 +2049,23 @@ }, { "name": "sebastian/recursion-context", - "version": "6.0.2", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -2040,28 +2101,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2024-07-03T05:10:34+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { "name": "sebastian/type", - "version": "5.1.0", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac" + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac", - "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { @@ -2097,15 +2170,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.0" + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "time": "2024-09-17T13:12:04+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { "name": "sebastian/version", @@ -2163,16 +2248,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.11.3", + "version": "3.13.5", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10" + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", - "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", "shasum": "" }, "require": { @@ -2189,11 +2274,6 @@ "bin/phpcs" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" @@ -2239,24 +2319,24 @@ "type": "open_collective" }, { - "url": "https://thanks.dev/phpcsstandards", + "url": "https://thanks.dev/u/gh/phpcsstandards", "type": "thanks_dev" } ], - "time": "2025-01-23T17:04:15+00:00" + "time": "2025-11-04T16:30:35+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -2285,7 +2365,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -2293,7 +2373,7 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php index d0ca12e..2ed5a88 100644 --- a/public/class-bread-content-generator.php +++ b/public/class-bread-content-generator.php @@ -90,11 +90,11 @@ class Bread_ContentGenerator * @var array */ private array $preg_clean_up = array( - '/<[a-z]+\s*>[\s,]*<\/.*>/i' => '', + '/<[a-z]+\s*>[\s,]*<\/[^>]*>/i' => '', '/\s\s+/i' => ' ', '/\([\s,]*\)\s*/i' => '', '/(<\/?p>|
|]*>|\))\s*,/i' => '\1', - '/,\s*(,| \(| '\1', + '/,\s*(,| \(|<\/?p|)/i' => '\1', ); /** * The constuctor sets things up so that we are ready to generate. @@ -339,6 +339,20 @@ private function write_custom_section() $this->mpdf->WriteHTML('td{font-size: ' . $this->options['custom_section_font_size'] . "pt;line-height:" . $this->options['custom_section_line_height'] . ';}', 1); $this->writeHTMLwithAdditionalMeetinglist($data); } + /** + * Avoid making a deep copy of the PDF with all meetings when we + * create the additional list + * + * @var MPDF + */ + private $deepCopy = null; + private function getDeepCopy($m) + { + if ($this->deepCopy === null) { + $this->deepCopy = deep_copy($m); + } + return $this->deepCopy; + } /** * Generate the meeting list itself, using the specified template and the meetings as structed by the heading manager. * @@ -361,7 +375,7 @@ private function writeMeetings(string $template, Bread_Meetingslist_Structure $m * We want to check that a header and at least one meeting fits, so we write it * to a test PDF, see how big it is, and check if it will fit. */ - $test_pages = deep_copy($this->mpdf); + $test_pages = $this->getDeepCopy($this->mpdf); while ($subheadings = $meetingslistStructure->iterateMainHeading()) { while ($meetings = $meetingslistStructure->iterateSubHeading($subheadings)) { while ($meeting_value = $meetingslistStructure->iterateMeetings($meetings)) { diff --git a/readme.txt b/readme.txt index 60186e5..afc7013 100644 --- a/readme.txt +++ b/readme.txt @@ -57,6 +57,8 @@ Follow all these steps, keep in mind that once you start using bread, it's not g = 2.9.12 = * Cleaned up commas after blank fields +* Updated mPDF +* Minor Bug Fixes = 2.9.11 = * Corrected Greek Translation From daba9edc6743a03dfbe2836e15e2f47be310cf7b Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Thu, 23 Apr 2026 13:30:16 +0200 Subject: [PATCH 12/13] Plugin checks --- admin/partials/bread-admin-display.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/partials/bread-admin-display.php b/admin/partials/bread-admin-display.php index 1668bf8..e927d3c 100644 --- a/admin/partials/bread-admin-display.php +++ b/admin/partials/bread-admin-display.php @@ -106,7 +106,7 @@ function admin_options_page($filename = '') '; - echo '

'.esc_html(__('File loaded: ', 'bread')).$filename.'

'; + echo '

'.esc_html(__('File loaded: ', 'bread')).esc_html($filename).'

'; echo ''; delete_transient($this->bread->get_TransientKey($this->bread->getRequestedSetting())); } From 3635e6d9fb8eac548f22c83ddc616b86e993f94a Mon Sep 17 00:00:00 2001 From: otrok7 <50595291+otrok7@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:50:38 +0200 Subject: [PATCH 13/13] Handle end-of-span followed by end-of-td --- public/class-bread-content-generator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php index 2ed5a88..f2dd245 100644 --- a/public/class-bread-content-generator.php +++ b/public/class-bread-content-generator.php @@ -94,7 +94,7 @@ class Bread_ContentGenerator '/\s\s+/i' => ' ', '/\([\s,]*\)\s*/i' => '', '/(<\/?p>|
|]*>|\))\s*,/i' => '\1', - '/,\s*(,| \(|<\/?p|)/i' => '\1', + '/,\s*(,| \(|<\/?p||<\/span><\/td>)/i' => '\1', ); /** * The constuctor sets things up so that we are ready to generate.