From 2d0f04f389dc5e054255b6485daa4a1cc92a6837 Mon Sep 17 00:00:00 2001 From: Felipe Figueroa Date: Wed, 30 Dec 2020 08:01:04 -0300 Subject: refactor variables interpolated in string with sprintf --- .phive/phars.xml | 2 +- rector.php | 8 +- src/classes/ADONewConnection.php | 4 +- src/classes/ADORecordSet.php | 10 +- src/classes/ADOdbException.php | 49 +- src/classes/Connection.php | 37 +- src/classes/ContainerHandlers.php | 28 +- src/classes/ContainerUtils.php | 45 +- src/classes/Misc.php | 73 +-- src/classes/ViewManager.php | 151 +++-- src/controllers/AcinsertController.php | 36 +- src/controllers/AggregatesController.php | 223 +++++-- src/controllers/AlldbController.php | 131 ++++- src/controllers/BaseController.php | 76 ++- src/controllers/BrowserController.php | 3 +- src/controllers/ColpropertiesController.php | 76 ++- src/controllers/ConstraintsController.php | 202 +++++-- src/controllers/DatabaseController.php | 366 +++++++++--- src/controllers/DataexportController.php | 117 +++- src/controllers/DbexportController.php | 11 +- src/controllers/DisplayController.php | 315 +++++++--- src/controllers/DomainsController.php | 186 ++++-- src/controllers/FulltextController.php | 389 +++++++++--- src/controllers/FunctionsController.php | 490 +++++++++++---- src/controllers/GroupsController.php | 84 ++- src/controllers/HelpController.php | 22 +- src/controllers/HistoryController.php | 66 ++- src/controllers/IndexesController.php | 92 ++- src/controllers/InfoController.php | 255 ++++++-- src/controllers/IntroController.php | 16 +- src/controllers/LoginController.php | 5 +- .../MaterializedviewpropertiesController.php | 104 +++- src/controllers/MaterializedviewsController.php | 72 ++- src/controllers/OperatorsController.php | 96 ++- src/controllers/PrivilegesController.php | 116 +++- src/controllers/RolesController.php | 394 ++++++++++--- src/controllers/RulesController.php | 66 ++- src/controllers/SchemasController.php | 118 +++- src/controllers/SequencesController.php | 239 ++++++-- src/controllers/ServersController.php | 15 +- src/controllers/SqlController.php | 47 +- src/controllers/SqleditController.php | 38 +- src/controllers/TablesController.php | 477 ++++++++++++--- src/controllers/TablespacesController.php | 107 +++- src/controllers/TblpropertiesController.php | 255 ++++++-- src/controllers/TreeController.php | 40 +- src/controllers/TriggersController.php | 150 ++++- src/controllers/TypesController.php | 350 ++++++++--- src/controllers/UsersController.php | 165 +++++- src/controllers/ViewpropertiesController.php | 116 +++- src/controllers/ViewsController.php | 72 ++- src/database/ADOdbBase.php | 170 ++++-- src/database/Connection.php | 27 +- src/database/Postgres.php | 345 +++++++---- src/database/Postgres10.php | 19 +- src/database/Postgres11.php | 32 +- src/database/Postgres12.php | 4 +- src/database/Postgres13.php | 4 +- src/database/Postgres90.php | 4 +- src/database/Postgres91.php | 30 +- src/database/Postgres92.php | 31 +- src/database/Postgres93.php | 30 +- src/database/Postgres94.php | 4 +- src/database/Postgres95.php | 4 +- src/database/Postgres96.php | 35 +- src/database/databasetraits/AggregateTrait.php | 93 ++- src/database/databasetraits/ColumnTrait.php | 126 +++- src/database/databasetraits/DatabaseTrait.php | 183 ++++-- src/database/databasetraits/DomainTrait.php | 150 +++-- src/database/databasetraits/FtsTrait.php | 233 ++++++-- src/database/databasetraits/FunctionTrait.php | 122 +++- src/database/databasetraits/IndexTrait.php | 316 +++++++--- src/database/databasetraits/OperatorTrait.php | 47 +- src/database/databasetraits/PrivilegesTrait.php | 117 +++- src/database/databasetraits/RoleTrait.php | 228 +++++-- src/database/databasetraits/RowTrait.php | 72 ++- src/database/databasetraits/SchemaTrait.php | 57 +- src/database/databasetraits/SequenceTrait.php | 221 ++++--- src/database/databasetraits/StatsTrait.php | 51 +- src/database/databasetraits/TableTrait.php | 654 +++++++++++++++------ src/database/databasetraits/TablespaceTrait.php | 26 +- src/database/databasetraits/TriggerTrait.php | 46 +- src/database/databasetraits/TypeTrait.php | 99 ++-- src/database/databasetraits/ViewTrait.php | 70 +-- src/decorators/CallbackDecorator.php | 4 +- src/decorators/Decorator.php | 15 +- src/decorators/RedirectUrlDecorator.php | 4 +- src/help/PostgresDoc.php | 4 +- src/lib.inc.php | 20 +- src/middleware/Middleware.php | 4 +- src/middleware/PopulateRequestResponse.php | 17 +- src/traits/AdminTrait.php | 75 ++- 92 files changed, 7951 insertions(+), 2447 deletions(-) diff --git a/.phive/phars.xml b/.phive/phars.xml index 76e86e56..556fcde2 100644 --- a/.phive/phars.xml +++ b/.phive/phars.xml @@ -4,6 +4,6 @@ - + diff --git a/rector.php b/rector.php index 1a9c94b3..d6bc7ba4 100644 --- a/rector.php +++ b/rector.php @@ -18,7 +18,7 @@ return static function (ContainerConfigurator $containerConfigurator): void { $parameters->set(Option::AUTO_IMPORT_NAMES, true); - $parameters->set(Option::SETS, [ +/* $parameters->set(Option::SETS, [ SetList::CODING_STYLE, SetList::ACTION_INJECTION_TO_CONSTRUCTOR_INJECTION, SetList::ARRAY_STR_FUNCTIONS_TO_STATIC_CALL, @@ -31,7 +31,7 @@ return static function (ContainerConfigurator $containerConfigurator): void { SetList::PHP_72, SetList::PHPUNIT_CODE_QUALITY, - ]); + ]);*/ // $parameters->set(Option::SKIP, [ @@ -54,8 +54,8 @@ return static function (ContainerConfigurator $containerConfigurator): void { $parameters->set(Option::ENABLE_CACHE, true); $parameters->set(Option::CACHE_DIR, __DIR__ . '/.build/rector'); $parameters->set(Option::PATHS, [ - __DIR__ . '/src/classes', - __DIR__ . '/src/controllers', + __DIR__ . '/src', + //__DIR__ . '/src/controllers', //__DIR__ . '/src/database', //__DIR__ . '/src/decorators', //__DIR__ . '/src/middleware', diff --git a/src/classes/ADONewConnection.php b/src/classes/ADONewConnection.php index 4df6f6fa..4534e17f 100644 --- a/src/classes/ADONewConnection.php +++ b/src/classes/ADONewConnection.php @@ -6,9 +6,11 @@ namespace PHPPgAdmin; +use ADODB_postgres9; + /** * Extends \ADODB_postgres9 to let correct inference on PHPDoc params. */ -class ADONewConnection extends \ADODB_postgres9 +class ADONewConnection extends ADODB_postgres9 { } diff --git a/src/classes/ADORecordSet.php b/src/classes/ADORecordSet.php index c18a02ff..feae209c 100644 --- a/src/classes/ADORecordSet.php +++ b/src/classes/ADORecordSet.php @@ -5,11 +5,15 @@ */ namespace PHPPgAdmin; + +use ADOFieldObject; use ADORecordSet as ADODBRecordsetClass; +use Countable; + /** * Extends ADORecordSet to let correct inference on PHPDoc params. */ -class ADORecordSet extends ADODBRecordsetClass implements \Countable +class ADORecordSet extends ADODBRecordsetClass implements Countable { /** * Returns the recordCount. @@ -34,9 +38,9 @@ class ADORecordSet extends ADODBRecordsetClass implements \Countable * * @param int $fieldoffset * - * @return \ADOFieldObject the field + * @return ADOFieldObject the field */ - public function fetchField($fieldoffset = -1): \ADOFieldObject + public function fetchField($fieldoffset = -1): ADOFieldObject { return parent::fetchField(); } diff --git a/src/classes/ADOdbException.php b/src/classes/ADOdbException.php index cb405343..3dbe8418 100644 --- a/src/classes/ADOdbException.php +++ b/src/classes/ADOdbException.php @@ -6,11 +6,12 @@ namespace PHPPgAdmin; +use Exception; + /** * @file * Handles Exceptions on ADODb */ - /** * Released under both BSD-3-CLAUSE license and GPL-2.0-OR-LATER. Whenever * there is any discrepancy between the two licenses, the BSD license will take @@ -25,7 +26,7 @@ namespace PHPPgAdmin; * * @version Release: 5.20.9 */ -class ADOdbException extends \Exception +class ADOdbException extends Exception { public $dbms; @@ -72,7 +73,7 @@ class ADOdbException extends \Exception * @param string $p2 parameter 2 * @param mixed $thisConnection connection * - * @throws \Exception + * @throws Exception */ public function __construct($dbms, $fn, $errno, $errmsg, $p1, $p2, $thisConnection) { @@ -80,18 +81,42 @@ class ADOdbException extends \Exception case 'EXECUTE': $this->sql = \is_array($p1) ? $p1[0] : $p1; $this->params = $p2; - $s = "{$dbms} error: [{$errno}: {$errmsg}] in {$fn}(\"{$this->sql}\")"; + $s = \sprintf( + '%s error: [%s: %s] in %s("%s")', + $dbms, + $errno, + $errmsg, + $fn, + $this->sql + ); break; case 'PCONNECT': case 'CONNECT': $user = $thisConnection->user; - $s = "{$dbms} error: [{$errno}: {$errmsg}] in {$fn}({$p1}, '{$user}', '****', {$p2})"; + $s = \sprintf( + '%s error: [%s: %s] in %s(%s, \'%s\', \'****\', %s)', + $dbms, + $errno, + $errmsg, + $fn, + $p1, + $user, + $p2 + ); break; default: - $s = "{$dbms} error: [{$errno}: {$errmsg}] in {$fn}({$p1}, {$p2})"; + $s = \sprintf( + '%s error: [%s: %s] in %s(%s, %s)', + $dbms, + $errno, + $errmsg, + $fn, + $p1, + $p2 + ); break; } @@ -143,16 +168,20 @@ class ADOdbException extends \Exception 'spacer' => ' ', 'line' => $backtrace[0]['line'], ]; - $errmsg = \htmlentities(\PHPPgAdmin\ContainerUtils::br2ln($errmsg), \ENT_NOQUOTES); - $p1 = \htmlentities(\PHPPgAdmin\ContainerUtils::br2ln($p1), \ENT_NOQUOTES); - $p2 = \htmlentities(\PHPPgAdmin\ContainerUtils::br2ln($p2), \ENT_NOQUOTES); + $errmsg = \htmlentities(ContainerUtils::br2ln($errmsg), \ENT_NOQUOTES); + $p1 = \htmlentities(ContainerUtils::br2ln($p1), \ENT_NOQUOTES); + $p2 = \htmlentities(ContainerUtils::br2ln($p2), \ENT_NOQUOTES); $tag = \implode('', $btarray0); //\PC::debug(['errno' => $errno, 'fn' => $fn, 'errmsg' => $errmsg], $tag); $adoException = new self($dbms, $fn, $errno, $errmsg, $p1, $p2, $thisConnection); - echo "
{$adoException->msg}

\n"; + echo \sprintf( + '
%s

+', + $adoException->msg + ); // adodb_backtrace($adoException->getTrace()); throw $adoException; diff --git a/src/classes/Connection.php b/src/classes/Connection.php index 2adeb303..a27a1470 100644 --- a/src/classes/Connection.php +++ b/src/classes/Connection.php @@ -6,6 +6,10 @@ namespace PHPPgAdmin; +use ADODB_pdo; +use ADODB_postgres9; +use PHPPgAdmin\Traits\HelperTrait; + /** * @file * Class to represent a database connection @@ -14,7 +18,7 @@ namespace PHPPgAdmin; */ class Connection { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; public $conn; @@ -62,10 +66,10 @@ class Connection /** * Creates a new connection. Will actually make a database connection. * - * @param array $server_info - * @param string $database database name - * @param \PHPPgAdmin\ContainerUtils $container - * @param int $fetchMode Defaults to associative. Override for different behaviour + * @param array $server_info + * @param string $database database name + * @param ContainerUtils $container + * @param int $fetchMode Defaults to associative. Override for different behaviour */ public function __construct($server_info, $database, $container, $fetchMode = ADODB_FETCH_ASSOC) { @@ -107,7 +111,10 @@ class Connection $serverInfo = $this->conn->ServerInfo(); dump($serverInfo); $this->pgVersion = $serverInfo['version']; - $description = "PostgreSQL {$this->pgVersion}"; + $description = \sprintf( + 'PostgreSQL %s', + $this->pgVersion + ); $version_parts = \explode('.', $this->pgVersion); @@ -153,7 +160,7 @@ class Connection ?string $user, ?string $password, int $fetchMode = \ADODB_FETCH_ASSOC - ): \ADODB_postgres9 { + ): ADODB_postgres9 { $this->conn = ADONewConnection('postgres9'); $this->conn->setFetchMode($fetchMode); // Ignore host if null @@ -164,7 +171,11 @@ class Connection $pghost = ''; } } else { - $pghost = "{$host}:{$port}"; + $pghost = \sprintf( + '%s:%s', + $host, + $port + ); } // Add sslmode to $pghost as needed @@ -189,10 +200,16 @@ class Connection ?string $user, ?string $password, int $fetchMode = \ADODB_FETCH_ASSOC - ): \ADODB_pdo { + ): ADODB_pdo { $this->conn = ADONewConnection('pdo'); $this->conn->setFetchMode($fetchMode); - $dsnString = \sprintf('pgsql:host=%s;port=%d;dbname=%s;sslmode=%s;application_name=PHPPgAdmin6', $host, $port, $database, $sslmode); + $dsnString = \sprintf( + 'pgsql:host=%s;port=%d;dbname=%s;sslmode=%s;application_name=PHPPgAdmin6', + $host, + $port, + $database, + $sslmode + ); $this->conn->connect($dsnString, $user, $password); return $this->conn; diff --git a/src/classes/ContainerHandlers.php b/src/classes/ContainerHandlers.php index 9cc5cb1a..0b5bebf5 100644 --- a/src/classes/ContainerHandlers.php +++ b/src/classes/ContainerHandlers.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin; +use Slim\Flash\Messages; + /** * Auxiliary class to handle injection of dependencies to avoid * declaring them in the container class. @@ -13,14 +15,14 @@ namespace PHPPgAdmin; class ContainerHandlers { /** - * @var \PHPPgAdmin\ContainerUtils + * @var ContainerUtils * */ private $container; /** - * @param \PHPPgAdmin\ContainerUtils $container + * @param ContainerUtils $container */ - public function __construct(\PHPPgAdmin\ContainerUtils $container) + public function __construct(ContainerUtils $container) { $this->container = $container; } @@ -46,9 +48,9 @@ class ContainerHandlers $container = $this->container; /** - * @return \PHPPgAdmin\ViewManager + * @return ViewManager */ - $container['view'] = static function (\PHPPgAdmin\ContainerUtils $c): \PHPPgAdmin\ViewManager { + $container['view'] = static function (ContainerUtils $c): ViewManager { $misc = $c->misc; $view = new ViewManager(BASE_PATH . '/assets/templates', [ 'cache' => BASE_PATH . '/temp/twigcache', @@ -73,10 +75,10 @@ class ContainerHandlers { $container = $this->container; /** - * @return \PHPPgAdmin\Misc + * @return Misc */ - $container['misc'] = static function (\PHPPgAdmin\ContainerUtils $c): \PHPPgAdmin\Misc { - $misc = new \PHPPgAdmin\Misc($c); + $container['misc'] = static function (ContainerUtils $c): Misc { + $misc = new Misc($c); $conf = $c->get('conf'); @@ -97,12 +99,12 @@ class ContainerHandlers public function setExtra(): self { $container = $this->container; - $container['flash'] = static function (): \Slim\Flash\Messages { - return new \Slim\Flash\Messages(); + $container['flash'] = static function (): Messages { + return new Messages(); }; - $container['lang'] = static function (\PHPPgAdmin\ContainerUtils $c): array { - $translations = new \PHPPgAdmin\Translations($c); + $container['lang'] = static function (ContainerUtils $c): array { + $translations = new Translations($c); return $translations->lang; }; @@ -112,7 +114,7 @@ class ContainerHandlers public function setHaltHandler(): self { - $this->container['haltHandler'] = static function (\PHPPgAdmin\ContainerUtils $c) { + $this->container['haltHandler'] = static function (ContainerUtils $c) { return static function ($request, $response, $exits, $status = 500) { $title = 'PHPPgAdmin Error'; diff --git a/src/classes/ContainerUtils.php b/src/classes/ContainerUtils.php index fd719cef..85db5c55 100644 --- a/src/classes/ContainerUtils.php +++ b/src/classes/ContainerUtils.php @@ -6,18 +6,26 @@ namespace PHPPgAdmin; +use ArrayAccess; +use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\HelperTrait; use Psr\Container\ContainerInterface; +use Slim\App; use Slim\Collection; +use Slim\Container; use Slim\DefaultServicesProvider; +use Slim\Flash\Messages; +use Slim\Http\Request; +use Slim\Http\Response; /** * @property array $deploy_info - * @property \Slim\Flash\Messages $flash + * @property Messages $flash * @property \GuzzleHttp\Client $fcIntranetClient - * @property \PHPPgAdmin\Misc $misc - * @property \PHPPgAdmin\ViewManager $view - * @property \Slim\Http\Request $request - * @property \Slim\Http\Response $response + * @property Misc $misc + * @property ViewManager $view + * @property Request $request + * @property Response $response * @property string $BASE_PATH * @property string $THEME_PATH * @property string $subFolder @@ -29,9 +37,9 @@ use Slim\DefaultServicesProvider; * * @method mixed get(string) */ -class ContainerUtils extends \Slim\Container implements ContainerInterface +class ContainerUtils extends Container implements ContainerInterface { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; /** * @var null|self @@ -41,7 +49,7 @@ class ContainerUtils extends \Slim\Container implements ContainerInterface /** * $appInstance. * - * @var null|\Slim\App + * @var null|App */ private static $appInstance; @@ -97,14 +105,14 @@ class ContainerUtils extends \Slim\Container implements ContainerInterface return \implode(\DIRECTORY_SEPARATOR, [$this->subFolder, $path]); } - public static function getAppInstance(array $config = []): \Slim\App + public static function getAppInstance(array $config = []): App { $config = \array_merge(self::getDefaultConfig($config['debugmode'] ?? false), $config); $container = self::getContainerInstance($config); if (!self::$appInstance) { - self::$appInstance = new \Slim\App($container); + self::$appInstance = new App($container); } return self::$appInstance; @@ -222,15 +230,18 @@ class ContainerUtils extends \Slim\Container implements ContainerInterface foreach ($url['urlvars'] as $key => $urlvar) { //$this->prtrace($key, $urlvar); - $urlvars[$key] = \PHPPgAdmin\Decorators\Decorator::get_sanitized_value($urlvar, $_REQUEST); + $urlvars[$key] = Decorator::get_sanitized_value($urlvar, $_REQUEST); } $_REQUEST = \array_merge($_REQUEST, $urlvars); $_GET = \array_merge($_GET, $urlvars); } - $actionurl = \PHPPgAdmin\Decorators\Decorator::actionurl($url['url'], $_GET); + $actionurl = Decorator::actionurl($url['url'], $_GET); $destinationurl = $actionurl->value($_GET); - return \str_replace('views/?', "views/{$subject}?", $destinationurl); + return \str_replace('views/?', \sprintf( + 'views/%s?', + $subject + ), $destinationurl); } /** @@ -238,9 +249,9 @@ class ContainerUtils extends \Slim\Container implements ContainerInterface * * @param string $errormsg The error msg * - * @return\Slim\Container The app container + * @return Container The app container */ - public function addError(string $errormsg): \Slim\Container + public function addError(string $errormsg): Container { $container = self::getContainerInstance(); $errors = $container->get('errors'); @@ -291,7 +302,7 @@ class ContainerUtils extends \Slim\Container implements ContainerInterface $container->THEME_PATH = $conf['theme_path']; $container->IN_TEST = $conf['IN_TEST']; $container['errors'] = []; - $container['conf'] = static function (\Slim\Container $c) use ($conf): array { + $container['conf'] = static function (Container $c) use ($conf): array { $display_sizes = $conf['display_sizes']; if (\is_array($display_sizes)) { @@ -352,7 +363,7 @@ class ContainerUtils extends \Slim\Container implements ContainerInterface * * @return array|ArrayAccess */ - $this['settings'] = static function () use ($userSettings, $defaultSettings): \Slim\Collection { + $this['settings'] = static function () use ($userSettings, $defaultSettings): Collection { return new Collection(\array_merge($defaultSettings, $userSettings)); }; diff --git a/src/classes/Misc.php b/src/classes/Misc.php index 218d005a..71fbbb48 100644 --- a/src/classes/Misc.php +++ b/src/classes/Misc.php @@ -6,7 +6,10 @@ namespace PHPPgAdmin; +use Exception; use PHPPgAdmin\Database\Postgres; +use PHPPgAdmin\Traits\HelperTrait; +use PHPPgAdmin\Traits\MiscTrait; /** * @file @@ -22,8 +25,8 @@ use PHPPgAdmin\Database\Postgres; */ class Misc { - use \PHPPgAdmin\Traits\HelperTrait; - use \PHPPgAdmin\Traits\MiscTrait; + use HelperTrait; + use MiscTrait; /** * @var array @@ -68,17 +71,17 @@ class Misc public $postgresqlMinVer; /** - * @var \PHPPgAdmin\ViewManager + * @var ViewManager */ public $view; /** - * @var \PHPPgAdmin\ContainerUtils + * @var ContainerUtils */ protected $container; /** - * @var null|\PHPPgAdmin\Connection + * @var null|Connection */ private $_connection; @@ -113,9 +116,9 @@ class Misc private $_error_msg = ''; /** - * @param \PHPPgAdmin\ContainerUtils $container The container + * @param ContainerUtils $container The container */ - public function __construct(\PHPPgAdmin\ContainerUtils $container) + public function __construct(ContainerUtils $container) { $this->container = $container; @@ -145,7 +148,10 @@ class Misc // Check the version of PHP if (\version_compare(\PHP_VERSION, $this->phpMinVer, '<')) { - $container->addError(\sprintf('Version of PHP not supported. Please upgrade to version %s or later.', $this->phpMinVer)); + $container->addError(\sprintf( + 'Version of PHP not supported. Please upgrade to version %s or later.', + $this->phpMinVer + )); } //$this->dumpAndDie($this->); @@ -232,18 +238,18 @@ class Misc /** * Sets the view instance property of this class. * - * @param \PHPPgAdmin\ViewManager $view view instance + * @param ViewManager $view view instance * * @return \PHPPgAdmin\Misc this class instance */ - public function setView(\PHPPgAdmin\ViewManager $view) + public function setView(ViewManager $view) { $this->view = $view; return $this; } - public function getContainer(): \PHPPgAdmin\ContainerUtils + public function getContainer(): ContainerUtils { return $this->container; } @@ -304,7 +310,7 @@ class Misc * * @internal mixed $plaform placeholder that will receive the value of the platform * - * @return null|\PHPPgAdmin\Database\Postgres|void the database accessor instance + * @return null|Postgres|void the database accessor instance */ public function getDatabaseAccessor($database = '', $server_id = null) { @@ -323,7 +329,7 @@ class Misc if (null === $this->_data) { try { $_connection = $this->getConnection($database, $this->_server_id); - } catch (\Exception $e) { + } catch (Exception $e) { $this->setServerInfo(null, null, $this->_server_id); $this->setNoDBConnection(true); $this->setErrorMsg($e->getMessage()); @@ -343,14 +349,17 @@ class Misc $_type = $_connection->getDriver($platform); if (null === $_type ?? null) { - $errormsg = \sprintf($lang['strpostgresqlversionnotsupported'], $this->postgresqlMinVer); + $errormsg = \sprintf( + $lang['strpostgresqlversionnotsupported'], + $this->postgresqlMinVer + ); $this->container->addError($errormsg); $this->setErrorMsg($errormsg); return null; } /** - * @var \class-string<\PHPPgAdmin\Database\Postgres> + * @var \class-string */ $_type = '\\PHPPgAdmin\\Database\\' . $_type; @@ -373,8 +382,7 @@ class Misc } } - if ( - false !== $this->getNoDBConnection() || + if (false !== $this->getNoDBConnection() || null === $this->getDatabase() || !isset($_REQUEST['schema']) ) { @@ -397,9 +405,9 @@ class Misc * @param string $database * @param string $server_id * - * @return null|\PHPPgAdmin\Connection + * @return null|Connection */ - public function getConnection(string $database = '', $server_id = null): ?\PHPPgAdmin\Connection + public function getConnection(string $database = '', $server_id = null): ?Connection { $lang = $this->lang; @@ -421,34 +429,32 @@ class Misc 'administrator' => 'administrator', ]; - if ( - isset($server_info['username']) && + if (isset($server_info['username']) && \array_key_exists(\mb_strtolower($server_info['username']), $bad_usernames) ) { $msg = $lang['strlogindisallowed']; - throw new \Exception($msg); + throw new Exception($msg); } - if ( - !isset($server_info['password']) || + if (!isset($server_info['password']) || '' === $server_info['password'] ) { $msg = $lang['strlogindisallowed']; - throw new \Exception($msg); + throw new Exception($msg); } } try { // Create the connection object and make the connection - $this->_connection = new \PHPPgAdmin\Connection( + $this->_connection = new Connection( $server_info, $database_to_use, $this->container ); - } catch (\PHPPgAdmin\ADOdbException $e) { - throw new \Exception($lang['strloginfailed']); + } catch (ADOdbException $e) { + throw new Exception($lang['strloginfailed']); } } @@ -483,8 +489,7 @@ class Misc $server_string = $info['host'] . ':' . $info['port'] . ':' . $info['sslmode']; $server_sha = \sha1($server_string); - if ( - $this->_server_id === $server_string || + if ($this->_server_id === $server_string || $this->_server_id === $server_sha ) { if (isset($info['username'])) { @@ -552,8 +557,7 @@ class Misc $server_info = $this->getServerInfo($this->_server_id); - if ( - null !== $this->_server_id && + if (null !== $this->_server_id && isset($server_info['useonlydefaultdb']) && true === $server_info['useonlydefaultdb'] && isset($server_info['defaultdb']) @@ -803,7 +807,10 @@ class Misc $server = $this->container->server ? $this->container->server : $_REQUEST['server']; $database = $this->container->database ? $this->container->database : $_REQUEST['database']; - $_SESSION['history'][$server][$database]["{$time}"] = [ + $_SESSION['history'][$server][$database][\sprintf( + '%s', + $time + )] = [ 'query' => $script, 'paginate' => !isset($_REQUEST['paginate']) ? 'f' : 't', 'queryid' => $time, diff --git a/src/classes/ViewManager.php b/src/classes/ViewManager.php index 4b906c05..e78a646c 100644 --- a/src/classes/ViewManager.php +++ b/src/classes/ViewManager.php @@ -6,21 +6,26 @@ namespace PHPPgAdmin; +use PHPPgAdmin\Traits\HelperTrait; +use Psr\Http\Message\ResponseInterface; +use Slim\Http\Response; +use Slim\Views\Twig; +use Slim\Views\TwigExtension; + /** * @file * Class to hold various commonly used functions * * Id: Misc.php,v 1.171 2008/03/17 21:35:48 ioguix Exp $ */ - /** * Class to hold various commonly used functions. * * Release: Misc.php,v 1.171 2008/03/17 21:35:48 ioguix Exp $ */ -class ViewManager extends \Slim\Views\Twig +class ViewManager extends Twig { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; /** * @var array @@ -70,12 +75,12 @@ class ViewManager extends \Slim\Views\Twig public $postgresqlMinVer; /** - * @var \PHPPgAdmin\Misc + * @var Misc */ public $misc; /** - * @var \PHPPgAdmin\ContainerUtils + * @var ContainerUtils */ protected $container; @@ -122,11 +127,11 @@ class ViewManager extends \Slim\Views\Twig private static $instance; /** - * @param mixed $path - * @param mixed $settings - * @param \PHPPgAdmin\ContainerUtils $c + * @param mixed $path + * @param mixed $settings + * @param ContainerUtils $c */ - public function __construct($path, $settings, \PHPPgAdmin\ContainerUtils $c) + public function __construct($path, $settings, ContainerUtils $c) { $this->lang = $c->get('lang'); $this->conf = $c->get('conf'); @@ -139,7 +144,7 @@ class ViewManager extends \Slim\Views\Twig // Instantiate and add Slim specific extension $basePath = \rtrim(\str_ireplace($base_script_trailing_str, '', $request_basepath), '/'); - $this->addExtension(new \Slim\Views\TwigExtension($c['router'], $basePath)); + $this->addExtension(new TwigExtension($c['router'], $basePath)); $this->offsetSet('subfolder', \containerInstance()->subFolder); $this->offsetSet('theme', $this->misc->getConf('theme')); @@ -194,7 +199,7 @@ class ViewManager extends \Slim\Views\Twig return $this->_reload_browser; } - public function maybeRenderIframes(\Slim\Http\Response $response, string $subject, string $query_string): \Psr\Http\Message\ResponseInterface + public function maybeRenderIframes(Response $response, string $subject, string $query_string): ResponseInterface { $c = $this->getContainer(); @@ -234,8 +239,7 @@ class ViewManager extends \Slim\Views\Twig // Check if theme is in $_REQUEST, $_SESSION or $_COOKIE // 1.- First priority: $_REQUEST, this happens when you use the selector - if ( - \array_key_exists('theme', $_REQUEST) && + if (\array_key_exists('theme', $_REQUEST) && \array_key_exists($_REQUEST['theme'], $themefolders) ) { $_theme = $_REQUEST['theme']; @@ -246,14 +250,12 @@ class ViewManager extends \Slim\Views\Twig \array_key_exists($_COOKIE['ppaTheme'], $themefolders) ) { $_theme = $_server_info['theme']; - } elseif ( - isset($_SESSION) && \array_key_exists('ppaTheme', $_SESSION) && + } elseif (isset($_SESSION) && \array_key_exists('ppaTheme', $_SESSION) && \array_key_exists($_SESSION['ppaTheme'], $themefolders) ) { // otherwise check $_SESSION $_theme = $_SESSION['ppaTheme']; - } elseif ( - \array_key_exists('ppaTheme', $_COOKIE) && + } elseif (\array_key_exists('ppaTheme', $_COOKIE) && \array_key_exists($_COOKIE['ppaTheme'], $themefolders) ) { // oterwise check $_COOKIE @@ -356,30 +358,100 @@ class ViewManager extends \Slim\Views\Twig $theme = $this->conf['theme']; $path = 'assets/images/themes'; - $default_icon = \sprintf('%s/%s/default/DisconnectedServer.png', \containerInstance()->subFolder, $path); + $default_icon = \sprintf( + '%s/%s/default/DisconnectedServer.png', + \containerInstance()->subFolder, + $path + ); - if (\is_readable(\sprintf('%s/%s/%s/%s.png', \containerInstance()->BASE_PATH, $path, $theme, $icon))) { - return \sprintf('%s/%s/%s/%s.png', \containerInstance()->subFolder, $path, $theme, $icon); + if (\is_readable(\sprintf( + '%s/%s/%s/%s.png', + \containerInstance()->BASE_PATH, + $path, + $theme, + $icon + ))) { + return \sprintf( + '%s/%s/%s/%s.png', + \containerInstance()->subFolder, + $path, + $theme, + $icon + ); } - if (\is_readable(\sprintf('%s/%s/%s/%s.gif', \containerInstance()->BASE_PATH, $path, $theme, $icon))) { - return \sprintf('%s/%s/%s/%s.gif', \containerInstance()->subFolder, $path, $theme, $icon); + if (\is_readable(\sprintf( + '%s/%s/%s/%s.gif', + \containerInstance()->BASE_PATH, + $path, + $theme, + $icon + ))) { + return \sprintf( + '%s/%s/%s/%s.gif', + \containerInstance()->subFolder, + $path, + $theme, + $icon + ); } - if (\is_readable(\sprintf('%s/%s/%s/%s.ico', \containerInstance()->BASE_PATH, $path, $theme, $icon))) { - return \sprintf('%s/%s/%s/%s.ico', \containerInstance()->subFolder, $path, $theme, $icon); + if (\is_readable(\sprintf( + '%s/%s/%s/%s.ico', + \containerInstance()->BASE_PATH, + $path, + $theme, + $icon + ))) { + return \sprintf( + '%s/%s/%s/%s.ico', + \containerInstance()->subFolder, + $path, + $theme, + $icon + ); } - if (\is_readable(\sprintf('%s/%s/default/%s.png', \containerInstance()->BASE_PATH, $path, $icon))) { - return \sprintf('%s/%s/default/%s.png', \containerInstance()->subFolder, $path, $icon); + if (\is_readable(\sprintf( + '%s/%s/default/%s.png', + \containerInstance()->BASE_PATH, + $path, + $icon + ))) { + return \sprintf( + '%s/%s/default/%s.png', + \containerInstance()->subFolder, + $path, + $icon + ); } - if (\is_readable(\sprintf('%s/%s/default/%s.gif', \containerInstance()->BASE_PATH, $path, $icon))) { - return \sprintf('%s/%s/default/%s.gif', \containerInstance()->subFolder, $path, $icon); + if (\is_readable(\sprintf( + '%s/%s/default/%s.gif', + \containerInstance()->BASE_PATH, + $path, + $icon + ))) { + return \sprintf( + '%s/%s/default/%s.gif', + \containerInstance()->subFolder, + $path, + $icon + ); } - if (\is_readable(\sprintf('%s/%s/default/%s.ico', \containerInstance()->BASE_PATH, $path, $icon))) { - return \sprintf('%s/%s/default/%s.ico', \containerInstance()->subFolder, $path, $icon); + if (\is_readable(\sprintf( + '%s/%s/default/%s.ico', + \containerInstance()->BASE_PATH, + $path, + $icon + ))) { + return \sprintf( + '%s/%s/default/%s.ico', + \containerInstance()->subFolder, + $path, + $icon + ); } return $default_icon; @@ -439,7 +511,7 @@ class ViewManager extends \Slim\Views\Twig return '\PHPPgAdmin\Controller\\' . \ucfirst($subject) . 'Controller'; } - private function getContainer(): \PHPPgAdmin\ContainerUtils + private function getContainer(): ContainerUtils { return $this->container; } @@ -469,11 +541,20 @@ class ViewManager extends \Slim\Views\Twig continue; } - $folderpath = \sprintf('%s%s%s', \containerInstance()->THEME_PATH, \DIRECTORY_SEPARATOR, $foldername); - $stylesheet = \sprintf('%s%s%s', $folderpath, \DIRECTORY_SEPARATOR, 'global.css'); + $folderpath = \sprintf( + '%s%s%s', + \containerInstance()->THEME_PATH, + \DIRECTORY_SEPARATOR, + $foldername + ); + $stylesheet = \sprintf( + '%s%s%s', + $folderpath, + \DIRECTORY_SEPARATOR, + 'global.css' + ); // if $folderpath if indeed a folder and contains a global.css file, then it's a theme - if ( - \is_dir($folderpath) && + if (\is_dir($folderpath) && \is_file($stylesheet) ) { $themefolders[$foldername] = $folderpath; diff --git a/src/controllers/AcinsertController.php b/src/controllers/AcinsertController.php index e687ceb1..7194e380 100644 --- a/src/controllers/AcinsertController.php +++ b/src/controllers/AcinsertController.php @@ -19,7 +19,10 @@ class AcinsertController extends BaseController $data = $this->misc->getDatabaseAccessor(); if (isset($_POST['offset'])) { - $offset = " OFFSET {$_POST['offset']}"; + $offset = \sprintf( + ' OFFSET %s', + $_POST['offset'] + ); } else { $_POST['offset'] = 0; $offset = ' OFFSET 0'; @@ -40,10 +43,18 @@ class AcinsertController extends BaseController $f_attname = $fkeynames[$_POST['fattpos'][0]]; $data->fieldClean($f_attname); - $q = "SELECT * - FROM \"{$f_schema}\".\"{$f_table}\" - WHERE \"{$f_attname}\"::text LIKE '{$_POST['fvalue']}%' - ORDER BY \"{$f_attname}\" LIMIT 12 {$offset};"; + $q = \sprintf( + 'SELECT * + FROM "%s"."%s" + WHERE "%s"::text LIKE \'%s%\' + ORDER BY "%s" LIMIT 12 %s;', + $f_schema, + $f_table, + $f_attname, + $_POST['fvalue'], + $f_attname, + $offset + ); $res = $data->selectSet($q); @@ -71,7 +82,10 @@ class AcinsertController extends BaseController $finfo = $res->fetchField($j++); if (\in_array($n, $fkeynames, true)) { - echo "", + echo \sprintf( + '', + $keyspos[$n] + ), $this->misc->printVal($v, $finfo->type, ['clip' => 'collapsed']), ''; } else { @@ -104,7 +118,15 @@ class AcinsertController extends BaseController echo $js . ''; } else { - \printf("

{$this->lang['strnofkref']}

", "\"{$_POST['f_schema']}\".\"{$_POST['f_table']}\".\"{$fkeynames[$_POST['fattpos']]}\""); + \printf(\sprintf( + '

%s

', + $this->lang['strnofkref'] + ), \sprintf( + '"%s"."%s"."%s"', + $_POST['f_schema'], + $_POST['f_table'], + $fkeynames[$_POST['fattpos']] + )); if ($_POST['offset']) { echo 'Prev <<'; diff --git a/src/controllers/AggregatesController.php b/src/controllers/AggregatesController.php index 384152f7..aca33ca1 100644 --- a/src/controllers/AggregatesController.php +++ b/src/controllers/AggregatesController.php @@ -101,7 +101,10 @@ class AggregatesController extends BaseController 'aggrname' => [ 'title' => $this->lang['strname'], 'field' => Decorator::field('proname'), - 'url' => "redirect.php?subject=aggregate&action=properties&{$this->misc->href}&", + 'url' => \sprintf( + 'redirect.php?subject=aggregate&action=properties&%s&', + $this->misc->href + ), 'vars' => ['aggrname' => 'proname', 'aggrtype' => 'proargtypes'], ], 'aggrtype' => [ @@ -278,36 +281,96 @@ class AggregatesController extends BaseController echo '
' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['straggrbasetype'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['straggrsfunc'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['straggrstype'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['straggrffunc'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['straggrinitcond'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['straggrsortop'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
{$this->lang['strname']}data->_maxNameLen}\" value=\"", + echo \sprintf( + '
%s
{$this->lang['straggrbasetype']}data->_maxNameLen}\" value=\"", + echo \sprintf( + '
%s
{$this->lang['straggrsfunc']}data->_maxNameLen}\" value=\"", + echo \sprintf( + '
%s
{$this->lang['straggrstype']}data->_maxNameLen}\" value=\"", + echo \sprintf( + '
%s
{$this->lang['straggrffunc']}data->_maxNameLen}\" value=\"", + echo \sprintf( + '
%s
{$this->lang['straggrinitcond']}data->_maxNameLen}\" value=\"", + echo \sprintf( + '
%s
{$this->lang['straggrsortop']}data->_maxNameLen}\" value=\"", + echo \sprintf( + '
%s
{$this->lang['strcomment']}
%s
' . \PHP_EOL; echo '

' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

%s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

%s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
' . \PHP_EOL; } @@ -365,15 +428,30 @@ class AggregatesController extends BaseController if (0 < $aggrdata->recordCount()) { // Output table header echo '' . \PHP_EOL; - echo "\t\n\t\t"; - echo ""; - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ); + echo \sprintf( + '', + $this->lang['strowner'] + ); + echo \sprintf( + ' + ', + $this->lang['strschema'] + ) . \PHP_EOL; // Display aggregate's name, owner and schema echo "\t\n\t\t'; echo ''; echo '\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
{$this->lang['strname']}{$this->lang['strowner']}{$this->lang['strschema']}
%s%s%s
{$this->lang['strcomment']}
%s
' . \PHP_EOL; @@ -384,11 +462,24 @@ class AggregatesController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

%s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

%s', + $this->lang['strcancel'], + \PHP_EOL + ); } else { - echo "

{$this->lang['strnodata']}

" . \PHP_EOL; - echo "lang['strback']}\" />

" . \PHP_EOL; + echo \sprintf( + '

%s

', + $this->lang['strnodata'] + ) . \PHP_EOL; + echo \sprintf( + '

', + $this->lang['strback'] + ) . \PHP_EOL; } echo '' . \PHP_EOL; } @@ -406,16 +497,29 @@ class AggregatesController extends BaseController $this->printTrail('aggregate'); $this->printTitle($this->lang['strdrop'], 'pg.aggregate.drop'); - echo '

', \sprintf($this->lang['strconfdropaggregate'], \htmlspecialchars($_REQUEST['aggrname'])), '

' . \PHP_EOL; + echo '

', \sprintf( + $this->lang['strconfdropaggregate'], + \htmlspecialchars($_REQUEST['aggrname']) + ), '

' . \PHP_EOL; echo '
' . \PHP_EOL; - echo "

" . \PHP_EOL; + echo \sprintf( + '

', + $this->lang['strcascade'] + ) . \PHP_EOL; echo '

' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

%s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

%s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
' . \PHP_EOL; } else { $status = $this->data->dropAggregate($_POST['aggrname'], $_POST['aggrtype'], isset($_POST['cascade'])); @@ -447,30 +551,69 @@ class AggregatesController extends BaseController if (0 < $aggrdata->recordCount()) { // Display aggregate's info echo '' . \PHP_EOL; - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['straggrbasetype'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['straggrsfunc'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['straggrstype'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['straggrffunc'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['straggrinitcond'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; if ($this->data->hasAggregateSortOp()) { - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['straggrsortop'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; } - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strowner'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; - echo "\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\n" . \PHP_EOL; echo '
{$this->lang['strname']}
%s", \htmlspecialchars($_REQUEST['aggrname']), "
{$this->lang['straggrbasetype']}
%s", \htmlspecialchars($_REQUEST['aggrtype']), "
{$this->lang['straggrsfunc']}
%s", \htmlspecialchars($aggrdata->fields['aggtransfn']), "
{$this->lang['straggrstype']}
%s", \htmlspecialchars($aggrdata->fields['aggstype']), "
{$this->lang['straggrffunc']}
%s", \htmlspecialchars($aggrdata->fields['aggfinalfn']), "
{$this->lang['straggrinitcond']}
%s", \htmlspecialchars($aggrdata->fields['agginitval']), "
{$this->lang['straggrsortop']}
%s", \htmlspecialchars($aggrdata->fields['aggsortop']), "
{$this->lang['strowner']}
%s", \htmlspecialchars($aggrdata->fields['usename']), "
{$this->lang['strcomment']}
%s", $this->misc->printVal($aggrdata->fields['aggrcomment']), "
' . \PHP_EOL; } else { - echo "

{$this->lang['strnodata']}

" . \PHP_EOL; + echo \sprintf( + '

%s

', + $this->lang['strnodata'] + ) . \PHP_EOL; } $navlinks = [ diff --git a/src/controllers/AlldbController.php b/src/controllers/AlldbController.php index c0cc8671..65c65461 100644 --- a/src/controllers/AlldbController.php +++ b/src/controllers/AlldbController.php @@ -7,13 +7,14 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\ExportTrait; /** * Base controller class. */ class AlldbController extends BaseController { - use \PHPPgAdmin\Traits\ExportTrait; + use ExportTrait; public $table_place = 'alldb-databases'; @@ -269,9 +270,15 @@ class AlldbController extends BaseController echo '
' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; if ($data->hasAlterDatabaseOwner() && $data->isSuperUser()) { @@ -281,7 +288,10 @@ class AlldbController extends BaseController $owner = isset($rs->fields['usename']) ? $rs->fields['usename'] : ''; $users = $data->getUsers(); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcomment'] + ) . \PHP_EOL; echo '' . \PHP_EOL; @@ -306,8 +319,14 @@ class AlldbController extends BaseController echo $this->view->form; echo '' . \PHP_EOL; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { $this->coalesceArr($_POST, 'owner', ''); @@ -345,11 +364,17 @@ class AlldbController extends BaseController if (isset($_REQUEST['ma'])) { foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

', \sprintf($this->lang['strconfdropdatabase'], $this->misc->printVal($a['database'])), '

' . \PHP_EOL; + echo '

', \sprintf( + $this->lang['strconfdropdatabase'], + $this->misc->printVal($a['database']) + ), '

' . \PHP_EOL; \printf('', \htmlspecialchars($a['database'])); } } else { - echo '

', \sprintf($this->lang['strconfdropdatabase'], $this->misc->printVal($_REQUEST['dropdatabase'])), '

' . \PHP_EOL; + echo '

', \sprintf( + $this->lang['strconfdropdatabase'], + $this->misc->printVal($_REQUEST['dropdatabase']) + ), '

' . \PHP_EOL; echo '' . \PHP_EOL; // END if multi drop } @@ -357,8 +382,14 @@ class AlldbController extends BaseController echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo "\n"; // END confirm } else { //If multi drop @@ -438,11 +469,22 @@ class AlldbController extends BaseController echo '' . \PHP_EOL; echo '
{$this->lang['strname']}
%s'; - echo "_maxNameLen}\" value=\"", + echo \sprintf( + '
{$this->lang['strowner']}
%s
{$this->lang['strcomment']}
%s'; echo '
' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strtemplatedb'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; // ENCODING - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strencoding'] + ) . \PHP_EOL; echo "\t\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcollation'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; // LC_CTYPE - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strctype'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; @@ -498,7 +558,11 @@ class AlldbController extends BaseController // Tablespace (if there are any) if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strtablespace'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; @@ -515,7 +585,11 @@ class AlldbController extends BaseController // Comments (if available) if ($data->hasSharedComments()) { - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; } @@ -523,8 +597,15 @@ class AlldbController extends BaseController echo '
{$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
%s
{$this->lang['strtemplatedb']}
%s" . \PHP_EOL; echo "\t\t\t
{$this->lang['strencoding']}
%s" . \PHP_EOL; echo "\t\t\t
{$this->lang['strcollation']}
%s" . \PHP_EOL; echo "\t\t\t' . \PHP_EOL; echo "\t\t
{$this->lang['strctype']}
%s" . \PHP_EOL; echo "\t\t\t' . \PHP_EOL; echo "\t\t
{$this->lang['strtablespace']}
%s\n\t\t\t\n\t\t
{$this->lang['strcomment']}
%s
' . \PHP_EOL; echo '

' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

%s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

%s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } diff --git a/src/controllers/BaseController.php b/src/controllers/BaseController.php index b94ec4ef..88d188ef 100644 --- a/src/controllers/BaseController.php +++ b/src/controllers/BaseController.php @@ -6,14 +6,25 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\ArrayRecordSet; +use PHPPgAdmin\ContainerUtils; +use PHPPgAdmin\Misc; +use PHPPgAdmin\Traits\HelperTrait; +use PHPPgAdmin\ViewManager; use PHPPgAdmin\XHtml; +use PHPPgAdmin\XHtml\HTMLFooterController; +use PHPPgAdmin\XHtml\HTMLHeaderController; +use PHPPgAdmin\XHtml\HTMLNavbarController; +use PHPPgAdmin\XHtml\HTMLTableController; +use Slim\Http\Response; /** * Base controller class. */ class BaseController { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; public $appLangFiles = []; @@ -50,12 +61,12 @@ class BaseController public $msg = ''; /** - * @var \PHPPgAdmin\ViewManager + * @var ViewManager */ public $view; /** - * @var \PHPPgAdmin\Misc + * @var Misc */ public $misc; @@ -64,7 +75,7 @@ class BaseController public $phpMinVer; /** - * @var \PHPPgAdmin\ContainerUtils + * @var ContainerUtils */ protected $container; @@ -113,10 +124,10 @@ class BaseController /** * Constructs the base controller (common for almost all controllers). * - * @param \PHPPgAdmin\ContainerUtils $container the $app container - * @param bool $no_db_connection [optional] if true, sets $this->misc->setNoDBConnection(true); + * @param ContainerUtils $container the $app container + * @param bool $no_db_connection [optional] if true, sets $this->misc->setNoDBConnection(true); */ - public function __construct(\PHPPgAdmin\ContainerUtils $container) + public function __construct(ContainerUtils $container) { $this->container = $container; $this->lang = $container->get('lang'); @@ -207,12 +218,12 @@ class BaseController /** * Display a table of data. * - * @param \ADORecordSet|\PHPPgAdmin\ArrayRecordSet $tabledata a set of data to be formatted - * @param array $columns An associative array of columns to be displayed: - * @param array $actions Actions that can be performed on each object: - * @param string $place Place where the $actions are displayed. Like 'display-browse', - * @param string $nodata (optional) Message to display if data set is empty - * @param callable $pre_fn (optional) callback closure for each row + * @param ADORecordSet|ArrayRecordSet $tabledata a set of data to be formatted + * @param array $columns An associative array of columns to be displayed: + * @param array $actions Actions that can be performed on each object: + * @param string $place Place where the $actions are displayed. Like 'display-browse', + * @param string $nodata (optional) Message to display if data set is empty + * @param callable $pre_fn (optional) callback closure for each row * * @return string the html of the table */ @@ -230,7 +241,7 @@ class BaseController * * @param array $tabs The tabs * - * @return \PHPPgAdmin\ADORecordSet|\PHPPgAdmin\ArrayRecordSet filtered tabs in the form of an ArrayRecordSet + * @return ADORecordSet|ArrayRecordSet filtered tabs in the form of an ArrayRecordSet */ public function adjustTabsForTree(&$tabs) { @@ -242,12 +253,12 @@ class BaseController /** * Produce JSON data for the browser tree. * - * @param \PHPPgAdmin\ADORecordSet|\PHPPgAdmin\ArrayRecordSet $_treedata a set of records to populate the tree - * @param array $attrs Attributes for tree items - * @param string $section The section where the branch is linked in the tree - * @param bool $print either to return or echo the result + * @param ADORecordSet|ArrayRecordSet $_treedata a set of records to populate the tree + * @param array $attrs Attributes for tree items + * @param string $section The section where the branch is linked in the tree + * @param bool $print either to return or echo the result * - * @return \Slim\Http\Response|string the json rendered tree + * @return Response|string the json rendered tree */ public function printTree(&$_treedata, &$attrs, $section, $print = true) { @@ -273,10 +284,10 @@ class BaseController } /** - * @param (array|mixed)[][] $navlinks - * @param string $place - * @param array $env - * @param mixed $do_print + * @param (array[][]|mixed)[][] $navlinks + * @param string $place + * @param array $env + * @param mixed $do_print */ public function printNavLinks(array $navlinks, string $place, array $env = [], $do_print = true) { @@ -466,7 +477,7 @@ class BaseController public function printMsg($msg, $do_print = true) { $html = ''; - $msg = \htmlspecialchars(\PHPPgAdmin\ContainerUtils::br2ln($msg)); + $msg = \htmlspecialchars(ContainerUtils::br2ln($msg)); if ('' !== $msg) { $html .= '

' . \nl2br($msg) . '

' . \PHP_EOL; @@ -485,16 +496,19 @@ class BaseController { if (false === $this->misc->getNoDBConnection()) { if (null === $this->misc->getServerId()) { - $servers_controller = new \PHPPgAdmin\Controller\ServersController($this->container); + $servers_controller = new ServersController($this->container); $servers_controller->render(); } else { $_server_info = $this->misc->getServerInfo(); // Redirect to the login form if not logged in if (!isset($_server_info['username'])) { - $msg = \sprintf($this->lang['strlogoutmsg'], $_server_info['desc']); + $msg = \sprintf( + $this->lang['strlogoutmsg'], + $_server_info['desc'] + ); - $servers_controller = new \PHPPgAdmin\Controller\ServersController($container); + $servers_controller = new ServersController($container); $servers_controller->render(); } @@ -505,7 +519,7 @@ class BaseController private function _getTableController() { if (null === $this->_table_controller) { - $this->_table_controller = new XHtml\HTMLTableController($this->getContainer(), $this->controller_name); + $this->_table_controller = new HTMLTableController($this->getContainer(), $this->controller_name); } return $this->_table_controller; @@ -514,7 +528,7 @@ class BaseController private function _getFooterController() { if (null === $this->_footer_controller) { - $this->_footer_controller = new XHtml\HTMLFooterController($this->getContainer(), $this->controller_name); + $this->_footer_controller = new HTMLFooterController($this->getContainer(), $this->controller_name); } return $this->_footer_controller; @@ -523,7 +537,7 @@ class BaseController private function _getHeaderController() { if (null === $this->_header_controller) { - $this->_header_controller = new XHtml\HTMLHeaderController($this->getContainer(), $this->controller_name); + $this->_header_controller = new HTMLHeaderController($this->getContainer(), $this->controller_name); } return $this->_header_controller; @@ -532,7 +546,7 @@ class BaseController private function _getNavbarController() { if (null === $this->_trail_controller) { - $this->_trail_controller = new XHtml\HTMLNavbarController($this->getContainer(), $this->controller_name); + $this->_trail_controller = new HTMLNavbarController($this->getContainer(), $this->controller_name); } return $this->_trail_controller; diff --git a/src/controllers/BrowserController.php b/src/controllers/BrowserController.php index 60c35221..3c47284d 100644 --- a/src/controllers/BrowserController.php +++ b/src/controllers/BrowserController.php @@ -6,6 +6,7 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\ArrayRecordSet; use PHPPgAdmin\Decorators\Decorator; /** @@ -65,7 +66,7 @@ class BrowserController extends BaseController */ public function doTree() { - $treedata = new \PHPPgAdmin\ArrayRecordSet([]); + $treedata = new ArrayRecordSet([]); $reqvars = []; $action = Decorator::url('/src/views/servers'); $branch = Decorator::url('/src/views/servers', $reqvars, ['action' => 'tree']); diff --git a/src/controllers/ColpropertiesController.php b/src/controllers/ColpropertiesController.php index 7831953a..22caeec2 100644 --- a/src/controllers/ColpropertiesController.php +++ b/src/controllers/ColpropertiesController.php @@ -78,7 +78,10 @@ class ColpropertiesController extends BaseController }; if (empty($_REQUEST['column'])) { - $msg .= "
{$this->lang['strnoobjects']}"; + $msg .= \sprintf( + '
%s', + $this->lang['strnoobjects'] + ); } $this->printTrail('column'); @@ -242,15 +245,34 @@ class ColpropertiesController extends BaseController // Output table header echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; if ($data->hasAlterColumnType()) { - echo "" . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strtype'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strlength'] + ) . \PHP_EOL; } else { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strtype'] + ) . \PHP_EOL; } - echo "\n\n" . \PHP_EOL; + echo \sprintf( + ' + +', + $this->lang['strnotnull'], + $this->lang['strdefault'], + $this->lang['strcomment'] + ) . \PHP_EOL; $column = $data->getTableAttributes($_REQUEST['table'], $_REQUEST['column']); $column->fields['attnotnull'] = $data->phpBool($column->fields['attnotnull']); @@ -287,7 +309,10 @@ class ColpropertiesController extends BaseController } // Column name - echo "' . \PHP_EOL; // Column type @@ -318,7 +343,10 @@ class ColpropertiesController extends BaseController $predefined_size_types = \array_intersect($data->predefined_size_types, $types_for_js); foreach ($predefined_size_types as $value) { - $escaped_predef_types[] = "'{$value}'"; + $escaped_predef_types[] = \sprintf( + '\'%s\'', + $value + ); } echo '
{$this->lang['strname']}
%s{$this->lang['strtype']}{$this->lang['strlength']}%s%s{$this->lang['strtype']}%s{$this->lang['strnotnull']}{$this->lang['strdefault']}{$this->lang['strcomment']}
%s%s%s
_maxNameLen}\" value=\"", + echo \sprintf( + '
' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo '' . \PHP_EOL; echo '' . \PHP_EOL; @@ -352,8 +384,15 @@ class ColpropertiesController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; } - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

%s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

%s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; echo '" . \PHP_EOL; @@ -388,10 +427,16 @@ class ColpropertiesController extends BaseController $_REQUEST['column'] = $_REQUEST['field']; $this->view->setReloadBrowser(true); } - $this->doDefault($sql . "
{$this->lang['strcolumnaltered']}"); + $this->doDefault($sql . \sprintf( + '
%s', + $this->lang['strcolumnaltered'] + )); } else { $_REQUEST['stage'] = 1; - $this->doAlter($sql . "
{$this->lang['strcolumnalteredbad']}"); + $this->doAlter($sql . \sprintf( + '
%s', + $this->lang['strcolumnalteredbad'] + )); return; } @@ -399,7 +444,10 @@ class ColpropertiesController extends BaseController break; default: - echo "

{$this->lang['strinvalidparam']}

" . \PHP_EOL; + echo \sprintf( + '

%s

', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } } } diff --git a/src/controllers/ConstraintsController.php b/src/controllers/ConstraintsController.php index b3cbfb98..3b16a8c2 100644 --- a/src/controllers/ConstraintsController.php +++ b/src/controllers/ConstraintsController.php @@ -7,13 +7,17 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\FormTrait; +use PHPPgAdmin\XHtml\XHtmlButton; +use PHPPgAdmin\XHtml\XHtmlOption; +use PHPPgAdmin\XHtml\XHtmlSelect; /** * Base controller class. */ class ConstraintsController extends BaseController { - use \PHPPgAdmin\Traits\FormTrait; + use FormTrait; /** * Default method to render the controller according to the action parameter. @@ -250,38 +254,51 @@ class ConstraintsController extends BaseController $attrs = $data->getTableAttributes($_REQUEST['table']); $tables = $data->getAllTables(); - $selColumns = new \PHPPgAdmin\XHtml\XHtmlSelect('TableColumnList', true, 10); + $selColumns = new XHtmlSelect('TableColumnList', true, 10); $selColumns->set_style('width: 15em;'); if (0 < $attrs->recordCount()) { while (!$attrs->EOF) { - $xmloption = new \PHPPgAdmin\XHtml\XHtmlOption($attrs->fields['attname']); + $xmloption = new XHtmlOption($attrs->fields['attname']); $selColumns->add($xmloption); $attrs->moveNext(); } } - $selIndex = new \PHPPgAdmin\XHtml\XHtmlSelect('IndexColumnList[]', true, 10); + $selIndex = new XHtmlSelect('IndexColumnList[]', true, 10); $selIndex->set_style('width: 15em;'); $selIndex->set_attribute('id', 'IndexColumnList'); - $buttonAdd = new \PHPPgAdmin\XHtml\XHtmlButton('add', '>>'); + $buttonAdd = new XHtmlButton('add', '>>'); $buttonAdd->set_attribute('onclick', 'buttonPressed(this);'); $buttonAdd->set_attribute('type', 'button'); - $buttonRemove = new \PHPPgAdmin\XHtml\XHtmlButton('remove', '<<'); + $buttonRemove = new XHtmlButton('remove', '<<'); $buttonRemove->set_attribute('onclick', 'buttonPressed(this);'); $buttonRemove->set_attribute('type', 'button'); echo '
' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; - echo "" . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + '', + $data->_maxNameLen + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strtablecolumnlist'], + $this->lang['strfkcolumnlist'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo ""; + echo \sprintf( + '', + $this->lang['strfktarget'] + ); echo ''; echo '
{$this->lang['strname']}
_maxNameLen}\" />
{$this->lang['strtablecolumnlist']} {$this->lang['strfkcolumnlist']}
%s
%s %s
' . $selColumns->fetch() . '' . $buttonRemove->fetch() . $buttonAdd->fetch() . '' . $selIndex->fetch() . '
{$this->lang['strfktarget']}
%s
' . \PHP_EOL; - echo ""; + echo \sprintf( + '', + $this->lang['strname'] + ); echo ''; echo '"; - echo "" . \PHP_EOL; + \sprintf( + '" size="32" maxlength="%s" />', + $data->_maxNameLen + ); + echo \sprintf( + '', + $this->lang['strtablecolumnlist'], + $this->lang['strindexcolumnlist'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo ''; echo '' . \PHP_EOL; // Tablespace (if there are any) if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { - echo ""; + echo \sprintf( + '', + $this->lang['strtablespace'] + ); echo '' . \PHP_EOL; @@ -469,7 +508,10 @@ class ConstraintsController extends BaseController ] ); - echo \sprintf('%s', \PHP_EOL); + echo \sprintf( + '%s', + \PHP_EOL + ); } /** @@ -542,10 +584,19 @@ class ConstraintsController extends BaseController echo '' . \PHP_EOL; echo '
{$this->lang['strname']}
%s
_maxNameLen}\" />
{$this->lang['strtablecolumnlist']} {$this->lang['strindexcolumnlist']}
%s %s
' . $selColumns->fetch() . '' . $buttonRemove->fetch() . $buttonAdd->fetch() . '' . $selIndex->fetch() . '
{$this->lang['strtablespace']}
%s
' . \PHP_EOL; - echo "" . \PHP_EOL; - echo "" . \PHP_EOL; - - echo "', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdefinition'] + ) . \PHP_EOL; + + echo \sprintf( + '' . \PHP_EOL; echo '' . \PHP_EOL; } @@ -571,9 +606,9 @@ class DisplayController extends BaseController /** * Print table rows. * - * @param \ADORecordSet $resultset The resultset - * @param array $fkey_information The fkey information - * @param bool $withOid either to display OIDs or not + * @param ADORecordSet $resultset The resultset + * @param array $fkey_information The fkey information + * @param bool $withOid either to display OIDs or not */ public function printTableRowCells(&$resultset, &$fkey_information, $withOid): void { @@ -634,9 +669,20 @@ class DisplayController extends BaseController echo '
{$this->lang['strname']}{$this->lang['strdefinition']}
_maxNameLen}\" value=\"", + echo \sprintf( + '
%s%s
(%s', \PHP_EOL); + echo \sprintf( + '%s', + \PHP_EOL + ); echo $this->getFormInputsAndButtons( [ @@ -615,7 +672,10 @@ class ConstraintsController extends BaseController ] ); - echo \sprintf('%s', \PHP_EOL); + echo \sprintf( + '%s', + \PHP_EOL + ); } /** @@ -682,53 +742,81 @@ class ConstraintsController extends BaseController $attrs = $data->getTableAttributes($_REQUEST['target']['tablename']); $data->setSchema($_REQUEST['schema']); - $selColumns = new \PHPPgAdmin\XHtml\XHtmlSelect('TableColumnList', true, 10); + $selColumns = new XHtmlSelect('TableColumnList', true, 10); $selColumns->set_style('width: 15em;'); if (0 < $attrs->recordCount()) { while (!$attrs->EOF) { - $xmloption = new \PHPPgAdmin\XHtml\XHtmlOption($attrs->fields['attname']); + $xmloption = new XHtmlOption($attrs->fields['attname']); $selColumns->add($xmloption); $attrs->moveNext(); } } - $selIndex = new \PHPPgAdmin\XHtml\XHtmlSelect('IndexColumnList[]', true, 10); + $selIndex = new XHtmlSelect('IndexColumnList[]', true, 10); $selIndex->set_style('width: 15em;'); $selIndex->set_attribute('id', 'IndexColumnList'); - $buttonAdd = new \PHPPgAdmin\XHtml\XHtmlButton('add', '>>'); + $buttonAdd = new XHtmlButton('add', '>>'); $buttonAdd->set_attribute('onclick', 'buttonPressed(this);'); $buttonAdd->set_attribute('type', 'button'); - $buttonRemove = new \PHPPgAdmin\XHtml\XHtmlButton('remove', '<<'); + $buttonRemove = new XHtmlButton('remove', '<<'); $buttonRemove->set_attribute('onclick', 'buttonPressed(this);'); $buttonRemove->set_attribute('type', 'button'); echo '
' . \PHP_EOL; echo '' . \PHP_EOL; - echo ""; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strfktarget'] + ); + echo \sprintf( + '', + $this->lang['strtablecolumnlist'], + $this->lang['strfkcolumnlist'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo ''; echo '' . \PHP_EOL; - echo ""; + echo \sprintf( + '', + $this->lang['stractions'] + ); echo ''; echo '" . \PHP_EOL : ''; + echo $display_action_column ? \sprintf( + '', + $this->lang['stractions'] + ) . \PHP_EOL : ''; // we show OIDs only if we are in TABLE or SELECT type browsing $this->printTableHeaderCells($resultset, $_gets, isset($object)); @@ -506,7 +528,10 @@ class DisplayController extends BaseController $trclass = ('data2' === $trclass) ? 'data1' : 'data2'; $buttonclass = ('opbutton2' === $buttonclass) ? 'opbutton1' : 'opbutton2'; - echo \sprintf('', $trclass) . \PHP_EOL; + echo \sprintf( + '', + $trclass + ) . \PHP_EOL; $this->_printResultsTableActionButtons($resultset, $key, $actions, $display_action_column, $buttonclass); @@ -517,7 +542,10 @@ class DisplayController extends BaseController } echo '
{$this->lang['strfktarget']}
{$this->lang['strtablecolumnlist']} {$this->lang['strfkcolumnlist']}
%s
%s %s
' . $selColumns->fetch() . '' . $buttonRemove->fetch() . $buttonAdd->fetch() . '' . $selIndex->fetch() . '
{$this->lang['stractions']}
%s
' . \PHP_EOL; // ON SELECT actions - echo "{$this->lang['stronupdate']} ', + $this->lang['stronupdate'] + ); foreach ($data->fkactions as $v) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $v + ) . \PHP_EOL; } echo '
' . \PHP_EOL; // ON DELETE actions - echo "{$this->lang['strondelete']} ', + $this->lang['strondelete'] + ); foreach ($data->fkactions as $v) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $v + ) . \PHP_EOL; } echo '
' . \PHP_EOL; @@ -737,7 +825,13 @@ class ConstraintsController extends BaseController echo '
' . \PHP_EOL; @@ -746,7 +840,13 @@ class ConstraintsController extends BaseController echo '
' . \PHP_EOL; @@ -755,7 +855,13 @@ class ConstraintsController extends BaseController echo '' . \PHP_EOL; @@ -775,6 +881,10 @@ class ConstraintsController extends BaseController $this->lang['strcancel'] ); - echo \sprintf('

%s%s', \PHP_EOL, \PHP_EOL); + echo \sprintf( + '

%s%s', + \PHP_EOL, + \PHP_EOL + ); } } diff --git a/src/controllers/DatabaseController.php b/src/controllers/DatabaseController.php index 1948be25..f620cfc8 100644 --- a/src/controllers/DatabaseController.php +++ b/src/controllers/DatabaseController.php @@ -7,14 +7,16 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\AdminTrait; +use PHPPgAdmin\Traits\ExportTrait; /** * Base controller class. */ class DatabaseController extends BaseController { - use \PHPPgAdmin\Traits\AdminTrait; - use \PHPPgAdmin\Traits\ExportTrait; + use AdminTrait; + use ExportTrait; public $table_place = 'database-variables'; @@ -47,13 +49,35 @@ class DatabaseController extends BaseController $scripts .= '' . \PHP_EOL; @@ -186,7 +210,10 @@ class DatabaseController extends BaseController echo '
' . \PHP_EOL; echo '

_maxNameLen}\" />" . \PHP_EOL; + \sprintf( + '" size="32" maxlength="%s" />', + $data->_maxNameLen + ) . \PHP_EOL; // Output list of filters. This is complex due to all the 'has' and 'conf' feature possibilities echo '' . \PHP_EOL; - echo "lang['strfind']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strfind'] + ) . \PHP_EOL; echo $this->view->form; echo '

' . \PHP_EOL; echo '

' . \PHP_EOL; @@ -268,7 +298,10 @@ class DatabaseController extends BaseController echo '

', $rs->recordCount(), ' ', $this->lang['strobjects'], '

' . \PHP_EOL; } else { - echo "

{$this->lang['strnoobjects']}

" . \PHP_EOL; + echo \sprintf( + '

%s

', + $this->lang['strnoobjects'] + ) . \PHP_EOL; } } @@ -343,7 +376,12 @@ class DatabaseController extends BaseController $this->printMsg($msg); if (0 === \mb_strlen($msg)) { - echo '
\"{$this-lang['strrefresh']}\" title=\"{$this->lang['strrefresh']}\"/> {$this->lang['strrefresh']}"; + echo '
%s %s', + $this->lang['strrefresh'], + $this->lang['strrefresh'], + $this->lang['strrefresh'] + ); } echo '
'; @@ -357,7 +395,10 @@ class DatabaseController extends BaseController // Display prepared transactions if ($data->hasPreparedXacts()) { - echo "

{$this->lang['strpreparedxacts']}

" . \PHP_EOL; + echo \sprintf( + '

%s

', + $this->lang['strpreparedxacts'] + ) . \PHP_EOL; $prep_xacts = $data->getPreparedXacts($_REQUEST['database']); $columns = [ @@ -385,7 +426,10 @@ class DatabaseController extends BaseController } // Fetch the processes from the database - echo "

{$this->lang['strprocesses']}

" . \PHP_EOL; + echo \sprintf( + '

%s

', + $this->lang['strprocesses'] + ) . \PHP_EOL; $processes = $data->getProcesses($_REQUEST['database']); $columns = [ @@ -526,7 +570,12 @@ class DatabaseController extends BaseController $this->printTrail('database'); $this->printTabs('database', 'locks'); - echo '
\"{$this-lang['strrefresh']}\" title=\"{$this->lang['strrefresh']}\"/> {$this->lang['strrefresh']}"; + echo '
%s %s', + $this->lang['strrefresh'], + $this->lang['strrefresh'], + $this->lang['strrefresh'] + ); echo '
'; $this->currentLocks(); @@ -545,9 +594,15 @@ class DatabaseController extends BaseController $this->printTrail('database'); $this->printTabs('database', 'sql'); - echo "

{$this->lang['strentersql']}

" . \PHP_EOL; + echo \sprintf( + '

%s

', + $this->lang['strentersql'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "

{$this->lang['strsql']}
" . \PHP_EOL; + echo \sprintf( + '

%s
', + $this->lang['strsql'] + ) . \PHP_EOL; echo '

' . \PHP_EOL; @@ -557,15 +612,30 @@ class DatabaseController extends BaseController $max_size = $this->misc->inisizeToBytes(\ini_get('upload_max_filesize')); if (\is_float($max_size) && 0 < $max_size) { - echo "

" . \PHP_EOL; - echo "

" . \PHP_EOL; + echo \sprintf( + '

', + $max_size + ) . \PHP_EOL; + echo \sprintf( + '

', + $this->lang['struploadscript'] + ) . \PHP_EOL; } } - echo '

" . \PHP_EOL; - echo "

lang['strexecute']}\" />" . \PHP_EOL; + echo '

', + $this->lang['strpaginate'] + ) . \PHP_EOL; + echo \sprintf( + '

', + $this->lang['strexecute'] + ) . \PHP_EOL; echo $this->view->form; - echo "lang['strreset']}\" />

" . \PHP_EOL; + echo \sprintf( + '

', + $this->lang['strreset'] + ) . \PHP_EOL; echo '' . \PHP_EOL; // Default focus @@ -587,13 +657,21 @@ class DatabaseController extends BaseController private function _highlight($string, $term) { - return \str_replace($term, "{$term}", $string); + return \str_replace($term, \sprintf( + '%s', + $term + ), $string); } private function _printTypeOption(string $curr) { $filter = $_REQUEST['filter']; - $optionhtml = \sprintf('%s' . \PHP_EOL; @@ -643,7 +721,10 @@ class DatabaseController extends BaseController switch ($curr) { case 'SCHEMA': $destination = $this->container->getDestinationWithLastTab('schema'); - echo '
  • '; echo $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']); echo '
  • ' . \PHP_EOL; @@ -651,33 +732,63 @@ class DatabaseController extends BaseController break; case 'TABLE': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; $destination = $this->container->getDestinationWithLastTab('table'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&table=', + echo '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'VIEW': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; $destination = $this->container->getDestinationWithLastTab('view'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&view=', + echo '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'SEQUENCE': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'COLUMNTABLE': echo '
  • '; $destination = $this->container->getDestinationWithLastTab('schema'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&table=", \urlencode($rs->fields['relname']), '&schema=', \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['relname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&table=', + echo '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->misc->printVal($rs->fields['relname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; @@ -685,9 +796,19 @@ class DatabaseController extends BaseController case 'COLUMNVIEW': echo '
  • '; $destination = $this->container->getDestinationWithLastTab('schema'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&view=", \urlencode($rs->fields['relname']), '&schema=', \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['relname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&view=', + echo '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->misc->printVal($rs->fields['relname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; @@ -695,111 +816,218 @@ class DatabaseController extends BaseController case 'INDEX': echo '
  • '; $destination = $this->container->getDestinationWithLastTab('schema'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo '', $this->misc->printVal($rs->fields['schemaname']), '.'; $destination = $this->container->getDestinationWithLastTab('table'); - echo 'misc->href}&table=", \urlencode($rs->fields['relname']), '&schema=', \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['relname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&table=', \urlencode($rs->fields['relname']), '">', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; + echo '', $this->misc->printVal($rs->fields['relname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '' . \PHP_EOL; break; case 'CONSTRAINTTABLE': echo '
  • '; $destination = $this->container->getDestinationWithLastTab('schema'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo '', $this->misc->printVal($rs->fields['schemaname']), '.'; $destination = $this->container->getDestinationWithLastTab('table'); - echo 'misc->href}&table=", \urlencode($rs->fields['relname']), '&schema=', \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['relname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&table=', + echo '', $this->misc->printVal($rs->fields['relname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'CONSTRAINTDOMAIN': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&domain=', \urlencode($rs->fields['relname']), '">', + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->misc->printVal($rs->fields['relname']), '.', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'TRIGGER': echo '
  • '; $destination = $this->container->getDestinationWithLastTab('schema'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo '', $this->misc->printVal($rs->fields['schemaname']), '.'; $destination = $this->container->getDestinationWithLastTab('table'); - echo 'misc->href}&table=", \urlencode($rs->fields['relname']), '&schema=', \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['relname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&table=', \urlencode($rs->fields['relname']), '">', + echo '', $this->misc->printVal($rs->fields['relname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'RULETABLE': echo '
  • '; $destination = $this->container->getDestinationWithLastTab('schema'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo '', $this->misc->printVal($rs->fields['schemaname']), '.'; $destination = $this->container->getDestinationWithLastTab('table'); - echo 'misc->href}&table=", \urlencode($rs->fields['relname']), '&schema=', \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['relname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&reltype=table&table=', + echo '', $this->misc->printVal($rs->fields['relname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'RULEVIEW': echo '
  • '; $destination = $this->container->getDestinationWithLastTab('schema'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo '', $this->misc->printVal($rs->fields['schemaname']), '.'; $destination = $this->container->getDestinationWithLastTab('view'); - echo 'misc->href}&view=", \urlencode($rs->fields['relname']), '&schema=', \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['relname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&reltype=view&view=', + echo '', $this->misc->printVal($rs->fields['relname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'FUNCTION': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&function=', + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'TYPE': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&type=', + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'DOMAIN': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&domain=', + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'OPERATOR': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '&operator=', + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'CONVERSION': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'LANGUAGE': - echo "
  • misc->href}\">", $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; + echo \sprintf( + '
  • ', + $this->misc->href + ), $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'AGGREGATE': echo '
  • '; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', + echo \sprintf( + '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; case 'OPCLASS': echo '
  • '; $destination = $this->container->getDestinationWithLastTab('schema'); - echo 'misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', $this->misc->printVal($rs->fields['schemaname']), '.'; - echo "misc->href}&schema=", \urlencode($rs->fields['schemaname']), '">', + echo '', $this->misc->printVal($rs->fields['schemaname']), '.'; + echo \sprintf( + '', $this->_highlight($this->misc->printVal($rs->fields['name']), $_REQUEST['term']), '
  • ' . \PHP_EOL; break; diff --git a/src/controllers/DataexportController.php b/src/controllers/DataexportController.php index fa079546..9e27c729 100644 --- a/src/controllers/DataexportController.php +++ b/src/controllers/DataexportController.php @@ -55,7 +55,7 @@ class DataexportController extends BaseController // instead of custom dump code if (!$forcemimic && $this->misc->isDumpEnabled() && ('copy' === $_REQUEST['d_format'] || 'sql' === $_REQUEST['d_format'])) { //$this->prtrace('DUMP ENABLED, d_format is', $_REQUEST['d_format']); - $dbexport_controller = new \PHPPgAdmin\Controller\DbexportController($this->getContainer()); + $dbexport_controller = new DbexportController($this->getContainer()); return $dbexport_controller->render(); } @@ -68,7 +68,7 @@ class DataexportController extends BaseController // Check to see if they have pg_dump set up and if they do, use that // instead of custom dump code if (!$forcemimic && $this->misc->isDumpEnabled()) { - $dbexport_controller = new \PHPPgAdmin\Controller\DbexportController($this->getContainer()); + $dbexport_controller = new DbexportController($this->getContainer()); return $dbexport_controller->render(); } @@ -79,7 +79,7 @@ class DataexportController extends BaseController // Check to see if they have pg_dump set up and if they do, use that // instead of custom dump code if (!$forcemimic && $this->misc->isDumpEnabled()) { - $dbexport_controller = new \PHPPgAdmin\Controller\DbexportController($this->getContainer()); + $dbexport_controller = new DbexportController($this->getContainer()); return $dbexport_controller->render(); } @@ -111,29 +111,48 @@ class DataexportController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "'; echo '
    {$this->lang['strformat']}:
    %s:
    ' . \PHP_EOL; - echo "

    {$this->lang['stroptions']}

    " . \PHP_EOL; - echo "

    " . \PHP_EOL; - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['stroptions'] + ) . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strshow'] + ) . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strdownload'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; if (isset($_REQUEST['table'])) { echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); } else { echo '' . \PHP_EOL; } @@ -145,7 +164,10 @@ class DataexportController extends BaseController echo '' . \PHP_EOL; } echo $this->view->form; - echo "lang['strexport']}\" />

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strexport'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; $this->printFooter(); @@ -292,7 +314,10 @@ class DataexportController extends BaseController private function _mimicCopy($data, $object, $oids, $rs): void { $data->fieldClean($object); - echo "COPY \"{$_REQUEST['table']}\""; + echo \sprintf( + 'COPY "%s"', + $_REQUEST['table'] + ); if ($oids) { echo ' WITH OIDS'; @@ -386,7 +411,11 @@ class DataexportController extends BaseController $finfo = $rs->fetchField($j++); $name = \htmlspecialchars($finfo->name); $type = \htmlspecialchars($finfo->type); - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $name, + $type + ) . \PHP_EOL; } echo "\t" . \PHP_EOL; } @@ -404,7 +433,13 @@ class DataexportController extends BaseController $v = \htmlspecialchars($v); } - echo "\t\t\t{$v}" . \PHP_EOL; + echo \sprintf( + ' %s', + $v + ) . \PHP_EOL; } echo "\t\t" . \PHP_EOL; $rs->moveNext(); @@ -419,7 +454,10 @@ class DataexportController extends BaseController $values = ''; while (!$rs->EOF) { - echo "INSERT INTO \"{$object}\" ("; + echo \sprintf( + 'INSERT INTO "%s" (', + $object + ); $first = true; $j = 0; @@ -432,9 +470,15 @@ class DataexportController extends BaseController $data->fieldClean($k); if ($first) { - echo "\"{$k}\""; + echo \sprintf( + '"%s"', + $k + ); } else { - echo ", \"{$k}\""; + echo \sprintf( + ', "%s"', + $k + ); } if (null !== $v) { @@ -449,13 +493,23 @@ class DataexportController extends BaseController } if ($first) { - $values = (null === $v ? 'NULL' : "'{$v}'"); + $values = (null === $v ? 'NULL' : \sprintf( + '\'%s\'', + $v + )); $first = false; } else { - $values .= ', ' . ((null === $v ? 'NULL' : "'{$v}'")); + $values .= ', ' . ((null === $v ? 'NULL' : \sprintf( + '\'%s\'', + $v + ))); } } - echo ") VALUES ({$values});\n"; + echo \sprintf( + ') VALUES (%s); +', + $values + ); $rs->moveNext(); } } @@ -487,10 +541,17 @@ class DataexportController extends BaseController } if ($first) { - echo "\"{$v}\""; + echo \sprintf( + '"%s"', + $v + ); $first = false; } else { - echo "{$sep}\"{$v}\""; + echo \sprintf( + '%s"%s"', + $sep, + $v + ); } } echo "\r\n"; @@ -505,10 +566,20 @@ class DataexportController extends BaseController } if ($first) { - echo (null === $v) ? '"\\N"' : "\"{$v}\""; + echo (null === $v) ? '"\\N"' : \sprintf( + '"%s"', + $v + ); $first = false; } else { - echo null === $v ? "{$sep}\"\\N\"" : "{$sep}\"{$v}\""; + echo null === $v ? \sprintf( + '%s"\N"', + $sep + ) : \sprintf( + '%s"%s"', + $sep, + $v + ); } } echo "\r\n"; diff --git a/src/controllers/DbexportController.php b/src/controllers/DbexportController.php index 1991f951..4c451dfc 100644 --- a/src/controllers/DbexportController.php +++ b/src/controllers/DbexportController.php @@ -131,7 +131,10 @@ class DbexportController extends BaseController switch ($subject) { case 'schema': // This currently works for 8.2+ (due to the orthoganl -t -n issue introduced then) - $cmd .= ' -n ' . $this->misc->escapeShellArg("\"{$f_schema}\""); + $cmd .= ' -n ' . $this->misc->escapeShellArg(\sprintf( + '"%s"', + $f_schema + )); break; case 'table': @@ -144,7 +147,11 @@ class DbexportController extends BaseController // Starting in 8.2, -n and -t are orthagonal, so we now schema qualify // the table name in the -t argument and quote both identifiers if (8.2 <= ((float) $version[1])) { - $cmd .= ' -t ' . $this->misc->escapeShellArg("\"{$f_schema}\".\"{$f_object}\""); + $cmd .= ' -t ' . $this->misc->escapeShellArg(\sprintf( + '"%s"."%s"', + $f_schema, + $f_object + )); } else { // If we are 7.4 or higher, assume they are using 7.4 pg_dump and // set dump schema as well. Also, mixed case dumping has been fixed diff --git a/src/controllers/DisplayController.php b/src/controllers/DisplayController.php index 88a6d921..2ab7e6c2 100644 --- a/src/controllers/DisplayController.php +++ b/src/controllers/DisplayController.php @@ -6,12 +6,17 @@ namespace PHPPgAdmin\Controller; +use ADORecordSet; +use Exception; +use PHPPgAdmin\ADOdbException; +use PHPPgAdmin\Traits\InsertEditRowTrait; + /** * Base controller class. */ class DisplayController extends BaseController { - use \PHPPgAdmin\Traits\InsertEditRowTrait; + use InsertEditRowTrait; /** * Default method to render the controller according to the action parameter. @@ -131,10 +136,17 @@ class DisplayController extends BaseController $f_schema = $_REQUEST['f_schema']; $f_table = $_REQUEST['f_table']; - $_REQUEST['query'] = "SELECT \"{$object}\", - count(*) AS \"count\" - FROM \"{$f_schema}\".\"{$f_table}\" - GROUP BY \"{$object}\" ORDER BY \"{$object}\""; + $_REQUEST['query'] = \sprintf( + 'SELECT "%s", + count(*) AS "count" + FROM "%s"."%s" + GROUP BY "%s" ORDER BY "%s"', + $object, + $f_schema, + $f_table, + $object, + $object + ); } elseif ('table' === $subject && !isset($_REQUEST['query'])) { $show = $this->getPostParam('show', []); $values = $this->getPostParam('values', []); @@ -200,7 +212,7 @@ class DisplayController extends BaseController $this->conf['max_rows'], $max_pages ); - } catch (\PHPPgAdmin\ADOdbException $e) { + } catch (ADOdbException $e) { return $this->halt($e->getMessage()); } @@ -236,7 +248,11 @@ class DisplayController extends BaseController $this->misc->saveScriptHistory($_REQUEST['query']); } - $query = $query ? $query : \sprintf('SELECT * FROM %s.%s', $_REQUEST['schema'], $object); + $query = $query ? $query : \sprintf( + 'SELECT * FROM %s.%s', + $_REQUEST['schema'], + $object + ); //$query = isset($_REQUEST['query'])? $_REQUEST['query'] : "select * from {$_REQUEST['schema']}.{$_REQUEST['table']};"; @@ -466,7 +482,10 @@ class DisplayController extends BaseController public function printResultsTable($resultset, $page, $max_pages, array $_gets, $object): void { if (!\is_object($resultset) || 0 >= $resultset->recordCount()) { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; return; } @@ -486,11 +505,14 @@ class DisplayController extends BaseController try { // Display edit and delete actions if we have a key $display_action_column = (0 < \count($actions['actionbuttons']) && 0 < \count($key)); - } catch (\Exception $e) { + } catch (Exception $e) { $display_action_column = false; } - echo $display_action_column ? "
    {$this->lang['stractions']}%s
    ' . \PHP_EOL; - echo '

    ', $resultset->recordCount(), " {$this->lang['strrows']}

    " . \PHP_EOL; + echo '

    ', $resultset->recordCount(), \sprintf( + ' %s

    ', + $this->lang['strrows'] + ) . \PHP_EOL; // Show page navigation echo $paginator; } @@ -525,9 +553,9 @@ class DisplayController extends BaseController /** * Print table header cells. * - * @param \ADORecordSet $resultset set of results from getRow operation - * @param array|bool $args - associative array for sort link parameters, or false if there isn't any - * @param bool $withOid either to display OIDs or not + * @param ADORecordSet $resultset set of results from getRow operation + * @param array|bool $args - associative array for sort link parameters, or false if there isn't any + * @param bool $withOid either to display OIDs or not */ public function printTableHeaderCells(&$resultset, $args, $withOid): void { @@ -555,12 +583,19 @@ class DisplayController extends BaseController $sortLink = \http_build_query($args); - echo "
    "; + echo \sprintf( + '', + $sortLink + ); echo $this->misc->printVal($finfo->name); if (($index + 1) === $_REQUEST['sortkey']) { $icon = ('asc' === $_REQUEST['sortdir']) ? $this->view->icon('RaiseArgument') : $this->view->icon('LowerArgument'); - echo \sprintf('%s', $icon, $_REQUEST['sortdir']); + echo \sprintf( + '%s', + $icon, + $_REQUEST['sortdir'] + ); } echo '
    ' . \PHP_EOL; // Output table header - echo ""; - echo "" . \PHP_EOL; - echo ""; + echo \sprintf( + '', + $this->lang['strcolumn'], + $this->lang['strtype'] + ); + echo \sprintf( + '', + $this->lang['strformat'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strnull'], + $this->lang['strvalue'] + ); $i = 0; @@ -649,7 +695,10 @@ class DisplayController extends BaseController $_REQUEST['format'][$attrs->fields['attname']] = 'VALUE'; } - echo "" . \PHP_EOL; + echo \sprintf( + '', + $id + ) . \PHP_EOL; echo ''; echo '" . \PHP_EOL; ++$elements; echo '' . \PHP_EOL; ++$elements; } else { echo ' '; } - echo "'; ++$elements; @@ -708,9 +775,15 @@ class DisplayController extends BaseController $error = false; } elseif (1 !== $resultset->recordCount()) { - echo "

    {$this->lang['strrownotunique']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strrownotunique'] + ) . \PHP_EOL; } else { - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } echo '' . \PHP_EOL; @@ -720,15 +793,35 @@ class DisplayController extends BaseController $subject = $this->getRequestParam('subject', $_REQUEST['subject'] ?? null); $return = $this->getRequestParam('return', $_REQUEST['return'] ?? null); - echo isset($_REQUEST['table']) ? \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL) : ''; - - echo isset($subject) ? \sprintf('%s', \htmlspecialchars($_REQUEST['subject']), \PHP_EOL) : ''; - - echo isset($_REQUEST['query']) ? \sprintf('%s', \htmlspecialchars($_REQUEST['query']), \PHP_EOL) : ''; - - echo isset($_REQUEST['count']) ? \sprintf('%s', \htmlspecialchars($_REQUEST['count']), \PHP_EOL) : ''; - - echo isset($return) ? \sprintf('%s', \htmlspecialchars($_REQUEST['return']), \PHP_EOL) : ''; + echo isset($_REQUEST['table']) ? \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ) : ''; + + echo isset($subject) ? \sprintf( + '%s', + \htmlspecialchars($_REQUEST['subject']), + \PHP_EOL + ) : ''; + + echo isset($_REQUEST['query']) ? \sprintf( + '%s', + \htmlspecialchars($_REQUEST['query']), + \PHP_EOL + ) : ''; + + echo isset($_REQUEST['count']) ? \sprintf( + '%s', + \htmlspecialchars($_REQUEST['count']), + \PHP_EOL + ) : ''; + + echo isset($return) ? \sprintf( + '%s', + \htmlspecialchars($_REQUEST['return']), + \PHP_EOL + ) : ''; echo '' . \PHP_EOL; echo '' . \PHP_EOL; @@ -738,16 +831,28 @@ class DisplayController extends BaseController echo '

    '; if (!$error) { - echo "lang['strsave']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strsave'] + ) . \PHP_EOL; } - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; if (false !== $fksprops) { - $autocomplete_string = ""; + $autocomplete_string = \sprintf( + '', + $this->lang['strac'] + ); if ('default off' !== $this->conf['autocomplete']) { - $autocomplete_string = ""; + $autocomplete_string = \sprintf( + '', + $this->lang['strac'] + ); } echo $autocomplete_string . \PHP_EOL; } @@ -809,7 +914,10 @@ class DisplayController extends BaseController echo $this->view->form; if (1 === $resultset->recordCount()) { - echo "

    {$this->lang['strconfdeleterow']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strconfdeleterow'] + ) . \PHP_EOL; $fkinfo = []; echo '
    {$this->lang['strcolumn']}{$this->lang['strtype']}{$this->lang['strformat']}{$this->lang['strnull']}{$this->lang['strvalue']}
    %s%s%s%s%s
    ', $this->misc->printVal($attrs->fields['attname']), '' . \PHP_EOL; echo $this->misc->printVal($data->formatType($attrs->fields['type'], $attrs->fields['atttypmod'])); @@ -658,9 +707,15 @@ class DisplayController extends BaseController ++$elements; echo '' . \PHP_EOL; echo '\n'; @@ -672,14 +727,20 @@ class DisplayController extends BaseController ) { $_REQUEST['nulls'][$attrs->fields['attname']] = 'on'; } - echo "fields['attnum']}\" style=\"white-space:nowrap;\">"; + echo \sprintf( + '', + $attrs->fields['attnum'] + ); $extras = []; @@ -692,11 +753,17 @@ class DisplayController extends BaseController } if ((false !== $fksprops) && isset($fksprops['byfield'][$attrs->fields['attnum']])) { - $extras['id'] = "attr_{$attrs->fields['attnum']}"; + $extras['id'] = \sprintf( + 'attr_%s', + $attrs->fields['attnum'] + ); $extras['autocomplete'] = 'off'; } - echo $data->printField("values[{$attrs->fields['attname']}]", $resultset->fields[$attrs->fields['attname']], $attrs->fields['type'], $extras); + echo $data->printField(\sprintf( + 'values[%s]', + $attrs->fields['attname'] + ), $resultset->fields[$attrs->fields['attname']], $attrs->fields['type'], $extras); echo '
    '; @@ -822,18 +930,40 @@ class DisplayController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['stryes']}\" />" . \PHP_EOL; - echo "lang['strno']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stryes'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strno'] + ) . \PHP_EOL; } elseif (1 !== $resultset->recordCount()) { - echo "

    {$this->lang['strrownotunique']}

    " . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strrownotunique'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; } else { - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; } if (isset($_REQUEST['table'])) { - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); } if (isset($_REQUEST['subject'])) { @@ -1044,7 +1174,7 @@ class DisplayController extends BaseController return [$actions, $key]; } - private function _printResultsTableActionButtons(\ADORecordSet $resultset, $key, $actions, bool $display_action_column, string $buttonclass): void + private function _printResultsTableActionButtons(ADORecordSet $resultset, $key, $actions, bool $display_action_column, string $buttonclass): void { if (!$display_action_column) { return; @@ -1062,7 +1192,10 @@ class DisplayController extends BaseController break; } - $keys_array["key[{$v}]"] = $resultset->fields[$v]; + $keys_array[\sprintf( + 'key[%s]', + $v + )] = $resultset->fields[$v]; } if ($has_nulls) { @@ -1086,7 +1219,10 @@ class DisplayController extends BaseController $keys_array ); } - echo \sprintf('
    ', $buttonclass); + echo \sprintf( + '', + $buttonclass + ); foreach ($actions['actionbuttons'] as $action) { $this->printLink($action, true, __METHOD__); @@ -1095,13 +1231,13 @@ class DisplayController extends BaseController } /** - * @param bool[] $printvalOpts - * @param \ADORecordSet $resultset - * @param array $fkey_information - * @param mixed $k - * @param mixed $v + * @param bool[] $printvalOpts + * @param ADORecordSet $resultset + * @param array $fkey_information + * @param mixed $k + * @param mixed $v */ - private function _printFKLinks(\ADORecordSet $resultset, array $fkey_information, $k, $v, array &$printvalOpts): void + private function _printFKLinks(ADORecordSet $resultset, array $fkey_information, $k, $v, array &$printvalOpts): void { if ((null === $v) || !isset($fkey_information['byfield'][$k])) { return; @@ -1111,15 +1247,26 @@ class DisplayController extends BaseController $query_params = $fkey_information['byconstr'][$conid]['url_data']; foreach ($fkey_information['byconstr'][$conid]['fkeys'] as $p_field => $f_field) { - $query_params .= '&' . \urlencode("fkey[{$f_field}]") . '=' . \urlencode($resultset->fields[$p_field]); + $query_params .= '&' . \urlencode(\sprintf( + 'fkey[%s]', + $f_field + )) . '=' . \urlencode($resultset->fields[$p_field]); } // $fkey_information['common_url'] is already urlencoded $query_params .= '&' . $fkey_information['common_url']; $title = \htmlentities($fkey_information['byconstr'][$conid]['consrc'], \ENT_QUOTES, 'UTF-8'); echo ''; } @@ -1187,19 +1334,47 @@ class DisplayController extends BaseController $result = '

    ' . \PHP_EOL; if (1 !== $page) { - $result .= \sprintf('%s%s ', $url, $lang['strfirst'], \PHP_EOL); - $result .= \sprintf('%s%s', $url, $page - 1, $lang['strprev'], \PHP_EOL); + $result .= \sprintf( + '%s%s ', + $url, + $lang['strfirst'], + \PHP_EOL + ); + $result .= \sprintf( + '%s%s', + $url, + $page - 1, + $lang['strprev'], + \PHP_EOL + ); } [$min_page, $max_page] = $this->_getMinMaxPages($page, $pages); for ($i = $min_page; $i <= $max_page; ++$i) { - $result .= (($i === $page) ? $i : \sprintf('%s', $url, $i, $i)) . \PHP_EOL; + $result .= (($i === $page) ? $i : \sprintf( + '%s', + $url, + $i, + $i + )) . \PHP_EOL; } if ($page !== $pages) { - $result .= \sprintf('%s%s', $url, $page + 1, $lang['strnext'], \PHP_EOL); - $result .= \sprintf(' %s%s', $url, $pages, $lang['strlast'], \PHP_EOL); + $result .= \sprintf( + '%s%s', + $url, + $page + 1, + $lang['strnext'], + \PHP_EOL + ); + $result .= \sprintf( + ' %s%s', + $url, + $pages, + $lang['strlast'], + \PHP_EOL + ); } $result .= '

    ' . \PHP_EOL; diff --git a/src/controllers/DomainsController.php b/src/controllers/DomainsController.php index b1e4c57c..3c58fae8 100644 --- a/src/controllers/DomainsController.php +++ b/src/controllers/DomainsController.php @@ -121,7 +121,10 @@ class DomainsController extends BaseController 'domain' => [ 'title' => $this->lang['strdomain'], 'field' => Decorator::field('domname'), - 'url' => "domains?action=properties&{$this->misc->href}&", + 'url' => \sprintf( + 'domains?action=properties&%s&', + $this->misc->href + ), 'vars' => ['domain' => 'domname'], ], 'type' => [ @@ -286,16 +289,31 @@ class DomainsController extends BaseController // Display domain info echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strtype'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strnotnull'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdefault'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo ''; - echo ""; + echo \sprintf( + '', + $this->lang['strunique'] + ); echo ''; echo ''; echo ''; - echo ""; + echo \sprintf( + '', + $this->lang['strwhere'] + ); echo ''; echo ''; // Tablespace (if there are any) if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strtablespace'] + ) . \PHP_EOL; echo '\n\t" . \PHP_EOL; @@ -426,7 +457,10 @@ class IndexesController extends BaseController if ($data->hasConcurrentIndexBuild()) { echo ''; - echo ""; + echo \sprintf( + '', + $this->lang['strconcurrently'] + ); echo ''; echo ''; } @@ -437,8 +471,15 @@ class IndexesController extends BaseController echo $this->view->form; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } @@ -502,7 +543,10 @@ class IndexesController extends BaseController $this->printTrail('index'); $this->printTitle($this->lang['strdrop'], 'pg.index.drop'); - echo '

    ', \sprintf($this->lang['strconfdropindex'], $this->misc->printVal($this->getRequestParam('index'))), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropindex'], + $this->misc->printVal($this->getRequestParam('index')) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; @@ -510,8 +554,14 @@ class IndexesController extends BaseController echo $this->view->form; echo '

    '; echo '

    ' . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { try { @@ -522,7 +572,7 @@ class IndexesController extends BaseController } else { $this->doDefault($sql . \PHP_EOL . $this->lang['strindexdroppedbad']); } - } catch (\PHPPgAdmin\ADOdbException $e) { + } catch (ADOdbException $e) { $this->doDefault($this->lang['strindexdroppedbad']); } } diff --git a/src/controllers/InfoController.php b/src/controllers/InfoController.php index 93cc6130..9e784ef7 100644 --- a/src/controllers/InfoController.php +++ b/src/controllers/InfoController.php @@ -105,7 +105,10 @@ class InfoController extends BaseController private function _printChildren($children): void { - echo "

    {$this->lang['strchildtables']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strchildtables'] + ) . \PHP_EOL; $columns = [ 'schema' => [ @@ -141,28 +144,64 @@ class InfoController extends BaseController private function _printTablestatstups($tablestatstups): void { - echo "

    {$this->lang['strrowperf']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strrowperf'] + ) . \PHP_EOL; echo '
    {$this->lang['strname']}
    %s', $this->misc->printVal($domaindata->fields['domname']), '
    {$this->lang['strtype']}
    %s', $this->misc->printVal($domaindata->fields['domtype']), '
    {$this->lang['strdefault']}
    %s
    {$this->lang['strowner']}
    %s' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -338,10 +366,19 @@ class DomainsController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; - echo "" . \PHP_EOL; - - echo "', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdefinition'] + ) . \PHP_EOL; + + echo \sprintf( + '' . \PHP_EOL; echo '" . \PHP_EOL; + $szJSAddTR = \sprintf( + '', + $subfolder + ) . \PHP_EOL; $szJSAddTR .= '\n" . \PHP_EOL; - - echo ' - + ;'; ++$nC; } @@ -1284,7 +1573,10 @@ class FunctionsController extends BaseController } foreach ($arrayModes as $pV) { - $arrayPModes[] = "'{$pV}'"; + $arrayPModes[] = \sprintf( + '\'%s\'', + $pV + ); } $szTypes = 'g_main_types = new Array(' . \implode(',', $arrayPTypes) . ');'; @@ -1296,7 +1588,7 @@ class FunctionsController extends BaseController /** * Get the concatenated arguments for a function. * - * @param \ADORecordSet $funcdata The funcdata record + * @param ADORecordSet $funcdata The funcdata record * * @return string The arguments of the function */ diff --git a/src/controllers/GroupsController.php b/src/controllers/GroupsController.php index de992329..fe7854cb 100644 --- a/src/controllers/GroupsController.php +++ b/src/controllers/GroupsController.php @@ -105,7 +105,10 @@ class GroupsController extends BaseController 'group' => [ 'title' => $this->lang['strgroup'], 'field' => Decorator::field('groname'), - 'url' => "groups?action=properties&{$this->misc->href}&", + 'url' => \sprintf( + 'groups?action=properties&%s&', + $this->misc->href + ), 'vars' => ['group' => 'groname'], ], 'actions' => [ @@ -178,15 +181,25 @@ class GroupsController extends BaseController $this->printTrail('group'); $this->printTitle($this->lang['strdropmember'], 'pg.group.alter'); - echo '

    ', \sprintf($this->lang['strconfdropmember'], $this->misc->printVal($_REQUEST['user']), $this->misc->printVal($_REQUEST['group'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropmember'], + $this->misc->printVal($_REQUEST['user']), + $this->misc->printVal($_REQUEST['group']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { $status = $data->dropGroupMember($_REQUEST['group'], $_REQUEST['user']); @@ -253,12 +266,21 @@ class GroupsController extends BaseController while (!$users->EOF) { $uname = $this->misc->printVal($users->fields['usename']); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $uname + ) . \PHP_EOL; $users->moveNext(); } echo '' . \PHP_EOL; - echo "lang['straddmember']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['straddmember'] + ) . \PHP_EOL; echo $this->view->form; echo '' . \PHP_EOL; echo '' . \PHP_EOL; @@ -290,14 +312,23 @@ class GroupsController extends BaseController $this->printTrail('group'); $this->printTitle($this->lang['strdrop'], 'pg.group.drop'); - echo '

    ', \sprintf($this->lang['strconfdropgroup'], $this->misc->printVal($_REQUEST['group'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropgroup'], + $this->misc->printVal($_REQUEST['group']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { $status = $data->dropGroup($_REQUEST['group']); @@ -332,18 +363,32 @@ class GroupsController extends BaseController echo '' . \PHP_EOL; echo $this->view->form; echo '
    {$this->lang['strname']}{$this->lang['strdefinition']}
    _maxNameLen}\" value=\"", + echo \sprintf( + '
    %s%s
    (' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stradd']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stradd'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { if ('' === \trim($_POST['definition'])) { @@ -398,9 +442,18 @@ class DomainsController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "

    " . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { $status = $data->dropDomainConstraint($_POST['domain'], $_POST['constraint'], isset($_POST['cascade'])); @@ -437,20 +490,38 @@ class DomainsController extends BaseController // Display domain info $domaindata->fields['domnotnull'] = $data->phpBool($domaindata->fields['domnotnull']); echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strtype'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strnotnull'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdefault'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo '
    {$this->lang['strname']}
    %s', $this->misc->printVal($domaindata->fields['domname']), '
    {$this->lang['strtype']}
    %s', $this->misc->printVal($domaindata->fields['domtype']), '
    {$this->lang['strnotnull']}
    %s', ($domaindata->fields['domnotnull'] ? 'NOT NULL' : ''), '
    {$this->lang['strdefault']}
    %s', $this->misc->printVal($domaindata->fields['domdef']), '
    {$this->lang['strowner']}
    %s', $this->misc->printVal($domaindata->fields['domowner']), '
    ' . \PHP_EOL; // Display domain constraints - echo "

    {$this->lang['strconstraints']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strconstraints'] + ) . \PHP_EOL; if ($data->hasDomainConstraints()) { $domaincons = $data->getDomainConstraints($_REQUEST['domain']); @@ -489,7 +560,10 @@ class DomainsController extends BaseController echo $this->printTable($domaincons, $columns, $actions, 'domains-properties', $this->lang['strnodata']); } } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } $navlinks = [ @@ -559,14 +633,27 @@ class DomainsController extends BaseController $this->printTrail('domain'); $this->printTitle($this->lang['strdrop'], 'pg.domain.drop'); - echo '

    ', \sprintf($this->lang['strconfdropdomain'], $this->misc->printVal($_REQUEST['domain'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropdomain'], + $this->misc->printVal($_REQUEST['domain']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { $status = $data->dropDomain($_POST['domain'], isset($_POST['cascade'])); @@ -608,10 +695,19 @@ class DomainsController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; - echo "', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strtype'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strnotnull'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdefault'] + ) . \PHP_EOL; echo '' . \PHP_EOL; if ($data->hasDomainConstraints()) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strconstraints'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strtype']}
    %s' . \PHP_EOL; // Output return type list echo '
    {$this->lang['strdefault']}
    %s
    {$this->lang['strconstraints']}
    %sCHECK ()
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } diff --git a/src/controllers/FulltextController.php b/src/controllers/FulltextController.php index 0aef9014..a67b32d6 100644 --- a/src/controllers/FulltextController.php +++ b/src/controllers/FulltextController.php @@ -7,6 +7,7 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\XHtml\HTMLController; /** * Base controller class. @@ -149,7 +150,10 @@ class FulltextController extends BaseController 'configuration' => [ 'title' => $this->lang['strftsconfig'], 'field' => Decorator::field('name'), - 'url' => "fulltext?action=viewconfig&{$this->misc->href}&", + 'url' => \sprintf( + 'fulltext?action=viewconfig&%s&', + $this->misc->href + ), 'vars' => ['ftscfg' => 'name'], ], 'schema' => [ @@ -306,16 +310,29 @@ class FulltextController extends BaseController $this->printTrail('ftscfg'); $this->printTitle($this->lang['strdrop'], 'pg.ftscfg.drop'); - echo '

    ', \sprintf($this->lang['strconfdropftsconfig'], $this->misc->printVal($_REQUEST['ftscfg'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropftsconfig'], + $this->misc->printVal($_REQUEST['ftscfg']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { $status = $data->dropFtsConfiguration($_POST['ftscfg'], isset($_POST['cascade'])); @@ -337,18 +354,31 @@ class FulltextController extends BaseController $this->printTrail('ftscfg'); // TODO: change to smth related to dictionary $this->printTitle($this->lang['strdrop'], 'pg.ftsdict.drop'); - echo '

    ', \sprintf($this->lang['strconfdropftsdict'], $this->misc->printVal($_REQUEST['ftsdict'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropftsdict'], + $this->misc->printVal($_REQUEST['ftsdict']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; //echo "".PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { $status = $data->dropFtsDictionary($_POST['ftsdict'], isset($_POST['cascade'])); @@ -393,12 +423,24 @@ class FulltextController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; // conf name - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; // Template - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strftstemplate'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; // Parser - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strftsparser'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; // Comment - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; + \htmlspecialchars($_POST['formComment']), + "\n\t" . \PHP_EOL; echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", - \htmlspecialchars($_POST['formName']), "\" />
    %s
    {$this->lang['strftstemplate']}
    %s"; $tpls = []; @@ -418,11 +460,15 @@ class FulltextController extends BaseController } $ftscfgs->moveNext(); } - echo \PHPPgAdmin\XHtml\HTMLController::printCombo($tpls, 'formTemplate', true, $tplsel, false); + echo HTMLController::printCombo($tpls, 'formTemplate', true, $tplsel, false); echo "\n\t\t
    {$this->lang['strftsparser']}
    %s" . \PHP_EOL; $ftsparsers_ = []; $ftsparsel = ''; @@ -442,21 +488,32 @@ class FulltextController extends BaseController } $ftsparsers->moveNext(); } - echo \PHPPgAdmin\XHtml\HTMLController::printCombo($ftsparsers_, 'formParser', true, $ftsparsel, false); + echo HTMLController::printCombo($ftsparsers_, 'formParser', true, $ftsparsel, false); echo "\n\t\t
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; } @@ -471,11 +528,17 @@ class FulltextController extends BaseController $err = ''; // Check that they've given a name if ('' === $_POST['formName']) { - $err .= "{$this->lang['strftsconfigneedsname']}
    "; + $err .= \sprintf( + '%s
    ', + $this->lang['strftsconfigneedsname'] + ); } if (('' !== $_POST['formParser']) && ('' !== $_POST['formTemplate'])) { - $err .= "{$this->lang['strftscantparsercopy']}
    "; + $err .= \sprintf( + '%s
    ', + $this->lang['strftscantparsercopy'] + ); } if ('' !== $err) { @@ -535,27 +598,47 @@ class FulltextController extends BaseController echo '' . \PHP_EOL; echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strname'] + ) . \PHP_EOL; echo "\t\t" . \PHP_EOL; echo "\t" . \PHP_EOL; // Comment echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; echo "\t" . \PHP_EOL; echo '
    {$this->lang['strname']}%s"; - echo "\t\t\t_maxNameLen}\" value=\"", - \htmlspecialchars($_POST['formName']), '" />' . \PHP_EOL; + echo \sprintf( + ' ' . \PHP_EOL; echo "\t\t
    {$this->lang['strcomment']}%s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -710,7 +793,10 @@ class FulltextController extends BaseController $this->printTabs('fulltext', 'ftsconfigs'); $this->printMsg($msg); - echo "

    {$this->lang['strftsconfigmap']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strftsconfigmap'] + ) . \PHP_EOL; $map = $data->getFtsConfigurationMap($ftscfg); @@ -824,14 +910,32 @@ class FulltextController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strftscreatedicttemplate'] + ) . \PHP_EOL; // Template - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strftstemplate'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; // TODO: what about maxlengths? // Lexize - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strftslexize'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; + \htmlspecialchars($_POST['formLexize']), + '" ', + isset($_POST['formIsTemplate']) ? '' : ' disabled="disabled" ', + "/>\n\t" . \PHP_EOL; // Init - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strftsinit'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; + \htmlspecialchars($_POST['formInit']), + '"', + $_POST['formIsTemplate'] ? '' : ' disabled="disabled" ', + "/>\n\t" . \PHP_EOL; // Option - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strftsoptionsvalues'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; + \htmlspecialchars($_POST['formOption']), + "\" />\n\t" . \PHP_EOL; // Comment - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; + \htmlspecialchars($_POST['formComment']), + "\n\t" . \PHP_EOL; echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", - \htmlspecialchars($_POST['formName']), '" /> ', - '\n", - "
    %s ', + '\n", + \sprintf( + '
    {$this->lang['strftstemplate']}
    %s"; $tpls = []; $tplsel = ''; @@ -850,42 +954,70 @@ class FulltextController extends BaseController } $ftstpls->moveNext(); } - echo \PHPPgAdmin\XHtml\HTMLController::printCombo($tpls, 'formTemplate', true, $tplsel, false); + echo HTMLController::printCombo($tpls, 'formTemplate', true, $tplsel, false); echo "\n\t\t
    {$this->lang['strftslexize']}
    %s
    {$this->lang['strftsinit']}
    %s
    {$this->lang['strftsoptionsvalues']}
    %s
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo "
    \n", - "" . \PHP_EOL; + $szJSTRArg = \sprintf( + '', + $subfolder + ) . \PHP_EOL; } else { $szJSTRArg = ''; } - $szJSAddTR = "
    "; - $szJSAddTR .= "
    '; - $szJSAddTR .= "\"Add{$this->lang['strargadd']}
    ' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; if (0 < $users->recordCount()) { - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strmembers'] + ) . \PHP_EOL; echo "\t\t
    {$this->lang['strname']}_maxNameLen}\" name=\"name\" value=\"", \htmlspecialchars($_POST['name']), "\" />
    %s
    {$this->lang['strmembers']}
    %s" . \PHP_EOL; echo "\t\t\t
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } diff --git a/src/controllers/HelpController.php b/src/controllers/HelpController.php index 2f9ee8ec..141fa636 100644 --- a/src/controllers/HelpController.php +++ b/src/controllers/HelpController.php @@ -45,7 +45,10 @@ class HelpController extends BaseController } if ($url) { - \header("Location: {$url}"); + \header(\sprintf( + 'Location: %s', + $url + )); return; } @@ -70,7 +73,10 @@ class HelpController extends BaseController $pages = $data->getHelpPages(); foreach ($pages as $page => $dummy) { - echo "
    {$page}
    " . \PHP_EOL; + echo \sprintf( + '
    %s
    ', + $page + ) . \PHP_EOL; $urls = $data->getHelp($page); @@ -79,7 +85,11 @@ class HelpController extends BaseController } foreach ($urls as $url) { - echo "
    {$url}
    " . \PHP_EOL; + echo \sprintf( + '
    %s
    ', + $url, + $url + ) . \PHP_EOL; } } @@ -98,7 +108,11 @@ class HelpController extends BaseController echo '
      ' . \PHP_EOL; foreach ($urls as $url) { - echo "
    • {$url}
    • " . \PHP_EOL; + echo \sprintf( + '
    • %s
    • ', + $url, + $url + ) . \PHP_EOL; } echo '
    ' . \PHP_EOL; diff --git a/src/controllers/HistoryController.php b/src/controllers/HistoryController.php index e5fcf4ed..c614b160 100644 --- a/src/controllers/HistoryController.php +++ b/src/controllers/HistoryController.php @@ -6,14 +6,16 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\ArrayRecordSet; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\ServersTrait; /** * Base controller class. */ class HistoryController extends BaseController { - use \PHPPgAdmin\Traits\ServersTrait; + use ServersTrait; public $EOF; @@ -80,13 +82,16 @@ class HistoryController extends BaseController echo '
    '; if (!isset($_REQUEST['database'])) { - echo "

    {$this->lang['strnodatabaseselected']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodatabaseselected'] + ) . \PHP_EOL; return; } if (isset($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']])) { - $history = new \PHPPgAdmin\ArrayRecordSet($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']]); + $history = new ArrayRecordSet($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']]); $columns = [ 'query' => [ @@ -135,7 +140,10 @@ class HistoryController extends BaseController echo $this->printTable($history, $columns, $actions, 'history-history', $this->lang['strnohistory']); } else { - echo "

    {$this->lang['strnohistory']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnohistory'] + ) . \PHP_EOL; } $navlinks = [ @@ -195,16 +203,31 @@ class HistoryController extends BaseController // Bring to the front always echo '' . \PHP_EOL; - echo "

    {$this->lang['strdelhistory']}

    " . \PHP_EOL; - echo "

    {$this->lang['strconfdelhistory']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strdelhistory'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strconfdelhistory'] + ) . \PHP_EOL; echo '
    ', \htmlentities($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']][$qid]['query'], \ENT_QUOTES, 'UTF-8'), '
    '; echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $qid + ) . \PHP_EOL; echo $this->view->form; - echo "lang['stryes']}\" />" . \PHP_EOL; - echo "lang['strno']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stryes'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strno'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } else { unset($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']][$qid]); @@ -219,14 +242,26 @@ class HistoryController extends BaseController // Bring to the front always echo '' . \PHP_EOL; - echo "

    {$this->lang['strclearhistory']}

    " . \PHP_EOL; - echo "

    {$this->lang['strconfclearhistory']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strclearhistory'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strconfclearhistory'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stryes']}\" />" . \PHP_EOL; - echo "lang['strno']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stryes'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strno'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } else { unset($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']]); @@ -237,7 +272,10 @@ class HistoryController extends BaseController { \header('Content-Type: application/download'); $datetime = \date('YmdHis'); - \header("Content-Disposition: attachment; filename=history{$datetime}.sql"); + \header(\sprintf( + 'Content-Disposition: attachment; filename=history%s.sql', + $datetime + )); foreach ($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']] as $queries) { $query = \rtrim($queries['query']); diff --git a/src/controllers/IndexesController.php b/src/controllers/IndexesController.php index 604242d1..9b94b22b 100644 --- a/src/controllers/IndexesController.php +++ b/src/controllers/IndexesController.php @@ -6,7 +6,11 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\ADOdbException; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\XHtml\XHtmlButton; +use PHPPgAdmin\XHtml\XHtmlOption; +use PHPPgAdmin\XHtml\XHtmlSelect; /** * Base controller class. @@ -266,17 +270,29 @@ class IndexesController extends BaseController $this->printTabs($subject, 'indexes'); $this->printTitle($this->lang['strclusterindex'], 'pg.index.cluster'); - echo '

    ', \sprintf($this->lang['strconfcluster'], $this->misc->printVal($_REQUEST['index'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfcluster'], + $this->misc->printVal($_REQUEST['index']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; echo '

    '; - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['stranalyze'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strclusterindex']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strclusterindex'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } else { \set_time_limit(0); @@ -344,25 +360,25 @@ class IndexesController extends BaseController $this->printTitle($this->lang['strcreateindex'], 'pg.index.create'); $this->printMsg($msg); - $selColumns = new \PHPPgAdmin\XHtml\XHtmlSelect('TableColumnList', true, 10); + $selColumns = new XHtmlSelect('TableColumnList', true, 10); $selColumns->set_style('width: 14em;'); if (0 < $attrs->recordCount()) { while (!$attrs->EOF) { - $attname = new \PHPPgAdmin\XHtml\XHtmlOption($attrs->fields['attname']); + $attname = new XHtmlOption($attrs->fields['attname']); $selColumns->add($attname); $attrs->moveNext(); } } - $selIndex = new \PHPPgAdmin\XHtml\XHtmlSelect('IndexColumnList[]', true, 10); + $selIndex = new XHtmlSelect('IndexColumnList[]', true, 10); $selIndex->set_style('width: 14em;'); $selIndex->set_attribute('id', 'IndexColumnList'); - $buttonAdd = new \PHPPgAdmin\XHtml\XHtmlButton('add', '>>'); + $buttonAdd = new XHtmlButton('add', '>>'); $buttonAdd->set_attribute('onclick', 'buttonPressed(this);'); $buttonAdd->set_attribute('type', 'button'); - $buttonRemove = new \PHPPgAdmin\XHtml\XHtmlButton('remove', '<<'); + $buttonRemove = new XHtmlButton('remove', '<<'); $buttonRemove->set_attribute('onclick', 'buttonPressed(this);'); $buttonRemove->set_attribute('type', 'button'); @@ -397,18 +413,27 @@ class IndexesController extends BaseController } echo '
    {$this->lang['strwhere']}%s()
    {$this->lang['strtablespace']}%s'; echo "\n\t\t\t\n\t\t
    ' . \PHP_EOL; echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strsequential'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strindex'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strrows2'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strscan'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strread'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strscan'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strfetch'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strinsert'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strupdate'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strdelete'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; $i = 0; while (!$tablestatstups->EOF) { $id = (0 === ($i % 2) ? '1' : '2'); - echo "\t" . \PHP_EOL; + echo \sprintf( + ' ', + $id + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; @@ -180,34 +219,88 @@ class InfoController extends BaseController private function _printTablestatsio($tablestatsio): void { - echo "

    {$this->lang['strioperf']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strioperf'] + ) . \PHP_EOL; echo '
    {$this->lang['strsequential']}{$this->lang['strindex']}{$this->lang['strrows2']}%s%s%s
    {$this->lang['strscan']}{$this->lang['strread']}{$this->lang['strscan']}{$this->lang['strfetch']}{$this->lang['strinsert']}{$this->lang['strupdate']}{$this->lang['strdelete']}%s%s%s%s%s%s%s
    ", $this->misc->printVal($tablestatstups->fields['seq_scan'], 'int4', $this->shownull), '", $this->misc->printVal($tablestatstups->fields['seq_tup_read'], 'int4', $this->shownull), '", $this->misc->printVal($tablestatstups->fields['idx_scan'], 'int4', $this->shownull), '
    ' . \PHP_EOL; echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strheap'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strindex'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strtoast'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strtoastindex'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strdisk'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcache'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strpercent'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strdisk'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcache'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strpercent'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strdisk'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcache'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strpercent'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strdisk'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcache'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strpercent'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; $i = 0; while (!$tablestatsio->EOF) { $id = (0 === ($i % 2) ? '1' : '2'); - echo "\t" . \PHP_EOL; + echo \sprintf( + ' ', + $id + ) . \PHP_EOL; $total = $tablestatsio->fields['heap_blks_hit'] + $tablestatsio->fields['heap_blks_read']; @@ -219,7 +312,11 @@ class InfoController extends BaseController echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $percentage, + $this->lang['strpercent'] + ) . \PHP_EOL; $total = $tablestatsio->fields['idx_blks_hit'] + $tablestatsio->fields['idx_blks_read']; @@ -231,7 +328,11 @@ class InfoController extends BaseController echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $percentage, + $this->lang['strpercent'] + ) . \PHP_EOL; $total = $tablestatsio->fields['toast_blks_hit'] + $tablestatsio->fields['toast_blks_read']; @@ -243,7 +344,11 @@ class InfoController extends BaseController echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $percentage, + $this->lang['strpercent'] + ) . \PHP_EOL; $total = $tablestatsio->fields['tidx_blks_hit'] + $tablestatsio->fields['tidx_blks_read']; @@ -255,7 +360,11 @@ class InfoController extends BaseController echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $percentage, + $this->lang['strpercent'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; $tablestatsio->movenext(); ++$i; @@ -266,20 +375,38 @@ class InfoController extends BaseController private function _printIndexstatstups($indexstatstups): void { - echo "

    {$this->lang['stridxrowperf']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['stridxrowperf'] + ) . \PHP_EOL; echo '
    {$this->lang['strheap']}{$this->lang['strindex']}{$this->lang['strtoast']}{$this->lang['strtoastindex']}%s%s%s%s
    {$this->lang['strdisk']}{$this->lang['strcache']}{$this->lang['strpercent']}{$this->lang['strdisk']}{$this->lang['strcache']}{$this->lang['strpercent']}{$this->lang['strdisk']}{$this->lang['strcache']}{$this->lang['strpercent']}{$this->lang['strdisk']}{$this->lang['strcache']}{$this->lang['strpercent']}%s%s%s%s%s%s%s%s%s%s%s%s
    ", $this->misc->printVal($tablestatsio->fields['heap_blks_read'], 'int4', $this->shownull), '", $this->misc->printVal($tablestatsio->fields['heap_blks_hit'], 'int4', $this->shownull), '({$percentage}{$this->lang['strpercent']})(%s%s)", $this->misc->printVal($tablestatsio->fields['idx_blks_read'], 'int4', $this->shownull), '", $this->misc->printVal($tablestatsio->fields['idx_blks_hit'], 'int4', $this->shownull), '({$percentage}{$this->lang['strpercent']})(%s%s)", $this->misc->printVal($tablestatsio->fields['toast_blks_read'], 'int4', $this->shownull), '", $this->misc->printVal($tablestatsio->fields['toast_blks_hit'], 'int4', $this->shownull), '({$percentage}{$this->lang['strpercent']})(%s%s)", $this->misc->printVal($tablestatsio->fields['tidx_blks_read'], 'int4', $this->shownull), '", $this->misc->printVal($tablestatsio->fields['tidx_blks_hit'], 'int4', $this->shownull), '({$percentage}{$this->lang['strpercent']})(%s%s)
    ' . \PHP_EOL; echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strindex'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strscan'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strread'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strfetch'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; $i = 0; while (!$indexstatstups->EOF) { $id = (0 === ($i % 2) ? '1' : '2'); - echo "\t" . \PHP_EOL; + echo \sprintf( + ' ', + $id + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; @@ -294,20 +421,38 @@ class InfoController extends BaseController private function _printIndexstatsio($indexstatsio): void { - echo "

    {$this->lang['stridxioperf']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['stridxioperf'] + ) . \PHP_EOL; echo '
    {$this->lang['strindex']}{$this->lang['strscan']}{$this->lang['strread']}{$this->lang['strfetch']}%s%s%s%s
    ", $this->misc->printVal($indexstatstups->fields['indexrelname']), '", $this->misc->printVal($indexstatstups->fields['idx_scan'], 'int4', $this->shownull), '", $this->misc->printVal($indexstatstups->fields['idx_tup_read'], 'int4', $this->shownull), '
    ' . \PHP_EOL; echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strindex'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strdisk'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcache'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strpercent'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; $i = 0; while (!$indexstatsio->EOF) { $id = (0 === ($i % 2) ? '1' : '2'); - echo "\t" . \PHP_EOL; + echo \sprintf( + ' ', + $id + ) . \PHP_EOL; $total = $indexstatsio->fields['idx_blks_hit'] + $indexstatsio->fields['idx_blks_read']; if (0 < $total) { @@ -319,7 +464,11 @@ class InfoController extends BaseController echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $percentage, + $this->lang['strpercent'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; $indexstatsio->movenext(); ++$i; @@ -330,7 +479,10 @@ class InfoController extends BaseController private function _printParents($parents): void { - echo "

    {$this->lang['strparenttables']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strparenttables'] + ) . \PHP_EOL; $columns = [ 'schema' => [ @@ -366,7 +518,10 @@ class InfoController extends BaseController private function _printReferring($referrers): void { - echo "

    {$this->lang['strreferringtables']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strreferringtables'] + ) . \PHP_EOL; $columns = [ 'schema' => [ diff --git a/src/controllers/IntroController.php b/src/controllers/IntroController.php index b24585cf..81a92def 100644 --- a/src/controllers/IntroController.php +++ b/src/controllers/IntroController.php @@ -52,7 +52,13 @@ class IntroController extends BaseController foreach ($this->appLangFiles as $k => $v) { $selected = ($k === $language) ? ' selected="selected"' : ''; - $intro_html .= "\t" . \PHP_EOL; + $intro_html .= \sprintf( + ' ', + $v + ) . \PHP_EOL; } $intro_html .= ''; @@ -65,7 +71,13 @@ class IntroController extends BaseController foreach ($this->appThemes as $k => $v) { $selected = ($k === $this->conf['theme']) ? ' selected="selected"' : ''; - $intro_html .= "\t" . \PHP_EOL; + $intro_html .= \sprintf( + ' ', + $v + ) . \PHP_EOL; } $intro_html .= ''; diff --git a/src/controllers/LoginController.php b/src/controllers/LoginController.php index 8ab7fe76..7f954517 100644 --- a/src/controllers/LoginController.php +++ b/src/controllers/LoginController.php @@ -86,7 +86,10 @@ class LoginController extends BaseController } $server_info = $this->misc->getServerInfo($server_id); - $title = \sprintf($this->lang['strlogintitle'], $server_info['desc']); + $title = \sprintf( + $this->lang['strlogintitle'], + $server_info['desc'] + ); $printTitle = $this->printTitle($title, null, false); diff --git a/src/controllers/MaterializedviewpropertiesController.php b/src/controllers/MaterializedviewpropertiesController.php index 7cbbf275..8a5b5df7 100644 --- a/src/controllers/MaterializedviewpropertiesController.php +++ b/src/controllers/MaterializedviewpropertiesController.php @@ -6,13 +6,16 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\Traits\ExportTrait; +use PHPPgAdmin\Traits\ViewsMatViewsPropertiesTrait; + /** * Base controller class. */ class MaterializedviewpropertiesController extends BaseController { - use \PHPPgAdmin\Traits\ExportTrait; - use \PHPPgAdmin\Traits\ViewsMatViewsPropertiesTrait; + use ExportTrait; + use ViewsMatViewsPropertiesTrait; public $controller_title = 'strviews'; @@ -152,21 +155,39 @@ class MaterializedviewpropertiesController extends BaseController echo '' . \PHP_EOL; echo '
    {$this->lang['strindex']}{$this->lang['strdisk']}{$this->lang['strcache']}{$this->lang['strpercent']}%s%s%s%s
    ", $this->misc->printVal($indexstatsio->fields['indexrelname']), '", $this->misc->printVal($indexstatsio->fields['idx_blks_read'], 'int4', $this->shownull), '", $this->misc->printVal($indexstatsio->fields['idx_blks_hit'], 'int4', $this->shownull), '({$percentage}{$this->lang['strpercent']})(%s%s)
    ' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strdefinition'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
    {$this->lang['strdefinition']}
    %s
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -191,8 +212,16 @@ class MaterializedviewpropertiesController extends BaseController // Output matview header echo '' . \PHP_EOL; - echo ""; - echo ""; + echo \sprintf( + '', + $this->lang['strname'], + $this->lang['strtype'] + ); + echo \sprintf( + '', + $this->lang['strdefault'], + $this->lang['strcomment'] + ); $column = $data->getTableAttributes($_REQUEST[$this->subject], $_REQUEST['column']); @@ -218,8 +247,15 @@ class MaterializedviewpropertiesController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; break; @@ -260,7 +296,10 @@ class MaterializedviewpropertiesController extends BaseController break; default: - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } } @@ -287,16 +326,25 @@ class MaterializedviewpropertiesController extends BaseController echo '' . \PHP_EOL; echo '
    {$this->lang['strname']}{$this->lang['strtype']}{$this->lang['strdefault']}{$this->lang['strcomment']}
    %s%s%s%s
    ' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; if ($data->isSuperUser()) { // Fetch all users $users = $data->getUsers(); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strschema'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcomment'] + ) . \PHP_EOL; echo '' . \PHP_EOL; @@ -330,11 +384,21 @@ class MaterializedviewpropertiesController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "

    lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '

    ', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } else { // For databases that don't allow owner change diff --git a/src/controllers/MaterializedviewsController.php b/src/controllers/MaterializedviewsController.php index 053b31e6..38dd61ba 100644 --- a/src/controllers/MaterializedviewsController.php +++ b/src/controllers/MaterializedviewsController.php @@ -7,13 +7,14 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\ViewsMatviewsTrait; /** * Base controller class. */ class MaterializedviewsController extends BaseController { - use \PHPPgAdmin\Traits\ViewsMatviewsTrait; + use ViewsMatviewsTrait; public $table_place = 'matviews-matviews'; @@ -124,7 +125,10 @@ class MaterializedviewsController extends BaseController $this->keystring => [ 'title' => 'M ' . $this->lang['strview'], 'field' => Decorator::field('relname'), - 'url' => \containerInstance()->subFolder . "/redirect/matview?{$this->misc->href}&", + 'url' => \containerInstance()->subFolder . \sprintf( + '/redirect/matview?%s&', + $this->misc->href + ), 'vars' => [$this->keystring => 'relname'], ], 'owner' => [ @@ -287,20 +291,35 @@ class MaterializedviewsController extends BaseController if (isset($_REQUEST['ma'])) { foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfdropview'], $this->misc->printVal($a['view'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropview'], + $this->misc->printVal($a['view']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } } else { - echo '

    ', \sprintf($this->lang['strconfdropview'], $this->misc->printVal($_REQUEST['matview'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropview'], + $this->misc->printVal($_REQUEST['matview']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } echo '' . \PHP_EOL; echo $this->view->form; - echo "

    " . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { if (\is_array($_POST['view'])) { @@ -412,22 +431,47 @@ class MaterializedviewsController extends BaseController $this->printTitle($this->lang['strcreateview'], 'pg.matview.create'); $this->printMsg($msg); - echo 'view_name}\" method=\"post\">" . \PHP_EOL; + echo '', + $this->view_name + ) . \PHP_EOL; echo '
    {$this->lang['strname']}
    %s'; - echo "_maxNameLen}\" value=\"", + echo \sprintf( + '
    {$this->lang['strowner']}
    %s
    {$this->lang['strschema']}
    %s
    {$this->lang['strcomment']}
    %s'; echo '
    ' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strdefinition'] + ) . \PHP_EOL; echo "\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strdefinition']}
    %s
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } diff --git a/src/controllers/OperatorsController.php b/src/controllers/OperatorsController.php index 562e117a..bd49bdcc 100644 --- a/src/controllers/OperatorsController.php +++ b/src/controllers/OperatorsController.php @@ -117,7 +117,10 @@ class OperatorsController extends BaseController 'operator' => [ 'title' => $this->lang['stroperator'], 'field' => Decorator::field('oprname'), - 'url' => "operators?action=properties&{$this->misc->href}&", + 'url' => \sprintf( + 'operators?action=properties&%s&', + $this->misc->href + ), 'vars' => ['operator' => 'oprname', 'operator_oid' => 'oid'], ], 'leftarg' => [ @@ -183,37 +186,79 @@ class OperatorsController extends BaseController if (0 < $oprdata->recordCount()) { echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strleftarg'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strrightarg'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcommutator'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strnegator'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strjoin'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strhashes'] + ) . \PHP_EOL; echo '' . \PHP_EOL; // these field only exists in 8.2 and before in pg_catalog if (isset($oprdata->fields['oprlsortop'])) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strmerges'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strrestrict'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strleftsort'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strrightsort'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strlessthan'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strgreaterthan'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strmerges'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } echo '
    {$this->lang['strname']}
    %s', $this->misc->printVal($oprdata->fields['oprname']), '
    {$this->lang['strleftarg']}
    %s', $this->misc->printVal($oprdata->fields['oprleftname']), '
    {$this->lang['strrightarg']}
    %s', $this->misc->printVal($oprdata->fields['oprrightname']), '
    {$this->lang['strcommutator']}
    %s', $this->misc->printVal($oprdata->fields['oprcom']), '
    {$this->lang['strnegator']}
    %s', $this->misc->printVal($oprdata->fields['oprnegate']), '
    {$this->lang['strjoin']}
    %s', $this->misc->printVal($oprdata->fields['oprjoin']), '
    {$this->lang['strhashes']}
    %s', ($oprdata->fields['oprcanhash']) ? $this->lang['stryes'] : $this->lang['strno'], '
    {$this->lang['strmerges']}
    %s', ('0' !== $oprdata->fields['oprlsortop'] && '0' !== $oprdata->fields['oprrsortop']) ? $this->lang['stryes'] : $this->lang['strno'], '
    {$this->lang['strrestrict']}
    %s', $this->misc->printVal($oprdata->fields['oprrest']), '
    {$this->lang['strleftsort']}
    %s', $this->misc->printVal($oprdata->fields['oprlsortop']), '
    {$this->lang['strrightsort']}
    %s', $this->misc->printVal($oprdata->fields['oprrsortop']), '
    {$this->lang['strlessthan']}
    %s', $this->misc->printVal($oprdata->fields['oprltcmpop']), '
    {$this->lang['strgreaterthan']}
    %s', $this->misc->printVal($oprdata->fields['oprgtcmpop']), '
    {$this->lang['strmerges']}
    %s', $data->phpBool($oprdata->fields['oprcanmerge']) ? $this->lang['stryes'] : $this->lang['strno'], '
    ' . \PHP_EOL; @@ -254,16 +299,29 @@ class OperatorsController extends BaseController $this->printTrail('operator'); $this->printTitle($this->lang['strdrop'], 'pg.operator.drop'); - echo '

    ', \sprintf($this->lang['strconfdropoperator'], $this->misc->printVal($_REQUEST['operator'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropoperator'], + $this->misc->printVal($_REQUEST['operator']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { $status = $data->dropOperator($_POST['operator_oid'], isset($_POST['cascade'])); diff --git a/src/controllers/PrivilegesController.php b/src/controllers/PrivilegesController.php index c5e5498e..fc4397b3 100644 --- a/src/controllers/PrivilegesController.php +++ b/src/controllers/PrivilegesController.php @@ -102,9 +102,17 @@ class PrivilegesController extends BaseController echo '' . \PHP_EOL; if ($data->hasRoles()) { - echo ""; + echo \sprintf( + '', + $this->lang['strrole'] + ); } else { - echo ""; + echo \sprintf( + '', + $this->lang['strtype'], + $this->lang['struser'], + $this->lang['strgroup'] + ); } foreach ($data->privlist[$subject] as $v2) { @@ -113,11 +121,17 @@ class PrivilegesController extends BaseController continue; } - echo "" . \PHP_EOL; + echo \sprintf( + '', + $v2 + ) . \PHP_EOL; } if ($data->hasGrantOption()) { - echo ""; + echo \sprintf( + '', + $this->lang['strgrantor'] + ); } echo '' . \PHP_EOL; @@ -126,7 +140,10 @@ class PrivilegesController extends BaseController foreach ($privileges as $v) { $id = (0 === ($i % 2) ? '1' : '2'); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $id + ) . \PHP_EOL; if (!$data->hasRoles()) { echo '' . \PHP_EOL; @@ -165,7 +182,10 @@ class PrivilegesController extends BaseController echo '
    {$this->lang['strrole']}
    %s
    {$this->lang['strtype']}{$this->lang['struser']}/{$this->lang['strgroup']}
    %s%s/%s{$v2}%s{$this->lang['strgrantor']}%s
    ', $this->misc->printVal($v[0]), '
    '; } else { - echo "

    {$this->lang['strnoprivileges']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnoprivileges'] + ) . \PHP_EOL; } $this->printGrantLinks(); } @@ -183,9 +203,18 @@ class PrivilegesController extends BaseController case 'sequence': case 'function': case 'tablespace': - $alllabel = "showall{$subject}s"; - $allurl = "{$subject}s"; - $alltxt = $this->lang["strshowall{$subject}s"]; + $alllabel = \sprintf( + 'showall%ss', + $subject + ); + $allurl = \sprintf( + '%ss', + $subject + ); + $alltxt = $this->lang[\sprintf( + 'strshowall%ss', + $subject + )]; break; case 'schema': @@ -212,7 +241,10 @@ class PrivilegesController extends BaseController 'database' => $_REQUEST['database'], 'schema' => $_REQUEST['schema'], $subject => $object, - "{$subject}_oid" => $objectoid, + \sprintf( + '%s_oid', + $subject + ) => $objectoid, 'subject' => $subject, ]; } elseif ('column' === $subject) { @@ -318,17 +350,29 @@ class PrivilegesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strusers'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strgroups'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strprivileges'] + ) . \PHP_EOL; echo '' . \PHP_EOL; // Grant option if ($data->hasGrantOption()) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stroptions'] + ) . \PHP_EOL; echo '
    {$this->lang['strusers']}
    %s
    {$this->lang['strgroups']}
    %s' . \PHP_EOL; echo '' . \PHP_EOL; // Only show groups if there are groups! @@ -337,25 +381,45 @@ class PrivilegesController extends BaseController while (!$groups->EOF) { $gname = \htmlspecialchars($groups->fields['groname']); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $gname + ) . \PHP_EOL; $groups->moveNext(); } echo '' . \PHP_EOL; } echo '
    {$this->lang['strprivileges']}
    %s' . \PHP_EOL; foreach ($data->privlist[$_REQUEST['subject']] as $v) { $v = \htmlspecialchars($v); - echo "
    " . \PHP_EOL; + echo \sprintf( + '
    ', + $v, + $v + ) . \PHP_EOL; } echo '
    {$this->lang['stroptions']}
    %s' . \PHP_EOL; if ('grant' === $mode) { @@ -389,9 +453,17 @@ class PrivilegesController extends BaseController } echo $this->view->form; - echo \sprintf('%s', $mode, $this->lang['str' . $mode], \PHP_EOL); + echo \sprintf( + '%s', + $mode, + $this->lang['str' . $mode], + \PHP_EOL + ); - echo "lang['strcancel']}\" />

    "; + echo \sprintf( + '

    ', + $this->lang['strcancel'] + ); echo '' . \PHP_EOL; } diff --git a/src/controllers/RolesController.php b/src/controllers/RolesController.php index 85c932dd..9f44e697 100644 --- a/src/controllers/RolesController.php +++ b/src/controllers/RolesController.php @@ -6,6 +6,7 @@ namespace PHPPgAdmin\Controller; +use ADORecordSet; use PHPPgAdmin\Decorators\Decorator; /** @@ -116,7 +117,10 @@ class RolesController extends BaseController 'role' => [ 'title' => $this->lang['strrole'], 'field' => Decorator::field('rolname'), - 'url' => \containerInstance()->subFolder . "/redirect/role?action=properties&{$this->misc->href}&", + 'url' => \containerInstance()->subFolder . \sprintf( + '/redirect/role?action=properties&%s&', + $this->misc->href + ), 'vars' => ['rolename' => 'rolname'], ], 'group' => [ @@ -242,42 +246,92 @@ class RolesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strpassword'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconfirm'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strsuper'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcreatedb'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcancreaterole'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strinheritsprivs'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcanlogin'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconnlimit'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strexpires'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; $roles = $data->getRoles(); if (0 < $roles->recordCount()) { - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strmemberof'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; $roles->moveFirst(); - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strmembers'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; $roles->moveFirst(); - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['stradminmembers'] + ) . \PHP_EOL; echo "\t\t
    {$this->lang['strname']}_maxNameLen}\" name=\"formRolename\" value=\"", \htmlspecialchars($_POST['formRolename']), "\" />
    {$this->lang['strpassword']}
    %s
    %s
    {$this->lang['strconfirm']}
    %s
    {$this->lang['strconnlimit']}
    %s
    {$this->lang['strexpires']}
    %s
    {$this->lang['strmemberof']}
    %s" . \PHP_EOL; echo "\t\t\t
    {$this->lang['strmembers']}
    %s" . \PHP_EOL; echo "\t\t\t
    {$this->lang['stradminmembers']}
    %s" . \PHP_EOL; echo "\t\t\t
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } @@ -379,7 +454,10 @@ class RolesController extends BaseController $roledata = $data->getRole($_REQUEST['rolename']); if (0 >= $roledata->recordCount()) { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; return; } @@ -395,30 +473,73 @@ class RolesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo "\t\t\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strpassword'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconfirm'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strsuper'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcreatedb'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcancreaterole'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strinheritsprivs'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcanlogin'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconnlimit'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strexpires'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; $this->_populateMemberof($data); @@ -433,13 +554,20 @@ class RolesController extends BaseController $roles = $data->getRoles($_REQUEST['rolename']); if (0 < $roles->recordCount()) { - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strmemberof'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; $roles->moveFirst(); - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strmembers'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; $roles->moveFirst(); - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['stradminmembers'] + ) . \PHP_EOL; echo "\t\t%s
    {$this->lang['strname']}", ($canRename ? "_maxNameLen}\" value=\"" . \htmlspecialchars($_POST['formNewRoleName']) . '" />' : $this->misc->printVal($roledata->fields['rolname'])), "
    {$this->lang['strpassword']}
    %s", ($canRename ? \sprintf( + '' : $this->misc->printVal($roledata->fields['rolname'])), "
    %s
    {$this->lang['strconfirm']}
    %s
    {$this->lang['strconnlimit']}
    %s
    {$this->lang['strexpires']}
    %s
    {$this->lang['strmemberof']}
    %s" . \PHP_EOL; echo "\t\t\t
    {$this->lang['strmembers']}
    %s" . \PHP_EOL; echo "\t\t\t
    {$this->lang['stradminmembers']}
    %s" . \PHP_EOL; echo "\t\t\t' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } @@ -533,14 +682,24 @@ class RolesController extends BaseController $this->printTrail('role'); $this->printTitle($this->lang['strdroprole'], 'pg.role.drop'); - echo '

    ', \sprintf($this->lang['strconfdroprole'], $this->misc->printVal($_REQUEST['rolename'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdroprole'], + $this->misc->printVal($_REQUEST['rolename']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { $status = $data->dropRole($_REQUEST['rolename']); @@ -578,25 +737,65 @@ class RolesController extends BaseController echo '' . \PHP_EOL; echo "\t\n\t\t" . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strsuper'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcreatedb'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcancreaterole'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strinheritsprivs'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcanlogin'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconnlimit'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strexpires'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strsessiondefaults'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strmemberof'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strmembers'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['stradminmembers'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
    DescriptionValue
    {$this->lang['strname']}
    %s", \htmlspecialchars($_REQUEST['rolename']), "
    {$this->lang['strsuper']}
    %s", (($roledata->fields['rolsuper']) ? $this->lang['stryes'] : $this->lang['strno']), "
    {$this->lang['strcreatedb']}
    %s", (($roledata->fields['rolcreatedb']) ? $this->lang['stryes'] : $this->lang['strno']), '
    {$this->lang['strcancreaterole']}
    %s", (($roledata->fields['rolcreaterole']) ? $this->lang['stryes'] : $this->lang['strno']), '
    {$this->lang['strinheritsprivs']}
    %s", (($roledata->fields['rolinherit']) ? $this->lang['stryes'] : $this->lang['strno']), '
    {$this->lang['strcanlogin']}
    %s", (($roledata->fields['rolcanlogin']) ? $this->lang['stryes'] : $this->lang['strno']), '
    {$this->lang['strconnlimit']}
    %s", ('-1' === $roledata->fields['rolconnlimit'] ? $this->lang['strnolimit'] : $this->misc->printVal($roledata->fields['rolconnlimit'])), '
    {$this->lang['strexpires']}
    %s", ('infinity' === $roledata->fields['rolvaliduntil'] || null === $roledata->fields['rolvaliduntil'] ? $this->lang['strnever'] : $this->misc->printVal($roledata->fields['rolvaliduntil'])), '
    {$this->lang['strsessiondefaults']}
    %s", $this->misc->printVal($roledata->fields['rolconfig']), '
    {$this->lang['strmemberof']}
    %s"; $memberof = $data->getMemberOf($_REQUEST['rolename']); @@ -607,7 +806,11 @@ class RolesController extends BaseController } } echo "
    {$this->lang['strmembers']}
    %s"; $members = $data->getMembers($_REQUEST['rolename']); @@ -618,7 +821,11 @@ class RolesController extends BaseController } } echo "
    {$this->lang['stradminmembers']}
    %s"; $adminmembers = $data->getMembers($_REQUEST['rolename'], 't'); @@ -631,7 +838,10 @@ class RolesController extends BaseController echo "
    ' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } $navlinks = [ @@ -704,14 +914,39 @@ class RolesController extends BaseController $roledata->fields['rolcreaterole'] = $data->phpBool($roledata->fields['rolcreaterole']); $roledata->fields['rolinherit'] = $data->phpBool($roledata->fields['rolinherit']); echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strsuper'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcreatedb'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcancreaterole'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strinheritsprivs'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strconnlimit'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strexpires'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strsessiondefaults'] + ) . \PHP_EOL; echo "\t" . \PHP_EOL; echo "\t\n\t\t' . \PHP_EOL; echo "\t\t' . \PHP_EOL; @@ -723,7 +958,10 @@ class RolesController extends BaseController echo "\t\t' . \PHP_EOL; echo "\t\n
    {$this->lang['strname']}{$this->lang['strsuper']}{$this->lang['strcreatedb']}{$this->lang['strcancreaterole']}{$this->lang['strinheritsprivs']}{$this->lang['strconnlimit']}{$this->lang['strexpires']}{$this->lang['strsessiondefaults']}
    %s%s%s%s%s%s%s%s
    ", $this->misc->printVal($roledata->fields['rolname']), '", $this->misc->printVal($roledata->fields['rolsuper'], 'yesno'), '", $this->misc->printVal($roledata->fields['rolconfig']), '
    " . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } $this->printNavLinks(['changepassword' => [ @@ -764,16 +1002,30 @@ class RolesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strpassword'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconfirm'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
    {$this->lang['strpassword']}
    %s
    {$this->lang['strconfirm']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strok']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strok'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; } else { // Check that password is minimum length @@ -797,8 +1049,8 @@ class RolesController extends BaseController /** * Adjusts the content of the $_POST superglobal according to role data. * - * @param \ADORecordSet $roledata The roledata - * @param bool $canRename Indicates if role can be renamed + * @param ADORecordSet $roledata The roledata + * @param bool $canRename Indicates if role can be renamed */ private function _adjustPostVars($roledata, $canRename): void { diff --git a/src/controllers/RulesController.php b/src/controllers/RulesController.php index 852ef66f..873d1228 100644 --- a/src/controllers/RulesController.php +++ b/src/controllers/RulesController.php @@ -172,25 +172,49 @@ class RulesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; - echo "', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strevent'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strwhere'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strinstead'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['straction'] + ) . \PHP_EOL; echo '" . \PHP_EOL; + echo \sprintf( + '', + $id + ) . \PHP_EOL; foreach ($rs->fields as $k => $v) { $finfo = $rs->fetchField($k); @@ -232,10 +247,16 @@ class SqlController extends BaseController ++$i; } echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strevent']}
    %s
    {$this->lang['strwhere']}
    %s
    '; echo '' . \PHP_EOL; echo '
    {$this->lang['straction']}
    %s'; echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; @@ -203,8 +227,15 @@ class RulesController extends BaseController echo '' . \PHP_EOL; echo $this->view->form; - echo "

    lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '

    ', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { if ('' === \trim($_POST['name'])) { @@ -255,9 +286,18 @@ class RulesController extends BaseController '" value="', \htmlspecialchars($_REQUEST[$_REQUEST['reltype']]), '" />' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "

    " . \PHP_EOL; - echo "lang['stryes']}\" />" . \PHP_EOL; - echo "lang['strno']}\" />" . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stryes'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strno'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { $status = $data->dropRule($_POST['rule'], $_POST[$_POST['subject']], isset($_POST['cascade'])); diff --git a/src/controllers/SchemasController.php b/src/controllers/SchemasController.php index 83bf73af..98e6162b 100644 --- a/src/controllers/SchemasController.php +++ b/src/controllers/SchemasController.php @@ -7,13 +7,14 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\ExportTrait; /** * Base controller class. */ class SchemasController extends BaseController { - use \PHPPgAdmin\Traits\ExportTrait; + use ExportTrait; public $controller_title = 'strschemas'; @@ -106,7 +107,10 @@ class SchemasController extends BaseController 'schema' => [ 'title' => $this->lang['strschema'], 'field' => Decorator::field('nspname'), - 'url' => \containerInstance()->subFolder . "{$destination}&", + 'url' => \containerInstance()->subFolder . \sprintf( + '%s&', + $destination + ), 'vars' => ['schema' => 'nspname'], ], 'owner' => [ @@ -282,21 +286,42 @@ class SchemasController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; // Owner - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strowner'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; @@ -305,8 +330,14 @@ class SchemasController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } @@ -362,16 +393,25 @@ class SchemasController extends BaseController echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strowner']}
    %s\n\t\t\t\n\t\t
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strname'] + ) . \PHP_EOL; echo "\t\t" . \PHP_EOL; echo "\t" . \PHP_EOL; if ($data->hasAlterSchemaOwner()) { $users = $data->getUsers(); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { - echo ""; + echo \sprintf( + '', + $_POST['owner'] + ); } echo "\t" . \PHP_EOL; - echo "\t\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t' . \PHP_EOL; echo "\t" . \PHP_EOL; echo '
    {$this->lang['strname']}%s"; - echo "\t\t\t_maxNameLen}\" value=\"", + echo \sprintf( + ' ' . \PHP_EOL; echo "\t\t
    {$this->lang['strowner']}
    %s
    {$this->lang['strcomment']}%s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -442,20 +498,36 @@ class SchemasController extends BaseController if (isset($_REQUEST['ma'])) { foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfdropschema'], $this->misc->printVal($a['nsp'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropschema'], + $this->misc->printVal($a['nsp']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } } else { - echo '

    ', \sprintf($this->lang['strconfdropschema'], $this->misc->printVal($_REQUEST['nsp'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropschema'], + $this->misc->printVal($_REQUEST['nsp']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { if (\is_array($_POST['nsp'])) { diff --git a/src/controllers/SequencesController.php b/src/controllers/SequencesController.php index 9512e7e1..d35a843d 100644 --- a/src/controllers/SequencesController.php +++ b/src/controllers/SequencesController.php @@ -125,7 +125,10 @@ class SequencesController extends BaseController 'sequence' => [ 'title' => $this->lang['strsequence'], 'field' => Decorator::field('seqname'), - 'url' => "sequences?action=properties&{$this->misc->href}&", + 'url' => \sprintf( + 'sequences?action=properties&%s&', + $this->misc->href + ), 'vars' => ['sequence' => 'seqname'], ], 'owner' => [ @@ -250,19 +253,49 @@ class SequencesController extends BaseController } echo ''; - echo ""; + echo \sprintf( + '', + $this->lang['strname'] + ); if ($data->hasAlterSequenceStart()) { - echo ""; + echo \sprintf( + '', + $this->lang['strstartvalue'] + ); } - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; + echo \sprintf( + '', + $this->lang['strlastvalue'] + ); + echo \sprintf( + '', + $this->lang['strincrementby'] + ); + echo \sprintf( + '', + $this->lang['strmaxvalue'] + ); + echo \sprintf( + '', + $this->lang['strminvalue'] + ); + echo \sprintf( + '', + $this->lang['strcachevalue'] + ); + echo \sprintf( + '', + $this->lang['strlogcount'] + ); + echo \sprintf( + '', + $this->lang['strcancycle'] + ); + echo \sprintf( + '', + $this->lang['striscalled'] + ); echo ''; echo ''; @@ -377,7 +410,10 @@ class SequencesController extends BaseController $this->printNavLinks($navlinks, 'sequences-properties', \get_defined_vars()); } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -406,19 +442,35 @@ class SequencesController extends BaseController if (isset($_REQUEST['ma'])) { foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfdropsequence'], $this->misc->printVal($a['sequence'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropsequence'], + $this->misc->printVal($a['sequence']) + ), '

    ' . \PHP_EOL; \printf('', \htmlspecialchars($a['sequence'])); } } else { - echo '

    ', \sprintf($this->lang['strconfdropsequence'], $this->misc->printVal($_REQUEST['sequence'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropsequence'], + $this->misc->printVal($_REQUEST['sequence']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { if (\is_array($_POST['sequence'])) { @@ -497,37 +549,61 @@ class SequencesController extends BaseController echo '' . \PHP_EOL; echo '
    {$this->lang['strname']}
    %s{$this->lang['strstartvalue']}%s{$this->lang['strlastvalue']}{$this->lang['strincrementby']}{$this->lang['strmaxvalue']}{$this->lang['strminvalue']}{$this->lang['strcachevalue']}{$this->lang['strlogcount']}{$this->lang['strcancycle']}{$this->lang['striscalled']}
    %s%s%s%s%s%s%s%s
    ', $this->misc->printVal($sequence->fields['seqname']), '
    ' . \PHP_EOL; - echo "" . \PHP_EOL; - echo "', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strincrementby'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strminvalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strmaxvalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strstartvalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcachevalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancycle'] + ) . \PHP_EOL; echo '' . \PHP_EOL; @@ -535,8 +611,15 @@ class SequencesController extends BaseController echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strincrementby']}
    %s
    {$this->lang['strminvalue']}
    %s
    {$this->lang['strmaxvalue']}
    %s
    {$this->lang['strstartvalue']}
    %s
    {$this->lang['strcachevalue']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } @@ -652,20 +735,36 @@ class SequencesController extends BaseController if (\is_object($sequence) && 0 < $sequence->recordCount()) { echo '
    ' . \PHP_EOL; echo ''; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strlastvalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo '
    {$this->lang['strlastvalue']}
    %s'; - echo "_maxNameLen}\" value=\"", + echo \sprintf( + '
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strsetval']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strsetval'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -763,9 +862,15 @@ class SequencesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; @@ -773,7 +878,10 @@ class SequencesController extends BaseController // Fetch all users $users = $data->getUsers(); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strschema'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcomment'] + ) . \PHP_EOL; echo '' . \PHP_EOL; if ($data->hasAlterSequenceStart()) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strstartvalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strrestartvalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strincrementby'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strmaxvalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strminvalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcachevalue'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancycle'] + ) . \PHP_EOL; echo '' . \PHP_EOL; @@ -852,11 +987,21 @@ class SequencesController extends BaseController echo '

    ' . \PHP_EOL; echo $this->view->form; echo '' . \PHP_EOL; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } } diff --git a/src/controllers/ServersController.php b/src/controllers/ServersController.php index a7f12968..57337948 100644 --- a/src/controllers/ServersController.php +++ b/src/controllers/ServersController.php @@ -6,14 +6,16 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\ArrayRecordSet; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\ServersTrait; /** * Base controller class. */ class ServersController extends BaseController { - use \PHPPgAdmin\Traits\ServersTrait; + use ServersTrait; public $table_place = 'servers-servers'; @@ -171,7 +173,7 @@ class ServersController extends BaseController } $nodes = \array_merge($nodes, $this->getServers(false, $group_id)); - $nodes = new \PHPPgAdmin\ArrayRecordSet($nodes); + $nodes = new ArrayRecordSet($nodes); } else { // no srv_group $nodes = $this->getServers(true, false); @@ -202,7 +204,10 @@ class ServersController extends BaseController $this->view->setReloadBrowser(true); - echo \sprintf($this->lang['strlogoutmsg'], $server_info['desc']); + echo \sprintf( + $this->lang['strlogoutmsg'], + $server_info['desc'] + ); } /** @@ -211,7 +216,7 @@ class ServersController extends BaseController * @param bool $recordset return as RecordSet suitable for HTMLTableController::printTable if true, otherwise just return an array * @param mixed $group_id a group name to filter the returned servers using $this->conf[srv_groups] * - * @return array|\PHPPgAdmin\ArrayRecordSet either an array or a Recordset suitable for HTMLTableController::printTable + * @return array|ArrayRecordSet either an array or a Recordset suitable for HTMLTableController::printTable */ private function getServersGroups($recordset = false, $group_id = false) { @@ -275,7 +280,7 @@ class ServersController extends BaseController } if ($recordset) { - return new \PHPPgAdmin\ArrayRecordSet($grps); + return new ArrayRecordSet($grps); } return $grps; diff --git a/src/controllers/SqlController.php b/src/controllers/SqlController.php index 2ef31863..d7a9d526 100644 --- a/src/controllers/SqlController.php +++ b/src/controllers/SqlController.php @@ -6,6 +6,9 @@ namespace PHPPgAdmin\Controller; +use ADORecordSet; +use PHPPgAdmin\ADOdbException; + /** * Base controller class. */ @@ -101,7 +104,7 @@ class SqlController extends BaseController } return $this->execute_query(); - } catch (\PHPPgAdmin\ADOdbException $e) { + } catch (ADOdbException $e) { $message = $e->getMessage(); $trace = $e->getTraceAsString(); $lastError = $_connection->getLastError(); @@ -142,7 +145,10 @@ class SqlController extends BaseController while (false !== $row) { $id = (0 === ($i % 2) ? '1' : '2'); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $id + ) . \PHP_EOL; foreach ($row as $k => $v) { echo ''; @@ -153,7 +159,10 @@ class SqlController extends BaseController } echo '
    {$this->lang['strname']}
    %s'; - echo "_maxNameLen}\" value=\"", + echo \sprintf( + '
    {$this->lang['strowner']}
    %s
    {$this->lang['strschema']}
    %s
    {$this->lang['strcomment']}
    %s'; echo '
    {$this->lang['strstartvalue']}
    %s
    {$this->lang['strrestartvalue']}
    %s
    {$this->lang['strincrementby']}
    %s
    {$this->lang['strmaxvalue']}
    %s
    {$this->lang['strminvalue']}
    %s
    {$this->lang['strcachevalue']}
    %s
    ', $misc->printVal($v, \pg_fieldtype($rs, $k), ['null' => true]), '

    ' . \PHP_EOL; - echo $i, " {$lang['strrows']}

    " . \PHP_EOL; + echo $i, \sprintf( + ' %s

    ', + $lang['strrows'] + ) . \PHP_EOL; break; case \PGSQL_COMMAND_OK: @@ -162,7 +171,10 @@ class SqlController extends BaseController echo \htmlspecialchars(\pg_result_status($rs, \PGSQL_STATUS_STRING)), '
    ' . \PHP_EOL; } elseif (0 < $data->conn->Affected_Rows()) { // Otherwise if any rows have been affected - echo $data->conn->Affected_Rows(), " {$lang['strrowsaff']}
    " . \PHP_EOL; + echo $data->conn->Affected_Rows(), \sprintf( + ' %s
    ', + $lang['strrowsaff'] + ) . \PHP_EOL; } // Otherwise output nothing... break; @@ -187,7 +199,7 @@ class SqlController extends BaseController \set_time_limit(25000); /** - * @var \ADORecordSet + * @var ADORecordSet */ $rs = $data->conn->Execute($this->query); @@ -221,7 +233,10 @@ class SqlController extends BaseController while (!$rs->EOF) { $id = (0 === ($i % 2) ? '1' : '2'); - echo "
    ' . \PHP_EOL; - echo '

    ', $rs->recordCount(), " {$this->lang['strrows']}

    " . \PHP_EOL; + echo '

    ', $rs->recordCount(), \sprintf( + ' %s

    ', + $this->lang['strrows'] + ) . \PHP_EOL; } elseif (0 < $data->conn->Affected_Rows()) { // Otherwise if any rows have been affected - echo '

    ', $data->conn->Affected_Rows(), " {$this->lang['strrowsaff']}

    " . \PHP_EOL; + echo '

    ', $data->conn->Affected_Rows(), \sprintf( + ' %s

    ', + $this->lang['strrowsaff'] + ) . \PHP_EOL; } else { // Otherwise nodata to print echo '

    ', $this->lang['strnodata'], '

    ' . \PHP_EOL; @@ -267,10 +288,16 @@ class SqlController extends BaseController // Display duration if we know it if (null !== $this->duration) { - echo '

    ', \sprintf($this->lang['strruntime'], $this->duration), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strruntime'], + $this->duration + ), '

    ' . \PHP_EOL; } - echo "

    {$this->lang['strsqlexecuted']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strsqlexecuted'] + ) . \PHP_EOL; $navlinks = []; $fields = [ diff --git a/src/controllers/SqleditController.php b/src/controllers/SqleditController.php index acbfea6c..c215fd68 100644 --- a/src/controllers/SqleditController.php +++ b/src/controllers/SqleditController.php @@ -6,12 +6,14 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\Traits\ServersTrait; + /** * Base controller class. */ class SqleditController extends BaseController { - use \PHPPgAdmin\Traits\ServersTrait; + use ServersTrait; public $query = ''; @@ -144,7 +146,10 @@ class SqleditController extends BaseController $default_html .= '
    ' . \PHP_EOL; $default_html .= $this->printConnection('find', false); - $default_html .= '

    _maxNameLen}\" />" . \PHP_EOL; + $default_html .= '

    ', + $data->_maxNameLen + ) . \PHP_EOL; $filters = $this->_getFilters(); $advanced_filters = $this->_getAdvancedFilters(); @@ -159,20 +164,41 @@ class SqleditController extends BaseController // Output list of filters. This is complex due to all the 'has' and 'conf' feature possibilities $default_html .= "' . \PHP_EOL; - $default_html .= "lang['strfind']}\" />" . \PHP_EOL; + $default_html .= \sprintf( + '', + $this->lang['strfind'] + ) . \PHP_EOL; $default_html .= '

    ' . \PHP_EOL; $default_html .= '
    ' . \PHP_EOL; diff --git a/src/controllers/TablesController.php b/src/controllers/TablesController.php index ec774f14..6dbcdd7b 100644 --- a/src/controllers/TablesController.php +++ b/src/controllers/TablesController.php @@ -7,14 +7,17 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\AdminTrait; +use PHPPgAdmin\Traits\InsertEditRowTrait; +use PHPPgAdmin\XHtml\HTMLController; /** * Base controller class. */ class TablesController extends BaseController { - use \PHPPgAdmin\Traits\AdminTrait; - use \PHPPgAdmin\Traits\InsertEditRowTrait; + use AdminTrait; + use InsertEditRowTrait; public $table_place = 'tables-tables'; @@ -317,20 +320,42 @@ class TablesController extends BaseController echo '
    '; echo \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strnumcols'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['stroptions'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; // Tablespace (if there are any) if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strtablespace'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; } - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; @@ -356,8 +391,15 @@ class TablesController extends BaseController echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strnext']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strnext'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; break; @@ -391,10 +433,26 @@ class TablesController extends BaseController // Output table header echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strnumcols']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['stroptions']}
    %s
    {$this->lang['strtablespace']}
    %s\n\t\t\t\n\t\t
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; - echo "\t"; - echo ""; - echo ""; - echo "" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strcolumn'], + $this->lang['strtype'] + ); + echo \sprintf( + '', + $this->lang['strlength'], + $this->lang['strnotnull'] + ); + echo \sprintf( + '', + $this->lang['struniquekey'], + $this->lang['strprimarykey'] + ); + echo \sprintf( + '', + $this->lang['strdefault'], + $this->lang['strcomment'] + ) . \PHP_EOL; for ($i = 0; $i < $_REQUEST['fields']; ++$i) { if (!isset($_REQUEST['field'][$i])) { @@ -414,10 +472,20 @@ class TablesController extends BaseController } echo "\t\n\t\t' . \PHP_EOL; - echo "\t\t' . \PHP_EOL; - echo "\t\t"; } // Output array type selector - echo "\t\t" . \PHP_EOL; - echo "\t\t' . \PHP_EOL; - echo "\t\t' . \PHP_EOL; - echo "\t\t' . \PHP_EOL; + echo \sprintf( + ' ' . \PHP_EOL; - echo "\t\t' . \PHP_EOL; - echo "\t\t' . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; + \sprintf( + '" /> + + + ', + $i, + $i + ) . \PHP_EOL; } echo '
    {$this->lang['strcolumn']}{$this->lang['strtype']}{$this->lang['strlength']}{$this->lang['strnotnull']}{$this->lang['struniquekey']}{$this->lang['strprimarykey']}{$this->lang['strdefault']}{$this->lang['strcomment']}
    %s%s%s%s%s%s%s%s
    ", $i + 1, '. _maxNameLen}\" value=\"", + echo \sprintf( + ' \n\t\t\t + \n\t\t\t + \n\t\t - -
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; @@ -491,8 +590,15 @@ class TablesController extends BaseController if (isset($_REQUEST['spcname'])) { echo '' . \PHP_EOL; } - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; break; @@ -564,7 +670,10 @@ class TablesController extends BaseController break; default: - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } } @@ -600,21 +709,45 @@ class TablesController extends BaseController foreach ($tbltmp as $a) { $data->fieldClean($a['nspname']); $data->fieldClean($a['relname']); - $tables["\"{$a['nspname']}\".\"{$a['relname']}\""] = \serialize(['schema' => $a['nspname'], 'table' => $a['relname']]); - - if ($_REQUEST['like'] === $tables["\"{$a['nspname']}\".\"{$a['relname']}\""]) { - $tblsel = \htmlspecialchars($tables["\"{$a['nspname']}\".\"{$a['relname']}\""]); + $tables[\sprintf( + '"%s"."%s"', + $a['nspname'], + $a['relname'] + )] = \serialize(['schema' => $a['nspname'], 'table' => $a['relname']]); + + if ($_REQUEST['like'] === $tables[\sprintf( + '"%s"."%s"', + $a['nspname'], + $a['relname'] + )]) { + $tblsel = \htmlspecialchars($tables[\sprintf( + '"%s"."%s"', + $a['nspname'], + $a['relname'] + )]); } } unset($tbltmp); echo '
    ' . \PHP_EOL; - echo "\n\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + '
    {$this->lang['strname']}_maxNameLen}\" value=\"", \htmlspecialchars($_REQUEST['name']), "\" />
    {$this->lang['strcreatetablelikeparent']}
    + + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcreatetablelikeparent'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; if ($data->hasTablespaces()) { @@ -628,35 +761,60 @@ class TablesController extends BaseController $tblsp[$a['spcname']] = $a['spcname']; } - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strtablespace'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; } } - echo "\t\n\t\t\n\t\t + + \n\t" . \PHP_EOL; echo '
    %s
    %s"; - echo \PHPPgAdmin\XHtml\HTMLController::printCombo($tables, 'like', true, $tblsel, false); + echo HTMLController::printCombo($tables, 'like', true, $tblsel, false); echo "
    {$this->lang['strtablespace']}
    %s"; - echo \PHPPgAdmin\XHtml\HTMLController::printCombo($tblsp, 'tablespace', true, $_REQUEST['tablespace'], false); + echo HTMLController::printCombo($tblsp, 'tablespace', true, $_REQUEST['tablespace'], false); echo "
    {$this->lang['stroptions']}"; + echo \sprintf( + '
    %s', + $this->lang['stroptions'] + ); echo '"; + \sprintf( + '/>%s', + $this->lang['strcreatelikewithdefaults'] + ); if ($data->hasCreateTableLikeWithConstraints()) { echo '
    "; + \sprintf( + '/>%s', + $this->lang['strcreatelikewithconstraints'] + ); } if ($data->hasCreateTableLikeWithIndexes()) { echo '
    "; + \sprintf( + '/>%s', + $this->lang['strcreatelikewithindexes'] + ); } echo "
    '; echo '' . \PHP_EOL; echo $this->view->form; - echo "

    lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '

    ', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { if ('' === \trim($_REQUEST['name'])) { @@ -730,9 +888,20 @@ class TablesController extends BaseController echo '' . \PHP_EOL; // Output table header - echo ""; - echo ""; - echo ""; + echo \sprintf( + '', + $this->lang['strshow'], + $this->lang['strcolumn'] + ); + echo \sprintf( + '', + $this->lang['strtype'], + $this->lang['stroperator'] + ); + echo \sprintf( + '', + $this->lang['strvalue'] + ); $i = 0; @@ -749,7 +918,10 @@ class TablesController extends BaseController // Continue drawing row $id = (0 === ($i % 2) ? '1' : '2'); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $id + ) . \PHP_EOL; echo ''; echo ''; echo '" . \PHP_EOL; echo ''; @@ -776,18 +954,35 @@ class TablesController extends BaseController $attrs->moveNext(); } // Select all checkbox - echo ""; + echo \sprintf( + '', + $this->lang['strselectallfields'] + ); echo '
    {$this->lang['strshow']}{$this->lang['strcolumn']}{$this->lang['strtype']}{$this->lang['stroperator']}{$this->lang['strvalue']}
    %s%s%s%s%s
    '; echo 'fields['attname']]) ? ' checked="checked"' : '', @@ -757,7 +929,10 @@ class TablesController extends BaseController echo '', $this->misc->printVal($attrs->fields['attname']), '', $this->misc->printVal($data->formatType($attrs->fields['type'], $attrs->fields['atttypmod'])), ''; - echo "', + $attrs->fields['attname'] + ) . \PHP_EOL; foreach (\array_keys($data->selectOps) as $v) { echo '', $data->printField( - "values[{$attrs->fields['attname']}]", + \sprintf( + 'values[%s]', + $attrs->fields['attname'] + ), $_REQUEST['values'][$attrs->fields['attname']], $attrs->fields['type'] ), '
    ' . \PHP_EOL; } else { - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } echo '

    ' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strselect']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strselect'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; return; @@ -856,9 +1051,20 @@ class TablesController extends BaseController echo '' . \PHP_EOL; // Output table header - echo ""; - echo ""; - echo ""; + echo \sprintf( + '', + $this->lang['strcolumn'], + $this->lang['strtype'] + ); + echo \sprintf( + '', + $this->lang['strformat'] + ); + echo \sprintf( + '', + $this->lang['strnull'], + $this->lang['strvalue'] + ); $i = 0; $fields = []; @@ -884,7 +1090,10 @@ class TablesController extends BaseController $requested_format = $_REQUEST['format'][$attrs->fields['attnum']]; // Continue drawing row $id = (0 === ($i % 2) ? '1' : '2'); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $id + ) . \PHP_EOL; echo ''; echo ''; echo ''; - echo "' . \PHP_EOL; echo '' . \PHP_EOL; @@ -957,24 +1184,47 @@ class TablesController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); - echo "

    lang['strinsert']}\" />" . \PHP_EOL; - echo "lang['strinsertandrepeat']}\" />" . \PHP_EOL; + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); + echo \sprintf( + '

    ', + $this->lang['strinsert'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strinsertandrepeat'] + ) . \PHP_EOL; if (false !== $fksprops) { if ('default off' !== $this->conf['autocomplete']) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strac'] + ) . \PHP_EOL; } else { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strac'] + ) . \PHP_EOL; } } echo '

    ' . \PHP_EOL; } else { - echo "

    {$this->lang['strnofieldsforinsert']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnofieldsforinsert'] + ) . \PHP_EOL; } echo $this->view->form; echo '' . \PHP_EOL; - echo \sprintf('%s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '%s', + $this->lang['strcancel'], + \PHP_EOL + ); echo ''; } @@ -1036,7 +1286,10 @@ class TablesController extends BaseController foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ' . \sprintf($this->lang['strconfemptytable'], $this->misc->printVal($a['table'])); + echo '

    ' . \sprintf( + $this->lang['strconfemptytable'], + $this->misc->printVal($a['table']) + ); echo '

    ' . \PHP_EOL; \printf('', \htmlspecialchars($a['table'])); @@ -1045,17 +1298,31 @@ class TablesController extends BaseController $this->printTrail('table'); $this->printTitle($this->lang['strempty'], 'pg.table.empty'); - echo '

    ', \sprintf($this->lang['strconfemptytable'], $this->misc->printVal($_REQUEST['table'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfemptytable'], + $this->misc->printVal($_REQUEST['table']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); // END not mutli empty } - echo ""; + echo \sprintf( + '', + $this->lang['strcascade'] + ); echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strempty']}\" /> lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strempty'], + $this->lang['strcancel'] + ) . \PHP_EOL; echo "\n"; // END if confirm } else { // Do Empty @@ -1066,7 +1333,10 @@ class TablesController extends BaseController [$status, $sql] = $data->emptyTable($t, isset($_POST['cascade'])); if (0 === $status) { - $msg .= \sprintf('%s
    ', $sql); + $msg .= \sprintf( + '%s
    ', + $sql + ); $msg .= \sprintf( '%s: %s
    ', \htmlentities($t, \ENT_QUOTES, 'UTF-8'), @@ -1088,7 +1358,10 @@ class TablesController extends BaseController [$status, $sql] = $data->emptyTable($_POST['table'], isset($_POST['cascade'])); if (0 === $status) { - $msg .= \sprintf('%s
    ', $sql); + $msg .= \sprintf( + '%s
    ', + $sql + ); $msg .= \sprintf( '%s: %s
    ', \htmlentities($_POST['table'], \ENT_QUOTES, 'UTF-8'), @@ -1130,25 +1403,44 @@ class TablesController extends BaseController foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfdroptable'], $this->misc->printVal($a['table'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdroptable'], + $this->misc->printVal($a['table']) + ), '

    ' . \PHP_EOL; \printf('', \htmlspecialchars($a['table'])); } } else { $this->printTrail('table'); $this->printTitle($this->lang['strdrop'], 'pg.table.drop'); - echo '

    ', \sprintf($this->lang['strconfdroptable'], $this->misc->printVal($_REQUEST['table'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdroptable'], + $this->misc->printVal($_REQUEST['table']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); // END if multi drop } echo '' . \PHP_EOL; echo $this->view->form; - echo "

    " . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo "\n"; // END confirm } else { //If multi drop @@ -1217,7 +1509,10 @@ class TablesController extends BaseController 'table' => [ 'title' => $this->lang['strtable'], 'field' => Decorator::field('relname'), - 'url' => \containerInstance()->subFolder . "/redirect/table?{$this->misc->href}&", + 'url' => \containerInstance()->subFolder . \sprintf( + '/redirect/table?%s&', + $this->misc->href + ), 'vars' => ['table' => 'relname'], ], 'owner' => [ diff --git a/src/controllers/TablespacesController.php b/src/controllers/TablespacesController.php index 5cd26579..41727a4c 100644 --- a/src/controllers/TablespacesController.php +++ b/src/controllers/TablespacesController.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\Decorators\Decorator; + /** * Base controller class. */ @@ -86,15 +88,15 @@ class TablespacesController extends BaseController $columns = [ 'database' => [ 'title' => $this->lang['strname'], - 'field' => \PHPPgAdmin\Decorators\Decorator::field('spcname'), + 'field' => Decorator::field('spcname'), ], 'owner' => [ 'title' => $this->lang['strowner'], - 'field' => \PHPPgAdmin\Decorators\Decorator::field('spcowner'), + 'field' => Decorator::field('spcowner'), ], 'location' => [ 'title' => $this->lang['strlocation'], - 'field' => \PHPPgAdmin\Decorators\Decorator::field('spclocation'), + 'field' => Decorator::field('spclocation'), ], 'actions' => [ 'title' => $this->lang['stractions'], @@ -104,7 +106,7 @@ class TablespacesController extends BaseController if ($data->hasSharedComments()) { $columns['comment'] = [ 'title' => $this->lang['strcomment'], - 'field' => \PHPPgAdmin\Decorators\Decorator::field('spccomment'), + 'field' => Decorator::field('spccomment'), ]; } @@ -116,7 +118,7 @@ class TablespacesController extends BaseController 'url' => 'tablespaces', 'urlvars' => [ 'action' => 'edit', - 'tablespace' => \PHPPgAdmin\Decorators\Decorator::field('spcname'), + 'tablespace' => Decorator::field('spcname'), ], ], ], @@ -128,7 +130,7 @@ class TablespacesController extends BaseController 'url' => 'tablespaces', 'urlvars' => [ 'action' => 'confirm_drop', - 'tablespace' => \PHPPgAdmin\Decorators\Decorator::field('spcname'), + 'tablespace' => Decorator::field('spcname'), ], ], ], @@ -140,7 +142,7 @@ class TablespacesController extends BaseController 'url' => 'privileges', 'urlvars' => [ 'subject' => 'tablespace', - 'tablespace' => \PHPPgAdmin\Decorators\Decorator::field('spcname'), + 'tablespace' => Decorator::field('spcname'), ], ], ], @@ -191,11 +193,20 @@ class TablespacesController extends BaseController echo '' . \PHP_EOL; echo $this->view->form; echo '
    {$this->lang['strcolumn']}{$this->lang['strtype']}{$this->lang['strformat']}{$this->lang['strnull']}{$this->lang['strvalue']}
    %s%s%s%s%s
    ', $this->misc->printVal($attrs->fields['attname']), '' . \PHP_EOL; echo $this->misc->printVal( @@ -893,12 +1102,18 @@ class TablesController extends BaseController $attrs->fields['atttypmod'] ) ); - echo "fields['attnum']}]\" value=\"", + echo \sprintf( + '' . \PHP_EOL; - echo "', + $attrs->fields['attnum'] + ) . \PHP_EOL; echo \sprintf( ' %s', ('VALUE' === $requested_format) ? ' selected="selected" ' : '', @@ -927,21 +1142,33 @@ class TablesController extends BaseController } echo 'fields['attnum']}\" style=\"white-space:nowrap;\">"; + echo \sprintf( + '', + $attrs->fields['attnum'] + ); if ((false !== $fksprops) && isset($fksprops['byfield'][$attrs->fields['attnum']])) { echo $data->printField( - "values[{$attrs->fields['attnum']}]", + \sprintf( + 'values[%s]', + $attrs->fields['attnum'] + ), $_REQUEST['values'][$attrs->fields['attnum']], 'fktype' /*force FK*/, [ - 'id' => "attr_{$attrs->fields['attnum']}", + 'id' => \sprintf( + 'attr_%s', + $attrs->fields['attnum'] + ), 'autocomplete' => 'off', 'class' => 'insert_row_input', ] ); } else { - echo $data->printField("values[{$attrs->fields['attnum']}]", $_REQUEST['values'][$attrs->fields['attnum']], $attrs->fields['type'], ['class' => 'insert_row_input']); + echo $data->printField(\sprintf( + 'values[%s]', + $attrs->fields['attnum'] + ), $_REQUEST['values'][$attrs->fields['attnum']], $attrs->fields['type'], ['class' => 'insert_row_input']); } echo '
    ' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '' . \PHP_EOL; if ($data->hasSharedComments()) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcomment'] + ) . \PHP_EOL; echo '' . \PHP_EOL; @@ -215,11 +229,21 @@ class TablespacesController extends BaseController echo '
    {$this->lang['strname']}
    %s'; - echo "_maxNameLen}\" value=\"", + echo \sprintf( + '
    {$this->lang['strowner']}
    %s
    {$this->lang['strcomment']}
    %s'; echo '
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -262,14 +286,23 @@ class TablespacesController extends BaseController $this->printTrail('tablespace'); $this->printTitle($this->lang['strdrop'], 'pg.tablespace.drop'); - echo '

    ', \sprintf($this->lang['strconfdroptablespace'], $this->misc->printVal($_REQUEST['tablespace'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdroptablespace'], + $this->misc->printVal($_REQUEST['tablespace']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; echo $this->view->form; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } else { $status = $data->droptablespace($_REQUEST['tablespace']); @@ -311,9 +344,20 @@ class TablespacesController extends BaseController echo '
    ' . \PHP_EOL; echo $this->view->form; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strowner'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strlocation'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; // Comments (if available) if ($data->hasSharedComments()) { - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; } echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", \htmlspecialchars($_POST['formSpcname']), "\" />
    {$this->lang['strowner']}
    %s
    %s
    {$this->lang['strlocation']}
    %s
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } diff --git a/src/controllers/TblpropertiesController.php b/src/controllers/TblpropertiesController.php index 5a9acd87..1122a559 100644 --- a/src/controllers/TblpropertiesController.php +++ b/src/controllers/TblpropertiesController.php @@ -7,13 +7,14 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\ExportTrait; /** * Base controller class. */ class TblpropertiesController extends BaseController { - use \PHPPgAdmin\Traits\ExportTrait; + use ExportTrait; public $controller_title = 'strtables'; @@ -359,14 +360,23 @@ class TblpropertiesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; if ($data->isSuperUser()) { - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strschema'] + ) . \PHP_EOL; echo '\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strtablespace'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; } echo '' . \PHP_EOL; echo ''; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcomment'] + ) . \PHP_EOL; echo '%s
    {$this->lang['strname']}
    %s'; - echo "_maxNameLen}\" value=\"", + echo \sprintf( + '
    {$this->lang['strowner']}
    %s
    {$this->lang['strschema']}
    %s
    {$this->lang['strtablespace']}
    %s\n\t\t\t\n\t\t
    '; - echo \sprintf(' %s', $data->hasObjectID($table->fields['relname']) ? 'checked' : '', ' WITH OIDS'); + echo \sprintf( + ' %s', + $data->hasObjectID($table->fields['relname']) ? 'checked' : '', + ' WITH OIDS' + ); echo '
    {$this->lang['strcomment']}
    %s'; - echo \sprintf('', \htmlspecialchars($_POST['comment'])); - echo \sprintf('
    %s', \PHP_EOL, \PHP_EOL); + echo \sprintf( + '', + \htmlspecialchars($_POST['comment']) + ); + echo \sprintf( + '
    %s', + \PHP_EOL, + \PHP_EOL + ); echo '

    ' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo $this->view->form; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -474,7 +525,10 @@ class TblpropertiesController extends BaseController // Check that file uploads are enabled if (!\ini_get('file_uploads')) { - echo "

    {$this->lang['strnouploads']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnouploads'] + ) . \PHP_EOL; return; } @@ -484,28 +538,63 @@ class TblpropertiesController extends BaseController if (\is_float($max_size) && 0 < $max_size) { echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strformat'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strallowednulls'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['stremptystring'] + ) . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strfile'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; echo '
    {$this->lang['strformat']}
    %s
    {$this->lang['strallowednulls']}
    " . \PHP_EOL; + echo \sprintf( + '
    %s
    ', + $this->lang['strbackslashn'] + ) . \PHP_EOL; echo "\t\t
    " . \PHP_EOL; - echo "\t\t
    {$this->lang['strfile']}"; + echo \sprintf( + '
    %s', + $max_size + ); echo "
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); - echo "lang['strimport']}\" />

    " . \PHP_EOL; + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); + echo \sprintf( + '

    ', + $this->lang['strimport'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } } @@ -550,16 +639,35 @@ class TblpropertiesController extends BaseController // Output table header echo '' . \PHP_EOL; - echo "\n" . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + ' +', + $this->lang['strname'], + $this->lang['strtype'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strlength'] + ) . \PHP_EOL; if ($data->hasCreateFieldWithConstraints()) { - echo "\n" . \PHP_EOL; + echo \sprintf( + ' +', + $this->lang['strnotnull'], + $this->lang['strdefault'] + ) . \PHP_EOL; } - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcomment'] + ) . \PHP_EOL; - echo "' . \PHP_EOL; echo "
    {$this->lang['strname']}{$this->lang['strtype']}{$this->lang['strlength']}
    %s%s%s{$this->lang['strnotnull']}{$this->lang['strdefault']}%s%s{$this->lang['strcomment']}
    %s
    _maxNameLen}\" value=\"", + echo \sprintf( + '
    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); if (!$data->hasCreateFieldWithConstraints()) { echo '' . \PHP_EOL; } - echo "lang['stradd']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stradd'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; echo '" . \PHP_EOL; @@ -650,7 +772,12 @@ class TblpropertiesController extends BaseController if (0 === $status) { $this->view->setReloadBrowser(true); - $this->doDefault(\sprintf('%s %s %s', $sql, \PHP_EOL, $this->lang['strcolumnadded'])); + $this->doDefault(\sprintf( + '%s %s %s', + $sql, + \PHP_EOL, + $this->lang['strcolumnadded'] + )); } else { $_REQUEST['stage'] = 1; $this->doAddColumn($this->lang['strcolumnaddedbad']); @@ -661,7 +788,10 @@ class TblpropertiesController extends BaseController break; default: - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } } @@ -679,23 +809,45 @@ class TblpropertiesController extends BaseController $this->printTrail('column'); $this->printTitle($this->lang['strdrop'], 'pg.column.drop'); - echo '

    ' . \sprintf($this->lang['strconfdropcolumn'], $misc->printVal($_REQUEST['column']), $misc->printVal($_REQUEST['table'])) . '

    ' . \PHP_EOL; + echo '

    ' . \sprintf( + $this->lang['strconfdropcolumn'], + $misc->printVal($_REQUEST['column']), + $misc->printVal($_REQUEST['table']) + ) . '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo '' . \PHP_EOL; echo $this->view->form; - echo "

    " . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } else { [$status, $sql] = $data->dropColumn($_POST['table'], $_POST['column'], isset($_POST['cascade'])); if (0 === $status) { $this->view->setReloadBrowser(true); - $this->doDefault(\sprintf('%s %s %s', $sql, \PHP_EOL, $this->lang['strcolumndropped'])); + $this->doDefault(\sprintf( + '%s %s %s', + $sql, + \PHP_EOL, + $this->lang['strcolumndropped'] + )); } else { $this->doDefault($this->lang['strcolumndroppedbad']); } @@ -711,8 +863,14 @@ class TblpropertiesController extends BaseController $data->fieldClean($attname); $data->fieldClean($table); - $actions['browse']['attr']['href']['urlvars']['query'] = "SELECT \"{$attname}\", count(*) AS \"count\" - FROM \"{$table}\" GROUP BY \"{$attname}\" ORDER BY \"{$attname}\""; + $actions['browse']['attr']['href']['urlvars']['query'] = \sprintf( + 'SELECT "%s", count(*) AS "count" + FROM "%s" GROUP BY "%s" ORDER BY "%s"', + $attname, + $table, + $attname, + $attname + ); return $actions; }; @@ -800,7 +958,10 @@ class TblpropertiesController extends BaseController 'column' => [ 'title' => $this->lang['strcolumn'], 'field' => Decorator::field('attname'), - 'url' => "colproperties?subject=column&{$misc->href}&table=" . \urlencode($_REQUEST['table']) . '&', + 'url' => \sprintf( + 'colproperties?subject=column&%s&table=', + $misc->href + ) . \urlencode($_REQUEST['table']) . '&', 'vars' => ['column' => 'attname'], ], 'type' => [ diff --git a/src/controllers/TreeController.php b/src/controllers/TreeController.php index 25c238d4..9011470a 100644 --- a/src/controllers/TreeController.php +++ b/src/controllers/TreeController.php @@ -6,14 +6,18 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\ArrayRecordSet; +use PHPPgAdmin\ContainerUtils; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\HelperTrait; +use Slim\Http\Response; /** * Base TreeController controller class. */ class TreeController extends BaseController { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; public $form = ''; @@ -42,7 +46,7 @@ class TreeController extends BaseController protected $container; // Constructor - public function __construct(\PHPPgAdmin\ContainerUtils $container, $controller_name = null) + public function __construct(ContainerUtils $container, $controller_name = null) { $this->container = $container; $this->lang = $container->get('lang'); @@ -65,21 +69,21 @@ class TreeController extends BaseController /** * Produce JSON data for the browser tree. * - * @param \PHPPgAdmin\ArrayRecordSet $_treedata a set of records to populate the tree - * @param array $attrs Attributes for tree items - * 'text' - the text for the tree node - * 'icon' - an icon for node - * 'openIcon' - an alternative icon when the node is expanded - * 'toolTip' - tool tip text for the node - * 'action' - URL to visit when single clicking the node - * 'iconAction' - URL to visit when single clicking the icon node - * 'branch' - URL for child nodes (tree XML) - * 'expand' - the action to return XML for the subtree - * 'nodata' - message to display when node has no children - * @param string $section The section where the branch is linked in the tree - * @param bool $print either to return or echo the result + * @param ArrayRecordSet $_treedata a set of records to populate the tree + * @param array $attrs Attributes for tree items + * 'text' - the text for the tree node + * 'icon' - an icon for node + * 'openIcon' - an alternative icon when the node is expanded + * 'toolTip' - tool tip text for the node + * 'action' - URL to visit when single clicking the node + * 'iconAction' - URL to visit when single clicking the icon node + * 'branch' - URL for child nodes (tree XML) + * 'expand' - the action to return XML for the subtree + * 'nodata' - message to display when node has no children + * @param string $section The section where the branch is linked in the tree + * @param bool $print either to return or echo the result * - * @return \Slim\Http\Response|string the json rendered tree + * @return Response|string the json rendered tree */ public function printTree(&$_treedata, &$attrs, $section, $print = true) { @@ -106,7 +110,7 @@ class TreeController extends BaseController * * @param array $tabs The tabs * - * @return \PHPPgAdmin\ArrayRecordSet filtered tabs in the form of an ArrayRecordSet + * @return ArrayRecordSet filtered tabs in the form of an ArrayRecordSet */ public function adjustTabsForTree(&$tabs) { @@ -116,7 +120,7 @@ class TreeController extends BaseController } } - return new \PHPPgAdmin\ArrayRecordSet($tabs); + return new ArrayRecordSet($tabs); } /** diff --git a/src/controllers/TriggersController.php b/src/controllers/TriggersController.php index e3548ed5..e989592b 100644 --- a/src/controllers/TriggersController.php +++ b/src/controllers/TriggersController.php @@ -7,6 +7,8 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\XHtml\XHtmlOption; +use PHPPgAdmin\XHtml\XHtmlSelect; /** * Base controller class. @@ -136,7 +138,11 @@ class TriggersController extends BaseController 'function' => [ 'title' => $this->lang['strfunction'], 'field' => Decorator::field('proproto'), - 'url' => "functions?action=properties&server={$_REQUEST['server']}&database={$_REQUEST['database']}&", + 'url' => \sprintf( + 'functions?action=properties&server=%s&database=%s&', + $_REQUEST['server'], + $_REQUEST['database'] + ), 'vars' => [ 'schema' => 'pronamespace', 'function' => 'proproto', @@ -275,20 +281,40 @@ class TriggersController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '
    {$this->lang['strname']}
    %s'; - echo "_maxNameLen}\" value=\"", + echo \sprintf( + '' . \PHP_EOL; echo '
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strok']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strok'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -313,12 +339,25 @@ class TriggersController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo '' . \PHP_EOL; echo $this->view->form; - echo "

    " . \PHP_EOL; - echo "lang['stryes']}\" />" . \PHP_EOL; - echo "lang['strno']}\" />" . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stryes'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strno'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } else { $status = $data->dropTrigger($_POST['trigger'], $_POST['table'], isset($_POST['cascade'])); @@ -352,11 +391,21 @@ class TriggersController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stryes']}\" />" . \PHP_EOL; - echo "lang['strno']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stryes'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strno'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } else { $status = $data->enableTrigger($_POST['trigger'], $_POST['table']); @@ -390,11 +439,21 @@ class TriggersController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stryes']}\" />" . \PHP_EOL; - echo "lang['strno']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stryes'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strno'] + ) . \PHP_EOL; echo '
    ' . \PHP_EOL; } else { $status = $data->disableTrigger($_POST['trigger'], $_POST['table']); @@ -430,52 +489,81 @@ class TriggersController extends BaseController } // Populate functions - $sel0 = new \PHPPgAdmin\XHtml\XHtmlSelect('formFunction'); + $sel0 = new XHtmlSelect('formFunction'); while (!$funcs->EOF) { - $sel0->add(new \PHPPgAdmin\XHtml\XHtmlOption($funcs->fields['proname'])); + $sel0->add(new XHtmlOption($funcs->fields['proname'])); $funcs->moveNext(); } // Populate times - $sel1 = new \PHPPgAdmin\XHtml\XHtmlSelect('formExecTime'); + $sel1 = new XHtmlSelect('formExecTime'); $sel1->set_data($data->triggerExecTimes); // Populate events - $sel2 = new \PHPPgAdmin\XHtml\XHtmlSelect('formEvent'); + $sel2 = new XHtmlSelect('formEvent'); $sel2->set_data($data->triggerEvents); // Populate occurences - $sel3 = new \PHPPgAdmin\XHtml\XHtmlSelect('formFrequency'); + $sel3 = new XHtmlSelect('formFrequency'); $sel3->set_data($data->triggerFrequency); echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo " " . \PHP_EOL; - echo " " . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strwhen'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo ' ' . \PHP_EOL; echo ' ' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo " " . \PHP_EOL; - echo " " . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strevent'] + ) . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strforeach'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo ' ' . \PHP_EOL; echo ' ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strfunction'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strarguments'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '
    {$this->lang['strname']}{$this->lang['strwhen']}%s%s
    ', $sel1->fetch(), '
    {$this->lang['strevent']}{$this->lang['strforeach']}%s%s
    ', $sel2->fetch(), ' ', $sel3->fetch(), '
    {$this->lang['strfunction']} {$this->lang['strarguments']}
    %s %s
    ', $sel0->fetch(), '()
    ' . \PHP_EOL; - echo "

    lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '

    ', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; - echo \sprintf('%s', \htmlspecialchars($_REQUEST['table']), \PHP_EOL); + echo \sprintf( + '%s', + \htmlspecialchars($_REQUEST['table']), + \PHP_EOL + ); echo $this->view->form; echo '
    ' . \PHP_EOL; } diff --git a/src/controllers/TypesController.php b/src/controllers/TypesController.php index 8e01c57b..739ccf12 100644 --- a/src/controllers/TypesController.php +++ b/src/controllers/TypesController.php @@ -101,7 +101,10 @@ class TypesController extends BaseController 'type' => [ 'title' => $this->lang['strtype'], 'field' => Decorator::field('typname'), - 'url' => "types?action=properties&{$this->misc->href}&", + 'url' => \sprintf( + 'types?action=properties&%s&', + $this->misc->href + ), 'vars' => ['type' => 'basename'], ], 'owner' => [ @@ -283,27 +286,56 @@ class TypesController extends BaseController default: $byval = $data->phpBool($typedata->fields['typbyval']); echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strinputfn'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stroutputfn'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strlength'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strpassbyval'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stralignment'] + ) . \PHP_EOL; echo '' . \PHP_EOL; if ($data->hasEnumTypes() && $vals) { $vals = $vals->getArray(); $nbVals = \count($vals); - echo "\n\t" . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + ' + ', + $nbVals, + $this->lang['strenumvalues'] + ) . \PHP_EOL; + echo \sprintf( + '', + $vals[0]['enumval'] + ) . \PHP_EOL; for ($i = 1; $i < $nbVals; ++$i) { - echo '" . \PHP_EOL; + echo '', + $vals[$i]['enumval'] + ) . \PHP_EOL; } } echo '
    {$this->lang['strname']}
    %s', $this->misc->printVal($typedata->fields['typname']), '
    {$this->lang['strinputfn']}
    %s', $this->misc->printVal($typedata->fields['typin']), '
    {$this->lang['stroutputfn']}
    %s', $this->misc->printVal($typedata->fields['typout']), '
    {$this->lang['strlength']}
    %s', $this->misc->printVal($typedata->fields['typlen']), '
    {$this->lang['strpassbyval']}
    %s', ($byval) ? $this->lang['stryes'] : $this->lang['strno'], '
    {$this->lang['stralignment']}
    %s', $this->misc->printVal($typedata->fields['typalign']), '
    {$this->lang['strenumvalues']}{$vals[0]['enumval']}
    %s%s
    {$vals[$i]['enumval']}
    %s
    ' . \PHP_EOL; @@ -340,15 +372,28 @@ class TypesController extends BaseController $this->printTrail('type'); $this->printTitle($this->lang['strdrop'], 'pg.type.drop'); - echo '

    ', \sprintf($this->lang['strconfdroptype'], $this->misc->printVal($_REQUEST['type'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdroptype'], + $this->misc->printVal($_REQUEST['type']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; - echo "

    " . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { $status = $data->dropType($_POST['type'], isset($_POST['cascade'])); @@ -386,14 +431,32 @@ class TypesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strnumfields'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; @@ -401,8 +464,15 @@ class TypesController extends BaseController echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strnext']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strnext'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; break; @@ -434,8 +504,16 @@ class TypesController extends BaseController // Output table header echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strnumfields']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; - echo "\t"; - echo "" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strfield'], + $this->lang['strtype'] + ); + echo \sprintf( + '', + $this->lang['strlength'], + $this->lang['strcomment'] + ) . \PHP_EOL; for ($i = 0; $i < $_REQUEST['fields']; ++$i) { if (!isset($_REQUEST['field'][$i])) { @@ -451,9 +529,17 @@ class TypesController extends BaseController } echo "\t\n\t\t' . \PHP_EOL; - echo "\t\t' . \PHP_EOL; - echo "\t\t" . \PHP_EOL; // Output array type selector - echo "\t\t" . \PHP_EOL; - echo "\t\t' . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; } echo '
    {$this->lang['strfield']}{$this->lang['strtype']}{$this->lang['strlength']}{$this->lang['strcomment']}
    %s%s%s%s
    ", $i + 1, '. _maxNameLen}\" value=\"", + echo \sprintf( + ' \n\t\t\t + \n\t\t\n\t\t\t + \n\t\t
    ' . \PHP_EOL; @@ -483,8 +579,15 @@ class TypesController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; break; @@ -534,7 +637,10 @@ class TypesController extends BaseController break; default: - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } } @@ -563,14 +669,32 @@ class TypesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t + ', + $this->lang['strnumvalues'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; @@ -578,8 +702,15 @@ class TypesController extends BaseController echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strnext']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strnext'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; break; @@ -609,7 +740,10 @@ class TypesController extends BaseController // Output table header echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strnumvalues']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; - echo "\t" . \PHP_EOL; + echo \sprintf( + ' ', + $this->lang['strvalue'] + ) . \PHP_EOL; for ($i = 0; $i < $_REQUEST['values']; ++$i) { if (!isset($_REQUEST['value'][$i])) { @@ -617,7 +751,11 @@ class TypesController extends BaseController } echo "\t\n\t\t' . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; } echo '
    {$this->lang['strvalue']}
    %s
    ", $i + 1, '. _maxNameLen}\" value=\"", + echo \sprintf( + '
    ' . \PHP_EOL; @@ -627,8 +765,15 @@ class TypesController extends BaseController echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; break; @@ -669,7 +814,10 @@ class TypesController extends BaseController break; default: - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } } @@ -710,74 +858,144 @@ class TypesController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; - echo "', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strinputfn'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stroutputfn'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo '" . \PHP_EOL; + echo '', + $this->lang['strlength'] + ) . \PHP_EOL; echo ''; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdefault'] + ) . \PHP_EOL; echo ''; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strelement'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdelimiter'] + ) . \PHP_EOL; echo ''; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strpassbyval'] + ) . \PHP_EOL; echo ''; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['stralignment'] + ) . \PHP_EOL; echo '' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strstorage'] + ) . \PHP_EOL; echo '' . \PHP_EOL; echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strinputfn']}
    %s
    {$this->lang['stroutputfn']}
    %s
    {$this->lang['strlength']}
    %s
    {$this->lang['strdefault']}
    %s
    {$this->lang['strelement']}
    %s
    {$this->lang['strdelimiter']}
    %s
    {$this->lang['stralignment']}
    %s
    {$this->lang['strstorage']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } diff --git a/src/controllers/UsersController.php b/src/controllers/UsersController.php index eef40e7b..0786d961 100644 --- a/src/controllers/UsersController.php +++ b/src/controllers/UsersController.php @@ -208,8 +208,17 @@ class UsersController extends BaseController $userdata->fields['usesuper'] = $data->phpBool($userdata->fields['usesuper']); $userdata->fields['usecreatedb'] = $data->phpBool($userdata->fields['usecreatedb']); echo '' . \PHP_EOL; - echo ""; - echo ""; + echo \sprintf( + '', + $this->lang['strusername'], + $this->lang['strsuper'], + $this->lang['strcreatedb'], + $this->lang['strexpires'] + ); + echo \sprintf( + '', + $this->lang['strsessiondefaults'] + ); echo '' . \PHP_EOL; echo "\n\t' . \PHP_EOL; echo "\t' . \PHP_EOL; @@ -218,7 +227,10 @@ class UsersController extends BaseController echo "\t' . \PHP_EOL; echo "\n
    {$this->lang['strusername']}{$this->lang['strsuper']}{$this->lang['strcreatedb']}{$this->lang['strexpires']}{$this->lang['strsessiondefaults']}
    %s%s%s%s%s
    ", $this->misc->printVal($userdata->fields['usename']), '", $this->misc->printVal($userdata->fields['usesuper'], 'yesno'), '", $this->misc->printVal($userdata->fields['useconfig']), '
    " . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } $this->printNavLinks(['changepassword' => [ @@ -259,17 +271,31 @@ class UsersController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strpassword'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconfirm'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
    {$this->lang['strpassword']}
    %s
    {$this->lang['strconfirm']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strok']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strok'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '

    ' . \PHP_EOL; } else { // Check that password is minimum length @@ -333,31 +359,68 @@ class UsersController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strusername'] + ) . \PHP_EOL; + echo "\t\t\n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strsuper'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcreatedb'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strexpires'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strpassword'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconfirm'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
    {$this->lang['strusername']}", ($canRename ? "_maxNameLen}\" value=\"" . \htmlspecialchars($_POST['newname']) . '" />' : $this->misc->printVal($userdata->fields['usename'])), "
    %s", ($canRename ? \sprintf( + '' : $this->misc->printVal($userdata->fields['usename'])), "
    {$this->lang['strexpires']}
    %s
    {$this->lang['strpassword']}
    %s
    {$this->lang['strconfirm']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -401,14 +464,24 @@ class UsersController extends BaseController $this->printTrail('user'); $this->printTitle($this->lang['strdrop'], 'pg.user.drop'); - echo '

    ', \sprintf($this->lang['strconfdropuser'], $this->misc->printVal($_REQUEST['username'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropuser'], + $this->misc->printVal($_REQUEST['username']) + ), '

    ' . \PHP_EOL; echo '
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } else { $status = $data->dropUser($_REQUEST['username']); @@ -444,27 +517,61 @@ class UsersController extends BaseController echo '
    ' . \PHP_EOL; echo '' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strusername'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strpassword'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strconfirm'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strsuper'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcreatedb'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strexpires'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
    {$this->lang['strusername']}_maxNameLen}\" name=\"formUsername\" value=\"", \htmlspecialchars($_POST['formUsername']), "\" />
    {$this->lang['strpassword']}
    %s
    %s
    {$this->lang['strconfirm']}
    %s
    {$this->lang['strexpires']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '
    ' . \PHP_EOL; } diff --git a/src/controllers/ViewpropertiesController.php b/src/controllers/ViewpropertiesController.php index c0c4a31f..33091e27 100644 --- a/src/controllers/ViewpropertiesController.php +++ b/src/controllers/ViewpropertiesController.php @@ -6,13 +6,16 @@ namespace PHPPgAdmin\Controller; +use PHPPgAdmin\Traits\ExportTrait; +use PHPPgAdmin\Traits\ViewsMatViewsPropertiesTrait; + /** * Base controller class. */ class ViewpropertiesController extends BaseController { - use \PHPPgAdmin\Traits\ExportTrait; - use \PHPPgAdmin\Traits\ViewsMatViewsPropertiesTrait; + use ExportTrait; + use ViewsMatViewsPropertiesTrait; public $controller_title = 'strviews'; @@ -148,39 +151,51 @@ class ViewpropertiesController extends BaseController 'formComment' => \htmlspecialchars($_POST['formComment']), 'subject' => \htmlspecialchars($_REQUEST[$this->subject]), ]; - $edition_area = << + $edition_area = \sprintf( + ' +
    - + - +
    {$this->lang['strdefinition']}%s
    {$this->lang['strcomment']}%s

    - - {$this->view->form} - - + + %s + +

    -
    -EOT; +', + $variables->subfolder, + $this->lang['strdefinition'], + $variables->formDefinition, + $this->lang['strcomment'], + $variables->formComment, + $variables->subject, + $this->view->form, + $this->lang['stralter'], + $this->lang['strcancel'] + ); echo $edition_area; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } @@ -205,8 +220,16 @@ EOT; // Output view header echo '' . \PHP_EOL; - echo ""; - echo ""; + echo \sprintf( + '', + $this->lang['strname'], + $this->lang['strtype'] + ); + echo \sprintf( + '', + $this->lang['strdefault'], + $this->lang['strcomment'] + ); $column = $data->getTableAttributes($_REQUEST[$this->subject], $_REQUEST['column']); @@ -232,8 +255,15 @@ EOT; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo '' . \PHP_EOL; - echo "lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; break; @@ -274,7 +304,10 @@ EOT; break; default: - echo "

    {$this->lang['strinvalidparam']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strinvalidparam'] + ) . \PHP_EOL; } } @@ -301,16 +334,25 @@ EOT; echo '' . \PHP_EOL; echo '
    {$this->lang['strname']}{$this->lang['strtype']}{$this->lang['strdefault']}{$this->lang['strcomment']}
    %s%s%s%s
    ' . \PHP_EOL; - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strname'] + ) . \PHP_EOL; echo '' . \PHP_EOL; if ($data->isSuperUser()) { // Fetch all users $users = $data->getUsers(); - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strowner'] + ) . \PHP_EOL; echo '" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strschema'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } - echo "" . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcomment'] + ) . \PHP_EOL; echo '' . \PHP_EOL; @@ -344,11 +392,21 @@ EOT; echo '' . \PHP_EOL; echo '' . \PHP_EOL; echo $this->view->form; - echo "

    lang['stralter']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '

    ', + $this->lang['stralter'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } else { - echo "

    {$this->lang['strnodata']}

    " . \PHP_EOL; + echo \sprintf( + '

    %s

    ', + $this->lang['strnodata'] + ) . \PHP_EOL; } } else { // For databases that don't allow owner change diff --git a/src/controllers/ViewsController.php b/src/controllers/ViewsController.php index 46bdd4ca..a7215b33 100644 --- a/src/controllers/ViewsController.php +++ b/src/controllers/ViewsController.php @@ -7,13 +7,14 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Traits\ViewsMatviewsTrait; /** * Base controller class. */ class ViewsController extends BaseController { - use \PHPPgAdmin\Traits\ViewsMatviewsTrait; + use ViewsMatviewsTrait; public $table_place = 'views-views'; @@ -124,7 +125,10 @@ class ViewsController extends BaseController $this->keystring => [ 'title' => $this->lang['strview'], 'field' => Decorator::field('relname'), - 'url' => \containerInstance()->subFolder . "/redirect/view?{$this->misc->href}&", + 'url' => \containerInstance()->subFolder . \sprintf( + '/redirect/view?%s&', + $this->misc->href + ), 'vars' => [$this->keystring => 'relname'], ], 'owner' => [ @@ -287,20 +291,35 @@ class ViewsController extends BaseController if (isset($_REQUEST['ma'])) { foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfdropview'], $this->misc->printVal($a['view'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropview'], + $this->misc->printVal($a['view']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } } else { - echo '

    ', \sprintf($this->lang['strconfdropview'], $this->misc->printVal($_REQUEST['view'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfdropview'], + $this->misc->printVal($_REQUEST['view']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } echo '' . \PHP_EOL; echo $this->view->form; - echo "

    " . \PHP_EOL; - echo "lang['strdrop']}\" />" . \PHP_EOL; - echo "lang['strcancel']}\" />" . \PHP_EOL; + echo \sprintf( + '

    ', + $this->lang['strcascade'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strdrop'] + ) . \PHP_EOL; + echo \sprintf( + '', + $this->lang['strcancel'] + ) . \PHP_EOL; echo '' . \PHP_EOL; } else { if (\is_array($_POST['view'])) { @@ -412,22 +431,47 @@ class ViewsController extends BaseController $this->printTitle($this->lang['strcreateview'], 'pg.view.create'); $this->printMsg($msg); - echo 'view_name}\" method=\"post\">" . \PHP_EOL; + echo '', + $this->view_name + ) . \PHP_EOL; echo '
    {$this->lang['strname']}
    %s'; - echo "_maxNameLen}\" value=\"", + echo \sprintf( + '
    {$this->lang['strowner']}
    %s
    {$this->lang['strschema']}
    %s
    {$this->lang['strcomment']}
    %s'; echo '
    ' . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; - echo "\t + ', + $this->lang['strname'] + ) . \PHP_EOL; + echo \sprintf( + ' \n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strdefinition'] + ) . \PHP_EOL; echo "\t\n\t" . \PHP_EOL; - echo "\t\n\t\t" . \PHP_EOL; + echo \sprintf( + ' + ', + $this->lang['strcomment'] + ) . \PHP_EOL; echo "\t\t\n\t" . \PHP_EOL; echo '
    {$this->lang['strname']}_maxNameLen}\" value=\"", + echo \sprintf( + '
    %s
    {$this->lang['strdefinition']}
    %s
    {$this->lang['strcomment']}
    %s
    ' . \PHP_EOL; echo '

    ' . \PHP_EOL; echo $this->view->form; - echo "lang['strcreate']}\" />" . \PHP_EOL; - echo \sprintf('

    %s', $this->lang['strcancel'], \PHP_EOL); + echo \sprintf( + '', + $this->lang['strcreate'] + ) . \PHP_EOL; + echo \sprintf( + '

    %s', + $this->lang['strcancel'], + \PHP_EOL + ); echo '' . \PHP_EOL; } diff --git a/src/database/ADOdbBase.php b/src/database/ADOdbBase.php index 9944def5..8f36d466 100644 --- a/src/database/ADOdbBase.php +++ b/src/database/ADOdbBase.php @@ -6,6 +6,14 @@ namespace PHPPgAdmin\Database; +use ADODB_postgres9; +use Exception; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\ContainerUtils; +use PHPPgAdmin\Database\Traits\DatabaseTrait; +use PHPPgAdmin\Database\Traits\HasTrait; +use PHPPgAdmin\Traits\HelperTrait; + /** * @file * Parent class of all ADODB objects. @@ -14,9 +22,9 @@ namespace PHPPgAdmin\Database; */ class ADOdbBase { - use \PHPPgAdmin\Traits\HelperTrait; - use \PHPPgAdmin\Database\Traits\HasTrait; - use \PHPPgAdmin\Database\Traits\DatabaseTrait; + use HelperTrait; + use HasTrait; + use DatabaseTrait; /** * @var array @@ -29,12 +37,12 @@ class ADOdbBase public $conf; /** - * @var \ADODB_postgres9 + * @var ADODB_postgres9 */ public $conn; /** - * @var \PHPPgAdmin\ContainerUtils + * @var ContainerUtils */ protected $container; @@ -51,9 +59,9 @@ class ADOdbBase /** * Base constructor. * - * @param \ADODB_postgres9 $conn The connection object - * @param mixed $container - * @param mixed $server_info + * @param ADODB_postgres9 $conn The connection object + * @param mixed $container + * @param mixed $server_info */ public function __construct(&$conn, $container, $server_info) { @@ -94,10 +102,14 @@ class ADOdbBase return []; } - $sql = "SELECT attnum, attname FROM pg_catalog.pg_attribute WHERE - attrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND - relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) - AND attnum IN ('" . \implode("','", $atts) . "')"; + $sql = \sprintf( + 'SELECT attnum, attname FROM pg_catalog.pg_attribute WHERE + attrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname=\'%s\' AND + relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname=\'%s\')) + AND attnum IN (\'', + $table, + $c_schema + ) . \implode("','", $atts) . "')"; $rs = $this->selectSet($sql); @@ -126,11 +138,14 @@ class ADOdbBase * @param string $comment the comment to add * @param null|string $basetype * - * @return int|\PHPPgAdmin\ADORecordSet recordset of results or error code + * @return ADORecordSet|int recordset of results or error code */ public function setComment($obj_type, $obj_name, $table, $comment, $basetype = null) { - $sql = "COMMENT ON {$obj_type} "; + $sql = \sprintf( + 'COMMENT ON %s ', + $obj_type + ); $f_schema = $this->_schema; $this->fieldClean($f_schema); @@ -144,11 +159,20 @@ class ADOdbBase switch ($obj_type) { case 'TABLE': - $sql .= "\"{$f_schema}\".\"{$table}\" IS "; + $sql .= \sprintf( + '"%s"."%s" IS ', + $f_schema, + $table + ); break; case 'COLUMN': - $sql .= "\"{$f_schema}\".\"{$table}\".\"{$obj_name}\" IS "; + $sql .= \sprintf( + '"%s"."%s"."%s" IS ', + $f_schema, + $table, + $obj_name + ); break; case 'SEQUENCE': @@ -159,21 +183,36 @@ class ADOdbBase case 'TEXT SEARCH TEMPLATE': case 'TEXT SEARCH PARSER': case 'TYPE': - $sql .= "\"{$f_schema}\"."; + $sql .= \sprintf( + '"%s".', + $f_schema + ); // no break case 'DATABASE': case 'ROLE': case 'SCHEMA': case 'TABLESPACE': - $sql .= "\"{$obj_name}\" IS "; + $sql .= \sprintf( + '"%s" IS ', + $obj_name + ); break; case 'FUNCTION': - $sql .= "\"{$f_schema}\".{$obj_name} IS "; + $sql .= \sprintf( + '"%s".%s IS ', + $f_schema, + $obj_name + ); break; case 'AGGREGATE': - $sql .= "\"{$f_schema}\".\"{$obj_name}\" (\"{$basetype}\") IS "; + $sql .= \sprintf( + '"%s"."%s" ("%s") IS ', + $f_schema, + $obj_name, + $basetype + ); break; @@ -183,7 +222,10 @@ class ADOdbBase } if ('' !== $comment) { - $sql .= "'{$comment}';"; + $sql .= \sprintf( + '\'%s\';', + $comment + ); } else { $sql .= 'NULL;'; } @@ -254,7 +296,7 @@ class ADOdbBase * * @param string $sql The SQL query to execute * - * @return int|\PHPPgAdmin\ADORecordSet A recordset or an error code + * @return ADORecordSet|int A recordset or an error code */ public function execute($sql) { @@ -263,7 +305,7 @@ class ADOdbBase $rs = $this->conn->Execute($sql); return $this->ErrorNo(); - } catch (\Exception $e) { + } catch (Exception $e) { return $e->getCode(); } } @@ -282,14 +324,14 @@ class ADOdbBase * * @param string $sql The SQL statement to be executed * - * @return int|\PHPPgAdmin\ADORecordSet A recordset or an error number + * @return ADORecordSet|int A recordset or an error number */ public function selectSet($sql) { // Execute the statement try { return $this->conn->Execute($sql); - } catch (\Exception $e) { + } catch (Exception $e) { return $e->getCode(); } } @@ -348,7 +390,10 @@ class ADOdbBase if (!empty($schema)) { $this->fieldClean($schema); - $schema = "\"{$schema}\"."; + $schema = \sprintf( + '"%s".', + $schema + ); } // Build clause @@ -359,9 +404,19 @@ class ADOdbBase $this->clean($value); if ($sql) { - $sql .= " AND \"{$key}\"='{$value}'"; + $sql .= \sprintf( + ' AND "%s"=\'%s\'', + $key, + $value + ); } else { - $sql = "DELETE FROM {$schema}\"{$table}\" WHERE \"{$key}\"='{$value}'"; + $sql = \sprintf( + 'DELETE FROM %s"%s" WHERE "%s"=\'%s\'', + $schema, + $table, + $key, + $value + ); } } @@ -450,15 +505,28 @@ class ADOdbBase $this->clean($value); if ($fields) { - $fields .= ", \"{$key}\""; + $fields .= \sprintf( + ', "%s"', + $key + ); } else { - $fields = "INSERT INTO \"{$table}\" (\"{$key}\""; + $fields = \sprintf( + 'INSERT INTO "%s" ("%s"', + $table, + $key + ); } if ($values) { - $values .= ", '{$value}'"; + $values .= \sprintf( + ', \'%s\'', + $value + ); } else { - $values = ") VALUES ('{$value}'"; + $values = \sprintf( + ') VALUES (\'%s\'', + $value + ); } } $sql .= $fields . $values . ')'; @@ -504,9 +572,18 @@ class ADOdbBase $this->clean($value); if ($setClause) { - $setClause .= ", \"{$key}\"='{$value}'"; + $setClause .= \sprintf( + ', "%s"=\'%s\'', + $key, + $value + ); } else { - $setClause = "UPDATE \"{$table}\" SET \"{$key}\"='{$value}'"; + $setClause = \sprintf( + 'UPDATE "%s" SET "%s"=\'%s\'', + $table, + $key, + $value + ); } } @@ -516,9 +593,16 @@ class ADOdbBase $this->fieldClean($value); if ($setClause) { - $setClause .= ", \"{$value}\"=NULL"; + $setClause .= \sprintf( + ', "%s"=NULL', + $value + ); } else { - $setClause = "UPDATE \"{$table}\" SET \"{$value}\"=NULL"; + $setClause = \sprintf( + 'UPDATE "%s" SET "%s"=NULL', + $table, + $value + ); } } @@ -529,9 +613,17 @@ class ADOdbBase $this->clean($value); if ($whereClause) { - $whereClause .= " AND \"{$key}\"='{$value}'"; + $whereClause .= \sprintf( + ' AND "%s"=\'%s\'', + $key, + $value + ); } else { - $whereClause = " WHERE \"{$key}\"='{$value}'"; + $whereClause = \sprintf( + ' WHERE "%s"=\'%s\'', + $key, + $value + ); } } @@ -594,7 +686,7 @@ class ADOdbBase { try { return $this->conn->platform; - } catch (\Exception $e) { + } catch (Exception $e) { $this->prtrace($e->getMessage()); return 'UNKNOWN'; diff --git a/src/database/Connection.php b/src/database/Connection.php index f3fedba7..df562d31 100644 --- a/src/database/Connection.php +++ b/src/database/Connection.php @@ -6,6 +6,10 @@ namespace PHPPgAdmin\Database; +use Exception; +use PHPPgAdmin\Traits\HelperTrait; +use Slim\Container; + /** * @file * Class to represent a database connection @@ -14,7 +18,7 @@ namespace PHPPgAdmin\Database; */ class Connection { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; public $conn; @@ -45,10 +49,10 @@ class Connection /** * Creates a new connection. Will actually make a database connection. * - * @param array $server_info - * @param string $database database name - * @param \Slim\Container $container - * @param int $fetchMode Defaults to associative. Override for different behaviour + * @param array $server_info + * @param string $database database name + * @param Container $container + * @param int $fetchMode Defaults to associative. Override for different behaviour */ public function __construct($server_info, $database, $container, $fetchMode = \ADODB_FETCH_ASSOC) { @@ -74,7 +78,11 @@ class Connection $pghost = ''; } } else { - $pghost = "{$host}:{$port}"; + $pghost = \sprintf( + '%s:%s', + $host, + $port + ); } // Add sslmode to $pghost as needed @@ -87,7 +95,7 @@ class Connection try { $this->conn->connect($pghost, $user, $password, $database); //$this->prtrace($this->conn); - } catch (\Exception $e) { + } catch (Exception $e) { dump($e); $this->prtrace($e->getMessage(), $e->getTrace()); } @@ -140,7 +148,10 @@ class Connection $version = $params[1]; // eg. 8.4.4 } - $description = "PostgreSQL {$version}"; + $description = \sprintf( + 'PostgreSQL %s', + $version + ); $version_parts = \explode('.', $version); diff --git a/src/database/Postgres.php b/src/database/Postgres.php index fb8ea8cf..2d4bb5cf 100644 --- a/src/database/Postgres.php +++ b/src/database/Postgres.php @@ -6,6 +6,26 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\Database\Traits\AggregateTrait; +use PHPPgAdmin\Database\Traits\DatabaseTrait; +use PHPPgAdmin\Database\Traits\DomainTrait; +use PHPPgAdmin\Database\Traits\FtsTrait; +use PHPPgAdmin\Database\Traits\FunctionTrait; +use PHPPgAdmin\Database\Traits\IndexTrait; +use PHPPgAdmin\Database\Traits\OperatorTrait; +use PHPPgAdmin\Database\Traits\PrivilegesTrait; +use PHPPgAdmin\Database\Traits\RoleTrait; +use PHPPgAdmin\Database\Traits\SchemaTrait; +use PHPPgAdmin\Database\Traits\SequenceTrait; +use PHPPgAdmin\Database\Traits\StatsTrait; +use PHPPgAdmin\Database\Traits\TablespaceTrait; +use PHPPgAdmin\Database\Traits\TableTrait; +use PHPPgAdmin\Database\Traits\TypeTrait; +use PHPPgAdmin\Database\Traits\ViewTrait; +use PHPPgAdmin\Help\PostgresDoc; +use PHPPgAdmin\Traits\HelperTrait; + /** * A Class that implements the DB Interface for Postgres * Note: This Class uses ADODB and returns RecordSets. @@ -14,23 +34,23 @@ namespace PHPPgAdmin\Database; */ class Postgres extends ADOdbBase { - use \PHPPgAdmin\Traits\HelperTrait; - use \PHPPgAdmin\Database\Traits\AggregateTrait; - use \PHPPgAdmin\Database\Traits\DatabaseTrait; - use \PHPPgAdmin\Database\Traits\DomainTrait; - use \PHPPgAdmin\Database\Traits\FtsTrait; - use \PHPPgAdmin\Database\Traits\FunctionTrait; - use \PHPPgAdmin\Database\Traits\IndexTrait; - use \PHPPgAdmin\Database\Traits\OperatorTrait; - use \PHPPgAdmin\Database\Traits\RoleTrait; - use \PHPPgAdmin\Database\Traits\SchemaTrait; - use \PHPPgAdmin\Database\Traits\SequenceTrait; - use \PHPPgAdmin\Database\Traits\TablespaceTrait; - use \PHPPgAdmin\Database\Traits\TableTrait; - use \PHPPgAdmin\Database\Traits\TypeTrait; - use \PHPPgAdmin\Database\Traits\ViewTrait; - use \PHPPgAdmin\Database\Traits\StatsTrait; - use \PHPPgAdmin\Database\Traits\PrivilegesTrait; + use HelperTrait; + use AggregateTrait; + use DatabaseTrait; + use DomainTrait; + use FtsTrait; + use FunctionTrait; + use IndexTrait; + use OperatorTrait; + use RoleTrait; + use SchemaTrait; + use SequenceTrait; + use TablespaceTrait; + use TableTrait; + use TypeTrait; + use ViewTrait; + use StatsTrait; + use PrivilegesTrait; public $lang; @@ -44,10 +64,10 @@ class Postgres extends ADOdbBase /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc::class; + public $help_classname = PostgresDoc::class; /** - * @var \PHPPgAdmin\Help\PostgresDoc + * @var PostgresDoc */ public $help_class; @@ -127,7 +147,10 @@ class Postgres extends ADOdbBase $extra_str = ''; foreach ($extras as $k => $v) { - $extra_str .= " {$k}=\"" . \htmlspecialchars($v) . '"'; + $extra_str .= \sprintf( + ' %s="', + $k + ) . \htmlspecialchars($v) . '"'; } switch (\mb_substr($type, 0, 9)) { @@ -143,13 +166,29 @@ class Postgres extends ADOdbBase // If value is null, 't' or 'f'... if (null === $value || 't' === $value || 'f' === $value) { - echo ' +', + $extra_str + ); echo '\n"; - echo '\n"; - echo '\n"; + echo ' +', + $lang['strtrue'] + ); + echo ' +', + $lang['strfalse'] + ); echo "\n"; } else { - echo '\n"; + echo ' +', + $extra_str + ); } break; @@ -168,7 +207,12 @@ class Postgres extends ADOdbBase $n = \mb_substr_count($value, "\n"); $n = 5 > $n ? \max(2, $n) : $n; $n = 20 < $n ? 20 : $n; - echo '\n"; @@ -178,14 +222,23 @@ class Postgres extends ADOdbBase $n = \mb_substr_count($value, "\n"); $n = 5 > $n ? 5 : $n; $n = 20 < $n ? 20 : $n; - echo '\n"; break; default: - echo '\n"; + echo ' +', + $extra_str + ); break; } @@ -197,7 +250,7 @@ class Postgres extends ADOdbBase * @param string $term The search term * @param string $filter The object type to restrict to ('' means no restriction) * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function findObject($term, $filter) { @@ -235,107 +288,153 @@ class Postgres extends ADOdbBase $sql = 'SELECT * FROM ('; } - $term = "\$_PATERN_\$%{$term}%\$_PATERN_\$"; + $term = \sprintf( + '$_PATERN_$%%s%$_PATERN_$', + $term + ); - $sql .= " - SELECT 'SCHEMA' AS type, oid, NULL AS schemaname, NULL AS relname, nspname AS name - FROM pg_catalog.pg_namespace pn WHERE nspname ILIKE {$term} {$where} + $sql .= \sprintf( + ' + SELECT \'SCHEMA\' AS type, oid, NULL AS schemaname, NULL AS relname, nspname AS name + FROM pg_catalog.pg_namespace pn WHERE nspname ILIKE %s %s UNION ALL - SELECT CASE WHEN relkind='r' THEN 'TABLE' WHEN relkind='v' THEN 'VIEW' WHEN relkind='S' THEN 'SEQUENCE' END, pc.oid, + SELECT CASE WHEN relkind=\'r\' THEN \'TABLE\' WHEN relkind=\'v\' THEN \'VIEW\' WHEN relkind=\'S\' THEN \'SEQUENCE\' END, pc.oid, pn.nspname, NULL, pc.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn - WHERE pc.relnamespace=pn.oid AND relkind IN ('r', 'v', 'S') AND relname ILIKE {$term} {$where} + WHERE pc.relnamespace=pn.oid AND relkind IN (\'r\', \'v\', \'S\') AND relname ILIKE %s %s UNION ALL - SELECT CASE WHEN pc.relkind='r' THEN 'COLUMNTABLE' ELSE 'COLUMNVIEW' END, NULL, pn.nspname, pc.relname, pa.attname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + SELECT CASE WHEN pc.relkind=\'r\' THEN \'COLUMNTABLE\' ELSE \'COLUMNVIEW\' END, NULL, pn.nspname, pc.relname, pa.attname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, pg_catalog.pg_attribute pa WHERE pc.relnamespace=pn.oid AND pc.oid=pa.attrelid - AND pa.attname ILIKE {$term} AND pa.attnum > 0 AND NOT pa.attisdropped AND pc.relkind IN ('r', 'v') {$where} + AND pa.attname ILIKE %s AND pa.attnum > 0 AND NOT pa.attisdropped AND pc.relkind IN (\'r\', \'v\') %s UNION ALL - SELECT 'FUNCTION', pp.oid, pn.nspname, NULL, pp.proname || '(' || pg_catalog.oidvectortypes(pp.proargtypes) || ')' FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pn - WHERE pp.pronamespace=pn.oid AND NOT pp.proisagg AND pp.proname ILIKE {$term} {$where} + SELECT \'FUNCTION\', pp.oid, pn.nspname, NULL, pp.proname || \'(\' || pg_catalog.oidvectortypes(pp.proargtypes) || \')\' FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pn + WHERE pp.pronamespace=pn.oid AND NOT pp.proisagg AND pp.proname ILIKE %s %s UNION ALL - SELECT 'INDEX', NULL, pn.nspname, pc.relname, pc2.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + SELECT \'INDEX\', NULL, pn.nspname, pc.relname, pc2.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, pg_catalog.pg_index pi, pg_catalog.pg_class pc2 WHERE pc.relnamespace=pn.oid AND pc.oid=pi.indrelid AND pi.indexrelid=pc2.oid AND NOT EXISTS ( SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) - WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = 'i' AND c.contype IN ('u', 'p') + WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = \'i\' AND c.contype IN (\'u\', \'p\') ) - AND pc2.relname ILIKE {$term} {$where} + AND pc2.relname ILIKE %s %s UNION ALL - SELECT 'CONSTRAINTTABLE', NULL, pn.nspname, pc.relname, pc2.conname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + SELECT \'CONSTRAINTTABLE\', NULL, pn.nspname, pc.relname, pc2.conname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, pg_catalog.pg_constraint pc2 WHERE pc.relnamespace=pn.oid AND pc.oid=pc2.conrelid AND pc2.conrelid != 0 - AND CASE WHEN pc2.contype IN ('f', 'c') THEN TRUE ELSE NOT EXISTS ( + AND CASE WHEN pc2.contype IN (\'f\', \'c\') THEN TRUE ELSE NOT EXISTS ( SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) - WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = 'i' AND c.contype IN ('u', 'p') + WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = \'i\' AND c.contype IN (\'u\', \'p\') ) END - AND pc2.conname ILIKE {$term} {$where} + AND pc2.conname ILIKE %s %s UNION ALL - SELECT 'CONSTRAINTDOMAIN', pt.oid, pn.nspname, pt.typname, pc.conname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn, + SELECT \'CONSTRAINTDOMAIN\', pt.oid, pn.nspname, pt.typname, pc.conname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn, pg_catalog.pg_constraint pc WHERE pt.typnamespace=pn.oid AND pt.oid=pc.contypid AND pc.contypid != 0 - AND pc.conname ILIKE {$term} {$where} + AND pc.conname ILIKE %s %s UNION ALL - SELECT 'TRIGGER', NULL, pn.nspname, pc.relname, pt.tgname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + SELECT \'TRIGGER\', NULL, pn.nspname, pc.relname, pt.tgname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, pg_catalog.pg_trigger pt WHERE pc.relnamespace=pn.oid AND pc.oid=pt.tgrelid AND ( pt.tgconstraint = 0 OR NOT EXISTS (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) - WHERE d.classid = pt.tableoid AND d.objid = pt.oid AND d.deptype = 'i' AND c.contype = 'f')) - AND pt.tgname ILIKE {$term} {$where} + WHERE d.classid = pt.tableoid AND d.objid = pt.oid AND d.deptype = \'i\' AND c.contype = \'f\')) + AND pt.tgname ILIKE %s %s UNION ALL - SELECT 'RULETABLE', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r + SELECT \'RULETABLE\', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r JOIN pg_catalog.pg_class c ON c.oid = r.ev_class LEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = c.relnamespace - WHERE c.relkind='r' AND r.rulename != '_RETURN' AND r.rulename ILIKE {$term} {$where} + WHERE c.relkind=\'r\' AND r.rulename != \'_RETURN\' AND r.rulename ILIKE %s %s UNION ALL - SELECT 'RULEVIEW', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r + SELECT \'RULEVIEW\', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r JOIN pg_catalog.pg_class c ON c.oid = r.ev_class LEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = c.relnamespace - WHERE c.relkind='v' AND r.rulename != '_RETURN' AND r.rulename ILIKE {$term} {$where} - "; + WHERE c.relkind=\'v\' AND r.rulename != \'_RETURN\' AND r.rulename ILIKE %s %s + ', + $term, + $where, + $term, + $where, + $term, + $where, + $term, + $where, + $term, + $where, + $term, + $where, + $term, + $where, + $term, + $where, + $term, + $where, + $term, + $where + ); // Add advanced objects if show_advanced is set if ($conf['show_advanced']) { - $sql .= " + $sql .= \sprintf( + ' UNION ALL - SELECT CASE WHEN pt.typtype='d' THEN 'DOMAIN' ELSE 'TYPE' END, pt.oid, pn.nspname, NULL, + SELECT CASE WHEN pt.typtype=\'d\' THEN \'DOMAIN\' ELSE \'TYPE\' END, pt.oid, pn.nspname, NULL, pt.typname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn - WHERE pt.typnamespace=pn.oid AND typname ILIKE {$term} - AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) - {$where} + WHERE pt.typnamespace=pn.oid AND typname ILIKE %s + AND (pt.typrelid = 0 OR (SELECT c.relkind = \'c\' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) + %s UNION ALL - SELECT 'OPERATOR', po.oid, pn.nspname, NULL, po.oprname FROM pg_catalog.pg_operator po, pg_catalog.pg_namespace pn - WHERE po.oprnamespace=pn.oid AND oprname ILIKE {$term} {$where} + SELECT \'OPERATOR\', po.oid, pn.nspname, NULL, po.oprname FROM pg_catalog.pg_operator po, pg_catalog.pg_namespace pn + WHERE po.oprnamespace=pn.oid AND oprname ILIKE %s %s UNION ALL - SELECT 'CONVERSION', pc.oid, pn.nspname, NULL, pc.conname FROM pg_catalog.pg_conversion pc, - pg_catalog.pg_namespace pn WHERE pc.connamespace=pn.oid AND conname ILIKE {$term} {$where} + SELECT \'CONVERSION\', pc.oid, pn.nspname, NULL, pc.conname FROM pg_catalog.pg_conversion pc, + pg_catalog.pg_namespace pn WHERE pc.connamespace=pn.oid AND conname ILIKE %s %s UNION ALL - SELECT 'LANGUAGE', pl.oid, NULL, NULL, pl.lanname FROM pg_catalog.pg_language pl - WHERE lanname ILIKE {$term} {$lan_where} + SELECT \'LANGUAGE\', pl.oid, NULL, NULL, pl.lanname FROM pg_catalog.pg_language pl + WHERE lanname ILIKE %s %s UNION ALL - SELECT DISTINCT ON (p.proname) 'AGGREGATE', p.oid, pn.nspname, NULL, p.proname FROM pg_catalog.pg_proc p + SELECT DISTINCT ON (p.proname) \'AGGREGATE\', p.oid, pn.nspname, NULL, p.proname FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace pn ON p.pronamespace=pn.oid - WHERE p.proisagg AND p.proname ILIKE {$term} {$where} + WHERE p.proisagg AND p.proname ILIKE %s %s UNION ALL - SELECT DISTINCT ON (po.opcname) 'OPCLASS', po.oid, pn.nspname, NULL, po.opcname FROM pg_catalog.pg_opclass po, + SELECT DISTINCT ON (po.opcname) \'OPCLASS\', po.oid, pn.nspname, NULL, po.opcname FROM pg_catalog.pg_opclass po, pg_catalog.pg_namespace pn WHERE po.opcnamespace=pn.oid - AND po.opcname ILIKE {$term} {$where} - "; + AND po.opcname ILIKE %s %s + ', + $term, + $where, + $term, + $where, + $term, + $where, + $term, + $lan_where, + $term, + $where, + $term, + $where + ); } else { // Otherwise just add domains - $sql .= " + $sql .= \sprintf( + ' UNION ALL - SELECT 'DOMAIN', pt.oid, pn.nspname, NULL, + SELECT \'DOMAIN\', pt.oid, pn.nspname, NULL, pt.typname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn - WHERE pt.typnamespace=pn.oid AND pt.typtype='d' AND typname ILIKE {$term} - AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) - {$where} - "; + WHERE pt.typnamespace=pn.oid AND pt.typtype=\'d\' AND typname ILIKE %s + AND (pt.typrelid = 0 OR (SELECT c.relkind = \'c\' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) + %s + ', + $term, + $where + ); } if ('' !== $filter) { // We use like to make RULE, CONSTRAINT and COLUMN searches work - $sql .= ") AS sub WHERE type LIKE '{$filter}%' "; + $sql .= \sprintf( + ') AS sub WHERE type LIKE \'%s%\' ', + $filter + ); } $sql .= 'ORDER BY type, schemaname, relname, name'; @@ -348,7 +447,7 @@ class Postgres extends ADOdbBase * * @param bool $all True to get all languages, regardless of show_system * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function getLanguages($all = false) { @@ -360,15 +459,18 @@ class Postgres extends ADOdbBase $where = 'WHERE lanispl'; } - $sql = " + $sql = \sprintf( + ' SELECT lanname, lanpltrusted, lanplcallfoid::pg_catalog.regproc AS lanplcallf FROM pg_catalog.pg_language - {$where} + %s ORDER BY lanname - "; + ', + $where + ); return $this->selectSet($sql); } @@ -458,8 +560,7 @@ class Postgres extends ADOdbBase * end of quote if matching non-backslashed character. * backslashes don't count for double quotes, though. */ - if ( - \mb_substr($line, $i, 1) === $in_quote && + if (\mb_substr($line, $i, 1) === $in_quote && (0 === $bslash_count % 2 || '"' === $in_quote) ) { $in_quote = 0; @@ -665,12 +766,12 @@ class Postgres extends ADOdbBase * @param null|int $page_size The number of rows per page * @param int $max_pages (return-by-ref) The max number of pages in the relation * - * @return int|\PHPPgAdmin\ADORecordSet A recordset on success or an int with error code - * - -1 transaction error - * - -2 counting error - * - -3 page or page_size invalid - * - -4 unknown type - * - -5 failed setting transaction read only + * @return ADORecordSet|int A recordset on success or an int with error code + * - -1 transaction error + * - -2 counting error + * - -3 page or page_size invalid + * - -4 unknown type + * - -5 failed setting transaction read only */ public function browseQuery($type, $table, $query, $sortkey, $sortdir, $page, $page_size, &$max_pages) { @@ -707,7 +808,10 @@ class Postgres extends ADOdbBase } // Generate count query - $count = "SELECT COUNT(*) AS total FROM ({$query}) AS sub"; + $count = \sprintf( + 'SELECT COUNT(*) AS total FROM (%s) AS sub', + $query + ); // Open a transaction $status = $this->beginTransaction(); @@ -757,7 +861,10 @@ class Postgres extends ADOdbBase // Figure out ORDER BY. Sort key is always the column number (based from one) // of the column to order by. Only need to do this for non-TABLE queries if ('TABLE' !== $type && \preg_match('/^[0-9]+$/', $sortkey) && 0 < $sortkey) { - $orderby = " ORDER BY {$sortkey}"; + $orderby = \sprintf( + ' ORDER BY %s', + $sortkey + ); // Add sort order if ('desc' === $sortdir) { $orderby .= ' DESC'; @@ -769,7 +876,12 @@ class Postgres extends ADOdbBase } // Actually retrieve the rows, with offset and limit - $rs = $this->selectSet("SELECT * FROM ({$query}) AS sub {$orderby} LIMIT {$page_size} OFFSET " . ($page - 1) * $page_size); + $rs = $this->selectSet(\sprintf( + 'SELECT * FROM (%s) AS sub %s LIMIT %s OFFSET ', + $query, + $orderby, + $page_size + ) . ($page - 1) * $page_size); $status = $this->endTransaction(); if (0 !== $status) { @@ -800,14 +912,20 @@ class Postgres extends ADOdbBase // If an empty array is passed in, then show all columns if (0 === \count($show)) { if ($this->hasObjectID($table)) { - $sql = "SELECT \"{$this->id}\", * FROM "; + $sql = \sprintf( + 'SELECT "%s", * FROM ', + $this->id + ); } else { $sql = 'SELECT * FROM '; } } else { // Add oid column automatically to results for editing purposes if (!\in_array($this->id, $show, true) && $this->hasObjectID($table)) { - $sql = "SELECT \"{$this->id}\", \""; + $sql = \sprintf( + 'SELECT "%s", "', + $this->id + ); } else { $sql = 'SELECT "'; } @@ -820,9 +938,15 @@ class Postgres extends ADOdbBase if (isset($_REQUEST['schema'])) { $f_schema = $_REQUEST['schema']; $this->fieldClean($f_schema); - $sql .= "\"{$f_schema}\"."; + $sql .= \sprintf( + '"%s".', + $f_schema + ); } - $sql .= "\"{$table}\""; + $sql .= \sprintf( + '"%s"', + $table + ); // If we have values specified, add them to the WHERE clause $first = true; @@ -845,19 +969,38 @@ class Postgres extends ADOdbBase // this is because (x), subqueries need to // to allow 'a','b' as input. $this->clean($v); - $sql .= "\"{$k}\" {$ops[$k]} '{$v}'"; + $sql .= \sprintf( + '"%s" %s \'%s\'', + $k, + $ops[$k], + $v + ); break; case 'p': - $sql .= "\"{$k}\" {$ops[$k]}"; + $sql .= \sprintf( + '"%s" %s', + $k, + $ops[$k] + ); break; case 'x': - $sql .= "\"{$k}\" {$ops[$k]} ({$v})"; + $sql .= \sprintf( + '"%s" %s (%s)', + $k, + $ops[$k], + $v + ); break; case 't': - $sql .= "\"{$k}\" {$ops[$k]}('{$v}')"; + $sql .= \sprintf( + '"%s" %s(\'%s\')', + $k, + $ops[$k], + $v + ); break; diff --git a/src/database/Postgres10.php b/src/database/Postgres10.php index 364acbdb..47a3ff50 100644 --- a/src/database/Postgres10.php +++ b/src/database/Postgres10.php @@ -6,6 +6,9 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\Help\PostgresDoc10; + /** * @file * PostgreSQL 10.x support @@ -14,7 +17,6 @@ namespace PHPPgAdmin\Database; * * @see https://blog.2ndquadrant.com/postgresql-10-identity-columns/ */ - /** * Class to add support for Postgres10. */ @@ -28,12 +30,12 @@ class Postgres10 extends Postgres96 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc10::class; + public $help_classname = PostgresDoc10::class; /** * Return all tables in current database (and schema). * - * @return int|\PHPPgAdmin\ADORecordSet All tables, sorted alphabetically + * @return ADORecordSet|int All tables, sorted alphabetically */ public function getTables() { @@ -57,12 +59,15 @@ class Postgres10 extends Postgres96 $sql .= " 'N/A' as table_size "; } - $sql .= " FROM pg_catalog.pg_class c + $sql .= \sprintf( + ' FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_tablespace pt ON pt.oid=c.reltablespace - WHERE c.relkind IN ('r','p') - AND nspname='{$c_schema}' - ORDER BY c.relname"; + WHERE c.relkind IN (\'r\',\'p\') + AND nspname=\'%s\' + ORDER BY c.relname', + $c_schema + ); return $this->selectSet($sql); } diff --git a/src/database/Postgres11.php b/src/database/Postgres11.php index 8e420ddc..9dc9192b 100644 --- a/src/database/Postgres11.php +++ b/src/database/Postgres11.php @@ -6,6 +6,9 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\Help\PostgresDoc11; + /** * @file * PostgreSQL 11.x support @@ -23,7 +26,7 @@ class Postgres11 extends Postgres10 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc11::class; + public $help_classname = PostgresDoc11::class; /** * Returns a list of all functions in the database. @@ -34,7 +37,7 @@ class Postgres11 extends Postgres10 * @param bool $all If true, will find all available functions, if false just those in search path * @param mixed $type If truthy, will return functions of type trigger * - * @return int|\PHPPgAdmin\ADORecordSet All functions + * @return ADORecordSet|int All functions */ public function getFunctions($all = false, $type = null) { @@ -48,32 +51,39 @@ class Postgres11 extends Postgres10 } else { $c_schema = $this->_schema; $this->clean($c_schema); - $where = "n.nspname = '{$c_schema}'"; + $where = \sprintf( + 'n.nspname = \'%s\'', + $c_schema + ); $distinct = ''; } - $sql = " + $sql = \sprintf( + ' SELECT - {$distinct} + %s p.oid AS prooid, p.proname, p.proretset, pg_catalog.format_type(p.prorettype, NULL) AS proresult, pg_catalog.oidvectortypes(p.proargtypes) AS proarguments, pl.lanname AS prolanguage, - pg_catalog.obj_description(p.oid, 'pg_proc') AS procomment, - p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto, - CASE WHEN p.proretset THEN 'setof ' ELSE '' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns, + pg_catalog.obj_description(p.oid, \'pg_proc\') AS procomment, + p.proname || \' (\' || pg_catalog.oidvectortypes(p.proargtypes) || \')\' AS proproto, + CASE WHEN p.proretset THEN \'setof \' ELSE \'\' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns, coalesce(u.usename::text,p.proowner::text) AS proowner FROM pg_catalog.pg_proc p INNER JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace INNER JOIN pg_catalog.pg_language pl ON pl.oid = p.prolang LEFT JOIN pg_catalog.pg_user u ON u.usesysid = p.proowner - WHERE p.prokind !='a' - AND {$where} + WHERE p.prokind !=\'a\' + AND %s ORDER BY p.proname, proresult - "; + ', + $distinct, + $where + ); return $this->selectSet($sql); } diff --git a/src/database/Postgres12.php b/src/database/Postgres12.php index 82185c50..75f97e8d 100644 --- a/src/database/Postgres12.php +++ b/src/database/Postgres12.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\Help\PostgresDoc12; + /** * @file * PostgreSQL 12.x support @@ -23,7 +25,7 @@ class Postgres12 extends Postgres11 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc12::class; + public $help_classname = PostgresDoc12::class; /** * Checks to see whether or not a table has a unique id column. diff --git a/src/database/Postgres13.php b/src/database/Postgres13.php index 709bcd1a..4179ccae 100644 --- a/src/database/Postgres13.php +++ b/src/database/Postgres13.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\Help\PostgresDoc12; + /** * @file * PostgreSQL 13.x support @@ -24,5 +26,5 @@ class Postgres13 extends Postgres12 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc12::class; + public $help_classname = PostgresDoc12::class; } diff --git a/src/database/Postgres90.php b/src/database/Postgres90.php index cf4b6dad..e368bbb9 100644 --- a/src/database/Postgres90.php +++ b/src/database/Postgres90.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\Help\PostgresDoc90; + /** * @file * PostgreSQL 9.0 support @@ -22,5 +24,5 @@ class Postgres90 extends Postgres91 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc90::class; + public $help_classname = PostgresDoc90::class; } diff --git a/src/database/Postgres91.php b/src/database/Postgres91.php index 3f2a7950..119246da 100644 --- a/src/database/Postgres91.php +++ b/src/database/Postgres91.php @@ -6,11 +6,13 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\Help\PostgresDoc91; + /** * @file * PostgreSQL 9.1 support */ - /** * Id: Postgres82.php,v 1.10 2007/12/28 16:21:25 ioguix Exp $. */ @@ -24,7 +26,7 @@ class Postgres91 extends Postgres92 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc91::class; + public $help_classname = PostgresDoc91::class; // Administration functions @@ -33,7 +35,7 @@ class Postgres91 extends Postgres92 * * @param null|string $database (optional) Find only connections to specified database * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function getProcesses($database = null) { @@ -43,10 +45,13 @@ class Postgres91 extends Postgres92 ORDER BY datname, usename, procpid'; } else { $this->clean($database); - $sql = "SELECT datname, usename, procpid AS pid, waiting, current_query AS query, query_start + $sql = \sprintf( + 'SELECT datname, usename, procpid AS pid, waiting, current_query AS query, query_start FROM pg_catalog.pg_stat_activity - WHERE datname='{$database}' - ORDER BY usename, procpid"; + WHERE datname=\'%s\' + ORDER BY usename, procpid', + $database + ); } return $this->selectSet($sql); @@ -59,7 +64,7 @@ class Postgres91 extends Postgres92 * * @param bool $all Include all tablespaces (necessary when moving objects back to the default space) * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function getTablespaces($all = false) { @@ -83,15 +88,18 @@ class Postgres91 extends Postgres92 * * @param string $spcname * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function getTablespace($spcname) { $this->clean($spcname); - $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, spclocation, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment - FROM pg_catalog.pg_tablespace WHERE spcname='{$spcname}'"; + $sql = \sprintf( + 'SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, spclocation, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid=\'pg_tablespace\'::regclass) AS spccomment + FROM pg_catalog.pg_tablespace WHERE spcname=\'%s\'', + $spcname + ); return $this->selectSet($sql); } diff --git a/src/database/Postgres92.php b/src/database/Postgres92.php index 2e2eb976..ee3ccade 100644 --- a/src/database/Postgres92.php +++ b/src/database/Postgres92.php @@ -6,6 +6,9 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\Help\PostgresDoc92; + /** * @file * PostgreSQL 9.2 support @@ -22,14 +25,14 @@ class Postgres92 extends Postgres93 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc92::class; + public $help_classname = PostgresDoc92::class; /** * Returns all available process information. * * @param null|string $database (optional) Find only connections to specified database * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function getProcesses($database = null) { @@ -40,11 +43,14 @@ class Postgres92 extends Postgres93 ORDER BY datname, usename, pid"; } else { $this->clean($database); - $sql = "SELECT datname, usename, pid, waiting, state_change as query_start, - case when state='idle in transaction' then ' in transaction' when state = 'idle' then '' else query end as query + $sql = \sprintf( + 'SELECT datname, usename, pid, waiting, state_change as query_start, + case when state=\'idle in transaction\' then \' in transaction\' when state = \'idle\' then \'\' else query end as query FROM pg_catalog.pg_stat_activity - WHERE datname='{$database}' - ORDER BY usename, pid"; + WHERE datname=\'%s\' + ORDER BY usename, pid', + $database + ); } return $this->selectSet($sql); @@ -55,7 +61,7 @@ class Postgres92 extends Postgres93 * * @param bool $all Include all tablespaces (necessary when moving objects back to the default space) * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function getTablespaces($all = false) { @@ -81,15 +87,18 @@ class Postgres92 extends Postgres93 * * @param string $spcname * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function getTablespace($spcname) { $this->clean($spcname); - $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, pg_catalog.pg_tablespace_location(oid) as spclocation, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment - FROM pg_catalog.pg_tablespace WHERE spcname='{$spcname}'"; + $sql = \sprintf( + 'SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, pg_catalog.pg_tablespace_location(oid) as spclocation, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid=\'pg_tablespace\'::regclass) AS spccomment + FROM pg_catalog.pg_tablespace WHERE spcname=\'%s\'', + $spcname + ); return $this->selectSet($sql); } diff --git a/src/database/Postgres93.php b/src/database/Postgres93.php index 5e2b0b74..215a477d 100644 --- a/src/database/Postgres93.php +++ b/src/database/Postgres93.php @@ -6,6 +6,9 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\Help\PostgresDoc93; + /** * @file * PostgreSQL 9.3 support @@ -20,7 +23,7 @@ class Postgres93 extends Postgres94 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc93::class; + public $help_classname = PostgresDoc93::class; /** * Returns a list of all functions in the database. @@ -28,7 +31,7 @@ class Postgres93 extends Postgres94 * @param bool $all If true, will find all available functions, if false just those in search path * @param mixed $type If not null, will find all trigger functions * - * @return int|\PHPPgAdmin\ADORecordSet All functions + * @return ADORecordSet|int All functions */ public function getFunctions($all = false, $type = null) { @@ -42,22 +45,26 @@ class Postgres93 extends Postgres94 } else { $c_schema = $this->_schema; $this->clean($c_schema); - $where = "n.nspname = '{$c_schema}'"; + $where = \sprintf( + 'n.nspname = \'%s\'', + $c_schema + ); $distinct = ''; } - $sql = " + $sql = \sprintf( + ' SELECT - {$distinct} + %s p.oid AS prooid, p.proname, p.proretset, pg_catalog.format_type(p.prorettype, NULL) AS proresult, pg_catalog.oidvectortypes(p.proargtypes) AS proarguments, pl.lanname AS prolanguage, - pg_catalog.obj_description(p.oid, 'pg_proc') AS procomment, - p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto, - CASE WHEN p.proretset THEN 'setof ' ELSE '' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns, + pg_catalog.obj_description(p.oid, \'pg_proc\') AS procomment, + p.proname || \' (\' || pg_catalog.oidvectortypes(p.proargtypes) || \')\' AS proproto, + CASE WHEN p.proretset THEN \'setof \' ELSE \'\' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns, coalesce(u.rolname::text,p.proowner::text) AS proowner FROM pg_catalog.pg_proc p @@ -65,9 +72,12 @@ class Postgres93 extends Postgres94 INNER JOIN pg_catalog.pg_language pl ON pl.oid = p.prolang LEFT JOIN pg_catalog.pg_roles u ON u.oid = p.proowner WHERE NOT p.proisagg - AND {$where} + AND %s ORDER BY p.proname, proresult - "; + ', + $distinct, + $where + ); return $this->selectSet($sql); } diff --git a/src/database/Postgres94.php b/src/database/Postgres94.php index ab4d8dd1..b1680fa6 100644 --- a/src/database/Postgres94.php +++ b/src/database/Postgres94.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\Help\PostgresDoc94; + /** * @file * PostgreSQL 9.4 support @@ -17,7 +19,7 @@ class Postgres94 extends Postgres95 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc94::class; + public $help_classname = PostgresDoc94::class; /** * @var float diff --git a/src/database/Postgres95.php b/src/database/Postgres95.php index 885150b7..05cfca55 100644 --- a/src/database/Postgres95.php +++ b/src/database/Postgres95.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\Help\PostgresDoc95; + /** * @file * PostgreSQL 9.5 support @@ -17,7 +19,7 @@ class Postgres95 extends Postgres96 /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc95::class; + public $help_classname = PostgresDoc95::class; /** * @var float diff --git a/src/database/Postgres96.php b/src/database/Postgres96.php index 289fd295..f3939c74 100644 --- a/src/database/Postgres96.php +++ b/src/database/Postgres96.php @@ -6,6 +6,9 @@ namespace PHPPgAdmin\Database; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\Help\PostgresDoc96; + /** * @file * PostgreSQL 9.6 support @@ -22,7 +25,7 @@ class Postgres96 extends Postgres /** * @var class-string */ - public $help_classname = \PHPPgAdmin\Help\PostgresDoc96::class; + public $help_classname = PostgresDoc96::class; // Administration functions @@ -31,7 +34,7 @@ class Postgres96 extends Postgres * * @param null|string $database (optional) Find only connections to specified database * - * @return int|\PHPPgAdmin\ADORecordSet A recordset + * @return ADORecordSet|int A recordset */ public function getProcesses($database = null) { @@ -45,14 +48,17 @@ class Postgres96 extends Postgres ORDER BY datname, usename, pid"; } else { $this->clean($database); - $sql = "SELECT datid, datname, pid, usename, application_name, client_addr, state, wait_event_type, wait_event, state_change as query_start, + $sql = \sprintf( + 'SELECT datid, datname, pid, usename, application_name, client_addr, state, wait_event_type, wait_event, state_change as query_start, CASE - WHEN state='active' THEN query + WHEN state=\'active\' THEN query ELSE state END AS query FROM pg_catalog.pg_stat_activity - WHERE datname='{$database}' - ORDER BY usename, pid"; + WHERE datname=\'%s\' + ORDER BY usename, pid', + $database + ); } return $this->selectSet($sql); @@ -75,7 +81,7 @@ class Postgres96 extends Postgres * @param string $expiry string Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire * @param array $groups The groups to create the user in * - * @return int|\PHPPgAdmin\ADORecordSet 0 if operation was successful + * @return ADORecordSet|int 0 if operation was successful * * @internal param $group (array) The groups to create the user in */ @@ -87,10 +93,16 @@ class Postgres96 extends Postgres $this->clean($expiry); $this->fieldArrayClean($groups); - $sql = "CREATE USER \"{$username}\""; + $sql = \sprintf( + 'CREATE USER "%s"', + $username + ); if ('' !== $password) { - $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= \sprintf( + ' WITH ENCRYPTED PASSWORD \'%s\'', + $enc + ); } $sql .= $createdb ? ' CREATEDB' : ' NOCREATEDB'; @@ -101,7 +113,10 @@ class Postgres96 extends Postgres } if ('' !== $expiry) { - $sql .= " VALID UNTIL '{$expiry}'"; + $sql .= \sprintf( + ' VALID UNTIL \'%s\'', + $expiry + ); } else { $sql .= " VALID UNTIL 'infinity'"; } diff --git a/src/database/databasetraits/AggregateTrait.php b/src/database/databasetraits/AggregateTrait.php index 8383d905..91363f98 100644 --- a/src/database/databasetraits/AggregateTrait.php +++ b/src/database/databasetraits/AggregateTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for aggregates manipulation. */ @@ -39,18 +41,34 @@ trait AggregateTrait $this->beginTransaction(); - $sql = "CREATE AGGREGATE \"{$f_schema}\".\"{$name}\" (BASETYPE = \"{$basetype}\", SFUNC = \"{$sfunc}\", STYPE = \"{$stype}\""; + $sql = \sprintf( + 'CREATE AGGREGATE "%s"."%s" (BASETYPE = "%s", SFUNC = "%s", STYPE = "%s"', + $f_schema, + $name, + $basetype, + $sfunc, + $stype + ); if ('' !== \trim($ffunc)) { - $sql .= ", FINALFUNC = \"{$ffunc}\""; + $sql .= \sprintf( + ', FINALFUNC = "%s"', + $ffunc + ); } if ('' !== \trim($initcond)) { - $sql .= ", INITCOND = \"{$initcond}\""; + $sql .= \sprintf( + ', INITCOND = "%s"', + $initcond + ); } if ('' !== \trim($sortop)) { - $sql .= ", SORTOP = \"{$sortop}\""; + $sql .= \sprintf( + ', SORTOP = "%s"', + $sortop + ); } $sql .= ')'; @@ -83,7 +101,7 @@ trait AggregateTrait * @param string $aggrtype The input data type of the aggregate * @param bool $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropAggregate($aggrname, $aggrtype, $cascade) { @@ -92,7 +110,12 @@ trait AggregateTrait $this->fieldClean($aggrname); $this->fieldClean($aggrtype); - $sql = "DROP AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\")"; + $sql = \sprintf( + 'DROP AGGREGATE "%s"."%s" ("%s")', + $f_schema, + $aggrname, + $aggrtype + ); if ($cascade) { $sql .= ' CASCADE'; @@ -107,7 +130,7 @@ trait AggregateTrait * @param string $name The name of the aggregate * @param string $basetype The input data type of the aggregate * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getAggregate($name, $basetype) { @@ -116,16 +139,19 @@ trait AggregateTrait $this->fieldClean($name); $this->fieldClean($basetype); - $sql = " + $sql = \sprintf( + ' SELECT p.proname, CASE p.proargtypes[0] - WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN NULL + WHEN \'pg_catalog."any"\'::pg_catalog.regtype THEN NULL ELSE pg_catalog.format_type(p.proargtypes[0], NULL) END AS proargtypes, a.aggtransfn, format_type(a.aggtranstype, NULL) AS aggstype, a.aggfinalfn, - a.agginitval, a.aggsortop, u.usename, pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment + a.agginitval, a.aggsortop, u.usename, pg_catalog.obj_description(p.oid, \'pg_proc\') AS aggrcomment FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid - AND p.proisagg AND n.nspname='{$c_schema}' - AND p.proname='" . $name . "' + AND p.proisagg AND n.nspname=\'%s\' + AND p.proname=\'', + $c_schema + ) . $name . "' AND CASE p.proargtypes[0] WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN '' ELSE pg_catalog.format_type(p.proargtypes[0], NULL) @@ -137,18 +163,21 @@ trait AggregateTrait /** * Gets all aggregates. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getAggregates() { $c_schema = $this->_schema; $this->clean($c_schema); - $sql = "SELECT p.proname, CASE p.proargtypes[0] WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN NULL ELSE + $sql = \sprintf( + 'SELECT p.proname, CASE p.proargtypes[0] WHEN \'pg_catalog."any"\'::pg_catalog.regtype THEN NULL ELSE pg_catalog.format_type(p.proargtypes[0], NULL) END AS proargtypes, a.aggtransfn, u.usename, - pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment + pg_catalog.obj_description(p.oid, \'pg_proc\') AS aggrcomment FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid - AND p.proisagg AND n.nspname='{$c_schema}' ORDER BY 1, 2"; + AND p.proisagg AND n.nspname=\'%s\' ORDER BY 1, 2', + $c_schema + ); return $this->selectSet($sql); } @@ -244,7 +273,7 @@ trait AggregateTrait * @param string $aggrtype The input data type of the aggregate * @param string $newaggrowner The new owner of the aggregate * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function changeAggregateOwner($aggrname, $aggrtype, $newaggrowner) { @@ -252,7 +281,13 @@ trait AggregateTrait $this->fieldClean($f_schema); $this->fieldClean($aggrname); $this->fieldClean($newaggrowner); - $sql = "ALTER AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\") OWNER TO \"{$newaggrowner}\""; + $sql = \sprintf( + 'ALTER AGGREGATE "%s"."%s" ("%s") OWNER TO "%s"', + $f_schema, + $aggrname, + $aggrtype, + $newaggrowner + ); return $this->execute($sql); } @@ -264,7 +299,7 @@ trait AggregateTrait * @param string $aggrtype The input data type of the aggregate * @param string $newaggrschema The new schema for the aggregate * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function changeAggregateSchema($aggrname, $aggrtype, $newaggrschema) { @@ -272,7 +307,13 @@ trait AggregateTrait $this->fieldClean($f_schema); $this->fieldClean($aggrname); $this->fieldClean($newaggrschema); - $sql = "ALTER AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\") SET SCHEMA \"{$newaggrschema}\""; + $sql = \sprintf( + 'ALTER AGGREGATE "%s"."%s" ("%s") SET SCHEMA "%s"', + $f_schema, + $aggrname, + $aggrtype, + $newaggrschema + ); return $this->execute($sql); } @@ -285,12 +326,20 @@ trait AggregateTrait * @param string $aggrtype The actual input data type of the aggregate * @param string $newaggrname The new name of the aggregate * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function renameAggregate($aggrschema, $aggrname, $aggrtype, $newaggrname) { /* this function is called from alterAggregate where params are cleaned */ - $sql = "ALTER AGGREGATE \"{$aggrschema}\"" . '.' . "\"{$aggrname}\" (\"{$aggrtype}\") RENAME TO \"{$newaggrname}\""; + $sql = \sprintf( + 'ALTER AGGREGATE "%s"', + $aggrschema + ) . '.' . \sprintf( + '"%s" ("%s") RENAME TO "%s"', + $aggrname, + $aggrtype, + $newaggrname + ); return $this->execute($sql); } diff --git a/src/database/databasetraits/ColumnTrait.php b/src/database/databasetraits/ColumnTrait.php index c365b222..4b5778cf 100644 --- a/src/database/databasetraits/ColumnTrait.php +++ b/src/database/databasetraits/ColumnTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for column manipulation. */ @@ -35,7 +37,13 @@ trait ColumnTrait $this->clean($length); if ('' === $length) { - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" {$type}"; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ADD COLUMN "%s" %s', + $f_schema, + $table, + $column, + $type + ); } else { switch ($type) { // Have to account for weird placing of length for with/without @@ -43,18 +51,39 @@ trait ColumnTrait case 'timestamp with time zone': case 'timestamp without time zone': $qual = \mb_substr($type, 9); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" timestamp({$length}){$qual}"; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ADD COLUMN "%s" timestamp(%s)%s', + $f_schema, + $table, + $column, + $length, + $qual + ); break; case 'time with time zone': case 'time without time zone': $qual = \mb_substr($type, 4); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" time({$length}){$qual}"; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ADD COLUMN "%s" time(%s)%s', + $f_schema, + $table, + $column, + $length, + $qual + ); break; default: - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" {$type}({$length})"; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ADD COLUMN "%s" %s(%s)', + $f_schema, + $table, + $column, + $type, + $length + ); } } @@ -166,15 +195,25 @@ trait ColumnTrait $toAlter = []; // Create the command for changing nullability if ($notnull !== $oldnotnull) { - $toAlter[] = "ALTER COLUMN \"{$name}\" " . ($notnull ? 'SET' : 'DROP') . ' NOT NULL'; + $toAlter[] = \sprintf( + 'ALTER COLUMN "%s" ', + $name + ) . ($notnull ? 'SET' : 'DROP') . ' NOT NULL'; } // Add default, if it has changed if ($default !== $olddefault) { if ('' === $default) { - $toAlter[] = "ALTER COLUMN \"{$name}\" DROP DEFAULT"; + $toAlter[] = \sprintf( + 'ALTER COLUMN "%s" DROP DEFAULT', + $name + ); } else { - $toAlter[] = "ALTER COLUMN \"{$name}\" SET DEFAULT {$default}"; + $toAlter[] = \sprintf( + 'ALTER COLUMN "%s" SET DEFAULT %s', + $name, + $default + ); } } @@ -188,18 +227,30 @@ trait ColumnTrait case 'timestamp with time zone': case 'timestamp without time zone': $qual = \mb_substr($type, 9); - $ftype = "timestamp({$length}){$qual}"; + $ftype = \sprintf( + 'timestamp(%s)%s', + $length, + $qual + ); break; case 'time with time zone': case 'time without time zone': $qual = \mb_substr($type, 4); - $ftype = "time({$length}){$qual}"; + $ftype = \sprintf( + 'time(%s)%s', + $length, + $qual + ); break; default: - $ftype = "{$type}({$length})"; + $ftype = \sprintf( + '%s(%s)', + $type, + $length + ); } } @@ -209,13 +260,21 @@ trait ColumnTrait } if ($ftype !== $oldtype) { - $toAlter[] = "ALTER COLUMN \"{$name}\" TYPE {$ftype}"; + $toAlter[] = \sprintf( + 'ALTER COLUMN "%s" TYPE %s', + $name, + $ftype + ); } // Attempt to process the batch alteration, if anything has been changed if (!empty($toAlter)) { // Initialise an empty SQL string - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" " + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ', + $f_schema, + $table + ) . \implode(',', $toAlter); $status = $this->execute($sql); @@ -256,7 +315,13 @@ trait ColumnTrait $this->fieldClean($column); $this->fieldClean($newName); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" RENAME COLUMN \"{$column}\" TO \"{$newName}\""; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" RENAME COLUMN "%s" TO "%s"', + $f_schema, + $table, + $column, + $newName + ); $status = $this->execute($sql); @@ -270,7 +335,7 @@ trait ColumnTrait * @param string $column The column name to set * @param mixed $default The new default value * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function setColumnDefault($table, $column, $default) { @@ -279,7 +344,13 @@ trait ColumnTrait $this->fieldClean($table); $this->fieldClean($column); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" SET DEFAULT {$default}"; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ALTER COLUMN "%s" SET DEFAULT %s', + $f_schema, + $table, + $column, + $default + ); return $this->execute($sql); } @@ -291,7 +362,7 @@ trait ColumnTrait * @param string $column The column to alter * @param bool $state True to set null, false to set not null * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function setColumnNull($table, $column, $state) { @@ -300,7 +371,12 @@ trait ColumnTrait $this->fieldClean($table); $this->fieldClean($column); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" " . ($state ? 'DROP' : 'SET') . ' NOT NULL'; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ALTER COLUMN "%s" ', + $f_schema, + $table, + $column + ) . ($state ? 'DROP' : 'SET') . ' NOT NULL'; return $this->execute($sql); } @@ -321,7 +397,12 @@ trait ColumnTrait $this->fieldClean($table); $this->fieldClean($column); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" DROP COLUMN \"{$column}\""; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" DROP COLUMN "%s"', + $f_schema, + $table, + $column + ); if ($cascade) { $sql .= ' CASCADE'; @@ -338,7 +419,7 @@ trait ColumnTrait * @param string $table The table from which to drop * @param string $column The column name to drop default * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropColumnDefault($table, $column) { @@ -347,7 +428,12 @@ trait ColumnTrait $this->fieldClean($table); $this->fieldClean($column); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" DROP DEFAULT"; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ALTER COLUMN "%s" DROP DEFAULT', + $f_schema, + $table, + $column + ); return $this->execute($sql); } diff --git a/src/database/databasetraits/DatabaseTrait.php b/src/database/databasetraits/DatabaseTrait.php index 84981611..ad17c16d 100644 --- a/src/database/databasetraits/DatabaseTrait.php +++ b/src/database/databasetraits/DatabaseTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for tables manipulation. */ @@ -42,7 +44,10 @@ trait DatabaseTrait } } - $sql = "SELECT usesuper FROM pg_user WHERE usename='{$username}'"; + $sql = \sprintf( + 'SELECT usesuper FROM pg_user WHERE usename=\'%s\'', + $username + ); $usesuper = $this->selectField($sql, 'usesuper'); @@ -58,7 +63,7 @@ trait DatabaseTrait * * @param string $table (optional) The table to analyze * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function analyzeDB($table = '') { @@ -67,7 +72,11 @@ trait DatabaseTrait $this->fieldClean($f_schema); $this->fieldClean($table); - $sql = "ANALYZE \"{$f_schema}\".\"{$table}\""; + $sql = \sprintf( + 'ANALYZE "%s"."%s"', + $f_schema, + $table + ); } else { $sql = 'ANALYZE'; } @@ -80,12 +89,15 @@ trait DatabaseTrait * * @param string $database The name of the database to retrieve * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getDatabase($database) { $this->clean($database); - $sql = "SELECT * FROM pg_database WHERE datname='{$database}'"; + $sql = \sprintf( + 'SELECT * FROM pg_database WHERE datname=\'%s\'', + $database + ); return $this->selectSet($sql); } @@ -95,7 +107,7 @@ trait DatabaseTrait * * @param null|string $currentdatabase database name that should be on top of the resultset * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getDatabases($currentdatabase = null) { @@ -107,26 +119,38 @@ trait DatabaseTrait if (isset($conf['owned_only']) && $conf['owned_only'] && !$this->isSuperUser()) { $username = $server_info['username']; $this->clean($username); - $clause = " AND pr.rolname='{$username}'"; + $clause = \sprintf( + ' AND pr.rolname=\'%s\'', + $username + ); } else { $clause = ''; } if (isset($server_info['useonlydefaultdb']) && $server_info['useonlydefaultdb']) { $currentdatabase = $server_info['defaultdb']; - $clause .= " AND pdb.datname = '{$currentdatabase}' "; + $clause .= \sprintf( + ' AND pdb.datname = \'%s\' ', + $currentdatabase + ); } if (isset($server_info['hiddendbs']) && $server_info['hiddendbs']) { $hiddendbs = $server_info['hiddendbs']; $not_in = "('" . \implode("','", $hiddendbs) . "')"; - $clause .= " AND pdb.datname NOT IN {$not_in} "; + $clause .= \sprintf( + ' AND pdb.datname NOT IN %s ', + $not_in + ); } if (null !== $currentdatabase) { $this->clean($currentdatabase); - $orderby = "ORDER BY pdb.datname = '{$currentdatabase}' DESC, pdb.datname"; + $orderby = \sprintf( + 'ORDER BY pdb.datname = \'%s\' DESC, pdb.datname', + $currentdatabase + ); } else { $orderby = 'ORDER BY pdb.datname'; } @@ -137,13 +161,14 @@ trait DatabaseTrait $where = ' AND pdb.datallowconn'; } - $sql = " + $sql = \sprintf( + ' SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid AND pd.classoid='pg_database'::regclass) AS datcomment, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid AND pd.classoid=\'pg_database\'::regclass) AS datcomment, (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace, - CASE WHEN pg_catalog.has_database_privilege(current_user, pdb.oid, 'CONNECT') + CASE WHEN pg_catalog.has_database_privilege(current_user, pdb.oid, \'CONNECT\') THEN pg_catalog.pg_database_size(pdb.oid) ELSE -1 -- set this magic value, which we will convert to no access later END as dbsize, @@ -152,9 +177,13 @@ trait DatabaseTrait FROM pg_catalog.pg_database pdb LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid) WHERE true - {$where} - {$clause} - {$orderby}"; + %s + %s + %s', + $where, + $clause, + $orderby + ); return $this->selectSet($sql); } @@ -164,16 +193,19 @@ trait DatabaseTrait * * @param string $database the name of the database to get the comment for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getDatabaseComment($database) { $this->clean($database); - $sql = "SELECT description + $sql = \sprintf( + 'SELECT description FROM pg_catalog.pg_database JOIN pg_catalog.pg_shdescription - ON (oid=objoid AND classoid='pg_database'::regclass) - WHERE pg_database.datname = '{$database}' "; + ON (oid=objoid AND classoid=\'pg_database\'::regclass) + WHERE pg_database.datname = \'%s\' ', + $database + ); return $this->selectSet($sql); } @@ -183,12 +215,15 @@ trait DatabaseTrait * * @param string $database the name of the database to get the owner for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getDatabaseOwner($database) { $this->clean($database); - $sql = "SELECT usename FROM pg_user, pg_database WHERE pg_user.usesysid = pg_database.datdba AND pg_database.datname = '{$database}' "; + $sql = \sprintf( + 'SELECT usename FROM pg_user, pg_database WHERE pg_user.usesysid = pg_database.datdba AND pg_database.datname = \'%s\' ', + $database + ); return $this->selectSet($sql); } @@ -236,22 +271,38 @@ trait DatabaseTrait $this->clean($lc_collate); $this->clean($lc_ctype); - $sql = "CREATE DATABASE \"{$database}\" WITH TEMPLATE=\"{$template}\""; + $sql = \sprintf( + 'CREATE DATABASE "%s" WITH TEMPLATE="%s"', + $database, + $template + ); if ('' !== $encoding) { - $sql .= " ENCODING='{$encoding}'"; + $sql .= \sprintf( + ' ENCODING=\'%s\'', + $encoding + ); } if ('' !== $lc_collate) { - $sql .= " LC_COLLATE='{$lc_collate}'"; + $sql .= \sprintf( + ' LC_COLLATE=\'%s\'', + $lc_collate + ); } if ('' !== $lc_ctype) { - $sql .= " LC_CTYPE='{$lc_ctype}'"; + $sql .= \sprintf( + ' LC_CTYPE=\'%s\'', + $lc_ctype + ); } if ('' !== $tablespace && $this->hasTablespaces()) { - $sql .= " TABLESPACE \"{$tablespace}\""; + $sql .= \sprintf( + ' TABLESPACE "%s"', + $tablespace + ); } $status = $this->execute($sql); @@ -276,12 +327,15 @@ trait DatabaseTrait * * @param string $database The name of the database to drop * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropDatabase($database) { $this->fieldClean($database); - $sql = "DROP DATABASE \"{$database}\""; + $sql = \sprintf( + 'DROP DATABASE "%s"', + $database + ); return $this->execute($sql); } @@ -347,7 +401,7 @@ trait DatabaseTrait * @param string $oldName name of database to rename * @param string $newName new name of database * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function alterDatabaseRename($oldName, $newName) { @@ -355,7 +409,11 @@ trait DatabaseTrait $this->fieldClean($newName); if ($oldName !== $newName) { - $sql = "ALTER DATABASE \"{$oldName}\" RENAME TO \"{$newName}\""; + $sql = \sprintf( + 'ALTER DATABASE "%s" RENAME TO "%s"', + $oldName, + $newName + ); return $this->execute($sql); } @@ -370,14 +428,18 @@ trait DatabaseTrait * @param string $dbName database to change ownership of * @param string $newOwner user that will own the database * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function alterDatabaseOwner($dbName, $newOwner) { $this->fieldClean($dbName); $this->fieldClean($newOwner); - $sql = "ALTER DATABASE \"{$dbName}\" OWNER TO \"{$newOwner}\""; + $sql = \sprintf( + 'ALTER DATABASE "%s" OWNER TO "%s"', + $dbName, + $newOwner + ); return $this->execute($sql); } @@ -387,7 +449,7 @@ trait DatabaseTrait * * @param null|string $database (optional) Find only prepared transactions executed in a specific database * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getPreparedXacts($database = null) { @@ -395,8 +457,11 @@ trait DatabaseTrait $sql = 'SELECT * FROM pg_prepared_xacts'; } else { $this->clean($database); - $sql = "SELECT transaction, gid, prepared, owner FROM pg_prepared_xacts - WHERE database='{$database}' ORDER BY owner"; + $sql = \sprintf( + 'SELECT transaction, gid, prepared, owner FROM pg_prepared_xacts + WHERE database=\'%s\' ORDER BY owner', + $database + ); } return $this->selectSet($sql); @@ -407,7 +472,7 @@ trait DatabaseTrait * * @param null|string $database (optional) Find only connections to specified database * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getProcesses($database = null) { @@ -418,11 +483,14 @@ trait DatabaseTrait ORDER BY datname, usename, pid"; } else { $this->clean($database); - $sql = "SELECT datname, usename, pid, waiting, state_change as query_start, - case when state='idle in transaction' then ' in transaction' when state = 'idle' then '' else query end as query + $sql = \sprintf( + 'SELECT datname, usename, pid, waiting, state_change as query_start, + case when state=\'idle in transaction\' then \' in transaction\' when state = \'idle\' then \'\' else query end as query FROM pg_catalog.pg_stat_activity - WHERE datname='{$database}' - ORDER BY usename, pid"; + WHERE datname=\'%s\' + ORDER BY usename, pid', + $database + ); } return $this->selectSet($sql); @@ -433,7 +501,7 @@ trait DatabaseTrait /** * Returns table locks information in the current database. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getLocks() { @@ -445,19 +513,22 @@ trait DatabaseTrait $where = "AND nspname !~ '^pg_t(emp_[0-9]+|oast)$'"; } - $sql = " + $sql = \sprintf( + ' SELECT pn.nspname, pc.relname AS tablename, pl.pid, pl.mode, pl.granted, pl.virtualtransaction, - (select transactionid from pg_catalog.pg_locks l2 where l2.locktype='transactionid' - and l2.mode='ExclusiveLock' and l2.virtualtransaction=pl.virtualtransaction) as transaction + (select transactionid from pg_catalog.pg_locks l2 where l2.locktype=\'transactionid\' + and l2.mode=\'ExclusiveLock\' and l2.virtualtransaction=pl.virtualtransaction) as transaction FROM pg_catalog.pg_locks pl, pg_catalog.pg_class pc, pg_catalog.pg_namespace pn WHERE pl.relation = pc.oid AND pc.relnamespace=pn.oid - {$where} - ORDER BY pid,nspname,tablename"; + %s + ORDER BY pid,nspname,tablename', + $where + ); return $this->selectSet($sql); } @@ -476,9 +547,15 @@ trait DatabaseTrait $pid = (int) $pid; if ('CANCEL' === $signal) { - $sql = "SELECT pg_catalog.pg_cancel_backend({$pid}) AS val"; + $sql = \sprintf( + 'SELECT pg_catalog.pg_cancel_backend(%s) AS val', + $pid + ); } elseif ('KILL' === $signal) { - $sql = "SELECT pg_catalog.pg_terminate_backend({$pid}) AS val"; + $sql = \sprintf( + 'SELECT pg_catalog.pg_terminate_backend(%s) AS val', + $pid + ); } else { return -1; } @@ -527,7 +604,11 @@ trait DatabaseTrait $f_schema = $this->_schema; $this->fieldClean($f_schema); $this->fieldClean($table); - $sql .= " \"{$f_schema}\".\"{$table}\""; + $sql .= \sprintf( + ' "%s"."%s"', + $f_schema, + $table + ); } $status = $this->execute($sql); @@ -571,7 +652,7 @@ trait DatabaseTrait /** * Returns all available variable information. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getVariables() { diff --git a/src/database/databasetraits/DomainTrait.php b/src/database/databasetraits/DomainTrait.php index 4289a4dc..4d465298 100644 --- a/src/database/databasetraits/DomainTrait.php +++ b/src/database/databasetraits/DomainTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for domains manipulation. */ @@ -16,7 +18,7 @@ trait DomainTrait * * @param string $domain The name of the domain to fetch * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getDomain($domain) { @@ -24,21 +26,25 @@ trait DomainTrait $this->clean($c_schema); $this->clean($domain); - $sql = " + $sql = \sprintf( + ' SELECT t.typname AS domname, pg_catalog.format_type(t.typbasetype, t.typtypmod) AS domtype, t.typnotnull AS domnotnull, t.typdefault AS domdef, pg_catalog.pg_get_userbyid(t.typowner) AS domowner, - pg_catalog.obj_description(t.oid, 'pg_type') AS domcomment + pg_catalog.obj_description(t.oid, \'pg_type\') AS domcomment FROM pg_catalog.pg_type t WHERE - t.typtype = 'd' - AND t.typname = '{$domain}' + t.typtype = \'d\' + AND t.typname = \'%s\' AND t.typnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname = '{$c_schema}')"; + WHERE nspname = \'%s\')', + $domain, + $c_schema + ); return $this->selectSet($sql); } @@ -46,28 +52,31 @@ trait DomainTrait /** * Return all domains in current schema. Excludes domain constraints. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getDomains() { $c_schema = $this->_schema; $this->clean($c_schema); - $sql = " + $sql = \sprintf( + ' SELECT t.typname AS domname, pg_catalog.format_type(t.typbasetype, t.typtypmod) AS domtype, t.typnotnull AS domnotnull, t.typdefault AS domdef, pg_catalog.pg_get_userbyid(t.typowner) AS domowner, - pg_catalog.obj_description(t.oid, 'pg_type') AS domcomment + pg_catalog.obj_description(t.oid, \'pg_type\') AS domcomment FROM pg_catalog.pg_type t WHERE - t.typtype = 'd' + t.typtype = \'d\' AND t.typnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$c_schema}') - ORDER BY t.typname"; + WHERE nspname=\'%s\') + ORDER BY t.typname', + $c_schema + ); return $this->selectSet($sql); } @@ -77,7 +86,7 @@ trait DomainTrait * * @param string $domain The name of the domain whose constraints to fetch * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getDomainConstraints($domain) { @@ -85,7 +94,8 @@ trait DomainTrait $this->clean($c_schema); $this->clean($domain); - $sql = " + $sql = \sprintf( + ' SELECT conname, contype, @@ -95,12 +105,15 @@ trait DomainTrait WHERE contypid = ( SELECT oid FROM pg_catalog.pg_type - WHERE typname='{$domain}' + WHERE typname=\'%s\' AND typnamespace = ( SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname = '{$c_schema}') + WHERE nspname = \'%s\') ) - ORDER BY conname"; + ORDER BY conname', + $domain, + $c_schema + ); return $this->selectSet($sql); } @@ -116,7 +129,7 @@ trait DomainTrait * @param string $default Default value for domain * @param string $check A CHECK constraint if there is one * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function createDomain($domain, $type, $length, $array, $notnull, $default, $check) { @@ -124,7 +137,11 @@ trait DomainTrait $this->fieldClean($f_schema); $this->fieldClean($domain); - $sql = "CREATE DOMAIN \"{$f_schema}\".\"{$domain}\" AS "; + $sql = \sprintf( + 'CREATE DOMAIN "%s"."%s" AS ', + $f_schema, + $domain + ); if ('' === $length) { $sql .= $type; @@ -135,18 +152,30 @@ trait DomainTrait case 'timestamp with time zone': case 'timestamp without time zone': $qual = \mb_substr($type, 9); - $sql .= "timestamp({$length}){$qual}"; + $sql .= \sprintf( + 'timestamp(%s)%s', + $length, + $qual + ); break; case 'time with time zone': case 'time without time zone': $qual = \mb_substr($type, 4); - $sql .= "time({$length}){$qual}"; + $sql .= \sprintf( + 'time(%s)%s', + $length, + $qual + ); break; default: - $sql .= "{$type}({$length})"; + $sql .= \sprintf( + '%s(%s)', + $type, + $length + ); } } @@ -160,11 +189,17 @@ trait DomainTrait } if ('' !== $default) { - $sql .= " DEFAULT {$default}"; + $sql .= \sprintf( + ' DEFAULT %s', + $default + ); } if ($this->hasDomainConstraints() && '' !== $check) { - $sql .= " CHECK ({$check})"; + $sql .= \sprintf( + ' CHECK (%s)', + $check + ); } return $this->execute($sql); @@ -197,9 +232,18 @@ trait DomainTrait // Default if ('' === $domdefault) { - $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP DEFAULT"; + $sql = \sprintf( + 'ALTER DOMAIN "%s"."%s" DROP DEFAULT', + $f_schema, + $domain + ); } else { - $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" SET DEFAULT {$domdefault}"; + $sql = \sprintf( + 'ALTER DOMAIN "%s"."%s" SET DEFAULT %s', + $f_schema, + $domain, + $domdefault + ); } $status = $this->execute($sql); @@ -212,9 +256,17 @@ trait DomainTrait // NOT NULL if ($domnotnull) { - $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" SET NOT NULL"; + $sql = \sprintf( + 'ALTER DOMAIN "%s"."%s" SET NOT NULL', + $f_schema, + $domain + ); } else { - $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP NOT NULL"; + $sql = \sprintf( + 'ALTER DOMAIN "%s"."%s" DROP NOT NULL', + $f_schema, + $domain + ); } $status = $this->execute($sql); @@ -226,7 +278,12 @@ trait DomainTrait } // Owner - $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" OWNER TO \"{$domowner}\""; + $sql = \sprintf( + 'ALTER DOMAIN "%s"."%s" OWNER TO "%s"', + $f_schema, + $domain, + $domowner + ); $status = $this->execute($sql); @@ -245,7 +302,7 @@ trait DomainTrait * @param string $domain The name of the domain to drop * @param string $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropDomain($domain, $cascade) { @@ -253,7 +310,11 @@ trait DomainTrait $this->fieldClean($f_schema); $this->fieldClean($domain); - $sql = "DROP DOMAIN \"{$f_schema}\".\"{$domain}\""; + $sql = \sprintf( + 'DROP DOMAIN "%s"."%s"', + $f_schema, + $domain + ); if ($cascade) { $sql .= ' CASCADE'; @@ -269,7 +330,7 @@ trait DomainTrait * @param string $definition The definition of the check * @param string $name (optional) The name to give the check, otherwise default name is assigned * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function addDomainCheckConstraint($domain, $definition, $name = '') { @@ -278,13 +339,23 @@ trait DomainTrait $this->fieldClean($domain); $this->fieldClean($name); - $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" ADD "; + $sql = \sprintf( + 'ALTER DOMAIN "%s"."%s" ADD ', + $f_schema, + $domain + ); if ('' !== $name) { - $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= \sprintf( + 'CONSTRAINT "%s" ', + $name + ); } - $sql .= "CHECK ({$definition})"; + $sql .= \sprintf( + 'CHECK (%s)', + $definition + ); return $this->execute($sql); } @@ -296,7 +367,7 @@ trait DomainTrait * @param string $constraint The constraint to remove * @param bool $cascade True to cascade, false otherwise * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropDomainConstraint($domain, $constraint, $cascade) { @@ -305,7 +376,12 @@ trait DomainTrait $this->fieldClean($domain); $this->fieldClean($constraint); - $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP CONSTRAINT \"{$constraint}\""; + $sql = \sprintf( + 'ALTER DOMAIN "%s"."%s" DROP CONSTRAINT "%s"', + $f_schema, + $domain, + $constraint + ); if ($cascade) { $sql .= ' CASCADE'; diff --git a/src/database/databasetraits/FtsTrait.php b/src/database/databasetraits/FtsTrait.php index 98149e40..c364842f 100644 --- a/src/database/databasetraits/FtsTrait.php +++ b/src/database/databasetraits/FtsTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use ADORecordSet; + /** * Common trait for full text search manipulation. */ @@ -31,19 +33,34 @@ trait FtsTrait $this->fieldClean($f_schema); $this->fieldClean($cfgname); - $sql = "CREATE TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$cfgname}\" ("; + $sql = \sprintf( + 'CREATE TEXT SEARCH CONFIGURATION "%s"."%s" (', + $f_schema, + $cfgname + ); if ('' !== $parser) { $this->fieldClean($parser['schema']); $this->fieldClean($parser['parser']); - $parser = "\"{$parser['schema']}\".\"{$parser['parser']}\""; - $sql .= " PARSER = {$parser}"; + $parser = \sprintf( + '"%s"."%s"', + $parser['schema'], + $parser['parser'] + ); + $sql .= \sprintf( + ' PARSER = %s', + $parser + ); } if ('' !== $template) { $this->fieldClean($template['schema']); $this->fieldClean($template['name']); - $sql .= " COPY = \"{$template['schema']}\".\"{$template['name']}\""; + $sql .= \sprintf( + ' COPY = "%s"."%s"', + $template['schema'], + $template['name'] + ); } $sql .= ')'; @@ -87,7 +104,7 @@ trait FtsTrait * * @param bool $all if false, returns schema qualified FTS confs * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsConfigurations($all = true) { @@ -105,7 +122,11 @@ trait FtsTrait pg_catalog.pg_ts_config_is_visible(c.oid)"; if (!$all) { - $sql .= " AND n.nspname='{$c_schema}'\n"; + $sql .= \sprintf( + ' AND n.nspname=\'%s\' +', + $c_schema + ); } $sql .= 'ORDER BY name'; @@ -121,7 +142,7 @@ trait FtsTrait * * @param string $ftscfg Name of the FTS configuration * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsConfigurationMap($ftscfg) { @@ -129,29 +150,36 @@ trait FtsTrait $this->clean($c_schema); $this->fieldClean($ftscfg); - $oidSet = $this->selectSet("SELECT c.oid + $oidSet = $this->selectSet(\sprintf( + 'SELECT c.oid FROM pg_catalog.pg_ts_config AS c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.cfgnamespace) - WHERE c.cfgname = '{$ftscfg}' - AND n.nspname='{$c_schema}'"); + WHERE c.cfgname = \'%s\' + AND n.nspname=\'%s\'', + $ftscfg, + $c_schema + )); $oid = $oidSet->fields['oid']; - $sql = " + $sql = \sprintf( + ' SELECT (SELECT t.alias FROM pg_catalog.ts_token_type(c.cfgparser) AS t WHERE t.tokid = m.maptokentype) AS name, (SELECT t.description FROM pg_catalog.ts_token_type(c.cfgparser) AS t WHERE t.tokid = m.maptokentype) AS description, - c.cfgname AS cfgname, n.nspname ||'.'|| d.dictname as dictionaries + c.cfgname AS cfgname, n.nspname ||\'.\'|| d.dictname as dictionaries FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m, pg_catalog.pg_ts_dict d, pg_catalog.pg_namespace n WHERE - c.oid = {$oid} + c.oid = %s AND m.mapcfg = c.oid AND m.mapdict = d.oid AND d.dictnamespace = n.oid ORDER BY name - "; + ', + $oid + ); return $this->selectSet($sql); } @@ -161,7 +189,7 @@ trait FtsTrait * * @param bool $all if false, return only Parsers from the current schema * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsParsers($all = true) { @@ -177,7 +205,11 @@ trait FtsTrait WHERE pg_catalog.pg_ts_parser_is_visible(p.oid)"; if (!$all) { - $sql .= " AND n.nspname='{$c_schema}'\n"; + $sql .= \sprintf( + ' AND n.nspname=\'%s\' +', + $c_schema + ); } $sql .= 'ORDER BY name'; @@ -190,7 +222,7 @@ trait FtsTrait * * @param bool $all if false, return only Dics from the current schema * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsDictionaries($all = true) { @@ -205,7 +237,11 @@ trait FtsTrait WHERE pg_catalog.pg_ts_dict_is_visible(d.oid)"; if (!$all) { - $sql .= " AND n.nspname='{$c_schema}'\n"; + $sql .= \sprintf( + ' AND n.nspname=\'%s\' +', + $c_schema + ); } $sql .= 'ORDER BY name;'; @@ -216,7 +252,7 @@ trait FtsTrait /** * Returns all FTS dictionary templates available. * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsDictionaryTemplates() { @@ -247,7 +283,7 @@ trait FtsTrait * @param string $ftscfg The configuration's name * @param bool $cascade true to Cascade to dependenced objects * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function dropFtsConfiguration($ftscfg, $cascade) { @@ -255,7 +291,11 @@ trait FtsTrait $this->fieldClean($f_schema); $this->fieldClean($ftscfg); - $sql = "DROP TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$ftscfg}\""; + $sql = \sprintf( + 'DROP TEXT SEARCH CONFIGURATION "%s"."%s"', + $f_schema, + $ftscfg + ); if ($cascade) { $sql .= ' CASCADE'; @@ -270,7 +310,7 @@ trait FtsTrait * @param string $ftsdict The dico's name * @param bool $cascade Cascade to dependenced objects * - * @return \ADORecordSet|int + * @return ADORecordSet|int * * @todo Support of dictionary templates dropping */ @@ -281,7 +321,11 @@ trait FtsTrait $this->fieldClean($ftsdict); $sql = 'DROP TEXT SEARCH DICTIONARY'; - $sql .= " \"{$f_schema}\".\"{$ftsdict}\""; + $sql .= \sprintf( + ' "%s"."%s"', + $f_schema, + $ftsdict + ); if ($cascade) { $sql .= ' CASCADE'; @@ -325,7 +369,12 @@ trait FtsTrait $this->fieldClean($f_schema); $this->fieldClean($name); - $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$cfgname}\" RENAME TO \"{$name}\""; + $sql = \sprintf( + 'ALTER TEXT SEARCH CONFIGURATION "%s"."%s" RENAME TO "%s"', + $f_schema, + $cfgname, + $name + ); $status = $this->execute($sql); if (0 !== $status) { @@ -371,31 +420,55 @@ trait FtsTrait $sql = 'CREATE TEXT SEARCH'; if ($isTemplate) { - $sql .= " TEMPLATE \"{$f_schema}\".\"{$dictname}\" ("; + $sql .= \sprintf( + ' TEMPLATE "%s"."%s" (', + $f_schema, + $dictname + ); if ('' !== $lexize) { - $sql .= " LEXIZE = {$lexize}"; + $sql .= \sprintf( + ' LEXIZE = %s', + $lexize + ); } if ('' !== $init) { - $sql .= ", INIT = {$init}"; + $sql .= \sprintf( + ', INIT = %s', + $init + ); } $sql .= ')'; $whatToComment = 'TEXT SEARCH TEMPLATE'; } else { - $sql .= " DICTIONARY \"{$f_schema}\".\"{$dictname}\" ("; + $sql .= \sprintf( + ' DICTIONARY "%s"."%s" (', + $f_schema, + $dictname + ); if ('' !== $template) { $this->fieldClean($template['schema']); $this->fieldClean($template['name']); - $template = "\"{$template['schema']}\".\"{$template['name']}\""; - - $sql .= " TEMPLATE = {$template}"; + $template = \sprintf( + '"%s"."%s"', + $template['schema'], + $template['name'] + ); + + $sql .= \sprintf( + ' TEMPLATE = %s', + $template + ); } if ('' !== $option) { - $sql .= ", {$option}"; + $sql .= \sprintf( + ', %s', + $option + ); } $sql .= ')'; @@ -471,7 +544,12 @@ trait FtsTrait $this->fieldClean($f_schema); $this->fieldClean($name); - $sql = "ALTER TEXT SEARCH DICTIONARY \"{$f_schema}\".\"{$dictname}\" RENAME TO \"{$name}\""; + $sql = \sprintf( + 'ALTER TEXT SEARCH DICTIONARY "%s"."%s" RENAME TO "%s"', + $f_schema, + $dictname, + $name + ); $status = $this->execute($sql); if (0 !== $status) { @@ -489,7 +567,7 @@ trait FtsTrait * * @param string $ftsdict The name of the FTS dictionary * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsDictionaryByName($ftsdict) { @@ -497,21 +575,25 @@ trait FtsTrait $this->clean($c_schema); $this->clean($ftsdict); - $sql = "SELECT + $sql = \sprintf( + 'SELECT n.nspname as schema, d.dictname as name, - ( SELECT COALESCE(nt.nspname, '(null)')::pg_catalog.text || '.' || t.tmplname FROM + ( SELECT COALESCE(nt.nspname, \'(null)\')::pg_catalog.text || \'.\' || t.tmplname FROM pg_catalog.pg_ts_template t LEFT JOIN pg_catalog.pg_namespace nt ON nt.oid = t.tmplnamespace WHERE d.dicttemplate = t.oid ) AS template, d.dictinitoption as init, - pg_catalog.obj_description(d.oid, 'pg_ts_dict') as comment + pg_catalog.obj_description(d.oid, \'pg_ts_dict\') as comment FROM pg_catalog.pg_ts_dict d LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.dictnamespace - WHERE d.dictname = '{$ftsdict}' + WHERE d.dictname = \'%s\' AND pg_catalog.pg_ts_dict_is_visible(d.oid) - AND n.nspname='{$c_schema}' - ORDER BY name"; + AND n.nspname=\'%s\' + ORDER BY name', + $ftsdict, + $c_schema + ); return $this->selectSet($sql); } @@ -524,7 +606,7 @@ trait FtsTrait * @param string $action What to do with the mapping: add, alter or drop * @param string $dictname Dictionary that will process tokens given or null in case of drop action * - * @return \ADORecordSet|int + * @return ADORecordSet|int * * @internal param string $cfgname The name of the FTS configuration to alter */ @@ -553,11 +635,19 @@ trait FtsTrait break; } - $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$ftscfg}\" {$whatToDo} MAPPING FOR "; + $sql = \sprintf( + 'ALTER TEXT SEARCH CONFIGURATION "%s"."%s" %s MAPPING FOR ', + $f_schema, + $ftscfg, + $whatToDo + ); $sql .= \implode(',', $mapping); if ('drop' !== $action && !empty($dictname)) { - $sql .= " WITH {$dictname}"; + $sql .= \sprintf( + ' WITH %s', + $dictname + ); } return $this->execute($sql); @@ -572,7 +662,7 @@ trait FtsTrait * @param string $ftscfg The name of the FTS configuration * @param string $mapping The name of the mapping * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsMappingByName($ftscfg, $mapping) { @@ -581,27 +671,39 @@ trait FtsTrait $this->clean($ftscfg); $this->clean($mapping); - $oidSet = $this->selectSet("SELECT c.oid, cfgparser + $oidSet = $this->selectSet(\sprintf( + 'SELECT c.oid, cfgparser FROM pg_catalog.pg_ts_config AS c LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = c.cfgnamespace - WHERE c.cfgname = '{$ftscfg}' - AND n.nspname='{$c_schema}'"); + WHERE c.cfgname = \'%s\' + AND n.nspname=\'%s\'', + $ftscfg, + $c_schema + )); $oid = $oidSet->fields['oid']; $cfgparser = $oidSet->fields['cfgparser']; - $tokenIdSet = $this->selectSet("SELECT tokid - FROM pg_catalog.ts_token_type({$cfgparser}) - WHERE alias = '{$mapping}'"); + $tokenIdSet = $this->selectSet(\sprintf( + 'SELECT tokid + FROM pg_catalog.ts_token_type(%s) + WHERE alias = \'%s\'', + $cfgparser, + $mapping + )); $tokid = $tokenIdSet->fields['tokid']; - $sql = "SELECT + $sql = \sprintf( + 'SELECT (SELECT t.alias FROM pg_catalog.ts_token_type(c.cfgparser) AS t WHERE t.tokid = m.maptokentype) AS name, d.dictname as dictionaries FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m, pg_catalog.pg_ts_dict d - WHERE c.oid = {$oid} AND m.mapcfg = c.oid AND m.maptokentype = {$tokid} AND m.mapdict = d.oid - LIMIT 1;"; + WHERE c.oid = %s AND m.mapcfg = c.oid AND m.maptokentype = %s AND m.mapdict = d.oid + LIMIT 1;', + $oid, + $tokid + ); return $this->selectSet($sql); } @@ -612,15 +714,18 @@ trait FtsTrait * * @param string $ftscfg The config's name that use the parser * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsMappings($ftscfg) { $cfg = $this->getFtsConfigurationByName($ftscfg); - $sql = "SELECT alias AS name, description - FROM pg_catalog.ts_token_type({$cfg->fields['parser_id']}) - ORDER BY name"; + $sql = \sprintf( + 'SELECT alias AS name, description + FROM pg_catalog.ts_token_type(%s) + ORDER BY name', + $cfg->fields['parser_id'] + ); return $this->selectSet($sql); } @@ -630,26 +735,30 @@ trait FtsTrait * * @param string $ftscfg The name of the FTS configuration * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getFtsConfigurationByName($ftscfg) { $c_schema = $this->_schema; $this->clean($c_schema); $this->clean($ftscfg); - $sql = " + $sql = \sprintf( + ' SELECT n.nspname as schema, c.cfgname as name, p.prsname as parser, c.cfgparser as parser_id, - pg_catalog.obj_description(c.oid, 'pg_ts_config') as comment + pg_catalog.obj_description(c.oid, \'pg_ts_config\') as comment FROM pg_catalog.pg_ts_config c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace LEFT JOIN pg_catalog.pg_ts_parser p ON p.oid = c.cfgparser WHERE pg_catalog.pg_ts_config_is_visible(c.oid) - AND c.cfgname = '{$ftscfg}' - AND n.nspname='{$c_schema}'"; + AND c.cfgname = \'%s\' + AND n.nspname=\'%s\'', + $ftscfg, + $c_schema + ); return $this->selectSet($sql); } diff --git a/src/database/databasetraits/FunctionTrait.php b/src/database/databasetraits/FunctionTrait.php index 5162f4d1..f7cc0d20 100644 --- a/src/database/databasetraits/FunctionTrait.php +++ b/src/database/databasetraits/FunctionTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for full text search manipulation. */ @@ -17,7 +19,7 @@ trait FunctionTrait * @param bool $all If true, will find all available functions, if false just those in search path * @param mixed $type If truthy, will return functions of type trigger * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getFunctions($all = false, $type = null) { @@ -31,22 +33,26 @@ trait FunctionTrait } else { $c_schema = $this->_schema; $this->clean($c_schema); - $where = "n.nspname = '{$c_schema}'"; + $where = \sprintf( + 'n.nspname = \'%s\'', + $c_schema + ); $distinct = ''; } - $sql = " + $sql = \sprintf( + ' SELECT - {$distinct} + %s p.oid AS prooid, p.proname, p.proretset, pg_catalog.format_type(p.prorettype, NULL) AS proresult, pg_catalog.oidvectortypes(p.proargtypes) AS proarguments, pl.lanname AS prolanguage, - pg_catalog.obj_description(p.oid, 'pg_proc') AS procomment, - p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto, - CASE WHEN p.proretset THEN 'setof ' ELSE '' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns, + pg_catalog.obj_description(p.oid, \'pg_proc\') AS procomment, + p.proname || \' (\' || pg_catalog.oidvectortypes(p.proargtypes) || \')\' AS proproto, + CASE WHEN p.proretset THEN \'setof \' ELSE \'\' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns, coalesce(u.usename::text,p.proowner::text) AS proowner FROM pg_catalog.pg_proc p @@ -54,9 +60,12 @@ trait FunctionTrait INNER JOIN pg_catalog.pg_language pl ON pl.oid = p.prolang LEFT JOIN pg_catalog.pg_user u ON u.usesysid = p.proowner WHERE NOT p.proisagg - AND {$where} + AND %s ORDER BY p.proname, proresult - "; + ', + $distinct, + $where + ); return $this->selectSet($sql); } @@ -64,7 +73,7 @@ trait FunctionTrait /** * Returns a list of all functions that can be used in triggers. * - * @return \PHPPgAdmin\ADORecordSet Functions that can be used in a trigger + * @return ADORecordSet Functions that can be used in a trigger */ public function getTriggerFunctions() { @@ -177,7 +186,13 @@ trait FunctionTrait $this->fieldClean($newname); /* $funcname is escaped in createFunction */ if ($funcname !== $newname) { - $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) RENAME TO \"{$newname}\""; + $sql = \sprintf( + 'ALTER FUNCTION "%s"."%s"(%s) RENAME TO "%s"', + $f_schema, + $funcname, + $args, + $newname + ); $status = $this->execute($sql); if (0 !== $status) { @@ -194,7 +209,13 @@ trait FunctionTrait $this->fieldClean($newown); if ($funcown !== $newown) { - $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) OWNER TO \"{$newown}\""; + $sql = \sprintf( + 'ALTER FUNCTION "%s"."%s"(%s) OWNER TO "%s"', + $f_schema, + $funcname, + $args, + $newown + ); $status = $this->execute($sql); if (0 !== $status) { @@ -210,7 +231,13 @@ trait FunctionTrait $this->fieldClean($newschema); /* $funcschema is escaped in createFunction */ if ($funcschema !== $newschema) { - $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) SET SCHEMA \"{$newschema}\""; + $sql = \sprintf( + 'ALTER FUNCTION "%s"."%s"(%s) SET SCHEMA "%s"', + $f_schema, + $funcname, + $args, + $newschema + ); $status = $this->execute($sql); if (0 !== $status) { @@ -268,7 +295,11 @@ trait FunctionTrait $sql .= ' OR REPLACE'; } - $sql .= " FUNCTION \"{$f_schema}\".\"{$funcname}\" ("; + $sql .= \sprintf( + ' FUNCTION "%s"."%s" (', + $f_schema, + $funcname + ); if ('' !== $args) { $sql .= $args; @@ -281,7 +312,10 @@ trait FunctionTrait $sql .= 'SETOF '; } - $sql .= "{$returns} AS "; + $sql .= \sprintf( + '%s AS ', + $returns + ); if (\is_array($definition)) { $this->arrayClean($definition); @@ -295,15 +329,24 @@ trait FunctionTrait $sql .= "'" . $definition . "'"; } - $sql .= " LANGUAGE \"{$language}\""; + $sql .= \sprintf( + ' LANGUAGE "%s"', + $language + ); // Add costs if (!empty($cost)) { - $sql .= " COST {$cost}"; + $sql .= \sprintf( + ' COST %s', + $cost + ); } if (0 !== $rows) { - $sql .= " ROWS {$rows}"; + $sql .= \sprintf( + ' ROWS %s', + $rows + ); } // Add flags @@ -313,7 +356,7 @@ trait FunctionTrait continue; } - $sql .= "\n{$v}"; + $sql .= \PHP_EOL . $v; } $status = $this->execute($sql); @@ -325,7 +368,11 @@ trait FunctionTrait } /* set the comment */ - $status = $this->setComment('FUNCTION', "\"{$funcname}\"({$args})", null, $comment); + $status = $this->setComment('FUNCTION', \sprintf( + '"%s"(%s)', + $funcname, + $args + ), null, $comment); if (0 !== $status) { $this->rollbackTransaction(); @@ -342,7 +389,7 @@ trait FunctionTrait * @param int $function_oid The OID of the function to drop * @param bool $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropFunction($function_oid, $cascade) { @@ -352,7 +399,12 @@ trait FunctionTrait $this->fieldClean($f_schema); $this->fieldClean($fn->fields['proname']); - $sql = "DROP FUNCTION \"{$f_schema}\".\"{$fn->fields['proname']}\"({$fn->fields['proarguments']})"; + $sql = \sprintf( + 'DROP FUNCTION "%s"."%s"(%s)', + $f_schema, + $fn->fields['proname'], + $fn->fields['proarguments'] + ); if ($cascade) { $sql .= ' CASCADE'; @@ -366,7 +418,7 @@ trait FunctionTrait * * @param int $function_oid * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int * * @internal param string The $func name of the function to retrieve */ @@ -374,7 +426,8 @@ trait FunctionTrait { $this->clean($function_oid); - $sql = " + $sql = \sprintf( + ' SELECT pc.oid AS prooid, proname, pg_catalog.pg_get_userbyid(proowner) AS proowner, @@ -383,7 +436,7 @@ trait FunctionTrait probin, proretset, proisstrict, provolatile, prosecdef, pg_catalog.oidvectortypes(pc.proargtypes) AS proarguments, proargnames AS proargnames, - pg_catalog.obj_description(pc.oid, 'pg_proc') AS procomment, + pg_catalog.obj_description(pc.oid, \'pg_proc\') AS procomment, proconfig, (select array_agg( (select typname from pg_type pt where pt.oid = p.oid) ) from unnest(proallargtypes) p) @@ -393,9 +446,11 @@ trait FunctionTrait pg_catalog.pg_proc pc, pg_catalog.pg_language pl, pg_catalog.pg_namespace pn WHERE - pc.oid = '{$function_oid}'::oid AND pc.prolang = pl.oid + pc.oid = \'%s\'::oid AND pc.prolang = pl.oid AND pc.pronamespace = pn.oid - "; + ', + $function_oid + ); return $this->selectSet($sql); } @@ -405,17 +460,18 @@ trait FunctionTrait * * @param int $function_oid * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getFunctionDef($function_oid) { $this->clean($function_oid); - $sql = " + $sql = \sprintf( + ' SELECT f.proname as relname, n.nspname, u.usename AS relowner, - pg_catalog.obj_description(f.oid, 'pg_proc') as relcomment, + pg_catalog.obj_description(f.oid, \'pg_proc\') as relcomment, (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=f.pronamespace) AS tablespace, pg_get_functiondef(f.oid), pl.lanname AS prolanguage @@ -423,8 +479,10 @@ trait FunctionTrait JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid) JOIN pg_catalog.pg_language pl ON pl.oid = f.prolang LEFT JOIN pg_catalog.pg_user u ON u.usesysid=f.proowner - WHERE f.oid='{$function_oid}' - "; + WHERE f.oid=\'%s\' + ', + $function_oid + ); return $this->selectSet($sql); } diff --git a/src/database/databasetraits/IndexTrait.php b/src/database/databasetraits/IndexTrait.php index 2913623e..615330aa 100644 --- a/src/database/databasetraits/IndexTrait.php +++ b/src/database/databasetraits/IndexTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for indexes and constraints manipulation. */ @@ -24,13 +26,17 @@ trait IndexTrait $this->clean($c_schema); $this->clean($table); - $sql = "SELECT i.indisclustered + $sql = \sprintf( + 'SELECT i.indisclustered FROM pg_catalog.pg_class c, pg_catalog.pg_index i - WHERE c.relname = '{$table}' + WHERE c.relname = \'%s\' AND c.oid = i.indrelid AND i.indisclustered AND c.relnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$c_schema}') - "; + WHERE nspname=\'%s\') + ', + $table, + $c_schema + ); $v = $this->selectSet($sql); @@ -66,9 +72,17 @@ trait IndexTrait $sql .= $concurrently ? ' CONCURRENTLY ' : ''; - $sql .= $name ? " \"{$name}\" " : ''; + $sql .= $name ? \sprintf( + ' "%s" ', + $name + ) : ''; - $sql .= " ON \"{$f_schema}\".\"{$table}\" USING {$type} "; + $sql .= \sprintf( + ' ON "%s"."%s" USING %s ', + $f_schema, + $table, + $type + ); if (\is_array($columns)) { $this->arrayClean($columns); @@ -80,12 +94,18 @@ trait IndexTrait // Tablespace if ($this->hasTablespaces() && '' !== $tablespace) { $this->fieldClean($tablespace); - $sql .= " TABLESPACE \"{$tablespace}\""; + $sql .= \sprintf( + ' TABLESPACE "%s"', + $tablespace + ); } // Predicate if ('' !== \trim($where)) { - $sql .= " WHERE ({$where})"; + $sql .= \sprintf( + ' WHERE (%s)', + $where + ); } $status = $this->execute($sql); @@ -107,7 +127,11 @@ trait IndexTrait $this->fieldClean($f_schema); $this->fieldClean($index); - $sql = "DROP INDEX \"{$f_schema}\".\"{$index}\""; + $sql = \sprintf( + 'DROP INDEX "%s"."%s"', + $f_schema, + $index + ); if ($cascade) { $sql .= ' CASCADE'; @@ -126,7 +150,7 @@ trait IndexTrait * @param bool $force If true, recreates indexes forcedly in PostgreSQL 7.0-7.1, forces rebuild of system indexes in * 7.2-7.3, ignored in >=7.4 * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function reindex($type, $name, $force = false) { @@ -136,7 +160,11 @@ trait IndexTrait switch ($type) { case 'DATABASE': - $sql = "REINDEX {$type} \"{$name}\""; + $sql = \sprintf( + 'REINDEX %s "%s"', + $type, + $name + ); if ($force) { $sql .= ' FORCE'; @@ -145,7 +173,12 @@ trait IndexTrait break; case 'TABLE': case 'INDEX': - $sql = "REINDEX {$type} \"{$f_schema}\".\"{$name}\""; + $sql = \sprintf( + 'REINDEX %s "%s"."%s"', + $type, + $f_schema, + $name + ); if ($force) { $sql .= ' FORCE'; @@ -179,11 +212,18 @@ trait IndexTrait $f_schema = $this->_schema; $this->fieldClean($f_schema); $this->fieldClean($table); - $sql .= " \"{$f_schema}\".\"{$table}\""; + $sql .= \sprintf( + ' "%s"."%s"', + $f_schema, + $table + ); if (!empty($index)) { $this->fieldClean($index); - $sql .= " USING \"{$index}\""; + $sql .= \sprintf( + ' USING "%s"', + $index + ); } } @@ -199,7 +239,7 @@ trait IndexTrait * * @param string $table the table where we are looking for fk * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getConstraintsWithFields($table) { @@ -208,13 +248,17 @@ trait IndexTrait $this->clean($table); // get the max number of col used in a constraint for the table - $sql = "SELECT DISTINCT - max(SUBSTRING(array_dims(c.conkey) FROM \$patern\$^\\[.*:(.*)\\]$\$patern\$)) as nb + $sql = \sprintf( + 'SELECT DISTINCT + max(SUBSTRING(array_dims(c.conkey) FROM $patern$^\[.*:(.*)\]$$patern$)) as nb FROM pg_catalog.pg_constraint AS c JOIN pg_catalog.pg_class AS r ON (c.conrelid=r.oid) JOIN pg_catalog.pg_namespace AS ns ON (r.relnamespace=ns.oid) WHERE - r.relname = '{$table}' AND ns.nspname='{$c_schema}'"; + r.relname = \'%s\' AND ns.nspname=\'%s\'', + $table, + $c_schema + ); $rs = $this->selectSet($sql); @@ -237,7 +281,10 @@ trait IndexTrait JOIN pg_catalog.pg_attribute AS f1 ON (f1.attrelid=r1.oid AND (f1.attnum=c.conkey[1]'; for ($i = 2; $i <= $rs->fields['nb']; ++$i) { - $sql .= " OR f1.attnum=c.conkey[{$i}]"; + $sql .= \sprintf( + ' OR f1.attnum=c.conkey[%s]', + $i + ); } $sql .= ')) JOIN pg_catalog.pg_namespace AS ns1 ON r1.relnamespace=ns1.oid @@ -248,7 +295,11 @@ trait IndexTrait (f2.attrelid=r2.oid AND ((c.confkey[1]=f2.attnum AND c.conkey[1]=f1.attnum)'; for ($i = 2; $i <= $rs->fields['nb']; ++$i) { - $sql .= " OR (c.confkey[{$i}]=f2.attnum AND c.conkey[{$i}]=f1.attnum)"; + $sql .= \sprintf( + ' OR (c.confkey[%s]=f2.attnum AND c.conkey[%s]=f1.attnum)', + $i, + $i + ); } $sql .= \sprintf(")) @@ -267,7 +318,7 @@ trait IndexTrait * @param string $name (optional) The name to give the key, otherwise default name is assigned * @param string $tablespace (optional) The tablespace for the schema, '' indicates default * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function addPrimaryKey($table, $fields, $name = '', $tablespace = '') { @@ -282,16 +333,26 @@ trait IndexTrait $this->fieldClean($name); $this->fieldClean($tablespace); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ADD ', + $f_schema, + $table + ); if ('' !== $name) { - $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= \sprintf( + 'CONSTRAINT "%s" ', + $name + ); } $sql .= 'PRIMARY KEY ("' . \implode('","', $fields) . '")'; if ('' !== $tablespace && $this->hasTablespaces()) { - $sql .= " USING INDEX TABLESPACE \"{$tablespace}\""; + $sql .= \sprintf( + ' USING INDEX TABLESPACE "%s"', + $tablespace + ); } return $this->execute($sql); @@ -305,7 +366,7 @@ trait IndexTrait * @param string $name (optional) The name to give the key, otherwise default name is assigned * @param string $tablespace (optional) The tablespace for the schema, '' indicates default * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function addUniqueKey($table, $fields, $name = '', $tablespace = '') { @@ -320,16 +381,26 @@ trait IndexTrait $this->fieldClean($name); $this->fieldClean($tablespace); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ADD ', + $f_schema, + $table + ); if ('' !== $name) { - $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= \sprintf( + 'CONSTRAINT "%s" ', + $name + ); } $sql .= 'UNIQUE ("' . \implode('","', $fields) . '")'; if ('' !== $tablespace && $this->hasTablespaces()) { - $sql .= " USING INDEX TABLESPACE \"{$tablespace}\""; + $sql .= \sprintf( + ' USING INDEX TABLESPACE "%s"', + $tablespace + ); } return $this->execute($sql); @@ -344,7 +415,7 @@ trait IndexTrait * @param string $definition The definition of the check * @param string $name (optional) The name to give the check, otherwise default name is assigned * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function addCheckConstraint($table, $definition, $name = '') { @@ -354,13 +425,23 @@ trait IndexTrait $this->fieldClean($name); // @@ How the heck do you clean a definition??? - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ADD ', + $f_schema, + $table + ); if ('' !== $name) { - $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= \sprintf( + 'CONSTRAINT "%s" ', + $name + ); } - $sql .= "CHECK ({$definition})"; + $sql .= \sprintf( + 'CHECK (%s)', + $definition + ); return $this->execute($sql); } @@ -392,7 +473,11 @@ trait IndexTrait } // Properly lock the table - $sql = "LOCK TABLE \"{$f_schema}\".\"{$table}\" IN ACCESS EXCLUSIVE MODE"; + $sql = \sprintf( + 'LOCK TABLE "%s"."%s" IN ACCESS EXCLUSIVE MODE', + $f_schema, + $table + ); $status = $this->execute($sql); if (0 !== $status) { @@ -402,9 +487,14 @@ trait IndexTrait } // Delete the check constraint - $sql = "DELETE FROM pg_relcheck WHERE rcrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$c_table}' + $sql = \sprintf( + 'DELETE FROM pg_relcheck WHERE rcrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname=\'%s\' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE - nspname = '{$c_schema}')) AND rcname='{$name}'"; + nspname = \'%s\')) AND rcname=\'%s\'', + $c_table, + $c_schema, + $name + ); $status = $this->execute($sql); if (0 !== $status) { @@ -414,11 +504,16 @@ trait IndexTrait } // Update the pg_class catalog to reflect the new number of checks - $sql = "UPDATE pg_class SET relchecks=(SELECT COUNT(*) FROM pg_relcheck WHERE - rcrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$c_table}' + $sql = \sprintf( + 'UPDATE pg_class SET relchecks=(SELECT COUNT(*) FROM pg_relcheck WHERE + rcrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname=\'%s\' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE - nspname = '{$c_schema}'))) - WHERE relname='{$c_table}'"; + nspname = \'%s\'))) + WHERE relname=\'%s\'', + $c_table, + $c_schema, + $c_table + ); $status = $this->execute($sql); if (0 !== $status) { @@ -446,7 +541,7 @@ trait IndexTrait * @param string $initially The initially parameter for the FK (eg. INITIALLY IMMEDIATE) * @param string $name [optional] The name to give the key, otherwise default name is assigned * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int * * @internal param \PHPPgAdmin\Database\The $target table that contains the target columns * @internal param \PHPPgAdmin\Database\The $intially initial deferrability (eg. INITIALLY IMMEDIATE) @@ -478,34 +573,60 @@ trait IndexTrait $this->fieldArrayClean($tfields); $this->fieldClean($name); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" ADD ', + $f_schema, + $table + ); if ('' !== $name) { - $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= \sprintf( + 'CONSTRAINT "%s" ', + $name + ); } $sql .= 'FOREIGN KEY ("' . \implode('","', $sfields) . '") '; // Target table needs to be fully qualified - $sql .= "REFERENCES \"{$targschema}\".\"{$targtable}\"(\"" . \implode('","', $tfields) . '") '; + $sql .= \sprintf( + 'REFERENCES "%s"."%s"("', + $targschema, + $targtable + ) . \implode('","', $tfields) . '") '; if ($match !== $this->fkmatches[0]) { - $sql .= " {$match}"; + $sql .= \sprintf( + ' %s', + $match + ); } if ($upd_action !== $this->fkactions[0]) { - $sql .= " ON UPDATE {$upd_action}"; + $sql .= \sprintf( + ' ON UPDATE %s', + $upd_action + ); } if ($del_action !== $this->fkactions[0]) { - $sql .= " ON DELETE {$del_action}"; + $sql .= \sprintf( + ' ON DELETE %s', + $del_action + ); } if ($deferrable !== $this->fkdeferrable[0]) { - $sql .= " {$deferrable}"; + $sql .= \sprintf( + ' %s', + $deferrable + ); } if ($initially !== $this->fkinitial[0]) { - $sql .= " {$initially}"; + $sql .= \sprintf( + ' %s', + $initially + ); } return $this->execute($sql); @@ -519,7 +640,7 @@ trait IndexTrait * @param string $type The type of constraint (c, f, u or p) * @param bool $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropConstraint($constraint, $relation, $type, $cascade) { @@ -528,7 +649,12 @@ trait IndexTrait $this->fieldClean($constraint); $this->fieldClean($relation); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$relation}\" DROP CONSTRAINT \"{$constraint}\""; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" DROP CONSTRAINT "%s"', + $f_schema, + $relation, + $constraint + ); if ($cascade) { $sql .= ' CASCADE'; @@ -542,7 +668,7 @@ trait IndexTrait * * @param array $tables multi dimensional assoc array that holds schema and table name * - * @return int|\PHPPgAdmin\ADORecordSet recordset of linked tables and columns or -1 if $tables isn't an array + * @return ADORecordSet|int recordset of linked tables and columns or -1 if $tables isn't an array */ public function getLinkingKeys($tables) { @@ -552,22 +678,43 @@ trait IndexTrait $this->clean($tables[0]['tablename']); $this->clean($tables[0]['schemaname']); - $tables_list = "'{$tables[0]['tablename']}'"; - $schema_list = "'{$tables[0]['schemaname']}'"; - $schema_tables_list = "'{$tables[0]['schemaname']}.{$tables[0]['tablename']}'"; + $tables_list = \sprintf( + '\'%s\'', + $tables[0]['tablename'] + ); + $schema_list = \sprintf( + '\'%s\'', + $tables[0]['schemaname'] + ); + $schema_tables_list = \sprintf( + '\'%s.%s\'', + $tables[0]['schemaname'], + $tables[0]['tablename'] + ); $tablescount = \count($tables); for ($i = 1; $i < $tablescount; ++$i) { $this->clean($tables[$i]['tablename']); $this->clean($tables[$i]['schemaname']); - $tables_list .= ", '{$tables[$i]['tablename']}'"; - $schema_list .= ", '{$tables[$i]['schemaname']}'"; - $schema_tables_list .= ", '{$tables[$i]['schemaname']}.{$tables[$i]['tablename']}'"; + $tables_list .= \sprintf( + ', \'%s\'', + $tables[$i]['tablename'] + ); + $schema_list .= \sprintf( + ', \'%s\'', + $tables[$i]['schemaname'] + ); + $schema_tables_list .= \sprintf( + ', \'%s.%s\'', + $tables[$i]['schemaname'], + $tables[$i]['tablename'] + ); } $maxDimension = 1; - $sql = " + $sql = \sprintf( + ' SELECT DISTINCT array_dims(pc.conkey) AS arr_dim, pgc1.relname AS p_table @@ -575,10 +722,12 @@ trait IndexTrait pg_catalog.pg_constraint AS pc, pg_catalog.pg_class AS pgc1 WHERE - pc.contype = 'f' + pc.contype = \'f\' AND (pc.conrelid = pgc1.relfilenode OR pc.confrelid = pgc1.relfilenode) - AND pgc1.relname IN ({$tables_list}) - "; + AND pgc1.relname IN (%s) + ', + $tables_list + ); //parse our output to find the highest dimension of foreign keys since pc.conkey is stored in an array $rs = $this->selectSet($sql); @@ -595,11 +744,16 @@ trait IndexTrait $cons_str = '( (pfield.attnum = conkey[1] AND cfield.attnum = confkey[1]) '; for ($i = 2; $i <= $maxDimension; ++$i) { - $cons_str .= "OR (pfield.attnum = conkey[{$i}] AND cfield.attnum = confkey[{$i}]) "; + $cons_str .= \sprintf( + 'OR (pfield.attnum = conkey[%s] AND cfield.attnum = confkey[%s]) ', + $i, + $i + ); } $cons_str .= ') '; - $sql = " + $sql = \sprintf( + ' SELECT pgc1.relname AS p_table, pgc2.relname AS f_table, @@ -613,20 +767,26 @@ trait IndexTrait pg_catalog.pg_class AS pgc2, pg_catalog.pg_attribute AS pfield, pg_catalog.pg_attribute AS cfield, - (SELECT oid AS ns_id, nspname FROM pg_catalog.pg_namespace WHERE nspname IN ({$schema_list}) ) AS pgns1, - (SELECT oid AS ns_id, nspname FROM pg_catalog.pg_namespace WHERE nspname IN ({$schema_list}) ) AS pgns2 + (SELECT oid AS ns_id, nspname FROM pg_catalog.pg_namespace WHERE nspname IN (%s) ) AS pgns1, + (SELECT oid AS ns_id, nspname FROM pg_catalog.pg_namespace WHERE nspname IN (%s) ) AS pgns2 WHERE - pc.contype = 'f' + pc.contype = \'f\' AND pgc1.relnamespace = pgns1.ns_id AND pgc2.relnamespace = pgns2.ns_id AND pc.conrelid = pgc1.relfilenode AND pc.confrelid = pgc2.relfilenode AND pfield.attrelid = pc.conrelid AND cfield.attrelid = pc.confrelid - AND {$cons_str} - AND pgns1.nspname || '.' || pgc1.relname IN ({$schema_tables_list}) - AND pgns2.nspname || '.' || pgc2.relname IN ({$schema_tables_list}) - "; + AND %s + AND pgns1.nspname || \'.\' || pgc1.relname IN (%s) + AND pgns2.nspname || \'.\' || pgc2.relname IN (%s) + ', + $schema_list, + $schema_list, + $cons_str, + $schema_tables_list, + $schema_tables_list + ); return $this->selectSet($sql); } @@ -636,7 +796,7 @@ trait IndexTrait * * @param string $table The table to find referrers for * - * @return int|\PHPPgAdmin\ADORecordSet A recordset or -1 in case of error + * @return ADORecordSet|int A recordset or -1 in case of error */ public function getReferrers($table) { @@ -651,7 +811,8 @@ trait IndexTrait $c_schema = $this->_schema; $this->clean($c_schema); - $sql = " + $sql = \sprintf( + ' SELECT pn.nspname, pl.relname, @@ -664,12 +825,15 @@ trait IndexTrait WHERE pc.connamespace = pn.oid AND pc.conrelid = pl.oid - AND pc.contype = 'f' - AND confrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + AND pc.contype = \'f\' + AND confrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname=\'%s\' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$c_schema}')) + WHERE nspname=\'%s\')) ORDER BY 1,2,3 - "; + ', + $table, + $c_schema + ); return $this->selectSet($sql); } diff --git a/src/database/databasetraits/OperatorTrait.php b/src/database/databasetraits/OperatorTrait.php index b0c258ac..040cb3fb 100644 --- a/src/database/databasetraits/OperatorTrait.php +++ b/src/database/databasetraits/OperatorTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for operators manipulation. */ @@ -14,27 +16,30 @@ trait OperatorTrait /** * Returns a list of all operators in the database. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getOperators() { $c_schema = $this->_schema; $this->clean($c_schema); // We stick with the subselects here, as you cannot ORDER BY a regtype - $sql = " + $sql = \sprintf( + ' SELECT po.oid, po.oprname, (SELECT pg_catalog.format_type(oid, NULL) FROM pg_catalog.pg_type pt WHERE pt.oid=po.oprleft) AS oprleftname, (SELECT pg_catalog.format_type(oid, NULL) FROM pg_catalog.pg_type pt WHERE pt.oid=po.oprright) AS oprrightname, po.oprresult::pg_catalog.regtype AS resultname, - pg_catalog.obj_description(po.oid, 'pg_operator') AS oprcomment + pg_catalog.obj_description(po.oid, \'pg_operator\') AS oprcomment FROM pg_catalog.pg_operator po WHERE - po.oprnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}') + po.oprnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname=\'%s\') ORDER BY po.oprname, oprleftname, oprrightname - "; + ', + $c_schema + ); return $this->selectSet($sql); } @@ -45,7 +50,7 @@ trait OperatorTrait * @param mixed $operator_oid The OID of the operator to drop * @param bool $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropOperator($operator_oid, $cascade) { @@ -55,7 +60,11 @@ trait OperatorTrait $this->fieldClean($f_schema); $this->fieldClean($opr->fields['oprname']); - $sql = "DROP OPERATOR \"{$f_schema}\".{$opr->fields['oprname']} ("; + $sql = \sprintf( + 'DROP OPERATOR "%s".%s (', + $f_schema, + $opr->fields['oprname'] + ); // Quoting or formatting here??? if (null !== $opr->fields['oprleftname']) { $sql .= $opr->fields['oprleftname'] . ', '; @@ -81,13 +90,14 @@ trait OperatorTrait * * @param mixed $operator_oid The oid of the operator * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getOperator($operator_oid) { $this->clean($operator_oid); - $sql = " + $sql = \sprintf( + ' SELECT po.oid, po.oprname, oprleft::pg_catalog.regtype AS oprleftname, @@ -103,8 +113,10 @@ trait OperatorTrait FROM pg_catalog.pg_operator po WHERE - po.oid='{$operator_oid}' - "; + po.oid=\'%s\' + ', + $operator_oid + ); return $this->selectSet($sql); } @@ -112,26 +124,29 @@ trait OperatorTrait /** * Gets all opclasses. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getOpClasses() { $c_schema = $this->_schema; $this->clean($c_schema); - $sql = " + $sql = \sprintf( + ' SELECT pa.amname, po.opcname, po.opcintype::pg_catalog.regtype AS opcintype, po.opcdefault, - pg_catalog.obj_description(po.oid, 'pg_opclass') AS opccomment + pg_catalog.obj_description(po.oid, \'pg_opclass\') AS opccomment FROM pg_catalog.pg_opclass po, pg_catalog.pg_am pa, pg_catalog.pg_namespace pn WHERE po.opcmethod=pa.oid AND po.opcnamespace=pn.oid - AND pn.nspname='{$c_schema}' + AND pn.nspname=\'%s\' ORDER BY 1,2 - "; + ', + $c_schema + ); return $this->selectSet($sql); } diff --git a/src/database/databasetraits/PrivilegesTrait.php b/src/database/databasetraits/PrivilegesTrait.php index 823360c8..fee33a74 100644 --- a/src/database/databasetraits/PrivilegesTrait.php +++ b/src/database/databasetraits/PrivilegesTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for privileges manipulation. */ @@ -33,46 +35,70 @@ trait PrivilegesTrait switch ($type) { case 'column': $this->clean($table); - $sql = " - SELECT E'{' || pg_catalog.array_to_string(attacl, E',') || E'}' as acl + $sql = \sprintf( + ' + SELECT E\'{\' || pg_catalog.array_to_string(attacl, E\',\') || E\'}\' as acl FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_class c ON (a.attrelid = c.oid) LEFT JOIN pg_catalog.pg_namespace n ON (c.relnamespace=n.oid) - WHERE n.nspname='{$c_schema}' - AND c.relname='{$table}' - AND a.attname='{$object}'"; + WHERE n.nspname=\'%s\' + AND c.relname=\'%s\' + AND a.attname=\'%s\'', + $c_schema, + $table, + $object + ); break; case 'table': case 'view': case 'sequence': - $sql = " + $sql = \sprintf( + ' SELECT relacl AS acl FROM pg_catalog.pg_class - WHERE relname='{$object}' + WHERE relname=\'%s\' AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$c_schema}')"; + WHERE nspname=\'%s\')', + $object, + $c_schema + ); break; case 'database': - $sql = "SELECT datacl AS acl FROM pg_catalog.pg_database WHERE datname='{$object}'"; + $sql = \sprintf( + 'SELECT datacl AS acl FROM pg_catalog.pg_database WHERE datname=\'%s\'', + $object + ); break; case 'function': // Since we fetch functions by oid, they are already constrained to // the current schema. - $sql = "SELECT proacl AS acl FROM pg_catalog.pg_proc WHERE oid='{$object}'"; + $sql = \sprintf( + 'SELECT proacl AS acl FROM pg_catalog.pg_proc WHERE oid=\'%s\'', + $object + ); break; case 'language': - $sql = "SELECT lanacl AS acl FROM pg_catalog.pg_language WHERE lanname='{$object}'"; + $sql = \sprintf( + 'SELECT lanacl AS acl FROM pg_catalog.pg_language WHERE lanname=\'%s\'', + $object + ); break; case 'schema': - $sql = "SELECT nspacl AS acl FROM pg_catalog.pg_namespace WHERE nspname='{$object}'"; + $sql = \sprintf( + 'SELECT nspacl AS acl FROM pg_catalog.pg_namespace WHERE nspname=\'%s\'', + $object + ); break; case 'tablespace': - $sql = "SELECT spcacl AS acl FROM pg_catalog.pg_tablespace WHERE spcname='{$object}'"; + $sql = \sprintf( + 'SELECT spcacl AS acl FROM pg_catalog.pg_tablespace WHERE spcname=\'%s\'', + $object + ); break; @@ -108,7 +134,7 @@ trait PrivilegesTrait * @param bool $cascade True for cascade revoke, false otherwise * @param string $table the column's table if type=column * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function setPrivileges( $mode, @@ -153,7 +179,10 @@ trait PrivilegesTrait } else { if ('column' === $type) { $this->fieldClean($object); - $sql .= ' ' . \implode(" (\"{$object}\"), ", $privileges); + $sql .= ' ' . \implode(\sprintf( + ' ("%s"), ', + $object + ), $privileges); } else { $sql .= ' ' . \implode(', ', $privileges); } @@ -161,41 +190,65 @@ trait PrivilegesTrait switch ($type) { case 'column': - $sql .= " (\"{$object}\")"; + $sql .= \sprintf( + ' ("%s")', + $object + ); $object = $table; // no break case 'table': case 'view': case 'sequence': $this->fieldClean($object); - $sql .= " ON \"{$f_schema}\".\"{$object}\""; + $sql .= \sprintf( + ' ON "%s"."%s"', + $f_schema, + $object + ); break; case 'database': $this->fieldClean($object); - $sql .= " ON DATABASE \"{$object}\""; + $sql .= \sprintf( + ' ON DATABASE "%s"', + $object + ); break; case 'function': // Function comes in with $object as function OID $fn = $this->getFunction($object); $this->fieldClean($fn->fields['proname']); - $sql .= " ON FUNCTION \"{$f_schema}\".\"{$fn->fields['proname']}\"({$fn->fields['proarguments']})"; + $sql .= \sprintf( + ' ON FUNCTION "%s"."%s"(%s)', + $f_schema, + $fn->fields['proname'], + $fn->fields['proarguments'] + ); break; case 'language': $this->fieldClean($object); - $sql .= " ON LANGUAGE \"{$object}\""; + $sql .= \sprintf( + ' ON LANGUAGE "%s"', + $object + ); break; case 'schema': $this->fieldClean($object); - $sql .= " ON SCHEMA \"{$object}\""; + $sql .= \sprintf( + ' ON SCHEMA "%s"', + $object + ); break; case 'tablespace': $this->fieldClean($object); - $sql .= " ON TABLESPACE \"{$object}\""; + $sql .= \sprintf( + ' ON TABLESPACE "%s"', + $object + ); break; @@ -214,19 +267,31 @@ trait PrivilegesTrait // Dump users foreach ($usernames as $v) { if ($first) { - $sql .= "\"{$v}\""; + $sql .= \sprintf( + '"%s"', + $v + ); $first = false; } else { - $sql .= ", \"{$v}\""; + $sql .= \sprintf( + ', "%s"', + $v + ); } } // Dump groups foreach ($groupnames as $v) { if ($first) { - $sql .= "GROUP \"{$v}\""; + $sql .= \sprintf( + 'GROUP "%s"', + $v + ); $first = false; } else { - $sql .= ", GROUP \"{$v}\""; + $sql .= \sprintf( + ', GROUP "%s"', + $v + ); } } diff --git a/src/database/databasetraits/RoleTrait.php b/src/database/databasetraits/RoleTrait.php index d3203c0a..c51243bb 100644 --- a/src/database/databasetraits/RoleTrait.php +++ b/src/database/databasetraits/RoleTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for roles and users manipulation. */ @@ -16,7 +18,7 @@ trait RoleTrait * * @param string $rolename (optional) The role name to exclude from the select * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getRoles($rolename = '') { @@ -38,7 +40,10 @@ trait RoleTrait '; if ($rolename) { - $sql .= " WHERE r.rolname!='{$rolename}'"; + $sql .= \sprintf( + ' WHERE r.rolname!=\'%s\'', + $rolename + ); } $sql .= ' ORDER BY r.rolname'; @@ -51,13 +56,14 @@ trait RoleTrait * * @param string $rolename The name of the role to retrieve * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getRole($rolename) { $this->clean($rolename); - $sql = " + $sql = \sprintf( + ' SELECT r.rolname, r1.rolname as group, @@ -72,7 +78,9 @@ trait RoleTrait FROM pg_catalog.pg_roles r LEFT JOIN pg_catalog.pg_auth_members m ON (m.member = r.oid) LEFT JOIN pg_roles r1 ON (m.roleid=r1.oid) - WHERE r.rolname='{$rolename}'"; + WHERE r.rolname=\'%s\'', + $rolename + ); return $this->selectSet($sql); } @@ -80,7 +88,7 @@ trait RoleTrait /** * Returns all users in the database cluster. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getUsers() { @@ -102,13 +110,14 @@ trait RoleTrait * * @param string $username The username of the user to retrieve * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getUser($username) { $this->clean($username); - $sql = "SELECT + $sql = \sprintf( + 'SELECT r.usename, r1.rolname as group, r.usesuper, @@ -117,7 +126,9 @@ trait RoleTrait FROM pg_catalog.pg_user r LEFT JOIN pg_catalog.pg_auth_members m ON (m.member = r.usesysid) LEFT JOIN pg_roles r1 ON (m.roleid=r1.oid) - WHERE r.usename='{$username}'"; + WHERE r.usename=\'%s\'', + $username + ); return $this->selectSet($sql); } @@ -138,7 +149,7 @@ trait RoleTrait * @param array $new_members_of_role (array) Roles which are automatically added as members of the new role * @param array $new_admins_of_role (array) Roles which are automatically added as admin members of the new role * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function createRole( $rolename, @@ -163,10 +174,16 @@ trait RoleTrait $this->fieldArrayClean($new_members_of_role); $this->fieldArrayClean($new_admins_of_role); - $sql = "CREATE ROLE \"{$rolename}\""; + $sql = \sprintf( + 'CREATE ROLE "%s"', + $rolename + ); if ('' !== $password) { - $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= \sprintf( + ' WITH ENCRYPTED PASSWORD \'%s\'', + $enc + ); } $sql .= $superuser ? ' SUPERUSER' : ' NOSUPERUSER'; @@ -176,13 +193,19 @@ trait RoleTrait $sql .= $login ? ' LOGIN' : ' NOLOGIN'; if ('' !== $connlimit) { - $sql .= " CONNECTION LIMIT {$connlimit}"; + $sql .= \sprintf( + ' CONNECTION LIMIT %s', + $connlimit + ); } else { $sql .= ' CONNECTION LIMIT -1'; } if ('' !== $expiry) { - $sql .= " VALID UNTIL '{$expiry}'"; + $sql .= \sprintf( + ' VALID UNTIL \'%s\'', + $expiry + ); } else { $sql .= " VALID UNTIL 'infinity'"; } @@ -305,14 +328,18 @@ trait RoleTrait * @param string $rolename The name of the role to rename * @param string $newrolename The new name of the role * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function renameRole($rolename, $newrolename) { $this->fieldClean($rolename); $this->fieldClean($newrolename); - $sql = "ALTER ROLE \"{$rolename}\" RENAME TO \"{$newrolename}\""; + $sql = \sprintf( + 'ALTER ROLE "%s" RENAME TO "%s"', + $rolename, + $newrolename + ); return $this->execute($sql); } @@ -404,14 +431,18 @@ trait RoleTrait * @param string $rolename The name of the role that will belong to the target role * @param int $admin (optional) Flag to grant the admin option * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function grantRole($role, $rolename, $admin = 0) { $this->fieldClean($role); $this->fieldClean($rolename); - $sql = "GRANT \"{$role}\" TO \"{$rolename}\""; + $sql = \sprintf( + 'GRANT "%s" TO "%s"', + $role, + $rolename + ); if (1 === $admin) { $sql .= ' WITH ADMIN OPTION'; @@ -428,7 +459,7 @@ trait RoleTrait * @param int $admin (optional) Flag to revoke only the admin option * @param string $type (optional) Type of revoke: RESTRICT | CASCADE * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function revokeRole($role, $rolename, $admin = 0, $type = 'RESTRICT') { @@ -441,7 +472,12 @@ trait RoleTrait $sql .= 'ADMIN OPTION FOR '; } - $sql .= "\"{$role}\" FROM \"{$rolename}\" {$type}"; + $sql .= \sprintf( + '"%s" FROM "%s" %s', + $role, + $rolename, + $type + ); return $this->execute($sql); } @@ -451,13 +487,16 @@ trait RoleTrait * * @param string $rolename The name of the role to drop * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropRole($rolename) { $this->fieldClean($rolename); - $sql = "DROP ROLE \"{$rolename}\""; + $sql = \sprintf( + 'DROP ROLE "%s"', + $rolename + ); return $this->execute($sql); } @@ -472,7 +511,7 @@ trait RoleTrait * @param string $expiry string Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire * @param array $groups The groups to create the user in * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int * * @internal param $group (array) The groups to create the user in */ @@ -484,10 +523,16 @@ trait RoleTrait $this->clean($expiry); $this->fieldArrayClean($groups); - $sql = "CREATE USER \"{$username}\""; + $sql = \sprintf( + 'CREATE USER "%s"', + $username + ); if ('' !== $password) { - $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= \sprintf( + ' WITH ENCRYPTED PASSWORD \'%s\'', + $enc + ); } $sql .= $createdb ? ' CREATEDB' : ' NOCREATEDB'; @@ -498,7 +543,10 @@ trait RoleTrait } if ('' !== $expiry) { - $sql .= " VALID UNTIL '{$expiry}'"; + $sql .= \sprintf( + ' VALID UNTIL \'%s\'', + $expiry + ); } else { $sql .= " VALID UNTIL 'infinity'"; } @@ -554,14 +602,18 @@ trait RoleTrait * @param string $username The username of the user to rename * @param string $newname The new name of the user * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function renameUser($username, $newname) { $this->fieldClean($username); $this->fieldClean($newname); - $sql = "ALTER USER \"{$username}\" RENAME TO \"{$newname}\""; + $sql = \sprintf( + 'ALTER USER "%s" RENAME TO "%s"', + $username, + $newname + ); return $this->execute($sql); } @@ -577,7 +629,7 @@ trait RoleTrait * @param bool $createuser boolean Whether or not the user can create other users * @param string $expiry string Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function setUser($username, $password, $createdb, $createuser, $expiry) { @@ -586,17 +638,26 @@ trait RoleTrait $this->clean($enc); $this->clean($expiry); - $sql = "ALTER USER \"{$username}\""; + $sql = \sprintf( + 'ALTER USER "%s"', + $username + ); if ('' !== $password) { - $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= \sprintf( + ' WITH ENCRYPTED PASSWORD \'%s\'', + $enc + ); } $sql .= $createdb ? ' CREATEDB' : ' NOCREATEDB'; $sql .= $createuser ? ' CREATEUSER' : ' NOCREATEUSER'; if ('' !== $expiry) { - $sql .= " VALID UNTIL '{$expiry}'"; + $sql .= \sprintf( + ' VALID UNTIL \'%s\'', + $expiry + ); } else { $sql .= " VALID UNTIL 'infinity'"; } @@ -609,13 +670,16 @@ trait RoleTrait * * @param string $username The username of the user to drop * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropUser($username) { $this->fieldClean($username); - $sql = "DROP USER \"{$username}\""; + $sql = \sprintf( + 'DROP USER "%s"', + $username + ); return $this->execute($sql); } @@ -626,7 +690,7 @@ trait RoleTrait * @param string $rolename The role name * @param string $password The new password * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function changePassword($rolename, $password) { @@ -634,7 +698,11 @@ trait RoleTrait $this->fieldClean($rolename); $this->clean($enc); - $sql = "ALTER ROLE \"{$rolename}\" WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql = \sprintf( + 'ALTER ROLE "%s" WITH ENCRYPTED PASSWORD \'%s\'', + $rolename, + $enc + ); return $this->execute($sql); } @@ -645,14 +713,18 @@ trait RoleTrait * @param string $groname The name of the group * @param string $user The name of the user to add to the group * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function addGroupMember($groname, $user) { $this->fieldClean($groname); $this->fieldClean($user); - $sql = "ALTER GROUP \"{$groname}\" ADD USER \"{$user}\""; + $sql = \sprintf( + 'ALTER GROUP "%s" ADD USER "%s"', + $groname, + $user + ); return $this->execute($sql); } @@ -662,19 +734,22 @@ trait RoleTrait * * @param string $rolename The role name * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getMemberOf($rolename) { $this->clean($rolename); - $sql = " + $sql = \sprintf( + ' SELECT rolname FROM pg_catalog.pg_roles R, pg_auth_members M WHERE R.oid=M.roleid AND member IN ( SELECT oid FROM pg_catalog.pg_roles - WHERE rolname='{$rolename}') - ORDER BY rolname"; + WHERE rolname=\'%s\') + ORDER BY rolname', + $rolename + ); return $this->selectSet($sql); } @@ -687,18 +762,22 @@ trait RoleTrait * @param string $rolename The role name * @param string $admin (optional) Find only admin members * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getMembers($rolename, $admin = 'f') { $this->clean($rolename); - $sql = " + $sql = \sprintf( + ' SELECT rolname FROM pg_catalog.pg_roles R, pg_auth_members M - WHERE R.oid=M.member AND admin_option='{$admin}' + WHERE R.oid=M.member AND admin_option=\'%s\' AND roleid IN (SELECT oid FROM pg_catalog.pg_roles - WHERE rolname='{$rolename}') - ORDER BY rolname"; + WHERE rolname=\'%s\') + ORDER BY rolname', + $admin, + $rolename + ); return $this->selectSet($sql); } @@ -709,14 +788,18 @@ trait RoleTrait * @param string $groname The name of the group * @param string $user The name of the user to remove from the group * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropGroupMember($groname, $user) { $this->fieldClean($groname); $this->fieldClean($user); - $sql = "ALTER GROUP \"{$groname}\" DROP USER \"{$user}\""; + $sql = \sprintf( + 'ALTER GROUP "%s" DROP USER "%s"', + $groname, + $user + ); return $this->execute($sql); } @@ -726,16 +809,19 @@ trait RoleTrait * * @param string $groname The name of the group * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getGroup($groname) { $this->clean($groname); - $sql = " + $sql = \sprintf( + ' SELECT s.usename FROM pg_catalog.pg_user s, pg_catalog.pg_group g - WHERE g.groname='{$groname}' AND s.usesysid = ANY (g.grolist) - ORDER BY s.usename"; + WHERE g.groname=\'%s\' AND s.usesysid = ANY (g.grolist) + ORDER BY s.usename', + $groname + ); return $this->selectSet($sql); } @@ -743,7 +829,7 @@ trait RoleTrait /** * Returns all groups in the database cluser. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getGroups() { @@ -758,13 +844,16 @@ trait RoleTrait * @param string $groname The name of the group * @param array $users An array of users to add to the group * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function createGroup($groname, $users) { $this->fieldClean($groname); - $sql = "CREATE GROUP \"{$groname}\""; + $sql = \sprintf( + 'CREATE GROUP "%s"', + $groname + ); if (\is_array($users) && 0 < \count($users)) { $this->fieldArrayClean($users); @@ -779,13 +868,16 @@ trait RoleTrait * * @param string $groname The name of the group to drop * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropGroup($groname) { $this->fieldClean($groname); - $sql = "DROP GROUP \"{$groname}\""; + $sql = \sprintf( + 'DROP GROUP "%s"', + $groname + ); return $this->execute($sql); } @@ -906,10 +998,16 @@ trait RoleTrait $this->clean($connlimit); $this->clean($expiry); - $sql = "ALTER ROLE \"{$rolename}\""; + $sql = \sprintf( + 'ALTER ROLE "%s"', + $rolename + ); if ('' !== $password) { - $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= \sprintf( + ' WITH ENCRYPTED PASSWORD \'%s\'', + $enc + ); } $sql .= $superuser ? ' SUPERUSER' : ' NOSUPERUSER'; @@ -919,13 +1017,19 @@ trait RoleTrait $sql .= $login ? ' LOGIN' : ' NOLOGIN'; if ('' !== $connlimit) { - $sql .= " CONNECTION LIMIT {$connlimit}"; + $sql .= \sprintf( + ' CONNECTION LIMIT %s', + $connlimit + ); } else { $sql .= ' CONNECTION LIMIT -1'; } if ('' !== $expiry) { - $sql .= " VALID UNTIL '{$expiry}'"; + $sql .= \sprintf( + ' VALID UNTIL \'%s\'', + $expiry + ); } else { $sql .= " VALID UNTIL 'infinity'"; } diff --git a/src/database/databasetraits/RowTrait.php b/src/database/databasetraits/RowTrait.php index 28532a79..fcbd0fed 100644 --- a/src/database/databasetraits/RowTrait.php +++ b/src/database/databasetraits/RowTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for tables manipulation. */ @@ -17,7 +19,7 @@ trait RowTrait * @param string $table The name of a table * @param array $key The associative array holding the key to retrieve * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function browseRow($table, $key) { @@ -25,7 +27,11 @@ trait RowTrait $this->fieldClean($f_schema); $this->fieldClean($table); - $sql = "SELECT * FROM \"{$f_schema}\".\"{$table}\""; + $sql = \sprintf( + 'SELECT * FROM "%s"."%s"', + $f_schema, + $table + ); if (\is_array($key) && 0 < \count($key)) { $sql .= ' WHERE true'; @@ -33,7 +39,11 @@ trait RowTrait foreach ($key as $k => $v) { $this->fieldClean($k); $this->clean($v); - $sql .= " AND \"{$k}\"='{$v}'"; + $sql .= \sprintf( + ' AND "%s"=\'%s\'', + $k, + $v + ); } } @@ -62,17 +72,21 @@ trait RowTrait // Get the first primary or unique index (sorting primary keys first) that // is NOT a partial index. - $sql = " + $sql = \sprintf( + ' SELECT indrelid, indkey FROM pg_catalog.pg_index WHERE indisunique AND indrelid=( SELECT oid FROM pg_catalog.pg_class - WHERE relname='{$table}' AND relnamespace=( + WHERE relname=\'%s\' AND relnamespace=( SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$c_schema}' + WHERE nspname=\'%s\' ) ) AND indpred IS NULL AND indexprs IS NULL - ORDER BY indisprimary DESC LIMIT 1"; + ORDER BY indisprimary DESC LIMIT 1', + $table, + $c_schema + ); $rs = $this->selectSet($sql); // If none, check for an OID column. Even though OIDs can be duplicated, the edit and delete row @@ -112,7 +126,7 @@ trait RowTrait * @param array $format An array of the data type (VALUE or EXPRESSION) * @param array $types An array of field types * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function insertRow($table, $fields, $values, $nulls, $format, $types) { @@ -142,7 +156,11 @@ trait RowTrait } } - $sql = "INSERT INTO \"{$f_schema}\".\"{$table}\" (\"" . \implode('","', $fields) . '") + $sql = \sprintf( + 'INSERT INTO "%s"."%s" ("', + $f_schema, + $table + ) . \implode('","', $fields) . '") VALUES (' . \mb_substr($sql, 1) . ')'; return $this->execute($sql); @@ -203,13 +221,19 @@ trait RowTrait } $this->clean($value); - return "'{$value}'"; + return \sprintf( + '\'%s\'', + $value + ); } if ('VALUE' === $format) { $this->clean($value); - return "'{$value}'"; + return \sprintf( + '\'%s\'', + $value + ); } return $value; @@ -253,9 +277,19 @@ trait RowTrait } if (0 < \mb_strlen($sql)) { - $sql .= ", \"{$key}\"={$tmp}"; + $sql .= \sprintf( + ', "%s"=%s', + $key, + $tmp + ); } else { - $sql = "UPDATE \"{$f_schema}\".\"{$table}\" SET \"{$key}\"={$tmp}"; + $sql = \sprintf( + 'UPDATE "%s"."%s" SET "%s"=%s', + $f_schema, + $table, + $key, + $tmp + ); } } $first = true; @@ -265,10 +299,18 @@ trait RowTrait $this->clean($v); if ($first) { - $sql .= " WHERE \"{$k}\"='{$v}'"; + $sql .= \sprintf( + ' WHERE "%s"=\'%s\'', + $k, + $v + ); $first = false; } else { - $sql .= " AND \"{$k}\"='{$v}'"; + $sql .= \sprintf( + ' AND "%s"=\'%s\'', + $k, + $v + ); } } } diff --git a/src/database/databasetraits/SchemaTrait.php b/src/database/databasetraits/SchemaTrait.php index 7d48dc57..b22eb6b8 100644 --- a/src/database/databasetraits/SchemaTrait.php +++ b/src/database/databasetraits/SchemaTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for tables manipulation. */ @@ -16,7 +18,7 @@ trait SchemaTrait /** * Return all schemas in the current database. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getSchemas() { @@ -43,12 +45,15 @@ trait SchemaTrait $sql .= " 'N/A' as schema_size "; } - $sql .= " FROM pg_catalog.pg_namespace pn + $sql .= \sprintf( + ' FROM pg_catalog.pg_namespace pn LEFT JOIN pg_catalog.pg_class ON relnamespace = pn.oid LEFT JOIN pg_catalog.pg_roles pu ON (pn.nspowner = pu.oid) - {$where} - GROUP BY pn.nspname, pu.rolname, pg_catalog.obj_description(pn.oid, 'pg_namespace') - ORDER BY nspname"; + %s + GROUP BY pn.nspname, pu.rolname, pg_catalog.obj_description(pn.oid, \'pg_namespace\') + ORDER BY nspname', + $where + ); return $this->selectSet($sql); } @@ -99,7 +104,7 @@ trait SchemaTrait * * @param mixed $paths An array of schemas in required search order * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function setSearchPath($paths) { @@ -145,10 +150,16 @@ trait SchemaTrait $this->fieldClean($schemaname); $this->fieldClean($authorization); - $sql = "CREATE SCHEMA \"{$schemaname}\""; + $sql = \sprintf( + 'CREATE SCHEMA "%s"', + $schemaname + ); if ('' !== $authorization) { - $sql .= " AUTHORIZATION \"{$authorization}\""; + $sql .= \sprintf( + ' AUTHORIZATION "%s"', + $authorization + ); } if ('' !== $comment) { @@ -219,7 +230,11 @@ trait SchemaTrait $schema_rs = $this->getSchemaByName($schemaname); /* Only if the owner change */ if ($schema_rs->fields['ownername'] !== $owner) { - $sql = "ALTER SCHEMA \"{$schemaname}\" OWNER TO \"{$owner}\""; + $sql = \sprintf( + 'ALTER SCHEMA "%s" OWNER TO "%s"', + $schemaname, + $owner + ); $status = $this->execute($sql); if (0 !== $status) { @@ -231,7 +246,11 @@ trait SchemaTrait // Only if the name has changed if ($name !== $schemaname) { - $sql = "ALTER SCHEMA \"{$schemaname}\" RENAME TO \"{$name}\""; + $sql = \sprintf( + 'ALTER SCHEMA "%s" RENAME TO "%s"', + $schemaname, + $name + ); $status = $this->execute($sql); if (0 !== $status) { @@ -249,17 +268,20 @@ trait SchemaTrait * * @param string $schema The name of the schema * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getSchemaByName($schema) { $this->clean($schema); - $sql = " + $sql = \sprintf( + ' SELECT nspname, nspowner, r.rolname AS ownername, nspacl, - pg_catalog.obj_description(pn.oid, 'pg_namespace') as nspcomment + pg_catalog.obj_description(pn.oid, \'pg_namespace\') as nspcomment FROM pg_catalog.pg_namespace pn LEFT JOIN pg_roles as r ON pn.nspowner = r.oid - WHERE nspname='{$schema}'"; + WHERE nspname=\'%s\'', + $schema + ); return $this->selectSet($sql); } @@ -272,13 +294,16 @@ trait SchemaTrait * @param string $schemaname The name of the schema to drop * @param bool $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropSchema($schemaname, $cascade) { $this->fieldClean($schemaname); - $sql = "DROP SCHEMA \"{$schemaname}\""; + $sql = \sprintf( + 'DROP SCHEMA "%s"', + $schemaname + ); if ($cascade) { $sql .= ' CASCADE'; diff --git a/src/database/databasetraits/SequenceTrait.php b/src/database/databasetraits/SequenceTrait.php index 14ceaeb6..47415d48 100644 --- a/src/database/databasetraits/SequenceTrait.php +++ b/src/database/databasetraits/SequenceTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use ADORecordSet; + /** * Common trait for sequence manipulation. */ @@ -16,7 +18,7 @@ trait SequenceTrait * * @param bool $all true to get all sequences of all schemas * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getSequences($all = false) { @@ -31,11 +33,14 @@ trait SequenceTrait } else { $c_schema = $this->_schema; $this->clean($c_schema); - $sql = "SELECT c.relname AS seqname, u.usename AS seqowner, pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment, + $sql = \sprintf( + 'SELECT c.relname AS seqname, u.usename AS seqowner, pg_catalog.obj_description(c.oid, \'pg_class\') AS seqcomment, (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid - AND c.relkind = 'S' AND n.nspname='{$c_schema}' ORDER BY seqname"; + AND c.relkind = \'S\' AND n.nspname=\'%s\' ORDER BY seqname', + $c_schema + ); } return $this->selectSet($sql); @@ -46,7 +51,7 @@ trait SequenceTrait * * @param string $sequence Sequence name * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function nextvalSequence($sequence) { @@ -57,7 +62,11 @@ trait SequenceTrait $this->fieldClean($sequence); $this->clean($sequence); - $sql = "SELECT pg_catalog.NEXTVAL('\"{$f_schema}\".\"{$sequence}\"')"; + $sql = \sprintf( + 'SELECT pg_catalog.NEXTVAL(\'"%s"."%s"\')', + $f_schema, + $sequence + ); return $this->execute($sql); } @@ -68,7 +77,7 @@ trait SequenceTrait * @param string $sequence Sequence name * @param int $nextvalue The next value * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function setvalSequence($sequence, $nextvalue) { @@ -80,7 +89,12 @@ trait SequenceTrait $this->clean($sequence); $this->clean($nextvalue); - $sql = "SELECT pg_catalog.SETVAL('\"{$f_schema}\".\"{$sequence}\"', '{$nextvalue}')"; + $sql = \sprintf( + 'SELECT pg_catalog.SETVAL(\'"%s"."%s"\', \'%s\')', + $f_schema, + $sequence, + $nextvalue + ); return $this->execute($sql); } @@ -90,7 +104,7 @@ trait SequenceTrait * * @param string $sequence Sequence name * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function restartSequence($sequence) { @@ -98,7 +112,11 @@ trait SequenceTrait $this->fieldClean($f_schema); $this->fieldClean($sequence); - $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$sequence}\" RESTART;"; + $sql = \sprintf( + 'ALTER SEQUENCE "%s"."%s" RESTART;', + $f_schema, + $sequence + ); return $this->execute($sql); } @@ -108,7 +126,7 @@ trait SequenceTrait * * @param string $sequence Sequence name * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function resetSequence($sequence) { @@ -127,7 +145,12 @@ trait SequenceTrait $this->fieldClean($sequence); $this->clean($sequence); - $sql = "SELECT pg_catalog.SETVAL('\"{$f_schema}\".\"{$sequence}\"', {$minvalue})"; + $sql = \sprintf( + 'SELECT pg_catalog.SETVAL(\'"%s"."%s"\', %s)', + $f_schema, + $sequence, + $minvalue + ); return $this->execute($sql); } @@ -137,7 +160,7 @@ trait SequenceTrait * * @param string $sequence Sequence name * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getSequence($sequence) { @@ -147,14 +170,19 @@ trait SequenceTrait $this->fieldClean($sequence); $this->clean($c_sequence); - $sql = " + $sql = \sprintf( + ' SELECT c.relname AS seqname, s.*, - pg_catalog.obj_description(s.tableoid, 'pg_class') AS seqcomment, + pg_catalog.obj_description(s.tableoid, \'pg_class\') AS seqcomment, u.usename AS seqowner, n.nspname - FROM \"{$sequence}\" AS s, pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n + FROM "%s" AS s, pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid - AND c.relname = '{$c_sequence}' AND c.relkind = 'S' AND n.nspname='{$c_schema}' - AND n.oid = c.relnamespace"; + AND c.relname = \'%s\' AND c.relkind = \'S\' AND n.nspname=\'%s\' + AND n.oid = c.relnamespace', + $sequence, + $c_sequence, + $c_schema + ); return $this->selectSet($sql); } @@ -170,7 +198,7 @@ trait SequenceTrait * @param int $cachevalue The cache value * @param bool $cycledvalue True if cycled, false otherwise * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function createSequence( $sequence, @@ -190,26 +218,45 @@ trait SequenceTrait $this->clean($startvalue); $this->clean($cachevalue); - $sql = "CREATE SEQUENCE \"{$f_schema}\".\"{$sequence}\""; + $sql = \sprintf( + 'CREATE SEQUENCE "%s"."%s"', + $f_schema, + $sequence + ); if ('' !== $increment) { - $sql .= " INCREMENT {$increment}"; + $sql .= \sprintf( + ' INCREMENT %s', + $increment + ); } if ('' !== $minvalue) { - $sql .= " MINVALUE {$minvalue}"; + $sql .= \sprintf( + ' MINVALUE %s', + $minvalue + ); } if ('' !== $maxvalue) { - $sql .= " MAXVALUE {$maxvalue}"; + $sql .= \sprintf( + ' MAXVALUE %s', + $maxvalue + ); } if ('' !== $startvalue) { - $sql .= " START {$startvalue}"; + $sql .= \sprintf( + ' START %s', + $startvalue + ); } if ('' !== $cachevalue) { - $sql .= " CACHE {$cachevalue}"; + $sql .= \sprintf( + ' CACHE %s', + $cachevalue + ); } if ($cycledvalue) { @@ -296,10 +343,10 @@ trait SequenceTrait /** * Alter a sequence's owner. * - * @param \ADORecordSet $seqrs The sequence RecordSet returned by getSequence() - * @param string $owner the new owner of the sequence + * @param ADORecordSet $seqrs The sequence RecordSet returned by getSequence() + * @param string $owner the new owner of the sequence * - * @return \ADORecordSet|int + * @return ADORecordSet|int * * @internal string $name new owner for the sequence */ @@ -312,7 +359,12 @@ trait SequenceTrait if (!empty($owner) && ($seqrs->fields['seqowner'] !== $owner)) { $f_schema = $this->_schema; $this->fieldClean($f_schema); - $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" OWNER TO \"{$owner}\""; + $sql = \sprintf( + 'ALTER SEQUENCE "%s"."%s" OWNER TO "%s"', + $f_schema, + $seqrs->fields['seqname'], + $owner + ); return $this->execute($sql); } @@ -323,16 +375,16 @@ trait SequenceTrait /** * Alter a sequence's properties. * - * @param \ADORecordSet $seqrs The sequence RecordSet returned by getSequence() - * @param int $increment The sequence incremental value - * @param int $minvalue The sequence minimum value - * @param int $maxvalue The sequence maximum value - * @param int $restartvalue The sequence current value - * @param int $cachevalue The sequence cache value - * @param null|bool $cycledvalue Sequence can cycle ? - * @param int $startvalue The sequence start value when issueing a restart + * @param ADORecordSet $seqrs The sequence RecordSet returned by getSequence() + * @param int $increment The sequence incremental value + * @param int $minvalue The sequence minimum value + * @param int $maxvalue The sequence maximum value + * @param int $restartvalue The sequence current value + * @param int $cachevalue The sequence cache value + * @param null|bool $cycledvalue Sequence can cycle ? + * @param int $startvalue The sequence start value when issueing a restart * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function alterSequenceProps( $seqrs, @@ -347,27 +399,45 @@ trait SequenceTrait $sql = ''; /* vars are cleaned in _alterSequence */ if (!empty($increment) && ($increment !== $seqrs->fields['increment_by'])) { - $sql .= " INCREMENT {$increment}"; + $sql .= \sprintf( + ' INCREMENT %s', + $increment + ); } if (!empty($minvalue) && ($minvalue !== $seqrs->fields['min_value'])) { - $sql .= " MINVALUE {$minvalue}"; + $sql .= \sprintf( + ' MINVALUE %s', + $minvalue + ); } if (!empty($maxvalue) && ($maxvalue !== $seqrs->fields['max_value'])) { - $sql .= " MAXVALUE {$maxvalue}"; + $sql .= \sprintf( + ' MAXVALUE %s', + $maxvalue + ); } if (!empty($restartvalue) && ($restartvalue !== $seqrs->fields['last_value'])) { - $sql .= " RESTART {$restartvalue}"; + $sql .= \sprintf( + ' RESTART %s', + $restartvalue + ); } if (!empty($cachevalue) && ($cachevalue !== $seqrs->fields['cache_value'])) { - $sql .= " CACHE {$cachevalue}"; + $sql .= \sprintf( + ' CACHE %s', + $cachevalue + ); } if (!empty($startvalue) && ($startvalue !== $seqrs->fields['start_value'])) { - $sql .= " START {$startvalue}"; + $sql .= \sprintf( + ' START %s', + $startvalue + ); } // toggle cycle yes/no @@ -378,7 +448,12 @@ trait SequenceTrait if ('' !== $sql) { $f_schema = $this->_schema; $this->fieldClean($f_schema); - $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" {$sql}"; + $sql = \sprintf( + 'ALTER SEQUENCE "%s"."%s" %s', + $f_schema, + $seqrs->fields['seqname'], + $sql + ); return $this->execute($sql); } @@ -389,10 +464,10 @@ trait SequenceTrait /** * Rename a sequence. * - * @param \ADORecordSet $seqrs The sequence RecordSet returned by getSequence() - * @param string $name The new name for the sequence + * @param ADORecordSet $seqrs The sequence RecordSet returned by getSequence() + * @param string $name The new name for the sequence * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function alterSequenceName($seqrs, $name) { @@ -400,7 +475,12 @@ trait SequenceTrait if (!empty($name) && ($seqrs->fields['seqname'] !== $name)) { $f_schema = $this->_schema; $this->fieldClean($f_schema); - $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" RENAME TO \"{$name}\""; + $sql = \sprintf( + 'ALTER SEQUENCE "%s"."%s" RENAME TO "%s"', + $f_schema, + $seqrs->fields['seqname'], + $name + ); $status = $this->execute($sql); if (0 === $status) { @@ -416,10 +496,10 @@ trait SequenceTrait /** * Alter a sequence's schema. * - * @param \ADORecordSet $seqrs The sequence RecordSet returned by getSequence() - * @param string $schema + * @param ADORecordSet $seqrs The sequence RecordSet returned by getSequence() + * @param string $schema * - * @return \ADORecordSet|int + * @return ADORecordSet|int * * @internal param The $name new schema for the sequence */ @@ -429,7 +509,12 @@ trait SequenceTrait if (!empty($schema) && ($seqrs->fields['nspname'] !== $schema)) { $f_schema = $this->_schema; $this->fieldClean($f_schema); - $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" SET SCHEMA {$schema}"; + $sql = \sprintf( + 'ALTER SEQUENCE "%s"."%s" SET SCHEMA %s', + $f_schema, + $seqrs->fields['seqname'], + $schema + ); return $this->execute($sql); } @@ -443,7 +528,7 @@ trait SequenceTrait * @param string $sequence Sequence name * @param bool $cascade True to cascade drop, false to restrict * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function dropSequence($sequence, $cascade = false) { @@ -451,7 +536,11 @@ trait SequenceTrait $this->fieldClean($f_schema); $this->fieldClean($sequence); - $sql = "DROP SEQUENCE \"{$f_schema}\".\"{$sequence}\""; + $sql = \sprintf( + 'DROP SEQUENCE "%s"."%s"', + $f_schema, + $sequence + ); if ($cascade) { $sql .= ' CASCADE'; @@ -482,18 +571,18 @@ trait SequenceTrait * Protected method which alter a sequence * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION. * - * @param \ADORecordSet $seqrs The sequence recordSet returned by getSequence() - * @param string $name The new name for the sequence - * @param string $comment The comment on the sequence - * @param string $owner The new owner for the sequence - * @param string $schema The new schema for the sequence - * @param int $increment The increment - * @param int $minvalue The min value - * @param int $maxvalue The max value - * @param int $restartvalue The starting value - * @param int $cachevalue The cache value - * @param null|bool $cycledvalue True if cycled, false otherwise - * @param int $startvalue The sequence start value when issueing a restart + * @param ADORecordSet $seqrs The sequence recordSet returned by getSequence() + * @param string $name The new name for the sequence + * @param string $comment The comment on the sequence + * @param string $owner The new owner for the sequence + * @param string $schema The new schema for the sequence + * @param int $increment The increment + * @param int $minvalue The min value + * @param int $maxvalue The max value + * @param int $restartvalue The starting value + * @param int $cachevalue The cache value + * @param null|bool $cycledvalue True if cycled, false otherwise + * @param int $startvalue The sequence start value when issueing a restart * * @return int 0 success */ diff --git a/src/database/databasetraits/StatsTrait.php b/src/database/databasetraits/StatsTrait.php index 85fcab7a..a9228c6a 100644 --- a/src/database/databasetraits/StatsTrait.php +++ b/src/database/databasetraits/StatsTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait to retrieve stats on database objects. */ @@ -16,13 +18,16 @@ trait StatsTrait * * @param string $database The database to fetch stats for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getStatsDatabase($database) { $this->clean($database); - $sql = "SELECT * FROM pg_stat_database WHERE datname='{$database}'"; + $sql = \sprintf( + 'SELECT * FROM pg_stat_database WHERE datname=\'%s\'', + $database + ); return $this->selectSet($sql); } @@ -32,7 +37,7 @@ trait StatsTrait * * @param string $table The table to fetch stats for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getStatsTableTuples($table) { @@ -40,8 +45,12 @@ trait StatsTrait $this->clean($c_schema); $this->clean($table); - $sql = "SELECT * FROM pg_stat_all_tables - WHERE schemaname='{$c_schema}' AND relname='{$table}'"; + $sql = \sprintf( + 'SELECT * FROM pg_stat_all_tables + WHERE schemaname=\'%s\' AND relname=\'%s\'', + $c_schema, + $table + ); return $this->selectSet($sql); } @@ -51,7 +60,7 @@ trait StatsTrait * * @param string $table The table to fetch stats for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getStatsTableIO($table) { @@ -59,8 +68,12 @@ trait StatsTrait $this->clean($c_schema); $this->clean($table); - $sql = "SELECT * FROM pg_statio_all_tables - WHERE schemaname='{$c_schema}' AND relname='{$table}'"; + $sql = \sprintf( + 'SELECT * FROM pg_statio_all_tables + WHERE schemaname=\'%s\' AND relname=\'%s\'', + $c_schema, + $table + ); return $this->selectSet($sql); } @@ -70,7 +83,7 @@ trait StatsTrait * * @param string $table The table to fetch index stats for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getStatsIndexTuples($table) { @@ -78,8 +91,12 @@ trait StatsTrait $this->clean($c_schema); $this->clean($table); - $sql = "SELECT * FROM pg_stat_all_indexes - WHERE schemaname='{$c_schema}' AND relname='{$table}' ORDER BY indexrelname"; + $sql = \sprintf( + 'SELECT * FROM pg_stat_all_indexes + WHERE schemaname=\'%s\' AND relname=\'%s\' ORDER BY indexrelname', + $c_schema, + $table + ); return $this->selectSet($sql); } @@ -89,7 +106,7 @@ trait StatsTrait * * @param string $table The table to fetch index stats for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getStatsIndexIO($table) { @@ -97,9 +114,13 @@ trait StatsTrait $this->clean($c_schema); $this->clean($table); - $sql = "SELECT * FROM pg_statio_all_indexes - WHERE schemaname='{$c_schema}' AND relname='{$table}' - ORDER BY indexrelname"; + $sql = \sprintf( + 'SELECT * FROM pg_statio_all_indexes + WHERE schemaname=\'%s\' AND relname=\'%s\' + ORDER BY indexrelname', + $c_schema, + $table + ); return $this->selectSet($sql); } diff --git a/src/database/databasetraits/TableTrait.php b/src/database/databasetraits/TableTrait.php index 386fce33..efb7e01d 100644 --- a/src/database/databasetraits/TableTrait.php +++ b/src/database/databasetraits/TableTrait.php @@ -6,19 +6,22 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; +use PHPPgAdmin\ArrayRecordSet; + /** * Common trait for tables manipulation. */ trait TableTrait { - use \PHPPgAdmin\Database\Traits\ColumnTrait; - use \PHPPgAdmin\Database\Traits\RowTrait; - use \PHPPgAdmin\Database\Traits\TriggerTrait; + use ColumnTrait; + use RowTrait; + use TriggerTrait; /** * Return all tables in current database excluding schemas 'pg_catalog', 'information_schema' and 'pg_toast'. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getAllTables() { @@ -36,7 +39,7 @@ trait TableTrait /** * Return all tables in current database (and schema). * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getTables() { @@ -60,12 +63,15 @@ trait TableTrait $sql .= " 'N/A' as table_size "; } - $sql .= " FROM pg_catalog.pg_class c + $sql .= \sprintf( + ' FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_tablespace pt ON pt.oid=c.reltablespace - WHERE c.relkind = 'r' - AND nspname='{$c_schema}' - ORDER BY c.relname"; + WHERE c.relkind = \'r\' + AND nspname=\'%s\' + ORDER BY c.relname', + $c_schema + ); return $this->selectSet($sql); } @@ -75,7 +81,7 @@ trait TableTrait * * @param string $table The table to find the parents for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getTableParents($table) { @@ -83,7 +89,8 @@ trait TableTrait $this->clean($c_schema); $this->clean($table); - $sql = " + $sql = \sprintf( + ' SELECT pn.nspname, relname FROM @@ -91,11 +98,14 @@ trait TableTrait WHERE pc.oid=pi.inhparent AND pc.relnamespace=pn.oid - AND pi.inhrelid = (SELECT oid from pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$c_schema}')) + AND pi.inhrelid = (SELECT oid from pg_catalog.pg_class WHERE relname=\'%s\' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = \'%s\')) ORDER BY pi.inhseqno - "; + ', + $table, + $c_schema + ); return $this->selectSet($sql); } @@ -105,7 +115,7 @@ trait TableTrait * * @param string $table The table to find the children for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getTableChildren($table) { @@ -113,7 +123,8 @@ trait TableTrait $this->clean($c_schema); $this->clean($table); - $sql = " + $sql = \sprintf( + ' SELECT pn.nspname, relname FROM @@ -121,9 +132,12 @@ trait TableTrait WHERE pc.oid=pi.inhrelid AND pc.relnamespace=pn.oid - AND pi.inhparent = (SELECT oid from pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$c_schema}')) - "; + AND pi.inhparent = (SELECT oid from pg_catalog.pg_class WHERE relname=\'%s\' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = \'%s\')) + ', + $table, + $c_schema + ); return $this->selectSet($sql); } @@ -207,7 +221,13 @@ trait TableTrait if (null !== $t->fields['relcomment']) { $this->clean($t->fields['relcomment']); $sql .= "\n-- Comment\n\n"; - $sql .= "COMMENT ON TABLE \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" IS '{$t->fields['relcomment']}';\n"; + $sql .= \sprintf( + 'COMMENT ON TABLE "%s"."%s" IS \'%s\'; +', + $t->fields['nspname'], + $t->fields['relname'], + $t->fields['relcomment'] + ); } // Add comments on columns, if any @@ -242,7 +262,7 @@ trait TableTrait * * @param string $table The name of the table * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getTable($table) { @@ -263,10 +283,14 @@ trait TableTrait LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace "; $sql .= ($this->hasRoles() ? ' LEFT JOIN pg_catalog.pg_roles r ON c.relowner = r.oid ' : '') . - " WHERE c.relkind = 'r' - AND n.nspname = '{$c_schema}' + \sprintf( + ' WHERE c.relkind = \'r\' + AND n.nspname = \'%s\' AND n.oid = c.relnamespace - AND c.relname = '{$table}'"; + AND c.relname = \'%s\'', + $c_schema, + $table + ); return $this->selectSet($sql); } @@ -277,7 +301,7 @@ trait TableTrait * @param string $table The name of the table * @param string $field (optional) The name of a field to return * - * @return \PHPPgAdmin\ADORecordSet All attributes in order + * @return ADORecordSet All attributes in order */ public function getTableAttributes($table, $field = '') { @@ -301,7 +325,7 @@ trait TableTrait * * @param string $table The table to find rules for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getConstraints($table) { @@ -311,11 +335,12 @@ trait TableTrait // This SQL is greatly complicated by the need to retrieve // index clustering information for primary and unique constraints - $sql = "SELECT + $sql = \sprintf( + 'SELECT pc.conname, pg_catalog.pg_get_constraintdef(pc.oid, true) AS consrc, pc.contype, - CASE WHEN pc.contype='u' OR pc.contype='p' THEN ( + CASE WHEN pc.contype=\'u\' OR pc.contype=\'p\' THEN ( SELECT indisclustered FROM @@ -333,12 +358,15 @@ trait TableTrait FROM pg_catalog.pg_constraint pc WHERE - pc.conrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + pc.conrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname=\'%s\' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$c_schema}')) + WHERE nspname=\'%s\')) ORDER BY 1 - "; + ', + $table, + $c_schema + ); return $this->selectSet($sql); } @@ -356,8 +384,12 @@ trait TableTrait $this->clean($c_schema); $this->clean($table); - $sql = "SELECT relhasoids FROM pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')"; + $sql = \sprintf( + 'SELECT relhasoids FROM pg_catalog.pg_class WHERE relname=\'%s\' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname=\'%s\')', + $table, + $c_schema + ); $rs = $this->selectSet($sql); @@ -447,19 +479,22 @@ trait TableTrait * @param string $table The name of a table whose indexes to retrieve * @param bool $unique Only get unique/pk indexes * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getIndexes($table = '', $unique = false) { $this->clean($table); - $sql = " + $sql = \sprintf( + ' SELECT c2.relname AS indname, i.indisprimary, i.indisunique, i.indisclustered, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) AS inddef FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i - WHERE c.relname = '{$table}' AND pg_catalog.pg_table_is_visible(c.oid) + WHERE c.relname = \'%s\' AND pg_catalog.pg_table_is_visible(c.oid) AND c.oid = i.indrelid AND i.indexrelid = c2.oid - "; + ', + $table + ); if ($unique) { $sql .= ' AND i.indisunique '; @@ -475,7 +510,7 @@ trait TableTrait * * @param string $table The name of a table whose triggers to retrieve * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getTriggers($table = '') { @@ -483,20 +518,24 @@ trait TableTrait $this->clean($c_schema); $this->clean($table); - $sql = "SELECT + $sql = \sprintf( + 'SELECT t.tgname, pg_catalog.pg_get_triggerdef(t.oid) AS tgdef, - CASE WHEN t.tgenabled = 'D' THEN FALSE ELSE TRUE END AS tgenabled, p.oid AS prooid, - p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto, + CASE WHEN t.tgenabled = \'D\' THEN FALSE ELSE TRUE END AS tgenabled, p.oid AS prooid, + p.proname || \' (\' || pg_catalog.oidvectortypes(p.proargtypes) || \')\' AS proproto, ns.nspname AS pronamespace FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns - WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' - AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) + WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname=\'%s\' + AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname=\'%s\')) AND ( tgconstraint = 0 OR NOT EXISTS (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) - WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f')) + WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = \'i\' AND c.contype = \'f\')) AND p.oid=t.tgfoid - AND p.pronamespace = ns.oid"; + AND p.pronamespace = ns.oid', + $table, + $c_schema + ); return $this->selectSet($sql); } @@ -506,7 +545,7 @@ trait TableTrait * * @param string $table The table to find rules for * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getRules($table) { @@ -514,13 +553,17 @@ trait TableTrait $this->clean($c_schema); $this->clean($table); - $sql = " + $sql = \sprintf( + ' SELECT * FROM pg_catalog.pg_rules WHERE - schemaname='{$c_schema}' AND tablename='{$table}' + schemaname=\'%s\' AND tablename=\'%s\' ORDER BY rulename - "; + ', + $c_schema, + $table + ); return $this->selectSet($sql); } @@ -574,7 +617,11 @@ trait TableTrait $found = false; $first = true; $comment_sql = ''; //Accumulate comments for the columns - $sql = "CREATE TABLE \"{$f_schema}\".\"{$name}\" ("; + $sql = \sprintf( + 'CREATE TABLE "%s"."%s" (', + $f_schema, + $name + ); for ($i = 0; $i < $fields; ++$i) { $this->fieldClean($field[$i]); @@ -593,17 +640,24 @@ trait TableTrait } else { $first = false; } - $length[$i]=$length[$i] ?? ''; + $length[$i] = $length[$i] ?? ''; + switch ($type[$i]) { // Have to account for weird placing of length for with/without // time zone types case 'timestamp with time zone': case 'timestamp without time zone': $qual = \mb_substr($type[$i], 9); - $sql .= "\"{$field[$i]}\" timestamp"; + $sql .= \sprintf( + '"%s" timestamp', + $field[$i] + ); - if ('' !== $length[$i] ) { - $sql .= "({$length[$i]})"; + if ('' !== $length[$i]) { + $sql .= \sprintf( + '(%s)', + $length[$i] + ); } $sql .= $qual; @@ -612,10 +666,16 @@ trait TableTrait case 'time with time zone': case 'time without time zone': $qual = \mb_substr($type[$i], 4); - $sql .= "\"{$field[$i]}\" time"; + $sql .= \sprintf( + '"%s" time', + $field[$i] + ); if ('' !== $length[$i]) { - $sql .= "({$length[$i]})"; + $sql .= \sprintf( + '(%s)', + $length[$i] + ); } $sql .= $qual; @@ -623,10 +683,17 @@ trait TableTrait break; default: - $sql .= "\"{$field[$i]}\" {$type[$i]}"; + $sql .= \sprintf( + '"%s" %s', + $field[$i], + $type[$i] + ); - if ('' !== $length[$i] ) { - $sql .= "({$length[$i]})"; + if ('' !== $length[$i]) { + $sql .= \sprintf( + '(%s)', + $length[$i] + ); } } // Add array qualifier if necessary @@ -646,11 +713,20 @@ trait TableTrait } if ('' !== $default[$i]) { - $sql .= " DEFAULT {$default[$i]}"; + $sql .= \sprintf( + ' DEFAULT %s', + $default[$i] + ); } if ('' !== $colcomment[$i]) { - $comment_sql .= "COMMENT ON COLUMN \"{$name}\".\"{$field[$i]}\" IS '{$colcomment[$i]}';\n"; + $comment_sql .= \sprintf( + 'COMMENT ON COLUMN "%s"."%s" IS \'%s\'; +', + $name, + $field[$i], + $colcomment[$i] + ); } $found = true; @@ -665,7 +741,10 @@ trait TableTrait for ($i = 0; $i < $fields; ++$i) { if (isset($primarykey[$i])) { - $primarykeycolumns[] = "\"{$field[$i]}\""; + $primarykeycolumns[] = \sprintf( + '"%s"', + $field[$i] + ); } } @@ -685,7 +764,10 @@ trait TableTrait // Tablespace if ($this->hasTablespaces() && '' !== $tablespace) { $this->fieldClean($tablespace); - $sql .= " TABLESPACE \"{$tablespace}\""; + $sql .= \sprintf( + ' TABLESPACE "%s"', + $tablespace + ); } $status = $this->execute($sql); @@ -742,7 +824,11 @@ trait TableTrait $this->fieldClean($name); $this->fieldClean($like['schema']); $this->fieldClean($like['table']); - $like = "\"{$like['schema']}\".\"{$like['table']}\""; + $like = \sprintf( + '"%s"."%s"', + $like['schema'], + $like['table'] + ); $status = $this->beginTransaction(); @@ -750,7 +836,12 @@ trait TableTrait return -1; } - $sql = "CREATE TABLE \"{$f_schema}\".\"{$name}\" (LIKE {$like}"; + $sql = \sprintf( + 'CREATE TABLE "%s"."%s" (LIKE %s', + $f_schema, + $name, + $like + ); if ($defaults) { $sql .= ' INCLUDING DEFAULTS'; @@ -768,7 +859,10 @@ trait TableTrait if ($this->hasTablespaces() && '' !== $tablespace) { $this->fieldClean($tablespace); - $sql .= " TABLESPACE \"{$tablespace}\""; + $sql .= \sprintf( + ' TABLESPACE "%s"', + $tablespace + ); } $status = $this->execute($sql); @@ -811,7 +905,11 @@ trait TableTrait return -1; } - $sql_sentence = "ALTER TABLE \"{$this->_schema}\".\"{$tblrs->fields['relname']}\" "; + $sql_sentence = \sprintf( + 'ALTER TABLE "%s"."%s" ', + $this->_schema, + $tblrs->fields['relname'] + ); $status = $this->_alterTable($tblrs, $name, $owner, $schema, $comment, $tablespace, !$with_oids, $sql_sentence); //dump(['_alterTable' => [$status, $sql_sentence.$this->getLastExecutedSQL()]]); @@ -828,9 +926,9 @@ trait TableTrait * Enables or disables the oid system column to a table a table's owner * /!\ this function is called from _alterTable which take care of escaping fields. * - * @param \PHPPgAdmin\ADORecordSet $tblrs The table RecordSet returned by getTable() - * @param null|string $owner - * @param bool $withoutoids + * @param ADORecordSet $tblrs The table RecordSet returned by getTable() + * @param null|string $owner + * @param bool $withoutoids * * @return array{0:int,1:string} [status:0 if successful, change_sql: changed attribute] */ @@ -844,7 +942,11 @@ trait TableTrait $f_schema = $this->_schema; $this->fieldClean($f_schema); - $alter_sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" "; + $alter_sql = \sprintf( + 'ALTER TABLE "%s"."%s" ', + $f_schema, + $tblrs->fields['relname'] + ); $change_sql = ' SET '; if ($withoutoids) { @@ -864,8 +966,8 @@ trait TableTrait * Alter a table's owner * /!\ this function is called from _alterTable which take care of escaping fields. * - * @param \PHPPgAdmin\ADORecordSet $tblrs The table RecordSet returned by getTable() - * @param null|string $owner + * @param ADORecordSet $tblrs The table RecordSet returned by getTable() + * @param null|string $owner * * @return array{0:int,1:string} [status:0 if successful, change_sql: changed attribute] */ @@ -880,8 +982,15 @@ trait TableTrait // If owner has been changed, then do the alteration. We are // careful to avoid this generally as changing owner is a // superuser only function. - $alter_sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" "; - $change_sql = " OWNER TO \"{$owner}\""; + $alter_sql = \sprintf( + 'ALTER TABLE "%s"."%s" ', + $f_schema, + $tblrs->fields['relname'] + ); + $change_sql = \sprintf( + ' OWNER TO "%s"', + $owner + ); $sql = \implode(' ', [$alter_sql, $change_sql]); $status = $this->execute($sql); @@ -894,8 +1003,8 @@ trait TableTrait * Alter a table's tablespace * /!\ this function is called from _alterTable which take care of escaping fields. * - * @param \PHPPgAdmin\ADORecordSet $tblrs The table RecordSet returned by getTable() - * @param null|string $tablespace + * @param ADORecordSet $tblrs The table RecordSet returned by getTable() + * @param null|string $tablespace * * @return array{0:int,1:string} [status:0 if successful, change_sql: changed attribute] */ @@ -910,8 +1019,15 @@ trait TableTrait // If tablespace has been changed, then do the alteration. We // don't want to do this unnecessarily. - $alter_sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" "; - $change_sql = " SET TABLESPACE \"{$tablespace}\""; + $alter_sql = \sprintf( + 'ALTER TABLE "%s"."%s" ', + $f_schema, + $tblrs->fields['relname'] + ); + $change_sql = \sprintf( + ' SET TABLESPACE "%s"', + $tablespace + ); $sql = \implode(' ', [$alter_sql, $change_sql]); $status = $this->execute($sql); @@ -924,8 +1040,8 @@ trait TableTrait * Alter a table's name * /!\ this function is called from _alterTable which take care of escaping fields. * - * @param \PHPPgAdmin\ADORecordSet $tblrs The table RecordSet returned by getTable() - * @param string $name The new table's name + * @param ADORecordSet $tblrs The table RecordSet returned by getTable() + * @param string $name The new table's name * * @return array{0:int,1:string} [status:0 if successful, change_sql: changed attribute] */ @@ -939,8 +1055,15 @@ trait TableTrait $f_schema = $this->_schema; $this->fieldClean($f_schema); - $alter_sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" "; - $change_sql = " RENAME TO \"{$name}\""; + $alter_sql = \sprintf( + 'ALTER TABLE "%s"."%s" ', + $f_schema, + $tblrs->fields['relname'] + ); + $change_sql = \sprintf( + ' RENAME TO "%s"', + $name + ); $sql = \implode(' ', [$alter_sql, $change_sql]); $status = $this->execute($sql); @@ -958,8 +1081,8 @@ trait TableTrait * Alter a table's schema * /!\ this function is called from _alterTable which take care of escaping fields. * - * @param \PHPPgAdmin\ADORecordSet $tblrs The table RecordSet returned by getTable() - * @param null|string $schema + * @param ADORecordSet $tblrs The table RecordSet returned by getTable() + * @param null|string $schema * * @return array{0:int,1:string} [status:0 if successful, change_sql: changed attribute] */ @@ -973,8 +1096,15 @@ trait TableTrait $this->fieldClean($f_schema); // If tablespace has been changed, then do the alteration. We // don't want to do this unnecessarily. - $alter_sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" "; - $change_sql = " SET SCHEMA \"{$schema}\""; + $alter_sql = \sprintf( + 'ALTER TABLE "%s"."%s" ', + $f_schema, + $tblrs->fields['relname'] + ); + $change_sql = \sprintf( + ' SET SCHEMA "%s"', + $schema + ); $sql = \implode(' ', [$alter_sql, $change_sql]); $status = $this->execute($sql); @@ -997,7 +1127,11 @@ trait TableTrait $this->fieldClean($f_schema); $this->fieldClean($table); - $sql = "TRUNCATE TABLE \"{$f_schema}\".\"{$table}\" "; + $sql = \sprintf( + 'TRUNCATE TABLE "%s"."%s" ', + $f_schema, + $table + ); if ($cascade) { $sql = $sql . ' CASCADE'; @@ -1014,7 +1148,7 @@ trait TableTrait * @param string $table The table to drop * @param bool $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropTable($table, $cascade) { @@ -1022,7 +1156,11 @@ trait TableTrait $this->fieldClean($f_schema); $this->fieldClean($table); - $sql = "DROP TABLE \"{$f_schema}\".\"{$table}\""; + $sql = \sprintf( + 'DROP TABLE "%s"."%s"', + $f_schema, + $table + ); if ($cascade) { $sql .= ' CASCADE'; @@ -1097,7 +1235,7 @@ trait TableTrait * @param string $relation The name of a relation * @param bool $oids true to dump also the oids * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dumpRelation($relation, $oids) { @@ -1110,7 +1248,11 @@ trait TableTrait $oid_str = ''; } - return $this->selectSet("SELECT {$oid_str}* FROM \"{$relation}\""); + return $this->selectSet(\sprintf( + 'SELECT %s* FROM "%s"', + $oid_str, + $relation + )); } /** @@ -1118,7 +1260,7 @@ trait TableTrait * * @param string $table if given, return autovacuum info for the given table or return all informations for all table * - * @return \PHPPgAdmin\ArrayRecordSet A recordset + * @return ArrayRecordSet A recordset */ public function getTableAutovacuum($table = '') { @@ -1129,14 +1271,18 @@ trait TableTrait $c_schema = $this->_schema; $this->clean($c_schema); - $sql = "SELECT c.oid, nspname, relname, pg_catalog.array_to_string(reloptions, E',') AS reloptions + $sql = \sprintf( + 'SELECT c.oid, nspname, relname, pg_catalog.array_to_string(reloptions, E\',\') AS reloptions FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace - WHERE c.relkind = 'r'::\"char\" - AND n.nspname NOT IN ('pg_catalog','information_schema') + WHERE c.relkind = \'r\'::"char" + AND n.nspname NOT IN (\'pg_catalog\',\'information_schema\') AND c.reloptions IS NOT NULL - AND c.relname = '{$table}' AND n.nspname = '{$c_schema}' - ORDER BY nspname, relname"; + AND c.relname = \'%s\' AND n.nspname = \'%s\' + ORDER BY nspname, relname', + $table, + $c_schema + ); } else { $sql = "SELECT c.oid, nspname, relname, pg_catalog.array_to_string(reloptions, E',') AS reloptions FROM pg_class c @@ -1169,7 +1315,7 @@ trait TableTrait $_autovacs->moveNext(); } - return new \PHPPgAdmin\ArrayRecordSet($autovacs); + return new ArrayRecordSet($autovacs); } /** @@ -1183,7 +1329,10 @@ trait TableTrait { $this->clean($user); - return "SET SESSION AUTHORIZATION '{$user}';"; + return \sprintf( + 'SET SESSION AUTHORIZATION \'%s\';', + $user + ); } /** @@ -1198,7 +1347,7 @@ trait TableTrait * @param int $vaccostdelay vacuum cost delay * @param int $vaccostlimit vacuum cost limit * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function saveAutovacuum( $table, @@ -1216,41 +1365,66 @@ trait TableTrait $params = []; - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" SET ("; + $sql = \sprintf( + 'ALTER TABLE "%s"."%s" SET (', + $f_schema, + $table + ); if (!empty($vacenabled)) { $this->clean($vacenabled); - $params[] = "autovacuum_enabled='{$vacenabled}'"; + $params[] = \sprintf( + 'autovacuum_enabled=\'%s\'', + $vacenabled + ); } if (!empty($vacthreshold)) { $this->clean($vacthreshold); - $params[] = "autovacuum_vacuum_threshold='{$vacthreshold}'"; + $params[] = \sprintf( + 'autovacuum_vacuum_threshold=\'%s\'', + $vacthreshold + ); } if (!empty($vacscalefactor)) { $this->clean($vacscalefactor); - $params[] = "autovacuum_vacuum_scale_factor='{$vacscalefactor}'"; + $params[] = \sprintf( + 'autovacuum_vacuum_scale_factor=\'%s\'', + $vacscalefactor + ); } if (!empty($anathresold)) { $this->clean($anathresold); - $params[] = "autovacuum_analyze_threshold='{$anathresold}'"; + $params[] = \sprintf( + 'autovacuum_analyze_threshold=\'%s\'', + $anathresold + ); } if (!empty($anascalefactor)) { $this->clean($anascalefactor); - $params[] = "autovacuum_analyze_scale_factor='{$anascalefactor}'"; + $params[] = \sprintf( + 'autovacuum_analyze_scale_factor=\'%s\'', + $anascalefactor + ); } if (!empty($vaccostdelay)) { $this->clean($vaccostdelay); - $params[] = "autovacuum_vacuum_cost_delay='{$vaccostdelay}'"; + $params[] = \sprintf( + 'autovacuum_vacuum_cost_delay=\'%s\'', + $vaccostdelay + ); } if (!empty($vaccostlimit)) { $this->clean($vaccostlimit); - $params[] = "autovacuum_vacuum_cost_limit='{$vaccostlimit}'"; + $params[] = \sprintf( + 'autovacuum_vacuum_cost_limit=\'%s\'', + $vaccostlimit + ); } $sql = $sql . \implode(',', $params) . ');'; @@ -1265,7 +1439,7 @@ trait TableTrait * * @param string $table The table * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropAutovacuum($table) { @@ -1274,11 +1448,15 @@ trait TableTrait $this->fieldClean($table); return $this->execute( - " - ALTER TABLE \"{$f_schema}\".\"{$table}\" RESET (autovacuum_enabled, autovacuum_vacuum_threshold, + \sprintf( + ' + ALTER TABLE "%s"."%s" RESET (autovacuum_enabled, autovacuum_vacuum_threshold, autovacuum_vacuum_scale_factor, autovacuum_analyze_threshold, autovacuum_analyze_scale_factor, autovacuum_vacuum_cost_delay, autovacuum_vacuum_cost_limit - );" + );', + $f_schema, + $table + ) ); } @@ -1324,13 +1502,13 @@ trait TableTrait * Protected method which alter a table * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION. * - * @param \PHPPgAdmin\ADORecordSet $tblrs The table recordSet returned by getTable() - * @param string $name The new name for the table - * @param string $owner The new owner for the table - * @param string $schema The new schema for the table - * @param string $comment The comment on the table - * @param string $tablespace The new tablespace for the table ('' means leave as is) - * @param bool $withoutoids If set to TRUE, will drop oids column + * @param ADORecordSet $tblrs The table recordSet returned by getTable() + * @param string $name The new name for the table + * @param string $owner The new owner for the table + * @param string $schema The new schema for the table + * @param string $comment The comment on the table + * @param string $tablespace The new tablespace for the table ('' means leave as is) + * @param bool $withoutoids If set to TRUE, will drop oids column * * @return int 0 success */ @@ -1351,7 +1529,11 @@ trait TableTrait // Owner $this->fieldClean($owner); [$TableOwnerStatus,$TableOwnerSQL] = $this->alterTableOwner($tblrs, $owner); - $this->lastExecutedSql .= $TableOwnerSQL ? \sprintf('%s%s', \PHP_EOL, $TableOwnerSQL) : ''; + $this->lastExecutedSql .= $TableOwnerSQL ? \sprintf( + '%s%s', + \PHP_EOL, + $TableOwnerSQL + ) : ''; //dump(['alterTableOwner' => [$TableOwnerStatus,$TableOwnerSQL]]); if (0 !== $TableOwnerStatus) { @@ -1361,7 +1543,11 @@ trait TableTrait // Tablespace $this->fieldClean($tablespace); [$TableTablespaceStatus,$TableTablespaceSQL] = $this->alterTableTablespace($tblrs, $tablespace); - $this->lastExecutedSql .= $TableTablespaceSQL ? \sprintf('%s%s', \PHP_EOL, $TableTablespaceSQL) : ''; + $this->lastExecutedSql .= $TableTablespaceSQL ? \sprintf( + '%s%s', + \PHP_EOL, + $TableTablespaceSQL + ) : ''; //dump(['alterTableTablespace' => [$TableTablespaceStatus,$TableTablespaceSQL]]); if (0 !== $TableTablespaceStatus) { @@ -1371,7 +1557,11 @@ trait TableTrait // Rename $this->fieldClean($name); [$TableNameStatus,$TableNameSQL] = $this->alterTableName($tblrs, $name); - $this->lastExecutedSql .= $TableNameSQL ? \sprintf('%s%s', \PHP_EOL, $TableNameSQL) : ''; + $this->lastExecutedSql .= $TableNameSQL ? \sprintf( + '%s%s', + \PHP_EOL, + $TableNameSQL + ) : ''; //dump(['alterTableName' => [$TableNameStatus,$TableNameSQL]]); if (0 !== $TableNameStatus) { @@ -1381,14 +1571,22 @@ trait TableTrait // Schema $this->fieldClean($schema); [$TableSchemaStatus,$TableSchemaSQL] = $this->alterTableSchema($tblrs, $schema); - $this->lastExecutedSql .= $TableSchemaSQL ? \sprintf('%s%s', \PHP_EOL, $TableSchemaSQL) : ''; + $this->lastExecutedSql .= $TableSchemaSQL ? \sprintf( + '%s%s', + \PHP_EOL, + $TableSchemaSQL + ) : ''; //dump(['alterTableSchema' => [$TableSchemaStatus,$TableSchemaSQL]]); if (0 !== $TableSchemaStatus) { return -7; } [$TableOidsStatus,$TableOidsSQL] = $this->alterTableOids($tblrs, $withoutoids); - $this->lastExecutedSql .= $TableOidsSQL ? \sprintf('%s%s', \PHP_EOL, $TableOidsSQL) : ''; + $this->lastExecutedSql .= $TableOidsSQL ? \sprintf( + '%s%s', + \PHP_EOL, + $TableOidsSQL + ) : ''; //dump(['alterTableOids' => [$TableOidsStatus,$TableOidsSQL]]); if (0 !== $TableOidsStatus) { return -7; @@ -1400,19 +1598,19 @@ trait TableTrait /** * Dumps serial-like columns in the table. * - * @param \PHPPgAdmin\ADORecordSet $atts table attributes - * @param \PHPPgAdmin\ADORecordSet $tblfields table fields object - * @param string $sql The sql sentence - * generated so far - * @param string $col_comments_sql Column comments, - * passed by reference - * @param int $i current counter to - * know if we should - * append a comma to the - * sentence - * @param int $num Table attributes - * count + table - * constraints count + * @param ADORecordSet $atts table attributes + * @param ADORecordSet $tblfields table fields object + * @param string $sql The sql sentence + * generated so far + * @param string $col_comments_sql Column comments, + * passed by reference + * @param int $i current counter to + * know if we should + * append a comma to the + * sentence + * @param int $num Table attributes + * count + table + * constraints count * * @return string original $sql plus appended strings */ @@ -1420,7 +1618,10 @@ trait TableTrait { while (!$atts->EOF) { $this->fieldClean($atts->fields['attname']); - $sql .= " \"{$atts->fields['attname']}\""; + $sql .= \sprintf( + ' "%s"', + $atts->fields['attname'] + ); // Dump SERIAL and BIGSERIAL columns correctly if ($this->phpBool($atts->fields['attisserial']) && ('integer' === $atts->fields['type'] || 'bigint' === $atts->fields['type']) @@ -1440,7 +1641,10 @@ trait TableTrait // Add default if necessary if (null !== $atts->fields['adsrc']) { - $sql .= " DEFAULT {$atts->fields['adsrc']}"; + $sql .= \sprintf( + ' DEFAULT %s', + $atts->fields['adsrc'] + ); } } @@ -1454,7 +1658,13 @@ trait TableTrait // Does this column have a comment? if (null !== $atts->fields['comment']) { $this->clean($atts->fields['comment']); - $col_comments_sql .= "COMMENT ON COLUMN \"{$tblfields->fields['relname']}\".\"{$atts->fields['attname']}\" IS '{$atts->fields['comment']}';\n"; + $col_comments_sql .= \sprintf( + 'COMMENT ON COLUMN "%s"."%s" IS \'%s\'; +', + $tblfields->fields['relname'], + $atts->fields['attname'], + $atts->fields['comment'] + ); } $atts->moveNext(); @@ -1467,20 +1677,23 @@ trait TableTrait /** * Dumps constraints. * - * @param \PHPPgAdmin\ADORecordSet $cons The table constraints - * @param string $table The table to define - * @param string $sql The sql sentence generated so - * far - * @param mixed $i - * @param int $num Table attributes count + table - * constraints count + * @param ADORecordSet $cons The table constraints + * @param string $table The table to define + * @param string $sql The sql sentence generated so + * far + * @param mixed $i + * @param int $num Table attributes count + table + * constraints count */ private function _dumpConstraints($cons, $table, $sql, $i, $num): ?string { // Output all table constraints while (!$cons->EOF) { $this->fieldClean($cons->fields['conname']); - $sql .= " CONSTRAINT \"{$cons->fields['conname']}\" "; + $sql .= \sprintf( + ' CONSTRAINT "%s" ', + $cons->fields['conname'] + ); // Nasty hack to support pre-7.4 PostgreSQL if (null !== $cons->fields['consrc']) { $sql .= $cons->fields['consrc']; @@ -1522,9 +1735,9 @@ trait TableTrait /** * Dumps col statistics. * - * @param \PHPPgAdmin\ADORecordSet $atts table attributes - * @param \PHPPgAdmin\ADORecordSet $tblfields table field attributes - * @param string $sql The sql sentence generated so far + * @param ADORecordSet $atts table attributes + * @param ADORecordSet $tblfields table field attributes + * @param string $sql The sql sentence generated so far */ private function _dumpColStats($atts, $tblfields, $sql): ?string { @@ -1540,7 +1753,14 @@ trait TableTrait $sql .= "\n"; $first = false; } - $sql .= "ALTER TABLE ONLY \"{$tblfields->fields['nspname']}\".\"{$tblfields->fields['relname']}\" ALTER COLUMN \"{$atts->fields['attname']}\" SET STATISTICS {$atts->fields['attstattarget']};\n"; + $sql .= \sprintf( + 'ALTER TABLE ONLY "%s"."%s" ALTER COLUMN "%s" SET STATISTICS %s; +', + $tblfields->fields['nspname'], + $tblfields->fields['relname'], + $atts->fields['attname'], + $atts->fields['attstattarget'] + ); } // Then storage if ($atts->fields['attstorage'] !== $atts->fields['typstorage']) { @@ -1568,7 +1788,14 @@ trait TableTrait return null; } - $sql .= "ALTER TABLE ONLY \"{$tblfields->fields['nspname']}\".\"{$tblfields->fields['relname']}\" ALTER COLUMN \"{$atts->fields['attname']}\" SET STORAGE {$storage};\n"; + $sql .= \sprintf( + 'ALTER TABLE ONLY "%s"."%s" ALTER COLUMN "%s" SET STORAGE %s; +', + $tblfields->fields['nspname'], + $tblfields->fields['relname'], + $atts->fields['attname'], + $storage + ); } $atts->moveNext(); @@ -1580,9 +1807,9 @@ trait TableTrait /** * Dumps privileges. * - * @param \PHPPgAdmin\ADORecordSet $privs The table privileges - * @param \PHPPgAdmin\ADORecordSet $tblfields The table fields definition - * @param string $sql The sql sentence generated so far + * @param ADORecordSet $privs The table privileges + * @param ADORecordSet $tblfields The table fields definition + * @param string $sql The sql sentence generated so far */ private function _dumpPrivileges($privs, $tblfields, $sql): ?string { @@ -1595,7 +1822,12 @@ trait TableTrait * wire-in knowledge about the default public privileges for different * kinds of objects. */ - $sql .= "REVOKE ALL ON TABLE \"{$tblfields->fields['nspname']}\".\"{$tblfields->fields['relname']}\" FROM PUBLIC;\n"; + $sql .= \sprintf( + 'REVOKE ALL ON TABLE "%s"."%s" FROM PUBLIC; +', + $tblfields->fields['nspname'], + $tblfields->fields['relname'] + ); foreach ($privs as $v) { // Get non-GRANT OPTION privs @@ -1610,11 +1842,18 @@ trait TableTrait if ($this->hasGrantOption() && $v[3] !== $tblfields->fields['relowner']) { $grantor = $v[3]; $this->clean($grantor); - $sql .= "SET SESSION AUTHORIZATION '{$grantor}';\n"; + $sql .= \sprintf( + 'SET SESSION AUTHORIZATION \'%s\'; +', + $grantor + ); } // Output privileges with no GRANT OPTION - $sql .= 'GRANT ' . \implode(', ', $nongrant) . " ON TABLE \"{$tblfields->fields['relname']}\" TO "; + $sql .= 'GRANT ' . \implode(', ', $nongrant) . \sprintf( + ' ON TABLE "%s" TO ', + $tblfields->fields['relname'] + ); switch ($v[0]) { case 'public': @@ -1624,12 +1863,20 @@ trait TableTrait case 'user': case 'role': $this->fieldClean($v[1]); - $sql .= "\"{$v[1]}\";\n"; + $sql .= \sprintf( + '"%s"; +', + $v[1] + ); break; case 'group': $this->fieldClean($v[1]); - $sql .= "GROUP \"{$v[1]}\";\n"; + $sql .= \sprintf( + 'GROUP "%s"; +', + $v[1] + ); break; @@ -1656,10 +1903,17 @@ trait TableTrait if ($this->hasGrantOption() && $v[3] !== $tblfields->fields['relowner']) { $grantor = $v[3]; $this->clean($grantor); - $sql .= "SET SESSION AUTHORIZATION '{$grantor}';\n"; + $sql .= \sprintf( + 'SET SESSION AUTHORIZATION \'%s\'; +', + $grantor + ); } - $sql .= 'GRANT ' . \implode(', ', $v[4]) . " ON \"{$tblfields->fields['relname']}\" TO "; + $sql .= 'GRANT ' . \implode(', ', $v[4]) . \sprintf( + ' ON "%s" TO ', + $tblfields->fields['relname'] + ); switch ($v[0]) { case 'public': @@ -1669,12 +1923,18 @@ trait TableTrait case 'user': case 'role': $this->fieldClean($v[1]); - $sql .= "\"{$v[1]}\""; + $sql .= \sprintf( + '"%s"', + $v[1] + ); break; case 'group': $this->fieldClean($v[1]); - $sql .= "GROUP \"{$v[1]}\""; + $sql .= \sprintf( + 'GROUP "%s"', + $v[1] + ); break; @@ -1696,24 +1956,39 @@ trait TableTrait /** * Dumps a create. * - * @param \PHPPgAdmin\ADORecordSet $tblfields table fields object - * @param string $sql The sql sentence generated so far - * @param string $cleanprefix set to '-- ' to avoid issuing DROP statement - * @param mixed $fields + * @param ADORecordSet $tblfields table fields object + * @param string $sql The sql sentence generated so far + * @param string $cleanprefix set to '-- ' to avoid issuing DROP statement + * @param mixed $fields * * @return string original $sql plus appended strings */ private function _dumpCreate($tblfields, $sql, $cleanprefix) { // Set schema search path - $sql .= "SET search_path = \"{$tblfields->fields['nspname']}\", pg_catalog;\n\n"; + $sql .= \sprintf( + 'SET search_path = "%s", pg_catalog; + +', + $tblfields->fields['nspname'] + ); // Begin CREATE TABLE definition $sql .= "-- Definition\n\n"; // DROP TABLE must be fully qualified in case a table with the same name exists $sql .= $cleanprefix . 'DROP TABLE '; - $sql .= "\"{$tblfields->fields['nspname']}\".\"{$tblfields->fields['relname']}\";\n"; - $sql .= "CREATE TABLE \"{$tblfields->fields['nspname']}\".\"{$tblfields->fields['relname']}\" (\n"; + $sql .= \sprintf( + '"%s"."%s"; +', + $tblfields->fields['nspname'], + $tblfields->fields['relname'] + ); + $sql .= \sprintf( + 'CREATE TABLE "%s"."%s" ( +', + $tblfields->fields['nspname'], + $tblfields->fields['relname'] + ); return $sql; } @@ -1724,11 +1999,12 @@ trait TableTrait * @param string $table The name of the table * @param string $c_schema The name of the schema * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ private function _getTableAttributesAll($table, $c_schema) { - $sql = " + $sql = \sprintf( + ' SELECT a.attname, a.attnum, @@ -1756,15 +2032,18 @@ trait TableTrait LEFT JOIN pg_catalog.pg_type t ON a.atttypid=t.oid LEFT JOIN pg_catalog.pg_depend pd ON pd.refobjid=a.attrelid AND pd.refobjsubid=a.attnum - AND pd.deptype='i' + AND pd.deptype=\'i\' LEFT JOIN pg_catalog.pg_class pc ON pd.objid=pc.oid AND pd.classid=pc.tableoid AND pd.refclassid=pc.tableoid - AND pc.relkind='S' - WHERE tbl.tablename='{$table}' - AND tbl.schemaname='{$c_schema}' + AND pc.relkind=\'S\' + WHERE tbl.tablename=\'%s\' + AND tbl.schemaname=\'%s\' AND a.attnum > 0 AND NOT a.attisdropped - ORDER BY a.attnum"; + ORDER BY a.attnum', + $table, + $c_schema + ); return $this->selectSet($sql); } @@ -1776,11 +2055,12 @@ trait TableTrait * @param string $c_schema The schema of the table * @param string $field (optional) The name of a field to return * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ private function _getTableAttribute($table, $c_schema, $field) { - $sql = " + $sql = \sprintf( + ' SELECT a.attname, a.attnum, pg_catalog.format_type(a.atttypid, a.atttypmod) as type, @@ -1795,10 +2075,14 @@ trait TableTrait AND a.attnum=adef.adnum LEFT JOIN pg_catalog.pg_type t ON a.atttypid=t.oid WHERE - a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname=\'%s\' AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE - nspname = '{$c_schema}')) - AND a.attname = '{$field}'"; + nspname = \'%s\')) + AND a.attname = \'%s\'', + $table, + $c_schema, + $field + ); return $this->selectSet($sql); } diff --git a/src/database/databasetraits/TablespaceTrait.php b/src/database/databasetraits/TablespaceTrait.php index 11396e33..f8030426 100644 --- a/src/database/databasetraits/TablespaceTrait.php +++ b/src/database/databasetraits/TablespaceTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for tablespaces manipulation. */ @@ -16,7 +18,7 @@ trait TablespaceTrait * * @param bool $all Include all tablespaces (necessary when moving objects back to the default space) * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getTablespaces($all = false) { @@ -42,15 +44,15 @@ trait TablespaceTrait * * @param string $spcname * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getTablespace($spcname) { $this->clean($spcname); - $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, pg_catalog.pg_tablespace_location(oid) as spclocation, - (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment - FROM pg_catalog.pg_tablespace WHERE spcname='{$spcname}'"; + $sql = \sprintf('SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, pg_catalog.pg_tablespace_location(oid) as spclocation, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid=\'pg_tablespace\'::regclass) AS spccomment + FROM pg_catalog.pg_tablespace WHERE spcname=\'%s\'', $spcname); return $this->selectSet($sql); } @@ -70,14 +72,14 @@ trait TablespaceTrait $this->fieldClean($spcname); $this->clean($spcloc); - $sql = "CREATE TABLESPACE \"{$spcname}\""; + $sql = \sprintf('CREATE TABLESPACE "%s"', $spcname); if ('' !== $spcowner) { $this->fieldClean($spcowner); - $sql .= " OWNER \"{$spcowner}\""; + $sql .= \sprintf(' OWNER "%s"', $spcowner); } - $sql .= " LOCATION '{$spcloc}'"; + $sql .= \sprintf(' LOCATION \'%s\'', $spcloc); $status = $this->execute($sql); @@ -120,7 +122,7 @@ trait TablespaceTrait } // Owner - $sql = "ALTER TABLESPACE \"{$spcname}\" OWNER TO \"{$owner}\""; + $sql = \sprintf('ALTER TABLESPACE "%s" OWNER TO "%s"', $spcname, $owner); $status = $this->execute($sql); if (0 !== $status) { @@ -131,7 +133,7 @@ trait TablespaceTrait // Rename (only if name has changed) if ($name !== $spcname) { - $sql = "ALTER TABLESPACE \"{$spcname}\" RENAME TO \"{$name}\""; + $sql = \sprintf('ALTER TABLESPACE "%s" RENAME TO "%s"', $spcname, $name); $status = $this->execute($sql); if (0 !== $status) { @@ -160,13 +162,13 @@ trait TablespaceTrait * * @param string $spcname The name of the domain to drop * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropTablespace($spcname) { $this->fieldClean($spcname); - $sql = "DROP TABLESPACE \"{$spcname}\""; + $sql = \sprintf('DROP TABLESPACE "%s"', $spcname); return $this->execute($sql); } diff --git a/src/database/databasetraits/TriggerTrait.php b/src/database/databasetraits/TriggerTrait.php index e6d8c634..a5e1f898 100644 --- a/src/database/databasetraits/TriggerTrait.php +++ b/src/database/databasetraits/TriggerTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for trigger and rules manipulation. */ @@ -17,7 +19,7 @@ trait TriggerTrait * @param string $table The name of a table whose triggers to retrieve * @param string $trigger The name of the trigger to retrieve * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getTrigger($table, $trigger) { @@ -26,12 +28,12 @@ trait TriggerTrait $this->clean($table); $this->clean($trigger); - $sql = " + $sql = \sprintf(' SELECT * FROM pg_catalog.pg_trigger t, pg_catalog.pg_class c - WHERE t.tgrelid=c.oid AND c.relname='{$table}' AND t.tgname='{$trigger}' + WHERE t.tgrelid=c.oid AND c.relname=\'%s\' AND t.tgname=\'%s\' AND c.relnamespace=( SELECT oid FROM pg_catalog.pg_namespace - WHERE nspname='{$c_schema}')"; + WHERE nspname=\'%s\')', $table, $trigger, $c_schema); return $this->selectSet($sql); } @@ -47,7 +49,7 @@ trait TriggerTrait * @param string $tgfrequency * @param string $tgargs The function arguments * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function createTrigger($tgname, $table, $tgproc, $tgtime, $tgevent, $tgfrequency, $tgargs) { @@ -58,9 +60,9 @@ trait TriggerTrait $this->fieldClean($tgproc); /* No Statement Level Triggers in PostgreSQL (by now) */ - $sql = "CREATE TRIGGER \"{$tgname}\" {$tgtime} - {$tgevent} ON \"{$f_schema}\".\"{$table}\" - FOR EACH {$tgfrequency} EXECUTE PROCEDURE \"{$tgproc}\"({$tgargs})"; + $sql = \sprintf('CREATE TRIGGER "%s" %s + %s ON "%s"."%s" + FOR EACH %s EXECUTE PROCEDURE "%s"(%s)', $tgname, $tgtime, $tgevent, $f_schema, $table, $tgfrequency, $tgproc, $tgargs); return $this->execute($sql); } @@ -72,7 +74,7 @@ trait TriggerTrait * @param string $trigger The name of the trigger to alter * @param string $name The new name for the trigger * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function alterTrigger($table, $trigger, $name) { @@ -82,7 +84,7 @@ trait TriggerTrait $this->fieldClean($trigger); $this->fieldClean($name); - $sql = "ALTER TRIGGER \"{$trigger}\" ON \"{$f_schema}\".\"{$table}\" RENAME TO \"{$name}\""; + $sql = \sprintf('ALTER TRIGGER "%s" ON "%s"."%s" RENAME TO "%s"', $trigger, $f_schema, $table, $name); return $this->execute($sql); } @@ -94,7 +96,7 @@ trait TriggerTrait * @param string $table The table from which to drop the trigger * @param bool $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropTrigger($tgname, $table, $cascade) { @@ -103,7 +105,7 @@ trait TriggerTrait $this->fieldClean($tgname); $this->fieldClean($table); - $sql = "DROP TRIGGER \"{$tgname}\" ON \"{$f_schema}\".\"{$table}\""; + $sql = \sprintf('DROP TRIGGER "%s" ON "%s"."%s"', $tgname, $f_schema, $table); if ($cascade) { $sql .= ' CASCADE'; @@ -118,7 +120,7 @@ trait TriggerTrait * @param string $tgname The name of the trigger to enable * @param string $table The table in which to enable the trigger * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function enableTrigger($tgname, $table) { @@ -127,7 +129,7 @@ trait TriggerTrait $this->fieldClean($tgname); $this->fieldClean($table); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ENABLE TRIGGER \"{$tgname}\""; + $sql = \sprintf('ALTER TABLE "%s"."%s" ENABLE TRIGGER "%s"', $f_schema, $table, $tgname); return $this->execute($sql); } @@ -138,7 +140,7 @@ trait TriggerTrait * @param string $tgname The name of the trigger to disable * @param string $table The table in which to disable the trigger * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function disableTrigger($tgname, $table) { @@ -147,7 +149,7 @@ trait TriggerTrait $this->fieldClean($tgname); $this->fieldClean($table); - $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" DISABLE TRIGGER \"{$tgname}\""; + $sql = \sprintf('ALTER TABLE "%s"."%s" DISABLE TRIGGER "%s"', $f_schema, $table, $tgname); return $this->execute($sql); } @@ -189,7 +191,7 @@ trait TriggerTrait * @param bool $replace (optional) True to replace existing rule, false * otherwise * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function createRule($name, $event, $table, $where, $instead, $type, $action, $replace = false) { @@ -208,10 +210,10 @@ trait TriggerTrait $sql .= ' OR REPLACE'; } - $sql .= " RULE \"{$name}\" AS ON {$event} TO \"{$f_schema}\".\"{$table}\""; + $sql .= \sprintf(' RULE "%s" AS ON %s TO "%s"."%s"', $name, $event, $f_schema, $table); // Can't escape WHERE clause if ('' !== $where) { - $sql .= " WHERE {$where}"; + $sql .= \sprintf(' WHERE %s', $where); } $sql .= ' DO'; @@ -223,7 +225,7 @@ trait TriggerTrait if ('NOTHING' === $type) { $sql .= ' NOTHING'; } else { - $sql .= " ({$action})"; + $sql .= \sprintf(' (%s)', $action); } return $this->execute($sql); @@ -236,7 +238,7 @@ trait TriggerTrait * @param string $relation The relation from which to drop * @param string $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropRule($rule, $relation, $cascade) { @@ -245,7 +247,7 @@ trait TriggerTrait $this->fieldClean($rule); $this->fieldClean($relation); - $sql = "DROP RULE \"{$rule}\" ON \"{$f_schema}\".\"{$relation}\""; + $sql = \sprintf('DROP RULE "%s" ON "%s"."%s"', $rule, $f_schema, $relation); if ($cascade) { $sql .= ' CASCADE'; diff --git a/src/database/databasetraits/TypeTrait.php b/src/database/databasetraits/TypeTrait.php index b52b28f3..2aa7dd93 100644 --- a/src/database/databasetraits/TypeTrait.php +++ b/src/database/databasetraits/TypeTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use ADORecordSet; + /** * Common trait for types manipulation. */ @@ -39,7 +41,7 @@ trait TypeTrait $temp = 'character'; if (1 < $len) { - $temp .= "({$len})"; + $temp .= \sprintf('(%s)', $len); } } elseif ('varchar' === $typname) { $temp = 'character varying'; @@ -54,7 +56,7 @@ trait TypeTrait $tmp_typmod = $typmod - $varhdrsz; $precision = ($tmp_typmod >> 16) & 0xffff; $scale = $tmp_typmod & 0xffff; - $temp .= "({$precision}, {$scale})"; + $temp .= \sprintf('(%s, %s)', $precision, $scale); } } else { $temp = $typname; @@ -73,14 +75,14 @@ trait TypeTrait * * @param string $typname The name of the view to retrieve * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getType($typname) { $this->clean($typname); - $sql = "SELECT typtype, typbyval, typname, typinput AS typin, typoutput AS typout, typlen, typalign - FROM pg_type WHERE typname='{$typname}'"; + $sql = \sprintf('SELECT typtype, typbyval, typname, typinput AS typin, typoutput AS typout, typlen, typalign + FROM pg_type WHERE typname=\'%s\'', $typname); return $this->selectSet($sql); } @@ -92,7 +94,7 @@ trait TypeTrait * @param bool $tabletypes If true, will include table types * @param bool $domains If true, will include domains * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getTypes($all = false, $tabletypes = false, $domains = false) { @@ -101,7 +103,7 @@ trait TypeTrait } else { $c_schema = $this->_schema; $this->clean($c_schema); - $where = "n.nspname = '{$c_schema}'"; + $where = \sprintf('n.nspname = \'%s\'', $c_schema); } // Never show system table types $where2 = "AND c.relnamespace NOT IN (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname LIKE 'pg@_%' ESCAPE '@')"; @@ -118,20 +120,20 @@ trait TypeTrait $where .= " AND t.typtype != 'd'"; } - $sql = "SELECT + $sql = \sprintf('SELECT t.typname AS basename, pg_catalog.format_type(t.oid, NULL) AS typname, pu.usename AS typowner, t.typtype, - pg_catalog.obj_description(t.oid, 'pg_type') AS typcomment + pg_catalog.obj_description(t.oid, \'pg_type\') AS typcomment FROM (pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace) LEFT JOIN pg_catalog.pg_user pu ON t.typowner = pu.usesysid - WHERE (t.typrelid = 0 OR (SELECT c.relkind IN ({$tqry}) FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid {$where2})) - AND t.typname !~ '^_' - AND {$where} + WHERE (t.typrelid = 0 OR (SELECT c.relkind IN (%s) FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid %s)) + AND t.typname !~ \'^_\' + AND %s ORDER BY typname - "; + ', $tqry, $where2, $where); return $this->selectSet($sql); } @@ -150,7 +152,7 @@ trait TypeTrait * @param string $typalign * @param string $typstorage * - * @return \ADORecordSet|int + * @return ADORecordSet|int * * @internal param $ ... */ @@ -172,22 +174,22 @@ trait TypeTrait $this->fieldClean($typin); $this->fieldClean($typout); - $sql = " - CREATE TYPE \"{$f_schema}\".\"{$typname}\" ( - INPUT = \"{$typin}\", - OUTPUT = \"{$typout}\", - INTERNALLENGTH = {$typlen}"; + $sql = \sprintf(' + CREATE TYPE "%s"."%s" ( + INPUT = "%s", + OUTPUT = "%s", + INTERNALLENGTH = %s', $f_schema, $typname, $typin, $typout, $typlen); if ('' !== $typdef) { - $sql .= ", DEFAULT = {$typdef}"; + $sql .= \sprintf(', DEFAULT = %s', $typdef); } if ('' !== $typelem) { - $sql .= ", ELEMENT = {$typelem}"; + $sql .= \sprintf(', ELEMENT = %s', $typelem); } if ('' !== $typdelim) { - $sql .= ", DELIMITER = {$typdelim}"; + $sql .= \sprintf(', DELIMITER = %s', $typdelim); } if ($typbyval) { @@ -195,11 +197,11 @@ trait TypeTrait } if ('' !== $typalign) { - $sql .= ", ALIGNMENT = {$typalign}"; + $sql .= \sprintf(', ALIGNMENT = %s', $typalign); } if ('' !== $typstorage) { - $sql .= ", STORAGE = {$typstorage}"; + $sql .= \sprintf(', STORAGE = %s', $typstorage); } $sql .= ')'; @@ -213,7 +215,7 @@ trait TypeTrait * @param string $typname The name of the type to drop * @param bool $cascade True to cascade drop, false to restrict * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function dropType($typname, $cascade) { @@ -221,7 +223,7 @@ trait TypeTrait $this->fieldClean($f_schema); $this->fieldClean($typname); - $sql = "DROP TYPE \"{$f_schema}\".\"{$typname}\""; + $sql = \sprintf('DROP TYPE "%s"."%s"', $f_schema, $typname); if ($cascade) { $sql .= ' CASCADE'; @@ -263,7 +265,7 @@ trait TypeTrait $this->clean($values[$i]); } - $sql = "CREATE TYPE \"{$f_schema}\".\"{$name}\" AS ENUM ('"; + $sql = \sprintf('CREATE TYPE "%s"."%s" AS ENUM (\'', $f_schema, $name); $sql .= \implode("','", $values); $sql .= "')"; @@ -293,15 +295,15 @@ trait TypeTrait * * @param string $name * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getEnumValues($name) { $this->clean($name); - $sql = "SELECT enumlabel AS enumval + $sql = \sprintf('SELECT enumlabel AS enumval FROM pg_catalog.pg_type t JOIN pg_catalog.pg_enum e ON (t.oid=e.enumtypid) - WHERE t.typname = '{$name}' ORDER BY e.oid"; + WHERE t.typname = \'%s\' ORDER BY e.oid', $name); return $this->selectSet($sql); } @@ -337,7 +339,7 @@ trait TypeTrait $found = false; $first = true; $comment_sql = ''; // Accumulate comments for the columns - $sql = "CREATE TYPE \"{$f_schema}\".\"{$name}\" AS ("; + $sql = \sprintf('CREATE TYPE "%s"."%s" AS (', $f_schema, $name); for ($i = 0; $i < $fields; ++$i) { $this->fieldClean($field[$i]); @@ -363,10 +365,10 @@ trait TypeTrait case 'timestamp with time zone': case 'timestamp without time zone': $qual = \mb_substr($type[$i], 9); - $sql .= "\"{$field[$i]}\" timestamp"; + $sql .= \sprintf('"%s" timestamp', $field[$i]); if ('' !== $length[$i]) { - $sql .= "({$length[$i]})"; + $sql .= \sprintf('(%s)', $length[$i]); } $sql .= $qual; @@ -375,10 +377,10 @@ trait TypeTrait case 'time with time zone': case 'time without time zone': $qual = \mb_substr($type[$i], 4); - $sql .= "\"{$field[$i]}\" time"; + $sql .= \sprintf('"%s" time', $field[$i]); if ('' !== $length[$i]) { - $sql .= "({$length[$i]})"; + $sql .= \sprintf('(%s)', $length[$i]); } $sql .= $qual; @@ -386,10 +388,10 @@ trait TypeTrait break; default: - $sql .= "\"{$field[$i]}\" {$type[$i]}"; + $sql .= \sprintf('"%s" %s', $field[$i], $type[$i]); if ('' !== $length[$i]) { - $sql .= "({$length[$i]})"; + $sql .= \sprintf('(%s)', $length[$i]); } } // Add array qualifier if necessary @@ -398,7 +400,8 @@ trait TypeTrait } if ('' !== $colcomment[$i]) { - $comment_sql .= "COMMENT ON COLUMN \"{$f_schema}\".\"{$name}\".\"{$field[$i]}\" IS '{$colcomment[$i]}';\n"; + $comment_sql .= \sprintf('COMMENT ON COLUMN "%s"."%s"."%s" IS \'%s\'; +', $f_schema, $name, $field[$i], $colcomment[$i]); } $found = true; @@ -444,7 +447,7 @@ trait TypeTrait /** * Returns a list of all casts in the database. * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getCasts() { @@ -460,14 +463,14 @@ trait TypeTrait '; } - $sql = " + $sql = \sprintf(' SELECT c.castsource::pg_catalog.regtype AS castsource, c.casttarget::pg_catalog.regtype AS casttarget, CASE WHEN c.castfunc=0 THEN NULL ELSE c.castfunc::pg_catalog.regprocedure END AS castfunc, c.castcontext, - obj_description(c.oid, 'pg_cast') as castcomment + obj_description(c.oid, \'pg_cast\') as castcomment FROM (pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p ON c.castfunc=p.oid JOIN pg_catalog.pg_namespace n3 ON p.pronamespace=n3.oid), pg_catalog.pg_type t1, @@ -479,9 +482,9 @@ trait TypeTrait AND c.casttarget=t2.oid AND t1.typnamespace=n1.oid AND t2.typnamespace=n2.oid - {$where} + %s ORDER BY 1, 2 - "; + ', $where); return $this->selectSet($sql); } @@ -489,24 +492,24 @@ trait TypeTrait /** * Returns a list of all conversions in the database. * - * @return \ADORecordSet|int + * @return ADORecordSet|int */ public function getConversions() { $c_schema = $this->_schema; $this->clean($c_schema); - $sql = " + $sql = \sprintf(' SELECT c.conname, pg_catalog.pg_encoding_to_char(c.conforencoding) AS conforencoding, pg_catalog.pg_encoding_to_char(c.contoencoding) AS contoencoding, c.condefault, - pg_catalog.obj_description(c.oid, 'pg_conversion') AS concomment + pg_catalog.obj_description(c.oid, \'pg_conversion\') AS concomment FROM pg_catalog.pg_conversion c, pg_catalog.pg_namespace n WHERE n.oid = c.connamespace - AND n.nspname='{$c_schema}' + AND n.nspname=\'%s\' ORDER BY 1; - "; + ', $c_schema); return $this->selectSet($sql); } diff --git a/src/database/databasetraits/ViewTrait.php b/src/database/databasetraits/ViewTrait.php index 41fe4c2a..ed74aace 100644 --- a/src/database/databasetraits/ViewTrait.php +++ b/src/database/databasetraits/ViewTrait.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Database\Traits; +use PHPPgAdmin\ADORecordSet; + /** * Common trait for views manipulation. */ @@ -14,19 +16,19 @@ trait ViewTrait /** * Returns a list of all views in the database. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getViews() { $c_schema = $this->_schema; $this->clean($c_schema); - $sql = " + $sql = \sprintf(' SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, - pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment + pg_catalog.obj_description(c.oid, \'pg_class\') AS relcomment FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) - WHERE (n.nspname='{$c_schema}') AND (c.relkind = 'v'::\"char\") - ORDER BY relname"; + WHERE (n.nspname=\'%s\') AND (c.relkind = \'v\'::"char") + ORDER BY relname', $c_schema); return $this->selectSet($sql); } @@ -34,19 +36,19 @@ trait ViewTrait /** * Returns a list of all materialized views in the database. * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getMaterializedViews() { $c_schema = $this->_schema; $this->clean($c_schema); - $sql = " + $sql = \sprintf(' SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, - pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment + pg_catalog.obj_description(c.oid, \'pg_class\') AS relcomment FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) - WHERE (n.nspname='{$c_schema}') AND (c.relkind = 'm'::\"char\") - ORDER BY relname"; + WHERE (n.nspname=\'%s\') AND (c.relkind = \'m\'::"char") + ORDER BY relname', $c_schema); return $this->selectSet($sql); } @@ -97,7 +99,7 @@ trait ViewTrait $obj_type = $materialized ? ' MATERIALIZED VIEW ' : ' VIEW '; - $sql .= $obj_type . " \"{$f_schema}\".\"{$viewname}\" AS {$definition}"; + $sql .= $obj_type . \sprintf(' "%s"."%s" AS %s', $f_schema, $viewname, $definition); $status = $this->execute($sql); @@ -163,7 +165,7 @@ trait ViewTrait * * @param string $view The name of the view or materialized to retrieve * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function getView($view) { @@ -171,14 +173,14 @@ trait ViewTrait $this->clean($c_schema); $this->clean($view); - $sql = " + $sql = \sprintf(' SELECT c.relname, n.nspname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, pg_catalog.pg_get_viewdef(c.oid, true) AS vwdefinition, - pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment, + pg_catalog.obj_description(c.oid, \'pg_class\') AS relcomment, c.relkind FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) - WHERE (c.relname = '{$view}') AND n.nspname='{$c_schema}'"; + WHERE (c.relname = \'%s\') AND n.nspname=\'%s\'', $view, $c_schema); return $this->selectSet($sql); } @@ -186,10 +188,10 @@ trait ViewTrait /** * Alter a view's owner. * - * @param \PHPPgAdmin\ADORecordSet $vwrs The view recordSet returned by getView() - * @param null|string $owner + * @param ADORecordSet $vwrs The view recordSet returned by getView() + * @param null|string $owner * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int * * @internal param $name new view's owner */ @@ -203,7 +205,7 @@ trait ViewTrait // If owner has been changed, then do the alteration. We are // careful to avoid this generally as changing owner is a // superuser only function. - $sql = "ALTER {$type} \"{$f_schema}\".\"{$vwrs->fields['relname']}\" OWNER TO \"{$owner}\""; + $sql = \sprintf('ALTER %s "%s"."%s" OWNER TO "%s"', $type, $f_schema, $vwrs->fields['relname'], $owner); return $this->execute($sql); } @@ -214,10 +216,10 @@ trait ViewTrait /** * Rename a view. * - * @param \PHPPgAdmin\ADORecordSet $vwrs The view recordSet returned by getView() - * @param string $name The new view's name + * @param ADORecordSet $vwrs The view recordSet returned by getView() + * @param string $name The new view's name * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function alterViewName($vwrs, $name) { @@ -227,7 +229,7 @@ trait ViewTrait if (!empty($name) && ($name !== $vwrs->fields['relname'])) { $f_schema = $this->_schema; $this->fieldClean($f_schema); - $sql = "ALTER {$type} \"{$f_schema}\".\"{$vwrs->fields['relname']}\" RENAME TO \"{$name}\""; + $sql = \sprintf('ALTER %s "%s"."%s" RENAME TO "%s"', $type, $f_schema, $vwrs->fields['relname'], $name); $status = $this->execute($sql); if (0 === $status) { @@ -243,10 +245,10 @@ trait ViewTrait /** * Alter a view's schema. * - * @param \PHPPgAdmin\ADORecordSet $vwrs The view recordSet returned by getView() - * @param string $schema + * @param ADORecordSet $vwrs The view recordSet returned by getView() + * @param string $schema * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int * * @internal param The $name new view's schema */ @@ -260,7 +262,7 @@ trait ViewTrait $this->fieldClean($f_schema); // If tablespace has been changed, then do the alteration. We // don't want to do this unnecessarily. - $sql = "ALTER {$type} \"{$f_schema}\".\"{$vwrs->fields['relname']}\" SET SCHEMA \"{$schema}\""; + $sql = \sprintf('ALTER %s "%s"."%s" SET SCHEMA "%s"', $type, $f_schema, $vwrs->fields['relname'], $schema); return $this->execute($sql); } @@ -274,7 +276,7 @@ trait ViewTrait * @param string $viewname The name of the view to drop * @param string $cascade True to cascade drop, false to restrict * - * @return int|\PHPPgAdmin\ADORecordSet + * @return ADORecordSet|int */ public function dropView($viewname, $cascade) { @@ -285,7 +287,7 @@ trait ViewTrait $this->fieldClean($f_schema); $this->fieldClean($viewname); - $sql = "DROP {$type} \"{$f_schema}\".\"{$viewname}\""; + $sql = \sprintf('DROP %s "%s"."%s"', $type, $f_schema, $viewname); if ($cascade) { $sql .= ' CASCADE'; @@ -316,11 +318,11 @@ trait ViewTrait * Protected method which alter a view * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION. * - * @param \PHPPgAdmin\ADORecordSet $vwrs The view recordSet returned by getView() - * @param string $name The new name for the view - * @param string $owner The new owner for the view - * @param string $schema Schema name - * @param string $comment The comment on the view + * @param ADORecordSet $vwrs The view recordSet returned by getView() + * @param string $name The new name for the view + * @param string $owner The new owner for the view + * @param string $schema Schema name + * @param string $comment The comment on the view * * @return int 0 success */ diff --git a/src/decorators/CallbackDecorator.php b/src/decorators/CallbackDecorator.php index 4c4d0cc9..f6cd2bd5 100644 --- a/src/decorators/CallbackDecorator.php +++ b/src/decorators/CallbackDecorator.php @@ -6,9 +6,11 @@ namespace PHPPgAdmin\Decorators; +use Closure; + class CallbackDecorator extends Decorator { - public function __construct(\Closure $callback, $param = null) + public function __construct(Closure $callback, $param = null) { $this->fn = $callback; $this->p = $param; diff --git a/src/decorators/Decorator.php b/src/decorators/Decorator.php index c23f75d8..14bddc0e 100644 --- a/src/decorators/Decorator.php +++ b/src/decorators/Decorator.php @@ -6,9 +6,12 @@ namespace PHPPgAdmin\Decorators; +use Closure; +use PHPPgAdmin\Traits\HelperTrait; + class Decorator { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; public $container; @@ -56,10 +59,10 @@ class Decorator } /** - * @param \Closure $callback - * @param (mixed|string)[]|null $params + * @param Closure $callback + * @param ((mixed|string)[]|null) $params */ - public static function callback(\Closure $callback, ?array $params = null) + public static function callback(Closure $callback, ?array $params = null) { return new CallbackDecorator($callback, $params); } @@ -75,7 +78,7 @@ class Decorator public static function concat(/* ... */) { - return new \PHPPgAdmin\Decorators\ConcatDecorator(\func_get_args()); + return new ConcatDecorator(\func_get_args()); } /** @@ -84,7 +87,7 @@ class Decorator */ public static function replace(string $str, array $params) { - return new \PHPPgAdmin\Decorators\ReplaceDecorator($str, $params); + return new ReplaceDecorator($str, $params); } /** diff --git a/src/decorators/RedirectUrlDecorator.php b/src/decorators/RedirectUrlDecorator.php index cfb2570d..3ff70003 100644 --- a/src/decorators/RedirectUrlDecorator.php +++ b/src/decorators/RedirectUrlDecorator.php @@ -36,7 +36,7 @@ class RedirectUrlDecorator extends Decorator $varvalue = Decorator::value_url($value, $fields); if ('subject' === $varname) { - $url = \str_replace('redirect?', 'redirect/' . $varvalue . '?', $url); + $url = \str_replace('redirect?', 'redirect/' . $varvalue . '?', $url); } else { $url .= $sep . $varname . '=' . $varvalue; } @@ -46,7 +46,7 @@ class RedirectUrlDecorator extends Decorator } if ('' !== containerInstance()->subFolder && (0 === \mb_strpos($url, '/')) && (false === \mb_strpos($url, \containerInstance()->subFolder))) { - // $url = \str_replace('//', '/', \containerInstance()->subFolder . '/' . $url); + // $url = \str_replace('//', '/', \containerInstance()->subFolder . '/' . $url); } return \str_replace('.php', '', $url); diff --git a/src/help/PostgresDoc.php b/src/help/PostgresDoc.php index cfea2190..27d7ad08 100644 --- a/src/help/PostgresDoc.php +++ b/src/help/PostgresDoc.php @@ -6,6 +6,8 @@ namespace PHPPgAdmin\Help; +use PHPPgAdmin\Traits\HelperTrait; + /** * Help links for PostgreSQL 7.4 documentation. * @@ -13,7 +15,7 @@ namespace PHPPgAdmin\Help; */ class PostgresDoc { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; /** * @var float diff --git a/src/lib.inc.php b/src/lib.inc.php index 65be07a9..b8c81cbb 100644 --- a/src/lib.inc.php +++ b/src/lib.inc.php @@ -4,7 +4,15 @@ * PHPPgAdmin 6.1.3 */ -function getAppInstance(): \Slim\App +use PHPPgAdmin\ContainerUtils; +use Slim\App; +use Slim\Http\Request; +use Slim\Http\Response; + +/** + * PHPPgAdmin 6.1.3. + */ +function getAppInstance(): App { $subfolder = ''; // Check to see if the configuration file exists, if not, explain @@ -47,29 +55,29 @@ function getAppInstance(): \Slim\App $conf['IN_TEST'] = IN_TEST; // Fetch App and DI Container - $app = \PHPPgAdmin\ContainerUtils::getAppInstance($conf); + $app = ContainerUtils::getAppInstance($conf); return $app; } -function containerInstance(): \PHPPgAdmin\ContainerUtils +function containerInstance(): ContainerUtils { $app = getAppInstance(); $container = $app->getContainer(); - if (!$container instanceof \PHPPgAdmin\ContainerUtils) { + if (!$container instanceof ContainerUtils) { \trigger_error('App Container must be an instance of \\Slim\\Container', \E_USER_ERROR); } return $container; } -function requestInstance(): \Slim\Http\Request +function requestInstance(): Request { return \containerInstance()->request; } -function responseInstance(): \Slim\Http\Response +function responseInstance(): Response { return \containerInstance()->response; } diff --git a/src/middleware/Middleware.php b/src/middleware/Middleware.php index 9b0b0939..d514f4e5 100644 --- a/src/middleware/Middleware.php +++ b/src/middleware/Middleware.php @@ -6,9 +6,11 @@ namespace PHPPgAdmin\Middleware; +use PHPPgAdmin\Traits\HelperTrait; + class Middleware { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; protected $container; diff --git a/src/middleware/PopulateRequestResponse.php b/src/middleware/PopulateRequestResponse.php index 84e55aee..d3a7f5c6 100644 --- a/src/middleware/PopulateRequestResponse.php +++ b/src/middleware/PopulateRequestResponse.php @@ -6,17 +6,24 @@ namespace PHPPgAdmin\Middleware; +use PHPPgAdmin\ContainerUtils; +use PHPPgAdmin\Traits\HelperTrait; +use PHPPgAdmin\ViewManager; +use Slim\Http\Request; +use Slim\Http\Response; +use Slim\Http\Uri; + /** * Set the requestobj and responseobj properties of the container * as the value of $request and $response, which already contain the route. */ class PopulateRequestResponse extends Middleware { - use \PHPPgAdmin\Traits\HelperTrait; + use HelperTrait; public function __invoke( - \Slim\Http\Request $request, - \Slim\Http\Response $response, + Request $request, + Response $response, $next ) { $container = $this->container; @@ -88,12 +95,12 @@ class PopulateRequestResponse extends Middleware return $response; } - private function getUri(\Slim\Http\Request $request): \Slim\Http\Uri + private function getUri(Request $request): Uri { return $request->getUri(); } - private function getViewManager(\PHPPgAdmin\ContainerUtils $container): \PHPPgAdmin\ViewManager + private function getViewManager(ContainerUtils $container): ViewManager { return $container->get('view'); } diff --git a/src/traits/AdminTrait.php b/src/traits/AdminTrait.php index 4f46029d..0890b083 100644 --- a/src/traits/AdminTrait.php +++ b/src/traits/AdminTrait.php @@ -38,7 +38,10 @@ trait AdminTrait foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfclustertable'], $this->misc->printVal($a['table'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfclustertable'], + $this->misc->printVal($a['table']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } // END if multi cluster } else { @@ -48,10 +51,16 @@ trait AdminTrait echo '
    " . \PHP_EOL; if ('table' === $type) { - echo '

    ', \sprintf($this->lang['strconfclustertable'], $this->misc->printVal($_REQUEST['object'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfclustertable'], + $this->misc->printVal($_REQUEST['object']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } else { - echo '

    ', \sprintf($this->lang['strconfclusterdatabase'], $this->misc->printVal($_REQUEST['object'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfclusterdatabase'], + $this->misc->printVal($_REQUEST['object']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } } @@ -90,7 +99,10 @@ trait AdminTrait foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfreindextable'], $this->misc->printVal($a['table'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfreindextable'], + $this->misc->printVal($a['table']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } // END if multi reindex } else { @@ -100,10 +112,16 @@ trait AdminTrait echo '" . \PHP_EOL; if ('table' === $type) { - echo '

    ', \sprintf($this->lang['strconfreindextable'], $this->misc->printVal($_REQUEST['object'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfreindextable'], + $this->misc->printVal($_REQUEST['object']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } else { - echo '

    ', \sprintf($this->lang['strconfreindexdatabase'], $this->misc->printVal($_REQUEST['object'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfreindexdatabase'], + $this->misc->printVal($_REQUEST['object']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } } @@ -145,7 +163,10 @@ trait AdminTrait foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfanalyzetable'], $this->misc->printVal($a['table'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfanalyzetable'], + $this->misc->printVal($a['table']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } // END if multi analyze } else { @@ -155,10 +176,16 @@ trait AdminTrait echo '" . \PHP_EOL; if ('table' === $type) { - echo '

    ', \sprintf($this->lang['strconfanalyzetable'], $this->misc->printVal($_REQUEST['object'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfanalyzetable'], + $this->misc->printVal($_REQUEST['object']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } else { - echo '

    ', \sprintf($this->lang['strconfanalyzedatabase'], $this->misc->printVal($_REQUEST['object'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfanalyzedatabase'], + $this->misc->printVal($_REQUEST['object']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } } @@ -193,7 +220,10 @@ trait AdminTrait foreach ($_REQUEST['ma'] as $v) { $a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES)); - echo '

    ', \sprintf($this->lang['strconfvacuumtable'], $this->misc->printVal($a['table'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfvacuumtable'], + $this->misc->printVal($a['table']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } } else { @@ -204,10 +234,16 @@ trait AdminTrait echo '" . \PHP_EOL; if ('table' === $type) { - echo '

    ', \sprintf($this->lang['strconfvacuumtable'], $this->misc->printVal($_REQUEST['object'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfvacuumtable'], + $this->misc->printVal($_REQUEST['object']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } else { - echo '

    ', \sprintf($this->lang['strconfvacuumdatabase'], $this->misc->printVal($_REQUEST['object'])), '

    ' . \PHP_EOL; + echo '

    ', \sprintf( + $this->lang['strconfvacuumdatabase'], + $this->misc->printVal($_REQUEST['object']) + ), '

    ' . \PHP_EOL; echo '' . \PHP_EOL; } } @@ -622,7 +658,10 @@ trait AdminTrait ); if (0 === $status) { - $this->doAdmin($type, \sprintf($this->lang['strsetvacuumtablesaved'], $_REQUEST['table'])); + $this->doAdmin($type, \sprintf( + $this->lang['strsetvacuumtablesaved'], + $_REQUEST['table'] + )); } else { $this->confirmEditAutovacuum($type, $this->lang['strsetvacuumtablefail']); } @@ -646,9 +685,15 @@ trait AdminTrait $status = $data->dropAutovacuum($_POST['table']); if (0 === $status) { - $this->doAdmin($type, \sprintf($this->lang['strvacuumtablereset'], $this->misc->printVal($_POST['table']))); + $this->doAdmin($type, \sprintf( + $this->lang['strvacuumtablereset'], + $this->misc->printVal($_POST['table']) + )); } else { - $this->doAdmin($type, \sprintf($this->lang['strdelvacuumtablefail'], $this->misc->printVal($_POST['table']))); + $this->doAdmin($type, \sprintf( + $this->lang['strdelvacuumtablefail'], + $this->misc->printVal($_POST['table']) + )); } } -- cgit v1.2.3