diff --git a/admin/class-bread-admin.php b/admin/class-bread-admin.php
index 29aa161..97e5730 100644
--- a/admin/class-bread-admin.php
+++ b/admin/class-bread-admin.php
@@ -394,9 +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());
- 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'));
+ return $file_name;
}
function my_theme_add_editor_styles()
{
@@ -469,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':
@@ -481,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;
@@ -491,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 8600897..e927d3c 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($_COOKIE['bread_import_file'])) {
- echo ''.esc_html(__('File loaded', 'bread')).'
';
+ if (!empty($filename)) {
+ echo '';
+ echo '
'.esc_html(__('File loaded: ', 'bread')).esc_html($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))."
";
+ 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
diff --git a/bmlt-meeting-list.php b/bmlt-meeting-list.php
index 071639c..1314b5d 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+
@@ -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/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');
diff --git a/public/class-bread-content-generator.php b/public/class-bread-content-generator.php
index 2d9dcbb..f2dd245 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;
+ /**
+ * Regular expressions for clean up the output
+ *
+ * @var array
+ */
+ private array $preg_clean_up = array(
+ '/<[a-z]+\s*>[\s,]*<\/[^>]*>/i' => '',
+ '/\s\s+/i' => ' ',
+ '/\([\s,]*\)\s*/i' => '',
+ '/(<\/?p>|
|]*>|\))\s*,/i' => '\1',
+ '/,\s*(,| \(|<\/?p| |<\/span><\/td>)/i' => '\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.
@@ -311,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.
*
@@ -333,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)) {
@@ -442,42 +484,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(
- '' => '',
- ' ' => '',
- '' => '',
- ' ' => '',
- '' => '',
- ' ' => '',
- ' ' => ' ',
- ' ' => ' ',
- ' ' => ' ',
- '' => '',
- '()' => '',
- ' ' => 'line_break',
- ' ' => 'line_break',
- 'line_break line_break' => ' ',
- 'line_breakline_break' => ' ',
- 'line_break' => ' ',
- ' ,' => ' ',
- ', ' => ' ',
- ', ' => ' ',
- ',' => ' ',
- ", , ," => ",",
- ", *," => ",",
- ", ," => ",",
- " , " => " ",
- ", (" => " (",
- ',' => '',
- ', ' => '',
- );
- foreach ($clean_up as $key => $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*(,| \(| 0);
+ $data = preg_replace('/\s+,/i', ',', $data);
return $data;
}
/**
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 = ' ';
diff --git a/readme.txt b/readme.txt
index 777f2dd..afc7013 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,11 @@ 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
+* Updated mPDF
+* Minor Bug Fixes
+
= 2.9.11 =
* Corrected Greek Translation
|