diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml
index 8184c9a24..e6ce1f5f8 100644
--- a/.github/workflows/build-release.yml
+++ b/.github/workflows/build-release.yml
@@ -14,7 +14,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- php-version: ['7.4']
+ php-version: ['8.2']
experimental: [false]
steps:
@@ -93,7 +93,7 @@ jobs:
sudo php -S 0.0.0.0:80 -t public_html > /dev/null 2>&1 &
- name: Check PHP syntax errors
- uses: overtrue/phplint@2.4.1
+ uses: overtrue/phplint@9.1.2
with:
path: ./public_html
options: --exclude=base/vendor
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index ce4c002df..4f381b35a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -11,14 +11,10 @@ jobs:
strategy:
fail-fast: false
matrix:
- php-version: ['7.4', '8.0', '8.1']
+ php-version: ['7.4', '8.0', '8.1','8.2']
experimental: [false]
include:
- - php-version: 7.2
- experimental: true
- - php-version: 7.3
- experimental: true
- - php-version: 8.2
+ - php-version: 8.3
experimental: true
steps:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 07e7fbb4a..3362d2d27 100755
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -25,7 +25,7 @@ Please follow the guidelines below when creating an issue so that your issue can
**Avoid duplicated issues**
-Before you report an issue, please search through [existing issues on Mantis](https://mantis.phplist.com) and [GitHub](https://github.com/phpList/phplist3/issues) to see if your issue is already reported or fixed to make sure you are not reporting a duplicated issue.
+Before you report an issue, please search through [existing issues](https://github.com/phpList/phplist3/issues) to see if your issue is already reported or fixed to make sure you are not reporting a duplicated issue.
Also, make sure you have the latest version of phpList and see if the issue still exists.
diff --git a/Dockerfile.release b/Dockerfile.release
index 132029dca..dd4522da2 100644
--- a/Dockerfile.release
+++ b/Dockerfile.release
@@ -1,5 +1,5 @@
-FROM debian:buster-slim
+FROM debian:bookworm-slim
LABEL maintainer="michiel@phplist.com"
diff --git a/VERSION b/VERSION
index 044941ac8..8c177dddd 100755
--- a/VERSION
+++ b/VERSION
@@ -1,4 +1,4 @@
# file that keeps track of the latest tag in cvs and the corresponding version
# this automates publishing a new version, when it's tagged
# if you don't understand this, don't worry. You don't need this file
-VERSION=3.6.13
+VERSION=3.6.15
diff --git a/composer.lock b/composer.lock
index ae13e7560..ecc24f6d8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -80,12 +80,12 @@
"source": {
"type": "git",
"url": "https://github.com/bramley/phplist-plugin-common.git",
- "reference": "4c09fe0dc33d5e0dfcda57f22aa722f399e070b9"
+ "reference": "6a9bf17c068f43be906e482010760cbce61a1766"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bramley/phplist-plugin-common/zipball/4c09fe0dc33d5e0dfcda57f22aa722f399e070b9",
- "reference": "4c09fe0dc33d5e0dfcda57f22aa722f399e070b9",
+ "url": "https://api.github.com/repos/bramley/phplist-plugin-common/zipball/6a9bf17c068f43be906e482010760cbce61a1766",
+ "reference": "6a9bf17c068f43be906e482010760cbce61a1766",
"shasum": ""
},
"require": {
@@ -115,10 +115,13 @@
"plugins/CommonPlugin/vendor/ext/",
"plugins/CommonPlugin/vendor/jmathai/php-multi-curl/src",
"plugins/CommonPlugin/vendor/katzgrau/klogger/src",
+ "plugins/CommonPlugin/vendor/kodus/db-cache/src",
+ "plugins/CommonPlugin/vendor/kodus/file-cache/src",
"plugins/CommonPlugin/vendor/mouf/picotainer/src",
"plugins/CommonPlugin/vendor/pelago/emogrifier/src",
"plugins/CommonPlugin/vendor/psr/container/src",
"plugins/CommonPlugin/vendor/psr/log/Psr",
+ "plugins/CommonPlugin/vendor/psr/simple-cache/src",
"plugins/CommonPlugin/vendor/sabberworm/php-css-parser/src",
"plugins/CommonPlugin/vendor/symfony/css-selector",
"plugins/CommonPlugin/vendor/symfony/filesystem"
@@ -140,10 +143,10 @@
"phplist"
],
"support": {
- "source": "https://github.com/bramley/phplist-plugin-common/tree/3.29.1",
+ "source": "https://github.com/bramley/phplist-plugin-common/tree/3.33.0",
"issues": "https://github.com/bramley/phplist-plugin-common/issues"
},
- "time": "2023-09-06T16:55:37+00:00"
+ "time": "2024-02-15T11:36:33+00:00"
},
{
"name": "bramley/phplist-plugin-segment",
@@ -151,12 +154,12 @@
"source": {
"type": "git",
"url": "https://github.com/bramley/phplist-plugin-segment.git",
- "reference": "3c99756eb4c85a124a07172ea77eae00caf6499b"
+ "reference": "50850afce743b574493f9d13ee219868ae1ec417"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bramley/phplist-plugin-segment/zipball/3c99756eb4c85a124a07172ea77eae00caf6499b",
- "reference": "3c99756eb4c85a124a07172ea77eae00caf6499b",
+ "url": "https://api.github.com/repos/bramley/phplist-plugin-segment/zipball/50850afce743b574493f9d13ee219868ae1ec417",
+ "reference": "50850afce743b574493f9d13ee219868ae1ec417",
"shasum": ""
},
"default-branch": true,
@@ -174,10 +177,10 @@
"phplist"
],
"support": {
- "source": "https://github.com/bramley/phplist-plugin-segment/tree/2.13.2",
+ "source": "https://github.com/bramley/phplist-plugin-segment/tree/2.14.1",
"issues": "https://github.com/bramley/phplist-plugin-segment/issues"
},
- "time": "2023-04-03T14:57:27+00:00"
+ "time": "2023-12-12T10:10:51+00:00"
},
{
"name": "bramley/phplist-plugin-updater",
diff --git a/public_html/lists/admin/CsvReader.php b/public_html/lists/admin/CsvReader.php
index d5d3cb68b..fe5e15fca 100644
--- a/public_html/lists/admin/CsvReader.php
+++ b/public_html/lists/admin/CsvReader.php
@@ -16,7 +16,6 @@ class CsvReader
*/
public function __construct($filename, $delimiter)
{
- ini_set('auto_detect_line_endings', true);
$this->fh = fopen($filename, 'r');
$this->delimiter = $delimiter;
$this->totalRows = 0;
diff --git a/public_html/lists/admin/actions/import1.php b/public_html/lists/admin/actions/import1.php
index 9e0a69fd9..e73631edc 100644
--- a/public_html/lists/admin/actions/import1.php
+++ b/public_html/lists/admin/actions/import1.php
@@ -53,12 +53,13 @@
if (!is_email($email) && $omit_invalid) {
unset($email, $info);
$count_invalid_emails++;
+ } else {
+ //# actually looks like the "info" bit will get lost, but
+ //# in a way, that doesn't matter
+ $user_list[$email] = array(
+ 'info' => $info,
+ );
}
- //# actually looks like the "info" bit will get lost, but
- //# in a way, that doesn't matter
- $user_list[$email] = array(
- 'info' => $info,
- );
}
$count_email_add = 0;
diff --git a/public_html/lists/admin/actions/listmembercount.php b/public_html/lists/admin/actions/listmembercount.php
index edf7cb6de..e0b2b0127 100644
--- a/public_html/lists/admin/actions/listmembercount.php
+++ b/public_html/lists/admin/actions/listmembercount.php
@@ -49,11 +49,11 @@ function listMemberCounts($listId)
.'%s, '.' '
.'%s'.')',
s('Confirmed and not blacklisted members'),
- number_format($counts['confirmed']),
+ number_format(!empty($counts['confirmed']) ? $counts['confirmed'] : 0),
s('Unconfirmed and not blacklisted members'),
- number_format($counts['notconfirmed']),
+ number_format(!empty($counts['notconfirmed']) ? $counts['notconfirmed'] : 0),
s('Blacklisted members'),
- number_format($counts['blacklisted'])
+ number_format(!empty($counts['blacklisted']) ? $counts['blacklisted'] : 0)
);
return $membersDisplay;
diff --git a/public_html/lists/admin/admin.php b/public_html/lists/admin/admin.php
index 557cef1ba..f505ee747 100644
--- a/public_html/lists/admin/admin.php
+++ b/public_html/lists/admin/admin.php
@@ -18,6 +18,7 @@
echo Error(s('No Access'));
return;
}
+$accesslevel = 'all';
if (!empty($_POST['change'])) {
if (!verifyToken()) { //# csrf check, should be added in more places
@@ -102,7 +103,7 @@
'statistics' => !empty($_POST['statistics']),
'settings' => !empty($_POST['settings']),
);
- Sql_Query(sprintf('update %s set modified=now(), modifiedby = "%s", privileges = "%s" where id = %d',
+ Sql_Query(sprintf('update %s set modifiedby = "%s", privileges = "%s" where id = %d',
$GLOBALS['tables']['admin'], adminName($_SESSION['logindetails']['id']), sql_escape(serialize($privs)),
$id));
@@ -157,7 +158,7 @@
if (isset($data['privileges'])) {
$privileges = unserialize($data['privileges']);
} else {
- $privileges = array();
+ $privileges = array('subscribers' => 0, 'campaigns' => 0, 'statistics' => 0, 'settings' => 0);
}
reset($struct);
diff --git a/public_html/lists/admin/bounce.php b/public_html/lists/admin/bounce.php
index cba6a682e..26155c9e9 100644
--- a/public_html/lists/admin/bounce.php
+++ b/public_html/lists/admin/bounce.php
@@ -18,6 +18,7 @@
$deletebounce = isset($_GET['deletebounce']); //BUGFIX #15286 - nickyoung
$amount = isset($_GET['amount']) ? sprintf('%d', $_GET['amount']) : ''; //BUGFIX #15286 - CS2
$unconfirm = isset($_GET['unconfirm']); //BUGFIX #15286 - CS2
+$confirm = isset($_GET['confirm']);
$maketext = isset($_GET['maketext']); //BUGFIX #15286 - CS2
$deleteuser = isset($_GET['deleteuser']); //BUGFIX #15286 - CS2
@@ -76,10 +77,14 @@
}
}
- if (!empty($userid) && $unconfirm) {
- Sql_Query(sprintf('update %s set confirmed = 0 where id = %d',
+ if (!empty($userid) && ($unconfirm || $confirm)) {
+ Sql_Query(sprintf('update %s set confirmed = ' . ($confirm ? '1' : '0') . ' where id = %d',
$tables['user'], $userid));
- $actionresult .= sprintf($GLOBALS['I18N']->get('Made subscriber %s unconfirmed').'
', $userid);
+ if ($confirm) {
+ $actionresult .= sprintf(s('Made subscriber %s confirmed').'
', $userid);
+ } else {
+ $actionresult .= sprintf(s('Made subscriber %s unconfirmed').'
', $userid);
+ }
}
if (!empty($userid) && $maketext) {
@@ -164,16 +169,28 @@
$GLOBALS['I18N']->get('Memo for this rule'));
$newruleform .= '