Translated using Weblate (Portuguese)
[phpmyadmin.git] / src / Config / Settings.php
blobcacca8779b70441890c9f15bab735d77d99a567d
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Config;
7 use PhpMyAdmin\Config\Settings\Console;
8 use PhpMyAdmin\Config\Settings\Debug;
9 use PhpMyAdmin\Config\Settings\Export;
10 use PhpMyAdmin\Config\Settings\Import;
11 use PhpMyAdmin\Config\Settings\Schema;
12 use PhpMyAdmin\Config\Settings\Server;
13 use PhpMyAdmin\Config\Settings\SqlQueryBox;
14 use PhpMyAdmin\Config\Settings\Transformations;
16 use function __;
17 use function array_map;
18 use function defined;
19 use function in_array;
20 use function is_array;
21 use function is_int;
22 use function is_string;
23 use function min;
24 use function sprintf;
26 use const DIRECTORY_SEPARATOR;
27 use const ROOT_PATH;
28 use const TEMP_DIR;
29 use const VERSION_CHECK_DEFAULT;
31 // phpcs:disable Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
33 /**
34 * @psalm-immutable
35 * @psalm-import-type ConsoleSettingsType from Console
36 * @psalm-import-type DebugSettingsType from Debug
37 * @psalm-import-type ExportSettingsType from Export
38 * @psalm-import-type ImportSettingsType from Import
39 * @psalm-import-type SchemaSettingsType from Schema
40 * @psalm-import-type ServerSettingsType from Server
41 * @psalm-import-type SqlQueryBoxSettingsType from SqlQueryBox
42 * @psalm-import-type TransformationsSettingsType from Transformations
43 * @psalm-type SettingsType = array{
44 * PmaAbsoluteUri: string,
45 * AuthLog: string,
46 * AuthLogSuccess: bool,
47 * PmaNoRelation_DisableWarning: bool,
48 * SuhosinDisableWarning: bool,
49 * LoginCookieValidityDisableWarning: bool,
50 * ReservedWordDisableWarning: bool,
51 * TranslationWarningThreshold: int,
52 * AllowThirdPartyFraming: 'sameorigin'|bool,
53 * blowfish_secret: string,
54 * Servers: array<int<1, max>, ServerSettingsType>,
55 * ServerDefault: int<0, max>,
56 * VersionCheck: bool,
57 * ProxyUrl: string,
58 * ProxyUser: string,
59 * ProxyPass: string,
60 * MaxDbList: int<1, max>,
61 * MaxTableList: int<1, max>,
62 * ShowHint: bool,
63 * MaxCharactersInDisplayedSQL: int<1, max>,
64 * OBGzip: 'auto'|bool,
65 * PersistentConnections: bool,
66 * ExecTimeLimit: int<0, max>,
67 * SessionSavePath: string,
68 * MysqlSslWarningSafeHosts: array<string>,
69 * MemoryLimit: string,
70 * SkipLockedTables: bool,
71 * ShowSQL: bool,
72 * RetainQueryBox: bool,
73 * CodemirrorEnable: bool,
74 * LintEnable: bool,
75 * AllowUserDropDatabase: bool,
76 * Confirm: bool,
77 * CookieSameSite: 'Lax'|'None'|'Strict',
78 * LoginCookieRecall: bool,
79 * LoginCookieValidity: int<1, max>,
80 * LoginCookieStore: int<0, max>,
81 * LoginCookieDeleteAll: bool,
82 * UseDbSearch: bool,
83 * IgnoreMultiSubmitErrors: bool,
84 * URLQueryEncryption: bool,
85 * URLQueryEncryptionSecretKey: string,
86 * AllowArbitraryServer: bool,
87 * ArbitraryServerRegexp: string,
88 * CaptchaMethod: 'checkbox'|'invisible',
89 * CaptchaApi: string,
90 * CaptchaCsp: string,
91 * CaptchaRequestParam: string,
92 * CaptchaResponseParam: string,
93 * CaptchaLoginPublicKey: string,
94 * CaptchaLoginPrivateKey: string,
95 * CaptchaSiteVerifyURL: string,
96 * enable_drag_drop_import: bool,
97 * ShowDatabasesNavigationAsTree: bool,
98 * FirstLevelNavigationItems: int<1, max>,
99 * MaxNavigationItems: int<1, max>,
100 * NavigationTreeEnableGrouping: bool,
101 * NavigationTreeDbSeparator: string,
102 * NavigationTreeTableSeparator: array<string>|false|string,
103 * NavigationTreeTableLevel: int<1, max>,
104 * NavigationLinkWithMainPanel: bool,
105 * NavigationDisplayLogo: bool,
106 * NavigationLogoLink: string,
107 * NavigationLogoLinkWindow: 'main'|'new',
108 * NumRecentTables: int<0, max>,
109 * NumFavoriteTables: int<0, max>,
110 * NavigationTreeDisplayItemFilterMinimum: int<1, max>,
111 * NavigationDisplayServers: bool,
112 * DisplayServersList: bool,
113 * NavigationTreeDisplayDbFilterMinimum: int<1, max>,
114 * NavigationTreeDefaultTabTable: string,
115 * NavigationTreeDefaultTabTable2: string,
116 * NavigationTreeEnableExpansion: bool,
117 * NavigationTreeShowTables: bool,
118 * NavigationTreeShowViews: bool,
119 * NavigationTreeShowFunctions: bool,
120 * NavigationTreeShowProcedures: bool,
121 * NavigationTreeShowEvents: bool,
122 * NavigationWidth: int<0, max>,
123 * NavigationTreeAutoexpandSingleDb: bool,
124 * ShowStats: bool,
125 * ShowPhpInfo: bool,
126 * ShowServerInfo: 'database-server'|'web-server'|bool,
127 * ShowChgPassword: bool,
128 * ShowCreateDb: bool,
129 * ShowDbStructureCharset: bool,
130 * ShowDbStructureComment: bool,
131 * ShowDbStructureCreation: bool,
132 * ShowDbStructureLastUpdate: bool,
133 * ShowDbStructureLastCheck: bool,
134 * HideStructureActions: bool,
135 * ShowColumnComments: bool,
136 * TableNavigationLinksMode: 'both'|'icons'|'text',
137 * ShowAll: bool,
138 * MaxRows: int<1, max>,
139 * Order: 'ASC'|'DESC'|'SMART',
140 * SaveCellsAtOnce: bool,
141 * GridEditing: 'click'|'disabled'|'double-click',
142 * RelationalDisplay: 'D'|'K',
143 * ProtectBinary: 'all'|'blob'|'noblob'|false,
144 * ShowFunctionFields: bool,
145 * ShowFieldTypesInDataEditView: bool,
146 * CharEditing: 'input'|'textarea',
147 * MinSizeForInputField: int<0, max>,
148 * MaxSizeForInputField: int<1, max>,
149 * InsertRows: int<1, max>,
150 * ForeignKeyDropdownOrder: array{0: 'content-id'|'id-content', 1?: 'content-id'|'id-content'},
151 * ForeignKeyMaxLimit: int<1, max>,
152 * DefaultForeignKeyChecks: 'default'|'disable'|'enable',
153 * ZipDump: bool,
154 * GZipDump: bool,
155 * BZipDump: bool,
156 * CompressOnFly: bool,
157 * TabsMode: 'both'|'icons'|'text',
158 * ActionLinksMode: 'both'|'icons'|'text',
159 * PropertiesNumColumns: int<1, max>,
160 * DefaultTabServer: string,
161 * DefaultTabDatabase: string,
162 * DefaultTabTable: string,
163 * RowActionType: 'both'|'icons'|'text',
164 * Export: ExportSettingsType,
165 * Import: ImportSettingsType,
166 * Schema: SchemaSettingsType,
167 * PDFPageSizes: array<string>,
168 * PDFDefaultPageSize: string,
169 * DefaultLang: string,
170 * DefaultConnectionCollation: string,
171 * Lang: string,
172 * FilterLanguages: string,
173 * RecodingEngine: string,
174 * IconvExtraParams: string,
175 * AvailableCharsets: array<string>,
176 * NavigationTreePointerEnable: bool,
177 * BrowsePointerEnable: bool,
178 * BrowseMarkerEnable: bool,
179 * TextareaCols: int<1, max>,
180 * TextareaRows: int<1, max>,
181 * LongtextDoubleTextarea: bool,
182 * TextareaAutoSelect: bool,
183 * CharTextareaCols: int<1, max>,
184 * CharTextareaRows: int<1, max>,
185 * LimitChars: int<1, max>,
186 * RowActionLinks: string,
187 * RowActionLinksWithoutUnique: bool,
188 * TablePrimaryKeyOrder: 'ASC'|'DESC'|'NONE',
189 * RememberSorting: bool,
190 * ShowBrowseComments: bool,
191 * ShowPropertyComments: bool,
192 * RepeatCells: int<0, max>,
193 * QueryHistoryDB: bool,
194 * QueryHistoryMax: int<1, max>,
195 * AllowSharedBookmarks: bool,
196 * BrowseMIME: bool,
197 * MaxExactCount: int<1, max>,
198 * MaxExactCountViews: int<0, max>,
199 * NaturalOrder: bool,
200 * InitialSlidersState: 'closed'|'disabled'|'open',
201 * UserprefsDisallow: array<string>,
202 * UserprefsDeveloperTab: bool,
203 * TitleTable: string,
204 * TitleDatabase: string,
205 * TitleServer: string,
206 * TitleDefault: string,
207 * ThemeManager: bool,
208 * ThemeDefault: string,
209 * ThemePerServer: bool,
210 * DefaultQueryTable: string,
211 * DefaultQueryDatabase: string,
212 * SQLQuery: SqlQueryBoxSettingsType,
213 * EnableAutocompleteForTablesAndColumns: bool,
214 * UploadDir: string,
215 * SaveDir: string,
216 * TempDir: string,
217 * GD2Available: 'auto'|'no'|'yes',
218 * TrustedProxies: array<string, string>,
219 * CheckConfigurationPermissions: bool,
220 * LinkLengthLimit: int<1, max>,
221 * CSPAllow: string,
222 * DisableMultiTableMaintenance: bool,
223 * SendErrorReports: 'always'|'ask'|'never',
224 * ConsoleEnterExecutes: bool,
225 * ZeroConf: bool,
226 * DBG: DebugSettingsType,
227 * environment: 'development'|'production',
228 * DefaultFunctions: array<string, string>,
229 * maxRowPlotLimit: int<1, max>,
230 * ShowGitRevision: bool,
231 * MysqlMinVersion: array{internal: int, human: string},
232 * DisableShortcutKeys: bool,
233 * Console: ConsoleSettingsType,
234 * DefaultTransformations: TransformationsSettingsType,
235 * FirstDayOfCalendar: int<0, max>,
238 final class Settings
241 * Your phpMyAdmin URL.
243 * Complete the variable below with the full URL ie
244 * https://example.com/path_to_your_phpMyAdmin_directory/
246 * It must contain characters that are valid for a URL, and the path is
247 * case-sensitive on some Web servers, for example Unix-based servers.
249 * In most cases you can leave this variable empty, as the correct value
250 * will be detected automatically. However, we recommend that you do
251 * test to see that the auto-detection code works in your system. A good
252 * test is to browse a table, then edit a row and save it. There will be
253 * an error message if phpMyAdmin cannot auto-detect the correct value.
255 * ```php
256 * $cfg['PmaAbsoluteUri'] = '';
257 * ```
259 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_PmaAbsoluteUri
261 public string $PmaAbsoluteUri;
264 * Configure authentication logging destination
266 * ```php
267 * $cfg['AuthLog'] = 'auto';
268 * ```
270 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_AuthLog
272 public string $authLog;
275 * Whether to log successful authentication attempts
277 * ```php
278 * $cfg['AuthLogSuccess'] = false;
279 * ```
281 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_AuthLogSuccess
283 public bool $authLogSuccess;
286 * Disable the default warning that is displayed on the DB Details Structure page if
287 * any of the required Tables for the configuration storage could not be found
289 * ```php
290 * $cfg['PmaNoRelation_DisableWarning'] = false;
291 * ```
293 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_PmaNoRelation_DisableWarning
295 public bool $PmaNoRelation_DisableWarning;
298 * Disable the default warning that is displayed if Suhosin is detected
300 * ```php
301 * $cfg['SuhosinDisableWarning'] = false;
302 * ```
304 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_SuhosinDisableWarning
306 public bool $SuhosinDisableWarning;
309 * Disable the default warning that is displayed if session.gc_maxlifetime
310 * is less than `LoginCookieValidity`
312 * ```php
313 * $cfg['LoginCookieValidityDisableWarning'] = false;
314 * ```
316 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LoginCookieValidityDisableWarning
318 public bool $LoginCookieValidityDisableWarning;
321 * Disable the default warning about MySQL reserved words in column names
323 * ```php
324 * $cfg['ReservedWordDisableWarning'] = false;
325 * ```
327 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ReservedWordDisableWarning
329 public bool $ReservedWordDisableWarning;
332 * Show warning about incomplete translations on certain threshold.
334 * ```php
335 * $cfg['TranslationWarningThreshold'] = 80;
336 * ```
338 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TranslationWarningThreshold
340 public int $TranslationWarningThreshold;
343 * Allows phpMyAdmin to be included from a other document in a frame;
344 * setting this to true is a potential security hole. Setting this to
345 * 'sameorigin' prevents phpMyAdmin to be included from another document
346 * in a frame, unless that document belongs to the same domain.
348 * ```php
349 * $cfg['AllowThirdPartyFraming'] = false;
350 * ```
352 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_AllowThirdPartyFraming
354 * @psalm-var bool|'sameorigin'
356 public bool|string $AllowThirdPartyFraming;
359 * The 'cookie' auth_type uses the Sodium extension to encrypt the cookies. If at least one server configuration
360 * uses 'cookie' auth_type, enter here a generated string of random bytes to be used as an encryption key. The
361 * encryption key must be 32 bytes long.
363 * ```php
364 * $cfg['blowfish_secret'] = '';
365 * ```
367 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_blowfish_secret
369 public string $blowfish_secret;
372 * Server(s) configuration
374 * The $cfg['Servers'] array starts with $cfg['Servers'][1]. Do not use
375 * $cfg['Servers'][0]. You can disable a server configuration entry by setting host
376 * to ''. If you want more than one server, just copy following section
377 * (including $i incrementation) several times. There is no need to define
378 * full server array, just define values you need to change.
380 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_Servers
382 * @var array<int, Server>
383 * @psalm-var array<int<1, max>, Server>
385 public array $Servers;
388 * Default server (0 = no default server)
390 * If you have more than one server configured, you can set $cfg['ServerDefault']
391 * to any one of them to auto-connect to that server when phpMyAdmin is started,
392 * or set it to 0 to be given a list of servers without logging in
393 * If you have only one server configured, $cfg['ServerDefault'] *MUST* be
394 * set to that server.
396 * ```php
397 * $cfg['ServerDefault'] = 1;
398 * ```
400 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ServerDefault
402 * @psalm-var 0|positive-int
404 public int $ServerDefault;
407 * whether version check is active
409 * ```php
410 * $cfg['VersionCheck'] = true;
411 * ```
413 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_VersionCheck
415 public bool $VersionCheck;
418 * The url of the proxy to be used when retrieving the information about
419 * the latest version of phpMyAdmin or error reporting. You need this if
420 * the server where phpMyAdmin is installed does not have direct access to
421 * the internet.
422 * The format is: "hostname:portnumber"
424 * ```php
425 * $cfg['ProxyUrl'] = '';
426 * ```
428 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ProxyUrl
430 public string $ProxyUrl;
433 * The username for authenticating with the proxy. By default, no
434 * authentication is performed. If a username is supplied, Basic
435 * Authentication will be performed. No other types of authentication
436 * are currently supported.
438 * ```php
439 * $cfg['ProxyUser'] = '';
440 * ```
442 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ProxyUser
444 public string $ProxyUser;
447 * The password for authenticating with the proxy.
449 * ```php
450 * $cfg['ProxyPass'] = '';
451 * ```
453 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ProxyPass
455 public string $ProxyPass;
458 * maximum number of db's displayed in database list
460 * ```php
461 * $cfg['MaxDbList'] = 100;
462 * ```
464 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxDbList
466 * @psalm-var positive-int
468 public int $MaxDbList;
471 * maximum number of tables displayed in table list
473 * ```php
474 * $cfg['MaxTableList'] = 250;
475 * ```
477 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxTableList
479 * @psalm-var positive-int
481 public int $MaxTableList;
484 * whether to show hint or not
486 * ```php
487 * $cfg['ShowHint'] = true;
488 * ```
490 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowHint
492 public bool $ShowHint;
495 * maximum number of characters when a SQL query is displayed
497 * ```php
498 * $cfg['MaxCharactersInDisplayedSQL'] = 1000;
499 * ```
501 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxCharactersInDisplayedSQL
503 * @psalm-var positive-int
505 public int $MaxCharactersInDisplayedSQL;
508 * use GZIP output buffering if possible (true|false|'auto')
510 * ```php
511 * $cfg['OBGzip'] = 'auto';
512 * ```
514 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_OBGzip
516 * @psalm-var 'auto'|bool
518 public string|bool $OBGzip;
521 * use persistent connections to MySQL database
523 * ```php
524 * $cfg['PersistentConnections'] = false;
525 * ```
527 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_PersistentConnections
529 public bool $PersistentConnections;
532 * maximum execution time in seconds (0 for no limit)
534 * ```php
535 * $cfg['ExecTimeLimit'] = 300;
536 * ```
538 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ExecTimeLimit
540 * @psalm-var 0|positive-int
542 public int $ExecTimeLimit;
545 * Path for storing session data (session_save_path PHP parameter).
547 * ```php
548 * $cfg['SessionSavePath'] = '';
549 * ```
551 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_SessionSavePath
553 public string $SessionSavePath;
556 * Hosts or IPs to consider safe when checking if SSL is used or not
558 * ```php
559 * $cfg['MysqlSslWarningSafeHosts'] = ['127.0.0.1', 'localhost'];
560 * ```
562 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MysqlSslWarningSafeHosts
564 * @var string[]
566 public array $MysqlSslWarningSafeHosts;
569 * maximum allocated bytes ('-1' for no limit, '0' for no change)
570 * this is a string because '16M' is a valid value; we must put here
571 * a string as the default value so that /setup accepts strings
573 * ```php
574 * $cfg['MemoryLimit'] = '-1';
575 * ```
577 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MemoryLimit
579 public string $MemoryLimit;
582 * mark used tables, make possible to show locked tables (since MySQL 3.23.30)
584 * ```php
585 * $cfg['SkipLockedTables'] = false;
586 * ```
588 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_SkipLockedTables
590 public bool $SkipLockedTables;
593 * show SQL queries as run
595 * ```php
596 * $cfg['ShowSQL'] = true;
597 * ```
599 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowSQL
601 public bool $ShowSQL;
604 * retain SQL input on Ajax execute
606 * ```php
607 * $cfg['RetainQueryBox'] = false;
608 * ```
610 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_RetainQueryBox
612 public bool $RetainQueryBox;
615 * use CodeMirror syntax highlighting for editing SQL
617 * ```php
618 * $cfg['CodemirrorEnable'] = true;
619 * ```
621 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CodemirrorEnable
623 public bool $CodemirrorEnable;
626 * use the parser to find any errors in the query before executing
628 * ```php
629 * $cfg['LintEnable'] = true;
630 * ```
632 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LintEnable
634 public bool $LintEnable;
637 * show a 'Drop database' link to normal users
639 * ```php
640 * $cfg['AllowUserDropDatabase'] = false;
641 * ```
643 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_AllowUserDropDatabase
645 public bool $AllowUserDropDatabase;
648 * confirm some commands that can result in loss of data
650 * ```php
651 * $cfg['Confirm'] = true;
652 * ```
654 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_Confirm
656 public bool $Confirm;
659 * sets SameSite attribute of the Set-Cookie HTTP response header
661 * ```php
662 * $cfg['CookieSameSite'] = 'Strict';
663 * ```
665 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CookieSameSite
667 * @psalm-var 'Lax'|'Strict'|'None'
669 public string $CookieSameSite;
672 * recall previous login in cookie authentication mode or not
674 * ```php
675 * $cfg['LoginCookieRecall'] = true;
676 * ```
678 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LoginCookieRecall
680 public bool $LoginCookieRecall;
683 * validity of cookie login (in seconds; 1440 matches php.ini's
684 * session.gc_maxlifetime)
686 * ```php
687 * $cfg['LoginCookieValidity'] = 1440;
688 * ```
690 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LoginCookieValidity
692 * @psalm-var positive-int
694 public int $LoginCookieValidity;
697 * how long login cookie should be stored (in seconds)
699 * ```php
700 * $cfg['LoginCookieStore'] = 0;
701 * ```
703 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LoginCookieStore
705 * @psalm-var 0|positive-int
707 public int $LoginCookieStore;
710 * whether to delete all login cookies on logout
712 * ```php
713 * $cfg['LoginCookieDeleteAll'] = true;
714 * ```
716 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LoginCookieDeleteAll
718 public bool $LoginCookieDeleteAll;
721 * whether to enable the "database search" feature or not
723 * ```php
724 * $cfg['UseDbSearch'] = true;
725 * ```
727 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_UseDbSearch
729 public bool $UseDbSearch;
732 * if set to true, PMA continues computing multiple-statement queries
733 * even if one of the queries failed
735 * ```php
736 * $cfg['IgnoreMultiSubmitErrors'] = false;
737 * ```
739 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_IgnoreMultiSubmitErrors
741 public bool $IgnoreMultiSubmitErrors;
744 * Define whether phpMyAdmin will encrypt sensitive data from the URL query string.
746 * ```php
747 * $cfg['URLQueryEncryption'] = false;
748 * ```
750 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_URLQueryEncryption
752 public bool $URLQueryEncryption;
755 * A secret key used to encrypt/decrypt the URL query string. Should be 32 bytes long.
757 * ```php
758 * $cfg['URLQueryEncryptionSecretKey'] = '';
759 * ```
761 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_URLQueryEncryptionSecretKey
763 public string $URLQueryEncryptionSecretKey;
766 * allow login to any user entered server in cookie based authentication
768 * ```php
769 * $cfg['AllowArbitraryServer'] = false;
770 * ```
772 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_AllowArbitraryServer
774 public bool $AllowArbitraryServer;
777 * restrict by IP (with regular expression) the MySQL servers the user can enter
778 * when $cfg['AllowArbitraryServer'] = true
780 * ```php
781 * $cfg['ArbitraryServerRegexp'] = '';
782 * ```
784 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ArbitraryServerRegexp
786 public string $ArbitraryServerRegexp;
789 * To enable reCaptcha v2 checkbox mode if necessary
791 * ```php
792 * $cfg['CaptchaMethod'] = 'invisible';
793 * ```
795 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CaptchaMethod
797 * @psalm-var 'invisible'|'checkbox'
799 public string $CaptchaMethod;
802 * URL for the reCaptcha v2 compatible API to use
804 * ```php
805 * $cfg['CaptchaApi'] = 'https://www.google.com/recaptcha/api.js';
806 * ```
808 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CaptchaApi
810 public string $CaptchaApi;
813 * Content-Security-Policy snippet for the reCaptcha v2 compatible API
815 * ```php
816 * $cfg['CaptchaCsp'] = 'https://apis.google.com https://www.google.com/recaptcha/'
817 * . ' https://www.gstatic.com/recaptcha/ https://ssl.gstatic.com/';
818 * ```
820 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CaptchaCsp
822 public string $CaptchaCsp;
825 * reCaptcha API's request parameter name
827 * ```php
828 * $cfg['CaptchaRequestParam'] = 'g-recaptcha';
829 * ```
831 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CaptchaRequestParam
833 public string $CaptchaRequestParam;
836 * reCaptcha API's response parameter name
838 * ```php
839 * $cfg['CaptchaResponseParam'] = 'g-recaptcha-response';
840 * ```
842 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CaptchaResponseParam
844 public string $CaptchaResponseParam;
847 * if reCaptcha is enabled it needs public key to connect with the service
849 * ```php
850 * $cfg['CaptchaLoginPublicKey'] = '';
851 * ```
853 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CaptchaLoginPublicKey
855 public string $CaptchaLoginPublicKey;
858 * if reCaptcha is enabled it needs private key to connect with the service
860 * ```php
861 * $cfg['CaptchaLoginPrivateKey'] = '';
862 * ```
864 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CaptchaLoginPrivateKey
866 public string $CaptchaLoginPrivateKey;
869 * if reCaptcha is enabled may need an URL for site verify
871 * ```php
872 * $cfg['CaptchaSiteVerifyURL'] = '';
873 * ```
875 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CaptchaSiteVerifyURL
877 public string $CaptchaSiteVerifyURL;
880 * Enable drag and drop import
882 * ```php
883 * $cfg['enable_drag_drop_import'] = true;
884 * ```
886 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_enable_drag_drop_import
887 * @see https://github.com/phpmyadmin/phpmyadmin/issues/13155
889 public bool $enable_drag_drop_import;
892 * In the navigation panel, replaces the database tree with a selector
894 * ```php
895 * $cfg['ShowDatabasesNavigationAsTree'] = true;
896 * ```
898 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowDatabasesNavigationAsTree
900 public bool $ShowDatabasesNavigationAsTree;
903 * maximum number of first level databases displayed in navigation panel
905 * ```php
906 * $cfg['FirstLevelNavigationItems'] = 100;
907 * ```
909 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_FirstLevelNavigationItems
911 * @psalm-var positive-int
913 public int $FirstLevelNavigationItems;
916 * maximum number of items displayed in navigation panel
918 * ```php
919 * $cfg['MaxNavigationItems'] = 50;
920 * ```
922 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxNavigationItems
924 * @psalm-var positive-int
926 public int $MaxNavigationItems;
929 * turn the select-based light menu into a tree
931 * ```php
932 * $cfg['NavigationTreeEnableGrouping'] = true;
933 * ```
935 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeEnableGrouping
937 public bool $NavigationTreeEnableGrouping;
940 * the separator to sub-tree the select-based light menu tree
942 * ```php
943 * $cfg['NavigationTreeDbSeparator'] = '_';
944 * ```
946 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeDbSeparator
948 public string $NavigationTreeDbSeparator;
951 * Which string will be used to generate table prefixes
952 * to split/nest tables into multiple categories
954 * ```php
955 * $cfg['NavigationTreeTableSeparator'] = '__';
956 * ```
958 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeTableSeparator
960 * @var string|string[]|false
962 public string|array|false $NavigationTreeTableSeparator;
965 * How many sublevels should be displayed when splitting up tables
966 * by the above Separator
968 * ```php
969 * $cfg['NavigationTreeTableLevel'] = 1;
970 * ```
972 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeTableLevel
974 * @psalm-var positive-int
976 public int $NavigationTreeTableLevel;
979 * link with main panel by highlighting the current db/table
981 * ```php
982 * $cfg['NavigationLinkWithMainPanel'] = true;
983 * ```
985 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationLinkWithMainPanel
987 public bool $NavigationLinkWithMainPanel;
990 * display logo at top of navigation panel
992 * ```php
993 * $cfg['NavigationDisplayLogo'] = true;
994 * ```
996 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationDisplayLogo
998 public bool $NavigationDisplayLogo;
1001 * where should logo link point to (can also contain an external URL)
1003 * ```php
1004 * $cfg['NavigationLogoLink'] = 'index.php';
1005 * ```
1007 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationLogoLink
1009 public string $NavigationLogoLink;
1012 * whether to open the linked page in the main window ('main') or
1013 * in a new window ('new')
1015 * ```php
1016 * $cfg['NavigationLogoLinkWindow'] = 'main';
1017 * ```
1019 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationLogoLinkWindow
1021 * @psalm-var 'main'|'new'
1023 public string $NavigationLogoLinkWindow;
1026 * number of recently used tables displayed in the navigation panel
1028 * ```php
1029 * $cfg['NumRecentTables'] = 10;
1030 * ```
1032 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NumRecentTables
1034 * @psalm-var 0|positive-int
1036 public int $NumRecentTables;
1039 * number of favorite tables displayed in the navigation panel
1041 * ```php
1042 * $cfg['NumFavoriteTables'] = 10;
1043 * ```
1045 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NumFavoriteTables
1047 * @psalm-var 0|positive-int
1049 public int $NumFavoriteTables;
1052 * display a JavaScript table filter in the navigation panel
1053 * when more then x tables are present
1055 * ```php
1056 * $cfg['NavigationTreeDisplayItemFilterMinimum'] = 30;
1057 * ```
1059 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeDisplayItemFilterMinimum
1061 * @psalm-var positive-int
1063 public int $NavigationTreeDisplayItemFilterMinimum;
1066 * display server choice at top of navigation panel
1068 * ```php
1069 * $cfg['NavigationDisplayServers'] = true;
1070 * ```
1072 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationDisplayServers
1074 public bool $NavigationDisplayServers;
1077 * server choice as links
1079 * ```php
1080 * $cfg['DisplayServersList'] = false;
1081 * ```
1083 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DisplayServersList
1085 public bool $DisplayServersList;
1088 * display a JavaScript database filter in the navigation panel
1089 * when more then x databases are present
1091 * ```php
1092 * $cfg['NavigationTreeDisplayDbFilterMinimum'] = 30;
1093 * ```
1095 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeDisplayDbFilterMinimum
1097 * @psalm-var positive-int
1099 public int $NavigationTreeDisplayDbFilterMinimum;
1102 * target of the navigation panel quick access icon
1104 * Possible values:
1105 * 'structure' = fields list
1106 * 'sql' = SQL form
1107 * 'search' = search page
1108 * 'insert' = insert row page
1109 * 'browse' = browse page
1111 * ```php
1112 * $cfg['NavigationTreeDefaultTabTable'] = 'structure';
1113 * ```
1115 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeDefaultTabTable
1117 * @psalm-var 'structure'|'sql'|'search'|'insert'|'browse'
1119 public string $NavigationTreeDefaultTabTable;
1122 * target of the navigation panel quick second access icon
1124 * Possible values:
1125 * 'structure' = fields list
1126 * 'sql' = SQL form
1127 * 'search' = search page
1128 * 'insert' = insert row page
1129 * 'browse' = browse page
1130 * '' = no link
1132 * ```php
1133 * $cfg['NavigationTreeDefaultTabTable2'] = '';
1134 * ```
1136 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeDefaultTabTable2
1138 * @psalm-var 'structure'|'sql'|'search'|'insert'|'browse'|''
1140 public string $NavigationTreeDefaultTabTable2;
1143 * Enables the possibility of navigation tree expansion
1145 * ```php
1146 * $cfg['NavigationTreeEnableExpansion'] = true;
1147 * ```
1149 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeEnableExpansion
1151 public bool $NavigationTreeEnableExpansion;
1154 * Show tables in navigation panel
1156 * ```php
1157 * $cfg['NavigationTreeShowTables'] = true;
1158 * ```
1160 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeShowTables
1162 public bool $NavigationTreeShowTables;
1165 * Show views in navigation panel
1167 * ```php
1168 * $cfg['NavigationTreeShowViews'] = true;
1169 * ```
1171 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeShowViews
1173 public bool $NavigationTreeShowViews;
1176 * Show functions in navigation panel
1178 * ```php
1179 * $cfg['NavigationTreeShowFunctions'] = true;
1180 * ```
1182 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeShowFunctions
1184 public bool $NavigationTreeShowFunctions;
1187 * Show procedures in navigation panel
1189 * ```php
1190 * $cfg['NavigationTreeShowProcedures'] = true;
1191 * ```
1193 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeShowProcedures
1195 public bool $NavigationTreeShowProcedures;
1198 * Show events in navigation panel
1200 * ```php
1201 * $cfg['NavigationTreeShowEvents'] = true;
1202 * ```
1204 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeShowEvents
1206 public bool $NavigationTreeShowEvents;
1209 * Width of navigation panel
1211 * ```php
1212 * $cfg['NavigationWidth'] = 240;
1213 * ```
1215 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationWidth
1217 * @psalm-var 0|positive-int
1219 public int $NavigationWidth;
1222 * Automatically expands single database in navigation panel
1224 * ```php
1225 * $cfg['NavigationTreeAutoexpandSingleDb'] = true;
1226 * ```
1228 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreeAutoexpandSingleDb
1230 public bool $NavigationTreeAutoexpandSingleDb;
1233 * allow to display statistics and space usage in the pages about database
1234 * details and table properties
1236 * ```php
1237 * $cfg['ShowStats'] = true;
1238 * ```
1240 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowStats
1242 public bool $ShowStats;
1245 * show PHP info link
1247 * ```php
1248 * $cfg['ShowPhpInfo'] = false;
1249 * ```
1251 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowPhpInfo
1253 public bool $ShowPhpInfo;
1256 * show MySQL server and/or web server information (true|false|'database-server'|'web-server')
1258 * ```php
1259 * $cfg['ShowServerInfo'] = true;
1260 * ```
1262 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowServerInfo
1264 * @psalm-var bool|'database-server'|'web-server'
1266 public bool|string $ShowServerInfo;
1269 * show change password link
1271 * ```php
1272 * $cfg['ShowChgPassword'] = true;
1273 * ```
1275 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowChgPassword
1277 public bool $ShowChgPassword;
1280 * show create database form
1282 * ```php
1283 * $cfg['ShowCreateDb'] = true;
1284 * ```
1286 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowCreateDb
1288 public bool $ShowCreateDb;
1291 * show charset column in database structure (true|false)?
1293 * ```php
1294 * $cfg['ShowDbStructureCharset'] = false;
1295 * ```
1297 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowDbStructureCharset
1299 public bool $ShowDbStructureCharset;
1302 * show comment column in database structure (true|false)?
1304 * ```php
1305 * $cfg['ShowDbStructureComment'] = false;
1306 * ```
1308 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowDbStructureComment
1310 public bool $ShowDbStructureComment;
1313 * show creation timestamp column in database structure (true|false)?
1315 * ```php
1316 * $cfg['ShowDbStructureCreation'] = false;
1317 * ```
1319 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowDbStructureCreation
1321 public bool $ShowDbStructureCreation;
1324 * show last update timestamp column in database structure (true|false)?
1326 * ```php
1327 * $cfg['ShowDbStructureLastUpdate'] = false;
1328 * ```
1330 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowDbStructureLastUpdate
1332 public bool $ShowDbStructureLastUpdate;
1335 * show last check timestamp column in database structure (true|false)?
1337 * ```php
1338 * $cfg['ShowDbStructureLastCheck'] = false;
1339 * ```
1341 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowDbStructureLastCheck
1343 public bool $ShowDbStructureLastCheck;
1346 * allow hide action columns to drop down menu in database structure (true|false)?
1348 * ```php
1349 * $cfg['HideStructureActions'] = true;
1350 * ```
1352 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_HideStructureActions
1354 public bool $HideStructureActions;
1357 * Show column comments in table structure view (true|false)?
1359 * ```php
1360 * $cfg['ShowColumnComments'] = true;
1361 * ```
1363 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowColumnComments
1365 public bool $ShowColumnComments;
1368 * Use icons instead of text for the navigation bar buttons (table browse)
1369 * ('text'|'icons'|'both')
1371 * ```php
1372 * $cfg['TableNavigationLinksMode'] = 'icons';
1373 * ```
1375 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TableNavigationLinksMode
1377 * @psalm-var 'text'|'icons'|'both'
1379 public string $TableNavigationLinksMode;
1382 * Defines whether a user should be displayed a "show all (records)"
1383 * button in browse mode or not.
1385 * ```php
1386 * $cfg['ShowAll'] = false;
1387 * ```
1389 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowAll
1391 public bool $showAll;
1394 * Number of rows displayed when browsing a result set. If the result
1395 * set contains more rows, "Previous" and "Next".
1396 * Possible values: 25,50,100,250,500
1398 * ```php
1399 * $cfg['MaxRows'] = 25;
1400 * ```
1402 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxRows
1404 * @psalm-var positive-int
1406 public int $maxRows;
1409 * default for 'ORDER BY' clause (valid values are 'ASC', 'DESC' or 'SMART' -ie
1410 * descending order for fields of type TIME, DATE, DATETIME & TIMESTAMP,
1411 * ascending order else-)
1413 * ```php
1414 * $cfg['Order'] = 'SMART';
1415 * ```
1417 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_Order
1419 * @psalm-var 'ASC'|'DESC'|'SMART'
1421 public string $Order;
1424 * grid editing: save edited cell(s) in browse-mode at once
1426 * ```php
1427 * $cfg['SaveCellsAtOnce'] = false;
1428 * ```
1430 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_SaveCellsAtOnce
1432 public bool $SaveCellsAtOnce;
1435 * grid editing: which action triggers it, or completely disable the feature
1437 * Possible values:
1438 * 'click'
1439 * 'double-click'
1440 * 'disabled'
1442 * ```php
1443 * $cfg['GridEditing'] = 'double-click';
1444 * ```
1446 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_GridEditing
1448 * @psalm-var 'double-click'|'click'|'disabled'
1450 public string $GridEditing;
1453 * Options > Relational display
1455 * Possible values:
1456 * 'K' for key value
1457 * 'D' for display column
1459 * ```php
1460 * $cfg['RelationalDisplay'] = 'K';
1461 * ```
1463 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_RelationalDisplay
1465 * @psalm-var 'K'|'D'
1467 public string $RelationalDisplay;
1470 * disallow editing of binary fields
1471 * valid values are:
1472 * false allow editing
1473 * 'blob' allow editing except for BLOB fields
1474 * 'noblob' disallow editing except for BLOB fields
1475 * 'all' disallow editing
1477 * ```php
1478 * $cfg['ProtectBinary'] = 'blob';
1479 * ```
1481 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ProtectBinary
1483 * @psalm-var 'blob'|'noblob'|'all'|false
1485 public string|false $ProtectBinary;
1488 * Display the function fields in edit/insert mode
1490 * ```php
1491 * $cfg['ShowFunctionFields'] = true;
1492 * ```
1494 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowFunctionFields
1496 public bool $ShowFunctionFields;
1499 * Display the type fields in edit/insert mode
1501 * ```php
1502 * $cfg['ShowFieldTypesInDataEditView'] = true;
1503 * ```
1505 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowFieldTypesInDataEditView
1507 public bool $ShowFieldTypesInDataEditView;
1510 * Which editor should be used for CHAR/VARCHAR fields:
1511 * input - allows limiting of input length
1512 * textarea - allows newlines in fields
1514 * ```php
1515 * $cfg['CharEditing'] = 'input';
1516 * ```
1518 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CharEditing
1520 * @psalm-var 'input'|'textarea'
1522 public string $CharEditing;
1525 * The minimum size for character input fields
1527 * ```php
1528 * $cfg['MinSizeForInputField'] = 4;
1529 * ```
1531 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MinSizeForInputField
1533 * @psalm-var 0|positive-int
1535 public int $MinSizeForInputField;
1538 * The maximum size for character input fields
1540 * ```php
1541 * $cfg['MaxSizeForInputField'] = 60;
1542 * ```
1544 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxSizeForInputField
1546 * @psalm-var positive-int
1548 public int $MaxSizeForInputField;
1551 * How many rows can be inserted at one time
1553 * ```php
1554 * $cfg['InsertRows'] = 2;
1555 * ```
1557 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_InsertRows
1559 * @psalm-var positive-int
1561 public int $InsertRows;
1564 * Sort order for items in a foreign-key drop-down list.
1565 * 'content' is the referenced data, 'id' is the key value.
1567 * ```php
1568 * $cfg['ForeignKeyDropdownOrder'] = ['content-id', 'id-content'];
1569 * ```
1571 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ForeignKeyDropdownOrder
1573 * @var string[]
1574 * @psalm-var array{0: 'content-id'|'id-content', 1?: 'content-id'|'id-content'}
1576 public array $ForeignKeyDropdownOrder;
1579 * A drop-down list will be used if fewer items are present
1581 * ```php
1582 * $cfg['ForeignKeyMaxLimit'] = 100;
1583 * ```
1585 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ForeignKeyMaxLimit
1587 * @psalm-var positive-int
1589 public int $ForeignKeyMaxLimit;
1592 * Whether to disable foreign key checks while importing
1594 * ```php
1595 * $cfg['DefaultForeignKeyChecks'] = 'default';
1596 * ```
1598 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultForeignKeyChecks
1600 * @psalm-var 'default'|'enable'|'disable'
1602 public string $DefaultForeignKeyChecks;
1605 * Allow for the use of zip compression (requires zip support to be enabled)
1607 * ```php
1608 * $cfg['ZipDump'] = true;
1609 * ```
1611 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ZipDump
1613 public bool $ZipDump;
1616 * Allow for the use of gzip compression (requires zlib)
1618 * ```php
1619 * $cfg['GZipDump'] = true;
1620 * ```
1622 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_GZipDump
1624 public bool $GZipDump;
1627 * Allow for the use of bzip2 decompression (requires bz2 extension)
1629 * ```php
1630 * $cfg['BZipDump'] = true;
1631 * ```
1633 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_BZipDump
1635 public bool $BZipDump;
1638 * Will compress gzip exports on the fly without the need for much memory.
1639 * If you encounter problems with created gzip files disable this feature.
1641 * ```php
1642 * $cfg['CompressOnFly'] = true;
1643 * ```
1645 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CompressOnFly
1647 public bool $CompressOnFly;
1650 * How to display the menu tabs ('icons'|'text'|'both')
1652 * ```php
1653 * $cfg['TabsMode'] = 'both';
1654 * ```
1656 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TabsMode
1658 * @psalm-var 'icons'|'text'|'both'
1660 public string $TabsMode;
1663 * How to display various action links ('icons'|'text'|'both')
1665 * ```php
1666 * $cfg['ActionLinksMode'] = 'both';
1667 * ```
1669 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ActionLinksMode
1671 * @psalm-var 'icons'|'text'|'both'
1673 public string $ActionLinksMode;
1676 * How many columns should be used for table display of a database?
1677 * (a value larger than 1 results in some information being hidden)
1679 * ```php
1680 * $cfg['PropertiesNumColumns'] = 1;
1681 * ```
1683 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_PropertiesNumColumns
1685 * @psalm-var positive-int
1687 public int $PropertiesNumColumns;
1690 * Possible values:
1691 * 'welcome' = the welcome page (recommended for multiuser setups)
1692 * 'databases' = list of databases
1693 * 'status' = runtime information
1694 * 'variables' = MySQL server variables
1695 * 'privileges' = user management
1697 * ```php
1698 * $cfg['DefaultTabServer'] = 'welcome';
1699 * ```
1701 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultTabServer
1703 * @psalm-var 'welcome'|'databases'|'status'|'variables'|'privileges'
1705 public string $DefaultTabServer;
1708 * Possible values:
1709 * 'structure' = tables list
1710 * 'sql' = SQL form
1711 * 'search' = search query
1712 * 'operations' = operations on database
1714 * ```php
1715 * $cfg['DefaultTabDatabase'] = 'structure';
1716 * ```
1718 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultTabDatabase
1720 * @psalm-var 'structure'|'sql'|'search'|'operations'
1722 public string $DefaultTabDatabase;
1725 * Possible values:
1726 * 'structure' = fields list
1727 * 'sql' = SQL form
1728 * 'search' = search page
1729 * 'insert' = insert row page
1730 * 'browse' = browse page
1732 * ```php
1733 * $cfg['DefaultTabTable'] = 'browse';
1734 * ```
1736 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultTabTable
1738 * @psalm-var 'structure'|'sql'|'search'|'insert'|'browse'
1740 public string $DefaultTabTable;
1743 * Whether to display image or text or both image and text in table row
1744 * action segment. Value can be either of ``image``, ``text`` or ``both``.
1746 * ```php
1747 * $cfg['RowActionType'] = 'both';
1748 * ```
1750 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_RowActionType
1752 * @psalm-var 'icons'|'text'|'both'
1754 public string $RowActionType;
1757 * Export defaults
1759 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_Export
1761 public Export $Export;
1764 * Import defaults
1766 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_Import
1768 public Import $Import;
1771 * Schema export defaults
1773 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_Schema
1775 public Schema $Schema;
1778 * Possible paper sizes for creating PDF pages.
1780 * ```php
1781 * $cfg['PDFPageSizes'] = ['A3', 'A4', 'A5', 'letter', 'legal'];
1782 * ```
1784 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_PDFPageSizes
1786 * @var string[]
1788 public array $PDFPageSizes;
1791 * Default page size to use when creating PDF pages.
1793 * ```php
1794 * $cfg['PDFDefaultPageSize'] = 'A4';
1795 * ```
1797 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_PDFDefaultPageSize
1799 public string $PDFDefaultPageSize;
1802 * Default language to use, if not browser-defined or user-defined
1804 * ```php
1805 * $cfg['DefaultLang'] = 'en';
1806 * ```
1808 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultLang
1810 public string $DefaultLang;
1813 * Default connection collation
1815 * ```php
1816 * $cfg['DefaultConnectionCollation'] = 'utf8mb4_unicode_ci';
1817 * ```
1819 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultConnectionCollation
1821 public string $DefaultConnectionCollation;
1824 * Force: always use this language, e.g. 'en'
1826 * ```php
1827 * $cfg['Lang'] = '';
1828 * ```
1830 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_Lang
1832 public string $Lang;
1835 * Regular expression to limit listed languages, e.g. '^(cs|en)' for Czech and
1836 * English only
1838 * ```php
1839 * $cfg['FilterLanguages'] = '';
1840 * ```
1842 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_FilterLanguages
1844 public string $FilterLanguages;
1847 * You can select here which functions will be used for character set conversion.
1848 * Possible values are:
1849 * auto - automatically use available one (first is tested iconv, then mbstring)
1850 * iconv - use iconv or libiconv functions
1851 * mb - use mbstring extension
1852 * none - disable encoding conversion
1854 * ```php
1855 * $cfg['RecodingEngine'] = 'auto';
1856 * ```
1858 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_RecodingEngine
1860 * @psalm-var 'auto'|'iconv'|'mb'|'none'
1862 public string $RecodingEngine;
1865 * Specify some parameters for iconv used in character set conversion. See iconv
1866 * documentation for details:
1867 * https://www.gnu.org/savannah-checkouts/gnu/libiconv/documentation/libiconv-1.15/iconv_open.3.html
1869 * ```php
1870 * $cfg['IconvExtraParams'] = '//TRANSLIT';
1871 * ```
1873 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_IconvExtraParams
1875 public string $IconvExtraParams;
1878 * Available character sets for MySQL conversion. currently contains all which could
1879 * be found in lang/* files and few more.
1880 * Character sets will be shown in same order as here listed, so if you frequently
1881 * use some of these move them to the top.
1883 * ```php
1884 * $cfg['AvailableCharsets'] = [
1885 * 'iso-8859-1', 'iso-8859-2', 'iso-8859-3', 'iso-8859-4', 'iso-8859-5', 'iso-8859-6', 'iso-8859-7', 'iso-8859-8',
1886 * 'iso-8859-9', 'iso-8859-10', 'iso-8859-11', 'iso-8859-12', 'iso-8859-13', 'iso-8859-14', 'iso-8859-15',
1887 * 'windows-1250', 'windows-1251', 'windows-1252', 'windows-1256', 'windows-1257', 'koi8-r', 'big5', 'gb2312',
1888 * 'utf-16', 'utf-8', 'utf-7', 'x-user-defined', 'euc-jp', 'ks_c_5601-1987', 'tis-620',
1889 * 'SHIFT_JIS', 'SJIS', 'SJIS-win'
1890 * ];
1891 * ```
1893 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_AvailableCharsets
1895 * @var string[]
1897 public array $AvailableCharsets;
1900 * enable the left panel pointer
1902 * ```php
1903 * $cfg['NavigationTreePointerEnable'] = true;
1904 * ```
1906 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NavigationTreePointerEnable
1908 public bool $NavigationTreePointerEnable;
1911 * enable the browse pointer
1913 * ```php
1914 * $cfg['BrowsePointerEnable'] = true;
1915 * ```
1917 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_BrowsePointerEnable
1919 public bool $BrowsePointerEnable;
1922 * enable the browse marker
1924 * ```php
1925 * $cfg['BrowseMarkerEnable'] = true;
1926 * ```
1928 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_BrowseMarkerEnable
1930 public bool $BrowseMarkerEnable;
1933 * textarea size (columns) in edit mode
1934 * (this value will be emphasized (*2) for SQL
1935 * query textareas and (*1.25) for query window)
1937 * ```php
1938 * $cfg['TextareaCols'] = 40;
1939 * ```
1941 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TextareaCols
1943 * @psalm-var positive-int
1945 public int $TextareaCols;
1948 * textarea size (rows) in edit mode
1950 * ```php
1951 * $cfg['TextareaRows'] = 15;
1952 * ```
1954 * @psalm-var positive-int
1956 public int $TextareaRows;
1959 * double size of textarea size for LONGTEXT columns
1961 * ```php
1962 * $cfg['LongtextDoubleTextarea'] = true;
1963 * ```
1965 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LongtextDoubleTextarea
1967 public bool $LongtextDoubleTextarea;
1970 * auto-select when clicking in the textarea of the query-box
1972 * ```php
1973 * $cfg['TextareaAutoSelect'] = false;
1974 * ```
1976 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TextareaAutoSelect
1978 public bool $TextareaAutoSelect;
1981 * textarea size (columns) for CHAR/VARCHAR
1983 * ```php
1984 * $cfg['CharTextareaCols'] = 40;
1985 * ```
1987 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CharTextareaCols
1989 * @psalm-var positive-int
1991 public int $CharTextareaCols;
1994 * textarea size (rows) for CHAR/VARCHAR
1996 * ```php
1997 * $cfg['CharTextareaRows'] = 7;
1998 * ```
2000 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CharTextareaRows
2002 * @psalm-var positive-int
2004 public int $CharTextareaRows;
2007 * Max field data length in browse mode for all non-numeric fields
2009 * ```php
2010 * $cfg['LimitChars'] = 50;
2011 * ```
2013 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LimitChars
2015 * @psalm-var positive-int
2017 public int $limitChars;
2020 * Where to show the edit/copy/delete links in browse mode
2021 * Possible values are 'left', 'right', 'both' and 'none'.
2023 * ```php
2024 * $cfg['RowActionLinks'] = 'left';
2025 * ```
2027 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_RowActionLinks
2029 * @psalm-var 'left'|'right'|'both'|'none'
2031 public string $RowActionLinks;
2034 * Whether to show row links (Edit, Copy, Delete) and checkboxes for
2035 * multiple row operations even when the selection does not have a unique key.
2037 * ```php
2038 * $cfg['RowActionLinksWithoutUnique'] = false;
2039 * ```
2041 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_RowActionLinksWithoutUnique
2043 public bool $RowActionLinksWithoutUnique;
2046 * Default sort order by primary key.
2048 * ```php
2049 * $cfg['TablePrimaryKeyOrder'] = 'NONE';
2050 * ```
2052 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TablePrimaryKeyOrder
2054 * @psalm-var 'NONE'|'ASC'|'DESC'
2056 public string $TablePrimaryKeyOrder;
2059 * remember the last way a table sorted
2061 * ```php
2062 * $cfg['RememberSorting'] = true;
2063 * ```
2065 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_RememberSorting
2067 public bool $RememberSorting;
2070 * shows column comments in 'browse' mode.
2072 * ```php
2073 * $cfg['ShowBrowseComments'] = true;
2074 * ```
2076 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowBrowseComments
2078 public bool $ShowBrowseComments;
2081 * shows column comments in 'table property' mode.
2083 * ```php
2084 * $cfg['ShowPropertyComments'] = true;
2085 * ```
2087 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowPropertyComments
2089 public bool $ShowPropertyComments;
2092 * repeat header names every X cells? (0 = deactivate)
2094 * ```php
2095 * $cfg['RepeatCells'] = 100;
2096 * ```
2098 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_RepeatCells
2100 * @psalm-var 0|positive-int
2102 public int $repeatCells;
2105 * Set to true if you want DB-based query history.If false, this utilizes
2106 * JS-routines to display query history (lost by window close)
2108 * ```php
2109 * $cfg['QueryHistoryDB'] = false;
2110 * ```
2112 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_QueryHistoryDB
2114 public bool $QueryHistoryDB;
2117 * When using DB-based query history, how many entries should be kept?
2119 * ```php
2120 * $cfg['QueryHistoryMax'] = 25;
2121 * ```
2123 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_QueryHistoryMax
2125 * @psalm-var positive-int
2127 public int $QueryHistoryMax;
2130 * Allow shared bookmarks between users
2132 * ```php
2133 * $cfg['AllowSharedBookmarks'] = true;
2134 * ```
2136 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_AllowSharedBookmarks
2138 public bool $AllowSharedBookmarks;
2141 * Use MIME-Types (stored in column comments table) for
2143 * ```php
2144 * $cfg['BrowseMIME'] = true;
2145 * ```
2147 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_BrowseMIME
2149 public bool $BrowseMIME;
2152 * When approximate count < this, PMA will get exact count for table rows.
2154 * ```php
2155 * $cfg['MaxExactCount'] = 50000;
2156 * ```
2158 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxExactCount
2160 * @psalm-var positive-int
2162 public int $MaxExactCount;
2165 * Zero means that no row count is done for views; see the doc
2167 * ```php
2168 * $cfg['MaxExactCountViews'] = 0;
2169 * ```
2171 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxExactCountViews
2173 * @psalm-var 0|positive-int
2175 public int $MaxExactCountViews;
2178 * Sort table and database in natural order
2180 * ```php
2181 * $cfg['NaturalOrder'] = true;
2182 * ```
2184 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_NaturalOrder
2186 public bool $NaturalOrder;
2189 * Initial state for sliders
2190 * (open | closed | disabled)
2192 * ```php
2193 * $cfg['InitialSlidersState'] = 'closed';
2194 * ```
2196 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_InitialSlidersState
2198 * @psalm-var 'open'|'closed'|'disabled'
2200 public string $InitialSlidersState;
2203 * User preferences: disallow these settings
2204 * For possible setting names look in src/Config/Forms/User/
2206 * ```php
2207 * $cfg['UserprefsDisallow'] = [];
2208 * ```
2210 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_UserprefsDisallow
2212 * @var string[]
2214 public array $UserprefsDisallow;
2217 * User preferences: enable the Developer tab
2219 * ```php
2220 * $cfg['UserprefsDeveloperTab'] = false;
2221 * ```
2223 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_UserprefsDeveloperTab
2225 public bool $UserprefsDeveloperTab;
2228 * title of browser window when a table is selected
2230 * ```php
2231 * $cfg['TitleTable'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@';
2232 * ```
2234 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TitleTable
2236 public string $TitleTable;
2239 * title of browser window when a database is selected
2241 * ```php
2242 * $cfg['TitleDatabase'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ | @PHPMYADMIN@';
2243 * ```
2245 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TitleDatabase
2247 public string $TitleDatabase;
2250 * title of browser window when a server is selected
2252 * ```php
2253 * $cfg['TitleServer'] = '@HTTP_HOST@ / @VSERVER@ | @PHPMYADMIN@';
2254 * ```
2256 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TitleServer
2258 public string $TitleServer;
2261 * title of browser window when nothing is selected
2263 * ```php
2264 * $cfg['TitleDefault'] = '@HTTP_HOST@ | @PHPMYADMIN@';
2265 * ```
2267 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TitleDefault
2269 public string $TitleDefault;
2272 * if you want to use selectable themes and if ThemesPath not empty
2273 * set it to true, else set it to false (default is false);
2275 * ```php
2276 * $cfg['ThemeManager'] = true;
2277 * ```
2279 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ThemeManager
2281 public bool $ThemeManager;
2284 * set up default theme, you can set up here an valid
2285 * path to themes or 'original' for the original pma-theme
2287 * ```php
2288 * $cfg['ThemeDefault'] = 'pmahomme';
2289 * ```
2291 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ThemeDefault
2293 public string $ThemeDefault;
2296 * allow different theme for each configured server
2298 * ```php
2299 * $cfg['ThemePerServer'] = false;
2300 * ```
2302 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ThemePerServer
2304 public bool $ThemePerServer;
2307 * Default query for table
2309 * ```php
2310 * $cfg['DefaultQueryTable'] = 'SELECT * FROM @TABLE@ WHERE 1';
2311 * ```
2313 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultQueryTable
2315 public string $DefaultQueryTable;
2318 * Default query for database
2320 * ```php
2321 * $cfg['DefaultQueryDatabase'] = '';
2322 * ```
2324 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultQueryDatabase
2326 public string $DefaultQueryDatabase;
2329 * SQL Query box settings
2330 * These are the links display in all of the SQL Query boxes
2332 public SqlQueryBox $SQLQuery;
2335 * Enables autoComplete for table & column names in SQL queries
2337 * ```php
2338 * $cfg['EnableAutocompleteForTablesAndColumns'] = true;
2339 * ```
2341 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_EnableAutocompleteForTablesAndColumns
2343 public bool $EnableAutocompleteForTablesAndColumns;
2346 * Directory for uploaded files that can be executed by phpMyAdmin.
2347 * For example './upload'. Leave empty for no upload directory support.
2348 * Use %u for username inclusion.
2350 * ```php
2351 * $cfg['UploadDir'] = '';
2352 * ```
2354 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_UploadDir
2356 public string $UploadDir;
2359 * Directory where phpMyAdmin can save exported data on server.
2360 * For example './save'. Leave empty for no save directory support.
2361 * Use %u for username inclusion.
2363 * ```php
2364 * $cfg['SaveDir'] = '';
2365 * ```
2367 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_SaveDir
2369 public string $SaveDir;
2372 * Directory where phpMyAdmin can save temporary files.
2374 * ```php
2375 * $cfg['TempDir'] = './tmp/';
2376 * ```
2378 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TempDir
2380 public string $TempDir;
2383 * Is GD >= 2 available? Set to yes/no/auto. 'auto' does auto-detection,
2384 * which is the only safe way to determine GD version.
2386 * ```php
2387 * $cfg['GD2Available'] = 'auto';
2388 * ```
2390 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_GD2Available
2392 * @psalm-var 'auto'|'yes'|'no'
2394 public string $GD2Available;
2397 * Lists proxy IP and HTTP header combinations which are trusted for IP allow/deny
2399 * ```php
2400 * $cfg['TrustedProxies'] = [];
2401 * ```
2403 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_TrustedProxies
2405 * @var array<string, string>
2407 public array $TrustedProxies;
2410 * We normally check the permissions on the configuration file to ensure
2411 * it's not world writable. However, phpMyAdmin could be installed on
2412 * a NTFS filesystem mounted on a non-Windows server, in which case the
2413 * permissions seems wrong but in fact cannot be detected. In this case
2414 * a sysadmin would set the following to false.
2416 * ```php
2417 * $cfg['CheckConfigurationPermissions'] = true;
2418 * ```
2420 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CheckConfigurationPermissions
2422 public bool $CheckConfigurationPermissions;
2425 * Limit for length of URL in links. When length would be above this limit, it
2426 * is replaced by form with button.
2427 * This is required as some web servers (IIS) have problems with long URLs.
2428 * The recommended limit is 2000
2429 * (see https://www.boutell.com/newfaq/misc/urllength.html) but we put
2430 * 1000 to accommodate Suhosin, see bug #3358750.
2432 * ```php
2433 * $cfg['LinkLengthLimit'] = 1000;
2434 * ```
2436 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_LinkLengthLimit
2438 * @psalm-var positive-int
2440 public int $LinkLengthLimit;
2443 * Additional string to allow in CSP headers.
2445 * ```php
2446 * $cfg['CSPAllow'] = '';
2447 * ```
2449 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_CSPAllow
2451 public string $CSPAllow;
2454 * Disable the table maintenance mass operations, like optimizing or
2455 * repairing the selected tables of a database. An accidental execution
2456 * of such a maintenance task can enormously slow down a bigger database.
2458 * ```php
2459 * $cfg['DisableMultiTableMaintenance'] = false;
2460 * ```
2462 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DisableMultiTableMaintenance
2464 public bool $DisableMultiTableMaintenance;
2467 * Whether or not to query the user before sending the error report to
2468 * the phpMyAdmin team when a JavaScript error occurs
2470 * Available options
2471 * (ask | always | never)
2473 * ```php
2474 * $cfg['SendErrorReports'] = 'ask';
2475 * ```
2477 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_SendErrorReports
2479 * @psalm-var 'ask'|'always'|'never'
2481 public string $SendErrorReports;
2484 * Whether Enter or Ctrl+Enter executes queries in the console.
2486 * ```php
2487 * $cfg['ConsoleEnterExecutes'] = false;
2488 * ```
2490 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ConsoleEnterExecutes
2492 public bool $ConsoleEnterExecutes;
2495 * Zero Configuration mode.
2497 * ```php
2498 * $cfg['ZeroConf'] = true;
2499 * ```
2501 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ZeroConf
2503 public bool $zeroConf;
2506 * Developers ONLY!
2508 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DBG
2510 public Debug $debug;
2513 * Sets the working environment
2515 * This only needs to be changed when you are developing phpMyAdmin itself.
2516 * The development mode may display debug information in some places.
2518 * Possible values are 'production' or 'development'
2520 * ```php
2521 * $cfg['environment'] = 'production';
2522 * ```
2524 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_environment
2526 * @psalm-var 'production'|'development'
2528 public string $environment;
2531 * Default functions for above defined groups
2533 * ```php
2534 * $cfg['DefaultFunctions'] = [
2535 * 'FUNC_CHAR' => '',
2536 * 'FUNC_DATE' => '',
2537 * 'FUNC_NUMBER' => '',
2538 * 'FUNC_SPATIAL' => 'GeomFromText',
2539 * 'FUNC_UUID' => 'UUID',
2540 * 'first_timestamp' => 'NOW',
2541 * ];
2542 * ```
2544 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultFunctions
2546 * @var array<string, string>
2548 public array $DefaultFunctions;
2551 * Max rows retrieved for zoom search
2553 * ```php
2554 * $cfg['maxRowPlotLimit'] = 500;
2555 * ```
2557 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_maxRowPlotLimit
2559 * @psalm-var positive-int
2561 public int $maxRowPlotLimit;
2564 * Show Git revision if applicable
2566 * ```php
2567 * $cfg['ShowGitRevision'] = true;
2568 * ```
2570 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_ShowGitRevision
2572 public bool $ShowGitRevision;
2575 * MySQL minimal version required
2577 * ```php
2578 * $cfg['MysqlMinVersion'] = ['internal' => 50500, 'human' => '5.5.0'];
2579 * ```
2581 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_MysqlMinVersion
2583 * @var array<string, int|string>
2584 * @psalm-var array{internal: int, human: string}
2586 public array $mysqlMinVersion;
2589 * Disable shortcuts
2591 * ```php
2592 * $cfg['DisableShortcutKeys'] = false;
2593 * ```
2595 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DisableShortcutKeys
2597 public bool $DisableShortcutKeys;
2600 * Console configuration
2602 * This is mostly meant for user preferences.
2604 public Console $Console;
2607 * Initialize default transformations array
2609 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_DefaultTransformations
2611 public Transformations $DefaultTransformations;
2614 * Set default for FirstDayOfCalendar
2616 * ```php
2617 * $cfg['FirstDayOfCalendar'] = 0;
2618 * ```
2620 * @link https://docs.phpmyadmin.net/en/latest/config.html#cfg_FirstDayOfCalendar
2622 * @psalm-var 0|positive-int
2624 public int $FirstDayOfCalendar;
2626 /** @param array<int|string, mixed> $settings */
2627 public function __construct(array $settings)
2629 $this->PmaAbsoluteUri = $this->setPmaAbsoluteUri($settings);
2630 $this->authLog = $this->setAuthLog($settings);
2631 $this->authLogSuccess = $this->setAuthLogSuccess($settings);
2632 $this->PmaNoRelation_DisableWarning = $this->setPmaNoRelationDisableWarning($settings);
2633 $this->SuhosinDisableWarning = $this->setSuhosinDisableWarning($settings);
2634 $this->LoginCookieValidityDisableWarning = $this->setLoginCookieValidityDisableWarning($settings);
2635 $this->ReservedWordDisableWarning = $this->setReservedWordDisableWarning($settings);
2636 $this->TranslationWarningThreshold = $this->setTranslationWarningThreshold($settings);
2637 $this->AllowThirdPartyFraming = $this->setAllowThirdPartyFraming($settings);
2638 $this->blowfish_secret = $this->setBlowfishSecret($settings);
2639 $this->Servers = $this->setServers($settings);
2640 $this->ServerDefault = $this->setServerDefault($settings);
2641 $this->VersionCheck = $this->setVersionCheck($settings);
2642 $this->ProxyUrl = $this->setProxyUrl($settings);
2643 $this->ProxyUser = $this->setProxyUser($settings);
2644 $this->ProxyPass = $this->setProxyPass($settings);
2645 $this->MaxDbList = $this->setMaxDbList($settings);
2646 $this->MaxTableList = $this->setMaxTableList($settings);
2647 $this->ShowHint = $this->setShowHint($settings);
2648 $this->MaxCharactersInDisplayedSQL = $this->setMaxCharactersInDisplayedSQL($settings);
2649 $this->OBGzip = $this->setOBGzip($settings);
2650 $this->PersistentConnections = $this->setPersistentConnections($settings);
2651 $this->ExecTimeLimit = $this->setExecTimeLimit($settings);
2652 $this->SessionSavePath = $this->setSessionSavePath($settings);
2653 $this->MysqlSslWarningSafeHosts = $this->setMysqlSslWarningSafeHosts($settings);
2654 $this->MemoryLimit = $this->setMemoryLimit($settings);
2655 $this->SkipLockedTables = $this->setSkipLockedTables($settings);
2656 $this->ShowSQL = $this->setShowSQL($settings);
2657 $this->RetainQueryBox = $this->setRetainQueryBox($settings);
2658 $this->CodemirrorEnable = $this->setCodemirrorEnable($settings);
2659 $this->LintEnable = $this->setLintEnable($settings);
2660 $this->AllowUserDropDatabase = $this->setAllowUserDropDatabase($settings);
2661 $this->Confirm = $this->setConfirm($settings);
2662 $this->CookieSameSite = $this->setCookieSameSite($settings);
2663 $this->LoginCookieRecall = $this->setLoginCookieRecall($settings);
2664 $this->LoginCookieValidity = $this->setLoginCookieValidity($settings);
2665 $this->LoginCookieStore = $this->setLoginCookieStore($settings);
2666 $this->LoginCookieDeleteAll = $this->setLoginCookieDeleteAll($settings);
2667 $this->UseDbSearch = $this->setUseDbSearch($settings);
2668 $this->IgnoreMultiSubmitErrors = $this->setIgnoreMultiSubmitErrors($settings);
2669 $this->URLQueryEncryption = $this->setURLQueryEncryption($settings);
2670 $this->URLQueryEncryptionSecretKey = $this->setURLQueryEncryptionSecretKey($settings);
2671 $this->AllowArbitraryServer = $this->setAllowArbitraryServer($settings);
2672 $this->ArbitraryServerRegexp = $this->setArbitraryServerRegexp($settings);
2673 $this->CaptchaMethod = $this->setCaptchaMethod($settings);
2674 $this->CaptchaApi = $this->setCaptchaApi($settings);
2675 $this->CaptchaCsp = $this->setCaptchaCsp($settings);
2676 $this->CaptchaRequestParam = $this->setCaptchaRequestParam($settings);
2677 $this->CaptchaResponseParam = $this->setCaptchaResponseParam($settings);
2678 $this->CaptchaLoginPublicKey = $this->setCaptchaLoginPublicKey($settings);
2679 $this->CaptchaLoginPrivateKey = $this->setCaptchaLoginPrivateKey($settings);
2680 $this->CaptchaSiteVerifyURL = $this->setCaptchaSiteVerifyURL($settings);
2681 $this->enable_drag_drop_import = $this->setEnableDragDropImport($settings);
2682 $this->ShowDatabasesNavigationAsTree = $this->setShowDatabasesNavigationAsTree($settings);
2683 $this->FirstLevelNavigationItems = $this->setFirstLevelNavigationItems($settings);
2684 $this->MaxNavigationItems = $this->setMaxNavigationItems($settings);
2685 $this->NavigationTreeEnableGrouping = $this->setNavigationTreeEnableGrouping($settings);
2686 $this->NavigationTreeDbSeparator = $this->setNavigationTreeDbSeparator($settings);
2687 $this->NavigationTreeTableSeparator = $this->setNavigationTreeTableSeparator($settings);
2688 $this->NavigationTreeTableLevel = $this->setNavigationTreeTableLevel($settings);
2689 $this->NavigationLinkWithMainPanel = $this->setNavigationLinkWithMainPanel($settings);
2690 $this->NavigationDisplayLogo = $this->setNavigationDisplayLogo($settings);
2691 $this->NavigationLogoLink = $this->setNavigationLogoLink($settings);
2692 $this->NavigationLogoLinkWindow = $this->setNavigationLogoLinkWindow($settings);
2693 $this->NumRecentTables = $this->setNumRecentTables($settings);
2694 $this->NumFavoriteTables = $this->setNumFavoriteTables($settings);
2695 $this->NavigationTreeDisplayItemFilterMinimum = $this->setNavigationTreeDisplayItemFilterMinimum($settings);
2696 $this->NavigationDisplayServers = $this->setNavigationDisplayServers($settings);
2697 $this->DisplayServersList = $this->setDisplayServersList($settings);
2698 $this->NavigationTreeDisplayDbFilterMinimum = $this->setNavigationTreeDisplayDbFilterMinimum($settings);
2699 $this->NavigationTreeDefaultTabTable = $this->setNavigationTreeDefaultTabTable($settings);
2700 $this->NavigationTreeDefaultTabTable2 = $this->setNavigationTreeDefaultTabTable2($settings);
2701 $this->NavigationTreeEnableExpansion = $this->setNavigationTreeEnableExpansion($settings);
2702 $this->NavigationTreeShowTables = $this->setNavigationTreeShowTables($settings);
2703 $this->NavigationTreeShowViews = $this->setNavigationTreeShowViews($settings);
2704 $this->NavigationTreeShowFunctions = $this->setNavigationTreeShowFunctions($settings);
2705 $this->NavigationTreeShowProcedures = $this->setNavigationTreeShowProcedures($settings);
2706 $this->NavigationTreeShowEvents = $this->setNavigationTreeShowEvents($settings);
2707 $this->NavigationWidth = $this->setNavigationWidth($settings);
2708 $this->NavigationTreeAutoexpandSingleDb = $this->setNavigationTreeAutoexpandSingleDb($settings);
2709 $this->ShowStats = $this->setShowStats($settings);
2710 $this->ShowPhpInfo = $this->setShowPhpInfo($settings);
2711 $this->ShowServerInfo = $this->setShowServerInfo($settings);
2712 $this->ShowChgPassword = $this->setShowChgPassword($settings);
2713 $this->ShowCreateDb = $this->setShowCreateDb($settings);
2714 $this->ShowDbStructureCharset = $this->setShowDbStructureCharset($settings);
2715 $this->ShowDbStructureComment = $this->setShowDbStructureComment($settings);
2716 $this->ShowDbStructureCreation = $this->setShowDbStructureCreation($settings);
2717 $this->ShowDbStructureLastUpdate = $this->setShowDbStructureLastUpdate($settings);
2718 $this->ShowDbStructureLastCheck = $this->setShowDbStructureLastCheck($settings);
2719 $this->HideStructureActions = $this->setHideStructureActions($settings);
2720 $this->ShowColumnComments = $this->setShowColumnComments($settings);
2721 $this->TableNavigationLinksMode = $this->setTableNavigationLinksMode($settings);
2722 $this->showAll = $this->setShowAll($settings);
2723 $this->maxRows = $this->setMaxRows($settings);
2724 $this->Order = $this->setOrder($settings);
2725 $this->SaveCellsAtOnce = $this->setSaveCellsAtOnce($settings);
2726 $this->GridEditing = $this->setGridEditing($settings);
2727 $this->RelationalDisplay = $this->setRelationalDisplay($settings);
2728 $this->ProtectBinary = $this->setProtectBinary($settings);
2729 $this->ShowFunctionFields = $this->setShowFunctionFields($settings);
2730 $this->ShowFieldTypesInDataEditView = $this->setShowFieldTypesInDataEditView($settings);
2731 $this->CharEditing = $this->setCharEditing($settings);
2732 $this->MinSizeForInputField = $this->setMinSizeForInputField($settings);
2733 $this->MaxSizeForInputField = $this->setMaxSizeForInputField($settings);
2734 $this->InsertRows = $this->setInsertRows($settings);
2735 $this->ForeignKeyDropdownOrder = $this->setForeignKeyDropdownOrder($settings);
2736 $this->ForeignKeyMaxLimit = $this->setForeignKeyMaxLimit($settings);
2737 $this->DefaultForeignKeyChecks = $this->setDefaultForeignKeyChecks($settings);
2738 $this->ZipDump = $this->setZipDump($settings);
2739 $this->GZipDump = $this->setGZipDump($settings);
2740 $this->BZipDump = $this->setBZipDump($settings);
2741 $this->CompressOnFly = $this->setCompressOnFly($settings);
2742 $this->TabsMode = $this->setTabsMode($settings);
2743 $this->ActionLinksMode = $this->setActionLinksMode($settings);
2744 $this->PropertiesNumColumns = $this->setPropertiesNumColumns($settings);
2745 $this->DefaultTabServer = $this->setDefaultTabServer($settings);
2746 $this->DefaultTabDatabase = $this->setDefaultTabDatabase($settings);
2747 $this->DefaultTabTable = $this->setDefaultTabTable($settings);
2748 $this->RowActionType = $this->setRowActionType($settings);
2749 $this->Export = $this->setExport($settings);
2750 $this->Import = $this->setImport($settings);
2751 $this->Schema = $this->setSchema($settings);
2752 $this->PDFPageSizes = $this->setPDFPageSizes($settings);
2753 $this->PDFDefaultPageSize = $this->setPDFDefaultPageSize($settings);
2754 $this->DefaultLang = $this->setDefaultLang($settings);
2755 $this->DefaultConnectionCollation = $this->setDefaultConnectionCollation($settings);
2756 $this->Lang = $this->setLang($settings);
2757 $this->FilterLanguages = $this->setFilterLanguages($settings);
2758 $this->RecodingEngine = $this->setRecodingEngine($settings);
2759 $this->IconvExtraParams = $this->setIconvExtraParams($settings);
2760 $this->AvailableCharsets = $this->setAvailableCharsets($settings);
2761 $this->NavigationTreePointerEnable = $this->setNavigationTreePointerEnable($settings);
2762 $this->BrowsePointerEnable = $this->setBrowsePointerEnable($settings);
2763 $this->BrowseMarkerEnable = $this->setBrowseMarkerEnable($settings);
2764 $this->TextareaCols = $this->setTextareaCols($settings);
2765 $this->TextareaRows = $this->setTextareaRows($settings);
2766 $this->LongtextDoubleTextarea = $this->setLongtextDoubleTextarea($settings);
2767 $this->TextareaAutoSelect = $this->setTextareaAutoSelect($settings);
2768 $this->CharTextareaCols = $this->setCharTextareaCols($settings);
2769 $this->CharTextareaRows = $this->setCharTextareaRows($settings);
2770 $this->limitChars = $this->setLimitChars($settings);
2771 $this->RowActionLinks = $this->setRowActionLinks($settings);
2772 $this->RowActionLinksWithoutUnique = $this->setRowActionLinksWithoutUnique($settings);
2773 $this->TablePrimaryKeyOrder = $this->setTablePrimaryKeyOrder($settings);
2774 $this->RememberSorting = $this->setRememberSorting($settings);
2775 $this->ShowBrowseComments = $this->setShowBrowseComments($settings);
2776 $this->ShowPropertyComments = $this->setShowPropertyComments($settings);
2777 $this->repeatCells = $this->setRepeatCells($settings);
2778 $this->QueryHistoryDB = $this->setQueryHistoryDB($settings);
2779 $this->QueryHistoryMax = $this->setQueryHistoryMax($settings);
2780 $this->AllowSharedBookmarks = $this->setAllowSharedBookmarks($settings);
2781 $this->BrowseMIME = $this->setBrowseMIME($settings);
2782 $this->MaxExactCount = $this->setMaxExactCount($settings);
2783 $this->MaxExactCountViews = $this->setMaxExactCountViews($settings);
2784 $this->NaturalOrder = $this->setNaturalOrder($settings);
2785 $this->InitialSlidersState = $this->setInitialSlidersState($settings);
2786 $this->UserprefsDisallow = $this->setUserprefsDisallow($settings);
2787 $this->UserprefsDeveloperTab = $this->setUserprefsDeveloperTab($settings);
2788 $this->TitleTable = $this->setTitleTable($settings);
2789 $this->TitleDatabase = $this->setTitleDatabase($settings);
2790 $this->TitleServer = $this->setTitleServer($settings);
2791 $this->TitleDefault = $this->setTitleDefault($settings);
2792 $this->ThemeManager = $this->setThemeManager($settings);
2793 $this->ThemeDefault = $this->setThemeDefault($settings);
2794 $this->ThemePerServer = $this->setThemePerServer($settings);
2795 $this->DefaultQueryTable = $this->setDefaultQueryTable($settings);
2796 $this->DefaultQueryDatabase = $this->setDefaultQueryDatabase($settings);
2797 $this->SQLQuery = $this->setSQLQuery($settings);
2798 $this->EnableAutocompleteForTablesAndColumns = $this->setEnableAutocompleteForTablesAndColumns($settings);
2799 $this->UploadDir = $this->setUploadDir($settings);
2800 $this->SaveDir = $this->setSaveDir($settings);
2801 $this->TempDir = $this->setTempDir($settings);
2802 $this->GD2Available = $this->setGD2Available($settings);
2803 $this->TrustedProxies = $this->setTrustedProxies($settings);
2804 $this->CheckConfigurationPermissions = $this->setCheckConfigurationPermissions($settings);
2805 $this->LinkLengthLimit = $this->setLinkLengthLimit($settings);
2806 $this->CSPAllow = $this->setCSPAllow($settings);
2807 $this->DisableMultiTableMaintenance = $this->setDisableMultiTableMaintenance($settings);
2808 $this->SendErrorReports = $this->setSendErrorReports($settings);
2809 $this->ConsoleEnterExecutes = $this->setConsoleEnterExecutes($settings);
2810 $this->zeroConf = $this->setZeroConf($settings);
2811 $this->debug = $this->setDebug($settings);
2812 $this->environment = $this->setEnvironment($settings);
2813 $this->DefaultFunctions = $this->setDefaultFunctions($settings);
2814 $this->maxRowPlotLimit = $this->setMaxRowPlotLimit($settings);
2815 $this->ShowGitRevision = $this->setShowGitRevision($settings);
2816 $this->mysqlMinVersion = $this->setMysqlMinVersion($settings);
2817 $this->DisableShortcutKeys = $this->setDisableShortcutKeys($settings);
2818 $this->Console = $this->setConsole($settings);
2819 $this->DefaultTransformations = $this->setDefaultTransformations($settings);
2820 $this->FirstDayOfCalendar = $this->setFirstDayOfCalendar($settings);
2823 /** @psalm-return SettingsType */
2824 public function asArray(): array
2826 return [
2827 'PmaAbsoluteUri' => $this->PmaAbsoluteUri,
2828 'AuthLog' => $this->authLog,
2829 'AuthLogSuccess' => $this->authLogSuccess,
2830 'PmaNoRelation_DisableWarning' => $this->PmaNoRelation_DisableWarning,
2831 'SuhosinDisableWarning' => $this->SuhosinDisableWarning,
2832 'LoginCookieValidityDisableWarning' => $this->LoginCookieValidityDisableWarning,
2833 'ReservedWordDisableWarning' => $this->ReservedWordDisableWarning,
2834 'TranslationWarningThreshold' => $this->TranslationWarningThreshold,
2835 'AllowThirdPartyFraming' => $this->AllowThirdPartyFraming,
2836 'blowfish_secret' => $this->blowfish_secret,
2837 'Servers' => array_map(static fn (Server $server): array => $server->asArray(), $this->Servers),
2838 'ServerDefault' => $this->ServerDefault,
2839 'VersionCheck' => $this->VersionCheck,
2840 'ProxyUrl' => $this->ProxyUrl,
2841 'ProxyUser' => $this->ProxyUser,
2842 'ProxyPass' => $this->ProxyPass,
2843 'MaxDbList' => $this->MaxDbList,
2844 'MaxTableList' => $this->MaxTableList,
2845 'ShowHint' => $this->ShowHint,
2846 'MaxCharactersInDisplayedSQL' => $this->MaxCharactersInDisplayedSQL,
2847 'OBGzip' => $this->OBGzip,
2848 'PersistentConnections' => $this->PersistentConnections,
2849 'ExecTimeLimit' => $this->ExecTimeLimit,
2850 'SessionSavePath' => $this->SessionSavePath,
2851 'MysqlSslWarningSafeHosts' => $this->MysqlSslWarningSafeHosts,
2852 'MemoryLimit' => $this->MemoryLimit,
2853 'SkipLockedTables' => $this->SkipLockedTables,
2854 'ShowSQL' => $this->ShowSQL,
2855 'RetainQueryBox' => $this->RetainQueryBox,
2856 'CodemirrorEnable' => $this->CodemirrorEnable,
2857 'LintEnable' => $this->LintEnable,
2858 'AllowUserDropDatabase' => $this->AllowUserDropDatabase,
2859 'Confirm' => $this->Confirm,
2860 'CookieSameSite' => $this->CookieSameSite,
2861 'LoginCookieRecall' => $this->LoginCookieRecall,
2862 'LoginCookieValidity' => $this->LoginCookieValidity,
2863 'LoginCookieStore' => $this->LoginCookieStore,
2864 'LoginCookieDeleteAll' => $this->LoginCookieDeleteAll,
2865 'UseDbSearch' => $this->UseDbSearch,
2866 'IgnoreMultiSubmitErrors' => $this->IgnoreMultiSubmitErrors,
2867 'URLQueryEncryption' => $this->URLQueryEncryption,
2868 'URLQueryEncryptionSecretKey' => $this->URLQueryEncryptionSecretKey,
2869 'AllowArbitraryServer' => $this->AllowArbitraryServer,
2870 'ArbitraryServerRegexp' => $this->ArbitraryServerRegexp,
2871 'CaptchaMethod' => $this->CaptchaMethod,
2872 'CaptchaApi' => $this->CaptchaApi,
2873 'CaptchaCsp' => $this->CaptchaCsp,
2874 'CaptchaRequestParam' => $this->CaptchaRequestParam,
2875 'CaptchaResponseParam' => $this->CaptchaResponseParam,
2876 'CaptchaLoginPublicKey' => $this->CaptchaLoginPublicKey,
2877 'CaptchaLoginPrivateKey' => $this->CaptchaLoginPrivateKey,
2878 'CaptchaSiteVerifyURL' => $this->CaptchaSiteVerifyURL,
2879 'enable_drag_drop_import' => $this->enable_drag_drop_import,
2880 'ShowDatabasesNavigationAsTree' => $this->ShowDatabasesNavigationAsTree,
2881 'FirstLevelNavigationItems' => $this->FirstLevelNavigationItems,
2882 'MaxNavigationItems' => $this->MaxNavigationItems,
2883 'NavigationTreeEnableGrouping' => $this->NavigationTreeEnableGrouping,
2884 'NavigationTreeDbSeparator' => $this->NavigationTreeDbSeparator,
2885 'NavigationTreeTableSeparator' => $this->NavigationTreeTableSeparator,
2886 'NavigationTreeTableLevel' => $this->NavigationTreeTableLevel,
2887 'NavigationLinkWithMainPanel' => $this->NavigationLinkWithMainPanel,
2888 'NavigationDisplayLogo' => $this->NavigationDisplayLogo,
2889 'NavigationLogoLink' => $this->NavigationLogoLink,
2890 'NavigationLogoLinkWindow' => $this->NavigationLogoLinkWindow,
2891 'NumRecentTables' => $this->NumRecentTables,
2892 'NumFavoriteTables' => $this->NumFavoriteTables,
2893 'NavigationTreeDisplayItemFilterMinimum' => $this->NavigationTreeDisplayItemFilterMinimum,
2894 'NavigationDisplayServers' => $this->NavigationDisplayServers,
2895 'DisplayServersList' => $this->DisplayServersList,
2896 'NavigationTreeDisplayDbFilterMinimum' => $this->NavigationTreeDisplayDbFilterMinimum,
2897 'NavigationTreeDefaultTabTable' => $this->NavigationTreeDefaultTabTable,
2898 'NavigationTreeDefaultTabTable2' => $this->NavigationTreeDefaultTabTable2,
2899 'NavigationTreeEnableExpansion' => $this->NavigationTreeEnableExpansion,
2900 'NavigationTreeShowTables' => $this->NavigationTreeShowTables,
2901 'NavigationTreeShowViews' => $this->NavigationTreeShowViews,
2902 'NavigationTreeShowFunctions' => $this->NavigationTreeShowFunctions,
2903 'NavigationTreeShowProcedures' => $this->NavigationTreeShowProcedures,
2904 'NavigationTreeShowEvents' => $this->NavigationTreeShowEvents,
2905 'NavigationWidth' => $this->NavigationWidth,
2906 'NavigationTreeAutoexpandSingleDb' => $this->NavigationTreeAutoexpandSingleDb,
2907 'ShowStats' => $this->ShowStats,
2908 'ShowPhpInfo' => $this->ShowPhpInfo,
2909 'ShowServerInfo' => $this->ShowServerInfo,
2910 'ShowChgPassword' => $this->ShowChgPassword,
2911 'ShowCreateDb' => $this->ShowCreateDb,
2912 'ShowDbStructureCharset' => $this->ShowDbStructureCharset,
2913 'ShowDbStructureComment' => $this->ShowDbStructureComment,
2914 'ShowDbStructureCreation' => $this->ShowDbStructureCreation,
2915 'ShowDbStructureLastUpdate' => $this->ShowDbStructureLastUpdate,
2916 'ShowDbStructureLastCheck' => $this->ShowDbStructureLastCheck,
2917 'HideStructureActions' => $this->HideStructureActions,
2918 'ShowColumnComments' => $this->ShowColumnComments,
2919 'TableNavigationLinksMode' => $this->TableNavigationLinksMode,
2920 'ShowAll' => $this->showAll,
2921 'MaxRows' => $this->maxRows,
2922 'Order' => $this->Order,
2923 'SaveCellsAtOnce' => $this->SaveCellsAtOnce,
2924 'GridEditing' => $this->GridEditing,
2925 'RelationalDisplay' => $this->RelationalDisplay,
2926 'ProtectBinary' => $this->ProtectBinary,
2927 'ShowFunctionFields' => $this->ShowFunctionFields,
2928 'ShowFieldTypesInDataEditView' => $this->ShowFieldTypesInDataEditView,
2929 'CharEditing' => $this->CharEditing,
2930 'MinSizeForInputField' => $this->MinSizeForInputField,
2931 'MaxSizeForInputField' => $this->MaxSizeForInputField,
2932 'InsertRows' => $this->InsertRows,
2933 'ForeignKeyDropdownOrder' => $this->ForeignKeyDropdownOrder,
2934 'ForeignKeyMaxLimit' => $this->ForeignKeyMaxLimit,
2935 'DefaultForeignKeyChecks' => $this->DefaultForeignKeyChecks,
2936 'ZipDump' => $this->ZipDump,
2937 'GZipDump' => $this->GZipDump,
2938 'BZipDump' => $this->BZipDump,
2939 'CompressOnFly' => $this->CompressOnFly,
2940 'TabsMode' => $this->TabsMode,
2941 'ActionLinksMode' => $this->ActionLinksMode,
2942 'PropertiesNumColumns' => $this->PropertiesNumColumns,
2943 'DefaultTabServer' => $this->DefaultTabServer,
2944 'DefaultTabDatabase' => $this->DefaultTabDatabase,
2945 'DefaultTabTable' => $this->DefaultTabTable,
2946 'RowActionType' => $this->RowActionType,
2947 'Export' => $this->Export->asArray(),
2948 'Import' => $this->Import->asArray(),
2949 'Schema' => $this->Schema->asArray(),
2950 'PDFPageSizes' => $this->PDFPageSizes,
2951 'PDFDefaultPageSize' => $this->PDFDefaultPageSize,
2952 'DefaultLang' => $this->DefaultLang,
2953 'DefaultConnectionCollation' => $this->DefaultConnectionCollation,
2954 'Lang' => $this->Lang,
2955 'FilterLanguages' => $this->FilterLanguages,
2956 'RecodingEngine' => $this->RecodingEngine,
2957 'IconvExtraParams' => $this->IconvExtraParams,
2958 'AvailableCharsets' => $this->AvailableCharsets,
2959 'NavigationTreePointerEnable' => $this->NavigationTreePointerEnable,
2960 'BrowsePointerEnable' => $this->BrowsePointerEnable,
2961 'BrowseMarkerEnable' => $this->BrowseMarkerEnable,
2962 'TextareaCols' => $this->TextareaCols,
2963 'TextareaRows' => $this->TextareaRows,
2964 'LongtextDoubleTextarea' => $this->LongtextDoubleTextarea,
2965 'TextareaAutoSelect' => $this->TextareaAutoSelect,
2966 'CharTextareaCols' => $this->CharTextareaCols,
2967 'CharTextareaRows' => $this->CharTextareaRows,
2968 'LimitChars' => $this->limitChars,
2969 'RowActionLinks' => $this->RowActionLinks,
2970 'RowActionLinksWithoutUnique' => $this->RowActionLinksWithoutUnique,
2971 'TablePrimaryKeyOrder' => $this->TablePrimaryKeyOrder,
2972 'RememberSorting' => $this->RememberSorting,
2973 'ShowBrowseComments' => $this->ShowBrowseComments,
2974 'ShowPropertyComments' => $this->ShowPropertyComments,
2975 'RepeatCells' => $this->repeatCells,
2976 'QueryHistoryDB' => $this->QueryHistoryDB,
2977 'QueryHistoryMax' => $this->QueryHistoryMax,
2978 'AllowSharedBookmarks' => $this->AllowSharedBookmarks,
2979 'BrowseMIME' => $this->BrowseMIME,
2980 'MaxExactCount' => $this->MaxExactCount,
2981 'MaxExactCountViews' => $this->MaxExactCountViews,
2982 'NaturalOrder' => $this->NaturalOrder,
2983 'InitialSlidersState' => $this->InitialSlidersState,
2984 'UserprefsDisallow' => $this->UserprefsDisallow,
2985 'UserprefsDeveloperTab' => $this->UserprefsDeveloperTab,
2986 'TitleTable' => $this->TitleTable,
2987 'TitleDatabase' => $this->TitleDatabase,
2988 'TitleServer' => $this->TitleServer,
2989 'TitleDefault' => $this->TitleDefault,
2990 'ThemeManager' => $this->ThemeManager,
2991 'ThemeDefault' => $this->ThemeDefault,
2992 'ThemePerServer' => $this->ThemePerServer,
2993 'DefaultQueryTable' => $this->DefaultQueryTable,
2994 'DefaultQueryDatabase' => $this->DefaultQueryDatabase,
2995 'SQLQuery' => $this->SQLQuery->asArray(),
2996 'EnableAutocompleteForTablesAndColumns' => $this->EnableAutocompleteForTablesAndColumns,
2997 'UploadDir' => $this->UploadDir,
2998 'SaveDir' => $this->SaveDir,
2999 'TempDir' => $this->TempDir,
3000 'GD2Available' => $this->GD2Available,
3001 'TrustedProxies' => $this->TrustedProxies,
3002 'CheckConfigurationPermissions' => $this->CheckConfigurationPermissions,
3003 'LinkLengthLimit' => $this->LinkLengthLimit,
3004 'CSPAllow' => $this->CSPAllow,
3005 'DisableMultiTableMaintenance' => $this->DisableMultiTableMaintenance,
3006 'SendErrorReports' => $this->SendErrorReports,
3007 'ConsoleEnterExecutes' => $this->ConsoleEnterExecutes,
3008 'ZeroConf' => $this->zeroConf,
3009 'DBG' => $this->debug->asArray(),
3010 'environment' => $this->environment,
3011 'DefaultFunctions' => $this->DefaultFunctions,
3012 'maxRowPlotLimit' => $this->maxRowPlotLimit,
3013 'ShowGitRevision' => $this->ShowGitRevision,
3014 'MysqlMinVersion' => $this->mysqlMinVersion,
3015 'DisableShortcutKeys' => $this->DisableShortcutKeys,
3016 'Console' => $this->Console->asArray(),
3017 'DefaultTransformations' => $this->DefaultTransformations->asArray(),
3018 'FirstDayOfCalendar' => $this->FirstDayOfCalendar,
3022 /** @param array<int|string, mixed> $settings */
3023 private function setPmaAbsoluteUri(array $settings): string
3025 if (! isset($settings['PmaAbsoluteUri'])) {
3026 return '';
3029 return (string) $settings['PmaAbsoluteUri'];
3032 /** @param array<int|string, mixed> $settings */
3033 private function setAuthLog(array $settings): string
3035 if (! isset($settings['AuthLog'])) {
3036 return 'auto';
3039 return (string) $settings['AuthLog'];
3042 /** @param array<int|string, mixed> $settings */
3043 private function setAuthLogSuccess(array $settings): bool
3045 if (! isset($settings['AuthLogSuccess'])) {
3046 return false;
3049 return (bool) $settings['AuthLogSuccess'];
3052 /** @param array<int|string, mixed> $settings */
3053 private function setPmaNoRelationDisableWarning(array $settings): bool
3055 if (! isset($settings['PmaNoRelation_DisableWarning'])) {
3056 return false;
3059 return (bool) $settings['PmaNoRelation_DisableWarning'];
3062 /** @param array<int|string, mixed> $settings */
3063 private function setSuhosinDisableWarning(array $settings): bool
3065 if (! isset($settings['SuhosinDisableWarning'])) {
3066 return false;
3069 return (bool) $settings['SuhosinDisableWarning'];
3072 /** @param array<int|string, mixed> $settings */
3073 private function setLoginCookieValidityDisableWarning(array $settings): bool
3075 if (! isset($settings['LoginCookieValidityDisableWarning'])) {
3076 return false;
3079 return (bool) $settings['LoginCookieValidityDisableWarning'];
3082 /** @param array<int|string, mixed> $settings */
3083 private function setReservedWordDisableWarning(array $settings): bool
3085 if (! isset($settings['ReservedWordDisableWarning'])) {
3086 return false;
3089 return (bool) $settings['ReservedWordDisableWarning'];
3092 /** @param array<int|string, mixed> $settings */
3093 private function setTranslationWarningThreshold(array $settings): int
3095 if (! isset($settings['TranslationWarningThreshold'])) {
3096 return 80;
3099 $threshold = (int) $settings['TranslationWarningThreshold'];
3100 if ($threshold < 0) {
3101 return 80;
3104 return min($threshold, 100);
3108 * @param array<int|string, mixed> $settings
3110 * @psalm-return bool|'sameorigin'
3112 private function setAllowThirdPartyFraming(array $settings): bool|string
3114 if (! isset($settings['AllowThirdPartyFraming'])) {
3115 return false;
3118 if ($settings['AllowThirdPartyFraming'] === 'sameorigin') {
3119 return 'sameorigin';
3122 return (bool) $settings['AllowThirdPartyFraming'];
3125 /** @param array<int|string, mixed> $settings */
3126 private function setBlowfishSecret(array $settings): string
3128 if (! isset($settings['blowfish_secret'])) {
3129 return '';
3132 return (string) $settings['blowfish_secret'];
3136 * @param array<int|string, mixed> $settings
3138 * @return array<int, Server>
3139 * @psalm-return array<int<1, max>, Server>
3141 private function setServers(array $settings): array
3143 if (! isset($settings['Servers']) || ! is_array($settings['Servers'])) {
3144 return [1 => new Server()];
3147 $servers = [];
3148 foreach ($settings['Servers'] as $key => $server) {
3149 if (! is_int($key) || $key < 1 || ! is_array($server)) {
3150 continue;
3153 $servers[$key] = new Server($server);
3154 if ($servers[$key]->host !== '' || $servers[$key]->verbose !== '') {
3155 continue;
3159 * Ensures that the database server has a name.
3161 * @link https://github.com/phpmyadmin/phpmyadmin/issues/6878
3163 * @psalm-suppress ImpureFunctionCall
3165 $server['verbose'] = sprintf(__('Server %d'), $key);
3166 $servers[$key] = new Server($server);
3169 if ($servers === []) {
3170 return [1 => new Server()];
3173 return $servers;
3177 * @param array<int|string, mixed> $settings
3179 * @psalm-return 0|positive-int
3181 private function setServerDefault(array $settings): int
3183 if (! isset($settings['ServerDefault'])) {
3184 return 1;
3187 $serverDefault = (int) $settings['ServerDefault'];
3189 return $serverDefault >= 0 ? $serverDefault : 1;
3192 /** @param array<int|string, mixed> $settings */
3193 private function setVersionCheck(array $settings): bool
3195 $versionCheck = true;
3196 if (defined('VERSION_CHECK_DEFAULT')) {
3197 $versionCheck = VERSION_CHECK_DEFAULT;
3200 if (! isset($settings['VersionCheck'])) {
3201 return $versionCheck;
3204 return (bool) $settings['VersionCheck'];
3207 /** @param array<int|string, mixed> $settings */
3208 private function setProxyUrl(array $settings): string
3210 if (! isset($settings['ProxyUrl'])) {
3211 return '';
3214 return (string) $settings['ProxyUrl'];
3217 /** @param array<int|string, mixed> $settings */
3218 private function setProxyUser(array $settings): string
3220 if (! isset($settings['ProxyUser'])) {
3221 return '';
3224 return (string) $settings['ProxyUser'];
3227 /** @param array<int|string, mixed> $settings */
3228 private function setProxyPass(array $settings): string
3230 if (! isset($settings['ProxyPass'])) {
3231 return '';
3234 return (string) $settings['ProxyPass'];
3238 * @param array<int|string, mixed> $settings
3240 * @psalm-return positive-int
3242 private function setMaxDbList(array $settings): int
3244 if (! isset($settings['MaxDbList'])) {
3245 return 100;
3248 $maxDbList = (int) $settings['MaxDbList'];
3250 return $maxDbList >= 1 ? $maxDbList : 100;
3254 * @param array<int|string, mixed> $settings
3256 * @psalm-return positive-int
3258 private function setMaxTableList(array $settings): int
3260 if (! isset($settings['MaxTableList'])) {
3261 return 250;
3264 $maxTableList = (int) $settings['MaxTableList'];
3266 return $maxTableList >= 1 ? $maxTableList : 250;
3269 /** @param array<int|string, mixed> $settings */
3270 private function setShowHint(array $settings): bool
3272 if (! isset($settings['ShowHint'])) {
3273 return true;
3276 return (bool) $settings['ShowHint'];
3280 * @param array<int|string, mixed> $settings
3282 * @psalm-return positive-int
3284 private function setMaxCharactersInDisplayedSQL(array $settings): int
3286 if (! isset($settings['MaxCharactersInDisplayedSQL'])) {
3287 return 1000;
3290 $maxCharactersInDisplayedSQL = (int) $settings['MaxCharactersInDisplayedSQL'];
3292 return $maxCharactersInDisplayedSQL >= 1 ? $maxCharactersInDisplayedSQL : 1000;
3296 * @param array<int|string, mixed> $settings
3298 * @psalm-return 'auto'|bool
3300 private function setOBGzip(array $settings): bool|string
3302 if (! isset($settings['OBGzip']) || $settings['OBGzip'] === 'auto') {
3303 return 'auto';
3306 return (bool) $settings['OBGzip'];
3309 /** @param array<int|string, mixed> $settings */
3310 private function setPersistentConnections(array $settings): bool
3312 if (! isset($settings['PersistentConnections'])) {
3313 return false;
3316 return (bool) $settings['PersistentConnections'];
3320 * @param array<int|string, mixed> $settings
3322 * @psalm-return 0|positive-int
3324 private function setExecTimeLimit(array $settings): int
3326 if (! isset($settings['ExecTimeLimit'])) {
3327 return 300;
3330 $execTimeLimit = (int) $settings['ExecTimeLimit'];
3332 return $execTimeLimit >= 0 ? $execTimeLimit : 300;
3335 /** @param array<int|string, mixed> $settings */
3336 private function setSessionSavePath(array $settings): string
3338 if (! isset($settings['SessionSavePath'])) {
3339 return '';
3342 return (string) $settings['SessionSavePath'];
3346 * @param array<int|string, mixed> $settings
3348 * @return string[]
3350 private function setMysqlSslWarningSafeHosts(array $settings): array
3352 if (! isset($settings['MysqlSslWarningSafeHosts']) || ! is_array($settings['MysqlSslWarningSafeHosts'])) {
3353 return ['127.0.0.1', 'localhost'];
3356 $hosts = [];
3357 /** @var mixed $host */
3358 foreach ($settings['MysqlSslWarningSafeHosts'] as $host) {
3359 $safeHost = (string) $host;
3360 if ($safeHost === '') {
3361 continue;
3364 $hosts[] = $safeHost;
3367 return $hosts;
3370 /** @param array<int|string, mixed> $settings */
3371 private function setMemoryLimit(array $settings): string
3373 if (! isset($settings['MemoryLimit'])) {
3374 return '-1';
3377 return (string) $settings['MemoryLimit'];
3380 /** @param array<int|string, mixed> $settings */
3381 private function setSkipLockedTables(array $settings): bool
3383 if (! isset($settings['SkipLockedTables'])) {
3384 return false;
3387 return (bool) $settings['SkipLockedTables'];
3390 /** @param array<int|string, mixed> $settings */
3391 private function setShowSQL(array $settings): bool
3393 if (! isset($settings['ShowSQL'])) {
3394 return true;
3397 return (bool) $settings['ShowSQL'];
3400 /** @param array<int|string, mixed> $settings */
3401 private function setRetainQueryBox(array $settings): bool
3403 if (! isset($settings['RetainQueryBox'])) {
3404 return false;
3407 return (bool) $settings['RetainQueryBox'];
3410 /** @param array<int|string, mixed> $settings */
3411 private function setCodemirrorEnable(array $settings): bool
3413 if (! isset($settings['CodemirrorEnable'])) {
3414 return true;
3417 return (bool) $settings['CodemirrorEnable'];
3420 /** @param array<int|string, mixed> $settings */
3421 private function setLintEnable(array $settings): bool
3423 if (! isset($settings['LintEnable'])) {
3424 return true;
3427 return (bool) $settings['LintEnable'];
3430 /** @param array<int|string, mixed> $settings */
3431 private function setAllowUserDropDatabase(array $settings): bool
3433 if (! isset($settings['AllowUserDropDatabase'])) {
3434 return false;
3437 return (bool) $settings['AllowUserDropDatabase'];
3440 /** @param array<int|string, mixed> $settings */
3441 private function setConfirm(array $settings): bool
3443 if (! isset($settings['Confirm'])) {
3444 return true;
3447 return (bool) $settings['Confirm'];
3451 * @param array<int|string, mixed> $settings
3453 * @psalm-return 'Lax'|'Strict'|'None'
3455 private function setCookieSameSite(array $settings): string
3457 if (! isset($settings['CookieSameSite']) || ! in_array($settings['CookieSameSite'], ['Lax', 'None'], true)) {
3458 return 'Strict';
3461 return $settings['CookieSameSite'];
3464 /** @param array<int|string, mixed> $settings */
3465 private function setLoginCookieRecall(array $settings): bool
3467 if (! isset($settings['LoginCookieRecall'])) {
3468 return true;
3471 return (bool) $settings['LoginCookieRecall'];
3475 * @param array<int|string, mixed> $settings
3477 * @psalm-return positive-int
3479 private function setLoginCookieValidity(array $settings): int
3481 if (! isset($settings['LoginCookieValidity'])) {
3482 return 1440;
3485 $loginCookieValidity = (int) $settings['LoginCookieValidity'];
3487 return $loginCookieValidity >= 1 ? $loginCookieValidity : 1440;
3491 * @param array<int|string, mixed> $settings
3493 * @psalm-return 0|positive-int
3495 private function setLoginCookieStore(array $settings): int
3497 if (! isset($settings['LoginCookieStore'])) {
3498 return 0;
3501 $loginCookieStore = (int) $settings['LoginCookieStore'];
3503 return $loginCookieStore >= 1 ? $loginCookieStore : 0;
3506 /** @param array<int|string, mixed> $settings */
3507 private function setLoginCookieDeleteAll(array $settings): bool
3509 if (! isset($settings['LoginCookieDeleteAll'])) {
3510 return true;
3513 return (bool) $settings['LoginCookieDeleteAll'];
3516 /** @param array<int|string, mixed> $settings */
3517 private function setUseDbSearch(array $settings): bool
3519 if (! isset($settings['UseDbSearch'])) {
3520 return true;
3523 return (bool) $settings['UseDbSearch'];
3526 /** @param array<int|string, mixed> $settings */
3527 private function setIgnoreMultiSubmitErrors(array $settings): bool
3529 if (! isset($settings['IgnoreMultiSubmitErrors'])) {
3530 return false;
3533 return (bool) $settings['IgnoreMultiSubmitErrors'];
3536 /** @param array<int|string, mixed> $settings */
3537 private function setURLQueryEncryption(array $settings): bool
3539 if (! isset($settings['URLQueryEncryption'])) {
3540 return false;
3543 return (bool) $settings['URLQueryEncryption'];
3546 /** @param array<int|string, mixed> $settings */
3547 private function setURLQueryEncryptionSecretKey(array $settings): string
3549 if (! isset($settings['URLQueryEncryptionSecretKey'])) {
3550 return '';
3553 return (string) $settings['URLQueryEncryptionSecretKey'];
3556 /** @param array<int|string, mixed> $settings */
3557 private function setAllowArbitraryServer(array $settings): bool
3559 if (! isset($settings['AllowArbitraryServer'])) {
3560 return false;
3563 return (bool) $settings['AllowArbitraryServer'];
3566 /** @param array<int|string, mixed> $settings */
3567 private function setArbitraryServerRegexp(array $settings): string
3569 if (! isset($settings['ArbitraryServerRegexp'])) {
3570 return '';
3573 return (string) $settings['ArbitraryServerRegexp'];
3577 * @param array<int|string, mixed> $settings
3579 * @psalm-return 'invisible'|'checkbox'
3581 private function setCaptchaMethod(array $settings): string
3583 if (! isset($settings['CaptchaMethod']) || $settings['CaptchaMethod'] !== 'checkbox') {
3584 return 'invisible';
3587 return 'checkbox';
3590 /** @param array<int|string, mixed> $settings */
3591 private function setCaptchaApi(array $settings): string
3593 if (! isset($settings['CaptchaApi'])) {
3594 return 'https://www.google.com/recaptcha/api.js';
3597 return (string) $settings['CaptchaApi'];
3600 /** @param array<int|string, mixed> $settings */
3601 private function setCaptchaCsp(array $settings): string
3603 if (! isset($settings['CaptchaCsp'])) {
3604 return 'https://apis.google.com https://www.google.com/recaptcha/'
3605 . ' https://www.gstatic.com/recaptcha/ https://ssl.gstatic.com/';
3608 return (string) $settings['CaptchaCsp'];
3611 /** @param array<int|string, mixed> $settings */
3612 private function setCaptchaRequestParam(array $settings): string
3614 if (! isset($settings['CaptchaRequestParam'])) {
3615 return 'g-recaptcha';
3618 return (string) $settings['CaptchaRequestParam'];
3621 /** @param array<int|string, mixed> $settings */
3622 private function setCaptchaResponseParam(array $settings): string
3624 if (! isset($settings['CaptchaResponseParam'])) {
3625 return 'g-recaptcha-response';
3628 return (string) $settings['CaptchaResponseParam'];
3631 /** @param array<int|string, mixed> $settings */
3632 private function setCaptchaLoginPublicKey(array $settings): string
3634 if (! isset($settings['CaptchaLoginPublicKey'])) {
3635 return '';
3638 return (string) $settings['CaptchaLoginPublicKey'];
3641 /** @param array<int|string, mixed> $settings */
3642 private function setCaptchaLoginPrivateKey(array $settings): string
3644 if (! isset($settings['CaptchaLoginPrivateKey'])) {
3645 return '';
3648 return (string) $settings['CaptchaLoginPrivateKey'];
3651 /** @param array<int|string, mixed> $settings */
3652 private function setCaptchaSiteVerifyURL(array $settings): string
3654 if (! isset($settings['CaptchaSiteVerifyURL'])) {
3655 return '';
3658 return (string) $settings['CaptchaSiteVerifyURL'];
3661 /** @param array<int|string, mixed> $settings */
3662 private function setEnableDragDropImport(array $settings): bool
3664 if (! isset($settings['enable_drag_drop_import'])) {
3665 return true;
3668 return (bool) $settings['enable_drag_drop_import'];
3671 /** @param array<int|string, mixed> $settings */
3672 private function setShowDatabasesNavigationAsTree(array $settings): bool
3674 if (! isset($settings['ShowDatabasesNavigationAsTree'])) {
3675 return true;
3678 return (bool) $settings['ShowDatabasesNavigationAsTree'];
3682 * @param array<int|string, mixed> $settings
3684 * @psalm-return positive-int
3686 private function setFirstLevelNavigationItems(array $settings): int
3688 if (! isset($settings['FirstLevelNavigationItems'])) {
3689 return 100;
3692 $firstLevelNavigationItems = (int) $settings['FirstLevelNavigationItems'];
3694 return $firstLevelNavigationItems >= 1 ? $firstLevelNavigationItems : 100;
3698 * @param array<int|string, mixed> $settings
3700 * @psalm-return positive-int
3702 private function setMaxNavigationItems(array $settings): int
3704 if (! isset($settings['MaxNavigationItems'])) {
3705 return 50;
3708 $maxNavigationItems = (int) $settings['MaxNavigationItems'];
3710 return $maxNavigationItems >= 1 ? $maxNavigationItems : 50;
3713 /** @param array<int|string, mixed> $settings */
3714 private function setNavigationTreeEnableGrouping(array $settings): bool
3716 if (! isset($settings['NavigationTreeEnableGrouping'])) {
3717 return true;
3720 return (bool) $settings['NavigationTreeEnableGrouping'];
3723 /** @param array<int|string, mixed> $settings */
3724 private function setNavigationTreeDbSeparator(array $settings): string
3726 if (! isset($settings['NavigationTreeDbSeparator'])) {
3727 return '_';
3730 return (string) $settings['NavigationTreeDbSeparator'];
3734 * @param array<int|string, mixed> $settings
3736 * @return false|string|string[]
3738 private function setNavigationTreeTableSeparator(array $settings): false|string|array
3740 if (! isset($settings['NavigationTreeTableSeparator'])) {
3741 return '__';
3744 if ($settings['NavigationTreeTableSeparator'] === false) {
3745 return false;
3748 if (! is_array($settings['NavigationTreeTableSeparator'])) {
3749 return (string) $settings['NavigationTreeTableSeparator'];
3752 if ($settings['NavigationTreeTableSeparator'] !== []) {
3753 $navigationTreeTableSeparator = [];
3754 /** @var mixed $separator */
3755 foreach ($settings['NavigationTreeTableSeparator'] as $separator) {
3756 $navigationTreeTableSeparator[] = (string) $separator;
3759 return $navigationTreeTableSeparator;
3762 return '__';
3766 * @param array<int|string, mixed> $settings
3768 * @psalm-return positive-int
3770 private function setNavigationTreeTableLevel(array $settings): int
3772 if (! isset($settings['NavigationTreeTableLevel'])) {
3773 return 1;
3776 $navigationTreeTableLevel = (int) $settings['NavigationTreeTableLevel'];
3778 return $navigationTreeTableLevel >= 2 ? $navigationTreeTableLevel : 1;
3781 /** @param array<int|string, mixed> $settings */
3782 private function setNavigationLinkWithMainPanel(array $settings): bool
3784 if (! isset($settings['NavigationLinkWithMainPanel'])) {
3785 return true;
3788 return (bool) $settings['NavigationLinkWithMainPanel'];
3791 /** @param array<int|string, mixed> $settings */
3792 private function setNavigationDisplayLogo(array $settings): bool
3794 if (! isset($settings['NavigationDisplayLogo'])) {
3795 return true;
3798 return (bool) $settings['NavigationDisplayLogo'];
3801 /** @param array<int|string, mixed> $settings */
3802 private function setNavigationLogoLink(array $settings): string
3804 if (! isset($settings['NavigationLogoLink'])) {
3805 return 'index.php';
3808 return (string) $settings['NavigationLogoLink'];
3812 * @param array<int|string, mixed> $settings
3814 * @psalm-return 'main'|'new'
3816 private function setNavigationLogoLinkWindow(array $settings): string
3818 if (! isset($settings['NavigationLogoLinkWindow']) || $settings['NavigationLogoLinkWindow'] !== 'new') {
3819 return 'main';
3822 return 'new';
3826 * @param array<int|string, mixed> $settings
3828 * @psalm-return 0|positive-int
3830 private function setNumRecentTables(array $settings): int
3832 if (! isset($settings['NumRecentTables'])) {
3833 return 10;
3836 $numRecentTables = (int) $settings['NumRecentTables'];
3838 return $numRecentTables >= 0 ? $numRecentTables : 10;
3842 * @param array<int|string, mixed> $settings
3844 * @psalm-return 0|positive-int
3846 private function setNumFavoriteTables(array $settings): int
3848 if (! isset($settings['NumFavoriteTables'])) {
3849 return 10;
3852 $numFavoriteTables = (int) $settings['NumFavoriteTables'];
3854 return $numFavoriteTables >= 0 ? $numFavoriteTables : 10;
3858 * @param array<int|string, mixed> $settings
3860 * @psalm-return positive-int
3862 private function setNavigationTreeDisplayItemFilterMinimum(array $settings): int
3864 if (! isset($settings['NavigationTreeDisplayItemFilterMinimum'])) {
3865 return 30;
3868 $navigationTreeDisplayItemFilterMinimum = (int) $settings['NavigationTreeDisplayItemFilterMinimum'];
3870 return $navigationTreeDisplayItemFilterMinimum >= 1 ? $navigationTreeDisplayItemFilterMinimum : 30;
3873 /** @param array<int|string, mixed> $settings */
3874 private function setNavigationDisplayServers(array $settings): bool
3876 if (! isset($settings['NavigationDisplayServers'])) {
3877 return true;
3880 return (bool) $settings['NavigationDisplayServers'];
3883 /** @param array<int|string, mixed> $settings */
3884 private function setDisplayServersList(array $settings): bool
3886 if (! isset($settings['DisplayServersList'])) {
3887 return false;
3890 return (bool) $settings['DisplayServersList'];
3894 * @param array<int|string, mixed> $settings
3896 * @psalm-return positive-int
3898 private function setNavigationTreeDisplayDbFilterMinimum(array $settings): int
3900 if (! isset($settings['NavigationTreeDisplayDbFilterMinimum'])) {
3901 return 30;
3904 $navigationTreeDisplayDbFilterMinimum = (int) $settings['NavigationTreeDisplayDbFilterMinimum'];
3906 return $navigationTreeDisplayDbFilterMinimum >= 1 ? $navigationTreeDisplayDbFilterMinimum : 30;
3910 * @param array<int|string, mixed> $settings
3912 * @psalm-return 'structure'|'sql'|'search'|'insert'|'browse'
3914 private function setNavigationTreeDefaultTabTable(array $settings): string
3916 if (! isset($settings['NavigationTreeDefaultTabTable'])) {
3917 return 'structure';
3920 return match ($settings['NavigationTreeDefaultTabTable']) {
3921 'sql', 'tbl_sql.php' => 'sql',
3922 'search', 'tbl_select.php' => 'search',
3923 'insert', 'tbl_change.php' => 'insert',
3924 'browse', 'sql.php' => 'browse',
3925 default => 'structure',
3930 * @param array<int|string, mixed> $settings
3932 * @psalm-return 'structure'|'sql'|'search'|'insert'|'browse'|''
3934 private function setNavigationTreeDefaultTabTable2(array $settings): string
3936 if (! isset($settings['NavigationTreeDefaultTabTable2'])) {
3937 return '';
3940 return match ($settings['NavigationTreeDefaultTabTable2']) {
3941 'structure', 'tbl_structure.php' => 'structure',
3942 'sql', 'tbl_sql.php' => 'sql',
3943 'search', 'tbl_select.php' => 'search',
3944 'insert', 'tbl_change.php' => 'insert',
3945 'browse', 'sql.php' => 'browse',
3946 default => '',
3950 /** @param array<int|string, mixed> $settings */
3951 private function setNavigationTreeEnableExpansion(array $settings): bool
3953 if (! isset($settings['NavigationTreeEnableExpansion'])) {
3954 return true;
3957 return (bool) $settings['NavigationTreeEnableExpansion'];
3960 /** @param array<int|string, mixed> $settings */
3961 private function setNavigationTreeShowTables(array $settings): bool
3963 if (! isset($settings['NavigationTreeShowTables'])) {
3964 return true;
3967 return (bool) $settings['NavigationTreeShowTables'];
3970 /** @param array<int|string, mixed> $settings */
3971 private function setNavigationTreeShowViews(array $settings): bool
3973 if (! isset($settings['NavigationTreeShowViews'])) {
3974 return true;
3977 return (bool) $settings['NavigationTreeShowViews'];
3980 /** @param array<int|string, mixed> $settings */
3981 private function setNavigationTreeShowFunctions(array $settings): bool
3983 if (! isset($settings['NavigationTreeShowFunctions'])) {
3984 return true;
3987 return (bool) $settings['NavigationTreeShowFunctions'];
3990 /** @param array<int|string, mixed> $settings */
3991 private function setNavigationTreeShowProcedures(array $settings): bool
3993 if (! isset($settings['NavigationTreeShowProcedures'])) {
3994 return true;
3997 return (bool) $settings['NavigationTreeShowProcedures'];
4000 /** @param array<int|string, mixed> $settings */
4001 private function setNavigationTreeShowEvents(array $settings): bool
4003 if (! isset($settings['NavigationTreeShowEvents'])) {
4004 return true;
4007 return (bool) $settings['NavigationTreeShowEvents'];
4011 * @param array<int|string, mixed> $settings
4013 * @psalm-return 0|positive-int
4015 private function setNavigationWidth(array $settings): int
4017 if (! isset($settings['NavigationWidth'])) {
4018 return 240;
4021 $navigationWidth = (int) $settings['NavigationWidth'];
4023 return $navigationWidth >= 0 ? $navigationWidth : 240;
4026 /** @param array<int|string, mixed> $settings */
4027 private function setNavigationTreeAutoexpandSingleDb(array $settings): bool
4029 if (! isset($settings['NavigationTreeAutoexpandSingleDb'])) {
4030 return true;
4033 return (bool) $settings['NavigationTreeAutoexpandSingleDb'];
4036 /** @param array<int|string, mixed> $settings */
4037 private function setShowStats(array $settings): bool
4039 if (! isset($settings['ShowStats'])) {
4040 return true;
4043 return (bool) $settings['ShowStats'];
4046 /** @param array<int|string, mixed> $settings */
4047 private function setShowPhpInfo(array $settings): bool
4049 if (! isset($settings['ShowPhpInfo'])) {
4050 return false;
4053 return (bool) $settings['ShowPhpInfo'];
4057 * @param array<int|string, mixed> $settings
4059 * @psalm-return bool|'database-server'|'web-server'
4061 private function setShowServerInfo(array $settings): bool|string
4063 if (! isset($settings['ShowServerInfo'])) {
4064 return true;
4067 if ($settings['ShowServerInfo'] === 'database-server') {
4068 return 'database-server';
4071 if ($settings['ShowServerInfo'] === 'web-server') {
4072 return 'web-server';
4075 return (bool) $settings['ShowServerInfo'];
4078 /** @param array<int|string, mixed> $settings */
4079 private function setShowChgPassword(array $settings): bool
4081 if (! isset($settings['ShowChgPassword'])) {
4082 return true;
4085 return (bool) $settings['ShowChgPassword'];
4088 /** @param array<int|string, mixed> $settings */
4089 private function setShowCreateDb(array $settings): bool
4091 if (! isset($settings['ShowCreateDb'])) {
4092 return true;
4095 return (bool) $settings['ShowCreateDb'];
4098 /** @param array<int|string, mixed> $settings */
4099 private function setShowDbStructureCharset(array $settings): bool
4101 if (! isset($settings['ShowDbStructureCharset'])) {
4102 return false;
4105 return (bool) $settings['ShowDbStructureCharset'];
4108 /** @param array<int|string, mixed> $settings */
4109 private function setShowDbStructureComment(array $settings): bool
4111 if (! isset($settings['ShowDbStructureComment'])) {
4112 return false;
4115 return (bool) $settings['ShowDbStructureComment'];
4118 /** @param array<int|string, mixed> $settings */
4119 private function setShowDbStructureCreation(array $settings): bool
4121 if (! isset($settings['ShowDbStructureCreation'])) {
4122 return false;
4125 return (bool) $settings['ShowDbStructureCreation'];
4128 /** @param array<int|string, mixed> $settings */
4129 private function setShowDbStructureLastUpdate(array $settings): bool
4131 if (! isset($settings['ShowDbStructureLastUpdate'])) {
4132 return false;
4135 return (bool) $settings['ShowDbStructureLastUpdate'];
4138 /** @param array<int|string, mixed> $settings */
4139 private function setShowDbStructureLastCheck(array $settings): bool
4141 if (! isset($settings['ShowDbStructureLastCheck'])) {
4142 return false;
4145 return (bool) $settings['ShowDbStructureLastCheck'];
4148 /** @param array<int|string, mixed> $settings */
4149 private function setHideStructureActions(array $settings): bool
4151 if (! isset($settings['HideStructureActions'])) {
4152 return true;
4155 return (bool) $settings['HideStructureActions'];
4158 /** @param array<int|string, mixed> $settings */
4159 private function setShowColumnComments(array $settings): bool
4161 if (! isset($settings['ShowColumnComments'])) {
4162 return true;
4165 return (bool) $settings['ShowColumnComments'];
4169 * @param array<int|string, mixed> $settings
4171 * @psalm-return 'text'|'icons'|'both'
4173 private function setTableNavigationLinksMode(array $settings): string
4175 if (
4176 ! isset($settings['TableNavigationLinksMode'])
4177 || ! in_array($settings['TableNavigationLinksMode'], ['text', 'both'], true)
4179 return 'icons';
4182 return $settings['TableNavigationLinksMode'];
4185 /** @param array<int|string, mixed> $settings */
4186 private function setShowAll(array $settings): bool
4188 if (! isset($settings['ShowAll'])) {
4189 return false;
4192 return (bool) $settings['ShowAll'];
4196 * @param array<int|string, mixed> $settings
4198 * @psalm-return positive-int
4200 private function setMaxRows(array $settings): int
4202 if (! isset($settings['MaxRows'])) {
4203 return 25;
4206 $maxRows = (int) $settings['MaxRows'];
4208 return $maxRows >= 1 ? $maxRows : 25;
4212 * @param array<int|string, mixed> $settings
4214 * @psalm-return 'ASC'|'DESC'|'SMART'
4216 private function setOrder(array $settings): string
4218 if (! isset($settings['Order']) || ! in_array($settings['Order'], ['ASC', 'DESC'], true)) {
4219 return 'SMART';
4222 return $settings['Order'];
4225 /** @param array<int|string, mixed> $settings */
4226 private function setSaveCellsAtOnce(array $settings): bool
4228 if (! isset($settings['SaveCellsAtOnce'])) {
4229 return false;
4232 return (bool) $settings['SaveCellsAtOnce'];
4236 * @param array<int|string, mixed> $settings
4238 * @psalm-return 'double-click'|'click'|'disabled'
4240 private function setGridEditing(array $settings): string
4242 if (! isset($settings['GridEditing']) || ! in_array($settings['GridEditing'], ['click', 'disabled'], true)) {
4243 return 'double-click';
4246 return $settings['GridEditing'];
4250 * @param array<int|string, mixed> $settings
4252 * @psalm-return 'K'|'D'
4254 private function setRelationalDisplay(array $settings): string
4256 if (! isset($settings['RelationalDisplay']) || $settings['RelationalDisplay'] !== 'D') {
4257 return 'K';
4260 return 'D';
4264 * @param array<int|string, mixed> $settings
4266 * @psalm-return 'blob'|'noblob'|'all'|false
4268 private function setProtectBinary(array $settings): false|string
4270 if (
4271 ! isset($settings['ProtectBinary'])
4272 || ! in_array($settings['ProtectBinary'], ['noblob', 'all', false], true)
4274 return 'blob';
4277 return $settings['ProtectBinary'];
4280 /** @param array<int|string, mixed> $settings */
4281 private function setShowFunctionFields(array $settings): bool
4283 if (! isset($settings['ShowFunctionFields'])) {
4284 return true;
4287 return (bool) $settings['ShowFunctionFields'];
4290 /** @param array<int|string, mixed> $settings */
4291 private function setShowFieldTypesInDataEditView(array $settings): bool
4293 if (! isset($settings['ShowFieldTypesInDataEditView'])) {
4294 return true;
4297 return (bool) $settings['ShowFieldTypesInDataEditView'];
4301 * @param array<int|string, mixed> $settings
4303 * @psalm-return 'input'|'textarea'
4305 private function setCharEditing(array $settings): string
4307 if (! isset($settings['CharEditing']) || $settings['CharEditing'] !== 'textarea') {
4308 return 'input';
4311 return 'textarea';
4315 * @param array<int|string, mixed> $settings
4317 * @psalm-return 0|positive-int
4319 private function setMinSizeForInputField(array $settings): int
4321 if (! isset($settings['MinSizeForInputField'])) {
4322 return 4;
4325 $minSizeForInputField = (int) $settings['MinSizeForInputField'];
4327 return $minSizeForInputField >= 0 ? $minSizeForInputField : 4;
4331 * @param array<int|string, mixed> $settings
4333 * @psalm-return positive-int
4335 private function setMaxSizeForInputField(array $settings): int
4337 if (! isset($settings['MaxSizeForInputField'])) {
4338 return 60;
4341 $maxSizeForInputField = (int) $settings['MaxSizeForInputField'];
4343 return $maxSizeForInputField >= 1 ? $maxSizeForInputField : 60;
4347 * @param array<int|string, mixed> $settings
4349 * @psalm-return positive-int
4351 private function setInsertRows(array $settings): int
4353 if (! isset($settings['InsertRows'])) {
4354 return 2;
4357 $insertRows = (int) $settings['InsertRows'];
4359 return $insertRows >= 1 ? $insertRows : 2;
4363 * @param array<int|string, mixed> $settings
4365 * @return string[]
4366 * @psalm-return array{0: 'content-id'|'id-content', 1?: 'content-id'|'id-content'}
4368 private function setForeignKeyDropdownOrder(array $settings): array
4370 if (
4371 ! isset($settings['ForeignKeyDropdownOrder'])
4372 || ! is_array($settings['ForeignKeyDropdownOrder'])
4373 || ! isset($settings['ForeignKeyDropdownOrder'][0])
4374 || ! in_array($settings['ForeignKeyDropdownOrder'][0], ['content-id', 'id-content'], true)
4376 return ['content-id', 'id-content'];
4379 if (
4380 ! isset($settings['ForeignKeyDropdownOrder'][1])
4381 || ! in_array($settings['ForeignKeyDropdownOrder'][1], ['content-id', 'id-content'], true)
4383 return [$settings['ForeignKeyDropdownOrder'][0]];
4386 return [$settings['ForeignKeyDropdownOrder'][0], $settings['ForeignKeyDropdownOrder'][1]];
4390 * @param array<int|string, mixed> $settings
4392 * @psalm-return positive-int
4394 private function setForeignKeyMaxLimit(array $settings): int
4396 if (! isset($settings['ForeignKeyMaxLimit'])) {
4397 return 100;
4400 $foreignKeyMaxLimit = (int) $settings['ForeignKeyMaxLimit'];
4402 return $foreignKeyMaxLimit >= 1 ? $foreignKeyMaxLimit : 100;
4406 * @param array<int|string, mixed> $settings
4408 * @psalm-return 'default'|'enable'|'disable'
4410 private function setDefaultForeignKeyChecks(array $settings): string
4412 if (
4413 ! isset($settings['DefaultForeignKeyChecks'])
4414 || ! in_array($settings['DefaultForeignKeyChecks'], ['enable', 'disable'], true)
4416 return 'default';
4419 return $settings['DefaultForeignKeyChecks'];
4422 /** @param array<int|string, mixed> $settings */
4423 private function setZipDump(array $settings): bool
4425 if (! isset($settings['ZipDump'])) {
4426 return true;
4429 return (bool) $settings['ZipDump'];
4432 /** @param array<int|string, mixed> $settings */
4433 private function setGZipDump(array $settings): bool
4435 if (! isset($settings['GZipDump'])) {
4436 return true;
4439 return (bool) $settings['GZipDump'];
4442 /** @param array<int|string, mixed> $settings */
4443 private function setBZipDump(array $settings): bool
4445 if (! isset($settings['BZipDump'])) {
4446 return true;
4449 return (bool) $settings['BZipDump'];
4452 /** @param array<int|string, mixed> $settings */
4453 private function setCompressOnFly(array $settings): bool
4455 if (! isset($settings['CompressOnFly'])) {
4456 return true;
4459 return (bool) $settings['CompressOnFly'];
4463 * @param array<int|string, mixed> $settings
4465 * @psalm-return 'icons'|'text'|'both'
4467 private function setTabsMode(array $settings): string
4469 if (! isset($settings['TabsMode']) || ! in_array($settings['TabsMode'], ['icons', 'text'], true)) {
4470 return 'both';
4473 return $settings['TabsMode'];
4477 * @param array<int|string, mixed> $settings
4479 * @psalm-return 'icons'|'text'|'both'
4481 private function setActionLinksMode(array $settings): string
4483 if (
4484 ! isset($settings['ActionLinksMode'])
4485 || ! in_array($settings['ActionLinksMode'], ['icons', 'text'], true)
4487 return 'both';
4490 return $settings['ActionLinksMode'];
4494 * @param array<int|string, mixed> $settings
4496 * @psalm-return positive-int
4498 private function setPropertiesNumColumns(array $settings): int
4500 if (! isset($settings['PropertiesNumColumns'])) {
4501 return 1;
4504 $propertiesNumColumns = (int) $settings['PropertiesNumColumns'];
4506 return $propertiesNumColumns >= 2 ? $propertiesNumColumns : 1;
4510 * @param array<int|string, mixed> $settings
4512 * @psalm-return 'welcome'|'databases'|'status'|'variables'|'privileges'
4514 private function setDefaultTabServer(array $settings): string
4516 if (! isset($settings['DefaultTabServer'])) {
4517 return 'welcome';
4520 return match ($settings['DefaultTabServer']) {
4521 'databases', 'server_databases.php' => 'databases',
4522 'status', 'server_status.php' => 'status',
4523 'variables', 'server_variables.php' => 'variables',
4524 'privileges', 'server_privileges.php' => 'privileges',
4525 default => 'welcome',
4530 * @param array<int|string, mixed> $settings
4532 * @psalm-return 'structure'|'sql'|'search'|'operations'
4534 private function setDefaultTabDatabase(array $settings): string
4536 if (! isset($settings['DefaultTabDatabase'])) {
4537 return 'structure';
4540 return match ($settings['DefaultTabDatabase']) {
4541 'sql', 'db_sql.php' => 'sql',
4542 'search', 'db_search.php' => 'search',
4543 'operations', 'db_operations.php' => 'operations',
4544 default => 'structure',
4549 * @param array<int|string, mixed> $settings
4551 * @psalm-return 'structure'|'sql'|'search'|'insert'|'browse'
4553 private function setDefaultTabTable(array $settings): string
4555 if (! isset($settings['DefaultTabTable'])) {
4556 return 'browse';
4559 return match ($settings['DefaultTabTable']) {
4560 'structure', 'tbl_structure.php' => 'structure',
4561 'sql', 'tbl_sql.php' => 'sql',
4562 'search', 'tbl_select.php' => 'search',
4563 'insert', 'tbl_change.php' => 'insert',
4564 default => 'browse',
4569 * @param array<int|string, mixed> $settings
4571 * @psalm-return 'icons'|'text'|'both'
4573 private function setRowActionType(array $settings): string
4575 if (! isset($settings['RowActionType']) || ! in_array($settings['RowActionType'], ['icons', 'text'], true)) {
4576 return 'both';
4579 return $settings['RowActionType'];
4582 /** @param array<int|string, mixed> $settings */
4583 private function setExport(array $settings): Export
4585 if (isset($settings['Export']) && is_array($settings['Export'])) {
4586 return new Export($settings['Export']);
4589 return new Export();
4592 /** @param array<int|string, mixed> $settings */
4593 private function setImport(array $settings): Import
4595 if (isset($settings['Import']) && is_array($settings['Import'])) {
4596 return new Import($settings['Import']);
4599 return new Import();
4602 /** @param array<int|string, mixed> $settings */
4603 private function setSchema(array $settings): Schema
4605 if (isset($settings['Schema']) && is_array($settings['Schema'])) {
4606 return new Schema($settings['Schema']);
4609 return new Schema();
4613 * @param array<int|string, mixed> $settings
4615 * @return string[]
4617 private function setPDFPageSizes(array $settings): array
4619 if (
4620 ! isset($settings['PDFPageSizes'])
4621 || ! is_array($settings['PDFPageSizes'])
4622 || $settings['PDFPageSizes'] === []
4624 return ['A3', 'A4', 'A5', 'letter', 'legal'];
4627 $pdfPageSizes = [];
4628 /** @var mixed $pageSize */
4629 foreach ($settings['PDFPageSizes'] as $pageSize) {
4630 $pdfPageSizes[] = (string) $pageSize;
4633 return $pdfPageSizes;
4636 /** @param array<int|string, mixed> $settings */
4637 private function setPDFDefaultPageSize(array $settings): string
4639 if (! isset($settings['PDFDefaultPageSize'])) {
4640 return 'A4';
4643 return (string) $settings['PDFDefaultPageSize'];
4646 /** @param array<int|string, mixed> $settings */
4647 private function setDefaultLang(array $settings): string
4649 if (! isset($settings['DefaultLang'])) {
4650 return 'en';
4653 return (string) $settings['DefaultLang'];
4656 /** @param array<int|string, mixed> $settings */
4657 private function setDefaultConnectionCollation(array $settings): string
4659 if (! isset($settings['DefaultConnectionCollation'])) {
4660 return 'utf8mb4_unicode_ci';
4663 return (string) $settings['DefaultConnectionCollation'];
4666 /** @param array<int|string, mixed> $settings */
4667 private function setLang(array $settings): string
4669 if (! isset($settings['Lang'])) {
4670 return '';
4673 return (string) $settings['Lang'];
4676 /** @param array<int|string, mixed> $settings */
4677 private function setFilterLanguages(array $settings): string
4679 if (! isset($settings['FilterLanguages'])) {
4680 return '';
4683 return (string) $settings['FilterLanguages'];
4687 * @param array<int|string, mixed> $settings
4689 * @psalm-return 'auto'|'iconv'|'mb'|'none'
4691 private function setRecodingEngine(array $settings): string
4693 if (
4694 ! isset($settings['RecodingEngine'])
4695 || ! in_array($settings['RecodingEngine'], ['iconv', 'mb', 'none'], true)
4697 return 'auto';
4700 return $settings['RecodingEngine'];
4703 /** @param array<int|string, mixed> $settings */
4704 private function setIconvExtraParams(array $settings): string
4706 if (! isset($settings['IconvExtraParams'])) {
4707 return '//TRANSLIT';
4710 return (string) $settings['IconvExtraParams'];
4714 * @param array<int|string, mixed> $settings
4716 * @return string[]
4718 private function setAvailableCharsets(array $settings): array
4720 if (! isset($settings['AvailableCharsets']) || ! is_array($settings['AvailableCharsets'])) {
4721 return [
4722 'iso-8859-1',
4723 'iso-8859-2',
4724 'iso-8859-3',
4725 'iso-8859-4',
4726 'iso-8859-5',
4727 'iso-8859-6',
4728 'iso-8859-7',
4729 'iso-8859-8',
4730 'iso-8859-9',
4731 'iso-8859-10',
4732 'iso-8859-11',
4733 'iso-8859-12',
4734 'iso-8859-13',
4735 'iso-8859-14',
4736 'iso-8859-15',
4737 'windows-1250',
4738 'windows-1251',
4739 'windows-1252',
4740 'windows-1256',
4741 'windows-1257',
4742 'koi8-r',
4743 'big5',
4744 'gb2312',
4745 'utf-16',
4746 'utf-8',
4747 'utf-7',
4748 'x-user-defined',
4749 'euc-jp',
4750 'ks_c_5601-1987',
4751 'tis-620',
4752 'SHIFT_JIS',
4753 'SJIS',
4754 'SJIS-win',
4758 $availableCharsets = [];
4759 /** @var mixed $availableCharset */
4760 foreach ($settings['AvailableCharsets'] as $availableCharset) {
4761 $availableCharsets[] = (string) $availableCharset;
4764 return $availableCharsets;
4767 /** @param array<int|string, mixed> $settings */
4768 private function setNavigationTreePointerEnable(array $settings): bool
4770 if (! isset($settings['NavigationTreePointerEnable'])) {
4771 return true;
4774 return (bool) $settings['NavigationTreePointerEnable'];
4777 /** @param array<int|string, mixed> $settings */
4778 private function setBrowsePointerEnable(array $settings): bool
4780 if (! isset($settings['BrowsePointerEnable'])) {
4781 return true;
4784 return (bool) $settings['BrowsePointerEnable'];
4787 /** @param array<int|string, mixed> $settings */
4788 private function setBrowseMarkerEnable(array $settings): bool
4790 if (! isset($settings['BrowseMarkerEnable'])) {
4791 return true;
4794 return (bool) $settings['BrowseMarkerEnable'];
4798 * @param array<int|string, mixed> $settings
4800 * @psalm-return positive-int
4802 private function setTextareaCols(array $settings): int
4804 if (! isset($settings['TextareaCols'])) {
4805 return 40;
4808 $textareaCols = (int) $settings['TextareaCols'];
4810 return $textareaCols >= 1 ? $textareaCols : 40;
4814 * @param array<int|string, mixed> $settings
4816 * @psalm-return positive-int
4818 private function setTextareaRows(array $settings): int
4820 if (! isset($settings['TextareaRows'])) {
4821 return 15;
4824 $textareaRows = (int) $settings['TextareaRows'];
4826 return $textareaRows >= 1 ? $textareaRows : 15;
4829 /** @param array<int|string, mixed> $settings */
4830 private function setLongtextDoubleTextarea(array $settings): bool
4832 if (! isset($settings['LongtextDoubleTextarea'])) {
4833 return true;
4836 return (bool) $settings['LongtextDoubleTextarea'];
4839 /** @param array<int|string, mixed> $settings */
4840 private function setTextareaAutoSelect(array $settings): bool
4842 if (! isset($settings['TextareaAutoSelect'])) {
4843 return false;
4846 return (bool) $settings['TextareaAutoSelect'];
4850 * @param array<int|string, mixed> $settings
4852 * @psalm-return positive-int
4854 private function setCharTextareaCols(array $settings): int
4856 if (! isset($settings['CharTextareaCols'])) {
4857 return 40;
4860 $charTextareaCols = (int) $settings['CharTextareaCols'];
4862 return $charTextareaCols >= 1 ? $charTextareaCols : 40;
4866 * @param array<int|string, mixed> $settings
4868 * @psalm-return positive-int
4870 private function setCharTextareaRows(array $settings): int
4872 if (! isset($settings['CharTextareaRows'])) {
4873 return 7;
4876 $charTextareaRows = (int) $settings['CharTextareaRows'];
4878 return $charTextareaRows >= 1 ? $charTextareaRows : 7;
4882 * @param array<int|string, mixed> $settings
4884 * @psalm-return positive-int
4886 private function setLimitChars(array $settings): int
4888 if (! isset($settings['LimitChars'])) {
4889 return 50;
4892 $limitChars = (int) $settings['LimitChars'];
4894 return $limitChars >= 1 ? $limitChars : 50;
4898 * @param array<int|string, mixed> $settings
4900 * @psalm-return 'left'|'right'|'both'|'none'
4902 private function setRowActionLinks(array $settings): string
4904 if (
4905 ! isset($settings['RowActionLinks'])
4906 || ! in_array($settings['RowActionLinks'], ['right', 'both', 'none'], true)
4908 return 'left';
4911 return $settings['RowActionLinks'];
4914 /** @param array<int|string, mixed> $settings */
4915 private function setRowActionLinksWithoutUnique(array $settings): bool
4917 if (! isset($settings['RowActionLinksWithoutUnique'])) {
4918 return false;
4921 return (bool) $settings['RowActionLinksWithoutUnique'];
4925 * @param array<int|string, mixed> $settings
4927 * @psalm-return 'NONE'|'ASC'|'DESC'
4929 private function setTablePrimaryKeyOrder(array $settings): string
4931 if (
4932 ! isset($settings['TablePrimaryKeyOrder'])
4933 || ! in_array($settings['TablePrimaryKeyOrder'], ['ASC', 'DESC'], true)
4935 return 'NONE';
4938 return $settings['TablePrimaryKeyOrder'];
4941 /** @param array<int|string, mixed> $settings */
4942 private function setRememberSorting(array $settings): bool
4944 if (! isset($settings['RememberSorting'])) {
4945 return true;
4948 return (bool) $settings['RememberSorting'];
4951 /** @param array<int|string, mixed> $settings */
4952 private function setShowBrowseComments(array $settings): bool
4954 if (! isset($settings['ShowBrowseComments'])) {
4955 return true;
4958 return (bool) $settings['ShowBrowseComments'];
4961 /** @param array<int|string, mixed> $settings */
4962 private function setShowPropertyComments(array $settings): bool
4964 if (! isset($settings['ShowPropertyComments'])) {
4965 return true;
4968 return (bool) $settings['ShowPropertyComments'];
4972 * @param array<int|string, mixed> $settings
4974 * @psalm-return 0|positive-int
4976 private function setRepeatCells(array $settings): int
4978 if (! isset($settings['RepeatCells'])) {
4979 return 100;
4982 $repeatCells = (int) $settings['RepeatCells'];
4984 return $repeatCells >= 0 ? $repeatCells : 100;
4987 /** @param array<int|string, mixed> $settings */
4988 private function setQueryHistoryDB(array $settings): bool
4990 if (! isset($settings['QueryHistoryDB'])) {
4991 return false;
4994 return (bool) $settings['QueryHistoryDB'];
4998 * @param array<int|string, mixed> $settings
5000 * @psalm-return positive-int
5002 private function setQueryHistoryMax(array $settings): int
5004 if (! isset($settings['QueryHistoryMax'])) {
5005 return 25;
5008 $queryHistoryMax = (int) $settings['QueryHistoryMax'];
5010 return $queryHistoryMax >= 1 ? $queryHistoryMax : 25;
5013 /** @param array<int|string, mixed> $settings */
5014 private function setAllowSharedBookmarks(array $settings): bool
5016 if (! isset($settings['AllowSharedBookmarks'])) {
5017 return true;
5020 return (bool) $settings['AllowSharedBookmarks'];
5023 /** @param array<int|string, mixed> $settings */
5024 private function setBrowseMIME(array $settings): bool
5026 if (! isset($settings['BrowseMIME'])) {
5027 return true;
5030 return (bool) $settings['BrowseMIME'];
5034 * @param array<int|string, mixed> $settings
5036 * @psalm-return positive-int
5038 private function setMaxExactCount(array $settings): int
5040 if (! isset($settings['MaxExactCount'])) {
5041 return 50000;
5044 $maxExactCount = (int) $settings['MaxExactCount'];
5046 return $maxExactCount >= 1 ? $maxExactCount : 50000;
5050 * @param array<int|string, mixed> $settings
5052 * @psalm-return 0|positive-int
5054 private function setMaxExactCountViews(array $settings): int
5056 if (! isset($settings['MaxExactCountViews'])) {
5057 return 0;
5060 $maxExactCountViews = (int) $settings['MaxExactCountViews'];
5062 return $maxExactCountViews >= 1 ? $maxExactCountViews : 0;
5065 /** @param array<int|string, mixed> $settings */
5066 private function setNaturalOrder(array $settings): bool
5068 if (! isset($settings['NaturalOrder'])) {
5069 return true;
5072 return (bool) $settings['NaturalOrder'];
5076 * @param array<int|string, mixed> $settings
5078 * @psalm-return 'open'|'closed'|'disabled'
5080 private function setInitialSlidersState(array $settings): string
5082 if (
5083 ! isset($settings['InitialSlidersState'])
5084 || ! in_array($settings['InitialSlidersState'], ['open', 'disabled'], true)
5086 return 'closed';
5089 return $settings['InitialSlidersState'];
5093 * @param array<int|string, mixed> $settings
5095 * @return string[]
5097 private function setUserprefsDisallow(array $settings): array
5099 if (! isset($settings['UserprefsDisallow']) || ! is_array($settings['UserprefsDisallow'])) {
5100 return [];
5103 $userprefsDisallow = [];
5104 /** @var mixed $userPreference */
5105 foreach ($settings['UserprefsDisallow'] as $userPreference) {
5106 $userprefsDisallow[] = (string) $userPreference;
5109 return $userprefsDisallow;
5112 /** @param array<int|string, mixed> $settings */
5113 private function setUserprefsDeveloperTab(array $settings): bool
5115 if (! isset($settings['UserprefsDeveloperTab'])) {
5116 return false;
5119 return (bool) $settings['UserprefsDeveloperTab'];
5122 /** @param array<int|string, mixed> $settings */
5123 private function setTitleTable(array $settings): string
5125 if (! isset($settings['TitleTable'])) {
5126 return '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@';
5129 return (string) $settings['TitleTable'];
5132 /** @param array<int|string, mixed> $settings */
5133 private function setTitleDatabase(array $settings): string
5135 if (! isset($settings['TitleDatabase'])) {
5136 return '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ | @PHPMYADMIN@';
5139 return (string) $settings['TitleDatabase'];
5142 /** @param array<int|string, mixed> $settings */
5143 private function setTitleServer(array $settings): string
5145 if (! isset($settings['TitleServer'])) {
5146 return '@HTTP_HOST@ / @VSERVER@ | @PHPMYADMIN@';
5149 return (string) $settings['TitleServer'];
5152 /** @param array<int|string, mixed> $settings */
5153 private function setTitleDefault(array $settings): string
5155 if (! isset($settings['TitleDefault'])) {
5156 return '@HTTP_HOST@ | @PHPMYADMIN@';
5159 return (string) $settings['TitleDefault'];
5162 /** @param array<int|string, mixed> $settings */
5163 private function setThemeManager(array $settings): bool
5165 if (! isset($settings['ThemeManager'])) {
5166 return true;
5169 return (bool) $settings['ThemeManager'];
5172 /** @param array<int|string, mixed> $settings */
5173 private function setThemeDefault(array $settings): string
5175 if (! isset($settings['ThemeDefault'])) {
5176 return 'pmahomme';
5179 return (string) $settings['ThemeDefault'];
5182 /** @param array<int|string, mixed> $settings */
5183 private function setThemePerServer(array $settings): bool
5185 if (! isset($settings['ThemePerServer'])) {
5186 return false;
5189 return (bool) $settings['ThemePerServer'];
5192 /** @param array<int|string, mixed> $settings */
5193 private function setDefaultQueryTable(array $settings): string
5195 if (! isset($settings['DefaultQueryTable'])) {
5196 return 'SELECT * FROM @TABLE@ WHERE 1';
5199 return (string) $settings['DefaultQueryTable'];
5202 /** @param array<int|string, mixed> $settings */
5203 private function setDefaultQueryDatabase(array $settings): string
5205 if (! isset($settings['DefaultQueryDatabase'])) {
5206 return '';
5209 return (string) $settings['DefaultQueryDatabase'];
5212 /** @param array<int|string, mixed> $settings */
5213 private function setSQLQuery(array $settings): SqlQueryBox
5215 if (isset($settings['SQLQuery']) && is_array($settings['SQLQuery'])) {
5216 return new SqlQueryBox($settings['SQLQuery']);
5219 return new SqlQueryBox();
5222 /** @param array<int|string, mixed> $settings */
5223 private function setEnableAutocompleteForTablesAndColumns(array $settings): bool
5225 if (! isset($settings['EnableAutocompleteForTablesAndColumns'])) {
5226 return true;
5229 return (bool) $settings['EnableAutocompleteForTablesAndColumns'];
5232 /** @param array<int|string, mixed> $settings */
5233 private function setUploadDir(array $settings): string
5235 if (! isset($settings['UploadDir'])) {
5236 return '';
5239 return (string) $settings['UploadDir'];
5242 /** @param array<int|string, mixed> $settings */
5243 private function setSaveDir(array $settings): string
5245 if (! isset($settings['SaveDir'])) {
5246 return '';
5249 return (string) $settings['SaveDir'];
5252 /** @param array<int|string, mixed> $settings */
5253 private function setTempDir(array $settings): string
5255 $tempDir = ROOT_PATH . 'tmp' . DIRECTORY_SEPARATOR;
5256 if (defined('TEMP_DIR')) {
5257 $tempDir = TEMP_DIR;
5260 if (! isset($settings['TempDir'])) {
5261 return $tempDir;
5264 return (string) $settings['TempDir'];
5268 * @param array<int|string, mixed> $settings
5270 * @psalm-return 'auto'|'yes'|'no'
5272 private function setGD2Available(array $settings): string
5274 if (! isset($settings['GD2Available']) || ! in_array($settings['GD2Available'], ['yes', 'no'], true)) {
5275 return 'auto';
5278 return $settings['GD2Available'];
5282 * @param array<int|string, mixed> $settings
5284 * @return array<string, string>
5286 private function setTrustedProxies(array $settings): array
5288 if (! isset($settings['TrustedProxies']) || ! is_array($settings['TrustedProxies'])) {
5289 return [];
5292 $trustedProxies = [];
5294 * @var int|string $proxy
5295 * @var mixed $header
5297 foreach ($settings['TrustedProxies'] as $proxy => $header) {
5298 if (! is_string($proxy)) {
5299 continue;
5302 $trustedProxies[$proxy] = (string) $header;
5305 return $trustedProxies;
5308 /** @param array<int|string, mixed> $settings */
5309 private function setCheckConfigurationPermissions(array $settings): bool
5311 if (! isset($settings['CheckConfigurationPermissions'])) {
5312 return true;
5315 return (bool) $settings['CheckConfigurationPermissions'];
5319 * @param array<int|string, mixed> $settings
5321 * @psalm-return positive-int
5323 private function setLinkLengthLimit(array $settings): int
5325 if (! isset($settings['LinkLengthLimit'])) {
5326 return 1000;
5329 $linkLengthLimit = (int) $settings['LinkLengthLimit'];
5331 return $linkLengthLimit >= 1 ? $linkLengthLimit : 1000;
5334 /** @param array<int|string, mixed> $settings */
5335 private function setCSPAllow(array $settings): string
5337 if (! isset($settings['CSPAllow'])) {
5338 return '';
5341 return (string) $settings['CSPAllow'];
5344 /** @param array<int|string, mixed> $settings */
5345 private function setDisableMultiTableMaintenance(array $settings): bool
5347 if (! isset($settings['DisableMultiTableMaintenance'])) {
5348 return false;
5351 return (bool) $settings['DisableMultiTableMaintenance'];
5355 * @param array<int|string, mixed> $settings
5357 * @psalm-return 'ask'|'always'|'never'
5359 private function setSendErrorReports(array $settings): string
5361 if (
5362 ! isset($settings['SendErrorReports'])
5363 || ! in_array($settings['SendErrorReports'], ['always', 'never'], true)
5365 return 'ask';
5368 return $settings['SendErrorReports'];
5371 /** @param array<int|string, mixed> $settings */
5372 private function setConsoleEnterExecutes(array $settings): bool
5374 if (! isset($settings['ConsoleEnterExecutes'])) {
5375 return false;
5378 return (bool) $settings['ConsoleEnterExecutes'];
5381 /** @param array<int|string, mixed> $settings */
5382 private function setZeroConf(array $settings): bool
5384 if (! isset($settings['ZeroConf'])) {
5385 return true;
5388 return (bool) $settings['ZeroConf'];
5391 /** @param array<int|string, mixed> $settings */
5392 private function setDebug(array $settings): Debug
5394 if (isset($settings['DBG']) && is_array($settings['DBG'])) {
5395 return new Debug($settings['DBG']);
5398 return new Debug();
5402 * @param array<int|string, mixed> $settings
5404 * @psalm-return 'production'|'development'
5406 private function setEnvironment(array $settings): string
5408 if (! isset($settings['environment']) || $settings['environment'] !== 'development') {
5409 return 'production';
5412 return 'development';
5416 * @param array<int|string, mixed> $settings
5418 * @return array<string, string>
5420 private function setDefaultFunctions(array $settings): array
5422 if (! isset($settings['DefaultFunctions']) || ! is_array($settings['DefaultFunctions'])) {
5423 return [
5424 'FUNC_CHAR' => '',
5425 'FUNC_DATE' => '',
5426 'FUNC_NUMBER' => '',
5427 'FUNC_SPATIAL' => 'GeomFromText',
5428 'FUNC_UUID' => 'UUID',
5429 'first_timestamp' => 'NOW',
5433 $defaultFunctions = [];
5435 * @var int|string $key
5436 * @var mixed $value
5438 foreach ($settings['DefaultFunctions'] as $key => $value) {
5439 if (! is_string($key)) {
5440 continue;
5443 $defaultFunctions[$key] = (string) $value;
5446 return $defaultFunctions;
5450 * @param array<int|string, mixed> $settings
5452 * @psalm-return positive-int
5454 private function setMaxRowPlotLimit(array $settings): int
5456 if (! isset($settings['maxRowPlotLimit'])) {
5457 return 500;
5460 $maxRowPlotLimit = (int) $settings['maxRowPlotLimit'];
5462 return $maxRowPlotLimit >= 1 ? $maxRowPlotLimit : 500;
5465 /** @param array<int|string, mixed> $settings */
5466 private function setShowGitRevision(array $settings): bool
5468 if (! isset($settings['ShowGitRevision'])) {
5469 return true;
5472 return (bool) $settings['ShowGitRevision'];
5476 * @param array<int|string, mixed> $settings
5478 * @return array<string, int|string>
5479 * @psalm-return array{internal: int, human: string}
5481 private function setMysqlMinVersion(array $settings): array
5483 $mysqlMinVersion = ['internal' => 50500, 'human' => '5.5.0'];
5484 if (! isset($settings['MysqlMinVersion']) || ! is_array($settings['MysqlMinVersion'])) {
5485 return $mysqlMinVersion;
5488 if (isset($settings['MysqlMinVersion']['internal'])) {
5489 $mysqlMinVersion['internal'] = (int) $settings['MysqlMinVersion']['internal'];
5492 if (! isset($settings['MysqlMinVersion']['human'])) {
5493 return $mysqlMinVersion;
5496 $mysqlMinVersion['human'] = (string) $settings['MysqlMinVersion']['human'];
5498 return $mysqlMinVersion;
5501 /** @param array<int|string, mixed> $settings */
5502 private function setDisableShortcutKeys(array $settings): bool
5504 if (! isset($settings['DisableShortcutKeys'])) {
5505 return false;
5508 return (bool) $settings['DisableShortcutKeys'];
5511 /** @param array<int|string, mixed> $settings */
5512 private function setConsole(array $settings): Console
5514 if (isset($settings['Console']) && is_array($settings['Console'])) {
5515 return new Console($settings['Console']);
5518 return new Console();
5521 /** @param array<int|string, mixed> $settings */
5522 private function setDefaultTransformations(array $settings): Transformations
5524 if (isset($settings['DefaultTransformations']) && is_array($settings['DefaultTransformations'])) {
5525 return new Transformations($settings['DefaultTransformations']);
5528 return new Transformations();
5532 * @param array<int|string, mixed> $settings
5534 * @psalm-return 0|positive-int
5536 private function setFirstDayOfCalendar(array $settings): int
5538 if (! isset($settings['FirstDayOfCalendar'])) {
5539 return 0;
5542 $firstDayOfCalendar = (int) $settings['FirstDayOfCalendar'];
5544 return $firstDayOfCalendar >= 1 && $firstDayOfCalendar <= 7 ? $firstDayOfCalendar : 0;