From 2a4985cd46e2aece0111166cb74f04c152ee6c64 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 19 Nov 2022 19:07:43 -0500 Subject: [PATCH 1/4] Fix database connection with sockets - Reformat Database\Database.php file - Reformat and fix spelling in static/defaults.config.php file --- src/Database/Database.php | 124 +++++++++++++++++++------------------ static/defaults.config.php | 47 +++++++------- 2 files changed, 88 insertions(+), 83 deletions(-) diff --git a/src/Database/Database.php b/src/Database/Database.php index 79c39e9af7..a34b17adbe 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -43,12 +43,12 @@ use Psr\Log\NullLogger; */ class Database { - const PDO = 'pdo'; + const PDO = 'pdo'; const MYSQLI = 'mysqli'; const INSERT_DEFAULT = 0; - const INSERT_UPDATE = 1; - const INSERT_IGNORE = 2; + const INSERT_UPDATE = 1; + const INSERT_IGNORE = 2; protected $connected = false; @@ -64,18 +64,18 @@ class Database * @var LoggerInterface */ protected $logger; - protected $server_info = ''; + protected $server_info = ''; /** @var PDO|mysqli */ protected $connection; protected $driver = ''; protected $pdo_emulate_prepares = false; - private $error = ''; - private $errorno = 0; - private $affected_rows = 0; + private $error = ''; + private $errorno = 0; + private $affected_rows = 0; protected $in_transaction = false; - protected $in_retrial = false; - protected $testmode = false; - private $relation = []; + protected $in_retrial = false; + protected $testmode = false; + private $relation = []; /** @var DbaDefinition */ protected $dbaDefinition; /** @var ViewDefinition */ @@ -112,23 +112,22 @@ class Database $port = 0; $serveraddr = trim($this->configCache->get('database', 'hostname')); $serverdata = explode(':', $serveraddr); - $server = $serverdata[0]; + $host = trim($serverdata[0]); if (count($serverdata) > 1) { $port = trim($serverdata[1]); } - if (!empty(trim($this->configCache->get('database', 'port')))) { - $port = trim($this->configCache->get('database', 'port')); + if (trim($this->configCache->get('database', 'port') ?? 0)) { + $port = trim($this->configCache->get('database', 'port') ?? 0); } - $server = trim($server); - $user = trim($this->configCache->get('database', 'username')); - $pass = trim($this->configCache->get('database', 'password')); - $db = trim($this->configCache->get('database', 'database')); - $charset = trim($this->configCache->get('database', 'charset')); - $socket = trim($this->configCache->get('database', 'socket')); + $user = trim($this->configCache->get('database', 'username')); + $pass = trim($this->configCache->get('database', 'password')); + $database = trim($this->configCache->get('database', 'database')); + $charset = trim($this->configCache->get('database', 'charset')); + $socket = trim($this->configCache->get('database', 'socket')); - if (!(strlen($server) && strlen($user))) { + if (!$host && !$socket || !$user) { return false; } @@ -138,19 +137,20 @@ class Database if (!$this->configCache->get('database', 'disable_pdo') && class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) { $this->driver = self::PDO; - $connect = "mysql:host=" . $server . ";dbname=" . $db; - - if ($port > 0) { - $connect .= ";port=" . $port; + if ($socket) { + $connect = 'mysql:unix_socket=' . $socket; + } else { + $connect = 'mysql:host=' . $host; + if ($port > 0) { + $connect .= ';port=' . $port; + } } if ($charset) { - $connect .= ";charset=" . $charset; + $connect .= ';charset=' . $charset; } - if ($socket) { - $connect .= ";$unix_socket=" . $socket; - } + $connect .= ';dbname=' . $database; try { $this->connection = @new PDO($connect, $user, $pass, [PDO::ATTR_PERSISTENT => $persistent]); @@ -165,10 +165,12 @@ class Database if (!$this->connected && class_exists('\mysqli')) { $this->driver = self::MYSQLI; - if ($port > 0) { - $this->connection = @new mysqli($server, $user, $pass, $db, $port); + if ($socket) { + $this->connection = @new mysqli(null, $user, $pass, $database, null, $socket); + } elseif ($port > 0) { + $this->connection = @new mysqli($host, $user, $pass, $database, $port); } else { - $this->connection = @new mysqli($server, $user, $pass, $db); + $this->connection = @new mysqli($host, $user, $pass, $database); } if (!mysqli_connect_errno()) { @@ -177,11 +179,6 @@ class Database if ($charset) { $this->connection->set_charset($charset); } - - if ($socket) { - $this->connection->set_socket($socket); - } - } } @@ -198,6 +195,7 @@ class Database { $this->testmode = $test; } + /** * Sets the logger for DBA * @@ -222,6 +220,7 @@ class Database { $this->profiler = $profiler; } + /** * Disconnects the current database connection */ @@ -338,12 +337,12 @@ class Database } $watchlist = explode(',', $this->configCache->get('system', 'db_log_index_watch')); - $denylist = explode(',', $this->configCache->get('system', 'db_log_index_denylist')); + $denylist = explode(',', $this->configCache->get('system', 'db_log_index_denylist')); while ($row = $this->fetch($r)) { if ((intval($this->configCache->get('system', 'db_loglimit_index')) > 0)) { $log = (in_array($row['key'], $watchlist) && - ($row['rows'] >= intval($this->configCache->get('system', 'db_loglimit_index')))); + ($row['rows'] >= intval($this->configCache->get('system', 'db_loglimit_index')))); } else { $log = false; } @@ -358,11 +357,15 @@ class Database if ($log) { $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - @file_put_contents($this->configCache->get('system', 'db_log_index'), DateTimeFormat::utcNow() . "\t" . - $row['key'] . "\t" . $row['rows'] . "\t" . $row['Extra'] . "\t" . - basename($backtrace[1]["file"]) . "\t" . - $backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" . - substr($query, 0, 4000) . "\n", FILE_APPEND); + @file_put_contents( + $this->configCache->get('system', 'db_log_index'), + DateTimeFormat::utcNow() . "\t" . + $row['key'] . "\t" . $row['rows'] . "\t" . $row['Extra'] . "\t" . + basename($backtrace[1]["file"]) . "\t" . + $backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" . + substr($query, 0, 4000) . "\n", + FILE_APPEND + ); } } } @@ -449,7 +452,7 @@ class Database { $server_info = $this->serverInfo(); if (version_compare($server_info, '5.7.5', '<') || - (stripos($server_info, 'MariaDB') !== false)) { + (stripos($server_info, 'MariaDB') !== false)) { $sql = str_ireplace('ANY_VALUE(', 'MIN(', $sql); } return $sql; @@ -647,7 +650,7 @@ class Database } elseif (is_string($args[$param])) { $param_types .= 's'; } elseif (is_object($args[$param]) && method_exists($args[$param], '__toString')) { - $param_types .= 's'; + $param_types .= 's'; $args[$param] = (string)$args[$param]; } else { $param_types .= 'b'; @@ -743,10 +746,14 @@ class Database $duration = round($duration, 3); $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - @file_put_contents($this->configCache->get('system', 'db_log'), DateTimeFormat::utcNow() . "\t" . $duration . "\t" . - basename($backtrace[1]["file"]) . "\t" . - $backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" . - substr($this->replaceParameters($sql, $args), 0, 4000) . "\n", FILE_APPEND); + @file_put_contents( + $this->configCache->get('system', 'db_log'), + DateTimeFormat::utcNow() . "\t" . $duration . "\t" . + basename($backtrace[1]["file"]) . "\t" . + $backtrace[1]["line"] . "\t" . $backtrace[2]["function"] . "\t" . + substr($this->replaceParameters($sql, $args), 0, 4000) . "\n", + FILE_APPEND + ); } } return $retval; @@ -1365,7 +1372,7 @@ class Database . $condition_string; // Combines the updated fields parameter values with the condition parameter values - $params = array_merge(array_values($fields), $condition); + $params = array_merge(array_values($fields), $condition); return $this->e($sql, $params); } @@ -1415,8 +1422,8 @@ class Database /** * Escape fields, adding special treatment for "group by" handling * - * @param array $fields - * @param array $options + * @param array $fields + * @param array $options * @return array Escaped fields */ private function escapeFields(array $fields, array $options): array @@ -1438,8 +1445,7 @@ class Database } } - array_walk($fields, function(&$value, $key) use ($options) - { + array_walk($fields, function (&$value, $key) use ($options) { $field = $value; $value = DBA::quoteIdentifier($field); @@ -1487,7 +1493,7 @@ class Database } if (count($fields) > 0) { - $fields = $this->escapeFields($fields, $params); + $fields = $this->escapeFields($fields, $params); $select_string = implode(', ', $fields); } else { $select_string = '*'; @@ -1827,16 +1833,16 @@ class Database /** * Replaces a string in the provided fields of the provided table * - * @param string $table Table name - * @param array $fields List of field names in the provided table - * @param string $search String to search for + * @param string $table Table name + * @param array $fields List of field names in the provided table + * @param string $search String to search for * @param string $replace String to replace with * @return void * @throws \Exception */ public function replaceInTableFields(string $table, array $fields, string $search, string $replace) { - $search = $this->escape($search); + $search = $this->escape($search); $replace = $this->escape($replace); $upd = []; diff --git a/static/defaults.config.php b/static/defaults.config.php index a6c98abd14..a8fe5f8686 100644 --- a/static/defaults.config.php +++ b/static/defaults.config.php @@ -38,12 +38,12 @@ return [ 'port' => null, // socket (String) - // Socket of the database server. - // Can be used instead of adding a socket location to the hostname - 'socket' => '', + // Socket of the database server. + // Can be used instead of adding a socket location to the hostname + 'socket' => '', // user (String) - // Database user name. Please don't use "root". + // Database username. Please don't use "root". 'username' => '', // pass (String) @@ -64,7 +64,7 @@ return [ 'pdo_emulate_prepares' => true, // disable_pdo (Boolean) - // PDO is used by default (if available). Otherwise MySQLi will be used. + // PDO is used by default (if available). Otherwise, MySQLi will be used. 'disable_pdo' => false, // persistent (Boolean) @@ -145,7 +145,7 @@ return [ 'block_local_dir' => false, // blocked_tags (String) - // Comma separated list of hash tags that shouldn't be displayed in the trending tags + // Comma separated list of hashtags that shouldn't be displayed in the trending tags 'blocked_tags' => '', // community_no_sharer (Boolean) @@ -153,7 +153,7 @@ return [ 'community_no_sharer' => false, // contact_update_limit (Integer) - // How much contacts should be checked at a time? + // How many contacts should be checked at a time? 'contact_update_limit' => 100, // cron_interval (Integer) @@ -259,7 +259,7 @@ return [ 'disable_implicit_mentions' => false, // disable_url_validation (Boolean) - // Disables the DNS lookup of an URL. + // Disables the DNS lookup of a URL. 'disable_url_validation' => false, // disable_password_exposed (Boolean) @@ -283,7 +283,7 @@ return [ 'dlogip' => '', // expire-notify-priority (integer) - // Priority for the expirary notification + // Priority for the expirary notification 'expire-notify-priority' => Friendica\Core\Worker::PRIORITY_LOW, // fetch_by_worker (Boolean) @@ -300,11 +300,11 @@ return [ // groupedit_image_limit (Integer) // Number of contacts at which the group editor should switch from display the profile pictures of the contacts to only display the names. - // This can alternatively be set on a per account basis in the pconfig table. + // This can alternatively be set on a per-account basis in the pconfig table. 'groupedit_image_limit' => 400, // gserver_update_limit (Integer) - // How much servers should be checked at a time? + // How many servers should be checked at a time? 'gserver_update_limit' => 100, // hsts (Boolean) @@ -330,7 +330,7 @@ return [ 'ipv4_resolve' => false, // invitation_only (Boolean) - // If set true registration is only possible after a current member of the node has send an invitation. + // If set true registration is only possible after a current member of the node has sent an invitation. 'invitation_only' => false, // itemspage_network (Integer) @@ -343,7 +343,7 @@ return [ 'itemspage_network_mobile' => 20, // jpeg_quality (Integer) - // + // // Lower numbers save space at cost of image detail // where n is between 1 and 100, and with very poor results below about 50 'jpeg_quality' => 100, @@ -415,13 +415,13 @@ return [ // max_image_length (Integer) // An alternate way of limiting picture upload sizes. - // Specify the maximum pixel length that pictures are allowed to be (for non-square pictures, it will apply to the longest side). + // Specify the maximum pixel length that pictures are allowed to be (for non-square pictures, it will apply to the longest side). // Pictures longer than this length will be resized to be this length (on the longest side, the other side will be scaled appropriately). // If you don't want to set a maximum length, set to -1. 'max_image_length' => -1, // max_likers (Integer) - // Maximum number of "people who like (or don't like) this" that we will list by name + // Maximum number of "people who like (or don't like) this" that we will list by name 'max_likers' => 75, // max_processes_backend (Integer) @@ -471,7 +471,7 @@ return [ 'no_oembed' => false, // no_redirect_list (Array) - // List of domains where HTTP redirects should be ignored. + // List of domains where HTTP redirects should be ignored. 'no_redirect_list' => [], // no_smilies (Boolean) @@ -483,7 +483,7 @@ return [ 'paranoia' => false, // permit_crawling (Boolean) - // Restricts the search for not logged in users to one search per minute. + // Restricts the search for not logged-in users to one search per minute. 'permit_crawling' => false, // pidfile (Path) @@ -491,7 +491,7 @@ return [ 'pidfile' => '', // png_quality (Integer) - // Sets the ImageMagick compression level for PNG images. Values ranges from 0 (uncompressed) to 9 (most compressed). + // Sets the ImageMagick compression level for PNG images. Values range from 0 (uncompressed) to 9 (most compressed). 'png_quality' => 8, // profiler (Boolean) @@ -568,11 +568,11 @@ return [ 'set_creation_date' => false, // show_global_community_hint (Boolean) - // When the global community page is enabled, use this option to display a hint above the stream, that this is a collection of all public top-level postings that arrive on your node. + // When the global community page is enabled, use this option to display a hint above the stream, that this is a collection of all public top-level postings that arrive at your node. 'show_global_community_hint' => false, // show_received (Boolean) - // Show the receive data along with the post creation date + // Show the received date along with the post creation date 'show_received' => true, // show_received_seconds (Integer) @@ -609,13 +609,13 @@ return [ // username_min_length (Integer) // The minimum character length a username can be. - // This length is check once the username has been trimmed and multiple spaces have been collapsed into one. + // This length is checked once the username has been trimmed and multiple spaces have been collapsed into one. // Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars. 'username_min_length' => 3, // username_max_length (Integer) // The maximum character length a username can be. - // This length is check once the username has been trimmed and multiple spaces have been collapsed into one. + // This length is checked once the username has been trimmed and multiple spaces have been collapsed into one. // Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars. 'username_max_length' => 48, @@ -738,8 +738,7 @@ return [ 'config_dir' => 'view/smarty3', // use_sub_dirs (Boolean) - // By default the template cache is stored in several sub directories. - // + // By default the template cache is stored in several subdirectories. 'use_sub_dirs' => true, ], ]; From a147038c2eb4685c101a207289d0ec71f6a0efec Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 19 Nov 2022 19:08:44 -0500 Subject: [PATCH 2/4] Ensure IEMail::getMessage returns a string --- src/Object/EMail/IEmail.php | 2 +- src/Object/Email.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Object/EMail/IEmail.php b/src/Object/EMail/IEmail.php index f1e66a224f..9fd1fe3da6 100644 --- a/src/Object/EMail/IEmail.php +++ b/src/Object/EMail/IEmail.php @@ -80,7 +80,7 @@ interface IEmail extends JsonSerializable * * @return string */ - function getMessage(bool $plain = false); + function getMessage(bool $plain = false): string; /** * Gets the additional mail header array diff --git a/src/Object/Email.php b/src/Object/Email.php index 57eb0c17e9..4d5a11715c 100644 --- a/src/Object/Email.php +++ b/src/Object/Email.php @@ -110,12 +110,12 @@ class Email implements IEmail /** * {@inheritDoc} */ - public function getMessage(bool $plain = false) + public function getMessage(bool $plain = false): string { if ($plain) { return $this->msgText; } else { - return $this->msgHtml; + return $this->msgHtml ?? ''; } } From 6f93ee7e49fc555e10a008e04567cd72105533dc Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 19 Nov 2022 19:10:02 -0500 Subject: [PATCH 3/4] Fix various PHP 8 deprecations --- src/Content/Nav.php | 8 ++------ src/Model/APContact.php | 4 ++-- src/Model/Item.php | 4 ++-- src/Model/Post/Media.php | 4 ++-- src/Module/Home.php | 2 +- src/Network/HTTPClient/Client/HttpClient.php | 2 +- src/Protocol/Diaspora.php | 2 +- src/Render/FriendicaSmartyEngine.php | 2 +- src/Worker/Notifier.php | 2 +- view/theme/frio/php/PHPColors/Color.php | 12 ++++++------ 10 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/Content/Nav.php b/src/Content/Nav.php index 0000b3d296..cb2edb4eb6 100644 --- a/src/Content/Nav.php +++ b/src/Content/Nav.php @@ -244,12 +244,8 @@ class Nav } $gdirpath = 'directory'; - - if (strlen(DI::config()->get('system', 'singleuser'))) { - $gdir = DI::config()->get('system', 'directory'); - if (strlen($gdir)) { - $gdirpath = Profile::zrl($gdir, true); - } + if (DI::config()->get('system', 'singleuser') && DI::config()->get('system', 'directory')) { + $gdirpath = Profile::zrl(DI::config()->get('system', 'directory'), true); } if ((DI::userSession()->getLocalUserId() || DI::config()->get('system', 'community_page_style') != Community::DISABLED_VISITOR) && diff --git a/src/Model/APContact.php b/src/Model/APContact.php index 742efcf190..3b568f39f1 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -383,7 +383,7 @@ class APContact // kroeg:blocks, updated // When the photo is too large, try to shorten it by removing parts - if (strlen($apcontact['photo']) > 255) { + if (strlen($apcontact['photo'] ?? '') > 255) { $parts = parse_url($apcontact['photo']); unset($parts['fragment']); $apcontact['photo'] = (string)Uri::fromParts($parts); @@ -574,7 +574,7 @@ class APContact * * @param array $apcontact * - * @return bool + * @return bool */ public static function isRelay(array $apcontact): bool { diff --git a/src/Model/Item.php b/src/Model/Item.php index 900bf3a2c4..7c8804a290 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -210,7 +210,7 @@ class Item $fields['raw-body'] = BBCode::removeSharedData($fields['raw-body']); } } - + Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']); $content_fields = ['raw-body' => trim($fields['raw-body'] ?? $fields['body'])]; @@ -337,7 +337,7 @@ class Item * generate a resource-id and therefore aren't intimately linked to the item. */ /// @TODO: this should first check if photo is used elsewhere - if (strlen($item['resource-id'])) { + if ($item['resource-id']) { Photo::delete(['resource-id' => $item['resource-id'], 'uid' => $item['uid']]); } diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index 6cee11e6c8..04c0db0f80 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -279,7 +279,7 @@ class Media if (!empty($contact['gsid'])) { $gserver = DBA::selectFirst('gserver', ['url', 'site_name'], ['id' => $contact['gsid']]); } - + $media['type'] = self::ACTIVITY; $media['media-uri-id'] = $item['uri-id']; $media['height'] = null; @@ -687,7 +687,7 @@ class Media $previews[] = $medium['preview']; } - $type = explode('/', current(explode(';', $medium['mimetype']))); + $type = explode('/', explode(';', $medium['mimetype'])[0]); if (count($type) < 2) { Logger::info('Unknown MimeType', ['type' => $type, 'media' => $medium]); $filetype = 'unkn'; diff --git a/src/Module/Home.php b/src/Module/Home.php index ca4c4b8959..06bfa5eba5 100644 --- a/src/Module/Home.php +++ b/src/Module/Home.php @@ -46,7 +46,7 @@ class Home extends BaseModule DI::baseUrl()->redirect('network'); } - if (strlen($config->get('system', 'singleuser'))) { + if ($config->get('system', 'singleuser')) { DI::baseUrl()->redirect('/profile/' . $config->get('system', 'singleuser')); } diff --git a/src/Network/HTTPClient/Client/HttpClient.php b/src/Network/HTTPClient/Client/HttpClient.php index cfc8fbfab1..32a1a22fc2 100644 --- a/src/Network/HTTPClient/Client/HttpClient.php +++ b/src/Network/HTTPClient/Client/HttpClient.php @@ -254,7 +254,7 @@ class HttpClient implements ICanSendHttpRequests $urlResult = $this->resolver->resolveURL($url); if ($urlResult->didErrorOccur()) { - throw new TransferException($urlResult->getErrorMessageString(), $urlResult->getHTTPStatusCode()); + throw new TransferException($urlResult->getErrorMessageString(), $urlResult->getHTTPStatusCode() ?? 0); } return $urlResult->getURL(); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 8a5969dde1..09f4380b0b 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -3638,7 +3638,7 @@ class Diaspora Logger::info('Got relayable data ' . $type . ' for item ' . $item['guid'] . ' (' . $item['id'] . ')'); - $msg = json_decode($item['signed_text'], true); + $msg = json_decode($item['signed_text'] ?? '', true); $message = []; if (is_array($msg)) { diff --git a/src/Render/FriendicaSmartyEngine.php b/src/Render/FriendicaSmartyEngine.php index 5ea01166fd..201d99f822 100644 --- a/src/Render/FriendicaSmartyEngine.php +++ b/src/Render/FriendicaSmartyEngine.php @@ -81,7 +81,7 @@ final class FriendicaSmartyEngine extends TemplateEngine // "middleware": inject variables into templates $arr = [ - 'template' => basename($this->smarty->filename), + 'template' => basename($this->smarty->filename ?? ''), 'vars' => $vars ]; Hook::callAll('template_vars', $arr); diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 10fe6e3abc..db593b6a47 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -336,7 +336,7 @@ class Notifier foreach ($items as $item) { $recipients[] = $item['contact-id']; // pull out additional tagged people to notify (if public message) - if ($public_message && strlen($item['inform'])) { + if ($public_message && $item['inform']) { $people = explode(',',$item['inform']); foreach ($people as $person) { if (substr($person,0,4) === 'cid:') { diff --git a/view/theme/frio/php/PHPColors/Color.php b/view/theme/frio/php/PHPColors/Color.php index e4de79c40a..30de579966 100644 --- a/view/theme/frio/php/PHPColors/Color.php +++ b/view/theme/frio/php/PHPColors/Color.php @@ -132,16 +132,16 @@ class Color { $var_1 = 2 * $L - $var_2; - $r = round(255 * self::_huetorgb( $var_1, $var_2, $H + (1/3) )); - $g = round(255 * self::_huetorgb( $var_1, $var_2, $H )); - $b = round(255 * self::_huetorgb( $var_1, $var_2, $H - (1/3) )); + $r = 255 * self::_huetorgb( $var_1, $var_2, $H + (1/3) ); + $g = 255 * self::_huetorgb( $var_1, $var_2, $H ); + $b = 255 * self::_huetorgb( $var_1, $var_2, $H - (1/3) ); } // Convert to hex - $r = dechex($r); - $g = dechex($g); - $b = dechex($b); + $r = dechex(round($r)); + $g = dechex(round($g)); + $b = dechex(round($b)); // Make sure we get 2 digits for decimals $r = (strlen("".$r)===1) ? "0".$r:$r; From 99df11e99b8d4df2594ae4cf7ad902a407e4a479 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 19 Nov 2022 19:30:48 -0500 Subject: [PATCH 4/4] Fix PHP 8 inheritance deprecation warnings in App\PAge and ParsedLogIterator --- src/App/Page.php | 62 ++++++----------------------- src/Model/Log/ParsedLogIterator.php | 8 ++-- 2 files changed, 17 insertions(+), 53 deletions(-) diff --git a/src/App/Page.php b/src/App/Page.php index 0f14d9f6e6..37141426c3 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -115,76 +115,40 @@ class Page implements ArrayAccess } } + // ArrayAccess interface + /** - * Whether a offset exists - * - * @link https://php.net/manual/en/arrayaccess.offsetexists.php - * - * @param mixed $offset

- * An offset to check for. - *

- * - * @return boolean true on success or false on failure. - *

- *

- * The return value will be casted to boolean if non-boolean was returned. - * @since 5.0.0 + * @inheritDoc */ + #[\ReturnTypeWillChange] public function offsetExists($offset): bool { return isset($this->page[$offset]); } /** - * Offset to retrieve - * - * @link https://php.net/manual/en/arrayaccess.offsetget.php - * - * @param mixed $offset

- * The offset to retrieve. - *

- * - * @return mixed Can return all value types. - * @since 5.0.0 + * @inheritDoc */ + #[\ReturnTypeWillChange] public function offsetGet($offset) { return $this->page[$offset] ?? null; } /** - * Offset to set - * - * @link https://php.net/manual/en/arrayaccess.offsetset.php - * - * @param mixed $offset

- * The offset to assign the value to. - *

- * @param mixed $value

- * The value to set. - *

- * - * @return void - * @since 5.0.0 + * @inheritDoc */ - public function offsetSet($offset, $value) + #[\ReturnTypeWillChange] + public function offsetSet($offset, $value): void { $this->page[$offset] = $value; } /** - * Offset to unset - * - * @link https://php.net/manual/en/arrayaccess.offsetunset.php - * - * @param mixed $offset

- * The offset to unset. - *

- * - * @return void - * @since 5.0.0 + * @inheritDoc */ - public function offsetUnset($offset) + #[\ReturnTypeWillChange] + public function offsetUnset($offset): void { if (isset($this->page[$offset])) { unset($this->page[$offset]); @@ -310,7 +274,7 @@ class Page implements ArrayAccess } return $pageURL; } - + /** * Initializes Page->page['footer']. * diff --git a/src/Model/Log/ParsedLogIterator.php b/src/Model/Log/ParsedLogIterator.php index 4309e4cd00..e3415da8ca 100644 --- a/src/Model/Log/ParsedLogIterator.php +++ b/src/Model/Log/ParsedLogIterator.php @@ -160,7 +160,7 @@ class ParsedLogIterator implements \Iterator * @see Iterator::next() * @return void */ - public function next() + public function next(): void { $parsed = $this->read(); @@ -177,7 +177,7 @@ class ParsedLogIterator implements \Iterator * @see Iterator::rewind() * @return void */ - public function rewind() + public function rewind(): void { $this->value = null; $this->reader->rewind(); @@ -200,9 +200,9 @@ class ParsedLogIterator implements \Iterator * Return current iterator value * * @see Iterator::current() - * @return ?ParsedLogLing + * @return ?ParsedLogLine */ - public function current() + public function current(): ?ParsedLogLine { return $this->value; }