diff --git a/.editorconfig b/.editorconfig index bdd599d30..4eb414385 100644 --- a/.editorconfig +++ b/.editorconfig @@ -280,7 +280,7 @@ ij_javascript_while_brace_force = always ij_javascript_while_on_new_line = false ij_javascript_wrap_comments = false -[{*.ctp,*.hphp,*.inc,*.module,*.php,*.php4,*.php5,*.phtml}] +[{*.ctp, *.hphp, *.inc, *.module, *.php, *.php4, *.php5, *.phtml}] indent_style = tab ij_continuation_indent_size = 4 ij_smart_tabs = true @@ -289,8 +289,8 @@ ij_php_align_assignments = false ij_php_align_class_constants = false ij_php_align_group_field_declarations = false ij_php_align_inline_comments = false -ij_php_align_key_value_pairs = false -ij_php_align_multiline_array_initializer_expression = false +ij_php_align_key_value_pairs = true +ij_php_align_multiline_array_initializer_expression = true ij_php_align_multiline_binary_operation = false ij_php_align_multiline_chained_methods = false ij_php_align_multiline_extends_list = false diff --git a/.make/license/updateLicenses.php b/.make/license/updateLicenses.php index 706378247..7531aa003 100644 --- a/.make/license/updateLicenses.php +++ b/.make/license/updateLicenses.php @@ -10,10 +10,6 @@ * `curl -L -o /usr/bin/jq.exe https://github.com/stedolan/jq/releases/latest/download/jq-win64.exe` * this is a Windows port : https://stedolan.github.io/jq/ * - * Known bug on Windows : - * Licenses added from Composer contains a path in the product node (N°3870) - * `C:\Dev\wamp64\www\itop-dev\.make\license/../..//lib/symfony/console` - * * Licenses sources : * * `composer licenses --format json` (see https://getcomposer.org/doc/03-cli.md#licenses) * * keep every existing nodes with `/licenses/license[11]/product/@scope` not in ['lib', 'datamodels'] @@ -70,39 +66,83 @@ function get_license_nodes($file_path) $xp = new DOMXPath($dom); $licenseList = $xp->query('/licenses/license'); - $licenses = iterator_to_array($licenseList); + $licenses = iterator_to_array($licenseList); usort($licenses, 'sort_by_product'); + return $licenses; } +/** @noinspection SuspiciousAssignmentsInspection */ +function fix_product_name(DOMNode &$oProductNode) +{ + $sProductNameOrig = $oProductNode->nodeValue; + + // sample : `C:\Dev\wamp64\www\itop-27\.make\license/../..//lib/symfony/polyfill-ctype` + $sProductNameFixed = remove_dir_from_string($sProductNameOrig, 'lib/'); + + // sample : `C:\Dev\wamp64\www\itop-27\.make\license/../..//datamodels/2.x/authent-cas/vendor/apereo/phpcas` + $sProductNameFixed = remove_dir_from_string($sProductNameFixed, 'vendor/'); + + $oProductNode->nodeValue = $sProductNameFixed; +} + +function remove_dir_from_string($sString, $sNeedle) +{ + if (strpos($sString, $sNeedle) === false) { + return $sString; + } + + $sStringTmp = strstr($sString, $sNeedle); + $sStringFixed = str_replace($sNeedle, '', $sStringTmp); + + // DEBUG trace O:) +// echo "$sNeedle = $sString => $sStringFixed\n"; + + return $sStringFixed; +} + $old_licenses = get_license_nodes($xmlFilePath); //generate file with updated licenses $generated_license_file_path = __DIR__."/provfile.xml"; -exec("bash " . __DIR__ . "/gen-community-license.sh $iTopFolder > ". $generated_license_file_path); +echo "- Generating licences..."; +exec("bash ".__DIR__."/gen-community-license.sh $iTopFolder > ".$generated_license_file_path); +echo "OK!\n"; + +echo "- Get licenses nodes..."; $new_licenses = get_license_nodes($generated_license_file_path); -exec("rm -f ". $generated_license_file_path); +unlink($generated_license_file_path); foreach ($old_licenses as $b) { $aProductNode = get_product_node($b); - if (get_scope($aProductNode) !== "lib" && get_scope($aProductNode) !== "datamodels" ) - { + if (get_scope($aProductNode) !== "lib" && get_scope($aProductNode) !== "datamodels") { $new_licenses[] = $b; } } usort($new_licenses, 'sort_by_product'); +echo "OK!\n"; +echo "- Overwritting Combodo license file..."; $new_dom = new DOMDocument("1.0"); $new_dom->formatOutput = true; $root = $new_dom->createElement("licenses"); $new_dom->appendChild($root); foreach ($new_licenses as $b) { - $node = $new_dom->importNode($b,true); - $root->appendChild($new_dom->importNode($b,true)); + $node = $new_dom->importNode($b, true); + + // N°3870 fix when running script in Windows + // fix should be in gen-community-license.sh but it is easier to do it here ! + if (strncasecmp(PHP_OS, 'WIN', 3) === 0) { + $oProductNodeOrig = get_product_node($node); + fix_product_name($oProductNodeOrig); + } + + $root->appendChild($node); } -$new_dom->save($xmlFilePath); \ No newline at end of file +$new_dom->save($xmlFilePath); +echo "OK!\n"; \ No newline at end of file diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php index d904eb35b..8f9c6f63d 100644 --- a/setup/compiler.class.inc.php +++ b/setup/compiler.class.inc.php @@ -71,7 +71,7 @@ class MFCompiler * @var string * @since 2.7.5 3.0.0 N°4020 */ - public const REBUILD_HKEYS_NEVER= APPROOT.'data/.setup-rebuild-hkeys-never'; + const REBUILD_HKEYS_NEVER = APPROOT.'data/.setup-rebuild-hkeys-never'; /** @var \ModelFactory */ protected $oFactory; diff --git a/setup/setuputils.class.inc.php b/setup/setuputils.class.inc.php index 8a1446352..9c22a2f55 100644 --- a/setup/setuputils.class.inc.php +++ b/setup/setuputils.class.inc.php @@ -1013,8 +1013,8 @@ class SetupUtils $oPage, $bIsItopInstall, $sDBServer, $sDBUser, $sDBPwd, $sDBName, $sDBPrefix, $bTlsEnabled, $sTlsCA, $sNewDBName = '' ) { - $sWikiVersion = utils::GetItopVersionWikiSyntax(); //eg : '2_7_0'; - $sMysqlTlsWikiPageUrl = 'https://wiki.openitop.org/doku.php?id='.$sWikiVersion.':install:php_and_mysql_tls'; + $sWikiVersion = utils::GetItopVersionWikiSyntax(); //eg : '2_7_0'; + $sMysqlTlsWikiPageUrl = 'https://www.itophub.io/wiki/page?id='.$sWikiVersion.':install:php_and_mysql_tls'; $oPage->add(''); $oPage->add('
Database Server Connection'); @@ -1023,13 +1023,15 @@ class SetupUtils //-- DB connection params $oPage->add(''); $oPage->add('Server Name:E.g. "localhost", "dbserver.mycompany.com" or "192.142.10.23"'); - $oPage->add('Login:The account must have the following privileges on the database: SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, ALTER, CREATE VIEW, SHOW VIEW, LOCK TABLE, SUPER, TRIGGER'); + $oPage->add('Login:The account must have the following privileges on the database: SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, ALTER, CREATE VIEW, SHOW VIEW, LOCK TABLE, SUPER, TRIGGER'); $oPage->add('Password:'); $oPage->add(''); //-- TLS params (N°1260) $sTlsEnabledChecked = $bTlsEnabled ? ' checked' : ''; - $sTlsCaDisabled = $bTlsEnabled ? '' : ' disabled'; + $sTlsCaDisabled = $bTlsEnabled ? '' : ' disabled'; $oPage->add(''); $oPage->add(''); $oPage->add('Before configuring MySQL with TLS encryption, read the documentation on Combodo\'s Wiki'); @@ -1273,39 +1275,38 @@ EOF $aResult['checks'][] = new CheckResult(CheckResult::INFO, "Info - User privileges: ".($oDBSource->GetRawPrivileges())); $bHasDbVersionRequired = self::CheckDbServerVersion($aResult, $oDBSource); - if (!$bHasDbVersionRequired) - { + if (!$bHasDbVersionRequired) { return $aResult; } // Check some server variables - $iMaxAllowedPacket = $oDBSource->GetServerVariable('max_allowed_packet'); - $iMaxUploadSize = utils::ConvertToBytes(ini_get('upload_max_filesize')); + $iMaxAllowedPacket = $oDBSource->GetServerVariable('max_allowed_packet'); + $sMaxAllowedPacketFriendly = utils::BytesToFriendlyFormat($iMaxAllowedPacket); + $iMaxUploadSize = utils::ConvertToBytes(ini_get('upload_max_filesize')); + $sMaxUploadSizeFriendly = utils::BytesToFriendlyFormat($iMaxUploadSize); if ($iMaxAllowedPacket >= (500 + $iMaxUploadSize)) // Allow some space for the query + the file to upload { - $aResult['checks'][] = new CheckResult(CheckResult::INFO, "MySQL server's max_allowed_packet ($iMaxAllowedPacket) is big enough compared to upload_max_filesize ($iMaxUploadSize)."); - } - else if($iMaxAllowedPacket < $iMaxUploadSize) - { - $aResult['checks'][] = new CheckResult(CheckResult::WARNING, "MySQL server's max_allowed_packet ($iMaxAllowedPacket) is not big enough. Please, consider setting it to at least ".(500 + $iMaxUploadSize)."."); + $aResult['checks'][] = new CheckResult(CheckResult::INFO, "MySQL server's max_allowed_packet ($sMaxAllowedPacketFriendly) is big enough compared to upload_max_filesize ($sMaxUploadSizeFriendly)."); + } else if ($iMaxAllowedPacket < $iMaxUploadSize) { + $sWikiVersion = utils::GetItopVersionWikiSyntax(); //eg : '2_7_0'; + $sAttachmentsVarsWikiPageUrl = 'https://www.itophub.io/wiki/page?id='.$sWikiVersion + .':install:php_and_mysql_configuration#attachments_upload'; + + $aResult['checks'][] = new CheckResult(CheckResult::WARNING, + "MySQL server's max_allowed_packet ($sMaxAllowedPacketFriendly) is not big enough compared to upload_max_filesize ($sMaxUploadSizeFriendly), whereas it should has a greater value. Consider increasing its value of at least 500KB. See the documentation for details."); } $iMaxConnections = $oDBSource->GetServerVariable('max_connections'); - if ($iMaxConnections < 5) - { + if ($iMaxConnections < 5) { $aResult['checks'][] = new CheckResult(CheckResult::WARNING, "MySQL server's max_connections ($iMaxConnections) is not enough. Please, consider setting it to at least 5."); - } - else - { + } else { $aResult['checks'][] = new CheckResult(CheckResult::INFO, "MySQL server's max_connections is set to $iMaxConnections."); } - try - { + try { $aResult['databases'] = $oDBSource->ListDB(); } - catch(Exception $e) - { + catch (Exception $e) { $aResult['databases'] = null; } } diff --git a/test/application/UtilsTest.php b/test/application/UtilsTest.php index 654141a86..5b23a531e 100644 --- a/test/application/UtilsTest.php +++ b/test/application/UtilsTest.php @@ -569,10 +569,10 @@ class UtilsTest extends \Combodo\iTop\Test\UnitTest\ItopTestCase { return [ '123 int value' => ['123', 123], - '-1 no limit' => ['-1', -1], - '56k' => ['56k', 56 * 1024], - '512M' => ['512M', 512 * 1024 * 1024], - '2G' => ['2G', 2 * 1024 * 1024 * 1024], + '-1 no limit' => ['-1', -1], + '56k' => ['56k', 56 * 1024], + '512M' => ['512M', 512 * 1024 * 1024], + '2G' => ['2G', 2 * 1024 * 1024 * 1024], ]; } }