diff --git a/data/web/admin.php b/data/web/admin.php index 98a7ddd5..7ef0ca57 100644 --- a/data/web/admin.php +++ b/data/web/admin.php @@ -81,7 +81,7 @@ if (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CAC
:
-

+

Get('LICENSE_STATUS_CAC ?> - ' : NULL; ?> + ' : NULL; ?>
@@ -222,13 +222,13 @@ if (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CAC
- +
@@ -241,7 +241,7 @@ if (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CAC
@@ -1174,15 +1174,17 @@ if (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CAC $val) { - ?> + if ($app_links) { + foreach ($app_links as $row) { + foreach ($row as $key => $val) { + ?> Get('LICENSE_STATUS_CAC

-
+
-
+

@@ -1506,7 +1508,7 @@ $js_minifier->add('/web/js/presets/rspamd.js'); $js_minifier->add('/web/js/site/pwgen.js'); require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php'; } else { - header('Location: /'); - exit(); + header('Location: /'); + exit(); } ?> diff --git a/data/web/css/build/014-responsive.css b/data/web/css/build/014-responsive.css index 4dd38cac..060b37c4 100644 --- a/data/web/css/build/014-responsive.css +++ b/data/web/css/build/014-responsive.css @@ -14,7 +14,6 @@ width: auto; float: left; margin-right: 10px; - margin-top: auto; } diff --git a/data/web/debug.php b/data/web/debug.php index 093e8b59..f8ad527e 100644 --- a/data/web/debug.php +++ b/data/web/debug.php @@ -76,7 +76,7 @@ $clamd_status = (preg_match("/^([yY][eE][sS]|[yY])+$/", $_ENV["SKIP_CLAMD"])) ?
-

: / +

: / (%)


: h

diff --git a/data/web/develcow.de/index.html b/data/web/develcow.de/index.html new file mode 100644 index 00000000..d72af314 --- /dev/null +++ b/data/web/develcow.de/index.html @@ -0,0 +1 @@ +asd diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index 2cc1617a..65c7ab1d 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -126,8 +126,8 @@ function hash_password($password) { return $pw_hash; } function password_complexity($_action, $_data = null) { - global $redis; - global $lang; + global $redis; + global $lang; switch ($_action) { case 'edit': if ($_SESSION['mailcow_cc_role'] != "admin") { @@ -253,7 +253,7 @@ function password_check($password1, $password2) { } function last_login($action, $username, $sasl_limit_days = 7) { global $pdo; - global $redis; + global $redis; $sasl_limit_days = intval($sasl_limit_days); switch ($action) { case 'get': @@ -345,7 +345,7 @@ function last_login($action, $username, $sasl_limit_days = 7) { return true; break; } - + } function flush_memcached() { try { @@ -359,13 +359,13 @@ function flush_memcached() { } function sys_mail($_data) { if ($_SESSION['mailcow_cc_role'] != "admin") { - $_SESSION['return'][] = array( - 'type' => 'danger', + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__), - 'msg' => 'access_denied' - ); - return false; - } + 'msg' => 'access_denied' + ); + return false; + } $excludes = $_data['mass_exclude']; $includes = $_data['mass_include']; $mailboxes = array(); @@ -374,28 +374,28 @@ function sys_mail($_data) { $mass_html = $_data['mass_html']; $mass_subject = $_data['mass_subject']; if (!filter_var($mass_from, FILTER_VALIDATE_EMAIL)) { - $_SESSION['return'][] = array( - 'type' => 'danger', + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__), - 'msg' => 'from_invalid' - ); - return false; + 'msg' => 'from_invalid' + ); + return false; } if (empty($mass_subject)) { - $_SESSION['return'][] = array( - 'type' => 'danger', + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__), - 'msg' => 'subject_empty' - ); - return false; + 'msg' => 'subject_empty' + ); + return false; } if (empty($mass_text)) { - $_SESSION['return'][] = array( - 'type' => 'danger', + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__), - 'msg' => 'text_empty' - ); - return false; + 'msg' => 'text_empty' + ); + return false; } $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains')); foreach ($domains as $domain) { @@ -489,8 +489,14 @@ function logger($_data = false) { $task = substr(strtoupper(md5(uniqid(rand(), true))), 0, 6); foreach ($_data['return'] as $return) { $type = $return['type']; - $msg = json_encode($return['msg'], JSON_UNESCAPED_UNICODE); - $call = json_encode($return['log'], JSON_UNESCAPED_UNICODE); + $msg = null; + if (isset($return['msg'])) { + $msg = json_encode($return['msg'], JSON_UNESCAPED_UNICODE); + } + $call = null; + if (isset($return['log'])) { + $call = json_encode($return['log'], JSON_UNESCAPED_UNICODE); + } if (!empty($_SESSION["dual-login"]["username"])) { $user = $_SESSION["dual-login"]["username"] . ' => ' . $_SESSION['mailcow_cc_username']; $role = $_SESSION["dual-login"]["role"] . ' => ' . $_SESSION['mailcow_cc_role']; @@ -527,16 +533,16 @@ function logger($_data = false) { } } function hasDomainAccess($username, $role, $domain) { - global $pdo; - if (!filter_var($username, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) { - return false; - } - if (empty($domain) || !is_valid_domain_name($domain)) { - return false; - } - if ($role != 'admin' && $role != 'domainadmin') { - return false; - } + global $pdo; + if (!filter_var($username, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) { + return false; + } + if (empty($domain) || !is_valid_domain_name($domain)) { + return false; + } + if ($role != 'admin' && $role != 'domainadmin') { + return false; + } if ($role == 'admin') { $stmt = $pdo->prepare("SELECT `domain` FROM `domain` WHERE `domain` = :domain"); @@ -563,49 +569,49 @@ function hasDomainAccess($username, $role, $domain) { return true; } } - return false; + return false; } function hasMailboxObjectAccess($username, $role, $object) { - global $pdo; - if (empty($username) || empty($role) || empty($object)) { - return false; - } - if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) { - return false; - } - if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') { - return false; - } - if ($username == $object) { - return true; - } + global $pdo; + if (empty($username) || empty($role) || empty($object)) { + return false; + } + if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) { + return false; + } + if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') { + return false; + } + if ($username == $object) { + return true; + } $stmt = $pdo->prepare("SELECT `domain` FROM `mailbox` WHERE `username` = :object"); $stmt->execute(array(':object' => $object)); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (isset($row['domain']) && hasDomainAccess($username, $role, $row['domain'])) { return true; } - return false; + return false; } // does also verify mailboxes as a mailbox is a alias == goto function hasAliasObjectAccess($username, $role, $object) { - global $pdo; - if (empty($username) || empty($role) || empty($object)) { - return false; - } - if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) { - return false; - } - if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') { - return false; - } + global $pdo; + if (empty($username) || empty($role) || empty($object)) { + return false; + } + if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) { + return false; + } + if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') { + return false; + } $stmt = $pdo->prepare("SELECT `domain` FROM `alias` WHERE `address` = :object"); $stmt->execute(array(':object' => $object)); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (isset($row['domain']) && hasDomainAccess($username, $role, $row['domain'])) { return true; } - return false; + return false; } function pem_to_der($pem_key) { // Need to remove BEGIN/END PUBLIC KEY @@ -615,9 +621,9 @@ function pem_to_der($pem_key) { return base64_decode(implode('', $lines)); } function expand_ipv6($ip) { - $hex = unpack("H*hex", inet_pton($ip)); - $ip = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1); - return $ip; + $hex = unpack("H*hex", inet_pton($ip)); + $ip = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1); + return $ip; } function generate_tlsa_digest($hostname, $port, $starttls = null) { if (!is_valid_domain_name($hostname)) { @@ -685,8 +691,10 @@ function alertbox_log_parser($_data) { // Get type $type = $return['type']; // If a lang[type][msg] string exists, use it as message - if (is_string($lang[$return['type']][$return['msg']])) { - $msg = $lang[$return['type']][$return['msg']]; + if (isset($return['type']) && isset($return['msg']) && !is_array($return['msg'])) { + if (isset($lang[$return['type']][$return['msg']])) { + $msg = $lang[$return['type']][$return['msg']]; + } } // If msg is an array, use first element as language string and run printf on it with remaining array elements elseif (is_array($return['msg'])) { @@ -798,26 +806,26 @@ function verify_hash($hash, $password) { return false; } function check_login($user, $pass) { - global $pdo; - global $redis; - global $imap_server; - if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) { + global $pdo; + global $redis; + global $imap_server; + if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $user, '*'), 'msg' => 'malformed_username' ); - return false; - } - $user = strtolower(trim($user)); - $stmt = $pdo->prepare("SELECT `password` FROM `admin` - WHERE `superadmin` = '1' - AND `active` = '1' - AND `username` = :user"); - $stmt->execute(array(':user' => $user)); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - foreach ($rows as $row) { - if (verify_hash($row['password'], $pass)) { + return false; + } + $user = strtolower(trim($user)); + $stmt = $pdo->prepare("SELECT `password` FROM `admin` + WHERE `superadmin` = '1' + AND `active` = '1' + AND `username` = :user"); + $stmt->execute(array(':user' => $user)); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach ($rows as $row) { + if (verify_hash($row['password'], $pass)) { if (get_tfa($user)['name'] != "none") { $_SESSION['pending_mailcow_cc_username'] = $user; $_SESSION['pending_mailcow_cc_role'] = "admin"; @@ -842,16 +850,16 @@ function check_login($user, $pass) { ); return "admin"; } - } - } - $stmt = $pdo->prepare("SELECT `password` FROM `admin` - WHERE `superadmin` = '0' - AND `active`='1' - AND `username` = :user"); - $stmt->execute(array(':user' => $user)); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - foreach ($rows as $row) { - if (verify_hash($row['password'], $pass) !== false) { + } + } + $stmt = $pdo->prepare("SELECT `password` FROM `admin` + WHERE `superadmin` = '0' + AND `active`='1' + AND `username` = :user"); + $stmt->execute(array(':user' => $user)); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach ($rows as $row) { + if (verify_hash($row['password'], $pass) !== false) { if (get_tfa($user)['name'] != "none") { $_SESSION['pending_mailcow_cc_username'] = $user; $_SESSION['pending_mailcow_cc_role'] = "domainadmin"; @@ -876,55 +884,55 @@ function check_login($user, $pass) { ); return "domainadmin"; } - } - } - $stmt = $pdo->prepare("SELECT `password` FROM `mailbox` + } + } + $stmt = $pdo->prepare("SELECT `password` FROM `mailbox` INNER JOIN domain on mailbox.domain = domain.domain - WHERE `kind` NOT REGEXP 'location|thing|group' + WHERE `kind` NOT REGEXP 'location|thing|group' AND `mailbox`.`active`='1' AND `domain`.`active`='1' AND `username` = :user"); - $stmt->execute(array(':user' => $user)); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - foreach ($rows as $row) { - if (verify_hash($row['password'], $pass) !== false) { - unset($_SESSION['ldelay']); + $stmt->execute(array(':user' => $user)); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach ($rows as $row) { + if (verify_hash($row['password'], $pass) !== false) { + unset($_SESSION['ldelay']); $_SESSION['return'][] = array( 'type' => 'success', 'log' => array(__FUNCTION__, $user, '*'), 'msg' => array('logged_in_as', $user) ); - return "user"; - } - } - if (!isset($_SESSION['ldelay'])) { - $_SESSION['ldelay'] = "0"; + return "user"; + } + } + if (!isset($_SESSION['ldelay'])) { + $_SESSION['ldelay'] = "0"; $redis->publish("F2B_CHANNEL", "mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); - } - elseif (!isset($_SESSION['mailcow_cc_username'])) { - $_SESSION['ldelay'] = $_SESSION['ldelay']+0.5; + } + elseif (!isset($_SESSION['mailcow_cc_username'])) { + $_SESSION['ldelay'] = $_SESSION['ldelay']+0.5; $redis->publish("F2B_CHANNEL", "mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); - error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); - } + error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']); + } $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $user, '*'), 'msg' => 'login_failed' ); - sleep($_SESSION['ldelay']); + sleep($_SESSION['ldelay']); return false; } function formatBytes($size, $precision = 2) { - if(!is_numeric($size)) { - return "0"; - } - $base = log($size, 1024); - $suffixes = array(' Byte', ' KiB', ' MiB', ' GiB', ' TiB'); - if ($size == "0") { - return "0"; - } - return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)]; + if(!is_numeric($size)) { + return "0"; + } + $base = log($size, 1024); + $suffixes = array(' Byte', ' KiB', ' MiB', ' GiB', ' TiB'); + if ($size == "0") { + return "0"; + } + return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)]; } function update_sogo_static_view() { if (getenv('SKIP_SOGO') == "y") { @@ -943,15 +951,15 @@ function update_sogo_static_view() { flush_memcached(); } function edit_user_account($_data) { - global $lang; - global $pdo; + global $lang; + global $pdo; $_data_log = $_data; !isset($_data_log['user_new_pass']) ?: $_data_log['user_new_pass'] = '*'; !isset($_data_log['user_new_pass2']) ?: $_data_log['user_new_pass2'] = '*'; !isset($_data_log['user_old_pass']) ?: $_data_log['user_old_pass'] = '*'; $username = $_SESSION['mailcow_cc_username']; $role = $_SESSION['mailcow_cc_role']; - $password_old = $_data['user_old_pass']; + $password_old = $_data['user_old_pass']; if (filter_var($username, FILTER_VALIDATE_EMAIL === false) || $role != 'user') { $_SESSION['return'][] = array( 'type' => 'danger', @@ -960,11 +968,11 @@ function edit_user_account($_data) { ); return false; } - $stmt = $pdo->prepare("SELECT `password` FROM `mailbox` - WHERE `kind` NOT REGEXP 'location|thing|group' + $stmt = $pdo->prepare("SELECT `password` FROM `mailbox` + WHERE `kind` NOT REGEXP 'location|thing|group' AND `username` = :user"); - $stmt->execute(array(':user' => $username)); - $row = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt->execute(array(':user' => $username)); + $row = $stmt->fetch(PDO::FETCH_ASSOC); if (!verify_hash($row['password'], $password_old)) { $_SESSION['return'][] = array( 'type' => 'danger', @@ -973,9 +981,9 @@ function edit_user_account($_data) { ); return false; } - if (!empty($_data['user_new_pass']) && !empty($_data['user_new_pass2'])) { - $password_new = $_data['user_new_pass']; - $password_new2 = $_data['user_new_pass2']; + if (!empty($_data['user_new_pass']) && !empty($_data['user_new_pass2'])) { + $password_new = $_data['user_new_pass']; + $password_new2 = $_data['user_new_pass2']; if (password_check($password_new, $password_new2) !== true) { return false; } @@ -988,17 +996,17 @@ function edit_user_account($_data) { ':password_hashed' => $password_hashed, ':username' => $username )); - } + } update_sogo_static_view(); - $_SESSION['return'][] = array( - 'type' => 'success', + $_SESSION['return'][] = array( + 'type' => 'success', 'log' => array(__FUNCTION__, $_data_log), - 'msg' => array('mailbox_modified', htmlspecialchars($username)) - ); + 'msg' => array('mailbox_modified', htmlspecialchars($username)) + ); } function user_get_alias_details($username) { - global $pdo; - global $lang; + global $pdo; + global $lang; $data['direct_aliases'] = array(); $data['shared_aliases'] = array(); if ($_SESSION['mailcow_cc_role'] == "user") { @@ -1073,19 +1081,19 @@ function user_get_alias_details($username) { return $data; } function is_valid_domain_name($domain_name) { - if (empty($domain_name)) { - return false; - } - $domain_name = idn_to_ascii($domain_name, 0, INTL_IDNA_VARIANT_UTS46); - return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) - && preg_match("/^.{1,253}$/", $domain_name) - && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)); + if (empty($domain_name)) { + return false; + } + $domain_name = idn_to_ascii($domain_name, 0, INTL_IDNA_VARIANT_UTS46); + return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) + && preg_match("/^.{1,253}$/", $domain_name) + && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)); } function set_tfa($_data) { - global $pdo; - global $yubi; - global $u2f; - global $tfa; + global $pdo; + global $yubi; + global $u2f; + global $tfa; $_data_log = $_data; !isset($_data_log['confirm_password']) ?: $_data_log['confirm_password'] = '*'; $username = $_SESSION['mailcow_cc_username']; @@ -1127,8 +1135,8 @@ function set_tfa($_data) { return false; } } - switch ($_data["tfa_method"]) { - case "yubi_otp": + switch ($_data["tfa_method"]) { + case "yubi_otp": $key_id = (!isset($_data["key_id"])) ? 'unidentified' : $_data["key_id"]; $yubico_id = $_data['yubico_id']; $yubico_key = $_data['yubico_key']; @@ -1141,55 +1149,55 @@ function set_tfa($_data) { ); return false; } - if (!ctype_alnum($_data["otp_token"]) || strlen($_data["otp_token"]) != 44) { - $_SESSION['return'][] = array( - 'type' => 'danger', + if (!ctype_alnum($_data["otp_token"]) || strlen($_data["otp_token"]) != 44) { + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__, $_data_log), - 'msg' => 'tfa_token_invalid' - ); - return false; - } + 'msg' => 'tfa_token_invalid' + ); + return false; + } $yauth = $yubi->verify($_data["otp_token"]); if (PEAR::isError($yauth)) { - $_SESSION['return'][] = array( - 'type' => 'danger', + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__, $_data_log), 'msg' => array('yotp_verification_failed', $yauth->getMessage()) - ); - return false; + ); + return false; } - try { + try { // We could also do a modhex translation here $yubico_modhex_id = substr($_data["otp_token"], 0, 12); $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username AND (`authmech` != 'yubi_otp') OR (`authmech` = 'yubi_otp' AND `secret` LIKE :modhex)"); - $stmt->execute(array(':username' => $username, ':modhex' => '%' . $yubico_modhex_id)); - $stmt = $pdo->prepare("INSERT INTO `tfa` (`key_id`, `username`, `authmech`, `active`, `secret`) VALUES - (:key_id, :username, 'yubi_otp', '1', :secret)"); - $stmt->execute(array(':key_id' => $key_id, ':username' => $username, ':secret' => $yubico_id . ':' . $yubico_key . ':' . $yubico_modhex_id)); - } - catch (PDOException $e) { - $_SESSION['return'][] = array( - 'type' => 'danger', + $stmt->execute(array(':username' => $username, ':modhex' => '%' . $yubico_modhex_id)); + $stmt = $pdo->prepare("INSERT INTO `tfa` (`key_id`, `username`, `authmech`, `active`, `secret`) VALUES + (:key_id, :username, 'yubi_otp', '1', :secret)"); + $stmt->execute(array(':key_id' => $key_id, ':username' => $username, ':secret' => $yubico_id . ':' . $yubico_key . ':' . $yubico_modhex_id)); + } + catch (PDOException $e) { + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__, $_data_log), - 'msg' => array('mysql_error', $e) - ); - return false; - } - $_SESSION['return'][] = array( - 'type' => 'success', + 'msg' => array('mysql_error', $e) + ); + return false; + } + $_SESSION['return'][] = array( + 'type' => 'success', 'log' => array(__FUNCTION__, $_data_log), - 'msg' => array('object_modified', htmlspecialchars($username)) - ); - break; - case "u2f": + 'msg' => array('object_modified', htmlspecialchars($username)) + ); + break; + case "u2f": $key_id = (!isset($_data["key_id"])) ? 'unidentified' : $_data["key_id"]; try { $reg = $u2f->doRegister(json_decode($_SESSION['regReq']), json_decode($_data['token'])); $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username AND `authmech` != 'u2f'"); - $stmt->execute(array(':username' => $username)); + $stmt->execute(array(':username' => $username)); $stmt = $pdo->prepare("INSERT INTO `tfa` (`username`, `key_id`, `authmech`, `keyHandle`, `publicKey`, `certificate`, `counter`, `active`) VALUES (?, ?, 'u2f', ?, ?, ?, ?, '1')"); $stmt->execute(array($username, $key_id, $reg->keyHandle, $reg->publicKey, $reg->certificate, $reg->counter)); $_SESSION['return'][] = array( @@ -1208,8 +1216,8 @@ function set_tfa($_data) { $_SESSION['regReq'] = null; return false; } - break; - case "totp": + break; + case "totp": $key_id = (!isset($_data["key_id"])) ? 'unidentified' : $_data["key_id"]; if ($tfa->verifyCode($_POST['totp_secret'], $_POST['totp_confirm_token']) === true) { $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username"); @@ -1229,25 +1237,25 @@ function set_tfa($_data) { 'msg' => 'totp_verification_failed' ); } - break; - case "none": + break; + case "none": $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username"); $stmt->execute(array(':username' => $username)); - $_SESSION['return'][] = array( - 'type' => 'success', + $_SESSION['return'][] = array( + 'type' => 'success', 'log' => array(__FUNCTION__, $_data_log), - 'msg' => array('object_modified', htmlspecialchars($username)) - ); - break; - } + 'msg' => array('object_modified', htmlspecialchars($username)) + ); + break; + } } function fido2($_data) { - global $pdo; + global $pdo; $_data_log = $_data; // Not logging registration data, only actions // Silent errors for "get" requests - switch ($_data["action"]) { - case "register": + switch ($_data["action"]) { + case "register": $username = $_SESSION['mailcow_cc_username']; if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) { $_SESSION['return'][] = array( @@ -1276,8 +1284,8 @@ function fido2($_data) { 'log' => array(__FUNCTION__, $_data["action"]), 'msg' => array('object_modified', $username) ); - break; - case "get_user_cids": + break; + case "get_user_cids": // Used to exclude existing CredentialIds while registering $username = $_SESSION['mailcow_cc_username']; if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) { @@ -1290,8 +1298,8 @@ function fido2($_data) { $cids[] = $row['credentialId']; } return $cids; - break; - case "get_all_cids": + break; + case "get_all_cids": // Only needed when using fido2 with username $stmt = $pdo->query("SELECT `credentialId` FROM `fido2`"); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); @@ -1299,7 +1307,7 @@ function fido2($_data) { $cids[] = $row['credentialId']; } return $cids; - break; + break; case "get_by_b64cid": if (!isset($_data['cid']) || empty($_data['cid'])) { return false; @@ -1315,8 +1323,8 @@ function fido2($_data) { $data['subject'] = $row['certificateSubject']; $data['cid'] = $row['cid']; return $data; - break; - case "get_friendly_names": + break; + case "get_friendly_names": $username = $_SESSION['mailcow_cc_username']; if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) { return false; @@ -1332,8 +1340,8 @@ function fido2($_data) { ); } return $fns; - break; - case "unset_fido2_key": + break; + case "unset_fido2_key": $username = $_SESSION['mailcow_cc_username']; if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) { $_SESSION['return'][] = array( @@ -1348,12 +1356,12 @@ function fido2($_data) { ':username' => $username, ':cid' => $_data['post_data']['unset_fido2_key'] )); - $_SESSION['return'][] = array( - 'type' => 'success', + $_SESSION['return'][] = array( + 'type' => 'success', 'log' => array(__FUNCTION__, $_data_log), - 'msg' => array('object_modified', htmlspecialchars($username)) - ); - break; + 'msg' => array('object_modified', htmlspecialchars($username)) + ); + break; case "edit_fn": $username = $_SESSION['mailcow_cc_username']; if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) { @@ -1370,13 +1378,13 @@ function fido2($_data) { ':friendlyName' => $_data['fido2_attrs']['fido2_fn'], ':cid' => $_data['fido2_attrs']['fido2_cid'] )); - $_SESSION['return'][] = array( - 'type' => 'success', + $_SESSION['return'][] = array( + 'type' => 'success', 'log' => array(__FUNCTION__, $_data_log), - 'msg' => array('object_modified', htmlspecialchars($username)) - ); - break; - } + 'msg' => array('object_modified', htmlspecialchars($username)) + ); + break; + } } function unset_tfa_key($_data) { // Can only unset own keys @@ -1433,7 +1441,7 @@ function unset_tfa_key($_data) { } } function get_tfa($username = null) { - global $pdo; + global $pdo; if (isset($_SESSION['mailcow_cc_username'])) { $username = $_SESSION['mailcow_cc_username']; } @@ -1445,76 +1453,83 @@ function get_tfa($username = null) { $stmt->execute(array(':username' => $username)); $row = $stmt->fetch(PDO::FETCH_ASSOC); - switch ($row["authmech"]) { - case "yubi_otp": - $data['name'] = "yubi_otp"; - $data['pretty'] = "Yubico OTP"; - $stmt = $pdo->prepare("SELECT `id`, `key_id`, RIGHT(`secret`, 12) AS 'modhex' FROM `tfa` WHERE `authmech` = 'yubi_otp' AND `username` = :username"); - $stmt->execute(array( - ':username' => $username, - )); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - while($row = array_shift($rows)) { - $data['additional'][] = $row; - } - return $data; - break; - case "u2f": - $data['name'] = "u2f"; - $data['pretty'] = "Fido U2F"; - $stmt = $pdo->prepare("SELECT `id`, `key_id` FROM `tfa` WHERE `authmech` = 'u2f' AND `username` = :username"); - $stmt->execute(array( - ':username' => $username, - )); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - while($row = array_shift($rows)) { - $data['additional'][] = $row; - } - return $data; - break; - case "hotp": - $data['name'] = "hotp"; - $data['pretty'] = "HMAC-based OTP"; - return $data; - break; - case "totp": - $data['name'] = "totp"; - $data['pretty'] = "Time-based OTP"; - $stmt = $pdo->prepare("SELECT `id`, `key_id`, `secret` FROM `tfa` WHERE `authmech` = 'totp' AND `username` = :username"); - $stmt->execute(array( - ':username' => $username, - )); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - while($row = array_shift($rows)) { - $data['additional'][] = $row; - } - return $data; + if (isset($row["authmech"])) { + switch ($row["authmech"]) { + case "yubi_otp": + $data['name'] = "yubi_otp"; + $data['pretty'] = "Yubico OTP"; + $stmt = $pdo->prepare("SELECT `id`, `key_id`, RIGHT(`secret`, 12) AS 'modhex' FROM `tfa` WHERE `authmech` = 'yubi_otp' AND `username` = :username"); + $stmt->execute(array( + ':username' => $username, + )); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + while($row = array_shift($rows)) { + $data['additional'][] = $row; + } + return $data; break; - default: - $data['name'] = 'none'; - $data['pretty'] = "-"; - return $data; - break; - } + case "u2f": + $data['name'] = "u2f"; + $data['pretty'] = "Fido U2F"; + $stmt = $pdo->prepare("SELECT `id`, `key_id` FROM `tfa` WHERE `authmech` = 'u2f' AND `username` = :username"); + $stmt->execute(array( + ':username' => $username, + )); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + while($row = array_shift($rows)) { + $data['additional'][] = $row; + } + return $data; + break; + case "hotp": + $data['name'] = "hotp"; + $data['pretty'] = "HMAC-based OTP"; + return $data; + break; + case "totp": + $data['name'] = "totp"; + $data['pretty'] = "Time-based OTP"; + $stmt = $pdo->prepare("SELECT `id`, `key_id`, `secret` FROM `tfa` WHERE `authmech` = 'totp' AND `username` = :username"); + $stmt->execute(array( + ':username' => $username, + )); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + while($row = array_shift($rows)) { + $data['additional'][] = $row; + } + return $data; + break; + default: + $data['name'] = 'none'; + $data['pretty'] = "-"; + return $data; + break; + } + } + else { + $data['name'] = 'none'; + $data['pretty'] = "-"; + return $data; + } } function verify_tfa_login($username, $token) { - global $pdo; - global $yubi; - global $u2f; - global $tfa; + global $pdo; + global $yubi; + global $u2f; + global $tfa; $stmt = $pdo->prepare("SELECT `authmech` FROM `tfa` WHERE `username` = :username AND `active` = '1'"); $stmt->execute(array(':username' => $username)); $row = $stmt->fetch(PDO::FETCH_ASSOC); - switch ($row["authmech"]) { - case "yubi_otp": - if (!ctype_alnum($token) || strlen($token) != 44) { - $_SESSION['return'][] = array( - 'type' => 'danger', + switch ($row["authmech"]) { + case "yubi_otp": + if (!ctype_alnum($token) || strlen($token) != 44) { + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__, $username, '*'), - 'msg' => array('yotp_verification_failed', 'token length error') - ); + 'msg' => array('yotp_verification_failed', 'token length error') + ); return false; } $yubico_modhex_id = substr($token, 0, 12); @@ -1529,20 +1544,20 @@ function verify_tfa_login($username, $token) { $yubi = new Auth_Yubico($yubico_auth[0], $yubico_auth[1]); $yauth = $yubi->verify($token); if (PEAR::isError($yauth)) { - $_SESSION['return'][] = array( - 'type' => 'danger', + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__, $username, '*'), - 'msg' => array('yotp_verification_failed', $yauth->getMessage()) - ); - return false; + 'msg' => array('yotp_verification_failed', $yauth->getMessage()) + ); + return false; } else { $_SESSION['tfa_id'] = $row['id']; - $_SESSION['return'][] = array( - 'type' => 'success', + $_SESSION['return'][] = array( + 'type' => 'success', 'log' => array(__FUNCTION__, $username, '*'), - 'msg' => 'verified_yotp_login' - ); + 'msg' => 'verified_yotp_login' + ); return true; } $_SESSION['return'][] = array( @@ -1627,31 +1642,34 @@ function verify_tfa_login($username, $token) { ); return false; break; - } + } return false; } function admin_api($access, $action, $data = null) { - global $pdo; - if ($_SESSION['mailcow_cc_role'] != "admin") { - $_SESSION['return'][] = array( - 'type' => 'danger', + global $pdo; + if ($_SESSION['mailcow_cc_role'] != "admin") { + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__), - 'msg' => 'access_denied' - ); - return false; - } + 'msg' => 'access_denied' + ); + return false; + } if ($access !== "ro" && $access !== "rw") { - $_SESSION['return'][] = array( - 'type' => 'danger', + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__), - 'msg' => 'invalid access type' - ); - return false; + 'msg' => 'invalid access type' + ); + return false; } if ($action == "edit") { $active = (!empty($data['active'])) ? 1 : 0; $skip_ip_check = (isset($data['skip_ip_check'])) ? 1 : 0; - $allow_from = array_map('trim', preg_split( "/( |,|;|\n)/", $data['allow_from'])); + $allow_from = array(); + if (isset($data['allow_from'])) { + $allow_from = array_map('trim', preg_split( "/( |,|;|\n)/", $data['allow_from'])); + } foreach ($allow_from as $key => $val) { if (empty($val)) { unset($allow_from[$key]); @@ -1738,29 +1756,31 @@ function admin_api($access, $action, $data = null) { elseif ($action == "get") { $stmt = $pdo->query("SELECT * FROM `api` WHERE `access` = '" . $access . "'"); $apidata = $stmt->fetch(PDO::FETCH_ASSOC); - $apidata['allow_from'] = str_replace(',', PHP_EOL, $apidata['allow_from']); + if ($apidata !== false) { + $apidata['allow_from'] = str_replace(',', PHP_EOL, $apidata['allow_from']); + } return $apidata; } - $_SESSION['return'][] = array( - 'type' => 'success', + $_SESSION['return'][] = array( + 'type' => 'success', 'log' => array(__FUNCTION__, $data), - 'msg' => 'admin_api_modified' - ); + 'msg' => 'admin_api_modified' + ); } function license($action, $data = null) { - global $pdo; - global $redis; - global $lang; - if ($_SESSION['mailcow_cc_role'] != "admin") { - $_SESSION['return'][] = array( - 'type' => 'danger', + global $pdo; + global $redis; + global $lang; + if ($_SESSION['mailcow_cc_role'] != "admin") { + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__), - 'msg' => 'access_denied' - ); - return false; - } - switch ($action) { - case "verify": + 'msg' => 'access_denied' + ); + return false; + } + switch ($action) { + case "verify": // Keep result until revalidate button is pressed or session expired $stmt = $pdo->query("SELECT `version` FROM `versions` WHERE `application` = 'GUID'"); $versions = $stmt->fetch(PDO::FETCH_ASSOC); @@ -1819,16 +1839,16 @@ function license($action, $data = null) { } } function rspamd_ui($action, $data = null) { - if ($_SESSION['mailcow_cc_role'] != "admin") { - $_SESSION['return'][] = array( - 'type' => 'danger', + if ($_SESSION['mailcow_cc_role'] != "admin") { + $_SESSION['return'][] = array( + 'type' => 'danger', 'log' => array(__FUNCTION__), - 'msg' => 'access_denied' - ); - return false; - } - switch ($action) { - case "edit": + 'msg' => 'access_denied' + ); + return false; + } + switch ($action) { + case "edit": $rspamd_ui_pass = $data['rspamd_ui_pass']; $rspamd_ui_pass2 = $data['rspamd_ui_pass2']; if (empty($rspamd_ui_pass) || empty($rspamd_ui_pass2)) { @@ -1904,11 +1924,11 @@ function get_logs($application, $lines = false) { $to = intval($to); if ($from < 1 || $to < $from) { return false; } } - global $redis; - global $pdo; - if ($_SESSION['mailcow_cc_role'] != "admin") { - return false; - } + global $redis; + global $pdo; + if ($_SESSION['mailcow_cc_role'] != "admin") { + return false; + } // SQL if ($application == "mailcow-ui") { if (isset($from) && isset($to)) { diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php index 853c7924..d97a388b 100644 --- a/data/web/inc/header.inc.php +++ b/data/web/inc/header.inc.php @@ -110,7 +110,7 @@ -
  • +
  • =7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/translation-contracts": "^2.3" }, "conflict": { @@ -1285,7 +1291,7 @@ "symfony/translation-implementation": "2.3" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^4.4|^5.0", "symfony/console": "^4.4|^5.0", "symfony/dependency-injection": "^5.0", @@ -1330,7 +1336,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.2" + "source": "https://github.com/symfony/translation/tree/v5.3.4" }, "funding": [ { @@ -1346,7 +1352,7 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2021-07-25T09:39:16+00:00" }, { "name": "symfony/translation-contracts", @@ -1428,22 +1434,22 @@ }, { "name": "symfony/var-dumper", - "version": "v5.3.2", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae" + "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/905a22c68b292ffb6f20d7636c36b220d1fba5ae", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", + "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -1496,7 +1502,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.2" + "source": "https://github.com/symfony/var-dumper/tree/v5.3.6" }, "funding": [ { @@ -1512,7 +1518,7 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2021-07-27T01:56:02+00:00" }, { "name": "tightenco/collect", @@ -1618,5 +1624,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } diff --git a/data/web/inc/lib/vendor/composer/ClassLoader.php b/data/web/inc/lib/vendor/composer/ClassLoader.php index 247294d6..6d0c3f2d 100644 --- a/data/web/inc/lib/vendor/composer/ClassLoader.php +++ b/data/web/inc/lib/vendor/composer/ClassLoader.php @@ -338,7 +338,7 @@ class ClassLoader * Loads the given class or interface. * * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise + * @return true|null True if loaded, null otherwise */ public function loadClass($class) { @@ -347,6 +347,8 @@ class ClassLoader return true; } + + return null; } /** diff --git a/data/web/inc/lib/vendor/composer/InstalledVersions.php b/data/web/inc/lib/vendor/composer/InstalledVersions.php index 65906e7a..b3a4e161 100644 --- a/data/web/inc/lib/vendor/composer/InstalledVersions.php +++ b/data/web/inc/lib/vendor/composer/InstalledVersions.php @@ -1,536 +1,337 @@ + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ namespace Composer; use Composer\Autoload\ClassLoader; use Composer\Semver\VersionParser; - - - - - - - +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require it's presence, you can require `composer-runtime-api ^2.0` + */ class InstalledVersions { -private static $installed = array ( - 'root' => - array ( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'aliases' => - array ( - ), - 'reference' => NULL, - 'name' => '__root__', - ), - 'versions' => - array ( - '__root__' => - array ( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'aliases' => - array ( - ), - 'reference' => NULL, - ), - 'bshaffer/oauth2-server-php' => - array ( - 'pretty_version' => 'v1.11.1', - 'version' => '1.11.1.0', - 'aliases' => - array ( - ), - 'reference' => '5a0c8000d4763b276919e2106f54eddda6bc50fa', - ), - 'ddeboer/imap' => - array ( - 'pretty_version' => '1.12.1', - 'version' => '1.12.1.0', - 'aliases' => - array ( - ), - 'reference' => 'dbed05ca67b93509345a820b2859de10c48948fb', - ), - 'directorytree/ldaprecord' => - array ( - 'pretty_version' => 'v2.5.0', - 'version' => '2.5.0.0', - 'aliases' => - array ( - ), - 'reference' => 'ff7a92615fdc3f8b7f3d347c2847ce7ce06db287', - ), - 'exorus/php-mime-mail-parser' => - array ( - 'replaced' => - array ( - 0 => '*', - ), - ), - 'illuminate/contracts' => - array ( - 'pretty_version' => 'v8.48.0', - 'version' => '8.48.0.0', - 'aliases' => - array ( - ), - 'reference' => '199fcedc161ba4a0b83feaddc4629f395dbf1641', - ), - 'matthiasmullie/minify' => - array ( - 'pretty_version' => '1.3.66', - 'version' => '1.3.66.0', - 'aliases' => - array ( - ), - 'reference' => '45fd3b0f1dfa2c965857c6d4a470bea52adc31a6', - ), - 'matthiasmullie/path-converter' => - array ( - 'pretty_version' => '1.1.3', - 'version' => '1.1.3.0', - 'aliases' => - array ( - ), - 'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9', - ), - 'messaged/php-mime-mail-parser' => - array ( - 'replaced' => - array ( - 0 => '*', - ), - ), - 'mustangostang/spyc' => - array ( - 'pretty_version' => '0.6.3', - 'version' => '0.6.3.0', - 'aliases' => - array ( - ), - 'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0', - ), - 'nesbot/carbon' => - array ( - 'pretty_version' => '2.49.0', - 'version' => '2.49.0.0', - 'aliases' => - array ( - ), - 'reference' => '93d9db91c0235c486875d22f1e08b50bdf3e6eee', - ), - 'paragonie/random_compat' => - array ( - 'pretty_version' => 'v9.99.100', - 'version' => '9.99.100.0', - 'aliases' => - array ( - ), - 'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a', - ), - 'php-mime-mail-parser/php-mime-mail-parser' => - array ( - 'pretty_version' => '5.0.5', - 'version' => '5.0.5.0', - 'aliases' => - array ( - ), - 'reference' => '27983433aabeccee832573c3c56e6a4855e57745', - ), - 'phpmailer/phpmailer' => - array ( - 'pretty_version' => 'v6.5.0', - 'version' => '6.5.0.0', - 'aliases' => - array ( - ), - 'reference' => 'a5b5c43e50b7fba655f793ad27303cd74c57363c', - ), - 'psr/container' => - array ( - 'pretty_version' => '1.1.1', - 'version' => '1.1.1.0', - 'aliases' => - array ( - ), - 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', - ), - 'psr/log' => - array ( - 'pretty_version' => '1.1.4', - 'version' => '1.1.4.0', - 'aliases' => - array ( - ), - 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', - ), - 'psr/simple-cache' => - array ( - 'pretty_version' => '1.0.1', - 'version' => '1.0.1.0', - 'aliases' => - array ( - ), - 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b', - ), - 'robthree/twofactorauth' => - array ( - 'pretty_version' => '1.8.0', - 'version' => '1.8.0.0', - 'aliases' => - array ( - ), - 'reference' => '30a38627ae1e7c9399dae67e265063cd6ec5276c', - ), - 'soundasleep/html2text' => - array ( - 'pretty_version' => '0.5.0', - 'version' => '0.5.0.0', - 'aliases' => - array ( - ), - 'reference' => 'cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad', - ), - 'symfony/deprecation-contracts' => - array ( - 'pretty_version' => 'v2.4.0', - 'version' => '2.4.0.0', - 'aliases' => - array ( - ), - 'reference' => '5f38c8804a9e97d23e0c8d63341088cd8a22d627', - ), - 'symfony/polyfill-mbstring' => - array ( - 'pretty_version' => 'v1.23.0', - 'version' => '1.23.0.0', - 'aliases' => - array ( - ), - 'reference' => '2df51500adbaebdc4c38dea4c89a2e131c45c8a1', - ), - 'symfony/polyfill-php80' => - array ( - 'pretty_version' => 'v1.23.0', - 'version' => '1.23.0.0', - 'aliases' => - array ( - ), - 'reference' => 'eca0bf41ed421bed1b57c4958bab16aa86b757d0', - ), - 'symfony/translation' => - array ( - 'pretty_version' => 'v5.3.2', - 'version' => '5.3.2.0', - 'aliases' => - array ( - ), - 'reference' => '7e2603bcc598e14804c4d2359d8dc4ee3c40391b', - ), - 'symfony/translation-contracts' => - array ( - 'pretty_version' => 'v2.4.0', - 'version' => '2.4.0.0', - 'aliases' => - array ( - ), - 'reference' => '95c812666f3e91db75385749fe219c5e494c7f95', - ), - 'symfony/translation-implementation' => - array ( - 'provided' => - array ( - 0 => '2.3', - ), - ), - 'symfony/var-dumper' => - array ( - 'pretty_version' => 'v5.3.2', - 'version' => '5.3.2.0', - 'aliases' => - array ( - ), - 'reference' => '905a22c68b292ffb6f20d7636c36b220d1fba5ae', - ), - 'tightenco/collect' => - array ( - 'pretty_version' => 'v8.34.0', - 'version' => '8.34.0.0', - 'aliases' => - array ( - ), - 'reference' => 'b069783ab0c547bb894ebcf8e7f6024bb401f9d2', - ), - 'yubico/u2flib-server' => - array ( - 'pretty_version' => '1.0.2', - 'version' => '1.0.2.0', - 'aliases' => - array ( - ), - 'reference' => '55d813acf68212ad2cadecde07551600d6971939', - ), - ), -); -private static $canGetVendors; -private static $installedByVendor = array(); + private static $installed; + private static $canGetVendors; + private static $installedByVendor = array(); + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + if (1 === \count($packages)) { + return $packages[0]; + } + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + return $packagesByType; + } -public static function getInstalledPackages() -{ -$packages = array(); -foreach (self::getInstalled() as $installed) { -$packages[] = array_keys($installed['versions']); -} - -if (1 === \count($packages)) { -return $packages[0]; -} - -return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); -} - - - - - - - - - -public static function isInstalled($packageName) -{ -foreach (self::getInstalled() as $installed) { -if (isset($installed['versions'][$packageName])) { -return true; -} -} - -return false; -} - - - - - - - - - - - - - - -public static function satisfies(VersionParser $parser, $packageName, $constraint) -{ -$constraint = $parser->parseConstraints($constraint); -$provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - -return $provided->matches($constraint); -} - - - - - - - - - - -public static function getVersionRanges($packageName) -{ -foreach (self::getInstalled() as $installed) { -if (!isset($installed['versions'][$packageName])) { -continue; -} - -$ranges = array(); -if (isset($installed['versions'][$packageName]['pretty_version'])) { -$ranges[] = $installed['versions'][$packageName]['pretty_version']; -} -if (array_key_exists('aliases', $installed['versions'][$packageName])) { -$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); -} -if (array_key_exists('replaced', $installed['versions'][$packageName])) { -$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); -} -if (array_key_exists('provided', $installed['versions'][$packageName])) { -$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); -} - -return implode(' || ', $ranges); -} - -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - - - - - -public static function getVersion($packageName) -{ -foreach (self::getInstalled() as $installed) { -if (!isset($installed['versions'][$packageName])) { -continue; -} - -if (!isset($installed['versions'][$packageName]['version'])) { -return null; -} - -return $installed['versions'][$packageName]['version']; -} - -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - - - - - -public static function getPrettyVersion($packageName) -{ -foreach (self::getInstalled() as $installed) { -if (!isset($installed['versions'][$packageName])) { -continue; -} - -if (!isset($installed['versions'][$packageName]['pretty_version'])) { -return null; -} - -return $installed['versions'][$packageName]['pretty_version']; -} - -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - - - - - -public static function getReference($packageName) -{ -foreach (self::getInstalled() as $installed) { -if (!isset($installed['versions'][$packageName])) { -continue; -} - -if (!isset($installed['versions'][$packageName]['reference'])) { -return null; -} - -return $installed['versions'][$packageName]['reference']; -} - -throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); -} - - - - - -public static function getRootPackage() -{ -$installed = self::getInstalled(); - -return $installed[0]['root']; -} - - - - - - - - -public static function getRawData() -{ -@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - -return self::$installed; -} - - - - - - - -public static function getAllRawData() -{ -return self::getInstalled(); -} - - - - - - - - - - - - - - - - - - - -public static function reload($data) -{ -self::$installed = $data; -self::$installedByVendor = array(); -} - - - - - -private static function getInstalled() -{ -if (null === self::$canGetVendors) { -self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); -} - -$installed = array(); - -if (self::$canGetVendors) { -foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { -if (isset(self::$installedByVendor[$vendorDir])) { -$installed[] = self::$installedByVendor[$vendorDir]; -} elseif (is_file($vendorDir.'/composer/installed.php')) { -$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; -} -} -} - -$installed[] = self::$installed; - -return $installed; -} + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = require __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + $installed[] = self::$installed; + + return $installed; + } } diff --git a/data/web/inc/lib/vendor/composer/autoload_files.php b/data/web/inc/lib/vendor/composer/autoload_files.php index bb6e4f97..fac18c7f 100644 --- a/data/web/inc/lib/vendor/composer/autoload_files.php +++ b/data/web/inc/lib/vendor/composer/autoload_files.php @@ -6,8 +6,8 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', 'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php', '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', diff --git a/data/web/inc/lib/vendor/composer/autoload_static.php b/data/web/inc/lib/vendor/composer/autoload_static.php index 32f92e9d..4d3a5d44 100644 --- a/data/web/inc/lib/vendor/composer/autoload_static.php +++ b/data/web/inc/lib/vendor/composer/autoload_static.php @@ -7,8 +7,8 @@ namespace Composer\Autoload; class ComposerStaticInit873464e4bd965a3168f133248b1b218b { public static $files = array ( - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', 'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php', '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', diff --git a/data/web/inc/lib/vendor/composer/installed.json b/data/web/inc/lib/vendor/composer/installed.json index e0ffaecd..1ff198c8 100644 --- a/data/web/inc/lib/vendor/composer/installed.json +++ b/data/web/inc/lib/vendor/composer/installed.json @@ -140,17 +140,17 @@ }, { "name": "directorytree/ldaprecord", - "version": "v2.5.0", - "version_normalized": "2.5.0.0", + "version": "v2.6.3", + "version_normalized": "2.6.3.0", "source": { "type": "git", "url": "https://github.com/DirectoryTree/LdapRecord.git", - "reference": "ff7a92615fdc3f8b7f3d347c2847ce7ce06db287" + "reference": "5c93ec6d1ef458290825a8b0a148946dce7c1e7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/ff7a92615fdc3f8b7f3d347c2847ce7ce06db287", - "reference": "ff7a92615fdc3f8b7f3d347c2847ce7ce06db287", + "url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/5c93ec6d1ef458290825a8b0a148946dce7c1e7a", + "reference": "5c93ec6d1ef458290825a8b0a148946dce7c1e7a", "shasum": "" }, "require": { @@ -168,7 +168,7 @@ "phpunit/phpunit": "^8.0", "spatie/ray": "^1.24" }, - "time": "2021-06-06T18:51:41+00:00", + "time": "2021-08-05T21:52:43+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -216,17 +216,17 @@ }, { "name": "illuminate/contracts", - "version": "v8.48.0", - "version_normalized": "8.48.0.0", + "version": "v8.53.1", + "version_normalized": "8.53.1.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "199fcedc161ba4a0b83feaddc4629f395dbf1641" + "reference": "504a34286a1b4c5421c43087d6bd4e176138f6fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/199fcedc161ba4a0b83feaddc4629f395dbf1641", - "reference": "199fcedc161ba4a0b83feaddc4629f395dbf1641", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/504a34286a1b4c5421c43087d6bd4e176138f6fb", + "reference": "504a34286a1b4c5421c43087d6bd4e176138f6fb", "shasum": "" }, "require": { @@ -234,7 +234,7 @@ "psr/container": "^1.0", "psr/simple-cache": "^1.0" }, - "time": "2021-06-01T14:53:38+00:00", + "time": "2021-08-03T14:03:47+00:00", "type": "library", "extra": { "branch-alias": { @@ -453,23 +453,24 @@ }, { "name": "nesbot/carbon", - "version": "2.49.0", - "version_normalized": "2.49.0.0", + "version": "2.51.1", + "version_normalized": "2.51.1.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "93d9db91c0235c486875d22f1e08b50bdf3e6eee" + "reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/93d9db91c0235c486875d22f1e08b50bdf3e6eee", - "reference": "93d9db91c0235c486875d22f1e08b50bdf3e6eee", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922", + "reference": "8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { @@ -482,15 +483,15 @@ "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3.4" }, - "time": "2021-06-02T07:31:40+00:00", + "time": "2021-07-28T13:16:28+00:00", "bin": [ "bin/carbon" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" }, "laravel": { "providers": [ @@ -517,15 +518,15 @@ { "name": "Brian Nesbitt", "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "homepage": "https://markido.com" }, { "name": "kylekatarnls", - "homepage": "http://github.com/kylekatarnls" + "homepage": "https://github.com/kylekatarnls" } ], "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "http://carbon.nesbot.com", + "homepage": "https://carbon.nesbot.com", "keywords": [ "date", "datetime", @@ -602,34 +603,33 @@ }, { "name": "php-mime-mail-parser/php-mime-mail-parser", - "version": "5.0.5", - "version_normalized": "5.0.5.0", + "version": "7.0.0", + "version_normalized": "7.0.0.0", "source": { "type": "git", "url": "https://github.com/php-mime-mail-parser/php-mime-mail-parser.git", - "reference": "27983433aabeccee832573c3c56e6a4855e57745" + "reference": "9d09a017f3f103fec8456211a4a538b80e0eca0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-mime-mail-parser/php-mime-mail-parser/zipball/27983433aabeccee832573c3c56e6a4855e57745", - "reference": "27983433aabeccee832573c3c56e6a4855e57745", + "url": "https://api.github.com/repos/php-mime-mail-parser/php-mime-mail-parser/zipball/9d09a017f3f103fec8456211a4a538b80e0eca0d", + "reference": "9d09a017f3f103fec8456211a4a538b80e0eca0d", "shasum": "" }, "require": { "ext-mailparse": "*", - "php": "^7.1" + "php": "^7.2|^8.0" }, "replace": { "exorus/php-mime-mail-parser": "*", "messaged/php-mime-mail-parser": "*" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/php-token-stream": "^3.0", - "phpunit/phpunit": "^7.0", - "squizlabs/php_codesniffer": "^3.4" + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.0", + "squizlabs/php_codesniffer": "^3.5" }, - "time": "2019-09-23T11:57:58+00:00", + "time": "2021-02-25T17:21:57+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -673,7 +673,7 @@ "role": "Developer" } ], - "description": "A fully tested email parser for PHP 7.1+ (mailparse extension wrapper).", + "description": "A fully tested email parser for PHP 7.2+ (mailparse extension wrapper).", "homepage": "https://github.com/php-mime-mail-parser/php-mime-mail-parser", "keywords": [ "MimeMailParser", @@ -683,6 +683,16 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/php-mime-mail-parser/php-mime-mail-parser/issues", + "source": "https://github.com/php-mime-mail-parser/php-mime-mail-parser/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/eXorus", + "type": "github" + } + ], "install-path": "../php-mime-mail-parser/php-mime-mail-parser" }, { @@ -1120,17 +1130,17 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", - "version_normalized": "1.23.0.0", + "version": "v1.23.1", + "version_normalized": "1.23.1.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { @@ -1139,7 +1149,7 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2021-05-27T09:27:20+00:00", + "time": "2021-05-27T12:26:48+00:00", "type": "library", "extra": { "branch-alias": { @@ -1183,7 +1193,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" }, "funding": [ { @@ -1203,23 +1213,23 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.23.0", - "version_normalized": "1.23.0.0", + "version": "v1.23.1", + "version_normalized": "1.23.1.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2021-02-19T12:13:01+00:00", + "time": "2021-07-28T13:41:28+00:00", "type": "library", "extra": { "branch-alias": { @@ -1269,7 +1279,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" }, "funding": [ { @@ -1289,24 +1299,24 @@ }, { "name": "symfony/translation", - "version": "v5.3.2", - "version_normalized": "5.3.2.0", + "version": "v5.3.4", + "version_normalized": "5.3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" + "reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "url": "https://api.github.com/repos/symfony/translation/zipball/d89ad7292932c2699cbe4af98d72c5c6bbc504c1", + "reference": "d89ad7292932c2699cbe4af98d72c5c6bbc504c1", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/translation-contracts": "^2.3" }, "conflict": { @@ -1320,7 +1330,7 @@ "symfony/translation-implementation": "2.3" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^4.4|^5.0", "symfony/console": "^4.4|^5.0", "symfony/dependency-injection": "^5.0", @@ -1336,7 +1346,7 @@ "symfony/config": "", "symfony/yaml": "" }, - "time": "2021-06-06T09:51:56+00:00", + "time": "2021-07-25T09:39:16+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1367,7 +1377,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.2" + "source": "https://github.com/symfony/translation/tree/v5.3.4" }, "funding": [ { @@ -1468,23 +1478,23 @@ }, { "name": "symfony/var-dumper", - "version": "v5.3.2", - "version_normalized": "5.3.2.0", + "version": "v5.3.6", + "version_normalized": "5.3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae" + "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/905a22c68b292ffb6f20d7636c36b220d1fba5ae", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", + "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -1501,7 +1511,7 @@ "ext-intl": "To show region name in time zone dump", "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, - "time": "2021-06-06T09:51:56+00:00", + "time": "2021-07-27T01:56:02+00:00", "bin": [ "Resources/bin/var-dump-server" ], @@ -1539,7 +1549,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.2" + "source": "https://github.com/symfony/var-dumper/tree/v5.3.6" }, "funding": [ { diff --git a/data/web/inc/lib/vendor/composer/installed.php b/data/web/inc/lib/vendor/composer/installed.php index 84c3c9f2..2e6adce4 100644 --- a/data/web/inc/lib/vendor/composer/installed.php +++ b/data/web/inc/lib/vendor/composer/installed.php @@ -1,261 +1,257 @@ - - array ( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'aliases' => - array ( + array( + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => NULL, + 'name' => '__root__', + 'dev' => true, ), - 'reference' => NULL, - 'name' => '__root__', - ), - 'versions' => - array ( - '__root__' => - array ( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'aliases' => - array ( - ), - 'reference' => NULL, + 'versions' => array( + '__root__' => array( + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => NULL, + 'dev_requirement' => false, + ), + 'bshaffer/oauth2-server-php' => array( + 'pretty_version' => 'v1.11.1', + 'version' => '1.11.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../bshaffer/oauth2-server-php', + 'aliases' => array(), + 'reference' => '5a0c8000d4763b276919e2106f54eddda6bc50fa', + 'dev_requirement' => false, + ), + 'ddeboer/imap' => array( + 'pretty_version' => '1.12.1', + 'version' => '1.12.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../ddeboer/imap', + 'aliases' => array(), + 'reference' => 'dbed05ca67b93509345a820b2859de10c48948fb', + 'dev_requirement' => false, + ), + 'directorytree/ldaprecord' => array( + 'pretty_version' => 'v2.6.3', + 'version' => '2.6.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../directorytree/ldaprecord', + 'aliases' => array(), + 'reference' => '5c93ec6d1ef458290825a8b0a148946dce7c1e7a', + 'dev_requirement' => false, + ), + 'exorus/php-mime-mail-parser' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => '*', + ), + ), + 'illuminate/contracts' => array( + 'pretty_version' => 'v8.53.1', + 'version' => '8.53.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../illuminate/contracts', + 'aliases' => array(), + 'reference' => '504a34286a1b4c5421c43087d6bd4e176138f6fb', + 'dev_requirement' => false, + ), + 'matthiasmullie/minify' => array( + 'pretty_version' => '1.3.66', + 'version' => '1.3.66.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../matthiasmullie/minify', + 'aliases' => array(), + 'reference' => '45fd3b0f1dfa2c965857c6d4a470bea52adc31a6', + 'dev_requirement' => false, + ), + 'matthiasmullie/path-converter' => array( + 'pretty_version' => '1.1.3', + 'version' => '1.1.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../matthiasmullie/path-converter', + 'aliases' => array(), + 'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9', + 'dev_requirement' => false, + ), + 'messaged/php-mime-mail-parser' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => '*', + ), + ), + 'mustangostang/spyc' => array( + 'pretty_version' => '0.6.3', + 'version' => '0.6.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../mustangostang/spyc', + 'aliases' => array(), + 'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0', + 'dev_requirement' => false, + ), + 'nesbot/carbon' => array( + 'pretty_version' => '2.51.1', + 'version' => '2.51.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../nesbot/carbon', + 'aliases' => array(), + 'reference' => '8619c299d1e0d4b344e1f98ca07a1ce2cfbf1922', + 'dev_requirement' => false, + ), + 'paragonie/random_compat' => array( + 'pretty_version' => 'v9.99.100', + 'version' => '9.99.100.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../paragonie/random_compat', + 'aliases' => array(), + 'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a', + 'dev_requirement' => false, + ), + 'php-mime-mail-parser/php-mime-mail-parser' => array( + 'pretty_version' => '7.0.0', + 'version' => '7.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../php-mime-mail-parser/php-mime-mail-parser', + 'aliases' => array(), + 'reference' => '9d09a017f3f103fec8456211a4a538b80e0eca0d', + 'dev_requirement' => false, + ), + 'phpmailer/phpmailer' => array( + 'pretty_version' => 'v6.5.0', + 'version' => '6.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../phpmailer/phpmailer', + 'aliases' => array(), + 'reference' => 'a5b5c43e50b7fba655f793ad27303cd74c57363c', + 'dev_requirement' => false, + ), + 'psr/container' => array( + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/container', + 'aliases' => array(), + 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', + 'dev_requirement' => false, + ), + 'psr/log' => array( + 'pretty_version' => '1.1.4', + 'version' => '1.1.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/log', + 'aliases' => array(), + 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', + 'dev_requirement' => false, + ), + 'psr/simple-cache' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/simple-cache', + 'aliases' => array(), + 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b', + 'dev_requirement' => false, + ), + 'robthree/twofactorauth' => array( + 'pretty_version' => '1.8.0', + 'version' => '1.8.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../robthree/twofactorauth', + 'aliases' => array(), + 'reference' => '30a38627ae1e7c9399dae67e265063cd6ec5276c', + 'dev_requirement' => false, + ), + 'soundasleep/html2text' => array( + 'pretty_version' => '0.5.0', + 'version' => '0.5.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../soundasleep/html2text', + 'aliases' => array(), + 'reference' => 'cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad', + 'dev_requirement' => false, + ), + 'symfony/deprecation-contracts' => array( + 'pretty_version' => 'v2.4.0', + 'version' => '2.4.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', + 'aliases' => array(), + 'reference' => '5f38c8804a9e97d23e0c8d63341088cd8a22d627', + 'dev_requirement' => false, + ), + 'symfony/polyfill-mbstring' => array( + 'pretty_version' => 'v1.23.1', + 'version' => '1.23.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', + 'aliases' => array(), + 'reference' => '9174a3d80210dca8daa7f31fec659150bbeabfc6', + 'dev_requirement' => false, + ), + 'symfony/polyfill-php80' => array( + 'pretty_version' => 'v1.23.1', + 'version' => '1.23.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php80', + 'aliases' => array(), + 'reference' => '1100343ed1a92e3a38f9ae122fc0eb21602547be', + 'dev_requirement' => false, + ), + 'symfony/translation' => array( + 'pretty_version' => 'v5.3.4', + 'version' => '5.3.4.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/translation', + 'aliases' => array(), + 'reference' => 'd89ad7292932c2699cbe4af98d72c5c6bbc504c1', + 'dev_requirement' => false, + ), + 'symfony/translation-contracts' => array( + 'pretty_version' => 'v2.4.0', + 'version' => '2.4.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/translation-contracts', + 'aliases' => array(), + 'reference' => '95c812666f3e91db75385749fe219c5e494c7f95', + 'dev_requirement' => false, + ), + 'symfony/translation-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '2.3', + ), + ), + 'symfony/var-dumper' => array( + 'pretty_version' => 'v5.3.6', + 'version' => '5.3.6.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/var-dumper', + 'aliases' => array(), + 'reference' => '3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0', + 'dev_requirement' => false, + ), + 'tightenco/collect' => array( + 'pretty_version' => 'v8.34.0', + 'version' => '8.34.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../tightenco/collect', + 'aliases' => array(), + 'reference' => 'b069783ab0c547bb894ebcf8e7f6024bb401f9d2', + 'dev_requirement' => false, + ), + 'yubico/u2flib-server' => array( + 'pretty_version' => '1.0.2', + 'version' => '1.0.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../yubico/u2flib-server', + 'aliases' => array(), + 'reference' => '55d813acf68212ad2cadecde07551600d6971939', + 'dev_requirement' => false, + ), ), - 'bshaffer/oauth2-server-php' => - array ( - 'pretty_version' => 'v1.11.1', - 'version' => '1.11.1.0', - 'aliases' => - array ( - ), - 'reference' => '5a0c8000d4763b276919e2106f54eddda6bc50fa', - ), - 'ddeboer/imap' => - array ( - 'pretty_version' => '1.12.1', - 'version' => '1.12.1.0', - 'aliases' => - array ( - ), - 'reference' => 'dbed05ca67b93509345a820b2859de10c48948fb', - ), - 'directorytree/ldaprecord' => - array ( - 'pretty_version' => 'v2.5.0', - 'version' => '2.5.0.0', - 'aliases' => - array ( - ), - 'reference' => 'ff7a92615fdc3f8b7f3d347c2847ce7ce06db287', - ), - 'exorus/php-mime-mail-parser' => - array ( - 'replaced' => - array ( - 0 => '*', - ), - ), - 'illuminate/contracts' => - array ( - 'pretty_version' => 'v8.48.0', - 'version' => '8.48.0.0', - 'aliases' => - array ( - ), - 'reference' => '199fcedc161ba4a0b83feaddc4629f395dbf1641', - ), - 'matthiasmullie/minify' => - array ( - 'pretty_version' => '1.3.66', - 'version' => '1.3.66.0', - 'aliases' => - array ( - ), - 'reference' => '45fd3b0f1dfa2c965857c6d4a470bea52adc31a6', - ), - 'matthiasmullie/path-converter' => - array ( - 'pretty_version' => '1.1.3', - 'version' => '1.1.3.0', - 'aliases' => - array ( - ), - 'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9', - ), - 'messaged/php-mime-mail-parser' => - array ( - 'replaced' => - array ( - 0 => '*', - ), - ), - 'mustangostang/spyc' => - array ( - 'pretty_version' => '0.6.3', - 'version' => '0.6.3.0', - 'aliases' => - array ( - ), - 'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0', - ), - 'nesbot/carbon' => - array ( - 'pretty_version' => '2.49.0', - 'version' => '2.49.0.0', - 'aliases' => - array ( - ), - 'reference' => '93d9db91c0235c486875d22f1e08b50bdf3e6eee', - ), - 'paragonie/random_compat' => - array ( - 'pretty_version' => 'v9.99.100', - 'version' => '9.99.100.0', - 'aliases' => - array ( - ), - 'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a', - ), - 'php-mime-mail-parser/php-mime-mail-parser' => - array ( - 'pretty_version' => '5.0.5', - 'version' => '5.0.5.0', - 'aliases' => - array ( - ), - 'reference' => '27983433aabeccee832573c3c56e6a4855e57745', - ), - 'phpmailer/phpmailer' => - array ( - 'pretty_version' => 'v6.5.0', - 'version' => '6.5.0.0', - 'aliases' => - array ( - ), - 'reference' => 'a5b5c43e50b7fba655f793ad27303cd74c57363c', - ), - 'psr/container' => - array ( - 'pretty_version' => '1.1.1', - 'version' => '1.1.1.0', - 'aliases' => - array ( - ), - 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', - ), - 'psr/log' => - array ( - 'pretty_version' => '1.1.4', - 'version' => '1.1.4.0', - 'aliases' => - array ( - ), - 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', - ), - 'psr/simple-cache' => - array ( - 'pretty_version' => '1.0.1', - 'version' => '1.0.1.0', - 'aliases' => - array ( - ), - 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b', - ), - 'robthree/twofactorauth' => - array ( - 'pretty_version' => '1.8.0', - 'version' => '1.8.0.0', - 'aliases' => - array ( - ), - 'reference' => '30a38627ae1e7c9399dae67e265063cd6ec5276c', - ), - 'soundasleep/html2text' => - array ( - 'pretty_version' => '0.5.0', - 'version' => '0.5.0.0', - 'aliases' => - array ( - ), - 'reference' => 'cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad', - ), - 'symfony/deprecation-contracts' => - array ( - 'pretty_version' => 'v2.4.0', - 'version' => '2.4.0.0', - 'aliases' => - array ( - ), - 'reference' => '5f38c8804a9e97d23e0c8d63341088cd8a22d627', - ), - 'symfony/polyfill-mbstring' => - array ( - 'pretty_version' => 'v1.23.0', - 'version' => '1.23.0.0', - 'aliases' => - array ( - ), - 'reference' => '2df51500adbaebdc4c38dea4c89a2e131c45c8a1', - ), - 'symfony/polyfill-php80' => - array ( - 'pretty_version' => 'v1.23.0', - 'version' => '1.23.0.0', - 'aliases' => - array ( - ), - 'reference' => 'eca0bf41ed421bed1b57c4958bab16aa86b757d0', - ), - 'symfony/translation' => - array ( - 'pretty_version' => 'v5.3.2', - 'version' => '5.3.2.0', - 'aliases' => - array ( - ), - 'reference' => '7e2603bcc598e14804c4d2359d8dc4ee3c40391b', - ), - 'symfony/translation-contracts' => - array ( - 'pretty_version' => 'v2.4.0', - 'version' => '2.4.0.0', - 'aliases' => - array ( - ), - 'reference' => '95c812666f3e91db75385749fe219c5e494c7f95', - ), - 'symfony/translation-implementation' => - array ( - 'provided' => - array ( - 0 => '2.3', - ), - ), - 'symfony/var-dumper' => - array ( - 'pretty_version' => 'v5.3.2', - 'version' => '5.3.2.0', - 'aliases' => - array ( - ), - 'reference' => '905a22c68b292ffb6f20d7636c36b220d1fba5ae', - ), - 'tightenco/collect' => - array ( - 'pretty_version' => 'v8.34.0', - 'version' => '8.34.0.0', - 'aliases' => - array ( - ), - 'reference' => 'b069783ab0c547bb894ebcf8e7f6024bb401f9d2', - ), - 'yubico/u2flib-server' => - array ( - 'pretty_version' => '1.0.2', - 'version' => '1.0.2.0', - 'aliases' => - array ( - ), - 'reference' => '55d813acf68212ad2cadecde07551600d6971939', - ), - ), ); diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/ISSUE_TEMPLATE/bug_report.md b/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/ISSUE_TEMPLATE/bug_report.md index dfcd8551..a56a2afb 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/ISSUE_TEMPLATE/bug_report.md +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,8 +7,9 @@ assignees: '' --- -**Environment (please complete the following information):** + +**Environment:** - LDAP Server Type: [e.g. ActiveDirectory / OpenLDAP / FreeIPA] - - PHP Version: [e.g. 7.2 / 7.3 / 7.4] + - PHP Version: [e.g. 7.3 / 7.4 / 8.0] **Describe the bug:** diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/ISSUE_TEMPLATE/support---help-request.md b/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/ISSUE_TEMPLATE/support---help-request.md index b8df7740..230916cf 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/ISSUE_TEMPLATE/support---help-request.md +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/ISSUE_TEMPLATE/support---help-request.md @@ -10,3 +10,8 @@ assignees: '' + + +**Environment:** + - LDAP Server Type: [e.g. ActiveDirectory / OpenLDAP / FreeIPA] + - PHP Version: [e.g. 7.3 / 7.4 / 8.0] diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/workflows/run-tests.yml b/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/workflows/run-tests.yml index 613f85d5..ba002183 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/workflows/run-tests.yml +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/.github/workflows/run-tests.yml @@ -8,13 +8,14 @@ on: jobs: run-tests: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: + os: [ubuntu-latest, windows-latest] php: [8.0, 7.4, 7.3] - name: P${{ matrix.php }} + name: ${{ matrix.os }} - P${{ matrix.php }} steps: - name: Checkout code @@ -34,7 +35,7 @@ jobs: coverage: none - name: Install dependencies - run: composer update --prefer-dist --no-interaction --no-suggest + run: composer update --prefer-dist --no-interaction - name: Execute tests run: vendor/bin/phpunit diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/ArrayValidator.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/ArrayValidator.php index 5584fff9..4aa43ed4 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/ArrayValidator.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/ArrayValidator.php @@ -2,19 +2,20 @@ namespace LdapRecord\Configuration\Validators; -use LdapRecord\Configuration\ConfigurationException; - class ArrayValidator extends Validator { + /** + * The validation exception message. + * + * @var string + */ + protected $message = 'Option [:option] must be an array.'; + /** * @inheritdoc */ - public function validate() + public function passes() { - if (! is_array($this->value)) { - throw new ConfigurationException("Option {$this->key} must be an array."); - } - - return true; + return is_array($this->value); } } diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/BooleanValidator.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/BooleanValidator.php index a5e3cf33..1d25a4b2 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/BooleanValidator.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/BooleanValidator.php @@ -2,19 +2,20 @@ namespace LdapRecord\Configuration\Validators; -use LdapRecord\Configuration\ConfigurationException; - class BooleanValidator extends Validator { + /** + * The validation exception message. + * + * @var string + */ + protected $message = 'Option [:option] must be a boolean.'; + /** * @inheritdoc */ - public function validate() + public function passes() { - if (! is_bool($this->value)) { - throw new ConfigurationException("Option {$this->key} must be a boolean."); - } - - return true; + return is_bool($this->value); } } diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/IntegerValidator.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/IntegerValidator.php index 796b3358..5c4f0f95 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/IntegerValidator.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/IntegerValidator.php @@ -2,19 +2,20 @@ namespace LdapRecord\Configuration\Validators; -use LdapRecord\Configuration\ConfigurationException; - class IntegerValidator extends Validator { + /** + * The validation exception message. + * + * @var string + */ + protected $message = 'Option [:option] must be an integer.'; + /** * @inheritdoc */ - public function validate() + public function passes() { - if (! is_numeric($this->value)) { - throw new ConfigurationException("Option {$this->key} must be an integer."); - } - - return true; + return is_numeric($this->value); } } diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/StringOrNullValidator.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/StringOrNullValidator.php index b0ff565c..bc233724 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/StringOrNullValidator.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/StringOrNullValidator.php @@ -2,19 +2,20 @@ namespace LdapRecord\Configuration\Validators; -use LdapRecord\Configuration\ConfigurationException; - class StringOrNullValidator extends Validator { + /** + * The validation exception message. + * + * @var string + */ + protected $message = 'Option [:option] must be a string or null.'; + /** * @inheritdoc */ - public function validate() + public function passes() { - if (is_string($this->value) || is_null($this->value)) { - return true; - } - - throw new ConfigurationException("Option {$this->key} must be a string or null."); + return is_string($this->value) || is_null($this->value); } } diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/Validator.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/Validator.php index 4bf7ab73..908a6395 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/Validator.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Configuration/Validators/Validator.php @@ -2,6 +2,8 @@ namespace LdapRecord\Configuration\Validators; +use LdapRecord\Configuration\ConfigurationException; + abstract class Validator { /** @@ -18,6 +20,13 @@ abstract class Validator */ protected $value; + /** + * The validation exception message. + * + * @var string + */ + protected $message; + /** * Constructor. * @@ -31,11 +40,39 @@ abstract class Validator } /** - * Validates the configuration value. - * - * @throws \LdapRecord\Configuration\ConfigurationException When the value given fails validation. + * Determine if the validation rule passes. * * @return bool */ - abstract public function validate(); + abstract public function passes(); + + /** + * Validate the configuration value. + * + * @throws ConfigurationException + * + * @return bool + */ + public function validate() + { + if (! $this->passes()) { + $this->fail(); + } + + return true; + } + + /** + * Throw a configuration exception. + * + * @throws ConfigurationException + * + * @return void + */ + protected function fail() + { + throw new ConfigurationException( + str_replace(':option', $this->key, $this->message) + ); + } } diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Connection.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Connection.php index beca5138..8ba0ef1d 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Connection.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Connection.php @@ -74,7 +74,7 @@ class Connection /** * The authentication guard resolver. * - * @var \Closure + * @var Closure */ protected $authGuardResolver; diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/ConnectionManager.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/ConnectionManager.php new file mode 100644 index 00000000..0eacbc3f --- /dev/null +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/ConnectionManager.php @@ -0,0 +1,320 @@ + 'flush', + 'addConnection' => 'add', + 'getConnection' => 'get', + 'allConnections' => 'all', + 'removeConnection' => 'remove', + 'getDefaultConnection' => 'getDefault', + 'setDefaultConnection' => 'setDefault', + 'getEventDispatcher' => 'dispatcher', + 'setEventDispatcher' => 'setDispatcher', + ]; + + /** + * Constructor. + * + * @return void + */ + public function __construct() + { + $this->dispatcher = new Dispatcher(); + } + + /** + * Forward missing method calls onto the instance. + * + * @param string $method + * @param mixed $args + * + * @return mixed + */ + public function __call($method, $args) + { + $method = $this->proxy[$method] ?? $method; + + if (! method_exists($this, $method)) { + throw new BadMethodCallException(sprintf( + 'Call to undefined method %s::%s()', + static::class, + $method + )); + } + + return $this->{$method}(...$args); + } + + /** + * Add a new connection. + * + * @param Connection $connection + * @param string|null $name + * + * @return $this + */ + public function add(Connection $connection, $name = null) + { + $this->connections[$name ?? $this->default] = $connection; + + if ($this->dispatcher) { + $connection->setDispatcher($this->dispatcher); + } + + return $this; + } + + /** + * Remove a connection. + * + * @param $name + * + * @return $this + */ + public function remove($name) + { + unset($this->connections[$name]); + + return $this; + } + + /** + * Get all of the connections. + * + * @return Connection[] + */ + public function all() + { + return $this->connections; + } + + /** + * Get a connection by name or return the default. + * + * @param string|null $name + * + * @throws ContainerException If the given connection does not exist. + * + * @return Connection + */ + public function get($name = null) + { + if ($this->exists($name = $name ?? $this->default)) { + return $this->connections[$name]; + } + + throw new ContainerException("The LDAP connection [$name] does not exist."); + } + + /** + * Return the default connection. + * + * @return Connection + */ + public function getDefault() + { + return $this->get($this->default); + } + + /** + * Get the default connection name. + * + * @return string + */ + public function getDefaultConnectionName() + { + return $this->default; + } + + /** + * Checks if the connection exists. + * + * @param string $name + * + * @return bool + */ + public function exists($name) + { + return array_key_exists($name, $this->connections); + } + + /** + * Set the default connection name. + * + * @param string $name + * + * @return $this + */ + public function setDefault($name = null) + { + $this->default = $name; + + return $this; + } + + /** + * Flush the manager of all instances and connections. + * + * @return $this + */ + public function flush() + { + $this->logger = null; + + $this->connections = []; + + $this->dispatcher = new Dispatcher(); + + return $this; + } + + /** + * Get the logger instance. + * + * @return LoggerInterface|null + */ + public function getLogger() + { + return $this->logger; + } + + /** + * Set the event logger to use. + * + * @param LoggerInterface $logger + * + * @return void + */ + public function setLogger(LoggerInterface $logger) + { + $this->logger = $logger; + + $this->initEventLogger(); + } + + /** + * Initialize the event logger. + * + * @return void + */ + public function initEventLogger() + { + $logger = $this->newEventLogger(); + + foreach ($this->listen as $event) { + $this->dispatcher->listen($event, function ($eventName, $events) use ($logger) { + foreach ($events as $event) { + $logger->log($event); + } + }); + } + } + + /** + * Make a new event logger instance. + * + * @return Logger + */ + protected function newEventLogger() + { + return new Logger($this->logger); + } + + /** + * Unset the logger instance. + * + * @return void + */ + public function unsetLogger() + { + $this->logger = null; + } + + /** + * Get the event dispatcher. + * + * @return DispatcherInterface|null + */ + public function dispatcher() + { + return $this->dispatcher; + } + + /** + * Set the event dispatcher. + * + * @param DispatcherInterface $dispatcher + * + * @return void + */ + public function setDispatcher(DispatcherInterface $dispatcher) + { + $this->dispatcher = $dispatcher; + } + + /** + * Unset the event dispatcher. + * + * @return void + */ + public function unsetEventDispatcher() + { + $this->dispatcher = null; + } +} diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Container.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Container.php index d41f43f0..f458951e 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Container.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Container.php @@ -2,11 +2,21 @@ namespace LdapRecord; -use LdapRecord\Events\Dispatcher; -use LdapRecord\Events\DispatcherInterface; -use LdapRecord\Events\Logger; -use Psr\Log\LoggerInterface; - +/** + * @method static $this reset() + * @method static Connection[] all() + * @method static Connection[] allConnections() + * @method static Connection getDefaultConnection() + * @method static Connection get(string|null $name = null) + * @method static Connection getConnection(string|null $name = null) + * @method static bool exists(string $name) + * @method static $this remove(string|null $name = null) + * @method static $this removeConnection(string|null $name = null) + * @method static $this setDefault(string|null $name = null) + * @method static $this setDefaultConnection(string|null $name = null) + * @method static $this add(Connection $connection, string|null $name = null) + * @method static $this addConnection(Connection $connection, string|null $name = null) + */ class Container { /** @@ -17,44 +27,37 @@ class Container protected static $instance; /** - * The logger instance. + * The connection manager instance. * - * @var LoggerInterface|null + * @var ConnectionManager */ - protected $logger; + protected $manager; /** - * The event dispatcher instance. - * - * @var DispatcherInterface|null - */ - protected $dispatcher; - - /** - * The added connections in the container instance. - * - * @var Connection[] - */ - protected $connections = []; - - /** - * The name of the default connection. - * - * @var string - */ - protected $default = 'default'; - - /** - * The events to register listeners for during initialization. + * The methods to passthru, for compatibility. * * @var array */ - protected $listen = [ - 'LdapRecord\Auth\Events\*', - 'LdapRecord\Query\Events\*', - 'LdapRecord\Models\Events\*', + protected $passthru = [ + 'reset', 'flush', + 'add', 'addConnection', + 'remove', 'removeConnection', + 'setDefault', 'setDefaultConnection', ]; + /** + * Forward missing static calls onto the current instance. + * + * @param string $method + * @param mixed $args + * + * @return mixed + */ + public static function __callStatic($method, $args) + { + return static::getInstance()->{$method}(...$args); + } + /** * Get or set the current instance of the container. * @@ -88,320 +91,37 @@ class Container } /** - * Add a connection to the container. - * - * @param Connection $connection - * @param string|null $name - * - * @return static - */ - public static function addConnection(Connection $connection, $name = null) - { - return static::getInstance()->add($connection, $name); - } - - /** - * Remove a connection from the container. - * - * @param string $name + * Constructor. * * @return void */ - public static function removeConnection($name) + public function __construct() { - static::getInstance()->remove($name); + $this->manager = new ConnectionManager(); } /** - * Get a connection by name or return the default. + * Forward missing method calls onto the connection manager. * - * @param string|null $name + * @param string $method + * @param mixed $args * - * @throws ContainerException If the given connection does not exist. - * - * @return Connection + * @return mixed */ - public static function getConnection($name = null) + public function __call($method, $args) { - return static::getInstance()->get($name); + $value = $this->manager->{$method}(...$args); + + return in_array($method, $this->passthru) ? $this : $value; } /** - * Set the default connection name. + * Get the connection manager. * - * @param string|null $name - * - * @return static + * @return ConnectionManager */ - public static function setDefaultConnection($name = null) + public function manager() { - return static::getInstance()->setDefault($name); - } - - /** - * Get the default connection. - * - * @return Connection - */ - public static function getDefaultConnection() - { - return static::getInstance()->getDefault(); - } - - /** - * Flush all of the added connections and reset the container. - * - * @return $this - */ - public static function reset() - { - return static::getInstance()->flush(); - } - - /** - * Get the container dispatcher instance. - * - * @return DispatcherInterface - */ - public static function getEventDispatcher() - { - $instance = static::getInstance(); - - if (! ($dispatcher = $instance->dispatcher())) { - $instance->setDispatcher($dispatcher = new Dispatcher()); - } - - return $dispatcher; - } - - /** - * Set the container dispatcher instance. - * - * @param DispatcherInterface $dispatcher - * - * @return void - */ - public static function setEventDispatcher(DispatcherInterface $dispatcher) - { - static::getInstance()->setDispatcher($dispatcher); - } - - /** - * Get the container dispatcher instance. - * - * @return DispatcherInterface|null - */ - public function dispatcher() - { - return $this->dispatcher; - } - - /** - * Set the container dispatcher instance. - * - * @param DispatcherInterface $dispatcher - * - * @return void - */ - public function setDispatcher(DispatcherInterface $dispatcher) - { - $this->dispatcher = $dispatcher; - } - - /** - * Unset the event dispatcher instance. - * - * @return void - */ - public function unsetEventDispatcher() - { - $this->dispatcher = null; - } - - /** - * Get the logger instance. - * - * @return LoggerInterface|null - */ - public function getLogger() - { - return $this->logger; - } - - /** - * Set the event logger to use. - * - * @param LoggerInterface $logger - * - * @return void - */ - public function setLogger(LoggerInterface $logger) - { - $this->logger = $logger; - - $this->initEventLogger(); - } - - /** - * Initializes the event logger. - * - * @return void - */ - public function initEventLogger() - { - $dispatcher = $this->getEventDispatcher(); - - $logger = $this->newEventLogger(); - - foreach ($this->listen as $event) { - $dispatcher->listen($event, function ($eventName, $events) use ($logger) { - foreach ($events as $event) { - $logger->log($event); - } - }); - } - } - - /** - * Returns a new event logger instance. - * - * @return Logger - */ - protected function newEventLogger() - { - return new Logger($this->logger); - } - - /** - * Unset the logger instance. - * - * @return void - */ - public function unsetLogger() - { - $this->logger = null; - } - - /** - * Add a new connection into the container. - * - * @param Connection $connection - * @param string|null $name - * - * @return $this - */ - public function add(Connection $connection, $name = null) - { - $this->connections[$name ?? $this->default] = $connection; - - if ($this->dispatcher) { - $connection->setDispatcher($this->dispatcher); - } - - return $this; - } - - /** - * Remove a connection from the container. - * - * @param $name - * - * @return $this - */ - public function remove($name) - { - if ($this->exists($name)) { - unset($this->connections[$name]); - } - - return $this; - } - - /** - * Return all of the connections from the container. - * - * @return Connection[] - */ - public function all() - { - return $this->connections; - } - - /** - * Get a connection by name or return the default. - * - * @param string|null $name - * - * @throws ContainerException If the given connection does not exist. - * - * @return Connection - */ - public function get($name = null) - { - if ($this->exists($name = $name ?? $this->default)) { - return $this->connections[$name]; - } - - throw new ContainerException("The LDAP connection [$name] does not exist."); - } - - /** - * Return the default connection. - * - * @return Connection - */ - public function getDefault() - { - return $this->get($this->default); - } - - /** - * Get the default connection name. - * - * @return string - */ - public function getDefaultConnectionName() - { - return $this->default; - } - - /** - * Checks if the connection exists. - * - * @param $name - * - * @return bool - */ - public function exists($name) - { - return array_key_exists($name, $this->connections); - } - - /** - * Set the default connection name. - * - * @param string $name - * - * @return $this - */ - public function setDefault($name = null) - { - $this->default = $name; - - return $this; - } - - /** - * Flush the container of all instances and connections. - * - * @return $this - */ - public function flush() - { - $this->connections = []; - $this->dispatcher = null; - $this->logger = null; - - return $this; + return $this->manager; } } diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Events/Logger.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Events/Logger.php index 708a1458..f3840c28 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Events/Logger.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Events/Logger.php @@ -118,7 +118,7 @@ class Logger $message = "LDAP ({$connection->getHost()})" ." - Operation: {$this->getOperationName($event)}" - ." - Base DN: {$query->getDn()}" + ." - Base DN: {$query->getBaseDn()}" ." - Filter: {$query->getQuery()}" ." - Selected: ({$selected})" ." - Time Elapsed: {$event->getTime()}"; diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/LdapBase.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/HandlesConnection.php similarity index 95% rename from data/web/inc/lib/vendor/directorytree/ldaprecord/src/LdapBase.php rename to data/web/inc/lib/vendor/directorytree/ldaprecord/src/HandlesConnection.php index 2a3c2265..41334b68 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/LdapBase.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/HandlesConnection.php @@ -6,10 +6,8 @@ use Closure; use ErrorException; use Exception; -abstract class LdapBase implements LdapInterface +trait HandlesConnection { - use DetectsErrors; - /** * The LDAP host that is currently connected. * @@ -136,7 +134,7 @@ abstract class LdapBase implements LdapInterface */ public function getProtocol() { - return $this->isUsingSSL() ? $this::PROTOCOL_SSL : $this::PROTOCOL; + return $this->isUsingSSL() ? LdapInterface::PROTOCOL_SSL : LdapInterface::PROTOCOL; } /** @@ -214,7 +212,7 @@ abstract class LdapBase implements LdapInterface /** * Determine if the current PHP version supports server controls. * - * @deprecated + * @deprecated since v2.5.0 * * @return bool */ @@ -236,8 +234,8 @@ abstract class LdapBase implements LdapInterface // If an attempt to connect via SSL protocol is being performed, // and we are still using the default port, we will swap it // for the default SSL port, for developer convenience. - if ($this->isUsingSSL() && $port == static::PORT) { - $port = static::PORT_SSL; + if ($this->isUsingSSL() && $port == LdapInterface::PORT) { + $port = LdapInterface::PORT_SSL; } // The blank space here is intentional. PHP's LDAP extension diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Ldap.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Ldap.php index 8098d9c4..6503cead 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Ldap.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Ldap.php @@ -2,8 +2,10 @@ namespace LdapRecord; -class Ldap extends LdapBase +class Ldap implements LdapInterface { + use HandlesConnection, DetectsErrors; + /** * @inheritdoc */ @@ -17,9 +19,9 @@ class Ldap extends LdapBase /** * Retrieves the first entry from a search result. * - * @link http://php.net/manual/en/function.ldap-first-entry.php + * @see http://php.net/manual/en/function.ldap-first-entry.php * - * @param resource $searchResult + * @param resource $searchResults * * @return resource */ @@ -33,7 +35,7 @@ class Ldap extends LdapBase /** * Retrieves the next entry from a search result. * - * @link http://php.net/manual/en/function.ldap-next-entry.php + * @see http://php.net/manual/en/function.ldap-next-entry.php * * @param resource $entry * @@ -49,7 +51,7 @@ class Ldap extends LdapBase /** * Retrieves the ldap entry's attributes. * - * @link http://php.net/manual/en/function.ldap-get-attributes.php + * @see http://php.net/manual/en/function.ldap-get-attributes.php * * @param resource $entry * @@ -65,9 +67,9 @@ class Ldap extends LdapBase /** * Returns the number of entries from a search result. * - * @link http://php.net/manual/en/function.ldap-count-entries.php + * @see http://php.net/manual/en/function.ldap-count-entries.php * - * @param resource $searchResult + * @param resource $searchResults * * @return int */ @@ -81,7 +83,7 @@ class Ldap extends LdapBase /** * Compare value of attribute found in entry specified with DN. * - * @link http://php.net/manual/en/function.ldap-compare.php + * @see http://php.net/manual/en/function.ldap-compare.php * * @param string $dn * @param string $attribute @@ -125,7 +127,7 @@ class Ldap extends LdapBase /** * Get all binary values from the specified result entry. * - * @link http://php.net/manual/en/function.ldap-get-values-len.php + * @see http://php.net/manual/en/function.ldap-get-values-len.php * * @param $entry * @param $attribute @@ -160,7 +162,7 @@ class Ldap extends LdapBase /** * Set a callback function to do re-binds on referral chasing. * - * @link http://php.net/manual/en/function.ldap-set-rebind-proc.php + * @see http://php.net/manual/en/function.ldap-set-rebind-proc.php * * @param callable $callback * @@ -224,9 +226,9 @@ class Ldap extends LdapBase $deref, $serverControls ) { - return $this->supportsServerControlsInMethods() && ! empty($serverControls) - ? ldap_search($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref, $serverControls) - : ldap_search($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref); + return empty($serverControls) + ? ldap_search($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref) + : ldap_search($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref, $serverControls); }); } @@ -245,9 +247,9 @@ class Ldap extends LdapBase $deref, $serverControls ) { - return $this->supportsServerControlsInMethods() && ! empty($serverControls) - ? ldap_list($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref, $serverControls) - : ldap_list($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref); + return empty($serverControls) + ? ldap_list($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref) + : ldap_list($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref, $serverControls); }); } @@ -266,9 +268,9 @@ class Ldap extends LdapBase $deref, $serverControls ) { - return $this->supportsServerControlsInMethods() && ! empty($serverControls) - ? ldap_read($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref, $serverControls) - : ldap_read($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref); + return empty($serverControls) + ? ldap_read($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref) + : ldap_read($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time, $deref, $serverControls); }); } @@ -285,9 +287,9 @@ class Ldap extends LdapBase &$referrals, &$serverControls ) { - return $this->supportsServerControlsInMethods() && ! empty($serverControls) - ? ldap_parse_result($this->connection, $result, $errorCode, $dn, $errorMessage, $referrals, $serverControls) - : ldap_parse_result($this->connection, $result, $errorCode, $dn, $errorMessage, $referrals); + return empty($serverControls) + ? ldap_parse_result($this->connection, $result, $errorCode, $dn, $errorMessage, $referrals) + : ldap_parse_result($this->connection, $result, $errorCode, $dn, $errorMessage, $referrals, $serverControls); }); } @@ -419,9 +421,7 @@ class Ldap extends LdapBase */ public function errNo() { - return $this->connection - ? ldap_errno($this->connection) - : null; + return $this->connection ? ldap_errno($this->connection) : null; } /** diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/LdapInterface.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/LdapInterface.php index 7a285b88..a1773add 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/LdapInterface.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/LdapInterface.php @@ -136,9 +136,9 @@ interface LdapInterface /** * Retrieve the entries from a search result. * - * @link http://php.net/manual/en/function.ldap-get-entries.php + * @see http://php.net/manual/en/function.ldap-get-entries.php * - * @param resource $searchResult + * @param resource $searchResults * * @return array */ @@ -147,7 +147,7 @@ interface LdapInterface /** * Retrieve the last error on the current connection. * - * @link http://php.net/manual/en/function.ldap-error.php + * @see http://php.net/manual/en/function.ldap-error.php * * @return string|null */ @@ -167,7 +167,7 @@ interface LdapInterface /** * Set an option on the current connection. * - * @link http://php.net/manual/en/function.ldap-set-option.php + * @see http://php.net/manual/en/function.ldap-set-option.php * * @param int $option * @param mixed $value @@ -188,7 +188,7 @@ interface LdapInterface /** * Get the value for the LDAP option. * - * @link https://www.php.net/manual/en/function.ldap-get-option.php + * @see https://www.php.net/manual/en/function.ldap-get-option.php * * @param int $option * @param mixed $value @@ -200,7 +200,7 @@ interface LdapInterface /** * Starts a connection using TLS. * - * @link http://php.net/manual/en/function.ldap-start-tls.php + * @see http://php.net/manual/en/function.ldap-start-tls.php * * @throws LdapRecordException * @@ -211,7 +211,7 @@ interface LdapInterface /** * Connects to the specified hostname using the specified port. * - * @link http://php.net/manual/en/function.ldap-start-tls.php + * @see http://php.net/manual/en/function.ldap-start-tls.php * * @param string|array $hosts * @param int $port @@ -225,7 +225,7 @@ interface LdapInterface * * Returns false if no connection is present. * - * @link http://php.net/manual/en/function.ldap-close.php + * @see http://php.net/manual/en/function.ldap-close.php * * @return bool */ @@ -234,7 +234,7 @@ interface LdapInterface /** * Performs a search on the current connection. * - * @link http://php.net/manual/en/function.ldap-search.php + * @see http://php.net/manual/en/function.ldap-search.php * * @param string $dn * @param string $filter @@ -252,11 +252,11 @@ interface LdapInterface /** * Performs a single level search on the current connection. * - * @link http://php.net/manual/en/function.ldap-list.php + * @see http://php.net/manual/en/function.ldap-list.php * * @param string $dn * @param string $filter - * @param array $attributes + * @param array $fields * @param bool $onlyAttributes * @param int $size * @param int $time @@ -270,7 +270,7 @@ interface LdapInterface /** * Reads an entry on the current connection. * - * @link http://php.net/manual/en/function.ldap-read.php + * @see http://php.net/manual/en/function.ldap-read.php * * @param string $dn * @param string $filter @@ -288,7 +288,7 @@ interface LdapInterface /** * Extract information from an LDAP result. * - * @link https://www.php.net/manual/en/function.ldap-parse-result.php + * @see https://www.php.net/manual/en/function.ldap-parse-result.php * * @param resource $result * @param int $errorCode @@ -305,7 +305,7 @@ interface LdapInterface * Binds to the current connection using the specified username and password. * If sasl is true, the current connection is bound using SASL. * - * @link http://php.net/manual/en/function.ldap-bind.php + * @see http://php.net/manual/en/function.ldap-bind.php * * @param string $username * @param string $password @@ -319,7 +319,7 @@ interface LdapInterface /** * Adds an entry to the current connection. * - * @link http://php.net/manual/en/function.ldap-add.php + * @see http://php.net/manual/en/function.ldap-add.php * * @param string $dn * @param array $entry @@ -333,7 +333,7 @@ interface LdapInterface /** * Deletes an entry on the current connection. * - * @link http://php.net/manual/en/function.ldap-delete.php + * @see http://php.net/manual/en/function.ldap-delete.php * * @param string $dn * @@ -346,7 +346,7 @@ interface LdapInterface /** * Modify the name of an entry on the current connection. * - * @link http://php.net/manual/en/function.ldap-rename.php + * @see http://php.net/manual/en/function.ldap-rename.php * * @param string $dn * @param string $newRdn @@ -362,7 +362,7 @@ interface LdapInterface /** * Modifies an existing entry on the current connection. * - * @link http://php.net/manual/en/function.ldap-modify.php + * @see http://php.net/manual/en/function.ldap-modify.php * * @param string $dn * @param array $entry @@ -376,7 +376,7 @@ interface LdapInterface /** * Batch modifies an existing entry on the current connection. * - * @link http://php.net/manual/en/function.ldap-modify-batch.php + * @see http://php.net/manual/en/function.ldap-modify-batch.php * * @param string $dn * @param array $values @@ -390,7 +390,7 @@ interface LdapInterface /** * Add attribute values to current attributes. * - * @link http://php.net/manual/en/function.ldap-mod-add.php + * @see http://php.net/manual/en/function.ldap-mod-add.php * * @param string $dn * @param array $entry @@ -404,7 +404,7 @@ interface LdapInterface /** * Replaces attribute values with new ones. * - * @link http://php.net/manual/en/function.ldap-mod-replace.php + * @see http://php.net/manual/en/function.ldap-mod-replace.php * * @param string $dn * @param array $entry @@ -418,7 +418,7 @@ interface LdapInterface /** * Delete attribute values from current attributes. * - * @link http://php.net/manual/en/function.ldap-mod-del.php + * @see http://php.net/manual/en/function.ldap-mod-del.php * * @param string $dn * @param array $entry @@ -432,7 +432,7 @@ interface LdapInterface /** * Send LDAP pagination control. * - * @link http://php.net/manual/en/function.ldap-control-paged-result.php + * @see http://php.net/manual/en/function.ldap-control-paged-result.php * * @param int $pageSize * @param bool $isCritical @@ -445,7 +445,7 @@ interface LdapInterface /** * Retrieve the LDAP pagination cookie. * - * @link http://php.net/manual/en/function.ldap-control-paged-result-response.php + * @see http://php.net/manual/en/function.ldap-control-paged-result-response.php * * @param resource $result * @param string $cookie @@ -457,7 +457,7 @@ interface LdapInterface /** * Frees up the memory allocated internally to store the result. * - * @link https://www.php.net/manual/en/function.ldap-free-result.php + * @see https://www.php.net/manual/en/function.ldap-free-result.php * * @param resource $result * @@ -466,10 +466,9 @@ interface LdapInterface public function freeResult($result); /** - * Returns the error number of the last command - * executed on the current connection. + * Returns the error number of the last command executed. * - * @link http://php.net/manual/en/function.ldap-errno.php + * @see http://php.net/manual/en/function.ldap-errno.php * * @return int|null */ @@ -478,7 +477,7 @@ interface LdapInterface /** * Returns the error string of the specified error number. * - * @link http://php.net/manual/en/function.ldap-err2str.php + * @see http://php.net/manual/en/function.ldap-err2str.php * * @param int $number * @@ -510,6 +509,8 @@ interface LdapInterface /** * Determine if the current PHP version supports server controls. * + * @deprecated since v2.5.0 + * * @return bool */ public function supportsServerControlsInMethods(); diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/AccountControl.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/AccountControl.php index eb1b40dd..9c6240bc 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/AccountControl.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/AccountControl.php @@ -326,7 +326,7 @@ class AccountControl * * For information about how to programmatically set this permission, visit the following link: * - * @link http://msdn2.microsoft.com/en-us/library/aa746398.aspx + * @see http://msdn2.microsoft.com/en-us/library/aa746398.aspx * * @return $this */ diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/DistinguishedName.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/DistinguishedName.php index c8af395a..c092173e 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/DistinguishedName.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/DistinguishedName.php @@ -3,6 +3,7 @@ namespace LdapRecord\Models\Attributes; use LdapRecord\EscapesValues; +use LdapRecord\Support\Arr; class DistinguishedName { @@ -60,7 +61,7 @@ class DistinguishedName } /** - * Make a new Distinguished Name instance. + * Make a new distinguished name instance. * * @param string|null $value * @@ -158,19 +159,15 @@ class DistinguishedName } /** - * Get the Distinguished Name values without attributes. + * Get the distinguished name values without attributes. * * @return array */ public function values() { - $components = $this->components(); - $values = []; - foreach ($components as $rdn) { - [,$value] = static::explodeRdn($rdn); - + foreach ($this->multi() as [, $value]) { $values[] = static::unescape($value); } @@ -178,35 +175,45 @@ class DistinguishedName } /** - * Get the Distinguished Name components with attributes. + * Get the distinguished name attributes without values. + * + * @return array + */ + public function attributes() + { + $attributes = []; + + foreach ($this->multi() as [$attribute]) { + $attributes[] = $attribute; + } + + return $attributes; + } + + /** + * Get the distinguished name components with attributes. * * @return array */ public function components() { - $rdns = static::explode($this->value); - $components = []; - foreach ($rdns as $rdn) { - [$attribute, $value] = static::explodeRdn($rdn); - - // When a Distinguished Name is exploded, the values are automatically + foreach ($this->multi() as [$attribute, $value]) { + // When a distinguished name is exploded, the values are automatically // escaped. This cannot be opted out of. Here we will unescape // the attribute value, then re-escape it to its original // representation from the server using the "dn" flag. $value = $this->escape(static::unescape($value))->dn(); - $components[] = static::makeRdn([ - $attribute, $value, - ]); + $components[] = static::makeRdn([$attribute, $value]); } return $components; } /** - * Convert the DN into an associative array. + * Convert the distinguished name into an associative array. * * @return array */ @@ -214,9 +221,7 @@ class DistinguishedName { $map = []; - foreach ($this->components() as $rdn) { - [$attribute, $value] = static::explodeRdn($rdn); - + foreach ($this->multi() as [$attribute, $value]) { $attribute = $this->normalize($attribute); array_key_exists($attribute, $map) @@ -228,31 +233,71 @@ class DistinguishedName } /** - * Get the name value. + * Split the RDNs into a multi-dimensional array. + * + * @return array + */ + public function multi() + { + return array_map(function ($rdn) { + return static::explodeRdn($rdn); + }, $this->rdns()); + } + + /** + * Split the distinguished name into an array of unescaped RDN's. + * + * @return array + */ + public function rdns() + { + return static::explode($this->value); + } + + /** + * Get the first RDNs value. * * @return string|null */ public function name() { - $values = $this->values(); - - return reset($values) ?: null; + return Arr::first($this->values()); } /** - * Get the relative Distinguished name. + * Get the first RDNs attribute. + * + * @return string|null + */ + public function head() + { + return Arr::first($this->attributes()); + } + + /** + * Get the relative distinguished name. * * @return string|null */ public function relative() { - $components = $this->components(); - - return reset($components) ?: null; + return Arr::first($this->components()); } /** - * Get the parent Distinguished name. + * Alias of relative(). + * + * Get the first RDN from the distinguished name. + * + * @return string|null + */ + public function first() + { + return $this->relative(); + } + + /** + * Get the parent distinguished name. * * @return string|null */ @@ -266,7 +311,7 @@ class DistinguishedName } /** - * Determine if the current Distinguished Name is a parent of the given child. + * Determine if the current distinguished name is a parent of the given child. * * @param DistinguishedName $child * @@ -278,7 +323,7 @@ class DistinguishedName } /** - * Determine if the current Distinguished Name is a child of the given parent. + * Determine if the current distinguished name is a child of the given parent. * * @param DistinguishedName $parent * @@ -299,7 +344,7 @@ class DistinguishedName } /** - * Determine if the current Distinguished Name is an ancestor of the descendant. + * Determine if the current distinguished name is an ancestor of the descendant. * * @param DistinguishedName $descendant * @@ -311,7 +356,7 @@ class DistinguishedName } /** - * Determine if the current Distinguished Name is a descendant of the ancestor. + * Determine if the current distinguished name is a descendant of the ancestor. * * @param DistinguishedName $ancestor * @@ -336,7 +381,7 @@ class DistinguishedName } /** - * Compare whether the two Distinguished Name values are equal. + * Compare whether the two distinguished name values are equal. * * @param array $values * @param array $other diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/DistinguishedNameBuilder.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/DistinguishedNameBuilder.php index 3fda99a5..83dfe716 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/DistinguishedNameBuilder.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/DistinguishedNameBuilder.php @@ -45,7 +45,7 @@ class DistinguishedNameBuilder */ public function __call($method, $args) { - return $this->get()->{$method}($args); + return $this->get()->{$method}(...$args); } /** diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/Guid.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/Guid.php index 34c0248b..d139f5f8 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/Guid.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Attributes/Guid.php @@ -19,7 +19,7 @@ class Guid * * @author Chad Sikorra * - * @link https://github.com/ldaptools/ldaptools + * @see https://github.com/ldaptools/ldaptools * * @var array */ @@ -36,7 +36,7 @@ class Guid * * @author Chad Sikorra * - * @link https://github.com/ldaptools/ldaptools + * @see https://github.com/ldaptools/ldaptools * * @var array */ @@ -142,7 +142,7 @@ class Guid * * @author Chad Sikorra * - * @link https://github.com/ldaptools/ldaptools + * @see https://github.com/ldaptools/ldaptools * * @param string $hex The full hex string. * @param array $sections An array of start and length (unless octet is true, then length is always 2). diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Concerns/HasPassword.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Concerns/HasPassword.php index c2f2dba4..98224566 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Concerns/HasPassword.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Concerns/HasPassword.php @@ -185,7 +185,15 @@ trait HasPassword */ protected function validateSecureConnection() { - if (! $this->getConnection()->getLdapConnection()->canChangePasswords()) { + $connection = $this->getConnection(); + + if ($connection->isConnected()) { + $secure = $connection->getLdapConnection()->canChangePasswords(); + } else { + $secure = $connection->getConfiguration()->get('use_ssl') || $connection->getConfiguration()->get('use_tls'); + } + + if (! $secure) { throw new ConnectionException( 'You must be connected to your LDAP server with TLS or SSL to perform this operation.' ); diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Concerns/HidesAttributes.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Concerns/HidesAttributes.php index 34427aea..9cc21005 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Concerns/HidesAttributes.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Concerns/HidesAttributes.php @@ -5,7 +5,7 @@ namespace LdapRecord\Models\Concerns; /** * @author Taylor Otwell * - * @link https://laravel.com + * @see https://laravel.com */ trait HidesAttributes { diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Model.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Model.php index 2818308e..6ba24b45 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Model.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Model.php @@ -767,6 +767,18 @@ abstract class Model implements ArrayAccess, JsonSerializable return $this->newDn($dn ?? $this->dn)->name(); } + /** + * Get the head attribute of the model, or the given DN. + * + * @param string|null $dn + * + * @return string|null + */ + public function getHead($dn = null) + { + return $this->newDn($dn ?? $this->dn)->head(); + } + /** * Get the RDN of the model, of the given DN. * @@ -803,10 +815,20 @@ abstract class Model implements ArrayAccess, JsonSerializable return new DistinguishedName($dn); } + /** + * Get the model's object GUID key. + * + * @return void + */ + public function getObjectGuidKey() + { + return $this->guidKey; + } + /** * Get the model's binary object GUID. * - * @link https://msdn.microsoft.com/en-us/library/ms679021(v=vs.85).aspx + * @see https://msdn.microsoft.com/en-us/library/ms679021(v=vs.85).aspx * * @return string|null */ @@ -952,8 +974,8 @@ abstract class Model implements ArrayAccess, JsonSerializable protected function performInsert() { // Here we will populate the models object classes if it - // does not already have any. An LDAP object cannot - // be successfully created without them set. + // does not already have any set. An LDAP object cannot + // be successfully created in the server without them. if (! $this->hasAttribute('objectclass')) { $this->setAttribute('objectclass', static::$objectClasses); } @@ -961,17 +983,18 @@ abstract class Model implements ArrayAccess, JsonSerializable $query = $this->newQuery(); // If the model does not currently have a distinguished - // name, we will attempt to create one automatically - // using the current query builders DN as a base. + // name, we will attempt to generate one automatically + // using the current query builder's DN as the base. if (empty($this->getDn())) { $this->setDn($this->getCreatableDn()); } $this->fireModelEvent(new Events\Creating($this)); - // Here we perform the insert of the object in the directory. - // We will also filter out any empty attribute values here, - // otherwise the LDAP server will return an error message. + // Here we perform the insert of new object in the directory, + // but filter out any empty attributes before sending them + // to the server. LDAP servers will throw an exception if + // attributes have been given empty or null values. $query->insert($this->getDn(), array_filter($this->getAttributes())); $this->fireModelEvent(new Events\Created($this)); diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Relations/HasMany.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Relations/HasMany.php index 1cc582d5..d8dfa08c 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Relations/HasMany.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Relations/HasMany.php @@ -2,6 +2,7 @@ namespace LdapRecord\Models\Relations; +use Closure; use LdapRecord\DetectsErrors; use LdapRecord\LdapRecordException; use LdapRecord\Models\Model; @@ -107,6 +108,21 @@ class HasMany extends OneToMany return $result; } + /** + * Chunk the relation results using the given callback. + * + * @param int $pageSize + * @param Closure $callback + * + * @return void + */ + public function chunk($pageSize, Closure $callback) + { + $this->getRelationQuery()->chunk($pageSize, function ($entries) use ($callback) { + $callback($this->transformResults($entries)); + }); + } + /** * Get the relationships results. * diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Relations/OneToMany.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Relations/OneToMany.php index b550300f..d0a407cc 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Relations/OneToMany.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Relations/OneToMany.php @@ -89,7 +89,7 @@ abstract class OneToMany extends Relation public function getResults() { $results = $this->recursive - ? $this->getRecursiveResults($this->getRelationResults()) + ? $this->getRecursiveResults() : $this->getRelationResults(); return $results->merge( @@ -142,46 +142,45 @@ abstract class OneToMany extends Relation /** * Get the results for the models relation recursively. * - * @param Collection $models The models to retrieve nested relation results from - * @param string[] $loaded The distinguished names of models already loaded + * @param string[] $loaded The distinguished names of models already loaded * * @return Collection */ - protected function getRecursiveResults(Collection $models, array &$loaded = []) + protected function getRecursiveResults(array $loaded = []) { - return $models->unless(empty($loaded), function ($models) use ($loaded) { + $results = $this->getRelationResults()->reject(function (Model $model) use ($loaded) { // Here we will exclude the models that we have already - // gathered the recursive results for so we don't run + // loaded the recursive results for so we don't run // into issues with circular relations in LDAP. - return $models->reject(function (Model $model) use ($loaded) { - return in_array($model->getDn(), $loaded); - }); - })->each(function (Model $model) use (&$loaded, $models) { + return in_array($model->getDn(), $loaded); + }); + + foreach ($results as $model) { $loaded[] = $model->getDn(); - // Next, we will call the same relation method on each - // returned model to retrieve its related models and - // merge them into our final resulting collection. - $this->getRecursiveResults( - $this->getRecursiveRelationResults($model), - $loaded - )->each(function (Model $related) use ($models) { - $models->add($related); - }); - }); + // Finally, we will fetch the related models relations, + // passing along our loaded models, to ensure we do + // not attempt fetching already loaded relations. + $results = $results->merge( + $this->getRecursiveRelationResults($model, $loaded) + ); + } + + return $results; } /** * Get the recursive relation results for given model. * * @param Model $model + * @param array $loaded * * @return Collection */ - protected function getRecursiveRelationResults(Model $model) + protected function getRecursiveRelationResults(Model $model, array $loaded) { return method_exists($model, $this->relationName) - ? $model->{$this->relationName}()->recursive()->get() + ? $model->{$this->relationName}()->getRecursiveResults($loaded) : $model->newCollection(); } } diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Types/ActiveDirectory.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Types/ActiveDirectory.php index 73d6e8ce..61d21ef2 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Types/ActiveDirectory.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/Types/ActiveDirectory.php @@ -14,7 +14,7 @@ interface ActiveDirectory extends TypeInterface /** * Returns the model's hex object SID. * - * @link https://msdn.microsoft.com/en-us/library/ms679024(v=vs.85).aspx + * @see https://msdn.microsoft.com/en-us/library/ms679024(v=vs.85).aspx * * @return string */ diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/ArrayCacheStore.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/ArrayCacheStore.php index 2cf00ff9..d7480a7b 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/ArrayCacheStore.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/ArrayCacheStore.php @@ -44,12 +44,36 @@ class ArrayCacheStore implements CacheInterface { $this->storage[$key] = [ 'value' => $value, - 'expiresAt' => $this->parseDateInterval($ttl), + 'expiresAt' => $this->calculateExpiration($ttl), ]; return true; } + /** + * Get the expiration time of the key. + * + * @param int $seconds + * + * @return int + */ + protected function calculateExpiration($seconds) + { + return $this->toTimestamp($seconds); + } + + /** + * Get the UNIX timestamp for the given number of seconds. + * + * @param int $seconds + * + * @return int + */ + protected function toTimestamp($seconds) + { + return $seconds > 0 ? $this->availableAt($seconds) : 0; + } + /** * @inheritdoc */ diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/Cache.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/Cache.php index b9a7656a..dfbf8cd2 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/Cache.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/Cache.php @@ -51,7 +51,13 @@ class Cache */ public function put($key, $value, $ttl = null) { - return $this->store->set($key, $value, $this->expiresAt($ttl)); + $seconds = $this->secondsUntil($ttl); + + if ($seconds <= 0) { + return $this->delete($key); + } + + return $this->store->set($key, $value, $seconds); } /** diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/InteractsWithTime.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/InteractsWithTime.php index f802b32f..1562ec0a 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/InteractsWithTime.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/InteractsWithTime.php @@ -9,18 +9,34 @@ use DateTimeInterface; /** * @author Taylor Otwell * - * @link https://laravel.com + * @see https://laravel.com */ trait InteractsWithTime { /** - * Get the "expires at" UNIX timestamp. + * Get the number of seconds until the given DateTime. * * @param DateTimeInterface|DateInterval|int $delay * * @return int */ - protected function expiresAt($delay = 0) + protected function secondsUntil($delay) + { + $delay = $this->parseDateInterval($delay); + + return $delay instanceof DateTimeInterface + ? max(0, $delay->getTimestamp() - $this->currentTime()) + : (int) $delay; + } + + /** + * Get the "available at" UNIX timestamp. + * + * @param DateTimeInterface|DateInterval|int $delay + * + * @return int + */ + protected function availableAt($delay = 0) { $delay = $this->parseDateInterval($delay); diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/Pagination/DeprecatedPaginator.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/Pagination/DeprecatedPaginator.php index 7367f030..b4a7f8db 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/Pagination/DeprecatedPaginator.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Query/Pagination/DeprecatedPaginator.php @@ -5,7 +5,7 @@ namespace LdapRecord\Query\Pagination; use LdapRecord\LdapInterface; /** - * @deprecated + * @deprecated since v2.5.0 */ class DeprecatedPaginator extends AbstractPaginator { diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/ConnectionFake.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/ConnectionFake.php index 9d46a8a3..0aa12a1e 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/ConnectionFake.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/ConnectionFake.php @@ -32,7 +32,11 @@ class ConnectionFake extends Connection */ public static function make(array $config = [], $ldap = LdapFake::class) { - return new static($config, new $ldap()); + $connection = new static($config, new $ldap()); + + $connection->configure(); + + return $connection; } /** diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/LdapExpectation.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/LdapExpectation.php index f6979b55..90a5fa2e 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/LdapExpectation.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/LdapExpectation.php @@ -207,7 +207,7 @@ class LdapExpectation public function getMethod() { if (is_null($this->method)) { - throw new UnexpectedValueException('The [$method] property cannot be null.'); + throw new UnexpectedValueException('An expectation must have a method.'); } return $this->method; @@ -226,7 +226,7 @@ class LdapExpectation /** * Get the expected arguments. * - * @return array + * @return Constraint[] */ public function getExpectedArgs() { diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/LdapFake.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/LdapFake.php index 56b6c656..7ba0e153 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/LdapFake.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Testing/LdapFake.php @@ -4,13 +4,17 @@ namespace LdapRecord\Testing; use Exception; use LdapRecord\DetailedError; -use LdapRecord\LdapBase; +use LdapRecord\DetectsErrors; +use LdapRecord\HandlesConnection; +use LdapRecord\LdapInterface; use LdapRecord\Support\Arr; use PHPUnit\Framework\Assert as PHPUnit; use PHPUnit\Framework\Constraint\Constraint; -class LdapFake extends LdapBase +class LdapFake implements LdapInterface { + use HandlesConnection, DetectsErrors; + /** * The expectations of the LDAP fake. * @@ -101,7 +105,7 @@ class LdapFake extends LdapBase * * @return bool */ - protected function hasExpectations($method) + public function hasExpectations($method) { return count($this->getExpectations($method)) > 0; } @@ -113,7 +117,7 @@ class LdapFake extends LdapBase * * @return LdapExpectation[]|mixed */ - protected function getExpectations($method) + public function getExpectations($method) { return $this->expectations[$method] ?? []; } @@ -126,7 +130,7 @@ class LdapFake extends LdapBase * * @return void */ - protected function removeExpectation($method, $key) + public function removeExpectation($method, $key) { unset($this->expectations[$method][$key]); } @@ -230,7 +234,7 @@ class LdapFake extends LdapBase { return $this->hasExpectations('isUsingSSL') ? $this->resolveExpectation('isUsingSSL') - : parent::isUsingSSL(); + : $this->useSSL; } /** @@ -240,7 +244,7 @@ class LdapFake extends LdapBase { return $this->hasExpectations('isUsingTLS') ? $this->resolveExpectation('isUsingTLS') - : parent::isUsingTLS(); + : $this->useTLS; } /** @@ -250,7 +254,7 @@ class LdapFake extends LdapBase { return $this->hasExpectations('isBound') ? $this->resolveExpectation('isBound') - : parent::isBound(); + : $this->bound; } /** @@ -453,7 +457,7 @@ class LdapFake extends LdapBase * * @return mixed */ - protected function resolveExpectation($method, $args = []) + protected function resolveExpectation($method, array $args = []) { foreach ($this->getExpectations($method) as $key => $expectation) { $this->assertMethodArgumentsMatch($method, $expectation->getExpectedArgs(), $args); @@ -501,7 +505,7 @@ class LdapFake extends LdapBase * * @return void */ - protected function assertMethodArgumentsMatch($method, $expectedArgs = [], $methodArgs = []) + protected function assertMethodArgumentsMatch($method, array $expectedArgs = [], array $methodArgs = []) { foreach ($expectedArgs as $key => $constraint) { $argNumber = $key + 1; diff --git a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Utilities.php b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Utilities.php index f95aa263..0f0ca3c7 100644 --- a/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Utilities.php +++ b/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Utilities.php @@ -55,8 +55,8 @@ class Utilities * * @author Chad Sikorra * - * @link https://github.com/ChadSikorra - * @link https://stackoverflow.com/questions/39533560/php-ldap-get-user-sid + * @see https://github.com/ChadSikorra + * @see https://stackoverflow.com/questions/39533560/php-ldap-get-user-sid * * @param string $value The Binary SID * diff --git a/data/web/inc/lib/vendor/illuminate/contracts/Support/MessageBag.php b/data/web/inc/lib/vendor/illuminate/contracts/Support/MessageBag.php index 78bd8a00..7f708aca 100644 --- a/data/web/inc/lib/vendor/illuminate/contracts/Support/MessageBag.php +++ b/data/web/inc/lib/vendor/illuminate/contracts/Support/MessageBag.php @@ -2,7 +2,9 @@ namespace Illuminate\Contracts\Support; -interface MessageBag extends Arrayable +use Countable; + +interface MessageBag extends Arrayable, Countable { /** * Get the keys present in the message bag. @@ -97,11 +99,4 @@ interface MessageBag extends Arrayable * @return bool */ public function isNotEmpty(); - - /** - * Get the number of messages in the container. - * - * @return int - */ - public function count(); } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/composer.json b/data/web/inc/lib/vendor/nesbot/carbon/composer.json index 29fb08d9..d0cadc9c 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/composer.json +++ b/data/web/inc/lib/vendor/nesbot/carbon/composer.json @@ -7,30 +7,24 @@ "time", "DateTime" ], - "homepage": "http://carbon.nesbot.com", - "support": { - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, + "homepage": "https://carbon.nesbot.com", "license": "MIT", "authors": [ { "name": "Brian Nesbitt", "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "homepage": "https://markido.com" }, { "name": "kylekatarnls", - "homepage": "http://github.com/kylekatarnls" + "homepage": "https://github.com/kylekatarnls" } ], - "prefer-stable": true, - "minimum-stability": "dev", - "bin": ["bin/carbon"], "require": { "php": "^7.1.8 || ^8.0", "ext-json": "*", "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { @@ -43,43 +37,14 @@ "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3.4" }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "autoload-dev": { - "files": [ - "tests/Laravel/ServiceProvider.php" - ], - "psr-4": { - "Tests\\": "tests/" - } - }, "config": { "process-timeout": 0, "sort-packages": true }, - "scripts": { - "test": [ - "@phpunit", - "@style-check" - ], - "style-check": [ - "@phpcs", - "@phpstan", - "@phpmd" - ], - "phpunit": "phpunit --verbose", - "phpcs": "php-cs-fixer fix -v --diff --dry-run", - "phpstan": "phpstan analyse --configuration phpstan.neon", - "phpmd": "phpmd src text /phpmd.xml", - "phpdoc": "php phpdoc.php" - }, "extra": { "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" }, "laravel": { "providers": [ @@ -91,5 +56,43 @@ "extension.neon" ] } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + }, + "files": [ + "tests/Laravel/ServiceProvider.php" + ] + }, + "minimum-stability": "dev", + "prefer-stable": true, + "bin": [ + "bin/carbon" + ], + "scripts": { + "phpcs": "php-cs-fixer fix -v --diff --dry-run", + "phpdoc": "php phpdoc.php", + "phpmd": "phpmd src text /phpmd.xml", + "phpstan": "phpstan analyse --configuration phpstan.neon", + "phpunit": "phpunit --verbose", + "style-check": [ + "@phpcs", + "@phpstan", + "@phpmd" + ], + "test": [ + "@phpunit", + "@style-check" + ] + }, + "support": { + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" } } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/contributing.md b/data/web/inc/lib/vendor/nesbot/carbon/contributing.md deleted file mode 100644 index d2bedac5..00000000 --- a/data/web/inc/lib/vendor/nesbot/carbon/contributing.md +++ /dev/null @@ -1,154 +0,0 @@ -# Contributing to Carbon - -## Issue Contributions - -Please report any security issue using [Tidelift security contact](https://tidelift.com/security). -Tidelift will coordinate the fix and disclosure. -Please don't disclose security bugs publicly until they have been handled by us. - -For any other bug or issue, please click this link and follow the template: -[Create new issue](https://github.com/briannesbitt/Carbon/issues/new) - -You may think this template does not apply to your case but please think again. A long description will never be as -clear as a code chunk with the output you expect from it (for either bug report or new features). - -## Code Contributions - -### Where to begin - -We use the label **good first issue** to tag issues that could be a good fit for new contributors, see if there are such issues now following this link: - -https://github.com/briannesbitt/Carbon/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 - -Else, check the roadmap to see what we plan to do in next releases: - -https://github.com/briannesbitt/Carbon/issues/1681 - -### Develop locally, then submit changes - -Fork the [GitHub project](https://github.com/briannesbitt/Carbon) and download it locally: - -```shell -git clone https://github.com//Carbon.git -cd Carbon -git remote add upstream https://github.com/briannesbitt/Carbon.git -``` -Replace `` with your GitHub username. - -Then, you can work on the master or create a specific branch for your development: - -```shell -git checkout -b my-feature-branch -t origin/master -``` - -You can now edit the "Carbon" directory contents. - -Before committing, please set your name and your e-mail (use the same e-mail address as in your GitHub account): - -```shell -git config --global user.name "Your Name" -git config --global user.email "your.email.address@example.com" -``` - -The ```--global``` argument will apply this setting for all your git repositories, remove it to set only your Carbon -fork with those settings. - -Now you can commit your modifications as you usually do with git: - -```shell -git add --all -git commit -m "The commit message log" -``` - -If your patch fixes an open issue, please insert ```#``` immediately followed by the issue number: - -```shell -git commit -m "#21 Fix this or that" -``` - -Use git rebase (not git merge) to sync your work from time to time: - -```shell -git fetch origin -git rebase origin/master -``` - -Please add some tests for bug fixes and features (so it will ensure next developments will not break your code), -then check all is right with phpunit: - -Install PHP if you haven't yet, then install composer: -https://getcomposer.org/download/ - -Update dependencies: -``` -./composer.phar update -``` - -Or if you installed composer globally: -``` -composer update -``` - -Then call phpunit: -``` -./vendor/bin/phpunit -``` - -Make sure all tests succeed before submitting your pull-request, else we will not be able to merge it. - -Push your work on your remote GitHub fork with: -``` -git push origin my-feature-branch -``` - -Go to https://github.com/yourusername/Carbon and select your feature branch. Click the 'Pull Request' button and fill -out the form. - -We will review it within a few days. And we thank you in advance for your help. - -## Versioning - -### Note about Semantic Versioning and breaking changes - -As a developer, you must understand every change is a breaking change. What is a bug for someone -is expected in someone else's workflow. The consequence of a change strongly depends on the usage. -[Semantic Versioning](https://semver.org/) relies to public API. In PHP, the public API of a class is its public -methods. However, if you extend a class, you can access protected methods, then if you use reflexion, you can -access private methods. So anything can become a public API if you force it to be. That doesn't mean we should handle -any possible usage, else we would have to publish a major release for each change and it would no longer make sense. - -So before any complain about a breaking change, be warned, we do not guarantee a strict Semantic Versioning as you -may expect, we're following a pragmatic interpretation of Semantic Versioning that allows the software to evolve in a -reliable way with reasonable maintenance effort. - -Concretely, we consider a change as breaking if it makes fail one of our unit test. We will do our best to avoid -incompatibilities with libraries that extends Carbon classes (such as Laravel that is continuously tested thanks to -Travis CI, [see the compatibility matrix](https://github.com/kylekatarnls/carbon-laravel/tree/master#carbon-1-dev-version-1next)). - -If you're the owner of a library that strongly depends on Carbon, we recommend you to run unit tests daily requiring -`"nesbot/carbon": "dev-master"` (for `^2`) or `"nesbot/carbon": "dev-version-1.next"` (for `^1`), this way you can -detect incompatibilities earlier and report it to us before we tag a release. We'll pay attention and try to fix it to -make update to next minor releases as soft as possible. - -We reserve the right to publish emergency patches within 24 hours after a release if a tag that does not respect -this pattern would have been released despite our vigilance. In this very rare and particular case, we would mark the -tag as broken on GitHub and backward compatibility would be based on previous stable tag. - -Last, you must understand that Carbon extends PHP natives classes, that means Carbon can be impacted by any change -that occurs in the date/time API of PHP. We watch new PHP versions and handle those changes as quickly as possible -when detected, but as PHP does not follow the semantic versioning pattern, it basically means any releases (including -patches) can have unexpected consequences on Carbon methods results. - -### Long term support - -To benefit the better support, require Carbon using major version range (`^1` or `^2`). By requiring `1.26.*`, -`~1.26.0` or limited range such as `>=1.20 <1.33`, you fall to low priority support (only security and critical issues -will be fixed), our prior support goes to next minor releases of each major version. It applies to bug fixes and -low-cost features. Other new features will only be added in the last stable release. At the opposite, we recommend you -to restrain to a major number, as there is no compatibility guarantee from a major version to the next. It means -requiring `>=2`, as it allows any newer version, will probably leads to errors on releasing our next major version. - -Open milestones can be patched if a minor bug is detected while if you're on a closed milestone, we'll more likely -ask you to update first to an open one. See currently open milestones: - -https://github.com/briannesbitt/Carbon/milestones diff --git a/data/web/inc/lib/vendor/nesbot/carbon/phpmd.xml b/data/web/inc/lib/vendor/nesbot/carbon/phpmd.xml deleted file mode 100644 index 6f08b294..00000000 --- a/data/web/inc/lib/vendor/nesbot/carbon/phpmd.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - Mess detection rules for Carbon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/web/inc/lib/vendor/nesbot/carbon/readme.md b/data/web/inc/lib/vendor/nesbot/carbon/readme.md index 0852b3ae..70279c1e 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/readme.md +++ b/data/web/inc/lib/vendor/nesbot/carbon/readme.md @@ -8,7 +8,7 @@ [![PHPStan](https://img.shields.io/badge/PHPStan-enabled-44CC11.svg?longCache=true&style=flat-square)](https://github.com/phpstan/phpstan) [![Tidelift](https://tidelift.com/badges/github/briannesbitt/Carbon)](https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme) -An international PHP extension for DateTime. [http://carbon.nesbot.com](http://carbon.nesbot.com) +An international PHP extension for DateTime. [https://carbon.nesbot.com](https://carbon.nesbot.com) ```php - + diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php index a6750a12..cb1c4988 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php @@ -555,6 +555,11 @@ class CarbonImmutable extends DateTimeImmutable implements CarbonInterface return 145261681241552; } + // Remove if https://bugs.php.net/bug.php?id=81107 is fixed + if (version_compare(PHP_VERSION, '8.1.0-dev', '>=')) { + return 1118290769066902787; + } + return PHP_INT_MAX; } @@ -567,6 +572,11 @@ class CarbonImmutable extends DateTimeImmutable implements CarbonInterface return -135908816449551; } + // Remove if https://bugs.php.net/bug.php?id=81107 is fixed + if (version_compare(PHP_VERSION, '8.1.0-dev', '>=')) { + return -1118290769066898816; + } + return max(PHP_INT_MIN, -9223372036854773760); } } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php index 7aa1df4c..8f095072 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php @@ -26,6 +26,7 @@ use DateTimeInterface; use DateTimeZone; use JsonSerializable; use ReflectionException; +use ReturnTypeWillChange; use Throwable; /** @@ -721,6 +722,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static */ + #[ReturnTypeWillChange] public static function __set_state($dump); /** @@ -755,6 +757,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static */ + #[ReturnTypeWillChange] public function add($unit, $value = 1, $overflow = null); /** @@ -830,6 +833,16 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable */ public function average($date = null); + /** + * Clone the current instance if it's mutable. + * + * This method is convenient to ensure you don't mutate the initial object + * but avoid to make a useless copy of it if it's already immutable. + * + * @return static + */ + public function avoidMutation(); + /** * Determines if the instance is between two others. * @@ -1066,6 +1079,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static|false */ + #[ReturnTypeWillChange] public static function createFromFormat($format, $time, $tz = null); /** @@ -1946,7 +1960,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable /** * Format the instance with the current locale. You can set the current - * locale using setlocale() http://php.net/setlocale. + * locale using setlocale() https://php.net/setlocale. * * @param string $format * @@ -2135,6 +2149,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable /** * {@inheritdoc} */ + #[ReturnTypeWillChange] public static function getLastErrors(); /** @@ -3007,6 +3022,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return array|string */ + #[ReturnTypeWillChange] public function jsonSerialize(); /** @@ -3317,6 +3333,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @see https://php.net/manual/en/datetime.modify.php */ + #[ReturnTypeWillChange] public function modify($modify); /** @@ -3700,6 +3717,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static */ + #[ReturnTypeWillChange] public function setDate($year, $month, $day); /** @@ -3764,6 +3782,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static */ + #[ReturnTypeWillChange] public function setISODate($year, $week, $day = 1); /** @@ -3834,6 +3853,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static */ + #[ReturnTypeWillChange] public function setTime($hour, $minute, $second = 0, $microseconds = 0); /** @@ -3863,6 +3883,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static */ + #[ReturnTypeWillChange] public function setTimestamp($unixTimestamp); /** @@ -3872,6 +3893,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static */ + #[ReturnTypeWillChange] public function setTimezone($value); /** @@ -4213,6 +4235,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @return static */ + #[ReturnTypeWillChange] public function sub($unit, $value = 1, $overflow = null); public function subRealUnit($unit, $value = 1); @@ -4751,7 +4774,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @param string $key * @param array $parameters - * @param null $number + * @param string|int|float|null $number * @param \Symfony\Component\Translation\TranslatorInterface $translator * * @return string @@ -4808,7 +4831,7 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable public static function translateWith(\Symfony\Component\Translation\TranslatorInterface $translator, string $key, array $parameters = [], $number = null): string; /** - * Format as ->format() do (using date replacements patterns from http://php.net/manual/fr/function.date.php) + * Format as ->format() do (using date replacements patterns from https://php.net/manual/en/function.date.php) * but translate words whenever possible (months, day names, etc.) using the current locale. * * @param string $format @@ -4991,6 +5014,8 @@ interface CarbonInterface extends DateTimeInterface, JsonSerializable * * @param Closure|static|string|false|null $testNow real or mock Carbon instance * @param Closure|null $callback + * + * @return mixed */ public static function withTestNow($testNow = null, $callback = null); diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php index 8801c751..7168fa4b 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php @@ -353,7 +353,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface $spec = $years; - if (!\is_string($spec) || \floatval($years) || preg_match('/^[0-9.]/', $years)) { + if (!\is_string($spec) || (float) $years || preg_match('/^[0-9.]/', $years)) { $spec = static::PERIOD_PREFIX; $spec .= $years > 0 ? $years.static::PERIOD_YEARS : ''; @@ -380,7 +380,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface parent::__construct($spec); - if (!\is_null($microseconds)) { + if ($microseconds !== null) { $this->f = $microseconds / Carbon::MICROSECONDS_PER_SECOND; } } @@ -536,7 +536,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface } $interval = mb_substr($interval, mb_strlen($match[0])); - $instance->$unit += \intval($match[0]); + $instance->$unit += (int) ($match[0]); continue; } @@ -546,7 +546,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface "'$expected'", $nextCharacter, 'Allowed substitutes for interval formats are '.implode(', ', array_keys(static::$formats))."\n". - 'See https://www.php.net/manual/en/function.date.php for their meaning' + 'See https://php.net/manual/en/function.date.php for their meaning' ); } @@ -679,8 +679,8 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface preg_match_all($pattern, $intervalDefinition, $parts, PREG_SET_ORDER); while ([$part, $value, $unit] = array_shift($parts)) { - $intValue = \intval($value); - $fraction = \floatval($value) - $intValue; + $intValue = (int) $value; + $fraction = (float) $value - $intValue; // Fix calculation precision switch (round($fraction, 6)) { @@ -964,7 +964,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface * * @return static * - * @link http://php.net/manual/en/dateinterval.createfromdatestring.php + * @link https://php.net/manual/en/dateinterval.createfromdatestring.php */ #[ReturnTypeWillChange] public static function createFromDateString($time) @@ -996,7 +996,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface */ public function get($name) { - if (substr($name, 0, 5) === 'total') { + if (str_starts_with($name, 'total')) { return $this->total(substr($name, 5)); } @@ -1360,7 +1360,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface $minimumUnit = 's'; extract($this->getForHumansInitialVariables($syntax, $short)); - if (\is_null($syntax)) { + if ($syntax === null) { $syntax = CarbonInterface::DIFF_ABSOLUTE; } @@ -1368,7 +1368,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface $parts = INF; } - if (\is_null($options)) { + if ($options === null) { $options = static::getHumanDiffOptions(); } @@ -1860,7 +1860,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface [$value, $unit] = [$unit, $value]; } - return $this->add($unit, -\floatval($value)); + return $this->add($unit, -(float) $value); } /** @@ -2104,7 +2104,7 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface public static function compareDateIntervals(DateInterval $first, DateInterval $second) { $current = Carbon::now(); - $passed = $current->copy()->add($second); + $passed = $current->avoidMutation()->add($second); $current->add($first); if ($current < $passed) { @@ -2242,12 +2242,12 @@ class CarbonInterval extends DateInterval implements CarbonConverterInterface 'years' => $this->years, 'months' => $this->months, 'weeks' => (int) ($this->d / $daysPerWeek), - 'dayz' => (int) ($this->d % $daysPerWeek), + 'dayz' => $this->d % $daysPerWeek, 'hours' => $this->hours, 'minutes' => $this->minutes, 'seconds' => $this->seconds, 'milliseconds' => (int) ($this->microseconds / Carbon::MICROSECONDS_PER_MILLISECOND), - 'microseconds' => (int) ($this->microseconds % Carbon::MICROSECONDS_PER_MILLISECOND), + 'microseconds' => $this->microseconds % Carbon::MICROSECONDS_PER_MILLISECOND, ]; if (isset($factors['dayz']) && $factors['dayz'][0] !== 'weeks') { diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php index bc918a93..70e6ba49 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php @@ -32,6 +32,7 @@ use InvalidArgumentException; use Iterator; use JsonSerializable; use ReflectionException; +use ReturnTypeWillChange; use RuntimeException; /** @@ -875,7 +876,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable */ public function setOptions($options) { - if (!\is_int($options) && !\is_null($options)) { + if (!\is_int($options) && $options !== null) { throw new InvalidPeriodParameterException('Invalid options.'); } @@ -962,7 +963,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable */ public function getStartDate(string $rounding = null) { - $date = $this->startDate->copy(); + $date = $this->startDate->avoidMutation(); return $rounding ? $date->round($this->getDateInterval(), $rounding) : $date; } @@ -980,7 +981,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable return null; } - $date = $this->endDate->copy(); + $date = $this->endDate->avoidMutation(); return $rounding ? $date->round($this->getDateInterval(), $rounding) : $date; } @@ -1220,7 +1221,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable */ public function setRecurrences($recurrences) { - if (!is_numeric($recurrences) && !\is_null($recurrences) || $recurrences < 0) { + if (!is_numeric($recurrences) && $recurrences !== null || $recurrences < 0) { throw new InvalidPeriodParameterException('Invalid number of recurrences.'); } @@ -1276,7 +1277,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable */ public function setEndDate($date, $inclusive = null) { - if (!\is_null($date) && !$date = ([$this->dateClass, 'make'])($date)) { + if ($date !== null && !$date = ([$this->dateClass, 'make'])($date)) { throw new InvalidPeriodDateException('Invalid end date.'); } @@ -1523,7 +1524,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable { $state = [ $this->key, - $this->current ? $this->current->copy() : null, + $this->current ? $this->current->avoidMutation() : null, $this->validationResult, ]; @@ -1722,7 +1723,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable $date = $this->getEndFromRecurrences() ?? $this->iterateUntilEnd(); if ($date && $rounding) { - $date = $date->copy()->round($this->getDateInterval(), $rounding); + $date = $date->avoidMutation()->round($this->getDateInterval(), $rounding); } return $date; @@ -1743,13 +1744,13 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable if ($this->recurrences === INF) { $start = $this->getStartDate(); - return $start < $start->copy()->add($this->getDateInterval()) + return $start < $start->avoidMutation()->add($this->getDateInterval()) ? CarbonImmutable::endOfTime() : CarbonImmutable::startOfTime(); } if ($this->filters === [[static::RECURRENCES_FILTER, null]]) { - return $this->getStartDate()->copy()->add( + return $this->getStartDate()->avoidMutation()->add( $this->getDateInterval()->times( $this->recurrences - ($this->isStartExcluded() ? 0 : 1) ) @@ -1795,13 +1796,8 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable $range = static::create($range); } - $thisDates = [$this->getStartDate(), $this->calculateEnd()]; - sort($thisDates); - [$start, $end] = $thisDates; - - $rangeDates = [$range->getStartDate(), $range->calculateEnd()]; - sort($rangeDates); - [$rangeStart, $rangeEnd] = $rangeDates; + [$start, $end] = $this->orderCouple($this->getStartDate(), $this->calculateEnd()); + [$rangeStart, $rangeEnd] = $this->orderCouple($range->getStartDate(), $range->calculateEnd()); return $end > $rangeStart && $rangeEnd > $start; } @@ -2168,6 +2164,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable * * @return CarbonInterface[] */ + #[ReturnTypeWillChange] public function jsonSerialize() { return $this->toArray(); @@ -2283,7 +2280,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable */ protected function isCarbonPredicateMethod($callable) { - return \is_string($callable) && substr($callable, 0, 2) === 'is' && + return \is_string($callable) && str_starts_with($callable, 'is') && (method_exists($this->dateClass, $callable) || ([$this->dateClass, 'hasMacro'])($callable)); } @@ -2384,7 +2381,7 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable foreach ($this->filters as $tuple) { $result = \call_user_func( $tuple[0], - $current->copy(), + $current->avoidMutation(), $this->key, $this ); @@ -2493,4 +2490,9 @@ class CarbonPeriod implements Iterator, Countable, JsonSerializable ? static::instance($period) : static::create($period, ...$arguments); } + + private function orderCouple($first, $second): array + { + return $first > $second ? [$second, $first] : [$first, $second]; + } } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonTimeZone.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonTimeZone.php index dc4cbe07..2bd36c43 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonTimeZone.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonTimeZone.php @@ -33,7 +33,7 @@ class CarbonTimeZone extends DateTimeZone protected static function getDateTimeZoneNameFromMixed($timezone) { - if (\is_null($timezone)) { + if ($timezone === null) { return date_default_timezone_get(); } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Doctrine/CarbonTypeConverter.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Doctrine/CarbonTypeConverter.php index fb59410e..fa0d5b00 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Doctrine/CarbonTypeConverter.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Doctrine/CarbonTypeConverter.php @@ -37,7 +37,7 @@ trait CarbonTypeConverter return $type; } - if (strpos($type, '(') !== false) { + if (str_contains($type, '(')) { return preg_replace('/\(\d+\)/', "($precision)", $type); } @@ -95,7 +95,7 @@ trait CarbonTypeConverter return $value; } - if ($value instanceof DateTimeInterface || $value instanceof CarbonInterface) { + if ($value instanceof DateTimeInterface) { return $value->format('Y-m-d H:i:s.u'); } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Factory.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Factory.php index 8dbd488a..e1d747f2 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Factory.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Factory.php @@ -215,7 +215,7 @@ use ReflectionMethod; * You should rather use the ->settings() method. * Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants * are available for quarters, years, decade, centuries, millennia (singular and plural forms). - * @method Carbon withTestNow($testNow = null, $callback = null) Temporarily sets a static date to be used within the callback. + * @method mixed withTestNow($testNow = null, $callback = null) Temporarily sets a static date to be used within the callback. * Using setTestNow to set the date, executing the callback, then * clearing the test instance. * /!\ Use this method for unit tests only. @@ -229,7 +229,7 @@ class Factory protected $settings = []; - public function __construct(array $settings = [], string $className = null) + public function __construct(array $settings = [], ?string $className = null) { if ($className) { $this->className = $className; diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php index 0cec0fdf..3aa286c0 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php @@ -214,7 +214,7 @@ use Closure; * You should rather use the ->settings() method. * Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants * are available for quarters, years, decade, centuries, millennia (singular and plural forms). - * @method CarbonImmutable withTestNow($testNow = null, $callback = null) Temporarily sets a static date to be used within the callback. + * @method mixed withTestNow($testNow = null, $callback = null) Temporarily sets a static date to be used within the callback. * Using setTestNow to set the date, executing the callback, then * clearing the test instance. * /!\ Use this method for unit tests only. diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/be.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/be.php index 6db1a922..ce8dbe83 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/be.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/be.php @@ -11,7 +11,7 @@ // @codeCoverageIgnoreStart if (class_exists('Symfony\\Component\\Translation\\PluralizationRules')) { \Symfony\Component\Translation\PluralizationRules::set(function ($number) { - return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2); + return (($number % 10 == 1) && ($number % 100 != 11)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2); }, 'be'); } // @codeCoverageIgnoreEnd diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bn_BD.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bn_BD.php index 46d52141..b5b28dd1 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bn_BD.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bn_BD.php @@ -11,7 +11,7 @@ /* * Authors: - * - Ankur Group, http://www.ankurbangla.org, http://www.bengalinux.org Taneem Ahmed, Jamil Ahmed taneem@bengalinux.org, jamil@bengalinux.org + * - Ankur Group, Taneem Ahmed, Jamil Ahmed */ return array_replace_recursive(require __DIR__.'/bn.php', [ 'formats' => [ diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gl.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gl.php index 6a06b026..58c1db15 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gl.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gl.php @@ -41,7 +41,7 @@ return [ 's' => ':count seg.', 'ago' => 'hai :time', 'from_now' => function ($time) { - if (substr($time, 0, 2) === 'un') { + if (str_starts_with($time, 'un')) { return "n$time"; } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ka.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ka.php index 3cdbe2d2..5ddb957d 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ka.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ka.php @@ -169,8 +169,8 @@ return [ return $number.'-ე'; }, - 'months' => ['იანვარს', 'თებერვალს', 'მარტს', 'აპრილის', 'მაისს', 'ივნისს', 'ივლისს', 'აგვისტს', 'სექტემბერს', 'ოქტომბერს', 'ნოემბერს', 'დეკემბერს'], - 'months_standalone' => ['იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'], + 'months' => ['იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'], + 'months_standalone' => ['იანვარს', 'თებერვალს', 'მარტს', 'აპრილს', 'მაისს', 'ივნისს', 'ივლისს', 'აგვისტოს', 'სექტემბერს', 'ოქტომბერს', 'ნოემბერს', 'დეკემბერს'], 'months_short' => ['იან', 'თებ', 'მარ', 'აპრ', 'მაი', 'ივნ', 'ივლ', 'აგვ', 'სექ', 'ოქტ', 'ნოე', 'დეკ'], 'months_regexp' => '/(D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|L{2,4}|l{2,4})/', 'weekdays' => ['კვირას', 'ორშაბათს', 'სამშაბათს', 'ოთხშაბათს', 'ხუთშაბათს', 'პარასკევს', 'შაბათს'], diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl.php index 0146af92..fc8b5d9a 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl.php @@ -69,7 +69,7 @@ return [ 'diff_after_tomorrow' => 'overmorgen', 'diff_before_yesterday' => 'eergisteren', 'period_recurrences' => ':count keer', - 'period_interval' => function ($interval) { + 'period_interval' => function (string $interval = '') { /** @var string $output */ $output = preg_replace('/^(een|één|1)\s+/', '', $interval); diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/oc.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/oc.php index 7cc6ec17..94c3e04c 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/oc.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/oc.php @@ -82,7 +82,7 @@ return [ 'weekdays' => ['dimenge', 'diluns', 'dimars', 'dimècres', 'dijòus', 'divendres', 'dissabte'], 'weekdays_short' => ['dg', 'dl', 'dm', 'dc', 'dj', 'dv', 'ds'], 'weekdays_min' => ['dg', 'dl', 'dm', 'dc', 'dj', 'dv', 'ds'], - 'ordinal' => function ($number, $period) { + 'ordinal' => function ($number, string $period = '') { $ordinal = [1 => 'èr', 2 => 'nd'][(int) $number] ?? 'en'; // feminine for year, week, hour, minute, second diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pl.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pl.php index 9eed5eff..ca10fe4a 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pl.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pl.php @@ -29,7 +29,7 @@ return [ 'year' => ':count rok|:count lata|:count lat', 'a_year' => 'rok|:count lata|:count lat', - 'y' => ':count r|:count l', + 'y' => ':count r|:count l|:count l', 'month' => ':count miesiąc|:count miesiące|:count miesięcy', 'a_month' => 'miesiąc|:count miesiące|:count miesięcy', 'm' => ':count mies.', diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sh.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sh.php index aaf82026..a953df42 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sh.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sh.php @@ -11,7 +11,7 @@ // @codeCoverageIgnoreStart if (class_exists('Symfony\\Component\\Translation\\PluralizationRules')) { \Symfony\Component\Translation\PluralizationRules::set(function ($number) { - return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2); + return (($number % 10 == 1) && ($number % 100 != 11)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2); }, 'sh'); } // @codeCoverageIgnoreEnd diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shn_MM.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shn_MM.php index c3f792c1..f399acf0 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shn_MM.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shn_MM.php @@ -11,7 +11,7 @@ /* * Authors: - * - ubuntu Myanmar LoCo Team http://www.ubuntu-mm.net Bone Pyae Sone bone.burma@mail.com + * - ubuntu Myanmar LoCo Team https://ubuntu-mm.net Bone Pyae Sone bone.burma@mail.com */ return array_replace_recursive(require __DIR__.'/en.php', [ 'formats' => [ diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Language.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Language.php index 2700ee7b..37902854 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Language.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Language.php @@ -11,6 +11,7 @@ namespace Carbon; use JsonSerializable; +use ReturnTypeWillChange; class Language implements JsonSerializable { @@ -332,6 +333,7 @@ class Language implements JsonSerializable * * @return string */ + #[ReturnTypeWillChange] public function jsonSerialize() { return $this->getIsoDescription(); diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Comparison.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Comparison.php index 18dc5e45..ee00666c 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Comparison.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Comparison.php @@ -622,7 +622,7 @@ trait Comparison if (!isset($units[$unit])) { if (isset($this->$unit)) { - return $this->$unit === $this->resolveCarbon($date)->$unit; + return $this->resolveCarbon($date)->$unit === $this->$unit; } if ($this->localStrictModeEnabled ?? static::isStrictModeEnabled()) { @@ -949,7 +949,7 @@ trait Comparison $tester = trim($tester); if (preg_match('/^\d+$/', $tester)) { - return $this->year === \intval($tester); + return $this->year === (int) $tester; } if (preg_match('/^\d{3,}-\d{1,2}$/', $tester)) { @@ -964,9 +964,9 @@ trait Comparison /* @var CarbonInterface $max */ $median = static::parse('5555-06-15 12:30:30.555555')->modify($modifier); - $current = $this->copy(); + $current = $this->avoidMutation(); /* @var CarbonInterface $other */ - $other = $this->copy()->modify($modifier); + $other = $this->avoidMutation()->modify($modifier); if ($current->eq($other)) { return true; @@ -1001,7 +1001,7 @@ trait Comparison ]; foreach ($units as $unit => [$minimum, $startUnit]) { - if ($median->$unit === $minimum) { + if ($minimum === $median->$unit) { $current = $current->startOf($startUnit); break; diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Converter.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Converter.php index 38ffd193..7ba62256 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Converter.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Converter.php @@ -38,7 +38,7 @@ trait Converter * * @var string|Closure|null */ - protected static $toStringFormat = null; + protected static $toStringFormat; /** * Reset the format used to the default when type juggling a Carbon instance to a string @@ -324,7 +324,9 @@ trait Converter */ public function toIso8601ZuluString($unitPrecision = 'second') { - return $this->copy()->utc()->rawFormat('Y-m-d\T'.static::getTimeFormatByPrecision($unitPrecision).'\Z'); + return $this->avoidMutation() + ->utc() + ->rawFormat('Y-m-d\T'.static::getTimeFormatByPrecision($unitPrecision).'\Z'); } /** @@ -452,7 +454,7 @@ trait Converter */ public function toRfc7231String() { - return $this->copy() + return $this->avoidMutation() ->setTimezone('GMT') ->rawFormat(\defined('static::RFC7231_FORMAT') ? static::RFC7231_FORMAT : CarbonInterface::RFC7231_FORMAT); } @@ -512,7 +514,7 @@ trait Converter */ public function toString() { - return $this->copy()->locale('en')->isoFormat('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + return $this->avoidMutation()->locale('en')->isoFormat('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); } /** @@ -537,7 +539,7 @@ trait Converter $yearFormat = $this->year < 0 || $this->year > 9999 ? 'YYYYYY' : 'YYYY'; $tzFormat = $keepOffset ? 'Z' : '[Z]'; - $date = $keepOffset ? $this : $this->copy()->utc(); + $date = $keepOffset ? $this : $this->avoidMutation()->utc(); return $date->isoFormat("$yearFormat-MM-DD[T]HH:mm:ss.SSSSSS$tzFormat"); } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php index 25ab6ec9..fa7cfc7b 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php @@ -77,7 +77,7 @@ trait Creator } // Work-around for PHP bug https://bugs.php.net/bug.php?id=67127 - if (strpos((string) .1, '.') === false) { + if (!str_contains((string) .1, '.')) { $locale = setlocale(LC_NUMERIC, '0'); setlocale(LC_NUMERIC, 'C'); } @@ -592,7 +592,7 @@ trait Creator // @codeCoverageIgnoreEnd if ($originalTz === null) { - return parent::createFromFormat($format, "$time"); + return parent::createFromFormat($format, (string) $time); } $tz = \is_int($originalTz) @@ -605,7 +605,7 @@ trait Creator return false; } - return parent::createFromFormat($format, "$time", $tz); + return parent::createFromFormat($format, (string) $time, $tz); } /** diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Date.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Date.php index a4b0fce2..07ac0dde 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Date.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Date.php @@ -27,6 +27,7 @@ use Closure; use DateInterval; use DatePeriod; use DateTime; +use DateTimeImmutable; use DateTimeInterface; use DateTimeZone; use InvalidArgumentException; @@ -630,7 +631,7 @@ trait Date * * @return CarbonTimeZone * - * @link http://php.net/manual/en/datetime.gettimezone.php + * @link https://php.net/manual/en/datetime.gettimezone.php */ #[ReturnTypeWillChange] public function getTimezone() @@ -683,6 +684,23 @@ trait Date return clone $this; } + /** + * Clone the current instance if it's mutable. + * + * This method is convenient to ensure you don't mutate the initial object + * but avoid to make a useless copy of it if it's already immutable. + * + * @return static + */ + public function avoidMutation(): self + { + if ($this instanceof DateTimeImmutable) { + return $this; + } + + return clone $this; + } + /** * Returns a present instance in the same timezone. * @@ -774,7 +792,7 @@ trait Date public function carbonize($date = null) { if ($date instanceof DateInterval) { - return $this->copy()->add($date); + return $this->avoidMutation()->add($date); } if ($date instanceof DatePeriod || $date instanceof CarbonPeriod) { @@ -872,7 +890,7 @@ trait Date switch (true) { case isset($formats[$name]): $format = $formats[$name]; - $method = substr($format, 0, 1) === '%' ? 'formatLocalized' : 'rawFormat'; + $method = str_starts_with($format, '%') ? 'formatLocalized' : 'rawFormat'; $value = $this->$method($format); return is_numeric($value) ? (int) $value : $value; @@ -927,11 +945,11 @@ trait Date // @property-read int 51 through 53 case $name === 'weeksInYear': - return (int) $this->weeksInYear(); + return $this->weeksInYear(); // @property-read int 51 through 53 case $name === 'isoWeeksInYear': - return (int) $this->isoWeeksInYear(); + return $this->isoWeeksInYear(); // @property-read int 1 through 5 case $name === 'weekOfMonth': @@ -939,7 +957,7 @@ trait Date // @property-read int 1 through 5 case $name === 'weekNumberInMonth': - return (int) ceil(($this->day + $this->copy()->startOfMonth()->dayOfWeekIso - 1) / static::DAYS_PER_WEEK); + return (int) ceil(($this->day + $this->avoidMutation()->startOfMonth()->dayOfWeekIso - 1) / static::DAYS_PER_WEEK); // @property-read int 0 through 6 case $name === 'firstWeekDay': @@ -951,7 +969,7 @@ trait Date // @property int 1 through 366 case $name === 'dayOfYear': - return 1 + \intval($this->rawFormat('z')); + return 1 + (int) ($this->rawFormat('z')); // @property-read int 365 or 366 case $name === 'daysInYear': @@ -1013,7 +1031,7 @@ trait Date // @property-read bool checks if the timezone is local, true if local, false otherwise case $name === 'local': - return $this->getOffset() === $this->copy()->setTimezone(date_default_timezone_get())->getOffset(); + return $this->getOffset() === $this->avoidMutation()->setTimezone(date_default_timezone_get())->getOffset(); // @property-read bool checks if the timezone is UTC, true if UTC, false otherwise case $name === 'utc': @@ -1114,7 +1132,7 @@ trait Date case 'microseconds': case 'microsecond': case 'micro': - if (substr($name, 0, 5) === 'milli') { + if (str_starts_with($name, 'milli')) { $value *= 1000; } @@ -1309,7 +1327,7 @@ trait Date { $dayOfYear = $this->dayOfYear; - return \is_null($value) ? $dayOfYear : $this->addDays($value - $dayOfYear); + return $value === null ? $dayOfYear : $this->addDays($value - $dayOfYear); } /** @@ -1321,9 +1339,9 @@ trait Date */ public function weekday($value = null) { - $dayOfWeek = ($this->dayOfWeek + 7 - \intval($this->getTranslationMessage('first_day_of_week') ?? 0)) % 7; + $dayOfWeek = ($this->dayOfWeek + 7 - (int) ($this->getTranslationMessage('first_day_of_week') ?? 0)) % 7; - return \is_null($value) ? $dayOfWeek : $this->addDays($value - $dayOfWeek); + return $value === null ? $dayOfWeek : $this->addDays($value - $dayOfWeek); } /** @@ -1337,7 +1355,7 @@ trait Date { $dayOfWeekIso = $this->dayOfWeekIso; - return \is_null($value) ? $dayOfWeekIso : $this->addDays($value - $dayOfWeekIso); + return $value === null ? $dayOfWeekIso : $this->addDays($value - $dayOfWeekIso); } /** @@ -1352,11 +1370,11 @@ trait Date public function setUnitNoOverflow($valueUnit, $value, $overflowUnit) { try { - $original = $this->copy(); + $original = $this->avoidMutation(); /** @var static $date */ $date = $this->$valueUnit($value); - $end = $original->copy()->endOf($overflowUnit); - $start = $original->copy()->startOf($overflowUnit); + $end = $original->avoidMutation()->endOf($overflowUnit); + $start = $original->avoidMutation()->startOf($overflowUnit); if ($date < $start) { $date = $date->setDateTimeFrom($start); } elseif ($date > $end) { @@ -1509,7 +1527,7 @@ trait Date */ public function setTimeFromTimeString($time) { - if (strpos($time, ':') === false) { + if (!str_contains($time, ':')) { $time .= ':0'; } @@ -1791,7 +1809,7 @@ trait Date /** * Format the instance with the current locale. You can set the current - * locale using setlocale() http://php.net/setlocale. + * locale using setlocale() https://php.net/setlocale. * * @param string $format * @@ -1900,7 +1918,7 @@ trait Date 's' => 'second', 'ss' => ['getPaddedUnit', ['second']], 'S' => function (CarbonInterface $date) { - return \strval((string) floor($date->micro / 100000)); + return (string) floor($date->micro / 100000); }, 'SS' => function (CarbonInterface $date) { return str_pad((string) floor($date->micro / 10000), 2, '0', STR_PAD_LEFT); @@ -1999,15 +2017,15 @@ trait Date * * @return string */ - public function ordinal(string $key, string $period = null): string + public function ordinal(string $key, ?string $period = null): string { $number = $this->$key; $result = $this->translate('ordinal', [ ':number' => $number, - ':period' => $period, + ':period' => (string) $period, ]); - return \strval($result === 'ordinal' ? $number : $result); + return (string) ($result === 'ordinal' ? $number : $result); } /** @@ -2070,7 +2088,7 @@ trait Date * * @return string */ - public function isoFormat(string $format, string $originalFormat = null): string + public function isoFormat(string $format, ?string $originalFormat = null): string { $result = ''; $length = mb_strlen($format); @@ -2149,7 +2167,7 @@ trait Date } $format = mb_substr($format, 0, $i).$sequence.mb_substr($format, $i + mb_strlen($code)); - $i += mb_strlen("$sequence") - 1; + $i += mb_strlen((string) $sequence) - 1; $length = mb_strlen($format); $char = $sequence; } @@ -2179,7 +2197,7 @@ trait Date 'S' => function ($date) { $day = $date->rawFormat('j'); - return str_replace("$day", '', $date->isoFormat('Do')); + return str_replace((string) $day, '', $date->isoFormat('Do')); }, 'w' => true, 'z' => true, @@ -2219,7 +2237,7 @@ trait Date } /** - * Format as ->format() do (using date replacements patterns from http://php.net/manual/fr/function.date.php) + * Format as ->format() do (using date replacements patterns from https://php.net/manual/en/function.date.php) * but translate words whenever possible (months, day names, etc.) using the current locale. * * @param string $format @@ -2519,7 +2537,7 @@ trait Date $unit = rtrim($method, 's'); - if (substr($unit, 0, 2) === 'is') { + if (str_starts_with($unit, 'is')) { $word = substr($unit, 2); if (\in_array($word, static::$days)) { @@ -2557,7 +2575,7 @@ trait Date if ($action === 'add' || $action === 'sub') { $unit = substr($unit, 3); - if (substr($unit, 0, 4) === 'Real') { + if (str_starts_with($unit, 'Real')) { $unit = static::singularUnit(substr($unit, 4)); return $this->{"${action}RealUnit"}($unit, ...$parameters); @@ -2599,7 +2617,7 @@ trait Date } } - if (substr($unit, 0, 9) === 'isCurrent') { + if (str_starts_with($unit, 'isCurrent')) { try { return $this->isCurrentUnit(strtolower(substr($unit, 9))); } catch (BadComparisonUnitException | BadMethodCallException $exception) { @@ -2607,7 +2625,7 @@ trait Date } } - if (substr($method, -5) === 'Until') { + if (str_ends_with($method, 'Until')) { try { $unit = static::singularUnit(substr($method, 0, -5)); diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php index 335ad2be..b1cdd6e3 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php @@ -121,7 +121,17 @@ trait Difference #[ReturnTypeWillChange] public function diff($date = null, $absolute = false) { - return parent::diff($this->resolveCarbon($date), (bool) $absolute); + $other = $this->resolveCarbon($date); + + // Can be removed if https://github.com/derickr/timelib/pull/110 + // is merged + // @codeCoverageIgnoreStart + if (version_compare(PHP_VERSION, '8.1.0-dev', '>=') && $other->tz !== $this->tz) { + $other = $other->avoidMutation()->tz($this->tz); + } + // @codeCoverageIgnoreEnd + + return parent::diff($other, (bool) $absolute); } /** @@ -540,14 +550,14 @@ trait Difference } $monthsDiff = $start->diffInMonths($end); /** @var Carbon|CarbonImmutable $floorEnd */ - $floorEnd = $start->copy()->addMonths($monthsDiff); + $floorEnd = $start->avoidMutation()->addMonths($monthsDiff); if ($floorEnd >= $end) { return $sign * $monthsDiff; } /** @var Carbon|CarbonImmutable $startOfMonthAfterFloorEnd */ - $startOfMonthAfterFloorEnd = $floorEnd->copy()->addMonth()->startOfMonth(); + $startOfMonthAfterFloorEnd = $floorEnd->avoidMutation()->addMonth()->startOfMonth(); if ($startOfMonthAfterFloorEnd > $end) { return $sign * ($monthsDiff + $floorEnd->floatDiffInDays($end) / $floorEnd->daysInMonth); @@ -575,14 +585,14 @@ trait Difference } $yearsDiff = $start->diffInYears($end); /** @var Carbon|CarbonImmutable $floorEnd */ - $floorEnd = $start->copy()->addYears($yearsDiff); + $floorEnd = $start->avoidMutation()->addYears($yearsDiff); if ($floorEnd >= $end) { return $sign * $yearsDiff; } /** @var Carbon|CarbonImmutable $startOfYearAfterFloorEnd */ - $startOfYearAfterFloorEnd = $floorEnd->copy()->addYear()->startOfYear(); + $startOfYearAfterFloorEnd = $floorEnd->avoidMutation()->addYear()->startOfYear(); if ($startOfYearAfterFloorEnd > $end) { return $sign * ($yearsDiff + $floorEnd->floatDiffInDays($end) / $floorEnd->daysInYear); @@ -641,7 +651,7 @@ trait Difference public function floatDiffInRealDays($date = null, $absolute = true) { $date = $this->resolveUTC($date); - $utc = $this->copy()->utc(); + $utc = $this->avoidMutation()->utc(); $hoursDiff = $utc->floatDiffInRealHours($date, $absolute); return ($hoursDiff < 0 ? -1 : 1) * $utc->diffInDays($date) + fmod($hoursDiff, static::HOURS_PER_DAY) / static::HOURS_PER_DAY; @@ -679,14 +689,14 @@ trait Difference } $monthsDiff = $start->diffInMonths($end); /** @var Carbon|CarbonImmutable $floorEnd */ - $floorEnd = $start->copy()->addMonths($monthsDiff); + $floorEnd = $start->avoidMutation()->addMonths($monthsDiff); if ($floorEnd >= $end) { return $sign * $monthsDiff; } /** @var Carbon|CarbonImmutable $startOfMonthAfterFloorEnd */ - $startOfMonthAfterFloorEnd = $floorEnd->copy()->addMonth()->startOfMonth(); + $startOfMonthAfterFloorEnd = $floorEnd->avoidMutation()->addMonth()->startOfMonth(); if ($startOfMonthAfterFloorEnd > $end) { return $sign * ($monthsDiff + $floorEnd->floatDiffInRealDays($end) / $floorEnd->daysInMonth); @@ -714,14 +724,14 @@ trait Difference } $yearsDiff = $start->diffInYears($end); /** @var Carbon|CarbonImmutable $floorEnd */ - $floorEnd = $start->copy()->addYears($yearsDiff); + $floorEnd = $start->avoidMutation()->addYears($yearsDiff); if ($floorEnd >= $end) { return $sign * $yearsDiff; } /** @var Carbon|CarbonImmutable $startOfYearAfterFloorEnd */ - $startOfYearAfterFloorEnd = $floorEnd->copy()->addYear()->startOfYear(); + $startOfYearAfterFloorEnd = $floorEnd->avoidMutation()->addYear()->startOfYear(); if ($startOfYearAfterFloorEnd > $end) { return $sign * ($yearsDiff + $floorEnd->floatDiffInRealDays($end) / $floorEnd->daysInYear); @@ -737,7 +747,7 @@ trait Difference */ public function secondsSinceMidnight() { - return $this->diffInSeconds($this->copy()->startOfDay()); + return $this->diffInSeconds($this->avoidMutation()->startOfDay()); } /** @@ -747,7 +757,7 @@ trait Difference */ public function secondsUntilEndOfDay() { - return $this->diffInSeconds($this->copy()->endOfDay()); + return $this->diffInSeconds($this->avoidMutation()->endOfDay()); } /** @@ -1106,9 +1116,9 @@ trait Difference public function calendar($referenceTime = null, array $formats = []) { /** @var CarbonInterface $current */ - $current = $this->copy()->startOfDay(); + $current = $this->avoidMutation()->startOfDay(); /** @var CarbonInterface $other */ - $other = $this->resolveCarbon($referenceTime)->copy()->setTimezone($this->getTimezone())->startOfDay(); + $other = $this->resolveCarbon($referenceTime)->avoidMutation()->setTimezone($this->getTimezone())->startOfDay(); $diff = $other->diffInDays($current, false); $format = $diff < -6 ? 'sameElse' : ( $diff < -1 ? 'lastWeek' : ( @@ -1126,6 +1136,6 @@ trait Difference $format = $format($current, $other) ?? ''; } - return $this->isoFormat(\strval($format)); + return $this->isoFormat((string) $format); } } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/IntervalStep.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/IntervalStep.php index 764bd1ea..4882eef6 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/IntervalStep.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/IntervalStep.php @@ -64,7 +64,7 @@ trait IntervalStep $carbonDate = $dateTime instanceof CarbonInterface ? $dateTime : $this->resolveCarbon($dateTime); if ($this->step) { - return $carbonDate->setDateTimeFrom(($this->step)($carbonDate->copy(), $negated)); + return $carbonDate->setDateTimeFrom(($this->step)($carbonDate->avoidMutation(), $negated)); } if ($negated) { diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Localization.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Localization.php index 7bbedf99..9162dc94 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Localization.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Localization.php @@ -168,7 +168,7 @@ trait Localization * * @return string */ - public static function getTranslationMessageWith($translator, string $key, string $locale = null, string $default = null) + public static function getTranslationMessageWith($translator, string $key, ?string $locale = null, ?string $default = null) { if (!($translator instanceof TranslatorBagInterface && $translator instanceof TranslatorInterface)) { throw new InvalidTypeException( @@ -196,7 +196,7 @@ trait Localization * * @return string */ - public function getTranslationMessage(string $key, string $locale = null, string $default = null, $translator = null) + public function getTranslationMessage(string $key, ?string $locale = null, ?string $default = null, $translator = null) { return static::getTranslationMessageWith($translator ?: $this->getLocalTranslator(), $key, $locale, $default); } @@ -239,12 +239,12 @@ trait Localization * * @param string $key * @param array $parameters - * @param null $number + * @param string|int|float|null $number * @param \Symfony\Component\Translation\TranslatorInterface $translator * * @return string */ - public function translate(string $key, array $parameters = [], $number = null, TranslatorInterface $translator = null, bool $altNumbers = false): string + public function translate(string $key, array $parameters = [], $number = null, ?TranslatorInterface $translator = null, bool $altNumbers = false): string { $translation = static::translateWith($translator ?: $this->getLocalTranslator(), $key, $parameters, $number); @@ -302,7 +302,7 @@ trait Localization return $result; } - return "$number"; + return (string) $number; } /** diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Modifiers.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Modifiers.php index 0b0ccc95..2fd64264 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Modifiers.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Modifiers.php @@ -224,11 +224,11 @@ trait Modifiers */ public function nthOfMonth($nth, $dayOfWeek) { - $date = $this->copy()->firstOfMonth(); + $date = $this->avoidMutation()->firstOfMonth(); $check = $date->rawFormat('Y-m'); $date = $date->modify('+'.$nth.' '.static::$days[$dayOfWeek]); - return $date->rawFormat('Y-m') === $check ? $this->modify("$date") : false; + return $date->rawFormat('Y-m') === $check ? $this->modify((string) $date) : false; } /** @@ -274,12 +274,12 @@ trait Modifiers */ public function nthOfQuarter($nth, $dayOfWeek) { - $date = $this->copy()->day(1)->month($this->quarter * static::MONTHS_PER_QUARTER); + $date = $this->avoidMutation()->day(1)->month($this->quarter * static::MONTHS_PER_QUARTER); $lastMonth = $date->month; $year = $date->year; $date = $date->firstOfQuarter()->modify('+'.$nth.' '.static::$days[$dayOfWeek]); - return ($lastMonth < $date->month || $year !== $date->year) ? false : $this->modify("$date"); + return ($lastMonth < $date->month || $year !== $date->year) ? false : $this->modify((string) $date); } /** @@ -325,9 +325,9 @@ trait Modifiers */ public function nthOfYear($nth, $dayOfWeek) { - $date = $this->copy()->firstOfYear()->modify('+'.$nth.' '.static::$days[$dayOfWeek]); + $date = $this->avoidMutation()->firstOfYear()->modify('+'.$nth.' '.static::$days[$dayOfWeek]); - return $this->year === $date->year ? $this->modify("$date") : false; + return $this->year === $date->year ? $this->modify((string) $date) : false; } /** @@ -454,7 +454,7 @@ trait Modifiers { return $this->modify(preg_replace_callback('/^(next|previous|last)\s+(\d{1,2}(h|am|pm|:\d{1,2}(:\d{1,2})?))$/i', function ($match) { $match[2] = str_replace('h', ':00', $match[2]); - $test = $this->copy()->modify($match[2]); + $test = $this->avoidMutation()->modify($match[2]); $method = $match[1] === 'next' ? 'lt' : 'gt'; $match[1] = $test->$method($this) ? $match[1].' day' : 'today'; diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php index fadfeaa8..252df3a5 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php @@ -17,5 +17,5 @@ trait ObjectInitialisation * * @var string */ - protected $constructedObjectId = null; + protected $constructedObjectId; } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Options.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Options.php index 872d1314..0a49372c 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Options.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Options.php @@ -151,21 +151,21 @@ trait Options * * @var string|callable|null */ - protected static $formatFunction = null; + protected static $formatFunction; /** * Function to call instead of createFromFormat. * * @var string|callable|null */ - protected static $createFromFormatFunction = null; + protected static $createFromFormatFunction; /** * Function to call instead of parse. * * @var string|callable|null */ - protected static $parseFunction = null; + protected static $parseFunction; /** * Indicates if months should be calculated with overflow. @@ -173,7 +173,7 @@ trait Options * * @var bool|null */ - protected $localMonthsOverflow = null; + protected $localMonthsOverflow; /** * Indicates if years should be calculated with overflow. @@ -181,7 +181,7 @@ trait Options * * @var bool|null */ - protected $localYearsOverflow = null; + protected $localYearsOverflow; /** * Indicates if the strict mode is in use. @@ -189,49 +189,49 @@ trait Options * * @var bool|null */ - protected $localStrictModeEnabled = null; + protected $localStrictModeEnabled; /** * Options for diffForHumans and forHumans methods. * * @var bool|null */ - protected $localHumanDiffOptions = null; + protected $localHumanDiffOptions; /** * Format to use on string cast. * * @var string|null */ - protected $localToStringFormat = null; + protected $localToStringFormat; /** * Format to use on JSON serialization. * * @var string|null */ - protected $localSerializer = null; + protected $localSerializer; /** * Instance-specific macros. * * @var array|null */ - protected $localMacros = null; + protected $localMacros; /** * Instance-specific generic macros. * * @var array|null */ - protected $localGenericMacros = null; + protected $localGenericMacros; /** * Function to call instead of format. * * @var string|callable|null */ - protected $localFormatFunction = null; + protected $localFormatFunction; /** * @deprecated To avoid conflict between different third-party libraries, static setters should not be used. @@ -449,7 +449,7 @@ trait Options protected function addExtraDebugInfos(&$infos): void { - if ($this instanceof CarbonInterface || $this instanceof DateTimeInterface) { + if ($this instanceof DateTimeInterface) { try { if (!isset($infos['date'])) { $infos['date'] = $this->format(CarbonInterface::MOCK_DATETIME_FORMAT); diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Rounding.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Rounding.php index be8190d8..03d3fe69 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Rounding.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Rounding.php @@ -194,7 +194,10 @@ trait Rounding */ public function roundWeek($weekStartsAt = null) { - return $this->closest($this->copy()->floorWeek($weekStartsAt), $this->copy()->ceilWeek($weekStartsAt)); + return $this->closest( + $this->avoidMutation()->floorWeek($weekStartsAt), + $this->avoidMutation()->ceilWeek($weekStartsAt) + ); } /** @@ -219,7 +222,7 @@ trait Rounding public function ceilWeek($weekStartsAt = null) { if ($this->isMutable()) { - $startOfWeek = $this->copy()->startOfWeek($weekStartsAt); + $startOfWeek = $this->avoidMutation()->startOfWeek($weekStartsAt); return $startOfWeek != $this ? $this->startOfWeek($weekStartsAt)->addWeek() : @@ -230,6 +233,6 @@ trait Rounding return $startOfWeek != $this ? $startOfWeek->addWeek() : - $this->copy(); + $this->avoidMutation(); } } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Serialization.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Serialization.php index 54ad447d..a27e4e35 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Serialization.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Serialization.php @@ -12,6 +12,7 @@ namespace Carbon\Traits; use Carbon\Exceptions\InvalidFormatException; use ReturnTypeWillChange; +use Throwable; /** * Trait Serialization. @@ -53,7 +54,15 @@ trait Serialization * * @var string|null */ - protected $dumpLocale = null; + protected $dumpLocale; + + /** + * Embed date properties to dump in a dedicated variables so it won't overlap native + * DateTime ones. + * + * @var array|null + */ + protected $dumpDateProperties; /** * Return a serialized string of the instance. @@ -76,7 +85,7 @@ trait Serialization */ public static function fromSerialized($value) { - $instance = @unserialize("$value"); + $instance = @unserialize((string) $value); if (!$instance instanceof static) { throw new InvalidFormatException("Invalid serialized value: $value"); @@ -114,7 +123,7 @@ trait Serialization */ public function __sleep() { - $properties = $this->dumpProperties; + $properties = $this->getSleepProperties(); if ($this->localTranslator ?? null) { $properties[] = 'dumpLocale'; @@ -131,7 +140,15 @@ trait Serialization public function __wakeup() { if (get_parent_class() && method_exists(parent::class, '__wakeup')) { - parent::__wakeup(); + // @codeCoverageIgnoreStart + try { + parent::__wakeup(); + } catch (Throwable $exception) { + // FatalError occurs when calling msgpack_unpack() in PHP 7.4 or later. + ['date' => $date, 'timezone' => $timezone] = $this->dumpDateProperties; + parent::__construct($date, unserialize($timezone)); + } + // @codeCoverageIgnoreEnd } $this->constructedObjectId = spl_object_hash($this); @@ -149,6 +166,7 @@ trait Serialization * * @return array|string */ + #[ReturnTypeWillChange] public function jsonSerialize() { $serializer = $this->localSerializer ?? static::$serializer; @@ -194,4 +212,26 @@ trait Serialization return $this; } + + private function getSleepProperties(): array + { + $properties = $this->dumpProperties; + + // @codeCoverageIgnoreStart + if (!\extension_loaded('msgpack')) { + return $properties; + } + + if (isset($this->constructedObjectId)) { + $this->dumpDateProperties = [ + 'date' => $this->format('Y-m-d H:i:s.u'), + 'timezone' => serialize($this->timezone ?? null), + ]; + + $properties[] = 'dumpDateProperties'; + } + + return $properties; + // @codeCoverageIgnoreEnd + } } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Test.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Test.php index 29338c1a..d9989749 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Test.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Test.php @@ -63,12 +63,16 @@ trait Test * * @param Closure|static|string|false|null $testNow real or mock Carbon instance * @param Closure|null $callback + * + * @return mixed */ public static function withTestNow($testNow = null, $callback = null) { static::setTestNow($testNow); - $callback(); + $result = $callback(); static::setTestNow(); + + return $result; } /** diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Timestamp.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Timestamp.php index b3b5d5f1..35d45aa5 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Timestamp.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Timestamp.php @@ -45,6 +45,7 @@ trait Timestamp $delta = floor($decimal / static::MICROSECONDS_PER_SECOND); $integer += $delta; $decimal -= $delta * static::MICROSECONDS_PER_SECOND; + $decimal = str_pad((string) $decimal, 6, '0', STR_PAD_LEFT); return static::rawCreateFromFormat('U u', "$integer $decimal"); } @@ -136,6 +137,16 @@ trait Timestamp return $this->getPreciseTimestamp(3); } + /** + * Returns the timestamp with millisecond precision. + * + * @return int + */ + public function getTimestampMs() + { + return (int) $this->getPreciseTimestamp(3); + } + /** * @alias getTimestamp * @@ -166,15 +177,15 @@ trait Timestamp $numbers = number_format($numbers, $decimals, '.', ''); } - $sign = substr($numbers, 0, 1) === '-' ? -1 : 1; + $sign = str_starts_with($numbers, '-') ? -1 : 1; $integer = 0; $decimal = 0; foreach (preg_split('`[^0-9.]+`', $numbers) as $chunk) { [$integerPart, $decimalPart] = explode('.', "$chunk."); - $integer += \intval($integerPart); - $decimal += \floatval("0.$decimalPart"); + $integer += (int) $integerPart; + $decimal += (float) ("0.$decimalPart"); } $overflow = floor($decimal); diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Units.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Units.php index c8cd108d..aec85ab2 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Units.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Units.php @@ -48,7 +48,7 @@ trait Units $seconds = (int) floor($diff / static::MICROSECONDS_PER_SECOND); $time += $seconds; $diff -= $seconds * static::MICROSECONDS_PER_SECOND; - $microtime = str_pad("$diff", 6, '0', STR_PAD_LEFT); + $microtime = str_pad((string) $diff, 6, '0', STR_PAD_LEFT); $tz = $this->tz; return $this->tz('UTC')->modify("@$time.$microtime")->tz($tz); @@ -201,6 +201,21 @@ trait Units $unit = CarbonInterval::make($unit); } + // Can be removed if https://bugs.php.net/bug.php?id=81106 + // is fixed + // @codeCoverageIgnoreStart + if ( + $unit instanceof DateInterval && + version_compare(PHP_VERSION, '8.1.0-dev', '>=') && + ($unit->f < 0 || $unit->f >= 1) + ) { + $unit = clone $unit; + $seconds = floor($unit->f); + $unit->f -= $seconds; + $unit->s += (int) $seconds; + } + // @codeCoverageIgnoreEnd + if ($unit instanceof CarbonConverterInterface) { return $this->resolveCarbon($unit->convertDate($this, false)); } @@ -233,8 +248,8 @@ trait Units { $date = $this; - if (!is_numeric($value) || !\floatval($value)) { - return $date->isMutable() ? $date : $date->copy(); + if (!is_numeric($value) || !(float) $value) { + return $date->isMutable() ? $date : $date->avoidMutation(); } $metaUnits = [ @@ -377,7 +392,7 @@ trait Units [$value, $unit] = [$unit, $value]; } - return $this->addUnit($unit, -\floatval($value), $overflow); + return $this->addUnit($unit, -(float) $value, $overflow); } /** diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Week.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Week.php index 98ee84a1..64cece7a 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Week.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Week.php @@ -27,7 +27,7 @@ namespace Carbon\Traits; * @method static addWeeks(int $weeks = 1) * @method static copy() * @method static dayOfYear(int $dayOfYear) - * @method string getTranslationMessage(string $key, string $locale = null, string $default = null, $translator = null) + * @method string getTranslationMessage(string $key, ?string $locale = null, ?string $default = null, $translator = null) * @method static next(int|string $day = null) * @method static startOfWeek(int $day = 1) * @method static subWeeks(int $weeks = 1) @@ -75,7 +75,7 @@ trait Week $year = (int) round($year); if ($this->weekYear(null, $dayOfWeek, $dayOfYear) === $year) { - return $this->copy(); + return $this->avoidMutation(); } $week = $this->week(null, $dayOfWeek, $dayOfYear); @@ -103,13 +103,13 @@ trait Week $year = $this->year; $day = $this->dayOfYear; - $date = $this->copy()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); + $date = $this->avoidMutation()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); if ($date->year === $year && $day < $date->dayOfYear) { return $year - 1; } - $date = $this->copy()->addYear()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); + $date = $this->avoidMutation()->addYear()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); if ($date->year === $year && $day >= $date->dayOfYear) { return $year + 1; @@ -151,12 +151,12 @@ trait Week $dayOfWeek = $dayOfWeek ?? $this->getTranslationMessage('first_day_of_week') ?? 0; $dayOfYear = $dayOfYear ?? $this->getTranslationMessage('day_of_first_week_of_year') ?? 1; $year = $this->year; - $start = $this->copy()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); + $start = $this->avoidMutation()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); $startDay = $start->dayOfYear; if ($start->year !== $year) { $startDay -= $start->daysInYear; } - $end = $this->copy()->addYear()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); + $end = $this->avoidMutation()->addYear()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); $endDay = $end->dayOfYear; if ($end->year !== $year) { $endDay += $this->daysInYear; @@ -186,8 +186,8 @@ trait Week return $date->addWeeks(round($week) - $this->week(null, $dayOfWeek, $dayOfYear)); } - $start = $date->copy()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); - $end = $date->copy()->startOfWeek($dayOfWeek); + $start = $date->avoidMutation()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); + $end = $date->avoidMutation()->startOfWeek($dayOfWeek); if ($start > $end) { $start = $start->subWeeks(26)->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek); } diff --git a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Translator.php b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Translator.php index 3122a85c..9af48ebe 100644 --- a/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Translator.php +++ b/data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Translator.php @@ -148,7 +148,7 @@ class Translator extends Translation\Translator */ public function trans($id, array $parameters = [], $domain = null, $locale = null) { - if (null === $domain) { + if ($domain === null) { $domain = 'messages'; } @@ -326,7 +326,7 @@ class Translator extends Translation\Translator $previousLocale = $this->getLocale(); - if ($previousLocale === $locale) { + if ($previousLocale === $locale && isset($this->messages[$locale])) { return true; } @@ -355,7 +355,7 @@ class Translator extends Translation\Translator } // If subtag (ex: en_CA) first load the macro (ex: en) to have a fallback - if (strpos($locale, '_') !== false && + if (str_contains($locale, '_') && $this->loadMessagesFromFile($macroLocale = preg_replace('/^([^_]+).*$/', '$1', $locale)) ) { parent::setLocale($macroLocale); diff --git a/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/.github/workflows/main.yml b/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/.github/workflows/main.yml new file mode 100644 index 00000000..34c8210f --- /dev/null +++ b/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/.github/workflows/main.yml @@ -0,0 +1,60 @@ +name: CI + +on: [push] + +jobs: + + tests: + runs-on: ubuntu-latest + strategy: + matrix: + php: [7.2, 7.3, 7.4, 8.0] + dependency-version: [prefer-lowest, prefer-stable] + steps: + - name: Checkout code + uses: actions/checkout@v1 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: mailparse + coverage: none + + - name: Install dependencies + run: composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-suggest --no-progress + + - name: Execute tests + run: vendor/bin/phpunit + + php-cs: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v1 + + - name: Install dependencies + run: composer update --no-progress --ignore-platform-reqs + + - name: Execute phpcs + run: vendor/bin/phpcs src tests --standard=psr2 + + coverage: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v1 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 7.4 + extensions: mailparse + + - name: Install dependencies + run: composer update --prefer-dist --no-interaction --no-suggest --no-progress + + - name: Execute code coverage + run: | + vendor/bin/phpunit --coverage-clover=coverage.xml --whitelist src + bash <(curl -s https://codecov.io/bash) -t ${{ secrets.COVERALLS_REPO_TOKEN }} diff --git a/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/README.md b/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/README.md index 68f997ae..24a6e0eb 100644 --- a/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/README.md +++ b/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/README.md @@ -1,6 +1,6 @@ # php-mime-mail-parser -A fully tested email parser for PHP 7.1+ (mailparse extension wrapper). +A fully tested email parser for PHP 7.2+ (mailparse extension wrapper). It's the most effective php email parser around in terms of performance, foreign character encoding, attachment handling, and ease of use. Internet Message Format RFC [822](https://tools.ietf.org/html/rfc822), [2822](https://tools.ietf.org/html/rfc2822), [5322](https://tools.ietf.org/html/rfc5322). @@ -23,7 +23,7 @@ Yes. All known issues have been reproduced, fixed and tested. We use GitHub Actions, Codecov, Codacy to help ensure code quality. You can see real-time statistics below: -[![Actions Status](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/badge/php-mime-mail-parser/php-mime-mail-parser?style=flat-square)](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/results/php-mime-mail-parser/php-mime-mail-parser) +[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fphp-mime-mail-parser%2Fphp-mime-mail-parser%2Fbadge%3Fref%3Dmaster&style=flat-square)](https://actions-badge.atrox.dev/php-mime-mail-parser/php-mime-mail-parser/goto?ref=master) [![Coverage](https://img.shields.io/codecov/c/gh/php-mime-mail-parser/php-mime-mail-parser?style=flat-square)](https://codecov.io/gh/php-mime-mail-parser/php-mime-mail-parser) [![Code Quality](https://img.shields.io/codacy/grade/4e0e44fee21147ddbdd18ff976251875?style=flat-square)](https://app.codacy.com/app/php-mime-mail-parser/php-mime-mail-parser) @@ -40,19 +40,20 @@ To install the latest version of PHP MIME Mail Parser, run the command below: The following versions of PHP are supported: -* PHP 7.1 * PHP 7.2 * PHP 7.3 +* PHP 7.4 Previous Versions: | PHP Compatibility | Version | | ------------- | ------------- | -| HHVM | php-mime-mail-parser 2.11.1 | -| PHP 5.4 | php-mime-mail-parser 2.11.1 | -| PHP 5.5 | php-mime-mail-parser 2.11.1 | +| HHVM | php-mime-mail-parser 2.11.1 | +| PHP 5.4 | php-mime-mail-parser 2.11.1 | +| PHP 5.5 | php-mime-mail-parser 2.11.1 | | PHP 5.6 | php-mime-mail-parser 3.0.4 | | PHP 7.0 | php-mime-mail-parser 3.0.4 | +| PHP 7.1 | php-mime-mail-parser 5.0.5 | Make sure you have the mailparse extension (http://php.net/manual/en/book.mailparse.php) properly installed. The command line `php -m | grep mailparse` need to return "mailparse". diff --git a/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/composer.json b/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/composer.json index a797183e..e9861a24 100644 --- a/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/composer.json +++ b/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/composer.json @@ -1,7 +1,7 @@ { "name": "php-mime-mail-parser/php-mime-mail-parser", "type": "library", - "description": "A fully tested email parser for PHP 7.1+ (mailparse extension wrapper).", + "description": "A fully tested email parser for PHP 7.2+ (mailparse extension wrapper).", "keywords": ["mime", "mail", "mailparse", "MimeMailParser", "parser", "php"], "homepage": "https://github.com/php-mime-mail-parser/php-mime-mail-parser", "license": "MIT", @@ -42,14 +42,13 @@ "url":"https://github.com/php-mime-mail-parser/php-mime-mail-parser.git" }, "require": { - "php": "^7.1", + "php": "^7.2|^8.0", "ext-mailparse": "*" }, "require-dev": { - "phpunit/phpunit": "^7.0", - "phpunit/php-token-stream": "^3.0", - "php-coveralls/php-coveralls": "^2.1", - "squizlabs/php_codesniffer": "^3.4" + "phpunit/phpunit": "^8.0", + "php-coveralls/php-coveralls": "^2.2", + "squizlabs/php_codesniffer": "^3.5" }, "replace": { "exorus/php-mime-mail-parser": "*", diff --git a/data/web/inc/lib/vendor/symfony/polyfill-mbstring/Mbstring.php b/data/web/inc/lib/vendor/symfony/polyfill-mbstring/Mbstring.php index c31611fb..b5990956 100644 --- a/data/web/inc/lib/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/data/web/inc/lib/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -69,14 +69,15 @@ final class Mbstring { public const MB_CASE_FOLD = \PHP_INT_MAX; - private static $encodingList = ['ASCII', 'UTF-8']; - private static $language = 'neutral'; - private static $internalEncoding = 'UTF-8'; - private static $caseFold = [ + private const CASE_FOLD = [ ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], ]; + private static $encodingList = ['ASCII', 'UTF-8']; + private static $language = 'neutral'; + private static $internalEncoding = 'UTF-8'; + public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) { if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) { @@ -300,7 +301,7 @@ final class Mbstring $map = $upper; } else { if (self::MB_CASE_FOLD === $mode) { - $s = str_replace(self::$caseFold[0], self::$caseFold[1], $s); + $s = str_replace(self::CASE_FOLD[0], self::CASE_FOLD[1], $s); } static $lower = null; diff --git a/data/web/inc/lib/vendor/symfony/polyfill-php80/README.md b/data/web/inc/lib/vendor/symfony/polyfill-php80/README.md index eaa3050a..10b8ee49 100644 --- a/data/web/inc/lib/vendor/symfony/polyfill-php80/README.md +++ b/data/web/inc/lib/vendor/symfony/polyfill-php80/README.md @@ -16,7 +16,7 @@ This component provides features added to PHP 8.0 core: - [`get_resource_id`](https://php.net/get_resource_id) More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). License ======= diff --git a/data/web/inc/lib/vendor/symfony/polyfill-php80/bootstrap.php b/data/web/inc/lib/vendor/symfony/polyfill-php80/bootstrap.php index 4f791f9e..e5f7dbc1 100644 --- a/data/web/inc/lib/vendor/symfony/polyfill-php80/bootstrap.php +++ b/data/web/inc/lib/vendor/symfony/polyfill-php80/bootstrap.php @@ -26,13 +26,13 @@ if (!function_exists('preg_last_error_msg')) { function preg_last_error_msg(): string { return p\Php80::preg_last_error_msg(); } } if (!function_exists('str_contains')) { - function str_contains(string $haystack, string $needle): bool { return p\Php80::str_contains($haystack, $needle); } + function str_contains(?string $haystack, ?string $needle): bool { return p\Php80::str_contains($haystack ?? '', $needle ?? ''); } } if (!function_exists('str_starts_with')) { - function str_starts_with(string $haystack, string $needle): bool { return p\Php80::str_starts_with($haystack, $needle); } + function str_starts_with(?string $haystack, ?string $needle): bool { return p\Php80::str_starts_with($haystack ?? '', $needle ?? ''); } } if (!function_exists('str_ends_with')) { - function str_ends_with(string $haystack, string $needle): bool { return p\Php80::str_ends_with($haystack, $needle); } + function str_ends_with(?string $haystack, ?string $needle): bool { return p\Php80::str_ends_with($haystack ?? '', $needle ?? ''); } } if (!function_exists('get_debug_type')) { function get_debug_type($value): string { return p\Php80::get_debug_type($value); } diff --git a/data/web/inc/lib/vendor/symfony/translation/Command/TranslationPushCommand.php b/data/web/inc/lib/vendor/symfony/translation/Command/TranslationPushCommand.php index da265d6c..b28d3e10 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Command/TranslationPushCommand.php +++ b/data/web/inc/lib/vendor/symfony/translation/Command/TranslationPushCommand.php @@ -94,13 +94,13 @@ EOF */ protected function execute(InputInterface $input, OutputInterface $output): int { + $provider = $this->providers->get($input->getArgument('provider')); + if (!$this->enabledLocales) { - throw new InvalidArgumentException('You must define "framework.translator.enabled_locales" or "framework.translator.providers.%s.locales" config key in order to work with translation providers.'); + throw new InvalidArgumentException(sprintf('You must define "framework.translator.enabled_locales" or "framework.translator.providers.%s.locales" config key in order to work with translation providers.', parse_url($provider, \PHP_URL_SCHEME))); } $io = new SymfonyStyle($input, $output); - - $provider = $this->providers->get($input->getArgument('provider')); $domains = $input->getOption('domains'); $locales = $input->getOption('locales'); $force = $input->getOption('force'); diff --git a/data/web/inc/lib/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php b/data/web/inc/lib/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php index 18c02488..85b0fa48 100644 --- a/data/web/inc/lib/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php +++ b/data/web/inc/lib/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php @@ -64,6 +64,9 @@ class TranslatorPathsPass extends AbstractRecursivePass foreach ($this->paths as $class => $_) { if (($r = $container->getReflectionClass($class)) && !$r->isInterface()) { $paths[] = $r->getFileName(); + foreach ($r->getTraits() as $trait) { + $paths[] = $trait->getFileName(); + } } } if ($paths) { diff --git a/data/web/inc/lib/vendor/symfony/translation/Dumper/XliffFileDumper.php b/data/web/inc/lib/vendor/symfony/translation/Dumper/XliffFileDumper.php index 7d0a4464..f7dbdcdd 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Dumper/XliffFileDumper.php +++ b/data/web/inc/lib/vendor/symfony/translation/Dumper/XliffFileDumper.php @@ -141,8 +141,8 @@ class XliffFileDumper extends FileDumper $xliff->setAttribute('trgLang', str_replace('_', '-', $messages->getLocale())); $xliffFile = $xliff->appendChild($dom->createElement('file')); - if (MessageCatalogue::INTL_DOMAIN_SUFFIX === substr($domain, -($suffixLength = \strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX)))) { - $xliffFile->setAttribute('id', substr($domain, 0, -$suffixLength).'.'.$messages->getLocale()); + if (str_ends_with($domain, MessageCatalogue::INTL_DOMAIN_SUFFIX)) { + $xliffFile->setAttribute('id', substr($domain, 0, -\strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX)).'.'.$messages->getLocale()); } else { $xliffFile->setAttribute('id', $domain.'.'.$messages->getLocale()); } @@ -198,6 +198,6 @@ class XliffFileDumper extends FileDumper private function hasMetadataArrayInfo(string $key, array $metadata = null): bool { - return null !== $metadata && \array_key_exists($key, $metadata) && ($metadata[$key] instanceof \Traversable || \is_array($metadata[$key])); + return is_iterable($metadata[$key] ?? null); } } diff --git a/data/web/inc/lib/vendor/symfony/translation/Exception/IncompleteDsnException.php b/data/web/inc/lib/vendor/symfony/translation/Exception/IncompleteDsnException.php index 192de3c6..cb0ce027 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Exception/IncompleteDsnException.php +++ b/data/web/inc/lib/vendor/symfony/translation/Exception/IncompleteDsnException.php @@ -13,7 +13,7 @@ namespace Symfony\Component\Translation\Exception; class IncompleteDsnException extends InvalidArgumentException { - public function __construct(string $message, string $dsn = null, ?\Throwable $previous = null) + public function __construct(string $message, string $dsn = null, \Throwable $previous = null) { if ($dsn) { $message = sprintf('Invalid "%s" provider DSN: ', $dsn).$message; diff --git a/data/web/inc/lib/vendor/symfony/translation/Exception/MissingRequiredOptionException.php b/data/web/inc/lib/vendor/symfony/translation/Exception/MissingRequiredOptionException.php index e17283dc..2b5f8080 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Exception/MissingRequiredOptionException.php +++ b/data/web/inc/lib/vendor/symfony/translation/Exception/MissingRequiredOptionException.php @@ -16,7 +16,7 @@ namespace Symfony\Component\Translation\Exception; */ class MissingRequiredOptionException extends IncompleteDsnException { - public function __construct(string $option, string $dsn = null, ?\Throwable $previous = null) + public function __construct(string $option, string $dsn = null, \Throwable $previous = null) { $message = sprintf('The option "%s" is required but missing.', $option); diff --git a/data/web/inc/lib/vendor/symfony/translation/Extractor/ChainExtractor.php b/data/web/inc/lib/vendor/symfony/translation/Extractor/ChainExtractor.php index 6b6e1827..95dcf157 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Extractor/ChainExtractor.php +++ b/data/web/inc/lib/vendor/symfony/translation/Extractor/ChainExtractor.php @@ -29,8 +29,6 @@ class ChainExtractor implements ExtractorInterface /** * Adds a loader to the translation extractor. - * - * @param string $format The format of the loader */ public function addExtractor(string $format, ExtractorInterface $extractor) { diff --git a/data/web/inc/lib/vendor/symfony/translation/Extractor/ExtractorInterface.php b/data/web/inc/lib/vendor/symfony/translation/Extractor/ExtractorInterface.php index 718858ee..e1db8a9c 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Extractor/ExtractorInterface.php +++ b/data/web/inc/lib/vendor/symfony/translation/Extractor/ExtractorInterface.php @@ -24,14 +24,12 @@ interface ExtractorInterface /** * Extracts translation messages from files, a file or a directory to the catalogue. * - * @param string|string[] $resource Files, a file or a directory + * @param string|iterable $resource Files, a file or a directory */ public function extract($resource, MessageCatalogue $catalogue); /** * Sets the prefix that should be used for new found messages. - * - * @param string $prefix The prefix */ public function setPrefix(string $prefix); } diff --git a/data/web/inc/lib/vendor/symfony/translation/Extractor/PhpStringTokenParser.php b/data/web/inc/lib/vendor/symfony/translation/Extractor/PhpStringTokenParser.php index e68b0e59..1d82caf2 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Extractor/PhpStringTokenParser.php +++ b/data/web/inc/lib/vendor/symfony/translation/Extractor/PhpStringTokenParser.php @@ -133,7 +133,7 @@ class PhpStringTokenParser $str = preg_replace('~(\r\n|\n|\r)$~', '', $str); // nowdoc string - if (false !== strpos($startToken, '\'')) { + if (str_contains($startToken, '\'')) { return $str; } diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/CsvFileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/CsvFileLoader.php index 25ac2f56..8d5d4db9 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/CsvFileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/CsvFileLoader.php @@ -27,7 +27,7 @@ class CsvFileLoader extends FileLoader /** * {@inheritdoc} */ - protected function loadResource($resource) + protected function loadResource(string $resource) { $messages = []; diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/FileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/FileLoader.php index 2ffba392..4725ea6d 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/FileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/FileLoader.php @@ -55,11 +55,9 @@ abstract class FileLoader extends ArrayLoader } /** - * @param string $resource - * * @return array * * @throws InvalidResourceException if stream content has an invalid format */ - abstract protected function loadResource($resource); + abstract protected function loadResource(string $resource); } diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/IniFileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/IniFileLoader.php index 11d9b272..7398f777 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/IniFileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/IniFileLoader.php @@ -21,7 +21,7 @@ class IniFileLoader extends FileLoader /** * {@inheritdoc} */ - protected function loadResource($resource) + protected function loadResource(string $resource) { return parse_ini_file($resource, true); } diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/JsonFileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/JsonFileLoader.php index 8a8996b0..5aefba07 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/JsonFileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/JsonFileLoader.php @@ -23,7 +23,7 @@ class JsonFileLoader extends FileLoader /** * {@inheritdoc} */ - protected function loadResource($resource) + protected function loadResource(string $resource) { $messages = []; if ($data = file_get_contents($resource)) { diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/MoFileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/MoFileLoader.php index accd023a..0ff6549d 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/MoFileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/MoFileLoader.php @@ -41,7 +41,7 @@ class MoFileLoader extends FileLoader * * {@inheritdoc} */ - protected function loadResource($resource) + protected function loadResource(string $resource) { $stream = fopen($resource, 'r'); @@ -89,7 +89,7 @@ class MoFileLoader extends FileLoader fseek($stream, $offset); $singularId = fread($stream, $length); - if (false !== strpos($singularId, "\000")) { + if (str_contains($singularId, "\000")) { [$singularId, $pluralId] = explode("\000", $singularId); } @@ -104,7 +104,7 @@ class MoFileLoader extends FileLoader fseek($stream, $offset); $translated = fread($stream, $length); - if (false !== strpos($translated, "\000")) { + if (str_contains($translated, "\000")) { $translated = explode("\000", $translated); } diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/PhpFileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/PhpFileLoader.php index c361d529..85f10902 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/PhpFileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/PhpFileLoader.php @@ -23,7 +23,7 @@ class PhpFileLoader extends FileLoader /** * {@inheritdoc} */ - protected function loadResource($resource) + protected function loadResource(string $resource) { if ([] === self::$cache && \function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN) && (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) || filter_var(ini_get('opcache.enable_cli'), \FILTER_VALIDATE_BOOLEAN))) { self::$cache = null; diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/PoFileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/PoFileLoader.php index 5e460fbf..ee143e20 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/PoFileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/PoFileLoader.php @@ -60,7 +60,7 @@ class PoFileLoader extends FileLoader * * {@inheritdoc} */ - protected function loadResource($resource) + protected function loadResource(string $resource) { $stream = fopen($resource, 'r'); diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/XliffFileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/XliffFileLoader.php index 7c0ac8ae..35ad33ef 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/XliffFileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/XliffFileLoader.php @@ -75,7 +75,7 @@ class XliffFileLoader implements LoaderInterface return $catalogue; } - private function extract($dom, MessageCatalogue $catalogue, string $domain) + private function extract(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain) { $xliffVersion = XliffUtils::getVersionNumber($dom); diff --git a/data/web/inc/lib/vendor/symfony/translation/Loader/YamlFileLoader.php b/data/web/inc/lib/vendor/symfony/translation/Loader/YamlFileLoader.php index b03c7b77..8588e186 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Loader/YamlFileLoader.php +++ b/data/web/inc/lib/vendor/symfony/translation/Loader/YamlFileLoader.php @@ -29,7 +29,7 @@ class YamlFileLoader extends FileLoader /** * {@inheritdoc} */ - protected function loadResource($resource) + protected function loadResource(string $resource) { if (null === $this->yamlParser) { if (!class_exists(\Symfony\Component\Yaml\Parser::class)) { diff --git a/data/web/inc/lib/vendor/symfony/translation/MessageCatalogue.php b/data/web/inc/lib/vendor/symfony/translation/MessageCatalogue.php index 1dc3cc54..ff49b5a9 100644 --- a/data/web/inc/lib/vendor/symfony/translation/MessageCatalogue.php +++ b/data/web/inc/lib/vendor/symfony/translation/MessageCatalogue.php @@ -27,8 +27,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf private $parent; /** - * @param string $locale The locale - * @param array $messages An array of messages classified by domain + * @param array $messages An array of messages classified by domain */ public function __construct(string $locale, array $messages = []) { @@ -50,11 +49,10 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf public function getDomains() { $domains = []; - $suffixLength = \strlen(self::INTL_DOMAIN_SUFFIX); foreach ($this->messages as $domain => $messages) { - if (\strlen($domain) > $suffixLength && false !== $i = strpos($domain, self::INTL_DOMAIN_SUFFIX, -$suffixLength)) { - $domain = substr($domain, 0, $i); + if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) { + $domain = substr($domain, 0, -\strlen(self::INTL_DOMAIN_SUFFIX)); } $domains[$domain] = $domain; } @@ -69,7 +67,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf { if (null !== $domain) { // skip messages merge if intl-icu requested explicitly - if (false !== strpos($domain, self::INTL_DOMAIN_SUFFIX)) { + if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) { return $this->messages[$domain] ?? []; } @@ -77,11 +75,10 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf } $allMessages = []; - $suffixLength = \strlen(self::INTL_DOMAIN_SUFFIX); foreach ($this->messages as $domain => $messages) { - if (\strlen($domain) > $suffixLength && false !== $i = strpos($domain, self::INTL_DOMAIN_SUFFIX, -$suffixLength)) { - $domain = substr($domain, 0, $i); + if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) { + $domain = substr($domain, 0, -\strlen(self::INTL_DOMAIN_SUFFIX)); $allMessages[$domain] = $messages + ($allMessages[$domain] ?? []); } else { $allMessages[$domain] = ($allMessages[$domain] ?? []) + $messages; @@ -162,8 +159,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf $this->messages[$domain] = []; } $intlDomain = $domain; - $suffixLength = \strlen(self::INTL_DOMAIN_SUFFIX); - if (\strlen($domain) < $suffixLength || false === strpos($domain, self::INTL_DOMAIN_SUFFIX, -$suffixLength)) { + if (!str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) { $intlDomain .= self::INTL_DOMAIN_SUFFIX; } foreach ($messages as $id => $message) { diff --git a/data/web/inc/lib/vendor/symfony/translation/MetadataAwareInterface.php b/data/web/inc/lib/vendor/symfony/translation/MetadataAwareInterface.php index d157a072..2216eed9 100644 --- a/data/web/inc/lib/vendor/symfony/translation/MetadataAwareInterface.php +++ b/data/web/inc/lib/vendor/symfony/translation/MetadataAwareInterface.php @@ -25,9 +25,6 @@ interface MetadataAwareInterface * domain and then by key. Passing an empty key will return an array with all * metadata for the given domain. * - * @param string $key The key - * @param string $domain The domain name - * * @return mixed The value that was set or an array with the domains/keys or null */ public function getMetadata(string $key = '', string $domain = 'messages'); @@ -35,9 +32,7 @@ interface MetadataAwareInterface /** * Adds metadata to a message domain. * - * @param string $key The key - * @param mixed $value The value - * @param string $domain The domain name + * @param mixed $value */ public function setMetadata(string $key, $value, string $domain = 'messages'); @@ -46,9 +41,6 @@ interface MetadataAwareInterface * * Passing an empty domain will delete all metadata. Passing an empty key will * delete all metadata for the given domain. - * - * @param string $key The key - * @param string $domain The domain name */ public function deleteMetadata(string $key = '', string $domain = 'messages'); } diff --git a/data/web/inc/lib/vendor/symfony/translation/Resources/bin/translation-status.php b/data/web/inc/lib/vendor/symfony/translation/Resources/bin/translation-status.php index e3e64496..4e0723bb 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Resources/bin/translation-status.php +++ b/data/web/inc/lib/vendor/symfony/translation/Resources/bin/translation-status.php @@ -52,7 +52,7 @@ if ($argc > 3) { } foreach (array_slice($argv, 1) as $argumentOrOption) { - if (0 === strpos($argumentOrOption, '-')) { + if (str_starts_with($argumentOrOption, '-')) { $config['verbose_output'] = true; } else { $config['locale_to_analyze'] = $argumentOrOption; diff --git a/data/web/inc/lib/vendor/symfony/translation/Translator.php b/data/web/inc/lib/vendor/symfony/translation/Translator.php index b4954dae..9a639561 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Translator.php +++ b/data/web/inc/lib/vendor/symfony/translation/Translator.php @@ -134,6 +134,7 @@ class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleA } $this->assertValidLocale($locale); + $locale ?: $locale = class_exists(\Locale::class) ? \Locale::getDefault() : 'en'; $this->resources[$locale][] = [$format, $resource, $domain]; @@ -150,7 +151,7 @@ class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleA public function setLocale(string $locale) { $this->assertValidLocale($locale); - $this->locale = $locale ?? (class_exists(\Locale::class) ? \Locale::getDefault() : 'en'); + $this->locale = $locale; } /** @@ -158,14 +159,12 @@ class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleA */ public function getLocale() { - return $this->locale; + return $this->locale ?: (class_exists(\Locale::class) ? \Locale::getDefault() : 'en'); } /** * Sets the fallback locales. * - * @param array $locales The fallback locales - * * @throws InvalidArgumentException If a locale contains invalid characters */ public function setFallbackLocales(array $locales) @@ -230,7 +229,7 @@ class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleA */ public function getCatalogue(string $locale = null) { - if (null === $locale) { + if (!$locale) { $locale = $this->getLocale(); } else { $this->assertValidLocale($locale); @@ -454,7 +453,7 @@ EOF */ protected function assertValidLocale(string $locale) { - if (null !== $locale && 1 !== preg_match('/^[a-z0-9@_\\.\\-]*$/i', $locale)) { + if (!preg_match('/^[a-z0-9@_\\.\\-]*$/i', (string) $locale)) { throw new InvalidArgumentException(sprintf('Invalid "%s" locale.', $locale)); } } diff --git a/data/web/inc/lib/vendor/symfony/translation/Writer/TranslationWriter.php b/data/web/inc/lib/vendor/symfony/translation/Writer/TranslationWriter.php index e0260b7a..0a349b82 100644 --- a/data/web/inc/lib/vendor/symfony/translation/Writer/TranslationWriter.php +++ b/data/web/inc/lib/vendor/symfony/translation/Writer/TranslationWriter.php @@ -27,10 +27,8 @@ class TranslationWriter implements TranslationWriterInterface /** * Adds a dumper to the writer. - * - * @param string $format The format of the dumper */ - public function addDumper($format, DumperInterface $dumper) + public function addDumper(string $format, DumperInterface $dumper) { $this->dumpers[$format] = $dumper; } diff --git a/data/web/inc/lib/vendor/symfony/translation/composer.json b/data/web/inc/lib/vendor/symfony/translation/composer.json index 01c05bd7..de84e165 100644 --- a/data/web/inc/lib/vendor/symfony/translation/composer.json +++ b/data/web/inc/lib/vendor/symfony/translation/composer.json @@ -19,7 +19,7 @@ "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/translation-contracts": "^2.3" }, "require-dev": { @@ -32,7 +32,7 @@ "symfony/service-contracts": "^1.1.2|^2", "symfony/yaml": "^4.4|^5.0", "symfony/finder": "^4.4|^5.0", - "psr/log": "~1.0" + "psr/log": "^1|^2|^3" }, "conflict": { "symfony/config": "<4.4", diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ClassStub.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ClassStub.php index 612a7ca2..48f84835 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ClassStub.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ClassStub.php @@ -55,7 +55,7 @@ class ClassStub extends ConstStub } } - if (false !== strpos($identifier, "@anonymous\0")) { + if (str_contains($identifier, "@anonymous\0")) { $this->value = $identifier = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) { return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0]; }, $identifier); @@ -65,7 +65,7 @@ class ClassStub extends ConstStub $s = ReflectionCaster::castFunctionAbstract($r, [], new Stub(), true, Caster::EXCLUDE_VERBOSE); $s = ReflectionCaster::getSignature($s); - if ('()' === substr($identifier, -2)) { + if (str_ends_with($identifier, '()')) { $this->value = substr_replace($identifier, $s, -2); } else { $this->value .= $s; diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/DOMCaster.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/DOMCaster.php index 5644e489..4dd16e0e 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/DOMCaster.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/DOMCaster.php @@ -82,7 +82,7 @@ class DOMCaster return $a; } - public static function castImplementation($dom, array $a, Stub $stub, bool $isNested) + public static function castImplementation(\DOMImplementation $dom, array $a, Stub $stub, bool $isNested) { $a += [ Caster::PREFIX_VIRTUAL.'Core' => '1.0', diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ExceptionCaster.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ExceptionCaster.php index 437db26d..baa7a180 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ExceptionCaster.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ExceptionCaster.php @@ -149,7 +149,7 @@ class ExceptionCaster $f = self::castFrameStub($frame, [], $frame, true); if (isset($f[$prefix.'src'])) { foreach ($f[$prefix.'src']->value as $label => $frame) { - if (0 === strpos($label, "\0~collapse=0")) { + if (str_starts_with($label, "\0~collapse=0")) { if ($collapse) { $label = substr_replace($label, '1', 11, 1); } else { @@ -281,7 +281,7 @@ class ExceptionCaster } unset($a[$xPrefix.'string'], $a[Caster::PREFIX_DYNAMIC.'xdebug_message'], $a[Caster::PREFIX_DYNAMIC.'__destructorException']); - if (isset($a[Caster::PREFIX_PROTECTED.'message']) && false !== strpos($a[Caster::PREFIX_PROTECTED.'message'], "@anonymous\0")) { + if (isset($a[Caster::PREFIX_PROTECTED.'message']) && str_contains($a[Caster::PREFIX_PROTECTED.'message'], "@anonymous\0")) { $a[Caster::PREFIX_PROTECTED.'message'] = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) { return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0]; }, $a[Caster::PREFIX_PROTECTED.'message']); diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/LinkStub.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/LinkStub.php index 0aa076a2..7e078033 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/LinkStub.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/LinkStub.php @@ -23,7 +23,7 @@ class LinkStub extends ConstStub private static $vendorRoots; private static $composerRoots; - public function __construct($label, int $line = 0, $href = null) + public function __construct(string $label, int $line = 0, string $href = null) { $this->value = $label; @@ -33,12 +33,12 @@ class LinkStub extends ConstStub if (!\is_string($href)) { return; } - if (0 === strpos($href, 'file://')) { + if (str_starts_with($href, 'file://')) { if ($href === $label) { $label = substr($label, 7); } $href = substr($href, 7); - } elseif (false !== strpos($href, '://')) { + } elseif (str_contains($href, '://')) { $this->attr['href'] = $href; return; @@ -69,7 +69,7 @@ class LinkStub extends ConstStub self::$vendorRoots = []; foreach (get_declared_classes() as $class) { - if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) { + if ('C' === $class[0] && str_starts_with($class, 'ComposerAutoloaderInit')) { $r = new \ReflectionClass($class); $v = \dirname($r->getFileName(), 2); if (is_file($v.'/composer/installed.json')) { @@ -85,7 +85,7 @@ class LinkStub extends ConstStub } foreach (self::$vendorRoots as $root) { - if ($inVendor = 0 === strpos($file, $root)) { + if ($inVendor = str_starts_with($file, $root)) { return $root; } } diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/MemcachedCaster.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/MemcachedCaster.php index 111b0607..cfef19ac 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/MemcachedCaster.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/MemcachedCaster.php @@ -71,7 +71,7 @@ class MemcachedCaster $optionConstants = []; foreach ($reflectedMemcached->getConstants() as $constantKey => $value) { - if (0 === strpos($constantKey, 'OPT_')) { + if (str_starts_with($constantKey, 'OPT_')) { $optionConstants[$constantKey] = $value; } } diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php index c3e4eb9f..db4bba8d 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php @@ -31,7 +31,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; */ class RdKafkaCaster { - public static function castKafkaConsumer(KafkaConsumer $c, array $a, Stub $stub, $isNested) + public static function castKafkaConsumer(KafkaConsumer $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -51,7 +51,7 @@ class RdKafkaCaster return $a; } - public static function castTopic(Topic $c, array $a, Stub $stub, $isNested) + public static function castTopic(Topic $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -75,7 +75,7 @@ class RdKafkaCaster return $a; } - public static function castMessage(Message $c, array $a, Stub $stub, $isNested) + public static function castMessage(Message $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -86,7 +86,7 @@ class RdKafkaCaster return $a; } - public static function castConf(Conf $c, array $a, Stub $stub, $isNested) + public static function castConf(Conf $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -97,7 +97,7 @@ class RdKafkaCaster return $a; } - public static function castTopicConf(TopicConf $c, array $a, Stub $stub, $isNested) + public static function castTopicConf(TopicConf $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -108,7 +108,7 @@ class RdKafkaCaster return $a; } - public static function castRdKafka(\RdKafka $c, array $a, Stub $stub, $isNested) + public static function castRdKafka(\RdKafka $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -121,14 +121,14 @@ class RdKafkaCaster return $a; } - public static function castCollectionMetadata(CollectionMetadata $c, array $a, Stub $stub, $isNested) + public static function castCollectionMetadata(CollectionMetadata $c, array $a, Stub $stub, bool $isNested) { $a += iterator_to_array($c); return $a; } - public static function castTopicMetadata(TopicMetadata $c, array $a, Stub $stub, $isNested) + public static function castTopicMetadata(TopicMetadata $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -140,7 +140,7 @@ class RdKafkaCaster return $a; } - public static function castPartitionMetadata(PartitionMetadata $c, array $a, Stub $stub, $isNested) + public static function castPartitionMetadata(PartitionMetadata $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -153,7 +153,7 @@ class RdKafkaCaster return $a; } - public static function castBrokerMetadata(BrokerMetadata $c, array $a, Stub $stub, $isNested) + public static function castBrokerMetadata(BrokerMetadata $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ReflectionCaster.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ReflectionCaster.php index c850e0b1..1781f469 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ReflectionCaster.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ReflectionCaster.php @@ -42,7 +42,7 @@ class ReflectionCaster $a = static::castFunctionAbstract($c, $a, $stub, $isNested, $filter); - if (false === strpos($c->name, '{closure}')) { + if (!str_contains($c->name, '{closure}')) { $stub->class = isset($a[$prefix.'class']) ? $a[$prefix.'class']->value.'::'.$c->name : $c->name; unset($a[$prefix.'class']); } @@ -102,7 +102,7 @@ class ReflectionCaster $prefix.'allowsNull' => $c->allowsNull(), $prefix.'isBuiltin' => $c->isBuiltin(), ]; - } elseif ($c instanceof \ReflectionUnionType) { + } elseif ($c instanceof \ReflectionUnionType || $c instanceof \ReflectionIntersectionType) { $a[$prefix.'allowsNull'] = $c->allowsNull(); self::addMap($a, $c, [ 'types' => 'getTypes', @@ -381,7 +381,7 @@ class ReflectionCaster } elseif (\is_array($v)) { $signature .= $v ? '[…'.\count($v).']' : '[]'; } elseif (\is_string($v)) { - $signature .= 10 > \strlen($v) && false === strpos($v, '\\') ? "'{$v}'" : "'…".\strlen($v)."'"; + $signature .= 10 > \strlen($v) && !str_contains($v, '\\') ? "'{$v}'" : "'…".\strlen($v)."'"; } elseif (\is_bool($v)) { $signature .= $v ? 'true' : 'false'; } else { diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ResourceCaster.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ResourceCaster.php index 6b2ed522..6ae90852 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ResourceCaster.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/ResourceCaster.php @@ -48,7 +48,7 @@ class ResourceCaster public static function castStream($stream, array $a, Stub $stub, bool $isNested) { $a = stream_get_meta_data($stream) + static::castStreamContext($stream, $a, $stub, $isNested); - if (isset($a['uri'])) { + if ($a['uri'] ?? false) { $a['uri'] = new LinkStub($a['uri']); } @@ -60,7 +60,7 @@ class ResourceCaster return @stream_context_get_params($stream) ?: $a; } - public static function castGd($gd, array $a, Stub $stub, $isNested) + public static function castGd($gd, array $a, Stub $stub, bool $isNested) { $a['size'] = imagesx($gd).'x'.imagesy($gd); $a['trueColor'] = imageistruecolor($gd); diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/SplCaster.php b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/SplCaster.php index 07f053e4..07f44511 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Caster/SplCaster.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Caster/SplCaster.php @@ -39,7 +39,7 @@ class SplCaster return self::castSplArray($c, $a, $stub, $isNested); } - public static function castHeap(\Iterator $c, array $a, Stub $stub, $isNested) + public static function castHeap(\Iterator $c, array $a, Stub $stub, bool $isNested) { $a += [ Caster::PREFIX_VIRTUAL.'heap' => iterator_to_array(clone $c), @@ -129,7 +129,7 @@ class SplCaster } } - if (isset($a[$prefix.'realPath'])) { + if ($a[$prefix.'realPath'] ?? false) { $a[$prefix.'realPath'] = new LinkStub($a[$prefix.'realPath']); } diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Cloner/AbstractCloner.php b/data/web/inc/lib/vendor/symfony/var-dumper/Cloner/AbstractCloner.php index 739e0699..ac55da55 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Cloner/AbstractCloner.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Cloner/AbstractCloner.php @@ -309,7 +309,7 @@ abstract class AbstractCloner implements ClonerInterface $obj = $stub->value; $class = $stub->class; - if (\PHP_VERSION_ID < 80000 ? "\0" === ($class[15] ?? null) : false !== strpos($class, "@anonymous\0")) { + if (\PHP_VERSION_ID < 80000 ? "\0" === ($class[15] ?? null) : str_contains($class, "@anonymous\0")) { $stub->class = get_debug_type($obj); } if (isset($this->classInfo[$class])) { diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Cloner/Data.php b/data/web/inc/lib/vendor/symfony/var-dumper/Cloner/Data.php index c695a11a..c8688622 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Cloner/Data.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Cloner/Data.php @@ -155,16 +155,25 @@ class Data implements \ArrayAccess, \Countable, \IteratorAggregate return $this->__isset($key); } + /** + * @return mixed + */ public function offsetGet($key) { return $this->__get($key); } + /** + * @return void + */ public function offsetSet($key, $value) { throw new \BadMethodCallException(self::class.' objects are immutable.'); } + /** + * @return void + */ public function offsetUnset($key) { throw new \BadMethodCallException(self::class.' objects are immutable.'); diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/AbstractDumper.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/AbstractDumper.php index 941f8c68..6064ea99 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/AbstractDumper.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/AbstractDumper.php @@ -63,7 +63,7 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface */ public function setOutput($output) { - $prev = null !== $this->outputStream ? $this->outputStream : $this->lineDumper; + $prev = $this->outputStream ?? $this->lineDumper; if (\is_callable($output)) { $this->outputStream = null; diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/CliDumper.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/CliDumper.php index ab919e15..c1539ee0 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/CliDumper.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/CliDumper.php @@ -150,7 +150,7 @@ class CliDumper extends AbstractDumper case is_nan($value): $value = 'NAN'; break; default: $value = (string) $value; - if (false === strpos($value, $this->decimalPoint)) { + if (!str_contains($value, $this->decimalPoint)) { $value .= $this->decimalPoint.'0'; } break; @@ -324,7 +324,7 @@ class CliDumper extends AbstractDumper * @param bool $hasChild When the dump of the hash has child item * @param int $cut The number of items the hash has been cut by */ - protected function dumpEllipsis(Cursor $cursor, $hasChild, $cut) + protected function dumpEllipsis(Cursor $cursor, bool $hasChild, int $cut) { if ($cut) { $this->line .= ' …'; @@ -428,7 +428,7 @@ class CliDumper extends AbstractDumper * * @return string The value with style decoration */ - protected function style($style, $value, $attr = []) + protected function style(string $style, string $value, array $attr = []) { if (null === $this->colors) { $this->colors = $this->supportsColors(); @@ -441,7 +441,7 @@ class CliDumper extends AbstractDumper if (isset($attr['ellipsis'], $attr['ellipsis-type'])) { $prefix = substr($value, 0, -$attr['ellipsis']); - if ('cli' === \PHP_SAPI && 'path' === $attr['ellipsis-type'] && isset($_SERVER[$pwd = '\\' === \DIRECTORY_SEPARATOR ? 'CD' : 'PWD']) && 0 === strpos($prefix, $_SERVER[$pwd])) { + if ('cli' === \PHP_SAPI && 'path' === $attr['ellipsis-type'] && isset($_SERVER[$pwd = '\\' === \DIRECTORY_SEPARATOR ? 'CD' : 'PWD']) && str_starts_with($prefix, $_SERVER[$pwd])) { $prefix = '.'.substr($prefix, \strlen($_SERVER[$pwd])); } if (!empty($attr['ellipsis-tail'])) { @@ -475,7 +475,7 @@ class CliDumper extends AbstractDumper } else { $value = "\033[{$this->styles[$style]}m".$value; } - if ($cchrCount && $endCchr === substr($value, -\strlen($endCchr))) { + if ($cchrCount && str_ends_with($value, $endCchr)) { $value = substr($value, 0, -\strlen($endCchr)); } else { $value .= "\033[{$this->styles['default']}m"; diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php index c3cd3221..2e2c8181 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php @@ -56,7 +56,7 @@ final class SourceContextProvider implements ContextProviderInterface $line = $trace[$i]['line'] ?? $line; while (++$i < $this->limit) { - if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && 0 !== strpos($trace[$i]['function'], 'call_user_func')) { + if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && !str_starts_with($trace[$i]['function'], 'call_user_func')) { $file = $trace[$i]['file']; $line = $trace[$i]['line']; @@ -98,7 +98,7 @@ final class SourceContextProvider implements ContextProviderInterface if (null !== $this->projectDir) { $context['project_dir'] = $this->projectDir; - if (0 === strpos($file, $this->projectDir)) { + if (str_starts_with($file, $this->projectDir)) { $context['file_relative'] = ltrim(substr($file, \strlen($this->projectDir)), \DIRECTORY_SEPARATOR); } } diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/HtmlDumper.php index 9bbd2d65..6c3abaa2 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/HtmlDumper.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/HtmlDumper.php @@ -116,21 +116,16 @@ class HtmlDumper extends CliDumper /** * Sets an HTML header that will be dumped once in the output stream. - * - * @param string $header An HTML string */ - public function setDumpHeader($header) + public function setDumpHeader(?string $header) { $this->dumpHeader = $header; } /** * Sets an HTML prefix and suffix that will encapse every single dump. - * - * @param string $prefix The prepended HTML string - * @param string $suffix The appended HTML string */ - public function setDumpBoundaries($prefix, $suffix) + public function setDumpBoundaries(string $prefix, string $suffix) { $this->dumpPrefix = $prefix; $this->dumpSuffix = $suffix; @@ -153,7 +148,7 @@ class HtmlDumper extends CliDumper */ protected function getDumpHeader() { - $this->headerIsDumped = null !== $this->outputStream ? $this->outputStream : $this->lineDumper; + $this->headerIsDumped = $this->outputStream ?? $this->lineDumper; if (null !== $this->dumpHeader) { return $this->dumpHeader; @@ -851,7 +846,7 @@ EOHTML /** * {@inheritdoc} */ - protected function style($style, $value, $attr = []) + protected function style(string $style, string $value, array $attr = []) { if ('' === $value) { return ''; @@ -951,7 +946,7 @@ EOHTML if (-1 === $this->lastDepth) { $this->line = sprintf($this->dumpPrefix, $this->dumpId, $this->indentPad).$this->line; } - if ($this->headerIsDumped !== (null !== $this->outputStream ? $this->outputStream : $this->lineDumper)) { + if ($this->headerIsDumped !== ($this->outputStream ?? $this->lineDumper)) { $this->line = $this->getDumpHeader().$this->line; } @@ -985,7 +980,7 @@ EOHTML } } -function esc($str) +function esc(string $str) { return htmlspecialchars($str, \ENT_QUOTES, 'UTF-8'); } diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Server/Connection.php b/data/web/inc/lib/vendor/symfony/var-dumper/Server/Connection.php index d8be2358..55d9214d 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Server/Connection.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Server/Connection.php @@ -31,7 +31,7 @@ class Connection */ public function __construct(string $host, array $contextProviders = []) { - if (false === strpos($host, '://')) { + if (!str_contains($host, '://')) { $host = 'tcp://'.$host; } @@ -78,7 +78,7 @@ class Connection return false; } - private static function nullErrorHandler($t, $m) + private static function nullErrorHandler(int $t, string $m) { // no-op } diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Server/DumpServer.php b/data/web/inc/lib/vendor/symfony/var-dumper/Server/DumpServer.php index 28decf31..7cb5bf0c 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Server/DumpServer.php +++ b/data/web/inc/lib/vendor/symfony/var-dumper/Server/DumpServer.php @@ -30,7 +30,7 @@ class DumpServer public function __construct(string $host, LoggerInterface $logger = null) { - if (false === strpos($host, '://')) { + if (!str_contains($host, '://')) { $host = 'tcp://'.$host; } diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/composer.json b/data/web/inc/lib/vendor/symfony/var-dumper/composer.json index 16da4888..2d4889d0 100644 --- a/data/web/inc/lib/vendor/symfony/var-dumper/composer.json +++ b/data/web/inc/lib/vendor/symfony/var-dumper/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "ext-iconv": "*", diff --git a/data/web/inc/triggers.inc.php b/data/web/inc/triggers.inc.php index fc8e37b5..a2342dfc 100644 --- a/data/web/inc/triggers.inc.php +++ b/data/web/inc/triggers.inc.php @@ -55,7 +55,7 @@ if (isset($_POST["login_user"]) && isset($_POST["pass_user"])) { } } -if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['acl']['login_as'] == "1") { +if (isset($_SESSION['mailcow_cc_role']) && (isset($_SESSION['acl']['login_as']) && $_SESSION['acl']['login_as'] == "1")) { if (isset($_GET["duallogin"])) { $duallogin = html_entity_decode(rawurldecode($_GET["duallogin"])); if (filter_var($duallogin, FILTER_VALIDATE_EMAIL)) { diff --git a/data/web/inc/vars.inc.php b/data/web/inc/vars.inc.php index 426a9dad..d0022694 100644 --- a/data/web/inc/vars.inc.php +++ b/data/web/inc/vars.inc.php @@ -45,21 +45,21 @@ $autodiscover_config = array( // The autoconfig service will additionally announce the STARTTLS-enabled ports, specified in the "tlsport" variable. 'imap' => array( 'server' => $mailcow_hostname, - 'port' => end(explode(':', getenv('IMAPS_PORT'))), - 'tlsport' => end(explode(':', getenv('IMAP_PORT'))), + 'port' => substr(getenv('IMAPS_PORT'), strrpos(getenv('IMAPS_PORT'), ':') + 1), + 'tlsport' => substr(getenv('POP_PORT'), strrpos(getenv('IMAP_PORT'), ':') + 1) ), 'pop3' => array( 'server' => $mailcow_hostname, - 'port' => end(explode(':', getenv('POPS_PORT'))), - 'tlsport' => end(explode(':', getenv('POP_PORT'))), + 'port' => substr(getenv('POPS_PORT'), strrpos(getenv('POPS_PORT'), ':') + 1), + 'tlsport' => substr(getenv('POP_PORT'), strrpos(getenv('POP_PORT'), ':') + 1) ), 'smtp' => array( 'server' => $mailcow_hostname, - 'port' => end(explode(':', getenv('SMTPS_PORT'))), - 'tlsport' => end(explode(':', getenv('SUBMISSION_PORT'))), + 'port' => substr(getenv('SMTPS_PORT'), strrpos(getenv('SMTPS_PORT'), ':') + 1), + 'tlsport' => substr(getenv('SUBMISSION_PORT'), strrpos(getenv('SUBMISSION_PORT'), ':') + 1) ), 'activesync' => array( - 'url' => 'https://'.$mailcow_hostname.($https_port == 443 ? '' : ':'.$https_port).'/Microsoft-Server-ActiveSync', + 'url' => 'https://' . $mailcow_hostname . ($https_port == 443 ? '' : ':' . $https_port) . '/Microsoft-Server-ActiveSync', ), 'caldav' => array( 'server' => $mailcow_hostname, diff --git a/data/web/index.php b/data/web/index.php index 204b2a4e..47f34279 100644 --- a/data/web/index.php +++ b/data/web/index.php @@ -99,7 +99,7 @@ $_SESSION['index_query_string'] = $_SERVER['QUERY_STRING']; foreach ($MAILCOW_APPS as $app) { if (getenv('SKIP_SOGO') == "y" && preg_match('/^\/SOGo/i', $app['link'])) { continue; } ?> - +
    - +