diff options
author | ffflabs <amenadiel@gmail.com> | 2020-03-04 20:49:27 +0300 |
---|---|---|
committer | ffflabs <amenadiel@gmail.com> | 2020-03-04 20:49:27 +0300 |
commit | 6473d18d767a04b2f2ee42b64ecfa3ceeab7f4d5 (patch) | |
tree | eff1dafa55941e44a6c995f97568d55689a57168 | |
parent | d93ec300b47c362db73149f5cdefa7a858a1c40c (diff) |
enabling checks with psalm and phpstan
-rw-r--r-- | Makefile | 21 | ||||
-rw-r--r-- | composer.json | 3 | ||||
-rw-r--r-- | composer.lock | 41 | ||||
-rw-r--r-- | phpstan.neon | 42 | ||||
-rw-r--r-- | psalm-baseline.xml | 681 | ||||
-rw-r--r-- | psalm.xml | 4 | ||||
-rw-r--r-- | src/classes/ContainerUtils.php | 55 | ||||
-rw-r--r-- | src/classes/Misc.php | 10 | ||||
-rw-r--r-- | src/classes/Translations.php | 4 | ||||
-rw-r--r-- | src/controllers/BaseController.php | 2 | ||||
-rw-r--r-- | src/database/Postgres.php | 6 | ||||
-rw-r--r-- | src/decorators/Decorator.php | 4 | ||||
-rw-r--r-- | src/lib.inc.php | 3 | ||||
-rw-r--r-- | src/traits/HelperTrait.php | 30 | ||||
-rw-r--r-- | src/traits/MiscTrait.php | 1 | ||||
-rw-r--r-- | src/xhtml/XHtmlSimpleElement.php | 2 |
16 files changed, 850 insertions, 59 deletions
@@ -121,14 +121,14 @@ var_dumper: @echo "" folder ?= src -psalm: FOLDER_BASENAME:=`basename $(folder)` +psalm: FOLDER_BASENAME:=`basename $(folder)|sed 's/src//'` psalm: @if [ -f "vendor/bin/psalm" ]; then \ mkdir -p .build/psalm ;\ ${MAKE} disable_xdebug --no-print-directory ;\ vendor/bin/psalm --show-info=false \ --config=psalm.xml \ - --set-baseline=psalm-baseline-$(FOLDER_BASENAME).xml \ + --set-baseline=.build/psalm/psalm-baseline$(FOLDER_BASENAME).xml \ --shepherd $(folder) ;\ ${MAKE} enable_xdebug new_status=$(XDSWI_STATUS) --no-print-directory;\ else \ @@ -137,6 +137,23 @@ psalm: fi @echo "" + +phpstan: + @${MAKE} disable_xdebug --no-print-directory + @if [ ! -f "vendor/bin/phpstan" ]; then \ + echo -e "$(GREEN)phpstan$(WHITE) is $(RED)NOT$(WHITE) installed. " ;\ + echo -e "Install it with $(GREEN)composer require --dev phpstan/phpstan$(WHITE)" ;\ + exit 0 ;\ + fi + + @mkdir -p .build/phpstan ;\ + ./vendor/bin/phpstan analyse --memory-limit=2G ${error_format} + @${MAKE} enable_xdebug new_status=$(XDSWI_STATUS) --no-print-directory ;\ + echo "" + + + + create_testdb: PGPASSWORD=scrutinizer psql -U scrutinizer -h localhost -f tests/simpletest/data/ppatests_install.sql diff --git a/composer.json b/composer.json index 0507d34d..42527b80 100644 --- a/composer.json +++ b/composer.json @@ -34,7 +34,8 @@ "kint-php/kint": "~3.3", "simpletest/simpletest": "^1.1", "symfony/var-dumper": "^5.0", - "vimeo/psalm": "^3.9" + "vimeo/psalm": "^3.9", + "phpstan/phpstan": "^0.12.14" }, "extra": { "current_tags": { diff --git a/composer.lock b/composer.lock index f3801c62..ee388da7 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "227516e55a6a93c7fadf0bd1efc807d2", + "content-hash": "0a2c77742518f9e5a88c67d4020c6b6b", "packages": [ { "name": "adodb/adodb-php", @@ -2747,6 +2747,45 @@ "time": "2020-01-20T15:57:02+00:00" }, { + "name": "phpstan/phpstan", + "version": "0.12.14", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "37bdd26a80235d0f9045b49f4151102b7831cbe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/37bdd26a80235d0f9045b49f4151102b7831cbe2", + "reference": "37bdd26a80235d0f9045b49f4151102b7831cbe2", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "time": "2020-03-02T22:29:43+00:00" + }, + { "name": "phpunit/php-code-coverage", "version": "8.0.1", "source": { diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 00000000..945aecb9 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,42 @@ +parameters: + + paths: + - src + + tmpDir: ./.build/phpstan + + # The level 8 is the highest level + level: 5 + + autoload_files: + - vendor/adodb/adodb-php/adodb.inc.php + + excludes_analyse: + - .build/* + - tests/* + - assets/* + - temp/* + - vendor/* + - src/classes/ADO* + - router.php + + treatPhpDocTypesAsCertain: false + + + + ignoreErrors: + - + message: '#Access to an undefined property Psr\Container\ContainerInterface::\$[a-zA-Z ]+#' + paths: + - src/classes/* + + - + message: "#^Access to an undefined property Psr\\\\Container\\\\ContainerInterface\\:\\:\\$[a-zA-Z]+.*#" + paths: + - src/classes/* + - + message: "#^Call to an undefined method PHPPgAdmin\\\\Database\\\\ADO.*#" + paths: + - src/* + + - '#Other error to catch anywhere#'
\ No newline at end of file diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 8bea7c5d..d4f11396 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,5 +1,574 @@ <?xml version="1.0" encoding="UTF-8"?> <files psalm-version="3.9.3@2e4154d76e24d1b4e59e6cc2bebef7790cb9e550"> + <file src="src/classes/ADONewConnection.php"> + <UndefinedClass occurrences="1"> + <code>\ADONewConnection</code> + </UndefinedClass> + </file> + <file src="src/classes/ADOdbException.php"> + <UndefinedDocblockClass occurrences="2"> + <code>number</code> + <code>number</code> + </UndefinedDocblockClass> + </file> + <file src="src/classes/ContainerUtils.php"> + <UndefinedClass occurrences="1"> + <code>\Slim\ContainerInterface</code> + </UndefinedClass> + <UndefinedInterfaceMethod occurrences="7"> + <code>$container</code> + <code>$container</code> + <code>$container</code> + <code>$container</code> + <code>$container</code> + <code>$container</code> + <code>$container</code> + </UndefinedInterfaceMethod> + </file> + <file src="src/classes/Misc.php"> + <InvalidNullableReturnType occurrences="1"> + <code>string</code> + </InvalidNullableReturnType> + <NullableReturnStatement occurrences="3"> + <code>$this->_server_info</code> + <code>$this->halt($this->lang['strinvalidserverparam'])</code> + <code>$this->halt($lang['strcannotdumponwindows'])</code> + </NullableReturnStatement> + <UndefinedMethod occurrences="1"> + <code>setSchema</code> + </UndefinedMethod> + </file> + <file src="src/controllers/AggregatesController.php"> + <NullReference occurrences="1"> + <code>$_REQUEST</code> + </NullReference> + </file> + <file src="src/controllers/AlldbController.php"> + <NullReference occurrences="3"> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/BaseController.php"> + <UndefinedConstant occurrences="1"> + <code>BASE_PATH</code> + </UndefinedConstant> + <UndefinedThisPropertyAssignment occurrences="1"> + <code>$this->postgresqlMinVer</code> + </UndefinedThisPropertyAssignment> + </file> + <file src="src/controllers/ColpropertiesController.php"> + <NullArgument occurrences="1"> + <code>null</code> + </NullArgument> + <NullReference occurrences="1"> + <code>$_REQUEST</code> + </NullReference> + </file> + <file src="src/controllers/ConstraintsController.php"> + <NullReference occurrences="5"> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + <UndefinedMethod occurrences="1"> + <code>doTree</code> + </UndefinedMethod> + </file> + <file src="src/controllers/DatabaseController.php"> + <NullReference occurrences="1"> + <code>$_REQUEST</code> + </NullReference> + </file> + <file src="src/controllers/DataexportController.php"> + <InvalidArgument occurrences="16"> + <code>"REQUEST['what']"</code> + <code>'DUMP ENABLED, d_format is'</code> + <code>$_REQUEST['d_format']</code> + <code>'d_format is'</code> + <code>'d_oids is'</code> + <code>isset($_REQUEST['d_oids'])</code> + <code>'$_REQUEST[query]'</code> + <code>\htmlspecialchars(\urlencode($_REQUEST['query']))</code> + <code>'$_SESSION[sqlquery]'</code> + <code>\htmlspecialchars(\urlencode($_SESSION['sqlquery']))</code> + <code>"REQUEST['what']"</code> + <code>'subject'</code> + <code>'object'</code> + <code>'tabledefprefix'</code> + <code>'tabledefsuffix'</code> + <code>'$_REQUEST[query]'</code> + </InvalidArgument> + </file> + <file src="src/controllers/DbexportController.php"> + <EmptyArrayAccess occurrences="1"> + <code>$version[1]</code> + </EmptyArrayAccess> + <InvalidArgument occurrences="8"> + <code>'REQUEST[subject]'</code> + <code>'$exe'</code> + <code>'version'</code> + <code>'REQUEST[output]'</code> + <code>'f_object'</code> + <code>'ENV VARS'</code> + <code>'cmd'</code> + <code>$cmd</code> + </InvalidArgument> + </file> + <file src="src/controllers/DisplayController.php"> + <EmptyArrayAccess occurrences="1"> + <code>$urlvars['search_path']</code> + </EmptyArrayAccess> + <InvalidArgument occurrences="1"> + <code>$resultset->recordCount()</code> + </InvalidArgument> + <InvalidArrayOffset occurrences="9"> + <code>$_gets['schema']</code> + <code>$_gets['subject']</code> + <code>$_gets['query']</code> + <code>$_gets['count']</code> + <code>$_gets['return']</code> + <code>$_gets['search_path']</code> + <code>$_gets['table']</code> + <code>$_gets['nohistory']</code> + <code>$fields['schema']</code> + </InvalidArrayOffset> + <InvalidNullableReturnType occurrences="1"> + <code>string</code> + </InvalidNullableReturnType> + <NullReference occurrences="5"> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + <code>$_POST</code> + </NullReference> + <UndefinedDocblockClass occurrences="7"> + <code>$resultset->recordCount()</code> + <code>$resultset->recordCount()</code> + <code>$resultset->fetchField($index)</code> + <code>$finfo->name</code> + <code>$finfo->name</code> + <code>$resultset->fetchField($j++)</code> + <code>$finfo->type</code> + </UndefinedDocblockClass> + </file> + <file src="src/controllers/DomainsController.php"> + <NullReference occurrences="3"> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/FulltextController.php"> + <NullReference occurrences="6"> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/FunctionsController.php"> + <InvalidNullableReturnType occurrences="1"> + <code>string</code> + </InvalidNullableReturnType> + <NullableReturnStatement occurrences="2"> + <code>$this->_printNavLinks('functions-properties', $func_full)</code> + <code>$this->_printNavLinks('functions-properties', $func_full)</code> + </NullableReturnStatement> + <TooFewArguments occurrences="1"> + <code>showDefinition</code> + </TooFewArguments> + <UndefinedVariable occurrences="1"> + <code>$f</code> + </UndefinedVariable> + </file> + <file src="src/controllers/GroupsController.php"> + <NullReference occurrences="3"> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/IndexesController.php"> + <NullReference occurrences="4"> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/InfoController.php"> + <InvalidReturnType occurrences="1"> + <code>string|void</code> + </InvalidReturnType> + <UndefinedThisPropertyAssignment occurrences="1"> + <code>$this->shownull</code> + </UndefinedThisPropertyAssignment> + <UndefinedThisPropertyFetch occurrences="4"> + <code>$this->shownull</code> + <code>$this->shownull</code> + <code>$this->shownull</code> + <code>$this->shownull</code> + </UndefinedThisPropertyFetch> + </file> + <file src="src/controllers/LoginController.php"> + <InvalidArgument occurrences="1"> + <code>'invalid server param'</code> + </InvalidArgument> + </file> + <file src="src/controllers/MaterializedviewpropertiesController.php"> + <InvalidArgument occurrences="1"> + <code>$sql</code> + </InvalidArgument> + <NullReference occurrences="2"> + <code>$_REQUEST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/MaterializedviewsController.php"> + <NullReference occurrences="2"> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + </NullReference> + </file> + <file src="src/controllers/PrivilegesController.php"> + <NullReference occurrences="2"> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + </NullReference> + </file> + <file src="src/controllers/RolesController.php"> + <NullReference occurrences="4"> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/RulesController.php"> + <NullReference occurrences="1"> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/SchemasController.php"> + <NullReference occurrences="2"> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/SequencesController.php"> + <NullReference occurrences="3"> + <code>$_POST</code> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/SqleditController.php"> + <NullReference occurrences="2"> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + </NullReference> + </file> + <file src="src/controllers/TablesController.php"> + <NullReference occurrences="3"> + <code>$_REQUEST</code> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + <UndefinedDocblockClass occurrences="1"> + <code>$tables->recordCount()</code> + </UndefinedDocblockClass> + </file> + <file src="src/controllers/TablespacesController.php"> + <NullReference occurrences="2"> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/TblpropertiesController.php"> + <InvalidArgument occurrences="1"> + <code>'$hasID'</code> + </InvalidArgument> + <NullReference occurrences="4"> + <code>$_POST</code> + <code>$_POST</code> + <code>$_REQUEST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/TreeController.php"> + <InvalidReturnStatement occurrences="1"> + <code>$parent</code> + </InvalidReturnStatement> + <UndefinedConstant occurrences="5"> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>BASE_PATH</code> + </UndefinedConstant> + </file> + <file src="src/controllers/TriggersController.php"> + <NullReference occurrences="1"> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/TypesController.php"> + <InvalidArrayOffset occurrences="1"> + <code>$navlinks['enum']</code> + </InvalidArrayOffset> + <NullReference occurrences="3"> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/UsersController.php"> + <NullReference occurrences="2"> + <code>$_POST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/ViewpropertiesController.php"> + <NullReference occurrences="2"> + <code>$_REQUEST</code> + <code>$_POST</code> + </NullReference> + </file> + <file src="src/controllers/ViewsController.php"> + <NullReference occurrences="2"> + <code>$_REQUEST</code> + <code>$_REQUEST</code> + </NullReference> + </file> + <file src="src/database/ADOdbBase.php"> + <InvalidArgument occurrences="1"> + <code>$e->getMessage()</code> + </InvalidArgument> + <InvalidReturnStatement occurrences="2"> + <code>$e->getCode()</code> + <code>$e->getCode()</code> + </InvalidReturnStatement> + <MissingDependency occurrences="1"> + <code>\PHPPgAdmin\ADONewConnection</code> + </MissingDependency> + </file> + <file src="src/database/Connection.php"> + <InvalidReturnStatement occurrences="1"> + <code>-3</code> + </InvalidReturnStatement> + <NullableReturnStatement occurrences="1"> + <code>null</code> + </NullableReturnStatement> + <UndefinedDocblockClass occurrences="1"> + <code>$this->conn</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/Postgres.php"> + <InvalidArgument occurrences="12"> + <code>'bslash_count'</code> + <code>$bslash_count</code> + <code>$line</code> + <code>'dol_quote'</code> + <code>$dol_quote</code> + <code>$line</code> + <code>'open_xcomment'</code> + <code>$in_xcomment</code> + <code>$line</code> + <code>$i</code> + <code>$prevlen</code> + <code>$thislen</code> + </InvalidArgument> + <LoopInvalidation occurrences="1"> + <code>$i</code> + </LoopInvalidation> + <ReferenceConstraintViolation occurrences="4"> + <code>return -3;</code> + <code>return -1;</code> + <code>return $rs;</code> + <code>$max_pages</code> + </ReferenceConstraintViolation> + <UndefinedDocblockClass occurrences="1"> + <code>$rs->recordCount()</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/Postgres12.php"> + <InvalidNullableReturnType occurrences="1"> + <code>false</code> + </InvalidNullableReturnType> + <NullableReturnStatement occurrences="1"> + <code>null</code> + </NullableReturnStatement> + </file> + <file src="src/database/Postgres74.php"> + <MoreSpecificImplementedParamType occurrences="1"> + <code>$default</code> + </MoreSpecificImplementedParamType> + </file> + <file src="src/database/Postgres80.php"> + <MoreSpecificImplementedParamType occurrences="1"> + <code>$cycledvalue</code> + </MoreSpecificImplementedParamType> + <NullArgument occurrences="1"> + <code>null</code> + </NullArgument> + </file> + <file src="src/database/Postgres81.php"> + <InvalidArgument occurrences="1"> + <code>$toid</code> + </InvalidArgument> + <InvalidCast occurrences="2"> + <code>$toid</code> + <code>$toid</code> + </InvalidCast> + <UndefinedDocblockClass occurrences="2"> + <code>$rs->fields('oid')</code> + <code>$rs->recordCount()</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/Postgres82.php"> + <ConflictingReferenceConstraint occurrences="1"> + <code>else {</code> + </ConflictingReferenceConstraint> + <LessSpecificImplementedReturnType occurrences="1"> + <code>array</code> + </LessSpecificImplementedReturnType> + <MoreSpecificImplementedParamType occurrences="1"> + <code>$operator_oid</code> + </MoreSpecificImplementedParamType> + <NullArgument occurrences="1"> + <code>null</code> + </NullArgument> + </file> + <file src="src/database/Postgres83.php"> + <InvalidArgument occurrences="1"> + <code>$toid</code> + </InvalidArgument> + <InvalidCast occurrences="2"> + <code>$toid</code> + <code>$toid</code> + </InvalidCast> + <MoreSpecificImplementedParamType occurrences="1"> + <code>$cycledvalue</code> + </MoreSpecificImplementedParamType> + <UndefinedDocblockClass occurrences="2"> + <code>$rs->fields('oid')</code> + <code>$rs->recordCount()</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/databasetraits/FtsTrait.php"> + <InvalidArrayOffset occurrences="12"> + <code>$parser['schema']</code> + <code>$parser['parser']</code> + <code>$parser['schema']</code> + <code>$parser['parser']</code> + <code>$template['schema']</code> + <code>$template['name']</code> + <code>$template['schema']</code> + <code>$template['name']</code> + <code>$template['schema']</code> + <code>$template['name']</code> + <code>$template['schema']</code> + <code>$template['name']</code> + </InvalidArrayOffset> + </file> + <file src="src/database/databasetraits/FunctionTrait.php"> + <ConflictingReferenceConstraint occurrences="1"> + <code>else {</code> + </ConflictingReferenceConstraint> + <InvalidReturnType occurrences="1"> + <code>\PHPPgAdmin\ADORecordSet</code> + </InvalidReturnType> + <NullArgument occurrences="1"> + <code>null</code> + </NullArgument> + </file> + <file src="src/database/databasetraits/IndexTrait.php"> + <UndefinedDocblockClass occurrences="1"> + <code>$v->recordCount()</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/databasetraits/RoleTrait.php"> + <UndefinedDocblockClass occurrences="3"> + <code>number</code> + <code>number</code> + <code>number</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/databasetraits/RowTrait.php"> + <UndefinedDocblockClass occurrences="1"> + <code>$rs->recordCount()</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/databasetraits/SchemaTrait.php"> + <InvalidReturnType occurrences="1"> + <code>int</code> + </InvalidReturnType> + </file> + <file src="src/database/databasetraits/SequenceTrait.php"> + <InvalidArgument occurrences="6"> + <code>$increment</code> + <code>$minvalue</code> + <code>$maxvalue</code> + <code>$restartvalue</code> + <code>$cachevalue</code> + <code>$startvalue</code> + </InvalidArgument> + <UndefinedDocblockClass occurrences="18"> + <code>number</code> + <code>$seq->recordCount()</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + <code>number</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/databasetraits/TableTrait.php"> + <InvalidArgument occurrences="1"> + <code>$privs</code> + </InvalidArgument> + <InvalidReturnType occurrences="1"> + <code>\PHPPgAdmin\ADORecordSet</code> + </InvalidReturnType> + <UndefinedDocblockClass occurrences="8"> + <code>$t->recordCount()</code> + <code>$atts->recordCount()</code> + <code>$cons->recordCount()</code> + <code>$rs->recordCount()</code> + <code>$indexes->recordCount()</code> + <code>$triggers->recordCount()</code> + <code>$rules->recordCount()</code> + <code>$data->recordCount()</code> + </UndefinedDocblockClass> + </file> + <file src="src/database/databasetraits/TriggerTrait.php"> + <InvalidReturnType occurrences="1"> + <code>int</code> + </InvalidReturnType> + </file> + <file src="src/database/databasetraits/ViewTrait.php"> + <UndefinedDocblockClass occurrences="1"> + <code>$data->recordCount()</code> + </UndefinedDocblockClass> + </file> <file src="src/decorators/ActionUrlDecorator.php"> <UndefinedConstant occurrences="1"> <code>\SUBFOLDER</code> @@ -130,6 +699,69 @@ <code>$this->base</code> </UndefinedThisPropertyFetch> </file> + <file src="src/lib.inc.php"> + <EmptyArrayAccess occurrences="2"> + <code>$conf['debugmode']</code> + <code>$conf['register_debuggers']</code> + </EmptyArrayAccess> + </file> + <file src="src/middleware/PopulateRequestResponse.php"> + <UndefinedConstant occurrences="2"> + <code>SUBFOLDER</code> + <code>SUBFOLDER</code> + </UndefinedConstant> + <UndefinedInterfaceMethod occurrences="4"> + <code>getParam</code> + <code>getParam</code> + <code>getParam</code> + <code>getParams</code> + </UndefinedInterfaceMethod> + </file> + <file src="src/router.php"> + <InvalidScope occurrences="6"> + <code>$this</code> + <code>$this</code> + <code>$this</code> + <code>$this</code> + <code>$this</code> + <code>$this</code> + </InvalidScope> + </file> + <file src="src/traits/AdminTrait.php"> + <InvalidArrayOffset occurrences="2"> + <code>$actions['edit']['vars']</code> + <code>$actions['delete']['vars']</code> + </InvalidArrayOffset> + <ParadoxicalCondition occurrences="1"> + <code>empty($_REQUEST['table'])</code> + </ParadoxicalCondition> + <UndefinedConstant occurrences="16"> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + </UndefinedConstant> + <UndefinedDocblockClass occurrences="1"> + <code>$autovac->recordCount()</code> + </UndefinedDocblockClass> + </file> + <file src="src/traits/ExportTrait.php"> + <UndefinedConstant occurrences="1"> + <code>\SUBFOLDER</code> + </UndefinedConstant> + </file> <file src="src/traits/HelperTrait.php"> <UndefinedConstant occurrences="1"> <code>BASE_PATH</code> @@ -143,4 +775,53 @@ <code>$this->container</code> </UndefinedThisPropertyFetch> </file> + <file src="src/traits/InsertEditRowTrait.php"> + <UndefinedConstant occurrences="2"> + <code>SUBFOLDER</code> + <code>SUBFOLDER</code> + </UndefinedConstant> + </file> + <file src="src/traits/MiscTrait.php"> + <UndefinedConstant occurrences="5"> + <code>SUBFOLDER</code> + <code>SUBFOLDER</code> + <code>SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + </UndefinedConstant> + <UndefinedMethod occurrences="1"> + <code>isSuperUser</code> + </UndefinedMethod> + </file> + <file src="src/traits/ViewsMatviewsTrait.php"> + <EmptyArrayAccess occurrences="1"> + <code>$formLink[$i]</code> + </EmptyArrayAccess> + <NullReference occurrences="1"> + <code>$_POST</code> + </NullReference> + <UndefinedConstant occurrences="3"> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + <code>\SUBFOLDER</code> + </UndefinedConstant> + </file> + <file src="src/xhtml/HTMLNavbarController.php"> + <InvalidArgument occurrences="1"> + <code>$alltabs</code> + </InvalidArgument> + <InvalidReturnType occurrences="1"> + <code>? string</code> + </InvalidReturnType> + </file> + <file src="src/xhtml/HTMLTableController.php"> + <UndefinedConstant occurrences="1"> + <code>SUBFOLDER</code> + </UndefinedConstant> + </file> + <file src="src/xhtml/XHtmlElement.php"> + <MismatchingDocblockParamType occurrences="1"> + <code>XHtmlElement</code> + </MismatchingDocblockParamType> + </file> </files> @@ -5,12 +5,14 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" - errorBaseline="psalm-baseline-src.xml" + errorBaseline=".build/psalm/psalm-baseline.xml" > <projectFiles> <directory name="src" /> <ignoreFiles> <directory name="vendor" /> + <directory name="temp" /> + <directory name="tests" /> </ignoreFiles> </projectFiles> diff --git a/src/classes/ContainerUtils.php b/src/classes/ContainerUtils.php index ca4ba257..e26eb7f1 100644 --- a/src/classes/ContainerUtils.php +++ b/src/classes/ContainerUtils.php @@ -9,10 +9,11 @@ namespace PHPPgAdmin; use Psr\Container\ContainerInterface; use Slim\App; -\defined('BASE_PATH') || \define(BASE_PATH, \dirname(__DIR__, 2)); +\defined('BASE_PATH') || \define('BASE_PATH', \dirname(__DIR__, 2)); +\defined('THEME_PATH') || \define('THEME_PATH', BASE_PATH . '/assets/themes'); \defined('SUBFOLDER') || \define( 'SUBFOLDER', - \str_replace($_SERVER['DOCUMENT_ROOT'] ?? '', '', BASE_PATH) + \str_replace($_SERVER['DOCUMENT_ROOT'] ?? '', '', 'BASE_PATH') ); \defined('DEBUGMODE') || \define('DEBUGMODE', false); \defined('IN_TEST') || \define('IN_TEST', false); @@ -43,7 +44,7 @@ class ContainerUtils /** * @var ContainerInterface */ - protected $_container; + protected $container; /** * @var App @@ -67,7 +68,7 @@ class ContainerUtils //$this->prtrace($appVersion); //$this->dump($composerinfo); $settings = [ - 'displayErrorDetails' => self::DEBUGMODE, + 'determineRouteBeforeAppMiddleware' => true, 'base_path' => self::BASE_PATH, 'debug' => self::DEBUGMODE, @@ -105,19 +106,20 @@ class ContainerUtils $this->_app = new App($config); // Fetch DI Container - $container = $this->_app->getContainer(); - $container['utils'] = $this; - $container['version'] = 'v' . $appVersion; - $container['errors'] = []; - - $this->_container = $container; + $container = $this->_app->getContainer(); + $container['utils'] = $this; + $container['version'] = 'v' . $appVersion; + $container['errors'] = []; + $container['requestobj'] = $container['request']; + $container['responseobj'] = $container['response']; + $this->container = $container; } public static function getContainerInstance() { $_instance = self::getInstance(); - if (!$container = $_instance->_container) { + if (!$container = $_instance->container) { throw new \Exception('Could not get a container'); } @@ -216,16 +218,13 @@ class ContainerUtils /** * Gets the theme from * 1. The $_REQUEST global (when it's chosen from start screen) - * 2. Server specific config theme - * 3.- $_SESSION global (subsequent requests after 1.) - * 4.- $_COOKIE global (mostly fallback for $_SESSION after 1.- and 3.-) - * 5.- theme as set in config - * 6.- 'default' theme. + * 2. Server specific config theme 3.- $_SESSION global (subsequent requests after 1.) 4.- $_COOKIE global (mostly + * fallback for $_SESSION after 1.- and 3.-) 5.- theme as set in config 6.- 'default' theme. * - * @param <type> $conf The conf - * @param null|mixed $_server_info + * @param array $conf The conf + * @param null|mixed $_server_info * - * @return string the theme + * @return string the theme */ public function getTheme(array $conf, $_server_info = null) { @@ -271,10 +270,10 @@ class ContainerUtils */ public function getRedirectUrl() { - $query_string = $this->_container->requestobj->getUri()->getQuery(); + $query_string = $this->container->requestobj->getUri()->getQuery(); // if server_id isn't set, then you will be redirected to intro - if (null === $this->_container->requestobj->getQueryParam('server')) { + if (null === $this->container->requestobj->getQueryParam('server')) { $destinationurl = \SUBFOLDER . '/src/views/intro'; } else { // otherwise, you'll be redirected to the login page for that server; @@ -294,14 +293,14 @@ class ContainerUtils */ public function getDestinationWithLastTab($subject) { - $_server_info = $this->_container->misc->getServerInfo(); + $_server_info = $this->container->misc->getServerInfo(); $this->addFlash($subject, 'getDestinationWithLastTab'); //$this->prtrace('$_server_info', $_server_info); // If username isn't set in server_info, you should login if (!isset($_server_info['username'])) { $destinationurl = $this->getRedirectUrl(); } else { - $url = $this->_container->misc->getLastTabURL($subject); + $url = $this->container->misc->getLastTabURL($subject); $this->addFlash($url, 'getLastTabURL for ' . $subject); // Load query vars into superglobal arrays if (isset($url['urlvars'])) { @@ -328,15 +327,15 @@ class ContainerUtils * * @param string $errormsg The error msg * - * @return \Slim\Container The app container + * @return \Slim\ContainerInterface The app container */ - public function addError($errormsg) + public function addError(string $errormsg): \Slim\ContainerInterface { - $errors = $this->_container->get('errors'); + $errors = $this->container->get('errors'); $errors[] = $errormsg; - $this->_container->offsetSet('errors', $errors); + $this->container->offsetSet('errors', $errors); - return $this->_container; + return $this->container; } /** diff --git a/src/classes/Misc.php b/src/classes/Misc.php index 86bb170c..6bdba0a2 100644 --- a/src/classes/Misc.php +++ b/src/classes/Misc.php @@ -74,7 +74,11 @@ class Misc private $_server_info; private $_error_msg = ''; + public $conf; + public $phpMinVer; + public $postgresqlMinVer; + public $view; /** * @param \Slim\Container $container The container */ @@ -317,9 +321,9 @@ class Misc * * @internal mixed $plaform placeholder that will receive the value of the platform * - * @return \PHPPgAdmin\Database\ADOdbBase the database accessor instance + * @return \PHPPgAdmin\Database\ADOdbBase|null the database accessor instance */ - public function getDatabaseAccessor($database = '', $server_id = null) + public function getDatabaseAccessor($database = '', $server_id = null): ? \PHPPgAdmin\Database\ADOdbBase { $lang = $this->lang; @@ -527,7 +531,7 @@ class Misc * @param mixed $value the new value, or null to unset the parameter * @param null|string $server_id the server identifier, or null for current server */ - public function setServerInfo($key, $value, $server_id = null): void + public function setServerInfo($key, $value, $server_id = null) : void { if (null === $server_id) { $server_id = $this->container->requestobj->getParam('server'); diff --git a/src/classes/Translations.php b/src/classes/Translations.php index 56c7d183..af2074e7 100644 --- a/src/classes/Translations.php +++ b/src/classes/Translations.php @@ -11,6 +11,7 @@ namespace PHPPgAdmin; */ class Translations { + public $lang; // List of language files, and encoded language name. public $appLangFiles = [ @@ -117,7 +118,6 @@ class Translations 'pt' => 'portuguese-pt', 'ro' => 'romanian', 'ru' => 'russian', - 'ru' => 'russian', 'sk' => 'slovak', 'es' => 'spanish', 'sv' => 'swedish', @@ -152,7 +152,7 @@ class Translations 'portuguese-pt' => 'pt', 'romanian' => 'ro', 'russian' => 'ru', - 'russian' => 'ru', + 'slovak' => 'sk', 'spanish' => 'es', 'swedish' => 'sv', diff --git a/src/controllers/BaseController.php b/src/controllers/BaseController.php index 26ead9cb..0a9a1601 100644 --- a/src/controllers/BaseController.php +++ b/src/controllers/BaseController.php @@ -52,7 +52,7 @@ class BaseController public $action = ''; public $controller_name; - + protected $script; /** * Used. * diff --git a/src/database/Postgres.php b/src/database/Postgres.php index a61934f8..3e09b7a3 100644 --- a/src/database/Postgres.php +++ b/src/database/Postgres.php @@ -744,7 +744,7 @@ class Postgres extends ADOdbBase // Open a transaction $status = $this->beginTransaction(); - if (0 !== $status) { + if ($status !== false) { return -1; } @@ -753,7 +753,7 @@ class Postgres extends ADOdbBase if ($this->hasReadOnlyQueries()) { $status = $this->execute('SET TRANSACTION READ ONLY'); - if (0 !== $status) { + if ($status !== false) { $this->rollbackTransaction(); return -5; @@ -804,7 +804,7 @@ class Postgres extends ADOdbBase $rs = $this->selectSet("SELECT * FROM ({$query}) AS sub {$orderby} LIMIT {$page_size} OFFSET " . ($page - 1) * $page_size); $status = $this->endTransaction(); - if (0 !== $status) { + if ($status !== false) { $this->rollbackTransaction(); return -1; diff --git a/src/decorators/Decorator.php b/src/decorators/Decorator.php index 8ead99e4..50cf8b26 100644 --- a/src/decorators/Decorator.php +++ b/src/decorators/Decorator.php @@ -9,7 +9,7 @@ namespace PHPPgAdmin\Decorators; class Decorator { use \PHPPgAdmin\Traits\HelperTrait; - + public $container; public function __construct($value) { $this->val = $value; @@ -125,7 +125,7 @@ class Decorator // at value evaluation time. if (2 < \func_num_args()) { - $v = \func_get_args(); + $v = \func_get_args(); $base = \array_shift($v); return new UrlDecorator($base, new ArrayMergeDecorator($v)); diff --git a/src/lib.inc.php b/src/lib.inc.php index 4efdc61e..962dd2e1 100644 --- a/src/lib.inc.php +++ b/src/lib.inc.php @@ -64,9 +64,6 @@ if (!$container instanceof \Psr\Container\ContainerInterface) { \trigger_error('App Container must be an instance of \\Psr\\Container\\ContainerInterface', \E_USER_ERROR); } -$container['requestobj'] = $container['request']; -$container['responseobj'] = $container['response']; - // This should be deprecated once we're sure no php scripts are required directly $container->offsetSet('server', $_REQUEST['server'] ?? null); $container->offsetSet('database', $_REQUEST['database'] ?? null); diff --git a/src/traits/HelperTrait.php b/src/traits/HelperTrait.php index 66088600..aca8e302 100644 --- a/src/traits/HelperTrait.php +++ b/src/traits/HelperTrait.php @@ -201,33 +201,43 @@ trait HelperTrait /** * Receives N parameters and sends them to the console adding where was it called from. * - * @param array $args + * @param array ...$args */ - public function prtrace(...$args) + public function prtrace(array...$args): void { - return self::staticTrace($args); + self::staticTrace($args, '', false); } - public function dump(...$args) + /** + * { function_description } + * + * @param array ...$args The arguments + */ + public function dump(array...$args): void { - return self::staticTrace($args); + self::staticTrace($args, '', false); } - public function dumpAndDie(...$args) + /** + * Dumps and die. + * + * @param array ...$args The arguments + */ + public function dumpAndDie(array...$args): void { - return self::staticTrace($args); + self::staticTrace($args, '', true); } /** * Receives N parameters and sends them to the console adding where was it * called from. * - * @param mixed $variablesToDump - * @param mixed $exitAfterwards + * @param array $variablesToDump * @param string $whoCalledMe + * @param boolean $exitAfterwards */ private static function staticTrace( - $variablesToDump = [], + array $variablesToDump = [], string $whoCalledMe = '', $exitAfterwards = false ): void { diff --git a/src/traits/MiscTrait.php b/src/traits/MiscTrait.php index 1a6cdd3a..f7ca4346 100644 --- a/src/traits/MiscTrait.php +++ b/src/traits/MiscTrait.php @@ -46,7 +46,6 @@ trait MiscTrait break; case 'server': $vars = ['params' => [ - 'subject' => 'database', 'subject' => 'server', 'server' => $_REQUEST['server'], ]]; diff --git a/src/xhtml/XHtmlSimpleElement.php b/src/xhtml/XHtmlSimpleElement.php index 67ff2676..a8a05a97 100644 --- a/src/xhtml/XHtmlSimpleElement.php +++ b/src/xhtml/XHtmlSimpleElement.php @@ -44,7 +44,7 @@ class XHtmlSimpleElement public $_htmlcode; public $_attributes = []; - + public $container; /** * Constructor. * |