diff --git a/.devilbox/www/config.php b/.devilbox/www/config.php index 218c1610..d0b0419a 100644 --- a/.devilbox/www/config.php +++ b/.devilbox/www/config.php @@ -14,7 +14,7 @@ putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1'); $DEVILBOX_VERSION = 'v0.15'; -$DEVILBOX_DATE = '2018-12-26'; +$DEVILBOX_DATE = '2018-12-31'; $DEVILBOX_API_PAGE = 'devilbox-api/status.json'; // diff --git a/.devilbox/www/htdocs/credits.php b/.devilbox/www/htdocs/credits.php index 0325b2ec..7e762129 100644 --- a/.devilbox/www/htdocs/credits.php +++ b/.devilbox/www/htdocs/credits.php @@ -60,37 +60,42 @@ <tr> <td>Adminer</td> <td>Apache License 2.0 or GPL 2</td> - <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a href="https://github.com/vrana/adminer">vrana/adminer</a></td> + <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/vrana/adminer">vrana/adminer</a></td> </tr> <tr> <td>Bootstrap</td> <td>MIT</td> - <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a href="https://github.com/twbs/bootstrap">twbs/bootstrap</a></td> + <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/twbs/bootstrap">twbs/bootstrap</a></td> </tr> <tr> <td>Font Awesome (css)</td> <td>MIT</td> - <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a href="https://github.com/FortAwesome/Font-Awesome">FortAwesome/Font-Awesome</a></td> + <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/FortAwesome/Font-Awesome">FortAwesome/Font-Awesome</a></td> </tr> <tr> <td>Font Awesome (fonts)</td> <td>SIL OFL 1.1</td> - <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a href="https://github.com/FortAwesome/Font-Awesome">FortAwesome/Font-Awesome</a></td> + <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/FortAwesome/Font-Awesome">FortAwesome/Font-Awesome</a></td> </tr> <tr> <td>Opcache GUI</td> <td>MIT</td> - <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a href="https://github.com/amnuts/opcache-gui">amnuts/opcache-gui</a></td> + <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/amnuts/opcache-gui">amnuts/opcache-gui</a></td> </tr> <tr> <td>phpMyAdmin</td> <td>GPL 2.0</td> - <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a href="https://github.com/phpmyadmin/phpmyadmin">phpmyadmin/phpmyadmin</a></td> + <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/phpmyadmin/phpmyadmin">phpmyadmin/phpmyadmin</a></td> + </tr> + <tr> + <td>phpPgAdmin</td> + <td>GPL 2.0</td> + <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/phppgadmin/phppgadmin">phppgadmin/phppgadmin</a></td> </tr> <tr> <td>PHPRedMin</td> <td>BSD 3-Clause License</td> - <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a href="https://github.com/sasanrose/phpredmin">sasanrose/phpredmin</a></td> + <td><i class="fa fa-github-alt" aria-hidden="true"></i> <a target="_blank" href="https://github.com/sasanrose/phpredmin">sasanrose/phpredmin</a></td> </tr> </tbody> </table> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/CREDITS b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/CREDITS new file mode 100644 index 00000000..b823ebc2 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/CREDITS @@ -0,0 +1,108 @@ +CREDITS +------- + +Project Administration & Major Projects + +- Robert Treat (xzilla) + +Translators + +- Kuo Chaoyi (Chinese Utf8) +- Angelo Rigo (Brazilan Portuguese) +- Chan Min Wai (Chinese) +- He Wei Ping (Chinese) +- Chih-Hsin Lee (Trad. Chinese) +- Hugo Jonker (Dutch) +- Pascal Peyre (French) +- Guillaume Lelarge (French) +- ioguix (French) +- H. Etzel, Markus Bertheau (German) +- Kalef (Italian) +- Tadashi Jokagi (Japanese) +- Rafal Slubowski (Polish) +- Alexander Khodorisky (Russian) +- Martin Marqu�s (Spanish) +- Andrej Misovic (Slovak) +- Devrim Gunduz (Turkish) +- Libor Vanek (Czech) +- Marek Cernock� (Czech) +- Stefan Malmqvist (Swedish) +- Nicola Soranzo (Italian) +- Petri Jooste (Afrikaans) +- Sulyok P�ter (Hungarian) +- Zaki Almuallim (Arabic) +- Erdenemandal Bat-Erdene (Mongolian) +- Alex Rootoff (Ukrainian) +- Jonatan (Hebrew) +- Alin Vaida (Romanian) +- Arne Eckmann (Danish) +- Francisco Cabrita (Portuguese) +- Bernat Pegueroles (Catalan) +- Fernando Wendt (Brazilan Portuguese) +- Adamantios Diamantidis (Greek) +- Marek �ernock� (Czech) +- Alexey Baturin (Russian UTF8) +- Adri�n Chaves Fern�ndez (Galician) + +Look & Feel + +- Davey (CSS) +- ioguix (Cappuccino theme) +- Tomasz Pala (Gotar theme) +- Felipe Figueroa (Bootstrap theme) + +Contributors + +- Dan Wilson +- Christopher Kings-Lynne +- Jehan-Guillaume (ioguix) De Rorthais +- Felix Meinhold +- Jean-Michel Poure +- Rafal Slubowski +- Brett Toolin +- Mark Gibson (Pop-up SQL window) +- Nicola Soranzo +- Oliver Meyer & Sven Kiera (Table icons link to browse table) +- Bryan Encina (SQL window improvements, bug fixes, admin) +- Dan Boren (Object comments) +- Adrian Nida (Fix time outs) +- Russell Smith +- Guillaume Lelarge +- Ian Barwick +- Javier Carlos +- Eric Kinolik +- John Jawed +- Karl O. Pinc +- Tomasz Pala +- Ivan Zolotukhin +- Kristoffer `spq` Janke +- Leonardo Augusto Sapiras (Improve phpPgAdmin ergonomy during the GSoC 2010, with ioguix as mentor) +- Julien Rouhaud, aka. rjuju (nested groups) +- Felipe Figueroa aka. amenadiel + + +Third Party Libraries + +- Highlight.php (Jacob D. Cohen of rafb.net) +- XLoadTree2 (Erik Arvidsson & Emil A Eklund of webfx.eae.net) +- jQuery (http://jquery.com/) + +Corporate Sponsors + +Project resources: +- github.com - Official project home +- Kattare Internet (http://www.kattare.com/) - Hosting the demo server +- Sourceforge.net - Hosting, Source Package Provider, Legacy project services (Bug/Feature Tracker, mailing lists, code repository) + +Ongoing contributors: + +- OmniTI ( https://omniti.com ) - sponsors developpment as Robert Treat employer + +Feature contributors: + +- SpikeSource (www.spikesource.com) - Slony support +- Google Summer of Code (http://code.google.com/soc/2006/pgsql/appinfo.html?csaid=DB096D908B948D89) - phpPgAdmin Improvements +- Google Summer of Code (http://code.google.com/soc/2007/postgres/appinfo.html?csaid=E89B3D5E2DC4170A) - Full Text Search in PostgreSQL GUI Tools +- Google Summer of Code (http://code.google.com/p/google-summer-of-code-2010-postgres/downloads/detail?name=Leonardo_Augusto_Sapiras.tar.gz) - Improve phpPgAdmin ergonomy +- Dalibo ( http://dalibo.com ) - sponsored development as Jehan-Guillaume (ioguix) de Rorthais employer + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/DEVELOPERS b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/DEVELOPERS new file mode 100644 index 00000000..b88c170f --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/DEVELOPERS @@ -0,0 +1,155 @@ +DEVELOPER INFO +-------------- + +phpPgAdmin is Free/Open Source software and contributions are welcome from +everyone. Please be sure to join the developers' mailing list: + + https://lists.sourceforge.net/lists/listinfo/phppgadmin-devel + +SOURCE REPOSITORY +----------------- + +phpPgAdmin uses git for source control management. The phpPgAdmin git repository +is hosted at github: + + https://github.com/phppgadmin/phppgadmin + +To clone the phpPgAdmin source to your development system, execute the following +command: + + git clone git://github.com/phppgadmin/phppgadmin.git + +After making changes, generate a patch using "git format-patch" and submit it +to the phpPgAdmin devel mailing list. + +Alternatively you can clone the phppgadmin repository on github and make a pull +request. For details on how to make pull requests, see: + + https://help.github.com/articles/using-pull-requests + +Please note that submitting code is considered a transfer of copyright to the +phpPgAdmin project. phpPgAdmin is made available under the GPL v2 license. + +Push access to the main phpPgAdmin git repository can be granted to developers +with a track record of useful contributions to phpPgAdmin at the discretion +of the phpPgAdmin development team. + +TIPS FOR DEVELOPERS +------------------- + +When you submit code to phpPgAdmin, we do expect it to adhere to the existing +coding standards in the source. So, instead of using your personal favourite +code layout style, please format it to look like surrounding code. +In general, we want the code to be portable, standard compliant (e.g. to W3C +(X)HTML and CSS) and independent of specific configurations of PHP, the web +server, PostgreSQL or the user browser. We also try to support as many versions +as possible of these applications. + +Test your code properly! For example, if you are developing a feature to create +domains, try naming your domain all of the following: + + * " + * ' + * \ + * words with spaces + * <br><br><br> + +Don't forget to make sure your changes still pass the existing Selenium test +suite. Additionally, you should add or update the test suite as needed to +cover your new features. + +If you are adding a new class function, be sure to use the "clean", +"fieldClean", "arrayClean" and "fieldArrayClean" functions to properly escape +odd characters in user input. Examine existing functions that do similar +things to yours to get yours right. + +When writing data to the display, you should always urlencode() variables in +HREFs and htmlspecialchars() variables in forms. Rather than use action="" +attributes in HTML form elements use action="thisformname.php". This +ensures that browsers remove query strings when expanding the given +relative URL into a full URL. + +When working on database classes, always schema qualify your SQL where it is +possible with the current schema ($data->_schema) for pg73+ classes. Then don't +forget to write your method for older classes which don't support schemas. + +When working with git, always make sure to do a 'git pull' both before you +start; so you have the latest code to work with; and also again before you +create your patch; to minimize the chance of having conflicts. If you plan to +submit your code via github pull requests, we strongly recommend doing your +work in a feature specific branch. If you want to submit multiple patches, +they should all live in their own branch. Remember, smaller changes are easier +to review, approve, and merge. + + +COMMON VARIABLES +---------------- + +$data - A data connection to the current or default database. +$misc - Contains miscellaneous functions. eg. printing headers & footers, etc. +$lang - Global array containing translated strings. The strings in this array + have already been converted to HTML, so you should not + htmlspecialchars() them. +$conf - Global array of configuration options. + +WORKING WITH RECORDSETS +----------------------- + +phpPgAdmin uses the ADODB database library for all its database access. We have +also written our own wrapper around the ADODB library to make it more object +oriented (ADODB_base.pclass). + +This is the general form for looping over a recordset: + +$rs = $class->getResults(); +if (is_object($rs) && $rs->recordCount() > 0) { + while (!$rs->EOF) { + echo $rs->fields['field']; + $rs->moveNext(); + } +} +else echo "No results."; + +UPDATING LANGUAGE FILES FOR THE MONO-LINGUAL +-------------------------------------------- + +If you need to add or modify language strings for a new feature, the preferred +method is: + +* cd into lang/ subdirectory +* modify english.php file only! + +If you've done it correctly, when you create your patch, it should only have +diffs of the lang/english.php file. For more information on how the language +system works, please see the TRANSLATORS file. + + +UNDERSTANDING THE WORK/BRANCH/TAG/RELEASE PROCESS +------------------------------------------------- + +All new work for phpPgAdmin is done against the git master branch. When we feel +we are ready to do a new release, we create a branch (ex. REL_4-1). This +becomes the stable branch for all future 4.1.x releases, and any bugfixes needed +for 4.1 would go in that branch. + +When we release a new revision, we tag that at release time (REL_4-1-1), so a +checkout of any tag should give you the same files that downloading the release +would have given you. As a general rule, we do not introduce new features into +existing stable branches, only bugfixes and language updates. This means if you +want to work on new features, you should be working against the git master. +Eventually we will call for another release, and that will be branched (REL_4-2) +and the cycle will start over. + +On occasion we have created out-of-band branches, typically labeled as DEV_foo. +These were used for temporary, concurrent development of large features, and +should not be used by other developers. When development of those features is +completed, the branches get merged in as appropriate, so no further development +should occur on those branches. + +GETTING HELP +------------ + +We prefer most discussion of development to take place on the phpPgAdmin +devel mailing list, so that discussions can be archived and be searchable. +However, if you are into IRC, a couple of us hang out on #phppgadmin on +freenode, and occasionally discuss things there. diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/FAQ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/FAQ new file mode 100644 index 00000000..8f1ae6cc --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/FAQ @@ -0,0 +1,217 @@ +phpPgAdmin Frequently Asked Questions +------------------------------------- + +Installation errors +------------------- + +Q: I've installed phpPgAdmin but when I try to use it I get an error message + telling me that I have not compiled proper database support into my + PHP installation. + +A: This means that you have not properly compiled Postgres support into + your PHP. The correct configure flag to use is '--with-pgsql'. Read the + PHP manual and website for more help with this. + + Postgres support can be also compiled into PHP as a dynamic extension, + so if you have precompiled version (Linux RPM, or Windows binary), there + are still chances, that only thing you should do is to enable loading it + automagically. + + It can be done by editing your php.ini file (under Windows, usually in + C:\WINDOWS or C:\WINNT, under Linux /etc/php.ini) and uncommenting this + line: + + ;extension=php_pgsql.dll ;under Windows + ;extension=pgsql.so ;under Linux + + so it would look like that: + + extension=php_pgsql.dll ;under Windows + extension=pgsql.so ;under Linux + + In Linux distributions based on Red Hat or Fedora, PHP extensions are + automatically configured in /etc/php.d/pgsql.ini, simply install the + php-pgsql package. + + See http://www.php.net/manual/en/pgsql.setup.php for more information + on setting up Postgres support in PHP. + +Q: I get a warning like this when using phpPgAdmin on Windows: + + "Warning: session_start() [function.session-start]: + open(/tmp\sess_5a401ef1e67fb7a176a95236116fe348, O_RDWR) failed" + +A: You need to edit your PHP.INI file (usually in c:\windows) and change this + line: + + session.save_path = "/tmp" + + to: + + session.save_path = "c:\windows\temp" + + And make sure that the folder c:\windows\temp actually exists. + + +Login errors +------------ + +Q: I always get "Login failed" even though I'm _sure_ I'm using the right + username and password. + +A: There are a number of reasons why you might not be able to connect, typically + having nothing to do with phpPgAdmin itself. First check the Postgres log + on your server, it should contain a FATAL error message detailing the exact + reason why the login is failing. You will probably need to either adjust the + username or password, add LOGIN permissions to the role, or adjust your + pg_hba.conf file in your Postgres data dir; so follow the directions laid + out in the FATAL message. + + If you do not have any FATAL error messages, and you have verified that you + are looking at the properly configured logfile, then this means you are not + connecting to your database. If you are connecting via TCP/IP sockets (for + example if you have installed phpPgAdmin on a different computer than your + database) make sure that Postgres is accepting connection over TCP/IP. On + older versions of Postgres, you need to change this line in your + postgresql.conf file: + + #tcpip_socket = false + + to: + + tcpip_socket = true + + on newer versions of Postgres, this setting has been replaced by the + listen_addresses setting, so you will need to change that setting instead + (likely changing it to "*"). Be sure to restart Postgres after changing + either of these settings! + + If that still doesn't get you connected, then there is likely something + interfering between PHP and Postgres. Check to make sure that you don't have + a firewall preventing connectivity, or that you don't have some other + security setup (ie. SELinux policy) that prevents PHP from connecting. + +Q: For some users I get a "Login disallowed for security" message. + +A: Logins via phpPgAdmin with no password or certain usernames (pgsql, + postgres, root, administrator) are denied by default. Before changing this + behaviour (setting $conf['extra_login_security'] to false in the + config.inc.php file) please read the Postgres documentation about client + authentication and understand how to change Postgres's pg_hba.conf to + enable passworded local connections. + +Q: I can use any password to log in! + +A: Postgres, by default, runs in trust mode. That means that it doesn't + ask for passwords for local connections. We highly recommend that you + edit your pg_hba.conf file, and change the login type to 'md5'. Note + that if you change the 'local' login type to 'md5', then you might need + to enter a password to start Postgres. Get around this by using a + .pgpass file - explained in the Postgres documentation. + + +Other errors +------------ + +Q: When I enter non-ASCII data into the database via a form, it's inserted + as hexadecimal or Ӓ format! + +A: You have not created your database in the correct encoding. This problem + will occur when you try to enter an umlaut into an SQL_ASCII database, or + SJIS Japanese into an EUC-JP database, etc. + +Q: When I drop and re-create a table with the same name, it fails. + +A: You need to drop the sequence attached to the SERIAL column of the table + as well. Postgres 7.3 and above do this automatically. If you have + upgraded to Postgres 7.3 from an earlier version, you need to run the + contrib/adddepend script to record all dependencies. + +Q: When browsing a table, the 'edit' and 'delete' links do not appear. + +A: In order, phpPgAdmin will prefer the following as unique row identifiers: + + 1. Primary keys + 2. Unique keys (cannot be parital or expressional indexes) + 3. OID column (will require a sequential scan to update, unless you + index the OID column) + + Furthermore, any NULL values in the unique index will mean that that row + will be uneditable. Also, since OIDs can become duplicated in a table, + phpPgAdmin will alter the row, and then check to ensure that exactly one + row has been modified - otherwise rollback will occur. + + +Questions on dumps +------------------ + +Q: What happened to the database dump feature? + +A: You need to configure phpPgAdmin (in the config.inc.php file) to point + to the location of the pg_dump and pg_dumpall utilities on your web server. + Once you have done that, the database export feature will appear. + +Q: I would like to use the pg_dump integration for database and table + dumps on Windows. How do I get pg_dump.exe on Windows? + +A: To get the pg_dump utilities on Windows, you need to install Postgres 8.0 + or higher (we recommend the latest release) for Windows, available for + download from the + <a href="http://www.postgresql.org/download/windows">Postgres web site</a>. + Once you have installed that, set the pg_dump and pg_dumpall locations + in the config.inc.php file to + 'C:\\Program Files\\Postgres\\8.0\\bin\\pg_dump.exe' and + 'C:\\Program Files\\Postgres\\8.0\\bin\\pg_dumpall.exe', or wherever you + installed them. + +Q: Why can't I reload the SQL script I dumped in the SQL window? + +A: The following limitations currently exist in SQL script execution: + + * Only uploaded SQL scripts can contain COPY commands and for + this to work, you must have PHP 4.2 or higher. + + * 'psql' commands such as '\connect' will not work at all. + + * Multiline SQL statements will not work, eg: + + CREATE TABLE example ( + a INTEGER + ); + + * You cannot change the current database or current user during + the execution of the script. + + We do intend to work on some of these limitations in the future, but + some of them are Postgres restrictions and we recommend using the + 'psql' utility to restore your full SQL dumps. + + +Other questions +--------------- + +Q: When inserting a row, what does the 'Value' or 'Expression' box mean? + +A: Choosing 'Expression' means that you can use functions, operators, other + field names, etc. in your value - you need to properly quote any literal + values yourself. 'Value' on the other hand, means that no matter what you + enter as the value, it will be inserted as-is into the database. + +Q: Why is there never any information on the 'Info' page of a table? + +A: The Info page will show you what other tables have foreign keys to the + current table and some data from the Postgres statistics collector. + In older versions of Postgres, the stats collector is not enabled by default. + To enable it, look in your postgresql.conf file for the stats_* options. + Just make them all 'true' and restart Postgres. + +Q: Why can't I download data from queries executed in the SQL window? + +A: You need to check the 'Paginate results' option to allow downloads. + +Q: I would like to help out with the development of phpPgAdmin. How should I + proceed? + +A: We really would like your help! Please read the DEVELOPERS and TRANSLATORS + files. + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/HISTORY b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/HISTORY new file mode 100644 index 00000000..e1e490b4 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/HISTORY @@ -0,0 +1,818 @@ +phpPgAdmin History +------------------ + +Version 5.6 +----------- + +Released: 12th November, 2018 + +Features +* Add support for PostgreSQL 9.3, 9.4, 9.5, 9.6, 10, 11 +* Development support for PostgreSQL 12 +* Add support for brows/select navigation tabs (firzen) +* Add new theme, "bootstrap" (amenadiel) +* Improved support for json/jsonb + +Bugs +* Fix bug in Turkish translation which caused failed ajax responses +* Account for Blocked field in admin processes Selenium test +* Properly handle column comments +* Fix background css issue +* Additional language updates + +Incompatabilities +* Dropped testing of pre-9.3 versions of Postgres, which are now EOL + + +Version 5.1 +----------- + +Released: 14th April 2013 + +Features +* Full support for PostgreSQL 9.1 and 9.2 +* New plugin architecture, including addition of several new hooks (asleonardo, ioguix) +* Support nested groups of servers (Julien Rouhaud & ioguix) +* Expanded test coverage in Selenium test suite +* Highlight referencing fields on hovering Foriegn Key values when browsing tables (asleonardo) +* Simplified translation system implementation (ioguix) +* Don't show cancel/kill options in process page to non-superusers +* Add download ability from the History window (ioguix) +* User queries now paginate by default + +Bugs +* Fix several bugs with bytea support, including possible data corruption bugs when updating rows that have bytea fields +* Numeruous fixes for running under PHP Strict Standards +* Fix an issue with autocompletion of text based Foreign Keys +* Fix a bug when browsing tables with no unique key + +Translations +* Lithuanian (artvras) + +Incompatabilities +* We have stopped testing against Postgres versions < 8.4, which are EOL +* phpPgAdmin core is now UTF-8 only + + +Version 5.0 +----------- + +Released: 29th November 2010 + +Features +* Support for PostgreSQL 8.4 and 9.0 +* Support for database level collation for 8.4+ +* Support for schema level export +* Add ability to alter schema ownership +* Clean up domain support and improve interface +* Add support for commenting on functions +* Allow user to rename role/users and set new passwords at the same time +* Greatly enhanced Full-Text-Search capabilities (ioguix, Loomis_K) +* Overhauled Selenium Test suite to support multiple database versions +* Optimized application graphics (Limo Driver) +* Support for Column Level Privileges +* Allow users to specify a template database at database creation time +* Support killing processes +* Add ability to create indexes concurrently +* Much better support of autovacuum configuration +* Add an admin page for table level +* Refactored autocompletion: + * fix support for cross-schema objects + * support multi-field FK + * support for pagination of values in the auto-complete list +* Allow user to logicaly group their server under custom named node in the browser tree +* New themes (Cappuccino and Gotar) and a theme switcher on the introduction page +* Auto refresh Locks page +* Auto refresh Processes page +* Link in the bottom of the page to go to top of page +* Browsing on Foreign Keys (When browsing a table, clicking on a FK value, jump to the PK row) + + +Bugs +* Fix problems with query tracking on overly long queries +* Ensure pg_dump paths are valid +* Fix multiple bugs about quoting and escaping database objects names with special chars +* Fix multiple bugs in the browser tree +* Fix multiple bugs on the SQL and script file import form +* Three security fix about code injection +* Don't allow inserting on a table without fields +* Some fix about commenting databases +* removed deprecated functions from PHP 5.3 +* Lot of code cleanup +* Many other small minor bugs found on our way +* Fix the operator property page + +Translations +* Czech (Marek Cernocky) +* Greek (Adamantios Diamantidis) +* Brazillian Portuguese (Fernando Wendt) +* Galician (Adri�n Chaves Fern�ndez) + +Incompatabilities +* No longer support PHP < 5.0 +* No longer support Postgres < 7.4 + + +Version 4.2 +----------- + +Features +* Add Analyze to Table Level Actions (ioguix) +* Add support for multiple actions on main pages (ioguix, Robert Treat) +* Added favicon for Mozilla and a backwards compatible version for IE. +* Allow browsers to save different usernames and passwords for different servers. +* Pagination selection available for reports +* You can configure reports db, schema and table names +* Add support for creating a table using an exsting one (ioguix) +* Auto-expand a node in the tree browser if there are no other nodes (Tomasz Pala) +* Add column about fields constraints type + links in table properties page (ioguix) +* Support for built-in Full Text Search (Ivan Zolotukhin) +* Add alter name, owner & comment on views (ioguix) +* Add column about called procedure + links to their definition in the triggers + properties page (ioguix) +* Add Support for Enum type creation (ioguix,xzilla) +* Add alter name, owner, comment and properties for sequences (ioguix) +* Add function costing options (xzilla) +* Add alter owner & schema on function (xzilla) +* Add a popup window for the session requests history (karl, ioguix) +* Add alter table, view, sequence schema (ioguix) + +Bugs +* Fix inability to assign a field type/domain of a different schema +* Can't edit a report and set its comment to empty +* Fix PHP5 Strict mode complaints +* Fix IN/NOT IN to accept text input lists 'a','b' +* Fix bytea doesn't display as NULL when NULL +* Schema qualifing every object to avoid non wanted behaviour about users' rights + and schema_path +* Remove shared credentials when logging out of single server, to prevent automatic re-login +* Improved SSL connection handling, fix problems with connections from older php builds +* Fix bug with long role name truncation +* Fix bug with DELETE FROM when dropping a row (spq) +* Fix problems when deleteing PUBLIC schema +* Fix several bugs in aggregate support +* Improve autocompletion support +* Tighten up use of global scope variables + +Translations +* utf traditional chinese (Kuo Chaoyi) +* utf simplified chinese (Kuo Chaoyi) +* Italian (Nicola Soranzo) +* Catalan (Bernat Pegueroles) +* French (ioguix) +* German (Albe Laurenz, spq) +* Japanese (Tadashi Jokagi) +* Hungarian (Sulyok Peti) + +Version 4.1.3 +------------- + +Bugs +* Eliminate use of $_SERVER['PHP_SELF']. This fixes a regression in 4.1.2 for + non-mainstream locales (including SQL_ASCII) +* Validate client supplied server against entries in config.inc.php +* Fix undefined variable when altering a field in a table on PostgreSQL < 8.0 + +Version 4.1.2 +------------- + +Bugs +* Fix inability to assign a field type/domain of a different schema +* Fix PHP5 Strict mode complaints +* Fix IN/NOT IN to accept text input lists 'a','b'. +* Fix bytea doesn't display as NULL when NULL +* Fix bug in view creation wizard +* Fix XSS vulnerability: + http://www.securityfocus.com/bid/24115/ + Escape HTML special characters before using $_SERVER['PHP_SELF'] + +Version 4.1.1 +------------- + +Bugs +* Fix problem where failed update would report as duplicate update error and + fail to return edit screen +* Fix error when using $conf[owned_only] on 8.1 & 8.2 +* Fix error displaying schema names for parents of inherited tables +* Clean up non-standard escape warnings for PostgreSQL 8.2 +* Fix improper text quoting for droping roles and aggregates +* Fix bug when dumping mixed case table names in PostgreSQL 8.2 + +Version 4.1 +----------- + +Features +* New icons by Niko <ennixo@free.fr>, from the graphics repository on pgFoundry. +* Added icons to bread crumb trail and tabs. +* Send encrypted passwords over the wire wherever possible. +* Alter sequence, nextval and setval (Guillaume) +* Auto-select 'WITHOUT OIDS' if 'default_with_oids' setting is false (Guillaume) +* Autovacuum configuration support (Robert Treat) +* Basic ROLE support (Chris Kings-Lynne, Javier Carlos) +* Add support for SSL connections (Eric Kinolik) +* Display content of pg_locks view (Javier Carlos) +* Add labels for checkboxes/radio buttons for improved usability (Guillaume) +* Display Prepared Transactions (Javier Carlos) +* Re-enable table browsing from tree icons (ioguix) +* Add Support For IN/OUT Parameters (John Jawed) +* Add column level information into the tree browser (ioguix) +* Promote column level interaction into its own page (ioguix) +* Add automatic lookup of foreign key values in insert/update fields (John Jawed) +* Add ability to create/drop/alter custom aggregates (Javier Carlos) +* Add enable/disable trigger (John Jawed) +* Add global comments for databases and tablespaces + +Translations +* Catalan from Bernat +* Romanian from Alin Vaida + +Version 4.0 +----------- + +Features +* Slony replication support (Thanks to sponsorship from SpikeSource) +* Allow current database to be at the top +* Allow base URL of PostgreSQL documentation to be configured +* Allow variable size textarea when editing values (Juergen Weigert) +* Allow SQL script upload to parse arbitrary SQL, including multiline + SQL statements. Improve output to show every command as its executed + and SELECT results. +* Add rudimentary support for PostgreSQL 8.1 and 8.2 +* primary key and unique key at table creation (Andreas Huber) +* Add row|statement level options to create trigger for >= 7.4 (Robert Treat) +* Allow altering name (for >= 7.4) and owner (for >= 8.0) of a database (Bryan Encina) +* Allow login to several servers simultaneously +* Rearrange frame layout to suit multi-server support +* New browser tree with dynamically loading branches + (Using XLoadTree2 from http://webfx.eae.net/) +* Allow language change from the intro page at any time +* Avoid getting and setting encoding queries if possible +* Avoid version query in PHP 5 / PostgreSQL 7.4+ +* Avoid query for superuser status in PHP 5 / PostgreSQL 7.4+ +* Put PostgreSQL 7.4+ in read only mode for pagination of results + to avoid executing selects that have write side effects. +* Allow re-using username and password for all servers - saves re-entering + username and password for every server in a pool. +* Make default language 'auto' indicating auto detect. If a language is + deliberately specifed, then that will always be used and no detection will + occur. +* ADOdb library updated to version 4.65 + +Bugs +* Tree Icons are displayed middle instead of top +* Ensure login frame is always at top level (Russell Smith) +* Fix non-ASCII characters inserted in Unicode databases as HTML entities with + non-UTF8 web servers (Markus Bertheau) +* Fix export to work with release candidates and beta releases as well as finals + (Russell Smith) +* Fix port selection for local connections +* Fix timeouts on long running operations (Adrian Nida) +* Allow Multiline character and character varying editing and inserting +* Add automatic browser language selection for all languages +* Stop duplicate insert on re-POST of data +* Fix bug with exporting schema for servers < 7.3 +* Fix opclasses on 7.2 and below +* Fix listing of opaque functions in 7.2 +* Actually fix PHP 4.4.0's new strict references + +Translations +* Japanese from Tadashi Jokagi +* Danish from Arne Eckmann +* Arabic from Zaki +* Romanian from Alin +* Afrikaans from Petri +* Polish from Rafal (utf-8 encoding) +* Slovak from Andrej +* German from Markus +* Spanish From Martin +* Hungarian from Sulyok +* Turkish from Devrim + +Version 3.5.6 +------------- + +Bugs +* Actually fix PHP 4.4.0's new strict references + +Version 3.5.5 +------------- + +Bugs +* Fix for PHP 4.4.0's new strict references +* Small improvement to Opera browser detection in the tree +* Fix listing of opaque functions in 7.2 +* Fix listing of opclasses and functions pre 7.3 + +Version 3.5.4 +------------- + +Bugs +* Fix security hole in include() of language file: + http://secunia.com/advisories/15941/ + Check now requires that the language filename be in the list + of known allowed filenames. +* Fix that functions returning cstring were not being listed +* Make parsing of PostgreSQL 1-dimensional arrays correct. Makes + named function parameter use more reliable. +* Fix downloading of the results of multiline queries. + +Version 3.5.3 +------------- + +Bugs +* Fix using schema enabled dump on non-schema enabled backend +* Don't try setting no timeout when in safe mode +* Reload browser after executing arbitrary SQL +* Fix browser in RTL languages +* Fix inability to drop database using the drop link +* Fix last internal oid value for PostgreSQL 8.0 +* Fix (again) dumping on v8 for windows, exclude dumping some objects. + +Translations +* Portuguese from Francisco + +Version 3.5.2 +------------- + +Bugs +* Fix export to work with release candidates and beta releases as well as finals + (Russell Smith) +* Fix port selection for local connections (Russell Smith) +* Fix timeouts on long running operations (Adrian Nida) +* Allow Multiline character and character varying editing and inserting +* Do browser language detection for all languages + +Translations +* Japanese from Tadashi +* Danish from Arne + +Version 3.5.1 +------------- + +Bugs +* Support 8.0beta5 schema tablespace changes +* Help link fixes +* Estimated row count in 7.0 and 7.1 fixes +* Priviliges nav fix +* Function privileges fix +* Search path fix +* pg_dump on win32 8.0 native fix + +Translations +* Romanian from Alin +* Italian updates from Nicola + +Version 3.5 +----------- + +Features +* Context-sensitive online help system +* Use language preferencies from browser (Markus Bertheau, Nicola Soranzo) +* Tablespace support for 8.0 +* Support cancelling backend processes in 8.0 +* Allow setting privileges on databases +* Allow setting schema search path in SQL window +* Allow filtering find results by object type +* Show function arguments in find results +* Support 8.0's named function arguments +* "Sticky" navigation. phpPgAdmin will now remember while tab you are + looking at (eg. 'Indexes') when you change which table you are viewing. +* New fast navigation bar. A breadcrumb style navigation bar for fast + jumping between areas. +* Much improved grant/revoke feature +* Allow creating and viewing composite types +* pg_dumpall integration. Now you can download the entire cluster via + phpPgAdmin. +* Show line numbers when viewing functions +* Syntax highlighting for PL/SQL, PL/PgSQL, PL/PHP, PL/Ruby, PL/Java, + PL/J, PL/Python and PL/Perl functions, thanks to Jacob D. Cohen's + BSD-licensed highlighting code on rafb.net +* Add page navigation links at the bottom as well as the top of the page + when browsing results. +* Support for 8.0's alter column type +* Support for 8.0's add columns with defaults and not null + +Translations +* Romanian from Alin +* Arabic from Zaki +* Japanese from Tadashi +* Spanish from Robert & Martin +* Mongolian from Erdenemandal +* Ukrainian from Alex Rootoff +* Hebrew from jonatan +* Hungarian from Sulyok +* French from Pascal +* Afrikaans from Petri +* Turkish from Devrim +* Slovak from Andrej +* German from Markus +* Italian from Nicola +* Polish from Rafal + +Bugs +* Fix that non-Auto mode import didn't work (Adrian Nida) +* Fix inability to drop constraints when using a non-english translation +* Work around MSIE's failure to handle downloads in SSL mode +* Allow insert, update, delete, references and trigger to be granted + and revoked on views. + +Version 3.4.1 +------------- + +Bugs +* Fix export of mixed case tables pre 7.4 +* Fix table export problems pre 7.3 +* Fix join clause created by view wizard for pre 7.3 +* Fix reindex of mixed case indexes +* Show domains in type lists in appropriate places +* Fix for multiline CDATA parsing in XML import +* Fix missing _schema notice in reports + +Version 3.4 +----------- + +Features +* Add CACHE and CYCLE parameters in sequence creation +* View, add, edit and delete comments on tables, views, schemas, + aggregates, conversions, operators, functions, types, + opclasses, sequences and columns (Dan Boren & ChrisKL) +* Add config file option for turning off the display of comments +* Allow creating array columns in tables +* Allow adding array columns to tables +* Allow creating domains with type length and arrays +* Show domain base type and comment in domains list +* Allow import of CSV, Tabbed and XML data. "Auto" mode chooses + import mode based on the file extension. +* Allow upload and execution of _basic_ SQL scripts +* More admin features available: vacuum, analyze, cluster all and reindex + (with all options) (Bryan Encina) +* Fix SQL popup window to reload when the database is changed so + that the correct page encoding is used. +* Create view wizard (Bryan Encina) +* Allow specification of MATCH, DEFERRABLE and INITIALLY DEFERRED on + foreign keys. +* Automatically uncheck the NULL checkbox when data is typed in the value + field while editing data. +* Show query runtime when executing arbitrary SQL +* Allow renaming functions when backend supports it +* Views are now more like tables. They are listed in the browser, + you can view the virtual columns of the view and its column defaults. + Columns in view can also be renamed and have defaults set. +* Allow viewing, dropping and creation of rules on views. +* Support for 8.0-dev ALTER COLUMN TYPE, adding of SERIAL and BIGSERIAL + columns, adding NOT NULL columns and adding columns with defaults. + +Bugs +* Fix pg_dump output for PostgreSQL 7.0.x and 7.1.x +* In 7.4 pg_dump, specify schema when dumping tables +* Fix bug in displaying array types in 7.0.x +* Fix bug where views appeared as tables in 7.0.x search results +* Fix bug where find object SQL on < 7.2 was broken +* Fix Find for domain constraints +* Fix popup SQL window so that two different phpPgAdmin instances should + not want to use the same pop-up. +* Fix create table if you don't supply as many fields as you originally + specified. +* Fix schema support for views + +Translations +* Trad. Chinese from Chih-Hsin Lee +* Italian from Nicola +* Spanish from Martin +* Slovak from Andrej +* German from Markus +* Turkish from Devrim +* Hungarian from Sulyok +* French from Pascal +* Polish from Rafal +* Russian from Alex + +Version 3.3.1 +------------- + +Bugs +* Fix table stats for <= 7.2 + +Translations +* Spanish from Martin + +Version 3.3 +----------- + +Features +* Database dump feature, which uses pg_dump +* Large speed improvements by reducing number of database + connections and using external style sheet. +* SQL pop-up window now defaults to the current database +* Display aggregates and operator classes +* Integration with the PostgreSQL statistics collector. See + table and index performance and usage information. +* Display user session defaults for PostgreSQL >= 7.3 +* Rename user feature for PostgreSQL >= 7.4 +* Create functions returning arrays and table types +* Allow editing Select results by oid +* Allow pagination of queries entered in the SQL box +* Allow EXPLAIN ANALYZE of SQL queries (in both SQL boxes) +* Default cursor conveniently in SQL box and Find + +Bugs +* Object browser fixed for databases with no schemas +* Properly detect that reports database is missing +* Fix for alter column on PostgreSQL 7.1 +* phpPgAdmin now works without '.' in the include_path +* Can now remove expire dates on user accounts +* Properties of mixed case named views work in 7.4 + +Translations +* Spanish from Martin Marques +* Japanese from Tadashi Jokagi +* Swedish from Stefan Malmqvist +* Slovak from Andrej Misovik +* Hungarian from Sulyok Peter +* Trad. Chinese from Chih-Hsin Lee +* Italian from Nicola Soranzo +* Afrikaans from Petri Jooste +* Turkish from Devrim Gunduz +* German from Markus Bertheau +* Czech from Libor Vanek +* Russian from Alex Khodorivsky + +Version 3.2.1 +------------- + +Bugs +* Trailing newline problem in chinese-sim translation fixed + +Translations +* French from Pascal +* Russian from Step + +Version 3.2 +----------- + +Features +* PostgreSQL 8.0 CVS support +* Option to dump table structure, data or structure and data +* Set datestyle and extra_float_digits when dumping data +* Results of table browse, table select, view browsing and report browsing + can now ALL be sorted by column +* Result rows of table selects can now be edited and deleted +* Extra login security to prevent logging into servers as postgres and + no password - a VERY common newbie error. +* Cluster indexes and indexed constraints (with analyze) +* Display clustered status of indexes and indexed constraints +* Table info - shows tables that reference the table, parent tables, + and child tables. +* Choice of operator when performing a Select +* 'Select All' feature of table selects now available on view + selects. +* Removed any trace of MySQL support +* Show casts +* Show conversions +* Show languages +* Make table icon link to browse table +* New show_advanced option that allows the hiding or display of + "advanced" objects such as conversions, types, operators, casts and + languages. +* Find Object feature can now find conversions, languages, domains, + constraints, indexes, rules and triggers. +* Better language Makefile for translators +* The SQL box now remembers your query when you click 'Back'. + +Bugs +* Added legal DOCTYPE +* Allow creating foreign keys to tables not in current schema +* Always add brackets around CHECK () constraints +* Never display an index in both Indexes and Constraints +* BIGSERIAL missing from PostgreSQL 7.2 +* Types lengths (eg. varchar(255)) weren't being displayed properly + in PostgreSQL 7.0.x +* Resetting sequence on 7.1+ now restarts at 1, not 2 +* Remove deprecated column default 'now' from SQL script +* Properly escape pg_ in internal queries + +Translations +* Afrikaans from Petri Jooste +* Hungarian from Sulyok P�ter +* German update from Markus Bertheau +* Trad. Chinese from Chih-Hsin Lee +* Hungarian from Peti +* Spanish update from Martin Marques +* Slovak update from Andrej Misovic +* Turkish update from Devrim +* Swedish update from Stefan +* Italian update from Nicola + +Version 3.1 +----------- + +Bug Fixes: +* Table browsing for 7.4 fixed +* Synch script for translators disabled due to bugginess. If you want + to use it, just comment out the warning lines from the script itself. +* Change HTML download to XHTML and make it a 100% conforming document, with DTD +* Alter XML format to allow future features + +Translations: +* Trad. Chinese +* Dutch +* Spanish +* Swedish +* Turkish +* French +* Japanese + +Version 3.1-rc-1 +---------------- + +Bug Fixes +* Table browsing for != 7.3 +* SQL window improvements +* Translation improvements + +Version 3.1-beta-1 +------------------ + +Features: +* Add first & last links to nav. Double number of pages shown. +* Allow granting privileges WITH GRANT OPTION for 7.4 +* Allow revoking GRANT OPTION with CASCADE option for 7.4 +* Display new PostgreSQL 7.4 grant options and grantor in privileges +* Find object feature +* Support for domains in 7.3 and domain constraints and alter domain in 7.4 +* Add/drop users to/from groups +* Alter (rename) triggers +* Pop-up SQL window from Mark Gibson +* Superusers can always see all databases +* Default database encoding for languages +* Convert our images to PNG format +* Allow creating tables WITHOUT OIDS +* Show boolean values as TRUE or FALSE when viewing data +* Allow renaming table and changing table owner +* Refresh feature on table browse +* Support better formatted view dumps in 7.4 +* When browsing data, numeric types are aligned right +* Ability to create unique and partial indexes +* View and edit table comments +* Changed XML format significantly. Now doesn't use field names as + tag names, outputs column type information, and is in correct XML format! +* Save result sets as views and reports in most cases +* Download the results of selects and reports +* Tick all box on Select feature +* Export in HTML format +* Allow listing of operators +* Add a robots.txt file to prevent search engine indexation +* Can now safely edit row based on OID. Guards are in place against duplicate OIDs. +* Works properly if you have cookies disabled + +Bug Fixes: +* Lots of NULL value in table dump fixes (XML format changed slightly) +* Boolean default values and general boolean field handling fixes +* Support zero column tables +* Correctly display the contents of bytea fields +* Consider information_schema to be a system object +* Remember fields if index creation fails +* Fix saving and loading function volatility +* Don't list domains under types +* Lots of reports fixes (titles, page reloads, etc.) +* Selecting for NULL values in Select feature + +Translations: +* Italian translation update from Nicola Soranzo +* German update from Markus Bertheau +* Spanish update from Martin Marques +* Trad. Chinese update from Chih-Hsin Lee +* Russian update from Step +* Slovak update from Andrej +* Polish update from Rafal +* Swedish translation from Stefan Malqvist +* Turkish update from Devrim Gunduz +* German update from Markus Bertheau +* Traditional Chinese update from Chih-Hsin Lee +* Spanish update from Martin + +Version 3.0.1 +------------- + +Bug Fixes +* Lots of NULL value in table dump fixes (XML format changed slightly) +* Support zero column tables +* Correctly display the contents of bytea fields +* Error in ADODB_base.php +* Fix saving and loading function volatility +* Don't list domains under types + +Version 3.0 +----------- + +* German update from Markus Bertheau +* Russian update from Alexander Khodorivsky + +Version 3.0-rc-2 +---------------- + +* Slovak update from Andrej Misovic +* Japanese update from Tadashi Jokagi +* Added 'defaultdb' per-connection variable + for installations where connection to template1 + is disabled. +* Removed uses of call time pass by reference, + since it is a deprecated feature of PHP. + +Version 3.0-rc-1 +---------------- + +* Fix drop database reload browser bug +* Look & Feel upgrade from Davey +* Value & expression on edit row +* Chinese update from Chih-Hsin Lee +* Fixed support for functions and sequences + containing bizarre characters + +Version 3.0-beta-1 +------------------- + +* Cascade drop on columns and constraints +* Czech translation +* Preserve spaces when displaying data +* Greatly improved PostgreSQL 7.2, 7.1 and 7.0 support +* Italian translation +* Show database version in top bar +* Many features useful for PostgreSQL hosting: + - Hide reports + - Filter for owned reports + - Hide admin for non-super users + - Easy for a user to change their own password + - Enforceable minimum password length +* Switched to PEAR's HTML_TreeMenu to avoid license issue +* Function editor can handle setof functions, and all + function properties for volatility, etc. +* Manage permissions on functions +* Massive table browsing improvements: + - Sort ascending and descending by clicking + on field name + - Trim long strings. Use 'expand' and 'collapse' to + see full strings or trimmed strings. +* Revoke on objects. Grant or revoke to multiple groups + and users at once. +* Brazilian Portuguese translation from Angelo Rigo + +Version 3.0.0-dev-4 +------------------- + +* Sort on a column when browsing a table +* Slovak translation +* Turkish translation +* German translation +* Reload browser after create/drop of database, schemas and tables +* Select on views +* Add foreign key constraint, with actions +* Cascade drop on all objects + +Version 3.0.0-dev-3 +------------------- + +* French translation +* Russian translations +* Japanese translations +* Trigger definitions +* ADODB upgrade +* Allow editing of non-null unique + +Version 3.0.0-dev-2 +------------------- + +* Language files now use an array of strings +* Almost complete Chinese translation +* Create sequence +* Create trigger +* Create index +* Add check constraint +* Lots of small fixes +* Add column + +Version 3.0.0-dev-1 +------------------- + +* Renamed to phpPgAdmin from WebDB +* Heaps of other stuff + +Version 0.6 - 24-Dec-2002 +------------------------- + +* Support short_tags off +* Fix browsing tables, pagination, etc. +* Fix all error handling +* Fix problems with apostrophes in database, usernames or passwords + +Version 0.5 - 20-Dec-2002 +------------------------- + +* Initial public release +* Still many problems making it unsuitable for production. + +Version 0.1 - Early 2002 +------------------------ + +* Initial development version + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/INSTALL b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/INSTALL new file mode 100644 index 00000000..0375b3ae --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/INSTALL @@ -0,0 +1,73 @@ +phpPgAdmin Installation Guide +----------------------------- + +1. Unpack your download + + If you've downloaded a tar.gz package, execute from a terminal: + + gunzip phpPgAdmin-*.tar.gz + tar -xvf phpPgAdmin-*.tar + + Else, if you've downloaded a tar.bz2 package, execute from a terminal: + + bunzip2 phpPgAdmin-*.tar.bz2 + tar -xvf phpPgAdmin-*.tar + + Else, if you've downloaded a zip package, execute from a terminal: + + unzip phpPgAdmin-*.zip + +2. Configure phpPgAdmin + + edit phpPgAdmin/conf/config.inc.php + + If you mess up the configuration file, you can recover it from the + config.inc.php-dist file. + +3. If you run your PHP installation in safe mode, in order that the database + dump feature can work correctly, you need to set the 'safe_mode_allowed_env_vars' + php.ini variable to include the PGPASSWORD and PGUSER environmental variables + and the safe_mode_exec_dir to include /usr/bin (or wherever the pg_dump + binaries are found). + + eg. safe_mode_allowed_env_vars = PHP_,PG + safe_mode_exec_dir = /usr/bin + + Given that you usually don't want to allow everything in /usr/bin to + be executed, you might want to copy the pg_dump and pg_dumpall utilities + to a directory by themselves. + + Also, you will need to ensure that your 'pg_dump' and 'pg_dumpall' utilities + are executable by the PHP process, if you want dump support in phpPgAdmin. + + Lastly, if you run phpPgAdmin in safe mode, very long running imports, + exports and transactions may time out and be aborted. + +4. Ensure the statistics collector is enabled in PostgreSQL. phpPgAdmin will + display table, index performance, and usage statistics if you have enabled + the PostgreSQL statistics collector. While this is normally enabled by + default, to ensure it is running, make sure the following lines in your + postgresql.conf are uncommented: + + track_activities + track_counts + +5. Browse to the phpPgAdmin installation using a web browser. You might + need cookies enabled for phpPgAdmin to work. + +6. IMPORTANT - SECURITY + + PostgreSQL by default does not require you to use a password to log in. + We STRONGLY recommend that you enable md5 passwords for local connections + in your pg_hba.conf, and set a password for the default superuser account. + + Due to the large number of phpPgAdmin installations that have not set + passwords on local connections, there is now a configuration file + option called 'extra_login_security', which is TRUE by default. While + this option is enabled, you will be unable to log in to phpPgAdmin as + the 'root', 'administrator', 'pgsql' or 'postgres' users and empty passwords + will not work. + + Once you are certain you have properly secured your database server, you + can then disable 'extra_login_security' so that you can log in as your + database administrator using the administrator password. diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/LICENSE b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/LICENSE new file mode 100644 index 00000000..d2efe073 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2002, 2003, 2004, 2005 The phpPgAdmin Project + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License <http://www.opensource.org/gpl-license.html> +for more details. + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/TODO b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/TODO new file mode 100644 index 00000000..dae0774c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/TODO @@ -0,0 +1,242 @@ +PHPPGADMIN TODO LIST FOR DEVELOPERS +----------------------------------- + +phpPgAdmin is an open source project which means that if you see something on +this list that you would like to implement, just send us a patch. You can find +our project page here: + + https://github.com/phppgadmin/phppgadmin + +An item is marked 'claimed' when a username in brackets is put after the TODO +item. If you want to work a claimed item, please contact the developers list. + +An item is marked with a '-' if it has been completed. + +Cluster +------- +* Allow reading of postgresql.conf and pg_hba.conf per pg_read_file() in 8.1 +* Support pg_reload_conf(), pg_rotate_logfile() 8.1 commands +* Add support for default db to connect to on login page (we had several users complaining about that lately) + + +Export +------ + +* Switch to SPARQL format: + http://www.w3.org/TR/2005/WD-rdf-sparql-XMLres-20050801/ + + Actually...SQL/XML is maybe better. + +Import +------ + +* Allow import of data via compressed (bzip/gzip/zip) files + +Users +----- + +* user variables (eg. ALTER USER SET .. TO ...) + + +Groups +------ + + +Roles +----- + + +Permissions +----------- + +* Grant ... on all tables, views, ... to user, group, public + + +Databases +--------- + +* Add alter database variables +* Add database stats +* REASSIGN OWNED & DROP OWNED support for 8.2+ + - http://www.postgresql.org/docs/8.2/interactive/sql-reassign-owned.html + - http://www.postgresql.org/docs/8.2/interactive/sql-drop-owned.html + + +Schemas +------- + + +Large Objects +------------- + +* Add support for large objects + (review patch from Dmitry Koterov https://github.com/DmitryKoterov/phppgadmin/commit/3072e666bd2b291feb91823b41f1fdb8ec7f492d ) + +Tables +------ + +* Rewrite WITHOUT OIDs with more natural WITH OIDS +* Allow FKs during create table (Jawed) +* When adding a column or creating a table, prevent size on non-size types (eg. integer(2)). You can find these by looking at format_type in the postgresql source code. +* Add WITH storage_parameter option to create table [8.2] +* Add last vacuum and analyze information from statistics tables [8.2] +* Restrict operators (from $selectOps array) to appropriate types (ie. no LIKE for int4 fields) +* Alter column should handle types with implicit cast types distinctly from those requiring a USING clause +* Where ENUM types are an option, restrict choice to enum values [8.3] + +Columns +------- + +* Add column constraints during creation and altering of columns + + +Views +----- + +* Support temporary views per 8.1? +* Support updateable views, see http://gerrybthunkings.blogspot.com/2010/01/how-should-postgresql-pgadmin-iii-deal.html +* Support Materialized Views + +Sequences +--------- + + +Functions +--------- + +* Remove options for OUT/INOUT params in older servers +* Clean up javascript html spec warnings +* GUC settings [8.3] +* Default param values + +Indexes +------- + +* Support 8.1 Reindex System commands +* Expressional indexes +* Create Index Asc/Desc, Nulls First/Last [8.3] + + +Types +----- + +* Suppres psuedo-type options in type list for creating composite types. (done ?) + + +Operators +--------- + +* Create +* Create/Alter/Drop Operator Family + + +Operator Classes +---------------- + +* Create + + +Triggers +-------- + +* Allow functions from other schemas. +* Support replica trigger modes (8.3) + + +Aggregates +---------- + +* Allow for multi-column aggregates [8.2] +* Rewrite the aggregate edition page ! It is using input tetxt everywhere presently, even for owner and schéma ! + + +Languages +--------- + +* Drop +* Create +* Alter owner [8.3] +* Alter name [8.3] + + +Domains +------- + +* Alter DOMAIN SET SCHEMA support + +Conversions +----------- + +* Properties +* Drop +* Create + + +Casts +----- + +* Properties +* Drop +* Create + + +Full Text Search (8.3) +---------------------- + +* Create/Alter/Drop parser +* Alter Owner + + +Miscellaneous +------------- + +* Audit for PHP 5.3.x compatability +* Support 8.1 standard compliant strings (E'') +* Support per-database connection limits per 8.1 +* Put a 'What's blocking this query' on Processes view +* Show prepared statements on database view [8.2] +* Show cursors on database view [8.2] +* Show NOTICES on queries in SQL window/file +* Printable view of things +* Show comments for all objects (Dan Boren) +* Allow setting/dropping comments for all objects (Dan Boren) +* Show owner for all objects +* Allow changing owner for objects that have this feature [7.4+ generally] +* Add CASCADE option to Truncate [8.2] +* Add ONLY option to Truncate [8.4] +* Add information about synch tool to TRANSLATORS +* Translated FAQ +* Pull FAQ/HISTORY/CREDITS/etc... from CVS for website. +* Add support for csvlogs [8.3] +* Add executed file scripts in history + +Exotic +------ + +* Pivot reports (ADODB has a feature for this) +* Parameterized reports (use prepared queries) +* Full web accessability conformance + +Principles +---------- + +* register_globals off support +* maximum error_reporting support - enforces code quality, reduces bugs and + improves security +* PHP 5.0 features used +* No HTML font, colour, layout tags. Use CSS for everything +* One day we should make it all XHTML +* everything properly escaped - prevent sql injection and cross-site scripting + probs +* everything properly schema qualified +* Support Postgres 8.4 and upwards +* psql -E is a cool way of seeing how to do schema queries +* Checking out older versions of describe.c in src/bin/psql in the postgres + distro is a good way of seeing how to query older versions of postgres for + schema information +* Put functions in the highest class possible. For instance, simple selects + should be in Postgres, whereas something that works for < 8.2 should be in the + 8.1 class. This will minimise bugs and duplicated code. +* Adhere to current coding standards +* Avoid using global variables if possible + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/TRANSLATORS b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/TRANSLATORS new file mode 100644 index 00000000..d763c301 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/TRANSLATORS @@ -0,0 +1,55 @@ +Translator Info +--------------- + +If you like phpPgAdmin, then why not translate it into your native language? + +There are quite a large number of strings to be translated. Partial +translations are better than no translations at all, and a rough guide is that +the strings are in the order from most important to least important in the +language file. You can ask the developers list if you don't know what a +certain string means. + +We tried keeping translation easy in phpPgAdmin by using ONLY the UTF-8 charset. +Make sure to always work on UTF-8 files when creating a new translation or +editing an existing one. + +To Create a new translation: + +1. Go to the lang/ subdirectory + +2. Copy english.php to yourlanguage.php + +3. Update the comment at the top of the file. Put yourself as the language + maintainer. Edit the 'applang' variable and put your language's name in it, + in your language. + Edit the 'applocale' and put your language code according to the standart: + http://www.ietf.org/rfc/rfc1766.txt + + Basicaly, you just need to put your language code [1] and optionnaly country + code [2] separated by a '-'. As instance for french canadian, it is: fr-CA + [1]: http://www.w3.org/WAI/ER/IG/ert/iso639.htm + [2]: http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm + +4. Go through as much of the rest of the file as you wish, replacing the + English strings with strings in your native language. + +At this point, you can send the yourlanguage.php file to us and we will take +care of testing and recoding the translation. Please only do that if you +find the rest of these steps too difficult. + +5. To add your language to phpPgAdmin, edit the lang/translations.php file + and add your language to the $appLangFiles array. + Also, add your language to the $availableLanguages array for + browser auto detection. + +6. Send your contribution to us. We need the lang/translations.php entry as + well as the lang/yourlanguage.php file. Email to the developers list: + phppgadmin-devel@lists.sourceforge.net + +7. There exists a tool named 'langcheck' in the lang/ directory. To run it, + just type 'php langcheck <language>'. It will give you a report about + which strings are missing from your language file and which need to be + deleted. + +Thank you for your contribution! You have just made phpPgAdmin accessible +to thousands more users! diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/admin.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/admin.php new file mode 100644 index 00000000..a8740a28 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/admin.php @@ -0,0 +1,753 @@ +<?php + + $script = ''; // init global value script + + /** + * Show confirmation of cluster and perform cluster + */ + function doCluster($type, $confirm=false) { + global $script, $data, $misc, $lang; + + if (($type == 'table') && empty($_REQUEST['table']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifytabletocluster']); + return; + } + + if ($confirm) { + if (isset($_REQUEST['ma'])) { + $misc->printTrail('schema'); + $misc->printTitle($lang['strclusterindex'], 'pg.index.cluster'); + + echo "<form action=\"{$script}\" method=\"post\">\n"; + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfclustertable'], $misc->printVal($a['table'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table[]\" value=\"", htmlspecialchars($a['table']), "\" />\n"; + } + } // END if multi cluster + else { + $misc->printTrail($type); + $misc->printTitle($lang['strclusterindex'], 'pg.index.cluster'); + + echo "<form action=\"{$script}\" method=\"post\">\n"; + + if ($type == 'table') { + echo "<p>", sprintf($lang['strconfclustertable'], $misc->printVal($_REQUEST['object'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['object']), "\" />\n"; + } + else { + echo "<p>", sprintf($lang['strconfclusterdatabase'], $misc->printVal($_REQUEST['object'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"\" />\n"; + } + } + echo "<input type=\"hidden\" name=\"action\" value=\"cluster\" />\n"; + + echo $misc->form; + + echo "<input type=\"submit\" name=\"cluster\" value=\"{$lang['strcluster']}\" />\n"; //TODO + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } // END single cluster + else { + //If multi table cluster + if ($type == 'table') { // cluster one or more table + if (is_array($_REQUEST['table'])) { + $msg=''; + foreach($_REQUEST['table'] as $o) { + $status = $data->clusterIndex($o); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($o, ENT_QUOTES, 'UTF-8'), $lang['strclusteredgood']); + else { + doDefault($type, sprintf('%s%s: %s<br />', $msg, htmlentities($o, ENT_QUOTES, 'UTF-8'), $lang['strclusteredbad'])); + return; + } + } + // Everything went fine, back to the Default page.... + doDefault($msg); + } + else { + $status = $data->clusterIndex($_REQUEST['object']); + if ($status == 0) { + doAdmin($type, $lang['strclusteredgood']); + } + else + doAdmin($type, $lang['strclusteredbad']); + } + } + else { // Cluster all tables in database + $status = $data->clusterIndex(); + if ($status == 0) { + doAdmin($type, $lang['strclusteredgood']); + } + else + doAdmin($type, $lang['strclusteredbad']); + } + } + } + + /** + * Show confirmation of reindex and perform reindex + */ + function doReindex($type, $confirm=false) { + global $script, $data, $misc, $lang, $_reload_browser; + + if (($type == 'table') && empty($_REQUEST['table']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifytabletoreindex']); + return; + } + + if ($confirm) { + if (isset($_REQUEST['ma'])) { + $misc->printTrail('schema'); + $misc->printTitle($lang['strreindex'], 'pg.reindex'); + + echo "<form action=\"{$script}\" method=\"post\">\n"; + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfreindextable'], $misc->printVal($a['table'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table[]\" value=\"", htmlspecialchars($a['table']), "\" />\n"; + } + } // END if multi reindex + else { + $misc->printTrail($type); + $misc->printTitle($lang['strreindex'], 'pg.reindex'); + + echo "<form action=\"{$script}\" method=\"post\">\n"; + + if ($type == 'table') { + echo "<p>", sprintf($lang['strconfreindextable'], $misc->printVal($_REQUEST['object'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['object']), "\" />\n"; + } + else { + echo "<p>", sprintf($lang['strconfreindexdatabase'], $misc->printVal($_REQUEST['object'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"\" />\n"; + } + } + echo "<input type=\"hidden\" name=\"action\" value=\"reindex\" />\n"; + + if ($data->hasForceReindex()) + echo "<p><input type=\"checkbox\" id=\"reindex_force\" name=\"reindex_force\" /><label for=\"reindex_force\">{$lang['strforce']}</label></p>\n"; + + echo $misc->form; + + echo "<input type=\"submit\" name=\"reindex\" value=\"{$lang['strreindex']}\" />\n"; //TODO + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } // END single reindex + else { + //If multi table reindex + if (($type == 'table') && is_array($_REQUEST['table'])) { + $msg=''; + foreach($_REQUEST['table'] as $o) { + $status = $data->reindex(strtoupper($type), $o, isset($_REQUEST['reindex_force'])); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($o, ENT_QUOTES, 'UTF-8'), $lang['strreindexgood']); + else { + doDefault($type, sprintf('%s%s: %s<br />', $msg, htmlentities($o, ENT_QUOTES, 'UTF-8'), $lang['strreindexbad'])); + return; + } + } + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else { + $status = $data->reindex(strtoupper($type), $_REQUEST['object'], isset($_REQUEST['reindex_force'])); + if ($status == 0) { + $_reload_browser = true; + doAdmin($type, $lang['strreindexgood']); + } + else + doAdmin($type, $lang['strreindexbad']); + } + } + } + + /** + * Show confirmation of analyze and perform analyze + */ + function doAnalyze($type, $confirm=false) { + global $script, $data, $misc, $lang, $_reload_browser; + + if (($type == 'table') && empty($_REQUEST['table']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifytabletoanalyze']); + return; + } + + if ($confirm) { + if (isset($_REQUEST['ma'])) { + $misc->printTrail('schema'); + $misc->printTitle($lang['stranalyze'], 'pg.analyze'); + + echo "<form action=\"{$script}\" method=\"post\">\n"; + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfanalyzetable'], $misc->printVal($a['table'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table[]\" value=\"", htmlspecialchars($a['table']), "\" />\n"; + } + } // END if multi analyze + else { + $misc->printTrail($type); + $misc->printTitle($lang['stranalyze'], 'pg.analyze'); + + echo "<form action=\"{$script}\" method=\"post\">\n"; + + if ($type == 'table') { + echo "<p>", sprintf($lang['strconfanalyzetable'], $misc->printVal($_REQUEST['object'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['object']), "\" />\n"; + } + else { + echo "<p>", sprintf($lang['strconfanalyzedatabase'], $misc->printVal($_REQUEST['object'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"\" />\n"; + } + } + echo "<input type=\"hidden\" name=\"action\" value=\"analyze\" />\n"; + echo $misc->form; + + echo "<input type=\"submit\" name=\"analyze\" value=\"{$lang['stranalyze']}\" />\n"; //TODO + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } // END single analyze + else { + //If multi table analyze + if (($type == 'table') && is_array($_REQUEST['table'])) { + $msg=''; + foreach($_REQUEST['table'] as $o) { + $status = $data->analyzeDB($o); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($o, ENT_QUOTES, 'UTF-8'), $lang['stranalyzegood']); + else { + doDefault($type, sprintf('%s%s: %s<br />', $msg, htmlentities($o, ENT_QUOTES, 'UTF-8'), $lang['stranalyzebad'])); + return; + } + } + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else { + //we must pass table here. When empty, analyze the whole db + $status = $data->analyzeDB($_REQUEST['table']); + if ($status == 0) { + $_reload_browser = true; + doAdmin($type, $lang['stranalyzegood']); + } + else + doAdmin($type, $lang['stranalyzebad']); + } + } + } + + /** + * Show confirmation of vacuum and perform actual vacuum + */ + function doVacuum($type, $confirm = false) { + global $script, $data, $misc, $lang, $_reload_browser; + + if (($type == 'table') && empty($_REQUEST['table']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifytabletovacuum']); + return; + } + + if ($confirm) { + if (isset($_REQUEST['ma'])) { + $misc->printTrail('schema'); + $misc->printTitle($lang['strvacuum'], 'pg.vacuum'); + + echo "<form action=\"{$script}\" method=\"post\">\n"; + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfvacuumtable'], $misc->printVal($a['table'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table[]\" value=\"", htmlspecialchars($a['table']), "\" />\n"; + } + } // END if multi vacuum + else { + $misc->printTrail($type); + $misc->printTitle($lang['strvacuum'], 'pg.vacuum'); + + echo "<form action=\"{$script}\" method=\"post\">\n"; + + if ($type == 'table') { + echo "<p>", sprintf($lang['strconfvacuumtable'], $misc->printVal($_REQUEST['object'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['object']), "\" />\n"; + } + else { + echo "<p>", sprintf($lang['strconfvacuumdatabase'], $misc->printVal($_REQUEST['object'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"\" />\n"; + } + } + echo "<input type=\"hidden\" name=\"action\" value=\"vacuum\" />\n"; + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"vacuum_full\" name=\"vacuum_full\" /> <label for=\"vacuum_full\">{$lang['strfull']}</label></p>\n"; + echo "<p><input type=\"checkbox\" id=\"vacuum_analyze\" name=\"vacuum_analyze\" /> <label for=\"vacuum_analyze\">{$lang['stranalyze']}</label></p>\n"; + echo "<p><input type=\"checkbox\" id=\"vacuum_freeze\" name=\"vacuum_freeze\" /> <label for=\"vacuum_freeze\">{$lang['strfreeze']}</label></p>\n"; + echo "<input type=\"submit\" name=\"vacuum\" value=\"{$lang['strvacuum']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } // END single vacuum + else { + //If multi drop + if (is_array($_REQUEST['table'])) { + $msg=''; + foreach($_REQUEST['table'] as $t) { + $status = $data->vacuumDB($t, isset($_REQUEST['vacuum_analyze']), isset($_REQUEST['vacuum_full']), isset($_REQUEST['vacuum_freeze'])); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($t, ENT_QUOTES, 'UTF-8'), $lang['strvacuumgood']); + else { + doDefault($type, sprintf('%s%s: %s<br />', $msg, htmlentities($t, ENT_QUOTES, 'UTF-8'), $lang['strvacuumbad'])); + return; + } + } + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else { + //we must pass table here. When empty, vacuum the whole db + $status = $data->vacuumDB($_REQUEST['table'], isset($_REQUEST['vacuum_analyze']), isset($_REQUEST['vacuum_full']), isset($_REQUEST['vacuum_freeze'])); + if ($status == 0) { + $_reload_browser = true; + doAdmin($type, $lang['strvacuumgood']); + } + else + doAdmin($type, $lang['strvacuumbad']); + } + } + } + + /** + * Add or Edit autovacuum params and save them + */ + function doEditAutovacuum($type, $confirm, $msg='') { + global $script, $data, $misc, $lang; + + if (empty($_REQUEST['table'])) { + doAdmin($type, '', $lang['strspecifyeditvacuumtable']); + return; + } + + $script = ($type == 'database')? 'database.php' : 'tables.php'; + + if ($confirm) { + $misc->printTrail($type); + $misc->printTitle(sprintf($lang['streditvacuumtable'], $misc->printVal($_REQUEST['table']))); + $misc->printMsg(sprintf($msg, $misc->printVal($_REQUEST['table']))); + + if (empty($_REQUEST['table'])) { + doAdmin($type, '', $lang['strspecifyeditvacuumtable']); + return; + } + + $old_val = $data->getTableAutovacuum($_REQUEST['table']); + $defaults = $data->getAutovacuum(); + $old_val = $old_val->fields; + + if (isset($old_val['autovacuum_enabled']) and ($old_val['autovacuum_enabled'] == 'off')) { + $enabled = ''; + $disabled = 'checked="checked"'; + } + else { + $enabled = 'checked="checked"'; + $disabled = ''; + } + + if (!isset($old_val['autovacuum_vacuum_threshold'])) $old_val['autovacuum_vacuum_threshold'] = ''; + if (!isset($old_val['autovacuum_vacuum_scale_factor'])) $old_val['autovacuum_vacuum_scale_factor'] = ''; + if (!isset($old_val['autovacuum_analyze_threshold'])) $old_val['autovacuum_analyze_threshold'] = ''; + if (!isset($old_val['autovacuum_analyze_scale_factor'])) $old_val['autovacuum_analyze_scale_factor'] = ''; + if (!isset($old_val['autovacuum_vacuum_cost_delay'])) $old_val['autovacuum_vacuum_cost_delay'] = ''; + if (!isset($old_val['autovacuum_vacuum_cost_limit'])) $old_val['autovacuum_vacuum_cost_limit'] = ''; + + echo "<form action=\"{$script}\" method=\"post\">\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"action\" value=\"editautovac\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + + echo "<br />\n<br />\n<table>\n"; + echo "\t<tr><td> </td>\n"; + echo "<th class=\"data\">{$lang['strnewvalues']}</th><th class=\"data\">{$lang['strdefaultvalues']}</th></tr>\n"; + echo "\t<tr><th class=\"data left\">{$lang['strenable']}</th>\n"; + echo "<td class=\"data1\">\n"; + echo "<label for=\"on\">on</label><input type=\"radio\" name=\"autovacuum_enabled\" id=\"on\" value=\"on\" {$enabled} />\n"; + echo "<label for=\"off\">off</label><input type=\"radio\" name=\"autovacuum_enabled\" id=\"off\" value=\"off\" {$disabled} /></td>\n"; + echo "<th class=\"data left\">{$defaults['autovacuum']}</th></tr>\n"; + echo "\t<tr><th class=\"data left\">{$lang['strvacuumbasethreshold']}</th>\n"; + echo "<td class=\"data1\"><input type=\"text\" name=\"autovacuum_vacuum_threshold\" value=\"{$old_val['autovacuum_vacuum_threshold']}\" /></td>\n"; + echo "<th class=\"data left\">{$defaults['autovacuum_vacuum_threshold']}</th></tr>\n"; + echo "\t<tr><th class=\"data left\">{$lang['strvacuumscalefactor']}</th>\n"; + echo "<td class=\"data1\"><input type=\"text\" name=\"autovacuum_vacuum_scale_factor\" value=\"{$old_val['autovacuum_vacuum_scale_factor']}\" /></td>\n"; + echo "<th class=\"data left\">{$defaults['autovacuum_vacuum_scale_factor']}</th></tr>\n"; + echo "\t<tr><th class=\"data left\">{$lang['stranalybasethreshold']}</th>\n"; + echo "<td class=\"data1\"><input type=\"text\" name=\"autovacuum_analyze_threshold\" value=\"{$old_val['autovacuum_analyze_threshold']}\" /></td>\n"; + echo "<th class=\"data left\">{$defaults['autovacuum_analyze_threshold']}</th></tr>\n"; + echo "\t<tr><th class=\"data left\">{$lang['stranalyzescalefactor']}</th>\n"; + echo "<td class=\"data1\"><input type=\"text\" name=\"autovacuum_analyze_scale_factor\" value=\"{$old_val['autovacuum_analyze_scale_factor']}\" /></td>\n"; + echo "<th class=\"data left\">{$defaults['autovacuum_analyze_scale_factor']}</th></tr>\n"; + echo "\t<tr><th class=\"data left\">{$lang['strvacuumcostdelay']}</th>\n"; + echo "<td class=\"data1\"><input type=\"text\" name=\"autovacuum_vacuum_cost_delay\" value=\"{$old_val['autovacuum_vacuum_cost_delay']}\" /></td>\n"; + echo "<th class=\"data left\">{$defaults['autovacuum_vacuum_cost_delay']}</th></tr>\n"; + echo "\t<tr><th class=\"data left\">{$lang['strvacuumcostlimit']}</th>\n"; + echo "<td class=\"datat1\"><input type=\"text\" name=\"autovacuum_vacuum_cost_limit\" value=\"{$old_val['autovacuum_vacuum_cost_limit']}\" /></td>\n"; + echo "<th class=\"data left\">{$defaults['autovacuum_vacuum_cost_limit']}</th></tr>\n"; + echo "</table>\n"; + echo "<br />"; + echo "<br />"; + echo "<input type=\"submit\" name=\"save\" value=\"{$lang['strsave']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + + echo "</form>\n"; + } + else { + $status = $data->saveAutovacuum($_REQUEST['table'], $_POST['autovacuum_enabled'], $_POST['autovacuum_vacuum_threshold'], + $_POST['autovacuum_vacuum_scale_factor'], $_POST['autovacuum_analyze_threshold'], $_POST['autovacuum_analyze_scale_factor'], + $_POST['autovacuum_vacuum_cost_delay'], $_POST['autovacuum_vacuum_cost_limit']); + + if ($status == 0) + doAdmin($type, '', sprintf($lang['strsetvacuumtablesaved'], $_REQUEST['table'])); + else + doEditAutovacuum($type, true, $lang['strsetvacuumtablefail']); + } + } + + /** + * confirm drop autovacuum params for a table and drop it + */ + function doDropAutovacuum($type, $confirm) { + global $script, $data, $misc, $lang; + + if (empty($_REQUEST['table'])) { + doAdmin($type, '', $lang['strspecifydelvacuumtable']); + return; + } + + if ($confirm) { + $misc->printTrail($type); + $misc->printTabs($type,'admin'); + + $script = ($type == 'database')? 'database.php' : 'tables.php'; + + printf("<p>{$lang['strdelvacuumtable']}</p>\n", + $misc->printVal("\"{$_GET['schema']}\".\"{$_GET['table']}\"")); + + echo "<form style=\"float: left\" action=\"{$script}\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"delautovac\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"rel\" value=\"", htmlspecialchars(serialize(array($_REQUEST['schema'], $_REQUEST['table']))), "\" />\n"; + echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; + echo "</form>\n"; + + echo "<form action=\"{$script}\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"admin\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; + echo "</form>\n"; + } + else { + + $status = $data->dropAutovacuum($_POST['table']); + + if ($status == 0) { + doAdmin($type, '', sprintf($lang['strvacuumtablereset'], $misc->printVal($_POST['table']))); + } + else + doAdmin($type, '', sprintf($lang['strdelvacuumtablefail'], $misc->printVal($_POST['table']))); + } + } + + /** + * database/table administration and tuning tasks + * + * $Id: admin.php + */ + + function doAdmin($type, $msg = '') { + global $script, $data, $misc, $lang; + + $misc->printTrail($type); + $misc->printTabs($type,'admin'); + $misc->printMsg($msg); + + if ($type == 'database') + printf("<p>{$lang['stradminondatabase']}</p>\n", $misc->printVal($_REQUEST['object'])); + else + printf("<p>{$lang['stradminontable']}</p>\n", $misc->printVal($_REQUEST['object'])); + + echo "<table style=\"width: 50%\">\n"; + echo "<tr>\n"; + echo "<th class=\"data\">"; + $misc->printHelp($lang['strvacuum'],'pg.admin.vacuum')."</th>\n"; + echo "</th>"; + echo "<th class=\"data\">"; + $misc->printHelp($lang['stranalyze'],'pg.admin.analyze'); + echo "</th>"; + if ($data->hasRecluster()){ + echo "<th class=\"data\">"; + $misc->printHelp($lang['strclusterindex'],'pg.index.cluster'); + echo "</th>"; + } + echo "<th class=\"data\">"; + $misc->printHelp($lang['strreindex'],'pg.index.reindex'); + echo "</th>"; + echo "</tr>"; + + // Vacuum + echo "<tr class=\"row1\">\n"; + echo "<td style=\"text-align: center; vertical-align: bottom\">\n"; + echo "<form action=\"{$script}\" method=\"post\">\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"confirm_vacuum\" />\n"; + echo $misc->form; + if ($type == 'table') { + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['object']), "\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"table\" />\n"; + } + echo "<input type=\"submit\" value=\"{$lang['strvacuum']}\" /></p>\n"; + echo "</form>\n"; + echo "</td>\n"; + + // Analyze + echo "<td style=\"text-align: center; vertical-align: bottom\">\n"; + echo "<form action=\"{$script}\" method=\"post\">\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"confirm_analyze\" />\n"; + echo $misc->form; + if ($type == 'table') { + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['object']), "\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"table\" />\n"; + } + echo "<input type=\"submit\" value=\"{$lang['stranalyze']}\" /></p>\n"; + echo "</form>\n"; + echo "</td>\n"; + + // Cluster + if ($data->hasRecluster()){ + $disabled = ''; + echo "<td style=\"text-align: center; vertical-align: bottom\">\n"; + echo "<form action=\"{$script}\" method=\"post\">\n"; + echo $misc->form; + if ($type == 'table') { + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['object']), "\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"table\" />\n"; + if (!$data->alreadyClustered($_REQUEST['object'])) { + $disabled = 'disabled="disabled" '; + echo "{$lang['strnoclusteravailable']}<br />"; + } + } + echo "<p><input type=\"hidden\" name=\"action\" value=\"confirm_cluster\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strclusterindex']}\" $disabled/></p>\n"; + echo "</form>\n"; + echo "</td>\n"; + } + + // Reindex + echo "<td style=\"text-align: center; vertical-align: bottom\">\n"; + echo "<form action=\"{$script}\" method=\"post\">\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"confirm_reindex\" />\n"; + echo $misc->form; + if ($type == 'table') { + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['object']), "\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"table\" />\n"; + } + echo "<input type=\"submit\" value=\"{$lang['strreindex']}\" /></p>\n"; + echo "</form>\n"; + echo "</td>\n"; + echo "</tr>\n"; + echo "</table>\n"; + + // Autovacuum + if($data->hasAutovacuum()) { + // get defaults values for autovacuum + $defaults = $data->getAutovacuum(); + // Fetch the autovacuum properties from the database or table if != '' + if ($type == 'table') $autovac = $data->getTableAutovacuum($_REQUEST['table']); + else $autovac = $data->getTableAutovacuum(); + + echo "<br /><br /><h2>{$lang['strvacuumpertable']}</h2>"; + echo '<p>' . (($defaults['autovacuum'] == 'on') ? $lang['strturnedon'] : $lang['strturnedoff'] ) . '</p>'; + echo "<p class=\"message\">{$lang['strnotdefaultinred']}</p>"; + + function enlight($f, $p) { + if ( isset($f[$p[0]]) and ($f[$p[0]] != $p[1])) + return "<span style=\"color:#F33;font-weight:bold\">". htmlspecialchars($f[$p[0]]) ."</span>"; + return htmlspecialchars($p[1]); + } + + $columns = array( + 'namespace' => array( + 'title' => $lang['strschema'], + 'field' => field('nspname'), + 'url' => "redirect.php?subject=schema&{$misc->href}&", + 'vars' => array('schema' => 'nspname'), + ), + 'relname' => array( + 'title' => $lang['strtable'], + 'field' => field('relname'), + 'url' => "redirect.php?subject=table&{$misc->href}&", + 'vars' => array('table' => 'relname', 'schema' => 'nspname'), + ), + 'autovacuum_enabled' => array( + 'title' => $lang['strenabled'], + 'field' => callback('enlight', array('autovacuum_enabled', $defaults['autovacuum'])), + 'type' => 'verbatim' + ), + 'autovacuum_vacuum_threshold' => array( + 'title' => $lang['strvacuumbasethreshold'], + 'field' => callback('enlight', array('autovacuum_vacuum_threshold', $defaults['autovacuum_vacuum_threshold'])), + 'type' => 'verbatim' + ), + 'autovacuum_vacuum_scale_factor' => array( + 'title' => $lang['strvacuumscalefactor'], + 'field' => callback('enlight', array('autovacuum_vacuum_scale_factor', $defaults['autovacuum_vacuum_scale_factor'])), + 'type' => 'verbatim' + ), + 'autovacuum_analyze_threshold' => array( + 'title' => $lang['stranalybasethreshold'], + 'field' => callback('enlight', array('autovacuum_analyze_threshold', $defaults['autovacuum_analyze_threshold'])), + 'type' => 'verbatim' + ), + 'autovacuum_analyze_scale_factor' => array( + 'title' => $lang['stranalyzescalefactor'], + 'field' => callback('enlight', array('autovacuum_analyze_scale_factor', $defaults['autovacuum_analyze_scale_factor'])), + 'type' => 'verbatim' + ), + 'autovacuum_vacuum_cost_delay' => array( + 'title' => $lang['strvacuumcostdelay'], + 'field' => concat(callback('enlight', array('autovacuum_vacuum_cost_delay', $defaults['autovacuum_vacuum_cost_delay'])), 'ms'), + 'type' => 'verbatim' + ), + 'autovacuum_vacuum_cost_limit' => array( + 'title' => $lang['strvacuumcostlimit'], + 'field' => callback('enlight', array('autovacuum_vacuum_cost_limit', $defaults['autovacuum_vacuum_cost_limit'])), + 'type' => 'verbatim' + ), + ); + + // Maybe we need to check permissions here? + $columns['actions'] = array('title' => $lang['stractions']); + + $actions = array( + 'edit' => array( + 'content' => $lang['stredit'], + 'attr'=> array ( + 'href' => array ( + 'url' => $script, + 'urlvars' => array ( + 'subject' => $type, + 'action' => 'confeditautovac', + 'schema' => field('nspname'), + 'table' => field('relname') + ) + ) + ) + ), + 'delete' => array( + 'content' => $lang['strdelete'], + 'attr'=> array ( + 'href' => array ( + 'url' => $script, + 'urlvars' => array ( + 'subject' => $type, + 'action' => 'confdelautovac', + 'schema' => field('nspname'), + 'table' => field('relname') + ) + ) + ) + ) + ); + + if ($type == 'table') { + unset($actions['edit']['vars']['schema'], + $actions['delete']['vars']['schema'], + $columns['namespace'], + $columns['relname'] + ); + } + + $misc->printTable($autovac, $columns, $actions, 'admin-admin', $lang['strnovacuumconf']); + + if (($type == 'table') and ($autovac->recordCount() == 0)) { + echo "<br />"; + echo "<a href=\"tables.php?action=confeditautovac&{$misc->href}&table=", htmlspecialchars($_REQUEST['table']) + ,"\">{$lang['straddvacuumtable']}</a>"; + } + } + } + + function adminActions($action, $type) { + global $script; + + if ($type == 'database') { + $_REQUEST['object'] = $_REQUEST['database']; + $script = 'database.php'; + } + else { + // $_REQUEST['table'] is no set if we are in the schema page + $_REQUEST['object'] = (isset($_REQUEST['table']) ? $_REQUEST['table']:''); + $script = 'tables.php'; + } + + switch ($action) { + case 'confirm_cluster': + doCluster($type, true); + break; + case 'confirm_reindex': + doReindex($type, true); + break; + case 'confirm_analyze': + doAnalyze($type, true); + break; + case 'confirm_vacuum': + doVacuum($type, true); + break; + case 'cluster': + if (isset($_POST['cluster'])) doCluster($type); + // if multi-action from table canceled: back to the schema default page + else if (($type == 'table') && is_array($_REQUEST['object']) ) doDefault(); + else doAdmin($type); + break; + case 'reindex': + if (isset($_POST['reindex'])) doReindex($type); + // if multi-action from table canceled: back to the schema default page + else if (($type == 'table') && is_array($_REQUEST['object']) ) doDefault(); + else doAdmin($type); + break; + case 'analyze': + if (isset($_POST['analyze'])) doAnalyze($type); + // if multi-action from table canceled: back to the schema default page + else if (($type == 'table') && is_array($_REQUEST['object']) ) doDefault(); + else doAdmin($type); + break; + case 'vacuum': + if (isset($_POST['vacuum'])) doVacuum($type); + // if multi-action from table canceled: back to the schema default page + else if (($type == 'table') && is_array($_REQUEST['object']) ) doDefault(); + else doAdmin($type); + break; + case 'admin': + doAdmin($type); + break; + case 'confeditautovac': + doEditAutovacuum($type, true); + break; + case 'confdelautovac': + doDropAutovacuum($type, true); + break; + case 'confaddautovac': + doAddAutovacuum(true); + break; + case 'editautovac': + if (isset($_POST['save'])) doEditAutovacuum($type, false); + else doAdmin($type); + break; + case 'delautovac': + doDropAutovacuum($type, false); + break; + default: + return false; + } + return true; + } + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/aggregates.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/aggregates.php new file mode 100644 index 00000000..5356e02c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/aggregates.php @@ -0,0 +1,462 @@ +<?php + + /** + * Manage aggregates in a database + * + * $Id: aggregates.php,v 1.27 2008/01/19 13:46:15 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Actually creates the new aggregate in the database + */ + function doSaveCreate() { + global $data, $lang, $_reload_browser; + + // Check inputs + if (trim($_REQUEST['name']) == '') { + doCreate($lang['straggrneedsname']); + return; + } + else if (trim($_REQUEST['basetype']) == '') { + doCreate($lang['straggrneedsbasetype']); + return; + } + else if (trim($_REQUEST['sfunc']) == '') { + doCreate($lang['straggrneedssfunc']); + return; + } + else if (trim($_REQUEST['stype']) == '') { + doCreate($lang['straggrneedsstype']); + return; + } + + $status = $data->createAggregate($_REQUEST['name'], $_REQUEST['basetype'], $_REQUEST['sfunc'], $_REQUEST['stype'], + $_REQUEST['ffunc'], $_REQUEST['initcond'], $_REQUEST['sortop'], $_REQUEST['aggrcomment']); + + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['straggrcreated']); + } + else { + doCreate($lang['straggrcreatedbad']); + } + } + + /** + * Displays a screen for create a new aggregate function + */ + function doCreate($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_REQUEST['name'])) $_REQUEST['name'] = ''; + if (!isset($_REQUEST['basetype'])) $_REQUEST['basetype'] = ''; + if (!isset($_REQUEST['sfunc'])) $_REQUEST['sfunc'] = ''; + if (!isset($_REQUEST['stype'])) $_REQUEST['stype'] = ''; + if (!isset($_REQUEST['ffunc'])) $_REQUEST['ffunc'] = ''; + if (!isset($_REQUEST['initcond'])) $_REQUEST['initcond'] = ''; + if (!isset($_REQUEST['sortop'])) $_REQUEST['sortop'] = ''; + if (!isset($_REQUEST['aggrcomment'])) $_REQUEST['aggrcomment'] = ''; + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreateaggregate'], 'pg.aggregate.create'); + $misc->printMsg($msg); + + echo "<form action=\"aggregates.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['name']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['straggrbasetype']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"basetype\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['basetype']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['straggrsfunc']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"sfunc\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['sfunc']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['straggrstype']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"stype\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['stype']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['straggrffunc']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"ffunc\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['ffunc']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['straggrinitcond']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"initcond\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['initcond']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['straggrsortop']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"sortop\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['sortop']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td><textarea name=\"aggrcomment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_REQUEST['aggrcomment']), "</textarea></td>\n\t</tr>\n"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Function to save after altering an aggregate + */ + function doSaveAlter() { + global $data, $lang; + + // Check inputs + if (trim($_REQUEST['aggrname']) == '') { + doAlter($lang['straggrneedsname']); + return; + } + + $status = $data->alterAggregate($_REQUEST['aggrname'], $_REQUEST['aggrtype'], $_REQUEST['aggrowner'], + $_REQUEST['aggrschema'], $_REQUEST['aggrcomment'], $_REQUEST['newaggrname'], $_REQUEST['newaggrowner'], + $_REQUEST['newaggrschema'], $_REQUEST['newaggrcomment']); + if ($status == 0) + doDefault($lang['straggraltered']); + else { + doAlter($lang['straggralteredbad']); + return; + } + } + + + /** + * Function to allow editing an aggregate function + */ + function doAlter($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('aggregate'); + $misc->printTitle($lang['stralter'], 'pg.aggregate.alter'); + $misc->printMsg($msg); + + echo "<form action=\"aggregates.php\" method=\"post\">\n"; + $aggrdata = $data->getAggregate($_REQUEST['aggrname'], $_REQUEST['aggrtype']); + if($aggrdata->recordCount() > 0 ) { + // Output table header + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data required\">{$lang['strname']}</th>"; + echo "<th class=\"data required\">{$lang['strowner']}</th>"; + echo "<th class=\"data required\">{$lang['strschema']}</th>\n\t</tr>\n"; + + // Display aggregate's name, owner and schema + echo "\t<tr>\n\t\t<td><input name=\"newaggrname\" size=\"32\" maxlength=\"32\" value=\"", htmlspecialchars($_REQUEST['aggrname']), "\" /></td>"; + echo "<td><input name=\"newaggrowner\" size=\"32\" maxlength=\"32\" value=\"", htmlspecialchars($aggrdata->fields['usename']), "\" /></td>"; + echo "<td><input name=\"newaggrschema\" size=\"32\" maxlength=\"32\" value=\"", htmlspecialchars($_REQUEST['schema']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td><textarea name=\"newaggrcomment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($aggrdata->fields['aggrcomment']), "</textarea></td>\n\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_alter\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"aggrname\" value=\"", htmlspecialchars($_REQUEST['aggrname']), "\" />\n"; + echo "<input type=\"hidden\" name=\"aggrtype\" value=\"", htmlspecialchars($_REQUEST['aggrtype']), "\" />\n"; + echo "<input type=\"hidden\" name=\"aggrowner\" value=\"", htmlspecialchars($aggrdata->fields['usename']), "\" />\n"; + echo "<input type=\"hidden\" name=\"aggrschema\" value=\"", htmlspecialchars($_REQUEST['schema']), "\" />\n"; + echo "<input type=\"hidden\" name=\"aggrcomment\" value=\"", htmlspecialchars($aggrdata->fields['aggrcomment']), "\" />\n"; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + } else { + echo "<p>{$lang['strnodata']}</p>\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strback']}\" /></p>\n"; + } + echo "</form>\n"; + } + + /** + * Show confirmation of drop and perform actual drop of the aggregate function selected + */ + function doDrop($confirm) { + global $data, $misc; + global $lang, $_reload_browser; + + if ($confirm) { + $misc->printTrail('aggregate'); + $misc->printTitle($lang['strdrop'], 'pg.aggregate.drop'); + + echo "<p>", sprintf($lang['strconfdropaggregate'], htmlspecialchars($_REQUEST['aggrname'])), "</p>\n"; + + echo "<form action=\"aggregates.php\" method=\"post\">\n"; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"aggrname\" value=\"", htmlspecialchars($_REQUEST['aggrname']), "\" />\n"; + echo "<input type=\"hidden\" name=\"aggrtype\" value=\"", htmlspecialchars($_REQUEST['aggrtype']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + $status = $data->dropAggregate($_POST['aggrname'], $_POST['aggrtype'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['straggregatedropped']); + } + else + doDefault($lang['straggregatedroppedbad']); + } + } + + /** + * Show the properties of an aggregate + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('aggregate'); + $misc->printTitle($lang['strproperties'],'pg.aggregate'); + $misc->printMsg($msg); + + $aggrdata = $data->getAggregate($_REQUEST['aggrname'], $_REQUEST['aggrtype']); + + if($aggrdata->recordCount() > 0 ) { + // Display aggregate's info + echo "<table>\n"; + echo "<tr>\n\t<th class=\"data left\">{$lang['strname']}</th>\n"; + echo "\t<td class=\"data1\">", htmlspecialchars($_REQUEST['aggrname']), "</td>\n</tr>\n"; + echo "<tr>\n\t<th class=\"data left\">{$lang['straggrbasetype']}</th>\n"; + echo "\t<td class=\"data1\">", htmlspecialchars($_REQUEST['aggrtype']), "</td>\n</tr>\n"; + echo "<tr>\n\t<th class=\"data left\">{$lang['straggrsfunc']}</th>\n"; + echo "\t<td class=\"data1\">", htmlspecialchars($aggrdata->fields['aggtransfn']), "</td>\n</tr>\n"; + echo "<tr>\n\t<th class=\"data left\">{$lang['straggrstype']}</th>\n"; + echo "\t<td class=\"data1\">", htmlspecialchars($aggrdata->fields['aggstype']), "</td>\n</tr>\n"; + echo "<tr>\n\t<th class=\"data left\">{$lang['straggrffunc']}</th>\n"; + echo "\t<td class=\"data1\">", htmlspecialchars($aggrdata->fields['aggfinalfn']), "</td>\n</tr>\n"; + echo "<tr>\n\t<th class=\"data left\">{$lang['straggrinitcond']}</th>\n"; + echo "\t<td class=\"data1\">", htmlspecialchars($aggrdata->fields['agginitval']), "</td>\n</tr>\n"; + if($data->hasAggregateSortOp()) { + echo "<tr>\n\t<th class=\"data left\">{$lang['straggrsortop']}</th>\n"; + echo "\t<td class=\"data1\">", htmlspecialchars($aggrdata->fields['aggsortop']), "</td>\n</tr>\n"; + } + echo "<tr>\n\t<th class=\"data left\">{$lang['strowner']}</th>\n"; + echo "\t<td class=\"data1\">", htmlspecialchars($aggrdata->fields['usename']), "</td>\n</tr>\n"; + echo "<tr>\n\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t<td class=\"data1\">", $misc->printVal($aggrdata->fields['aggrcomment']), "</td>\n</tr>\n"; + echo "</table>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + + $navlinks = array ( + 'showall' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'aggregates.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['straggrshowall'] + ) + ); + + if ($data->hasAlterAggregate()) { + $navlinks['alter'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'aggregates.php', + 'urlvars' => array ( + 'action' => 'alter', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'aggrname' => $_REQUEST['aggrname'], + 'aggrtype' => $_REQUEST['aggrtype'] + ) + ) + ), + 'content' => $lang['stralter'] + ); + } + + $navlinks['drop'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'aggregates.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'aggrname' => $_REQUEST['aggrname'], + 'aggrtype' => $_REQUEST['aggrtype'] + ) + ) + ), + 'content' => $lang['strdrop'] + ); + + $misc->printNavLinks($navlinks, 'aggregates-properties', get_defined_vars()); + } + + + /** + * Show default list of aggregate functions in the database + */ + function doDefault($msg = '') { + global $data, $conf, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema', 'aggregates'); + $misc->printMsg($msg); + + $aggregates = $data->getAggregates(); + + $columns = array( + 'aggrname' => array( + 'title' => $lang['strname'], + 'field' => field('proname'), + 'url' => "redirect.php?subject=aggregate&action=properties&{$misc->href}&", + 'vars' => array('aggrname' => 'proname', 'aggrtype' => 'proargtypes'), + ), + 'aggrtype' => array( + 'title' => $lang['strtype'], + 'field' => field('proargtypes'), + ), + 'aggrtransfn' => array( + 'title' => $lang['straggrsfunc'], + 'field' => field('aggtransfn'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('usename'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('aggrcomment'), + ), + ); + + $actions = array( + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'aggregates.php', + 'urlvars' => array ( + 'action' => 'alter', + 'aggrname' => field('proname'), + 'aggrtype' => field('proargtypes') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'aggregates.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'aggrname' => field('proname'), + 'aggrtype' => field('proargtypes') + ) + ) + ) + ) + ); + + if (!$data->hasAlterAggregate()) unset($actions['alter']); + $misc->printTable($aggregates, $columns, $actions, 'aggregates-aggregates', $lang['strnoaggregates']); + + $navlinks = array ( + 'create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'aggregates.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + ) + ) + ), + 'content' => $lang['strcreateaggregate'] + ) + ); + $misc->printNavLinks($navlinks, 'aggregates-aggregates', get_defined_vars()); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $aggregates = $data->getAggregates(); + + $proto = concat(field('proname'), ' (', field('proargtypes'), ')'); + $reqvars = $misc->getRequestVars('aggregate'); + + $attrs = array( + 'text' => $proto, + 'icon' => 'Aggregate', + 'toolTip' => field('aggcomment'), + 'action' => url('redirect.php', + $reqvars, + array( + 'action' => 'properties', + 'aggrname' => field('proname'), + 'aggrtype' => field('proargtypes') + ) + ) + ); + + $misc->printTree($aggregates, $attrs, 'aggregates'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['straggregates']); + $misc->printBody(); + + switch ($action) { + case 'create': + doCreate(); + break; + case 'save_create': + if (isset($_POST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'alter': + doAlter(); + break; + case 'save_alter': + if (isset($_POST['alter'])) doSaveAlter(); + else doProperties(); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + default: + doDefault(); + break; + case 'properties': + doProperties(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/ajax-ac-insert.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/ajax-ac-insert.php new file mode 100644 index 00000000..20afbc75 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/ajax-ac-insert.php @@ -0,0 +1,92 @@ +<?php + include_once('./libraries/lib.inc.php'); + + if(isset($_POST['offset'])) + $offset = " OFFSET {$_POST['offset']}"; + else { + $_POST['offset'] = 0; + $offset = " OFFSET 0"; + } + + $keynames = array(); + foreach ($_POST['fkeynames'] as $k => $v) { + $fkeynames[$k] = html_entity_decode($v, ENT_QUOTES); + } + + $keyspos = array_combine($fkeynames, $_POST['keys']); + + $f_schema = html_entity_decode($_POST['f_schema'], ENT_QUOTES); + $data->fieldClean($f_schema); + $f_table = html_entity_decode($_POST['f_table'], ENT_QUOTES); + $data->fieldClean($f_table); + $f_attname = $fkeynames[$_POST['fattpos'][0]]; + $data->fieldClean($f_attname); + + $q = "SELECT * + FROM \"{$f_schema}\".\"{$f_table}\" + WHERE \"{$f_attname}\"::text LIKE '{$_POST['fvalue']}%' + ORDER BY \"{$f_attname}\" LIMIT 12 {$offset};"; + + $res = $data->selectSet($q); + + if (!$res->EOF) { + echo "<table class=\"ac_values\">"; + echo '<tr>'; + foreach (array_keys($res->fields) as $h) { + echo '<th>'; + + if (in_array($h, $fkeynames)) + echo '<img src="'. $misc->icon('ForeignKey') .'" alt="[referenced key]" />'; + + echo htmlentities($h, ENT_QUOTES, 'UTF-8'), '</th>'; + + } + echo "</tr>\n"; + $i=0; + while ((!$res->EOF) && ($i < 11)) { + $j=0; + echo "<tr class=\"acline\">"; + foreach ($res->fields as $n => $v) { + $finfo = $res->fetchField($j++); + if (in_array($n, $fkeynames)) + echo "<td><a href=\"javascript:void(0)\" class=\"fkval\" name=\"{$keyspos[$n]}\">", + $misc->printVal($v, $finfo->type, array('clip' => 'collapsed')), + "</a></td>"; + else + echo "<td><a href=\"javascript:void(0)\">", + $misc->printVal($v, $finfo->type, array('clip' => 'collapsed')), + "</a></td>"; + } + echo "</tr>\n"; + $i++; + $res->moveNext(); + } + echo "</table>\n"; + + $page_tests=''; + + $js = "<script type=\"text/javascript\">\n"; + + if ($_POST['offset']) { + echo "<a href=\"javascript:void(0)\" id=\"fkprev\"><< Prev</a>"; + $js.= "fkl_hasprev=true;\n"; + } + else + $js.= "fkl_hasprev=false;\n"; + + if ($res->recordCount() == 12) { + $js.= "fkl_hasnext=true;\n"; + echo " <a href=\"javascript:void(0)\" id=\"fknext\">Next >></a>"; + } + else + $js.= "fkl_hasnext=false;\n"; + + echo $js ."</script>"; + } + else { + printf("<p>{$lang['strnofkref']}</p>", "\"{$_POST['f_schema']}\".\"{$_POST['f_table']}\".\"{$fkeynames[$_POST['fattpos']]}\""); + + if ($_POST['offset']) + echo "<a href=\"javascript:void(0)\" class=\"fkprev\">Prev <<</a>"; + } +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/all_db.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/all_db.php new file mode 100644 index 00000000..181263ec --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/all_db.php @@ -0,0 +1,532 @@ +<?php + + /** + * Manage databases within a server + * + * $Id: all_db.php,v 1.59 2007/10/17 21:40:19 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Display a form for alter and perform actual alter + */ + function doAlter($confirm) { + global $data, $misc, $_reload_browser; + global $lang; + + if ($confirm) { + $misc->printTrail('database'); + $misc->printTitle($lang['stralter'], 'pg.database.alter'); + + echo "<form action=\"all_db.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<input name=\"newname\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['alterdatabase']), "\" /></td></tr>\n"; + + if ($data->hasAlterDatabaseOwner() && $data->isSuperUser()) { + // Fetch all users + + $rs = $data->getDatabaseOwner($_REQUEST['alterdatabase']); + $owner = isset($rs->fields['usename']) ? $rs->fields['usename'] : ''; + $users = $data->getUsers(); + + echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "<td class=\"data1\"><select name=\"owner\">"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $owner) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "</select></td></tr>\n"; + } + if ($data->hasSharedComments()){ + $rs = $data->getDatabaseComment($_REQUEST['alterdatabase']); + $comment = isset($rs->fields['description']) ? $rs->fields['description'] : ''; + echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<textarea rows=\"3\" cols=\"32\" name=\"dbcomment\">", + htmlspecialchars($comment), "</textarea></td></tr>\n"; + } + echo "</table>\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"alter\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"oldname\" value=\"", + htmlspecialchars($_REQUEST['alterdatabase']), "\" />\n"; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + if (!isset($_POST['owner'])) $_POST['owner'] = ''; + if (!isset($_POST['dbcomment'])) $_POST['dbcomment'] = ''; + if ($data->alterDatabase($_POST['oldname'], $_POST['newname'], $_POST['owner'], $_POST['dbcomment']) == 0) { + $_reload_browser = true; + doDefault($lang['strdatabasealtered']); + } + else + doDefault($lang['strdatabasealteredbad']); + } + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang, $_reload_drop_database; + + if (empty($_REQUEST['dropdatabase']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifydatabasetodrop']); + exit(); + } + + if ($confirm) { + + $misc->printTrail('database'); + $misc->printTitle($lang['strdrop'], 'pg.database.drop'); + + echo "<form action=\"all_db.php\" method=\"post\">\n"; + //If multi drop + if (isset($_REQUEST['ma'])) { + + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfdropdatabase'], $misc->printVal($a['database'])), "</p>\n"; + printf('<input type="hidden" name="dropdatabase[]" value="%s" />', htmlspecialchars($a['database'])); + } + + } else { + echo "<p>", sprintf($lang['strconfdropdatabase'], $misc->printVal($_REQUEST['dropdatabase'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"dropdatabase\" value=\"", htmlspecialchars($_REQUEST['dropdatabase']), "\" />\n"; + }// END if multi drop + + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } // END confirm + else { + //If multi drop + if (is_array($_REQUEST['dropdatabase'])) { + $msg = ''; + foreach($_REQUEST['dropdatabase'] as $d) { + $status = $data->dropDatabase($d); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($d, ENT_QUOTES, 'UTF-8'), $lang['strdatabasedropped']); + else { + doDefault(sprintf('%s%s: %s<br />', $msg, htmlentities($d, ENT_QUOTES, 'UTF-8'), $lang['strdatabasedroppedbad'])); + return; + } + }// Everything went fine, back to Default page... + $_reload_drop_database = true; + doDefault($msg); + } else { + $status = $data->dropDatabase($_POST['dropdatabase']); + if ($status == 0) { + $_reload_drop_database = true; + doDefault($lang['strdatabasedropped']); + } + else + doDefault($lang['strdatabasedroppedbad']); + } + }//END DROP + }// END FUNCTION + + + /** + * Displays a screen where they can enter a new database + */ + function doCreate($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('server'); + $misc->printTitle($lang['strcreatedatabase'], 'pg.database.create'); + $misc->printMsg($msg); + + if (!isset($_POST['formName'])) $_POST['formName'] = ''; + // Default encoding is that in language file + if (!isset($_POST['formEncoding'])) { + $_POST['formEncoding'] = ''; + } + if (!isset($_POST['formTemplate'])) $_POST['formTemplate'] = 'template1'; + if (!isset($_POST['formSpc'])) $_POST['formSpc'] = ''; + if (!isset($_POST['formComment'])) $_POST['formComment'] = ''; + + // Fetch a list of databases in the cluster + $templatedbs = $data->getDatabases(false); + + // Fetch all tablespaces from the database + if ($data->hasTablespaces()) $tablespaces = $data->getTablespaces(); + + echo "<form action=\"all_db.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\"><input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formName']), "\" /></td>\n\t</tr>\n"; + + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strtemplatedb']}</th>\n"; + echo "\t\t<td class=\"data1\">\n"; + echo "\t\t\t<select name=\"formTemplate\">\n"; + // Always offer template0 and template1 + echo "\t\t\t\t<option value=\"template0\"", + ($_POST['formTemplate'] == 'template0') ? ' selected="selected"' : '', ">template0</option>\n"; + echo "\t\t\t\t<option value=\"template1\"", + ($_POST['formTemplate'] == 'template1') ? ' selected="selected"' : '', ">template1</option>\n"; + while (!$templatedbs->EOF) { + $dbname = htmlspecialchars($templatedbs->fields['datname']); + if ($dbname != 'template1') { + // filter out for $conf[show_system] users so we dont get duplicates + echo "\t\t\t\t<option value=\"{$dbname}\"", + ($dbname == $_POST['formTemplate']) ? ' selected="selected"' : '', ">{$dbname}</option>\n"; + } + $templatedbs->moveNext(); + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + + // ENCODING + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strencoding']}</th>\n"; + echo "\t\t<td class=\"data1\">\n"; + echo "\t\t\t<select name=\"formEncoding\">\n"; + echo "\t\t\t\t<option value=\"\"></option>\n"; + while (list ($key) = each ($data->codemap)) { + echo "\t\t\t\t<option value=\"", htmlspecialchars($key), "\"", + ($key == $_POST['formEncoding']) ? ' selected="selected"' : '', ">", + $misc->printVal($key), "</option>\n"; + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + + if ($data->hasDatabaseCollation()) { + if (!isset($_POST['formCollate'])) $_POST['formCollate'] = ''; + if (!isset($_POST['formCType'])) $_POST['formCType'] = ''; + + // LC_COLLATE + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcollation']}</th>\n"; + echo "\t\t<td class=\"data1\">\n"; + echo "\t\t\t<input name=\"formCollate\" value=\"", htmlspecialchars($_POST['formCollate']), "\" />\n"; + echo "\t\t</td>\n\t</tr>\n"; + + // LC_CTYPE + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strctype']}</th>\n"; + echo "\t\t<td class=\"data1\">\n"; + echo "\t\t\t<input name=\"formCType\" value=\"", htmlspecialchars($_POST['formCType']), "\" />\n"; + echo "\t\t</td>\n\t</tr>\n"; + } + + // Tablespace (if there are any) + if ($data->hasTablespaces() && $tablespaces->recordCount() > 0) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strtablespace']}</th>\n"; + echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"formSpc\">\n"; + // Always offer the default (empty) option + echo "\t\t\t\t<option value=\"\"", + ($_POST['formSpc'] == '') ? ' selected="selected"' : '', "></option>\n"; + // Display all other tablespaces + while (!$tablespaces->EOF) { + $spcname = htmlspecialchars($tablespaces->fields['spcname']); + echo "\t\t\t\t<option value=\"{$spcname}\"", + ($spcname == $_POST['formSpc']) ? ' selected="selected"' : '', ">{$spcname}</option>\n"; + $tablespaces->moveNext(); + } + echo "\t\t\t</select>\n\t\t</td>\n\t</tr>\n"; + } + + // Comments (if available) + if ($data->hasSharedComments()) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td><textarea name=\"formComment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_POST['formComment']), "</textarea></td>\n\t</tr>\n"; + } + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new view in the database + */ + function doSaveCreate() { + global $data, $lang, $_reload_browser; + + // Default tablespace to null if it isn't set + if (!isset($_POST['formSpc'])) $_POST['formSpc'] = null; + + // Default comment to blank if it isn't set + if (!isset($_POST['formComment'])) $_POST['formComment'] = null; + + // Default collate to blank if it isn't set + if (!isset($_POST['formCollate'])) $_POST['formCollate'] = null; + + // Default ctype to blank if it isn't set + if (!isset($_POST['formCType'])) $_POST['formCType'] = null; + + // Check that they've given a name and a definition + if ($_POST['formName'] == '') doCreate($lang['strdatabaseneedsname']); + else { + $status = $data->createDatabase($_POST['formName'], $_POST['formEncoding'], $_POST['formSpc'], + $_POST['formComment'], $_POST['formTemplate'], $_POST['formCollate'], $_POST['formCType']); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strdatabasecreated']); + } + else + doCreate($lang['strdatabasecreatedbad']); + } + } + + /** + * Displays options for cluster download + */ + function doExport($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('server'); + $misc->printTabs('server','export'); + $misc->printMsg($msg); + + echo "<form action=\"dbexport.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strformat']}</th><th class=\"data\">{$lang['stroptions']}</th></tr>\n"; + // Data only + echo "<tr><th class=\"data left\" rowspan=\"2\">"; + echo "<input type=\"radio\" id=\"what1\" name=\"what\" value=\"dataonly\" checked=\"checked\" /><label for=\"what1\">{$lang['strdataonly']}</label></th>\n"; + echo "<td>{$lang['strformat']}\n"; + echo "<select name=\"d_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "<tr><td><input type=\"checkbox\" id=\"d_oids\" name=\"d_oids\" /><label for=\"d_oids\">{$lang['stroids']}</label></td>\n</tr>\n"; + // Structure only + echo "<tr><th class=\"data left\"><input type=\"radio\" id=\"what2\" name=\"what\" value=\"structureonly\" /><label for=\"what2\">{$lang['strstructureonly']}</label></th>\n"; + echo "<td><input type=\"checkbox\" id=\"s_clean\" name=\"s_clean\" /><label for=\"s_clean\">{$lang['strdrop']}</label></td>\n</tr>\n"; + // Structure and data + echo "<tr><th class=\"data left\" rowspan=\"3\">"; + echo "<input type=\"radio\" id=\"what3\" name=\"what\" value=\"structureanddata\" /><label for=\"what3\">{$lang['strstructureanddata']}</label></th>\n"; + echo "<td>{$lang['strformat']}\n"; + echo "<select name=\"sd_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "<tr><td><input type=\"checkbox\" id=\"sd_clean\" name=\"sd_clean\" /><label for=\"sd_clean\">{$lang['strdrop']}</label></td>\n</tr>\n"; + echo "<tr><td><input type=\"checkbox\" id=\"sd_oids\" name=\"sd_oids\" /><label for=\"sd_oids\">{$lang['stroids']}</label></td>\n</tr>\n"; + echo "</table>\n"; + + echo "<h3>{$lang['stroptions']}</h3>\n"; + echo "<p><input type=\"radio\" id=\"output1\" name=\"output\" value=\"show\" checked=\"checked\" /><label for=\"output1\">{$lang['strshow']}</label>\n"; + echo "<br/><input type=\"radio\" id=\"output2\" name=\"output\" value=\"download\" /><label for=\"output2\">{$lang['strdownload']}</label></p>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"export\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"server\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strexport']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Show default list of databases in the server + */ + function doDefault($msg = '') { + global $data, $conf, $misc; + global $lang; + + $misc->printTrail('server'); + $misc->printTabs('server','databases'); + $misc->printMsg($msg); + + $databases = $data->getDatabases(); + + $columns = array( + 'database' => array( + 'title' => $lang['strdatabase'], + 'field' => field('datname'), + 'url' => "redirect.php?subject=database&{$misc->href}&", + 'vars' => array('database' => 'datname'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('datowner'), + ), + 'encoding' => array( + 'title' => $lang['strencoding'], + 'field' => field('datencoding'), + ), + 'lc_collate' => array( + 'title' => $lang['strcollation'], + 'field' => field('datcollate'), + ), + 'lc_ctype' => array( + 'title' => $lang['strctype'], + 'field' => field('datctype'), + ), + 'tablespace' => array( + 'title' => $lang['strtablespace'], + 'field' => field('tablespace'), + ), + 'dbsize' => array( + 'title' => $lang['strsize'], + 'field' => field('dbsize'), + 'type' => 'prettysize', + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('datcomment'), + ), + ); + + $actions = array( + 'multiactions' => array( + 'keycols' => array('database' => 'datname'), + 'url' => 'all_db.php', + 'default' => null, + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'all_db.php', + 'urlvars' => array ( + 'subject' => 'database', + 'action' => 'confirm_drop', + 'dropdatabase' => field('datname') + ) + ) + ), + 'multiaction' => 'confirm_drop', + ), + 'privileges' => array( + 'content' => $lang['strprivileges'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'privileges.php', + 'urlvars' => array ( + 'subject' => 'database', + 'database' => field('datname') + ) + ) + ) + ) + ); + if ($data->hasAlterDatabase() ) { + $actions['alter'] = array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'all_db.php', + 'urlvars' => array ( + 'subject' => 'database', + 'action' => 'confirm_alter', + 'alterdatabase' => field('datname') + ) + ) + ) + ); + } + + if (!$data->hasTablespaces()) unset($columns['tablespace']); + if (!$data->hasServerAdminFuncs()) unset($columns['dbsize']); + if (!$data->hasDatabaseCollation()) unset($columns['lc_collate'], $columns['lc_ctype']); + if (!isset($data->privlist['database'])) unset($actions['privileges']); + + $misc->printTable($databases, $columns, $actions, 'all_db-databases', $lang['strnodatabases']); + + $navlinks = array ( + 'create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'all_db.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strcreatedatabase'] + ) + ); + $misc->printNavLinks($navlinks, 'all_db-databases', get_defined_vars()); + } + + function doTree() { + global $misc, $data, $lang; + + $databases = $data->getDatabases(); + + $reqvars = $misc->getRequestVars('database'); + + $attrs = array( + 'text' => field('datname'), + 'icon' => 'Database', + 'toolTip'=> field('datcomment'), + 'action' => url('redirect.php', + $reqvars, + array('database' => field('datname')) + ), + 'branch' => url('database.php', + $reqvars, + array( + 'action' => 'tree', + 'database' => field('datname') + ) + ), + ); + + $misc->printTree($databases, $attrs, 'databases'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strdatabases']); + $misc->printBody(); + + switch ($action) { + case 'export': + doExport(); + break; + case 'save_create': + if (isset($_POST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_REQUEST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'alter': + if (isset($_POST['oldname']) && isset($_POST['newname']) && !isset($_POST['cancel']) ) doAlter(false); + else doDefault(); + break; + case 'confirm_alter': + doAlter(true); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/browser.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/browser.php new file mode 100644 index 00000000..3b7a5480 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/browser.php @@ -0,0 +1,84 @@ +<?php + + /** + * Main object browser. This page first shows a list of databases and then + * if you click on a database it shows a list of database objects in that + * database. + * + * $Id: browser.php,v 1.59 2008/02/13 23:03:05 ioguix Exp $ + */ + + // Include application functions + $_no_db_connection = true; + $_no_bottom_link = true; + include_once('./libraries/lib.inc.php'); + + // Output header + $misc->printHeader('', ' + <script src="xloadtree/xtree2.js" type="text/javascript"></script> + <script src="xloadtree/xloadtree2.js" type="text/javascript"></script> + <style type="text/css"> + .webfx-tree-children { background-image: url("' . $misc->icon('I') . '"); } + </style>'); + + $misc->printBody('browser'); + echo "<div dir=\"ltr\">\n"; +?> + + <div class="logo"> + <a href="intro.php" target="detail"> + <?php echo htmlspecialchars($appName) ?> + </a> + </div> + <div class="refreshTree"><a href="browser.php" target="browser" ><img src="<?php echo $misc->icon('Refresh'); ?>" alt="<?php echo $lang['strrefresh']; ?>" title="<?php echo $lang['strrefresh']; ?>" /></a></div> +<script type="text/javascript"> + +webFXTreeConfig.rootIcon = "<?php echo $misc->icon('Servers') ?>"; +webFXTreeConfig.openRootIcon = "<?php echo $misc->icon('Servers') ?>"; +webFXTreeConfig.folderIcon = ""; +webFXTreeConfig.openFolderIcon = ""; +webFXTreeConfig.fileIcon = ""; +webFXTreeConfig.iIcon = "<?php echo $misc->icon('I') ?>"; +webFXTreeConfig.lIcon = "<?php echo $misc->icon('L') ?>"; +webFXTreeConfig.lMinusIcon = "<?php echo $misc->icon('Lminus') ?>"; +webFXTreeConfig.lPlusIcon = "<?php echo $misc->icon('Lplus') ?>"; +webFXTreeConfig.tIcon = "<?php echo $misc->icon('T') ?>"; +webFXTreeConfig.tMinusIcon = "<?php echo $misc->icon('Tminus') ?>"; +webFXTreeConfig.tPlusIcon = "<?php echo $misc->icon('Tplus') ?>"; +webFXTreeConfig.blankIcon = "<?php echo $misc->icon('blank') ?>"; +webFXTreeConfig.loadingIcon = "<?php echo $misc->icon('Loading') ?>"; +webFXTreeConfig.loadingText = "<?php echo $lang['strloading'] ?>"; +webFXTreeConfig.errorIcon = "<?php echo $misc->icon('ObjectNotFound') ?>"; +webFXTreeConfig.errorLoadingText = "<?php echo $lang['strerrorloading'] ?>"; +webFXTreeConfig.reloadText = "<?php echo $lang['strclicktoreload'] ?>"; + +// Set default target frame: +WebFXTreeAbstractNode.prototype.target = 'detail'; + +// Disable double click: +WebFXTreeAbstractNode.prototype._ondblclick = function(){} + +// Show tree XML on double click - for debugging purposes only +/* +// UNCOMMENT THIS FOR DEBUGGING (SHOWS THE SOURCE XML) +WebFXTreeAbstractNode.prototype._ondblclick = function(e){ + var el = e.target || e.srcElement; + + if (this.src != null) + window.open(this.src, this.target || "_self"); + return false; +}; +*/ +var tree = new WebFXLoadTree("<?php echo $lang['strservers']; ?>", "servers.php?action=tree", "servers.php"); + +tree.write(); +tree.setExpanded(true); + +</script> + +<?php + // Output footer + echo "</div>\n"; + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/casts.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/casts.php new file mode 100644 index 00000000..2be86b4f --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/casts.php @@ -0,0 +1,103 @@ +<?php + + /** + * Manage casts in a database + * + * $Id: casts.php,v 1.16 2007/09/25 16:08:05 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Show default list of casts in the database + */ + function doDefault($msg = '') { + global $data, $misc, $database; + global $lang; + + function renderCastContext($val) { + global $lang; + switch ($val) { + case 'e': return $lang['strno']; + case 'a': return $lang['strinassignment']; + default: return $lang['stryes']; + } + } + + $misc->printTrail('database'); + $misc->printTabs('database','casts'); + $misc->printMsg($msg); + + $casts = $data->getCasts(); + + $columns = array( + 'source_type' => array( + 'title' => $lang['strsourcetype'], + 'field' => field('castsource'), + ), + 'target_type' => array( + 'title' => $lang['strtargettype'], + 'field' => field('casttarget'), + ), + 'function' => array( + 'title' => $lang['strfunction'], + 'field' => field('castfunc'), + 'params'=> array('null' => $lang['strbinarycompat']), + ), + 'implicit' => array( + 'title' => $lang['strimplicit'], + 'field' => field('castcontext'), + 'type' => 'callback', + 'params'=> array('function' => 'renderCastContext', 'align' => 'center'), + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('castcomment'), + ), + ); + + $actions = array(); + + $misc->printTable($casts, $columns, $actions, 'casts-casts', $lang['strnocasts']); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $casts = $data->getCasts(); + + $proto = concat(field('castsource'), ' AS ', field('casttarget')); + + $attrs = array( + 'text' => $proto, + 'icon' => 'Cast' + ); + + $misc->printTree($casts, $attrs, 'casts'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strcasts']); + $misc->printBody(); + + switch ($action) { + case 'tree': + doTree(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/ArrayRecordSet.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/ArrayRecordSet.php new file mode 100644 index 00000000..b2a37547 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/ArrayRecordSet.php @@ -0,0 +1,32 @@ +<?php + +/** + * Really simple RecordSet to allow printTable of arrays. + * + * $Id: ArrayRecordSet.php,v 1.3 2007/01/10 01:46:28 soranzo Exp $ + */ +class ArrayRecordSet { + + var $_array; + var $_count; + var $EOF = false; + var $fields; + + function ArrayRecordSet($data) { + $this->_array = $data; + $this->_count = count($this->_array); + $this->fields = reset($this->_array); + if ($this->fields === false) $this->EOF = true; + } + + function recordCount() { + return $this->_count; + } + + function moveNext() { + $this->fields = next($this->_array); + if ($this->fields === false) $this->EOF = true; + } +} + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Gui.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Gui.php new file mode 100644 index 00000000..6d0fe215 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Gui.php @@ -0,0 +1,48 @@ +<?php + /** + * Class to handle basic HTML GUI functions + * + * $Id: Gui.php,v 1.2 2004/06/07 20:03:22 soranzo Exp $ + */ + class GUI { + + /** + *Constructor + */ + function GUI () {} + + /** + * Prints a combox box + * @param $arrOptions associative array storing options and values of combo should be Option => Value + * @param $szName string to specify the name of the form element + * @param (optional) $bBlankEntry bool to specify whether or not we want a blank selection + * @param (optional) $szDefault string to specify the default VALUE selected + * @param (optional) $bMultiple bool to specify whether or not we want a multi select combo box + * @param (optional) $iSize int to specify the size IF a multi select combo + * @return string with the generated HTML select box + */ + function printCombo(&$arrOptions, $szName, $bBlankEntry = true, $szDefault = '', $bMultiple = false, $iSize = 10) { + $htmlOut = ''; + if ($bMultiple) // If multiple select combo + $htmlOut .= "<select name=\"$szName\" id=\"$szName\" multiple=\"multiple\" size=\"$iSize\">\n"; + else + $htmlOut .= "<select name=\"$szName\" id=\"$szName\">\n"; + if ($bBlankEntry) + $htmlOut .= "<option value=\"\"></option>\n"; + + foreach ($arrOptions as $curKey => $curVal) { + $curVal = htmlspecialchars($curVal); + $curKey = htmlspecialchars($curKey); + if ($curVal == $szDefault) { + $htmlOut .= "<option value=\"$curVal\" selected=\"selected\">$curKey</option>\n"; + } + else { + $htmlOut .= "<option value=\"$curVal\">$curKey</option>\n"; + } + } + $htmlOut .= "</select>\n"; + + return $htmlOut; + } + } +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Misc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Misc.php new file mode 100644 index 00000000..6714bb48 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Misc.php @@ -0,0 +1,2655 @@ +<?php + /** + * Class to hold various commonly used functions + * + * $Id: Misc.php,v 1.171 2008/03/17 21:35:48 ioguix Exp $ + */ + + class Misc { + // Tracking string to include in HREFs + var $href; + // Tracking string to include in forms + var $form; + + /* Constructor */ + function Misc() { + } + + /** + * Checks if dumps are properly set up + * @param $all (optional) True to check pg_dumpall, false to just check pg_dump + * @return True, dumps are set up, false otherwise + */ + function isDumpEnabled($all = false) { + $info = $this->getServerInfo(); + return !empty($info[$all ? 'pg_dumpall_path' : 'pg_dump_path']); + } + + /** + * Sets the href tracking variable + */ + function setHREF() { + $this->href = $this->getHREF(); + } + + /** + * Get a href query string, excluding objects below the given object type (inclusive) + */ + function getHREF($exclude_from = null) { + $href = ''; + if (isset($_REQUEST['server']) && $exclude_from != 'server') { + $href .= 'server=' . urlencode($_REQUEST['server']); + if (isset($_REQUEST['database']) && $exclude_from != 'database') { + $href .= '&database=' . urlencode($_REQUEST['database']); + if (isset($_REQUEST['schema']) && $exclude_from != 'schema') { + $href .= '&schema=' . urlencode($_REQUEST['schema']); + } + } + } + return htmlentities($href); + } + + function getSubjectParams($subject) { + global $plugin_manager; + + $vars = array(); + + switch($subject) { + case 'root': + $vars = array ( + 'params' => array( + 'subject' => 'root' + ) + ); + break; + case 'server': + $vars = array ('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'server' + )); + break; + case 'role': + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'role', + 'action' => 'properties', + 'rolename' => $_REQUEST['rolename'] + )); + break; + case 'database': + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'database', + 'database' => $_REQUEST['database'], + )); + break; + case 'schema': + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'schema', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + )); + break; + case 'table': + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'table', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + )); + break; + case 'selectrows': + $vars = array( + 'url' => 'tables.php', + 'params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'table', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'], + 'action' => 'confselectrows' + )); + break; + case 'view': + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'view', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'view' => $_REQUEST['view'] + )); + break; + case 'fulltext': + case 'ftscfg': + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'fulltext', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'action' => 'viewconfig', + 'ftscfg' => $_REQUEST['ftscfg'] + )); + break; + case 'function': + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'function', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'function' => $_REQUEST['function'], + 'function_oid' => $_REQUEST['function_oid'] + )); + break; + case 'aggregate': + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'aggregate', + 'action' => 'properties', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'aggrname' => $_REQUEST['aggrname'], + 'aggrtype' => $_REQUEST['aggrtype'] + )); + break; + case 'column': + if (isset($_REQUEST['table'])) + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'column', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'], + 'column' => $_REQUEST['column'] + )); + else + $vars = array('params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'column', + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'view' => $_REQUEST['view'], + 'column' => $_REQUEST['column'] + )); + break; + case 'plugin': + $vars = array( + 'url' => 'plugin.php', + 'params' => array( + 'server' => $_REQUEST['server'], + 'subject' => 'plugin', + 'plugin' => $_REQUEST['plugin'], + )); + + if (!is_null($plugin_manager->getPlugin($_REQUEST['plugin']))) + $vars['params'] = array_merge($vars['params'], $plugin_manager->getPlugin($_REQUEST['plugin'])->get_subject_params()); + break; + default: + return false; + } + + if (!isset($vars['url'])) + $vars['url'] = 'redirect.php'; + + return $vars; + } + + function getHREFSubject($subject) { + $vars = $this->getSubjectParams($subject); + return "{$vars['url']}?". http_build_query($vars['params'], '', '&'); + } + + /** + * Sets the form tracking variable + */ + function setForm() { + $this->form = ''; + if (isset($_REQUEST['server'])) { + $this->form .= "<input type=\"hidden\" name=\"server\" value=\"" . htmlspecialchars($_REQUEST['server']) . "\" />\n"; + if (isset($_REQUEST['database'])) { + $this->form .= "<input type=\"hidden\" name=\"database\" value=\"" . htmlspecialchars($_REQUEST['database']) . "\" />\n"; + if (isset($_REQUEST['schema'])) { + $this->form .= "<input type=\"hidden\" name=\"schema\" value=\"" . htmlspecialchars($_REQUEST['schema']) . "\" />\n"; + } + } + } + } + + /** + * Render a value into HTML using formatting rules specified + * by a type name and parameters. + * + * @param $str The string to change + * + * @param $type Field type (optional), this may be an internal PostgreSQL type, or: + * yesno - same as bool, but renders as 'Yes' or 'No'. + * pre - render in a <pre> block. + * nbsp - replace all spaces with 's + * verbatim - render exactly as supplied, no escaping what-so-ever. + * callback - render using a callback function supplied in the 'function' param. + * + * @param $params Type parameters (optional), known parameters: + * null - string to display if $str is null, or set to TRUE to use a default 'NULL' string, + * otherwise nothing is rendered. + * clip - if true, clip the value to a fixed length, and append an ellipsis... + * cliplen - the maximum length when clip is enabled (defaults to $conf['max_chars']) + * ellipsis - the string to append to a clipped value (defaults to $lang['strellipsis']) + * tag - an HTML element name to surround the value. + * class - a class attribute to apply to any surrounding HTML element. + * align - an align attribute ('left','right','center' etc.) + * true - (type='bool') the representation of true. + * false - (type='bool') the representation of false. + * function - (type='callback') a function name, accepts args ($str, $params) and returns a rendering. + * lineno - prefix each line with a line number. + * map - an associative array. + * + * @return The HTML rendered value + */ + function printVal($str, $type = null, $params = array()) { + global $lang, $conf, $data; + + // Shortcircuit for a NULL value + if (is_null($str)) + return isset($params['null']) + ? ($params['null'] === true ? '<i>NULL</i>' : $params['null']) + : ''; + + if (isset($params['map']) && isset($params['map'][$str])) $str = $params['map'][$str]; + + // Clip the value if the 'clip' parameter is true. + if (isset($params['clip']) && $params['clip'] === true) { + $maxlen = isset($params['cliplen']) && is_integer($params['cliplen']) ? $params['cliplen'] : $conf['max_chars']; + $ellipsis = isset($params['ellipsis']) ? $params['ellipsis'] : $lang['strellipsis']; + if (strlen($str) > $maxlen) { + $str = substr($str, 0, $maxlen-1) . $ellipsis; + } + } + + $out = ''; + + switch ($type) { + case 'int2': + case 'int4': + case 'int8': + case 'float4': + case 'float8': + case 'money': + case 'numeric': + case 'oid': + case 'xid': + case 'cid': + case 'tid': + $align = 'right'; + $out = nl2br(htmlspecialchars($str)); + break; + case 'yesno': + if (!isset($params['true'])) $params['true'] = $lang['stryes']; + if (!isset($params['false'])) $params['false'] = $lang['strno']; + // No break - fall through to boolean case. + case 'bool': + case 'boolean': + if (is_bool($str)) $str = $str ? 't' : 'f'; + switch ($str) { + case 't': + $out = (isset($params['true']) ? $params['true'] : $lang['strtrue']); + $align = 'center'; + break; + case 'f': + $out = (isset($params['false']) ? $params['false'] : $lang['strfalse']); + $align = 'center'; + break; + default: + $out = htmlspecialchars($str); + } + break; + case 'bytea': + $tag = 'div'; + $class = 'pre'; + $out = $data->escapeBytea($str); + break; + case 'errormsg': + $tag = 'pre'; + $class = 'error'; + $out = htmlspecialchars($str); + break; + case 'pre': + $tag = 'pre'; + $out = htmlspecialchars($str); + break; + case 'prenoescape': + $tag = 'pre'; + $out = $str; + break; + case 'nbsp': + $out = nl2br(str_replace(' ', ' ', htmlspecialchars($str))); + break; + case 'verbatim': + $out = $str; + break; + case 'callback': + $out = $params['function']($str, $params); + break; + case 'prettysize': + if ($str == -1) + $out = $lang['strnoaccess']; + else + { + $limit = 10 * 1024; + $mult = 1; + if ($str < $limit * $mult) + $out = $str.' '.$lang['strbytes']; + else + { + $mult *= 1024; + if ($str < $limit * $mult) + $out = floor(($str + $mult / 2) / $mult).' '.$lang['strkb']; + else + { + $mult *= 1024; + if ($str < $limit * $mult) + $out = floor(($str + $mult / 2) / $mult).' '.$lang['strmb']; + else + { + $mult *= 1024; + if ($str < $limit * $mult) + $out = floor(($str + $mult / 2) / $mult).' '.$lang['strgb']; + else + { + $mult *= 1024; + if ($str < $limit * $mult) + $out = floor(($str + $mult / 2) / $mult).' '.$lang['strtb']; + } + } + } + } + } + break; + default: + // If the string contains at least one instance of >1 space in a row, a tab + // character, a space at the start of a line, or a space at the start of + // the whole string then render within a pre-formatted element (<pre>). + if (preg_match('/(^ | |\t|\n )/m', $str)) { + $tag = 'pre'; + $class = 'data'; + $out = htmlspecialchars($str); + } else { + $out = nl2br(htmlspecialchars($str)); + } + } + + if (isset($params['class'])) $class = $params['class']; + if (isset($params['align'])) $align = $params['align']; + + if (!isset($tag) && (isset($class) || isset($align))) $tag = 'div'; + + if (isset($tag)) { + $alignattr = isset($align) ? " style=\"text-align: {$align}\"" : ''; + $classattr = isset($class) ? " class=\"{$class}\"" : ''; + $out = "<{$tag}{$alignattr}{$classattr}>{$out}</{$tag}>"; + } + + // Add line numbers if 'lineno' param is true + if (isset($params['lineno']) && $params['lineno'] === true) { + $lines = explode("\n", $str); + $num = count($lines); + if ($num > 0) { + $temp = "<table>\n<tr><td class=\"{$class}\" style=\"vertical-align: top; padding-right: 10px;\"><pre class=\"{$class}\">"; + for ($i = 1; $i <= $num; $i++) { + $temp .= $i . "\n"; + } + $temp .= "</pre></td><td class=\"{$class}\" style=\"vertical-align: top;\">{$out}</td></tr></table>\n"; + $out = $temp; + } + unset($lines); + } + + return $out; + } + + /** + * A function to recursively strip slashes. Used to + * enforce magic_quotes_gpc being off. + * @param &var The variable to strip + */ + function stripVar(&$var) { + if (is_array($var)) { + foreach($var as $k => $v) { + $this->stripVar($var[$k]); + + /* magic_quotes_gpc escape keys as well ...*/ + if (is_string($k)) { + $ek = stripslashes($k); + if ($ek !== $k) { + $var[$ek] = $var[$k]; + unset($var[$k]); + } + } + } + } + else + $var = stripslashes($var); + } + + /** + * Print out the page heading and help link + * @param $title Title, already escaped + * @param $help (optional) The identifier for the help link + */ + function printTitle($title, $help = null) { + global $data, $lang; + + echo "<h2>"; + $this->printHelp($title, $help); + echo "</h2>\n"; + } + + /** + * Print out a message + * @param $msg The message to print + */ + function printMsg($msg) { + if ($msg != '') echo "<p class=\"message\">{$msg}</p>\n"; + } + + /** + * Creates a database accessor + */ + function getDatabaseAccessor($database, $server_id = null) { + global $lang, $conf, $misc, $_connection; + + $server_info = $this->getServerInfo($server_id); + + // Perform extra security checks if this config option is set + if ($conf['extra_login_security']) { + // Disallowed logins if extra_login_security is enabled. + // These must be lowercase. + $bad_usernames = array('pgsql', 'postgres', 'root', 'administrator'); + + $username = strtolower($server_info['username']); + + if ($server_info['password'] == '' || in_array($username, $bad_usernames)) { + unset($_SESSION['webdbLogin'][$_REQUEST['server']]); + $msg = $lang['strlogindisallowed']; + include('./login.php'); + exit; + } + } + + // Create the connection object and make the connection + $_connection = new Connection( + $server_info['host'], + $server_info['port'], + $server_info['sslmode'], + $server_info['username'], + $server_info['password'], + $database + ); + + // Get the name of the database driver we need to use. + // The description of the server is returned in $platform. + $_type = $_connection->getDriver($platform); + if ($_type === null) { + printf($lang['strpostgresqlversionnotsupported'], $postgresqlMinVer); + exit; + } + $this->setServerInfo('platform', $platform, $server_id); + $this->setServerInfo('pgVersion', $_connection->conn->pgVersion, $server_id); + + // Create a database wrapper class for easy manipulation of the + // connection. + include_once('./classes/database/' . $_type . '.php'); + $data = new $_type($_connection->conn); + $data->platform = $_connection->platform; + + /* we work on UTF-8 only encoding */ + $data->execute("SET client_encoding TO 'UTF-8'"); + + if ($data->hasByteaHexDefault()) { + $data->execute("SET bytea_output TO escape"); + } + + return $data; + } + + + /** + * Prints the page header. If global variable $_no_output is + * set then no header is drawn. + * @param $title The title of the page + * @param $script script tag + */ + function printHeader($title = '', $script = null, $frameset = false) { + global $appName, $lang, $_no_output, $conf, $plugin_manager; + + if (!isset($_no_output)) { + header("Content-Type: text/html; charset=utf-8"); + // Send XHTML headers, or regular XHTML strict headers + echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; + if ($frameset == true) { + echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n"; + } else if (isset($conf['use_xhtml_strict']) && $conf['use_xhtml_strict']) { + echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-Strict.dtd\">\n"; + } else { + echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; + } + echo "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"{$lang['applocale']}\" lang=\"{$lang['applocale']}\""; + if (strcasecmp($lang['applangdir'], 'ltr') != 0) echo " dir=\"", htmlspecialchars($lang['applangdir']), "\""; + echo ">\n"; + + echo "<head>\n"; + echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n"; + // Theme + echo "<link rel=\"stylesheet\" href=\"themes/{$conf['theme']}/global.css\" type=\"text/css\" id=\"csstheme\" />\n"; + echo "<link rel=\"shortcut icon\" href=\"images/themes/{$conf['theme']}/Favicon.ico\" type=\"image/vnd.microsoft.icon\" />\n"; + echo "<link rel=\"icon\" type=\"image/png\" href=\"images/themes/{$conf['theme']}/Introduction.png\" />\n"; + echo "<script type=\"text/javascript\" src=\"libraries/js/jquery.js\"></script>"; + echo "<script type=\"text/javascript\">// <!-- \n"; + echo "$(document).ready(function() { \n"; + echo " if (window.parent.frames.length > 1)\n"; + echo " $('#csstheme', window.parent.frames[0].document).attr('href','themes/{$conf['theme']}/global.css');\n"; + echo "}); // --></script>\n"; + echo "<title>", htmlspecialchars($appName); + if ($title != '') echo htmlspecialchars(" - {$title}"); + echo "</title>\n"; + + if ($script) echo "{$script}\n"; + + $plugins_head = array(); + $_params = array('heads' => &$plugins_head); + + $plugin_manager->do_hook('head', $_params); + + foreach($plugins_head as $tag) { + echo $tag; + } + + echo "</head>\n"; + } + } + + /** + * Prints the page footer + * @param $doBody True to output body tag, false otherwise + */ + function printFooter($doBody = true) { + global $_reload_browser, $_reload_drop_database; + global $lang, $_no_bottom_link; + + if ($doBody) { + if (isset($_reload_browser)) $this->printReload(false); + elseif (isset($_reload_drop_database)) $this->printReload(true); + if (!isset($_no_bottom_link)) + echo "<a href=\"#\" class=\"bottom_link\">".$lang['strgotoppage']."</a>"; + + echo "</body>\n"; + } + echo "</html>\n"; + } + + /** + * Prints the page body. + * @param $doBody True to output body tag, false otherwise + * @param $bodyClass - name of body class + */ + function printBody($bodyClass = '', $doBody = true ) { + global $_no_output; + + if (!isset($_no_output)) { + if ($doBody) { + $bodyClass = htmlspecialchars($bodyClass); + echo "<body", ($bodyClass == '' ? '' : " class=\"{$bodyClass}\""); + echo ">\n"; + } + } + } + + /** + * Outputs JavaScript code that will reload the browser + * @param $database True if dropping a database, false otherwise + */ + function printReload($database) { + echo "<script type=\"text/javascript\">\n"; + if ($database) + echo "\tparent.frames.browser.location.href=\"browser.php\";\n"; + else + echo "\tparent.frames.browser.location.reload();\n"; + echo "</script>\n"; + } + + /** + * Display a link + * @param $link An associative array of link parameters to print + * link = array( + * 'attr' => array( // list of A tag attribute + * 'attrname' => attribute value + * ... + * ), + * 'content' => The link text + * 'fields' => (optionnal) the data from which content and attr's values are obtained + * ); + * the special attribute 'href' might be a string or an array. If href is an array it + * will be generated by getActionUrl. See getActionUrl comment for array format. + */ + function printLink($link) { + + if (! isset($link['fields'])) + $link['fields'] = $_REQUEST; + + $tag = "<a "; + foreach ($link['attr'] as $attr => $value) { + if ($attr == 'href' and is_array($value)) { + $tag.= 'href="'. htmlentities($this->getActionUrl($value, $link['fields'])).'" '; + } + else { + $tag.= htmlentities($attr).'="'. value($value, $link['fields'], 'html') .'" '; + } + } + $tag.= ">". value($link['content'], $link['fields'], 'html') ."</a>\n"; + echo $tag; + } + + /** + * Display a list of links + * @param $links An associative array of links to print. See printLink function for + * the links array format. + * @param $class An optional class or list of classes seprated by a space + * WARNING: This field is NOT escaped! No user should be able to inject something here, use with care. + */ + function printLinksList($links, $class='') { + echo "<ul class=\"{$class}\">\n"; + foreach ($links as $link) { + echo "\t<li>"; + $this->printLink($link); + echo "</li>\n"; + } + echo "</ul>\n"; + } + + /** + * Display navigation tabs + * @param $tabs The name of current section (Ex: intro, server, ...), or an array with tabs (Ex: sqledit.php doFind function) + * @param $activetab The name of the tab to be highlighted. + */ + function printTabs($tabs, $activetab) { + global $misc, $conf, $data, $lang; + + if (is_string($tabs)) { + $_SESSION['webdbLastTab'][$tabs] = $activetab; + $tabs = $this->getNavTabs($tabs); + } + + echo "<table class=\"tabs\"><tr>\n"; + #echo "<div class=\"tabs\">\n"; + + if (count($tabs) > 0) + $width = (int)(100 / count($tabs)).'%'; + else + $width = 1; + + foreach ($tabs as $tab_id => $tab) { + $active = ($tab_id == $activetab) ? ' active' : ''; + + if (!isset($tab['hide']) || $tab['hide'] !== true) { + + $tablink = '<a href="' . htmlentities($this->getActionUrl($tab, $_REQUEST)) . '">'; + + if (isset($tab['icon']) && $icon = $this->icon($tab['icon'])) + $tablink .= "<span class=\"icon\"><img src=\"{$icon}\" alt=\"{$tab['title']}\" /></span>"; + + $tablink .= "<span class=\"label\">{$tab['title']}</span></a>"; + + echo "<td style=\"width: {$width}\" class=\"tab{$active}\">"; + #echo "<span class=\"tab{$active}\" style=\"white-space:nowrap;\">"; + + if (isset($tab['help'])) + $this->printHelp($tablink, $tab['help']); + else + echo $tablink; + + echo "</td>\n"; + #echo "</span>\n"; + } + } + + echo "</tr></table>\n"; + #echo "</div>\n"; + } + + /** + * Retrieve the tab info for a specific tab bar. + * @param $section The name of the tab bar. + */ + function getNavTabs($section) { + global $data, $lang, $conf, $plugin_manager; + + $hide_advanced = ($conf['show_advanced'] === false); + $tabs = array(); + + switch ($section) { + case 'root': + $tabs = array ( + 'intro' => array ( + 'title' => $lang['strintroduction'], + 'url' => "intro.php", + 'icon' => 'Introduction', + ), + 'servers' => array ( + 'title' => $lang['strservers'], + 'url' => "servers.php", + 'icon' => 'Servers', + ), + ); + break; + + case 'server': + $hide_users = !$data->isSuperUser(); + $tabs = array ( + 'databases' => array ( + 'title' => $lang['strdatabases'], + 'url' => 'all_db.php', + 'urlvars' => array('subject' => 'server'), + 'help' => 'pg.database', + 'icon' => 'Databases', + ) + ); + if ($data->hasRoles()) { + $tabs = array_merge($tabs, array( + 'roles' => array ( + 'title' => $lang['strroles'], + 'url' => 'roles.php', + 'urlvars' => array('subject' => 'server'), + 'hide' => $hide_users, + 'help' => 'pg.role', + 'icon' => 'Roles', + ) + )); + } + else { + $tabs = array_merge($tabs, array( + 'users' => array ( + 'title' => $lang['strusers'], + 'url' => 'users.php', + 'urlvars' => array('subject' => 'server'), + 'hide' => $hide_users, + 'help' => 'pg.user', + 'icon' => 'Users', + ), + 'groups' => array ( + 'title' => $lang['strgroups'], + 'url' => 'groups.php', + 'urlvars' => array('subject' => 'server'), + 'hide' => $hide_users, + 'help' => 'pg.group', + 'icon' => 'UserGroups', + ) + )); + } + + $tabs = array_merge($tabs, array( + 'account' => array ( + 'title' => $lang['straccount'], + 'url' => $data->hasRoles() ? 'roles.php' : 'users.php', + 'urlvars' => array('subject' => 'server', 'action' => 'account'), + 'hide' => !$hide_users, + 'help' => 'pg.role', + 'icon' => 'User', + ), + 'tablespaces' => array ( + 'title' => $lang['strtablespaces'], + 'url' => 'tablespaces.php', + 'urlvars' => array('subject' => 'server'), + 'hide' => (!$data->hasTablespaces()), + 'help' => 'pg.tablespace', + 'icon' => 'Tablespaces', + ), + 'export' => array ( + 'title' => $lang['strexport'], + 'url' => 'all_db.php', + 'urlvars' => array('subject' => 'server', 'action' => 'export'), + 'hide' => (!$this->isDumpEnabled()), + 'icon' => 'Export', + ), + )); + break; + case 'database': + $tabs = array ( + 'schemas' => array ( + 'title' => $lang['strschemas'], + 'url' => 'schemas.php', + 'urlvars' => array('subject' => 'database'), + 'help' => 'pg.schema', + 'icon' => 'Schemas', + ), + 'sql' => array ( + 'title' => $lang['strsql'], + 'url' => 'database.php', + 'urlvars' => array('subject' => 'database', 'action' => 'sql', 'new' => 1), + 'help' => 'pg.sql', + 'tree' => false, + 'icon' => 'SqlEditor' + ), + 'find' => array ( + 'title' => $lang['strfind'], + 'url' => 'database.php', + 'urlvars' => array('subject' => 'database', 'action' => 'find'), + 'tree' => false, + 'icon' => 'Search' + ), + 'variables' => array ( + 'title' => $lang['strvariables'], + 'url' => 'database.php', + 'urlvars' => array('subject' => 'database', 'action' => 'variables'), + 'help' => 'pg.variable', + 'tree' => false, + 'icon' => 'Variables', + ), + 'processes' => array ( + 'title' => $lang['strprocesses'], + 'url' => 'database.php', + 'urlvars' => array('subject' => 'database', 'action' => 'processes'), + 'help' => 'pg.process', + 'tree' => false, + 'icon' => 'Processes', + ), + 'locks' => array ( + 'title' => $lang['strlocks'], + 'url' => 'database.php', + 'urlvars' => array('subject' => 'database', 'action' => 'locks'), + 'help' => 'pg.locks', + 'tree' => false, + 'icon' => 'Key', + ), + 'admin' => array ( + 'title' => $lang['stradmin'], + 'url' => 'database.php', + 'urlvars' => array('subject' => 'database', 'action' => 'admin'), + 'tree' => false, + 'icon' => 'Admin', + ), + 'privileges' => array ( + 'title' => $lang['strprivileges'], + 'url' => 'privileges.php', + 'urlvars' => array('subject' => 'database'), + 'hide' => (!isset($data->privlist['database'])), + 'help' => 'pg.privilege', + 'tree' => false, + 'icon' => 'Privileges', + ), + 'languages' => array ( + 'title' => $lang['strlanguages'], + 'url' => 'languages.php', + 'urlvars' => array('subject' => 'database'), + 'hide' => $hide_advanced, + 'help' => 'pg.language', + 'icon' => 'Languages', + ), + 'casts' => array ( + 'title' => $lang['strcasts'], + 'url' => 'casts.php', + 'urlvars' => array('subject' => 'database'), + 'hide' => ($hide_advanced), + 'help' => 'pg.cast', + 'icon' => 'Casts', + ), + 'export' => array ( + 'title' => $lang['strexport'], + 'url' => 'database.php', + 'urlvars' => array('subject' => 'database', 'action' => 'export'), + 'hide' => (!$this->isDumpEnabled()), + 'tree' => false, + 'icon' => 'Export', + ), + ); + break; + + case 'schema': + $tabs = array ( + 'tables' => array ( + 'title' => $lang['strtables'], + 'url' => 'tables.php', + 'urlvars' => array('subject' => 'schema'), + 'help' => 'pg.table', + 'icon' => 'Tables', + ), + 'views' => array ( + 'title' => $lang['strviews'], + 'url' => 'views.php', + 'urlvars' => array('subject' => 'schema'), + 'help' => 'pg.view', + 'icon' => 'Views', + ), + 'sequences' => array ( + 'title' => $lang['strsequences'], + 'url' => 'sequences.php', + 'urlvars' => array('subject' => 'schema'), + 'help' => 'pg.sequence', + 'icon' => 'Sequences', + ), + 'functions' => array ( + 'title' => $lang['strfunctions'], + 'url' => 'functions.php', + 'urlvars' => array('subject' => 'schema'), + 'help' => 'pg.function', + 'icon' => 'Functions', + ), + 'fulltext' => array ( + 'title' => $lang['strfulltext'], + 'url' => 'fulltext.php', + 'urlvars' => array('subject' => 'schema'), + 'help' => 'pg.fts', + 'tree' => true, + 'icon' => 'Fts', + ), + 'domains' => array ( + 'title' => $lang['strdomains'], + 'url' => 'domains.php', + 'urlvars' => array('subject' => 'schema'), + 'help' => 'pg.domain', + 'icon' => 'Domains', + ), + 'aggregates' => array ( + 'title' => $lang['straggregates'], + 'url' => 'aggregates.php', + 'urlvars' => array('subject' => 'schema'), + 'hide' => $hide_advanced, + 'help' => 'pg.aggregate', + 'icon' => 'Aggregates', + ), + 'types' => array ( + 'title' => $lang['strtypes'], + 'url' => 'types.php', + 'urlvars' => array('subject' => 'schema'), + 'hide' => $hide_advanced, + 'help' => 'pg.type', + 'icon' => 'Types', + ), + 'operators' => array ( + 'title' => $lang['stroperators'], + 'url' => 'operators.php', + 'urlvars' => array('subject' => 'schema'), + 'hide' => $hide_advanced, + 'help' => 'pg.operator', + 'icon' => 'Operators', + ), + 'opclasses' => array ( + 'title' => $lang['stropclasses'], + 'url' => 'opclasses.php', + 'urlvars' => array('subject' => 'schema'), + 'hide' => $hide_advanced, + 'help' => 'pg.opclass', + 'icon' => 'OperatorClasses', + ), + 'conversions' => array ( + 'title' => $lang['strconversions'], + 'url' => 'conversions.php', + 'urlvars' => array('subject' => 'schema'), + 'hide' => $hide_advanced, + 'help' => 'pg.conversion', + 'icon' => 'Conversions', + ), + 'privileges' => array ( + 'title' => $lang['strprivileges'], + 'url' => 'privileges.php', + 'urlvars' => array('subject' => 'schema'), + 'help' => 'pg.privilege', + 'tree' => false, + 'icon' => 'Privileges', + ), + 'export' => array ( + 'title' => $lang['strexport'], + 'url' => 'schemas.php', + 'urlvars' => array('subject' => 'schema', 'action' => 'export'), + 'hide' => (!$this->isDumpEnabled()), + 'tree' => false, + 'icon' => 'Export', + ), + ); + if (!$data->hasFTS()) unset($tabs['fulltext']); + break; + + case 'table': + $tabs = array ( + 'columns' => array ( + 'title' => $lang['strcolumns'], + 'url' => 'tblproperties.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table')), + 'icon' => 'Columns', + 'branch'=> true, + ), + 'browse' => array( + 'title' => $lang['strbrowse'], + 'icon'=>'Columns', + 'url' => 'display.php', + 'urlvars' => array ('subject' => 'table','table' => field('table')), + 'return' => 'table', + 'branch'=> true, + ), + 'select' => array( + 'title' => $lang['strselect'], + 'icon' => 'Search', + 'url' => 'tables.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table'),'action' => 'confselectrows',), + 'help' => 'pg.sql.select', + ), + 'insert'=>array( + 'title' => $lang['strinsert'], + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confinsertrow', + 'table' => field('table') + ), + 'help' => 'pg.sql.insert', + 'icon'=>'Operator' + ), + 'indexes' => array ( + 'title' => $lang['strindexes'], + 'url' => 'indexes.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table')), + 'help' => 'pg.index', + 'icon' => 'Indexes', + 'branch'=> true, + ), + 'constraints' => array ( + 'title' => $lang['strconstraints'], + 'url' => 'constraints.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table')), + 'help' => 'pg.constraint', + 'icon' => 'Constraints', + 'branch'=> true, + ), + 'triggers' => array ( + 'title' => $lang['strtriggers'], + 'url' => 'triggers.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table')), + 'help' => 'pg.trigger', + 'icon' => 'Triggers', + 'branch'=> true, + ), + 'rules' => array ( + 'title' => $lang['strrules'], + 'url' => 'rules.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table')), + 'help' => 'pg.rule', + 'icon' => 'Rules', + 'branch'=> true, + ), + 'admin' => array ( + 'title' => $lang['stradmin'], + 'url' => 'tables.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table'), 'action' => 'admin'), + 'icon' => 'Admin', + ), + 'info' => array ( + 'title' => $lang['strinfo'], + 'url' => 'info.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table')), + 'icon' => 'Statistics', + ), + 'privileges' => array ( + 'title' => $lang['strprivileges'], + 'url' => 'privileges.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table')), + 'help' => 'pg.privilege', + 'icon' => 'Privileges', + ), + 'import' => array ( + 'title' => $lang['strimport'], + 'url' => 'tblproperties.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table'), 'action' => 'import'), + 'icon' => 'Import', + 'hide' => false, + ), + 'export' => array ( + 'title' => $lang['strexport'], + 'url' => 'tblproperties.php', + 'urlvars' => array('subject' => 'table', 'table' => field('table'), 'action' => 'export'), + 'icon' => 'Export', + 'hide' => false, + ), + ); + break; + + case 'view': + $tabs = array ( + 'columns' => array ( + 'title' => $lang['strcolumns'], + 'url' => 'viewproperties.php', + 'urlvars' => array('subject' => 'view', 'view' => field('view')), + 'icon' => 'Columns', + 'branch'=> true, + ), + 'browse' => array( + 'title' => $lang['strbrowse'], + 'icon'=>'Columns', + 'url' => 'display.php', + 'urlvars' => array ( + 'action' => 'confselectrows', + 'return' => 'schema', + 'subject' => 'view', + 'view' => field('view') + ), + 'branch'=> true, + ), + 'select' => array( + 'title' => $lang['strselect'], + 'icon' => 'Search', + 'url' => 'views.php', + 'urlvars' => array('action' => 'confselectrows', 'view' => field('view'),), + 'help' => 'pg.sql.select', + ), + 'definition' => array ( + 'title' => $lang['strdefinition'], + 'url' => 'viewproperties.php', + 'urlvars' => array('subject' => 'view', 'view' => field('view'), 'action' => 'definition'), + 'icon' => 'Definition' + ), + 'rules' => array ( + 'title' => $lang['strrules'], + 'url' => 'rules.php', + 'urlvars' => array('subject' => 'view', 'view' => field('view')), + 'help' => 'pg.rule', + 'icon' => 'Rules', + 'branch'=> true, + ), + 'privileges' => array ( + 'title' => $lang['strprivileges'], + 'url' => 'privileges.php', + 'urlvars' => array('subject' => 'view', 'view' => field('view')), + 'help' => 'pg.privilege', + 'icon' => 'Privileges', + ), + 'export' => array ( + 'title' => $lang['strexport'], + 'url' => 'viewproperties.php', + 'urlvars' => array('subject' => 'view', 'view' => field('view'), 'action' => 'export'), + 'icon' => 'Export', + 'hide' => false, + ), + ); + break; + + case 'function': + $tabs = array ( + 'definition' => array ( + 'title' => $lang['strdefinition'], + 'url' => 'functions.php', + 'urlvars' => array( + 'subject' => 'function', + 'function' => field('function'), + 'function_oid' => field('function_oid'), + 'action' => 'properties', + ), + 'icon' => 'Definition', + ), + 'privileges' => array ( + 'title' => $lang['strprivileges'], + 'url' => 'privileges.php', + 'urlvars' => array( + 'subject' => 'function', + 'function' => field('function'), + 'function_oid' => field('function_oid'), + ), + 'icon' => 'Privileges', + ), + ); + break; + + case 'aggregate': + $tabs = array ( + 'definition' => array ( + 'title' => $lang['strdefinition'], + 'url' => 'aggregates.php', + 'urlvars' => array( + 'subject' => 'aggregate', + 'aggrname' => field('aggrname'), + 'aggrtype' => field('aggrtype'), + 'action' => 'properties', + ), + 'icon' => 'Definition', + ), + ); + break; + + case 'role': + $tabs = array ( + 'definition' => array ( + 'title' => $lang['strdefinition'], + 'url' => 'roles.php', + 'urlvars' => array( + 'subject' => 'role', + 'rolename' => field('rolename'), + 'action' => 'properties', + ), + 'icon' => 'Definition', + ), + ); + break; + + case 'popup': + $tabs = array ( + 'sql' => array ( + 'title' => $lang['strsql'], + 'url' => 'sqledit.php', + 'urlvars' => array('subject' => 'schema', 'action' => 'sql'), + 'help' => 'pg.sql', + 'icon' => 'SqlEditor', + ), + 'find' => array ( + 'title' => $lang['strfind'], + 'url' => 'sqledit.php', + 'urlvars' => array('subject' => 'schema', 'action' => 'find'), + 'icon' => 'Search', + ), + ); + break; + + case 'column': + $tabs = array( + 'properties' => array ( + 'title' => $lang['strcolprop'], + 'url' => 'colproperties.php', + 'urlvars' => array( + 'subject' => 'column', + 'table' => field('table'), + 'column' => field('column') + ), + 'icon' => 'Column' + ), + 'privileges' => array ( + 'title' => $lang['strprivileges'], + 'url' => 'privileges.php', + 'urlvars' => array( + 'subject' => 'column', + 'table' => field('table'), + 'column' => field('column') + ), + 'help' => 'pg.privilege', + 'icon' => 'Privileges', + ) + ); + break; + + case 'fulltext': + $tabs = array ( + 'ftsconfigs' => array ( + 'title' => $lang['strftstabconfigs'], + 'url' => 'fulltext.php', + 'urlvars' => array('subject' => 'schema'), + 'hide' => !$data->hasFTS(), + 'help' => 'pg.ftscfg', + 'tree' => true, + 'icon' => 'FtsCfg', + ), + 'ftsdicts' => array ( + 'title' => $lang['strftstabdicts'], + 'url' => 'fulltext.php', + 'urlvars' => array('subject' => 'schema', 'action' => 'viewdicts'), + 'hide' => !$data->hasFTS(), + 'help' => 'pg.ftsdict', + 'tree' => true, + 'icon' => 'FtsDict', + ), + 'ftsparsers' => array ( + 'title' => $lang['strftstabparsers'], + 'url' => 'fulltext.php', + 'urlvars' => array('subject' => 'schema', 'action' => 'viewparsers'), + 'hide' => !$data->hasFTS(), + 'help' => 'pg.ftsparser', + 'tree' => true, + 'icon' => 'FtsParser', + ), + ); + break; + } + + // Tabs hook's place + $plugin_functions_parameters = array( + 'tabs' => &$tabs, + 'section' => $section + ); + $plugin_manager->do_hook('tabs', $plugin_functions_parameters); + + return $tabs; + } + + /** + * Get the URL for the last active tab of a particular tab bar. + */ + function getLastTabURL($section) { + global $data; + + $tabs = $this->getNavTabs($section); + + if (isset($_SESSION['webdbLastTab'][$section]) && isset($tabs[$_SESSION['webdbLastTab'][$section]])) + $tab = $tabs[$_SESSION['webdbLastTab'][$section]]; + else + $tab = reset($tabs); + + return isset($tab['url']) ? $tab : null; + } + + function printTopbar() { + global $lang, $conf, $plugin_manager, $appName, $appVersion, $appLangFiles; + + $server_info = $this->getServerInfo(); + $reqvars = $this->getRequestVars('table'); + + echo "<div class=\"topbar\"><table style=\"width: 100%\"><tr><td>"; + + if ($server_info && isset($server_info['platform']) && isset($server_info['username'])) { + /* top left informations when connected */ + echo sprintf($lang['strtopbar'], + '<span class="platform">'.htmlspecialchars($server_info['platform']).'</span>', + '<span class="host">'.htmlspecialchars((empty($server_info['host'])) ? 'localhost':$server_info['host']).'</span>', + '<span class="port">'.htmlspecialchars($server_info['port']).'</span>', + '<span class="username">'.htmlspecialchars($server_info['username']).'</span>'); + + echo "</td>"; + + /* top right informations when connected */ + + $toplinks = array ( + 'sql' => array ( + 'attr' => array ( + 'href' => array ( + 'url' => 'sqledit.php', + 'urlvars' => array_merge($reqvars, array ( + 'action' => 'sql' + )) + ), + 'target' => "sqledit", + 'id' => 'toplink_sql', + ), + 'content' => $lang['strsql'] + ), + 'history' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'history.php', + 'urlvars' => array_merge($reqvars, array ( + 'action' => 'pophistory' + )) + ), + 'id' => 'toplink_history', + ), + 'content' => $lang['strhistory'] + ), + 'find' => array ( + 'attr' => array ( + 'href' => array ( + 'url' => 'sqledit.php', + 'urlvars' => array_merge($reqvars, array ( + 'action' => 'find' + )) + ), + 'target' => "sqledit", + 'id' => 'toplink_find', + ), + 'content' => $lang['strfind'] + ), + 'logout' => array( + 'attr' => array ( + 'href' => array ( + 'url' => 'servers.php', + 'urlvars' => array ( + 'action' => 'logout', + 'logoutServer' => "{$server_info['host']}:{$server_info['port']}:{$server_info['sslmode']}" + ) + ), + 'id' => 'toplink_logout', + ), + 'content' => $lang['strlogout'] + ) + ); + + // Toplink hook's place + $plugin_functions_parameters = array( + 'toplinks' => &$toplinks + ); + + $plugin_manager->do_hook('toplinks', $plugin_functions_parameters); + + echo "<td style=\"text-align: right\">"; + $this->printLinksList($toplinks, 'toplink'); + echo "</td>"; + + $sql_window_id = htmlentities('sqledit:'.$_REQUEST['server']); + $history_window_id = htmlentities('history:'.$_REQUEST['server']); + + echo "<script type=\"text/javascript\"> + $('#toplink_sql').click(function() { + window.open($(this).attr('href'),'{$sql_window_id}','toolbar=no,width=700,height=500,resizable=yes,scrollbars=yes').focus(); + return false; + }); + + $('#toplink_history').click(function() { + window.open($(this).attr('href'),'{$history_window_id}','toolbar=no,width=700,height=500,resizable=yes,scrollbars=yes').focus(); + return false; + }); + + $('#toplink_find').click(function() { + window.open($(this).attr('href'),'{$sql_window_id}','toolbar=no,width=700,height=500,resizable=yes,scrollbars=yes').focus(); + return false; + }); + "; + + if (isset($_SESSION['sharedUsername'])) { + printf(" + $('#toplink_logout').click(function() { + return confirm('%s'); + });", str_replace("'", "\'", $lang['strconfdropcred'])); + } + + echo " + </script>"; + } + else { + echo "<span class=\"appname\">{$appName}</span> <span class=\"version\">{$appVersion}</span>"; + } +/* + echo "<td style=\"text-align: right; width: 1%\">"; + + echo "<form method=\"get\"><select name=\"language\" onchange=\"this.form.submit()\">\n"; + $language = isset($_SESSION['webdbLanguage']) ? $_SESSION['webdbLanguage'] : 'english'; + foreach ($appLangFiles as $k => $v) { + echo "<option value=\"{$k}\"", + ($k == $language) ? ' selected="selected"' : '', + ">{$v}</option>\n"; + } + echo "</select>\n"; + echo "<noscript><input type=\"submit\" value=\"Set Language\"></noscript>\n"; + foreach ($_GET as $key => $val) { + if ($key == 'language') continue; + echo "<input type=\"hidden\" name=\"$key\" value=\"", htmlspecialchars($val), "\" />\n"; + } + echo "</form>\n"; + + echo "</td>"; +*/ + echo "</tr></table></div>\n"; + } + + /** + * Display a bread crumb trail. + */ + function printTrail($trail = array()) { + global $lang; + + $this->printTopbar(); + + if (is_string($trail)) { + $trail = $this->getTrail($trail); + } + + echo "<div class=\"trail\"><table><tr>"; + + foreach ($trail as $crumb) { + echo "<td class=\"crumb\">"; + $crumblink = "<a"; + + if (isset($crumb['url'])) + $crumblink .= " href=\"{$crumb['url']}\""; + + if (isset($crumb['title'])) + $crumblink .= " title=\"{$crumb['title']}\""; + + $crumblink .= ">"; + + if (isset($crumb['title'])) + $iconalt = $crumb['title']; + else + $iconalt = 'Database Root'; + + if (isset($crumb['icon']) && $icon = $this->icon($crumb['icon'])) + $crumblink .= "<span class=\"icon\"><img src=\"{$icon}\" alt=\"{$iconalt}\" /></span>"; + + $crumblink .= "<span class=\"label\">" . htmlspecialchars($crumb['text']) . "</span></a>"; + + if (isset($crumb['help'])) + $this->printHelp($crumblink, $crumb['help']); + else + echo $crumblink; + + echo "{$lang['strseparator']}"; + echo "</td>"; + } + + echo "</tr></table></div>\n"; + } + + /** + * Create a bread crumb trail of the object hierarchy. + * @param $object The type of object at the end of the trail. + */ + function getTrail($subject = null) { + global $lang, $conf, $data, $appName, $plugin_manager; + + $trail = array(); + $vars = ''; + $done = false; + + $trail['root'] = array( + 'text' => $appName, + 'url' => 'redirect.php?subject=root', + 'icon' => 'Introduction' + ); + + if ($subject == 'root') $done = true; + + if (!$done) { + $server_info = $this->getServerInfo(); + $trail['server'] = array( + 'title' => $lang['strserver'], + 'text' => $server_info['desc'], + 'url' => $this->getHREFSubject('server'), + 'help' => 'pg.server', + 'icon' => 'Server' + ); + } + if ($subject == 'server') $done = true; + + if (isset($_REQUEST['database']) && !$done) { + $trail['database'] = array( + 'title' => $lang['strdatabase'], + 'text' => $_REQUEST['database'], + 'url' => $this->getHREFSubject('database'), + 'help' => 'pg.database', + 'icon' => 'Database' + ); + } elseif (isset($_REQUEST['rolename']) && !$done) { + $trail['role'] = array( + 'title' => $lang['strrole'], + 'text' => $_REQUEST['rolename'], + 'url' => $this->getHREFSubject('role'), + 'help' => 'pg.role', + 'icon' => 'Roles' + ); + } + if ($subject == 'database' || $subject == 'role') $done = true; + + if (isset($_REQUEST['schema']) && !$done) { + $trail['schema'] = array( + 'title' => $lang['strschema'], + 'text' => $_REQUEST['schema'], + 'url' => $this->getHREFSubject('schema'), + 'help' => 'pg.schema', + 'icon' => 'Schema' + ); + } + if ($subject == 'schema') $done = true; + + if (isset($_REQUEST['table']) && !$done) { + $trail['table'] = array( + 'title' => $lang['strtable'], + 'text' => $_REQUEST['table'], + 'url' => $this->getHREFSubject('table'), + 'help' => 'pg.table', + 'icon' => 'Table' + ); + } elseif (isset($_REQUEST['view']) && !$done) { + $trail['view'] = array( + 'title' => $lang['strview'], + 'text' => $_REQUEST['view'], + 'url' => $this->getHREFSubject('view'), + 'help' => 'pg.view', + 'icon' => 'View' + ); + } elseif (isset($_REQUEST['ftscfg']) && !$done) { + $trail['ftscfg'] = array( + 'title' => $lang['strftsconfig'], + 'text' => $_REQUEST['ftscfg'], + 'url' => $this->getHREFSubject('ftscfg'), + 'help' => 'pg.ftscfg.example', + 'icon' => 'Fts' + ); + } + if ($subject == 'table' || $subject == 'view' || $subject == 'ftscfg') $done = true; + + if (!$done && !is_null($subject)) { + switch ($subject) { + case 'function': + $trail[$subject] = array( + 'title' => $lang['str'.$subject], + 'text' => $_REQUEST[$subject], + 'url' => $this->getHREFSubject('function'), + 'help' => 'pg.function', + 'icon' => 'Function' + ); + break; + case 'aggregate': + $trail[$subject] = array( + 'title' => $lang['straggregate'], + 'text' => $_REQUEST['aggrname'], + 'url' => $this->getHREFSubject('aggregate'), + 'help' => 'pg.aggregate', + 'icon' => 'Aggregate' + ); + break; + case 'column': + $trail['column'] = array ( + 'title' => $lang['strcolumn'], + 'text' => $_REQUEST['column'], + 'icon' => 'Column', + 'url' => $this->getHREFSubject('column') + ); + break; + default: + if (isset($_REQUEST[$subject])) { + switch ($subject) { + case 'domain': $icon = 'Domain'; break; + case 'sequence': $icon = 'Sequence'; break; + case 'type': $icon = 'Type'; break; + case 'operator': $icon = 'Operator'; break; + default: $icon = null; break; + } + $trail[$subject] = array( + 'title' => $lang['str'.$subject], + 'text' => $_REQUEST[$subject], + 'help' => 'pg.'.$subject, + 'icon' => $icon, + ); + } + } + } + + // Trail hook's place + $plugin_functions_parameters = array( + 'trail' => &$trail, + 'section' => $subject + ); + + $plugin_manager->do_hook('trail', $plugin_functions_parameters); + + return $trail; + } + + /** + * Display the navlinks + * + * @param $navlinks - An array with the the attributes and values that will be shown. See printLinksList for array format. + * @param $place - Place where the $navlinks are displayed. Like 'display-browse', where 'display' is the file (display.php) + * @param $env - Associative array of defined variables in the scope of the caller. + * Allows to give some environnement details to plugins. + * and 'browse' is the place inside that code (doBrowse). + */ + function printNavLinks($navlinks, $place, $env = array()) { + global $plugin_manager; + + // Navlinks hook's place + $plugin_functions_parameters = array( + 'navlinks' => &$navlinks, + 'place' => $place, + 'env' => $env + ); + $plugin_manager->do_hook('navlinks', $plugin_functions_parameters); + + if (count($navlinks) > 0) { + $this->printLinksList($navlinks, 'navlink'); + } + } + + + /** + * Do multi-page navigation. Displays the prev, next and page options. + * @param $page - the page currently viewed + * @param $pages - the maximum number of pages + * @param $gets - the parameters to include in the link to the wanted page + * @param $max_width - the number of pages to make available at any one time (default = 20) + */ + function printPages($page, $pages, $gets, $max_width = 20) { + global $lang; + + $window = 10; + + if ($page < 0 || $page > $pages) return; + if ($pages < 0) return; + if ($max_width <= 0) return; + + unset ($gets['page']); + $url = http_build_query($gets); + + if ($pages > 1) { + echo "<p style=\"text-align: center\">\n"; + if ($page != 1) { + echo "<a class=\"pagenav\" href=\"?{$url}&page=1\">{$lang['strfirst']}</a>\n"; + $temp = $page - 1; + echo "<a class=\"pagenav\" href=\"?{$url}&page={$temp}\">{$lang['strprev']}</a>\n"; + } + + if ($page <= $window) { + $min_page = 1; + $max_page = min(2 * $window, $pages); + } + elseif ($page > $window && $pages >= $page + $window) { + $min_page = ($page - $window) + 1; + $max_page = $page + $window; + } + else { + $min_page = ($page - (2 * $window - ($pages - $page))) + 1; + $max_page = $pages; + } + + // Make sure min_page is always at least 1 + // and max_page is never greater than $pages + $min_page = max($min_page, 1); + $max_page = min($max_page, $pages); + + for ($i = $min_page; $i <= $max_page; $i++) { + #if ($i != $page) echo "<a class=\"pagenav\" href=\"?{$url}&page={$i}\">$i</a>\n"; + if ($i != $page) echo "<a class=\"pagenav\" href=\"display.php?{$url}&page={$i}\">$i</a>\n"; + else echo "$i\n"; + } + if ($page != $pages) { + $temp = $page + 1; + echo "<a class=\"pagenav\" href=\"display.php?{$url}&page={$temp}\">{$lang['strnext']}</a>\n"; + echo "<a class=\"pagenav\" href=\"display.php?{$url}&page={$pages}\">{$lang['strlast']}</a>\n"; + } + echo "</p>\n"; + } + } + + /** + * Displays link to the context help. + * @param $str - the string that the context help is related to (already escaped) + * @param $help - help section identifier + */ + function printHelp($str, $help) { + global $lang, $data; + + echo $str; + if ($help) { + echo "<a class=\"help\" href=\""; + echo htmlspecialchars("help.php?help=".urlencode($help)."&server=".urlencode($_REQUEST['server'])); + echo "\" title=\"{$lang['strhelp']}\" target=\"phppgadminhelp\">{$lang['strhelpicon']}</a>"; + } + } + + /** + * Outputs JavaScript to set default focus + * @param $object eg. forms[0].username + */ + function setFocus($object) { + echo "<script type=\"text/javascript\">\n"; + echo " document.{$object}.focus();\n"; + echo "</script>\n"; + } + + /** + * Outputs JavaScript to set the name of the browser window. + * @param $name the window name + * @param $addServer if true (default) then the server id is + * attached to the name. + */ + function setWindowName($name, $addServer = true) { + echo "<script type=\"text/javascript\">\n"; + echo "//<![CDATA[\n"; + echo " window.name = '{$name}", ($addServer ? ':'.htmlspecialchars($_REQUEST['server']) : ''), "';\n"; + echo "//]]>\n"; + echo "</script>\n"; + } + + /** + * Converts a PHP.INI size variable to bytes. Taken from publically available + * function by Chris DeRose, here: http://www.php.net/manual/en/configuration.directives.php#ini.file-uploads + * @param $strIniSize The PHP.INI variable + * @return size in bytes, false on failure + */ + function inisizeToBytes($strIniSize) { + // This function will take the string value of an ini 'size' parameter, + // and return a double (64-bit float) representing the number of bytes + // that the parameter represents. Or false if $strIniSize is unparseable. + $a_IniParts = array(); + + if (!is_string($strIniSize)) + return false; + + if (!preg_match ('/^(\d+)([bkm]*)$/i', $strIniSize,$a_IniParts)) + return false; + + $nSize = (double) $a_IniParts[1]; + $strUnit = strtolower($a_IniParts[2]); + + switch($strUnit) { + case 'm': + return ($nSize * (double) 1048576); + case 'k': + return ($nSize * (double) 1024); + case 'b': + default: + return $nSize; + } + } + + /** + * Returns URL given an action associative array. + * NOTE: this function does not html-escape, only url-escape + * @param $action An associative array of the follow properties: + * 'url' => The first part of the URL (before the ?) + * 'urlvars' => Associative array of (URL variable => field name) + * these are appended to the URL + * @param $fields Field data from which 'urlfield' and 'vars' are obtained. + */ + function getActionUrl(&$action, &$fields) { + $url = value($action['url'], $fields); + + if ($url === false) return ''; + + if (!empty($action['urlvars'])) { + $urlvars = value($action['urlvars'], $fields); + } else { + $urlvars = array(); + } + + /* set server, database and schema parameter if not presents */ + if (isset($urlvars['subject'])) + $subject = value($urlvars['subject'], $fields); + else + $subject = ''; + + if (isset($_REQUEST['server']) and !isset($urlvars['server']) and $subject != 'root') { + $urlvars['server'] = $_REQUEST['server']; + if (isset($_REQUEST['database']) and !isset($urlvars['database']) and $subject != 'server') { + $urlvars['database'] = $_REQUEST['database']; + if (isset($_REQUEST['schema']) and !isset($urlvars['schema']) and $subject != 'database') { + $urlvars['schema'] = $_REQUEST['schema']; + } + } + } + + $sep = '?'; + foreach ($urlvars as $var => $varfield) { + $url .= $sep . value_url($var, $fields) . '=' . value_url($varfield, $fields); + $sep = '&'; + } + + return $url; + } + + function getRequestVars($subject = '') { + $v = array(); + if (!empty($subject)) + $v['subject'] = $subject; + if (isset($_REQUEST['server']) && $subject != 'root') { + $v['server'] = $_REQUEST['server']; + if (isset($_REQUEST['database']) && $subject != 'server') { + $v['database'] = $_REQUEST['database']; + if (isset($_REQUEST['schema']) && $subject != 'database') { + $v['schema'] = $_REQUEST['schema']; + } + } + } + return $v; + } + + function printUrlVars(&$vars, &$fields) { + foreach ($vars as $var => $varfield) { + echo "{$var}=", urlencode($fields[$varfield]), "&"; + } + } + + /** + * Display a table of data. + * @param $tabledata A set of data to be formatted, as returned by $data->getDatabases() etc. + * @param $columns An associative array of columns to be displayed: + * $columns = array( + * column_id => array( + * 'title' => Column heading, + * 'class' => The class to apply on the column cells, + * 'field' => Field name for $tabledata->fields[...], + * 'help' => Help page for this column, + * ), ... + * ); + * @param $actions Actions that can be performed on each object: + * $actions = array( + * * multi action support + * * parameters are serialized for each entries and given in $_REQUEST['ma'] + * 'multiactions' => array( + * 'keycols' => Associative array of (URL variable => field name), // fields included in the form + * 'url' => URL submission, + * 'default' => Default selected action in the form. + * if null, an empty action is added & selected + * ), + * * actions * + * action_id => array( + * 'title' => Action heading, + * 'url' => Static part of URL. Often we rely + * relative urls, usually the page itself (not '' !), or just a query string, + * 'vars' => Associative array of (URL variable => field name), + * 'multiaction' => Name of the action to execute. + * Add this action to the multi action form + * ), ... + * ); + * @param $place Place where the $actions are displayed. Like 'display-browse', where 'display' is the file (display.php) + * and 'browse' is the place inside that code (doBrowse). + * @param $nodata (optional) Message to display if data set is empty. + * @param $pre_fn (optional) Name of a function to call for each row, + * it will be passed two params: $rowdata and $actions, + * it may be used to derive new fields or modify actions. + * It can return an array of actions specific to the row, + * or if nothing is returned then the standard actions are used. + * (see tblproperties.php and constraints.php for examples) + * The function must not must not store urls because + * they are relative and won't work out of context. + */ + function printTable(&$tabledata, &$columns, &$actions, $place, $nodata = null, $pre_fn = null) { + global $data, $conf, $misc, $lang, $plugin_manager; + + // Action buttons hook's place + $plugin_functions_parameters = array( + 'actionbuttons' => &$actions, + 'place' => $place + ); + $plugin_manager->do_hook('actionbuttons', $plugin_functions_parameters); + + if ($has_ma = isset($actions['multiactions'])) + $ma = $actions['multiactions']; + unset($actions['multiactions']); + + if ($tabledata->recordCount() > 0) { + + // Remove the 'comment' column if they have been disabled + if (!$conf['show_comments']) { + unset($columns['comment']); + } + + if (isset($columns['comment'])) { + // Uncomment this for clipped comments. + // TODO: This should be a user option. + //$columns['comment']['params']['clip'] = true; + } + + if ($has_ma) { + echo "<script src=\"multiactionform.js\" type=\"text/javascript\"></script>\n"; + echo "<form id=\"multi_form\" action=\"{$ma['url']}\" method=\"post\" enctype=\"multipart/form-data\">\n"; + if (isset($ma['vars'])) + foreach ($ma['vars'] as $k => $v) + echo "<input type=\"hidden\" name=\"$k\" value=\"$v\" />"; + } + + echo "<table>\n"; + echo "<tr>\n"; + + // Handle cases where no class has been passed + if (isset($column['class'])) { + $class = $column['class'] !== '' ? " class=\"{$column['class']}\"":''; + } else { + $class = ''; + } + + // Display column headings + if ($has_ma) echo "<th></th>"; + foreach ($columns as $column_id => $column) { + switch ($column_id) { + case 'actions': + if (sizeof($actions) > 0) echo "<th class=\"data\" colspan=\"", count($actions), "\">{$column['title']}</th>\n"; + break; + default: + echo "<th class=\"data{$class}\">"; + if (isset($column['help'])) + $this->printHelp($column['title'], $column['help']); + else + echo $column['title']; + echo "</th>\n"; + break; + } + } + echo "</tr>\n"; + + // Display table rows + $i = 0; + while (!$tabledata->EOF) { + $id = ($i % 2) + 1; + + unset($alt_actions); + if (!is_null($pre_fn)) $alt_actions = $pre_fn($tabledata, $actions); + if (!isset($alt_actions)) $alt_actions =& $actions; + + echo "<tr class=\"data{$id}\">\n"; + if ($has_ma) { + foreach ($ma['keycols'] as $k => $v) + $a[$k] = $tabledata->fields[$v]; + echo "<td>"; + echo "<input type=\"checkbox\" name=\"ma[]\" value=\"". htmlentities(serialize($a), ENT_COMPAT, 'UTF-8') ."\" />"; + echo "</td>\n"; + } + + foreach ($columns as $column_id => $column) { + + // Apply default values for missing parameters + if (isset($column['url']) && !isset($column['vars'])) $column['vars'] = array(); + + switch ($column_id) { + case 'actions': + foreach ($alt_actions as $action) { + if (isset($action['disable']) && $action['disable'] === true) { + echo "<td></td>\n"; + } else { + echo "<td class=\"opbutton{$id} {$class}\">"; + $action['fields'] = $tabledata->fields; + $this->printLink($action); + echo "</td>\n"; + } + } + break; + case 'comment': + echo "<td class='comment_cell'>"; + $val = value($column['field'], $tabledata->fields); + if (!is_null($val)) { + echo htmlentities($val); + } + echo "</td>"; + break; + default: + echo "<td{$class}>"; + $val = value($column['field'], $tabledata->fields); + if (!is_null($val)) { + if (isset($column['url'])) { + echo "<a href=\"{$column['url']}"; + $misc->printUrlVars($column['vars'], $tabledata->fields); + echo "\">"; + } + $type = isset($column['type']) ? $column['type'] : null; + $params = isset($column['params']) ? $column['params'] : array(); + echo $misc->printVal($val, $type, $params); + if (isset($column['url'])) echo "</a>"; + } + + echo "</td>\n"; + break; + } + } + echo "</tr>\n"; + + $tabledata->moveNext(); + $i++; + } + echo "</table>\n"; + + // Multi action table footer w/ options & [un]check'em all + if ($has_ma) { + // if default is not set or doesn't exist, set it to null + if (!isset($ma['default']) || !isset($actions[$ma['default']])) + $ma['default'] = null; + echo "<br />\n"; + echo "<table>\n"; + echo "<tr>\n"; + echo "<th class=\"data\" style=\"text-align: left\" colspan=\"3\">{$lang['stractionsonmultiplelines']}</th>\n"; + echo "</tr>\n"; + echo "<tr class=\"row1\">\n"; + echo "<td>"; + echo "<a href=\"#\" onclick=\"javascript:checkAll(true);\">{$lang['strselectall']}</a> / "; + echo "<a href=\"#\" onclick=\"javascript:checkAll(false);\">{$lang['strunselectall']}</a></td>\n"; + echo "<td> ---> </td>\n"; + echo "<td>\n"; + echo "\t<select name=\"action\">\n"; + if ($ma['default'] == null) + echo "\t\t<option value=\"\">--</option>\n"; + foreach($actions as $k => $a) + if (isset($a['multiaction'])) + echo "\t\t<option value=\"{$a['multiaction']}\"", ($ma['default'] == $k? ' selected="selected"': ''), ">{$a['content']}</option>\n"; + echo "\t</select>\n"; + echo "<input type=\"submit\" value=\"{$lang['strexecute']}\" />\n"; + echo $misc->form; + echo "</td>\n"; + echo "</tr>\n"; + echo "</table>\n"; + echo '</form>'; + }; + + return true; + } else { + if (!is_null($nodata)) { + echo "<p>{$nodata}</p>\n"; + } + return false; + } + } + + /** Produce XML data for the browser tree + * @param $treedata A set of records to populate the tree. + * @param $attrs Attributes for tree items + * 'text' - the text for the tree node + * 'icon' - an icon for node + * 'openIcon' - an alternative icon when the node is expanded + * 'toolTip' - tool tip text for the node + * 'action' - URL to visit when single clicking the node + * 'iconAction' - URL to visit when single clicking the icon node + * 'branch' - URL for child nodes (tree XML) + * 'expand' - the action to return XML for the subtree + * 'nodata' - message to display when node has no children + * @param $section The section where the branch is linked in the tree + */ + function printTree(&$_treedata, &$attrs, $section) { + global $plugin_manager; + + $treedata = array(); + + if ($_treedata->recordCount() > 0) { + while (!$_treedata->EOF) { + $treedata[] = $_treedata->fields; + $_treedata->moveNext(); + } + } + + $tree_params = array( + 'treedata' => &$treedata, + 'attrs' => &$attrs, + 'section' => $section + ); + + $plugin_manager->do_hook('tree', $tree_params); + + $this->printTreeXML($treedata, $attrs); + } + + /** Produce XML data for the browser tree + * @param $treedata A set of records to populate the tree. + * @param $attrs Attributes for tree items + * 'text' - the text for the tree node + * 'icon' - an icon for node + * 'openIcon' - an alternative icon when the node is expanded + * 'toolTip' - tool tip text for the node + * 'action' - URL to visit when single clicking the node + * 'iconAction' - URL to visit when single clicking the icon node + * 'branch' - URL for child nodes (tree XML) + * 'expand' - the action to return XML for the subtree + * 'nodata' - message to display when node has no children + */ + function printTreeXML(&$treedata, &$attrs) { + global $conf, $lang; + + header("Content-Type: text/xml; charset=UTF-8"); + header("Cache-Control: no-cache"); + + echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; + + echo "<tree>\n"; + + if (count($treedata) > 0) { + foreach($treedata as $rec) { + + echo "<tree"; + echo value_xml_attr('text', $attrs['text'], $rec); + echo value_xml_attr('action', $attrs['action'], $rec); + echo value_xml_attr('src', $attrs['branch'], $rec); + + $icon = $this->icon(value($attrs['icon'], $rec)); + echo value_xml_attr('icon', $icon, $rec); + echo value_xml_attr('iconaction', $attrs['iconAction'], $rec); + + if (!empty($attrs['openicon'])) { + $icon = $this->icon(value($attrs['openIcon'], $rec)); + } + echo value_xml_attr('openicon', $icon, $rec); + + echo value_xml_attr('tooltip', $attrs['toolTip'], $rec); + + echo " />\n"; + } + } else { + $msg = isset($attrs['nodata']) ? $attrs['nodata'] : $lang['strnoobjects']; + echo "<tree text=\"{$msg}\" onaction=\"tree.getSelected().getParent().reload()\" icon=\"", $this->icon('ObjectNotFound'), "\" />\n"; + } + + echo "</tree>\n"; + } + + function adjustTabsForTree(&$tabs) { + include_once('./classes/ArrayRecordSet.php'); + + foreach ($tabs as $i => $tab) { + if ((isset($tab['hide']) && $tab['hide'] === true) || (isset($tab['tree']) && $tab['tree'] === false)) { + unset($tabs[$i]); + } + } + return new ArrayRecordSet($tabs); + } + + function icon($icon) { + if (is_string($icon)) { + global $conf; + $path = "images/themes/{$conf['theme']}/{$icon}"; + if (file_exists($path.'.png')) return $path.'.png'; + if (file_exists($path.'.gif')) return $path.'.gif'; + $path = "images/themes/default/{$icon}"; + if (file_exists($path.'.png')) return $path.'.png'; + if (file_exists($path.'.gif')) return $path.'.gif'; + } + else { + // Icon from plugins + $path = "plugins/{$icon[0]}/images/{$icon[1]}"; + if (file_exists($path.'.png')) return $path.'.png'; + if (file_exists($path.'.gif')) return $path.'.gif'; + } + return ''; + } + + /** + * Function to escape command line parameters + * @param $str The string to escape + * @return The escaped string + */ + function escapeShellArg($str) { + global $data, $lang; + + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + // Due to annoying PHP bugs, shell arguments cannot be escaped + // (command simply fails), so we cannot allow complex objects + // to be dumped. + if (preg_match('/^[_.[:alnum:]]+$/', $str)) + return $str; + else { + echo $lang['strcannotdumponwindows']; + exit; + } + } + else + return escapeshellarg($str); + } + + /** + * Function to escape command line programs + * @param $str The string to escape + * @return The escaped string + */ + function escapeShellCmd($str) { + global $data; + + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $data->fieldClean($str); + return '"' . $str . '"'; + } + else + return escapeshellcmd($str); + } + + /** + * Get list of servers' groups if existing in the conf + * @return a recordset of servers' groups + */ + function getServersGroups($recordset = false, $group_id = false) { + global $conf, $lang; + $grps = array(); + + if (isset($conf['srv_groups'])) { + foreach ($conf['srv_groups'] as $i => $group) { + if ( + (($group_id === false) and (! isset($group['parents']))) /* root */ + or ( + ($group_id !== false) + and isset($group['parents']) + and in_array($group_id,explode(',', + preg_replace('/\s/', '', $group['parents']) + )) + ) /* nested group */ + ) + $grps[$i] = array( + 'id' => $i, + 'desc' => $group['desc'], + 'icon' => 'Servers', + 'action' => url('servers.php', + array( + 'group' => field('id') + ) + ), + 'branch' => url('servers.php', + array( + 'action' => 'tree', + 'group' => $i + ) + ) + ); + } + + if ($group_id === false) + $grps['all'] = array( + 'id' => 'all', + 'desc' => $lang['strallservers'], + 'icon' => 'Servers', + 'action' => url('servers.php', + array( + 'group' => field('id') + ) + ), + 'branch' => url('servers.php', + array( + 'action' => 'tree', + 'group' => 'all' + ) + ) + ); + } + + if ($recordset) { + include_once('./classes/ArrayRecordSet.php'); + return new ArrayRecordSet($grps); + } + + return $grps; + } + + + /** + * Get list of servers + * @param $recordset return as RecordSet suitable for printTable if true, + * otherwise just return an array. + * @param $group a group name to filter the returned servers using $conf[srv_groups] + */ + function getServers($recordset = false, $group = false) { + global $conf; + + $logins = isset($_SESSION['webdbLogin']) && is_array($_SESSION['webdbLogin']) ? $_SESSION['webdbLogin'] : array(); + $srvs = array(); + + if (($group !== false) and ($group !== 'all')) + if (isset($conf['srv_groups'][$group]['servers'])) + $group = array_fill_keys(explode(',', preg_replace('/\s/', '', + $conf['srv_groups'][$group]['servers'])), 1); + else + $group = ''; + + foreach($conf['servers'] as $idx => $info) { + $server_id = $info['host'].':'.$info['port'].':'.$info['sslmode']; + if (($group === false) + or (isset($group[$idx])) + or ($group === 'all') + ) { + $server_id = $info['host'].':'.$info['port'].':'.$info['sslmode']; + + if (isset($logins[$server_id])) $srvs[$server_id] = $logins[$server_id]; + else $srvs[$server_id] = $info; + + $srvs[$server_id]['id'] = $server_id; + $srvs[$server_id]['action'] = url('redirect.php', + array( + 'subject' => 'server', + 'server' => field('id') + ) + ); + if (isset($srvs[$server_id]['username'])) { + $srvs[$server_id]['icon'] = 'Server'; + $srvs[$server_id]['branch'] = url('all_db.php', + array( + 'action' => 'tree', + 'subject' => 'server', + 'server' => field('id') + ) + ); + } + else { + $srvs[$server_id]['icon'] = 'DisconnectedServer'; + $srvs[$server_id]['branch'] = false; + } + } + } + + function _cmp_desc($a, $b) { + return strcmp($a['desc'], $b['desc']); + } + uasort($srvs, '_cmp_desc'); + + if ($recordset) { + include_once('./classes/ArrayRecordSet.php'); + return new ArrayRecordSet($srvs); + } + return $srvs; + } + + /** + * Validate and retrieve information on a server. + * If the parameter isn't supplied then the currently + * connected server is returned. + * @param $server_id A server identifier (host:port) + * @return An associative array of server properties + */ + function getServerInfo($server_id = null) { + global $conf, $_reload_browser, $lang; + + if ($server_id === null && isset($_REQUEST['server'])) + $server_id = $_REQUEST['server']; + + // Check for the server in the logged-in list + if (isset($_SESSION['webdbLogin'][$server_id])) + return $_SESSION['webdbLogin'][$server_id]; + + // Otherwise, look for it in the conf file + foreach($conf['servers'] as $idx => $info) { + if ($server_id == $info['host'].':'.$info['port'].':'.$info['sslmode']) { + // Automatically use shared credentials if available + if (!isset($info['username']) && isset($_SESSION['sharedUsername'])) { + $info['username'] = $_SESSION['sharedUsername']; + $info['password'] = $_SESSION['sharedPassword']; + $_reload_browser = true; + $this->setServerInfo(null, $info, $server_id); + } + + return $info; + } + } + + if ($server_id === null){ + return null; + } else { + // Unable to find a matching server, are we being hacked? + echo $lang['strinvalidserverparam']; + exit; + } + } + + /** + * Set server information. + * @param $key parameter name to set, or null to replace all + * params with the assoc-array in $value. + * @param $value the new value, or null to unset the parameter + * @param $server_id the server identifier, or null for current + * server. + */ + function setServerInfo($key, $value, $server_id = null) + { + if ($server_id === null && isset($_REQUEST['server'])) + $server_id = $_REQUEST['server']; + + if ($key === null) { + if ($value === null) + unset($_SESSION['webdbLogin'][$server_id]); + else + $_SESSION['webdbLogin'][$server_id] = $value; + } else { + if ($value === null) + unset($_SESSION['webdbLogin'][$server_id][$key]); + else + $_SESSION['webdbLogin'][$server_id][$key] = $value; + } + } + + /** + * Set the current schema + * @param $schema The schema name + * @return 0 on success + * @return $data->seSchema() on error + */ + function setCurrentSchema($schema) { + global $data; + + $status = $data->setSchema($schema); + if($status != 0) + return $status; + + $_REQUEST['schema'] = $schema; + $this->setHREF(); + return 0; + } + + /** + * Save the given SQL script in the history + * of the database and server. + * @param $script the SQL script to save. + */ + function saveScriptHistory($script) { + list($usec, $sec) = explode(' ', microtime()); + $time = ((float)$usec + (float)$sec); + $_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']]["$time"] = array( + 'query' => $script, + 'paginate' => (!isset($_REQUEST['paginate'])? 'f':'t'), + 'queryid' => $time, + ); + } + + /* + * Output dropdown list to select server and + * databases form the popups windows. + * @param $onchange Javascript action to take when selections change. + */ + function printConnection($onchange) { + global $data, $lang, $misc; + + echo "<table style=\"width: 100%\"><tr><td>\n"; + echo "<label>"; + $misc->printHelp($lang['strserver'], 'pg.server'); + echo "</label>"; + echo ": <select name=\"server\" {$onchange}>\n"; + + $servers = $misc->getServers(); + foreach($servers as $info) { + if (empty($info['username'])) continue; // not logged on this server + echo "<option value=\"", htmlspecialchars($info['id']), "\"", + ((isset($_REQUEST['server']) && $info['id'] == $_REQUEST['server'])) ? ' selected="selected"' : '', ">", + htmlspecialchars("{$info['desc']} ({$info['id']})"), "</option>\n"; + } + echo "</select>\n</td><td style=\"text-align: right\">\n"; + + // Get the list of all databases + $databases = $data->getDatabases(); + + if ($databases->recordCount() > 0) { + + echo "<label>"; + $misc->printHelp($lang['strdatabase'], 'pg.database'); + echo ": <select name=\"database\" {$onchange}>\n"; + + //if no database was selected, user should select one + if (!isset($_REQUEST['database'])) + echo "<option value=\"\">--</option>\n"; + + while (!$databases->EOF) { + $dbname = $databases->fields['datname']; + echo "<option value=\"", htmlspecialchars($dbname), "\"", + ((isset($_REQUEST['database']) && $dbname == $_REQUEST['database'])) ? ' selected="selected"' : '', ">", + htmlspecialchars($dbname), "</option>\n"; + $databases->moveNext(); + } + echo "</select></label>\n"; + } + else { + $server_info = $misc->getServerInfo(); + echo "<input type=\"hidden\" name=\"database\" value=\"", + htmlspecialchars($server_info['defaultdb']), "\" />\n"; + } + + echo "</td></tr></table>\n"; + } + + /** + * returns an array representing FKs definition for a table, sorted by fields + * or by constraint. + * @param $table The table to retrieve FK contraints from + * @returns the array of FK definition: + * array( + * 'byconstr' => array( + * constrain id => array( + * confrelid => foreign relation oid + * f_schema => foreign schema name + * f_table => foreign table name + * pattnums => array of parent's fields nums + * pattnames => array of parent's fields names + * fattnames => array of foreign attributes names + * ) + * ), + * 'byfield' => array( + * attribute num => array (constraint id, ...) + * ), + * 'code' => HTML/js code to include in the page for auto-completion + * ) + **/ + function getAutocompleteFKProperties($table) { + global $data; + + $fksprops = array( + 'byconstr' => array(), + 'byfield' => array(), + 'code' => '' + ); + + $constrs = $data->getConstraintsWithFields($table); + + if (!$constrs->EOF) { + $conrelid = $constrs->fields['conrelid']; + while(!$constrs->EOF) { + if ($constrs->fields['contype'] == 'f') { + if (!isset($fksprops['byconstr'][$constrs->fields['conid']])) { + $fksprops['byconstr'][$constrs->fields['conid']] = array ( + 'confrelid' => $constrs->fields['confrelid'], + 'f_table' => $constrs->fields['f_table'], + 'f_schema' => $constrs->fields['f_schema'], + 'pattnums' => array(), + 'pattnames' => array(), + 'fattnames' => array() + ); + } + + $fksprops['byconstr'][$constrs->fields['conid']]['pattnums'][] = $constrs->fields['p_attnum']; + $fksprops['byconstr'][$constrs->fields['conid']]['pattnames'][] = $constrs->fields['p_field']; + $fksprops['byconstr'][$constrs->fields['conid']]['fattnames'][] = $constrs->fields['f_field']; + + if (!isset($fksprops['byfield'][$constrs->fields['p_attnum']])) + $fksprops['byfield'][$constrs->fields['p_attnum']] = array(); + $fksprops['byfield'][$constrs->fields['p_attnum']][] = $constrs->fields['conid']; + } + $constrs->moveNext(); + } + + $fksprops['code'] = "<script type=\"text/javascript\">\n"; + $fksprops['code'] .= "var constrs = {};\n"; + foreach ($fksprops['byconstr'] as $conid => $props) { + $fksprops['code'] .= "constrs.constr_{$conid} = {\n"; + $fksprops['code'] .= 'pattnums: ['. implode(',',$props['pattnums']) ."],\n"; + $fksprops['code'] .= "f_table:'". addslashes(htmlentities($props['f_table'], ENT_QUOTES, 'UTF-8')) ."',\n"; + $fksprops['code'] .= "f_schema:'". addslashes(htmlentities($props['f_schema'], ENT_QUOTES, 'UTF-8')) ."',\n"; + $_ = ''; + foreach ($props['pattnames'] as $n) { + $_ .= ",'". htmlentities($n, ENT_QUOTES, 'UTF-8') ."'"; + } + $fksprops['code'] .= 'pattnames: ['. substr($_, 1) ."],\n"; + + $_ = ''; + foreach ($props['fattnames'] as $n) { + $_ .= ",'". htmlentities($n, ENT_QUOTES, 'UTF-8') ."'"; + } + + $fksprops['code'] .= 'fattnames: ['. substr($_, 1) ."]\n"; + $fksprops['code'] .= "};\n"; + } + + $fksprops['code'] .= "var attrs = {};\n"; + foreach ($fksprops['byfield'] as $attnum => $cstrs ) { + $fksprops['code'] .= "attrs.attr_{$attnum} = [". implode(',', $fksprops['byfield'][$attnum]) ."];\n"; + } + + $fksprops['code'] .= "var table='". addslashes(htmlentities($table, ENT_QUOTES, 'UTF-8')) ."';"; + $fksprops['code'] .= "var server='". htmlentities($_REQUEST['server'], ENT_QUOTES, 'UTF-8') ."';"; + $fksprops['code'] .= "var database='". addslashes(htmlentities($_REQUEST['database'], ENT_QUOTES, 'UTF-8')) ."';"; + $fksprops['code'] .= "</script>\n"; + + $fksprops['code'] .= '<div id="fkbg"></div>'; + $fksprops['code'] .= '<div id="fklist"></div>'; + $fksprops['code'] .= '<script src="js/ac_insert_row.js" type="text/javascript"></script>'; + } + + else /* we have no foreign keys on this table */ + return false; + + return $fksprops; + } + } +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Plugin.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Plugin.php new file mode 100644 index 00000000..e3bea046 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/Plugin.php @@ -0,0 +1,68 @@ +<?php +abstract class Plugin { + + /** + * Constructor + * Register the plugin's functions in hooks of PPA. + * @param $language Current phpPgAdmin language. + */ + function __construct($language) { + // Set the plugin's language + $plugin_directory = "plugins/". $this->get_name(); + + if (file_exists("{$plugin_directory}/lang")) { + if (file_exists("{$plugin_directory}/lang/english.php")) { + require_once("{$plugin_directory}/lang/english.php"); + } + + if (file_exists("{$plugin_directory}/lang/{$language}.php")) { + include_once("{$plugin_directory}/lang/{$language}.php"); + } + + $this->lang = $plugin_lang; + } + + if (file_exists("{$plugin_directory}/conf/config.inc.php")) { + include_once("{$plugin_directory}/conf/config.inc.php"); + $this->conf = $plugin_conf; + } + } + + abstract function get_hooks(); + + abstract function get_actions(); + + /** + * In some page (display, sql, ...), a "return" link will show up if + * $_GET['return'] = 'plugin' is given. The "get_subject_params" method + * of the plugin designated by $_GET['plugin'] is then called to add needed + * parameters in the href URL. + * This method can returns parameters based on context from $_REQUEST. See + * plugin Report as example. + * + * @returns an associative of parameter_name => value + */ + function get_subject_params() { + $vars = array(); + return $vars; + } + + /** + * Get the plugin name, that will be used as identification + * @return $name + */ + function get_name() { + return $this->name; + } + + /** + * Returns the structure suitable for the method $misc->icon() to print + * the given icon. + * @param $img - The icon name + * @return the information suitable for the method $misc->icon() + */ + function icon($img) { + return array($this->name, $img); + } +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/PluginManager.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/PluginManager.php new file mode 100644 index 00000000..981266e0 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/PluginManager.php @@ -0,0 +1,137 @@ +<?php + +/** + * A class that implements the plugin's system + */ + +class PluginManager { + + /** + * Attributes + */ + private $plugins_list = array(); + private $available_hooks = array( + 'head', + 'toplinks', + 'tabs', + 'trail', + 'navlinks', + 'actionbuttons', + 'tree', + 'logout' + ); + private $actions = array(); + private $hooks = array(); + + /** + * Register the plugins + * @param $language - Language that have been used. + */ + function __construct($language) { + global $conf, $lang; + + if (! isset($conf['plugins'])) return; + + // Get the activated plugins + $plugins = $conf['plugins']; + + foreach ($plugins as $activated_plugin) { + $plugin_file = './plugins/'.$activated_plugin.'/plugin.php'; + + // Verify is the activated plugin exists + if (file_exists($plugin_file)) { + include_once($plugin_file); + try { + $plugin = new $activated_plugin($language); + $this->add_plugin($plugin); + } + catch (Exception $e) { + continue; + } + } else { + printf($lang['strpluginnotfound']."\t\n", $activated_plugin); + exit; + } + } + } + + /** + * Add a plugin in the list of plugins to manage + * @param $plugin - Instance from plugin + */ + function add_plugin($plugin) { + global $lang; + + //The $plugin_name is the identification of the plugin. + //Example: PluginExample is the identification for PluginExample + //It will be used to get a specific plugin from the plugins_list. + $plugin_name = $plugin->get_name(); + $this->plugins_list[$plugin_name] = $plugin; + + //Register the plugin's functions + $hooks = $plugin->get_hooks(); + foreach ($hooks as $hook => $functions) { + if (!in_array($hook, $this->available_hooks)) { + printf($lang['strhooknotfound']."\t\n", $hook); + exit; + } + $this->hooks[$hook][$plugin_name] = $functions; + } + + //Register the plugin's actions + $actions = $plugin->get_actions(); + $this->actions[$plugin_name] = $actions; + } + + function getPlugin($plugin) { + if (isset($this->plugins_list[$plugin])) + return $this->plugins_list[$plugin]; + + return null; + } + + /** + * Execute the plugins hook functions when needed. + * @param $hook - The place where the function will be called + * @param $function_args - An array reference with arguments to give to called function + */ + function do_hook($hook, &$function_args) { + if (isset($this->hooks[$hook])) { + foreach ($this->hooks[$hook] as $plugin_name => $functions) { + $plugin = $this->plugins_list[$plugin_name]; + foreach ($functions as $function) { + if (method_exists($plugin, $function)) { + call_user_func(array($plugin, $function), $function_args); + } + } + } + } + } + + /** + * Execute a plugin's action + * @param $plugin_name - The plugin name. + * @param $action - action that will be executed. + */ + function do_action($plugin_name, $action) { + global $lang; + + if (!isset($this->plugins_list[$plugin_name])) { + // Show an error and stop the application + printf($lang['strpluginnotfound']."\t\n", $plugin_name); + exit; + } + $plugin = $this->plugins_list[$plugin_name]; + + // Check if the plugin's method exists and if this method is an declared action. + if (method_exists($plugin, $action) and in_array($action, $this->actions[$plugin_name])) { + call_user_func(array($plugin, $action)); + } + else { + // Show an error and stop the application + printf($lang['stractionnotfound']."\t\n", $action, $plugin_name); + exit; + } + } +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/class.select.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/class.select.php new file mode 100644 index 00000000..057c8d6e --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/class.select.php @@ -0,0 +1,217 @@ +<?php + +/** +* XHtmlSimpleElement +* +* Used to generate Xhtml-Code for simple xhtml elements +* (i.e. elements, that can't contain child elements) +* +* +* @author Felix Meinhold +* +*/ +class XHtmlSimpleElement { + var $_element; + var $_siblings = array(); + var $_htmlcode; + var $_attributes = array(); + + + /** + * Constructor + * + * @param string The element's name. Defaults to name of the + * derived class + * + */ + function XHtmlSimpleElement($element = null) { + + $this->_element = $this->is_element(); + + } + + function set_style($style) { + $this->set_attribute('style', $style); + } + + function set_class($class) { + $this->set_attribute('class', $class); + } + + + function is_element() { + return + str_replace('xhtml_', '', strtolower(get_class($this))); + } + + /** + * Private function generates xhtml + * @access private + */ + function _html() { + $this->_htmlcode = "<"; + foreach ($this->_attributeCollection as $attribute => $value) { + if (!empty($value)) $this->_htmlcode .= " {$attribute}=\"{$value}\""; + } + $this->_htmlcode .= "/>"; + + return $this->_htmlcode; + } + + /** + * Returns xhtml code + * + */ + function fetch() { + return $this->_html(); + } + /** + * Echoes xhtml + * + */ + function show() { + echo $this->fetch(); + } + + function set_attribute($attr, $value) { + $this->_attributes[$attr] = $value; + } + + +} + +/** +* XHtmlElement +* +* Used to generate Xhtml-Code for xhtml elements +* that can contain child elements +* +* +*/ +class XHtmlElement extends XHtmlSimpleElement { + var $_text = null; + var $_htmlcode = ""; + var $_siblings = array(); + + function XHtmlElement($text = null) { + XHtmlSimpleElement::XHtmlSimpleElement(); + + if ($text) $this->set_text($text); + } + + /* + * Adds an xhtml child to element + * + * @param XHtmlElement The element to become a child of element + */ + function add(&$object) { + array_push($this->_siblings, $object); + } + + + /* + * The CDATA section of Element + * + * @param string Text + */ + function set_text($text) { + if ($text) $this->_text = htmlspecialchars($text); + } + + function fetch() { + return $this->_html(); + } + + + function _html() { + + $this->_htmlcode = "<{$this->_element}"; + foreach ($this->_attributes as $attribute =>$value) { + if (!empty($value)) $this->_htmlcode .= " {$attribute} =\"{$value}\""; + } + $this->_htmlcode .= ">"; + + + if ($this->_text) { + $this->_htmlcode .= $this->_text; + } + + foreach ($this->_siblings as $obj) { + $this->_htmlcode .= $obj->fetch(); + } + + $this->_htmlcode .= "</{$this->_element}>"; + + return $this->_htmlcode; + } + + /* + * Returns siblings of Element + * + */ + function get_siblings() { + return $this->_siblings; + } + + function has_siblings() { + return (count($this->_siblings) != 0); + } +} + +class XHTML_Button extends XHtmlElement { + function XHTML_Button ($name, $text = null) { + parent::XHtmlElement(); + + $this->set_attribute("name", $name); + + if ($text) $this->set_text($text); + } +} + + +class XHTML_Option extends XHtmlElement { + function XHTML_Option($text, $value = null) { + XHtmlElement::XHtmlElement(null); + $this->set_text($text); + } +} + + +class XHTML_Select extends XHTMLElement { + var $_data; + + function XHTML_Select ($name, $multiple = false, $size = null) { + XHtmlElement::XHtmlElement(); + + $this->set_attribute("name", $name); + if ($multiple) $this->set_attribute("multiple","multiple"); + if ($size) $this->set_attribute("size",$size); + + + } + + function set_data(&$data, $delim = ",") { + switch (gettype($data)) { + case "string": + $this->_data = explode($delim, $data); + break; + case "array": + $this->_data = $data; + break; + + default: + break; + } + } + + function fetch() { + if (isset($this->_data) && $this->_data) { + foreach ($this->_data as $value) { $this->add(new XHTML_Option($value)); } + } + return parent::fetch(); + } + +} + + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/ADODB_base.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/ADODB_base.php new file mode 100644 index 00000000..816d6930 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/ADODB_base.php @@ -0,0 +1,359 @@ +<?php + +/* + * Parent class of all ADODB objects. + * + * $Id: ADODB_base.php,v 1.24 2008/02/20 20:43:10 ioguix Exp $ + */ + +include_once('./libraries/errorhandler.inc.php'); +include_once('./libraries/adodb/adodb.inc.php'); + +class ADODB_base { + + var $conn; + + // The backend platform. Set to UNKNOWN by default. + var $platform = 'UNKNOWN'; + + /** + * Base constructor + * @param &$conn The connection object + */ + function ADODB_base(&$conn) { + $this->conn = $conn; + } + + /** + * Turns on or off query debugging + * @param $debug True to turn on debugging, false otherwise + */ + function setDebug($debug) { + $this->conn->debug = $debug; + } + + /** + * Cleans (escapes) a string + * @param $str The string to clean, by reference + * @return The cleaned string + */ + function clean(&$str) { + $str = addslashes($str); + return $str; + } + + /** + * Cleans (escapes) an object name (eg. table, field) + * @param $str The string to clean, by reference + * @return The cleaned string + */ + function fieldClean(&$str) { + $str = str_replace('"', '""', $str); + return $str; + } + + /** + * Cleans (escapes) an array + * @param $arr The array to clean, by reference + * @return The cleaned array + */ + function arrayClean(&$arr) { + reset($arr); + while(list($k, $v) = each($arr)) + $arr[$k] = addslashes($v); + return $arr; + } + + /** + * Executes a query on the underlying connection + * @param $sql The SQL query to execute + * @return A recordset + */ + function execute($sql) { + // Execute the statement + $rs = $this->conn->Execute($sql); + + // If failure, return error value + return $this->conn->ErrorNo(); + } + + /** + * Closes the connection the database class + * relies on. + */ + function close() { + $this->conn->close(); + } + + /** + * Retrieves a ResultSet from a query + * @param $sql The SQL statement to be executed + * @return A recordset + */ + function selectSet($sql) { + // Execute the statement + $rs = $this->conn->Execute($sql); + + if (!$rs) return $this->conn->ErrorNo(); + + return $rs; + } + + /** + * Retrieves a single value from a query + * + * @@ assumes that the query will return only one row - returns field value in the first row + * + * @param $sql The SQL statement to be executed + * @param $field The field name to be returned + * @return A single field value + * @return -1 No rows were found + */ + function selectField($sql, $field) { + // Execute the statement + $rs = $this->conn->Execute($sql); + + // If failure, or no rows returned, return error value + if (!$rs) return $this->conn->ErrorNo(); + elseif ($rs->RecordCount() == 0) return -1; + + return $rs->fields[$field]; + } + + /** + * Delete from the database + * @param $table The name of the table + * @param $conditions (array) A map of field names to conditions + * @param $schema (optional) The table's schema + * @return 0 success + * @return -1 on referential integrity violation + * @return -2 on no rows deleted + */ + function delete($table, $conditions, $schema = '') { + $this->fieldClean($table); + + reset($conditions); + + if (!empty($schema)) { + $this->fieldClean($schema); + $schema = "\"{$schema}\"."; + } + + // Build clause + $sql = ''; + while(list($key, $value) = each($conditions)) { + $this->clean($key); + $this->clean($value); + if ($sql) $sql .= " AND \"{$key}\"='{$value}'"; + else $sql = "DELETE FROM {$schema}\"{$table}\" WHERE \"{$key}\"='{$value}'"; + } + + // Check for failures + if (!$this->conn->Execute($sql)) { + // Check for referential integrity failure + if (stristr($this->conn->ErrorMsg(), 'referential')) + return -1; + } + + // Check for no rows modified + if ($this->conn->Affected_Rows() == 0) return -2; + + return $this->conn->ErrorNo(); + } + + /** + * Insert a set of values into the database + * @param $table The table to insert into + * @param $vars (array) A mapping of the field names to the values to be inserted + * @return 0 success + * @return -1 if a unique constraint is violated + * @return -2 if a referential constraint is violated + */ + function insert($table, $vars) { + $this->fieldClean($table); + + // Build clause + if (sizeof($vars) > 0) { + $fields = ''; + $values = ''; + foreach($vars as $key => $value) { + $this->clean($key); + $this->clean($value); + + if ($fields) $fields .= ", \"{$key}\""; + else $fields = "INSERT INTO \"{$table}\" (\"{$key}\""; + + if ($values) $values .= ", '{$value}'"; + else $values = ") VALUES ('{$value}'"; + } + $sql = $fields . $values . ')'; + } + + // Check for failures + if (!$this->conn->Execute($sql)) { + // Check for unique constraint failure + if (stristr($this->conn->ErrorMsg(), 'unique')) + return -1; + // Check for referential integrity failure + elseif (stristr($this->conn->ErrorMsg(), 'referential')) + return -2; + } + + return $this->conn->ErrorNo(); + } + + /** + * Update a row in the database + * @param $table The table that is to be updated + * @param $vars (array) A mapping of the field names to the values to be updated + * @param $where (array) A mapping of field names to values for the where clause + * @param $nulls (array, optional) An array of fields to be set null + * @return 0 success + * @return -1 if a unique constraint is violated + * @return -2 if a referential constraint is violated + * @return -3 on no rows deleted + */ + function update($table, $vars, $where, $nulls = array()) { + $this->fieldClean($table); + + $setClause = ''; + $whereClause = ''; + + // Populate the syntax arrays + reset($vars); + while(list($key, $value) = each($vars)) { + $this->fieldClean($key); + $this->clean($value); + if ($setClause) $setClause .= ", \"{$key}\"='{$value}'"; + else $setClause = "UPDATE \"{$table}\" SET \"{$key}\"='{$value}'"; + } + + reset($nulls); + while(list(, $value) = each($nulls)) { + $this->fieldClean($value); + if ($setClause) $setClause .= ", \"{$value}\"=NULL"; + else $setClause = "UPDATE \"{$table}\" SET \"{$value}\"=NULL"; + } + + reset($where); + while(list($key, $value) = each($where)) { + $this->fieldClean($key); + $this->clean($value); + if ($whereClause) $whereClause .= " AND \"{$key}\"='{$value}'"; + else $whereClause = " WHERE \"{$key}\"='{$value}'"; + } + + // Check for failures + if (!$this->conn->Execute($setClause . $whereClause)) { + // Check for unique constraint failure + if (stristr($this->conn->ErrorMsg(), 'unique')) + return -1; + // Check for referential integrity failure + elseif (stristr($this->conn->ErrorMsg(), 'referential')) + return -2; + } + + // Check for no rows modified + if ($this->conn->Affected_Rows() == 0) return -3; + + return $this->conn->ErrorNo(); + } + + /** + * Begin a transaction + * @return 0 success + */ + function beginTransaction() { + return !$this->conn->BeginTrans(); + } + + /** + * End a transaction + * @return 0 success + */ + function endTransaction() { + return !$this->conn->CommitTrans(); + } + + /** + * Roll back a transaction + * @return 0 success + */ + function rollbackTransaction() { + return !$this->conn->RollbackTrans(); + } + + /** + * Get the backend platform + * @return The backend platform + */ + function getPlatform() { + //return $this->conn->platform; + return "UNKNOWN"; + } + + // Type conversion routines + + /** + * Change the value of a parameter to database representation depending on whether it evaluates to true or false + * @param $parameter the parameter + */ + function dbBool(&$parameter) { + return $parameter; + } + + /** + * Change a parameter from database representation to a boolean, (others evaluate to false) + * @param $parameter the parameter + */ + function phpBool($parameter) { + return $parameter; + } + + /** + * Change a db array into a PHP array + * @param $arr String representing the DB array + * @return A PHP array + */ + function phpArray($dbarr) { + // Take off the first and last characters (the braces) + $arr = substr($dbarr, 1, strlen($dbarr) - 2); + + // Pick out array entries by carefully parsing. This is necessary in order + // to cope with double quotes and commas, etc. + $elements = array(); + $i = $j = 0; + $in_quotes = false; + while ($i < strlen($arr)) { + // If current char is a double quote and it's not escaped, then + // enter quoted bit + $char = substr($arr, $i, 1); + if ($char == '"' && ($i == 0 || substr($arr, $i - 1, 1) != '\\')) + $in_quotes = !$in_quotes; + elseif ($char == ',' && !$in_quotes) { + // Add text so far to the array + $elements[] = substr($arr, $j, $i - $j); + $j = $i + 1; + } + $i++; + } + // Add final text to the array + $elements[] = substr($arr, $j); + + // Do one further loop over the elements array to remote double quoting + // and escaping of double quotes and backslashes + for ($i = 0; $i < sizeof($elements); $i++) { + $v = $elements[$i]; + if (strpos($v, '"') === 0) { + $v = substr($v, 1, strlen($v) - 2); + $v = str_replace('\\"', '"', $v); + $v = str_replace('\\\\', '\\', $v); + $elements[$i] = $v; + } + } + + return $elements; + } +} + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Connection.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Connection.php new file mode 100644 index 00000000..eb22cd21 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Connection.php @@ -0,0 +1,121 @@ +<?php + +/** + * Class to represent a database connection + * + * $Id: Connection.php,v 1.15 2008/02/18 21:42:47 ioguix Exp $ + */ + +include_once('./classes/database/ADODB_base.php'); + +class Connection { + + var $conn; + + // The backend platform. Set to UNKNOWN by default. + var $platform = 'UNKNOWN'; + + /** + * Creates a new connection. Will actually make a database connection. + * @param $fetchMode Defaults to associative. Override for different behaviour + */ + function Connection($host, $port, $sslmode, $user, $password, $database, $fetchMode = ADODB_FETCH_ASSOC) { + $this->conn = ADONewConnection('postgres7'); + $this->conn->setFetchMode($fetchMode); + + // Ignore host if null + if ($host === null || $host == '') + if ($port !== null && $port != '') + $pghost = ':'.$port; + else + $pghost = ''; + else + $pghost = "{$host}:{$port}"; + + // Add sslmode to $pghost as needed + if (($sslmode == 'disable') || ($sslmode == 'allow') || ($sslmode == 'prefer') || ($sslmode == 'require')) { + $pghost .= ':'.$sslmode; + } elseif ($sslmode == 'legacy') { + $pghost .= ' requiressl=1'; + } + + $this->conn->connect($pghost, $user, $password, $database); + } + + /** + * Gets the name of the correct database driver to use. As a side effect, + * sets the platform. + * @param (return-by-ref) $description A description of the database and version + * @return The class name of the driver eg. Postgres84 + * @return null if version is < 7.4 + * @return -3 Database-specific failure + */ + function getDriver(&$description) { + + $v = pg_version($this->conn->_connectionID); + if (isset($v['server'])) $version = $v['server']; + + // If we didn't manage to get the version without a query, query... + if (!isset($version)) { + $adodb = new ADODB_base($this->conn); + + $sql = "SELECT VERSION() AS version"; + $field = $adodb->selectField($sql, 'version'); + + // Check the platform, if it's mingw, set it + if (preg_match('/ mingw /i', $field)) + $this->platform = 'MINGW'; + + $params = explode(' ', $field); + if (!isset($params[1])) return -3; + + $version = $params[1]; // eg. 8.4.4 + } + + $description = "PostgreSQL {$version}"; + + // Detect version and choose appropriate database driver + switch (substr($version,0,2)) { + case '10': return 'Postgres10';break; + case '11': return 'Postgres11';break; + case '12': return 'Postgres';break; + } + + switch (substr($version,0,3)) { + case '9.6': return 'Postgres96'; break; + case '9.5': return 'Postgres95'; break; + case '9.4': return 'Postgres94'; break; + case '9.3': return 'Postgres93'; break; + case '9.2': return 'Postgres92'; break; + case '9.1': return 'Postgres91'; break; + case '9.0': return 'Postgres90'; break; + case '8.4': return 'Postgres84'; break; + case '8.3': return 'Postgres83'; break; + case '8.2': return 'Postgres82'; break; + case '8.1': return 'Postgres81'; break; + case '8.0': + case '7.5': return 'Postgres80'; break; + case '7.4': return 'Postgres74'; break; + } + + /* All <7.4 versions are not supported */ + // if major version is 7 or less and wasn't cought in the + // switch/case block, we have an unsupported version. + if ((int)substr($version, 0, 1) < 8) + return null; + + // If unknown version, then default to latest driver + return 'Postgres'; + + } + + /** + * Get the last error in the connection + * @return Error string + */ + function getLastError() { + return pg_last_error($this->conn->_connectionID); + } +} + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres.php new file mode 100644 index 00000000..ee19990f --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres.php @@ -0,0 +1,8013 @@ +<?php + +/** + * A Class that implements the DB Interface for Postgres + * Note: This Class uses ADODB and returns RecordSets. + * + * $Id: Postgres.php,v 1.320 2008/02/20 20:43:09 ioguix Exp $ + */ + +include_once('./classes/database/ADODB_base.php'); + +class Postgres extends ADODB_base { + + var $major_version = 12; + // Max object name length + var $_maxNameLen = 63; + // Store the current schema + var $_schema; + // Map of database encoding names to HTTP encoding names. If a + // database encoding does not appear in this list, then its HTTP + // encoding name is the same as its database encoding name. + var $codemap = array( + 'BIG5' => 'BIG5', + 'EUC_CN' => 'GB2312', + 'EUC_JP' => 'EUC-JP', + 'EUC_KR' => 'EUC-KR', + 'EUC_TW' => 'EUC-TW', + 'GB18030' => 'GB18030', + 'GBK' => 'GB2312', + 'ISO_8859_5' => 'ISO-8859-5', + 'ISO_8859_6' => 'ISO-8859-6', + 'ISO_8859_7' => 'ISO-8859-7', + 'ISO_8859_8' => 'ISO-8859-8', + 'JOHAB' => 'CP1361', + 'KOI8' => 'KOI8-R', + 'LATIN1' => 'ISO-8859-1', + 'LATIN2' => 'ISO-8859-2', + 'LATIN3' => 'ISO-8859-3', + 'LATIN4' => 'ISO-8859-4', + 'LATIN5' => 'ISO-8859-9', + 'LATIN6' => 'ISO-8859-10', + 'LATIN7' => 'ISO-8859-13', + 'LATIN8' => 'ISO-8859-14', + 'LATIN9' => 'ISO-8859-15', + 'LATIN10' => 'ISO-8859-16', + 'SJIS' => 'SHIFT_JIS', + 'SQL_ASCII' => 'US-ASCII', + 'UHC' => 'WIN949', + 'UTF8' => 'UTF-8', + 'WIN866' => 'CP866', + 'WIN874' => 'CP874', + 'WIN1250' => 'CP1250', + 'WIN1251' => 'CP1251', + 'WIN1252' => 'CP1252', + 'WIN1256' => 'CP1256', + 'WIN1258' => 'CP1258' + ); + var $defaultprops = array('', '', ''); + // Extra "magic" types. BIGSERIAL was added in PostgreSQL 7.2. + var $extraTypes = array('SERIAL', 'BIGSERIAL'); + // Foreign key stuff. First element MUST be the default. + var $fkactions = array('NO ACTION', 'RESTRICT', 'CASCADE', 'SET NULL', 'SET DEFAULT'); + var $fkdeferrable = array('NOT DEFERRABLE', 'DEFERRABLE'); + var $fkinitial = array('INITIALLY IMMEDIATE', 'INITIALLY DEFERRED'); + var $fkmatches = array('MATCH SIMPLE', 'MATCH FULL'); + // Function properties + var $funcprops = array( array('', 'VOLATILE', 'IMMUTABLE', 'STABLE'), + array('', 'CALLED ON NULL INPUT', 'RETURNS NULL ON NULL INPUT'), + array('', 'SECURITY INVOKER', 'SECURITY DEFINER')); + // Default help URL + var $help_base; + // Help sub pages + var $help_page; + // Name of id column + var $id = 'oid'; + // Supported join operations for use with view wizard + var $joinOps = array('INNER JOIN' => 'INNER JOIN', 'LEFT JOIN' => 'LEFT JOIN', 'RIGHT JOIN' => 'RIGHT JOIN', 'FULL JOIN' => 'FULL JOIN'); + // Map of internal language name to syntax highlighting name + var $langmap = array( + 'sql' => 'SQL', + 'plpgsql' => 'SQL', + 'php' => 'PHP', + 'phpu' => 'PHP', + 'plphp' => 'PHP', + 'plphpu' => 'PHP', + 'perl' => 'Perl', + 'perlu' => 'Perl', + 'plperl' => 'Perl', + 'plperlu' => 'Perl', + 'java' => 'Java', + 'javau' => 'Java', + 'pljava' => 'Java', + 'pljavau' => 'Java', + 'plj' => 'Java', + 'plju' => 'Java', + 'python' => 'Python', + 'pythonu' => 'Python', + 'plpython' => 'Python', + 'plpythonu' => 'Python', + 'ruby' => 'Ruby', + 'rubyu' => 'Ruby', + 'plruby' => 'Ruby', + 'plrubyu' => 'Ruby' + ); + // Predefined size types + var $predefined_size_types = array('abstime','aclitem','bigserial','boolean','bytea','cid','cidr','circle','date','float4','float8','gtsvector','inet','int2','int4','int8','macaddr','money','oid','path','polygon','refcursor','regclass','regoper','regoperator','regproc','regprocedure','regtype','reltime','serial','smgr','text','tid','tinterval','tsquery','tsvector','varbit','void','xid'); + // List of all legal privileges that can be applied to different types + // of objects. + var $privlist = array( + 'table' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'view' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'sequence' => array('SELECT', 'UPDATE', 'ALL PRIVILEGES'), + 'database' => array('CREATE', 'TEMPORARY', 'CONNECT', 'ALL PRIVILEGES'), + 'function' => array('EXECUTE', 'ALL PRIVILEGES'), + 'language' => array('USAGE', 'ALL PRIVILEGES'), + 'schema' => array('CREATE', 'USAGE', 'ALL PRIVILEGES'), + 'tablespace' => array('CREATE', 'ALL PRIVILEGES'), + 'column' => array('SELECT', 'INSERT', 'UPDATE', 'REFERENCES','ALL PRIVILEGES') + ); + // List of characters in acl lists and the privileges they + // refer to. + var $privmap = array( + 'r' => 'SELECT', + 'w' => 'UPDATE', + 'a' => 'INSERT', + 'd' => 'DELETE', + 'D' => 'TRUNCATE', + 'R' => 'RULE', + 'x' => 'REFERENCES', + 't' => 'TRIGGER', + 'X' => 'EXECUTE', + 'U' => 'USAGE', + 'C' => 'CREATE', + 'T' => 'TEMPORARY', + 'c' => 'CONNECT' + ); + // Rule action types + var $rule_events = array('SELECT', 'INSERT', 'UPDATE', 'DELETE'); + // Select operators + var $selectOps = array('=' => 'i', '!=' => 'i', '<' => 'i', '>' => 'i', '<=' => 'i', '>=' => 'i', + '<<' => 'i', '>>' => 'i', '<<=' => 'i', '>>=' => 'i', + 'LIKE' => 'i', 'NOT LIKE' => 'i', 'ILIKE' => 'i', 'NOT ILIKE' => 'i', 'SIMILAR TO' => 'i', + 'NOT SIMILAR TO' => 'i', '~' => 'i', '!~' => 'i', '~*' => 'i', '!~*' => 'i', + 'IS NULL' => 'p', 'IS NOT NULL' => 'p', 'IN' => 'x', 'NOT IN' => 'x', + '@@' => 'i', '@@@' => 'i', '@>' => 'i', '<@' => 'i', + '@@ to_tsquery' => 't', '@@@ to_tsquery' => 't', '@> to_tsquery' => 't', '<@ to_tsquery' => 't', + '@@ plainto_tsquery' => 't', '@@@ plainto_tsquery' => 't', '@> plainto_tsquery' => 't', '<@ plainto_tsquery' => 't'); + // Array of allowed trigger events + var $triggerEvents= array('INSERT', 'UPDATE', 'DELETE', 'INSERT OR UPDATE', 'INSERT OR DELETE', + 'DELETE OR UPDATE', 'INSERT OR DELETE OR UPDATE'); + // When to execute the trigger + var $triggerExecTimes = array('BEFORE', 'AFTER'); + // How often to execute the trigger + var $triggerFrequency = array('ROW','STATEMENT'); + // Array of allowed type alignments + var $typAligns = array('char', 'int2', 'int4', 'double'); + // The default type alignment + var $typAlignDef = 'int4'; + // Default index type + var $typIndexDef = 'BTREE'; + // Array of allowed index types + var $typIndexes = array('BTREE', 'RTREE', 'GIST', 'GIN', 'HASH'); + // Array of allowed type storage attributes + var $typStorages = array('plain', 'external', 'extended', 'main'); + // The default type storage + var $typStorageDef = 'plain'; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres($conn) { + $this->ADODB_base($conn); + } + + // Formatting functions + + /** + * Cleans (escapes) a string + * @param $str The string to clean, by reference + * @return The cleaned string + */ + function clean(&$str) { + if ($str === null) return null; + $str = str_replace("\r\n","\n",$str); + $str = pg_escape_string($str); + return $str; + } + + /** + * Cleans (escapes) an object name (eg. table, field) + * @param $str The string to clean, by reference + * @return The cleaned string + */ + function fieldClean(&$str) { + if ($str === null) return null; + $str = str_replace('"', '""', $str); + return $str; + } + + /** + * Cleans (escapes) an array of field names + * @param $arr The array to clean, by reference + * @return The cleaned array + */ + function fieldArrayClean(&$arr) { + foreach ($arr as $k => $v) { + if ($v === null) continue; + $arr[$k] = str_replace('"', '""', $v); + } + return $arr; + } + + /** + * Cleans (escapes) an array + * @param $arr The array to clean, by reference + * @return The cleaned array + */ + function arrayClean(&$arr) { + foreach ($arr as $k => $v) { + if ($v === null) continue; + $arr[$k] = pg_escape_string($v); + } + return $arr; + } + + /** + * Escapes bytea data for display on the screen + * @param $data The bytea data + * @return Data formatted for on-screen display + */ + function escapeBytea($data) { + return htmlentities($data, ENT_QUOTES, 'UTF-8'); + } + + /** + * Outputs the HTML code for a particular field + * @param $name The name to give the field + * @param $value The value of the field. Note this could be 'numeric(7,2)' sort of thing... + * @param $type The database type of the field + * @param $extras An array of attributes name as key and attributes' values as value + */ + function printField($name, $value, $type, $extras = array()) { + global $lang; + + // Determine actions string + $extra_str = ''; + foreach ($extras as $k => $v) { + $extra_str .= " {$k}=\"" . htmlspecialchars($v) . "\""; + } + + switch (substr($type,0,9)) { + case 'bool': + case 'boolean': + if ($value !== null && $value == '') $value = null; + elseif ($value == 'true') $value = 't'; + elseif ($value == 'false') $value = 'f'; + + // If value is null, 't' or 'f'... + if ($value === null || $value == 't' || $value == 'f') { + echo "<select name=\"", htmlspecialchars($name), "\"{$extra_str}>\n"; + echo "<option value=\"\"", ($value === null) ? ' selected="selected"' : '', "></option>\n"; + echo "<option value=\"t\"", ($value == 't') ? ' selected="selected"' : '', ">{$lang['strtrue']}</option>\n"; + echo "<option value=\"f\"", ($value == 'f') ? ' selected="selected"' : '', ">{$lang['strfalse']}</option>\n"; + echo "</select>\n"; + } + else { + echo "<input name=\"", htmlspecialchars($name), "\" value=\"", htmlspecialchars($value), "\" size=\"35\"{$extra_str} />\n"; + } + break; + case 'bytea': + case 'bytea[]': + if (!is_null($value)) { + $value = $this->escapeBytea($value); + } + case 'text': + case 'text[]': + case 'json': + case 'jsonb': + case 'xml': + case 'xml[]': + $n = substr_count($value, "\n"); + $n = $n < 5 ? 5 : $n; + $n = $n > 20 ? 20 : $n; + echo "<textarea name=\"", htmlspecialchars($name), "\" rows=\"{$n}\" cols=\"75\"{$extra_str}>\n"; + echo htmlspecialchars($value); + echo "</textarea>\n"; + break; + case 'character': + case 'character[]': + $n = substr_count($value, "\n"); + $n = $n < 5 ? 5 : $n; + $n = $n > 20 ? 20 : $n; + echo "<textarea name=\"", htmlspecialchars($name), "\" rows=\"{$n}\" cols=\"35\"{$extra_str}>\n"; + echo htmlspecialchars($value); + echo "</textarea>\n"; + break; + default: + echo "<input name=\"", htmlspecialchars($name), "\" value=\"", htmlspecialchars($value), "\" size=\"35\"{$extra_str} />\n"; + break; + } + } + + /** + * Formats a value or expression for sql purposes + * @param $type The type of the field + * @param $format VALUE or EXPRESSION + * @param $value The actual value entered in the field. Can be NULL + * @return The suitably quoted and escaped value. + */ + function formatValue($type, $format, $value) { + switch ($type) { + case 'bool': + case 'boolean': + if ($value == 't') + return 'TRUE'; + elseif ($value == 'f') + return 'FALSE'; + elseif ($value == '') + return 'NULL'; + else + return $value; + break; + default: + // Checking variable fields is difficult as there might be a size + // attribute... + if (strpos($type, 'time') === 0) { + // Assume it's one of the time types... + if ($value == '') return "''"; + elseif (strcasecmp($value, 'CURRENT_TIMESTAMP') == 0 + || strcasecmp($value, 'CURRENT_TIME') == 0 + || strcasecmp($value, 'CURRENT_DATE') == 0 + || strcasecmp($value, 'LOCALTIME') == 0 + || strcasecmp($value, 'LOCALTIMESTAMP') == 0) { + return $value; + } + elseif ($format == 'EXPRESSION') + return $value; + else { + $this->clean($value); + return "'{$value}'"; + } + } + else { + if ($format == 'VALUE') { + $this->clean($value); + return "'{$value}'"; + } + return $value; + } + } + } + + /** + * Formats a type correctly for display. Postgres 7.0 had no 'format_type' + * built-in function, and hence we need to do it manually. + * @param $typname The name of the type + * @param $typmod The contents of the typmod field + */ + function formatType($typname, $typmod) { + // This is a specific constant in the 7.0 source + $varhdrsz = 4; + + // If the first character is an underscore, it's an array type + $is_array = false; + if (substr($typname, 0, 1) == '_') { + $is_array = true; + $typname = substr($typname, 1); + } + + // Show lengths on bpchar and varchar + if ($typname == 'bpchar') { + $len = $typmod - $varhdrsz; + $temp = 'character'; + if ($len > 1) + $temp .= "({$len})"; + } + elseif ($typname == 'varchar') { + $temp = 'character varying'; + if ($typmod != -1) + $temp .= "(" . ($typmod - $varhdrsz) . ")"; + } + elseif ($typname == 'numeric') { + $temp = 'numeric'; + if ($typmod != -1) { + $tmp_typmod = $typmod - $varhdrsz; + $precision = ($tmp_typmod >> 16) & 0xffff; + $scale = $tmp_typmod & 0xffff; + $temp .= "({$precision}, {$scale})"; + } + } + else $temp = $typname; + + // Add array qualifier if it's an array + if ($is_array) $temp .= '[]'; + + return $temp; + } + + // Help functions + + /** + * Fetch a URL (or array of URLs) for a given help page. + */ + function getHelp($help) { + $this->getHelpPages(); + + if (isset($this->help_page[$help])) { + if (is_array($this->help_page[$help])) { + $urls = array(); + foreach ($this->help_page[$help] as $link) { + $urls[] = $this->help_base . $link; + } + return $urls; + } else + return $this->help_base . $this->help_page[$help]; + } else + return null; + } + + function getHelpPages() { + include_once('./help/PostgresDoc95.php'); + return $this->help_page; + } + + // Database functions + + /** + * Return all information about a particular database + * @param $database The name of the database to retrieve + * @return The database info + */ + function getDatabase($database) { + $this->clean($database); + $sql = "SELECT * FROM pg_database WHERE datname='{$database}'"; + return $this->selectSet($sql); + } + + /** + * Return all database available on the server + * @param $currentdatabase database name that should be on top of the resultset + * + * @return A list of databases, sorted alphabetically + */ + function getDatabases($currentdatabase = NULL) { + global $conf, $misc; + + $server_info = $misc->getServerInfo(); + + if (isset($conf['owned_only']) && $conf['owned_only'] && !$this->isSuperUser()) { + $username = $server_info['username']; + $this->clean($username); + $clause = " AND pr.rolname='{$username}'"; + } + else $clause = ''; + + if ($currentdatabase != NULL) { + $this->clean($currentdatabase); + $orderby = "ORDER BY pdb.datname = '{$currentdatabase}' DESC, pdb.datname"; + } + else + $orderby = "ORDER BY pdb.datname"; + + if (!$conf['show_system']) + $where = ' AND NOT pdb.datistemplate'; + else + $where = ' AND pdb.datallowconn'; + + $sql = " + SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid AND pd.classoid='pg_database'::regclass) AS datcomment, + (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace, + CASE WHEN pg_catalog.has_database_privilege(current_user, pdb.oid, 'CONNECT') + THEN pg_catalog.pg_database_size(pdb.oid) + ELSE -1 -- set this magic value, which we will convert to no access later + END as dbsize, pdb.datcollate, pdb.datctype + FROM pg_catalog.pg_database pdb + LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid) + WHERE true + {$where} + {$clause} + {$orderby}"; + + return $this->selectSet($sql); + } + + /** + * Return the database comment of a db from the shared description table + * @param string $database the name of the database to get the comment for + * @return recordset of the db comment info + */ + function getDatabaseComment($database) { + $this->clean($database); + $sql = "SELECT description FROM pg_catalog.pg_database JOIN pg_catalog.pg_shdescription ON (oid=objoid AND classoid='pg_database'::regclass) WHERE pg_database.datname = '{$database}' "; + return $this->selectSet($sql); + } + + /** + * Return the database owner of a db + * @param string $database the name of the database to get the owner for + * @return recordset of the db owner info + */ + function getDatabaseOwner($database) { + $this->clean($database); + $sql = "SELECT usename FROM pg_user, pg_database WHERE pg_user.usesysid = pg_database.datdba AND pg_database.datname = '{$database}' "; + return $this->selectSet($sql); + } + + /** + * Returns the current database encoding + * @return The encoding. eg. SQL_ASCII, UTF-8, etc. + */ + function getDatabaseEncoding() { + return pg_parameter_status($this->conn->_connectionID, 'server_encoding'); + } + + /** + * Returns the current default_with_oids setting + * @return default_with_oids setting + */ + function getDefaultWithOid() { + + $sql = "SHOW default_with_oids"; + + return $this->selectField($sql, 'default_with_oids'); + } + + /** + * Creates a database + * @param $database The name of the database to create + * @param $encoding Encoding of the database + * @param $tablespace (optional) The tablespace name + * @return 0 success + * @return -1 tablespace error + * @return -2 comment error + */ + function createDatabase($database, $encoding, $tablespace = '', $comment = '', $template = 'template1', + $lc_collate = '', $lc_ctype = '') + { + $this->fieldClean($database); + $this->clean($encoding); + $this->fieldClean($tablespace); + $this->fieldClean($template); + $this->clean($lc_collate); + $this->clean($lc_ctype); + + $sql = "CREATE DATABASE \"{$database}\" WITH TEMPLATE=\"{$template}\""; + + if ($encoding != '') $sql .= " ENCODING='{$encoding}'"; + if ($lc_collate != '') $sql .= " LC_COLLATE='{$lc_collate}'"; + if ($lc_ctype != '') $sql .= " LC_CTYPE='{$lc_ctype}'"; + + if ($tablespace != '' && $this->hasTablespaces()) $sql .= " TABLESPACE \"{$tablespace}\""; + + $status = $this->execute($sql); + if ($status != 0) return -1; + + if ($comment != '' && $this->hasSharedComments()) { + $status = $this->setComment('DATABASE',$database,'',$comment); + if ($status != 0) return -2; + } + + return 0; + } + + /** + * Renames a database, note that this operation cannot be + * performed on a database that is currently being connected to + * @param string $oldName name of database to rename + * @param string $newName new name of database + * @return int 0 on success + */ + function alterDatabaseRename($oldName, $newName) { + $this->fieldClean($oldName); + $this->fieldClean($newName); + + if ($oldName != $newName) { + $sql = "ALTER DATABASE \"{$oldName}\" RENAME TO \"{$newName}\""; + return $this->execute($sql); + } + else //just return success, we're not going to do anything + return 0; + } + + /** + * Drops a database + * @param $database The name of the database to drop + * @return 0 success + */ + function dropDatabase($database) { + $this->fieldClean($database); + $sql = "DROP DATABASE \"{$database}\""; + return $this->execute($sql); + } + + /** + * Changes ownership of a database + * This can only be done by a superuser or the owner of the database + * @param string $dbName database to change ownership of + * @param string $newOwner user that will own the database + * @return int 0 on success + */ + function alterDatabaseOwner($dbName, $newOwner) { + $this->fieldClean($dbName); + $this->fieldClean($newOwner); + + $sql = "ALTER DATABASE \"{$dbName}\" OWNER TO \"{$newOwner}\""; + return $this->execute($sql); + } + + /** + * Alters a database + * the multiple return vals are for postgres 8+ which support more functionality in alter database + * @param $dbName The name of the database + * @param $newName new name for the database + * @param $newOwner The new owner for the database + * @return 0 success + * @return -1 transaction error + * @return -2 owner error + * @return -3 rename error + * @return -4 comment error + */ + function alterDatabase($dbName, $newName, $newOwner = '', $comment = '') { + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + if ($dbName != $newName) { + $status = $this->alterDatabaseRename($dbName, $newName); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + $dbName = $newName; + } + + if ($newOwner != '') { + $status = $this->alterDatabaseOwner($newName, $newOwner); + if ($status != 0) { + $this->rollbackTransaction(); + return -2; + } + } + + $this->fieldClean($dbName); + $status = $this->setComment('DATABASE', $dbName, '', $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -4; + } + return $this->endTransaction(); + } + + /** + * Returns prepared transactions information + * @param $database (optional) Find only prepared transactions executed in a specific database + * @return A recordset + */ + function getPreparedXacts($database = null) { + if ($database === null) + $sql = "SELECT * FROM pg_prepared_xacts"; + else { + $this->clean($database); + $sql = "SELECT transaction, gid, prepared, owner FROM pg_prepared_xacts + WHERE database='{$database}' ORDER BY owner"; + } + + return $this->selectSet($sql); + } + + /** + * Searches all system catalogs to find objects that match a certain name. + * @param $term The search term + * @param $filter The object type to restrict to ('' means no restriction) + * @return A recordset + */ + function findObject($term, $filter) { + global $conf; + + /*about escaping: + * SET standard_conforming_string is not available before 8.2 + * So we must use PostgreSQL specific notation :/ + * E'' notation is not available before 8.1 + * $$ is available since 8.0 + * Nothing specific from 7.4 + **/ + + // Escape search term for ILIKE match + $this->clean($term); + $this->clean($filter); + $term = str_replace('_', '\_', $term); + $term = str_replace('%', '\%', $term); + + // Exclude system relations if necessary + if (!$conf['show_system']) { + // XXX: The mention of information_schema here is in the wrong place, but + // it's the quickest fix to exclude the info schema from 7.4 + $where = " AND pn.nspname NOT LIKE \$_PATERN_\$pg\_%\$_PATERN_\$ AND pn.nspname != 'information_schema'"; + $lan_where = "AND pl.lanispl"; + } + else { + $where = ''; + $lan_where = ''; + } + + // Apply outer filter + $sql = ''; + if ($filter != '') { + $sql = "SELECT * FROM ("; + } + + $term = "\$_PATERN_\$%{$term}%\$_PATERN_\$"; + + $sql .= " + SELECT 'SCHEMA' AS type, oid, NULL AS schemaname, NULL AS relname, nspname AS name + FROM pg_catalog.pg_namespace pn WHERE nspname ILIKE {$term} {$where} + UNION ALL + SELECT CASE WHEN relkind='r' THEN 'TABLE' WHEN relkind='v' THEN 'VIEW' WHEN relkind='S' THEN 'SEQUENCE' END, pc.oid, + pn.nspname, NULL, pc.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn + WHERE pc.relnamespace=pn.oid AND relkind IN ('r', 'v', 'S') AND relname ILIKE {$term} {$where} + UNION ALL + SELECT CASE WHEN pc.relkind='r' THEN 'COLUMNTABLE' ELSE 'COLUMNVIEW' END, NULL, pn.nspname, pc.relname, pa.attname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_attribute pa WHERE pc.relnamespace=pn.oid AND pc.oid=pa.attrelid + AND pa.attname ILIKE {$term} AND pa.attnum > 0 AND NOT pa.attisdropped AND pc.relkind IN ('r', 'v') {$where} + UNION ALL + SELECT 'FUNCTION', pp.oid, pn.nspname, NULL, pp.proname || '(' || pg_catalog.oidvectortypes(pp.proargtypes) || ')' FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pn + WHERE pp.pronamespace=pn.oid AND NOT pp.proisagg AND pp.proname ILIKE {$term} {$where} + UNION ALL + SELECT 'INDEX', NULL, pn.nspname, pc.relname, pc2.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_index pi, pg_catalog.pg_class pc2 WHERE pc.relnamespace=pn.oid AND pc.oid=pi.indrelid + AND pi.indexrelid=pc2.oid + AND NOT EXISTS ( + SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = 'i' AND c.contype IN ('u', 'p') + ) + AND pc2.relname ILIKE {$term} {$where} + UNION ALL + SELECT 'CONSTRAINTTABLE', NULL, pn.nspname, pc.relname, pc2.conname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_constraint pc2 WHERE pc.relnamespace=pn.oid AND pc.oid=pc2.conrelid AND pc2.conrelid != 0 + AND CASE WHEN pc2.contype IN ('f', 'c') THEN TRUE ELSE NOT EXISTS ( + SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = 'i' AND c.contype IN ('u', 'p') + ) END + AND pc2.conname ILIKE {$term} {$where} + UNION ALL + SELECT 'CONSTRAINTDOMAIN', pt.oid, pn.nspname, pt.typname, pc.conname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn, + pg_catalog.pg_constraint pc WHERE pt.typnamespace=pn.oid AND pt.oid=pc.contypid AND pc.contypid != 0 + AND pc.conname ILIKE {$term} {$where} + UNION ALL + SELECT 'TRIGGER', NULL, pn.nspname, pc.relname, pt.tgname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_trigger pt WHERE pc.relnamespace=pn.oid AND pc.oid=pt.tgrelid + AND ( pt.tgconstraint = 0 OR NOT EXISTS + (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pt.tableoid AND d.objid = pt.oid AND d.deptype = 'i' AND c.contype = 'f')) + AND pt.tgname ILIKE {$term} {$where} + UNION ALL + SELECT 'RULETABLE', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r + JOIN pg_catalog.pg_class c ON c.oid = r.ev_class + LEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = c.relnamespace + WHERE c.relkind='r' AND r.rulename != '_RETURN' AND r.rulename ILIKE {$term} {$where} + UNION ALL + SELECT 'RULEVIEW', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r + JOIN pg_catalog.pg_class c ON c.oid = r.ev_class + LEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = c.relnamespace + WHERE c.relkind='v' AND r.rulename != '_RETURN' AND r.rulename ILIKE {$term} {$where} + "; + + // Add advanced objects if show_advanced is set + if ($conf['show_advanced']) { + $sql .= " + UNION ALL + SELECT CASE WHEN pt.typtype='d' THEN 'DOMAIN' ELSE 'TYPE' END, pt.oid, pn.nspname, NULL, + pt.typname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn + WHERE pt.typnamespace=pn.oid AND typname ILIKE {$term} + AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) + {$where} + UNION ALL + SELECT 'OPERATOR', po.oid, pn.nspname, NULL, po.oprname FROM pg_catalog.pg_operator po, pg_catalog.pg_namespace pn + WHERE po.oprnamespace=pn.oid AND oprname ILIKE {$term} {$where} + UNION ALL + SELECT 'CONVERSION', pc.oid, pn.nspname, NULL, pc.conname FROM pg_catalog.pg_conversion pc, + pg_catalog.pg_namespace pn WHERE pc.connamespace=pn.oid AND conname ILIKE {$term} {$where} + UNION ALL + SELECT 'LANGUAGE', pl.oid, NULL, NULL, pl.lanname FROM pg_catalog.pg_language pl + WHERE lanname ILIKE {$term} {$lan_where} + UNION ALL + SELECT DISTINCT ON (p.proname) 'AGGREGATE', p.oid, pn.nspname, NULL, p.proname FROM pg_catalog.pg_proc p + LEFT JOIN pg_catalog.pg_namespace pn ON p.pronamespace=pn.oid + WHERE p.proisagg AND p.proname ILIKE {$term} {$where} + UNION ALL + SELECT DISTINCT ON (po.opcname) 'OPCLASS', po.oid, pn.nspname, NULL, po.opcname FROM pg_catalog.pg_opclass po, + pg_catalog.pg_namespace pn WHERE po.opcnamespace=pn.oid + AND po.opcname ILIKE {$term} {$where} + "; + } + // Otherwise just add domains + else { + $sql .= " + UNION ALL + SELECT 'DOMAIN', pt.oid, pn.nspname, NULL, + pt.typname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn + WHERE pt.typnamespace=pn.oid AND pt.typtype='d' AND typname ILIKE {$term} + AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) + {$where} + "; + } + + if ($filter != '') { + // We use like to make RULE, CONSTRAINT and COLUMN searches work + $sql .= ") AS sub WHERE type LIKE '{$filter}%' "; + } + + $sql .= "ORDER BY type, schemaname, relname, name"; + + return $this->selectSet($sql); + } + + /** + * Returns all available variable information. + * @return A recordset + */ + function getVariables() { + $sql = "SHOW ALL"; + + return $this->selectSet($sql); + } + + // Schema functons + + /** + * Return all schemas in the current database. + * @return All schemas, sorted alphabetically + */ + function getSchemas() { + global $conf; + + if (!$conf['show_system']) { + $where = "WHERE nspname NOT LIKE 'pg@_%' ESCAPE '@' AND nspname != 'information_schema'"; + + } + else $where = "WHERE nspname !~ '^pg_t(emp_[0-9]+|oast)$'"; + $sql = " + SELECT pn.nspname, pu.rolname AS nspowner, + pg_catalog.obj_description(pn.oid, 'pg_namespace') AS nspcomment + FROM pg_catalog.pg_namespace pn + LEFT JOIN pg_catalog.pg_roles pu ON (pn.nspowner = pu.oid) + {$where} + ORDER BY nspname"; + + return $this->selectSet($sql); + } + + /** + * Return all information relating to a schema + * @param $schema The name of the schema + * @return Schema information + */ + function getSchemaByName($schema) { + $this->clean($schema); + $sql = " + SELECT nspname, nspowner, r.rolname AS ownername, nspacl, + pg_catalog.obj_description(pn.oid, 'pg_namespace') as nspcomment + FROM pg_catalog.pg_namespace pn + LEFT JOIN pg_roles as r ON pn.nspowner = r.oid + WHERE nspname='{$schema}'"; + return $this->selectSet($sql); + } + + /** + * Sets the current working schema. Will also set Class variable. + * @param $schema The the name of the schema to work in + * @return 0 success + */ + function setSchema($schema) { + // Get the current schema search path, including 'pg_catalog'. + $search_path = $this->getSearchPath(); + // Prepend $schema to search path + array_unshift($search_path, $schema); + $status = $this->setSearchPath($search_path); + if ($status == 0) { + $this->_schema = $schema; + return 0; + } + else return $status; + } + + /** + * Sets the current schema search path + * @param $paths An array of schemas in required search order + * @return 0 success + * @return -1 Array not passed + * @return -2 Array must contain at least one item + */ + function setSearchPath($paths) { + if (!is_array($paths)) return -1; + elseif (sizeof($paths) == 0) return -2; + elseif (sizeof($paths) == 1 && $paths[0] == '') { + // Need to handle empty paths in some cases + $paths[0] = 'pg_catalog'; + } + + // Loop over all the paths to check that none are empty + $temp = array(); + foreach ($paths as $schema) { + if ($schema != '') $temp[] = $schema; + } + $this->fieldArrayClean($temp); + + $sql = 'SET SEARCH_PATH TO "' . implode('","', $temp) . '"'; + + return $this->execute($sql); + } + + /** + * Creates a new schema. + * @param $schemaname The name of the schema to create + * @param $authorization (optional) The username to create the schema for. + * @param $comment (optional) If omitted, defaults to nothing + * @return 0 success + */ + function createSchema($schemaname, $authorization = '', $comment = '') { + $this->fieldClean($schemaname); + $this->fieldClean($authorization); + + $sql = "CREATE SCHEMA \"{$schemaname}\""; + if ($authorization != '') $sql .= " AUTHORIZATION \"{$authorization}\""; + + if ($comment != '') { + $status = $this->beginTransaction(); + if ($status != 0) return -1; + } + + // Create the new schema + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Set the comment + if ($comment != '') { + $status = $this->setComment('SCHEMA', $schemaname, '', $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + return $this->endTransaction(); + } + + return 0; + } + + /** + * Updates a schema. + * @param $schemaname The name of the schema to drop + * @param $comment The new comment for this schema + * @param $owner The new owner for this schema + * @return 0 success + */ + function updateSchema($schemaname, $comment, $name, $owner) { + $this->fieldClean($schemaname); + $this->fieldClean($name); + $this->fieldClean($owner); + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $status = $this->setComment('SCHEMA', $schemaname, '', $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $schema_rs = $this->getSchemaByName($schemaname); + /* Only if the owner change */ + if ($schema_rs->fields['ownername'] != $owner) { + $sql = "ALTER SCHEMA \"{$schemaname}\" OWNER TO \"{$owner}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + } + + // Only if the name has changed + if ($name != $schemaname) { + $sql = "ALTER SCHEMA \"{$schemaname}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + } + + return $this->endTransaction(); + } + + /** + * Drops a schema. + * @param $schemaname The name of the schema to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropSchema($schemaname, $cascade) { + $this->fieldClean($schemaname); + + $sql = "DROP SCHEMA \"{$schemaname}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * Return the current schema search path + * @return Array of schema names + */ + function getSearchPath() { + $sql = 'SELECT current_schemas(false) AS search_path'; + + return $this->phpArray($this->selectField($sql, 'search_path')); + } + + // Table functions + + /** + * Checks to see whether or not a table has a unique id column + * @param $table The table name + * @return True if it has a unique id, false otherwise + * @return null error + **/ + function hasObjectID($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT relhasoids FROM pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')"; + + $rs = $this->selectSet($sql); + if ($rs->recordCount() != 1) return null; + else { + $rs->fields['relhasoids'] = $this->phpBool($rs->fields['relhasoids']); + return $rs->fields['relhasoids']; + } + } + + /** + * Returns table information + * @param $table The name of the table + * @return A recordset + */ + function getTable($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = " + SELECT + c.relname, n.nspname, u.usename AS relowner, + pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment, + (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace + WHERE c.relkind = 'r' + AND n.nspname = '{$c_schema}' + AND n.oid = c.relnamespace + AND c.relname = '{$table}'"; + + return $this->selectSet($sql); + } + + /** + * Return all tables in current database (and schema) + * @param $all True to fetch all tables, false for just in current schema + * @return All tables, sorted alphabetically + */ + function getTables($all = false) { + $c_schema = $this->_schema; + $this->clean($c_schema); + if ($all) { + // Exclude pg_catalog and information_schema tables + $sql = "SELECT schemaname AS nspname, tablename AS relname, tableowner AS relowner + FROM pg_catalog.pg_tables + WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') + ORDER BY schemaname, tablename"; + } else { + $sql = "SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, + pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment, + reltuples::bigint, + (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace + WHERE c.relkind = 'r' + AND nspname='{$c_schema}' + ORDER BY c.relname"; + } + + return $this->selectSet($sql); + } + + /** + * Retrieve the attribute definition of a table + * @param $table The name of the table + * @param $field (optional) The name of a field to return + * @return All attributes in order + */ + function getTableAttributes($table, $field = '') { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + $this->clean($field); + + if ($field == '') { + // This query is made much more complex by the addition of the 'attisserial' field. + // The subquery to get that field checks to see if there is an internally dependent + // sequence on the field. + $sql = " + SELECT + a.attname, a.attnum, + pg_catalog.format_type(a.atttypid, a.atttypmod) as type, + a.atttypmod, + a.attnotnull, a.atthasdef, pg_catalog.pg_get_expr(adef.adbin, adef.adrelid, true) as adsrc, + a.attstattarget, a.attstorage, t.typstorage, + ( + SELECT 1 FROM pg_catalog.pg_depend pd, pg_catalog.pg_class pc + WHERE pd.objid=pc.oid + AND pd.classid=pc.tableoid + AND pd.refclassid=pc.tableoid + AND pd.refobjid=a.attrelid + AND pd.refobjsubid=a.attnum + AND pd.deptype='i' + AND pc.relkind='S' + ) IS NOT NULL AS attisserial, + pg_catalog.col_description(a.attrelid, a.attnum) AS comment + FROM + pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_attrdef adef + ON a.attrelid=adef.adrelid + AND a.attnum=adef.adnum + LEFT JOIN pg_catalog.pg_type t ON a.atttypid=t.oid + WHERE + a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE + nspname = '{$c_schema}')) + AND a.attnum > 0 AND NOT a.attisdropped + ORDER BY a.attnum"; + } + else { + $sql = " + SELECT + a.attname, a.attnum, + pg_catalog.format_type(a.atttypid, a.atttypmod) as type, + pg_catalog.format_type(a.atttypid, NULL) as base_type, + a.atttypmod, + a.attnotnull, a.atthasdef, pg_catalog.pg_get_expr(adef.adbin, adef.adrelid, true) as adsrc, + a.attstattarget, a.attstorage, t.typstorage, + pg_catalog.col_description(a.attrelid, a.attnum) AS comment + FROM + pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_attrdef adef + ON a.attrelid=adef.adrelid + AND a.attnum=adef.adnum + LEFT JOIN pg_catalog.pg_type t ON a.atttypid=t.oid + WHERE + a.attrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE + nspname = '{$c_schema}')) + AND a.attname = '{$field}'"; + } + + return $this->selectSet($sql); + } + + /** + * Finds the names and schemas of parent tables (in order) + * @param $table The table to find the parents for + * @return A recordset + */ + function getTableParents($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = " + SELECT + pn.nspname, relname + FROM + pg_catalog.pg_class pc, pg_catalog.pg_inherits pi, pg_catalog.pg_namespace pn + WHERE + pc.oid=pi.inhparent + AND pc.relnamespace=pn.oid + AND pi.inhrelid = (SELECT oid from pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$c_schema}')) + ORDER BY + pi.inhseqno + "; + + return $this->selectSet($sql); + } + + /** + * Finds the names and schemas of child tables + * @param $table The table to find the children for + * @return A recordset + */ + function getTableChildren($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = " + SELECT + pn.nspname, relname + FROM + pg_catalog.pg_class pc, pg_catalog.pg_inherits pi, pg_catalog.pg_namespace pn + WHERE + pc.oid=pi.inhrelid + AND pc.relnamespace=pn.oid + AND pi.inhparent = (SELECT oid from pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = '{$c_schema}')) + "; + + return $this->selectSet($sql); + } + + /** + * Returns the SQL definition for the table. + * @pre MUST be run within a transaction + * @param $table The table to define + * @param $clean True to issue drop command, false otherwise + * @return A string containing the formatted SQL code + * @return null On error + */ + function getTableDefPrefix($table, $clean = false) { + // Fetch table + $t = $this->getTable($table); + if (!is_object($t) || $t->recordCount() != 1) { + $this->rollbackTransaction(); + return null; + } + $this->fieldClean($t->fields['relname']); + $this->fieldClean($t->fields['nspname']); + + // Fetch attributes + $atts = $this->getTableAttributes($table); + if (!is_object($atts)) { + $this->rollbackTransaction(); + return null; + } + + // Fetch constraints + $cons = $this->getConstraints($table); + if (!is_object($cons)) { + $this->rollbackTransaction(); + return null; + } + + // Output a reconnect command to create the table as the correct user + $sql = $this->getChangeUserSQL($t->fields['relowner']) . "\n\n"; + + // Set schema search path + $sql .= "SET search_path = \"{$t->fields['nspname']}\", pg_catalog;\n\n"; + + // Begin CREATE TABLE definition + $sql .= "-- Definition\n\n"; + // DROP TABLE must be fully qualified in case a table with the same name exists + // in pg_catalog. + if (!$clean) $sql .= "-- "; + $sql .= "DROP TABLE "; + $sql .= "\"{$t->fields['nspname']}\".\"{$t->fields['relname']}\";\n"; + $sql .= "CREATE TABLE \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" (\n"; + + // Output all table columns + $col_comments_sql = ''; // Accumulate comments on columns + $num = $atts->recordCount() + $cons->recordCount(); + $i = 1; + while (!$atts->EOF) { + $this->fieldClean($atts->fields['attname']); + $sql .= " \"{$atts->fields['attname']}\""; + // Dump SERIAL and BIGSERIAL columns correctly + if ($this->phpBool($atts->fields['attisserial']) && + ($atts->fields['type'] == 'integer' || $atts->fields['type'] == 'bigint')) { + if ($atts->fields['type'] == 'integer') + $sql .= " SERIAL"; + else + $sql .= " BIGSERIAL"; + } + else { + $sql .= " " . $this->formatType($atts->fields['type'], $atts->fields['atttypmod']); + + // Add NOT NULL if necessary + if ($this->phpBool($atts->fields['attnotnull'])) + $sql .= " NOT NULL"; + // Add default if necessary + if ($atts->fields['adsrc'] !== null) + $sql .= " DEFAULT {$atts->fields['adsrc']}"; + } + + // Output comma or not + if ($i < $num) $sql .= ",\n"; + else $sql .= "\n"; + + // Does this column have a comment? + if ($atts->fields['comment'] !== null) { + $this->clean($atts->fields['comment']); + $col_comments_sql .= "COMMENT ON COLUMN \"{$t->fields['relname']}\".\"{$atts->fields['attname']}\" IS '{$atts->fields['comment']}';\n"; + } + + $atts->moveNext(); + $i++; + } + // Output all table constraints + while (!$cons->EOF) { + $this->fieldClean($cons->fields['conname']); + $sql .= " CONSTRAINT \"{$cons->fields['conname']}\" "; + // Nasty hack to support pre-7.4 PostgreSQL + if ($cons->fields['consrc'] !== null) + $sql .= $cons->fields['consrc']; + else { + switch ($cons->fields['contype']) { + case 'p': + $keys = $this->getAttributeNames($table, explode(' ', $cons->fields['indkey'])); + $sql .= "PRIMARY KEY (" . join(',', $keys) . ")"; + break; + case 'u': + $keys = $this->getAttributeNames($table, explode(' ', $cons->fields['indkey'])); + $sql .= "UNIQUE (" . join(',', $keys) . ")"; + break; + default: + // Unrecognised constraint + $this->rollbackTransaction(); + return null; + } + } + + // Output comma or not + if ($i < $num) $sql .= ",\n"; + else $sql .= "\n"; + + $cons->moveNext(); + $i++; + } + + $sql .= ")"; + + // @@@@ DUMP CLUSTERING INFORMATION + + // Inherits + /* + * XXX: This is currently commented out as handling inheritance isn't this simple. + * You also need to make sure you don't dump inherited columns and defaults, as well + * as inherited NOT NULL and CHECK constraints. So for the time being, we just do + * not claim to support inheritance. + $parents = $this->getTableParents($table); + if ($parents->recordCount() > 0) { + $sql .= " INHERITS ("; + while (!$parents->EOF) { + $this->fieldClean($parents->fields['relname']); + // Qualify the parent table if it's in another schema + if ($parents->fields['schemaname'] != $this->_schema) { + $this->fieldClean($parents->fields['schemaname']); + $sql .= "\"{$parents->fields['schemaname']}\"."; + } + $sql .= "\"{$parents->fields['relname']}\""; + + $parents->moveNext(); + if (!$parents->EOF) $sql .= ', '; + } + $sql .= ")"; + } + */ + + // Handle WITHOUT OIDS + if ($this->hasObjectID($table)) + $sql .= " WITH OIDS"; + else + $sql .= " WITHOUT OIDS"; + + $sql .= ";\n"; + + // Column storage and statistics + $atts->moveFirst(); + $first = true; + while (!$atts->EOF) { + $this->fieldClean($atts->fields['attname']); + // Statistics first + if ($atts->fields['attstattarget'] >= 0) { + if ($first) { + $sql .= "\n"; + $first = false; + } + $sql .= "ALTER TABLE ONLY \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" ALTER COLUMN \"{$atts->fields['attname']}\" SET STATISTICS {$atts->fields['attstattarget']};\n"; + } + // Then storage + if ($atts->fields['attstorage'] != $atts->fields['typstorage']) { + switch ($atts->fields['attstorage']) { + case 'p': + $storage = 'PLAIN'; + break; + case 'e': + $storage = 'EXTERNAL'; + break; + case 'm': + $storage = 'MAIN'; + break; + case 'x': + $storage = 'EXTENDED'; + break; + default: + // Unknown storage type + $this->rollbackTransaction(); + return null; + } + $sql .= "ALTER TABLE ONLY \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" ALTER COLUMN \"{$atts->fields['attname']}\" SET STORAGE {$storage};\n"; + } + + $atts->moveNext(); + } + + // Comment + if ($t->fields['relcomment'] !== null) { + $this->clean($t->fields['relcomment']); + $sql .= "\n-- Comment\n\n"; + $sql .= "COMMENT ON TABLE \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" IS '{$t->fields['relcomment']}';\n"; + } + + // Add comments on columns, if any + if ($col_comments_sql != '') $sql .= $col_comments_sql; + + // Privileges + $privs = $this->getPrivileges($table, 'table'); + if (!is_array($privs)) { + $this->rollbackTransaction(); + return null; + } + + if (sizeof($privs) > 0) { + $sql .= "\n-- Privileges\n\n"; + /* + * Always start with REVOKE ALL FROM PUBLIC, so that we don't have to + * wire-in knowledge about the default public privileges for different + * kinds of objects. + */ + $sql .= "REVOKE ALL ON TABLE \"{$t->fields['nspname']}\".\"{$t->fields['relname']}\" FROM PUBLIC;\n"; + foreach ($privs as $v) { + // Get non-GRANT OPTION privs + $nongrant = array_diff($v[2], $v[4]); + + // Skip empty or owner ACEs + if (sizeof($v[2]) == 0 || ($v[0] == 'user' && $v[1] == $t->fields['relowner'])) continue; + + // Change user if necessary + if ($this->hasGrantOption() && $v[3] != $t->fields['relowner']) { + $grantor = $v[3]; + $this->clean($grantor); + $sql .= "SET SESSION AUTHORIZATION '{$grantor}';\n"; + } + + // Output privileges with no GRANT OPTION + $sql .= "GRANT " . join(', ', $nongrant) . " ON TABLE \"{$t->fields['relname']}\" TO "; + switch ($v[0]) { + case 'public': + $sql .= "PUBLIC;\n"; + break; + case 'user': + $this->fieldClean($v[1]); + $sql .= "\"{$v[1]}\";\n"; + break; + case 'group': + $this->fieldClean($v[1]); + $sql .= "GROUP \"{$v[1]}\";\n"; + break; + default: + // Unknown privilege type - fail + $this->rollbackTransaction(); + return null; + } + + // Reset user if necessary + if ($this->hasGrantOption() && $v[3] != $t->fields['relowner']) { + $sql .= "RESET SESSION AUTHORIZATION;\n"; + } + + // Output privileges with GRANT OPTION + + // Skip empty or owner ACEs + if (!$this->hasGrantOption() || sizeof($v[4]) == 0) continue; + + // Change user if necessary + if ($this->hasGrantOption() && $v[3] != $t->fields['relowner']) { + $grantor = $v[3]; + $this->clean($grantor); + $sql .= "SET SESSION AUTHORIZATION '{$grantor}';\n"; + } + + $sql .= "GRANT " . join(', ', $v[4]) . " ON \"{$t->fields['relname']}\" TO "; + switch ($v[0]) { + case 'public': + $sql .= "PUBLIC"; + break; + case 'user': + $this->fieldClean($v[1]); + $sql .= "\"{$v[1]}\""; + break; + case 'group': + $this->fieldClean($v[1]); + $sql .= "GROUP \"{$v[1]}\""; + break; + default: + // Unknown privilege type - fail + return null; + } + $sql .= " WITH GRANT OPTION;\n"; + + // Reset user if necessary + if ($this->hasGrantOption() && $v[3] != $t->fields['relowner']) { + $sql .= "RESET SESSION AUTHORIZATION;\n"; + } + + } + } + + // Add a newline to separate data that follows (if any) + $sql .= "\n"; + + return $sql; + } + + /** + * Returns extra table definition information that is most usefully + * dumped after the table contents for speed and efficiency reasons + * @param $table The table to define + * @return A string containing the formatted SQL code + * @return null On error + */ + function getTableDefSuffix($table) { + $sql = ''; + + // Indexes + $indexes = $this->getIndexes($table); + if (!is_object($indexes)) { + $this->rollbackTransaction(); + return null; + } + + if ($indexes->recordCount() > 0) { + $sql .= "\n-- Indexes\n\n"; + while (!$indexes->EOF) { + $sql .= $indexes->fields['inddef'] . ";\n"; + + $indexes->moveNext(); + } + } + + // Triggers + $triggers = $this->getTriggers($table); + if (!is_object($triggers)) { + $this->rollbackTransaction(); + return null; + } + + if ($triggers->recordCount() > 0) { + $sql .= "\n-- Triggers\n\n"; + while (!$triggers->EOF) { + + $sql .= $triggers->fields['tgdef']; + $sql .= ";\n"; + + $triggers->moveNext(); + } + } + + // Rules + $rules = $this->getRules($table); + if (!is_object($rules)) { + $this->rollbackTransaction(); + return null; + } + + if ($rules->recordCount() > 0) { + $sql .= "\n-- Rules\n\n"; + while (!$rules->EOF) { + $sql .= $rules->fields['definition'] . "\n"; + + $rules->moveNext(); + } + } + + return $sql; + } + + /** + * Creates a new table in the database + * @param $name The name of the table + * @param $fields The number of fields + * @param $field An array of field names + * @param $type An array of field types + * @param $array An array of '' or '[]' for each type if it's an array or not + * @param $length An array of field lengths + * @param $notnull An array of not null + * @param $default An array of default values + * @param $withoutoids True if WITHOUT OIDS, false otherwise + * @param $colcomment An array of comments + * @param $comment Table comment + * @param $tablespace The tablespace name ('' means none/default) + * @param $uniquekey An Array indicating the fields that are unique (those indexes that are set) + * @param $primarykey An Array indicating the field used for the primarykey (those indexes that are set) + * @return 0 success + * @return -1 no fields supplied + */ + function createTable($name, $fields, $field, $type, $array, $length, $notnull, + $default, $withoutoids, $colcomment, $tblcomment, $tablespace, + $uniquekey, $primarykey) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + $found = false; + $first = true; + $comment_sql = ''; //Accumulate comments for the columns + $sql = "CREATE TABLE \"{$f_schema}\".\"{$name}\" ("; + for ($i = 0; $i < $fields; $i++) { + $this->fieldClean($field[$i]); + $this->clean($type[$i]); + $this->clean($length[$i]); + $this->clean($colcomment[$i]); + + // Skip blank columns - for user convenience + if ($field[$i] == '' || $type[$i] == '') continue; + // If not the first column, add a comma + if (!$first) $sql .= ", "; + else $first = false; + + switch ($type[$i]) { + // Have to account for weird placing of length for with/without + // time zone types + case 'timestamp with time zone': + case 'timestamp without time zone': + $qual = substr($type[$i], 9); + $sql .= "\"{$field[$i]}\" timestamp"; + if ($length[$i] != '') $sql .= "({$length[$i]})"; + $sql .= $qual; + break; + case 'time with time zone': + case 'time without time zone': + $qual = substr($type[$i], 4); + $sql .= "\"{$field[$i]}\" time"; + if ($length[$i] != '') $sql .= "({$length[$i]})"; + $sql .= $qual; + break; + default: + $sql .= "\"{$field[$i]}\" {$type[$i]}"; + if ($length[$i] != '') $sql .= "({$length[$i]})"; + } + // Add array qualifier if necessary + if ($array[$i] == '[]') $sql .= '[]'; + // Add other qualifiers + if (!isset($primarykey[$i])) { + if (isset($uniquekey[$i])) $sql .= " UNIQUE"; + if (isset($notnull[$i])) $sql .= " NOT NULL"; + } + if ($default[$i] != '') $sql .= " DEFAULT {$default[$i]}"; + + if ($colcomment[$i] != '') $comment_sql .= "COMMENT ON COLUMN \"{$name}\".\"{$field[$i]}\" IS '{$colcomment[$i]}';\n"; + + $found = true; + } + + if (!$found) return -1; + + // PRIMARY KEY + $primarykeycolumns = array(); + for ($i = 0; $i < $fields; $i++) { + if (isset($primarykey[$i])) { + $primarykeycolumns[] = "\"{$field[$i]}\""; + } + } + if (count($primarykeycolumns) > 0) { + $sql .= ", PRIMARY KEY (" . implode(", ", $primarykeycolumns) . ")"; + } + + $sql .= ")"; + + // WITHOUT OIDS + if ($withoutoids) + $sql .= ' WITHOUT OIDS'; + else + $sql .= ' WITH OIDS'; + + // Tablespace + if ($this->hasTablespaces() && $tablespace != '') { + $this->fieldClean($tablespace); + $sql .= " TABLESPACE \"{$tablespace}\""; + } + + $status = $this->execute($sql); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + + if ($tblcomment != '') { + $status = $this->setComment('TABLE', '', $name, $tblcomment, true); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + } + + if ($comment_sql != '') { + $status = $this->execute($comment_sql); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + } + return $this->endTransaction(); + } + + /** + * Creates a new table in the database copying attribs and other properties from another table + * @param $name The name of the table + * @param $like an array giving the schema ans the name of the table from which attribs are copying from: + * array( + * 'table' => table name, + * 'schema' => the schema name, + * ) + * @param $defaults if true, copy the defaults values as well + * @param $constraints if true, copy the constraints as well (CHECK on table & attr) + * @param $tablespace The tablespace name ('' means none/default) + */ + function createTableLike($name, $like, $defaults = false, $constraints = false, $idx = false, $tablespace = '') { + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + $this->fieldClean($like['schema']); + $this->fieldClean($like['table']); + $like = "\"{$like['schema']}\".\"{$like['table']}\""; + + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + $sql = "CREATE TABLE \"{$f_schema}\".\"{$name}\" (LIKE {$like}"; + + if ($defaults) $sql .= " INCLUDING DEFAULTS"; + if ($this->hasCreateTableLikeWithConstraints() && $constraints) $sql .= " INCLUDING CONSTRAINTS"; + if ($this->hasCreateTableLikeWithIndexes() && $idx) $sql .= " INCLUDING INDEXES"; + + $sql .= ")"; + + if ($this->hasTablespaces() && $tablespace != '') { + $this->fieldClean($tablespace); + $sql .= " TABLESPACE \"{$tablespace}\""; + } + + $status = $this->execute($sql); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + + return $this->endTransaction(); + } + + /** + * Alter a table's name + * /!\ this function is called from _alterTable which take care of escaping fields + * @param $tblrs The table RecordSet returned by getTable() + * @param $name The new table's name + * @return 0 success + */ + function alterTableName($tblrs, $name = null) { + /* vars cleaned in _alterTable */ + // Rename (only if name has changed) + if (!empty($name) && ($name != $tblrs->fields['relname'])) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status == 0) + $tblrs->fields['relname'] = $name; + else + return $status; + } + return 0; + } + + /** + * Alter a table's owner + * /!\ this function is called from _alterTable which take care of escaping fields + * @param $tblrs The table RecordSet returned by getTable() + * @param $name The new table's owner + * @return 0 success + */ + function alterTableOwner($tblrs, $owner = null) { + /* vars cleaned in _alterTable */ + if (!empty($owner) && ($tblrs->fields['relowner'] != $owner)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + // If owner has been changed, then do the alteration. We are + // careful to avoid this generally as changing owner is a + // superuser only function. + $sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" OWNER TO \"{$owner}\""; + + return $this->execute($sql); + } + return 0; + } + + /** + * Alter a table's tablespace + * /!\ this function is called from _alterTable which take care of escaping fields + * @param $tblrs The table RecordSet returned by getTable() + * @param $name The new table's tablespace + * @return 0 success + */ + function alterTableTablespace($tblrs, $tablespace = null) { + /* vars cleaned in _alterTable */ + if (!empty($tablespace) && ($tblrs->fields['tablespace'] != $tablespace)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + + // If tablespace has been changed, then do the alteration. We + // don't want to do this unnecessarily. + $sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" SET TABLESPACE \"{$tablespace}\""; + + return $this->execute($sql); + } + return 0; + } + + /** + * Alter a table's schema + * /!\ this function is called from _alterTable which take care of escaping fields + * @param $tblrs The table RecordSet returned by getTable() + * @param $name The new table's schema + * @return 0 success + */ + function alterTableSchema($tblrs, $schema = null) { + /* vars cleaned in _alterTable */ + if (!empty($schema) && ($tblrs->fields['nspname'] != $schema)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + // If tablespace has been changed, then do the alteration. We + // don't want to do this unnecessarily. + $sql = "ALTER TABLE \"{$f_schema}\".\"{$tblrs->fields['relname']}\" SET SCHEMA \"{$schema}\""; + + return $this->execute($sql); + } + return 0; + } + + /** + * Protected method which alter a table + * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION + * @param $tblrs The table recordSet returned by getTable() + * @param $name The new name for the table + * @param $owner The new owner for the table + * @param $schema The new schema for the table + * @param $comment The comment on the table + * @param $tablespace The new tablespace for the table ('' means leave as is) + * @return 0 success + * @return -3 rename error + * @return -4 comment error + * @return -5 owner error + * @return -6 tablespace error + * @return -7 schema error + */ + protected + function _alterTable($tblrs, $name, $owner, $schema, $comment, $tablespace) { + + $this->fieldArrayClean($tblrs->fields); + + // Comment + $status = $this->setComment('TABLE', '', $tblrs->fields['relname'], $comment); + if ($status != 0) return -4; + + // Owner + $this->fieldClean($owner); + $status = $this->alterTableOwner($tblrs, $owner); + if ($status != 0) return -5; + + // Tablespace + $this->fieldClean($tablespace); + $status = $this->alterTableTablespace($tblrs, $tablespace); + if ($status != 0) return -6; + + // Rename + $this->fieldClean($name); + $status = $this->alterTableName($tblrs, $name); + if ($status != 0) return -3; + + // Schema + $this->fieldClean($schema); + $status = $this->alterTableSchema($tblrs, $schema); + if ($status != 0) return -7; + + return 0; + } + + /** + * Alter table properties + * @param $table The name of the table + * @param $name The new name for the table + * @param $owner The new owner for the table + * @param $schema The new schema for the table + * @param $comment The comment on the table + * @param $tablespace The new tablespace for the table ('' means leave as is) + * @return 0 success + * @return -1 transaction error + * @return -2 get existing table error + * @return $this->_alterTable error code + */ + function alterTable($table, $name, $owner, $schema, $comment, $tablespace) { + + $data = $this->getTable($table); + + if ($data->recordCount() != 1) + return -2; + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $status = $this->_alterTable($data, $name, $owner, $schema, $comment, $tablespace); + + if ($status != 0) { + $this->rollbackTransaction(); + return $status; + } + + return $this->endTransaction(); + } + + /** + * Returns the SQL for changing the current user + * @param $user The user to change to + * @return The SQL + */ + function getChangeUserSQL($user) { + $this->clean($user); + return "SET SESSION AUTHORIZATION '{$user}';"; + } + + /** + * Given an array of attnums and a relation, returns an array mapping + * attribute number to attribute name. + * @param $table The table to get attributes for + * @param $atts An array of attribute numbers + * @return An array mapping attnum to attname + * @return -1 $atts must be an array + * @return -2 wrong number of attributes found + */ + function getAttributeNames($table, $atts) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + $this->arrayClean($atts); + + if (!is_array($atts)) return -1; + + if (sizeof($atts) == 0) return array(); + + $sql = "SELECT attnum, attname FROM pg_catalog.pg_attribute WHERE + attrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' AND + relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) + AND attnum IN ('" . join("','", $atts) . "')"; + + $rs = $this->selectSet($sql); + if ($rs->recordCount() != sizeof($atts)) { + return -2; + } + else { + $temp = array(); + while (!$rs->EOF) { + $temp[$rs->fields['attnum']] = $rs->fields['attname']; + $rs->moveNext(); + } + return $temp; + } + } + + /** + * Empties a table in the database + * @param $table The table to be emptied + * @return 0 success + */ + function emptyTable($table) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + + $sql = "DELETE FROM \"{$f_schema}\".\"{$table}\""; + + return $this->execute($sql); + } + + /** + * Removes a table from the database + * @param $table The table to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropTable($table, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + + $sql = "DROP TABLE \"{$f_schema}\".\"{$table}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * Add a new column to a table + * @param $table The table to add to + * @param $column The name of the new column + * @param $type The type of the column + * @param $array True if array type, false otherwise + * @param $notnull True if NOT NULL, false otherwise + * @param $default The default for the column. '' for none. + * @param $length The optional size of the column (ie. 30 for varchar(30)) + * @return 0 success + */ + function addColumn($table, $column, $type, $array, $length, $notnull, $default, $comment) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($column); + $this->clean($type); + $this->clean($length); + + if ($length == '') + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" {$type}"; + else { + switch ($type) { + // Have to account for weird placing of length for with/without + // time zone types + case 'timestamp with time zone': + case 'timestamp without time zone': + $qual = substr($type, 9); + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" timestamp({$length}){$qual}"; + break; + case 'time with time zone': + case 'time without time zone': + $qual = substr($type, 4); + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" time({$length}){$qual}"; + break; + default: + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD COLUMN \"{$column}\" {$type}({$length})"; + } + } + + // Add array qualifier, if requested + if ($array) $sql .= '[]'; + + // If we have advanced column adding, add the extra qualifiers + if ($this->hasCreateFieldWithConstraints()) { + // NOT NULL clause + if ($notnull) $sql .= ' NOT NULL'; + + // DEFAULT clause + if ($default != '') $sql .= ' DEFAULT ' . $default; + } + + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $status = $this->setComment('COLUMN', $column, $table, $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + return $this->endTransaction(); + } + + /** + * Alters a column in a table + * @param $table The table in which the column resides + * @param $column The column to alter + * @param $name The new name for the column + * @param $notnull (boolean) True if not null, false otherwise + * @param $oldnotnull (boolean) True if column is already not null, false otherwise + * @param $default The new default for the column + * @param $olddefault The old default for the column + * @param $type The new type for the column + * @param $array True if array type, false otherwise + * @param $length The optional size of the column (ie. 30 for varchar(30)) + * @param $oldtype The old type for the column + * @param $comment Comment for the column + * @return 0 success + * @return -1 batch alteration failed + * @return -4 rename column error + * @return -5 comment error + * @return -6 transaction error + */ + function alterColumn($table, $column, $name, $notnull, $oldnotnull, $default, $olddefault, + $type, $length, $array, $oldtype, $comment) + { + // Begin transaction + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -6; + } + + // Rename the column, if it has been changed + if ($column != $name) { + $status = $this->renameColumn($table, $column, $name); + if ($status != 0) { + $this->rollbackTransaction(); + return -4; + } + } + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + $this->fieldClean($table); + $this->fieldClean($column); + + $toAlter = array(); + // Create the command for changing nullability + if ($notnull != $oldnotnull) { + $toAlter[] = "ALTER COLUMN \"{$name}\" ". (($notnull) ? 'SET' : 'DROP') . " NOT NULL"; + } + + // Add default, if it has changed + if ($default != $olddefault) { + if ($default == '') { + $toAlter[] = "ALTER COLUMN \"{$name}\" DROP DEFAULT"; + } + else { + $toAlter[] = "ALTER COLUMN \"{$name}\" SET DEFAULT {$default}"; + } + } + + // Add type, if it has changed + if ($length == '') + $ftype = $type; + else { + switch ($type) { + // Have to account for weird placing of length for with/without + // time zone types + case 'timestamp with time zone': + case 'timestamp without time zone': + $qual = substr($type, 9); + $ftype = "timestamp({$length}){$qual}"; + break; + case 'time with time zone': + case 'time without time zone': + $qual = substr($type, 4); + $ftype = "time({$length}){$qual}"; + break; + default: + $ftype = "{$type}({$length})"; + } + } + + // Add array qualifier, if requested + if ($array) $ftype .= '[]'; + + if ($ftype != $oldtype) { + $toAlter[] = "ALTER COLUMN \"{$name}\" TYPE {$ftype}"; + } + + // Attempt to process the batch alteration, if anything has been changed + if (!empty($toAlter)) { + // Initialise an empty SQL string + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" " + . implode(',', $toAlter); + + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + } + + // Update the comment on the column + $status = $this->setComment('COLUMN', $name, $table, $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -5; + } + + return $this->endTransaction(); + } + + /** + * Renames a column in a table + * @param $table The table containing the column to be renamed + * @param $column The column to be renamed + * @param $newName The new name for the column + * @return 0 success + */ + function renameColumn($table, $column, $newName) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($column); + $this->fieldClean($newName); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" RENAME COLUMN \"{$column}\" TO \"{$newName}\""; + + return $this->execute($sql); + } + + /** + * Sets default value of a column + * @param $table The table from which to drop + * @param $column The column name to set + * @param $default The new default value + * @return 0 success + */ + function setColumnDefault($table, $column, $default) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($column); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" SET DEFAULT {$default}"; + + return $this->execute($sql); + } + + /** + * Sets whether or not a column can contain NULLs + * @param $table The table that contains the column + * @param $column The column to alter + * @param $state True to set null, false to set not null + * @return 0 success + */ + function setColumnNull($table, $column, $state) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($column); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" " . (($state) ? 'DROP' : 'SET') . " NOT NULL"; + + return $this->execute($sql); + } + + /** + * Drops a column from a table + * @param $table The table from which to drop a column + * @param $column The column to be dropped + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropColumn($table, $column, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($column); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" DROP COLUMN \"{$column}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * Drops default value of a column + * @param $table The table from which to drop + * @param $column The column name to drop default + * @return 0 success + */ + function dropColumnDefault($table, $column) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($column); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ALTER COLUMN \"{$column}\" DROP DEFAULT"; + + return $this->execute($sql); + } + + /** + * Sets up the data object for a dump. eg. Starts the appropriate + * transaction, sets variables, etc. + * @return 0 success + */ + function beginDump() { + // Begin serializable transaction (to dump consistent data) + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + // Set serializable + $sql = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE"; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Set datestyle to ISO + $sql = "SET DATESTYLE = ISO"; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Set extra_float_digits to 2 + $sql = "SET extra_float_digits TO 2"; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + return 0; + } + + /** + * Ends the data object for a dump. + * @return 0 success + */ + function endDump() { + return $this->endTransaction(); + } + + /** + * Returns a recordset of all columns in a relation. Used for data export. + * @@ Note: Really needs to use a cursor + * @param $relation The name of a relation + * @return A recordset on success + * @return -1 Failed to set datestyle + */ + function dumpRelation($relation, $oids) { + $this->fieldClean($relation); + + // Actually retrieve the rows + if ($oids) $oid_str = $this->id . ', '; + else $oid_str = ''; + + return $this->selectSet("SELECT {$oid_str}* FROM \"{$relation}\""); + } + + /** + * Returns all available autovacuum per table information. + * @param $table if given, return autovacuum info for the given table or return all informations for all table + * + * @return A recordset + */ + function getTableAutovacuum($table='') { + + $sql = ''; + + if ($table !== '') { + $this->clean($table); + $c_schema = $this->_schema; + $this->clean($c_schema); + + $sql = "SELECT c.oid, nspname, relname, pg_catalog.array_to_string(reloptions, E',') AS reloptions + FROM pg_class c + LEFT JOIN pg_namespace n ON n.oid = c.relnamespace + WHERE c.relkind = 'r'::\"char\" + AND n.nspname NOT IN ('pg_catalog','information_schema') + AND c.reloptions IS NOT NULL + AND c.relname = '{$table}' AND n.nspname = '{$c_schema}' + ORDER BY nspname, relname"; + } + else { + $sql = "SELECT c.oid, nspname, relname, pg_catalog.array_to_string(reloptions, E',') AS reloptions + FROM pg_class c + LEFT JOIN pg_namespace n ON n.oid = c.relnamespace + WHERE c.relkind = 'r'::\"char\" + AND n.nspname NOT IN ('pg_catalog','information_schema') + AND c.reloptions IS NOT NULL + ORDER BY nspname, relname"; + + } + + /* tmp var to parse the results */ + $_autovacs = $this->selectSet($sql); + + /* result aray to return as RS */ + $autovacs = array(); + while (!$_autovacs->EOF) { + $_ = array( + 'nspname' => $_autovacs->fields['nspname'], + 'relname' => $_autovacs->fields['relname'] + ); + + foreach (explode(',', $_autovacs->fields['reloptions']) as $var) { + list($o, $v) = explode('=', $var); + $_[$o] = $v; + } + + $autovacs[] = $_; + + $_autovacs->moveNext(); + } + + include_once('./classes/ArrayRecordSet.php'); + return new ArrayRecordSet($autovacs); + } + + // Row functions + + /** + * Get the fields for uniquely identifying a row in a table + * @param $table The table for which to retrieve the identifier + * @return An array mapping attribute number to attribute name, empty for no identifiers + * @return -1 error + */ + function getRowIdentifier($table) { + $oldtable = $table; + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + // Get the first primary or unique index (sorting primary keys first) that + // is NOT a partial index. + $sql = " + SELECT indrelid, indkey + FROM pg_catalog.pg_index + WHERE indisunique AND indrelid=( + SELECT oid FROM pg_catalog.pg_class + WHERE relname='{$table}' AND relnamespace=( + SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname='{$c_schema}' + ) + ) AND indpred IS NULL AND indexprs IS NULL + ORDER BY indisprimary DESC LIMIT 1"; + $rs = $this->selectSet($sql); + + // If none, check for an OID column. Even though OIDs can be duplicated, the edit and delete row + // functions check that they're only modiying a single row. Otherwise, return empty array. + if ($rs->recordCount() == 0) { + // Check for OID column + $temp = array(); + if ($this->hasObjectID($table)) { + $temp = array('oid'); + } + $this->endTransaction(); + return $temp; + } + // Otherwise find the names of the keys + else { + $attnames = $this->getAttributeNames($oldtable, explode(' ', $rs->fields['indkey'])); + if (!is_array($attnames)) { + $this->rollbackTransaction(); + return -1; + } + else { + $this->endTransaction(); + return $attnames; + } + } + } + + /** + * Adds a new row to a table + * @param $table The table in which to insert + * @param $fields Array of given field in values + * @param $values Array of new values for the row + * @param $nulls An array mapping column => something if it is to be null + * @param $format An array of the data type (VALUE or EXPRESSION) + * @param $types An array of field types + * @return 0 success + * @return -1 invalid parameters + */ + function insertRow($table, $fields, $values, $nulls, $format, $types) { + + if (!is_array($fields) || !is_array($values) || !is_array($nulls) + || !is_array($format) || !is_array($types) + || (count($fields) != count($values)) + ) { + return -1; + } + else { + // Build clause + if (count($values) > 0) { + // Escape all field names + $fields = array_map(array('Postgres','fieldClean'), $fields); + $f_schema = $this->_schema; + $this->fieldClean($table); + $this->fieldClean($f_schema); + + $sql = ''; + foreach($values as $i => $value) { + + // Handle NULL values + if (isset($nulls[$i])) + $sql .= ',NULL'; + else + $sql .= ',' . $this->formatValue($types[$i], $format[$i], $value); + } + + $sql = "INSERT INTO \"{$f_schema}\".\"{$table}\" (\"". implode('","', $fields) ."\") + VALUES (". substr($sql, 1) .")"; + + return $this->execute($sql); + } + } + + return -1; + } + + /** + * Updates a row in a table + * @param $table The table in which to update + * @param $vars An array mapping new values for the row + * @param $nulls An array mapping column => something if it is to be null + * @param $format An array of the data type (VALUE or EXPRESSION) + * @param $types An array of field types + * @param $keyarr An array mapping column => value to update + * @return 0 success + * @return -1 invalid parameters + */ + function editRow($table, $vars, $nulls, $format, $types, $keyarr) { + if (!is_array($vars) || !is_array($nulls) || !is_array($format) || !is_array($types)) + return -1; + else { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + + // Build clause + if (sizeof($vars) > 0) { + + foreach($vars as $key => $value) { + $this->fieldClean($key); + + // Handle NULL values + if (isset($nulls[$key])) $tmp = 'NULL'; + else $tmp = $this->formatValue($types[$key], $format[$key], $value); + + if (isset($sql)) $sql .= ", \"{$key}\"={$tmp}"; + else $sql = "UPDATE \"{$f_schema}\".\"{$table}\" SET \"{$key}\"={$tmp}"; + } + $first = true; + foreach ($keyarr as $k => $v) { + $this->fieldClean($k); + $this->clean($v); + if ($first) { + $sql .= " WHERE \"{$k}\"='{$v}'"; + $first = false; + } + else $sql .= " AND \"{$k}\"='{$v}'"; + } + } + + // Begin transaction. We do this so that we can ensure only one row is + // edited + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $status = $this->execute($sql); + if ($status != 0) { // update failed + $this->rollbackTransaction(); + return -1; + } elseif ($this->conn->Affected_Rows() != 1) { // more than one row could be updated + $this->rollbackTransaction(); + return -2; + } + + // End transaction + return $this->endTransaction(); + } + } + + /** + * Delete a row from a table + * @param $table The table from which to delete + * @param $key An array mapping column => value to delete + * @return 0 success + */ + function deleteRow($table, $key, $schema=false) { + if (!is_array($key)) return -1; + else { + // Begin transaction. We do this so that we can ensure only one row is + // deleted + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + if ($schema === false) $schema = $this->_schema; + + $status = $this->delete($table, $key, $schema); + if ($status != 0 || $this->conn->Affected_Rows() != 1) { + $this->rollbackTransaction(); + return -2; + } + + // End transaction + return $this->endTransaction(); + } + } + + // Sequence functions + + /** + * Returns properties of a single sequence + * @param $sequence Sequence name + * @return A recordset + */ + function getSequence($sequence) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $c_sequence = $sequence; + $this->fieldClean($sequence); + $this->clean($c_sequence); + + $sql = " + SELECT + c.relname AS seqname, s.*, + m.seqstart AS start_value, m.seqincrement AS increment_by, m.seqmax AS max_value, m.seqmin AS min_value, + m.seqcache AS cache_value, m.seqcycle AS is_cycled, + pg_catalog.obj_description(m.seqrelid, 'pg_class') AS seqcomment, + u.usename AS seqowner, n.nspname + FROM + \"{$sequence}\" AS s, pg_catalog.pg_sequence m, + pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n + WHERE + c.relowner=u.usesysid AND c.relnamespace=n.oid + AND c.oid = m.seqrelid AND c.relname = '{$c_sequence}' AND c.relkind = 'S' AND n.nspname='{$c_schema}' + AND n.oid = c.relnamespace"; + + return $this->selectSet( $sql ); + } + + /** + * Returns all sequences in the current database + * @return A recordset + */ + function getSequences($all = false) { + if ($all) { + // Exclude pg_catalog and information_schema tables + $sql = "SELECT n.nspname, c.relname AS seqname, u.usename AS seqowner + FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n + WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid + AND c.relkind = 'S' + AND n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') + ORDER BY nspname, seqname"; + } else { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = "SELECT c.relname AS seqname, u.usename AS seqowner, pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment, + (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=c.reltablespace) AS tablespace + FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n + WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid + AND c.relkind = 'S' AND n.nspname='{$c_schema}' ORDER BY seqname"; + } + + return $this->selectSet( $sql ); + } + + /** + * Execute nextval on a given sequence + * @param $sequence Sequence name + * @return 0 success + * @return -1 sequence not found + */ + function nextvalSequence($sequence) { + /* This double-cleaning is deliberate */ + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->clean($f_schema); + $this->fieldClean($sequence); + $this->clean($sequence); + + $sql = "SELECT pg_catalog.NEXTVAL('\"{$f_schema}\".\"{$sequence}\"')"; + + return $this->execute($sql); + } + + /** + * Execute setval on a given sequence + * @param $sequence Sequence name + * @param $nextvalue The next value + * @return 0 success + * @return -1 sequence not found + */ + function setvalSequence($sequence, $nextvalue) { + /* This double-cleaning is deliberate */ + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->clean($f_schema); + $this->fieldClean($sequence); + $this->clean($sequence); + $this->clean($nextvalue); + + $sql = "SELECT pg_catalog.SETVAL('\"{$f_schema}\".\"{$sequence}\"', '{$nextvalue}')"; + + return $this->execute($sql); + } + + /** + * Restart a given sequence to its start value + * @param $sequence Sequence name + * @return 0 success + * @return -1 sequence not found + */ + function restartSequence($sequence) { + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($sequence); + + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$sequence}\" RESTART;"; + + return $this->execute($sql); + } + + /** + * Resets a given sequence to min value of sequence + * @param $sequence Sequence name + * @return 0 success + * @return -1 sequence not found + */ + function resetSequence($sequence) { + // Get the minimum value of the sequence + $seq = $this->getSequence($sequence); + if ($seq->recordCount() != 1) return -1; + $minvalue = $seq->fields['min_value']; + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + /* This double-cleaning is deliberate */ + $this->fieldClean($sequence); + $this->clean($sequence); + + $sql = "SELECT pg_catalog.SETVAL('\"{$f_schema}\".\"{$sequence}\"', {$minvalue})"; + + return $this->execute($sql); + } + + /** + * Creates a new sequence + * @param $sequence Sequence name + * @param $increment The increment + * @param $minvalue The min value + * @param $maxvalue The max value + * @param $startvalue The starting value + * @param $cachevalue The cache value + * @param $cycledvalue True if cycled, false otherwise + * @return 0 success + */ + function createSequence($sequence, $increment, $minvalue, $maxvalue, + $startvalue, $cachevalue, $cycledvalue) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($sequence); + $this->clean($increment); + $this->clean($minvalue); + $this->clean($maxvalue); + $this->clean($startvalue); + $this->clean($cachevalue); + + $sql = "CREATE SEQUENCE \"{$f_schema}\".\"{$sequence}\""; + if ($increment != '') $sql .= " INCREMENT {$increment}"; + if ($minvalue != '') $sql .= " MINVALUE {$minvalue}"; + if ($maxvalue != '') $sql .= " MAXVALUE {$maxvalue}"; + if ($startvalue != '') $sql .= " START {$startvalue}"; + if ($cachevalue != '') $sql .= " CACHE {$cachevalue}"; + if ($cycledvalue) $sql .= " CYCLE"; + + return $this->execute($sql); + } + + /** + * Rename a sequence + * @param $seqrs The sequence RecordSet returned by getSequence() + * @param $name The new name for the sequence + * @return 0 success + */ + function alterSequenceName($seqrs, $name) { + /* vars are cleaned in _alterSequence */ + if (!empty($name) && ($seqrs->fields['seqname'] != $name)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status == 0) + $seqrs->fields['seqname'] = $name; + else + return $status; + } + return 0; + } + + /** + * Alter a sequence's owner + * @param $seqrs The sequence RecordSet returned by getSequence() + * @param $name The new owner for the sequence + * @return 0 success + */ + function alterSequenceOwner($seqrs, $owner) { + // If owner has been changed, then do the alteration. We are + // careful to avoid this generally as changing owner is a + // superuser only function. + /* vars are cleaned in _alterSequence */ + if (!empty($owner) && ($seqrs->fields['seqowner'] != $owner)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" OWNER TO \"{$owner}\""; + return $this->execute($sql); + } + return 0; + } + + /** + * Alter a sequence's schema + * @param $seqrs The sequence RecordSet returned by getSequence() + * @param $name The new schema for the sequence + * @return 0 success + */ + function alterSequenceSchema($seqrs, $schema) { + /* vars are cleaned in _alterSequence */ + if (!empty($schema) && ($seqrs->fields['nspname'] != $schema)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" SET SCHEMA {$schema}"; + return $this->execute($sql); + } + return 0; + } + + /** + * Alter a sequence's properties + * @param $seqrs The sequence RecordSet returned by getSequence() + * @param $increment The sequence incremental value + * @param $minvalue The sequence minimum value + * @param $maxvalue The sequence maximum value + * @param $restartvalue The sequence current value + * @param $cachevalue The sequence cache value + * @param $cycledvalue Sequence can cycle ? + * @param $startvalue The sequence start value when issueing a restart + * @return 0 success + */ + function alterSequenceProps($seqrs, $increment, $minvalue, $maxvalue, + $restartvalue, $cachevalue, $cycledvalue, $startvalue) { + + $sql = ''; + /* vars are cleaned in _alterSequence */ + if (!empty($increment) && ($increment != $seqrs->fields['increment_by'])) $sql .= " INCREMENT {$increment}"; + if (!empty($minvalue) && ($minvalue != $seqrs->fields['min_value'])) $sql .= " MINVALUE {$minvalue}"; + if (!empty($maxvalue) && ($maxvalue != $seqrs->fields['max_value'])) $sql .= " MAXVALUE {$maxvalue}"; + if (!empty($restartvalue) && ($restartvalue != $seqrs->fields['last_value'])) $sql .= " RESTART {$restartvalue}"; + if (!empty($cachevalue) && ($cachevalue != $seqrs->fields['cache_value'])) $sql .= " CACHE {$cachevalue}"; + if (!empty($startvalue) && ($startvalue != $seqrs->fields['start_value'])) $sql .= " START {$startvalue}"; + // toggle cycle yes/no + if (!is_null($cycledvalue)) $sql .= (!$cycledvalue ? ' NO ' : '') . " CYCLE"; + if ($sql != '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" {$sql}"; + return $this->execute($sql); + } + return 0; + } + + /** + * Protected method which alter a sequence + * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION + * @param $seqrs The sequence recordSet returned by getSequence() + * @param $name The new name for the sequence + * @param $comment The comment on the sequence + * @param $owner The new owner for the sequence + * @param $schema The new schema for the sequence + * @param $increment The increment + * @param $minvalue The min value + * @param $maxvalue The max value + * @param $restartvalue The starting value + * @param $cachevalue The cache value + * @param $cycledvalue True if cycled, false otherwise + * @param $startvalue The sequence start value when issueing a restart + * @return 0 success + * @return -3 rename error + * @return -4 comment error + * @return -5 owner error + * @return -6 get sequence props error + * @return -7 schema error + */ + protected + function _alterSequence($seqrs, $name, $comment, $owner, $schema, $increment, + $minvalue, $maxvalue, $restartvalue, $cachevalue, $cycledvalue, $startvalue) { + + $this->fieldArrayClean($seqrs->fields); + + // Comment + $status = $this->setComment('SEQUENCE', $seqrs->fields['seqname'], '', $comment); + if ($status != 0) + return -4; + + // Owner + $this->fieldClean($owner); + $status = $this->alterSequenceOwner($seqrs, $owner); + if ($status != 0) + return -5; + + // Props + $this->clean($increment); + $this->clean($minvalue); + $this->clean($maxvalue); + $this->clean($restartvalue); + $this->clean($cachevalue); + $this->clean($cycledvalue); + $this->clean($startvalue); + $status = $this->alterSequenceProps($seqrs, $increment, $minvalue, + $maxvalue, $restartvalue, $cachevalue, $cycledvalue, $startvalue); + if ($status != 0) + return -6; + + // Rename + $this->fieldClean($name); + $status = $this->alterSequenceName($seqrs, $name); + if ($status != 0) + return -3; + + // Schema + $this->clean($schema); + $status = $this->alterSequenceSchema($seqrs, $schema); + if ($status != 0) + return -7; + + return 0; + } + + /** + * Alters a sequence + * @param $sequence The name of the sequence + * @param $name The new name for the sequence + * @param $comment The comment on the sequence + * @param $owner The new owner for the sequence + * @param $schema The new schema for the sequence + * @param $increment The increment + * @param $minvalue The min value + * @param $maxvalue The max value + * @param $restartvalue The starting value + * @param $cachevalue The cache value + * @param $cycledvalue True if cycled, false otherwise + * @param $startvalue The sequence start value when issueing a restart + * @return 0 success + * @return -1 transaction error + * @return -2 get existing sequence error + * @return $this->_alterSequence error code + */ + function alterSequence($sequence, $name, $comment, $owner=null, $schema=null, $increment=null, + $minvalue=null, $maxvalue=null, $restartvalue=null, $cachevalue=null, $cycledvalue=null, $startvalue=null) { + + $this->fieldClean($sequence); + + $data = $this->getSequence($sequence); + + if ($data->recordCount() != 1) + return -2; + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $status = $this->_alterSequence($data, $name, $comment, $owner, $schema, $increment, + $minvalue, $maxvalue, $restartvalue, $cachevalue, $cycledvalue, $startvalue); + + if ($status != 0) { + $this->rollbackTransaction(); + return $status; + } + + return $this->endTransaction(); + } + + /** + * Drops a given sequence + * @param $sequence Sequence name + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropSequence($sequence, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($sequence); + + $sql = "DROP SEQUENCE \"{$f_schema}\".\"{$sequence}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + // View functions + + /** + * Returns all details for a particular view + * @param $view The name of the view to retrieve + * @return View info + */ + function getView($view) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($view); + + $sql = " + SELECT c.relname, n.nspname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, + pg_catalog.pg_get_viewdef(c.oid, true) AS vwdefinition, + pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) + WHERE (c.relname = '{$view}') AND n.nspname='{$c_schema}'"; + + return $this->selectSet($sql); + } + + /** + * Returns a list of all views in the database + * @return All views + */ + function getViews() { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " + SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, + pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) + WHERE (n.nspname='{$c_schema}') AND (c.relkind = 'v'::\"char\") + ORDER BY relname"; + + return $this->selectSet($sql); + } + + /** + * Updates a view. + * @param $viewname The name fo the view to update + * @param $definition The new definition for the view + * @return 0 success + * @return -1 transaction error + * @return -2 drop view error + * @return -3 create view error + */ + function setView($viewname, $definition,$comment) { + return $this->createView($viewname, $definition, true, $comment); + } + + /** + * Creates a new view. + * @param $viewname The name of the view to create + * @param $definition The definition for the new view + * @param $replace True to replace the view, false otherwise + * @return 0 success + */ + function createView($viewname, $definition, $replace, $comment) { + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($viewname); + + // Note: $definition not cleaned + + $sql = "CREATE "; + if ($replace) $sql .= "OR REPLACE "; + $sql .= "VIEW \"{$f_schema}\".\"{$viewname}\" AS {$definition}"; + + $status = $this->execute($sql); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + + if ($comment != '') { + $status = $this->setComment('VIEW', $viewname, '', $comment); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + } + + return $this->endTransaction(); + } + + /** + * Rename a view + * @param $vwrs The view recordSet returned by getView() + * @param $name The new view's name + * @return 0 success + */ + function alterViewName($vwrs, $name) { + // Rename (only if name has changed) + /* $vwrs and $name are cleaned in _alterView */ + if (!empty($name) && ($name != $vwrs->fields['relname'])) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER VIEW \"{$f_schema}\".\"{$vwrs->fields['relname']}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status == 0) + $vwrs->fields['relname'] = $name; + else + return $status; + } + return 0; + } + + /** + * Alter a view's owner + * @param $vwrs The view recordSet returned by getView() + * @param $name The new view's owner + * @return 0 success + */ + function alterViewOwner($vwrs, $owner = null) { + /* $vwrs and $owner are cleaned in _alterView */ + if ((!empty($owner)) && ($vwrs->fields['relowner'] != $owner)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + // If owner has been changed, then do the alteration. We are + // careful to avoid this generally as changing owner is a + // superuser only function. + $sql = "ALTER TABLE \"{$f_schema}\".\"{$vwrs->fields['relname']}\" OWNER TO \"{$owner}\""; + return $this->execute($sql); + } + return 0; + } + + /** + * Alter a view's schema + * @param $vwrs The view recordSet returned by getView() + * @param $name The new view's schema + * @return 0 success + */ + function alterViewSchema($vwrs, $schema) { + /* $vwrs and $schema are cleaned in _alterView */ + if (!empty($schema) && ($vwrs->fields['nspname'] != $schema)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + // If tablespace has been changed, then do the alteration. We + // don't want to do this unnecessarily. + $sql = "ALTER TABLE \"{$f_schema}\".\"{$vwrs->fields['relname']}\" SET SCHEMA \"{$schema}\""; + return $this->execute($sql); + } + return 0; + } + + /** + * Protected method which alter a view + * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION + * @param $vwrs The view recordSet returned by getView() + * @param $name The new name for the view + * @param $owner The new owner for the view + * @param $comment The comment on the view + * @return 0 success + * @return -3 rename error + * @return -4 comment error + * @return -5 owner error + * @return -6 schema error + */ + protected + function _alterView($vwrs, $name, $owner, $schema, $comment) { + + $this->fieldArrayClean($vwrs->fields); + + // Comment + if ($this->setComment('VIEW', $vwrs->fields['relname'], '', $comment) != 0) + return -4; + + // Owner + $this->fieldClean($owner); + $status = $this->alterViewOwner($vwrs, $owner); + if ($status != 0) return -5; + + // Rename + $this->fieldClean($name); + $status = $this->alterViewName($vwrs, $name); + if ($status != 0) return -3; + + // Schema + $this->fieldClean($schema); + $status = $this->alterViewSchema($vwrs, $schema); + if ($status != 0) return -6; + + return 0; + } + + /** + * Alter view properties + * @param $view The name of the view + * @param $name The new name for the view + * @param $owner The new owner for the view + * @param $schema The new schema for the view + * @param $comment The comment on the view + * @return 0 success + * @return -1 transaction error + * @return -2 get existing view error + * @return $this->_alterView error code + */ + function alterView($view, $name, $owner, $schema, $comment) { + + $data = $this->getView($view); + if ($data->recordCount() != 1) + return -2; + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $status = $this->_alterView($data, $name, $owner, $schema, $comment); + + if ($status != 0) { + $this->rollbackTransaction(); + return $status; + } + + return $this->endTransaction(); + } + + /** + * Drops a view. + * @param $viewname The name of the view to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropView($viewname, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($viewname); + + $sql = "DROP VIEW \"{$f_schema}\".\"{$viewname}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + // Index functions + + /** + * Grabs a list of indexes for a table + * @param $table The name of a table whose indexes to retrieve + * @param $unique Only get unique/pk indexes + * @return A recordset + */ + function getIndexes($table = '', $unique = false) { + $this->clean($table); + + $sql = " + SELECT c2.relname AS indname, i.indisprimary, i.indisunique, i.indisclustered, + pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) AS inddef + FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i + WHERE c.relname = '{$table}' AND pg_catalog.pg_table_is_visible(c.oid) + AND c.oid = i.indrelid AND i.indexrelid = c2.oid + "; + if ($unique) $sql .= " AND i.indisunique "; + $sql .= " ORDER BY c2.relname"; + + return $this->selectSet($sql); + } + + /** + * test if a table has been clustered on an index + * @param $table The table to test + * + * @return true if the table has been already clustered + */ + function alreadyClustered($table) { + + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT i.indisclustered + FROM pg_catalog.pg_class c, pg_catalog.pg_index i + WHERE c.relname = '{$table}' + AND c.oid = i.indrelid AND i.indisclustered + AND c.relnamespace = (SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname='{$c_schema}') + "; + + $v = $this->selectSet($sql); + + if ($v->recordCount() == 0) + return false; + + return true; + } + + /** + * Creates an index + * @param $name The index name + * @param $table The table on which to add the index + * @param $columns An array of columns that form the index + * or a string expression for a functional index + * @param $type The index type + * @param $unique True if unique, false otherwise + * @param $where Index predicate ('' for none) + * @param $tablespace The tablespaces ('' means none/default) + * @return 0 success + */ + function createIndex($name, $table, $columns, $type, $unique, $where, $tablespace, $concurrently) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + $this->fieldClean($table); + + $sql = "CREATE"; + if ($unique) $sql .= " UNIQUE"; + $sql .= " INDEX"; + if ($concurrently) $sql .= " CONCURRENTLY"; + $sql .= " \"{$name}\" ON \"{$f_schema}\".\"{$table}\" USING {$type} "; + + if (is_array($columns)) { + $this->arrayClean($columns); + $sql .= "(\"" . implode('","', $columns) . "\")"; + } else { + $sql .= "(" . $columns .")"; + } + + // Tablespace + if ($this->hasTablespaces() && $tablespace != '') { + $this->fieldClean($tablespace); + $sql .= " TABLESPACE \"{$tablespace}\""; + } + + // Predicate + if (trim($where) != '') { + $sql .= " WHERE ({$where})"; + } + + return $this->execute($sql); + } + + /** + * Removes an index from the database + * @param $index The index to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropIndex($index, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($index); + + $sql = "DROP INDEX \"{$f_schema}\".\"{$index}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * Rebuild indexes + * @param $type 'DATABASE' or 'TABLE' or 'INDEX' + * @param $name The name of the specific database, table, or index to be reindexed + * @param $force If true, recreates indexes forcedly in PostgreSQL 7.0-7.1, forces rebuild of system indexes in 7.2-7.3, ignored in >=7.4 + */ + function reindex($type, $name, $force = false) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + switch($type) { + case 'DATABASE': + $sql = "REINDEX {$type} \"{$name}\""; + if ($force) $sql .= ' FORCE'; + break; + case 'TABLE': + case 'INDEX': + $sql = "REINDEX {$type} \"{$f_schema}\".\"{$name}\""; + if ($force) $sql .= ' FORCE'; + break; + default: + return -1; + } + + return $this->execute($sql); + } + + /** + * Clusters an index + * @param $index The name of the index + * @param $table The table the index is on + * @return 0 success + */ + function clusterIndex($table='', $index='') { + + $sql = 'CLUSTER'; + + // We don't bother with a transaction here, as there's no point rolling + // back an expensive cluster if a cheap analyze fails for whatever reason + + if (!empty($table)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $sql .= " \"{$f_schema}\".\"{$table}\""; + + if (!empty($index)) { + $this->fieldClean($index); + $sql .= " USING \"{$index}\""; + } + } + + return $this->execute($sql); + } + + // Constraint functions + + /** + * Returns a list of all constraints on a table + * @param $table The table to find rules for + * @return A recordset + */ + function getConstraints($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + // This SQL is greatly complicated by the need to retrieve + // index clustering information for primary and unique constraints + $sql = "SELECT + pc.conname, + pg_catalog.pg_get_constraintdef(pc.oid, true) AS consrc, + pc.contype, + CASE WHEN pc.contype='u' OR pc.contype='p' THEN ( + SELECT + indisclustered + FROM + pg_catalog.pg_depend pd, + pg_catalog.pg_class pl, + pg_catalog.pg_index pi + WHERE + pd.refclassid=pc.tableoid + AND pd.refobjid=pc.oid + AND pd.objid=pl.oid + AND pl.oid=pi.indexrelid + ) ELSE + NULL + END AS indisclustered + FROM + pg_catalog.pg_constraint pc + WHERE + pc.conrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname='{$c_schema}')) + ORDER BY + 1 + "; + + return $this->selectSet($sql); + } + + /** + * Returns a list of all constraints on a table, + * including constraint name, definition, related col and referenced namespace, + * table and col if needed + * @param $table the table where we are looking for fk + * @return a recordset + */ + function getConstraintsWithFields($table) { + + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + // get the max number of col used in a constraint for the table + $sql = "SELECT DISTINCT + max(SUBSTRING(array_dims(c.conkey) FROM \$patern\$^\\[.*:(.*)\\]$\$patern\$)) as nb + FROM pg_catalog.pg_constraint AS c + JOIN pg_catalog.pg_class AS r ON (c.conrelid=r.oid) + JOIN pg_catalog.pg_namespace AS ns ON (r.relnamespace=ns.oid) + WHERE + r.relname = '{$table}' AND ns.nspname='{$c_schema}'"; + + $rs = $this->selectSet($sql); + + if ($rs->EOF) $max_col = 0; + else $max_col = $rs->fields['nb']; + + $sql = ' + SELECT + c.oid AS conid, c.contype, c.conname, pg_catalog.pg_get_constraintdef(c.oid, true) AS consrc, + ns1.nspname as p_schema, r1.relname as p_table, ns2.nspname as f_schema, + r2.relname as f_table, f1.attname as p_field, f1.attnum AS p_attnum, f2.attname as f_field, + f2.attnum AS f_attnum, pg_catalog.obj_description(c.oid, \'pg_constraint\') AS constcomment, + c.conrelid, c.confrelid + FROM + pg_catalog.pg_constraint AS c + JOIN pg_catalog.pg_class AS r1 ON (c.conrelid=r1.oid) + JOIN pg_catalog.pg_attribute AS f1 ON (f1.attrelid=r1.oid AND (f1.attnum=c.conkey[1]'; + for ($i = 2; $i <= $rs->fields['nb']; $i++) { + $sql.= " OR f1.attnum=c.conkey[$i]"; + } + $sql.= ')) + JOIN pg_catalog.pg_namespace AS ns1 ON r1.relnamespace=ns1.oid + LEFT JOIN ( + pg_catalog.pg_class AS r2 JOIN pg_catalog.pg_namespace AS ns2 ON (r2.relnamespace=ns2.oid) + ) ON (c.confrelid=r2.oid) + LEFT JOIN pg_catalog.pg_attribute AS f2 ON + (f2.attrelid=r2.oid AND ((c.confkey[1]=f2.attnum AND c.conkey[1]=f1.attnum)'; + for ($i = 2; $i <= $rs->fields['nb']; $i++) + $sql.= " OR (c.confkey[$i]=f2.attnum AND c.conkey[$i]=f1.attnum)"; + + $sql .= sprintf(")) + WHERE + r1.relname = '%s' AND ns1.nspname='%s' + ORDER BY 1", $table, $c_schema); + + return $this->selectSet($sql); + } + + /** + * Adds a primary key constraint to a table + * @param $table The table to which to add the primery key + * @param $fields (array) An array of fields over which to add the primary key + * @param $name (optional) The name to give the key, otherwise default name is assigned + * @param $tablespace (optional) The tablespace for the schema, '' indicates default. + * @return 0 success + * @return -1 no fields given + */ + function addPrimaryKey($table, $fields, $name = '', $tablespace = '') { + if (!is_array($fields) || sizeof($fields) == 0) return -1; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldArrayClean($fields); + $this->fieldClean($name); + $this->fieldClean($tablespace); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; + if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= "PRIMARY KEY (\"" . join('","', $fields) . "\")"; + + if ($tablespace != '' && $this->hasTablespaces()) + $sql .= " USING INDEX TABLESPACE \"{$tablespace}\""; + + return $this->execute($sql); + } + + /** + * Adds a unique constraint to a table + * @param $table The table to which to add the unique key + * @param $fields (array) An array of fields over which to add the unique key + * @param $name (optional) The name to give the key, otherwise default name is assigned + * @param $tablespace (optional) The tablespace for the schema, '' indicates default. + * @return 0 success + * @return -1 no fields given + */ + function addUniqueKey($table, $fields, $name = '', $tablespace = '') { + if (!is_array($fields) || sizeof($fields) == 0) return -1; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldArrayClean($fields); + $this->fieldClean($name); + $this->fieldClean($tablespace); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; + if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= "UNIQUE (\"" . join('","', $fields) . "\")"; + + if ($tablespace != '' && $this->hasTablespaces()) + $sql .= " USING INDEX TABLESPACE \"{$tablespace}\""; + + return $this->execute($sql); + } + + /** + * Adds a check constraint to a table + * @param $table The table to which to add the check + * @param $definition The definition of the check + * @param $name (optional) The name to give the check, otherwise default name is assigned + * @return 0 success + */ + function addCheckConstraint($table, $definition, $name = '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($name); + // @@ How the heck do you clean a definition??? + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; + if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= "CHECK ({$definition})"; + + return $this->execute($sql); + } + + /** + * Drops a check constraint from a table + * @param $table The table from which to drop the check + * @param $name The name of the check to be dropped + * @return 0 success + * @return -2 transaction error + * @return -3 lock error + * @return -4 check drop error + */ + function dropCheckConstraint($table, $name) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $c_schema = $this->_schema; + $this->clean($c_schema); + $c_table = $table; + $this->fieldClean($table); + $this->clean($c_table); + $this->clean($name); + + // Begin transaction + $status = $this->beginTransaction(); + if ($status != 0) return -2; + + // Properly lock the table + $sql = "LOCK TABLE \"{$f_schema}\".\"{$table}\" IN ACCESS EXCLUSIVE MODE"; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + + // Delete the check constraint + $sql = "DELETE FROM pg_relcheck WHERE rcrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$c_table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE + nspname = '{$c_schema}')) AND rcname='{$name}'"; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -4; + } + + // Update the pg_class catalog to reflect the new number of checks + $sql = "UPDATE pg_class SET relchecks=(SELECT COUNT(*) FROM pg_relcheck WHERE + rcrelid=(SELECT oid FROM pg_catalog.pg_class WHERE relname='{$c_table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE + nspname = '{$c_schema}'))) + WHERE relname='{$c_table}'"; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -4; + } + + // Otherwise, close the transaction + return $this->endTransaction(); + } + + /** + * Adds a foreign key constraint to a table + * @param $targschema The schema that houses the target table to which to add the foreign key + * @param $targtable The table to which to add the foreign key + * @param $target The table that contains the target columns + * @param $sfields (array) An array of source fields over which to add the foreign key + * @param $tfields (array) An array of target fields over which to add the foreign key + * @param $upd_action The action for updates (eg. RESTRICT) + * @param $del_action The action for deletes (eg. RESTRICT) + * @param $match The match type (eg. MATCH FULL) + * @param $deferrable The deferrability (eg. NOT DEFERRABLE) + * @param $intially The initial deferrability (eg. INITIALLY IMMEDIATE) + * @param $name (optional) The name to give the key, otherwise default name is assigned + * @return 0 success + * @return -1 no fields given + */ + function addForeignKey($table, $targschema, $targtable, $sfields, $tfields, $upd_action, $del_action, + $match, $deferrable, $initially, $name = '') { + if (!is_array($sfields) || sizeof($sfields) == 0 || + !is_array($tfields) || sizeof($tfields) == 0) return -1; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($targschema); + $this->fieldClean($targtable); + $this->fieldArrayClean($sfields); + $this->fieldArrayClean($tfields); + $this->fieldClean($name); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ADD "; + if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= "FOREIGN KEY (\"" . join('","', $sfields) . "\") "; + // Target table needs to be fully qualified + $sql .= "REFERENCES \"{$targschema}\".\"{$targtable}\"(\"" . join('","', $tfields) . "\") "; + if ($match != $this->fkmatches[0]) $sql .= " {$match}"; + if ($upd_action != $this->fkactions[0]) $sql .= " ON UPDATE {$upd_action}"; + if ($del_action != $this->fkactions[0]) $sql .= " ON DELETE {$del_action}"; + if ($deferrable != $this->fkdeferrable[0]) $sql .= " {$deferrable}"; + if ($initially != $this->fkinitial[0]) $sql .= " {$initially}"; + + return $this->execute($sql); + } + + /** + * Removes a constraint from a relation + * @param $constraint The constraint to drop + * @param $relation The relation from which to drop + * @param $type The type of constraint (c, f, u or p) + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropConstraint($constraint, $relation, $type, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($constraint); + $this->fieldClean($relation); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$relation}\" DROP CONSTRAINT \"{$constraint}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * A function for getting all columns linked by foreign keys given a group of tables + * @param $tables multi dimensional assoc array that holds schema and table name + * @return A recordset of linked tables and columns + * @return -1 $tables isn't an array + */ + function getLinkingKeys($tables) { + if (!is_array($tables)) return -1; + + $this->clean($tables[0]['tablename']); + $this->clean($tables[0]['schemaname']); + $tables_list = "'{$tables[0]['tablename']}'"; + $schema_list = "'{$tables[0]['schemaname']}'"; + $schema_tables_list = "'{$tables[0]['schemaname']}.{$tables[0]['tablename']}'"; + + for ($i = 1; $i < sizeof($tables); $i++) { + $this->clean($tables[$i]['tablename']); + $this->clean($tables[$i]['schemaname']); + $tables_list .= ", '{$tables[$i]['tablename']}'"; + $schema_list .= ", '{$tables[$i]['schemaname']}'"; + $schema_tables_list .= ", '{$tables[$i]['schemaname']}.{$tables[$i]['tablename']}'"; + } + + $maxDimension = 1; + + $sql = " + SELECT DISTINCT + array_dims(pc.conkey) AS arr_dim, + pgc1.relname AS p_table + FROM + pg_catalog.pg_constraint AS pc, + pg_catalog.pg_class AS pgc1 + WHERE + pc.contype = 'f' + AND (pc.conrelid = pgc1.relfilenode OR pc.confrelid = pgc1.relfilenode) + AND pgc1.relname IN ($tables_list) + "; + + //parse our output to find the highest dimension of foreign keys since pc.conkey is stored in an array + $rs = $this->selectSet($sql); + while (!$rs->EOF) { + $arrData = explode(':', $rs->fields['arr_dim']); + $tmpDimension = intval(substr($arrData[1], 0, strlen($arrData[1] - 1))); + $maxDimension = $tmpDimension > $maxDimension ? $tmpDimension : $maxDimension; + $rs->MoveNext(); + } + + //we know the highest index for foreign keys that conkey goes up to, expand for us in an IN query + $cons_str = '( (pfield.attnum = conkey[1] AND cfield.attnum = confkey[1]) '; + for ($i = 2; $i <= $maxDimension; $i++) { + $cons_str .= "OR (pfield.attnum = conkey[{$i}] AND cfield.attnum = confkey[{$i}]) "; + } + $cons_str .= ') '; + + $sql = " + SELECT + pgc1.relname AS p_table, + pgc2.relname AS f_table, + pfield.attname AS p_field, + cfield.attname AS f_field, + pgns1.nspname AS p_schema, + pgns2.nspname AS f_schema + FROM + pg_catalog.pg_constraint AS pc, + pg_catalog.pg_class AS pgc1, + pg_catalog.pg_class AS pgc2, + pg_catalog.pg_attribute AS pfield, + pg_catalog.pg_attribute AS cfield, + (SELECT oid AS ns_id, nspname FROM pg_catalog.pg_namespace WHERE nspname IN ($schema_list) ) AS pgns1, + (SELECT oid AS ns_id, nspname FROM pg_catalog.pg_namespace WHERE nspname IN ($schema_list) ) AS pgns2 + WHERE + pc.contype = 'f' + AND pgc1.relnamespace = pgns1.ns_id + AND pgc2.relnamespace = pgns2.ns_id + AND pc.conrelid = pgc1.relfilenode + AND pc.confrelid = pgc2.relfilenode + AND pfield.attrelid = pc.conrelid + AND cfield.attrelid = pc.confrelid + AND $cons_str + AND pgns1.nspname || '.' || pgc1.relname IN ($schema_tables_list) + AND pgns2.nspname || '.' || pgc2.relname IN ($schema_tables_list) + "; + return $this->selectSet($sql); + } + + /** + * Finds the foreign keys that refer to the specified table + * @param $table The table to find referrers for + * @return A recordset + */ + function getReferrers($table) { + $this->clean($table); + + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + $c_schema = $this->_schema; + $this->clean($c_schema); + + $sql = " + SELECT + pn.nspname, + pl.relname, + pc.conname, + pg_catalog.pg_get_constraintdef(pc.oid) AS consrc + FROM + pg_catalog.pg_constraint pc, + pg_catalog.pg_namespace pn, + pg_catalog.pg_class pl + WHERE + pc.connamespace = pn.oid + AND pc.conrelid = pl.oid + AND pc.contype = 'f' + AND confrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname='{$c_schema}')) + ORDER BY 1,2,3 + "; + + return $this->selectSet($sql); + } + + // Domain functions + + /** + * Gets all information for a single domain + * @param $domain The name of the domain to fetch + * @return A recordset + */ + function getDomain($domain) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($domain); + + $sql = " + SELECT + t.typname AS domname, + pg_catalog.format_type(t.typbasetype, t.typtypmod) AS domtype, + t.typnotnull AS domnotnull, + t.typdefault AS domdef, + pg_catalog.pg_get_userbyid(t.typowner) AS domowner, + pg_catalog.obj_description(t.oid, 'pg_type') AS domcomment + FROM + pg_catalog.pg_type t + WHERE + t.typtype = 'd' + AND t.typname = '{$domain}' + AND t.typnamespace = (SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname = '{$c_schema}')"; + + return $this->selectSet($sql); + } + + /** + * Return all domains in current schema. Excludes domain constraints. + * @return All tables, sorted alphabetically + */ + function getDomains() { + $c_schema = $this->_schema; + $this->clean($c_schema); + + $sql = " + SELECT + t.typname AS domname, + pg_catalog.format_type(t.typbasetype, t.typtypmod) AS domtype, + t.typnotnull AS domnotnull, + t.typdefault AS domdef, + pg_catalog.pg_get_userbyid(t.typowner) AS domowner, + pg_catalog.obj_description(t.oid, 'pg_type') AS domcomment + FROM + pg_catalog.pg_type t + WHERE + t.typtype = 'd' + AND t.typnamespace = (SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname='{$c_schema}') + ORDER BY t.typname"; + + return $this->selectSet($sql); + } + + /** + * Get domain constraints + * @param $domain The name of the domain whose constraints to fetch + * @return A recordset + */ + function getDomainConstraints($domain) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($domain); + + $sql = " + SELECT + conname, + contype, + pg_catalog.pg_get_constraintdef(oid, true) AS consrc + FROM + pg_catalog.pg_constraint + WHERE + contypid = ( + SELECT oid FROM pg_catalog.pg_type + WHERE typname='{$domain}' + AND typnamespace = ( + SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname = '{$c_schema}') + ) + ORDER BY conname"; + + return $this->selectSet($sql); + } + + /** + * Creates a domain + * @param $domain The name of the domain to create + * @param $type The base type for the domain + * @param $length Optional type length + * @param $array True for array type, false otherwise + * @param $notnull True for NOT NULL, false otherwise + * @param $default Default value for domain + * @param $check A CHECK constraint if there is one + * @return 0 success + */ + function createDomain($domain, $type, $length, $array, $notnull, $default, $check) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($domain); + + $sql = "CREATE DOMAIN \"{$f_schema}\".\"{$domain}\" AS "; + + if ($length == '') + $sql .= $type; + else { + switch ($type) { + // Have to account for weird placing of length for with/without + // time zone types + case 'timestamp with time zone': + case 'timestamp without time zone': + $qual = substr($type, 9); + $sql .= "timestamp({$length}){$qual}"; + break; + case 'time with time zone': + case 'time without time zone': + $qual = substr($type, 4); + $sql .= "time({$length}){$qual}"; + break; + default: + $sql .= "{$type}({$length})"; + } + } + + // Add array qualifier, if requested + if ($array) $sql .= '[]'; + + if ($notnull) $sql .= ' NOT NULL'; + if ($default != '') $sql .= " DEFAULT {$default}"; + if ($this->hasDomainConstraints() && $check != '') $sql .= " CHECK ({$check})"; + + return $this->execute($sql); + } + + /** + * Alters a domain + * @param $domain The domain to alter + * @param $domdefault The domain default + * @param $domnotnull True for NOT NULL, false otherwise + * @param $domowner The domain owner + * @return 0 success + * @return -1 transaction error + * @return -2 default error + * @return -3 not null error + * @return -4 owner error + */ + function alterDomain($domain, $domdefault, $domnotnull, $domowner) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($domain); + $this->fieldClean($domowner); + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Default + if ($domdefault == '') + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP DEFAULT"; + else + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" SET DEFAULT {$domdefault}"; + + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -2; + } + + // NOT NULL + if ($domnotnull) + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" SET NOT NULL"; + else + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP NOT NULL"; + + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + + // Owner + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" OWNER TO \"{$domowner}\""; + + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -4; + } + + return $this->endTransaction(); + } + + /** + * Drops a domain. + * @param $domain The name of the domain to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropDomain($domain, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($domain); + + $sql = "DROP DOMAIN \"{$f_schema}\".\"{$domain}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * Adds a check constraint to a domain + * @param $domain The domain to which to add the check + * @param $definition The definition of the check + * @param $name (optional) The name to give the check, otherwise default name is assigned + * @return 0 success + */ + function addDomainCheckConstraint($domain, $definition, $name = '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($domain); + $this->fieldClean($name); + + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" ADD "; + if ($name != '') $sql .= "CONSTRAINT \"{$name}\" "; + $sql .= "CHECK ({$definition})"; + + return $this->execute($sql); + } + + /** + * Drops a domain constraint + * @param $domain The domain from which to remove the constraint + * @param $constraint The constraint to remove + * @param $cascade True to cascade, false otherwise + * @return 0 success + */ + function dropDomainConstraint($domain, $constraint, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($domain); + $this->fieldClean($constraint); + + $sql = "ALTER DOMAIN \"{$f_schema}\".\"{$domain}\" DROP CONSTRAINT \"{$constraint}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + // Function functions + + /** + * Returns all details for a particular function + * @param $func The name of the function to retrieve + * @return Function info + */ + function getFunction($function_oid) { + $this->clean($function_oid); + + $sql = " + SELECT + pc.oid AS prooid, proname, + pg_catalog.pg_get_userbyid(proowner) AS proowner, + nspname as proschema, lanname as prolanguage, procost, prorows, + pg_catalog.format_type(prorettype, NULL) as proresult, prosrc, + probin, proretset, proisstrict, provolatile, prosecdef, + pg_catalog.oidvectortypes(pc.proargtypes) AS proarguments, + proargnames AS proargnames, + pg_catalog.obj_description(pc.oid, 'pg_proc') AS procomment, + proconfig, + (select array_agg( (select typname from pg_type pt + where pt.oid = p.oid) ) from unnest(proallargtypes) p) + AS proallarguments, + proargmodes + FROM + pg_catalog.pg_proc pc, pg_catalog.pg_language pl, + pg_catalog.pg_namespace pn + WHERE + pc.oid = '{$function_oid}'::oid AND pc.prolang = pl.oid + AND pc.pronamespace = pn.oid + "; + + return $this->selectSet($sql); + } + + /** + * Returns a list of all functions in the database + * @param $all If true, will find all available functions, if false just those in search path + * @param $type If not null, will find all functions with return value = type + * + * @return All functions + */ + function getFunctions($all = false, $type = null) { + if ($all) { + $where = 'pg_catalog.pg_function_is_visible(p.oid)'; + $distinct = 'DISTINCT ON (p.proname)'; + + if ($type) { + $where .= " AND p.prorettype = (select oid from pg_catalog.pg_type p where p.typname = 'trigger') "; + } + } + else { + $c_schema = $this->_schema; + $this->clean($c_schema); + $where = "n.nspname = '{$c_schema}'"; + $distinct = ''; + } + + $sql = " + SELECT + {$distinct} + p.oid AS prooid, + p.proname, + p.proretset, + pg_catalog.format_type(p.prorettype, NULL) AS proresult, + pg_catalog.oidvectortypes(p.proargtypes) AS proarguments, + pl.lanname AS prolanguage, + pg_catalog.obj_description(p.oid, 'pg_proc') AS procomment, + p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto, + CASE WHEN p.proretset THEN 'setof ' ELSE '' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns, + u.usename AS proowner + FROM pg_catalog.pg_proc p + INNER JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace + INNER JOIN pg_catalog.pg_language pl ON pl.oid = p.prolang + LEFT JOIN pg_catalog.pg_user u ON u.usesysid = p.proowner + WHERE NOT p.proisagg + AND {$where} + ORDER BY p.proname, proresult + "; + + return $this->selectSet($sql); + } + + /** + * Returns an array containing a function's properties + * @param $f The array of data for the function + * @return An array containing the properties + */ + function getFunctionProperties($f) { + $temp = array(); + + // Volatility + if ($f['provolatile'] == 'v') + $temp[] = 'VOLATILE'; + elseif ($f['provolatile'] == 'i') + $temp[] = 'IMMUTABLE'; + elseif ($f['provolatile'] == 's') + $temp[] = 'STABLE'; + else + return -1; + + // Null handling + $f['proisstrict'] = $this->phpBool($f['proisstrict']); + if ($f['proisstrict']) + $temp[] = 'RETURNS NULL ON NULL INPUT'; + else + $temp[] = 'CALLED ON NULL INPUT'; + + // Security + $f['prosecdef'] = $this->phpBool($f['prosecdef']); + if ($f['prosecdef']) + $temp[] = 'SECURITY DEFINER'; + else + $temp[] = 'SECURITY INVOKER'; + + return $temp; + } + + /** + * Updates (replaces) a function. + * @param $function_oid The OID of the function + * @param $funcname The name of the function to create + * @param $newname The new name for the function + * @param $args The array of argument types + * @param $returns The return type + * @param $definition The definition for the new function + * @param $language The language the function is written for + * @param $flags An array of optional flags + * @param $setof True if returns a set, false otherwise + * @param $comment The comment on the function + * @return 0 success + * @return -1 transaction error + * @return -3 create function error + * @return -4 comment error + * @return -5 rename function error + * @return -6 alter owner error + * @return -7 alter schema error + */ + function setFunction($function_oid, $funcname, $newname, $args, $returns, $definition, $language, $flags, $setof, $funcown, $newown, $funcschema, $newschema, $cost, $rows, $comment) { + // Begin a transaction + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Replace the existing function + $status = $this->createFunction($funcname, $args, $returns, $definition, $language, $flags, $setof, $cost, $rows, $comment, true); + if ($status != 0) { + $this->rollbackTransaction(); + return $status; + } + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + + // Rename the function, if necessary + $this->fieldClean($newname); + /* $funcname is escaped in createFunction */ + if ($funcname != $newname) { + $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) RENAME TO \"{$newname}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -5; + } + + $funcname = $newname; + } + + // Alter the owner, if necessary + if ($this->hasFunctionAlterOwner()) { + $this->fieldClean($newown); + if ($funcown != $newown) { + $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) OWNER TO \"{$newown}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -6; + } + } + + } + + // Alter the schema, if necessary + if ($this->hasFunctionAlterSchema()) { + $this->fieldClean($newschema); + /* $funcschema is escaped in createFunction */ + if ($funcschema != $newschema) { + $sql = "ALTER FUNCTION \"{$f_schema}\".\"{$funcname}\"({$args}) SET SCHEMA \"{$newschema}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -7; + } + } + } + + return $this->endTransaction(); + } + + /** + * Creates a new function. + * @param $funcname The name of the function to create + * @param $args A comma separated string of types + * @param $returns The return type + * @param $definition The definition for the new function + * @param $language The language the function is written for + * @param $flags An array of optional flags + * @param $setof True if it returns a set, false otherwise + * @param $rows number of rows planner should estimate will be returned + * @param $cost cost the planner should use in the function execution step + * @param $comment Comment for the function + * @param $replace (optional) True if OR REPLACE, false for normal + * @return 0 success + * @return -3 create function failed + * @return -4 set comment failed + */ + function createFunction($funcname, $args, $returns, $definition, $language, $flags, $setof, $cost, $rows, $comment, $replace = false) { + + // Begin a transaction + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $this->fieldClean($funcname); + $this->clean($args); + $this->fieldClean($language); + $this->arrayClean($flags); + $this->clean($cost); + $this->clean($rows); + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + + $sql = "CREATE"; + if ($replace) $sql .= " OR REPLACE"; + $sql .= " FUNCTION \"{$f_schema}\".\"{$funcname}\" ("; + + if ($args != '') + $sql .= $args; + + // For some reason, the returns field cannot have quotes... + $sql .= ") RETURNS "; + if ($setof) $sql .= "SETOF "; + $sql .= "{$returns} AS "; + + if (is_array($definition)) { + $this->arrayClean($definition); + $sql .= "'" . $definition[0] . "'"; + if ($definition[1]) { + $sql .= ",'" . $definition[1] . "'"; + } + } else { + $this->clean($definition); + $sql .= "'" . $definition . "'"; + } + + $sql .= " LANGUAGE \"{$language}\""; + + // Add costs + if (!empty($cost)) + $sql .= " COST {$cost}"; + + if ($rows <> 0 ){ + $sql .= " ROWS {$rows}"; + } + + // Add flags + foreach ($flags as $v) { + // Skip default flags + if ($v == '') continue; + else $sql .= "\n{$v}"; + } + + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + + /* set the comment */ + $status = $this->setComment('FUNCTION', "\"{$funcname}\"({$args})", null, $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -4; + } + + return $this->endTransaction(); + } + + /** + * Drops a function. + * @param $function_oid The OID of the function to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropFunction($function_oid, $cascade) { + // Function comes in with $object as function OID + $fn = $this->getFunction($function_oid); + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($fn->fields['proname']); + + $sql = "DROP FUNCTION \"{$f_schema}\".\"{$fn->fields['proname']}\"({$fn->fields['proarguments']})"; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + // Type functions + + /** + * Returns all details for a particular type + * @param $typname The name of the view to retrieve + * @return Type info + */ + function getType($typname) { + $this->clean($typname); + + $sql = "SELECT typtype, typbyval, typname, typinput AS typin, typoutput AS typout, typlen, typalign + FROM pg_type WHERE typname='{$typname}'"; + + return $this->selectSet($sql); + } + + /** + * Returns a list of all types in the database + * @param $all If true, will find all available types, if false just those in search path + * @param $tabletypes If true, will include table types + * @param $domains If true, will include domains + * @return A recordet + */ + function getTypes($all = false, $tabletypes = false, $domains = false) { + if ($all) + $where = '1 = 1'; + else { + $c_schema = $this->_schema; + $this->clean($c_schema); + $where = "n.nspname = '{$c_schema}'"; + } + // Never show system table types + $where2 = "AND c.relnamespace NOT IN (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname LIKE 'pg@_%' ESCAPE '@')"; + + // Create type filter + $tqry = "'c'"; + if ($tabletypes) + $tqry .= ", 'r', 'v'"; + + // Create domain filter + if (!$domains) + $where .= " AND t.typtype != 'd'"; + + $sql = "SELECT + t.typname AS basename, + pg_catalog.format_type(t.oid, NULL) AS typname, + pu.usename AS typowner, + t.typtype, + pg_catalog.obj_description(t.oid, 'pg_type') AS typcomment + FROM (pg_catalog.pg_type t + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace) + LEFT JOIN pg_catalog.pg_user pu ON t.typowner = pu.usesysid + WHERE (t.typrelid = 0 OR (SELECT c.relkind IN ({$tqry}) FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid {$where2})) + AND t.typname !~ '^_' + AND {$where} + ORDER BY typname + "; + + return $this->selectSet($sql); + } + + /** + * Creates a new type + * @param ... + * @return 0 success + */ + function createType($typname, $typin, $typout, $typlen, $typdef, + $typelem, $typdelim, $typbyval, $typalign, $typstorage) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($typname); + $this->fieldClean($typin); + $this->fieldClean($typout); + + $sql = " + CREATE TYPE \"{$f_schema}\".\"{$typname}\" ( + INPUT = \"{$typin}\", + OUTPUT = \"{$typout}\", + INTERNALLENGTH = {$typlen}"; + if ($typdef != '') $sql .= ", DEFAULT = {$typdef}"; + if ($typelem != '') $sql .= ", ELEMENT = {$typelem}"; + if ($typdelim != '') $sql .= ", DELIMITER = {$typdelim}"; + if ($typbyval) $sql .= ", PASSEDBYVALUE, "; + if ($typalign != '') $sql .= ", ALIGNMENT = {$typalign}"; + if ($typstorage != '') $sql .= ", STORAGE = {$typstorage}"; + + $sql .= ")"; + + return $this->execute($sql); + } + + /** + * Drops a type. + * @param $typname The name of the type to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropType($typname, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($typname); + + $sql = "DROP TYPE \"{$f_schema}\".\"{$typname}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * Creates a new enum type in the database + * @param $name The name of the type + * @param $values An array of values + * @param $typcomment Type comment + * @return 0 success + * @return -1 transaction error + * @return -2 no values supplied + */ + function createEnumType($name, $values, $typcomment) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + + if (empty($values)) return -2; + + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + $values = array_unique($values); + + $nbval = count($values); + + for ($i = 0; $i < $nbval; $i++) + $this->clean($values[$i]); + + $sql = "CREATE TYPE \"{$f_schema}\".\"{$name}\" AS ENUM ('"; + $sql.= implode("','", $values); + $sql .= "')"; + + $status = $this->execute($sql); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + + if ($typcomment != '') { + $status = $this->setComment('TYPE', $name, '', $typcomment, true); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + } + + return $this->endTransaction(); + + } + + /** + * Get defined values for a given enum + * @return A recordset + */ + function getEnumValues($name) { + $this->clean($name); + + $sql = "SELECT enumlabel AS enumval + FROM pg_catalog.pg_type t JOIN pg_catalog.pg_enum e ON (t.oid=e.enumtypid) + WHERE t.typname = '{$name}' ORDER BY e.oid"; + return $this->selectSet($sql); + } + + /** + * Creates a new composite type in the database + * @param $name The name of the type + * @param $fields The number of fields + * @param $field An array of field names + * @param $type An array of field types + * @param $array An array of '' or '[]' for each type if it's an array or not + * @param $length An array of field lengths + * @param $colcomment An array of comments + * @param $typcomment Type comment + * @return 0 success + * @return -1 no fields supplied + */ + function createCompositeType($name, $fields, $field, $type, $array, $length, $colcomment, $typcomment) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + $found = false; + $first = true; + $comment_sql = ''; // Accumulate comments for the columns + $sql = "CREATE TYPE \"{$f_schema}\".\"{$name}\" AS ("; + for ($i = 0; $i < $fields; $i++) { + $this->fieldClean($field[$i]); + $this->clean($type[$i]); + $this->clean($length[$i]); + $this->clean($colcomment[$i]); + + // Skip blank columns - for user convenience + if ($field[$i] == '' || $type[$i] == '') continue; + // If not the first column, add a comma + if (!$first) $sql .= ", "; + else $first = false; + + switch ($type[$i]) { + // Have to account for weird placing of length for with/without + // time zone types + case 'timestamp with time zone': + case 'timestamp without time zone': + $qual = substr($type[$i], 9); + $sql .= "\"{$field[$i]}\" timestamp"; + if ($length[$i] != '') $sql .= "({$length[$i]})"; + $sql .= $qual; + break; + case 'time with time zone': + case 'time without time zone': + $qual = substr($type[$i], 4); + $sql .= "\"{$field[$i]}\" time"; + if ($length[$i] != '') $sql .= "({$length[$i]})"; + $sql .= $qual; + break; + default: + $sql .= "\"{$field[$i]}\" {$type[$i]}"; + if ($length[$i] != '') $sql .= "({$length[$i]})"; + } + // Add array qualifier if necessary + if ($array[$i] == '[]') $sql .= '[]'; + + if ($colcomment[$i] != '') $comment_sql .= "COMMENT ON COLUMN \"{$f_schema}\".\"{$name}\".\"{$field[$i]}\" IS '{$colcomment[$i]}';\n"; + + $found = true; + } + + if (!$found) return -1; + + $sql .= ")"; + + $status = $this->execute($sql); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + + if ($typcomment != '') { + $status = $this->setComment('TYPE', $name, '', $typcomment, true); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + } + + if ($comment_sql != '') { + $status = $this->execute($comment_sql); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + } + return $this->endTransaction(); + } + + /** + * Returns a list of all casts in the database + * @return All casts + */ + function getCasts() { + global $conf; + + if ($conf['show_system']) + $where = ''; + else + $where = ' + AND n1.nspname NOT LIKE $$pg\_%$$ + AND n2.nspname NOT LIKE $$pg\_%$$ + AND n3.nspname NOT LIKE $$pg\_%$$ + '; + + $sql = " + SELECT + c.castsource::pg_catalog.regtype AS castsource, + c.casttarget::pg_catalog.regtype AS casttarget, + CASE WHEN c.castfunc=0 THEN NULL + ELSE c.castfunc::pg_catalog.regprocedure END AS castfunc, + c.castcontext, + obj_description(c.oid, 'pg_cast') as castcomment + FROM + (pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p ON c.castfunc=p.oid JOIN pg_catalog.pg_namespace n3 ON p.pronamespace=n3.oid), + pg_catalog.pg_type t1, + pg_catalog.pg_type t2, + pg_catalog.pg_namespace n1, + pg_catalog.pg_namespace n2 + WHERE + c.castsource=t1.oid + AND c.casttarget=t2.oid + AND t1.typnamespace=n1.oid + AND t2.typnamespace=n2.oid + {$where} + ORDER BY 1, 2 + "; + + return $this->selectSet($sql); + } + + /** + * Returns a list of all conversions in the database + * @return All conversions + */ + function getConversions() { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " + SELECT + c.conname, + pg_catalog.pg_encoding_to_char(c.conforencoding) AS conforencoding, + pg_catalog.pg_encoding_to_char(c.contoencoding) AS contoencoding, + c.condefault, + pg_catalog.obj_description(c.oid, 'pg_conversion') AS concomment + FROM pg_catalog.pg_conversion c, pg_catalog.pg_namespace n + WHERE n.oid = c.connamespace + AND n.nspname='{$c_schema}' + ORDER BY 1; + "; + + return $this->selectSet($sql); + } + + // Rule functions + + /** + * Returns a list of all rules on a table OR view + * @param $table The table to find rules for + * @return A recordset + */ + function getRules($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = " + SELECT * + FROM pg_catalog.pg_rules + WHERE + schemaname='{$c_schema}' AND tablename='{$table}' + ORDER BY rulename + "; + + return $this->selectSet($sql); + } + + /** + * Edits a rule on a table OR view + * @param $name The name of the new rule + * @param $event SELECT, INSERT, UPDATE or DELETE + * @param $table Table on which to create the rule + * @param $where When to execute the rule, '' indicates always + * @param $instead True if an INSTEAD rule, false otherwise + * @param $type NOTHING for a do nothing rule, SOMETHING to use given action + * @param $action The action to take + * @return 0 success + * @return -1 invalid event + */ + function setRule($name, $event, $table, $where, $instead, $type, $action) { + return $this->createRule($name, $event, $table, $where, $instead, $type, $action, true); + } + + /** + * Creates a rule + * @param $name The name of the new rule + * @param $event SELECT, INSERT, UPDATE or DELETE + * @param $table Table on which to create the rule + * @param $where When to execute the rule, '' indicates always + * @param $instead True if an INSTEAD rule, false otherwise + * @param $type NOTHING for a do nothing rule, SOMETHING to use given action + * @param $action The action to take + * @param $replace (optional) True to replace existing rule, false otherwise + * @return 0 success + * @return -1 invalid event + */ + function createRule($name, $event, $table, $where, $instead, $type, $action, $replace = false) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + $this->fieldClean($table); + if (!in_array($event, $this->rule_events)) return -1; + + $sql = "CREATE"; + if ($replace) $sql .= " OR REPLACE"; + $sql .= " RULE \"{$name}\" AS ON {$event} TO \"{$f_schema}\".\"{$table}\""; + // Can't escape WHERE clause + if ($where != '') $sql .= " WHERE {$where}"; + $sql .= " DO"; + if ($instead) $sql .= " INSTEAD"; + if ($type == 'NOTHING') + $sql .= " NOTHING"; + else $sql .= " ({$action})"; + + return $this->execute($sql); + } + + /** + * Removes a rule from a table OR view + * @param $rule The rule to drop + * @param $relation The relation from which to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropRule($rule, $relation, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($rule); + $this->fieldClean($relation); + + $sql = "DROP RULE \"{$rule}\" ON \"{$f_schema}\".\"{$relation}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + // Trigger functions + + /** + * Grabs a single trigger + * @param $table The name of a table whose triggers to retrieve + * @param $trigger The name of the trigger to retrieve + * @return A recordset + */ + function getTrigger($table, $trigger) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + $this->clean($trigger); + + $sql = " + SELECT * FROM pg_catalog.pg_trigger t, pg_catalog.pg_class c + WHERE t.tgrelid=c.oid AND c.relname='{$table}' AND t.tgname='{$trigger}' + AND c.relnamespace=( + SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname='{$c_schema}')"; + + return $this->selectSet($sql); + } + + /** + * Grabs a list of triggers on a table + * @param $table The name of a table whose triggers to retrieve + * @return A recordset + */ + function getTriggers($table = '') { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT + t.tgname, pg_catalog.pg_get_triggerdef(t.oid) AS tgdef, + CASE WHEN t.tgenabled = 'D' THEN FALSE ELSE TRUE END AS tgenabled, p.oid AS prooid, + p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto, + ns.nspname AS pronamespace + FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns + WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) + AND ( tgconstraint = 0 OR NOT EXISTS + (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f')) + AND p.oid=t.tgfoid + AND p.pronamespace = ns.oid"; + + return $this->selectSet($sql); + } + + /** + * A helper function for getTriggers that translates + * an array of attribute numbers to an array of field names. + * Note: Only needed for pre-7.4 servers, this function is deprecated + * @param $trigger An array containing fields from the trigger table + * @return The trigger definition string + */ + function getTriggerDef($trigger) { + + $this->fieldArrayClean($trigger); + // Constants to figure out tgtype + if (!defined('TRIGGER_TYPE_ROW')) define ('TRIGGER_TYPE_ROW', (1 << 0)); + if (!defined('TRIGGER_TYPE_BEFORE')) define ('TRIGGER_TYPE_BEFORE', (1 << 1)); + if (!defined('TRIGGER_TYPE_INSERT')) define ('TRIGGER_TYPE_INSERT', (1 << 2)); + if (!defined('TRIGGER_TYPE_DELETE')) define ('TRIGGER_TYPE_DELETE', (1 << 3)); + if (!defined('TRIGGER_TYPE_UPDATE')) define ('TRIGGER_TYPE_UPDATE', (1 << 4)); + + $trigger['tgisconstraint'] = $this->phpBool($trigger['tgisconstraint']); + $trigger['tgdeferrable'] = $this->phpBool($trigger['tgdeferrable']); + $trigger['tginitdeferred'] = $this->phpBool($trigger['tginitdeferred']); + + // Constraint trigger or normal trigger + if ($trigger['tgisconstraint']) + $tgdef = 'CREATE CONSTRAINT TRIGGER '; + else + $tgdef = 'CREATE TRIGGER '; + + $tgdef .= "\"{$trigger['tgname']}\" "; + + // Trigger type + $findx = 0; + if (($trigger['tgtype'] & TRIGGER_TYPE_BEFORE) == TRIGGER_TYPE_BEFORE) + $tgdef .= 'BEFORE'; + else + $tgdef .= 'AFTER'; + + if (($trigger['tgtype'] & TRIGGER_TYPE_INSERT) == TRIGGER_TYPE_INSERT) { + $tgdef .= ' INSERT'; + $findx++; + } + if (($trigger['tgtype'] & TRIGGER_TYPE_DELETE) == TRIGGER_TYPE_DELETE) { + if ($findx > 0) + $tgdef .= ' OR DELETE'; + else { + $tgdef .= ' DELETE'; + $findx++; + } + } + if (($trigger['tgtype'] & TRIGGER_TYPE_UPDATE) == TRIGGER_TYPE_UPDATE) { + if ($findx > 0) + $tgdef .= ' OR UPDATE'; + else + $tgdef .= ' UPDATE'; + } + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + // Table name + $tgdef .= " ON \"{$f_schema}\".\"{$trigger['relname']}\" "; + + // Deferrability + if ($trigger['tgisconstraint']) { + if ($trigger['tgconstrrelid'] != 0) { + // Assume constrelname is not null + $tgdef .= " FROM \"{$trigger['tgconstrrelname']}\" "; + } + if (!$trigger['tgdeferrable']) + $tgdef .= 'NOT '; + $tgdef .= 'DEFERRABLE INITIALLY '; + if ($trigger['tginitdeferred']) + $tgdef .= 'DEFERRED '; + else + $tgdef .= 'IMMEDIATE '; + } + + // Row or statement + if ($trigger['tgtype'] & TRIGGER_TYPE_ROW == TRIGGER_TYPE_ROW) + $tgdef .= 'FOR EACH ROW '; + else + $tgdef .= 'FOR EACH STATEMENT '; + + // Execute procedure + $tgdef .= "EXECUTE PROCEDURE \"{$trigger['tgfname']}\"("; + + // Parameters + // Escape null characters + $v = addCSlashes($trigger['tgargs'], "\0"); + // Split on escaped null characters + $params = explode('\\000', $v); + for ($findx = 0; $findx < $trigger['tgnargs']; $findx++) { + $param = "'" . str_replace('\'', '\\\'', $params[$findx]) . "'"; + $tgdef .= $param; + if ($findx < ($trigger['tgnargs'] - 1)) + $tgdef .= ', '; + } + + // Finish it off + $tgdef .= ')'; + + return $tgdef; + } + + /** + * Returns a list of all functions that can be used in triggers + */ + function getTriggerFunctions() { + return $this->getFunctions(true, 'trigger'); + } + + /** + * Creates a trigger + * @param $tgname The name of the trigger to create + * @param $table The name of the table + * @param $tgproc The function to execute + * @param $tgtime BEFORE or AFTER + * @param $tgevent Event + * @param $tgargs The function arguments + * @return 0 success + */ + function createTrigger($tgname, $table, $tgproc, $tgtime, $tgevent, $tgfrequency, $tgargs) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($tgname); + $this->fieldClean($table); + $this->fieldClean($tgproc); + + /* No Statement Level Triggers in PostgreSQL (by now) */ + $sql = "CREATE TRIGGER \"{$tgname}\" {$tgtime} + {$tgevent} ON \"{$f_schema}\".\"{$table}\" + FOR EACH {$tgfrequency} EXECUTE PROCEDURE \"{$tgproc}\"({$tgargs})"; + + return $this->execute($sql); + } + + /** + * Alters a trigger + * @param $table The name of the table containing the trigger + * @param $trigger The name of the trigger to alter + * @param $name The new name for the trigger + * @return 0 success + */ + function alterTrigger($table, $trigger, $name) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $this->fieldClean($trigger); + $this->fieldClean($name); + + $sql = "ALTER TRIGGER \"{$trigger}\" ON \"{$f_schema}\".\"{$table}\" RENAME TO \"{$name}\""; + + return $this->execute($sql); + } + + /** + * Drops a trigger + * @param $tgname The name of the trigger to drop + * @param $table The table from which to drop the trigger + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropTrigger($tgname, $table, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($tgname); + $this->fieldClean($table); + + $sql = "DROP TRIGGER \"{$tgname}\" ON \"{$f_schema}\".\"{$table}\""; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * Enables a trigger + * @param $tgname The name of the trigger to enable + * @param $table The table in which to enable the trigger + * @return 0 success + */ + function enableTrigger($tgname, $table) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($tgname); + $this->fieldClean($table); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" ENABLE TRIGGER \"{$tgname}\""; + + return $this->execute($sql); + } + + /** + * Disables a trigger + * @param $tgname The name of the trigger to disable + * @param $table The table in which to disable the trigger + * @return 0 success + */ + function disableTrigger($tgname, $table) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($tgname); + $this->fieldClean($table); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" DISABLE TRIGGER \"{$tgname}\""; + + return $this->execute($sql); + } + + // Operator functions + + /** + * Returns a list of all operators in the database + * @return All operators + */ + function getOperators() { + $c_schema = $this->_schema; + $this->clean($c_schema); + // We stick with the subselects here, as you cannot ORDER BY a regtype + $sql = " + SELECT + po.oid, po.oprname, + (SELECT pg_catalog.format_type(oid, NULL) FROM pg_catalog.pg_type pt WHERE pt.oid=po.oprleft) AS oprleftname, + (SELECT pg_catalog.format_type(oid, NULL) FROM pg_catalog.pg_type pt WHERE pt.oid=po.oprright) AS oprrightname, + po.oprresult::pg_catalog.regtype AS resultname, + pg_catalog.obj_description(po.oid, 'pg_operator') AS oprcomment + FROM + pg_catalog.pg_operator po + WHERE + po.oprnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}') + ORDER BY + po.oprname, oprleftname, oprrightname + "; + + return $this->selectSet($sql); + } + + /** + * Returns all details for a particular operator + * @param $operator_oid The oid of the operator + * @return Function info + */ + function getOperator($operator_oid) { + $this->clean($operator_oid); + + $sql = " + SELECT + po.oid, po.oprname, + oprleft::pg_catalog.regtype AS oprleftname, + oprright::pg_catalog.regtype AS oprrightname, + oprresult::pg_catalog.regtype AS resultname, + po.oprcanhash, + oprcanmerge, + oprcom::pg_catalog.regoperator AS oprcom, + oprnegate::pg_catalog.regoperator AS oprnegate, + po.oprcode::pg_catalog.regproc AS oprcode, + po.oprrest::pg_catalog.regproc AS oprrest, + po.oprjoin::pg_catalog.regproc AS oprjoin + FROM + pg_catalog.pg_operator po + WHERE + po.oid='{$operator_oid}' + "; + + return $this->selectSet($sql); + } + + /** + * Drops an operator + * @param $operator_oid The OID of the operator to drop + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropOperator($operator_oid, $cascade) { + // Function comes in with $object as operator OID + $opr = $this->getOperator($operator_oid); + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($opr->fields['oprname']); + + $sql = "DROP OPERATOR \"{$f_schema}\".{$opr->fields['oprname']} ("; + // Quoting or formatting here??? + if ($opr->fields['oprleftname'] !== null) $sql .= $opr->fields['oprleftname'] . ', '; + else $sql .= "NONE, "; + if ($opr->fields['oprrightname'] !== null) $sql .= $opr->fields['oprrightname'] . ')'; + else $sql .= "NONE)"; + + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + // Operator Class functions + + /** + * Gets all opclasses + * + * @return A recordset + */ + + function getOpClasses() { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " + SELECT + pa.amname, po.opcname, + po.opcintype::pg_catalog.regtype AS opcintype, + po.opcdefault, + pg_catalog.obj_description(po.oid, 'pg_opclass') AS opccomment + FROM + pg_catalog.pg_opclass po, pg_catalog.pg_am pa, pg_catalog.pg_namespace pn + WHERE + po.opcmethod=pa.oid + AND po.opcnamespace=pn.oid + AND pn.nspname='{$c_schema}' + ORDER BY 1,2 + "; + + return $this->selectSet($sql); + } + + // FTS functions + + /** + * Creates a new FTS configuration. + * @param string $cfgname The name of the FTS configuration to create + * @param string $parser The parser to be used in new FTS configuration + * @param string $locale Locale of the FTS configuration + * @param string $template The existing FTS configuration to be used as template for the new one + * @param string $withmap Should we copy whole map of existing FTS configuration to the new one + * @param string $makeDefault Should this configuration be the default for locale given + * @param string $comment If omitted, defaults to nothing + * + * @return 0 success + */ + function createFtsConfiguration($cfgname, $parser = '', $template = '', $comment = '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($cfgname); + + $sql = "CREATE TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$cfgname}\" ("; + if ($parser != '') { + $this->fieldClean($parser['schema']); + $this->fieldClean($parser['parser']); + $parser = "\"{$parser['schema']}\".\"{$parser['parser']}\""; + $sql .= " PARSER = {$parser}"; + } + if ($template != '') { + $this->fieldClean($template['schema']); + $this->fieldClean($template['name']); + $sql .= " COPY = \"{$template['schema']}\".\"{$template['name']}\""; + } + $sql .= ")"; + + if ($comment != '') { + $status = $this->beginTransaction(); + if ($status != 0) return -1; + } + + // Create the FTS configuration + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Set the comment + if ($comment != '') { + $status = $this->setComment('TEXT SEARCH CONFIGURATION', $cfgname, '', $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + return $this->endTransaction(); + } + + return 0; + } + + /** + * Returns available FTS configurations + * @param $all if false, returns schema qualified FTS confs + * + * @return A recordset + */ + function getFtsConfigurations($all = true) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " + SELECT + n.nspname as schema, + c.cfgname as name, + pg_catalog.obj_description(c.oid, 'pg_ts_config') as comment + FROM + pg_catalog.pg_ts_config c + JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace + WHERE + pg_catalog.pg_ts_config_is_visible(c.oid)"; + + if (!$all) + $sql.= " AND n.nspname='{$c_schema}'\n"; + + $sql.= "ORDER BY name"; + + return $this->selectSet($sql); + } + + /** + * Return all information related to a FTS configuration + * @param $ftscfg The name of the FTS configuration + * + * @return FTS configuration information + */ + function getFtsConfigurationByName($ftscfg) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($ftscfg); + $sql = " + SELECT + n.nspname as schema, + c.cfgname as name, + p.prsname as parser, + c.cfgparser as parser_id, + pg_catalog.obj_description(c.oid, 'pg_ts_config') as comment + FROM pg_catalog.pg_ts_config c + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace + LEFT JOIN pg_catalog.pg_ts_parser p ON p.oid = c.cfgparser + WHERE pg_catalog.pg_ts_config_is_visible(c.oid) + AND c.cfgname = '{$ftscfg}' + AND n.nspname='{$c_schema}'"; + + return $this->selectSet($sql); + } + + /** + * Returns the map of FTS configuration given + * (list of mappings (tokens) and their processing dictionaries) + * @param string $ftscfg Name of the FTS configuration + * + * @return RecordSet + */ + function getFtsConfigurationMap($ftscfg) { + + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->fieldClean($ftscfg); + + $oidSet = $this->selectSet("SELECT c.oid + FROM pg_catalog.pg_ts_config AS c + LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.cfgnamespace) + WHERE c.cfgname = '{$ftscfg}' + AND n.nspname='{$c_schema}'"); + + $oid = $oidSet->fields['oid']; + + $sql = " + SELECT + (SELECT t.alias FROM pg_catalog.ts_token_type(c.cfgparser) AS t WHERE t.tokid = m.maptokentype) AS name, + (SELECT t.description FROM pg_catalog.ts_token_type(c.cfgparser) AS t WHERE t.tokid = m.maptokentype) AS description, + c.cfgname AS cfgname, n.nspname ||'.'|| d.dictname as dictionaries + FROM + pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m, pg_catalog.pg_ts_dict d, + pg_catalog.pg_namespace n + WHERE + c.oid = {$oid} + AND m.mapcfg = c.oid + AND m.mapdict = d.oid + AND d.dictnamespace = n.oid + ORDER BY name + "; + return $this->selectSet($sql); + } + + /** + * Returns FTS parsers available + * @param $all if false, return only Parsers from the current schema + * + * @return RecordSet + */ + function getFtsParsers($all = true) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " + SELECT + n.nspname as schema, + p.prsname as name, + pg_catalog.obj_description(p.oid, 'pg_ts_parser') as comment + FROM pg_catalog.pg_ts_parser p + LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = p.prsnamespace) + WHERE pg_catalog.pg_ts_parser_is_visible(p.oid)"; + + if (!$all) + $sql.= " AND n.nspname='{$c_schema}'\n"; + + $sql.= "ORDER BY name"; + + return $this->selectSet($sql); + } + + /** + * Returns FTS dictionaries available + * @param $all if false, return only Dics from the current schema + * + * @returns RecordSet + */ + function getFtsDictionaries($all = true) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " + SELECT + n.nspname as schema, d.dictname as name, + pg_catalog.obj_description(d.oid, 'pg_ts_dict') as comment + FROM pg_catalog.pg_ts_dict d + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.dictnamespace + WHERE pg_catalog.pg_ts_dict_is_visible(d.oid)"; + + if (!$all) + $sql.= " AND n.nspname='{$c_schema}'\n"; + + $sql.= "ORDER BY name;"; + + return $this->selectSet($sql); + } + + /** + * Returns all FTS dictionary templates available + */ + function getFtsDictionaryTemplates() { + + $sql = " + SELECT + n.nspname as schema, + t.tmplname as name, + ( SELECT COALESCE(np.nspname, '(null)')::pg_catalog.text || '.' || p.proname + FROM pg_catalog.pg_proc p + LEFT JOIN pg_catalog.pg_namespace np ON np.oid = p.pronamespace + WHERE t.tmplinit = p.oid ) AS init, + ( SELECT COALESCE(np.nspname, '(null)')::pg_catalog.text || '.' || p.proname + FROM pg_catalog.pg_proc p + LEFT JOIN pg_catalog.pg_namespace np ON np.oid = p.pronamespace + WHERE t.tmpllexize = p.oid ) AS lexize, + pg_catalog.obj_description(t.oid, 'pg_ts_template') as comment + FROM pg_catalog.pg_ts_template t + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.tmplnamespace + WHERE pg_catalog.pg_ts_template_is_visible(t.oid) + ORDER BY name;"; + + return $this->selectSet($sql); + } + + /** + * Drops FTS coniguration + * @param $ftscfg The configuration's name + * @param $cascade Cascade to dependenced objects + * + * @return 0 on success + */ + function dropFtsConfiguration($ftscfg, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($ftscfg); + + $sql = "DROP TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$ftscfg}\""; + if ($cascade) $sql .= ' CASCADE'; + + return $this->execute($sql); + } + + /** + * Drops FTS dictionary + * @param $ftsdict The dico's name + * @param $cascade Cascade to dependenced objects + * + * @todo Support of dictionary templates dropping + * @return 0 on success + */ + function dropFtsDictionary($ftsdict, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($ftsdict); + + $sql = "DROP TEXT SEARCH DICTIONARY"; + $sql .= " \"{$f_schema}\".\"{$ftsdict}\""; + if ($cascade) $sql .= ' CASCADE'; + + return $this->execute($sql); + } + + /** + * Alters FTS configuration + * @param $cfgname The conf's name + * @param $comment A comment on for the conf + * @param $name The new conf name + * + * @return 0 on success + */ + function updateFtsConfiguration($cfgname, $comment, $name) { + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $this->fieldClean($cfgname); + + $status = $this->setComment('TEXT SEARCH CONFIGURATION', $cfgname, '', $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Only if the name has changed + if ($name != $cfgname) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + + $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$cfgname}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + } + + return $this->endTransaction(); + } + + /** + * Creates a new FTS dictionary or FTS dictionary template. + * @param string $dictname The name of the FTS dictionary to create + * @param boolean $isTemplate Flag whether we create usual dictionary or dictionary template + * @param string $template The existing FTS dictionary to be used as template for the new one + * @param string $lexize The name of the function, which does transformation of input word + * @param string $init The name of the function, which initializes dictionary + * @param string $option Usually, it stores various options required for the dictionary + * @param string $comment If omitted, defaults to nothing + * + * @return 0 success + */ + function createFtsDictionary($dictname, $isTemplate = false, $template = '', $lexize = '', + $init = '', $option = '', $comment = '') { + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($dictname); + $this->fieldClean($template); + $this->fieldClean($lexize); + $this->fieldClean($init); + $this->fieldClean($option); + + $sql = "CREATE TEXT SEARCH"; + if ($isTemplate) { + $sql .= " TEMPLATE \"{$f_schema}\".\"{$dictname}\" ("; + if ($lexize != '') $sql .= " LEXIZE = {$lexize}"; + if ($init != '') $sql .= ", INIT = {$init}"; + $sql .= ")"; + $whatToComment = 'TEXT SEARCH TEMPLATE'; + } else { + $sql .= " DICTIONARY \"{$f_schema}\".\"{$dictname}\" ("; + if ($template != '') { + $this->fieldClean($template['schema']); + $this->fieldClean($template['name']); + $template = "\"{$template['schema']}\".\"{$template['name']}\""; + + $sql .= " TEMPLATE = {$template}"; + } + if ($option != '') $sql .= ", {$option}"; + $sql .= ")"; + $whatToComment = 'TEXT SEARCH DICTIONARY'; + } + + /* if comment, begin a transaction to + * run both commands */ + if ($comment != '') { + $status = $this->beginTransaction(); + if ($status != 0) return -1; + } + + // Create the FTS dictionary + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Set the comment + if ($comment != '') { + $status = $this->setComment($whatToComment, $dictname, '', $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + } + + return $this->endTransaction(); + } + + /** + * Alters FTS dictionary or dictionary template + * @param $dictname The dico's name + * @param $comment The comment + * @param $name The new dico's name + * + * @return 0 on success + */ + function updateFtsDictionary($dictname, $comment, $name) { + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $this->fieldClean($dictname); + $status = $this->setComment('TEXT SEARCH DICTIONARY', $dictname, '', $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + // Only if the name has changed + if ($name != $dictname) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + + $sql = "ALTER TEXT SEARCH DICTIONARY \"{$f_schema}\".\"{$dictname}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + } + + return $this->endTransaction(); + } + + /** + * Return all information relating to a FTS dictionary + * @param $ftsdict The name of the FTS dictionary + * + * @return RecordSet of FTS dictionary information + */ + function getFtsDictionaryByName($ftsdict) { + + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($ftsdict); + + $sql = "SELECT + n.nspname as schema, + d.dictname as name, + ( SELECT COALESCE(nt.nspname, '(null)')::pg_catalog.text || '.' || t.tmplname FROM + pg_catalog.pg_ts_template t + LEFT JOIN pg_catalog.pg_namespace nt ON nt.oid = t.tmplnamespace + WHERE d.dicttemplate = t.oid ) AS template, + d.dictinitoption as init, + pg_catalog.obj_description(d.oid, 'pg_ts_dict') as comment + FROM pg_catalog.pg_ts_dict d + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.dictnamespace + WHERE d.dictname = '{$ftsdict}' + AND pg_catalog.pg_ts_dict_is_visible(d.oid) + AND n.nspname='{$c_schema}' + ORDER BY name"; + + return $this->selectSet($sql); + } + + /** + * Creates/updates/deletes FTS mapping. + * @param string $cfgname The name of the FTS configuration to alter + * @param array $mapping Array of tokens' names + * @param string $action What to do with the mapping: add, alter or drop + * @param string $dictname Dictionary that will process tokens given or null in case of drop action + * + * @return 0 success + */ + function changeFtsMapping($ftscfg, $mapping, $action, $dictname = null) { + + if (count($mapping) > 0) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($ftscfg); + $this->fieldClean($dictname); + $this->arrayClean($mapping); + + switch ($action) { + case 'alter': + $whatToDo = "ALTER"; + break; + case 'drop': + $whatToDo = "DROP"; + break; + default: + $whatToDo = "ADD"; + break; + } + + $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$f_schema}\".\"{$ftscfg}\" {$whatToDo} MAPPING FOR "; + $sql .= implode(",", $mapping); + if ($action != 'drop' && !empty($dictname)) { + $sql .= " WITH {$dictname}"; + } + + return $this->execute($sql); + } + else { + return -1; + } + } + + /** + * Return all information related to a given FTS configuration's mapping + * @param $ftscfg The name of the FTS configuration + * @param $mapping The name of the mapping + * + * @return FTS configuration information + */ + function getFtsMappingByName($ftscfg, $mapping) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($ftscfg); + $this->clean($mapping); + + $oidSet = $this->selectSet("SELECT c.oid, cfgparser + FROM pg_catalog.pg_ts_config AS c + LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = c.cfgnamespace + WHERE c.cfgname = '{$ftscfg}' + AND n.nspname='{$c_schema}'"); + + $oid = $oidSet->fields['oid']; + $cfgparser = $oidSet->fields['cfgparser']; + + $tokenIdSet = $this->selectSet("SELECT tokid + FROM pg_catalog.ts_token_type({$cfgparser}) + WHERE alias = '{$mapping}'"); + + $tokid = $tokenIdSet->fields['tokid']; + + $sql = "SELECT + (SELECT t.alias FROM pg_catalog.ts_token_type(c.cfgparser) AS t WHERE t.tokid = m.maptokentype) AS name, + d.dictname as dictionaries + FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m, pg_catalog.pg_ts_dict d + WHERE c.oid = {$oid} AND m.mapcfg = c.oid AND m.maptokentype = {$tokid} AND m.mapdict = d.oid + LIMIT 1;"; + + return $this->selectSet($sql); + } + + /** + * Return list of FTS mappings possible for given parser + * (specified by given configuration since configuration can only have 1 parser) + * @param $ftscfg The config's name that use the parser + * + * @return 0 on success + */ + function getFtsMappings($ftscfg) { + + $cfg = $this->getFtsConfigurationByName($ftscfg); + + $sql = "SELECT alias AS name, description + FROM pg_catalog.ts_token_type({$cfg->fields['parser_id']}) + ORDER BY name"; + + return $this->selectSet($sql); + } + + // Language functions + + /** + * Gets all languages + * @param $all True to get all languages, regardless of show_system + * @return A recordset + */ + function getLanguages($all = false) { + global $conf; + + if ($conf['show_system'] || $all) + $where = ''; + else + $where = 'WHERE lanispl'; + + $sql = " + SELECT + lanname, lanpltrusted, + lanplcallfoid::pg_catalog.regproc AS lanplcallf + FROM + pg_catalog.pg_language + {$where} + ORDER BY lanname + "; + + return $this->selectSet($sql); + } + + // Aggregate functions + + /** + * Creates a new aggregate in the database + * @param $name The name of the aggregate + * @param $basetype The input data type of the aggregate + * @param $sfunc The name of the state transition function for the aggregate + * @param $stype The data type for the aggregate's state value + * @param $ffunc The name of the final function for the aggregate + * @param $initcond The initial setting for the state value + * @param $sortop The sort operator for the aggregate + * @param $comment Aggregate comment + * @return 0 success + * @return -1 error + */ + function createAggregate($name, $basetype, $sfunc, $stype, $ffunc, $initcond, $sortop, $comment) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($name); + $this->fieldClean($basetype); + $this->fieldClean($sfunc); + $this->fieldClean($stype); + $this->fieldClean($ffunc); + $this->fieldClean($initcond); + $this->fieldClean($sortop); + + $this->beginTransaction(); + + $sql = "CREATE AGGREGATE \"{$f_schema}\".\"{$name}\" (BASETYPE = \"{$basetype}\", SFUNC = \"{$sfunc}\", STYPE = \"{$stype}\""; + if(trim($ffunc) != '') $sql .= ", FINALFUNC = \"{$ffunc}\""; + if(trim($initcond) != '') $sql .= ", INITCOND = \"{$initcond}\""; + if(trim($sortop) != '') $sql .= ", SORTOP = \"{$sortop}\""; + $sql .= ")"; + + $status = $this->execute($sql); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + + if (trim($comment) != '') { + $status = $this->setComment('AGGREGATE', $name, '', $comment, $basetype); + if ($status) { + $this->rollbackTransaction(); + return -1; + } + } + + return $this->endTransaction(); + } + + /** + * Renames an aggregate function + * @param $aggrname The actual name of the aggregate + * @param $aggrtype The actual input data type of the aggregate + * @param $newaggrname The new name of the aggregate + * @return 0 success + */ + function renameAggregate($aggrschema, $aggrname, $aggrtype, $newaggrname) { + /* this function is called from alterAggregate where params are cleaned */ + $sql = "ALTER AGGREGATE \"{$aggrschema}\"" . '.' . "\"{$aggrname}\" (\"{$aggrtype}\") RENAME TO \"{$newaggrname}\""; + return $this->execute($sql); + } + + /** + * Removes an aggregate function from the database + * @param $aggrname The name of the aggregate + * @param $aggrtype The input data type of the aggregate + * @param $cascade True to cascade drop, false to restrict + * @return 0 success + */ + function dropAggregate($aggrname, $aggrtype, $cascade) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($aggrname); + $this->fieldClean($aggrtype); + + $sql = "DROP AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\")"; + if ($cascade) $sql .= " CASCADE"; + + return $this->execute($sql); + } + + /** + * Gets all information for an aggregate + * @param $name The name of the aggregate + * @param $basetype The input data type of the aggregate + * @return A recordset + */ + function getAggregate($name, $basetype) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->fieldclean($name); + $this->fieldclean($basetype); + + $sql = " + SELECT p.proname, CASE p.proargtypes[0] + WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN NULL + ELSE pg_catalog.format_type(p.proargtypes[0], NULL) END AS proargtypes, + a.aggtransfn, format_type(a.aggtranstype, NULL) AS aggstype, a.aggfinalfn, + a.agginitval, a.aggsortop, u.usename, pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment + FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a + WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid + AND p.proisagg AND n.nspname='{$c_schema}' + AND p.proname='" . $name . "' + AND CASE p.proargtypes[0] + WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN '' + ELSE pg_catalog.format_type(p.proargtypes[0], NULL) + END ='" . $basetype . "'"; + + return $this->selectSet($sql); + } + + /** + * Gets all aggregates + * @return A recordset + */ + function getAggregates() { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = "SELECT p.proname, CASE p.proargtypes[0] WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN NULL ELSE + pg_catalog.format_type(p.proargtypes[0], NULL) END AS proargtypes, a.aggtransfn, u.usename, + pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment + FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a + WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid + AND p.proisagg AND n.nspname='{$c_schema}' ORDER BY 1, 2"; + + return $this->selectSet($sql); + } + + /** + * Changes the owner of an aggregate function + * @param $aggrname The name of the aggregate + * @param $aggrtype The input data type of the aggregate + * @param $newaggrowner The new owner of the aggregate + * @return 0 success + */ + function changeAggregateOwner($aggrname, $aggrtype, $newaggrowner) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($aggrname); + $this->fieldClean($newaggrowner); + $sql = "ALTER AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\") OWNER TO \"{$newaggrowner}\""; + return $this->execute($sql); + } + + /** + * Changes the schema of an aggregate function + * @param $aggrname The name of the aggregate + * @param $aggrtype The input data type of the aggregate + * @param $newaggrschema The new schema for the aggregate + * @return 0 success + */ + function changeAggregateSchema($aggrname, $aggrtype, $newaggrschema) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($aggrname); + $this->fieldClean($newaggrschema); + $sql = "ALTER AGGREGATE \"{$f_schema}\".\"{$aggrname}\" (\"{$aggrtype}\") SET SCHEMA \"{$newaggrschema}\""; + return $this->execute($sql); + } + + /** + * Alters an aggregate + * @param $aggrname The actual name of the aggregate + * @param $aggrtype The actual input data type of the aggregate + * @param $aggrowner The actual owner of the aggregate + * @param $aggrschema The actual schema the aggregate belongs to + * @param $aggrcomment The actual comment for the aggregate + * @param $newaggrname The new name of the aggregate + * @param $newaggrowner The new owner of the aggregate + * @param $newaggrschema The new schema where the aggregate will belong to + * @param $newaggrcomment The new comment for the aggregate + * @return 0 success + * @return -1 change owner error + * @return -2 change comment error + * @return -3 change schema error + * @return -4 change name error + */ + function alterAggregate($aggrname, $aggrtype, $aggrowner, $aggrschema, $aggrcomment, $newaggrname, $newaggrowner, $newaggrschema, $newaggrcomment) { + // Clean fields + $this->fieldClean($aggrname); + $this->fieldClean($aggrtype); + $this->fieldClean($aggrowner); + $this->fieldClean($aggrschema); + $this->fieldClean($newaggrname); + $this->fieldClean($newaggrowner); + $this->fieldClean($newaggrschema); + + $this->beginTransaction(); + + // Change the owner, if it has changed + if($aggrowner != $newaggrowner) { + $status = $this->changeAggregateOwner($aggrname, $aggrtype, $newaggrowner); + if($status != 0) { + $this->rollbackTransaction(); + return -1; + } + } + + // Set the comment, if it has changed + if($aggrcomment != $newaggrcomment) { + $status = $this->setComment('AGGREGATE', $aggrname, '', $newaggrcomment, $aggrtype); + if ($status) { + $this->rollbackTransaction(); + return -2; + } + } + + // Change the schema, if it has changed + if($aggrschema != $newaggrschema) { + $status = $this->changeAggregateSchema($aggrname, $aggrtype, $newaggrschema); + if($status != 0) { + $this->rollbackTransaction(); + return -3; + } + } + + // Rename the aggregate, if it has changed + if($aggrname != $newaggrname) { + $status = $this->renameAggregate($newaggrschema, $aggrname, $aggrtype, $newaggrname); + if($status != 0) { + $this->rollbackTransaction(); + return -4; + } + } + + return $this->endTransaction(); + } + + // Role, User/Group functions + + /** + * Returns all roles in the database cluster + * @param $rolename (optional) The role name to exclude from the select + * @return All roles + */ + function getRoles($rolename = '') { + $sql = ' + SELECT rolname, rolsuper, rolcreatedb, rolcreaterole, rolinherit, + rolcanlogin, rolconnlimit, rolvaliduntil, rolconfig + FROM pg_catalog.pg_roles'; + if($rolename) $sql .= " WHERE rolname!='{$rolename}'"; + $sql .= ' ORDER BY rolname'; + + return $this->selectSet($sql); + } + + /** + * Returns information about a single role + * @param $rolename The name of the role to retrieve + * @return The role's data + */ + function getRole($rolename) { + $this->clean($rolename); + + $sql = " + SELECT rolname, rolsuper, rolcreatedb, rolcreaterole, rolinherit, + rolcanlogin, rolconnlimit, rolvaliduntil, rolconfig + FROM pg_catalog.pg_roles WHERE rolname='{$rolename}'"; + + return $this->selectSet($sql); + } + + /** + * Grants membership in a role + * @param $role The name of the target role + * @param $rolename The name of the role that will belong to the target role + * @param $admin (optional) Flag to grant the admin option + * @return 0 success + */ + function grantRole($role, $rolename, $admin=0) { + $this->fieldClean($role); + $this->fieldClean($rolename); + + $sql = "GRANT \"{$role}\" TO \"{$rolename}\""; + if($admin == 1) $sql .= ' WITH ADMIN OPTION'; + + return $this->execute($sql); + } + + /** + * Revokes membership in a role + * @param $role The name of the target role + * @param $rolename The name of the role that will not belong to the target role + * @param $admin (optional) Flag to revoke only the admin option + * @param $type (optional) Type of revoke: RESTRICT | CASCADE + * @return 0 success + */ + function revokeRole($role, $rolename, $admin = 0, $type = 'RESTRICT') { + $this->fieldClean($role); + $this->fieldClean($rolename); + + $sql = "REVOKE "; + if($admin == 1) $sql .= 'ADMIN OPTION FOR '; + $sql .= "\"{$role}\" FROM \"{$rolename}\" {$type}"; + + return $this->execute($sql); + } + + /** + * Returns all users in the database cluster + * @return All users + */ + function getUsers() { + $sql = "SELECT usename, usesuper, usecreatedb, valuntil AS useexpires, useconfig + FROM pg_user + ORDER BY usename"; + + return $this->selectSet($sql); + } + + /** + * Returns information about a single user + * @param $username The username of the user to retrieve + * @return The user's data + */ + function getUser($username) { + $this->clean($username); + + $sql = "SELECT usename, usesuper, usecreatedb, valuntil AS useexpires, useconfig + FROM pg_user + WHERE usename='{$username}'"; + + return $this->selectSet($sql); + } + + /** + * Creates a new role + * @param $rolename The name of the role to create + * @param $password A password for the role + * @param $superuser Boolean whether or not the role is a superuser + * @param $createdb Boolean whether or not the role can create databases + * @param $createrole Boolean whether or not the role can create other roles + * @param $inherits Boolean whether or not the role inherits the privileges from parent roles + * @param $login Boolean whether or not the role will be allowed to login + * @param $connlimit Number of concurrent connections the role can make + * @param $expiry String Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire + * @param $memberof (array) Roles to which the new role will be immediately added as a new member + * @param $members (array) Roles which are automatically added as members of the new role + * @param $adminmembers (array) Roles which are automatically added as admin members of the new role + * @return 0 success + */ + function createRole($rolename, $password, $superuser, $createdb, $createrole, $inherits, $login, $connlimit, $expiry, $memberof, $members, $adminmembers) { + $enc = $this->_encryptPassword($rolename, $password); + $this->fieldClean($rolename); + $this->clean($enc); + $this->clean($connlimit); + $this->clean($expiry); + $this->fieldArrayClean($memberof); + $this->fieldArrayClean($members); + $this->fieldArrayClean($adminmembers); + + $sql = "CREATE ROLE \"{$rolename}\""; + if ($password != '') $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= ($superuser) ? ' SUPERUSER' : ' NOSUPERUSER'; + $sql .= ($createdb) ? ' CREATEDB' : ' NOCREATEDB'; + $sql .= ($createrole) ? ' CREATEROLE' : ' NOCREATEROLE'; + $sql .= ($inherits) ? ' INHERIT' : ' NOINHERIT'; + $sql .= ($login) ? ' LOGIN' : ' NOLOGIN'; + if ($connlimit != '') $sql .= " CONNECTION LIMIT {$connlimit}"; else $sql .= ' CONNECTION LIMIT -1'; + if ($expiry != '') $sql .= " VALID UNTIL '{$expiry}'"; else $sql .= " VALID UNTIL 'infinity'"; + if (is_array($memberof) && sizeof($memberof) > 0) $sql .= ' IN ROLE "' . join('", "', $memberof) . '"'; + if (is_array($members) && sizeof($members) > 0) $sql .= ' ROLE "' . join('", "', $members) . '"'; + if (is_array($adminmembers) && sizeof($adminmembers) > 0) $sql .= ' ADMIN "' . join('", "', $adminmembers) . '"'; + + return $this->execute($sql); + } + + /** + * Adjusts a role's info + * @param $rolename The name of the role to adjust + * @param $password A password for the role + * @param $superuser Boolean whether or not the role is a superuser + * @param $createdb Boolean whether or not the role can create databases + * @param $createrole Boolean whether or not the role can create other roles + * @param $inherits Boolean whether or not the role inherits the privileges from parent roles + * @param $login Boolean whether or not the role will be allowed to login + * @param $connlimit Number of concurrent connections the role can make + * @param $expiry string Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire + * @param $memberof (array) Roles to which the role will be immediately added as a new member + * @param $members (array) Roles which are automatically added as members of the role + * @param $adminmembers (array) Roles which are automatically added as admin members of the role + * @param $memberofold (array) Original roles whose the role belongs to + * @param $membersold (array) Original roles that are members of the role + * @param $adminmembersold (array) Original roles that are admin members of the role + * @return 0 success + */ + function setRole($rolename, $password, $superuser, $createdb, $createrole, $inherits, $login, $connlimit, $expiry, $memberof, $members, $adminmembers, $memberofold, $membersold, $adminmembersold) { + $enc = $this->_encryptPassword($rolename, $password); + $this->fieldClean($rolename); + $this->clean($enc); + $this->clean($connlimit); + $this->clean($expiry); + $this->fieldArrayClean($memberof); + $this->fieldArrayClean($members); + $this->fieldArrayClean($adminmembers); + + $sql = "ALTER ROLE \"{$rolename}\""; + if ($password != '') $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= ($superuser) ? ' SUPERUSER' : ' NOSUPERUSER'; + $sql .= ($createdb) ? ' CREATEDB' : ' NOCREATEDB'; + $sql .= ($createrole) ? ' CREATEROLE' : ' NOCREATEROLE'; + $sql .= ($inherits) ? ' INHERIT' : ' NOINHERIT'; + $sql .= ($login) ? ' LOGIN' : ' NOLOGIN'; + if ($connlimit != '') $sql .= " CONNECTION LIMIT {$connlimit}"; else $sql .= ' CONNECTION LIMIT -1'; + if ($expiry != '') $sql .= " VALID UNTIL '{$expiry}'"; else $sql .= " VALID UNTIL 'infinity'"; + + $status = $this->execute($sql); + + if ($status != 0) return -1; + + //memberof + $old = explode(',', $memberofold); + foreach ($memberof as $m) { + if (!in_array($m, $old)) { + $status = $this->grantRole($m, $rolename); + if ($status != 0) return -1; + } + } + if($memberofold) + { + foreach ($old as $o) { + if (!in_array($o, $memberof)) { + $status = $this->revokeRole($o, $rolename, 0, 'CASCADE'); + if ($status != 0) return -1; + } + } + } + + //members + $old = explode(',', $membersold); + foreach ($members as $m) { + if (!in_array($m, $old)) { + $status = $this->grantRole($rolename, $m); + if ($status != 0) return -1; + } + } + if($membersold) + { + foreach ($old as $o) { + if (!in_array($o, $members)) { + $status = $this->revokeRole($rolename, $o, 0, 'CASCADE'); + if ($status != 0) return -1; + } + } + } + + //adminmembers + $old = explode(',', $adminmembersold); + foreach ($adminmembers as $m) { + if (!in_array($m, $old)) { + $status = $this->grantRole($rolename, $m, 1); + if ($status != 0) return -1; + } + } + if($adminmembersold) + { + foreach ($old as $o) { + if (!in_array($o, $adminmembers)) { + $status = $this->revokeRole($rolename, $o, 1, 'CASCADE'); + if ($status != 0) return -1; + } + } + } + + return $status; + } + + /** + * Renames a role + * @param $rolename The name of the role to rename + * @param $newrolename The new name of the role + * @return 0 success + */ + function renameRole($rolename, $newrolename){ + $this->fieldClean($rolename); + $this->fieldClean($newrolename); + + $sql = "ALTER ROLE \"{$rolename}\" RENAME TO \"{$newrolename}\""; + + return $this->execute($sql); + } + + /** + * Adjusts a role's info and renames it + * @param $rolename The name of the role to adjust + * @param $password A password for the role + * @param $superuser Boolean whether or not the role is a superuser + * @param $createdb Boolean whether or not the role can create databases + * @param $createrole Boolean whether or not the role can create other roles + * @param $inherits Boolean whether or not the role inherits the privileges from parent roles + * @param $login Boolean whether or not the role will be allowed to login + * @param $connlimit Number of concurrent connections the role can make + * @param $expiry string Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire + * @param $memberof (array) Roles to which the role will be immediately added as a new member + * @param $members (array) Roles which are automatically added as members of the role + * @param $adminmembers (array) Roles which are automatically added as admin members of the role + * @param $memberofold (array) Original roles whose the role belongs to + * @param $membersold (array) Original roles that are members of the role + * @param $adminmembersold (array) Original roles that are admin members of the role + * @param $newrolename The new name of the role + * @return 0 success + * @return -1 transaction error + * @return -2 set role attributes error + * @return -3 rename error + */ + function setRenameRole($rolename, $password, $superuser, $createdb, $createrole, + $inherits, $login, $connlimit, $expiry, $memberof, $members, $adminmembers, + $memberofold, $membersold, $adminmembersold, $newrolename) { + + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + if ($rolename != $newrolename){ + $status = $this->renameRole($rolename, $newrolename); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + $rolename = $newrolename; + } + + $status = $this->setRole($rolename, $password, $superuser, $createdb, $createrole, $inherits, $login, $connlimit, $expiry, $memberof, $members, $adminmembers, $memberofold, $membersold, $adminmembersold); + if ($status != 0) { + $this->rollbackTransaction(); + return -2; + } + + return $this->endTransaction(); + } + + /** + * Removes a role + * @param $rolename The name of the role to drop + * @return 0 success + */ + function dropRole($rolename) { + $this->fieldClean($rolename); + + $sql = "DROP ROLE \"{$rolename}\""; + + return $this->execute($sql); + } + + /** + * Creates a new user + * @param $username The username of the user to create + * @param $password A password for the user + * @param $createdb boolean Whether or not the user can create databases + * @param $createuser boolean Whether or not the user can create other users + * @param $expiry string Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire + * @param $group (array) The groups to create the user in + * @return 0 success + */ + function createUser($username, $password, $createdb, $createuser, $expiry, $groups) { + $enc = $this->_encryptPassword($username, $password); + $this->fieldClean($username); + $this->clean($enc); + $this->clean($expiry); + $this->fieldArrayClean($groups); + + $sql = "CREATE USER \"{$username}\""; + if ($password != '') $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= ($createdb) ? ' CREATEDB' : ' NOCREATEDB'; + $sql .= ($createuser) ? ' CREATEUSER' : ' NOCREATEUSER'; + if (is_array($groups) && sizeof($groups) > 0) $sql .= " IN GROUP \"" . join('", "', $groups) . "\""; + if ($expiry != '') $sql .= " VALID UNTIL '{$expiry}'"; + else $sql .= " VALID UNTIL 'infinity'"; + + return $this->execute($sql); + } + + /** + * Renames a user + * @param $username The username of the user to rename + * @param $newname The new name of the user + * @return 0 success + */ + function renameUser($username, $newname){ + $this->fieldClean($username); + $this->fieldClean($newname); + + $sql = "ALTER USER \"{$username}\" RENAME TO \"{$newname}\""; + + return $this->execute($sql); + } + + /** + * Adjusts a user's info + * @param $username The username of the user to modify + * @param $password A new password for the user + * @param $createdb boolean Whether or not the user can create databases + * @param $createuser boolean Whether or not the user can create other users + * @param $expiry string Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire. + * @return 0 success + */ + function setUser($username, $password, $createdb, $createuser, $expiry) { + $enc = $this->_encryptPassword($username, $password); + $this->fieldClean($username); + $this->clean($enc); + $this->clean($expiry); + + $sql = "ALTER USER \"{$username}\""; + if ($password != '') $sql .= " WITH ENCRYPTED PASSWORD '{$enc}'"; + $sql .= ($createdb) ? ' CREATEDB' : ' NOCREATEDB'; + $sql .= ($createuser) ? ' CREATEUSER' : ' NOCREATEUSER'; + if ($expiry != '') $sql .= " VALID UNTIL '{$expiry}'"; + else $sql .= " VALID UNTIL 'infinity'"; + + return $this->execute($sql); + } + + /** + * Adjusts a user's info and renames the user + * @param $username The username of the user to modify + * @param $password A new password for the user + * @param $createdb boolean Whether or not the user can create databases + * @param $createuser boolean Whether or not the user can create other users + * @param $expiry string Format 'YYYY-MM-DD HH:MM:SS'. '' means never expire. + * @param $newname The new name of the user + * @return 0 success + * @return -1 transaction error + * @return -2 set user attributes error + * @return -3 rename error + */ + function setRenameUser($username, $password, $createdb, $createuser, $expiry, $newname) { + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + if ($username != $newname){ + $status = $this->renameUser($username, $newname); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + $username = $newname; + } + + $status = $this->setUser($username, $password, $createdb, $createuser, $expiry); + if ($status != 0) { + $this->rollbackTransaction(); + return -2; + } + + return $this->endTransaction(); + } + + /** + * Removes a user + * @param $username The username of the user to drop + * @return 0 success + */ + function dropUser($username) { + $this->fieldClean($username); + + $sql = "DROP USER \"{$username}\""; + + return $this->execute($sql); + } + + /** + * Determines whether or not a user is a super user + * @param $username The username of the user + * @return True if is a super user, false otherwise + */ + function isSuperUser($username = '') { + $this->clean($username); + + if (empty($usename)) { + $val = pg_parameter_status($this->conn->_connectionID, 'is_superuser'); + if ($val !== false) return $val == 'on'; + } + + $sql = "SELECT usesuper FROM pg_user WHERE usename='{$username}'"; + + $usesuper = $this->selectField($sql, 'usesuper'); + if ($usesuper == -1) return false; + else return $usesuper == 't'; + } + + /** + * Changes a role's password + * @param $rolename The role name + * @param $password The new password + * @return 0 success + */ + function changePassword($rolename, $password) { + $enc = $this->_encryptPassword($rolename, $password); + $this->fieldClean($rolename); + $this->clean($enc); + + $sql = "ALTER ROLE \"{$rolename}\" WITH ENCRYPTED PASSWORD '{$enc}'"; + + return $this->execute($sql); + } + + /** + * Adds a group member + * @param $groname The name of the group + * @param $user The name of the user to add to the group + * @return 0 success + */ + function addGroupMember($groname, $user) { + $this->fieldClean($groname); + $this->fieldClean($user); + + $sql = "ALTER GROUP \"{$groname}\" ADD USER \"{$user}\""; + + return $this->execute($sql); + } + + /** + * Returns all role names which the role belongs to + * @param $rolename The role name + * @return All role names + */ + function getMemberOf($rolename) { + $this->clean($rolename); + + $sql = " + SELECT rolname FROM pg_catalog.pg_roles R, pg_auth_members M + WHERE R.oid=M.roleid + AND member IN ( + SELECT oid FROM pg_catalog.pg_roles + WHERE rolname='{$rolename}') + ORDER BY rolname"; + + return $this->selectSet($sql); + } + + /** + * Returns all role names that are members of a role + * @param $rolename The role name + * @param $admin (optional) Find only admin members + * @return All role names + */ + function getMembers($rolename, $admin = 'f') { + $this->clean($rolename); + + $sql = " + SELECT rolname FROM pg_catalog.pg_roles R, pg_auth_members M + WHERE R.oid=M.member AND admin_option='{$admin}' + AND roleid IN (SELECT oid FROM pg_catalog.pg_roles + WHERE rolname='{$rolename}') + ORDER BY rolname"; + + return $this->selectSet($sql); + } + + /** + * Removes a group member + * @param $groname The name of the group + * @param $user The name of the user to remove from the group + * @return 0 success + */ + function dropGroupMember($groname, $user) { + $this->fieldClean($groname); + $this->fieldClean($user); + + $sql = "ALTER GROUP \"{$groname}\" DROP USER \"{$user}\""; + + return $this->execute($sql); + } + + /** + * Return users in a specific group + * @param $groname The name of the group + * @return All users in the group + */ + function getGroup($groname) { + $this->clean($groname); + + $sql = " + SELECT s.usename FROM pg_catalog.pg_user s, pg_catalog.pg_group g + WHERE g.groname='{$groname}' AND s.usesysid = ANY (g.grolist) + ORDER BY s.usename"; + + return $this->selectSet($sql); + } + + /** + * Returns all groups in the database cluser + * @return All groups + */ + function getGroups() { + $sql = "SELECT groname FROM pg_group ORDER BY groname"; + + return $this->selectSet($sql); + } + + /** + * Creates a new group + * @param $groname The name of the group + * @param $users An array of users to add to the group + * @return 0 success + */ + function createGroup($groname, $users) { + $this->fieldClean($groname); + + $sql = "CREATE GROUP \"{$groname}\""; + + if (is_array($users) && sizeof($users) > 0) { + $this->fieldArrayClean($users); + $sql .= ' WITH USER "' . join('", "', $users) . '"'; + } + + return $this->execute($sql); + } + + /** + * Removes a group + * @param $groname The name of the group to drop + * @return 0 success + */ + function dropGroup($groname) { + $this->fieldClean($groname); + + $sql = "DROP GROUP \"{$groname}\""; + + return $this->execute($sql); + } + + /** + * Internal function used for parsing ACLs + * @param $acl The ACL to parse (of type aclitem[]) + * @return Privileges array + */ + function _parseACL($acl) { + // Take off the first and last characters (the braces) + $acl = substr($acl, 1, strlen($acl) - 2); + + // Pick out individual ACE's by carefully parsing. This is necessary in order + // to cope with usernames and stuff that contain commas + $aces = array(); + $i = $j = 0; + $in_quotes = false; + while ($i < strlen($acl)) { + // If current char is a double quote and it's not escaped, then + // enter quoted bit + $char = substr($acl, $i, 1); + if ($char == '"' && ($i == 0 || substr($acl, $i - 1, 1) != '\\')) + $in_quotes = !$in_quotes; + elseif ($char == ',' && !$in_quotes) { + // Add text so far to the array + $aces[] = substr($acl, $j, $i - $j); + $j = $i + 1; + } + $i++; + } + // Add final text to the array + $aces[] = substr($acl, $j); + + // Create the array to be returned + $temp = array(); + + // For each ACE, generate an entry in $temp + foreach ($aces as $v) { + + // If the ACE begins with a double quote, strip them off both ends + // and unescape backslashes and double quotes + $unquote = false; + if (strpos($v, '"') === 0) { + $v = substr($v, 1, strlen($v) - 2); + $v = str_replace('\\"', '"', $v); + $v = str_replace('\\\\', '\\', $v); + } + + // Figure out type of ACE (public, user or group) + if (strpos($v, '=') === 0) + $atype = 'public'; + else if ($this->hasRoles()) { + $atype = 'role'; + } + else if (strpos($v, 'group ') === 0) { + $atype = 'group'; + // Tear off 'group' prefix + $v = substr($v, 6); + } + else + $atype = 'user'; + + // Break on unquoted equals sign... + $i = 0; + $in_quotes = false; + $entity = null; + $chars = null; + while ($i < strlen($v)) { + // If current char is a double quote and it's not escaped, then + // enter quoted bit + $char = substr($v, $i, 1); + $next_char = substr($v, $i + 1, 1); + if ($char == '"' && ($i == 0 || $next_char != '"')) { + $in_quotes = !$in_quotes; + } + // Skip over escaped double quotes + elseif ($char == '"' && $next_char == '"') { + $i++; + } + elseif ($char == '=' && !$in_quotes) { + // Split on current equals sign + $entity = substr($v, 0, $i); + $chars = substr($v, $i + 1); + break; + } + $i++; + } + + // Check for quoting on entity name, and unescape if necessary + if (strpos($entity, '"') === 0) { + $entity = substr($entity, 1, strlen($entity) - 2); + $entity = str_replace('""', '"', $entity); + } + + // New row to be added to $temp + // (type, grantee, privileges, grantor, grant option? + $row = array($atype, $entity, array(), '', array()); + + // Loop over chars and add privs to $row + for ($i = 0; $i < strlen($chars); $i++) { + // Append to row's privs list the string representing + // the privilege + $char = substr($chars, $i, 1); + if ($char == '*') + $row[4][] = $this->privmap[substr($chars, $i - 1, 1)]; + elseif ($char == '/') { + $grantor = substr($chars, $i + 1); + // Check for quoting + if (strpos($grantor, '"') === 0) { + $grantor = substr($grantor, 1, strlen($grantor) - 2); + $grantor = str_replace('""', '"', $grantor); + } + $row[3] = $grantor; + break; + } + else { + if (!isset($this->privmap[$char])) + return -3; + else + $row[2][] = $this->privmap[$char]; + } + } + + // Append row to temp + $temp[] = $row; + } + + return $temp; + } + + /** + * Grabs an array of users and their privileges for an object, + * given its type. + * @param $object The name of the object whose privileges are to be retrieved + * @param $type The type of the object (eg. database, schema, relation, function or language) + * @param $table Optional, column's table if type = column + * @return Privileges array + * @return -1 invalid type + * @return -2 object not found + * @return -3 unknown privilege type + */ + function getPrivileges($object, $type, $table = null) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($object); + + switch ($type) { + case 'column': + $this->clean($table); + $sql = " + SELECT E'{' || pg_catalog.array_to_string(attacl, E',') || E'}' as acl + FROM pg_catalog.pg_attribute a + LEFT JOIN pg_catalog.pg_class c ON (a.attrelid = c.oid) + LEFT JOIN pg_catalog.pg_namespace n ON (c.relnamespace=n.oid) + WHERE n.nspname='{$c_schema}' + AND c.relname='{$table}' + AND a.attname='{$object}'"; + break; + case 'table': + case 'view': + case 'sequence': + $sql = " + SELECT relacl AS acl FROM pg_catalog.pg_class + WHERE relname='{$object}' + AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace + WHERE nspname='{$c_schema}')"; + break; + case 'database': + $sql = "SELECT datacl AS acl FROM pg_catalog.pg_database WHERE datname='{$object}'"; + break; + case 'function': + // Since we fetch functions by oid, they are already constrained to + // the current schema. + $sql = "SELECT proacl AS acl FROM pg_catalog.pg_proc WHERE oid='{$object}'"; + break; + case 'language': + $sql = "SELECT lanacl AS acl FROM pg_catalog.pg_language WHERE lanname='{$object}'"; + break; + case 'schema': + $sql = "SELECT nspacl AS acl FROM pg_catalog.pg_namespace WHERE nspname='{$object}'"; + break; + case 'tablespace': + $sql = "SELECT spcacl AS acl FROM pg_catalog.pg_tablespace WHERE spcname='{$object}'"; + break; + default: + return -1; + } + + // Fetch the ACL for object + $acl = $this->selectField($sql, 'acl'); + if ($acl == -1) return -2; + elseif ($acl == '' || $acl == null) return array(); + else return $this->_parseACL($acl); + } + + /** + * Grants a privilege to a user, group or public + * @param $mode 'GRANT' or 'REVOKE'; + * @param $type The type of object + * @param $object The name of the object + * @param $public True to grant to public, false otherwise + * @param $usernames The array of usernames to grant privs to. + * @param $groupnames The array of group names to grant privs to. + * @param $privileges The array of privileges to grant (eg. ('SELECT', 'ALL PRIVILEGES', etc.) ) + * @param $grantoption True if has grant option, false otherwise + * @param $cascade True for cascade revoke, false otherwise + * @param $table the column's table if type=column + * @return 0 success + * @return -1 invalid type + * @return -2 invalid entity + * @return -3 invalid privileges + * @return -4 not granting to anything + * @return -4 invalid mode + */ + function setPrivileges($mode, $type, $object, $public, $usernames, $groupnames, + $privileges, $grantoption, $cascade, $table + ) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldArrayClean($usernames); + $this->fieldArrayClean($groupnames); + + // Input checking + if (!is_array($privileges) || sizeof($privileges) == 0) return -3; + if (!is_array($usernames) || !is_array($groupnames) || + (!$public && sizeof($usernames) == 0 && sizeof($groupnames) == 0)) return -4; + if ($mode != 'GRANT' && $mode != 'REVOKE') return -5; + + $sql = $mode; + + // Grant option + if ($this->hasGrantOption() && $mode == 'REVOKE' && $grantoption) { + $sql .= ' GRANT OPTION FOR'; + } + + if (in_array('ALL PRIVILEGES', $privileges)) { + $sql .= ' ALL PRIVILEGES'; + } + else { + if ($type == 'column') { + $this->fieldClean($object); + $sql .= ' ' . join(" (\"{$object}\"), ", $privileges); + } + else { + $sql .= ' ' . join(', ', $privileges); + } + } + + switch ($type) { + case 'column': + $sql .= " (\"{$object}\")"; + $object = $table; + case 'table': + case 'view': + case 'sequence': + $this->fieldClean($object); + $sql .= " ON \"{$f_schema}\".\"{$object}\""; + break; + case 'database': + $this->fieldClean($object); + $sql .= " ON DATABASE \"{$object}\""; + break; + case 'function': + // Function comes in with $object as function OID + $fn = $this->getFunction($object); + $this->fieldClean($fn->fields['proname']); + $sql .= " ON FUNCTION \"{$f_schema}\".\"{$fn->fields['proname']}\"({$fn->fields['proarguments']})"; + break; + case 'language': + $this->fieldClean($object); + $sql .= " ON LANGUAGE \"{$object}\""; + break; + case 'schema': + $this->fieldClean($object); + $sql .= " ON SCHEMA \"{$object}\""; + break; + case 'tablespace': + $this->fieldClean($object); + $sql .= " ON TABLESPACE \"{$object}\""; + break; + default: + return -1; + } + + // Dump PUBLIC + $first = true; + $sql .= ($mode == 'GRANT') ? ' TO ' : ' FROM '; + if ($public) { + $sql .= 'PUBLIC'; + $first = false; + } + // Dump users + foreach ($usernames as $v) { + if ($first) { + $sql .= "\"{$v}\""; + $first = false; + } + else { + $sql .= ", \"{$v}\""; + } + } + // Dump groups + foreach ($groupnames as $v) { + if ($first) { + $sql .= "GROUP \"{$v}\""; + $first = false; + } + else { + $sql .= ", GROUP \"{$v}\""; + } + } + + // Grant option + if ($this->hasGrantOption() && $mode == 'GRANT' && $grantoption) { + $sql .= ' WITH GRANT OPTION'; + } + + // Cascade revoke + if ($this->hasGrantOption() && $mode == 'REVOKE' && $cascade) { + $sql .= ' CASCADE'; + } + + return $this->execute($sql); + } + + /** + * Helper function that computes encypted PostgreSQL passwords + * @param $username The username + * @param $password The password + */ + function _encryptPassword($username, $password) { + return 'md5' . md5($password . $username); + } + + // Tablespace functions + + /** + * Retrieves information for all tablespaces + * @param $all Include all tablespaces (necessary when moving objects back to the default space) + * @return A recordset + */ + function getTablespaces($all = false) { + global $conf; + + $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, pg_catalog.pg_tablespace_location(oid) as spclocation, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment + FROM pg_catalog.pg_tablespace"; + + if (!$conf['show_system'] && !$all) { + $sql .= ' WHERE spcname NOT LIKE $$pg\_%$$'; + } + + $sql .= " ORDER BY spcname"; + + return $this->selectSet($sql); + } + + /** + * Retrieves a tablespace's information + * @return A recordset + */ + function getTablespace($spcname) { + $this->clean($spcname); + + $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, pg_catalog.pg_tablespace_location(oid) as spclocation, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment + FROM pg_catalog.pg_tablespace WHERE spcname='{$spcname}'"; + + return $this->selectSet($sql); + } + + /** + * Creates a tablespace + * @param $spcname The name of the tablespace to create + * @param $spcowner The owner of the tablespace. '' for current + * @param $spcloc The directory in which to create the tablespace + * @return 0 success + */ + function createTablespace($spcname, $spcowner, $spcloc, $comment='') { + $this->fieldClean($spcname); + $this->clean($spcloc); + + $sql = "CREATE TABLESPACE \"{$spcname}\""; + + if ($spcowner != '') { + $this->fieldClean($spcowner); + $sql .= " OWNER \"{$spcowner}\""; + } + + $sql .= " LOCATION '{$spcloc}'"; + + $status = $this->execute($sql); + if ($status != 0) return -1; + + if ($comment != '' && $this->hasSharedComments()) { + $status = $this->setComment('TABLESPACE',$spcname,'',$comment); + if ($status != 0) return -2; + } + + return 0; + } + + /** + * Alters a tablespace + * @param $spcname The name of the tablespace + * @param $name The new name for the tablespace + * @param $owner The new owner for the tablespace + * @return 0 success + * @return -1 transaction error + * @return -2 owner error + * @return -3 rename error + * @return -4 comment error + */ + function alterTablespace($spcname, $name, $owner, $comment='') { + $this->fieldClean($spcname); + $this->fieldClean($name); + $this->fieldClean($owner); + + // Begin transaction + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + // Owner + $sql = "ALTER TABLESPACE \"{$spcname}\" OWNER TO \"{$owner}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -2; + } + + // Rename (only if name has changed) + if ($name != $spcname) { + $sql = "ALTER TABLESPACE \"{$spcname}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + + $spcname = $name; + } + + // Set comment if it has changed + if (trim($comment) != '' && $this->hasSharedComments()) { + $status = $this->setComment('TABLESPACE',$spcname,'',$comment); + if ($status != 0) return -4; + } + + return $this->endTransaction(); + } + + /** + * Drops a tablespace + * @param $spcname The name of the domain to drop + * @return 0 success + */ + function dropTablespace($spcname) { + $this->fieldClean($spcname); + + $sql = "DROP TABLESPACE \"{$spcname}\""; + + return $this->execute($sql); + } + + // Administration functions + + /** + * Analyze a database + * @param $table (optional) The table to analyze + */ + function analyzeDB($table = '') { + if ($table != '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + + $sql = "ANALYZE \"{$f_schema}\".\"{$table}\""; + } + else + $sql = "ANALYZE"; + + return $this->execute($sql); + } + + /** + * Vacuums a database + * @param $table The table to vacuum + * @param $analyze If true, also does analyze + * @param $full If true, selects "full" vacuum + * @param $freeze If true, selects aggressive "freezing" of tuples + */ + function vacuumDB($table = '', $analyze = false, $full = false, $freeze = false) { + + $sql = "VACUUM"; + if ($full) $sql .= " FULL"; + if ($freeze) $sql .= " FREEZE"; + if ($analyze) $sql .= " ANALYZE"; + if ($table != '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + $sql .= " \"{$f_schema}\".\"{$table}\""; + } + + return $this->execute($sql); + } + + /** + * Returns all autovacuum global configuration + * @return associative array array( param => value, ...) + */ + function getAutovacuum() { + + $_defaults = $this->selectSet("SELECT name, setting + FROM pg_catalog.pg_settings + WHERE + name = 'autovacuum' + OR name = 'autovacuum_vacuum_threshold' + OR name = 'autovacuum_vacuum_scale_factor' + OR name = 'autovacuum_analyze_threshold' + OR name = 'autovacuum_analyze_scale_factor' + OR name = 'autovacuum_vacuum_cost_delay' + OR name = 'autovacuum_vacuum_cost_limit' + OR name = 'vacuum_freeze_min_age' + OR name = 'autovacuum_freeze_max_age' + " + ); + + $ret = array(); + while (!$_defaults->EOF) { + $ret[$_defaults->fields['name']] = $_defaults->fields['setting']; + $_defaults->moveNext(); + } + + return $ret; + } + + /** + * Returns all available autovacuum per table information. + * @return A recordset + */ + function saveAutovacuum($table, $vacenabled, $vacthreshold, $vacscalefactor, $anathresold, + $anascalefactor, $vaccostdelay, $vaccostlimit) + { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + + $sql = "ALTER TABLE \"{$f_schema}\".\"{$table}\" SET ("; + + if (!empty($vacenabled)) { + $this->clean($vacenabled); + $params[] = "autovacuum_enabled='{$vacenabled}'"; + } + if (!empty($vacthreshold)) { + $this->clean($vacthreshold); + $params[] = "autovacuum_vacuum_threshold='{$vacthreshold}'"; + } + if (!empty($vacscalefactor)) { + $this->clean($vacscalefactor); + $params[] = "autovacuum_vacuum_scale_factor='{$vacscalefactor}'"; + } + if (!empty($anathresold)) { + $this->clean($anathresold); + $params[] = "autovacuum_analyze_threshold='{$anathresold}'"; + } + if (!empty($anascalefactor)) { + $this->clean($anascalefactor); + $params[] = "autovacuum_analyze_scale_factor='{$anascalefactor}'"; + } + if (!empty($vaccostdelay)) { + $this->clean($vaccostdelay); + $params[] = "autovacuum_vacuum_cost_delay='{$vaccostdelay}'"; + } + if (!empty($vaccostlimit)) { + $this->clean($vaccostlimit); + $params[] = "autovacuum_vacuum_cost_limit='{$vaccostlimit}'"; + } + + $sql = $sql . implode(',', $params) . ');'; + + return $this->execute($sql); + } + + function dropAutovacuum($table) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + + return $this->execute(" + ALTER TABLE \"{$f_schema}\".\"{$table}\" RESET (autovacuum_enabled, autovacuum_vacuum_threshold, + autovacuum_vacuum_scale_factor, autovacuum_analyze_threshold, autovacuum_analyze_scale_factor, + autovacuum_vacuum_cost_delay, autovacuum_vacuum_cost_limit + );" + ); + } + + /** + * Returns all available process information. + * @param $database (optional) Find only connections to specified database + * @return A recordset + */ + function getProcesses($database = null) { + if ($database === null) + $sql = "SELECT datname, usename, pid, + case when wait_event is null then 'false' else wait_event_type || '::' || wait_event end as waiting, + query_start, application_name, client_addr, + case when state='idle in transaction' then '<IDLE> in transaction' when state = 'idle' then '<IDLE>' else query end as query + FROM pg_catalog.pg_stat_activity + ORDER BY datname, usename, pid"; + else { + $this->clean($database); + $sql = "SELECT datname, usename, pid, + case when wait_event is null then 'false' else wait_event_type || '::' || wait_event end as waiting, + query_start, application_name, client_addr, + case when state='idle in transaction' then '<IDLE> in transaction' when state = 'idle' then '<IDLE>' else query end as query + FROM pg_catalog.pg_stat_activity + WHERE datname='{$database}' + ORDER BY usename, pid"; + } + + return $this->selectSet($sql); + } + + /** + * Returns table locks information in the current database + * @return A recordset + */ + + function getLocks() { + global $conf; + + if (!$conf['show_system']) + $where = 'AND pn.nspname NOT LIKE $$pg\_%$$'; + else + $where = "AND nspname !~ '^pg_t(emp_[0-9]+|oast)$'"; + + $sql = " + SELECT + pn.nspname, pc.relname AS tablename, pl.pid, pl.mode, pl.granted, pl.virtualtransaction, + (select transactionid from pg_catalog.pg_locks l2 where l2.locktype='transactionid' + and l2.mode='ExclusiveLock' and l2.virtualtransaction=pl.virtualtransaction) as transaction + FROM + pg_catalog.pg_locks pl, + pg_catalog.pg_class pc, + pg_catalog.pg_namespace pn + WHERE + pl.relation = pc.oid AND pc.relnamespace=pn.oid + {$where} + ORDER BY pid,nspname,tablename"; + + return $this->selectSet($sql); + } + + /** + * Sends a cancel or kill command to a process + * @param $pid The ID of the backend process + * @param $signal 'CANCEL' + * @return 0 success + * @return -1 invalid signal type + */ + function sendSignal($pid, $signal) { + // Clean + $pid = (int)$pid; + + if ($signal == 'CANCEL') + $sql = "SELECT pg_catalog.pg_cancel_backend({$pid}) AS val"; + elseif ($signal == 'KILL') + $sql = "SELECT pg_catalog.pg_terminate_backend({$pid}) AS val"; + else + return -1; + + + // Execute the query + $val = $this->selectField($sql, 'val'); + + if ($val === 'f') return -1; + elseif ($val === 't') return 0; + else return -1; + } + + // Misc functions + + /** + * Sets the comment for an object in the database + * @pre All parameters must already be cleaned + * @param $obj_type One of 'TABLE' | 'COLUMN' | 'VIEW' | 'SCHEMA' | 'SEQUENCE' | 'TYPE' | 'FUNCTION' | 'AGGREGATE' + * @param $obj_name The name of the object for which to attach a comment. + * @param $table Name of table that $obj_name belongs to. Ignored unless $obj_type is 'TABLE' or 'COLUMN'. + * @param $comment The comment to add. + * @return 0 success + */ + function setComment($obj_type, $obj_name, $table, $comment, $basetype = NULL) { + $sql = "COMMENT ON {$obj_type} " ; + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->clean($comment); // Passing in an already cleaned comment will lead to double escaped data + // So, while counter-intuitive, it is important to not clean comments before + // calling setComment. We will clean it here instead. +/* + $this->fieldClean($table); + $this->fieldClean($obj_name); +*/ + + switch ($obj_type) { + case 'TABLE': + $sql .= "\"{$f_schema}\".\"{$table}\" IS "; + break; + case 'COLUMN': + $sql .= "\"{$f_schema}\".\"{$table}\".\"{$obj_name}\" IS "; + break; + case 'SEQUENCE': + case 'VIEW': + case 'TEXT SEARCH CONFIGURATION': + case 'TEXT SEARCH DICTIONARY': + case 'TEXT SEARCH TEMPLATE': + case 'TEXT SEARCH PARSER': + case 'TYPE': + $sql .= "\"{$f_schema}\"."; + case 'DATABASE': + case 'ROLE': + case 'SCHEMA': + case 'TABLESPACE': + $sql .= "\"{$obj_name}\" IS "; + break; + case 'FUNCTION': + $sql .= "\"{$f_schema}\".{$obj_name} IS "; + break; + case 'AGGREGATE': + $sql .= "\"{$f_schema}\".\"{$obj_name}\" (\"{$basetype}\") IS "; + break; + default: + // Unknown object type + return -1; + } + + if ($comment != '') + $sql .= "'{$comment}';"; + else + $sql .= 'NULL;'; + + return $this->execute($sql); + + } + + /** + * A private helper method for executeScript that advances the + * character by 1. In psql this is careful to take into account + * multibyte languages, but we don't at the moment, so this function + * is someone redundant, since it will always advance by 1 + * @param &$i The current character position in the line + * @param &$prevlen Length of previous character (ie. 1) + * @param &$thislen Length of current character (ie. 1) + */ + private + function advance_1(&$i, &$prevlen, &$thislen) { + $prevlen = $thislen; + $i += $thislen; + $thislen = 1; + } + + /** + * Private helper method to detect a valid $foo$ quote delimiter at + * the start of the parameter dquote + * @return True if valid, false otherwise + */ + private + function valid_dolquote($dquote) { + // XXX: support multibyte + return (preg_match('/^[$][$]/', $dquote) || preg_match('/^[$][_[:alpha:]][_[:alnum:]]*[$]/', $dquote)); + } + + /** + * Executes an SQL script as a series of SQL statements. Returns + * the result of the final step. This is a very complicated lexer + * based on the REL7_4_STABLE src/bin/psql/mainloop.c lexer in + * the PostgreSQL source code. + * XXX: It does not handle multibyte languages properly. + * @param $name Entry in $_FILES to use + * @param $callback (optional) Callback function to call with each query, + its result and line number. + * @return True for general success, false on any failure. + */ + function executeScript($name, $callback = null) { + global $data; + + // This whole function isn't very encapsulated, but hey... + $conn = $data->conn->_connectionID; + if (!is_uploaded_file($_FILES[$name]['tmp_name'])) return false; + + $fd = fopen($_FILES[$name]['tmp_name'], 'r'); + if (!$fd) return false; + + // Build up each SQL statement, they can be multiline + $query_buf = null; + $query_start = 0; + $in_quote = 0; + $in_xcomment = 0; + $bslash_count = 0; + $dol_quote = null; + $paren_level = 0; + $len = 0; + $i = 0; + $prevlen = 0; + $thislen = 0; + $lineno = 0; + + // Loop over each line in the file + while (!feof($fd)) { + $line = fgets($fd); + $lineno++; + + // Nothing left on line? Then ignore... + if (trim($line) == '') continue; + + $len = strlen($line); + $query_start = 0; + + /* + * Parse line, looking for command separators. + * + * The current character is at line[i], the prior character at line[i + * - prevlen], the next character at line[i + thislen]. + */ + $prevlen = 0; + $thislen = ($len > 0) ? 1 : 0; + + for ($i = 0; $i < $len; $this->advance_1($i, $prevlen, $thislen)) { + + /* was the previous character a backslash? */ + if ($i > 0 && substr($line, $i - $prevlen, 1) == '\\') + $bslash_count++; + else + $bslash_count = 0; + + /* + * It is important to place the in_* test routines before the + * in_* detection routines. i.e. we have to test if we are in + * a quote before testing for comments. + */ + + /* in quote? */ + if ($in_quote !== 0) + { + /* + * end of quote if matching non-backslashed character. + * backslashes don't count for double quotes, though. + */ + if (substr($line, $i, 1) == $in_quote && + ($bslash_count % 2 == 0 || $in_quote == '"')) + $in_quote = 0; + } + + /* in or end of $foo$ type quote? */ + else if ($dol_quote) { + if (strncmp(substr($line, $i), $dol_quote, strlen($dol_quote)) == 0) { + $this->advance_1($i, $prevlen, $thislen); + while(substr($line, $i, 1) != '$') + $this->advance_1($i, $prevlen, $thislen); + $dol_quote = null; + } + } + + /* start of extended comment? */ + else if (substr($line, $i, 2) == '/*') + { + $in_xcomment++; + if ($in_xcomment == 1) + $this->advance_1($i, $prevlen, $thislen); + } + + /* in or end of extended comment? */ + else if ($in_xcomment) + { + if (substr($line, $i, 2) == '*/' && !--$in_xcomment) + $this->advance_1($i, $prevlen, $thislen); + } + + /* start of quote? */ + else if (substr($line, $i, 1) == '\'' || substr($line, $i, 1) == '"') { + $in_quote = substr($line, $i, 1); + } + + /* + * start of $foo$ type quote? + */ + else if (!$dol_quote && $this->valid_dolquote(substr($line, $i))) { + $dol_end = strpos(substr($line, $i + 1), '$'); + $dol_quote = substr($line, $i, $dol_end + 1); + $this->advance_1($i, $prevlen, $thislen); + while (substr($line, $i, 1) != '$') { + $this->advance_1($i, $prevlen, $thislen); + } + + } + + /* single-line comment? truncate line */ + else if (substr($line, $i, 2) == '--') + { + $line = substr($line, 0, $i); /* remove comment */ + break; + } + + /* count nested parentheses */ + else if (substr($line, $i, 1) == '(') { + $paren_level++; + } + + else if (substr($line, $i, 1) == ')' && $paren_level > 0) { + $paren_level--; + } + + /* semicolon? then send query */ + else if (substr($line, $i, 1) == ';' && !$bslash_count && !$paren_level) + { + $subline = substr(substr($line, 0, $i), $query_start); + /* is there anything else on the line? */ + if (strspn($subline, " \t\n\r") != strlen($subline)) + { + /* + * insert a cosmetic newline, if this is not the first + * line in the buffer + */ + if (strlen($query_buf) > 0) + $query_buf .= "\n"; + /* append the line to the query buffer */ + $query_buf .= $subline; + $query_buf .= ';'; + + // Execute the query. PHP cannot execute + // empty queries, unlike libpq + $res = @pg_query($conn, $query_buf); + + // Call the callback function for display + if ($callback !== null) $callback($query_buf, $res, $lineno); + // Check for COPY request + if (pg_result_status($res) == 4) { // 4 == PGSQL_COPY_FROM + while (!feof($fd)) { + $copy = fgets($fd, 32768); + $lineno++; + pg_put_line($conn, $copy); + if ($copy == "\\.\n" || $copy == "\\.\r\n") { + pg_end_copy($conn); + break; + } + } + } + } + + $query_buf = null; + $query_start = $i + $thislen; + } + + /* + * keyword or identifier? + * We grab the whole string so that we don't + * mistakenly see $foo$ inside an identifier as the start + * of a dollar quote. + */ + // XXX: multibyte here + else if (preg_match('/^[_[:alpha:]]$/', substr($line, $i, 1))) { + $sub = substr($line, $i, $thislen); + while (preg_match('/^[\$_A-Za-z0-9]$/', $sub)) { + /* keep going while we still have identifier chars */ + $this->advance_1($i, $prevlen, $thislen); + $sub = substr($line, $i, $thislen); + } + // Since we're now over the next character to be examined, it is necessary + // to move back one space. + $i-=$prevlen; + } + } // end for + + /* Put the rest of the line in the query buffer. */ + $subline = substr($line, $query_start); + if ($in_quote || $dol_quote || strspn($subline, " \t\n\r") != strlen($subline)) + { + if (strlen($query_buf) > 0) + $query_buf .= "\n"; + $query_buf .= $subline; + } + + $line = null; + + } // end while + + /* + * Process query at the end of file without a semicolon, so long as + * it's non-empty. + */ + if (strlen($query_buf) > 0 && strspn($query_buf, " \t\n\r") != strlen($query_buf)) + { + // Execute the query + $res = @pg_query($conn, $query_buf); + + // Call the callback function for display + if ($callback !== null) $callback($query_buf, $res, $lineno); + // Check for COPY request + if (pg_result_status($res) == 4) { // 4 == PGSQL_COPY_FROM + while (!feof($fd)) { + $copy = fgets($fd, 32768); + $lineno++; + pg_put_line($conn, $copy); + if ($copy == "\\.\n" || $copy == "\\.\r\n") { + pg_end_copy($conn); + break; + } + } + } + } + + fclose($fd); + + return true; + } + + /** + * Generates the SQL for the 'select' function + * @param $table The table from which to select + * @param $show An array of columns to show. Empty array means all columns. + * @param $values An array mapping columns to values + * @param $ops An array of the operators to use + * @param $orderby (optional) An array of column numbers or names (one based) + * mapped to sort direction (asc or desc or '' or null) to order by + * @return The SQL query + */ + function getSelectSQL($table, $show, $values, $ops, $orderby = array()) { + $this->fieldArrayClean($show); + + // If an empty array is passed in, then show all columns + if (sizeof($show) == 0) { + if ($this->hasObjectID($table)) + $sql = "SELECT \"{$this->id}\", * FROM "; + else + $sql = "SELECT * FROM "; + } + else { + // Add oid column automatically to results for editing purposes + if (!in_array($this->id, $show) && $this->hasObjectID($table)) + $sql = "SELECT \"{$this->id}\", \""; + else + $sql = "SELECT \""; + + $sql .= join('","', $show) . "\" FROM "; + } + + $this->fieldClean($table); + + if (isset($_REQUEST['schema'])) { + $f_schema = $_REQUEST['schema']; + $this->fieldClean($f_schema); + $sql .= "\"{$f_schema}\"."; + } + $sql .= "\"{$table}\""; + + // If we have values specified, add them to the WHERE clause + $first = true; + if (is_array($values) && sizeof($values) > 0) { + foreach ($values as $k => $v) { + if ($v != '' || $this->selectOps[$ops[$k]] == 'p') { + $this->fieldClean($k); + if ($first) { + $sql .= " WHERE "; + $first = false; + } else { + $sql .= " AND "; + } + // Different query format depending on operator type + switch ($this->selectOps[$ops[$k]]) { + case 'i': + // Only clean the field for the inline case + // this is because (x), subqueries need to + // to allow 'a','b' as input. + $this->clean($v); + $sql .= "\"{$k}\" {$ops[$k]} '{$v}'"; + break; + case 'p': + $sql .= "\"{$k}\" {$ops[$k]}"; + break; + case 'x': + $sql .= "\"{$k}\" {$ops[$k]} ({$v})"; + break; + case 't': + $sql .= "\"{$k}\" {$ops[$k]}('{$v}')"; + break; + default: + // Shouldn't happen + } + } + } + } + + // ORDER BY + if (is_array($orderby) && sizeof($orderby) > 0) { + $sql .= " ORDER BY "; + $first = true; + foreach ($orderby as $k => $v) { + if ($first) $first = false; + else $sql .= ', '; + if (preg_match('/^[0-9]+$/', $k)) { + $sql .= $k; + } + else { + $this->fieldClean($k); + $sql .= '"' . $k . '"'; + } + if (strtoupper($v) == 'DESC') $sql .= " DESC"; + } + } + + return $sql; + } + + /** + * Returns a recordset of all columns in a query. Supports paging. + * @param $type Either 'QUERY' if it is an SQL query, or 'TABLE' if it is a table identifier, + * or 'SELECT" if it's a select query + * @param $table The base table of the query. NULL for no table. + * @param $query The query that is being executed. NULL for no query. + * @param $sortkey The column number to sort by, or '' or null for no sorting + * @param $sortdir The direction in which to sort the specified column ('asc' or 'desc') + * @param $page The page of the relation to retrieve + * @param $page_size The number of rows per page + * @param &$max_pages (return-by-ref) The max number of pages in the relation + * @return A recordset on success + * @return -1 transaction error + * @return -2 counting error + * @return -3 page or page_size invalid + * @return -4 unknown type + * @return -5 failed setting transaction read only + */ + function browseQuery($type, $table, $query, $sortkey, $sortdir, $page, $page_size, &$max_pages) { + // Check that we're not going to divide by zero + if (!is_numeric($page_size) || $page_size != (int)$page_size || $page_size <= 0) return -3; + + // If $type is TABLE, then generate the query + switch ($type) { + case 'TABLE': + if (preg_match('/^[0-9]+$/', $sortkey) && $sortkey > 0) $orderby = array($sortkey => $sortdir); + else $orderby = array(); + $query = $this->getSelectSQL($table, array(), array(), array(), $orderby); + break; + case 'QUERY': + case 'SELECT': + // Trim query + $query = trim($query); + // Trim off trailing semi-colon if there is one + if (substr($query, strlen($query) - 1, 1) == ';') + $query = substr($query, 0, strlen($query) - 1); + break; + default: + return -4; + } + + // Generate count query + $count = "SELECT COUNT(*) AS total FROM ($query) AS sub"; + + // Open a transaction + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + // If backend supports read only queries, then specify read only mode + // to avoid side effects from repeating queries that do writes. + if ($this->hasReadOnlyQueries()) { + $status = $this->execute("SET TRANSACTION READ ONLY"); + if ($status != 0) { + $this->rollbackTransaction(); + return -5; + } + } + + + // Count the number of rows + $total = $this->browseQueryCount($query, $count); + if ($total < 0) { + $this->rollbackTransaction(); + return -2; + } + + // Calculate max pages + $max_pages = ceil($total / $page_size); + + // Check that page is less than or equal to max pages + if (!is_numeric($page) || $page != (int)$page || $page > $max_pages || $page < 1) { + $this->rollbackTransaction(); + return -3; + } + + // Set fetch mode to NUM so that duplicate field names are properly returned + // for non-table queries. Since the SELECT feature only allows selecting one + // table, duplicate fields shouldn't appear. + if ($type == 'QUERY') $this->conn->setFetchMode(ADODB_FETCH_NUM); + + // Figure out ORDER BY. Sort key is always the column number (based from one) + // of the column to order by. Only need to do this for non-TABLE queries + if ($type != 'TABLE' && preg_match('/^[0-9]+$/', $sortkey) && $sortkey > 0) { + $orderby = " ORDER BY {$sortkey}"; + // Add sort order + if ($sortdir == 'desc') + $orderby .= ' DESC'; + else + $orderby .= ' ASC'; + } + else $orderby = ''; + + // Actually retrieve the rows, with offset and limit + $rs = $this->selectSet("SELECT * FROM ({$query}) AS sub {$orderby} LIMIT {$page_size} OFFSET " . ($page - 1) * $page_size); + $status = $this->endTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + return $rs; + } + + /** + * Finds the number of rows that would be returned by a + * query. + * @param $query The SQL query + * @param $count The count query + * @return The count of rows + * @return -1 error + */ + function browseQueryCount($query, $count) { + return $this->selectField($count, 'total'); + } + + /** + * Returns a recordset of all columns in a table + * @param $table The name of a table + * @param $key The associative array holding the key to retrieve + * @return A recordset + */ + function browseRow($table, $key) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + + $sql = "SELECT * FROM \"{$f_schema}\".\"{$table}\""; + if (is_array($key) && sizeof($key) > 0) { + $sql .= " WHERE true"; + foreach ($key as $k => $v) { + $this->fieldClean($k); + $this->clean($v); + $sql .= " AND \"{$k}\"='{$v}'"; + } + } + + return $this->selectSet($sql); + } + + // Type conversion routines + + /** + * Change the value of a parameter to 't' or 'f' depending on whether it evaluates to true or false + * @param $parameter the parameter + */ + function dbBool(&$parameter) { + if ($parameter) $parameter = 't'; + else $parameter = 'f'; + + return $parameter; + } + + /** + * Change a parameter from 't' or 'f' to a boolean, (others evaluate to false) + * @param $parameter the parameter + */ + function phpBool($parameter) { + $parameter = ($parameter == 't'); + return $parameter; + } + + // interfaces Statistics collector functions + + /** + * Fetches statistics for a database + * @param $database The database to fetch stats for + * @return A recordset + */ + function getStatsDatabase($database) { + $this->clean($database); + + $sql = "SELECT * FROM pg_stat_database WHERE datname='{$database}'"; + + return $this->selectSet($sql); + } + + /** + * Fetches tuple statistics for a table + * @param $table The table to fetch stats for + * @return A recordset + */ + function getStatsTableTuples($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT * FROM pg_stat_all_tables + WHERE schemaname='{$c_schema}' AND relname='{$table}'"; + + return $this->selectSet($sql); + } + + /** + * Fetches I/0 statistics for a table + * @param $table The table to fetch stats for + * @return A recordset + */ + function getStatsTableIO($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT * FROM pg_statio_all_tables + WHERE schemaname='{$c_schema}' AND relname='{$table}'"; + + return $this->selectSet($sql); + } + + /** + * Fetches tuple statistics for all indexes on a table + * @param $table The table to fetch index stats for + * @return A recordset + */ + function getStatsIndexTuples($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT * FROM pg_stat_all_indexes + WHERE schemaname='{$c_schema}' AND relname='{$table}' ORDER BY indexrelname"; + + return $this->selectSet($sql); + } + + /** + * Fetches I/0 statistics for all indexes on a table + * @param $table The table to fetch index stats for + * @return A recordset + */ + function getStatsIndexIO($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT * FROM pg_statio_all_indexes + WHERE schemaname='{$c_schema}' AND relname='{$table}' + ORDER BY indexrelname"; + + return $this->selectSet($sql); + } + + // Capabilities + + function hasAggregateSortOp() { return true; } + function hasAlterAggregate() { return true; } + function hasAlterColumnType() { return true; } + function hasAlterDatabaseOwner() { return true; } + function hasAlterDatabaseRename() { return true; } + function hasAlterSchema() { return true; } + function hasAlterSchemaOwner() { return true; } + function hasAlterSequenceSchema() { return true; } + function hasAlterSequenceStart() { return true; } + function hasAlterTableSchema() { return true; } + function hasAutovacuum() { return true; } + function hasCreateTableLike() { return true; } + function hasCreateTableLikeWithConstraints() { return true; } + function hasCreateTableLikeWithIndexes() { return true; } + function hasCreateFieldWithConstraints() { return true; } + function hasDisableTriggers() { return true; } + function hasAlterDomains() { return true; } + function hasDomainConstraints() { return true; } + function hasEnumTypes() { return true; } + function hasFTS() { return true; } + function hasFunctionAlterOwner() { return true; } + function hasFunctionAlterSchema() { return true; } + function hasFunctionCosting() { return true; } + function hasFunctionGUC() { return true; } + function hasGrantOption() { return true; } + function hasNamedParams() { return true; } + function hasPrepare() { return true; } + function hasPreparedXacts() { return true; } + function hasReadOnlyQueries() { return true; } + function hasRecluster() { return true; } + function hasRoles() { return true; } + function hasServerAdminFuncs() { return true; } + function hasSharedComments() { return true; } + function hasQueryCancel() { return true; } + function hasTablespaces() { return true; } + function hasUserRename() { return true; } + function hasUserSignals() { return true; } + function hasVirtualTransactionId() { return true; } + function hasAlterDatabase() { return $this->hasAlterDatabaseRename(); } + function hasDatabaseCollation() { return true; } + function hasMagicTypes() { return true; } + function hasQueryKill() { return true; } + function hasConcurrentIndexBuild() { return true; } + function hasForceReindex() { return false; } + function hasByteaHexDefault() { return true; } + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres10.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres10.php new file mode 100644 index 00000000..5f851d80 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres10.php @@ -0,0 +1,30 @@ +<?php + +/** + * PostgreSQL 10 support + * + */ + +include_once('./classes/database/Postgres11.php'); + +class Postgres10 extends Postgres11 { + + var $major_version = 10; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres10($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc10.php'); + return $this->help_page; + } + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres11.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres11.php new file mode 100644 index 00000000..2a3ae84b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres11.php @@ -0,0 +1,30 @@ +<?php + +/** + * PostgreSQL 11 support + * + */ + +include_once('./classes/database/Postgres.php'); + +class Postgres11 extends Postgres { + + var $major_version = 11; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres11($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc11.php'); + return $this->help_page; + } + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres74.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres74.php new file mode 100644 index 00000000..4310eb64 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres74.php @@ -0,0 +1,635 @@ +<?php + +/** + * A class that implements the DB interface for Postgres + * Note: This class uses ADODB and returns RecordSets. + * + * $Id: Postgres74.php,v 1.72 2008/02/20 21:06:18 ioguix Exp $ + */ + +include_once('./classes/database/Postgres80.php'); + +class Postgres74 extends Postgres80 { + + var $major_version = 7.4; + // List of all legal privileges that can be applied to different types + // of objects. + var $privlist = array( + 'table' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'RULE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'view' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'RULE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'sequence' => array('SELECT', 'UPDATE', 'ALL PRIVILEGES'), + 'database' => array('CREATE', 'TEMPORARY', 'ALL PRIVILEGES'), + 'function' => array('EXECUTE', 'ALL PRIVILEGES'), + 'language' => array('USAGE', 'ALL PRIVILEGES'), + 'schema' => array('CREATE', 'USAGE', 'ALL PRIVILEGES') + ); + + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres74($conn) { + $this->Postgres80($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc74.php'); + return $this->help_page; + } + + // Database functions + + /** + * Alters a database + * the multiple return vals are for postgres 8+ which support more functionality in alter database + * @param $dbName The name of the database + * @param $newName new name for the database + * @param $newOwner The new owner for the database + * @return 0 success + * @return -1 transaction error + * @return -2 owner error + * @return -3 rename error + */ + function alterDatabase($dbName, $newName, $newOwner = '', $comment = '') { + //ignore $newowner, not supported pre 8.0 + //ignore $comment, not supported pre 8.2 + $this->clean($dbName); + $this->clean($newName); + + $status = $this->alterDatabaseRename($dbName, $newName); + if ($status != 0) return -3; + else return 0; + } + + /** + * Return all database available on the server + * @return A list of databases, sorted alphabetically + */ + function getDatabases($currentdatabase = NULL) { + global $conf, $misc; + + $server_info = $misc->getServerInfo(); + + if (isset($conf['owned_only']) && $conf['owned_only'] && !$this->isSuperUser()) { + $username = $server_info['username']; + $this->clean($username); + $clause = " AND pu.usename='{$username}'"; + } + else $clause = ''; + + if ($currentdatabase != NULL) { + $this->clean($currentdatabase); + $orderby = "ORDER BY pdb.datname = '{$currentdatabase}' DESC, pdb.datname"; + } + else + $orderby = "ORDER BY pdb.datname"; + + if (!$conf['show_system']) + $where = ' AND NOT pdb.datistemplate'; + else + $where = ' AND pdb.datallowconn'; + + $sql = "SELECT pdb.datname AS datname, pu.usename AS datowner, pg_encoding_to_char(encoding) AS datencoding, + (SELECT description FROM pg_description pd WHERE pdb.oid=pd.objoid) AS datcomment + FROM pg_database pdb, pg_user pu + WHERE pdb.datdba = pu.usesysid + {$where} + {$clause} + {$orderby}"; + + return $this->selectSet($sql); + } + + /** + * Searches all system catalogs to find objects that match a certain name. + * @param $term The search term + * @param $filter The object type to restrict to ('' means no restriction) + * @return A recordset + */ + function findObject($term, $filter) { + global $conf; + + /*about escaping: + * SET standard_conforming_string is not available before 8.2 + * So we must use PostgreSQL specific notation :/ + * E'' notation is not available before 8.1 + * $$ is available since 8.0 + * Nothing specific from 7.4 + **/ + + // Escape search term for ILIKE match + $term = str_replace('_', '\\_', $term); + $term = str_replace('%', '\\%', $term); + $this->clean($term); + $this->clean($filter); + + // Exclude system relations if necessary + if (!$conf['show_system']) { + // XXX: The mention of information_schema here is in the wrong place, but + // it's the quickest fix to exclude the info schema from 7.4 + $where = " AND pn.nspname NOT LIKE 'pg\\\\_%' AND pn.nspname != 'information_schema'"; + $lan_where = "AND pl.lanispl"; + } + else { + $where = ''; + $lan_where = ''; + } + + // Apply outer filter + $sql = ''; + if ($filter != '') { + $sql = "SELECT * FROM ("; + } + + $sql .= " + SELECT 'SCHEMA' AS type, oid, NULL AS schemaname, NULL AS relname, nspname AS name + FROM pg_catalog.pg_namespace pn WHERE nspname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT CASE WHEN relkind='r' THEN 'TABLE' WHEN relkind='v' THEN 'VIEW' WHEN relkind='S' THEN 'SEQUENCE' END, pc.oid, + pn.nspname, NULL, pc.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn + WHERE pc.relnamespace=pn.oid AND relkind IN ('r', 'v', 'S') AND relname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT CASE WHEN pc.relkind='r' THEN 'COLUMNTABLE' ELSE 'COLUMNVIEW' END, NULL, pn.nspname, pc.relname, pa.attname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_attribute pa WHERE pc.relnamespace=pn.oid AND pc.oid=pa.attrelid + AND pa.attname ILIKE '%{$term}%' AND pa.attnum > 0 AND NOT pa.attisdropped AND pc.relkind IN ('r', 'v') {$where} + UNION ALL + SELECT 'FUNCTION', pp.oid, pn.nspname, NULL, pp.proname || '(' || pg_catalog.oidvectortypes(pp.proargtypes) || ')' FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pn + WHERE pp.pronamespace=pn.oid AND NOT pp.proisagg AND pp.proname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT 'INDEX', NULL, pn.nspname, pc.relname, pc2.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_index pi, pg_catalog.pg_class pc2 WHERE pc.relnamespace=pn.oid AND pc.oid=pi.indrelid + AND pi.indexrelid=pc2.oid + AND NOT EXISTS ( + SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = 'i' AND c.contype IN ('u', 'p') + ) + AND pc2.relname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT 'CONSTRAINTTABLE', NULL, pn.nspname, pc.relname, pc2.conname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_constraint pc2 WHERE pc.relnamespace=pn.oid AND pc.oid=pc2.conrelid AND pc2.conrelid != 0 + AND CASE WHEN pc2.contype IN ('f', 'c') THEN TRUE ELSE NOT EXISTS ( + SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = 'i' AND c.contype IN ('u', 'p') + ) END + AND pc2.conname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT 'CONSTRAINTDOMAIN', pt.oid, pn.nspname, pt.typname, pc.conname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn, + pg_catalog.pg_constraint pc WHERE pt.typnamespace=pn.oid AND pt.oid=pc.contypid AND pc.contypid != 0 + AND pc.conname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT 'TRIGGER', NULL, pn.nspname, pc.relname, pt.tgname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_trigger pt WHERE pc.relnamespace=pn.oid AND pc.oid=pt.tgrelid + AND ( pt.tgisconstraint = 'f' OR NOT EXISTS + (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pt.tableoid AND d.objid = pt.oid AND d.deptype = 'i' AND c.contype = 'f')) + AND pt.tgname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT 'RULETABLE', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r + JOIN pg_catalog.pg_class c ON c.oid = r.ev_class + LEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = c.relnamespace + WHERE c.relkind='r' AND r.rulename != '_RETURN' AND r.rulename ILIKE '%{$term}%' {$where} + UNION ALL + SELECT 'RULEVIEW', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r + JOIN pg_catalog.pg_class c ON c.oid = r.ev_class + LEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = c.relnamespace + WHERE c.relkind='v' AND r.rulename != '_RETURN' AND r.rulename ILIKE '%{$term}%' {$where} + "; + + // Add advanced objects if show_advanced is set + if ($conf['show_advanced']) { + $sql .= " + UNION ALL + SELECT CASE WHEN pt.typtype='d' THEN 'DOMAIN' ELSE 'TYPE' END, pt.oid, pn.nspname, NULL, + pt.typname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn + WHERE pt.typnamespace=pn.oid AND typname ILIKE '%{$term}%' + AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) + {$where} + UNION ALL + SELECT 'OPERATOR', po.oid, pn.nspname, NULL, po.oprname FROM pg_catalog.pg_operator po, pg_catalog.pg_namespace pn + WHERE po.oprnamespace=pn.oid AND oprname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT 'CONVERSION', pc.oid, pn.nspname, NULL, pc.conname FROM pg_catalog.pg_conversion pc, + pg_catalog.pg_namespace pn WHERE pc.connamespace=pn.oid AND conname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT 'LANGUAGE', pl.oid, NULL, NULL, pl.lanname FROM pg_catalog.pg_language pl + WHERE lanname ILIKE '%{$term}%' {$lan_where} + UNION ALL + SELECT DISTINCT ON (p.proname) 'AGGREGATE', p.oid, pn.nspname, NULL, p.proname FROM pg_catalog.pg_proc p + LEFT JOIN pg_catalog.pg_namespace pn ON p.pronamespace=pn.oid + WHERE p.proisagg AND p.proname ILIKE '%{$term}%' {$where} + UNION ALL + SELECT DISTINCT ON (po.opcname) 'OPCLASS', po.oid, pn.nspname, NULL, po.opcname FROM pg_catalog.pg_opclass po, + pg_catalog.pg_namespace pn WHERE po.opcnamespace=pn.oid + AND po.opcname ILIKE '%{$term}%' {$where} + "; + } + // Otherwise just add domains + else { + $sql .= " + UNION ALL + SELECT 'DOMAIN', pt.oid, pn.nspname, NULL, + pt.typname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn + WHERE pt.typnamespace=pn.oid AND pt.typtype='d' AND typname ILIKE '%{$term}%' + AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) + {$where} + "; + } + + if ($filter != '') { + // We use like to make RULE, CONSTRAINT and COLUMN searches work + $sql .= ") AS sub WHERE type LIKE '{$filter}%' "; + } + + $sql .= "ORDER BY type, schemaname, relname, name"; + + return $this->selectSet($sql); + } + + /** + * Returns table locks information in the current database + * @return A recordset + */ + function getLocks() { + global $conf; + + if (!$conf['show_system']) + $where = "AND pn.nspname NOT LIKE 'pg\\\\_%'"; + else + $where = "AND nspname !~ '^pg_t(emp_[0-9]+|oast)$'"; + + $sql = "SELECT pn.nspname, pc.relname AS tablename, pl.transaction, pl.pid, pl.mode, pl.granted + FROM pg_catalog.pg_locks pl, pg_catalog.pg_class pc, pg_catalog.pg_namespace pn + WHERE pl.relation = pc.oid AND pc.relnamespace=pn.oid {$where} + ORDER BY nspname,tablename"; + + return $this->selectSet($sql); + } + + /** + * Returns the current database encoding + * @return The encoding. eg. SQL_ASCII, UTF-8, etc. + */ + function getDatabaseEncoding() { + $sql = "SELECT getdatabaseencoding() AS encoding"; + + return $this->selectField($sql, 'encoding'); + } + + // Table functions + + /** + * Protected method which alter a table + * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION + * @param $tblrs The table recordSet returned by getTable() + * @param $name The new name for the table + * @param $owner The new owner for the table + * @param $schema The new schema for the table + * @param $comment The comment on the table + * @param $tablespace The new tablespace for the table ('' means leave as is) + * @return 0 success + * @return -3 rename error + * @return -4 comment error + * @return -5 owner error + */ + protected + function _alterTable($tblrs, $name, $owner, $schema, $comment, $tablespace) { + + /* $schema and tablespace not supported in pg74- */ + $this->fieldArrayClean($tblrs->fields); + + // Comment + $status = $this->setComment('TABLE', '', $tblrs->fields['relname'], $comment); + if ($status != 0) return -4; + + // Owner + $this->fieldClean($owner); + $status = $this->alterTableOwner($tblrs, $owner); + if ($status != 0) return -5; + + // Rename + $this->fieldClean($name); + $status = $this->alterTableName($tblrs, $name); + if ($status != 0) return -3; + + return 0; + } + + /** + * Alters a column in a table OR view + * @param $table The table in which the column resides + * @param $column The column to alter + * @param $name The new name for the column + * @param $notnull (boolean) True if not null, false otherwise + * @param $oldnotnull (boolean) True if column is already not null, false otherwise + * @param $default The new default for the column + * @param $olddefault The old default for the column + * @param $type The new type for the column + * @param $array True if array type, false otherwise + * @param $length The optional size of the column (ie. 30 for varchar(30)) + * @param $oldtype The old type for the column + * @param $comment Comment for the column + * @return 0 success + * @return -2 set not null error + * @return -3 set default error + * @return -4 rename column error + * @return -5 comment error + * @return -6 transaction error + */ + function alterColumn($table, $column, $name, $notnull, $oldnotnull, $default, $olddefault, + $type, $length, $array, $oldtype, $comment) + { + $status = $this->beginTransaction(); + if ($status != 0) return -1; + + // @@ NEED TO HANDLE "NESTED" TRANSACTION HERE + if ($notnull != $oldnotnull) { + $status = $this->setColumnNull($table, $column, !$notnull); + if ($status != 0) { + $this->rollbackTransaction(); + return -2; + } + } + + // Set default, if it has changed + if ($default != $olddefault) { + if ($default == '') + $status = $this->dropColumnDefault($table, $column); + else + $status = $this->setColumnDefault($table, $column, $default); + + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + } + + // Rename the column, if it has been changed + if ($column != $name) { + $status = $this->renameColumn($table, $column, $name); + if ($status != 0) { + $this->rollbackTransaction(); + return -4; + } + } + + // The $name and $table parameters must be cleaned for the setComment function. + // It's ok to do that here since this is the last time these variables are used. + $this->fieldClean($name); + $this->fieldClean($table); + $status = $this->setComment('COLUMN', $name, $table, $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -5; + } + + return $this->endTransaction(); + } + + /** + * Returns table information + * @param $table The name of the table + * @return A recordset + */ + function getTable($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = " + SELECT + c.relname, n.nspname, u.usename AS relowner, + pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace + WHERE c.relkind = 'r' + AND n.nspname = '{$c_schema}' + AND c.relname = '{$table}'"; + + return $this->selectSet($sql); + } + + /** + * Return all tables in current database (and schema) + * @param $all True to fetch all tables, false for just in current schema + * @return All tables, sorted alphabetically + */ + function getTables($all = false) { + $c_schema = $this->_schema; + $this->clean($c_schema); + if ($all) { + // Exclude pg_catalog and information_schema tables + $sql = "SELECT schemaname AS nspname, tablename AS relname, tableowner AS relowner + FROM pg_catalog.pg_tables + WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') + ORDER BY schemaname, tablename"; + } else { + $sql = "SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, + pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment, + reltuples::bigint + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace + WHERE c.relkind = 'r' + AND nspname='{$c_schema}' + ORDER BY c.relname"; + } + + return $this->selectSet($sql); + } + + /** + * Returns the current default_with_oids setting + * @return default_with_oids setting + */ + function getDefaultWithOid() { + // 8.0 is the first release to have this setting + // Prior releases don't have this setting... oids always activated + return 'on'; + } + + // Constraint functions + + /** + * Returns a list of all constraints on a table, + * including constraint name, definition, related col and referenced namespace, + * table and col if needed + * @param $table the table where we are looking for fk + * @return a recordset + */ + function getConstraintsWithFields($table) { + + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + // get the max number of col used in a constraint for the table + $sql = "SELECT DISTINCT + max(SUBSTRING(array_dims(c.conkey) FROM '^\\\\[.*:(.*)\\\\]$')) as nb + FROM pg_catalog.pg_constraint AS c + JOIN pg_catalog.pg_class AS r ON (c.conrelid=r.oid) + JOIN pg_catalog.pg_namespace AS ns ON (r.relnamespace=ns.oid) + WHERE + r.relname = '{$table}' AND ns.nspname='{$c_schema}'"; + + $rs = $this->selectSet($sql); + + if ($rs->EOF) $max_col = 0; + else $max_col = $rs->fields['nb']; + + $sql = ' + SELECT + c.oid AS conid, c.contype, c.conname, pg_catalog.pg_get_constraintdef(c.oid, true) AS consrc, + ns1.nspname as p_schema, r1.relname as p_table, ns2.nspname as f_schema, + r2.relname as f_table, f1.attname as p_field, f1.attnum AS p_attnum, f2.attname as f_field, + f2.attnum AS f_attnum, pg_catalog.obj_description(c.oid, \'pg_constraint\') AS constcomment, + c.conrelid, c.confrelid + FROM + pg_catalog.pg_constraint AS c + JOIN pg_catalog.pg_class AS r1 ON (c.conrelid=r1.oid) + JOIN pg_catalog.pg_attribute AS f1 ON (f1.attrelid=r1.oid AND (f1.attnum=c.conkey[1]'; + for ($i = 2; $i <= $rs->fields['nb']; $i++) { + $sql.= " OR f1.attnum=c.conkey[$i]"; + } + $sql.= ')) + JOIN pg_catalog.pg_namespace AS ns1 ON r1.relnamespace=ns1.oid + LEFT JOIN ( + pg_catalog.pg_class AS r2 JOIN pg_catalog.pg_namespace AS ns2 ON (r2.relnamespace=ns2.oid) + ) ON (c.confrelid=r2.oid) + LEFT JOIN pg_catalog.pg_attribute AS f2 ON + (f2.attrelid=r2.oid AND ((c.confkey[1]=f2.attnum AND c.conkey[1]=f1.attnum)'; + for ($i = 2; $i <= $rs->fields['nb']; $i++) + $sql.= " OR (c.confkey[$i]=f2.attnum AND c.conkey[$i]=f1.attnum)"; + + $sql .= sprintf(")) + WHERE + r1.relname = '%s' AND ns1.nspname='%s' + ORDER BY 1", $table, $c_schema); + + return $this->selectSet($sql); + } + + // Sequence functions + + /** + * Returns all sequences in the current database + * @return A recordset + */ + function getSequences($all = false) { + $c_schema = $this->_schema; + $this->clean($c_schema); + if ($all) { + // Exclude pg_catalog and information_schema tables + $sql = "SELECT n.nspname, c.relname AS seqname, u.usename AS seqowner + FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n + WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid + AND c.relkind = 'S' + AND n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') + ORDER BY nspname, seqname"; + } else { + $sql = "SELECT c.relname AS seqname, u.usename AS seqowner, pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment + FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n + WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid + AND c.relkind = 'S' AND n.nspname='{$c_schema}' ORDER BY seqname"; + } + + return $this->selectSet( $sql ); + } + + // Function functions + + /** + * Returns all details for a particular function + * @param $func The name of the function to retrieve + * @return Function info + */ + function getFunction($function_oid) { + $this->clean($function_oid); + + $sql = " + SELECT + pc.oid AS prooid, + proname, + pg_catalog.pg_get_userbyid(proowner) AS proowner, + nspname as proschema, + lanname as prolanguage, + pg_catalog.format_type(prorettype, NULL) as proresult, + prosrc, + probin, + proretset, + proisstrict, + provolatile, + prosecdef, + pg_catalog.oidvectortypes(pc.proargtypes) AS proarguments, + pg_catalog.obj_description(pc.oid, 'pg_proc') AS procomment + FROM + pg_catalog.pg_proc pc, pg_catalog.pg_language pl, pg_catalog.pg_namespace n + WHERE + pc.oid = '$function_oid'::oid + AND pc.prolang = pl.oid + AND n.oid = pc.pronamespace + "; + + return $this->selectSet($sql); + } + + /** + * Returns a list of all casts in the database + * @return All casts + */ + function getCasts() { + global $conf; + + if ($conf['show_system']) + $where = ''; + else + $where = " + AND n1.nspname NOT LIKE 'pg\\\\_%' + AND n2.nspname NOT LIKE 'pg\\\\_%' + AND n3.nspname NOT LIKE 'pg\\\\_%' + "; + + $sql = " + SELECT + c.castsource::pg_catalog.regtype AS castsource, + c.casttarget::pg_catalog.regtype AS casttarget, + CASE WHEN c.castfunc=0 THEN NULL + ELSE c.castfunc::pg_catalog.regprocedure END AS castfunc, + c.castcontext, + obj_description(c.oid, 'pg_cast') as castcomment + FROM + (pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p ON c.castfunc=p.oid JOIN pg_catalog.pg_namespace n3 ON p.pronamespace=n3.oid), + pg_catalog.pg_type t1, + pg_catalog.pg_type t2, + pg_catalog.pg_namespace n1, + pg_catalog.pg_namespace n2 + WHERE + c.castsource=t1.oid + AND c.casttarget=t2.oid + AND t1.typnamespace=n1.oid + AND t2.typnamespace=n2.oid + {$where} + ORDER BY 1, 2 + "; + + return $this->selectSet($sql); + } + + // Capabilities + + function hasAlterColumnType() { return false; } + function hasCreateFieldWithConstraints() { return false; } + function hasAlterDatabaseOwner() { return false; } + function hasAlterSchemaOwner() { return false; } + function hasFunctionAlterOwner() { return false; } + function hasNamedParams() { return false; } + function hasQueryCancel() { return false; } + function hasTablespaces() { return false; } + function hasMagicTypes() { return false; } +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres80.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres80.php new file mode 100644 index 00000000..1f29c1cf --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres80.php @@ -0,0 +1,354 @@ +<?php + +/** + * PostgreSQL 8.0 support + * + * $Id: Postgres80.php,v 1.28 2007/12/12 04:11:10 xzilla Exp $ + */ + +include_once('./classes/database/Postgres81.php'); + +class Postgres80 extends Postgres81 { + + var $major_version = 8.0; + // Map of database encoding names to HTTP encoding names. If a + // database encoding does not appear in this list, then its HTTP + // encoding name is the same as its database encoding name. + var $codemap = array( + 'ALT' => 'CP866', + 'EUC_CN' => 'GB2312', + 'EUC_JP' => 'EUC-JP', + 'EUC_KR' => 'EUC-KR', + 'EUC_TW' => 'EUC-TW', + 'ISO_8859_5' => 'ISO-8859-5', + 'ISO_8859_6' => 'ISO-8859-6', + 'ISO_8859_7' => 'ISO-8859-7', + 'ISO_8859_8' => 'ISO-8859-8', + 'JOHAB' => 'CP1361', + 'KOI8' => 'KOI8-R', + 'LATIN1' => 'ISO-8859-1', + 'LATIN2' => 'ISO-8859-2', + 'LATIN3' => 'ISO-8859-3', + 'LATIN4' => 'ISO-8859-4', + // The following encoding map is a known error in PostgreSQL < 7.2 + // See the constructor for Postgres72. + 'LATIN5' => 'ISO-8859-5', + 'LATIN6' => 'ISO-8859-10', + 'LATIN7' => 'ISO-8859-13', + 'LATIN8' => 'ISO-8859-14', + 'LATIN9' => 'ISO-8859-15', + 'LATIN10' => 'ISO-8859-16', + 'SQL_ASCII' => 'US-ASCII', + 'TCVN' => 'CP1258', + 'UNICODE' => 'UTF-8', + 'WIN' => 'CP1251', + 'WIN874' => 'CP874', + 'WIN1256' => 'CP1256' + ); + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres80($conn) { + $this->Postgres81($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc80.php'); + return $this->help_page; + } + + // Database functions + + /** + * Return all database available on the server + * @return A list of databases, sorted alphabetically + */ + function getDatabases($currentdatabase = NULL) { + global $conf, $misc; + + $server_info = $misc->getServerInfo(); + + if (isset($conf['owned_only']) && $conf['owned_only'] && !$this->isSuperUser()) { + $username = $server_info['username']; + $this->clean($username); + $clause = " AND pu.usename='{$username}'"; + } + else $clause = ''; + + if ($currentdatabase != NULL) { + $this->clean($currentdatabase); + $orderby = "ORDER BY pdb.datname = '{$currentdatabase}' DESC, pdb.datname"; + } + else + $orderby = "ORDER BY pdb.datname"; + + if (!$conf['show_system']) + $where = ' AND NOT pdb.datistemplate'; + else + $where = ' AND pdb.datallowconn'; + + $sql = "SELECT pdb.datname AS datname, pu.usename AS datowner, pg_encoding_to_char(encoding) AS datencoding, + (SELECT description FROM pg_description pd WHERE pdb.oid=pd.objoid) AS datcomment, + (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace + FROM pg_database pdb, pg_user pu + WHERE pdb.datdba = pu.usesysid + {$where} + {$clause} + {$orderby}"; + + return $this->selectSet($sql); + } + + // Schema functions + + /** + * Return all schemas in the current database. + * @return All schemas, sorted alphabetically + */ + function getSchemas() { + global $conf; + + if (!$conf['show_system']) { + $where = "WHERE nspname NOT LIKE 'pg@_%' ESCAPE '@' AND nspname != 'information_schema'"; + } + else $where = "WHERE nspname !~ '^pg_t(emp_[0-9]+|oast)$'"; + $sql = " + SELECT pn.nspname, pu.usename AS nspowner, + pg_catalog.obj_description(pn.oid, 'pg_namespace') AS nspcomment + FROM pg_catalog.pg_namespace pn + LEFT JOIN pg_catalog.pg_user pu ON (pn.nspowner = pu.usesysid) + {$where} + ORDER BY nspname"; + + return $this->selectSet($sql); + } + + /** + * Return all information relating to a schema + * @param $schema The name of the schema + * @return Schema information + */ + function getSchemaByName($schema) { + $this->clean($schema); + $sql = " + SELECT nspname, nspowner, u.usename AS ownername, nspacl, + pg_catalog.obj_description(pn.oid, 'pg_namespace') as nspcomment + FROM pg_catalog.pg_namespace pn + LEFT JOIN pg_shadow as u ON pn.nspowner = u.usesysid + WHERE nspname='{$schema}'"; + return $this->selectSet($sql); + } + + // Table functions + + /** + * Protected method which alter a table + * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION + * @param $tblrs The table recordSet returned by getTable() + * @param $name The new name for the table + * @param $owner The new owner for the table + * @param $schema The new schema for the table + * @param $comment The comment on the table + * @param $tablespace The new tablespace for the table ('' means leave as is) + * @return 0 success + * @return -3 rename error + * @return -4 comment error + * @return -5 owner error + * @return -6 tablespace error + */ + protected + function _alterTable($tblrs, $name, $owner, $schema, $comment, $tablespace) { + + /* $schema not supported in pg80- */ + + // Comment + $status = $this->setComment('TABLE', '', $tblrs->fields['relname'], $comment); + if ($status != 0) return -4; + + // Owner + $this->fieldClean($owner); + $status = $this->alterTableOwner($tblrs, $owner); + if ($status != 0) return -5; + + // Tablespace + $this->fieldClean($tablespace); + $status = $this->alterTableTablespace($tblrs, $tablespace); + if ($status != 0) return -6; + + // Rename + $this->fieldClean($name); + $status = $this->alterTableName($tblrs, $name); + if ($status != 0) return -3; + + return 0; + } + + // View functions + + /** + * Protected method which alter a view + * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION + * @param $vwrs The view recordSet returned by getView() + * @param $name The new name for the view + * @param $owner The new owner for the view + * @param $comment The comment on the view + * @return 0 success + * @return -3 rename error + * @return -4 comment error + * @return -5 owner error + */ + protected + function _alterView($vwrs, $name, $owner, $schema, $comment) { + + /* $schema not supported in pg80- */ + $this->fieldArrayClean($vwrs->fields); + + // Comment + if ($this->setComment('VIEW', $vwrs->fields['relname'], '', $comment) != 0) + return -4; + + // Owner + $this->fieldClean($owner); + $status = $this->alterViewOwner($vwrs, $owner); + if ($status != 0) return -5; + + // Rename + $this->fieldClean($name); + $status = $this->alterViewName($vwrs, $name); + if ($status != 0) return -3; + + return 0; + } + + // Sequence functions + + /** + * Protected method which alter a sequence + * SHOULDN'T BE CALLED OUTSIDE OF A TRANSACTION + * @param $seqrs The sequence recordSet returned by getSequence() + * @param $name The new name for the sequence + * @param $comment The comment on the sequence + * @param $owner The new owner for the sequence + * @param $schema The new schema for the sequence + * @param $increment The increment + * @param $minvalue The min value + * @param $maxvalue The max value + * @param $restartvalue The starting value + * @param $cachevalue The cache value + * @param $cycledvalue True if cycled, false otherwise + * @param $startvalue The sequence start value when issueing a restart + * @return 0 success + * @return -3 rename error + * @return -4 comment error + * @return -5 owner error + * @return -6 get sequence props error + * @return -7 schema error + */ + protected + function _alterSequence($seqrs, $name, $comment, $owner, $schema, $increment, + $minvalue, $maxvalue, $restartvalue, $cachevalue, $cycledvalue, $startvalue) { + + /* $schema not supported in pg80- */ + $this->fieldArrayClean($seqrs->fields); + + // Comment + $status = $this->setComment('SEQUENCE', $seqrs->fields['seqname'], '', $comment); + if ($status != 0) + return -4; + + // Owner + $this->fieldClean($owner); + $status = $this->alterSequenceOwner($seqrs, $owner); + if ($status != 0) + return -5; + + // Props + $this->clean($increment); + $this->clean($minvalue); + $this->clean($maxvalue); + $this->clean($restartvalue); + $this->clean($cachevalue); + $this->clean($cycledvalue); + $this->clean($startvalue); + $status = $this->alterSequenceProps($seqrs, $increment, $minvalue, + $maxvalue, $restartvalue, $cachevalue, $cycledvalue, null); + if ($status != 0) + return -6; + + // Rename + $this->fieldClean($name); + $status = $this->alterSequenceName($seqrs, $name); + if ($status != 0) + return -3; + + return 0; + } + + // Role, User/group functions + + /** + * Changes a user's password + * @param $username The username + * @param $password The new password + * @return 0 success + */ + function changePassword($username, $password) { + $enc = $this->_encryptPassword($username, $password); + $this->fieldClean($username); + $this->clean($enc); + + $sql = "ALTER USER \"{$username}\" WITH ENCRYPTED PASSWORD '{$enc}'"; + + return $this->execute($sql); + } + + // Aggregate functions + + /** + * Gets all information for an aggregate + * @param $name The name of the aggregate + * @param $basetype The input data type of the aggregate + * @return A recordset + */ + function getAggregate($name, $basetype) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($name); + $this->clean($basetype); + + $sql = " + SELECT p.proname, + CASE p.proargtypes[0] + WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN NULL + ELSE pg_catalog.format_type(p.proargtypes[0], NULL) + END AS proargtypes, a.aggtransfn, format_type(a.aggtranstype, NULL) AS aggstype, + a.aggfinalfn, a.agginitval, u.usename, pg_catalog.obj_description(p.oid, 'pg_proc') AS aggrcomment + FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_user u, pg_catalog.pg_aggregate a + WHERE n.oid = p.pronamespace AND p.proowner=u.usesysid AND p.oid=a.aggfnoid + AND p.proisagg AND n.nspname='{$c_schema}' + AND p.proname='{$name}' + AND CASE p.proargtypes[0] + WHEN 'pg_catalog.\"any\"'::pg_catalog.regtype THEN '' + ELSE pg_catalog.format_type(p.proargtypes[0], NULL) + END ='{$basetype}'"; + + return $this->selectSet($sql); + } + + // Capabilities + + function hasAggregateSortOp() { return false; } + function hasAlterTableSchema() { return false; } + function hasAutovacuum() { return false; } + function hasDisableTriggers() { return false; } + function hasFunctionAlterSchema() { return false; } + function hasPreparedXacts() { return false; } + function hasRoles() { return false; } + function hasAlterSequenceSchema() { return false; } + function hasServerAdminFuncs() { return false; } +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres81.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres81.php new file mode 100644 index 00000000..70d40b82 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres81.php @@ -0,0 +1,296 @@ +<?php + +/** + * PostgreSQL 8.1 support + * + * $Id: Postgres81.php,v 1.21 2008/01/19 13:46:15 ioguix Exp $ + */ + +include_once('./classes/database/Postgres82.php'); + +class Postgres81 extends Postgres82 { + + var $major_version = 8.1; + // List of all legal privileges that can be applied to different types + // of objects. + var $privlist = array( + 'table' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'RULE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'view' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'RULE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'sequence' => array('SELECT', 'UPDATE', 'ALL PRIVILEGES'), + 'database' => array('CREATE', 'TEMPORARY', 'ALL PRIVILEGES'), + 'function' => array('EXECUTE', 'ALL PRIVILEGES'), + 'language' => array('USAGE', 'ALL PRIVILEGES'), + 'schema' => array('CREATE', 'USAGE', 'ALL PRIVILEGES'), + 'tablespace' => array('CREATE', 'ALL PRIVILEGES') + ); + // List of characters in acl lists and the privileges they + // refer to. + var $privmap = array( + 'r' => 'SELECT', + 'w' => 'UPDATE', + 'a' => 'INSERT', + 'd' => 'DELETE', + 'R' => 'RULE', + 'x' => 'REFERENCES', + 't' => 'TRIGGER', + 'X' => 'EXECUTE', + 'U' => 'USAGE', + 'C' => 'CREATE', + 'T' => 'TEMPORARY' + ); + // Array of allowed index types + var $typIndexes = array('BTREE', 'RTREE', 'GIST', 'HASH'); + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres81($conn) { + $this->Postgres82($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc81.php'); + return $this->help_page; + } + + // Database functions + + /** + * Returns all databases available on the server + * @return A list of databases, sorted alphabetically + */ + function getDatabases($currentdatabase = NULL) { + global $conf, $misc; + + $server_info = $misc->getServerInfo(); + + if (isset($conf['owned_only']) && $conf['owned_only'] && !$this->isSuperUser()) { + $username = $server_info['username']; + $this->clean($username); + $clause = " AND pr.rolname='{$username}'"; + } + else $clause = ''; + + if ($currentdatabase != NULL) { + $this->clean($currentdatabase); + $orderby = "ORDER BY pdb.datname = '{$currentdatabase}' DESC, pdb.datname"; + } + else + $orderby = "ORDER BY pdb.datname"; + + if (!$conf['show_system']) + $where = ' AND NOT pdb.datistemplate'; + else + $where = ' AND pdb.datallowconn'; + + $sql = "SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding, + (SELECT description FROM pg_catalog.pg_description pd WHERE pdb.oid=pd.objoid) AS datcomment, + (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace, + pg_catalog.pg_database_size(pdb.oid) as dbsize + FROM pg_catalog.pg_database pdb LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid) + WHERE true + {$where} + {$clause} + {$orderby}"; + + return $this->selectSet($sql); + } + + /** + * Alters a database + * the multiple return vals are for postgres 8+ which support more functionality in alter database + * @param $dbName The name of the database + * @param $newName new name for the database + * @param $newOwner The new owner for the database + * @return 0 success + * @return -1 transaction error + * @return -2 owner error + * @return -3 rename error + */ + function alterDatabase($dbName, $newName, $newOwner = '', $comment = '') { + $this->clean($dbName); + $this->clean($newName); + $this->clean($newOwner); + //ignore $comment, not supported pre 8.2 + + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + if ($dbName != $newName) { + $status = $this->alterDatabaseRename($dbName, $newName); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + } + + $status = $this->alterDatabaseOwner($newName, $newOwner); + if ($status != 0) { + $this->rollbackTransaction(); + return -2; + } + return $this->endTransaction(); + } + + // Autovacuum functions + + function saveAutovacuum($table, $vacenabled, $vacthreshold, $vacscalefactor, + $anathresold, $anascalefactor, $vaccostdelay, $vaccostlimit) + { + $defaults = $this->getAutovacuum(); + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $rs = $this->selectSet(" + SELECT c.oid + FROM pg_catalog.pg_class AS c + LEFT JOIN pg_catalog.pg_namespace AS n ON (n.oid=c.relnamespace) + WHERE + c.relname = '{$table}' AND n.nspname = '{$c_schema}' + "); + + if ($rs->EOF) + return -1; + + $toid = $rs->fields('oid'); + unset ($rs); + + if (empty($_POST['autovacuum_vacuum_threshold'])) + $_POST['autovacuum_vacuum_threshold'] = $defaults['autovacuum_vacuum_threshold']; + + if (empty($_POST['autovacuum_vacuum_scale_factor'])) + $_POST['autovacuum_vacuum_scale_factor'] = $defaults['autovacuum_vacuum_scale_factor']; + + if (empty($_POST['autovacuum_analyze_threshold'])) + $_POST['autovacuum_analyze_threshold'] = $defaults['autovacuum_analyze_threshold']; + + if (empty($_POST['autovacuum_analyze_scale_factor'])) + $_POST['autovacuum_analyze_scale_factor'] = $defaults['autovacuum_analyze_scale_factor']; + + if (empty($_POST['autovacuum_vacuum_cost_delay'])) + $_POST['autovacuum_vacuum_cost_delay'] = $defaults['autovacuum_vacuum_cost_delay']; + + if (empty($_POST['autovacuum_vacuum_cost_limit'])) + $_POST['autovacuum_vacuum_cost_limit'] = $defaults['autovacuum_vacuum_cost_limit']; + + $rs = $this->selectSet("SELECT vacrelid + FROM \"pg_catalog\".\"pg_autovacuum\" + WHERE vacrelid = {$toid};"); + + $status = -1; // ini + if ($rs->recordCount() and ($rs->fields['vacrelid'] == $toid)) { + // table exists in pg_autovacuum, UPDATE + $sql = sprintf("UPDATE \"pg_catalog\".\"pg_autovacuum\" SET + enabled = '%s', + vac_base_thresh = %s, + vac_scale_factor = %s, + anl_base_thresh = %s, + anl_scale_factor = %s, + vac_cost_delay = %s, + vac_cost_limit = %s + WHERE vacrelid = {$toid}; + ", + ($_POST['autovacuum_enabled'] == 'on')? 't':'f', + $_POST['autovacuum_vacuum_threshold'], + $_POST['autovacuum_vacuum_scale_factor'], + $_POST['autovacuum_analyze_threshold'], + $_POST['autovacuum_analyze_scale_factor'], + $_POST['autovacuum_vacuum_cost_delay'], + $_POST['autovacuum_vacuum_cost_limit'] + ); + $status = $this->execute($sql); + } + else { + // table doesn't exists in pg_autovacuum, INSERT + $sql = sprintf("INSERT INTO \"pg_catalog\".\"pg_autovacuum\" + VALUES (%s, '%s', %s, %s, %s, %s, %s, %s)", + $toid, + ($_POST['autovacuum_enabled'] == 'on')? 't':'f', + $_POST['autovacuum_vacuum_threshold'], + $_POST['autovacuum_vacuum_scale_factor'], + $_POST['autovacuum_analyze_threshold'], + $_POST['autovacuum_analyze_scale_factor'], + $_POST['autovacuum_vacuum_cost_delay'], + $_POST['autovacuum_vacuum_cost_limit'] + ); + $status = $this->execute($sql); + } + + return $status; + } + + /** + * Returns all available process information. + * @param $database (optional) Find only connections to specified database + * @return A recordset + */ + function getProcesses($database = null) { + if ($database === null) + $sql = "SELECT datname, usename, procpid AS pid, current_query AS query, query_start, + case when (select count(*) from pg_locks where pid=pg_stat_activity.procpid and granted is false) > 0 then 't' else 'f' end as waiting + FROM pg_catalog.pg_stat_activity + ORDER BY datname, usename, procpid"; + else { + $this->clean($database); + $sql = "SELECT datname, usename, procpid AS pid, current_query AS query, query_start + case when (select count(*) from pg_locks where pid=pg_stat_activity.procpid and granted is false) > 0 then 't' else 'f' end as waiting + FROM pg_catalog.pg_stat_activity + WHERE datname='{$database}' + ORDER BY usename, procpid"; + } + + $rc = $this->selectSet($sql); + + return $rc; + } + + // Tablespace functions + + /** + * Retrieves a tablespace's information + * @return A recordset + */ + function getTablespace($spcname) { + $this->clean($spcname); + + $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, spclocation + FROM pg_catalog.pg_tablespace WHERE spcname='{$spcname}'"; + + return $this->selectSet($sql); + } + + /** + * Retrieves information for all tablespaces + * @param $all Include all tablespaces (necessary when moving objects back to the default space) + * @return A recordset + */ + function getTablespaces($all = false) { + global $conf; + + $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, spclocation + FROM pg_catalog.pg_tablespace"; + + if (!$conf['show_system'] && !$all) { + $sql .= ' WHERE spcname NOT LIKE $$pg\_%$$'; + } + + $sql .= " ORDER BY spcname"; + + return $this->selectSet($sql); + } + + // Capabilities + + function hasCreateTableLikeWithConstraints() {return false;} + function hasSharedComments() {return false;} + function hasConcurrentIndexBuild() {return false;} +} + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres82.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres82.php new file mode 100644 index 00000000..e30cd673 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres82.php @@ -0,0 +1,359 @@ +<?php + +/** + * PostgreSQL 8.2 support + * + * $Id: Postgres82.php,v 1.10 2007/12/28 16:21:25 ioguix Exp $ + */ + +include_once('./classes/database/Postgres83.php'); + +class Postgres82 extends Postgres83 { + + var $major_version = 8.2; + + // Select operators + var $selectOps = array('=' => 'i', '!=' => 'i', '<' => 'i', '>' => 'i', '<=' => 'i', '>=' => 'i', '<<' => 'i', '>>' => 'i', '<<=' => 'i', '>>=' => 'i', + 'LIKE' => 'i', 'NOT LIKE' => 'i', 'ILIKE' => 'i', 'NOT ILIKE' => 'i', 'SIMILAR TO' => 'i', + 'NOT SIMILAR TO' => 'i', '~' => 'i', '!~' => 'i', '~*' => 'i', '!~*' => 'i', + 'IS NULL' => 'p', 'IS NOT NULL' => 'p', 'IN' => 'x', 'NOT IN' => 'x'); + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres82($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc82.php'); + return $this->help_page; + } + + // Database functions + + /** + * Returns table locks information in the current database + * @return A recordset + */ + function getLocks() { + global $conf; + + if (!$conf['show_system']) + $where = 'AND pn.nspname NOT LIKE $$pg\_%$$'; + else + $where = "AND nspname !~ '^pg_t(emp_[0-9]+|oast)$'"; + + $sql = "SELECT pn.nspname, pc.relname AS tablename, pl.transaction, pl.pid, pl.mode, pl.granted + FROM pg_catalog.pg_locks pl, pg_catalog.pg_class pc, pg_catalog.pg_namespace pn + WHERE pl.relation = pc.oid AND pc.relnamespace=pn.oid {$where} + ORDER BY nspname,tablename"; + + return $this->selectSet($sql); + } + + // Sequence functions + + /** + * Rename a sequence + * @param $seqrs The sequence RecordSet returned by getSequence() + * @param $name The new name for the sequence + * @return 0 success + */ + function alterSequenceName($seqrs, $name) { + /* vars are cleaned in _alterSequence */ + if (!empty($name) && ($seqrs->fields['seqname'] != $name)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER TABLE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status == 0) + $seqrs->fields['seqname'] = $name; + else + return $status; + } + return 0; + } + + // View functions + + /** + * Rename a view + * @param $vwrs The view recordSet returned by getView() + * @param $name The new view's name + * @return -1 Failed + * @return 0 success + */ + function alterViewName($vwrs, $name) { + // Rename (only if name has changed) + /* $vwrs and $name are cleaned in _alterView */ + if (!empty($name) && ($name != $vwrs->fields['relname'])) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER TABLE \"{$f_schema}\".\"{$vwrs->fields['relname']}\" RENAME TO \"{$name}\""; + $status = $this->execute($sql); + if ($status == 0) + $vwrs->fields['relname'] = $name; + else + return $status; + } + return 0; + } + + // Trigger functions + + /** + * Grabs a list of triggers on a table + * @param $table The name of a table whose triggers to retrieve + * @return A recordset + */ + function getTriggers($table = '') { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT + t.tgname, pg_catalog.pg_get_triggerdef(t.oid) AS tgdef, t.tgenabled, p.oid AS prooid, + p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto, + ns.nspname AS pronamespace + FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns + WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) + AND (NOT tgisconstraint OR NOT EXISTS + (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f')) + AND p.oid=t.tgfoid + AND p.pronamespace = ns.oid"; + + return $this->selectSet($sql); + } + + // Function functions + + /** + * Returns all details for a particular function + * @param $func The name of the function to retrieve + * @return Function info + */ + function getFunction($function_oid) { + $this->clean($function_oid); + + $sql = "SELECT + pc.oid AS prooid, + proname, + pg_catalog.pg_get_userbyid(proowner) AS proowner, + nspname as proschema, + lanname as prolanguage, + pg_catalog.format_type(prorettype, NULL) as proresult, + prosrc, + probin, + proretset, + proisstrict, + provolatile, + prosecdef, + pg_catalog.oidvectortypes(pc.proargtypes) AS proarguments, + proargnames AS proargnames, + pg_catalog.obj_description(pc.oid, 'pg_proc') AS procomment + FROM + pg_catalog.pg_proc pc, pg_catalog.pg_language pl, pg_catalog.pg_namespace pn + WHERE + pc.oid = '{$function_oid}'::oid + AND pc.prolang = pl.oid + AND pc.pronamespace = pn.oid + "; + + return $this->selectSet($sql); + } + + /** + * Creates a new function. + * @param $funcname The name of the function to create + * @param $args A comma separated string of types + * @param $returns The return type + * @param $definition The definition for the new function + * @param $language The language the function is written for + * @param $flags An array of optional flags + * @param $setof True if it returns a set, false otherwise + * @param $rows number of rows planner should estimate will be returned + * @param $cost cost the planner should use in the function execution step + * @param $comment The comment on the function + * @param $replace (optional) True if OR REPLACE, false for normal + * @return 0 success + * @return -1 create function failed + * @return -4 set comment failed + */ + function createFunction($funcname, $args, $returns, $definition, $language, $flags, $setof, $cost, $rows, $comment, $replace = false) { + + // Begin a transaction + $status = $this->beginTransaction(); + if ($status != 0) { + $this->rollbackTransaction(); + return -1; + } + + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($funcname); + $this->clean($args); + $this->fieldClean($language); + $this->arrayClean($flags); + + $sql = "CREATE"; + if ($replace) $sql .= " OR REPLACE"; + $sql .= " FUNCTION \"{$f_schema}\".\"{$funcname}\" ("; + + if ($args != '') + $sql .= $args; + + // For some reason, the returns field cannot have quotes... + $sql .= ") RETURNS "; + if ($setof) $sql .= "SETOF "; + $sql .= "{$returns} AS "; + + if (is_array($definition)) { + $this->arrayClean($definition); + $sql .= "'" . $definition[0] . "'"; + if ($definition[1]) { + $sql .= ",'" . $definition[1] . "'"; + } + } else { + $this->clean($definition); + $sql .= "'" . $definition . "'"; + } + + $sql .= " LANGUAGE \"{$language}\""; + + // Add flags + foreach ($flags as $v) { + // Skip default flags + if ($v == '') continue; + else $sql .= "\n{$v}"; + } + + $status = $this->execute($sql); + if ($status != 0) { + $this->rollbackTransaction(); + return -3; + } + + /* set the comment */ + $status = $this->setComment('FUNCTION', "\"{$funcname}\"({$args})", null, $comment); + if ($status != 0) { + $this->rollbackTransaction(); + return -4; + } + + return $this->endTransaction(); + } + + // Index functions + + /** + * Clusters an index + * @param $index The name of the index + * @param $table The table the index is on + * @return 0 success + */ + function clusterIndex($table='', $index='') { + + $sql = 'CLUSTER'; + + // We don't bother with a transaction here, as there's no point rolling + // back an expensive cluster if a cheap analyze fails for whatever reason + + if (!empty($table)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $this->fieldClean($table); + + if (!empty($index)) { + $this->fieldClean($index); + $sql .= " \"{$index}\" ON \"{$f_schema}\".\"{$table}\""; + } + else { + $sql .= " \"{$f_schema}\".\"{$table}\""; + } + } + + return $this->execute($sql); + } + + // Operator functions + + /** + * Returns all details for a particular operator + * @param $operator_oid The oid of the operator + * @return Function info + */ + function getOperator($operator_oid) { + $this->clean($operator_oid); + + $sql = " + SELECT + po.oid, po.oprname, + oprleft::pg_catalog.regtype AS oprleftname, + oprright::pg_catalog.regtype AS oprrightname, + oprresult::pg_catalog.regtype AS resultname, + po.oprcanhash, + oprcom::pg_catalog.regoperator AS oprcom, + oprnegate::pg_catalog.regoperator AS oprnegate, + oprlsortop::pg_catalog.regoperator AS oprlsortop, + oprrsortop::pg_catalog.regoperator AS oprrsortop, + oprltcmpop::pg_catalog.regoperator AS oprltcmpop, + oprgtcmpop::pg_catalog.regoperator AS oprgtcmpop, + po.oprcode::pg_catalog.regproc AS oprcode, + po.oprrest::pg_catalog.regproc AS oprrest, + po.oprjoin::pg_catalog.regproc AS oprjoin + FROM + pg_catalog.pg_operator po + WHERE + po.oid='{$operator_oid}' + "; + + return $this->selectSet($sql); + } + + // Operator Class functions + + /** + * Gets all opclasses + * @return A recordset + */ + function getOpClasses() { + $c_schema = $this->_schema; + $this->clean($c_schema); + $sql = " + SELECT + pa.amname, + po.opcname, + po.opcintype::pg_catalog.regtype AS opcintype, + po.opcdefault, + pg_catalog.obj_description(po.oid, 'pg_opclass') AS opccomment + FROM + pg_catalog.pg_opclass po, pg_catalog.pg_am pa, pg_catalog.pg_namespace pn + WHERE + po.opcamid=pa.oid + AND po.opcnamespace=pn.oid + AND pn.nspname='{$c_schema}' + ORDER BY 1,2 + "; + + return $this->selectSet($sql); + } + + // Capabilities + + function hasCreateTableLikeWithIndexes() {return false;} + function hasEnumTypes() {return false;} + function hasFTS() {return false;} + function hasFunctionCosting() {return false;} + function hasFunctionGUC() {return false;} + function hasVirtualTransactionId() {return false;} + +} + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres83.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres83.php new file mode 100644 index 00000000..ce0416b9 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres83.php @@ -0,0 +1,363 @@ +<?php + +/** + * PostgreSQL 8.3 support + * + * $Id: Postgres82.php,v 1.10 2007/12/28 16:21:25 ioguix Exp $ + */ + +include_once('./classes/database/Postgres84.php'); + +class Postgres83 extends Postgres84 { + + var $major_version = 8.3; + + // List of all legal privileges that can be applied to different types + // of objects. + var $privlist = array( + 'table' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'view' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'sequence' => array('SELECT', 'UPDATE', 'ALL PRIVILEGES'), + 'database' => array('CREATE', 'TEMPORARY', 'CONNECT', 'ALL PRIVILEGES'), + 'function' => array('EXECUTE', 'ALL PRIVILEGES'), + 'language' => array('USAGE', 'ALL PRIVILEGES'), + 'schema' => array('CREATE', 'USAGE', 'ALL PRIVILEGES'), + 'tablespace' => array('CREATE', 'ALL PRIVILEGES') + ); + // List of characters in acl lists and the privileges they + // refer to. + var $privmap = array( + 'r' => 'SELECT', + 'w' => 'UPDATE', + 'a' => 'INSERT', + 'd' => 'DELETE', + 'R' => 'RULE', + 'x' => 'REFERENCES', + 't' => 'TRIGGER', + 'X' => 'EXECUTE', + 'U' => 'USAGE', + 'C' => 'CREATE', + 'T' => 'TEMPORARY', + 'c' => 'CONNECT' + ); + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres83($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc83.php'); + return $this->help_page; + } + + // Databse functions + + /** + * Return all database available on the server + * @param $currentdatabase database name that should be on top of the resultset + * + * @return A list of databases, sorted alphabetically + */ + function getDatabases($currentdatabase = NULL) { + global $conf, $misc; + + $server_info = $misc->getServerInfo(); + + if (isset($conf['owned_only']) && $conf['owned_only'] && !$this->isSuperUser()) { + $username = $server_info['username']; + $this->clean($username); + $clause = " AND pr.rolname='{$username}'"; + } + else $clause = ''; + + if ($currentdatabase != NULL) { + $this->clean($currentdatabase); + $orderby = "ORDER BY pdb.datname = '{$currentdatabase}' DESC, pdb.datname"; + } + else + $orderby = "ORDER BY pdb.datname"; + + if (!$conf['show_system']) + $where = ' AND NOT pdb.datistemplate'; + else + $where = ' AND pdb.datallowconn'; + + $sql = " + SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid AND pd.classoid='pg_database'::regclass) AS datcomment, + (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace, + pg_catalog.pg_database_size(pdb.oid) as dbsize + FROM pg_catalog.pg_database pdb LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid) + WHERE true + {$where} + {$clause} + {$orderby}"; + + return $this->selectSet($sql); + } + + // Administration functions + + /** + * Returns all available autovacuum per table information. + * @return A recordset + */ + function getTableAutovacuum($table='') { + $sql = ''; + + if ($table !== '') { + $this->clean($table); + $c_schema = $this->_schema; + $this->clean($c_schema); + + $sql = " + SELECT vacrelid, nspname, relname, + CASE enabled + WHEN 't' THEN 'on' + ELSE 'off' + END AS autovacuum_enabled, vac_base_thresh AS autovacuum_vacuum_threshold, + vac_scale_factor AS autovacuum_vacuum_scale_factor, anl_base_thresh AS autovacuum_analyze_threshold, + anl_scale_factor AS autovacuum_analyze_scale_factor, vac_cost_delay AS autovacuum_vacuum_cost_delay, + vac_cost_limit AS autovacuum_vacuum_cost_limit + FROM pg_autovacuum AS a + join pg_class AS c on (c.oid=a.vacrelid) + join pg_namespace AS n on (n.oid=c.relnamespace) + WHERE c.relname = '{$table}' AND n.nspname = '{$c_schema}' + ORDER BY nspname, relname + "; + } + else { + $sql = " + SELECT vacrelid, nspname, relname, + CASE enabled + WHEN 't' THEN 'on' + ELSE 'off' + END AS autovacuum_enabled, vac_base_thresh AS autovacuum_vacuum_threshold, + vac_scale_factor AS autovacuum_vacuum_scale_factor, anl_base_thresh AS autovacuum_analyze_threshold, + anl_scale_factor AS autovacuum_analyze_scale_factor, vac_cost_delay AS autovacuum_vacuum_cost_delay, + vac_cost_limit AS autovacuum_vacuum_cost_limit + FROM pg_autovacuum AS a + join pg_class AS c on (c.oid=a.vacrelid) + join pg_namespace AS n on (n.oid=c.relnamespace) + ORDER BY nspname, relname + "; + } + + return $this->selectSet($sql); + } + + function saveAutovacuum($table, $vacenabled, $vacthreshold, $vacscalefactor, $anathresold, + $anascalefactor, $vaccostdelay, $vaccostlimit) + { + $defaults = $this->getAutovacuum(); + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $rs = $this->selectSet(" + SELECT c.oid + FROM pg_catalog.pg_class AS c + LEFT JOIN pg_catalog.pg_namespace AS n ON (n.oid=c.relnamespace) + WHERE + c.relname = '{$table}' AND n.nspname = '{$c_schema}' + "); + + if ($rs->EOF) + return -1; + + $toid = $rs->fields('oid'); + unset ($rs); + + if (empty($_POST['autovacuum_vacuum_threshold'])) + $_POST['autovacuum_vacuum_threshold'] = $defaults['autovacuum_vacuum_threshold']; + + if (empty($_POST['autovacuum_vacuum_scale_factor'])) + $_POST['autovacuum_vacuum_scale_factor'] = $defaults['autovacuum_vacuum_scale_factor']; + + if (empty($_POST['autovacuum_analyze_threshold'])) + $_POST['autovacuum_analyze_threshold'] = $defaults['autovacuum_analyze_threshold']; + + if (empty($_POST['autovacuum_analyze_scale_factor'])) + $_POST['autovacuum_analyze_scale_factor'] = $defaults['autovacuum_analyze_scale_factor']; + + if (empty($_POST['autovacuum_vacuum_cost_delay'])) + $_POST['autovacuum_vacuum_cost_delay'] = $defaults['autovacuum_vacuum_cost_delay']; + + if (empty($_POST['autovacuum_vacuum_cost_limit'])) + $_POST['autovacuum_vacuum_cost_limit'] = $defaults['autovacuum_vacuum_cost_limit']; + + if (empty($_POST['vacuum_freeze_min_age'])) + $_POST['vacuum_freeze_min_age'] = $defaults['vacuum_freeze_min_age']; + + if (empty($_POST['autovacuum_freeze_max_age'])) + $_POST['autovacuum_freeze_max_age'] = $defaults['autovacuum_freeze_max_age']; + + + $rs = $this->selectSet("SELECT vacrelid + FROM \"pg_catalog\".\"pg_autovacuum\" + WHERE vacrelid = {$toid};"); + + $status = -1; // ini + if ($rs->recordCount() and ($rs->fields['vacrelid'] == $toid)) { + // table exists in pg_autovacuum, UPDATE + $sql = sprintf("UPDATE \"pg_catalog\".\"pg_autovacuum\" SET + enabled = '%s', + vac_base_thresh = %s, + vac_scale_factor = %s, + anl_base_thresh = %s, + anl_scale_factor = %s, + vac_cost_delay = %s, + vac_cost_limit = %s, + freeze_min_age = %s, + freeze_max_age = %s + WHERE vacrelid = {$toid}; + ", + ($_POST['autovacuum_enabled'] == 'on')? 't':'f', + $_POST['autovacuum_vacuum_threshold'], + $_POST['autovacuum_vacuum_scale_factor'], + $_POST['autovacuum_analyze_threshold'], + $_POST['autovacuum_analyze_scale_factor'], + $_POST['autovacuum_vacuum_cost_delay'], + $_POST['autovacuum_vacuum_cost_limit'], + $_POST['vacuum_freeze_min_age'], + $_POST['autovacuum_freeze_max_age'] + ); + $status = $this->execute($sql); + } + else { + // table doesn't exists in pg_autovacuum, INSERT + $sql = sprintf("INSERT INTO \"pg_catalog\".\"pg_autovacuum\" + VALUES (%s, '%s', %s, %s, %s, %s, %s, %s, %s, %s )", + $toid, + ($_POST['autovacuum_enabled'] == 'on')? 't':'f', + $_POST['autovacuum_vacuum_threshold'], + $_POST['autovacuum_vacuum_scale_factor'], + $_POST['autovacuum_analyze_threshold'], + $_POST['autovacuum_analyze_scale_factor'], + $_POST['autovacuum_vacuum_cost_delay'], + $_POST['autovacuum_vacuum_cost_limit'], + $_POST['vacuum_freeze_min_age'], + $_POST['autovacuum_freeze_max_age'] + ); + $status = $this->execute($sql); + } + + return $status; + } + + function dropAutovacuum($table) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $rs = $this->selectSet(" + SELECT c.oid + FROM pg_catalog.pg_class AS c + LEFT JOIN pg_catalog.pg_namespace AS n ON (n.oid=c.relnamespace) + WHERE + c.relname = '{$table}' AND n.nspname = '{$c_schema}' + "); + + return $this->deleteRow('pg_autovacuum', array('vacrelid' => $rs->fields['oid']), 'pg_catalog'); + } + + // Sequence functions + + /** + * Alter a sequence's properties + * @param $seqrs The sequence RecordSet returned by getSequence() + * @param $increment The sequence incremental value + * @param $minvalue The sequence minimum value + * @param $maxvalue The sequence maximum value + * @param $restartvalue The sequence current value + * @param $cachevalue The sequence cache value + * @param $cycledvalue Sequence can cycle ? + * @param $startvalue The sequence start value when issueing a restart (ignored) + * @return 0 success + */ + function alterSequenceProps($seqrs, $increment, $minvalue, $maxvalue, + $restartvalue, $cachevalue, $cycledvalue, $startvalue) { + + $sql = ''; + /* vars are cleaned in _alterSequence */ + if (!empty($increment) && ($increment != $seqrs->fields['increment_by'])) $sql .= " INCREMENT {$increment}"; + if (!empty($minvalue) && ($minvalue != $seqrs->fields['min_value'])) $sql .= " MINVALUE {$minvalue}"; + if (!empty($maxvalue) && ($maxvalue != $seqrs->fields['max_value'])) $sql .= " MAXVALUE {$maxvalue}"; + if (!empty($restartvalue) && ($restartvalue != $seqrs->fields['last_value'])) $sql .= " RESTART {$restartvalue}"; + if (!empty($cachevalue) && ($cachevalue != $seqrs->fields['cache_value'])) $sql .= " CACHE {$cachevalue}"; + // toggle cycle yes/no + if (!is_null($cycledvalue)) $sql .= (!$cycledvalue ? ' NO ' : '') . " CYCLE"; + if ($sql != '') { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER SEQUENCE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" {$sql}"; + return $this->execute($sql); + } + return 0; + } + + /** + * Alter a sequence's owner + * @param $seqrs The sequence RecordSet returned by getSequence() + * @param $name The new owner for the sequence + * @return 0 success + */ + function alterSequenceOwner($seqrs, $owner) { + // If owner has been changed, then do the alteration. We are + // careful to avoid this generally as changing owner is a + // superuser only function. + /* vars are cleaned in _alterSequence */ + if (!empty($owner) && ($seqrs->fields['seqowner'] != $owner)) { + $f_schema = $this->_schema; + $this->fieldClean($f_schema); + $sql = "ALTER TABLE \"{$f_schema}\".\"{$seqrs->fields['seqname']}\" OWNER TO \"{$owner}\""; + return $this->execute($sql); + } + return 0; + } + + // Function functions + + /** + * Returns all details for a particular function + * @param $func The name of the function to retrieve + * @return Function info + */ + function getFunction($function_oid) { + $this->clean($function_oid); + + $sql = " + SELECT + pc.oid AS prooid, proname, pg_catalog.pg_get_userbyid(proowner) AS proowner, + nspname as proschema, lanname as prolanguage, procost, prorows, + pg_catalog.format_type(prorettype, NULL) as proresult, prosrc, + probin, proretset, proisstrict, provolatile, prosecdef, + pg_catalog.oidvectortypes(pc.proargtypes) AS proarguments, + proargnames AS proargnames, + pg_catalog.obj_description(pc.oid, 'pg_proc') AS procomment, + proconfig + FROM + pg_catalog.pg_proc pc, pg_catalog.pg_language pl, + pg_catalog.pg_namespace pn + WHERE + pc.oid = '{$function_oid}'::oid AND pc.prolang = pl.oid + AND pc.pronamespace = pn.oid + "; + + return $this->selectSet($sql); + } + + + // Capabilities + function hasQueryKill() { return false; } + function hasDatabaseCollation() { return false; } + function hasAlterSequenceStart() { return false; } +} + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres84.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres84.php new file mode 100644 index 00000000..bc2b2b34 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres84.php @@ -0,0 +1,231 @@ +<?php + +/** + * PostgreSQL 8.4 support + * + * $Id: Postgres82.php,v 1.10 2007/12/28 16:21:25 ioguix Exp $ + */ + +include_once('./classes/database/Postgres90.php'); + +class Postgres84 extends Postgres90 { + + var $major_version = 8.4; + + // List of all legal privileges that can be applied to different types + // of objects. + var $privlist = array( + 'table' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'view' => array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'REFERENCES', 'TRIGGER', 'ALL PRIVILEGES'), + 'sequence' => array('SELECT', 'UPDATE', 'ALL PRIVILEGES'), + 'database' => array('CREATE', 'TEMPORARY', 'CONNECT', 'ALL PRIVILEGES'), + 'function' => array('EXECUTE', 'ALL PRIVILEGES'), + 'language' => array('USAGE', 'ALL PRIVILEGES'), + 'schema' => array('CREATE', 'USAGE', 'ALL PRIVILEGES'), + 'tablespace' => array('CREATE', 'ALL PRIVILEGES'), + 'column' => array('SELECT', 'INSERT', 'UPDATE', 'REFERENCES','ALL PRIVILEGES') + ); + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres84($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc84.php'); + return $this->help_page; + } + + // Database functions + + /** + * Grabs a list of triggers on a table + * @param $table The name of a table whose triggers to retrieve + * @return A recordset + */ + function getTriggers($table = '') { + $c_schema = $this->_schema; + $this->clean($c_schema); + $this->clean($table); + + $sql = "SELECT + t.tgname, pg_catalog.pg_get_triggerdef(t.oid) AS tgdef, + CASE WHEN t.tgenabled = 'D' THEN FALSE ELSE TRUE END AS tgenabled, p.oid AS prooid, + p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto, + ns.nspname AS pronamespace + FROM pg_catalog.pg_trigger t, pg_catalog.pg_proc p, pg_catalog.pg_namespace ns + WHERE t.tgrelid = (SELECT oid FROM pg_catalog.pg_class WHERE relname='{$table}' + AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')) + AND (NOT tgisconstraint OR NOT EXISTS + (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f')) + AND p.oid=t.tgfoid + AND p.pronamespace = ns.oid"; + + return $this->selectSet($sql); + } + + /** + * Searches all system catalogs to find objects that match a certain name. + * @param $term The search term + * @param $filter The object type to restrict to ('' means no restriction) + * @return A recordset + */ + function findObject($term, $filter) { + global $conf; + + /*about escaping: + * SET standard_conforming_string is not available before 8.2 + * So we must use PostgreSQL specific notation :/ + * E'' notation is not available before 8.1 + * $$ is available since 8.0 + * Nothing specific from 7.4 + **/ + + // Escape search term for ILIKE match + $this->clean($term); + $this->clean($filter); + $term = str_replace('_', '\_', $term); + $term = str_replace('%', '\%', $term); + + // Exclude system relations if necessary + if (!$conf['show_system']) { + // XXX: The mention of information_schema here is in the wrong place, but + // it's the quickest fix to exclude the info schema from 7.4 + $where = " AND pn.nspname NOT LIKE \$_PATERN_\$pg\_%\$_PATERN_\$ AND pn.nspname != 'information_schema'"; + $lan_where = "AND pl.lanispl"; + } + else { + $where = ''; + $lan_where = ''; + } + + // Apply outer filter + $sql = ''; + if ($filter != '') { + $sql = "SELECT * FROM ("; + } + + $term = "\$_PATERN_\$%{$term}%\$_PATERN_\$"; + + $sql .= " + SELECT 'SCHEMA' AS type, oid, NULL AS schemaname, NULL AS relname, nspname AS name + FROM pg_catalog.pg_namespace pn WHERE nspname ILIKE {$term} {$where} + UNION ALL + SELECT CASE WHEN relkind='r' THEN 'TABLE' WHEN relkind='v' THEN 'VIEW' WHEN relkind='S' THEN 'SEQUENCE' END, pc.oid, + pn.nspname, NULL, pc.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn + WHERE pc.relnamespace=pn.oid AND relkind IN ('r', 'v', 'S') AND relname ILIKE {$term} {$where} + UNION ALL + SELECT CASE WHEN pc.relkind='r' THEN 'COLUMNTABLE' ELSE 'COLUMNVIEW' END, NULL, pn.nspname, pc.relname, pa.attname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_attribute pa WHERE pc.relnamespace=pn.oid AND pc.oid=pa.attrelid + AND pa.attname ILIKE {$term} AND pa.attnum > 0 AND NOT pa.attisdropped AND pc.relkind IN ('r', 'v') {$where} + UNION ALL + SELECT 'FUNCTION', pp.oid, pn.nspname, NULL, pp.proname || '(' || pg_catalog.oidvectortypes(pp.proargtypes) || ')' FROM pg_catalog.pg_proc pp, pg_catalog.pg_namespace pn + WHERE pp.pronamespace=pn.oid AND NOT pp.proisagg AND pp.proname ILIKE {$term} {$where} + UNION ALL + SELECT 'INDEX', NULL, pn.nspname, pc.relname, pc2.relname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_index pi, pg_catalog.pg_class pc2 WHERE pc.relnamespace=pn.oid AND pc.oid=pi.indrelid + AND pi.indexrelid=pc2.oid + AND NOT EXISTS ( + SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = 'i' AND c.contype IN ('u', 'p') + ) + AND pc2.relname ILIKE {$term} {$where} + UNION ALL + SELECT 'CONSTRAINTTABLE', NULL, pn.nspname, pc.relname, pc2.conname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_constraint pc2 WHERE pc.relnamespace=pn.oid AND pc.oid=pc2.conrelid AND pc2.conrelid != 0 + AND CASE WHEN pc2.contype IN ('f', 'c') THEN TRUE ELSE NOT EXISTS ( + SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pc2.tableoid AND d.objid = pc2.oid AND d.deptype = 'i' AND c.contype IN ('u', 'p') + ) END + AND pc2.conname ILIKE {$term} {$where} + UNION ALL + SELECT 'CONSTRAINTDOMAIN', pt.oid, pn.nspname, pt.typname, pc.conname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn, + pg_catalog.pg_constraint pc WHERE pt.typnamespace=pn.oid AND pt.oid=pc.contypid AND pc.contypid != 0 + AND pc.conname ILIKE {$term} {$where} + UNION ALL + SELECT 'TRIGGER', NULL, pn.nspname, pc.relname, pt.tgname FROM pg_catalog.pg_class pc, pg_catalog.pg_namespace pn, + pg_catalog.pg_trigger pt WHERE pc.relnamespace=pn.oid AND pc.oid=pt.tgrelid + AND ( NOT pt.tgisconstraint OR NOT EXISTS + (SELECT 1 FROM pg_catalog.pg_depend d JOIN pg_catalog.pg_constraint c + ON (d.refclassid = c.tableoid AND d.refobjid = c.oid) + WHERE d.classid = pt.tableoid AND d.objid = pt.oid AND d.deptype = 'i' AND c.contype = 'f')) + AND pt.tgname ILIKE {$term} {$where} + UNION ALL + SELECT 'RULETABLE', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r + JOIN pg_catalog.pg_class c ON c.oid = r.ev_class + LEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = c.relnamespace + WHERE c.relkind='r' AND r.rulename != '_RETURN' AND r.rulename ILIKE {$term} {$where} + UNION ALL + SELECT 'RULEVIEW', NULL, pn.nspname AS schemaname, c.relname AS tablename, r.rulename FROM pg_catalog.pg_rewrite r + JOIN pg_catalog.pg_class c ON c.oid = r.ev_class + LEFT JOIN pg_catalog.pg_namespace pn ON pn.oid = c.relnamespace + WHERE c.relkind='v' AND r.rulename != '_RETURN' AND r.rulename ILIKE {$term} {$where} + "; + + // Add advanced objects if show_advanced is set + if ($conf['show_advanced']) { + $sql .= " + UNION ALL + SELECT CASE WHEN pt.typtype='d' THEN 'DOMAIN' ELSE 'TYPE' END, pt.oid, pn.nspname, NULL, + pt.typname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn + WHERE pt.typnamespace=pn.oid AND typname ILIKE {$term} + AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) + {$where} + UNION ALL + SELECT 'OPERATOR', po.oid, pn.nspname, NULL, po.oprname FROM pg_catalog.pg_operator po, pg_catalog.pg_namespace pn + WHERE po.oprnamespace=pn.oid AND oprname ILIKE {$term} {$where} + UNION ALL + SELECT 'CONVERSION', pc.oid, pn.nspname, NULL, pc.conname FROM pg_catalog.pg_conversion pc, + pg_catalog.pg_namespace pn WHERE pc.connamespace=pn.oid AND conname ILIKE {$term} {$where} + UNION ALL + SELECT 'LANGUAGE', pl.oid, NULL, NULL, pl.lanname FROM pg_catalog.pg_language pl + WHERE lanname ILIKE {$term} {$lan_where} + UNION ALL + SELECT DISTINCT ON (p.proname) 'AGGREGATE', p.oid, pn.nspname, NULL, p.proname FROM pg_catalog.pg_proc p + LEFT JOIN pg_catalog.pg_namespace pn ON p.pronamespace=pn.oid + WHERE p.proisagg AND p.proname ILIKE {$term} {$where} + UNION ALL + SELECT DISTINCT ON (po.opcname) 'OPCLASS', po.oid, pn.nspname, NULL, po.opcname FROM pg_catalog.pg_opclass po, + pg_catalog.pg_namespace pn WHERE po.opcnamespace=pn.oid + AND po.opcname ILIKE {$term} {$where} + "; + } + // Otherwise just add domains + else { + $sql .= " + UNION ALL + SELECT 'DOMAIN', pt.oid, pn.nspname, NULL, + pt.typname FROM pg_catalog.pg_type pt, pg_catalog.pg_namespace pn + WHERE pt.typnamespace=pn.oid AND pt.typtype='d' AND typname ILIKE {$term} + AND (pt.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = pt.typrelid)) + {$where} + "; + } + + if ($filter != '') { + // We use like to make RULE, CONSTRAINT and COLUMN searches work + $sql .= ") AS sub WHERE type LIKE '{$filter}%' "; + } + + $sql .= "ORDER BY type, schemaname, relname, name"; + + return $this->selectSet($sql); + } + + + // Capabilities + + function hasByteaHexDefault() { return false; } + +} + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres90.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres90.php new file mode 100644 index 00000000..9f7b3a09 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres90.php @@ -0,0 +1,33 @@ +<?php + +/** + * PostgreSQL 9.0 support + * + * $Id: Postgres82.php,v 1.10 2007/12/28 16:21:25 ioguix Exp $ + */ + +include_once('./classes/database/Postgres91.php'); + +class Postgres90 extends Postgres91 { + + var $major_version = 9.0; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres90($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc90.php'); + return $this->help_page; + } + + // Capabilities + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres91.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres91.php new file mode 100644 index 00000000..fb6d952c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres91.php @@ -0,0 +1,98 @@ +<?php + +/** + * PostgreSQL 9.1 support + * + * $Id: Postgres82.php,v 1.10 2007/12/28 16:21:25 ioguix Exp $ + */ + +include_once('./classes/database/Postgres92.php'); + +class Postgres91 extends Postgres92 { + + var $major_version = 9.1; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres91($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc91.php'); + return $this->help_page; + } + + // Administration functions + /** + * Returns all available process information. + * @param $database (optional) Find only connections to specified database + * @return A recordset + */ + function getProcesses($database = null) { + if ($database === null) + $sql = "SELECT datname, usename, procpid AS pid, waiting, current_query AS query, query_start + FROM pg_catalog.pg_stat_activity + ORDER BY datname, usename, procpid"; + else { + $this->clean($database); + $sql = "SELECT datname, usename, procpid AS pid, waiting, current_query AS query, query_start + FROM pg_catalog.pg_stat_activity + WHERE datname='{$database}' + ORDER BY usename, procpid"; + } + + $rc = $this->selectSet($sql); + + return $rc; + } + + // Tablespace functions + + /** + * Retrieves information for all tablespaces + * @param $all Include all tablespaces (necessary when moving objects back to the default space) + * @return A recordset + */ + function getTablespaces($all = false) { + global $conf; + + $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, spclocation, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment + FROM pg_catalog.pg_tablespace"; + + if (!$conf['show_system'] && !$all) { + $sql .= ' WHERE spcname NOT LIKE $$pg\_%$$'; + } + + $sql .= " ORDER BY spcname"; + + return $this->selectSet($sql); + } + + /** + * Retrieves a tablespace's information + * @return A recordset + */ + function getTablespace($spcname) { + $this->clean($spcname); + + $sql = "SELECT spcname, pg_catalog.pg_get_userbyid(spcowner) AS spcowner, spclocation, + (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pg_tablespace.oid=pd.objoid AND pd.classoid='pg_tablespace'::regclass) AS spccomment + FROM pg_catalog.pg_tablespace WHERE spcname='{$spcname}'"; + + return $this->selectSet($sql); + } + + + // Capabilities + function hasUserSignals() { return false; } + + + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres92.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres92.php new file mode 100644 index 00000000..d20b188a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres92.php @@ -0,0 +1,30 @@ +<?php + +/** + * PostgreSQL 9.2 support + * + */ + +include_once('./classes/database/Postgres93.php'); + +class Postgres92 extends Postgres93 { + + var $major_version = 9.2; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres92($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc92.php'); + return $this->help_page; + } + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres93.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres93.php new file mode 100644 index 00000000..24ee22d6 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres93.php @@ -0,0 +1,30 @@ +<?php + +/** + * PostgreSQL 9.3 support + * + */ + +include_once('./classes/database/Postgres94.php'); + +class Postgres93 extends Postgres94 { + + var $major_version = 9.3; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres93($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc93.php'); + return $this->help_page; + } + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres94.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres94.php new file mode 100644 index 00000000..619b238b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres94.php @@ -0,0 +1,30 @@ +<?php + +/** + * PostgreSQL 9.4 support + * + */ + +include_once('./classes/database/Postgres.php'); + +class Postgres94 extends Postgres { + + var $major_version = 9.4; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres94($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc94.php'); + return $this->help_page; + } + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres95.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres95.php new file mode 100644 index 00000000..0120e550 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres95.php @@ -0,0 +1,55 @@ +<?php + +/** + * PostgreSQL 9.5 support + * + */ + +include_once('./classes/database/Postgres96.php'); + +class Postgres95 extends Postgres96 { + + var $major_version = 9.5; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres95($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc95.php'); + return $this->help_page; + } + + + /** + * Returns all available process information. + * @param $database (optional) Find only connections to specified database + * @return A recordset + */ + function getProcesses($database = null) { + if ($database === null) + $sql = "SELECT datname, usename, pid, waiting, state_change as query_start, + case when state='idle in transaction' then '<IDLE> in transaction' when state = 'idle' then '<IDLE>' else query end as query + FROM pg_catalog.pg_stat_activity + ORDER BY datname, usename, pid"; + else { + $this->clean($database); + $sql = "SELECT datname, usename, pid, waiting, state_change as query_start, + case when state='idle in transaction' then '<IDLE> in transaction' when state = 'idle' then '<IDLE>' else query end as query + FROM pg_catalog.pg_stat_activity + WHERE datname='{$database}' + ORDER BY usename, pid"; + } + + return $this->selectSet($sql); + } + + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres96.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres96.php new file mode 100644 index 00000000..19397e15 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/classes/database/Postgres96.php @@ -0,0 +1,57 @@ +<?php + +/** + * PostgreSQL 9.6 support + * + */ + +include_once('./classes/database/Postgres10.php'); + +class Postgres96 extends Postgres10 { + + var $major_version = 9.6; + + /** + * Constructor + * @param $conn The database connection + */ + function Postgres96($conn) { + $this->Postgres($conn); + } + + // Help functions + + function getHelpPages() { + include_once('./help/PostgresDoc96.php'); + return $this->help_page; + } + + // Sequence functions + + /** + * Returns properties of a single sequence + * @param $sequence Sequence name + * @return A recordset + */ + function getSequence($sequence) { + $c_schema = $this->_schema; + $this->clean($c_schema); + $c_sequence = $sequence; + $this->fieldClean($sequence); + $this->clean($c_sequence); + + $sql = " + SELECT c.relname AS seqname, s.*, + pg_catalog.obj_description(s.tableoid, 'pg_class') AS seqcomment, + u.usename AS seqowner, n.nspname + FROM \"{$sequence}\" AS s, pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n + WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid + AND c.relname = '{$c_sequence}' AND c.relkind = 'S' AND n.nspname='{$c_schema}' + AND n.oid = c.relnamespace"; + + return $this->selectSet( $sql ); + } + + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/colproperties.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/colproperties.php new file mode 100644 index 00000000..2bf137b8 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/colproperties.php @@ -0,0 +1,346 @@ +<?php + + /** + * List Columns properties in tables + * + * $Id: colproperties.php + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (isset($_REQUEST['table'])) + $tableName =& $_REQUEST['table']; + elseif (isset($_REQUEST['view'])) + $tableName =& $_REQUEST['view']; + else + die($lang['strnotableprovided']); + + /** + * Displays a screen where they can alter a column + */ + function doAlter($msg = '') { + global $data, $misc, $_reload_browser; + global $lang; + + if (!isset($_REQUEST['stage'])) $_REQUEST['stage'] = 1; + + switch ($_REQUEST['stage']) { + case 1: + $misc->printTrail('column'); + $misc->printTitle($lang['stralter'], 'pg.column.alter'); + $misc->printMsg($msg); + + echo "<script src=\"tables.js\" type=\"text/javascript\"></script>"; + echo "<form action=\"colproperties.php\" method=\"post\">\n"; + + // Output table header + echo "<table>\n"; + echo "<tr><th class=\"data required\">{$lang['strname']}</th>\n"; + if ($data->hasAlterColumnType()) { + echo "<th class=\"data required\" colspan=\"2\">{$lang['strtype']}</th>\n"; + echo "<th class=\"data\">{$lang['strlength']}</th>\n"; + } + else { + echo "<th class=\"data required\">{$lang['strtype']}</th>\n"; + } + echo "<th class=\"data\">{$lang['strnotnull']}</th>\n<th class=\"data\">{$lang['strdefault']}</th>\n<th class=\"data\">{$lang['strcomment']}</th></tr>\n"; + + $column = $data->getTableAttributes($_REQUEST['table'], $_REQUEST['column']); + $column->fields['attnotnull'] = $data->phpBool($column->fields['attnotnull']); + + // Upon first drawing the screen, load the existing column information + // from the database. + if (!isset($_REQUEST['default'])) { + $_REQUEST['field'] = $column->fields['attname']; + $_REQUEST['type'] = $column->fields['base_type']; + // Check to see if its' an array type... + // XXX: HACKY + if (substr($column->fields['base_type'], strlen($column->fields['base_type']) - 2) == '[]') { + $_REQUEST['type'] = substr($column->fields['base_type'], 0, strlen($column->fields['base_type']) - 2); + $_REQUEST['array'] = '[]'; + } + else { + $_REQUEST['type'] = $column->fields['base_type']; + $_REQUEST['array'] = ''; + } + // To figure out the length, look in the brackets :( + // XXX: HACKY + if ($column->fields['type'] != $column->fields['base_type'] && preg_match('/\\(([0-9, ]*)\\)/', $column->fields['type'], $bits)) { + $_REQUEST['length'] = $bits[1]; + } + else + $_REQUEST['length'] = ''; + $_REQUEST['default'] = $_REQUEST['olddefault'] = $column->fields['adsrc']; + if ($column->fields['attnotnull']) $_REQUEST['notnull'] = 'YES'; + $_REQUEST['comment'] = $column->fields['comment']; + } + + // Column name + echo "<tr><td><input name=\"field\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['field']), "\" /></td>\n"; + + // Column type + $escaped_predef_types = array(); // the JS escaped array elements + if ($data->hasAlterColumnType()) { + // Fetch all available types + $types = $data->getTypes(true, false, true); + $types_for_js = array(); + + echo "<td><select name=\"type\" id=\"type\" onchange=\"checkLengths(document.getElementById('type').value,'');\">\n"; + while (!$types->EOF) { + $typname = $types->fields['typname']; + $types_for_js[] = $typname; + echo "\t<option value=\"", htmlspecialchars($typname), "\"", ($typname == $_REQUEST['type']) ? ' selected="selected"' : '', ">", + $misc->printVal($typname), "</option>\n"; + $types->moveNext(); + } + echo "</select></td>\n"; + + // Output array type selector + echo "<td><select name=\"array\">\n"; + echo "\t<option value=\"\"", ($_REQUEST['array'] == '') ? ' selected="selected"' : '', "></option>\n"; + echo "\t<option value=\"[]\"", ($_REQUEST['array'] == '[]') ? ' selected="selected"' : '', ">[ ]</option>\n"; + echo "</select></td>\n"; + $predefined_size_types = array_intersect($data->predefined_size_types, $types_for_js); + foreach($predefined_size_types as $value) { + $escaped_predef_types[] = "'{$value}'"; + } + + echo "<td><input name=\"length\" id=\"lengths\" size=\"8\" value=\"", + htmlspecialchars($_REQUEST['length']), "\" /></td>\n"; + } else { + // Otherwise draw the read-only type name + echo "<td>", $misc->printVal($data->formatType($column->fields['type'], $column->fields['atttypmod'])), "</td>\n"; + } + + echo "<td><input type=\"checkbox\" name=\"notnull\"", (isset($_REQUEST['notnull'])) ? ' checked="checked"' : '', " /></td>\n"; + echo "<td><input name=\"default\" size=\"20\" value=\"", + htmlspecialchars($_REQUEST['default']), "\" /></td>\n"; + echo "<td><input name=\"comment\" size=\"40\" value=\"", + htmlspecialchars($_REQUEST['comment']), "\" /></td></tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"properties\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"column\" value=\"", htmlspecialchars($_REQUEST['column']), "\" />\n"; + echo "<input type=\"hidden\" name=\"olddefault\" value=\"", htmlspecialchars($_REQUEST['olddefault']), "\" />\n"; + if ($column->fields['attnotnull']) echo "<input type=\"hidden\" name=\"oldnotnull\" value=\"on\" />\n"; + echo "<input type=\"hidden\" name=\"oldtype\" value=\"", htmlspecialchars($data->formatType($column->fields['type'], $column->fields['atttypmod'])), "\" />\n"; + // Add hidden variables to suppress error notices if we don't support altering column type + if (!$data->hasAlterColumnType()) { + echo "<input type=\"hidden\" name=\"type\" value=\"", htmlspecialchars($_REQUEST['type']), "\" />\n"; + echo "<input type=\"hidden\" name=\"length\" value=\"", htmlspecialchars($_REQUEST['length']), "\" />\n"; + echo "<input type=\"hidden\" name=\"array\" value=\"", htmlspecialchars($_REQUEST['array']), "\" />\n"; + } + echo "<input type=\"submit\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + echo "<script type=\"text/javascript\">predefined_lengths = new Array(". implode(",",$escaped_predef_types) .");checkLengths(document.getElementById('type').value,'');</script>\n"; + break; + case 2: + // Check inputs + if (trim($_REQUEST['field']) == '') { + $_REQUEST['stage'] = 1; + doAlter($lang['strcolneedsname']); + return; + } + if (!isset($_REQUEST['length'])) $_REQUEST['length'] = ''; + $status = $data->alterColumn($_REQUEST['table'], $_REQUEST['column'], $_REQUEST['field'], + isset($_REQUEST['notnull']), isset($_REQUEST['oldnotnull']), + $_REQUEST['default'], $_REQUEST['olddefault'], + $_REQUEST['type'], $_REQUEST['length'], $_REQUEST['array'], $_REQUEST['oldtype'], + $_REQUEST['comment']); + if ($status == 0) { + if ($_REQUEST['column'] != $_REQUEST['field']) { + $_REQUEST['column'] = $_REQUEST['field']; + $_reload_browser = true; + } + doDefault($lang['strcolumnaltered']); + } + else { + $_REQUEST['stage'] = 1; + doAlter($lang['strcolumnalteredbad']); + return; + } + break; + default: + echo "<p>{$lang['strinvalidparam']}</p>\n"; + } + } + + /** + * Show default list of columns in the table + */ + function doDefault($msg = '', $isTable = true) { + global $data, $conf, $misc, $tableName; + global $lang; + + function attPre(&$rowdata) { + global $data; + $rowdata->fields['+type'] = $data->formatType($rowdata->fields['type'], $rowdata->fields['atttypmod']); + } + + if (empty($_REQUEST['column'])) + $msg.= "<br/>{$lang['strnoobjects']}"; + + $misc->printTrail('column'); + //$misc->printTitle($lang['strcolprop']); + $misc->printTabs('column','properties'); + $misc->printMsg($msg); + + if (! empty($_REQUEST['column'])) { + // Get table + $tdata = $data->getTable($tableName); + // Get columns + $attrs = $data->getTableAttributes($tableName, $_REQUEST['column']); + + // Show comment if any + if ($attrs->fields['comment'] !== null) + echo "<p class=\"comment\">", $misc->printVal($attrs->fields['comment']), "</p>\n"; + + $column = array( + 'column' => array( + 'title' => $lang['strcolumn'], + 'field' => field('attname'), + ), + 'type' => array( + 'title' => $lang['strtype'], + 'field' => field('+type'), + ) + ); + + if ($isTable) { + $column['notnull'] = array( + 'title' => $lang['strnotnull'], + 'field' => field('attnotnull'), + 'type' => 'bool', + 'params'=> array('true' => 'NOT NULL', 'false' => '') + ); + $column['default'] = array( + 'title' => $lang['strdefault'], + 'field' => field('adsrc'), + ); + } + + $actions=array(); + $misc->printTable($attrs, $column, $actions, 'colproperties-colproperties', null, 'attPre'); + + echo "<br />\n"; + + $f_attname = $_REQUEST['column']; + $f_table = $tableName; + $f_schema = $data->_schema; + $data->fieldClean($f_attname); + $data->fieldClean($f_table); + $data->fieldClean($f_schema); + $query = "SELECT \"{$f_attname}\", count(*) AS \"count\" FROM \"{$f_schema}\".\"{$f_table}\" GROUP BY \"{$f_attname}\" ORDER BY \"{$f_attname}\""; + + if ($isTable) { + + /* Browse link */ + /* FIXME browsing a col should somehow be a action so we don't + * send an ugly SQL in the URL */ + + $navlinks = array ( + 'browse' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array ( + 'subject' => 'column', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $tableName, + 'column' => $_REQUEST['column'], + 'return' => 'column', + 'query' => $query + ) + ) + ), + 'content' => $lang['strbrowse'], + ), + 'alter' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'colproperties.php', + 'urlvars' => array ( + 'action' => 'properties', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $tableName, + 'column' => $_REQUEST['column'], + ) + ) + ), + 'content' => $lang['stralter'], + ), + 'drop' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tblproperties.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $tableName, + 'column' => $_REQUEST['column'], + ) + ) + ), + 'content' => $lang['strdrop'], + ) + ); + } + else { + /* Browse link */ + $navlinks = array ( + 'browse' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array ( + 'subject' => 'column', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'view' => $tableName, + 'column' => $_REQUEST['column'], + 'return' => 'column', + 'query' => $query + ) + ) + ), + 'content' => $lang['strbrowse'] + ) + ); + } + + $misc->printNavLinks($navlinks, 'colproperties-colproperties', get_defined_vars()); + } + } + + $misc->printHeader($lang['strtables'] . ' - ' . $tableName); + $misc->printBody(); + + if (isset($_REQUEST['view'])) + doDefault(null, false); + else + switch ($action) { + case 'properties': + if (isset($_POST['cancel'])) doDefault(); + else doAlter(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/composer.json b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/composer.json new file mode 100644 index 00000000..d25bfc18 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/composer.json @@ -0,0 +1,13 @@ +{ + "name": "phppgadmin/phppgadmin", + "description": "phpPgAdmin is a web-based administration tool for PostgreSQL. It is perfect for PostgreSQL DBAs, newbies, and hosting services.", + "type": "Application", + "license": "GPL-2.0+", + "require": { + "php": ">=5.0" + }, + "minimum-stability": "stable", + "autoload": { + } +} + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/conf/config.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/conf/config.inc.php new file mode 100644 index 00000000..e718751f --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/conf/config.inc.php @@ -0,0 +1,172 @@ +<?php + + /** + * Central phpPgAdmin configuration. As a user you may modify the + * settings here for your particular configuration. + * + * $Id: config.inc.php-dist,v 1.55 2008/02/18 21:10:31 xzilla Exp $ + */ + + // An example server. Create as many of these as you wish, + // indexed from zero upwards. + + // Display name for the server on the login screen + $conf['servers'][0]['desc'] = 'PostgreSQL'; + + // Hostname or IP address for server. Use '' for UNIX domain socket. + // use 'localhost' for TCP/IP connection on this computer + $conf['servers'][0]['host'] = 'pgsql'; + + // Database port on server (5432 is the PostgreSQL default) + $conf['servers'][0]['port'] = 5432; + + // Database SSL mode + // Possible options: disable, allow, prefer, require + // To require SSL on older servers use option: legacy + // To ignore the SSL mode, use option: unspecified + $conf['servers'][0]['sslmode'] = 'allow'; + + // Change the default database only if you cannot connect to template1. + // For a PostgreSQL 8.1+ server, you can set this to 'postgres'. + $conf['servers'][0]['defaultdb'] = 'template1'; + + // Specify the path to the database dump utilities for this server. + // You can set these to '' if no dumper is available. + $conf['servers'][0]['pg_dump_path'] = '/usr/bin/pg_dump'; + $conf['servers'][0]['pg_dumpall_path'] = '/usr/bin/pg_dumpall'; + + // Example for a second server (PostgreSQL for Windows) + //$conf['servers'][1]['desc'] = 'Test Server'; + //$conf['servers'][1]['host'] = '127.0.0.1'; + //$conf['servers'][1]['port'] = 5432; + //$conf['servers'][1]['sslmode'] = 'allow'; + //$conf['servers'][1]['defaultdb'] = 'template1'; + //$conf['servers'][1]['pg_dump_path'] = 'C:\\Program Files\\PostgreSQL\\8.0\\bin\\pg_dump.exe'; + //$conf['servers'][1]['pg_dumpall_path'] = 'C:\\Program Files\\PostgreSQL\\8.0\\bin\\pg_dumpall.exe'; + + + /* Groups definition */ + /* Groups allow administrators to logicaly group servers together under + * group nodes in the left browser tree + * + * The group '0' description + */ + //$conf['srv_groups'][0]['desc'] = 'group one'; + + /* Add here servers indexes belonging to the group '0' seperated by comma */ + //$conf['srv_groups'][0]['servers'] = '0,1,2'; + + /* A server can belong to multi groups. Here server 1 is referenced in both + * 'group one' and 'group two'*/ + //$conf['srv_groups'][1]['desc'] = 'group two'; + //$conf['srv_groups'][1]['servers'] = '3,1'; + + /* A group can be nested in one or more existing groups using the 'parents' + * parameter. Here the group 'group three' contains only one server and will + * appear as a subgroup in both 'group one' and 'group two': + */ + //$conf['srv_groups'][2]['desc'] = 'group three'; + //$conf['srv_groups'][2]['servers'] = '4'; + //$conf['srv_groups'][2]['parents'] = '0,1'; + + /* Warning: Only groups with no parents appears at the root of the tree. */ + + /* You can apply specific theme depending on servers, users and databases + * The priority order is : + * * the theme defined for a server + * * the theme defined for a database apply over the server one + * * the theme defined for a user apply over the database one + */ + /* Example for servers */ + //$conf['servers'][0]['theme']['default'] = 'default'; + /* Example for users */ + //$conf['servers'][0]['theme']['user']['specific_user'] = 'default'; + /* Example for databases */ + //$conf['servers'][0]['theme']['db']['specific_db'] = 'default'; + + // Default language. E.g.: 'english', 'polish', etc. See lang/ directory + // for all possibilities. If you specify 'auto' (the default) it will use + // your browser preference. + $conf['default_lang'] = 'auto'; + + // AutoComplete uses AJAX interaction to list foreign key values + // on insert fields. It currently only works on single column + // foreign keys. You can choose one of the following values: + // 'default on' enables AutoComplete and turns it on by default. + // 'default off' enables AutoComplete but turns it off by default. + // 'disable' disables AutoComplete. + $conf['autocomplete'] = 'default on'; + + // If extra login security is true, then logins via phpPgAdmin with no + // password or certain usernames (pgsql, postgres, root, administrator) + // will be denied. Only set this false once you have read the FAQ and + // understand how to change PostgreSQL's pg_hba.conf to enable + // passworded local connections. + $conf['extra_login_security'] = false; + + // Only show owned databases? + // Note: This will simply hide other databases in the list - this does + // not in any way prevent your users from seeing other database by + // other means. (e.g. Run 'SELECT * FROM pg_database' in the SQL area.) + $conf['owned_only'] = false; + + // Display comments on objects? Comments are a good way of documenting + // a database, but they do take up space in the interface. + $conf['show_comments'] = true; + + // Display "advanced" objects? Setting this to true will show + // aggregates, types, operators, operator classes, conversions, + // languages and casts in phpPgAdmin. These objects are rarely + // administered and can clutter the interface. + $conf['show_advanced'] = false; + + // Display "system" objects? + $conf['show_system'] = false; + + // Minimum length users can set their password to. + $conf['min_password_length'] = 1; + + // Width of the left frame in pixels (object browser) + $conf['left_width'] = 200; + + // Which look & feel theme to use + $conf['theme'] = 'default'; + + // Show OIDs when browsing tables? + $conf['show_oids'] = false; + + // Max rows to show on a page when browsing record sets + $conf['max_rows'] = 30; + + // Max chars of each field to display by default in browse mode + $conf['max_chars'] = 50; + + // Send XHTML strict headers? + $conf['use_xhtml_strict'] = false; + + // Base URL for PostgreSQL documentation. + // '%s', if present, will be replaced with the PostgreSQL version + // (e.g. 8.4 ) + $conf['help_base'] = 'http://www.postgresql.org/docs/%s/interactive/'; + + // Configuration for ajax scripts + // Time in seconds. If set to 0, refreshing data using ajax will be disabled (locks and activity pages) + $conf['ajax_refresh'] = 3; + + /** Plugins management + * Add plugin names to the following array to activate them + * Example: + * $conf['plugins'] = array( + * 'Example', + * 'Slony' + * ); + */ + $conf['plugins'] = array(); + + /***************************************** + * Don't modify anything below this line * + *****************************************/ + + $conf['version'] = 19; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/constraints.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/constraints.php new file mode 100644 index 00000000..cc1591c9 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/constraints.php @@ -0,0 +1,640 @@ +<?php + + /** + * List constraints on a table + * + * $Id: constraints.php,v 1.56 2007/12/31 16:46:07 xzilla Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + include_once('./classes/class.select.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * Confirm and then actually add a FOREIGN KEY constraint + */ + function addForeignKey($stage, $msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['name'])) $_POST['name'] = ''; + if (!isset($_POST['target'])) $_POST['target'] = ''; + + switch ($stage) { + case 2: + // Check that they've given at least one source column + if (!isset($_REQUEST['SourceColumnList']) && (!isset($_POST['IndexColumnList']) || !is_array($_POST['IndexColumnList']) || sizeof($_POST['IndexColumnList']) == 0)) + addForeignKey(1, $lang['strfkneedscols']); + else { + // Copy the IndexColumnList variable from stage 1 + if (isset($_REQUEST['IndexColumnList']) && !isset($_REQUEST['SourceColumnList'])) + $_REQUEST['SourceColumnList'] = serialize($_REQUEST['IndexColumnList']); + + // Initialise variables + if (!isset($_POST['upd_action'])) $_POST['upd_action'] = null; + if (!isset($_POST['del_action'])) $_POST['del_action'] = null; + if (!isset($_POST['match'])) $_POST['match'] = null; + if (!isset($_POST['deferrable'])) $_POST['deferrable'] = null; + if (!isset($_POST['initially'])) $_POST['initially'] = null; + $_REQUEST['target'] = unserialize($_REQUEST['target']); + + $misc->printTrail('table'); + $misc->printTitle($lang['straddfk'],'pg.constraint.foreign_key'); + $misc->printMsg($msg); + + // Unserialize target and fetch appropriate table. This is a bit messy + // because the table could be in another schema. + $data->setSchema($_REQUEST['target']['schemaname']); + $attrs = $data->getTableAttributes($_REQUEST['target']['tablename']); + $data->setSchema($_REQUEST['schema']); + + $selColumns = new XHTML_select('TableColumnList', true, 10); + $selColumns->set_style('width: 15em;'); + + if ($attrs->recordCount() > 0) { + while (!$attrs->EOF) { + $selColumns->add(new XHTML_Option($attrs->fields['attname'])); + $attrs->moveNext(); + } + } + + $selIndex = new XHTML_select('IndexColumnList[]', true, 10); + $selIndex->set_style('width: 15em;'); + $selIndex->set_attribute('id', 'IndexColumnList'); + $buttonAdd = new XHTML_Button('add', '>>'); + $buttonAdd->set_attribute('onclick', 'buttonPressed(this);'); + $buttonAdd->set_attribute('type', 'button'); + + $buttonRemove = new XHTML_Button('remove', '<<'); + $buttonRemove->set_attribute('onclick', 'buttonPressed(this);'); + $buttonRemove->set_attribute('type', 'button'); + + echo "<form onsubmit=\"doSelectAll();\" name=\"formIndex\" action=\"constraints.php\" method=\"post\">\n"; + + echo "<table>\n"; + echo "<tr><th class=\"data\" colspan=\"3\">{$lang['strfktarget']}</th></tr>"; + echo "<tr><th class=\"data\">{$lang['strtablecolumnlist']}</th><th class=\"data\"> </th><th class=data>{$lang['strfkcolumnlist']}</th></tr>\n"; + echo "<tr><td class=\"data1\">" . $selColumns->fetch() . "</td>\n"; + echo "<td class=\"data1\" style=\"text-align: center\">" . $buttonRemove->fetch() . $buttonAdd->fetch() . "</td>"; + echo "<td class=\"data1\">" . $selIndex->fetch() . "</td></tr>\n"; + echo "<tr><th class=\"data\" colspan=\"3\">{$lang['stractions']}</th></tr>"; + echo "<tr>"; + echo "<td class=\"data1\" colspan=\"3\">\n"; + // ON SELECT actions + echo "{$lang['stronupdate']} <select name=\"upd_action\">"; + foreach ($data->fkactions as $v) + echo "<option value=\"{$v}\"", ($_POST['upd_action'] == $v) ? ' selected="selected"' : '', ">{$v}</option>\n"; + echo "</select><br />\n"; + + // ON DELETE actions + echo "{$lang['strondelete']} <select name=\"del_action\">"; + foreach ($data->fkactions as $v) + echo "<option value=\"{$v}\"", ($_POST['del_action'] == $v) ? ' selected="selected"' : '', ">{$v}</option>\n"; + echo "</select><br />\n"; + + // MATCH options + echo "<select name=\"match\">"; + foreach ($data->fkmatches as $v) + echo "<option value=\"{$v}\"", ($_POST['match'] == $v) ? ' selected="selected"' : '', ">{$v}</option>\n"; + echo "</select><br />\n"; + + // DEFERRABLE options + echo "<select name=\"deferrable\">"; + foreach ($data->fkdeferrable as $v) + echo "<option value=\"{$v}\"", ($_POST['deferrable'] == $v) ? ' selected="selected"' : '', ">{$v}</option>\n"; + echo "</select><br />\n"; + + // INITIALLY options + echo "<select name=\"initially\">"; + foreach ($data->fkinitial as $v) + echo "<option value=\"{$v}\"", ($_POST['initially'] == $v) ? ' selected="selected"' : '', ">{$v}</option>\n"; + echo "</select>\n"; + echo "</td></tr>\n"; + echo "</table>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_add_foreign_key\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"name\" value=\"", htmlspecialchars($_REQUEST['name']), "\" />\n"; + echo "<input type=\"hidden\" name=\"target\" value=\"", htmlspecialchars(serialize($_REQUEST['target'])), "\" />\n"; + echo "<input type=\"hidden\" name=\"SourceColumnList\" value=\"", htmlspecialchars($_REQUEST['SourceColumnList']), "\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"3\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['stradd']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + break; + case 3: + // Unserialize target + $_POST['target'] = unserialize($_POST['target']); + + // Check that they've given at least one column + if (isset($_POST['SourceColumnList'])) $temp = unserialize($_POST['SourceColumnList']); + if (!isset($_POST['IndexColumnList']) || !is_array($_POST['IndexColumnList']) + || sizeof($_POST['IndexColumnList']) == 0 || !isset($temp) + || !is_array($temp) || sizeof($temp) == 0) addForeignKey(2, $lang['strfkneedscols']); + else { + $status = $data->addForeignKey($_POST['table'], $_POST['target']['schemaname'], $_POST['target']['tablename'], + unserialize($_POST['SourceColumnList']), $_POST['IndexColumnList'], $_POST['upd_action'], $_POST['del_action'], + $_POST['match'], $_POST['deferrable'], $_POST['initially'], $_POST['name']); + if ($status == 0) + doDefault($lang['strfkadded']); + else + addForeignKey(2, $lang['strfkaddedbad']); + } + break; + default: + $misc->printTrail('table'); + $misc->printTitle($lang['straddfk'],'pg.constraint.foreign_key'); + $misc->printMsg($msg); + + $attrs = $data->getTableAttributes($_REQUEST['table']); + $tables = $data->getTables(true); + + $selColumns = new XHTML_select('TableColumnList', true, 10); + $selColumns->set_style('width: 15em;'); + + if ($attrs->recordCount() > 0) { + while (!$attrs->EOF) { + $selColumns->add(new XHTML_Option($attrs->fields['attname'])); + $attrs->moveNext(); + } + } + + $selIndex = new XHTML_select('IndexColumnList[]', true, 10); + $selIndex->set_style('width: 15em;'); + $selIndex->set_attribute('id', 'IndexColumnList'); + $buttonAdd = new XHTML_Button('add', '>>'); + $buttonAdd->set_attribute('onclick', 'buttonPressed(this);'); + $buttonAdd->set_attribute('type', 'button'); + + $buttonRemove = new XHTML_Button('remove', '<<'); + $buttonRemove->set_attribute('onclick', 'buttonPressed(this);'); + $buttonRemove->set_attribute('type', 'button'); + + echo "<form onsubmit=\"doSelectAll();\" name=\"formIndex\" action=\"constraints.php\" method=\"post\">\n"; + + echo "<table>\n"; + echo "<tr><th class=\"data\" colspan=\"3\">{$lang['strname']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"3\"><input type=\"text\" name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" /></td></tr>\n"; + echo "<tr><th class=\"data\">{$lang['strtablecolumnlist']}</th><th class=\"data\"> </th><th class=\"data required\">{$lang['strfkcolumnlist']}</th></tr>\n"; + echo "<tr><td class=\"data1\">" . $selColumns->fetch() . "</td>\n"; + echo "<td class=\"data1\" style=\"text-align: center\">" . $buttonRemove->fetch() . $buttonAdd->fetch() . "</td>\n"; + echo "<td class=data1>" . $selIndex->fetch() . "</td></tr>\n"; + echo "<tr><th class=\"data\" colspan=\"3\">{$lang['strfktarget']}</th></tr>"; + echo "<tr>"; + echo "<td class=\"data1\" colspan=\"3\"><select name=\"target\">"; + while (!$tables->EOF) { + $key = array('schemaname' => $tables->fields['nspname'], 'tablename' => $tables->fields['relname']); + $key = serialize($key); + echo "<option value=\"", htmlspecialchars($key), "\">"; + if ($tables->fields['nspname'] != $_REQUEST['schema']) { + echo htmlspecialchars($tables->fields['nspname']), '.'; + } + echo htmlspecialchars($tables->fields['relname']), "</option>\n"; + $tables->moveNext(); + } + echo "</select>\n"; + echo "</td></tr>"; + echo "</table>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_add_foreign_key\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['stradd']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + break; + } + + } + + /** + * Confirm and then actually add a PRIMARY KEY or UNIQUE constraint + */ + function addPrimaryOrUniqueKey($type, $confirm, $msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['name'])) $_POST['name'] = ''; + + if ($confirm) { + if (!isset($_POST['name'])) $_POST['name'] = ''; + if (!isset($_POST['tablespace'])) $_POST['tablespace'] = ''; + + $misc->printTrail('table'); + + switch ($type) { + case 'primary': + $misc->printTitle($lang['straddpk'],'pg.constraint.primary_key'); + break; + case 'unique': + $misc->printTitle($lang['stradduniq'],'pg.constraint.unique_key'); + break; + default: + doDefault($lang['strinvalidparam']); + return; + } + + $misc->printMsg($msg); + + $attrs = $data->getTableAttributes($_REQUEST['table']); + // Fetch all tablespaces from the database + if ($data->hasTablespaces()) $tablespaces = $data->getTablespaces(); + + + $selColumns = new XHTML_select('TableColumnList', true, 10); + $selColumns->set_style('width: 15em;'); + + if ($attrs->recordCount() > 0) { + while (!$attrs->EOF) { + $selColumns->add(new XHTML_Option($attrs->fields['attname'])); + $attrs->moveNext(); + } + } + + $selIndex = new XHTML_select('IndexColumnList[]', true, 10); + $selIndex->set_style('width: 15em;'); + $selIndex->set_attribute('id', 'IndexColumnList'); + $buttonAdd = new XHTML_Button('add', '>>'); + $buttonAdd->set_attribute('onclick', 'buttonPressed(this);'); + $buttonAdd->set_attribute('type', 'button'); + + $buttonRemove = new XHTML_Button('remove', '<<'); + $buttonRemove->set_attribute('onclick', 'buttonPressed(this);'); + $buttonRemove->set_attribute('type', 'button'); + + echo "<form onsubmit=\"doSelectAll();\" name=\"formIndex\" action=\"constraints.php\" method=\"post\">\n"; + + echo "<table>\n"; + echo "<tr><th class=\"data\" colspan=\"3\">{$lang['strname']}</th></tr>"; + echo "<tr>"; + echo "<td class=\"data1\" colspan=\"3\"><input type=\"text\" name=\"name\" value=\"", htmlspecialchars($_POST['name']), + "\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" /></td></tr>"; + echo "<tr><th class=\"data\">{$lang['strtablecolumnlist']}</th><th class=\"data\"> </th><th class=\"data required\">{$lang['strindexcolumnlist']}</th></tr>\n"; + echo "<tr><td class=\"data1\">" . $selColumns->fetch() . "</td>\n"; + echo "<td class=\"data1\" style=\"text-align: center\">" . $buttonRemove->fetch() . $buttonAdd->fetch() . "</td>"; + echo "<td class=data1>" . $selIndex->fetch() . "</td></tr>\n"; + + // Tablespace (if there are any) + if ($data->hasTablespaces() && $tablespaces->recordCount() > 0) { + echo "<tr><th class=\"data\" colspan=\"3\">{$lang['strtablespace']}</th></tr>"; + echo "<tr><td class=\"data1\" colspan=\"3\"><select name=\"tablespace\">\n"; + // Always offer the default (empty) option + echo "\t\t\t\t<option value=\"\"", + ($_POST['tablespace'] == '') ? ' selected="selected"' : '', "></option>\n"; + // Display all other tablespaces + while (!$tablespaces->EOF) { + $spcname = htmlspecialchars($tablespaces->fields['spcname']); + echo "\t\t\t\t<option value=\"{$spcname}\"", + ($spcname == $_POST['tablespace']) ? ' selected="selected"' : '', ">{$spcname}</option>\n"; + $tablespaces->moveNext(); + } + echo "</select></td></tr>\n"; + } + + echo "</table>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_add_primary_key\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"type\" value=\"", htmlspecialchars($type), "\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['stradd']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + // Default tablespace to empty if it isn't set + if (!isset($_POST['tablespace'])) $_POST['tablespace'] = ''; + + if ($_POST['type'] == 'primary') { + // Check that they've given at least one column + if (!isset($_POST['IndexColumnList']) || !is_array($_POST['IndexColumnList']) + || sizeof($_POST['IndexColumnList']) == 0) addPrimaryOrUniqueKey($_POST['type'], true, $lang['strpkneedscols']); + else { + $status = $data->addPrimaryKey($_POST['table'], $_POST['IndexColumnList'], $_POST['name'], $_POST['tablespace']); + if ($status == 0) + doDefault($lang['strpkadded']); + else + addPrimaryOrUniqueKey($_POST['type'], true, $lang['strpkaddedbad']); + } + } + elseif ($_POST['type'] == 'unique') { + // Check that they've given at least one column + if (!isset($_POST['IndexColumnList']) || !is_array($_POST['IndexColumnList']) + || sizeof($_POST['IndexColumnList']) == 0) addPrimaryOrUniqueKey($_POST['type'], true, $lang['struniqneedscols']); + else { + $status = $data->addUniqueKey($_POST['table'], $_POST['IndexColumnList'], $_POST['name'], $_POST['tablespace']); + if ($status == 0) + doDefault($lang['struniqadded']); + else + addPrimaryOrUniqueKey($_POST['type'], true, $lang['struniqaddedbad']); + } + } + else doDefault($lang['strinvalidparam']); + } + } + + /** + * Confirm and then actually add a CHECK constraint + */ + function addCheck($confirm, $msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['name'])) $_POST['name'] = ''; + if (!isset($_POST['definition'])) $_POST['definition'] = ''; + + if ($confirm) { + $misc->printTrail('table'); + $misc->printTitle($lang['straddcheck'],'pg.constraint.check'); + $misc->printMsg($msg); + + echo "<form action=\"constraints.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strname']}</th>\n"; + echo "<th class=\"data required\">{$lang['strdefinition']}</th></tr>\n"; + + echo "<tr><td class=\"data1\"><input name=\"name\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" /></td>\n"; + + echo "<td class=\"data1\">(<input name=\"definition\" size=\"32\" value=\"", + htmlspecialchars($_POST['definition']), "\" />)</td></tr>\n"; + echo "</table>\n"; + + echo "<input type=\"hidden\" name=\"action\" value=\"save_add_check\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"submit\" name=\"ok\" value=\"{$lang['stradd']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + + } + else { + if (trim($_POST['definition']) == '') + addCheck(true, $lang['strcheckneedsdefinition']); + else { + $status = $data->addCheckConstraint($_POST['table'], + $_POST['definition'], $_POST['name']); + if ($status == 0) + doDefault($lang['strcheckadded']); + else + addCheck(true, $lang['strcheckaddedbad']); + } + } + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('constraint'); + $misc->printTitle($lang['strdrop'],'pg.constraint.drop'); + + echo "<p>", sprintf($lang['strconfdropconstraint'], $misc->printVal($_REQUEST['constraint']), + $misc->printVal($_REQUEST['table'])), "</p>\n"; + + echo "<form action=\"constraints.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"constraint\" value=\"", htmlspecialchars($_REQUEST['constraint']), "\" />\n"; + echo "<input type=\"hidden\" name=\"type\" value=\"", htmlspecialchars($_REQUEST['type']), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->dropConstraint($_POST['constraint'], $_POST['table'], $_POST['type'], isset($_POST['cascade'])); + if ($status == 0) + doDefault($lang['strconstraintdropped']); + else + doDefault($lang['strconstraintdroppedbad']); + } + } + + /** + * List all the constraints on the table + */ + function doDefault($msg = '') { + global $data, $misc, $lang; + + function cnPre(&$rowdata) { + global $data; + if (is_null($rowdata->fields['consrc'])) { + $atts = $data->getAttributeNames($_REQUEST['table'], explode(' ', $rowdata->fields['indkey'])); + $rowdata->fields['+definition'] = ($rowdata->fields['contype'] == 'u' ? "UNIQUE (" : "PRIMARY KEY (") . join(',', $atts) . ')'; + } else { + $rowdata->fields['+definition'] = $rowdata->fields['consrc']; + } + } + + $misc->printTrail('table'); + $misc->printTabs('table','constraints'); + $misc->printMsg($msg); + + $constraints = $data->getConstraints($_REQUEST['table']); + + $columns = array( + 'constraint' => array( + 'title' => $lang['strname'], + 'field' => field('conname'), + ), + 'definition' => array( + 'title' => $lang['strdefinition'], + 'field' => field('+definition'), + 'type' => 'pre', + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('constcomment'), + ), + ); + + $actions = array( + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'constraints.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'table' => $_REQUEST['table'], + 'constraint' => field('conname'), + 'type' => field('contype') + ) + ) + ) + ) + ); + + $misc->printTable($constraints, $columns, $actions, 'constraints-constraints', $lang['strnoconstraints'], 'cnPre'); + + $navlinks = array ( + 'addcheck' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'constraints.php', + 'urlvars' => array ( + 'action' => 'add_check', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['straddcheck'], + ), + 'adduniq' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'constraints.php', + 'urlvars' => array ( + 'action' => 'add_unique_key', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['stradduniq'], + ), + 'addpk' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'constraints.php', + 'urlvars' => array ( + 'action' => 'add_primary_key', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['straddpk'], + ), + 'addfk' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'constraints.php', + 'urlvars' => array ( + 'action' => 'add_foreign_key', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['straddfk'] + ) + ); + $misc->printNavLinks($navlinks, 'constraints-constraints', get_defined_vars()); + } + + function doTree() { + global $misc, $data; + + $constraints = $data->getConstraints($_REQUEST['table']); + + $reqvars = $misc->getRequestVars('schema'); + + function getIcon($f) { + switch($f['contype']) { + case 'u': + return 'UniqueConstraint'; + case 'c': + return 'CheckConstraint'; + case 'f': + return 'ForeignKey'; + case 'p': + return 'PrimaryKey'; + + } + } + + $attrs = array( + 'text' => field('conname'), + 'icon' => callback('getIcon'), + ); + + $misc->printTree($constraints, $attrs, 'constraints'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strtables'] . ' - ' . $_REQUEST['table'] . ' - ' . $lang['strconstraints'], + "<script src=\"indexes.js\" type=\"text/javascript\"></script>"); + + if ($action == 'add_unique_key' || $action == 'save_add_unique_key' + || $action == 'add_primary_key' || $action == 'save_add_primary_key' + || $action == 'add_foreign_key' || $action == 'save_add_foreign_key') + echo "<body onload=\"init();\">"; + else + $misc->printBody(); + + switch ($action) { + case 'add_foreign_key': + addForeignKey(1); + break; + case 'save_add_foreign_key': + if (isset($_POST['cancel'])) doDefault(); + else addForeignKey($_REQUEST['stage']); + break; + case 'add_unique_key': + addPrimaryOrUniqueKey('unique', true); + break; + case 'save_add_unique_key': + if (isset($_POST['cancel'])) doDefault(); + else addPrimaryOrUniqueKey('unique', false); + break; + case 'add_primary_key': + addPrimaryOrUniqueKey('primary', true); + break; + case 'save_add_primary_key': + if (isset($_POST['cancel'])) doDefault(); + else addPrimaryOrUniqueKey('primary', false); + break; + case 'add_check': + addCheck(true); + break; + case 'save_add_check': + if (isset($_POST['cancel'])) doDefault(); + else addCheck(false); + break; + case 'save_create': + doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/conversions.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/conversions.php new file mode 100644 index 00000000..32def8d7 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/conversions.php @@ -0,0 +1,88 @@ +<?php + + /** + * Manage conversions in a database + * + * $Id: conversions.php,v 1.15 2007/08/31 18:30:10 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Show default list of conversions in the database + */ + function doDefault($msg = '') { + global $data, $conf, $misc, $database; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema', 'conversions'); + $misc->printMsg($msg); + + $conversions = $data->getconversions(); + + $columns = array( + 'conversion' => array( + 'title' => $lang['strname'], + 'field' => field('conname'), + ), + 'source_encoding' => array( + 'title' => $lang['strsourceencoding'], + 'field' => field('conforencoding'), + ), + 'target_encoding' => array( + 'title' => $lang['strtargetencoding'], + 'field' => field('contoencoding'), + ), + 'default' => array( + 'title' => $lang['strdefault'], + 'field' => field('condefault'), + 'type' => 'yesno', + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('concomment'), + ), + ); + + $actions = array(); + + $misc->printTable($conversions, $columns, $actions, 'conversions-conversions', $lang['strnoconversions']); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $conversions = $data->getconversions(); + + $attrs = array( + 'text' => field('conname'), + 'icon' => 'Conversion', + 'toolTip'=> field('concomment') + ); + + $misc->printTree($conversions, $attrs, 'conversions'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strconversions']); + $misc->printBody(); + + switch ($action) { + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/database.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/database.php new file mode 100644 index 00000000..cdd53c60 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/database.php @@ -0,0 +1,698 @@ +<?php + + /** + * Manage schemas within a database + * + * $Id: database.php,v 1.104 2007/11/30 06:04:43 xzilla Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + $scripts = ''; + + function _highlight($string, $term) { + return str_replace($term, "<b>{$term}</b>", $string); + } + + /** + * Sends a signal to a process + */ + function doSignal() { + global $data, $lang; + + $status = $data->sendSignal($_REQUEST['pid'], $_REQUEST['signal']); + if ($status == 0) + doProcesses($lang['strsignalsent']); + else + doProcesses($lang['strsignalsentbad']); + } + + /** + * Searches for a named database object + */ + function doFind($confirm = true, $msg = '') { + global $data, $misc; + global $lang, $conf; + + if (!isset($_REQUEST['term'])) $_REQUEST['term'] = ''; + if (!isset($_REQUEST['filter'])) $_REQUEST['filter'] = ''; + + $misc->printTrail('database'); + $misc->printTabs('database','find'); + $misc->printMsg($msg); + + echo "<form action=\"database.php\" method=\"post\">\n"; + echo "<p><input name=\"term\" value=\"", htmlspecialchars($_REQUEST['term']), + "\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" />\n"; + // Output list of filters. This is complex due to all the 'has' and 'conf' feature possibilities + echo "<select name=\"filter\">\n"; + echo "\t<option value=\"\"", ($_REQUEST['filter'] == '') ? ' selected="selected"' : '', ">{$lang['strallobjects']}</option>\n"; + echo "\t<option value=\"SCHEMA\"", ($_REQUEST['filter'] == 'SCHEMA') ? ' selected="selected"' : '', ">{$lang['strschemas']}</option>\n"; + echo "\t<option value=\"TABLE\"", ($_REQUEST['filter'] == 'TABLE') ? ' selected="selected"' : '', ">{$lang['strtables']}</option>\n"; + echo "\t<option value=\"VIEW\"", ($_REQUEST['filter'] == 'VIEW') ? ' selected="selected"' : '', ">{$lang['strviews']}</option>\n"; + echo "\t<option value=\"SEQUENCE\"", ($_REQUEST['filter'] == 'SEQUENCE') ? ' selected="selected"' : '', ">{$lang['strsequences']}</option>\n"; + echo "\t<option value=\"COLUMN\"", ($_REQUEST['filter'] == 'COLUMN') ? ' selected="selected"' : '', ">{$lang['strcolumns']}</option>\n"; + echo "\t<option value=\"RULE\"", ($_REQUEST['filter'] == 'RULE') ? ' selected="selected"' : '', ">{$lang['strrules']}</option>\n"; + echo "\t<option value=\"INDEX\"", ($_REQUEST['filter'] == 'INDEX') ? ' selected="selected"' : '', ">{$lang['strindexes']}</option>\n"; + echo "\t<option value=\"TRIGGER\"", ($_REQUEST['filter'] == 'TRIGGER') ? ' selected="selected"' : '', ">{$lang['strtriggers']}</option>\n"; + echo "\t<option value=\"CONSTRAINT\"", ($_REQUEST['filter'] == 'CONSTRAINT') ? ' selected="selected"' : '', ">{$lang['strconstraints']}</option>\n"; + echo "\t<option value=\"FUNCTION\"", ($_REQUEST['filter'] == 'FUNCTION') ? ' selected="selected"' : '', ">{$lang['strfunctions']}</option>\n"; + echo "\t<option value=\"DOMAIN\"", ($_REQUEST['filter'] == 'DOMAIN') ? ' selected="selected"' : '', ">{$lang['strdomains']}</option>\n"; + if ($conf['show_advanced']) { + echo "\t<option value=\"AGGREGATE\"", ($_REQUEST['filter'] == 'AGGREGATE') ? ' selected="selected"' : '', ">{$lang['straggregates']}</option>\n"; + echo "\t<option value=\"TYPE\"", ($_REQUEST['filter'] == 'TYPE') ? ' selected="selected"' : '', ">{$lang['strtypes']}</option>\n"; + echo "\t<option value=\"OPERATOR\"", ($_REQUEST['filter'] == 'OPERATOR') ? ' selected="selected"' : '', ">{$lang['stroperators']}</option>\n"; + echo "\t<option value=\"OPCLASS\"", ($_REQUEST['filter'] == 'OPCLASS') ? ' selected="selected"' : '', ">{$lang['stropclasses']}</option>\n"; + echo "\t<option value=\"CONVERSION\"", ($_REQUEST['filter'] == 'CONVERSION') ? ' selected="selected"' : '', ">{$lang['strconversions']}</option>\n"; + echo "\t<option value=\"LANGUAGE\"", ($_REQUEST['filter'] == 'LANGUAGE') ? ' selected="selected"' : '', ">{$lang['strlanguages']}</option>\n"; + } + echo "</select>\n"; + echo "<input type=\"submit\" value=\"{$lang['strfind']}\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"action\" value=\"find\" /></p>\n"; + echo "</form>\n"; + + // Default focus + $misc->setFocus('forms[0].term'); + + // If a search term has been specified, then perform the search + // and display the results, grouped by object type + if ($_REQUEST['term'] != '') { + $rs = $data->findObject($_REQUEST['term'], $_REQUEST['filter']); + if ($rs->recordCount() > 0) { + $curr = ''; + while (!$rs->EOF) { + // Output a new header if the current type has changed, but not if it's just changed the rule type + if ($rs->fields['type'] != $curr) { + // Short-circuit in the case of changing from table rules to view rules; table cols to view cols; + // table constraints to domain constraints + if ($rs->fields['type'] == 'RULEVIEW' && $curr == 'RULETABLE') { + $curr = $rs->fields['type']; + } + elseif ($rs->fields['type'] == 'COLUMNVIEW' && $curr == 'COLUMNTABLE') { + $curr = $rs->fields['type']; + } + elseif ($rs->fields['type'] == 'CONSTRAINTTABLE' && $curr == 'CONSTRAINTDOMAIN') { + $curr = $rs->fields['type']; + } + else { + if ($curr != '') echo "</ul>\n"; + $curr = $rs->fields['type']; + echo "<h3>"; + switch ($curr) { + case 'SCHEMA': + echo $lang['strschemas']; + break; + case 'TABLE': + echo $lang['strtables']; + break; + case 'VIEW': + echo $lang['strviews']; + break; + case 'SEQUENCE': + echo $lang['strsequences']; + break; + case 'COLUMNTABLE': + case 'COLUMNVIEW': + echo $lang['strcolumns']; + break; + case 'INDEX': + echo $lang['strindexes']; + break; + case 'CONSTRAINTTABLE': + case 'CONSTRAINTDOMAIN': + echo $lang['strconstraints']; + break; + case 'TRIGGER': + echo $lang['strtriggers']; + break; + case 'RULETABLE': + case 'RULEVIEW': + echo $lang['strrules']; + break; + case 'FUNCTION': + echo $lang['strfunctions']; + break; + case 'TYPE': + echo $lang['strtypes']; + break; + case 'DOMAIN': + echo $lang['strdomains']; + break; + case 'OPERATOR': + echo $lang['stroperators']; + break; + case 'CONVERSION': + echo $lang['strconversions']; + break; + case 'LANGUAGE': + echo $lang['strlanguages']; + break; + case 'AGGREGATE': + echo $lang['straggregates']; + break; + case 'OPCLASS': + echo $lang['stropclasses']; + break; + } + echo "</h3>"; + echo "<ul>\n"; + } + } + + switch ($curr) { + case 'SCHEMA': + echo "<li><a href=\"redirect.php?subject=schema&{$misc->href}&schema=", $misc->printVal($rs->fields['name']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'TABLE': + echo "<li>"; + echo "<a href=\"tables.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"redirect.php?subject=table&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&table=", + urlencode($rs->fields['name']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'VIEW': + echo "<li>"; + echo "<a href=\"views.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"redirect.php?subject=view&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&view=", + urlencode($rs->fields['name']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'SEQUENCE': + echo "<li>"; + echo "<a href=\"sequences.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"sequences.php?subject=sequence&action=properties&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), + "&sequence=", urlencode($rs->fields['name']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'COLUMNTABLE': + echo "<li>"; + echo "<a href=\"redirect.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"tblproperties.php?subject=table&{$misc->href}&table=", urlencode($rs->fields['relname']), "&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['relname']), "</a>."; + echo "<a href=\"colproperties.php?{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&table=", + urlencode($rs->fields['relname']), "&column=", urlencode($rs->fields['name']), "\">", + _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'COLUMNVIEW': + echo "<li>"; + echo "<a href=\"redirect.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"viewproperties.php?subject=view&{$misc->href}&view=", urlencode($rs->fields['relname']), "&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['relname']), "</a>."; + echo "<a href=\"colproperties.php?{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&view=", + urlencode($rs->fields['relname']), "&column=", urlencode($rs->fields['name']), "\">", + _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'INDEX': + echo "<li>"; + echo "<a href=\"redirect.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"redirect.php?subject=table&{$misc->href}&table=", urlencode($rs->fields['relname']), "&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['relname']), "</a>."; + echo "<a href=\"indexes.php?{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&table=", urlencode($rs->fields['relname']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'CONSTRAINTTABLE': + echo "<li>"; + echo "<a href=\"redirect.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"redirect.php?subject=table&{$misc->href}&table=", urlencode($rs->fields['relname']), "&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['relname']), "</a>."; + echo "<a href=\"constraints.php?{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&table=", + urlencode($rs->fields['relname']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'CONSTRAINTDOMAIN': + echo "<li>"; + echo "<a href=\"domains.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"domains.php?action=properties&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&domain=", urlencode($rs->fields['relname']), "\">", + $misc->printVal($rs->fields['relname']), '.', _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'TRIGGER': + echo "<li>"; + echo "<a href=\"redirect.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"redirect.php?subject=table&{$misc->href}&table=", urlencode($rs->fields['relname']), "&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['relname']), "</a>."; + echo "<a href=\"triggers.php?{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&table=", urlencode($rs->fields['relname']), "\">", + _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'RULETABLE': + echo "<li>"; + echo "<a href=\"redirect.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"redirect.php?subject=table&{$misc->href}&table=", urlencode($rs->fields['relname']), "&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['relname']), "</a>."; + echo "<a href=\"rules.php?subject=table&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&reltype=table&table=", + urlencode($rs->fields['relname']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'RULEVIEW': + echo "<li>"; + echo "<a href=\"redirect.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"redirect.php?subject=view&{$misc->href}&view=", urlencode($rs->fields['relname']), "&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['relname']), "</a>."; + echo "<a href=\"rules.php?subject=view&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&reltype=view&view=", + urlencode($rs->fields['relname']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'FUNCTION': + echo "<li>"; + echo "<a href=\"functions.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"functions.php?action=properties&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&function=", + urlencode($rs->fields['name']), "&function_oid=", urlencode($rs->fields['oid']), "\">", + _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'TYPE': + echo "<li>"; + echo "<a href=\"types.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"types.php?action=properties&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&type=", + urlencode($rs->fields['name']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'DOMAIN': + echo "<li>"; + echo "<a href=\"domains.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"domains.php?action=properties&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&domain=", + urlencode($rs->fields['name']), "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'OPERATOR': + echo "<li>"; + echo "<a href=\"operators.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"operators.php?action=properties&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "&operator=", + urlencode($rs->fields['name']), "&operator_oid=", urlencode($rs->fields['oid']) ,"\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'CONVERSION': + echo "<li>"; + echo "<a href=\"conversions.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"conversions.php?{$misc->href}&schema=", urlencode($rs->fields['schemaname']), + "\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'LANGUAGE': + echo "<li><a href=\"languages.php?{$misc->href}\">", _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'AGGREGATE': + echo "<li>"; + echo "<a href=\"aggregates.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"aggregates.php?{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", + _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + case 'OPCLASS': + echo "<li>"; + echo "<a href=\"redirect.php?subject=schema&{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", $misc->printVal($rs->fields['schemaname']), "</a>."; + echo "<a href=\"opclasses.php?{$misc->href}&schema=", urlencode($rs->fields['schemaname']), "\">", + _highlight($misc->printVal($rs->fields['name']), $_REQUEST['term']), "</a></li>\n"; + break; + } + $rs->moveNext(); + } + echo "</ul>\n"; + + echo "<p>", $rs->recordCount(), " ", $lang['strobjects'], "</p>\n"; + } + else echo "<p>{$lang['strnoobjects']}</p>\n"; + } + } + + /** + * Displays options for database download + */ + function doExport($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('database'); + $misc->printTabs('database','export'); + $misc->printMsg($msg); + + echo "<form action=\"dbexport.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strformat']}</th><th class=\"data\" colspan=\"2\">{$lang['stroptions']}</th></tr>\n"; + // Data only + echo "<tr><th class=\"data left\" rowspan=\"2\">"; + echo "<input type=\"radio\" id=\"what1\" name=\"what\" value=\"dataonly\" checked=\"checked\" /><label for=\"what1\">{$lang['strdataonly']}</label></th>\n"; + echo "<td>{$lang['strformat']}</td>\n"; + echo "<td><select name=\"d_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "<tr><td><label for=\"d_oids\">{$lang['stroids']}</label></td><td><input type=\"checkbox\" id=\"d_oids\" name=\"d_oids\" /></td>\n</tr>\n"; + // Structure only + echo "<tr><th class=\"data left\"><input type=\"radio\" id=\"what2\" name=\"what\" value=\"structureonly\" /><label for=\"what2\">{$lang['strstructureonly']}</label></th>\n"; + echo "<td><label for=\"s_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"s_clean\" name=\"s_clean\" /></td>\n</tr>\n"; + // Structure and data + echo "<tr><th class=\"data left\" rowspan=\"3\">"; + echo "<input type=\"radio\" id=\"what3\" name=\"what\" value=\"structureanddata\" /><label for=\"what3\">{$lang['strstructureanddata']}</label></th>\n"; + echo "<td>{$lang['strformat']}</td>\n"; + echo "<td><select name=\"sd_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "<tr><td><label for=\"sd_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"sd_clean\" name=\"sd_clean\" /></td>\n</tr>\n"; + echo "<tr><td><label for=\"sd_oids\">{$lang['stroids']}</label></td><td><input type=\"checkbox\" id=\"sd_oids\" name=\"sd_oids\" /></td>\n</tr>\n"; + echo "</table>\n"; + + echo "<h3>{$lang['stroptions']}</h3>\n"; + echo "<p><input type=\"radio\" id=\"output1\" name=\"output\" value=\"show\" checked=\"checked\" /><label for=\"output1\">{$lang['strshow']}</label>\n"; + echo "<br/><input type=\"radio\" id=\"output2\" name=\"output\" value=\"download\" /><label for=\"output2\">{$lang['strdownload']}</label>\n"; + // MSIE cannot download gzip in SSL mode - it's just broken + if (!(strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') && isset($_SERVER['HTTPS']))) { + echo "<br /><input type=\"radio\" id=\"output3\" name=\"output\" value=\"gzipped\" /><label for=\"output3\">{$lang['strdownloadgzipped']}</label>\n"; + } + echo "</p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"export\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"database\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strexport']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Show the current status of all database variables + */ + function doVariables() { + global $data, $misc; + global $lang; + + // Fetch the variables from the database + $variables = $data->getVariables(); + $misc->printTrail('database'); + $misc->printTabs('database','variables'); + + $columns = array( + 'variable' => array( + 'title' => $lang['strname'], + 'field' => field('name'), + ), + 'value' => array( + 'title' => $lang['strsetting'], + 'field' => field('setting'), + ), + ); + + $actions = array(); + + $misc->printTable($variables, $columns, $actions, 'database-variables', $lang['strnodata']); + } + + /** + * Show all current database connections and any queries they + * are running. + */ + function doProcesses($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('database'); + $misc->printTabs('database','processes'); + $misc->printMsg($msg); + + if (strlen($msg) === 0) { + echo "<br /><a id=\"control\" href=\"\"><img src=\"".$misc->icon('Refresh')."\" alt=\"{$lang['strrefresh']}\" title=\"{$lang['strrefresh']}\"/> {$lang['strrefresh']}</a>"; + } + + echo "<div id=\"data_block\">"; + currentProcesses(); + echo "</div>"; + } + + function currentProcesses($isAjax = false) { + global $data, $misc, $lang; + + // Display prepared transactions + if($data->hasPreparedXacts()) { + echo "<h3>{$lang['strpreparedxacts']}</h3>\n"; + $prep_xacts = $data->getPreparedXacts($_REQUEST['database']); + + $columns = array( + 'transaction' => array( + 'title' => $lang['strxactid'], + 'field' => field('transaction'), + ), + 'gid' => array( + 'title' => $lang['strgid'], + 'field' => field('gid'), + ), + 'prepared' => array( + 'title' => $lang['strstarttime'], + 'field' => field('prepared'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('owner'), + ), + ); + + $actions = array(); + + $misc->printTable($prep_xacts, $columns, $actions, 'database-processes-preparedxacts', $lang['strnodata']); + } + + // Fetch the processes from the database + echo "<h3>{$lang['strprocesses']}</h3>\n"; + $processes = $data->getProcesses($_REQUEST['database']); + + $columns = array( + 'user' => array( + 'title' => $lang['strusername'], + 'field' => field('usename'), + ), + 'process' => array( + 'title' => $lang['strprocess'], + 'field' => field('pid'), + ), + 'blocked' => array( + 'title' => $lang['strblocked'], + 'field' => field('waiting'), + ), + 'query' => array( + 'title' => $lang['strsql'], + 'field' => field('query'), + ), + 'start_time' => array( + 'title' => $lang['strstarttime'], + 'field' => field('query_start'), + ), + ); + + // Build possible actions for our process list + $columns['actions'] = array('title' => $lang['stractions']); + + $actions = array(); + if ($data->hasUserSignals() || $data->isSuperUser()) { + $actions = array( + 'cancel' => array( + 'content' => $lang['strcancel'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'database.php', + 'urlvars' => array ( + 'action' => 'signal', + 'signal' => 'CANCEL', + 'pid' => field('pid') + ) + ) + ) + ), + 'kill' => array( + 'content' => $lang['strkill'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'database.php', + 'urlvars' => array ( + 'action' => 'signal', + 'signal' => 'KILL', + 'pid' => field('pid') + ) + ) + ) + ) + ); + + // Remove actions where not supported + if (!$data->hasQueryKill()) unset($actions['kill']); + if (!$data->hasQueryCancel()) unset($actions['cancel']); + } + + if (count($actions) == 0) unset($columns['actions']); + + $misc->printTable($processes, $columns, $actions, 'database-processes', $lang['strnodata']); + + if ($isAjax) exit; + } + + function currentLocks($isAjax = false) { + global $data, $misc, $lang; + + // Get the info from the pg_locks view + $variables = $data->getLocks(); + + $columns = array( + 'namespace' => array( + 'title' => $lang['strschema'], + 'field' => field('nspname'), + ), + 'tablename' => array( + 'title' => $lang['strtablename'], + 'field' => field('tablename'), + ), + 'vxid' => array( + 'title' => $lang['strvirtualtransaction'], + 'field' => field('virtualtransaction'), + ), + 'transactionid' => array( + 'title' => $lang['strtransaction'], + 'field' => field('transaction'), + ), + 'processid' => array( + 'title' => $lang['strprocessid'], + 'field' => field('pid'), + ), + 'mode' => array( + 'title' => $lang['strmode'], + 'field' => field('mode'), + ), + 'granted' => array( + 'title' => $lang['strislockheld'], + 'field' => field('granted'), + 'type' => 'yesno', + ), + ); + + if (!$data->hasVirtualTransactionId()) unset($columns['vxid']); + + $actions = array(); + $misc->printTable($variables, $columns, $actions, 'database-locks', $lang['strnodata']); + + if ($isAjax) exit; + } + + /** + * Show the existing table locks in the current database + */ + function doLocks() { + global $data, $misc; + global $lang; + + $misc->printTrail('database'); + $misc->printTabs('database','locks'); + + echo "<br /><a id=\"control\" href=\"\"><img src=\"".$misc->icon('Refresh')."\" alt=\"{$lang['strrefresh']}\" title=\"{$lang['strrefresh']}\"/> {$lang['strrefresh']}</a>"; + + echo "<div id=\"data_block\">"; + currentLocks(); + echo "</div>"; + } + + /** + * Allow execution of arbitrary SQL statements on a database + */ + function doSQL() { + global $data, $misc; + global $lang; + + if ((!isset($_SESSION['sqlquery'])) || isset($_REQUEST['new'])) { + $_SESSION['sqlquery'] = ''; + $_REQUEST['paginate'] = 'on'; + } + + $misc->printTrail('database'); + $misc->printTabs('database','sql'); + echo "<p>{$lang['strentersql']}</p>\n"; + echo "<form action=\"sql.php\" method=\"post\" enctype=\"multipart/form-data\">\n"; + echo "<p>{$lang['strsql']}<br />\n"; + echo "<textarea style=\"width:100%;\" rows=\"20\" cols=\"50\" name=\"query\">", + htmlspecialchars($_SESSION['sqlquery']), "</textarea></p>\n"; + + // Check that file uploads are enabled + if (ini_get('file_uploads')) { + // Don't show upload option if max size of uploads is zero + $max_size = $misc->inisizeToBytes(ini_get('upload_max_filesize')); + if (is_double($max_size) && $max_size > 0) { + echo "<p><input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"{$max_size}\" />\n"; + echo "<label for=\"script\">{$lang['struploadscript']}</label> <input id=\"script\" name=\"script\" type=\"file\" /></p>\n"; + } + } + + echo "<p><input type=\"checkbox\" id=\"paginate\" name=\"paginate\"", (isset($_REQUEST['paginate']) ? ' checked="checked"' : ''), " /><label for=\"paginate\">{$lang['strpaginate']}</label></p>\n"; + echo "<p><input type=\"submit\" name=\"execute\" accesskey=\"r\" value=\"{$lang['strexecute']}\" />\n"; + echo $misc->form; + echo "<input type=\"reset\" accesskey=\"q\" value=\"{$lang['strreset']}\" /></p>\n"; + echo "</form>\n"; + + // Default focus + $misc->setFocus('forms[0].query'); + } + + function doTree() { + global $misc, $data, $lang; + + $reqvars = $misc->getRequestVars('database'); + + $tabs = $misc->getNavTabs('database'); + + $items = $misc->adjustTabsForTree($tabs); + + $attrs = array( + 'text' => field('title'), + 'icon' => field('icon'), + 'action' => url(field('url'), + $reqvars, + field('urlvars', array()) + ), + 'branch' => url(field('url'), + $reqvars, + field('urlvars'), + array('action' => 'tree') + ), + ); + + $misc->printTree($items, $attrs, 'database'); + + exit; + } + + require('./admin.php'); + + /* shortcuts: these functions exit the script */ + if ($action == 'tree') doTree(); + if ($action == 'refresh_locks') currentLocks(true); + if ($action == 'refresh_processes') currentProcesses(true); + + /* normal flow */ + if ($action == 'locks' or $action == 'processes') { + $scripts .= "<script src=\"js/database.js\" type=\"text/javascript\"></script>"; + + $refreshTime = $conf['ajax_refresh'] * 1000; + + $scripts .= "<script type=\"text/javascript\">\n"; + $scripts .= "var Database = {\n"; + $scripts .= "ajax_time_refresh: {$refreshTime},\n"; + $scripts .= "str_start: {text:'{$lang['strstart']}',icon: '". $misc->icon('Execute') ."'},\n"; + $scripts .= "str_stop: {text:'{$lang['strstop']}',icon: '". $misc->icon('Stop') ."'},\n"; + $scripts .= "load_icon: '". $misc->icon('Loading') ."',\n"; + $scripts .= "server:'{$_REQUEST['server']}',\n"; + $scripts .= "dbname:'{$_REQUEST['database']}',\n"; + $scripts .= "action:'refresh_{$action}',\n"; + $scripts .= "errmsg: '". str_replace("'", "\'", $lang['strconnectionfail']) ."'\n"; + $scripts .= "};\n"; + $scripts .= "</script>\n"; + } + + $misc->printHeader($lang['strdatabase'], $scripts); + $misc->printBody(); + + switch ($action) { + case 'find': + if (isset($_REQUEST['term'])) doFind(false); + else doFind(true); + break; + case 'sql': + doSQL(); + break; + case 'variables': + doVariables(); + break; + case 'processes': + doProcesses(); + break; + case 'locks': + doLocks(); + break; + case 'export': + doExport(); + break; + case 'signal': + doSignal(); + break; + default: + if (adminActions($action, 'database') === false) doSQL(); + break; + } + + $misc->printFooter(); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dataexport.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dataexport.php new file mode 100644 index 00000000..84db24f8 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dataexport.php @@ -0,0 +1,345 @@ +<?php + + /** + * Does an export to the screen or as a download. This checks to + * see if they have pg_dump set up, and will use it if possible. + * + * $Id: dataexport.php,v 1.26 2007/07/12 19:26:22 xzilla Exp $ + */ + + $extensions = array( + 'sql' => 'sql', + 'copy' => 'sql', + 'csv' => 'csv', + 'tab' => 'txt', + 'html' => 'html', + 'xml' => 'xml' + ); + + // Prevent timeouts on large exports (non-safe mode only) + if (!ini_get('safe_mode')) set_time_limit(0); + + // if (!isset($_REQUEST['table']) && !isset($_REQUEST['query'])) + // What must we do in this case? Maybe redirect to the homepage? + + // If format is set, then perform the export + if (isset($_REQUEST['what'])) { + + // Include application functions + $_no_output = true; + include_once('./libraries/lib.inc.php'); + + switch ($_REQUEST['what']) { + case 'dataonly': + // Check to see if they have pg_dump set up and if they do, use that + // instead of custom dump code + if ($misc->isDumpEnabled() + && ($_REQUEST['d_format'] == 'copy' || $_REQUEST['d_format'] == 'sql')) { + include('./dbexport.php'); + exit; + } + else { + $format = $_REQUEST['d_format']; + $oids = isset($_REQUEST['d_oids']); + } + break; + case 'structureonly': + // Check to see if they have pg_dump set up and if they do, use that + // instead of custom dump code + if ($misc->isDumpEnabled()) { + include('./dbexport.php'); + exit; + } + else $clean = isset($_REQUEST['s_clean']); + break; + case 'structureanddata': + // Check to see if they have pg_dump set up and if they do, use that + // instead of custom dump code + if ($misc->isDumpEnabled()) { + include('./dbexport.php'); + exit; + } + else { + $format = $_REQUEST['sd_format']; + $clean = isset($_REQUEST['sd_clean']); + $oids = isset($_REQUEST['sd_oids']); + } + break; + } + + // Make it do a download, if necessary + if ($_REQUEST['output'] == 'download') { + // Set headers. MSIE is totally broken for SSL downloading, so + // we need to have it download in-place as plain text + if (strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') && isset($_SERVER['HTTPS'])) { + header('Content-Type: text/plain'); + } + else { + header('Content-Type: application/download'); + + if (isset($extensions[$format])) + $ext = $extensions[$format]; + else + $ext = 'txt'; + + header('Content-Disposition: attachment; filename=dump.' . $ext); + } + } + else { + header('Content-Type: text/plain'); + } + + if (isset($_REQUEST['query'])) $_REQUEST['query'] = trim(urldecode($_REQUEST['query'])); + + // Set the schema search path + if (isset($_REQUEST['search_path'])) { + $data->setSearchPath(array_map('trim',explode(',',$_REQUEST['search_path']))); + } + + // Set up the dump transaction + $status = $data->beginDump(); + + // If the dump is not dataonly then dump the structure prefix + if ($_REQUEST['what'] != 'dataonly') + echo $data->getTableDefPrefix($_REQUEST['table'], $clean); + + // If the dump is not structureonly then dump the actual data + if ($_REQUEST['what'] != 'structureonly') { + // Get database encoding + $dbEncoding = $data->getDatabaseEncoding(); + + // Set fetch mode to NUM so that duplicate field names are properly returned + $data->conn->setFetchMode(ADODB_FETCH_NUM); + + // Execute the query, if set, otherwise grab all rows from the table + if (isset($_REQUEST['table'])) + $rs = $data->dumpRelation($_REQUEST['table'], $oids); + else + $rs = $data->conn->Execute($_REQUEST['query']); + + if ($format == 'copy') { + $data->fieldClean($_REQUEST['table']); + echo "COPY \"{$_REQUEST['table']}\""; + if ($oids) echo " WITH OIDS"; + echo " FROM stdin;\n"; + while (!$rs->EOF) { + $first = true; + while(list($k, $v) = each($rs->fields)) { + // Escape value + $v = $data->escapeBytea($v); + + // We add an extra escaping slash onto octal encoded characters + $v = preg_replace('/\\\\([0-7]{3})/', '\\\\\1', $v); + if ($first) { + echo (is_null($v)) ? '\\N' : $v; + $first = false; + } + else echo "\t", (is_null($v)) ? '\\N' : $v; + } + echo "\n"; + $rs->moveNext(); + } + echo "\\.\n"; + } + elseif ($format == 'html') { + echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n"; + echo "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n"; + echo "<head>\r\n"; + echo "\t<title></title>\r\n"; + echo "\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n"; + echo "</head>\r\n"; + echo "<body>\r\n"; + echo "<table class=\"phppgadmin\">\r\n"; + echo "\t<tr>\r\n"; + if (!$rs->EOF) { + // Output header row + $j = 0; + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($j++); + if ($finfo->name == $data->id && !$oids) continue; + echo "\t\t<th>", $misc->printVal($finfo->name, true), "</th>\r\n"; + } + } + echo "\t</tr>\r\n"; + while (!$rs->EOF) { + echo "\t<tr>\r\n"; + $j = 0; + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($j++); + if ($finfo->name == $data->id && !$oids) continue; + echo "\t\t<td>", $misc->printVal($v, true, $finfo->type), "</td>\r\n"; + } + echo "\t</tr>\r\n"; + $rs->moveNext(); + } + echo "</table>\r\n"; + echo "</body>\r\n"; + echo "</html>\r\n"; + } + elseif ($format == 'xml') { + echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"; + echo "<data>\n"; + if (!$rs->EOF) { + // Output header row + $j = 0; + echo "\t<header>\n"; + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($j++); + $name = htmlspecialchars($finfo->name); + $type = htmlspecialchars($finfo->type); + echo "\t\t<column name=\"{$name}\" type=\"{$type}\" />\n"; + } + echo "\t</header>\n"; + } + echo "\t<records>\n"; + while (!$rs->EOF) { + $j = 0; + echo "\t\t<row>\n"; + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($j++); + $name = htmlspecialchars($finfo->name); + if (!is_null($v)) $v = htmlspecialchars($v); + echo "\t\t\t<column name=\"{$name}\"", (is_null($v) ? ' null="null"' : ''), ">{$v}</column>\n"; + } + echo "\t\t</row>\n"; + $rs->moveNext(); + } + echo "\t</records>\n"; + echo "</data>\n"; + } + elseif ($format == 'sql') { + $data->fieldClean($_REQUEST['table']); + while (!$rs->EOF) { + echo "INSERT INTO \"{$_REQUEST['table']}\" ("; + $first = true; + $j = 0; + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($j++); + $k = $finfo->name; + // SQL (INSERT) format cannot handle oids + // if ($k == $data->id) continue; + // Output field + $data->fieldClean($k); + if ($first) echo "\"{$k}\""; + else echo ", \"{$k}\""; + + if (!is_null($v)) { + // Output value + // addCSlashes converts all weird ASCII characters to octal representation, + // EXCEPT the 'special' ones like \r \n \t, etc. + $v = addCSlashes($v, "\0..\37\177..\377"); + // We add an extra escaping slash onto octal encoded characters + $v = preg_replace('/\\\\([0-7]{3})/', '\\\1', $v); + // Finally, escape all apostrophes + $v = str_replace("'", "''", $v); + } + if ($first) { + $values = (is_null($v) ? 'NULL' : "'{$v}'"); + $first = false; + } + else $values .= ', ' . ((is_null($v) ? 'NULL' : "'{$v}'")); + } + echo ") VALUES ({$values});\n"; + $rs->moveNext(); + } + } + else { + switch ($format) { + case 'tab': + $sep = "\t"; + break; + case 'csv': + default: + $sep = ','; + break; + } + if (!$rs->EOF) { + // Output header row + $first = true; + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($k); + $v = $finfo->name; + if (!is_null($v)) $v = str_replace('"', '""', $v); + if ($first) { + echo "\"{$v}\""; + $first = false; + } + else echo "{$sep}\"{$v}\""; + } + echo "\r\n"; + } + while (!$rs->EOF) { + $first = true; + foreach ($rs->fields as $k => $v) { + if (!is_null($v)) $v = str_replace('"', '""', $v); + if ($first) { + echo (is_null($v)) ? "\"\\N\"" : "\"{$v}\""; + $first = false; + } + else echo is_null($v) ? "{$sep}\"\\N\"" : "{$sep}\"{$v}\""; + } + echo "\r\n"; + $rs->moveNext(); + } + } + } + + // If the dump is not dataonly then dump the structure suffix + if ($_REQUEST['what'] != 'dataonly') { + // Set fetch mode back to ASSOC for the table suffix to work + $data->conn->setFetchMode(ADODB_FETCH_ASSOC); + echo $data->getTableDefSuffix($_REQUEST['table']); + } + + // Finish the dump transaction + $status = $data->endDump(); + } + else { + // Include application functions + include_once('./libraries/lib.inc.php'); + + if ( !isset($_REQUEST['query']) or empty($_REQUEST['query']) ) + $_REQUEST['query'] = $_SESSION['sqlquery']; + + $misc->printHeader($lang['strexport']); + $misc->printBody(); + $misc->printTrail(isset($_REQUEST['subject']) ? $_REQUEST['subject'] : 'database'); + $misc->printTitle($lang['strexport']); + if (isset($msg)) $misc->printMsg($msg); + + echo "<form action=\"dataexport.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strformat']}:</th><td><select name=\"d_format\">\n"; + // COPY and SQL require a table + if (isset($_REQUEST['table'])) { + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + } + echo "<option value=\"csv\">CSV</option>\n"; + echo "<option value=\"tab\">{$lang['strtabbed']}</option>\n"; + echo "<option value=\"html\">XHTML</option>\n"; + echo "<option value=\"xml\">XML</option>\n"; + echo "</select></td></tr>"; + echo "</table>\n"; + + echo "<h3>{$lang['stroptions']}</h3>\n"; + echo "<p><input type=\"radio\" id=\"output1\" name=\"output\" value=\"show\" checked=\"checked\" /><label for=\"output1\">{$lang['strshow']}</label>\n"; + echo "<br/><input type=\"radio\" id=\"output2\" name=\"output\" value=\"download\" /><label for=\"output2\">{$lang['strdownload']}</label></p>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"export\" />\n"; + echo "<input type=\"hidden\" name=\"what\" value=\"dataonly\" />\n"; + if (isset($_REQUEST['table'])) { + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + } + echo "<input type=\"hidden\" name=\"query\" value=\"", htmlspecialchars(urlencode($_REQUEST['query'])), "\" />\n"; + if (isset($_REQUEST['search_path'])) { + echo "<input type=\"hidden\" name=\"search_path\" value=\"", htmlspecialchars($_REQUEST['search_path']), "\" />\n"; + } + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strexport']}\" /></p>\n"; + echo "</form>\n"; + + $misc->printFooter(); + } + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dataimport.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dataimport.php new file mode 100644 index 00000000..ff81cd96 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dataimport.php @@ -0,0 +1,298 @@ +<?php + + /** + * Does an import to a particular table from a text file + * + * $Id: dataimport.php,v 1.11 2007/01/22 16:33:01 soranzo Exp $ + */ + + // Prevent timeouts on large exports (non-safe mode only) + if (!ini_get('safe_mode')) set_time_limit(0); + + // Include application functions + include_once('./libraries/lib.inc.php'); + + // Default state for XML parser + $state = 'XML'; + $curr_col_name = null; + $curr_col_val = null; + $curr_col_null = false; + $curr_row = array(); + + /** + * Open tag handler for XML import feature + */ + function _startElement($parser, $name, $attrs) { + global $data, $misc, $lang; + global $state, $curr_row, $curr_col_name, $curr_col_val, $curr_col_null; + + switch ($name) { + case 'DATA': + if ($state != 'XML') { + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror']); + exit; + } + $state = 'DATA'; + break; + case 'HEADER': + if ($state != 'DATA') { + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror']); + exit; + } + $state = 'HEADER'; + break; + case 'RECORDS': + if ($state != 'READ_HEADER') { + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror']); + exit; + } + $state = 'RECORDS'; + break; + case 'ROW': + if ($state != 'RECORDS') { + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror']); + exit; + } + $state = 'ROW'; + $curr_row = array(); + break; + case 'COLUMN': + // We handle columns in rows + if ($state == 'ROW') { + $state = 'COLUMN'; + $curr_col_name = $attrs['NAME']; + $curr_col_null = isset($attrs['NULL']); + } + // And we ignore columns in headers and fail in any other context + elseif ($state != 'HEADER') { + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror']); + exit; + } + break; + default: + // An unrecognised tag means failure + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror']); + exit; + } + } + + /** + * Close tag handler for XML import feature + */ + function _endElement($parser, $name) { + global $data, $misc, $lang; + global $state, $curr_row, $curr_col_name, $curr_col_val, $curr_col_null; + + switch ($name) { + case 'DATA': + $state = 'READ_DATA'; + break; + case 'HEADER': + $state = 'READ_HEADER'; + break; + case 'RECORDS': + $state = 'READ_RECORDS'; + break; + case 'ROW': + // Build value map in order to insert row into table + $fields = array(); + $vars = array(); + $nulls = array(); + $format = array(); + $types = array(); + $i = 0; + foreach ($curr_row as $k => $v) { + $fields[$i] = $k; + // Check for nulls + if ($v === null) $nulls[$i] = 'on'; + // Add to value array + $vars[$i] = $v; + // Format is always VALUE + $format[$i] = 'VALUE'; + // Type is always text + $types[$i] = 'text'; + $i++; + } + $status = $data->insertRow($_REQUEST['table'], $fields, $vars, $nulls, $format, $types); + if ($status != 0) { + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror']); + exit; + } + $curr_row = array(); + $state = 'RECORDS'; + break; + case 'COLUMN': + $curr_row[$curr_col_name] = ($curr_col_null ? null : $curr_col_val); + $curr_col_name = null; + $curr_col_val = null; + $curr_col_null = false; + $state = 'ROW'; + break; + default: + // An unrecognised tag means failure + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror']); + exit; + } + } + + /** + * Character data handler for XML import feature + */ + function _charHandler($parser, $cdata) { + global $data, $misc, $lang; + global $state, $curr_col_val; + + if ($state == 'COLUMN') { + $curr_col_val .= $cdata; + } + } + + function loadNULLArray() { + $array = array(); + if (isset($_POST['allowednulls'])) { + foreach ($_POST['allowednulls'] as $null_char) + $array[] = $null_char; + } + return $array; + } + + function determineNull($field, $null_array) { + return in_array($field, $null_array); + } + + $misc->printHeader($lang['strimport']); + $misc->printTrail('table'); + $misc->printTabs('table','import'); + + // Check that file is specified and is an uploaded file + if (isset($_FILES['source']) && is_uploaded_file($_FILES['source']['tmp_name']) && is_readable($_FILES['source']['tmp_name'])) { + + $fd = fopen($_FILES['source']['tmp_name'], 'r'); + // Check that file was opened successfully + if ($fd !== false) { + $null_array = loadNULLArray(); + $status = $data->beginTransaction(); + if ($status != 0) { + $misc->printMsg($lang['strimporterror']); + exit; + } + + // If format is set to 'auto', then determine format automatically from file name + if ($_REQUEST['format'] == 'auto') { + $extension = substr(strrchr($_FILES['source']['name'], '.'), 1); + switch ($extension) { + case 'csv': + $_REQUEST['format'] = 'csv'; + break; + case 'txt': + $_REQUEST['format'] = 'tab'; + break; + case 'xml': + $_REQUEST['format'] = 'xml'; + break; + default: + $data->rollbackTransaction(); + $misc->printMsg($lang['strimporterror-fileformat']); + exit; + } + } + + // Do different import technique depending on file format + switch ($_REQUEST['format']) { + case 'csv': + case 'tab': + // XXX: Length of CSV lines limited to 100k + $csv_max_line = 100000; + // Set delimiter to tabs or commas + if ($_REQUEST['format'] == 'csv') $csv_delimiter = ','; + else $csv_delimiter = "\t"; + // Get first line of field names + $fields = fgetcsv($fd, $csv_max_line, $csv_delimiter); + $row = 2; //We start on the line AFTER the field names + while ($line = fgetcsv($fd, $csv_max_line, $csv_delimiter)) { + // Build value map + $t_fields = array(); + $vars = array(); + $nulls = array(); + $format = array(); + $types = array(); + $i = 0; + foreach ($fields as $f) { + // Check that there is a column + if (!isset($line[$i])) { + $misc->printMsg(sprintf($lang['strimporterrorline-badcolumnnum'], $row)); + exit; + } + $t_fields[$i] = $f; + + // Check for nulls + if (determineNull($line[$i], $null_array)) { + $nulls[$i] = 'on'; + } + // Add to value array + $vars[$i] = $line[$i]; + // Format is always VALUE + $format[$i] = 'VALUE'; + // Type is always text + $types[$i] = 'text'; + $i++; + } + + $status = $data->insertRow($_REQUEST['table'], $t_fields, $vars, $nulls, $format, $types); + if ($status != 0) { + $data->rollbackTransaction(); + $misc->printMsg(sprintf($lang['strimporterrorline'], $row)); + exit; + } + $row++; + } + break; + case 'xml': + $parser = xml_parser_create(); + xml_set_element_handler($parser, '_startElement', '_endElement'); + xml_set_character_data_handler($parser, '_charHandler'); + + while (!feof($fd)) { + $line = fgets($fd, 4096); + xml_parse($parser, $line); + } + + xml_parser_free($parser); + break; + default: + // Unknown type + $data->rollbackTransaction(); + $misc->printMsg($lang['strinvalidparam']); + exit; + } + + $status = $data->endTransaction(); + if ($status != 0) { + $misc->printMsg($lang['strimporterror']); + exit; + } + fclose($fd); + + $misc->printMsg($lang['strfileimported']); + } + else { + // File could not be opened + $misc->printMsg($lang['strimporterror']); + } + } + else { + // Upload went wrong + $misc->printMsg($lang['strimporterror-uploadedfile']); + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dbexport.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dbexport.php new file mode 100644 index 00000000..d7320817 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/dbexport.php @@ -0,0 +1,139 @@ +<?php + /** + * Does an export of a database, schema, or table (via pg_dump) + * to the screen or as a download. + * + * $Id: dbexport.php,v 1.22 2007/03/25 03:15:09 xzilla Exp $ + */ + + // Prevent timeouts on large exports (non-safe mode only) + if (!ini_get('safe_mode')) set_time_limit(0); + + // Include application functions + $_no_output = true; + $f_schema = $f_object = ''; + include_once('./libraries/lib.inc.php'); + + // Are we doing a cluster-wide dump or just a per-database dump + $dumpall = ($_REQUEST['subject'] == 'server'); + + // Check that database dumps are enabled. + if ($misc->isDumpEnabled($dumpall)) { + + $server_info = $misc->getServerInfo(); + + // Get the path of the pg_dump/pg_dumpall executable + $exe = $misc->escapeShellCmd($server_info[$dumpall ? 'pg_dumpall_path' : 'pg_dump_path']); + + // Obtain the pg_dump version number and check if the path is good + $version = array(); + preg_match("/(\d+(?:\.\d+)?)(?:\.\d+)?.*$/", exec($exe . " --version"), $version); + + if (empty($version)) { + if ($dumpall) + printf($lang['strbadpgdumpallpath'], $server_info['pg_dumpall_path']); + else + printf($lang['strbadpgdumppath'], $server_info['pg_dump_path']); + exit; + } + + // Make it do a download, if necessary + switch($_REQUEST['output']){ + case 'show': + header('Content-Type: text/plain'); + break; + case 'download': + // Set headers. MSIE is totally broken for SSL downloading, so + // we need to have it download in-place as plain text + if (strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') && isset($_SERVER['HTTPS'])) { + header('Content-Type: text/plain'); + } + else { + header('Content-Type: application/download'); + header('Content-Disposition: attachment; filename=dump.sql'); + } + break; + case 'gzipped': + // MSIE in SSL mode cannot do this - it should never get to this point + header('Content-Type: application/download'); + header('Content-Disposition: attachment; filename=dump.sql.gz'); + break; + } + + // Set environmental variables that pg_dump uses + putenv('PGPASSWORD=' . $server_info['password']); + putenv('PGUSER=' . $server_info['username']); + $hostname = $server_info['host']; + if ($hostname !== null && $hostname != '') { + putenv('PGHOST=' . $hostname); + } + $port = $server_info['port']; + if ($port !== null && $port != '') { + putenv('PGPORT=' . $port); + } + + // Build command for executing pg_dump. + $cmd = $exe; + + // we are PG 7.4+, so we always have a schema + if (isset($_REQUEST['schema'])) { + $f_schema = $_REQUEST['schema']; + $data->fieldClean($f_schema); + } + + // Check for a specified table/view + switch ($_REQUEST['subject']) { + case 'schema': + // This currently works for 8.2+ (due to the orthoganl -t -n issue introduced then) + $cmd .= " -n " . $misc->escapeShellArg("\"{$f_schema}\""); + break; + case 'table': + case 'view': + $f_object = $_REQUEST[$_REQUEST['subject']]; + $data->fieldClean($f_object); + + // Starting in 8.2, -n and -t are orthagonal, so we now schema qualify + // the table name in the -t argument and quote both identifiers + if ( ((float) $version[1]) >= 8.2 ) { + $cmd .= " -t " . $misc->escapeShellArg("\"{$f_schema}\".\"{$f_object}\""); + } + else { + // If we are 7.4 or higher, assume they are using 7.4 pg_dump and + // set dump schema as well. Also, mixed case dumping has been fixed + // then.. + $cmd .= " -t " . $misc->escapeShellArg($f_object) + . " -n " . $misc->escapeShellArg($f_schema); + } + } + + // Check for GZIP compression specified + if ($_REQUEST['output'] == 'gzipped' && !$dumpall) { + $cmd .= " -Z 9"; + } + + switch ($_REQUEST['what']) { + case 'dataonly': + $cmd .= ' -a'; + if ($_REQUEST['d_format'] == 'sql') $cmd .= ' --inserts'; + elseif (isset($_REQUEST['d_oids'])) $cmd .= ' -o'; + break; + case 'structureonly': + $cmd .= ' -s'; + if (isset($_REQUEST['s_clean'])) $cmd .= ' -c'; + break; + case 'structureanddata': + if ($_REQUEST['sd_format'] == 'sql') $cmd .= ' --inserts'; + elseif (isset($_REQUEST['sd_oids'])) $cmd .= ' -o'; + if (isset($_REQUEST['sd_clean'])) $cmd .= ' -c'; + break; + } + + if (!$dumpall) { + putenv('PGDATABASE=' . $_REQUEST['database']); + } + + // Execute command and return the output to the screen + passthru($cmd); + } + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/display.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/display.php new file mode 100644 index 00000000..f87a2153 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/display.php @@ -0,0 +1,879 @@ +<?php + + /** + * Common relation browsing function that can be used for views, + * tables, reports, arbitrary queries, etc. to avoid code duplication. + * @param $query The SQL SELECT string to execute + * @param $count The same SQL query, but only retrieves the count of the rows (AS total) + * @param $return The return section + * @param $page The current page + * + * $Id: display.php,v 1.68 2008/04/14 12:44:27 ioguix Exp $ + */ + + // Prevent timeouts on large exports (non-safe mode only) + if (!ini_get('safe_mode')) set_time_limit(0); + + // Include application functions + include_once('./libraries/lib.inc.php'); + + global $conf, $lang; + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * Show confirmation of edit and perform actual update + */ + function doEditRow($confirm, $msg = '') { + global $data, $misc, $conf; + global $lang; + + if (is_array($_REQUEST['key'])) + $key = $_REQUEST['key']; + else + $key = unserialize(urldecode($_REQUEST['key'])); + + if ($confirm) { + $misc->printTrail($_REQUEST['subject']); + $misc->printTitle($lang['streditrow']); + $misc->printMsg($msg); + + $attrs = $data->getTableAttributes($_REQUEST['table']); + $rs = $data->browseRow($_REQUEST['table'], $key); + + if (($conf['autocomplete'] != 'disable')) { + $fksprops = $misc->getAutocompleteFKProperties($_REQUEST['table']); + if ($fksprops !== false) + echo $fksprops['code']; + } + else $fksprops = false; + + echo "<form action=\"display.php\" method=\"post\" id=\"ac_form\">\n"; + $elements = 0; + $error = true; + if ($rs->recordCount() == 1 && $attrs->recordCount() > 0) { + echo "<table>\n"; + + // Output table header + echo "<tr><th class=\"data\">{$lang['strcolumn']}</th><th class=\"data\">{$lang['strtype']}</th>"; + echo "<th class=\"data\">{$lang['strformat']}</th>\n"; + echo "<th class=\"data\">{$lang['strnull']}</th><th class=\"data\">{$lang['strvalue']}</th></tr>"; + + $i = 0; + while (!$attrs->EOF) { + + $attrs->fields['attnotnull'] = $data->phpBool($attrs->fields['attnotnull']); + $id = (($i % 2) == 0 ? '1' : '2'); + + // Initialise variables + if (!isset($_REQUEST['format'][$attrs->fields['attname']])) + $_REQUEST['format'][$attrs->fields['attname']] = 'VALUE'; + + echo "<tr class=\"data{$id}\">\n"; + echo "<td style=\"white-space:nowrap;\">", $misc->printVal($attrs->fields['attname']), "</td>"; + echo "<td style=\"white-space:nowrap;\">\n"; + echo $misc->printVal($data->formatType($attrs->fields['type'], $attrs->fields['atttypmod'])); + echo "<input type=\"hidden\" name=\"types[", htmlspecialchars($attrs->fields['attname']), "]\" value=\"", + htmlspecialchars($attrs->fields['type']), "\" /></td>"; + $elements++; + echo "<td style=\"white-space:nowrap;\">\n"; + echo "<select name=\"format[", htmlspecialchars($attrs->fields['attname']), "]\">\n"; + echo "<option value=\"VALUE\"", ($_REQUEST['format'][$attrs->fields['attname']] == 'VALUE') ? ' selected="selected"' : '', ">{$lang['strvalue']}</option>\n"; + echo "<option value=\"EXPRESSION\"", ($_REQUEST['format'][$attrs->fields['attname']] == 'EXPRESSION') ? ' selected="selected"' : '', ">{$lang['strexpression']}</option>\n"; + echo "</select>\n</td>\n"; + $elements++; + echo "<td style=\"white-space:nowrap;\">"; + // Output null box if the column allows nulls (doesn't look at CHECKs or ASSERTIONS) + if (!$attrs->fields['attnotnull']) { + // Set initial null values + if ($_REQUEST['action'] == 'confeditrow' && $rs->fields[$attrs->fields['attname']] === null) { + $_REQUEST['nulls'][$attrs->fields['attname']] = 'on'; + } + echo "<label><span><input type=\"checkbox\" name=\"nulls[{$attrs->fields['attname']}]\"", + isset($_REQUEST['nulls'][$attrs->fields['attname']]) ? ' checked="checked"' : '', " /></span></label></td>\n"; + $elements++; + } + else + echo " </td>"; + + echo "<td id=\"row_att_{$attrs->fields['attnum']}\" style=\"white-space:nowrap;\">"; + + $extras = array(); + + // If the column allows nulls, then we put a JavaScript action on the data field to unset the + // NULL checkbox as soon as anything is entered in the field. We use the $elements variable to + // keep track of which element offset we're up to. We can't refer to the null checkbox by name + // as it contains '[' and ']' characters. + if (!$attrs->fields['attnotnull']) { + $extras['onChange'] = 'elements[' . ($elements - 1) . '].checked = false;'; + } + + if (($fksprops !== false) && isset($fksprops['byfield'][$attrs->fields['attnum']])) { + $extras['id'] = "attr_{$attrs->fields['attnum']}"; + $extras['autocomplete'] = 'off'; + } + + echo $data->printField("values[{$attrs->fields['attname']}]", $rs->fields[$attrs->fields['attname']], $attrs->fields['type'], $extras); + + echo "</td>"; + $elements++; + echo "</tr>\n"; + $i++; + $attrs->moveNext(); + } + echo "</table>\n"; + + $error = false; + } + elseif ($rs->recordCount() != 1) { + echo "<p>{$lang['strrownotunique']}</p>\n"; + } + else { + echo "<p>{$lang['strinvalidparam']}</p>\n"; + } + + echo "<input type=\"hidden\" name=\"action\" value=\"editrow\" />\n"; + echo $misc->form; + if (isset($_REQUEST['table'])) + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + if (isset($_REQUEST['subject'])) + echo "<input type=\"hidden\" name=\"subject\" value=\"", htmlspecialchars($_REQUEST['subject']), "\" />\n"; + if (isset($_REQUEST['query'])) + echo "<input type=\"hidden\" name=\"query\" value=\"", htmlspecialchars($_REQUEST['query']), "\" />\n"; + if (isset($_REQUEST['count'])) + echo "<input type=\"hidden\" name=\"count\" value=\"", htmlspecialchars($_REQUEST['count']), "\" />\n"; + if (isset($_REQUEST['return'])) + echo "<input type=\"hidden\" name=\"return\" value=\"", htmlspecialchars($_REQUEST['return']), "\" />\n"; + echo "<input type=\"hidden\" name=\"page\" value=\"", htmlspecialchars($_REQUEST['page']), "\" />\n"; + echo "<input type=\"hidden\" name=\"sortkey\" value=\"", htmlspecialchars($_REQUEST['sortkey']), "\" />\n"; + echo "<input type=\"hidden\" name=\"sortdir\" value=\"", htmlspecialchars($_REQUEST['sortdir']), "\" />\n"; + echo "<input type=\"hidden\" name=\"strings\" value=\"", htmlspecialchars($_REQUEST['strings']), "\" />\n"; + echo "<input type=\"hidden\" name=\"key\" value=\"", htmlspecialchars(urlencode(serialize($key))), "\" />\n"; + echo "<p>"; + if (!$error) echo "<input type=\"submit\" name=\"save\" accesskey=\"r\" value=\"{$lang['strsave']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + + if($fksprops !== false) { + if ($conf['autocomplete'] != 'default off') + echo "<input type=\"checkbox\" id=\"no_ac\" value=\"1\" checked=\"checked\" /><label for=\"no_ac\">{$lang['strac']}</label>\n"; + else + echo "<input type=\"checkbox\" id=\"no_ac\" value=\"0\" /><label for=\"no_ac\">{$lang['strac']}</label>\n"; + } + + echo "</p>\n"; + echo "</form>\n"; + } + else { + if (!isset($_POST['values'])) $_POST['values'] = array(); + if (!isset($_POST['nulls'])) $_POST['nulls'] = array(); + + $status = $data->editRow($_POST['table'], $_POST['values'], $_POST['nulls'], + $_POST['format'], $_POST['types'], $key); + if ($status == 0) + doBrowse($lang['strrowupdated']); + elseif ($status == -2) + doEditRow(true, $lang['strrownotunique']); + else + doEditRow(true, $lang['strrowupdatedbad']); + } + + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDelRow($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail($_REQUEST['subject']); + $misc->printTitle($lang['strdeleterow']); + + $rs = $data->browseRow($_REQUEST['table'], $_REQUEST['key']); + + echo "<form action=\"display.php\" method=\"post\">\n"; + echo $misc->form; + + if ($rs->recordCount() == 1) { + echo "<p>{$lang['strconfdeleterow']}</p>\n"; + + $fkinfo = array(); + echo "<table><tr>"; + printTableHeaderCells($rs, false, true); + echo "</tr>"; + echo "<tr class=\"data1\">\n"; + printTableRowCells($rs, $fkinfo, true); + echo "</tr>\n"; + echo "</table>\n"; + echo "<br />\n"; + + echo "<input type=\"hidden\" name=\"action\" value=\"delrow\" />\n"; + echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; + echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; + } + elseif ($rs->recordCount() != 1) { + echo "<p>{$lang['strrownotunique']}</p>\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + } + else { + echo "<p>{$lang['strinvalidparam']}</p>\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + } + if (isset($_REQUEST['table'])) + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + if (isset($_REQUEST['subject'])) + echo "<input type=\"hidden\" name=\"subject\" value=\"", htmlspecialchars($_REQUEST['subject']), "\" />\n"; + if (isset($_REQUEST['query'])) + echo "<input type=\"hidden\" name=\"query\" value=\"", htmlspecialchars($_REQUEST['query']), "\" />\n"; + if (isset($_REQUEST['count'])) + echo "<input type=\"hidden\" name=\"count\" value=\"", htmlspecialchars($_REQUEST['count']), "\" />\n"; + if (isset($_REQUEST['return'])) + echo "<input type=\"hidden\" name=\"return\" value=\"", htmlspecialchars($_REQUEST['return']), "\" />\n"; + echo "<input type=\"hidden\" name=\"page\" value=\"", htmlspecialchars($_REQUEST['page']), "\" />\n"; + echo "<input type=\"hidden\" name=\"sortkey\" value=\"", htmlspecialchars($_REQUEST['sortkey']), "\" />\n"; + echo "<input type=\"hidden\" name=\"sortdir\" value=\"", htmlspecialchars($_REQUEST['sortdir']), "\" />\n"; + echo "<input type=\"hidden\" name=\"strings\" value=\"", htmlspecialchars($_REQUEST['strings']), "\" />\n"; + echo "<input type=\"hidden\" name=\"key\" value=\"", htmlspecialchars(urlencode(serialize($_REQUEST['key']))), "\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->deleteRow($_POST['table'], unserialize(urldecode($_POST['key']))); + if ($status == 0) + doBrowse($lang['strrowdeleted']); + elseif ($status == -2) + doBrowse($lang['strrownotunique']); + else + doBrowse($lang['strrowdeletedbad']); + } + + } + + /* build & return the FK information data structure + * used when deciding if a field should have a FK link or not*/ + function &getFKInfo() { + global $data, $misc, $lang; + + // Get the foreign key(s) information from the current table + $fkey_information = array('byconstr' => array(), 'byfield' => array()); + + if (isset($_REQUEST['table'])) { + $constraints = $data->getConstraintsWithFields($_REQUEST['table']); + if ($constraints->recordCount() > 0) { + + $fkey_information['common_url'] = $misc->getHREF('schema') .'&subject=table'; + + /* build the FK constraints data structure */ + while (!$constraints->EOF) { + $constr =& $constraints->fields; + if ($constr['contype'] == 'f') { + + if (!isset($fkey_information['byconstr'][$constr['conid']])) { + $fkey_information['byconstr'][$constr['conid']] = array ( + 'url_data' => 'table='. urlencode($constr['f_table']) .'&schema='. urlencode($constr['f_schema']), + 'fkeys' => array(), + 'consrc' => $constr['consrc'] + ); + } + + $fkey_information['byconstr'][$constr['conid']]['fkeys'][$constr['p_field']] = $constr['f_field']; + + if (!isset($fkey_information['byfield'][$constr['p_field']])) + $fkey_information['byfield'][$constr['p_field']] = array(); + + $fkey_information['byfield'][$constr['p_field']][] = $constr['conid']; + } + $constraints->moveNext(); + } + } + } + + return $fkey_information; + } + + /* Print table header cells + * @param $args - associative array for sort link parameters + * */ + function printTableHeaderCells(&$rs, $args, $withOid) { + global $misc, $data, $conf; + $j = 0; + + foreach ($rs->fields as $k => $v) { + + if (($k === $data->id) && ( !($withOid && $conf['show_oids']) )) { + $j++; + continue; + } + $finfo = $rs->fetchField($j); + + if ($args === false) { + echo "<th class=\"data\">", $misc->printVal($finfo->name), "</th>\n"; + } + else { + $args['page'] = $_REQUEST['page']; + $args['sortkey'] = $j + 1; + // Sort direction opposite to current direction, unless it's currently '' + $args['sortdir'] = ( + $_REQUEST['sortdir'] == 'asc' + and $_REQUEST['sortkey'] == ($j + 1) + ) ? 'desc' : 'asc'; + + $sortLink = http_build_query($args); + + echo "<th class=\"data\"><a href=\"?{$sortLink}\">" + , $misc->printVal($finfo->name); + if($_REQUEST['sortkey'] == ($j + 1)) { + if($_REQUEST['sortdir'] == 'asc') + echo '<img src="'. $misc->icon('RaiseArgument') .'" alt="asc">'; + else echo '<img src="'. $misc->icon('LowerArgument') .'" alt="desc">'; + } + echo "</a></th>\n"; + } + $j++; + } + + reset($rs->fields); + } + + /* Print data-row cells */ + function printTableRowCells(&$rs, &$fkey_information, $withOid) { + global $data, $misc, $conf; + $j = 0; + + if (!isset($_REQUEST['strings'])) $_REQUEST['strings'] = 'collapsed'; + + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($j++); + + if (($k === $data->id) && ( !($withOid && $conf['show_oids']) )) continue; + elseif ($v !== null && $v == '') echo "<td> </td>"; + else { + echo "<td style=\"white-space:nowrap;\">"; + + if (($v !== null) && isset($fkey_information['byfield'][$k])) { + foreach ($fkey_information['byfield'][$k] as $conid) { + + $query_params = $fkey_information['byconstr'][$conid]['url_data']; + + foreach ($fkey_information['byconstr'][$conid]['fkeys'] as $p_field => $f_field) { + $query_params .= '&'. urlencode("fkey[{$f_field}]") .'='. urlencode($rs->fields[$p_field]); + } + + /* $fkey_information['common_url'] is already urlencoded */ + $query_params .= '&'. $fkey_information['common_url']; + echo "<div style=\"display:inline-block;\">"; + echo "<a class=\"fk fk_". htmlentities($conid, ENT_QUOTES, 'UTF-8') ."\" href=\"display.php?{$query_params}\">"; + echo "<img src=\"".$misc->icon('ForeignKey')."\" style=\"vertical-align:middle;\" alt=\"[fk]\" title=\"" + . htmlentities($fkey_information['byconstr'][$conid]['consrc'], ENT_QUOTES, 'UTF-8') + ."\" />"; + echo "</a>"; + echo "</div>"; + } + echo $misc->printVal($v, $finfo->type, array('null' => true, 'clip' => ($_REQUEST['strings']=='collapsed'), 'class' => 'fk_value')); + } else { + echo $misc->printVal($v, $finfo->type, array('null' => true, 'clip' => ($_REQUEST['strings']=='collapsed'))); + } + echo "</td>"; + } + } + } + + /* Print the FK row, used in ajax requests */ + function doBrowseFK() { + global $data, $misc, $lang; + + $ops = array(); + foreach($_REQUEST['fkey'] as $x => $y) { + $ops[$x] = '='; + } + $query = $data->getSelectSQL($_REQUEST['table'], array(), $_REQUEST['fkey'], $ops); + $_REQUEST['query'] = $query; + + $fkinfo =& getFKInfo(); + + $max_pages = 1; + // Retrieve page from query. $max_pages is returned by reference. + $rs = $data->browseQuery('SELECT', $_REQUEST['table'], $_REQUEST['query'], + null, null, 1, 1, $max_pages); + + echo "<a href=\"\" style=\"display:table-cell;\" class=\"fk_delete\"><img alt=\"[delete]\" src=\"". $misc->icon('Delete') ."\" /></a>\n"; + echo "<div style=\"display:table-cell;\">"; + + if (is_object($rs) && $rs->recordCount() > 0) { + /* we are browsing a referenced table here + * we should show OID if show_oids is true + * so we give true to withOid in functions bellow + * as 3rd paramter */ + + echo "<table><tr>"; + printTableHeaderCells($rs, false, true); + echo "</tr>"; + echo "<tr class=\"data1\">\n"; + printTableRowCells($rs, $fkinfo, true); + echo "</tr>\n"; + echo "</table>\n"; + } + else + echo $lang['strnodata']; + + echo "</div>"; + + exit; + } + + /** + * Displays requested data + */ + function doBrowse($msg = '') { + global $data, $conf, $misc, $lang, $plugin_manager; + + $save_history = false; + // If current page is not set, default to first page + if (!isset($_REQUEST['page'])) + $_REQUEST['page'] = 1; + if (!isset($_REQUEST['nohistory'])) + $save_history = true; + + if (isset($_REQUEST['subject'])) { + $subject = $_REQUEST['subject']; + if (isset($_REQUEST[$subject])) $object = $_REQUEST[$subject]; + } + else { + $subject = ''; + } + + $misc->printTrail(isset($subject) ? $subject : 'database'); + $misc->printTabs($subject,'browse'); + + /* This code is used when browsing FK in pure-xHTML (without js) */ + if (isset($_REQUEST['fkey'])) { + $ops = array(); + foreach($_REQUEST['fkey'] as $x => $y) { + $ops[$x] = '='; + } + $query = $data->getSelectSQL($_REQUEST['table'], array(), $_REQUEST['fkey'], $ops); + $_REQUEST['query'] = $query; + } + + if (isset($object)) { + if (isset($_REQUEST['query'])) { + $_SESSION['sqlquery'] = $_REQUEST['query']; + $misc->printTitle($lang['strselect']); + $type = 'SELECT'; + } + else { + $type = 'TABLE'; + } + } else { + $misc->printTitle($lang['strqueryresults']); + /*we comes from sql.php, $_SESSION['sqlquery'] has been set there */ + $type = 'QUERY'; + } + + $misc->printMsg($msg); + + // If 'sortkey' is not set, default to '' + if (!isset($_REQUEST['sortkey'])) $_REQUEST['sortkey'] = ''; + + // If 'sortdir' is not set, default to '' + if (!isset($_REQUEST['sortdir'])) $_REQUEST['sortdir'] = ''; + + // If 'strings' is not set, default to collapsed + if (!isset($_REQUEST['strings'])) $_REQUEST['strings'] = 'collapsed'; + + // Fetch unique row identifier, if this is a table browse request. + if (isset($object)) + $key = $data->getRowIdentifier($object); + else + $key = array(); + + // Set the schema search path + if (isset($_REQUEST['search_path'])) { + if ($data->setSearchPath(array_map('trim',explode(',',$_REQUEST['search_path']))) != 0) { + return; + } + } + + // Retrieve page from query. $max_pages is returned by reference. + $rs = $data->browseQuery($type, + isset($object) ? $object : null, + isset($_SESSION['sqlquery']) ? $_SESSION['sqlquery'] : null, + $_REQUEST['sortkey'], $_REQUEST['sortdir'], $_REQUEST['page'], + $conf['max_rows'], $max_pages); + + $fkey_information =& getFKInfo(); + + // Build strings for GETs in array + $_gets = array( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'] + ); + + if (isset($_REQUEST['schema'])) $_gets['schema'] = $_REQUEST['schema']; + if (isset($object)) $_gets[$subject] = $object; + if (isset($subject)) $_gets['subject'] = $subject; + if (isset($_REQUEST['query'])) $_gets['query'] = $_REQUEST['query']; + if (isset($_REQUEST['count'])) $_gets['count'] = $_REQUEST['count']; + if (isset($_REQUEST['return'])) $_gets['return'] = $_REQUEST['return']; + if (isset($_REQUEST['search_path'])) $_gets['search_path'] = $_REQUEST['search_path']; + if (isset($_REQUEST['table'])) $_gets['table'] = $_REQUEST['table']; + if (isset($_REQUEST['sortkey'])) $_gets['sortkey'] = $_REQUEST['sortkey']; + if (isset($_REQUEST['sortdir'])) $_gets['sortdir'] = $_REQUEST['sortdir']; + if (isset($_REQUEST['nohistory'])) $_gets['nohistory'] = $_REQUEST['nohistory']; + $_gets['strings'] = $_REQUEST['strings']; + + if ($save_history && is_object($rs) && ($type == 'QUERY')) //{ + $misc->saveScriptHistory($_REQUEST['query']); + + echo '<form method="POST" action="'.$_SERVER['REQUEST_URI'].'"><textarea width="90%" name="query" rows="5" cols="100" resizable="true">'; + if (isset($_REQUEST['query'])) { + $query = $_REQUEST['query']; + } else { + $query = "SELECT * FROM {$_REQUEST['schema']}"; + if ($_REQUEST['subject'] == 'view') { + $query = "{$query}.{$_REQUEST['view']};"; + } else { + $query = "{$query}.{$_REQUEST['table']};"; + } + } + //$query = isset($_REQUEST['query'])? $_REQUEST['query'] : "select * from {$_REQUEST['schema']}.{$_REQUEST['table']};"; + echo $query; + echo '</textarea><br><input type="submit"/></form>'; + + if (is_object($rs) && $rs->recordCount() > 0) { + // Show page navigation + $misc->printPages($_REQUEST['page'], $max_pages, $_gets); + + echo "<table id=\"data\">\n<tr>"; + + // Check that the key is actually in the result set. This can occur for select + // operations where the key fields aren't part of the select. XXX: We should + // be able to support this, somehow. + foreach ($key as $v) { + // If a key column is not found in the record set, then we + // can't use the key. + if (!in_array($v, array_keys($rs->fields))) { + $key = array(); + break; + } + } + + $buttons = array( + 'edit' => array ( + 'content' => $lang['stredit'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array_merge(array ( + 'action' => 'confeditrow', + 'strings' => $_REQUEST['strings'], + 'page' => $_REQUEST['page'], + ), $_gets) + ) + ) + ), + 'delete' => array ( + 'content' => $lang['strdelete'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array_merge(array ( + 'action' => 'confdelrow', + 'strings' => $_REQUEST['strings'], + 'page' => $_REQUEST['page'], + ), $_gets) + ) + ) + ), + ); + $actions = array( + 'actionbuttons' => &$buttons, + 'place' => 'display-browse' + ); + $plugin_manager->do_hook('actionbuttons', $actions); + + foreach (array_keys($actions['actionbuttons']) as $action) { + $actions['actionbuttons'][$action]['attr']['href']['urlvars'] = array_merge( + $actions['actionbuttons'][$action]['attr']['href']['urlvars'], + $_gets + ); + } + + $edit_params = isset($actions['actionbuttons']['edit'])? + $actions['actionbuttons']['edit']:array(); + $delete_params = isset($actions['actionbuttons']['delete'])? + $actions['actionbuttons']['delete']:array(); + + // Display edit and delete actions if we have a key + $colspan = count($buttons); + if ($colspan > 0 and count($key) > 0) + echo "<th colspan=\"{$colspan}\" class=\"data\">{$lang['stractions']}</th>\n"; + + /* we show OIDs only if we are in TABLE or SELECT type browsing */ + printTableHeaderCells($rs, $_gets, isset($object)); + + echo "</tr>\n"; + + $i = 0; + reset($rs->fields); + while (!$rs->EOF) { + $id = (($i % 2) == 0 ? '1' : '2'); + echo "<tr class=\"data{$id}\">\n"; + // Display edit and delete links if we have a key + if ($colspan > 0 and count($key) > 0) { + $keys_array = array(); + $has_nulls = false; + foreach ($key as $v) { + if ($rs->fields[$v] === null) { + $has_nulls = true; + break; + } + $keys_array["key[{$v}]"] = $rs->fields[$v]; + } + if ($has_nulls) { + echo "<td colspan=\"{$colspan}\"> </td>\n"; + } else { + + if (isset($actions['actionbuttons']['edit'])) { + $actions['actionbuttons']['edit'] = $edit_params; + $actions['actionbuttons']['edit']['attr']['href']['urlvars'] = array_merge( + $actions['actionbuttons']['edit']['attr']['href']['urlvars'], + $keys_array + ); + } + + if (isset($actions['actionbuttons']['delete'])) { + $actions['actionbuttons']['delete'] = $delete_params; + $actions['actionbuttons']['delete']['attr']['href']['urlvars'] = array_merge( + $actions['actionbuttons']['delete']['attr']['href']['urlvars'], + $keys_array + ); + } + + foreach ($actions['actionbuttons'] as $action) { + echo "<td class=\"opbutton{$id}\">"; + $misc->printLink($action); + echo "</td>\n"; + } + } + } + + print printTableRowCells($rs, $fkey_information, isset($object)); + + echo "</tr>\n"; + $rs->moveNext(); + $i++; + } + echo "</table>\n"; + + echo "<p>", $rs->recordCount(), " {$lang['strrows']}</p>\n"; + // Show page navigation + $misc->printPages($_REQUEST['page'], $max_pages, $_gets); + } + else echo "<p>{$lang['strnodata']}</p>\n"; + + // Navigation links + $navlinks = array(); + + $fields = array( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + ); + + if (isset($_REQUEST['schema'])) + $fields['schema'] = $_REQUEST['schema']; + + // Return + if (isset($_REQUEST['return'])) { + $urlvars = $misc->getSubjectParams($_REQUEST['return']); + + $navlinks['back'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => $urlvars['url'], + 'urlvars' => $urlvars['params'] + ) + ), + 'content' => $lang['strback'] + ); + } + + // Edit SQL link + if ($type == 'QUERY') + $navlinks['edit'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'database.php', + 'urlvars' => array_merge($fields, array ( + 'action' => 'sql', + 'paginate' => 'on', + )) + ) + ), + 'content' => $lang['streditsql'] + ); + + // Expand/Collapse + if ($_REQUEST['strings'] == 'expanded') + $navlinks['collapse'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array_merge( + $_gets, + array ( + 'strings' => 'collapsed', + 'page' => $_REQUEST['page'] + )) + ) + ), + 'content' => $lang['strcollapse'] + ); + else + $navlinks['collapse'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array_merge( + $_gets, + array ( + 'strings' => 'expanded', + 'page' => $_REQUEST['page'] + )) + ) + ), + 'content' => $lang['strexpand'] + ); + + // Create view and download + if (isset($_REQUEST['query']) && isset($rs) && is_object($rs) && $rs->recordCount() > 0) { + + + // Report views don't set a schema, so we need to disable create view in that case + if (isset($_REQUEST['schema'])) { + + $navlinks['createview'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'views.php', + 'urlvars' => array_merge($fields, array( + 'action' => 'create', + 'formDefinition' => $_REQUEST['query'] + )) + ) + ), + 'content' => $lang['strcreateview'] + ); + } + + $urlvars = array(); + if (isset($_REQUEST['search_path'])) + $urlvars['search_path'] = $_REQUEST['search_path']; + + $navlinks['download'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'dataexport.php', + 'urlvars' => array_merge($fields, $urlvars) + ) + ), + 'content' => $lang['strdownload'] + ); + } + + // Insert + if (isset($object) && (isset($subject) && $subject == 'table')) + $navlinks['insert'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array_merge($fields, array( + 'action' => 'confinsertrow', + 'table' => $object + )) + ) + ), + 'content' => $lang['strinsert'] + ); + + // Refresh + $navlinks['refresh'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array_merge( + $_gets, + array( + 'strings' => $_REQUEST['strings'], + 'page' => $_REQUEST['page'] + )) + ) + ), + 'content' => $lang['strrefresh'] + ); + + $misc->printNavLinks($navlinks, 'display-browse', get_defined_vars()); + } + + + /* shortcuts: this function exit the script for ajax purpose */ + if ($action == 'dobrowsefk') { + doBrowseFK(); + } + + $scripts = "<script src=\"js/display.js\" type=\"text/javascript\"></script>"; + + $scripts .= "<script type=\"text/javascript\">\n"; + $scripts .= "var Display = {\n"; + $scripts .= "errmsg: '". str_replace("'", "\'", $lang['strconnectionfail']) ."'\n"; + $scripts .= "};\n"; + $scripts .= "</script>\n"; + + // Set the title based on the subject of the request + if (isset($_REQUEST['subject']) && isset($_REQUEST[$_REQUEST['subject']])) { + if ($_REQUEST['subject'] == 'table') { + $misc->printHeader( + $lang['strtables'].': '.$_REQUEST[$_REQUEST['subject']], + $scripts + ); + } + else if ($_REQUEST['subject'] == 'view') { + $misc->printHeader( + $lang['strviews'].': '.$_REQUEST[$_REQUEST['subject']], + $scripts + ); + } + else if ($_REQUEST['subject'] == 'column') { + $misc->printHeader( + $lang['strcolumn'].': '.$_REQUEST[$_REQUEST['subject']], + $scripts + ); + } + } + else + $misc->printHeader($lang['strqueryresults']); + + $misc->printBody(); + + switch ($action) { + case 'editrow': + if (isset($_POST['save'])) doEditRow(false); + else doBrowse(); + break; + case 'confeditrow': + doEditRow(true); + break; + case 'delrow': + if (isset($_POST['yes'])) doDelRow(false); + else doBrowse(); + break; + case 'confdelrow': + doDelRow(true); + break; + default: + doBrowse(); + break; + } + + $misc->printFooter(); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/domains.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/domains.php new file mode 100644 index 00000000..a9b7e992 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/domains.php @@ -0,0 +1,587 @@ +<?php + + /** + * Manage domains in a database + * + * $Id: domains.php,v 1.34 2007/09/13 13:41:01 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Function to save after altering a domain + */ + function doSaveAlter() { + global $data, $lang; + + $status = $data->alterDomain($_POST['domain'], $_POST['domdefault'], + isset($_POST['domnotnull']), $_POST['domowner']); + if ($status == 0) + doProperties($lang['strdomainaltered']); + else + doAlter($lang['strdomainalteredbad']); + } + + /** + * Allow altering a domain + */ + function doAlter($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('domain'); + $misc->printTitle($lang['stralter'],'pg.domain.alter'); + $misc->printMsg($msg); + + // Fetch domain info + $domaindata = $data->getDomain($_REQUEST['domain']); + // Fetch all users + $users = $data->getUsers(); + + if ($domaindata->recordCount() > 0) { + if (!isset($_POST['domname'])) { + $_POST['domtype'] = $domaindata->fields['domtype']; + $_POST['domdefault'] = $domaindata->fields['domdef']; + $domaindata->fields['domnotnull'] = $data->phpBool($domaindata->fields['domnotnull']); + if ($domaindata->fields['domnotnull']) $_POST['domnotnull'] = 'on'; + $_POST['domowner'] = $domaindata->fields['domowner']; + } + + // Display domain info + echo "<form action=\"domains.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data left required\" style=\"width: 70px\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($domaindata->fields['domname']), "</td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strtype']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($domaindata->fields['domtype']), "</td></tr>\n"; + echo "<tr><th class=\"data left\"><label for=\"domnotnull\">{$lang['strnotnull']}</label></th>\n"; + echo "<td class=\"data1\"><input type=\"checkbox\" id=\"domnotnull\" name=\"domnotnull\"", (isset($_POST['domnotnull']) ? ' checked="checked"' : ''), " /></td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strdefault']}</th>\n"; + echo "<td class=\"data1\"><input name=\"domdefault\" size=\"32\" value=\"", + htmlspecialchars($_POST['domdefault']), "\" /></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "<td class=\"data1\"><select name=\"domowner\">"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $_POST['domowner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "</select></td></tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_alter\" />\n"; + echo "<input type=\"hidden\" name=\"domain\" value=\"", htmlspecialchars($_REQUEST['domain']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Confirm and then actually add a CHECK constraint + */ + function addCheck($confirm, $msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['name'])) $_POST['name'] = ''; + if (!isset($_POST['definition'])) $_POST['definition'] = ''; + + if ($confirm) { + $misc->printTrail('domain'); + $misc->printTitle($lang['straddcheck'],'pg.constraint.check'); + $misc->printMsg($msg); + + echo "<form action=\"domains.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strname']}</th>\n"; + echo "<th class=\"data required\">{$lang['strdefinition']}</th></tr>\n"; + + echo "<tr><td class=\"data1\"><input name=\"name\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" /></td>\n"; + + echo "<td class=\"data1\">(<input name=\"definition\" size=\"32\" value=\"", + htmlspecialchars($_POST['definition']), "\" />)</td></tr>\n"; + echo "</table>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_add_check\" />\n"; + echo "<input type=\"hidden\" name=\"domain\" value=\"", htmlspecialchars($_REQUEST['domain']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"add\" value=\"{$lang['stradd']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + + } + else { + if (trim($_POST['definition']) == '') + addCheck(true, $lang['strcheckneedsdefinition']); + else { + $status = $data->addDomainCheckConstraint($_POST['domain'], + $_POST['definition'], $_POST['name']); + if ($status == 0) + doProperties($lang['strcheckadded']); + else + addCheck(true, $lang['strcheckaddedbad']); + } + } + } + + /** + * Show confirmation of drop constraint and perform actual drop + */ + function doDropConstraint($confirm, $msg = '') { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('domain'); + $misc->printTitle($lang['strdrop'],'pg.constraint.drop'); + $misc->printMsg($msg); + + echo "<p>", sprintf($lang['strconfdropconstraint'], $misc->printVal($_REQUEST['constraint']), + $misc->printVal($_REQUEST['domain'])), "</p>\n"; + echo "<form action=\"domains.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"drop_con\" />\n"; + echo "<input type=\"hidden\" name=\"domain\" value=\"", htmlspecialchars($_REQUEST['domain']), "\" />\n"; + echo "<input type=\"hidden\" name=\"constraint\" value=\"", htmlspecialchars($_REQUEST['constraint']), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->dropDomainConstraint($_POST['domain'], $_POST['constraint'], isset($_POST['cascade'])); + if ($status == 0) + doProperties($lang['strconstraintdropped']); + else + doDropConstraint(true, $lang['strconstraintdroppedbad']); + } + + } + + /** + * Show properties for a domain. Allow manipulating constraints as well. + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('domain'); + $misc->printTitle($lang['strproperties'],'pg.domain'); + $misc->printMsg($msg); + + $domaindata = $data->getDomain($_REQUEST['domain']); + + if ($domaindata->recordCount() > 0) { + // Show comment if any + if ($domaindata->fields['domcomment'] !== null) + echo "<p class=\"comment\">", $misc->printVal($domaindata->fields['domcomment']), "</p>\n"; + + // Display domain info + $domaindata->fields['domnotnull'] = $data->phpBool($domaindata->fields['domnotnull']); + echo "<table>\n"; + echo "<tr><th class=\"data left\" style=\"width: 70px\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($domaindata->fields['domname']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strtype']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($domaindata->fields['domtype']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strnotnull']}</th>\n"; + echo "<td class=\"data1\">", ($domaindata->fields['domnotnull'] ? 'NOT NULL' : ''), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strdefault']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($domaindata->fields['domdef']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strowner']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($domaindata->fields['domowner']), "</td></tr>\n"; + echo "</table>\n"; + + // Display domain constraints + echo "<h3>{$lang['strconstraints']}</h3>\n"; + if ($data->hasDomainConstraints()) { + $domaincons = $data->getDomainConstraints($_REQUEST['domain']); + + $columns = array ( + 'name' => array ( + 'title' => $lang['strname'], + 'field' => field('conname') + ), + 'definition' => array ( + 'title' => $lang['strdefinition'], + 'field' => field('consrc'), + ), + 'actions' => array ( + 'title' => $lang['stractions'], + ) + ); + + $actions = array ( + 'drop' => array ( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'domains.php', + 'urlvars' => array ( + 'action' => 'confirm_drop_con', + 'domain' => $_REQUEST['domain'], + 'constraint' => field('conname'), + 'type' => field('contype'), + ) + ) + ) + ) + ); + + $misc->printTable($domaincons, $columns, $actions, 'domains-properties', $lang['strnodata']); + } + } + else echo "<p>{$lang['strnodata']}</p>\n"; + + $navlinks = array ( + 'drop' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'domains.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'domain' => $_REQUEST['domain'] + ) + ) + ), + 'content' => $lang['strdrop'] + ) + ); + if ($data->hasAlterDomains()) { + $navlinks['addcheck'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'domains.php', + 'urlvars' => array ( + 'action' => 'add_check', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'domain' => $_REQUEST['domain'] + ) + ) + ), + 'content' => $lang['straddcheck'] + ); + $navlinks['alter'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'domains.php', + 'urlvars' => array ( + 'action' => 'alter', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'domain' => $_REQUEST['domain'] + ) + ) + ), + 'content' => $lang['stralter'] + ); + } + + $misc->printNavLinks($navlinks, 'domains-properties', get_defined_vars()); + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('domain'); + $misc->printTitle($lang['strdrop'],'pg.domain.drop'); + + echo "<p>", sprintf($lang['strconfdropdomain'], $misc->printVal($_REQUEST['domain'])), "</p>\n"; + echo "<form action=\"domains.php\" method=\"post\">\n"; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /><label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"domain\" value=\"", htmlspecialchars($_REQUEST['domain']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + $status = $data->dropDomain($_POST['domain'], isset($_POST['cascade'])); + if ($status == 0) + doDefault($lang['strdomaindropped']); + else + doDefault($lang['strdomaindroppedbad']); + } + + } + + /** + * Displays a screen where they can enter a new domain + */ + function doCreate($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['domname'])) $_POST['domname'] = ''; + if (!isset($_POST['domtype'])) $_POST['domtype'] = ''; + if (!isset($_POST['domlength'])) $_POST['domlength'] = ''; + if (!isset($_POST['domarray'])) $_POST['domarray'] = ''; + if (!isset($_POST['domdefault'])) $_POST['domdefault'] = ''; + if (!isset($_POST['domcheck'])) $_POST['domcheck'] = ''; + + $types = $data->getTypes(true); + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreatedomain'],'pg.domain.create'); + $misc->printMsg($msg); + + echo "<form action=\"domains.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data left required\" style=\"width: 70px\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\"><input name=\"domname\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['domname']), "\" /></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strtype']}</th>\n"; + echo "<td class=\"data1\">\n"; + // Output return type list + echo "<select name=\"domtype\">\n"; + while (!$types->EOF) { + echo "<option value=\"", htmlspecialchars($types->fields['typname']), "\"", + ($types->fields['typname'] == $_POST['domtype']) ? ' selected="selected"' : '', ">", + $misc->printVal($types->fields['typname']), "</option>\n"; + $types->moveNext(); + } + echo "</select>\n"; + + // Type length + echo "<input type=\"text\" size=\"4\" name=\"domlength\" value=\"", htmlspecialchars($_POST['domlength']), "\" />"; + + // Output array type selector + echo "<select name=\"domarray\">\n"; + echo "<option value=\"\"", ($_POST['domarray'] == '') ? ' selected="selected"' : '', "></option>\n"; + echo "<option value=\"[]\"", ($_POST['domarray'] == '[]') ? ' selected="selected"' : '', ">[ ]</option>\n"; + echo "</select></td></tr>\n"; + + echo "<tr><th class=\"data left\"><label for=\"domnotnull\">{$lang['strnotnull']}</label></th>\n"; + echo "<td class=\"data1\"><input type=\"checkbox\" id=\"domnotnull\" name=\"domnotnull\"", + (isset($_POST['domnotnull']) ? ' checked="checked"' : ''), " /></td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strdefault']}</th>\n"; + echo "<td class=\"data1\"><input name=\"domdefault\" size=\"32\" value=\"", + htmlspecialchars($_POST['domdefault']), "\" /></td></tr>\n"; + if ($data->hasDomainConstraints()) { + echo "<tr><th class=\"data left\">{$lang['strconstraints']}</th>\n"; + echo "<td class=\"data1\">CHECK (<input name=\"domcheck\" size=\"32\" value=\"", + htmlspecialchars($_POST['domcheck']), "\" />)</td></tr>\n"; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new domain in the database + */ + function doSaveCreate() { + global $data, $lang; + + if (!isset($_POST['domcheck'])) $_POST['domcheck'] = ''; + + // Check that they've given a name and a definition + if ($_POST['domname'] == '') doCreate($lang['strdomainneedsname']); + else { + $status = $data->createDomain($_POST['domname'], $_POST['domtype'], $_POST['domlength'], $_POST['domarray'] != '', + isset($_POST['domnotnull']), $_POST['domdefault'], $_POST['domcheck']); + if ($status == 0) + doDefault($lang['strdomaincreated']); + else + doCreate($lang['strdomaincreatedbad']); + } + } + + /** + * Show default list of domains in the database + */ + function doDefault($msg = '') { + global $data, $conf, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','domains'); + $misc->printMsg($msg); + + $domains = $data->getDomains(); + + $columns = array( + 'domain' => array( + 'title' => $lang['strdomain'], + 'field' => field('domname'), + 'url' => "domains.php?action=properties&{$misc->href}&", + 'vars' => array('domain' => 'domname'), + ), + 'type' => array( + 'title' => $lang['strtype'], + 'field' => field('domtype'), + ), + 'notnull' => array( + 'title' => $lang['strnotnull'], + 'field' => field('domnotnull'), + 'type' => 'bool', + 'params'=> array('true' => 'NOT NULL', 'false' => ''), + ), + 'default' => array( + 'title' => $lang['strdefault'], + 'field' => field('domdef'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('domowner'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('domcomment'), + ), + ); + + $actions = array( + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'domains.php', + 'urlvars' => array ( + 'action' => 'alter', + 'domain' => field('domname') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'domains.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'domain' => field('domname') + ) + ) + ) + ), + ); + + if (!$data->hasAlterDomains()) unset($actions['alter']); + + $misc->printTable($domains, $columns, $actions, 'domains-domains', $lang['strnodomains']); + + $navlinks = array ( + 'create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'domains.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + ) + ) + ), + 'content' => $lang['strcreatedomain'] + ) + ); + $misc->printNavLinks($navlinks, 'domains-domains', get_defined_vars()); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $domains = $data->getDomains(); + + $reqvars = $misc->getRequestVars('domain'); + + $attrs = array( + 'text' => field('domname'), + 'icon' => 'Domain', + 'toolTip'=> field('domcomment'), + 'action' => url('domains.php', + $reqvars, + array( + 'action' => 'properties', + 'domain' => field('domname') + ) + ) + ); + + $misc->printTree($domains, $attrs, 'domains'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strdomains']); + $misc->printBody(); + + switch ($action) { + case 'add_check': + addCheck(true); + break; + case 'save_add_check': + if (isset($_POST['cancel'])) doProperties(); + else addCheck(false); + break; + case 'drop_con': + if (isset($_POST['drop'])) doDropConstraint(false); + else doProperties(); + break; + case 'confirm_drop_con': + doDropConstraint(true); + break; + case 'save_create': + if (isset($_POST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'save_alter': + if (isset($_POST['alter'])) doSaveAlter(); + else doProperties(); + break; + case 'alter': + doAlter(); + break; + case 'properties': + doProperties(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/fulltext.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/fulltext.php new file mode 100644 index 00000000..da8b92b0 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/fulltext.php @@ -0,0 +1,1120 @@ +<?php + + /** + * Manage fulltext configurations, dictionaries and mappings + * + * $Id: fulltext.php,v 1.6 2008/03/17 21:35:48 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','fulltext'); + $misc->printTabs('fulltext','ftsconfigs'); + $misc->printMsg($msg); + + $cfgs = $data->getFtsConfigurations(false); + + $columns = array( + 'configuration' => array( + 'title' => $lang['strftsconfig'], + 'field' => field('name'), + 'url' => "fulltext.php?action=viewconfig&{$misc->href}&", + 'vars' => array('ftscfg' => 'name'), + ), + 'schema' => array( + 'title' => $lang['strschema'], + 'field' => field('schema'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('comment'), + ), + ); + + $actions = array( + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'dropconfig', + 'ftscfg' => field('name') + ) + ) + ) + ), + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'alterconfig', + 'ftscfg' => field('name') + ) + ) + ) + ), + ); + + $misc->printTable($cfgs, $columns, $actions, 'fulltext-fulltext', $lang['strftsnoconfigs']); + + $navlinks = array( + 'createconf' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'createconfig', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strftscreateconfig'] + ) + ); + + $misc->printNavLinks($navlinks, 'fulltext-fulltext', get_defined_vars()); + } + + function doDropConfig($confirm) { + global $data, $data, $misc; + global $lang, $_reload_browser; + + if ($confirm) { + $misc->printTrail('ftscfg'); + $misc->printTitle($lang['strdrop'], 'pg.ftscfg.drop'); + + echo "<p>", sprintf($lang['strconfdropftsconfig'], $misc->printVal($_REQUEST['ftscfg'])), "</p>\n"; + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"dropconfig\" />\n"; + echo "<input type=\"hidden\" name=\"database\" value=\"", htmlspecialchars($_REQUEST['database']), "\" />\n"; + echo "<input type=\"hidden\" name=\"ftscfg\" value=\"", htmlspecialchars($_REQUEST['ftscfg']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + $status = $data->dropFtsConfiguration($_POST['ftscfg'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strftsconfigdropped']); + } + else + doDefault($lang['strftsconfigdroppedbad']); + } + + } + + function doDropDict($confirm) { + global $data, $data, $misc; + global $lang, $_reload_browser; + + if ($confirm) { + $misc->printTrail('ftscfg'); // TODO: change to smth related to dictionary + $misc->printTitle($lang['strdrop'], 'pg.ftsdict.drop'); + + echo "<p>", sprintf($lang['strconfdropftsdict'], $misc->printVal($_REQUEST['ftsdict'])), "</p>\n"; + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"dropdict\" />\n"; + echo "<input type=\"hidden\" name=\"database\" value=\"", htmlspecialchars($_REQUEST['database']), "\" />\n"; + echo "<input type=\"hidden\" name=\"ftsdict\" value=\"", htmlspecialchars($_REQUEST['ftsdict']), "\" />\n"; + //echo "<input type=\"hidden\" name=\"ftscfg\" value=\"", htmlspecialchars($_REQUEST['ftscfg']), "\" />\n"; + echo "<input type=\"hidden\" name=\"prev_action\" value=\"viewdicts\" /></p>\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + $status = $data->dropFtsDictionary($_POST['ftsdict'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doViewDicts($lang['strftsdictdropped']); + } + else + doViewDicts($lang['strftsdictdroppedbad']); + } + + } + + /** + * Displays a screen where one can enter a new FTS configuration + */ + function doCreateConfig($msg = '') { + global $data, $misc; + global $lang; + + include_once('./classes/Gui.php'); + + $server_info = $misc->getServerInfo(); + + if (!isset($_POST['formName'])) $_POST['formName'] = ''; + if (!isset($_POST['formParser'])) $_POST['formParser'] = ''; + if (!isset($_POST['formTemplate'])) $_POST['formTemplate'] = ''; + if (!isset($_POST['formWithMap'])) $_POST['formWithMap'] = ''; + if (!isset($_POST['formComment'])) $_POST['formComment'] = ''; + + // Fetch all FTS configurations from the database + $ftscfgs = $data->getFtsConfigurations(); + // Fetch all FTS parsers from the database + $ftsparsers = $data->getFtsParsers(); + + $misc->printTrail('schema'); + $misc->printTitle($lang['strftscreateconfig'], 'pg.ftscfg.create'); + $misc->printMsg($msg); + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + echo "<table>\n"; + /* conf name */ + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\"><input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formName']), "\" /></td>\n\t</tr>\n"; + + // Template + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftstemplate']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + + $tpls = array(); + $tplsel = ''; + while (!$ftscfgs->EOF) { + $data->fieldClean($ftscfgs->fields['schema']); + $data->fieldClean($ftscfgs->fields['name']); + $tplname = $ftscfgs->fields['schema'] .'.'. $ftscfgs->fields['name']; + $tpls[$tplname] = serialize(array( + 'name' => $ftscfgs->fields['name'], + 'schema' => $ftscfgs->fields['schema'] + )); + if ($_POST['formTemplate'] == $tpls[$tplname]) { + $tplsel = htmlspecialchars($tpls[$tplname]); + } + $ftscfgs->moveNext(); + } + echo GUI::printCombo($tpls, 'formTemplate', true, $tplsel, false); + echo "\n\t\t</td>\n\t</tr>\n"; + + // Parser + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftsparser']}</th>\n"; + echo "\t\t<td class=\"data1\">\n"; + $ftsparsers_ = array(); + $ftsparsel = ''; + while (!$ftsparsers->EOF) { + $data->fieldClean($ftsparsers->fields['schema']); + $data->fieldClean($ftsparsers->fields['name']); + $parsername = $ftsparsers->fields['schema'] .'.'. $ftsparsers->fields['name']; + + $ftsparsers_[$parsername] = serialize(array( + 'parser' => $ftsparsers->fields['name'], + 'schema' => $ftsparsers->fields['schema'] + )); + if ($_POST['formParser'] == $ftsparsers_[$parsername]) { + $ftsparsel = htmlspecialchars($ftsparsers_[$parsername]); + } + $ftsparsers->moveNext(); + } + echo GUI::printCombo($ftsparsers_, 'formParser', true, $ftsparsel, false); + echo "\n\t\t</td>\n\t</tr>\n"; + + // Comment + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea name=\"formComment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_POST['formComment']), "</textarea></td>\n\t</tr>\n"; + + echo "</table>\n"; + echo "<p>\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"createconfig\" />\n"; + echo "<input type=\"hidden\" name=\"database\" value=\"", htmlspecialchars($_REQUEST['database']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"create\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new FTS configuration in the database + */ + function doSaveCreateConfig() { + global $data, $lang, $_reload_browser; + + $err = ''; + // Check that they've given a name + if ($_POST['formName'] == '') $err .= "{$lang['strftsconfigneedsname']}<br />"; + if (($_POST['formParser'] != '') && ($_POST['formTemplate'] != '')) $err .= "{$lang['strftscantparsercopy']}<br />"; + + if ($err != '') return doCreateConfig($err); + + if ($_POST['formParser'] != '') $formParser = unserialize($_POST['formParser']); + else $formParser = ''; + if ($_POST['formTemplate'] != '') $formTemplate = unserialize($_POST['formTemplate']); + else $formTemplate = ''; + + $status = $data->createFtsConfiguration($_POST['formName'], $formParser, $formTemplate, $_POST['formComment']); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strftsconfigcreated']); + } + else + doCreateConfig($lang['strftsconfigcreatedbad']); + } + + /** + * Display a form to permit editing FTS configuration properies. + */ + function doAlterConfig($msg = '') { + global $data, $misc, $lang; + + $misc->printTrail('ftscfg'); + $misc->printTitle($lang['stralter'], 'pg.ftscfg.alter'); + $misc->printMsg($msg); + + $ftscfg = $data->getFtsConfigurationByName($_REQUEST['ftscfg']); + if ($ftscfg->recordCount() > 0) { + if (!isset($_POST['formComment'])) $_POST['formComment'] = $ftscfg->fields['comment']; + if (!isset($_POST['ftscfg'])) $_POST['ftscfg'] = $_REQUEST['ftscfg']; + if (!isset($_POST['formName'])) $_POST['formName'] = $_REQUEST['ftscfg']; + if (!isset($_POST['formParser'])) $_POST['formParser'] = ''; + + // Fetch all FTS parsers from the database + $ftsparsers = $data->getFtsParsers(); + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + echo "<table>\n"; + + echo "\t<tr>\n"; + echo "\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + echo "\t\t\t<input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formName']), "\" />\n"; + echo "\t\t</td>\n"; + echo "\t</tr>\n"; + + // Comment + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea cols=\"32\" rows=\"3\"name=\"formComment\">", htmlspecialchars($_POST['formComment']), "</textarea></td>\n"; + echo "\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"alterconfig\" />\n"; + echo "<input type=\"hidden\" name=\"ftscfg\" value=\"", htmlspecialchars($_POST['ftscfg']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } else { + echo "<p>{$lang['strnodata']}</p>\n"; + } + } + + /** + * Save the form submission containing changes to a FTS configuration + */ + function doSaveAlterConfig() { + global $data, $misc, $lang; + + $status = $data->updateFtsConfiguration($_POST['ftscfg'], $_POST['formComment'], $_POST['formName']); + if ($status == 0) + doDefault($lang['strftsconfigaltered']); + else + doAlterConfig($lang['strftsconfigalteredbad']); + } + + /** + * View list of FTS parsers + */ + function doViewParsers($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','fulltext'); + $misc->printTabs('fulltext','ftsparsers'); + $misc->printMsg($msg); + + $parsers = $data->getFtsParsers(false); + + $columns = array( + 'schema' => array( + 'title' => $lang['strschema'], + 'field' => field('schema'), + ), + 'name' => array( + 'title' => $lang['strname'], + 'field' => field('name'), + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('comment'), + ), + ); + + $actions = array(); + + $misc->printTable($parsers, $columns, $actions, 'fulltext-viewparsers', $lang['strftsnoparsers']); + + //TODO: navlink to "create parser" + } + + + /** + * View list of FTS dictionaries + */ + function doViewDicts($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','fulltext'); + $misc->printTabs('fulltext','ftsdicts'); + $misc->printMsg($msg); + + $dicts = $data->getFtsDictionaries(false); + + $columns = array( + 'schema' => array( + 'title' => $lang['strschema'], + 'field' => field('schema'), + ), + 'name' => array( + 'title' => $lang['strname'], + 'field' => field('name'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('comment'), + ), + ); + + $actions = array( + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'dropdict', + 'ftsdict' => field('name') + ) + ) + ) + ), + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'alterdict', + 'ftsdict' => field('name') + ) + ) + ) + ), + ); + + $misc->printTable($dicts, $columns, $actions, 'fulltext-viewdicts', $lang['strftsnodicts']); + + $navlinks = array( + 'createdict' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'createdict', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + ) + ) + ), + 'content' => $lang['strftscreatedict'] + ) + ); + + $misc->printNavLinks($navlinks, 'fulltext-viewdicts', get_defined_vars()); + } + + + /** + * View details of FTS configuration given + */ + function doViewConfig($ftscfg, $msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('ftscfg'); + $misc->printTabs('schema','fulltext'); + $misc->printTabs('fulltext','ftsconfigs'); + $misc->printMsg($msg); + + echo "<h3>{$lang['strftsconfigmap']}</h3>\n"; + + $map = $data->getFtsConfigurationMap($ftscfg); + + $columns = array( + 'name' => array( + 'title' => $lang['strftsmapping'], + 'field' => field('name'), + ), + 'dictionaries' => array( + 'title' => $lang['strftsdicts'], + 'field' => field('dictionaries'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('description'), + ), + ); + + $actions = array( + 'drop' => array( + 'multiaction' => 'dropmapping', + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'dropmapping', + 'mapping' => field('name'), + 'ftscfg' => field('cfgname') + ) + ) + ) + ), + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'altermapping', + 'mapping' => field('name'), + 'ftscfg' => field('cfgname') + ) + ) + ) + ), + 'multiactions' => array( + 'keycols' => array('mapping' => 'name'), + 'url' => 'fulltext.php', + 'default' => null, + 'vars' => array('ftscfg' => $ftscfg), + ), + + ); + + $misc->printTable($map, $columns, $actions, 'fulltext-viewconfig', $lang['strftsemptymap']); + + $navlinks = array( + 'addmapping' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'fulltext.php', + 'urlvars' => array ( + 'action' => 'addmapping', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'ftscfg' => $ftscfg + ) + ) + ), + 'content' => $lang['strftsaddmapping'] + ) + ); + + $misc->printNavLinks($navlinks, 'fulltext-viewconfig', get_defined_vars()); + } + + /** + * Displays a screen where one can enter a details of a new FTS dictionary + */ + function doCreateDict($msg = '') { + global $data, $misc; + global $lang; + + include_once('./classes/Gui.php'); + + $server_info = $misc->getServerInfo(); + + if (!isset($_POST['formName'])) $_POST['formName'] = ''; + if(!isset($_POST['formIsTemplate'])) $_POST['formIsTemplate'] = false; + if (!isset($_POST['formTemplate'])) $_POST['formTemplate'] = ''; + if (!isset($_POST['formLexize'])) $_POST['formLexize'] = ''; + if (!isset($_POST['formInit'])) $_POST['formInit'] = ''; + if (!isset($_POST['formOption'])) $_POST['formOption'] = ''; + if (!isset($_POST['formComment'])) $_POST['formComment'] = ''; + + // Fetch all FTS dictionaries from the database + $ftstpls = $data->getFtsDictionaryTemplates(); + + $misc->printTrail('schema'); + // TODO: create doc links + $misc->printTitle($lang['strftscreatedict'], 'pg.ftsdict.create'); + $misc->printMsg($msg); + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\"><input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formName']), "\" /> ", + "<input type=\"checkbox\" name=\"formIsTemplate\" id=\"formIsTemplate\"", $_POST['formIsTemplate'] ? ' checked="checked" ' : '', " />\n", + "<label for=\"formIsTemplate\">{$lang['strftscreatedicttemplate']}</label></td>\n\t</tr>\n"; + + // Template + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftstemplate']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + $tpls = array(); + $tplsel = ''; + while (!$ftstpls->EOF) { + $data->fieldClean($ftstpls->fields['schema']); + $data->fieldClean($ftstpls->fields['name']); + $tplname = $ftstpls->fields['schema'] .'.'. $ftstpls->fields['name']; + $tpls[$tplname] = serialize(array( + 'name' => $ftstpls->fields['name'], + 'schema' => $ftstpls->fields['schema'] + )); + if ($_POST['formTemplate'] == $tpls[$tplname]) { + $tplsel = htmlspecialchars($tpls[$tplname]); + } + $ftstpls->moveNext(); + } + echo GUI::printCombo($tpls, 'formTemplate', true, $tplsel, false); + echo "\n\t\t</td>\n\t</tr>\n"; + + // TODO: what about maxlengths? + // Lexize + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftslexize']}</th>\n"; + echo "\t\t<td class=\"data1\"><input name=\"formLexize\" size=\"32\" maxlength=\"1000\" value=\"", + htmlspecialchars($_POST['formLexize']), "\" ", isset($_POST['formIsTemplate']) ? '' : ' disabled="disabled" ', + "/></td>\n\t</tr>\n"; + + // Init + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftsinit']}</th>\n"; + echo "\t\t<td class=\"data1\"><input name=\"formInit\" size=\"32\" maxlength=\"1000\" value=\"", + htmlspecialchars($_POST['formInit']), "\"", @$_POST['formIsTemplate'] ? '' : ' disabled="disabled" ', + "/></td>\n\t</tr>\n"; + + // Option + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftsoptionsvalues']}</th>\n"; + echo "\t\t<td class=\"data1\"><input name=\"formOption\" size=\"32\" maxlength=\"1000\" value=\"", + htmlspecialchars($_POST['formOption']), "\" /></td>\n\t</tr>\n"; + + // Comment + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea name=\"formComment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_POST['formComment']), "</textarea></td>\n\t</tr>\n"; + + echo "</table>\n"; + echo "<p>\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"createdict\" />\n"; + echo "<input type=\"hidden\" name=\"database\" value=\"", htmlspecialchars($_REQUEST['database']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"create\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</p>\n"; + echo "</form>\n", + "<script type=\"text/javascript\"> + function templateOpts() { + isTpl = document.getElementsByName('formIsTemplate')[0].checked; + document.getElementsByName('formTemplate')[0].disabled = isTpl; + document.getElementsByName('formOption')[0].disabled = isTpl; + document.getElementsByName('formLexize')[0].disabled = !isTpl; + document.getElementsByName('formInit')[0].disabled = !isTpl; + } + + document.getElementsByName('formIsTemplate')[0].onchange = templateOpts; + + templateOpts(); + </script>\n"; + } + + /** + * Actually creates the new FTS dictionary in the database + */ + function doSaveCreateDict() { + global $data, $lang, $_reload_browser; + + // Check that they've given a name + if ($_POST['formName'] == '') doCreateDict($lang['strftsdictneedsname']); + else { + + if(!isset($_POST['formIsTemplate'])) $_POST['formIsTemplate'] = false; + if(isset($_POST['formTemplate'])) + $formTemplate = unserialize($_POST['formTemplate']); + else + $formTemplate = ''; + if(!isset($_POST['formLexize'])) $_POST['formLexize'] = ''; + if(!isset($_POST['formInit'])) $_POST['formInit'] = ''; + if(!isset($_POST['formOption'])) $_POST['formOption'] = ''; + + $status = $data->createFtsDictionary($_POST['formName'], $_POST['formIsTemplate'], + $formTemplate, $_POST['formLexize'], + $_POST['formInit'], $_POST['formOption'], $_POST['formComment'] + ); + + if ($status == 0) { + $_reload_browser = true; + doViewDicts($lang['strftsdictcreated']); + } + else + doCreateDict($lang['strftsdictcreatedbad']); + } + } + + /** + * Display a form to permit editing FTS dictionary properies. + */ + function doAlterDict($msg = '') { + global $data, $misc, $lang; + + $misc->printTrail('ftscfg'); // TODO: change to smth related to dictionary + $misc->printTitle($lang['stralter'], 'pg.ftsdict.alter'); + $misc->printMsg($msg); + + $ftsdict = $data->getFtsDictionaryByName($_REQUEST['ftsdict']); + if ($ftsdict->recordCount() > 0) { + if (!isset($_POST['formComment'])) $_POST['formComment'] = $ftsdict->fields['comment']; + if (!isset($_POST['ftsdict'])) $_POST['ftsdict'] = $_REQUEST['ftsdict']; + if (!isset($_POST['formName'])) $_POST['formName'] = $_REQUEST['ftsdict']; + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + echo "<table>\n"; + + echo "\t<tr>\n"; + echo "\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + echo "\t\t\t<input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formName']), "\" />\n"; + echo "\t\t</td>\n"; + echo "\t</tr>\n"; + + // Comment + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea cols=\"32\" rows=\"3\"name=\"formComment\">", htmlspecialchars($_POST['formComment']), "</textarea></td>\n"; + echo "\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"alterdict\" />\n"; + echo "<input type=\"hidden\" name=\"ftsdict\" value=\"", htmlspecialchars($_POST['ftsdict']), "\" />\n"; + echo "<input type=\"hidden\" name=\"prev_action\" value=\"viewdicts\" /></p>\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } else { + echo "<p>{$lang['strnodata']}</p>\n"; + } + } + + /** + * Save the form submission containing changes to a FTS dictionary + */ + function doSaveAlterDict() { + global $data, $misc, $lang; + + $status = $data->updateFtsDictionary($_POST['ftsdict'], $_POST['formComment'], $_POST['formName']); + if ($status == 0) + doViewDicts($lang['strftsdictaltered']); + else + doAlterDict($lang['strftsdictalteredbad']); + } + + /** + * Show confirmation of drop and perform actual drop of FTS mapping + */ + function doDropMapping($confirm) { + global $data, $misc; + global $lang, $_reload_drop_database; + + if (empty($_REQUEST['mapping']) && empty($_REQUEST['ma'])) { + doDefault($lang['strftsspecifymappingtodrop']); + return; + } + + if (empty($_REQUEST['ftscfg'])) { + doDefault($lang['strftsspecifyconfigtoalter']); + return; + } + + if ($confirm) { + $misc->printTrail('ftscfg'); // TODO: proper breadcrumbs + $misc->printTitle($lang['strdrop'], 'pg.ftscfg.alter'); + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + + // Case of multiaction drop + if (isset($_REQUEST['ma'])) { + + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfdropftsmapping'], $misc->printVal($a['mapping']), $misc->printVal($_REQUEST['ftscfg'])), "</p>\n"; + printf('<input type="hidden" name="mapping[]" value="%s" />', htmlspecialchars($a['mapping'])); + } + + } else { + echo "<p>", sprintf($lang['strconfdropftsmapping'], $misc->printVal($_REQUEST['mapping']), $misc->printVal($_REQUEST['ftscfg'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"mapping\" value=\"", htmlspecialchars($_REQUEST['mapping']), "\" />\n"; + } + + echo "<input type=\"hidden\" name=\"ftscfg\" value=\"{$_REQUEST['ftscfg']}\" />\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"dropmapping\" />\n"; + echo "<input type=\"hidden\" name=\"prev_action\" value=\"viewconfig\" /></p>\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } else { + // Case of multiaction drop + if (is_array($_REQUEST['mapping'])) { + $status = $data->changeFtsMapping($_REQUEST['ftscfg'], $_REQUEST['mapping'], 'drop'); + if ($status != 0) { + doViewConfig($_REQUEST['ftscfg'], $lang['strftsmappingdroppedbad']); + return; + } + doViewConfig($_REQUEST['ftscfg'], $lang['strftsmappingdropped']); + } else { + $status = $data->changeFtsMapping($_REQUEST['ftscfg'], array($_REQUEST['mapping']), 'drop'); + if ($status == 0) { + doViewConfig($_REQUEST['ftscfg'], $lang['strftsmappingdropped']); + } else { + doViewConfig($_REQUEST['ftscfg'], $lang['strftsmappingdroppedbad']); + } + } + } + } + + function doAlterMapping($msg = '') { + global $data, $misc, $lang; + + $misc->printTrail('ftscfg'); + $misc->printTitle($lang['stralter'], 'pg.ftscfg.alter'); + $misc->printMsg($msg); + + $ftsdicts = $data->getFtsDictionaries(); + if ($ftsdicts->recordCount() > 0) { + if (!isset($_POST['formMapping'])) $_POST['formMapping'] = @$_REQUEST['mapping']; + if (!isset($_POST['formDictionary'])) $_POST['formDictionary'] = ''; + if (!isset($_POST['ftscfg'])) $_POST['ftscfg'] = $_REQUEST['ftscfg']; + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + + echo "<table>\n"; + echo "\t<tr>\n"; + echo "\t\t<th class=\"data left required\">{$lang['strftsmapping']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + + // Case of multiaction drop + if (isset($_REQUEST['ma'])) { + $ma_mappings = array(); + $ma_mappings_names = array(); + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + printf('<input type="hidden" name="formMapping[]" value="%s" />', htmlspecialchars($a['mapping'])); + $ma_mappings[] = $data->getFtsMappingByName($_POST['ftscfg'], $a['mapping']); + $ma_mappings_names[] = $a['mapping']; + } + echo implode(", ", $ma_mappings_names); + } else { + $mapping = $data->getFtsMappingByName($_POST['ftscfg'], $_POST['formMapping']); + echo $mapping->fields['name']; + echo "<input type=\"hidden\" name=\"formMapping\" value=\"", htmlspecialchars($_POST['formMapping']), "\" />\n"; + } + + echo "\t\t</td>\n"; + echo "\t</tr>\n"; + + + // Dictionary + echo "\t<tr>\n"; + echo "\t\t<th class=\"data left required\">{$lang['strftsdict']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + echo "\t\t\t<select name=\"formDictionary\">\n"; + while (!$ftsdicts->EOF) { + $ftsdict = htmlspecialchars($ftsdicts->fields['name']); + echo "\t\t\t\t<option value=\"{$ftsdict}\"", + ($ftsdict == $_POST['formDictionary'] || $ftsdict == @$mapping->fields['dictionaries'] || $ftsdict == @$ma_mappings[0]->fields['dictionaries']) ? ' selected="selected"' : '', ">{$ftsdict}</option>\n"; + $ftsdicts->moveNext(); + } + + echo "\t\t</td>\n"; + echo "\t</tr>\n"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"altermapping\" />\n"; + echo "<input type=\"hidden\" name=\"ftscfg\" value=\"", htmlspecialchars($_POST['ftscfg']), "\" />\n"; + echo "<input type=\"hidden\" name=\"prev_action\" value=\"viewconfig\" /></p>\n"; + + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } else { + echo "<p>{$lang['strftsnodictionaries']}</p>\n"; + } + } + + /** + * Save the form submission containing changes to a FTS mapping + */ + function doSaveAlterMapping() { + global $data, $misc, $lang; + + $mappingArray = (is_array($_POST['formMapping']) ? $_POST['formMapping'] : array($_POST['formMapping'])); + $status = $data->changeFtsMapping($_POST['ftscfg'], $mappingArray, 'alter', $_POST['formDictionary']); + if ($status == 0) + doViewConfig($_POST['ftscfg'], $lang['strftsmappingaltered']); + else + doAlterMapping($lang['strftsmappingalteredbad']); + } + + /** + * Show the form to enter parameters of a new FTS mapping + */ + function doAddMapping($msg = '') { + global $data, $misc, $lang; + + $misc->printTrail('ftscfg'); + $misc->printTitle($lang['stralter'], 'pg.ftscfg.alter'); + $misc->printMsg($msg); + + $ftsdicts = $data->getFtsDictionaries(); + if ($ftsdicts->recordCount() > 0) { + if (!isset($_POST['formMapping'])) $_POST['formMapping'] = ''; + if (!isset($_POST['formDictionary'])) $_POST['formDictionary'] = ''; + if (!isset($_POST['ftscfg'])) $_POST['ftscfg'] = $_REQUEST['ftscfg']; + $mappings = $data->getFtsMappings($_POST['ftscfg']); + + echo "<form action=\"fulltext.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n"; + echo "\t\t<th class=\"data left required\">{$lang['strftsmapping']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + echo "\t\t\t<select name=\"formMapping\">\n"; + while (!$mappings->EOF) { + $mapping = htmlspecialchars($mappings->fields['name']); + $mapping_desc = htmlspecialchars($mappings->fields['description']); + echo "\t\t\t\t<option value=\"{$mapping}\"", + $mapping == $_POST['formMapping'] ? ' selected="selected"' : '', ">{$mapping}", $mapping_desc ? " - {$mapping_desc}" : "", "</option>\n"; + $mappings->moveNext(); + } + echo "\t\t</td>\n"; + echo "\t</tr>\n"; + + + // Dictionary + echo "\t<tr>\n"; + echo "\t\t<th class=\"data left required\">{$lang['strftsdict']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + echo "\t\t\t<select name=\"formDictionary\">\n"; + while (!$ftsdicts->EOF) { + $ftsdict = htmlspecialchars($ftsdicts->fields['name']); + echo "\t\t\t\t<option value=\"{$ftsdict}\"", + $ftsdict == $_POST['formDictionary'] ? ' selected="selected"' : '', ">{$ftsdict}</option>\n"; + $ftsdicts->moveNext(); + } + + echo "\t\t</td>\n"; + echo "\t</tr>\n"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"addmapping\" />\n"; + echo "<input type=\"hidden\" name=\"ftscfg\" value=\"", htmlspecialchars($_POST['ftscfg']), "\" />\n"; + echo "<input type=\"hidden\" name=\"prev_action\" value=\"viewconfig\" /></p>\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"add\" value=\"{$lang['stradd']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } else { + echo "<p>{$lang['strftsnodictionaries']}</p>\n"; + } + } + + /** + * Save the form submission containing parameters of a new FTS mapping + */ + function doSaveAddMapping() { + global $data, $misc, $lang; + + $mappingArray = (is_array($_POST['formMapping']) ? $_POST['formMapping'] : array($_POST['formMapping'])); + $status = $data->changeFtsMapping($_POST['ftscfg'], $mappingArray, 'add', $_POST['formDictionary']); + if ($status == 0) + doViewConfig($_POST['ftscfg'], $lang['strftsmappingadded']); + else + doAddMapping($lang['strftsmappingaddedbad']); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data, $lang; + + $tabs = $misc->getNavTabs('fulltext'); + $items = $misc->adjustTabsForTree($tabs); + + $reqvars = $misc->getRequestVars('ftscfg'); + + $attrs = array( + 'text' => field('title'), + 'icon' => field('icon'), + 'action' => url('fulltext.php', + $reqvars, + field('urlvars') + ), + 'branch' => url('fulltext.php', + $reqvars, + array( + 'action' => 'subtree', + 'what' => field('icon') // IZ: yeah, it's ugly, but I do not want to change navigation tabs arrays + ) + ), + ); + + $misc->printTree($items, $attrs, 'fts'); + + exit; + } + + function doSubTree($what) { + global $misc, $data, $lang; + + switch($what) { + case 'FtsCfg': + $items = $data->getFtsConfigurations(false); + $urlvars = array('action' => 'viewconfig', 'ftscfg' => field('name')); + break; + case 'FtsDict': + $items = $data->getFtsDictionaries(false); + $urlvars = array('action' => 'viewdicts'); + break; + case 'FtsParser': + $items = $data->getFtsParsers(false); + $urlvars = array('action' => 'viewparsers'); + break; + default: + exit; + } + + $reqvars = $misc->getRequestVars('ftscfg'); + + $attrs = array( + 'text' => field('name'), + 'icon' => $what, + 'toolTip'=> field('comment'), + 'action' => url('fulltext.php', + $reqvars, + $urlvars + ), + 'branch' => ifempty(field('branch'), + '', + url('fulltext.php', + $reqvars, + array( + 'action' => 'subtree', + 'ftscfg' => field('name') + ) + ) + ), + ); + + $misc->printTree($items, $attrs, strtolower($what)); + exit; + } + + + if ($action == 'tree') doTree(); + if ($action == 'subtree') doSubTree($_REQUEST['what']); + + $misc->printHeader($lang['strschemas']); + $misc->printBody(); + + if (isset($_POST['cancel'])) { + if (isset($_POST['prev_action'])) { + $action = $_POST['prev_action']; + } else { + $action = ''; + } + } + + switch ($action) { + case 'createconfig': + if (isset($_POST['create'])) doSaveCreateConfig(); + else doCreateConfig(); + break; + case 'alterconfig': + if (isset($_POST['alter'])) doSaveAlterConfig(); + else doAlterConfig(); + break; + case 'dropconfig': + if (isset($_POST['drop'])) doDropConfig(false); + else doDropConfig(true); + break; + case 'viewconfig': + doViewConfig($_REQUEST['ftscfg']); + break; + case 'viewparsers': + doViewParsers(); + break; + case 'viewdicts': + doViewDicts(); + break; + case 'createdict': + if (isset($_POST['create'])) doSaveCreateDict(); + else doCreateDict(); + break; + case 'alterdict': + if (isset($_POST['alter'])) doSaveAlterDict(); + else doAlterDict(); + break; + case 'dropdict': + if (isset($_POST['drop'])) doDropDict(false); + else doDropDict(true); + break; + case 'dropmapping': + if (isset($_POST['drop'])) doDropMapping(false); + else doDropMapping(true); + break; + case 'altermapping': + if (isset($_POST['alter'])) doSaveAlterMapping(); + else doAlterMapping(); + break; + case 'addmapping': + if (isset($_POST['add'])) doSaveAddMapping(); + else doAddMapping(); + break; + + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/functions.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/functions.js new file mode 100644 index 00000000..3a93bf87 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/functions.js @@ -0,0 +1,204 @@ +var g_args = 0; +var g_no_args = new Boolean(false); +/* +function for adding arguments +*/ + +function addArg() { + var baseTR = baseArgTR(); + if(document.getElementById("args_table").insertBefore(baseTR,document.getElementById("parent_add_tr"))) { + g_args++; + return baseTR; + } +} + +function buildArgImages(orig_td) { + var table = document.createElement("table"); + var tbody = document.createElement("tbody"); + var tr = document.createElement("tr"); + var td = document.createElement("td"); + var img = document.createElement("img"); + img.src="images/themes/default/RaiseArgument.png"; + td.onmouseover=function() { this.style.cursor='pointer';this.title=g_lang_strargraise; } + td.onclick=function() { swapArgTR(this.parentNode.parentNode.parentNode.parentNode.parentNode.previousSibling,this.parentNode.parentNode.parentNode.parentNode.parentNode); } + img.className='arg_icon'; + td.appendChild(img); + td.className="data1"; + tr.appendChild(td); + var img = document.createElement("img"); + var td = document.createElement("td"); + img.src="images/themes/default/LowerArgument.png"; + img.className='arg_icon'; + td.appendChild(img); + td.className="data1"; + td.onmouseover=function() { this.style.cursor='pointer';this.title=g_lang_strarglower; } + td.onclick=function() { swapArgTR(this.parentNode.parentNode.parentNode.parentNode.parentNode,this.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling); } + tr.appendChild(td); + var img = document.createElement("img"); + var td = document.createElement("td"); + img.src="images/themes/default/RemoveArgument.png"; + img.title=g_lang_strargremove; + img.className='arg_icon'; + td.appendChild(img); + td.className="data1"; + td.onmouseover=function() { this.style.cursor='pointer';this.title='Remove'; } + td.onclick=function() { if(g_args>1) { if(confirm(g_lang_strargremoveconfirm)) document.getElementById("args_table").removeChild(this.parentNode.parentNode.parentNode.parentNode.parentNode);g_args--; } else { + if(g_no_args==false) { + disableArgTR(this.parentNode.parentNode.parentNode.parentNode.parentNode); + this.childNodes[0].src='images/themes/default/EnableArgument.png'; + this.childNodes[0].title=g_lang_strargenableargs; + this.childNodes[0].id="1st_arg_iag"; + alert(g_lang_strargnoargs); + g_no_args = true; + g_args--; + } else { + enableArgTR(this.parentNode.parentNode.parentNode.parentNode.parentNode); + this.childNodes[0].src='images/themes/default/RemoveArgument.png'; + this.childNodes[0].title=g_lang_strargremove; + g_args++; + g_no_args = false; + } + } + } + td.onmouseout=function() { } + if(g_args==0) { + td.id="1st_arg_td"; + } + tr.className='arg_tr_pc'; + tr.appendChild(td); + tbody.appendChild(tr); + table.appendChild(tbody); + orig_td.appendChild(table); + return orig_td; +} + +function noArgsRebuild(tr) { + disableArgTR(tr); + var td = document.getElementById("1st_arg_td"); + td.childNodes[0].src='images/themes/default/EnableArgument.png'; + td.childNodes[0].title=g_lang_strargenableargs; + td.childNodes[0].id="1st_arg_iag"; + g_no_args = true; + g_args--; +} + +function swapArgTR(first,second) { + var tmp = null; + tmp = second; + second = first; + first = tmp; + if(first.className=='arg_tr_pc' && second.className=='arg_tr_pc') { + document.getElementById("args_table").insertBefore(first,second); + } else if(first.className=='arg_tr_pc' && second.className!='arg_tr_pc') { + alert(g_lang_strargnorowabove); + } else if(first.className!='arg_tr_pc' && second.className=='arg_tr_pc') { + alert(g_lang_strargnorowbelow); + } +} + +function disableArgTR(tr) { + var children = (tr.childNodes); + for(i in children) { + var secondary_children = children[i].childNodes; + for(i2 in secondary_children) { + secondary_children[i2].disabled=true; + } + } +} + +function enableArgTR(tr) { + var children = (tr.childNodes); + for(i in children) { + var secondary_children = children[i].childNodes; + for(i2 in secondary_children) { + secondary_children[i2].disabled=false; + } + } +} + +function RebuildArgTR(mode,arg_name,arg_type,arg_array) { + var tr = document.createElement("tr"); + var td = document.createElement("td"); + var modes_select = buildSelect("formArgModes[]",g_main_modes,mode); + modes_select.style.width='100%'; + td.appendChild(modes_select); + tr.appendChild(td); + var arg_txt = document.createElement("input"); + arg_txt.type='text'; + arg_txt.name='formArgName[]'; + arg_txt.style.width='100%'; + arg_txt.value=arg_name; + var td = document.createElement("td"); + td.appendChild(arg_txt); + tr.appendChild(td); + var td = document.createElement("td"); + td.appendChild(buildSelect("formArgType[]",g_main_types,arg_type)); + if(arg_array==true) { + var szArr = "[]"; + } else { + var szArr = ""; + } + td.appendChild(buildSelect("formArgArray[]",new Array("","[]"),szArr)); + tr.appendChild(td); + var td = document.createElement("td"); + td = buildArgImages(td); + td.className="data3"; + tr.className='arg_tr_pc'; + tr.appendChild(td); + if(document.getElementById("args_table").insertBefore(tr,document.getElementById("parent_add_tr"))) { + g_args++; + } +} + +function buildSelect(name,options,selected) { + var s = document.createElement('select'); + for(i=0;i<options.length;i++) { + var o = document.createElement('option'); + o.value=options[i]; + o.text=options[i]; + if(options[i].toLowerCase()==selected.toLowerCase()) { + o.selected="selected"; + } + s.appendChild(o); + } + s.name=name; + return s; +} + +function baseArgTR() { + if(g_no_args==false) { + var tr = document.createElement("tr"); + var td = document.createElement("td"); + var txt = document.createElement("input"); + tr.className='arg_tr_pc'; + td.className='data3'; + td.innerHTML = g_modes_select; + tr.appendChild(td); + txt.type='text'; + txt.name='formArgName[]'; + txt.style.width='100%'; + txt.value=g_name; + var td = document.createElement("td"); + td.className='data3'; + td.appendChild(txt); + tr.appendChild(td); + var td = document.createElement("td"); + td.className='data3'; + td.innerHTML = g_types_select; + tr.appendChild(td); + var td = document.createElement("td"); + td = buildArgImages(td); + td.className="data3"; + tr.appendChild(td); + if(g_args==0) { + tr.id="1st_arg_tr"; + } + return tr; + } else { + var p_tr = document.getElementById("1st_arg_tr"); + enableArgTR(p_tr.childNodes[4]); + document.getElementById("1st_arg_iag").src='images/themes/default/RemoveArgument.png'; + g_args++; + g_no_args = false; + } +} diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/functions.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/functions.php new file mode 100644 index 00000000..365c0d95 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/functions.php @@ -0,0 +1,1038 @@ +<?php + + /** + * Manage functions in a database + * + * $Id: functions.php,v 1.78 2008/01/08 22:50:29 xzilla Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Function to save after editing a function + */ + function doSaveEdit() { + global $data, $lang, $misc, $_reload_browser; + + $fnlang = strtolower($_POST['original_lang']); + + if ($fnlang == 'c') { + $def = array($_POST['formObjectFile'], $_POST['formLinkSymbol']); + } else if ($fnlang == 'internal'){ + $def = $_POST['formLinkSymbol']; + } else { + $def = $_POST['formDefinition']; + } + if(!$data->hasFunctionAlterSchema()) $_POST['formFuncSchema'] = ''; + + $status = $data->setFunction($_POST['function_oid'], $_POST['original_function'], $_POST['formFunction'], + $_POST['original_arguments'], $_POST['original_returns'], $def, + $_POST['original_lang'], $_POST['formProperties'], isset($_POST['original_setof']), + $_POST['original_owner'], $_POST['formFuncOwn'], $_POST['original_schema'], + $_POST['formFuncSchema'], isset($_POST['formCost']) ? $_POST['formCost'] : null, + isset($_POST['formRows']) ? $_POST['formRows'] : 0, $_POST['formComment']); + + if ($status == 0) { + // If function has had schema altered, need to change to the new schema + // and reload the browser frame. + if (!empty($_POST['formFuncSchema']) && ($_POST['formFuncSchema'] != $_POST['original_schema'])) { + // Jump them to the new function schema + $misc->setCurrentSchema($_POST['formFuncSchema']); + // Force a browser reload + $_reload_browser = true; + } + doProperties($lang['strfunctionupdated']); + } else { + doEdit($lang['strfunctionupdatedbad']); + } + } + + /** + * Function to allow editing of a Function + */ + function doEdit($msg = '') { + global $data, $misc; + global $lang; + $misc->printTrail('function'); + $misc->printTitle($lang['stralter'],'pg.function.alter'); + $misc->printMsg($msg); + + $fndata = $data->getFunction($_REQUEST['function_oid']); + + if ($fndata->recordCount() > 0) { + $fndata->fields['proretset'] = $data->phpBool($fndata->fields['proretset']); + + // Initialise variables + if (!isset($_POST['formDefinition'])) $_POST['formDefinition'] = $fndata->fields['prosrc']; + if (!isset($_POST['formProperties'])) $_POST['formProperties'] = $data->getFunctionProperties($fndata->fields); + if (!isset($_POST['formFunction'])) $_POST['formFunction'] = $fndata->fields['proname']; + if (!isset($_POST['formComment'])) $_POST['formComment'] = $fndata->fields['procomment']; + if (!isset($_POST['formObjectFile'])) $_POST['formObjectFile'] = $fndata->fields['probin']; + if (!isset($_POST['formLinkSymbol'])) $_POST['formLinkSymbol'] = $fndata->fields['prosrc']; + if (!isset($_POST['formFuncOwn'])) $_POST['formFuncOwn'] = $fndata->fields['proowner']; + if (!isset($_POST['formFuncSchema'])) $_POST['formFuncSchema'] = $fndata->fields['proschema']; + + if ($data->hasFunctionCosting()) { + if (!isset($_POST['formCost'])) $_POST['formCost'] = $fndata->fields['procost']; + if (!isset($_POST['formRows'])) $_POST['formRows'] = $fndata->fields['prorows']; + } + + // Deal with named parameters + if ($data->hasNamedParams()) { + if ( isset($fndata->fields['proallarguments']) ) { + $args_arr = $data->phpArray($fndata->fields['proallarguments']); + } else { + $args_arr = explode(', ', $fndata->fields['proarguments']); + } + $names_arr = $data->phpArray($fndata->fields['proargnames']); + $modes_arr = $data->phpArray($fndata->fields['proargmodes']); + $args = ''; + $i = 0; + for ($i = 0; $i < sizeof($args_arr); $i++) { + if ($i != 0) $args .= ', '; + if (isset($modes_arr[$i])) { + switch($modes_arr[$i]) { + case 'i' : $args .= " IN "; break; + case 'o' : $args .= " OUT "; break; + case 'b' : $args .= " INOUT "; break; + case 'v' : $args .= " VARIADIC "; break; + case 't' : $args .= " TABLE "; break; + } + } + if (isset($names_arr[$i]) && $names_arr[$i] != '') { + $data->fieldClean($names_arr[$i]); + $args .= '"' . $names_arr[$i] . '" '; + } + $args .= $args_arr[$i]; + } + } + else { + $args = $fndata->fields['proarguments']; + } + + $func_full = $fndata->fields['proname'] . "(". $fndata->fields['proarguments'] .")"; + echo "<form action=\"functions.php\" method=\"post\">\n"; + echo "<table style=\"width: 90%\">\n"; + echo "<tr>\n"; + echo "<th class=\"data required\">{$lang['strschema']}</th>\n"; + echo "<th class=\"data required\">{$lang['strfunction']}</th>\n"; + echo "<th class=\"data\">{$lang['strarguments']}</th>\n"; + echo "<th class=\"data required\">{$lang['strreturns']}</th>\n"; + echo "<th class=\"data required\">{$lang['strproglanguage']}</th>\n"; + echo "</tr>\n"; + + echo "<tr>\n"; + echo "<td class=\"data1\">"; + echo "<input type=\"hidden\" name=\"original_schema\" value=\"", htmlspecialchars($fndata->fields['proschema']),"\" />\n"; + if ($data->hasFunctionAlterSchema()) { + $schemas = $data->getSchemas(); + echo "<select name=\"formFuncSchema\">"; + while (!$schemas->EOF) { + $schema = $schemas->fields['nspname']; + echo "<option value=\"", htmlspecialchars($schema), "\"", + ($schema == $_POST['formFuncSchema']) ? ' selected="selected"' : '', ">", htmlspecialchars($schema), "</option>\n"; + $schemas->moveNext(); + } + echo "</select>\n"; + } + else echo $fndata->fields['proschema']; + echo "</td>\n"; + echo "<td class=\"data1\">"; + echo "<input type=\"hidden\" name=\"original_function\" value=\"", htmlspecialchars($fndata->fields['proname']),"\" />\n"; + echo "<input name=\"formFunction\" style=\"width: 100%\" maxlength=\"{$data->_maxNameLen}\" value=\"", htmlspecialchars($_POST['formFunction']), "\" />"; + echo "</td>\n"; + + echo "<td class=\"data1\">", $misc->printVal($args), "\n"; + echo "<input type=\"hidden\" name=\"original_arguments\" value=\"",htmlspecialchars($args),"\" />\n"; + echo "</td>\n"; + + echo "<td class=\"data1\">"; + if ($fndata->fields['proretset']) echo "setof "; + echo $misc->printVal($fndata->fields['proresult']), "\n"; + echo "<input type=\"hidden\" name=\"original_returns\" value=\"", htmlspecialchars($fndata->fields['proresult']), "\" />\n"; + if ($fndata->fields['proretset']) + echo "<input type=\"hidden\" name=\"original_setof\" value=\"yes\" />\n"; + echo "</td>\n"; + + echo "<td class=\"data1\">", $misc->printVal($fndata->fields['prolanguage']), "\n"; + echo "<input type=\"hidden\" name=\"original_lang\" value=\"", htmlspecialchars($fndata->fields['prolanguage']), "\" />\n"; + echo "</td>\n"; + echo "</tr>\n"; + + $fnlang = strtolower($fndata->fields['prolanguage']); + if ($fnlang == 'c') { + echo "<tr><th class=\"data required\" colspan=\"2\">{$lang['strobjectfile']}</th>\n"; + echo "<th class=\"data\" colspan=\"2\">{$lang['strlinksymbol']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"2\"><input type=\"text\" name=\"formObjectFile\" style=\"width:100%\" value=\"", + htmlspecialchars($_POST['formObjectFile']), "\" /></td>\n"; + echo "<td class=\"data1\" colspan=\"2\"><input type=\"text\" name=\"formLinkSymbol\" style=\"width:100%\" value=\"", + htmlspecialchars($_POST['formLinkSymbol']), "\" /></td></tr>\n"; + } else if ($fnlang == 'internal') { + echo "<tr><th class=\"data\" colspan=\"5\">{$lang['strlinksymbol']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"5\"><input type=\"text\" name=\"formLinkSymbol\" style=\"width:100%\" value=\"", + htmlspecialchars($_POST['formLinkSymbol']), "\" /></td></tr>\n"; + } else { + echo "<tr><th class=\"data required\" colspan=\"5\">{$lang['strdefinition']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"5\"><textarea style=\"width:100%;\" rows=\"20\" cols=\"50\" name=\"formDefinition\">", + htmlspecialchars($_POST['formDefinition']), "</textarea></td></tr>\n"; + } + + // Display function comment + echo "<tr><th class=\"data\" colspan=\"5\">{$lang['strcomment']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"5\"><textarea style=\"width:100%;\" name=\"formComment\" rows=\"3\" cols=\"50\">", + htmlspecialchars($_POST['formComment']), "</textarea></td></tr>\n"; + + // Display function cost options + if ($data->hasFunctionCosting()) { + echo "<tr><th class=\"data required\" colspan=\"5\">{$lang['strfunctioncosting']}</th></tr>\n"; + echo "<td class=\"data1\" colspan=\"2\">{$lang['strexecutioncost']}: <input name=\"formCost\" size=\"16\" value=\"". + htmlspecialchars($_POST['formCost']) ."\" /></td>"; + echo "<td class=\"data1\" colspan=\"2\">{$lang['strresultrows']}: <input name=\"formRows\" size=\"16\" value=\"", + htmlspecialchars($_POST['formRows']) ,"\"", (!$fndata->fields['proretset']) ? 'disabled' : '', "/></td>"; + } + + // Display function properties + if (is_array($data->funcprops) && sizeof($data->funcprops) > 0) { + echo "<tr><th class=\"data\" colspan=\"5\">{$lang['strproperties']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"5\">\n"; + $i = 0; + foreach ($data->funcprops as $k => $v) { + echo "<select name=\"formProperties[{$i}]\">\n"; + foreach ($v as $p) { + echo "<option value=\"", htmlspecialchars($p), "\"", + ($p == $_POST['formProperties'][$i]) ? ' selected="selected"' : '', + ">", $misc->printVal($p), "</option>\n"; + } + echo "</select><br />\n"; + $i++; + } + echo "</td></tr>\n"; + } + + // function owner + if ($data->hasFunctionAlterOwner()) { + $users = $data->getUsers(); + echo "<tr><td class=\"data1\" colspan=\"5\">{$lang['strowner']}: <select name=\"formFuncOwn\">"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $_POST['formFuncOwn']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "</select>\n"; + echo "<input type=\"hidden\" name=\"original_owner\" value=\"", htmlspecialchars($fndata->fields['proowner']),"\" />\n"; + echo "</td></tr>\n"; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_edit\" />\n"; + echo "<input type=\"hidden\" name=\"function\" value=\"", htmlspecialchars($_REQUEST['function']), "\" />\n"; + echo "<input type=\"hidden\" name=\"function_oid\" value=\"", htmlspecialchars($_REQUEST['function_oid']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Show read only properties of a function + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('function'); + $misc->printTitle($lang['strproperties'],'pg.function'); + $misc->printMsg($msg); + + $funcdata = $data->getFunction($_REQUEST['function_oid']); + + if ($funcdata->recordCount() > 0) { + // Deal with named parameters + if ($data->hasNamedParams()) { + if ( isset($funcdata->fields['proallarguments']) ) { + $args_arr = $data->phpArray($funcdata->fields['proallarguments']); + } else { + $args_arr = explode(', ', $funcdata->fields['proarguments']); + } + $names_arr = $data->phpArray($funcdata->fields['proargnames']); + $modes_arr = $data->phpArray($funcdata->fields['proargmodes']); + $args = ''; + $i = 0; + for ($i = 0; $i < sizeof($args_arr); $i++) { + if ($i != 0) $args .= ', '; + if (isset($modes_arr[$i])) { + switch($modes_arr[$i]) { + case 'i' : $args .= " IN "; break; + case 'o' : $args .= " OUT "; break; + case 'b' : $args .= " INOUT "; break; + case 'v' : $args .= " VARIADIC "; break; + case 't' : $args .= " TABLE "; break; + } + } + if (isset($names_arr[$i]) && $names_arr[$i] != '') { + $data->fieldClean($names_arr[$i]); + $args .= '"' . $names_arr[$i] . '" '; + } + $args .= $args_arr[$i]; + } + } + else { + $args = $funcdata->fields['proarguments']; + } + + // Show comment if any + if ($funcdata->fields['procomment'] !== null) + echo "<p class=\"comment\">", $misc->printVal($funcdata->fields['procomment']), "</p>\n"; + + $funcdata->fields['proretset'] = $data->phpBool($funcdata->fields['proretset']); + $func_full = $funcdata->fields['proname'] . "(". $funcdata->fields['proarguments'] .")"; + echo "<table style=\"width: 90%\">\n"; + echo "<tr><th class=\"data\">{$lang['strfunction']}</th>\n"; + echo "<th class=\"data\">{$lang['strarguments']}</th>\n"; + echo "<th class=\"data\">{$lang['strreturns']}</th>\n"; + echo "<th class=\"data\">{$lang['strproglanguage']}</th></tr>\n"; + echo "<tr><td class=\"data1\">", $misc->printVal($funcdata->fields['proname']), "</td>\n"; + echo "<td class=\"data1\">", $misc->printVal($args), "</td>\n"; + echo "<td class=\"data1\">"; + if ($funcdata->fields['proretset']) echo "setof "; + echo $misc->printVal($funcdata->fields['proresult']), "</td>\n"; + echo "<td class=\"data1\">", $misc->printVal($funcdata->fields['prolanguage']), "</td></tr>\n"; + + $fnlang = strtolower($funcdata->fields['prolanguage']); + if ($fnlang == 'c') { + echo "<tr><th class=\"data\" colspan=\"2\">{$lang['strobjectfile']}</th>\n"; + echo "<th class=\"data\" colspan=\"2\">{$lang['strlinksymbol']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"2\">", $misc->printVal($funcdata->fields['probin']), "</td>\n"; + echo "<td class=\"data1\" colspan=\"2\">", $misc->printVal($funcdata->fields['prosrc']), "</td></tr>\n"; + } else if ($fnlang == 'internal') { + echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strlinksymbol']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"4\">", $misc->printVal($funcdata->fields['prosrc']), "</td></tr>\n"; + } else { + include_once('./libraries/highlight.php'); + echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strdefinition']}</th></tr>\n"; + // Check to see if we have syntax highlighting for this language + if (isset($data->langmap[$funcdata->fields['prolanguage']])) { + $temp = syntax_highlight(htmlspecialchars($funcdata->fields['prosrc']), $data->langmap[$funcdata->fields['prolanguage']]); + $tag = 'prenoescape'; + } + else { + $temp = $funcdata->fields['prosrc']; + $tag = 'pre'; + } + echo "<tr><td class=\"data1\" colspan=\"4\">", $misc->printVal($temp, $tag, array('lineno' => true, 'class' => 'data1')), "</td></tr>\n"; + } + + // Display function cost options + if ($data->hasFunctionCosting()) { + echo "<tr><th class=\"data required\" colspan=\"4\">{$lang['strfunctioncosting']}</th></tr>\n"; + echo "<td class=\"data1\" colspan=\"2\">{$lang['strexecutioncost']}: ", $misc->printVal($funcdata->fields['procost']), " </td>"; + echo "<td class=\"data1\" colspan=\"2\">{$lang['strresultrows']}: ", $misc->printVal($funcdata->fields['prorows']), " </td>"; + } + + // Show flags + if (is_array($data->funcprops) && sizeof($data->funcprops) > 0) { + // Fetch an array of the function properties + $funcprops = $data->getFunctionProperties($funcdata->fields); + echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strproperties']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"4\">\n"; + foreach ($funcprops as $v) { + echo $misc->printVal($v), "<br />\n"; + } + echo "</td></tr>\n"; + } + + echo "<tr><td class=\"data1\" colspan=\"5\">{$lang['strowner']}: ", htmlspecialchars($funcdata->fields['proowner']),"\n"; + echo "</td></tr>\n"; + echo "</table>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + + $navlinks = array( + 'showall' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'functions.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + ) + ) + ), + 'content' => $lang['strshowallfunctions'] + ), + 'alter' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'functions.php', + 'urlvars' => array ( + 'action' => 'edit', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'function' => $_REQUEST['function'], + 'function_oid' => $_REQUEST['function_oid'] + ) + ) + ), + 'content' => $lang['stralter'] + ), + 'drop' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'functions.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'function' => $func_full, + 'function_oid' => $_REQUEST['function_oid'] + ) + ) + ), + 'content' => $lang['strdrop'] + ) + ); + + $misc->printNavLinks($navlinks, 'functions-properties', get_defined_vars()); + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang, $_reload_browser; + + if (empty($_REQUEST['function']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifyfunctiontodrop']); + exit(); + } + + if ($confirm) { + $misc->printTrail('schema'); + $misc->printTitle($lang['strdrop'],'pg.function.drop'); + + echo "<form action=\"functions.php\" method=\"post\">\n"; + + //If multi drop + if (isset($_REQUEST['ma'])) { + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfdropfunction'], $misc->printVal($a['function'])), "</p>\n"; + echo '<input type="hidden" name="function[]" value="', htmlspecialchars($a['function']), "\" />\n"; + echo "<input type=\"hidden\" name=\"function_oid[]\" value=\"", htmlspecialchars($a['function_oid']), "\" />\n"; + } + } + else { + echo "<p>", sprintf($lang['strconfdropfunction'], $misc->printVal($_REQUEST['function'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"function\" value=\"", htmlspecialchars($_REQUEST['function']), "\" />\n"; + echo "<input type=\"hidden\" name=\"function_oid\" value=\"", htmlspecialchars($_REQUEST['function_oid']), "\" />\n"; + } + + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /><label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + if (is_array($_POST['function_oid'])) { + $msg = ''; + $status = $data->beginTransaction(); + if ($status == 0) { + foreach($_POST['function_oid'] as $k => $s) { + $status = $data->dropFunction($s, isset($_POST['cascade'])); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($_POST['function'][$k], ENT_QUOTES, 'UTF-8'), $lang['strfunctiondropped']); + else { + $data->endTransaction(); + doDefault(sprintf('%s%s: %s<br />', $msg, htmlentities($_POST['function'][$k], ENT_QUOTES, 'UTF-8'), $lang['strfunctiondroppedbad'])); + return; + } + } + } + if($data->endTransaction() == 0) { + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else doDefault($lang['strfunctiondroppedbad']); + } + else{ + $status = $data->dropFunction($_POST['function_oid'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strfunctiondropped']); + } + else { + doDefault($lang['strfunctiondroppedbad']); + } + } + } + + } + + /** + * Displays a screen where they can enter a new function + */ + function doCreate($msg = '',$szJS="") { + global $data, $misc; + global $lang; + + $misc->printTrail('schema'); + if (!isset($_POST['formFunction'])) $_POST['formFunction'] = ''; + if (!isset($_POST['formArguments'])) $_POST['formArguments'] = ''; + if (!isset($_POST['formReturns'])) $_POST['formReturns'] = ''; + if (!isset($_POST['formLanguage'])) $_POST['formLanguage'] = isset($_REQUEST['language']) ? $_REQUEST['language'] : 'sql'; + if (!isset($_POST['formDefinition'])) $_POST['formDefinition'] = ''; + if (!isset($_POST['formObjectFile'])) $_POST['formObjectFile'] = ''; + if (!isset($_POST['formLinkSymbol'])) $_POST['formLinkSymbol'] = ''; + if (!isset($_POST['formProperties'])) $_POST['formProperties'] = $data->defaultprops; + if (!isset($_POST['formSetOf'])) $_POST['formSetOf'] = ''; + if (!isset($_POST['formArray'])) $_POST['formArray'] = ''; + if (!isset($_POST['formCost'])) $_POST['formCost'] = ''; + if (!isset($_POST['formRows'])) $_POST['formRows'] = ''; + if (!isset($_POST['formComment'])) $_POST['formComment'] = ''; + + $types = $data->getTypes(true, true, true); + $langs = $data->getLanguages(true); + $fnlang = strtolower($_POST['formLanguage']); + + switch ($fnlang) { + case 'c': + $misc->printTitle($lang['strcreatecfunction'],'pg.function.create.c'); + break; + case 'internal': + $misc->printTitle($lang['strcreateinternalfunction'],'pg.function.create.internal'); + break; + default: + $misc->printTitle($lang['strcreateplfunction'],'pg.function.create.pl'); + break; + } + $misc->printMsg($msg); + + // Create string for return type list + $szTypes = ""; + while (!$types->EOF) { + $szSelected = ""; + if($types->fields['typname'] == $_POST['formReturns']) { + $szSelected = " selected=\"selected\""; + } + /* this variable is include in the JS code bellow, so we need to ENT_QUOTES */ + $szTypes .= "<option value=\"". htmlspecialchars($types->fields['typname'], ENT_QUOTES) ."\"{$szSelected}>"; + $szTypes .= htmlspecialchars($types->fields['typname'], ENT_QUOTES) ."</option>"; + $types->moveNext(); + } + + $szFunctionName = "<td class=\"data1\"><input name=\"formFunction\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"". + htmlspecialchars($_POST['formFunction']) ."\" /></td>"; + + $szArguments = "<td class=\"data1\"><input name=\"formArguments\" style=\"width:100%;\" size=\"16\" value=\"". + htmlspecialchars($_POST['formArguments']) ."\" /></td>"; + + $szSetOfSelected = ""; + $szNotSetOfSelected = ""; + if($_POST['formSetOf'] == '') { + $szNotSetOfSelected = " selected=\"selected\""; + } else if($_POST['formSetOf'] == 'SETOF') { + $szSetOfSelected = " selected=\"selected\""; + } + $szReturns = "<td class=\"data1\" colspan=\"2\">"; + $szReturns .= "<select name=\"formSetOf\">"; + $szReturns .= "<option value=\"\"{$szNotSetOfSelected}></option>"; + $szReturns .= "<option value=\"SETOF\"{$szSetOfSelected}>SETOF</option>"; + $szReturns .= "</select>"; + + $szReturns .= "<select name=\"formReturns\">".$szTypes."</select>"; + + // Create string array type selector + + $szArraySelected = ""; + $szNotArraySelected = ""; + if($_POST['formArray'] == '') { + $szNotArraySelected = " selected=\"selected\""; + } else if($_POST['formArray'] == '[]') { + $szArraySelected = " selected=\"selected\""; + } + + $szReturns .= "<select name=\"formArray\">"; + $szReturns .= "<option value=\"\"{$szNotArraySelected}></option>"; + $szReturns .= "<option value=\"[]\"{$szArraySelected}>[ ]</option>"; + $szReturns .= "</select>\n</td>"; + + // Create string for language + $szLanguage = "<td class=\"data1\">"; + if ($fnlang == 'c' || $fnlang == 'internal') { + $szLanguage .= $_POST['formLanguage'] . "\n"; + $szLanguage .= "<input type=\"hidden\" name=\"formLanguage\" value=\"{$_POST['formLanguage']}\" />\n"; + } + else { + $szLanguage .= "<select name=\"formLanguage\">\n"; + while (!$langs->EOF) { + $szSelected = ''; + if($langs->fields['lanname'] == $_POST['formLanguage']) { + $szSelected = ' selected="selected"'; + } + if (strtolower($langs->fields['lanname']) != 'c' && strtolower($langs->fields['lanname']) != 'internal') + $szLanguage .= "<option value=\"". htmlspecialchars($langs->fields['lanname']). "\"{$szSelected}>\n". + $misc->printVal($langs->fields['lanname']) ."</option>"; + $langs->moveNext(); + } + $szLanguage .= "</select>\n"; + } + + $szLanguage .= "</td>"; + $szJSArguments = "<tr><th class=\"data\" colspan=\"7\">{$lang['strarguments']}</th></tr>"; + $arrayModes = array("IN","OUT","INOUT"); + $szModes = "<select name=\"formArgModes[]\" style=\"width:100%;\">"; + foreach($arrayModes as $pV) { + $szModes .= "<option value=\"{$pV}\">{$pV}</option>"; + } + $szModes .= "</select>"; + $szArgReturns = "<select name=\"formArgArray[]\">"; + $szArgReturns .= "<option value=\"\"></option>"; + $szArgReturns .= "<option value=\"[]\">[]</option>"; + $szArgReturns .= "</select>"; + if(!empty($conf['theme'])) { + $szImgPath = "images/themes/{$conf['theme']}"; + } else { + $szImgPath = "images/themes/default"; + } + if(empty($msg)) { + $szJSTRArg = "<script type=\"text/javascript\" >addArg();</script>\n"; + } else { + $szJSTRArg = ""; + } + $szJSAddTR = "<tr id=\"parent_add_tr\" onclick=\"addArg();\" onmouseover=\"this.style.cursor='pointer'\">\n<td style=\"text-align: right\" colspan=\"6\" class=\"data3\"><table><tr><td class=\"data3\"><img src=\"{$szImgPath}/AddArguments.png\" alt=\"Add Argument\" /></td><td class=\"data3\"><span style=\"font-size: 8pt\">{$lang['strargadd']}</span></td></tr></table></td>\n</tr>\n"; + + echo "<script src=\"functions.js\" type=\"text/javascript\"></script> + <script type=\"text/javascript\"> + //<![CDATA[ + var g_types_select = '<select name=\"formArgType[]\">{$szTypes}</select>{$szArgReturns}'; + var g_modes_select = '{$szModes}'; + var g_name = ''; + var g_lang_strargremove = '", htmlspecialchars($lang["strargremove"], ENT_QUOTES) ,"'; + var g_lang_strargnoargs = '", htmlspecialchars($lang["strargnoargs"], ENT_QUOTES) ,"'; + var g_lang_strargenableargs = '", htmlspecialchars($lang["strargenableargs"], ENT_QUOTES) ,"'; + var g_lang_strargnorowabove = '", htmlspecialchars($lang["strargnorowabove"], ENT_QUOTES) ,"'; + var g_lang_strargnorowbelow = '", htmlspecialchars($lang["strargnorowbelow"], ENT_QUOTES) ,"'; + var g_lang_strargremoveconfirm = '", htmlspecialchars($lang["strargremoveconfirm"], ENT_QUOTES) ,"'; + var g_lang_strargraise = '", htmlspecialchars($lang["strargraise"], ENT_QUOTES) ,"'; + var g_lang_strarglower = '", htmlspecialchars($lang["strarglower"], ENT_QUOTES) ,"'; + //]]> + </script> + "; + echo "<form action=\"functions.php\" method=\"post\">\n"; + echo "<table><tbody id=\"args_table\">\n"; + echo "<tr><th class=\"data required\">{$lang['strname']}</th>\n"; + echo "<th class=\"data required\" colspan=\"2\">{$lang['strreturns']}</th>\n"; + echo "<th class=\"data required\">{$lang['strproglanguage']}</th></tr>\n"; + echo "<tr>\n"; + echo "{$szFunctionName}\n"; + echo "{$szReturns}\n"; + echo "{$szLanguage}\n"; + echo "</tr>\n"; + echo "{$szJSArguments}\n"; + echo "<tr>\n"; + echo "<th class=\"data required\">{$lang['strargmode']}</th>\n"; + echo "<th class=\"data required\">{$lang['strname']}</th>\n"; + echo "<th class=\"data required\" colspan=\"2\">{$lang['strargtype']}</th>\n"; + echo "</tr>\n"; + echo "{$szJSAddTR}\n"; + + if ($fnlang == 'c') { + echo "<tr><th class=\"data required\" colspan=\"2\">{$lang['strobjectfile']}</th>\n"; + echo "<th class=\"data\" colspan=\"2\">{$lang['strlinksymbol']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"2\"><input type=\"text\" name=\"formObjectFile\" style=\"width:100%\" value=\"", + htmlspecialchars($_POST['formObjectFile']), "\" /></td>\n"; + echo "<td class=\"data1\" colspan=\"2\"><input type=\"text\" name=\"formLinkSymbol\" style=\"width:100%\" value=\"", + htmlspecialchars($_POST['formLinkSymbol']), "\" /></td></tr>\n"; + } else if ($fnlang == 'internal') { + echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strlinksymbol']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"4\"><input type=\"text\" name=\"formLinkSymbol\" style=\"width:100%\" value=\"", + htmlspecialchars($_POST['formLinkSymbol']), "\" /></td></tr>\n"; + } else { + echo "<tr><th class=\"data required\" colspan=\"4\">{$lang['strdefinition']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"4\"><textarea style=\"width:100%;\" rows=\"20\" cols=\"50\" name=\"formDefinition\">", + htmlspecialchars($_POST['formDefinition']), "</textarea></td></tr>\n"; + } + + // Display function comment + echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strcomment']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"4\"><textarea style=\"width:100%;\" name=\"formComment\" rows=\"3\" cols=\"50\">", + htmlspecialchars($_POST['formComment']), "</textarea></td></tr>\n"; + + // Display function cost options + if ($data->hasFunctionCosting()) { + echo "<tr><th class=\"data required\" colspan=\"4\">{$lang['strfunctioncosting']}</th></tr>\n"; + echo "<td class=\"data1\" colspan=\"2\">{$lang['strexecutioncost']}: <input name=\"formCost\" size=\"16\" value=\"". + htmlspecialchars($_POST['formCost']) ."\" /></td>"; + echo "<td class=\"data1\" colspan=\"2\">{$lang['strresultrows']}: <input name=\"formRows\" size=\"16\" value=\"". + htmlspecialchars($_POST['formRows']) ."\" /></td>"; + } + + // Display function properties + if (is_array($data->funcprops) && sizeof($data->funcprops) > 0) { + echo "<tr><th class=\"data required\" colspan=\"4\">{$lang['strproperties']}</th></tr>\n"; + echo "<tr><td class=\"data1\" colspan=\"4\">\n"; + $i = 0; + foreach ($data->funcprops as $k => $v) { + echo "<select name=\"formProperties[{$i}]\">\n"; + foreach ($v as $p) { + echo "<option value=\"", htmlspecialchars($p), "\"", + ($p == $_POST['formProperties'][$i]) ? ' selected="selected"' : '', + ">", $misc->printVal($p), "</option>\n"; + } + echo "</select><br />\n"; + $i++; + } + echo "</td></tr>\n"; + } + echo "</tbody></table>\n"; + echo $szJSTRArg; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + echo $szJS; + } + + /** + * Actually creates the new function in the database + */ + function doSaveCreate() { + global $data, $lang; + + $fnlang = strtolower($_POST['formLanguage']); + + if ($fnlang == 'c') { + $def = array($_POST['formObjectFile'], $_POST['formLinkSymbol']); + } else if ($fnlang == 'internal'){ + $def = $_POST['formLinkSymbol']; + } else { + $def = $_POST['formDefinition']; + } + + $szJS = ''; + + echo "<script src=\"functions.js\" type=\"text/javascript\"></script>"; + echo "<script type=\"text/javascript\">". buildJSData() .'</script>'; + if(!empty($_POST['formArgName'])) { + $szJS = buildJSRows(buildFunctionArguments($_POST)); + } else { + $szJS = "<script type=\"text/javascript\" src=\"functions.js\">noArgsRebuild(addArg());</script>"; + } + + $cost = (isset($_POST['formCost'])) ? $_POST['formCost'] : null; + if ($cost == '' || !is_numeric($cost) || $cost != (int)$cost || $cost < 0) { + $cost = null; + } + + $rows = (isset($_POST['formRows'])) ? $_POST['formRows'] : null; + if ($rows == '' || !is_numeric($rows) || $rows != (int)$rows ) { + $rows = null; + } + + // Check that they've given a name and a definition + if ($_POST['formFunction'] == '') doCreate($lang['strfunctionneedsname'],$szJS); + elseif ($fnlang != 'internal' && !$def) doCreate($lang['strfunctionneedsdef'],$szJS); + else { + // Append array symbol to type if chosen + $status = $data->createFunction($_POST['formFunction'], empty($_POST['nojs'])? buildFunctionArguments($_POST) : $_POST['formArguments'], + $_POST['formReturns'] . $_POST['formArray'] , $def , $_POST['formLanguage'], + $_POST['formProperties'], $_POST['formSetOf'] == 'SETOF', + $cost, $rows, $_POST['formComment'], false); + if ($status == 0) + doDefault($lang['strfunctioncreated']); + else { + doCreate($lang['strfunctioncreatedbad'],$szJS); + } + } + } + + /** + * Build out the function arguments string + */ + function buildFunctionArguments($arrayVars) { + if(isset($_POST['formArgName'])) { + $arrayArgs = array(); + foreach($arrayVars['formArgName'] as $pK => $pV) { + $arrayArgs[] = $arrayVars['formArgModes'][$pK] .' '. trim($pV) .' '. trim($arrayVars['formArgType'][$pK]) . $arrayVars['formArgArray'][$pK]; + } + return implode(",", $arrayArgs); + } + return ''; + } + + /** + * Build out JS to re-create table rows for arguments + */ + function buildJSRows($szArgs) { + $arrayModes = array('IN','OUT','INOUT'); + $arrayArgs = explode(',',$szArgs); + $arrayProperArgs = array(); + $nC = 0; + $szReturn = ''; + foreach($arrayArgs as $pV) { + $arrayWords = explode(' ',$pV); + if(in_array($arrayWords[0],$arrayModes)===true) { + $szMode = $arrayWords[0]; + array_shift($arrayWords); + } + $szArgName = array_shift($arrayWords); + if(strpos($arrayWords[count($arrayWords)-1],'[]')===false) { + $szArgType = implode(" ",$arrayWords); + $bArgIsArray = "false"; + } else { + $szArgType = str_replace('[]','',implode(' ',$arrayWords)); + $bArgIsArray = "true"; + } + $arrayProperArgs[] = array($szMode,$szArgName,$szArgType,$bArgIsArray); + $szReturn .= "<script type=\"text/javascript\">RebuildArgTR('{$szMode}','{$szArgName}','{$szArgType}',new Boolean({$bArgIsArray}));</script>"; + $nC++; + } + return $szReturn; + } + + + function buildJSData() { + global $data; + $arrayModes = array('IN','OUT','INOUT'); + $arrayTypes = $data->getTypes(true, true, true); + $arrayPTypes = array(); + $arrayPModes = array(); + $szTypes = ''; + + while (!$arrayTypes->EOF) { + $arrayPTypes[] = "'". $arrayTypes->fields['typname'] ."'"; + $arrayTypes->moveNext(); + } + + foreach($arrayModes as $pV) { + $arrayPModes[] = "'{$pV}'"; + } + + $szTypes = 'g_main_types = new Array('. implode(',', $arrayPTypes) .');'; + $szModes = 'g_main_modes = new Array('. implode(',', $arrayPModes) .');'; + return $szTypes . $szModes; + } + + /** + * Show default list of functions in the database + */ + function doDefault($msg = '') { + global $data, $conf, $misc, $func; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','functions'); + $misc->printMsg($msg); + + $funcs = $data->getFunctions(); + + $columns = array( + 'function' => array( + 'title' => $lang['strfunction'], + 'field' => field('proproto'), + 'url' => "redirect.php?subject=function&action=properties&{$misc->href}&", + 'vars' => array('function' => 'proproto', 'function_oid' => 'prooid'), + ), + 'returns' => array( + 'title' => $lang['strreturns'], + 'field' => field('proreturns'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('proowner'), + ), + 'proglanguage' => array( + 'title' => $lang['strproglanguage'], + 'field' => field('prolanguage'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('procomment'), + ), + ); + + $actions = array( + 'multiactions' => array( + 'keycols' => array('function' => 'proproto', 'function_oid' => 'prooid'), + 'url' => 'functions.php', + ), + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'functions.php', + 'urlvars' => array ( + 'action' => 'edit', + 'function' => field('proproto'), + 'function_oid' => field('prooid') + ) + ) + ) + ), + 'drop' => array( + 'multiaction' => 'confirm_drop', + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'functions.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'function' => field('proproto'), + 'function_oid' => field('prooid') + ) + ) + ) + ), + 'privileges' => array( + 'content' => $lang['strprivileges'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'privileges.php', + 'urlvars' => array ( + 'subject' => 'function', + 'function' => field('proproto'), + 'function_oid' => field('prooid') + ) + ) + ) + ), + ); + + $misc->printTable($funcs, $columns, $actions, 'functions-functions', $lang['strnofunctions']); + + $navlinks = array( + 'createpl' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'functions.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreateplfunction'] + ), + 'createinternal' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'functions.php', + 'urlvars' => array ( + 'action' => 'create', + 'language' => 'internal', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreateinternalfunction'] + ), + 'createc' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'functions.php', + 'urlvars' => array ( + 'action' => 'create', + 'language' => 'C', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreatecfunction'] + ) + ); + + $misc->printNavLinks($navlinks, 'functions-functions', get_defined_vars()); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $funcs = $data->getFunctions(); + + $proto = concat(field('proname'),' (',field('proarguments'),')'); + + $reqvars = $misc->getRequestVars('function'); + + $attrs = array( + 'text' => $proto, + 'icon' => 'Function', + 'toolTip' => field('procomment'), + 'action' => url('redirect.php', + $reqvars, + array( + 'action' => 'properties', + 'function' => $proto, + 'function_oid' => field('prooid') + ) + ) + ); + + $misc->printTree($funcs, $attrs, 'functions'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strfunctions']); + $misc->printBody(); + + switch ($action) { + case 'save_create': + if (isset($_POST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'save_edit': + if (isset($_POST['cancel'])) doDefault(); + else doSaveEdit(); + break; + case 'edit': + doEdit(); + break; + case 'properties': + doProperties(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/groups.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/groups.php new file mode 100644 index 00000000..b6e65249 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/groups.php @@ -0,0 +1,330 @@ +<?php + + /** + * Manage groups in a database cluster + * + * $Id: groups.php,v 1.27 2007/08/31 18:30:11 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Add user to a group + */ + function doAddMember() { + global $data, $misc; + global $lang; + + $status = $data->addGroupMember($_REQUEST['group'], $_REQUEST['user']); + if ($status == 0) + doProperties($lang['strmemberadded']); + else + doProperties($lang['strmemberaddedbad']); + } + + /** + * Show confirmation of drop user from group and perform actual drop + */ + function doDropMember($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('group'); + $misc->printTitle($lang['strdropmember'],'pg.group.alter'); + + echo "<p>", sprintf($lang['strconfdropmember'], $misc->printVal($_REQUEST['user']), $misc->printVal($_REQUEST['group'])), "</p>\n"; + + echo "<form action=\"groups.php\" method=\"post\">\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"action\" value=\"drop_member\" />\n"; + echo "<input type=\"hidden\" name=\"group\" value=\"", htmlspecialchars($_REQUEST['group']), "\" />\n"; + echo "<input type=\"hidden\" name=\"user\" value=\"", htmlspecialchars($_REQUEST['user']), "\" />\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->dropGroupMember($_REQUEST['group'], $_REQUEST['user']); + if ($status == 0) + doProperties($lang['strmemberdropped']); + else + doDropMember(true, $lang['strmemberdroppedbad']); + } + } + + /** + * Show read only properties for a group + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['user'])) $_POST['user'] = ''; + + $misc->printTrail('group'); + $misc->printTitle($lang['strproperties'],'pg.group'); + $misc->printMsg($msg); + + $groupdata = $data->getGroup($_REQUEST['group']); + $users = $data->getUsers(); + + if ($groupdata->recordCount() > 0) { + $columns = array ( + 'members' => array ( + 'title' => $lang['strmembers'], + 'field' => field('usename') + ), + 'actions' => array ( + 'title' => $lang['stractions'], + ) + ); + + $actions = array ( + 'drop' => array ( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'groups.php', + 'urlvars' => array ( + 'action' => 'confirm_drop_member', + 'group' => $_REQUEST['group'], + 'user' => field('usename') + ) + ) + ) + ) + ); + + $misc->printTable($groupdata, $columns, $actions, 'groups-members', $lang['strnousers']); + } + + // Display form for adding a user to the group + echo "<form action=\"groups.php\" method=\"post\">\n"; + echo "<select name=\"user\">"; + while (!$users->EOF) { + $uname = $misc->printVal($users->fields['usename']); + echo "<option value=\"{$uname}\"", + ($uname == $_POST['user']) ? ' selected="selected"' : '', ">{$uname}</option>\n"; + $users->moveNext(); + } + echo "</select>\n"; + echo "<input type=\"submit\" value=\"{$lang['straddmember']}\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"group\" value=\"", htmlspecialchars($_REQUEST['group']), "\" />\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"add_member\" />\n"; + echo "</form>\n"; + + $misc->printNavLinks(array ('showall' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'groups.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strshowallgroups'] + )), 'groups-properties', get_defined_vars()); + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('group'); + $misc->printTitle($lang['strdrop'],'pg.group.drop'); + + echo "<p>", sprintf($lang['strconfdropgroup'], $misc->printVal($_REQUEST['group'])), "</p>\n"; + + echo "<form action=\"groups.php\" method=\"post\">\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"group\" value=\"", htmlspecialchars($_REQUEST['group']), "\" />\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->dropGroup($_REQUEST['group']); + if ($status == 0) + doDefault($lang['strgroupdropped']); + else + doDefault($lang['strgroupdroppedbad']); + } + } + + /** + * Displays a screen where they can enter a new group + */ + function doCreate($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['name'])) $_POST['name'] = ''; + if (!isset($_POST['members'])) $_POST['members'] = array(); + + // Fetch a list of all users in the cluster + $users = $data->getUsers(); + + $misc->printTrail('server'); + $misc->printTitle($lang['strcreategroup'],'pg.group.create'); + $misc->printMsg($msg); + + echo "<form action=\"\" method=\"post\">\n"; + echo $misc->form; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data\"><input size=\"32\" maxlength=\"{$data->_maxNameLen}\" name=\"name\" value=\"", htmlspecialchars($_POST['name']), "\" /></td>\n\t</tr>\n"; + if ($users->recordCount() > 0) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strmembers']}</th>\n"; + + echo "\t\t<td class=\"data\">\n"; + echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", min(40, $users->recordCount()), "\">\n"; + while (!$users->EOF) { + $username = $users->fields['usename']; + echo "\t\t\t\t<option value=\"{$username}\"", + (in_array($username, $_POST['members']) ? ' selected="selected"' : ''), ">", $misc->printVal($username), "</option>\n"; + $users->moveNext(); + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new group in the database + */ + function doSaveCreate() { + global $data; + global $lang; + + if (!isset($_POST['members'])) $_POST['members'] = array(); + + // Check form vars + if (trim($_POST['name']) == '') + doCreate($lang['strgroupneedsname']); + else { + $status = $data->createGroup($_POST['name'], $_POST['members']); + if ($status == 0) + doDefault($lang['strgroupcreated']); + else + doCreate($lang['strgroupcreatedbad']); + } + } + + /** + * Show default list of groups in the database + */ + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('server'); + $misc->printTabs('server','groups'); + $misc->printMsg($msg); + + $groups = $data->getGroups(); + + $columns = array( + 'group' => array( + 'title' => $lang['strgroup'], + 'field' => field('groname'), + 'url' => "groups.php?action=properties&{$misc->href}&", + 'vars' => array('group' => 'groname'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + ); + + $actions = array( + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'groups.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'group' => field('groname') + ) + ) + ) + ), + ); + + $misc->printTable($groups, $columns, $actions, 'groups-properties', $lang['strnogroups']); + + $misc->printNavLinks(array ('create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'groups.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strcreategroup'] + )), 'groups-groups', get_defined_vars()); + + } + + $misc->printHeader($lang['strgroups']); + $misc->printBody(); + + switch ($action) { + case 'add_member': + doAddMember(); + break; + case 'drop_member': + if (isset($_REQUEST['drop'])) doDropMember(false); + else doProperties(); + break; + case 'confirm_drop_member': + doDropMember(true); + break; + case 'save_create': + if (isset($_REQUEST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_REQUEST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'save_edit': + doSaveEdit(); + break; + case 'edit': + doEdit(); + break; + case 'properties': + doProperties(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help.php new file mode 100644 index 00000000..9dbde0eb --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help.php @@ -0,0 +1,88 @@ +<?php + + /** + * Help page redirection/browsing. + * + * $Id: help.php,v 1.3 2006/12/31 16:21:26 soranzo Exp $ + */ + + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + function doDefault() { + global $data, $lang; + + if (isset($_REQUEST['help'])) { + $url = $data->getHelp($_REQUEST['help']); + + if (is_array($url)) { + doChoosePage($url); + return; + } + + if ($url) { + header("Location: $url"); + exit; + } + } + + doBrowse($lang['strinvalidhelppage']); + } + + function doBrowse($msg = '') { + global $misc, $data, $lang; + + $misc->printHeader($lang['strhelppagebrowser']); + $misc->printBody(); + + $misc->printTitle($lang['strselecthelppage']); + + echo $misc->printMsg($msg); + + echo "<dl>\n"; + + $pages = $data->getHelpPages(); + foreach ($pages as $page => $dummy) { + echo "<dt>{$page}</dt>\n"; + + $urls = $data->getHelp($page); + if (!is_array($urls)) $urls = array($urls); + foreach ($urls as $url) { + echo "<dd><a href=\"{$url}\">{$url}</a></dd>\n"; + } + } + + echo "</dl>\n"; + + $misc->printFooter(); + } + + function doChoosePage($urls) { + global $misc, $lang; + + $misc->printHeader($lang['strhelppagebrowser']); + $misc->printBody(); + + $misc->printTitle($lang['strselecthelppage']); + + echo "<ul>\n"; + foreach($urls as $url) { + echo "<li><a href=\"{$url}\">{$url}</a></li>\n"; + } + echo "</ul>\n"; + + $misc->printFooter(); + } + + switch ($action) { + case 'browse': + doBrowse(); + break; + default: + doDefault(); + break; + } +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc10.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc10.php new file mode 100644 index 00000000..79fb627a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc10.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.5 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc96.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '10'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc11.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc11.php new file mode 100644 index 00000000..36e768f9 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc11.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.5 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc10.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '11'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc12.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc12.php new file mode 100644 index 00000000..154953d7 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc12.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.5 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc11.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '12'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc74.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc74.php new file mode 100644 index 00000000..b8458283 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc74.php @@ -0,0 +1,160 @@ +<?php + + +/** + * Help links for PostgreSQL 7.4 documentation + */ + + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '7.4'); + +# TODO: Check and fix links + +$this->help_page = array( + + 'pg.database' => 'managing-databases.html', + 'pg.database.create' => array('sql-createdatabase.html', 'manage-ag-createdb.html'), + 'pg.database.alter' => 'sql-alterdatabase.html', + 'pg.database.drop' => array('sql-dropdatabase.html', 'manage-ag-dropdb.html'), + + 'pg.admin.analyze' => 'sql-analyze.html', + 'pg.admin.vacuum' => 'sql-vacuum.html', + + 'pg.cast' => array('sql-expressions.html#SQL-SYNTAX-TYPE-CASTS','sql-createcast.html'), + 'pg.cast.create' => 'sql-createcast.html', + 'pg.cast.drop' => 'sql-dropcast.html', + + 'pg.column.add' => array('ddl-alter.html#AEN2115', 'sql-altertable.html'), + 'pg.column.alter' => array('ddl-alter.html','sql-altertable.html'), + 'pg.column.drop' => array('ddl-alter.html#AEN2124', 'sql-altertable.html'), + + 'pg.constraint' => 'ddl-constraints.html', + 'pg.constraint.add' => 'ddl-alter.html#AEN2131', + 'pg.constraint.check' => 'ddl-constraints.html#AEN1895', + 'pg.constraint.drop' => 'ddl-alter.html#AEN2140', + 'pg.constraint.foreign_key' => 'ddl-constraints.html#DDL-CONSTRAINTS-FK', + 'pg.constraint.primary_key' => 'ddl-constraints.html#AEN1972', + 'pg.constraint.unique_key' => 'ddl-constraints.html#AEN1950', + + 'pg.conversion' => 'multibyte.html', + 'pg.conversion.alter' => 'sql-alterconversion.html', + 'pg.conversion.create' => 'sql-createconversion.html', + 'pg.conversion.drop' => 'sql-dropconversion.html', + + 'pg.domain' => 'extend-type-system.html#AEN28657', + 'pg.domain.alter' => 'sql-alterdomain.html', + 'pg.domain.create' => 'sql-createdomain.html', + 'pg.domain.drop' => 'sql-dropdomain.html', + + 'pg.function' => array('xfunc.html', 'functions.html', 'sql-expressions.html#AEN1599'), + 'pg.function.alter' => 'sql-alterfunction.html', + 'pg.function.create' => 'sql-createfunction.html', + 'pg.function.create.c' => array('xfunc-c.html','sql-createfunction.html'), + 'pg.function.create.internal' => array('xfunc-internal.html','sql-createfunction.html'), + 'pg.function.create.pl' => array('xfunc-sql.html','xfunc-pl.html','sql-createfunction.html'), + 'pg.function.drop' => 'sql-dropfunction.html', + + 'pg.group' => 'groups.html', + 'pg.group.alter' => array('sql-altergroup.html','groups.html'), + 'pg.group.create' => 'sql-creategroup.html', + 'pg.group.drop' => 'sql-dropgroup.html', + + 'pg.index' => 'indexes.html', + 'pg.index.cluster' => 'sql-cluster.html', + 'pg.index.drop' => 'sql-dropindex.html', + 'pg.index.create' => 'sql-createindex.html', + 'pg.index.reindex' => 'sql-reindex.html', + + 'pg.language' => 'xplang.html', + 'pg.language.alter' => 'sql-alterlanguage.html', + 'pg.language.create' => 'sql-createlanguage.html', + 'pg.language.drop' => 'sql-droplanguage.html', + + 'pg.opclass' => 'indexes-opclass.html', + 'pg.opclass.alter' => 'sql-alteropclass.html', + 'pg.opclass.create' => 'sql-createopclass.html', + 'pg.opclass.drop' => 'sql-dropopclass.html', + + 'pg.operator' => array('xoper.html', 'functions.html', 'sql-expressions.html#AEN1570'), + 'pg.operator.alter' => 'sql-alteroperator.html', + 'pg.operator.create' => 'sql-createoperator.html', + 'pg.operator.drop' => 'sql-dropoperator.html', + + 'pg.pl' => 'xplang.html', + 'pg.pl.plperl' => 'plperl.html', + 'pg.pl.plpgsql' => 'plpgsql.html', + 'pg.pl.plpython' => 'plpython.html', + 'pg.pl.pltcl' => 'pltcl.html', + + 'pg.privilege' => array('privileges.html','ddl-priv.html'), + 'pg.privilege.grant' => 'sql-grant.html', + 'pg.privilege.revoke' => 'sql-revoke.html', + + 'pg.process' => 'monitoring.html', + + 'pg.rule' => 'rules.html', + 'pg.rule.create' => 'sql-createrule.html', + 'pg.rule.drop' => 'sql-droprule.html', + + 'pg.schema' => 'ddl-schemas.html', + 'pg.schema.alter' => 'sql-alterschema.html', + 'pg.schema.create' => array( 'sql-createschema.html','ddl-schemas.html#DDL-SCHEMAS-CREATE'), + 'pg.schema.drop' => 'sql-dropschema.html', + 'pg.schema.search_path' => 'ddl-schemas.html#DDL-SCHEMAS-PATH', + + 'pg.sequence' => 'functions-sequence.html', + 'pg.sequence.alter' => 'sql-altersequence.html', + 'pg.sequence.create' => 'sql-createsequence.html', + 'pg.sequence.drop' => 'sql-dropsequence.html', + + 'pg.sql' => array('sql.html','sql-commands.html'), + 'pg.sql.insert' => 'sql-insert.html', + 'pg.sql.select' => 'sql-select.html', + 'pg.sql.update' => 'sql-update.html', + + 'pg.table' => 'ddl.html#DDL-BASICS', + 'pg.table.alter' => 'sql-altertable.html', + 'pg.table.create' => 'sql-createtable.html', + 'pg.table.drop' => 'sql-droptable.html', + 'pg.table.empty' => 'sql-truncate.html', + + 'pg.tablespace' => 'manage-ag-tablespaces.html', + 'pg.tablespace.alter' => 'sql-altertablespace.html', + 'pg.tablespace.create' => 'sql-createtablespace.html', + 'pg.tablespace.drop' => 'sql-droptablespace.html', + + 'pg.trigger' => 'triggers.html', + 'pg.trigger.alter' => 'sql-altertrigger.html', + 'pg.trigger.create' => 'sql-createtrigger.html', + 'pg.trigger.drop' => 'sql-droptrigger.html', + + 'pg.type' => array('xtypes.html','datatype.html','extend-type-system.html'), + 'pg.type.alter' => 'sql-altertype.html', + 'pg.type.create' => 'sql-createtype.html', + 'pg.type.drop' => 'sql-droptype.html', + + 'pg.user.alter' => array('sql-alteruser.html','user-attributes.html'), + 'pg.user.create' => array('sql-createuser.html','user-manag.html#DATABASE-USERS'), + 'pg.user.drop' => array('sql-dropuser.html','user-manag.html#DATABASE-USERS'), + + 'pg.variable' => 'runtime-config.html', + + 'pg.view' => 'tutorial-views.html', + 'pg.view.alter' => array('sql-createview.html','sql-altertable.html'), + 'pg.view.create' => 'sql-createview.html', + 'pg.view.drop' => 'sql-dropview.html', + + 'pg.aggregate' => array('xaggr.html', 'tutorial-agg.html', 'functions-aggregate.html', 'sql-expressions.html#SYNTAX-AGGREGATES'), + 'pg.aggregate.create' => 'sql-createaggregate.html', + 'pg.aggregate.drop' => 'sql-dropaggregate.html', + 'pg.aggregate.alter' => 'sql-alteraggregate.html', + + 'pg.server' => 'admin.html', + + 'pg.user' => 'user-manag.html', + + 'pg.locks' => 'view-pg-locks.html' +); + + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc80.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc80.php new file mode 100644 index 00000000..f0bd19ad --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc80.php @@ -0,0 +1,28 @@ +<?php + +/** + * Help links for PostgreSQL 8.0 documentation + * + * $Id: PostgresDoc80.php,v 1.5 2005/02/16 10:27:44 jollytoad Exp $ + */ + +include('./help/PostgresDoc74.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '8.0'); + +$this->help_page['pg.column.add'][0] = 'ddl-alter.html#AEN2217'; +$this->help_page['pg.column.drop'][0] = 'ddl-alter.html#AEN2226'; + +$this->help_page['pg.constraint.add'] = 'ddl-alter.html#AEN2217'; +$this->help_page['pg.constraint.check'] = 'ddl-constraints.html#AEN1978'; +$this->help_page['pg.constraint.drop'] = 'ddl-alter.html#AEN2226'; +$this->help_page['pg.constraint.primary_key'] = 'ddl-constraints.html#AEN2055'; +$this->help_page['pg.constraint.unique_key'] = 'ddl-constraints.html#AEN2033'; + +$this->help_page['pg.domain'] = 'extend-type-system.html#AEN27940'; + +$this->help_page['pg.function'][2] = 'sql-expressions.html#AEN1652'; + +$this->help_page['pg.operator'][2] = 'sql-expressions.html#AEN1623'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc81.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc81.php new file mode 100644 index 00000000..29307e37 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc81.php @@ -0,0 +1,18 @@ +<?php + +/** + * Help links for PostgreSQL 8.1 documentation + * + * $Id: PostgresDoc81.php,v 1.3 2006/12/28 04:26:55 xzilla Exp $ + */ + +include('./help/PostgresDoc80.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '8.1'); + +$this->help_page['pg.role'] = 'user-manag.html'; +$this->help_page['pg.role.create'] = array('sql-createrole.html','user-manag.html#DATABASE-ROLES'); +$this->help_page['pg.role.alter'] = array('sql-alterrole.html','role-attributes.html'); +$this->help_page['pg.role.drop'] = array('sql-droprole.html','user-manag.html#DATABASE-ROLES'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc82.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc82.php new file mode 100644 index 00000000..7b956f0c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc82.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 8.2 documentation + * + * $Id: PostgresDoc82.php,v 1.3 2007/11/30 15:27:26 soranzo Exp $ + */ + +include('./help/PostgresDoc81.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '8.2'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc83.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc83.php new file mode 100644 index 00000000..3684ad28 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc83.php @@ -0,0 +1,27 @@ +<?php + +/** + * Help links for PostgreSQL 8.3 documentation + * + * $Id: PostgresDoc83.php,v 1.3 2008/03/17 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc82.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '8.3'); + +$this->help_page['pg.fts'] = 'textsearch.html'; + +$this->help_page['pg.ftscfg'] = 'textsearch-intro.html#TEXTSEARCH-INTRO-CONFIGURATIONS'; +$this->help_page['pg.ftscfg.example'] = 'textsearch-configuration.html'; +$this->help_page['pg.ftscfg.drop'] = 'sql-droptsconfig.html'; +$this->help_page['pg.ftscfg.create'] = 'sql-createtsconfig.html'; +$this->help_page['pg.ftscfg.alter'] = 'sql-altertsconfig.html'; + +$this->help_page['pg.ftsdict'] = 'textsearch-dictionaries.html'; +$this->help_page['pg.ftsdict.drop'] = 'sql-droptsdictionary.html'; +$this->help_page['pg.ftsdict.create'] = array('sql-createtsdictionary.html', 'sql-createtstemplate.html'); +$this->help_page['pg.ftsdict.alter'] = 'sql-altertsdictionary.html'; + +$this->help_page['pg.ftsparser'] = 'textsearch-parsers.html'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc84.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc84.php new file mode 100644 index 00000000..91c8b204 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc84.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 8.4 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc83.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '8.4'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc90.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc90.php new file mode 100644 index 00000000..519a7db7 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc90.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.0 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc84.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '9.0'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc91.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc91.php new file mode 100644 index 00000000..74e4fea4 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc91.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.1 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc90.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '9.1'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc92.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc92.php new file mode 100644 index 00000000..7cfdfdec --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc92.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.2 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc91.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '9.2'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc93.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc93.php new file mode 100644 index 00000000..014b0c84 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc93.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.3 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc92.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '9.3'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc94.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc94.php new file mode 100644 index 00000000..94a1dedc --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc94.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.4 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc93.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '9.4'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc95.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc95.php new file mode 100644 index 00000000..5ef261ab --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc95.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.5 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc94.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '9.5'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc96.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc96.php new file mode 100644 index 00000000..7bfaca3b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/help/PostgresDoc96.php @@ -0,0 +1,13 @@ +<?php + +/** + * Help links for PostgreSQL 9.5 documentation + * + * $Id: PostgresDoc84.php,v 1.3 2008/11/18 21:35:48 ioguix Exp $ + */ + +include('./help/PostgresDoc95.php'); + +$this->help_base = sprintf($GLOBALS['conf']['help_base'], '9.6'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/history.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/history.php new file mode 100644 index 00000000..1dab1db8 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/history.php @@ -0,0 +1,226 @@ +<?php + + /** + * Alternative SQL editing window + * + * $Id: history.php,v 1.3 2008/01/10 19:37:07 xzilla Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + function doDefault() { + global $misc, $lang; + + $onchange = "onchange=\"location.href='history.php?server=' + encodeURI(server.options[server.selectedIndex].value) + '&database=' + encodeURI(database.options[database.selectedIndex].value) + '&'\""; + + $misc->printHeader($lang['strhistory']); + + // Bring to the front always + echo "<body onload=\"window.focus();\">\n"; + + echo "<form action=\"history.php\" method=\"post\">\n"; + $misc->printConnection($onchange); + echo "</form><br />"; + + if (!isset($_REQUEST['database'])) { + echo "<p>{$lang['strnodatabaseselected']}</p>\n"; + return; + } + + if (isset($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']])) { + include_once('classes/ArrayRecordSet.php'); + + $history = new ArrayRecordSet($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']]); + + $columns = array( + 'query' => array( + 'title' => $lang['strsql'], + 'field' => field('query'), + ), + 'paginate' => array( + 'title' => $lang['strpaginate'], + 'field' => field('paginate'), + 'type' => 'yesno', + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + ); + + $actions = array( + 'run' => array( + 'content' => $lang['strexecute'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'sql.php', + 'urlvars' => array ( + 'subject' => 'history', + 'nohistory' => 't', + 'queryid' => field('queryid'), + 'paginate' => field('paginate') + ) + ), + 'target' => 'detail' + ) + ), + 'remove' => array( + 'content' => $lang['strdelete'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'history.php', + 'urlvars' => array ( + 'action' => 'confdelhistory', + 'queryid' => field('queryid'), + ) + ) + ) + ) + ); + + $misc->printTable($history, $columns, $actions, 'history-history', $lang['strnohistory']); + } + else echo "<p>{$lang['strnohistory']}</p>\n"; + + $navlinks = array ( + 'refresh' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'history.php', + 'urlvars' => array ( + 'action' => 'history', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + ) + ) + ), + 'content' => $lang['strrefresh'] + ) + ); + + if (isset($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']]) + && count($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']])) { + $navlinks['download'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'history.php', + 'urlvars' => array ( + 'action' => 'download', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'] + ) + ) + ), + 'content' => $lang['strdownload'] + ); + $navlinks['clear'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'history.php', + 'urlvars' => array( + 'action' => 'confclearhistory', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'] + ) + ) + ), + 'content' => $lang['strclearhistory'] + ); + } + + $misc->printNavLinks($navlinks, 'history-history', get_defined_vars()); + } + + function doDelHistory($qid, $confirm) { + global $misc, $lang; + + if ($confirm) { + $misc->printHeader($lang['strhistory']); + + // Bring to the front always + echo "<body onload=\"window.focus();\">\n"; + + echo "<h3>{$lang['strdelhistory']}</h3>\n"; + echo "<p>{$lang['strconfdelhistory']}</p>\n"; + + echo "<pre>", htmlentities($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']][$qid]['query'], ENT_QUOTES, 'UTF-8'), "</pre>"; + echo "<form action=\"history.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"delhistory\" />\n"; + echo "<input type=\"hidden\" name=\"queryid\" value=\"$qid\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; + echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; + echo "</form>\n"; + } + else + unset($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']][$qid]); + } + + function doClearHistory($confirm) { + global $misc, $lang; + + if ($confirm) { + $misc->printHeader($lang['strhistory']); + + // Bring to the front always + echo "<body onload=\"window.focus();\">\n"; + + echo "<h3>{$lang['strclearhistory']}</h3>\n"; + echo "<p>{$lang['strconfclearhistory']}</p>\n"; + + echo "<form action=\"history.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"clearhistory\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; + echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; + echo "</form>\n"; + } + else + unset($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']]); + } + + function doDownloadHistory() { + header('Content-Type: application/download'); + $datetime = date('YmdHis'); + header("Content-Disposition: attachment; filename=history{$datetime}.sql"); + + foreach ($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']] as $queries) { + $query = rtrim($queries['query']); + echo $query; + if (substr($query, -1) != ';') + echo ';'; + echo "\n"; + } + + exit; + } + + switch ($action) { + case 'confdelhistory': + doDelHistory($_REQUEST['queryid'], true); + break; + case 'delhistory': + if (isset($_POST['yes'])) doDelHistory($_REQUEST['queryid'], false); + doDefault(); + break; + case 'confclearhistory': + doClearHistory(true); + break; + case 'clearhistory': + if (isset($_POST['yes'])) doClearHistory(false); + doDefault(); + break; + case 'download': + doDownloadHistory(); + break; + default: + doDefault(); + } + + // Set the name of the window + $misc->setWindowName('history'); + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/Favicon.ico b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/Favicon.ico new file mode 100644 index 00000000..6a188d53 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/Favicon.ico differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/Introduction.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/Introduction.png new file mode 100644 index 00000000..17fe9370 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/Introduction.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/title.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/title.png new file mode 100644 index 00000000..44f5c7a1 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/bootstrap/title.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Lminus.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Lminus.png new file mode 100644 index 00000000..b5e48982 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Lminus.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Lplus.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Lplus.png new file mode 100644 index 00000000..ef51c7e3 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Lplus.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Tminus.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Tminus.png new file mode 100644 index 00000000..95a34bc8 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Tminus.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Tplus.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Tplus.png new file mode 100644 index 00000000..c54f5c80 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/Tplus.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/inputbckg.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/inputbckg.png new file mode 100644 index 00000000..35815c5e Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/inputbckg.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/openListe.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/openListe.png new file mode 100644 index 00000000..0d132d36 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/openListe.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/title.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/title.png new file mode 100644 index 00000000..ed8667b2 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/cappuccino/title.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AddArguments.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AddArguments.png new file mode 100644 index 00000000..3ac45e18 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AddArguments.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Admin.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Admin.png new file mode 100644 index 00000000..8ea212b4 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Admin.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Aggregate.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Aggregate.png new file mode 100644 index 00000000..6fe42013 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Aggregate.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Aggregates.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Aggregates.png new file mode 100644 index 00000000..46418598 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Aggregates.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AllUsers.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AllUsers.png new file mode 100644 index 00000000..bbfadb50 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AllUsers.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AvailableReplicationSet.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AvailableReplicationSet.png new file mode 100644 index 00000000..12e98aad Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AvailableReplicationSet.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AvailableSubscription.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AvailableSubscription.png new file mode 100644 index 00000000..100949ac Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/AvailableSubscription.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Backup.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Backup.png new file mode 100644 index 00000000..7783eb81 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Backup.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cast.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cast.png new file mode 100644 index 00000000..d7666e59 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cast.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Casts.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Casts.png new file mode 100644 index 00000000..d7b9e715 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Casts.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/CheckConstraint.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/CheckConstraint.png new file mode 100644 index 00000000..db078e94 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/CheckConstraint.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cluster.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cluster.png new file mode 100644 index 00000000..4b6bf121 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cluster.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Column.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Column.png new file mode 100644 index 00000000..ecd14338 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Column.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Columns.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Columns.png new file mode 100644 index 00000000..f2575775 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Columns.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Constraints.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Constraints.png new file mode 100644 index 00000000..76df5ed7 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Constraints.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Conversion.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Conversion.png new file mode 100644 index 00000000..bc6db85f Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Conversion.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Conversions.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Conversions.png new file mode 100644 index 00000000..2e372474 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Conversions.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Copy.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Copy.png new file mode 100644 index 00000000..a1378585 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Copy.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/CorruptedDatabase.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/CorruptedDatabase.png new file mode 100644 index 00000000..48dc1e0e Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/CorruptedDatabase.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cut.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cut.png new file mode 100644 index 00000000..8fdf5653 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Cut.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Database.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Database.png new file mode 100644 index 00000000..e998bc5b Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Database.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Databases.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Databases.png new file mode 100644 index 00000000..5cef88f9 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Databases.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Definition.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Definition.png new file mode 100644 index 00000000..77b21bc9 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Definition.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Delete.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Delete.png new file mode 100644 index 00000000..0aedd447 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Delete.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisabledJob.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisabledJob.png new file mode 100644 index 00000000..8bbad8cc Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisabledJob.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisconnectedDatabase.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisconnectedDatabase.png new file mode 100644 index 00000000..b81a1715 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisconnectedDatabase.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisconnectedServer.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisconnectedServer.png new file mode 100644 index 00000000..6badaecc Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/DisconnectedServer.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Domain.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Domain.png new file mode 100644 index 00000000..15ab7d7e Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Domain.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Domains.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Domains.png new file mode 100644 index 00000000..6356e48c Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Domains.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/EnableArgument.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/EnableArgument.png new file mode 100644 index 00000000..4ba0a0a5 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/EnableArgument.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Erase.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Erase.png new file mode 100644 index 00000000..a9ad128b Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Erase.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Execute.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Execute.png new file mode 100644 index 00000000..289805c9 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Execute.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ExecuteSave.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ExecuteSave.png new file mode 100644 index 00000000..ff2abb9f Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ExecuteSave.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Explain.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Explain.png new file mode 100644 index 00000000..71421ef3 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Explain.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Export.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Export.png new file mode 100644 index 00000000..fb7a14be Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Export.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Favicon.ico b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Favicon.ico new file mode 100644 index 00000000..6a188d53 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Favicon.ico differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Filter.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Filter.png new file mode 100644 index 00000000..4412a644 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Filter.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ForeignKey.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ForeignKey.png new file mode 100644 index 00000000..d4b99e88 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ForeignKey.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Fts.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Fts.png new file mode 100644 index 00000000..4bbc8a8e Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Fts.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsCfg.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsCfg.png new file mode 100644 index 00000000..6d6df989 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsCfg.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsDict.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsDict.png new file mode 100644 index 00000000..7fb0fc76 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsDict.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsParser.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsParser.png new file mode 100644 index 00000000..be510ec4 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/FtsParser.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Function.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Function.png new file mode 100644 index 00000000..a68e1fde Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Function.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Functions.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Functions.png new file mode 100644 index 00000000..6ed5535f Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Functions.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/GurusHint.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/GurusHint.png new file mode 100644 index 00000000..1ee60f11 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/GurusHint.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Help.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Help.png new file mode 100644 index 00000000..916726cb Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Help.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Histories.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Histories.png new file mode 100644 index 00000000..1ca603a1 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Histories.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/History.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/History.png new file mode 100644 index 00000000..5d9a56ce Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/History.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/I.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/I.png new file mode 100644 index 00000000..00fd3345 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/I.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Import.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Import.png new file mode 100644 index 00000000..fe49e637 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Import.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Index.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Index.png new file mode 100644 index 00000000..5a9b6a73 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Index.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Indexes.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Indexes.png new file mode 100644 index 00000000..92f6b330 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Indexes.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Introduction.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Introduction.png new file mode 100644 index 00000000..17fe9370 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Introduction.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Job.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Job.png new file mode 100644 index 00000000..b416209e Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Job.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Jobs.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Jobs.png new file mode 100644 index 00000000..b4dd8276 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Jobs.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Key.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Key.png new file mode 100644 index 00000000..a4b5adce Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Key.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/L.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/L.png new file mode 100644 index 00000000..b67c8375 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/L.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Language.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Language.png new file mode 100644 index 00000000..88f72ae4 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Language.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Languages.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Languages.png new file mode 100644 index 00000000..54c6bd72 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Languages.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Listen.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Listen.png new file mode 100644 index 00000000..5cf37a46 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Listen.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Listens.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Listens.png new file mode 100644 index 00000000..53f41229 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Listens.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Lminus.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Lminus.png new file mode 100644 index 00000000..8787956a Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Lminus.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Loading.gif b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Loading.gif new file mode 100644 index 00000000..874e0db1 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Loading.gif differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/LowerArgument.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/LowerArgument.png new file mode 100644 index 00000000..9334e907 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/LowerArgument.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Lplus.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Lplus.png new file mode 100644 index 00000000..4d5cd787 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Lplus.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Node.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Node.png new file mode 100644 index 00000000..c68cd444 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Node.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Nodes.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Nodes.png new file mode 100644 index 00000000..95bd6d68 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Nodes.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ObjectNotFound.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ObjectNotFound.png new file mode 100644 index 00000000..648b0fe8 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ObjectNotFound.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OfferedReplicationSet.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OfferedReplicationSet.png new file mode 100644 index 00000000..39076e7e Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OfferedReplicationSet.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OfferedSubscription.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OfferedSubscription.png new file mode 100644 index 00000000..8cfca1de Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OfferedSubscription.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Open.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Open.png new file mode 100644 index 00000000..f22d1633 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Open.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Operator.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Operator.png new file mode 100644 index 00000000..b67679a2 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Operator.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OperatorClass.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OperatorClass.png new file mode 100644 index 00000000..7af9217e Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OperatorClass.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OperatorClasses.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OperatorClasses.png new file mode 100644 index 00000000..489a5776 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/OperatorClasses.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Operators.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Operators.png new file mode 100644 index 00000000..c2d70758 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Operators.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Paste.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Paste.png new file mode 100644 index 00000000..d82c7332 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Paste.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Path.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Path.png new file mode 100644 index 00000000..2eab7168 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Path.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Paths.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Paths.png new file mode 100644 index 00000000..e61415be Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Paths.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/PrimaryKey.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/PrimaryKey.png new file mode 100644 index 00000000..ed317758 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/PrimaryKey.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Privileges.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Privileges.png new file mode 100644 index 00000000..ce800d51 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Privileges.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Processes.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Processes.png new file mode 100644 index 00000000..ca2bbe0c Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Processes.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Property.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Property.png new file mode 100644 index 00000000..e616bcbc Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Property.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/RaiseArgument.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/RaiseArgument.png new file mode 100644 index 00000000..b0ea0e1f Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/RaiseArgument.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Record.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Record.png new file mode 100644 index 00000000..d83812f3 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Record.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Records.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Records.png new file mode 100644 index 00000000..ccdae661 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Records.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Redo.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Redo.png new file mode 100644 index 00000000..ed5a0af9 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Redo.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Refresh.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Refresh.png new file mode 100644 index 00000000..74852bdb Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Refresh.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/RemoveArgument.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/RemoveArgument.png new file mode 100644 index 00000000..1e6d8aad Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/RemoveArgument.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Replication.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Replication.png new file mode 100644 index 00000000..af3f68ec Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Replication.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ReplicationSets.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ReplicationSets.png new file mode 100644 index 00000000..89ef45a8 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/ReplicationSets.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Restore.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Restore.png new file mode 100644 index 00000000..d14c4035 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Restore.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Roles.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Roles.png new file mode 100644 index 00000000..aad27285 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Roles.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Rule.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Rule.png new file mode 100644 index 00000000..a1ddf6b4 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Rule.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Rules.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Rules.png new file mode 100644 index 00000000..dc9aa0d6 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Rules.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Save.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Save.png new file mode 100644 index 00000000..6e8694e2 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Save.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schedule.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schedule.png new file mode 100644 index 00000000..92734710 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schedule.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schedules.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schedules.png new file mode 100644 index 00000000..2c37e7a3 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schedules.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schema.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schema.png new file mode 100644 index 00000000..e592562b Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schema.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schemas.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schemas.png new file mode 100644 index 00000000..0f2276a1 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Schemas.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Search.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Search.png new file mode 100644 index 00000000..1d3052f3 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Search.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Sequence.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Sequence.png new file mode 100644 index 00000000..9475ff40 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Sequence.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Sequences.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Sequences.png new file mode 100644 index 00000000..14109c5f Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Sequences.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Server.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Server.png new file mode 100644 index 00000000..34780287 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Server.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Servers.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Servers.png new file mode 100644 index 00000000..dd457a5f Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Servers.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/SqlEditor.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/SqlEditor.png new file mode 100644 index 00000000..51355992 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/SqlEditor.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Statistics.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Statistics.png new file mode 100644 index 00000000..c3d6b7b0 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Statistics.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Step.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Step.png new file mode 100644 index 00000000..897dc138 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Step.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Steps.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Steps.png new file mode 100644 index 00000000..b923faf9 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Steps.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Stop.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Stop.png new file mode 100644 index 00000000..67d870bf Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Stop.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Subscriptions.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Subscriptions.png new file mode 100644 index 00000000..63384cb1 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Subscriptions.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/T.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/T.png new file mode 100644 index 00000000..d555ac7c Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/T.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Table.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Table.png new file mode 100644 index 00000000..0f2b6303 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Table.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tables.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tables.png new file mode 100644 index 00000000..e5d0d829 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tables.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tablespace.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tablespace.png new file mode 100644 index 00000000..84489b1a Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tablespace.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tablespaces.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tablespaces.png new file mode 100644 index 00000000..57bd8dcc Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tablespaces.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tminus.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tminus.png new file mode 100644 index 00000000..86ed3a65 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tminus.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tplus.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tplus.png new file mode 100644 index 00000000..552d7a09 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Tplus.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Trigger.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Trigger.png new file mode 100644 index 00000000..a0c781de Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Trigger.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/TriggerFunction.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/TriggerFunction.png new file mode 100644 index 00000000..33b3336b Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/TriggerFunction.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/TriggerFunctions.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/TriggerFunctions.png new file mode 100644 index 00000000..e35f5d5a Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/TriggerFunctions.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Triggers.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Triggers.png new file mode 100644 index 00000000..4989f114 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Triggers.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Type.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Type.png new file mode 100644 index 00000000..9c8f5385 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Type.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Types.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Types.png new file mode 100644 index 00000000..dab72944 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Types.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Undo.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Undo.png new file mode 100644 index 00000000..8c8df1a5 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Undo.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UniqueConstraint.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UniqueConstraint.png new file mode 100644 index 00000000..a699c35c Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UniqueConstraint.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/User.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/User.png new file mode 100644 index 00000000..00bf4a97 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/User.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UserGroup.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UserGroup.png new file mode 100644 index 00000000..8f0e8d9b Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UserGroup.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UserGroups.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UserGroups.png new file mode 100644 index 00000000..2e91dfce Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/UserGroups.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Users.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Users.png new file mode 100644 index 00000000..d03e9ee0 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Users.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Variables.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Variables.png new file mode 100644 index 00000000..d24bc14c Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Variables.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/View.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/View.png new file mode 100644 index 00000000..103fd512 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/View.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Views.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Views.png new file mode 100644 index 00000000..a7232d7b Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/Views.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/blank.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/blank.png new file mode 100644 index 00000000..dae1f43d Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/blank.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/title.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/title.png new file mode 100644 index 00000000..10015d67 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/images/themes/default/title.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/index.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/index.php new file mode 100644 index 00000000..f9177b7f --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/index.php @@ -0,0 +1,42 @@ +<?php + // cytopia edit + error_reporting(E_ERROR | E_WARNING | E_PARSE); + //error_reporting(E_ALL & ~E_DEPRECATED); + + + /** + * Main access point to the app. + * + * $Id: index.php,v 1.13 2007/04/18 14:08:48 mr-russ Exp $ + */ + + // Include application functions + $_no_db_connection = true; + include_once('./libraries/lib.inc.php'); + $misc->printHeader('', null, true); + + $rtl = (strcasecmp($lang['applangdir'], 'rtl') == 0); + + $cols = $rtl ? '*,'.$conf['left_width'] : $conf['left_width'].',*'; + $mainframe = '<frame src="intro.php" name="detail" id="detail" frameborder="0" />' +?> +<frameset cols="<?php echo $cols ?>"> + +<?php if ($rtl) echo $mainframe; ?> + + <frame src="browser.php" name="browser" id="browser" frameborder="0" /> + +<?php if (!$rtl) echo $mainframe; ?> + + <noframes> + <body> + <?php echo $lang['strnoframes'] ?><br /> + <a href="intro.php"><?php echo $lang['strnoframeslink'] ?></a> + </body> + </noframes> + +</frameset> + +<?php + $misc->printFooter(false); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/indexes.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/indexes.js new file mode 100644 index 00000000..27160f2f --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/indexes.js @@ -0,0 +1,70 @@ + // Globals + // + + + /* + * Multiple Selection lists in HTML Document + */ + var tableColumnList; + var indexColumnList; + + /* + * Two Array vars + */ + + var indexColumns, tableColumns; + + + function buttonPressed(object) { + + if (object.name == "add") { + from = tableColumnList; + to = indexColumnList; + } + else { + to = tableColumnList; + from = indexColumnList; + } + + var selectedOptions = getSelectedOptions(from); + + for (i = 0; i < selectedOptions.length; i++) { + option = new Option(selectedOptions[i].text); + addToArray(to, option); + removeFromArray(from, selectedOptions[i].index); + } + } + + function doSelectAll() { + for(var x = 0; x < indexColumnList.options.length; x++){ + indexColumnList.options[x].selected = true; + } + } + + function init() { + tableColumnList = document.formIndex.TableColumnList; + indexColumnList = document.getElementById("IndexColumnList"); + indexColumns = indexColumnList.options; + tableColumns = tableColumnList.options; + } + + + function getSelectedOptions(obj) { + var selectedOptions = new Array(); + + for (i = 0; i < obj.options.length; i++) { + if (obj.options[i].selected) { + selectedOptions.push(obj.options[i]); + } + } + + return selectedOptions; + } + + function removeFromArray(obj, index) { + obj.remove(index); + } + + function addToArray(obj, item) { + obj.options[obj.options.length] = item; + } \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/indexes.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/indexes.php new file mode 100644 index 00000000..5c6ebdbf --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/indexes.php @@ -0,0 +1,422 @@ +<?php + + /** + * List indexes on a table + * + * $Id: indexes.php,v 1.46 2008/01/08 22:50:29 xzilla Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + include_once('./classes/class.select.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * Show confirmation of cluster index and perform actual cluster + */ + function doClusterIndex($confirm) { + global $data, $misc, $action; + global $lang; + + if ($confirm) { + // Default analyze to on + $_REQUEST['analyze'] = true; + + $misc->printTrail('index'); + $misc->printTitle($lang['strclusterindex'],'pg.index.cluster'); + + echo "<p>", sprintf($lang['strconfcluster'], $misc->printVal($_REQUEST['index'])), "</p>\n"; + + echo "<form action=\"indexes.php\" method=\"post\">\n"; + echo "<p><input type=\"checkbox\" id=\"analyze\" name=\"analyze\"", (isset($_REQUEST['analyze']) ? ' checked="checked"' : ''), " /><label for=\"analyze\">{$lang['stranalyze']}</label></p>\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"cluster_index\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"index\" value=\"", htmlspecialchars($_REQUEST['index']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"cluster\" value=\"{$lang['strclusterindex']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->clusterIndex($_POST['table'], $_POST['index']); + if ($status == 0) + if (isset($_POST['analyze'])){ + $status = $data->analyzeDB($_POST['table']); + if ($status == 0) + doDefault($lang['strclusteredgood'] . ' ' . $lang['stranalyzegood']); + else + doDefault($lang['stranalyzebad']); + } else + doDefault($lang['strclusteredgood']); + else + doDefault($lang['strclusteredbad']); + } + + } + + function doReindex() { + global $data, $lang; + + $status = $data->reindex('INDEX', $_REQUEST['index']); + if ($status == 0) + doDefault($lang['strreindexgood']); + else + doDefault($lang['strreindexbad']); + } + + /** + * Displays a screen where they can enter a new index + */ + function doCreateIndex($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['formIndexName'])) $_POST['formIndexName'] = ''; + if (!isset($_POST['formIndexType'])) $_POST['formIndexType'] = null; + if (!isset($_POST['formCols'])) $_POST['formCols'] = ''; + if (!isset($_POST['formWhere'])) $_POST['formWhere'] = ''; + if (!isset($_POST['formSpc'])) $_POST['formSpc'] = ''; + + $attrs = $data->getTableAttributes($_REQUEST['table']); + // Fetch all tablespaces from the database + if ($data->hasTablespaces()) $tablespaces = $data->getTablespaces(); + + $misc->printTrail('table'); + $misc->printTitle($lang['strcreateindex'],'pg.index.create'); + $misc->printMsg($msg); + + $selColumns = new XHTML_select("TableColumnList",true,10); + $selColumns->set_style("width: 10em;"); + + if ($attrs->recordCount() > 0) { + while (!$attrs->EOF) { + $selColumns->add(new XHTML_Option($attrs->fields['attname'])); + $attrs->moveNext(); + } + } + + $selIndex = new XHTML_select("IndexColumnList[]", true, 10); + $selIndex->set_style("width: 10em;"); + $selIndex->set_attribute("id", "IndexColumnList"); + $buttonAdd = new XHTML_Button("add", ">>"); + $buttonAdd->set_attribute("onclick", "buttonPressed(this);"); + $buttonAdd->set_attribute("type", "button"); + + $buttonRemove = new XHTML_Button("remove", "<<"); + $buttonRemove->set_attribute("onclick", "buttonPressed(this);"); + $buttonRemove->set_attribute("type", "button"); + + echo "<form onsubmit=\"doSelectAll();\" name=\"formIndex\" action=\"indexes.php\" method=\"post\">\n"; + + + echo "<table>\n"; + echo "<tr><th class=\"data required\" colspan=\"3\">{$lang['strindexname']}</th></tr>"; + echo "<tr>"; + echo "<td class=\"data1\" colspan=\"3\"><input type=\"text\" name=\"formIndexName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formIndexName']), "\" /></td></tr>"; + echo "<tr><th class=\"data\">{$lang['strtablecolumnlist']}</th><th class=\"data\"> </th>"; + echo "<th class=\"data required\">{$lang['strindexcolumnlist']}</th></tr>\n"; + echo "<tr><td class=\"data1\">" . $selColumns->fetch() . "</td>\n"; + echo "<td class=\"data1\">" . $buttonRemove->fetch() . $buttonAdd->fetch() . "</td>"; + echo "<td class=\"data1\">" . $selIndex->fetch() . "</td></tr>\n"; + echo "</table>\n"; + + echo "<table> \n"; + echo "<tr>"; + echo "<th class=\"data left required\" scope=\"row\">{$lang['strindextype']}</th>"; + echo "<td class=\"data1\"><select name=\"formIndexType\">"; + foreach ($data->typIndexes as $v) { + echo "<option value=\"", htmlspecialchars($v), "\"", + ($v == $_POST['formIndexType']) ? ' selected="selected"' : '', ">", htmlspecialchars($v), "</option>\n"; + } + echo "</select></td></tr>\n"; + echo "<tr>"; + echo "<th class=\"data left\" scope=\"row\"><label for=\"formUnique\">{$lang['strunique']}</label></th>"; + echo "<td class=\"data1\"><input type=\"checkbox\" id=\"formUnique\" name=\"formUnique\"", (isset($_POST['formUnique']) ? 'checked="checked"' : ''), " /></td>"; + echo "</tr>"; + echo "<tr>"; + echo "<th class=\"data left\" scope=\"row\">{$lang['strwhere']}</th>"; + echo "<td class=\"data1\">(<input name=\"formWhere\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formWhere']), "\" />)</td>"; + echo "</tr>"; + + // Tablespace (if there are any) + if ($data->hasTablespaces() && $tablespaces->recordCount() > 0) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strtablespace']}</th>\n"; + echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"formSpc\">\n"; + // Always offer the default (empty) option + echo "\t\t\t\t<option value=\"\"", + ($_POST['formSpc'] == '') ? ' selected="selected"' : '', "></option>\n"; + // Display all other tablespaces + while (!$tablespaces->EOF) { + $spcname = htmlspecialchars($tablespaces->fields['spcname']); + echo "\t\t\t\t<option value=\"{$spcname}\"", + ($spcname == $_POST['formSpc']) ? ' selected="selected"' : '', ">{$spcname}</option>\n"; + $tablespaces->moveNext(); + } + echo "\t\t\t</select>\n\t\t</td>\n\t</tr>\n"; + } + + if ($data->hasConcurrentIndexBuild()) { + echo "<tr>"; + echo "<th class=\"data left\" scope=\"row\"><label for=\"formConcur\">{$lang['strconcurrently']}</label></th>"; + echo "<td class=\"data1\"><input type=\"checkbox\" id=\"formConcur\" name=\"formConcur\"", (isset($_POST['formConcur']) ? 'checked="checked"' : ''), " /></td>"; + echo "</tr>"; + } + + echo "</table>"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create_index\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new index in the database + * @@ Note: this function can't handle columns with commas in them + */ + function doSaveCreateIndex() { + global $data; + global $lang; + + // Handle databases that don't have partial indexes + if (!isset($_POST['formWhere'])) $_POST['formWhere'] = ''; + // Default tablespace to null if it isn't set + if (!isset($_POST['formSpc'])) $_POST['formSpc'] = null; + + // Check that they've given a name and at least one column + if ($_POST['formIndexName'] == '') doCreateIndex($lang['strindexneedsname']); + elseif (!isset($_POST['IndexColumnList']) || $_POST['IndexColumnList'] == '') doCreateIndex($lang['strindexneedscols']); + else { + $status = $data->createIndex($_POST['formIndexName'], $_POST['table'], $_POST['IndexColumnList'], + $_POST['formIndexType'], isset($_POST['formUnique']), $_POST['formWhere'], $_POST['formSpc'], + isset($_POST['formConcur'])); + if ($status == 0) + doDefault($lang['strindexcreated']); + else + doCreateIndex($lang['strindexcreatedbad']); + } + } + + /** + * Show confirmation of drop index and perform actual drop + */ + function doDropIndex($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('index'); + $misc->printTitle($lang['strdrop'],'pg.index.drop'); + + echo "<p>", sprintf($lang['strconfdropindex'], $misc->printVal($_REQUEST['index'])), "</p>\n"; + + echo "<form action=\"indexes.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"drop_index\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"index\" value=\"", htmlspecialchars($_REQUEST['index']), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->dropIndex($_POST['index'], isset($_POST['cascade'])); + if ($status == 0) + doDefault($lang['strindexdropped']); + else + doDefault($lang['strindexdroppedbad']); + } + + } + + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + function indPre(&$rowdata, $actions) { + global $data, $lang; + + if ($data->phpBool($rowdata->fields['indisprimary'])) { + $rowdata->fields['+constraints'] = $lang['strprimarykey']; + $actions['drop']['disable'] = true; + } + elseif ($data->phpBool($rowdata->fields['indisunique'])) { + $rowdata->fields['+constraints'] = $lang['struniquekey']; + $actions['drop']['disable'] = true; + } + else + $rowdata->fields['+constraints'] = ''; + + return $actions; + } + + $misc->printTrail('table'); + $misc->printTabs('table','indexes'); + $misc->printMsg($msg); + + $indexes = $data->getIndexes($_REQUEST['table']); + + $columns = array( + 'index' => array( + 'title' => $lang['strname'], + 'field' => field('indname'), + ), + 'definition' => array( + 'title' => $lang['strdefinition'], + 'field' => field('inddef'), + ), + 'constraints' => array( + 'title' => $lang['strconstraints'], + 'field' => field('+constraints'), + 'type' => 'verbatim', + 'params'=> array('align' => 'center'), + ), + 'clustered' => array( + 'title' => $lang['strclustered'], + 'field' => field('indisclustered'), + 'type' => 'yesno', + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('idxcomment'), + ), + ); + + $actions = array( + 'cluster' => array( + 'content' => $lang['strclusterindex'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'indexes.php', + 'urlvars' => array ( + 'action' => 'confirm_cluster_index', + 'table' => $_REQUEST['table'], + 'index' => field('indname') + ) + ) + ) + ), + 'reindex' => array( + 'content' => $lang['strreindex'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'indexes.php', + 'urlvars' => array ( + 'action' => 'reindex', + 'table' => $_REQUEST['table'], + 'index' => field('indname') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'indexes.php', + 'urlvars' => array ( + 'action' => 'confirm_drop_index', + 'table' => $_REQUEST['table'], + 'index' => field('indname') + ) + ) + ) + ) + ); + + $misc->printTable($indexes, $columns, $actions, 'indexes-indexes', $lang['strnoindexes'], 'indPre'); + + $misc->printNavLinks(array ( + 'create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'indexes.php', + 'urlvars' => array ( + 'action' => 'create_index', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['strcreateindex'] + ) + ), 'indexes-indexes', get_defined_vars()); + } + + function doTree() { + global $misc, $data; + + $indexes = $data->getIndexes($_REQUEST['table']); + + $reqvars = $misc->getRequestVars('table'); + + function getIcon($f) { + if ($f['indisprimary'] == 't') + return 'PrimaryKey'; + if ($f['indisunique'] == 't') + return 'UniqueConstraint'; + return 'Index'; + } + + $attrs = array( + 'text' => field('indname'), + 'icon' => callback('getIcon'), + ); + + $misc->printTree($indexes, $attrs, 'indexes'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strindexes'], "<script src=\"indexes.js\" type=\"text/javascript\"></script>"); + + if ($action == 'create_index' || $action == 'save_create_index') + echo "<body onload=\"init();\">"; + else + $misc->printBody(); + + switch ($action) { + case 'cluster_index': + if (isset($_POST['cluster'])) doClusterIndex(false); + else doDefault(); + break; + case 'confirm_cluster_index': + doClusterIndex(true); + break; + case 'reindex': + doReindex(); + break; + case 'save_create_index': + if (isset($_POST['cancel'])) doDefault(); + else doSaveCreateIndex(); + break; + case 'create_index': + doCreateIndex(); + break; + case 'drop_index': + if (isset($_POST['drop'])) doDropIndex(false); + else doDefault(); + break; + case 'confirm_drop_index': + doDropIndex(true); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/info.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/info.php new file mode 100644 index 00000000..cfb6e8d3 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/info.php @@ -0,0 +1,339 @@ +<?php + + /** + * List extra information on a table + * + * $Id: info.php,v 1.14 2007/05/28 17:30:32 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * List all the information on the table + */ + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('table'); + $misc->printTabs('table','info'); + $misc->printMsg($msg); + + // common params for printVal + $shownull = array('null' => true); + + // Fetch info + $referrers = $data->getReferrers($_REQUEST['table']); + $parents = $data->getTableParents($_REQUEST['table']); + $children = $data->getTableChildren($_REQUEST['table']); + $tablestatstups = $data->getStatsTableTuples($_REQUEST['table']); + $tablestatsio = $data->getStatsTableIO($_REQUEST['table']); + $indexstatstups = $data->getStatsIndexTuples($_REQUEST['table']); + $indexstatsio = $data->getStatsIndexIO($_REQUEST['table']); + + // Check that there is some info + if (($referrers === -99 || ($referrers !== -99 && $referrers->recordCount() == 0)) + && $parents->recordCount() == 0 && $children->recordCount() == 0 + && ($tablestatstups->recordCount() == 0 && $tablestatsio->recordCount() == 0 + && $indexstatstups->recordCount() == 0 && $indexstatsio->recordCount() == 0)) { + $misc->printMsg($lang['strnoinfo']); + } + else { + // Referring foreign tables + if ($referrers !== -99 && $referrers->recordCount() > 0) { + echo "<h3>{$lang['strreferringtables']}</h3>\n"; + + $columns = array ( + 'schema' => array ( + 'title' => $lang['strschema'], + 'field' => field('nspname') + ), + 'table' => array ( + 'title' => $lang['strtable'], + 'field' => field('relname'), + ), + 'name' => array ( + 'title' => $lang['strname'], + 'field' => field('conname'), + ), + 'definition' => array ( + 'title' => $lang['strdefinition'], + 'field' => field('consrc'), + ), + 'actions' => array ( + 'title' => $lang['stractions'], + ) + ); + + $actions = array ( + 'properties' => array ( + 'content' => $lang['strproperties'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'constraints.php', + 'urlvars' => array ( + 'schema' => field('nspname'), + 'table' => field('relname') + ) + ) + ) + ) + ); + + $misc->printTable($referrers, $columns, $actions, 'info-referrers', $lang['strnodata']); + } + + // Parent tables + if ($parents->recordCount() > 0) { + echo "<h3>{$lang['strparenttables']}</h3>\n"; + + $columns = array ( + 'schema' => array ( + 'title' => $lang['strschema'], + 'field' => field('nspname') + ), + 'table' => array ( + 'title' => $lang['strtable'], + 'field' => field('relname'), + ), + 'actions' => array ( + 'title' => $lang['stractions'], + ) + ); + + $actions = array ( + 'properties' => array ( + 'content' => $lang['strproperties'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tblproperties.php', + 'urlvars' => array ( + 'schema' => field('nspname'), + 'table' => field('relname') + ) + ) + ) + ) + ); + + $misc->printTable($parents, $columns, $actions, 'info-parents', $lang['strnodata']); + } + + // Child tables + if ($children->recordCount() > 0) { + echo "<h3>{$lang['strchildtables']}</h3>\n"; + + $columns = array ( + 'schema' => array ( + 'title' => $lang['strschema'], + 'field' => field('nspname') + ), + 'table' => array ( + 'title' => $lang['strtable'], + 'field' => field('relname'), + ), + 'actions' => array ( + 'title' => $lang['stractions'], + ) + ); + + $actions = array ( + 'properties' => array ( + 'content' => $lang['strproperties'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tblproperties.php', + 'urlvars' => array ( + 'schema' => field('nspname'), + 'table' => field('relname') + ) + ) + ) + ) + ); + + $misc->printTable($children, $columns, $actions, 'info-children', $lang['strnodata']); + + } + + // Row performance + if ($tablestatstups->recordCount() > 0) { + echo "<h3>{$lang['strrowperf']}</h3>\n"; + + echo "<table>\n"; + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\" colspan=\"2\">{$lang['strsequential']}</th>\n"; + echo "\t\t<th class=\"data\" colspan=\"2\">{$lang['strindex']}</th>\n"; + echo "\t\t<th class=\"data\" colspan=\"3\">{$lang['strrows2']}</th>\n"; + echo "\t</tr>\n"; + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\">{$lang['strscan']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strread']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strscan']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strfetch']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strinsert']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strupdate']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strdelete']}</th>\n"; + echo "\t</tr>\n"; + $i = 0; + + while (!$tablestatstups->EOF) { + $id = ( ($i % 2 ) == 0 ? '1' : '2' ); + echo "\t<tr class=\"data{$id}\">\n"; + echo "\t\t<td>", $misc->printVal($tablestatstups->fields['seq_scan'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatstups->fields['seq_tup_read'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatstups->fields['idx_scan'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatstups->fields['idx_tup_fetch'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatstups->fields['n_tup_ins'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatstups->fields['n_tup_upd'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatstups->fields['n_tup_del'], 'int4', $shownull), "</td>\n"; + echo "\t</tr>\n"; + $tablestatstups->movenext(); + $i++; + } + + echo "</table>\n"; + } + + // I/O performance + if ($tablestatsio->recordCount() > 0) { + echo "<h3>{$lang['strioperf']}</h3>\n"; + + echo "<table>\n"; + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\" colspan=\"3\">{$lang['strheap']}</th>\n"; + echo "\t\t<th class=\"data\" colspan=\"3\">{$lang['strindex']}</th>\n"; + echo "\t\t<th class=\"data\" colspan=\"3\">{$lang['strtoast']}</th>\n"; + echo "\t\t<th class=\"data\" colspan=\"3\">{$lang['strtoastindex']}</th>\n"; + echo "\t</tr>\n"; + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\">{$lang['strdisk']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strcache']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strpercent']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strdisk']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strcache']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strpercent']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strdisk']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strcache']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strpercent']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strdisk']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strcache']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strpercent']}</th>\n"; + echo "\t</tr>\n"; + $i = 0; + + while (!$tablestatsio->EOF) { + $id = ( ($i % 2 ) == 0 ? '1' : '2' ); + echo "\t<tr class=\"data{$id}\">\n"; + + $total = $tablestatsio->fields['heap_blks_hit'] + $tablestatsio->fields['heap_blks_read']; + if ($total > 0) $percentage = round(($tablestatsio->fields['heap_blks_hit'] / $total) * 100); + else $percentage = 0; + echo "\t\t<td>", $misc->printVal($tablestatsio->fields['heap_blks_read'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatsio->fields['heap_blks_hit'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>({$percentage}{$lang['strpercent']})</td>\n"; + + $total = $tablestatsio->fields['idx_blks_hit'] + $tablestatsio->fields['idx_blks_read']; + if ($total > 0) $percentage = round(($tablestatsio->fields['idx_blks_hit'] / $total) * 100); + else $percentage = 0; + echo "\t\t<td>", $misc->printVal($tablestatsio->fields['idx_blks_read'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatsio->fields['idx_blks_hit'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>({$percentage}{$lang['strpercent']})</td>\n"; + + $total = $tablestatsio->fields['toast_blks_hit'] + $tablestatsio->fields['toast_blks_read']; + if ($total > 0) $percentage = round(($tablestatsio->fields['toast_blks_hit'] / $total) * 100); + else $percentage = 0; + echo "\t\t<td>", $misc->printVal($tablestatsio->fields['toast_blks_read'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatsio->fields['toast_blks_hit'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>({$percentage}{$lang['strpercent']})</td>\n"; + + $total = $tablestatsio->fields['tidx_blks_hit'] + $tablestatsio->fields['tidx_blks_read']; + if ($total > 0) $percentage = round(($tablestatsio->fields['tidx_blks_hit'] / $total) * 100); + else $percentage = 0; + echo "\t\t<td>", $misc->printVal($tablestatsio->fields['tidx_blks_read'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($tablestatsio->fields['tidx_blks_hit'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>({$percentage}{$lang['strpercent']})</td>\n"; + echo "\t</tr>\n"; + $tablestatsio->movenext(); + $i++; + } + + echo "</table>\n"; + } + + // Index row performance + if ($indexstatstups->recordCount() > 0) { + echo "<h3>{$lang['stridxrowperf']}</h3>\n"; + + echo "<table>\n"; + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\">{$lang['strindex']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strscan']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strread']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strfetch']}</th>\n"; + echo "\t</tr>\n"; + $i = 0; + + while (!$indexstatstups->EOF) { + $id = ( ($i % 2 ) == 0 ? '1' : '2' ); + echo "\t<tr class=\"data{$id}\">\n"; + echo "\t\t<td>", $misc->printVal($indexstatstups->fields['indexrelname']), "</td>\n"; + echo "\t\t<td>", $misc->printVal($indexstatstups->fields['idx_scan'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($indexstatstups->fields['idx_tup_read'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($indexstatstups->fields['idx_tup_fetch'], 'int4', $shownull), "</td>\n"; + echo "\t</tr>\n"; + $indexstatstups->movenext(); + $i++; + } + + echo "</table>\n"; + } + + // Index I/0 performance + if ($indexstatsio->recordCount() > 0) { + echo "<h3>{$lang['stridxioperf']}</h3>\n"; + + echo "<table>\n"; + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\">{$lang['strindex']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strdisk']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strcache']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strpercent']}</th>\n"; + echo "\t</tr>\n"; + $i = 0; + + while (!$indexstatsio->EOF) { + $id = ( ($i % 2 ) == 0 ? '1' : '2' ); + echo "\t<tr class=\"data{$id}\">\n"; + $total = $indexstatsio->fields['idx_blks_hit'] + $indexstatsio->fields['idx_blks_read']; + if ($total > 0) $percentage = round(($indexstatsio->fields['idx_blks_hit'] / $total) * 100); + else $percentage = 0; + echo "\t\t<td>", $misc->printVal($indexstatsio->fields['indexrelname']), "</td>\n"; + echo "\t\t<td>", $misc->printVal($indexstatsio->fields['idx_blks_read'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>", $misc->printVal($indexstatsio->fields['idx_blks_hit'], 'int4', $shownull), "</td>\n"; + echo "\t\t<td>({$percentage}{$lang['strpercent']})</td>\n"; + echo "\t</tr>\n"; + $indexstatsio->movenext(); + $i++; + } + + echo "</table>\n"; + } + } + } + + $misc->printHeader($lang['strtables'] . ' - ' . $_REQUEST['table'] . ' - ' . $lang['strinfo']); + $misc->printBody(); + + switch ($action) { + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/intro.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/intro.php new file mode 100644 index 00000000..e95916d2 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/intro.php @@ -0,0 +1,70 @@ +<?php + + /** + * Intro screen + * + * $Id: intro.php,v 1.19 2007/07/12 19:26:22 xzilla Exp $ + */ + + // Include application functions (no db conn) + $_no_db_connection = true; + include_once('./libraries/lib.inc.php'); + include_once('./themes/themes.php'); + + $misc->printHeader(); + $misc->printBody(); + + $misc->printTrail('root'); + $misc->printTabs('root','intro'); +?> + +<h1><?php echo "$appName $appVersion (PHP ". phpversion() .')' ?></h1> + +<form method="get" action="intro.php"> +<table> + <tr class="data1"> + <th class="data"><?php echo $lang['strlanguage'] ?></th> + <td> + <select name="language" onchange="this.form.submit()"> + <?php + $language = isset($_SESSION['webdbLanguage']) ? $_SESSION['webdbLanguage'] : 'english'; + foreach ($appLangFiles as $k => $v) { + echo "\t<option value=\"{$k}\"", + ($k == $language) ? ' selected="selected"' : '', + ">{$v}</option>\n"; + } + ?> + </select> + </td> + </tr> + <tr class="data2"> + <th class="data"><?php echo $lang['strtheme'] ?></th> + <td> + <select name="theme" onchange="this.form.submit()"> + <?php + foreach ($appThemes as $k => $v) { + echo "\t<option value=\"{$k}\"", + ($k == $conf['theme']) ? ' selected="selected"' : '', + ">{$v}</option>\n"; + } + ?> + </select> + </td> + </tr> +</table> +<noscript><p><input type="submit" value="<?php echo $lang['stralter'] ?>" /></p></noscript> +</form> + +<p><?php echo $lang['strintro'] ?></p> + +<ul class="intro"> + <li><a href="http://phppgadmin.sourceforge.net/"><?php echo $lang['strppahome'] ?></a></li> + <li><a href="<?php echo $lang['strpgsqlhome_url'] ?>"><?php echo $lang['strpgsqlhome'] ?></a></li> + <li><a href="http://sourceforge.net/tracker/?group_id=37132&atid=418980"><?php echo $lang['strreportbug'] ?></a></li> + <li><a href="<?php echo $lang['strviewfaq_url'] ?>"><?php echo $lang['strviewfaq'] ?></a></li> +</ul> + +<?php + if (isset($_GET['language'])) $_reload_browser = true; + $misc->printFooter(); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/ac_insert_row.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/ac_insert_row.js new file mode 100644 index 00000000..1101a99d --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/ac_insert_row.js @@ -0,0 +1,229 @@ +var fkl_hasnext=false; +var fkl_hasprev=false; + +/* hide the value list */ +function hideAc() { + jQuery.ppa.o=0; + with (jQuery.ppa) { + fklist.hide(); + fkbg.hide(); + } +} + +/* enable/disable auto-complete feature */ +function triggerAc(ac) { + if (ac) { + jQuery.ppa.attrs + .bind('keyup.ac_action', autocomplete) + .bind('focus.ac_action', autocomplete) + .bind('keypress.ac_action', move) + .addClass('ac_field'); + } + else { + jQuery.ppa.attrs + .removeClass('ac_field') + .unbind('.ac_action'); + } +} + +/* select the given index value and highlight it */ +function selectVal(index) { + if (index == jQuery.ppa.i) + return; + + // we catch the header as well so it takes th index 0 + var trs = jQuery.ppa.fklist.find('tr'); + + // change colors for unselected + if (jQuery.ppa.i > 0) + trs.eq(jQuery.ppa.i).find('*').css({ + 'background-color': '#fff', + 'color': '' + }); + + // change colors for newly selected + trs.eq(index).find('*').css({ + 'background-color': '#3d80df', + 'color': '#fff' + }); + + jQuery.ppa.i = index; +} + +function openlist(e) { + var elt = jQuery(e); + var attnum = elt.attr('id').match(/\d+/)[0]; + /* FIXME we only support the first FK constraint of the field */ + var conid = attrs['attr_'+attnum][0]; + + var constr = constrs["constr_" + conid]; + + // get the changed attribute position in the arrays + for (i=0; (constr.pattnums[i] != attnum);i++); + + var datas = { + fattpos: i, + fvalue: e.value, + database: database, + 'keys[]': constr.pattnums, + 'keynames[]': constr.pattnames, + 'fkeynames[]': constr.fattnames, + f_table: constr.f_table, + f_schema: constr.f_schema, + offset: jQuery.ppa.o + }; + + jQuery.ajax({ + url: 'ajax-ac-insert.php?server=' + server, + type: 'post', + data: datas, + dataType: 'html', + cache: false, + contentType: 'application/x-www-form-urlencoded', + success: function (ret) { + jQuery.ppa.i = 0; + jQuery.ppa.fkbg.show(); + with(jQuery.ppa.fklist) { + html(ret); + appendTo('#row_att_'+ attnum); + css('width',elt.css('width')); + show(); + jQuery.ppa.numrow = find('tr').length; + } + } + }); +} + + +/* move the cursor down or up, + * load available next/prev values if going out of bound */ +function move(event) { + /* selecting next value down. + * if the list is closed, it will open next */ + if(event.keyCode == 40) { + if (jQuery.ppa.fklist[0].style.display == 'block') { + if ((jQuery.ppa.i + 1) < jQuery.ppa.numrow) { + selectVal(jQuery.ppa.i + 1); + } + else if (fkl_hasnext == true) { + jQuery.ppa.o+=11; + openlist(this); + } + } + else { + openlist(this); + } + } + /* selecting prev value up */ + else if(event.keyCode == 38) { + if ((jQuery.ppa.i - 1) > 0) { + selectVal(jQuery.ppa.i - 1); + } + else if ((fkl_hasprev == true) && (jQuery.ppa.i == 1)) { + jQuery.ppa.o-=11; + openlist(this); + } + else { + selectVal(jQuery.ppa.numrow -1); + } + } +} + +/* open/update the value list */ +function autocomplete(event) { + + /* if pressing enter, fire a click on the selected line */ + if (event.keyCode == 13) { + if (jQuery.ppa.i > 0) { + jQuery.ppa.fklist.find('tr').eq(jQuery.ppa.i).click(); + } + return false; + } + /* ignoring 38:up and 40:down */ + else if ( event.keyCode == 38 || event.keyCode == 40 ) { + return false; + } + /* ignoring 9:tab, 37:left, 39:right, 16:shift, ctrl: 17, alt:18, 20:lockmaj */ + else if ( event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 + || event.keyCode == 16 || event.keyCode == 17 + || event.keyCode == 18 || event.keyCode == 20) { + return true; + } + /* esc */ + else if (event.keyCode == 27) { + hideAc(); + } + /* request the list of possible values asynchronously */ + else { + /* if we refresh because of a value update, + * we reset back to offset 0 so we catch values + * if list is smaller than 11 values */ + if (event.type == 'keyup') + jQuery.ppa.o = 0; + openlist(this); + } + + return true; +} + +/* bind actions on values lines: hover for style change, click for select */ +with(jQuery('tr.acline')) { + live('mouseover', function () { + selectVal(jQuery('table.ac_values tr').index(this)); + }); + + live('click', function () { + var a = jQuery(this).find('td > a.fkval'); + + for (i=0; i < a.length; i++) { + jQuery('input[name="values['+ a[i].name +']"]').val(jQuery(a[i]).text()); + } + hideAc(); + }); +} + +jQuery('#fkprev').live('click', function () { + jQuery.ppa.o -= 11; + /* get the field that is the previous html elt from the #fklist + * and trigger its focus to refresh the list AND actualy + * focus back on the field */ + jQuery('#fklist').prev().focus(); +}); + +jQuery('#fknext').live('click', function () { + jQuery.ppa.o += 11; + /* get the field that is the previous html elt from the #fklist + * and trigger its focus to refresh the list AND actualy + * focus back on the field*/ + jQuery('#fklist').prev().focus(); +}); + +jQuery(document).ready(function () { + /* register some global value in the ppa namespace */ + jQuery.ppa = { + fklist: jQuery('#fklist'), + attrs: jQuery('input[id^=attr_]'), // select fields with FK + fkbg: jQuery('#fkbg'), + i:0, // selected value indice + o:0 // offset when navigating prev/next + }; + + /* close the list when clicking outside of it */ + jQuery.ppa.fkbg.click(function (e) { + hideAc(); + }); + + /* do not submit the form when selecting a value by pressing enter */ + jQuery.ppa.attrs + .keydown(function (e) { + if (e.keyCode == 13 && jQuery.ppa.fklist[0].style.display == 'block') + return false; + }); + + /* enable/disable auto-complete according to the checkbox */ + triggerAc( + jQuery('#no_ac').click(function () { + triggerAc(this.checked); + })[0].checked + ); +}); diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/database.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/database.js new file mode 100644 index 00000000..f70f7078 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/database.js @@ -0,0 +1,64 @@ +$(document).ready(function() { + + var timeid = query = null; + var controlLink = $('#control'); + var errmsg = $('<p class="errmsg">'+Database.errmsg+'</p>') + .insertBefore(controlLink) + .hide(); + var loading = $('<img class="loading" alt="[loading]" src="'+ Database.load_icon +'" />') + .insertAfter(controlLink) + .hide(); + + function refreshTable() { + if (Database.ajax_time_refresh > 0) { + loading.show(); + query = $.ajax({ + type: 'GET', + dataType: 'html', + data: {server: Database.server, database: Database.dbname, action: Database.action}, + url: 'database.php', + cache: false, + contentType: 'application/x-www-form-urlencoded', + success: function(html) { + $('#data_block').html(html); + timeid = window.setTimeout(refreshTable, Database.ajax_time_refresh) + }, + error: function() { + controlLink.click(); + errmsg.show(); + }, + complete: function () { + loading.hide(); + } + }); + } + } + + controlLink.toggle( + function() { + $(errmsg).hide(); + timeid = window.setTimeout(refreshTable, Database.ajax_time_refresh); + controlLink.html('<img src="'+ Database.str_stop.icon +'" alt="" /> ' + + Database.str_stop.text + ' ' + ); + }, + function() { + $(errmsg).hide(); + $(loading).hide(); + window.clearInterval(timeid); + if (query) query.abort(); + controlLink.html('<img src="'+ Database.str_start.icon +'" alt="" /> ' + + Database.str_start.text + ); + } + ); + + /* preload images */ + $('#control img').hide() + .attr('src', Database.str_start.icon) + .attr('src', Database.str_stop.icon) + .show(); + + /* start refreshing */ + controlLink.click(); +}); diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/display.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/display.js new file mode 100644 index 00000000..bac28ecb --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/js/display.js @@ -0,0 +1,90 @@ +$(document).ready(function() { + + /* init some needed tags and values */ + + $('table#data').wrap('<div id="fkcontainer" class="fk" />'); + $('#fkcontainer').append('<div id="root" />'); + + jQuery.ppa = { + root: $('#root') + }; + + $("a.fk").live('click', function (event) { + /* make the cursor being a waiting cursor */ + $('body').css('cursor','wait'); + + query = $.ajax({ + type: 'GET', + dataType: 'html', + data: {action:'dobrowsefk'}, + url: $(this).attr('href'), + cache: false, + context: $(this), + contentType: 'application/x-www-form-urlencoded', + success: function(answer) { + pdiv = this.closest('div.fk'); + divclass = this.attr('class').split(' ')[1]; + + /* if we are clicking on a FK from the original table + (level 0), we are using the #root div as parent-div */ + if (pdiv[0].id == 'fkcontainer') { + /* computing top position, which is the topid as well */ + var top = this.position().top + 2 + this.height(); + /* if the requested top position is different than + the previous topid position of #root, empty and position it */ + if (top != jQuery.ppa.root.topid) + jQuery.ppa.root.empty() + .css({ + left: (pdiv.position().left) +'px', + top: top + 'px' + }) + /* this "topid" allows to track if we are + opening a FK from the same line in the original table */ + .topid = top; + + pdiv = jQuery.ppa.root; + + /* Remove equal rows in the root div */ + jQuery.ppa.root.children('.'+divclass).remove(); + } + else { + /* Remove equal rows in the pdiv */ + pdiv.children('div.'+divclass).remove(); + } + + /* creating the data div */ + newdiv = $('<div class="fk '+divclass+'">').html(answer); + + /* highlight referencing fields */ + newdiv.data('ref', this).data('refclass', $(this).attr('class').split(' ')[1]) + .mouseenter(function (event) { + $(this).data('ref').closest('tr').find('a.'+$(this).data('refclass')).closest('div').addClass('highlight'); + }) + .mouseleave(function (event) { + $(this).data('ref').closest('tr').find('a.'+$(this).data('refclass')).closest('div').removeClass('highlight'); + }); + + /* appending it to the level-1 div */ + pdiv.append(newdiv); + }, + + error: function() { + this.closest('div.fk').append('<p class="errmsg">'+Display.errmsg+'</p>'); + }, + + complete: function () { + $('body').css('cursor','auto'); + } + }); + + return false; // do not refresh the page + }); + + $(".fk_delete").live('click', function (event) { + with($(this).closest('div')) { + data('ref').closest('tr').find('a.'+data('refclass')).closest('div').removeClass('highlight'); + remove(); + } + return false; // do not refresh the page + }); +}); diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/README b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/README new file mode 100644 index 00000000..a93cab61 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/README @@ -0,0 +1,14 @@ +Translators +----------- + +Please read the TRANSLATORS file in the top directory. + +To check your translation: + +cd lang +php langcheck <language> (eg. 'french'); + +To synchronize your translation with english.php: + +cd lang +./synch <language> (eg. 'polish'); diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/afrikaans.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/afrikaans.php new file mode 100644 index 00000000..30f3e478 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/afrikaans.php @@ -0,0 +1,621 @@ +<?php + + /** + * Afrikaans Language file for WebDB. + * @maintainer Petri Jooste [rkwjpj@puk.ac.za] + * + * $Id: afrikaans.php,v 1.9 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Afrikaans'; + $lang['applocale'] = 'af-ZA'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Welkom by phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmin Tuisblad'; + $lang['strpgsqlhome'] = 'PostgreSQL Tuisblad'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL Dokumentasie (lokaal)'; + $lang['strreportbug'] = 'Meld \'n fout aan'; + $lang['strviewfaq'] = 'Bekyk FAQ op internet'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Aanteken'; + $lang['strloginfailed'] = 'Aantekening het misluk'; + $lang['strlogindisallowed'] = 'Aantekening nie toegelaat nie'; + $lang['strserver'] = 'Bediener'; + $lang['strlogout'] = 'Teken af'; + $lang['strowner'] = 'Eienaar'; + $lang['straction'] = 'Aksie'; + $lang['stractions'] = 'Aksies'; + $lang['strname'] = 'Naam'; + $lang['strdefinition'] = 'Definisie'; + $lang['strproperties'] = 'Eienskappe'; + $lang['strbrowse'] = 'Bekyk'; + $lang['strdrop'] = 'Verwyder'; + $lang['strdropped'] = 'Is verwyder'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Nie Null'; + $lang['strprev'] = 'Vorige'; + $lang['strnext'] = 'Volgende'; + $lang['strfirst'] = '<< Eerste'; + $lang['strlast'] = 'Laaste >>'; + $lang['strfailed'] = 'Het misluk'; + $lang['strcreate'] = 'Skep'; + $lang['strcreated'] = 'Geskep'; + $lang['strcomment'] = 'Kommentaar'; + $lang['strlength'] = 'Lengte'; + $lang['strdefault'] = 'Standaard'; + $lang['stralter'] = 'Wysig'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Kanselleer'; + $lang['strsave'] = 'Bewaar'; + $lang['strreset'] = 'Herstel'; + $lang['strinsert'] = 'Voeg in'; + $lang['strselect'] = 'Selekteer'; + $lang['strdelete'] = 'Verwyder'; + $lang['strupdate'] = 'Verfris'; + $lang['strreferences'] = 'Verwysings'; + $lang['stryes'] = 'Ja'; + $lang['strno'] = 'Nee'; + $lang['strtrue'] = 'WAAR'; + $lang['strfalse'] = 'VALS'; + $lang['stredit'] = 'Redigeer'; + $lang['strcolumn'] = 'Kolom'; + $lang['strcolumns'] = 'Kolomme'; + $lang['strrows'] = 'ry(e)'; + $lang['strrowsaff'] = 'ry(e) het verander.'; + $lang['strobjects'] = 'objek(te)'; + $lang['strback'] = 'Terug'; + $lang['strqueryresults'] = 'Navraagresultate'; + $lang['strshow'] = 'Wys'; + $lang['strempty'] = 'Leeg'; + $lang['strlanguage'] = 'Taal'; + $lang['strencoding'] = 'Enkodering'; + $lang['strvalue'] = 'Waarde'; + $lang['strunique'] = 'Uniek'; + $lang['strprimary'] = 'Primêr'; + $lang['strexport'] = 'Eksporteer'; + $lang['strimport'] = 'Importeer'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Stofsuig'; + $lang['stranalyze'] = 'Analiseer'; + $lang['strcluster'] = 'Kluster'; + $lang['strclustered'] = 'In klusters?'; + $lang['strreindex'] = 'Herindekseer'; + $lang['strrun'] = 'Loop'; + $lang['stradd'] = 'Voeg by'; + $lang['strevent'] = 'Gebeurtenis'; + $lang['strwhere'] = 'Waar'; + $lang['strinstead'] = 'Doen eerder'; + $lang['strwhen'] = 'Wanneer'; + $lang['strformat'] = 'Formaat'; + $lang['strdata'] = 'Data'; + $lang['strconfirm'] = 'Bevestig'; + $lang['strexpression'] = 'Uitdrukking'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Vou oop'; + $lang['strcollapse'] = 'Vou toe'; + $lang['strexplain'] = 'Verduidelik'; + $lang['strexplainanalyze'] = 'Verduidelik Analise'; + $lang['strfind'] = 'Soek'; + $lang['stroptions'] = 'Opsies'; + $lang['strrefresh'] = 'Verfris'; + $lang['strdownload'] = 'Laai af'; + $lang['strdownloadgzipped'] = 'Laai af ... saamgepers met gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Gevorderd'; + $lang['strvariables'] = 'Veranderlikes'; + $lang['strprocess'] = 'Proses'; + $lang['strprocesses'] = 'Prosesse'; + $lang['strsetting'] = 'Instelling'; + $lang['streditsql'] = 'Redigeer SQL'; + $lang['strruntime'] = 'Totale looptyd: %s ms'; + $lang['strpaginate'] = 'Resultate per bladsy'; + $lang['struploadscript'] = 'of laai \'n SQL skrip in:'; + $lang['strstarttime'] = 'Begintyd'; + $lang['strfile'] = 'Lêer'; + $lang['strfileimported'] = 'Lêer is ingetrek.'; + + // Error handling + $lang['strnoframes'] = 'Hierdie toepassing maak gebruik van HTML-rame. U het \'n blaaier nodig wat rame ondersteun om hierdie toepassing te kan gebruik. '; + $lang['strbadconfig'] = 'Die lêer config.inc.php is verouderd. Jy kan verbeterde weergawe aflei van die lêer config.inc.php-dist.'; + $lang['strnotloaded'] = 'Hierdie PHP-installasie is sonder ondersteuning van hierdie tipe database nie gekompileerd.'; + $lang['strpostgresqlversionnotsupported'] = 'Weergawe van PostgreSQL word nie ondersteun nie. Probeer asb. weergawe %s of later.'; + $lang['strbadschema'] = 'Ongeldige skema gespesifiseer.'; + $lang['strbadencoding'] = 'Die kliëntenkodering kon nie in die databasis geplaas word nie.'; + $lang['strsqlerror'] = 'SQL-fout:'; + $lang['strinstatement'] = 'In stelling:'; + $lang['strinvalidparam'] = 'Ongeldige parameters.'; + $lang['strnodata'] = 'Geen rye gevind.'; + $lang['strnoobjects'] = 'Geen objekte gevind.'; + $lang['strrownotunique'] = 'Geen unieke identifiseerder vir hierdie ry.'; + $lang['strnouploads'] = 'Oplaaiing van lêers is afgeskakel.'; + $lang['strimporterror'] = 'Inleesfout.'; + $lang['strimporterrorline'] = 'Inleesfout op reël %s.'; + $lang['strcannotdumponwindows'] = 'Weergee van komplekse tabel- en skemaname word nie op Windows ondersteun nie. Kyk asb. in die FAQ.'; + + // Tables + $lang['strtable'] = 'Tabel'; + $lang['strtables'] = 'Tabelle'; + $lang['strshowalltables'] = 'Wys alle tabelle'; + $lang['strnotables'] = 'Geen tabelle gevind.'; + $lang['strnotable'] = 'Geen tabel gevind.'; + $lang['strcreatetable'] = 'Skep tabel'; + $lang['strtablename'] = 'Tabelnaam'; + $lang['strtableneedsname'] = 'Jy moet die tabel \'n naam gee.'; + $lang['strtableneedsfield'] = 'Jy moet ten minste een veld spesifiseer.'; + $lang['strtableneedscols'] = 'Jy moet die tabel \'n geldige aantal kolomme gee.'; + $lang['strtablecreated'] = 'Tabel geskep.'; + $lang['strtablecreatedbad'] = 'Die tabel kon nie geskep word nie.'; + $lang['strconfdroptable'] = 'Is jy seker dat dat jy die tabel "%s" wil verwyder?'; + $lang['strtabledropped'] = 'Tabel is verwyder.'; + $lang['strtabledroppedbad'] = 'Die tabel kon nie verwyder word nie.'; + $lang['strconfemptytable'] = 'Is jy seker dat jy alle rye uit tabel "%s" wil verwyder?'; + $lang['strtableemptied'] = 'Alle ryen is uit die tabel verwyder.'; + $lang['strtableemptiedbad'] = 'Die rye kon nie verwyder word nie.'; + $lang['strinsertrow'] = 'Voeg \'n ry by'; + $lang['strrowinserted'] = 'Ry is bygevoeg.'; + $lang['strrowinsertedbad'] = 'Die ry kon nie bygevoeg word nie.'; + $lang['streditrow'] = 'Wysig ry'; + $lang['strrowupdated'] = 'Ry is opgedateer.'; + $lang['strrowupdatedbad'] = 'Die opdatering van die ry het misluk.'; + $lang['strdeleterow'] = 'Verwyder ry'; + $lang['strconfdeleterow'] = 'Is jy seker dat jy hierdie ry wil verwyder?'; + $lang['strrowdeleted'] = 'Ry is verwyder.'; + $lang['strrowdeletedbad'] = 'Die ry kon nie verwyder word nie.'; + $lang['strinsertandrepeat'] = 'Voeg in & Herhaal'; + $lang['strnumcols'] = 'Aantal kolomme'; + $lang['strcolneedsname'] = 'Jy moet die kolom \'n naam gee'; + $lang['strselectallfields'] = 'Selekteer alle velde'; + $lang['strselectneedscol'] = 'Jy moet ten minste één kolom as uitvoer hê'; + $lang['strselectunary'] = 'Unêre operatore kan nie waardes kry nie.'; + $lang['straltercolumn'] = 'Wysig kolom'; + $lang['strcolumnaltered'] = 'Kolom is gewysig.'; + $lang['strcolumnalteredbad'] = 'Die kolom kon nie gewysig word nie.'; + $lang['strconfdropcolumn'] = 'Is jy seker dat jy die kolom "%s" wil verwyder uit tabel "%s"?'; + $lang['strcolumndropped'] = 'Kolom is verwyder.'; + $lang['strcolumndroppedbad'] = 'Die kolom kon nie verwyder word nie.'; + $lang['straddcolumn'] = 'Voeg kolom by'; + $lang['strcolumnadded'] = 'Kolom is bygevoeg.'; + $lang['strcolumnaddedbad'] = 'Die kolom kon nie bygevoeg word nie.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Tabel is gewysig.'; + $lang['strtablealteredbad'] = 'Tabelwysiging het misluk.'; + $lang['strdataonly'] = 'Slegs data'; + $lang['strstructureonly'] = 'Slegs struktuur'; + $lang['strstructureanddata'] = 'Struktuur en data'; + $lang['strtabbed'] = 'Tabbed'; + $lang['strauto'] = 'Auto'; + $lang['strconfvacuumtable'] = 'Is jy seker jy wil VACUUM "%s"?'; + $lang['strestimatedrowcount'] = 'Geskatte aantal rye'; + + // Users + $lang['struser'] = 'Gebruiker'; + $lang['strusers'] = 'Gebruikers'; + $lang['strusername'] = 'Gebruikersnaam'; + $lang['strpassword'] = 'Wagwoord'; + $lang['strsuper'] = 'Supergebruiker?'; + $lang['strcreatedb'] = 'Skep DB?'; + $lang['strexpires'] = 'Verval'; + $lang['strsessiondefaults'] = 'Verstekwaardes van sessie'; + $lang['strnousers'] = 'Geen gebruikers gevind.'; + $lang['struserupdated'] = 'Gebruiker is opgedateer.'; + $lang['struserupdatedbad'] = 'Gebruiker kon nie opgedateer word nie.'; + $lang['strshowallusers'] = 'Wys alle gebruikers'; + $lang['strcreateuser'] = 'Skep gebruiker'; + $lang['struserneedsname'] = 'Jy moet \'n naam gee vir die gebruiker.'; + $lang['strusercreated'] = 'Gebruiker geskep.'; + $lang['strusercreatedbad'] = 'Die gebruiker kon nie geskep word nie.'; + $lang['strconfdropuser'] = 'Is jy seker dat jy die gebruiker "%s" wil verwyder?'; + $lang['struserdropped'] = 'Gebruiker is verwyder.'; + $lang['struserdroppedbad'] = 'Verwydering van die gebruiker het misluk.'; + $lang['straccount'] = 'Gebruiker'; + $lang['strchangepassword'] = 'Verander wagwoord'; + $lang['strpasswordchanged'] = 'Wagwoord is verander.'; + $lang['strpasswordchangedbad'] = 'Wagwoordverandering het misluk.'; + $lang['strpasswordshort'] = 'Wagwoord is te kort.'; + $lang['strpasswordconfirm'] = 'Wagwoord verskil van bevestigings-wagwoord.'; + + // Groups + $lang['strgroup'] = 'Groep'; + $lang['strgroups'] = 'Groepe'; + $lang['strnogroup'] = 'Groep nie gevind.'; + $lang['strnogroups'] = 'Geen groepe gevind.'; + $lang['strcreategroup'] = 'Skep groep'; + $lang['strshowallgroups'] = 'Wys alle groepe'; + $lang['strgroupneedsname'] = 'Jy moet die groep \'n naam gee.'; + $lang['strgroupcreated'] = 'Groep geskep.'; + $lang['strgroupcreatedbad'] = 'Die groep kon nie geskep word nie.'; + $lang['strconfdropgroup'] = 'Is jy seker dat jy die groep "%s" wil verwyder?'; + $lang['strgroupdropped'] = 'Groep is verwyder.'; + $lang['strgroupdroppedbad'] = 'Verwydering van die groep het misluk.'; + $lang['strmembers'] = 'Lede'; + $lang['straddmember'] = 'Voeg \'n groeplid by'; + $lang['strmemberadded'] = 'Groeplid is bygevoeg.'; + $lang['strmemberaddedbad'] = 'Toevoeging van groeplid het misluk.'; + $lang['strdropmember'] = 'Verwyder groeplid'; + $lang['strconfdropmember'] = 'Is jy seker dat jy "%s" uit groep "%s" wil verwyder?'; + $lang['strmemberdropped'] = 'Groeplid is verwyder.'; + $lang['strmemberdroppedbad'] = 'Verwydering van groeplid het misluk.'; + + // Privileges + $lang['strprivilege'] = 'Voorregte'; + $lang['strprivileges'] = 'Voorregte'; + $lang['strnoprivileges'] = 'Hierdie objek het verstekeienaarvoorregte.'; + $lang['strgrant'] = 'Staan toe'; + $lang['strrevoke'] = 'Ontneem'; + $lang['strgranted'] = 'Voorregte is bygevoeg.'; + $lang['strgrantfailed'] = 'Voorregte kon nie bygevoeg word nie.'; + $lang['strgrantbad'] = 'Jy moet minstens een gebruiker of groep en minstens een voorreg aandui.'; + $lang['strgrantor'] = 'Grantor'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Databasis'; + $lang['strdatabases'] = 'Databasisse'; + $lang['strshowalldatabases'] = 'Wys alle databasisse'; + $lang['strnodatabase'] = 'Geen databasis gevind.'; + $lang['strnodatabases'] = 'Geen databasis gevind.'; + $lang['strcreatedatabase'] = 'Skep databasis'; + $lang['strdatabasename'] = 'Databasisnaam'; + $lang['strdatabaseneedsname'] = 'Jy moet die databasis \'n naam gee.'; + $lang['strdatabasecreated'] = 'Databasis is geskep.'; + $lang['strdatabasecreatedbad'] = 'Die databasis kon nie geskep word nie.'; + $lang['strconfdropdatabase'] = 'Is jy seker dat jy die databasis "%s" wil verwyder?'; + $lang['strdatabasedropped'] = 'Databasis is verwyder.'; + $lang['strdatabasedroppedbad'] = 'Databasisverwydering het misluk.'; + $lang['strentersql'] = 'Tik hieronder die SQL in wat uitgevoer moet word:'; + $lang['strsqlexecuted'] = 'SQL uitgevoer.'; + $lang['strvacuumgood'] = 'Vacuum-bewerking is klaar.'; + $lang['strvacuumbad'] = 'Vacuum-bewerking het misluk.'; + $lang['stranalyzegood'] = 'Analise is voltooi.'; + $lang['stranalyzebad'] = 'Analise het misluk.'; + $lang['strreindexgood'] = 'Herindeksering is voltooi.'; + $lang['strreindexbad'] = 'Herindeksering het misluk.'; + $lang['strfull'] = 'Volledig'; + $lang['strfreeze'] = 'Vries'; + $lang['strforce'] = 'Forseer'; + $lang['strsignalsent'] = 'Sein gestuur.'; + $lang['strsignalsentbad'] = 'Stuur van sein het misluk.'; + $lang['strallobjects'] = 'Alle objekte'; + + // Views + $lang['strview'] = 'Aansig'; + $lang['strviews'] = 'Aansigte'; + $lang['strshowallviews'] = 'Wys alle aansigte'; + $lang['strnoview'] = 'Geen aansigte gevind.'; + $lang['strnoviews'] = 'Geen aansigte gevind.'; + $lang['strcreateview'] = 'Skep aansig'; + $lang['strviewname'] = 'Aansignaam'; + $lang['strviewneedsname'] = 'Jy moet die aansig \'n naam gee.'; + $lang['strviewneedsdef'] = 'Jy moet die aansig definieer.'; + $lang['strviewneedsfields'] = 'Jy moet sê watter kolomme gekies moet wees in hierdie aansig.'; + $lang['strviewcreated'] = 'Aansig is geskep.'; + $lang['strviewcreatedbad'] = 'Die aansig kon nie geskep word nie.'; + $lang['strconfdropview'] = 'Is jy seker dat jy die aansig "%s" wil verwyder?'; + $lang['strviewdropped'] = 'Aansig is verwyder.'; + $lang['strviewdroppedbad'] = 'Die aansig kon nie verwyder word nie.'; + $lang['strviewupdated'] = 'Aansig is opgedateer.'; + $lang['strviewupdatedbad'] = 'Opdatering van aansig het misluk.'; + $lang['strviewlink'] = 'Sleutels word verbind'; + $lang['strviewconditions'] = 'Addisionele voorwaardes'; + $lang['strcreateviewwiz'] = 'Skep \'n aansig met behulp van \'n toergids'; + + // Sequences + $lang['strsequence'] = 'Reeks'; + $lang['strsequences'] = 'Reekse'; + $lang['strshowallsequences'] = 'Wys alle reekse'; + $lang['strnosequence'] = 'Geen reeks gevind.'; + $lang['strnosequences'] = 'Geen reekse gevind.'; + $lang['strcreatesequence'] = 'Skep reeks'; + $lang['strlastvalue'] = 'Laaste waarde'; + $lang['strincrementby'] = 'Verhoog met'; + $lang['strstartvalue'] = 'Aanvangswaarde'; + $lang['strmaxvalue'] = 'maks_waarde'; + $lang['strminvalue'] = 'min_waarde'; + $lang['strcachevalue'] = 'Kasgeheue-waarde'; + $lang['strlogcount'] = 'Boekstaaftelling'; + $lang['striscycled'] = 'is_siklies ?'; + $lang['strsequenceneedsname'] = 'Jy moet \'n naam gee vir die reeks.'; + $lang['strsequencecreated'] = 'Reeks is geskep.'; + $lang['strsequencecreatedbad'] = 'Die reeks kon nie geskep word nie.'; + $lang['strconfdropsequence'] = 'Is jy seker dat jy die reeks "%s" wil verwyder?'; + $lang['strsequencedropped'] = 'Reeks is verwyder.'; + $lang['strsequencedroppedbad'] = 'Verwydering van die reeks het misluk.'; + $lang['strsequencereset'] = 'Herstel reeks.'; + $lang['strsequenceresetbad'] = 'Herstel van reeks het misluk.'; + + // Indexes + $lang['strindex'] = 'Indeks'; + $lang['strindexes'] = 'Indekse'; + $lang['strindexname'] = 'Indeksnaam'; + $lang['strshowallindexes'] = 'Wys alle indekse'; + $lang['strnoindex'] = 'Geen indeks gevind.'; + $lang['strnoindexes'] = 'Geen indekse gevind.'; + $lang['strcreateindex'] = 'Skep \'n indeks'; + $lang['strtabname'] = 'Tab-naam'; + $lang['strcolumnname'] = 'Kolomnaam'; + $lang['strindexneedsname'] = 'Jy moet \'n naam gee vir die index.'; + $lang['strindexneedscols'] = 'Indekse moet ten minste uit één kolom bestaan.'; + $lang['strindexcreated'] = 'Indeks is geskep'; + $lang['strindexcreatedbad'] = 'Die indeks kon nie geskep word nie.'; + $lang['strconfdropindex'] = 'Is jy seker dat jy die indeks "%s" wil verwyder?'; + $lang['strindexdropped'] = 'Indeks is verwyder.'; + $lang['strindexdroppedbad'] = 'Verwydering van die indeks het misluk.'; + $lang['strkeyname'] = 'Sleutelnaam'; + $lang['struniquekey'] = 'Unieke sleutel'; + $lang['strprimarykey'] = 'Primêre sleutel'; + $lang['strindextype'] = 'Tipe van die indeks'; + $lang['strtablecolumnlist'] = 'Kolomme in tabel'; + $lang['strindexcolumnlist'] = 'Kolomme in indeks'; + $lang['strconfcluster'] = 'Is jy seker jy wil \'n kluster maak van "%s"?'; + $lang['strclusteredgood'] = 'Kluster is voltooi.'; + $lang['strclusteredbad'] = 'Kluster het misluk.'; + + // Rules + $lang['strrules'] = 'Reëls'; + $lang['strrule'] = 'Reël'; + $lang['strshowallrules'] = 'Wys alle reëls'; + $lang['strnorule'] = 'Geen reël gevind.'; + $lang['strnorules'] = 'Geen reëls gevind.'; + $lang['strcreaterule'] = 'Skep \'n reël'; + $lang['strrulename'] = 'Reëlnaam'; + $lang['strruleneedsname'] = 'Jy moet \'n naam gee vir die reël.'; + $lang['strrulecreated'] = 'Reël is geskep.'; + $lang['strrulecreatedbad'] = 'Die reël kon nie geskep word nie.'; + $lang['strconfdroprule'] = 'Is jy seker dat jy die reël "%s" op "%s" wil verwyder?'; + $lang['strruledropped'] = 'Reël is verwyder.'; + $lang['strruledroppedbad'] = 'Verwydering van die reël het misluk.'; + + // Constraints + $lang['strconstraints'] = 'Beperkings'; + $lang['strshowallconstraints'] = 'Wys alle beperkings'; + $lang['strnoconstraints'] = 'Geen beperkings gevind.'; + $lang['strcreateconstraint'] = 'Skep beperking'; + $lang['strconstraintcreated'] = 'Beperking is geskep.'; + $lang['strconstraintcreatedbad'] = 'Die beperking kon nie geskep word nie.'; + $lang['strconfdropconstraint'] = 'Is jy seker dat jy die beperking "%s" op "%s" wil verwyder?'; + $lang['strconstraintdropped'] = 'Beperking is verwyder.'; + $lang['strconstraintdroppedbad'] = 'Verwydering van die beperking het misluk.'; + $lang['straddcheck'] = 'Voeg \'n kontrole by'; + $lang['strcheckneedsdefinition'] = 'Kontrolebeperking moet gedefinieer wees.'; + $lang['strcheckadded'] = 'Kontrolebeperking is bygevoeg.'; + $lang['strcheckaddedbad'] = 'Kontrolebeperking kon nie bygevoeg word nie.'; + $lang['straddpk'] = 'Voeg primêre sleutel by'; + $lang['strpkneedscols'] = 'Primêre sleutel moet minstens één kolom hê.'; + $lang['strpkadded'] = 'Primêre sleutel bygevoeg.'; + $lang['strpkaddedbad'] = 'Primêre sleutel kon nie bygevoeg word nie.'; + $lang['stradduniq'] = 'Voeg unieke sleutel by.'; + $lang['struniqneedscols'] = 'Unieke sleutel moet minstens één kolom hê.'; + $lang['struniqadded'] = 'Unieke sleutel is bygevoeg.'; + $lang['struniqaddedbad'] = 'Unieke sleutel kon nie bygevoeg word nie.'; + $lang['straddfk'] = 'Voeg vreemdesleutel toe'; + $lang['strfkneedscols'] = 'Vreemdesleutel moet minstens één kolom hê.'; + $lang['strfkneedstarget'] = 'Vreemdesleutel moet \'n doeltabel hê.'; + $lang['strfkadded'] = 'Vreemdesleutel is bygevoeg.'; + $lang['strfkaddedbad'] = 'Vreemdesleutel kon nie bygevoeg word nie.'; + $lang['strfktarget'] = 'Doeltabel'; + $lang['strfkcolumnlist'] = 'Kolomme in sleutel'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Funksie'; + $lang['strfunctions'] = 'Funksies'; + $lang['strshowallfunctions'] = 'Wys alle funksies'; + $lang['strnofunction'] = 'Geen funksies gevind.'; + $lang['strnofunctions'] = 'Geen funksies gevind.'; + $lang['strcreateplfunction'] = 'Skep SQL/PL funksie'; + $lang['strcreateinternalfunction'] = 'Skep interne funksie'; + $lang['strcreatecfunction'] = 'Skep C funksie'; + $lang['strfunctionname'] = 'Funksienaam'; + $lang['strreturns'] = 'Gee terug'; + $lang['strarguments'] = 'Argumente'; + $lang['strproglanguage'] = 'Programmeertaal'; + $lang['strfunctionneedsname'] = 'Jy moet die funksie \'n naam gee.'; + $lang['strfunctionneedsdef'] = 'Jy moet die funksie definieer.'; + $lang['strfunctioncreated'] = 'Funksie is geskep.'; + $lang['strfunctioncreatedbad'] = 'Die funksie kon nie geskep word nie.'; + $lang['strconfdropfunction'] = 'Is jy seker dat jy die funksie "%s" wil verwyder?'; + $lang['strfunctiondropped'] = 'Funksie is verwyder.'; + $lang['strfunctiondroppedbad'] = 'Verwydering van die funksie het misluk.'; + $lang['strfunctionupdated'] = 'Funksie is opgedateer.'; + $lang['strfunctionupdatedbad'] = 'Opdatering van die funksie het misluk.'; + $lang['strobjectfile'] = 'Objeklêer'; + $lang['strlinksymbol'] = 'Skakelsimbool'; + + // Triggers + $lang['strtrigger'] = 'Snellers'; + $lang['strtriggers'] = 'Snellers'; + $lang['strshowalltriggers'] = 'Wys alle snellers'; + $lang['strnotrigger'] = 'Geen sneller gevind.'; + $lang['strnotriggers'] = 'Geen snellers gevind.'; + $lang['strcreatetrigger'] = 'skep trigger'; + $lang['strtriggerneedsname'] = 'Jy moet vir die sneller \'n naam gee.'; + $lang['strtriggerneedsfunc'] = 'Jy moet vir die sneller \'n funksie gee.'; + $lang['strtriggercreated'] = 'Sneller is geskep.'; + $lang['strtriggercreatedbad'] = 'Die sneller kon nie geskep word nie.'; + $lang['strconfdroptrigger'] = 'Is jy seker dat jy die sneller "%s" op "%s" wil verwyder?'; + $lang['strtriggerdropped'] = 'Sneller is verwyder.'; + $lang['strtriggerdroppedbad'] = 'Verwydering van sneller misluk.'; + $lang['strtriggeraltered'] = 'Sneller is gewysig.'; + $lang['strtriggeralteredbad'] = 'Snellerwysiging het misluk.'; + + // Types + $lang['strtype'] = 'Tipe'; + $lang['strtypes'] = 'Tipes'; + $lang['strshowalltypes'] = 'Wys alle tipes'; + $lang['strnotype'] = 'Geen tipe gevind.'; + $lang['strnotypes'] = 'Geen tipes gevind.'; + $lang['strcreatetype'] = 'skep tipe'; + $lang['strcreatecomptype'] = 'Skep saamgestelde tipe'; + $lang['strtypeneedsfield'] = 'Jy moet ten minste een veld spesifiseer.'; + $lang['strtypeneedscols'] = 'Jy \'n geldige aantal velde spesifiseer.'; + $lang['strtypename'] = 'Tipenaam'; + $lang['strinputfn'] = 'Toevoerfunksie'; + $lang['stroutputfn'] = 'Afvoerfunksie'; + $lang['strpassbyval'] = 'Aangestuur per waarde?'; + $lang['stralignment'] = 'Belyning'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Skeidingsteken'; + $lang['strstorage'] = 'Berging'; + $lang['strfield'] = 'Veld'; + $lang['strnumfields'] = 'Aantal velde'; + $lang['strtypeneedsname'] = 'Jy moet die tipe \'n naam gee.'; + $lang['strtypeneedslen'] = 'Jy moet die tipe \'n lengte gee.'; + $lang['strtypecreated'] = 'Tipe geskep'; + $lang['strtypecreatedbad'] = 'Tipeskepping het misluk.'; + $lang['strconfdroptype'] = 'Is jy seker dat jy die tipe \"%s\" wil verwyder?'; + $lang['strtypedropped'] = 'Tipe is verwyder.'; + $lang['strtypedroppedbad'] = 'Verwydering van die tipe het misluk.'; + $lang['strflavor'] = 'Geur'; + $lang['strbasetype'] = 'Basis'; + $lang['strcompositetype'] = 'Saamgestel'; + $lang['strpseudotype'] = 'Pseudo'; + + // Schemas + $lang['strschema'] = 'Skema'; + $lang['strschemas'] = 'Skemas'; + $lang['strshowallschemas'] = 'Wys alle skemas'; + $lang['strnoschema'] = 'Geen skema gevind.'; + $lang['strnoschemas'] = 'Geen skemas gevind.'; + $lang['strcreateschema'] = 'Skep skema'; + $lang['strschemaname'] = 'Skemanaam'; + $lang['strschemaneedsname'] = 'Jy moet \'n naam gee vir die skema.'; + $lang['strschemacreated'] = 'Skema is geskep'; + $lang['strschemacreatedbad'] = 'Die skema kon nie geskep word nie.'; + $lang['strconfdropschema'] = 'Is jy seker dat jy die skema "%s" wil verwyder?'; + $lang['strschemadropped'] = 'Skema is verwyder.'; + $lang['strschemadroppedbad'] = 'Verwydering van die skema het misluk.'; + $lang['strschemaaltered'] = 'Skema is gewysig.'; + $lang['strschemaalteredbad'] = 'Skemawysiging het misluk.'; + $lang['strsearchpath'] = 'Skema-soekpad'; + + // Reports + + // Domains + $lang['strdomain'] = 'Domein'; + $lang['strdomains'] = 'Domeine'; + $lang['strshowalldomains'] = 'Wys alle domeine'; + $lang['strnodomains'] = 'Geen domeine is gevind nie.'; + $lang['strcreatedomain'] = 'Skep domein'; + $lang['strdomaindropped'] = 'Domein is verwyder.'; + $lang['strdomaindroppedbad'] = 'Verwydering van domein het misluk.'; + $lang['strconfdropdomain'] = 'Is jy seker dat jy die domein "%s" wil verwyder?'; + $lang['strdomainneedsname'] = 'Jy moet \'n naam gee vir die domein.'; + $lang['strdomaincreated'] = 'Domein is geskep.'; + $lang['strdomaincreatedbad'] = 'Domeinskepping het misluk.'; + $lang['strdomainaltered'] = 'Domein is gewysig.'; + $lang['strdomainalteredbad'] = 'Wysiging van die domein het misluk.'; + + // Operators + $lang['stroperator'] = 'Operator'; + $lang['stroperators'] = 'Operatore'; + $lang['strshowalloperators'] = 'Wys alle operators'; + $lang['strnooperator'] = 'Geen operator is gevind nie.'; + $lang['strnooperators'] = 'Geen operators is gevind nie.'; + $lang['strcreateoperator'] = 'Skep operator'; + $lang['strleftarg'] = 'Linkerargumenttipe'; + $lang['strrightarg'] = 'Regterargumenttipe'; + $lang['strcommutator'] = 'Kommutator'; + $lang['strnegator'] = 'Negeerder'; + $lang['strrestrict'] = 'Beperk'; + $lang['strjoin'] = 'Join'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Merges'; + $lang['strleftsort'] = 'Linkssorteer'; + $lang['strrightsort'] = 'Regssorteer'; + $lang['strlessthan'] = 'Kleiner as'; + $lang['strgreaterthan'] = 'Groter as'; + $lang['stroperatorneedsname'] = 'Jy moet \'n naam gee vir die operator.'; + $lang['stroperatorcreated'] = 'Operator is geskep'; + $lang['stroperatorcreatedbad'] = 'Operatorskepping het misluk.'; + $lang['strconfdropoperator'] = 'Is jy seker dat jy die operator "%s" wil verwyder?'; + $lang['stroperatordropped'] = 'Operator is verwyder.'; + $lang['stroperatordroppedbad'] = 'Verwydering van die operator het misluk.'; + + // Casts + $lang['strcasts'] = 'Ekwivalente'; + $lang['strnocasts'] = 'Geen ekwivalente gevind.'; + $lang['strsourcetype'] = 'Brontipe'; + $lang['strtargettype'] = 'Doeltipe'; + $lang['strimplicit'] = 'Implisiet'; + $lang['strinassignment'] = 'Tydens toekenning'; + $lang['strbinarycompat'] = '(Binêr-versoenbaar)'; + + // Conversions + $lang['strconversions'] = 'Omskakelings'; + $lang['strnoconversions'] = 'Geen omskakelings gevind.'; + $lang['strsourceencoding'] = 'Bron-enkodering'; + $lang['strtargetencoding'] = 'Doel-enkodering'; + + // Languages + $lang['strlanguages'] = 'Tale'; + $lang['strnolanguages'] = 'Geen tale gevind.'; + $lang['strtrusted'] = 'Betroubaar'; + + // Info + $lang['strnoinfo'] = 'Geen inligting beskikbaar.'; + $lang['strreferringtables'] = 'Verwysende tabelle'; + $lang['strparenttables'] = 'Parent-tabelle'; + $lang['strchildtables'] = 'Child-tabelle'; + + // Aggregates + $lang['straggregates'] = 'Opsommers'; + $lang['strnoaggregates'] = 'Geen opsommers gevind.'; + $lang['stralltypes'] = '(Alle tipes)'; + + // Operator Classes + $lang['stropclasses'] = 'Operatorklasse'; + $lang['strnoopclasses'] = 'Geen operatorklasse gevind.'; + $lang['straccessmethod'] = 'Toegangmetode'; + + // Stats and performance + $lang['strrowperf'] = 'Ry werkverrigting'; + $lang['strioperf'] = 'T/A werkverrigting'; + $lang['stridxrowperf'] = 'Indekseer-ry werkverrigting'; + $lang['stridxioperf'] = 'Indeks T/A werkverrigting'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sekwensieel'; + $lang['strscan'] = 'Deursoek'; + $lang['strread'] = 'Lees'; + $lang['strfetch'] = 'Gaan haal'; + $lang['strheap'] = 'Hoop'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST-indeks'; + $lang['strcache'] = 'Kasgeheue'; + $lang['strdisk'] = 'Skyf'; + $lang['strrows2'] = 'Rye'; + + // Tablespaces + $lang['strtablespace'] = 'Tabelruimte'; + $lang['strtablespaces'] = 'Tabelruimtes'; + $lang['strshowalltablespaces'] = 'Wys alle tabelruimtes'; + $lang['strnotablespaces'] = 'Geen tabelruimtes gevind.'; + $lang['strcreatetablespace'] = 'Skep tabelruimte'; + $lang['strlocation'] = 'Plek'; + $lang['strtablespaceneedsname'] = 'Jy moet \'n naam gee vir jou tabelruimte.'; + $lang['strtablespaceneedsloc'] = 'Jy moet \'n gids gee om jou tabelruimte in te skep.'; + $lang['strtablespacecreated'] = 'Tabelruimte geskep.'; + $lang['strtablespacecreatedbad'] = 'Skep van tabelruimte het misluk.'; + $lang['strconfdroptablespace'] = 'Is jy seker jy wil die tabelruimte "%s" uitvee?'; + $lang['strtablespacedropped'] = 'Tabelruimte is uitgevee.'; + $lang['strtablespacedroppedbad'] = 'Uitvee van tabelruimte het misluk.'; + $lang['strtablespacealtered'] = 'Tabelruimte gewysig.'; + $lang['strtablespacealteredbad'] = 'Wysiging van tabelruimte het misluk.'; + + // Miscellaneous + $lang['strtopbar'] = '%s loop op %s:%s -- Jy is aangeteken as gebruiker "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Hulp'; + $lang['strhelpicon'] = '?'; + +?> + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/arabic.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/arabic.php new file mode 100644 index 00000000..cb0203f5 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/arabic.php @@ -0,0 +1,581 @@ +<?php + + /** + * English language file for phpPgAdmin. Use this as a basis + * for new translations. + * + * $Id: arabic.php,v 1.6 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'عربي'; + $lang['applocale'] = 'ar'; + $lang['applangdir'] = 'rtl'; + + // Welcome + $lang['strintro'] = 'مرحبا الى phpPgAdmin.'; + $lang['strppahome'] = 'موقع phpPgAdmin'; + $lang['strpgsqlhome'] = 'موقع PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'تعليمات PostgreSQL (محلية)'; + $lang['strreportbug'] = 'الإبلاغ عن خطأ في البرنامج.'; + $lang['strviewfaq'] = 'قراءة الأسئلة المتكررة على الموقع'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'الدخول'; +$lang['strloginfailed'] = 'لم تنجح عملية الدخول'; + $lang['strlogindisallowed'] = 'لا يسمح بالدخول بهذه الطريقة لأسباب أمنية.'; + $lang['strserver'] = 'الخادم'; + $lang['strlogout'] = 'خروج'; + $lang['strowner'] = 'مالك Owner'; + $lang['straction'] = 'إجراء Action'; + $lang['stractions'] = 'إجراءات Actions'; + $lang['strname'] = 'الإسم'; + $lang['strdefinition'] = 'التعريف'; + $lang['strproperties'] = 'خصائص'; + $lang['strbrowse'] = 'إستعراض Browse'; + $lang['strdrop'] = 'حذف Drop'; + $lang['strdropped'] = 'محذوف Dropped'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'ليس Null'; + $lang['strprev'] = '>السابق'; + $lang['strnext'] = '<التالي'; + $lang['strfirst'] = '>>الأول'; + $lang['strlast'] = 'الأخير<<'; + $lang['strfailed'] = 'فشـل'; + $lang['strcreate'] = 'إنشاء'; + $lang['strcreated'] = 'تم الإنشاء'; + $lang['strcomment'] = 'ملاحظات'; + $lang['strlength'] = 'طول'; + $lang['strdefault'] = 'الإفتراضي'; + $lang['stralter'] = 'تعديلAlter'; + $lang['strok'] = 'موافق'; + $lang['strcancel'] = 'تراجع'; + $lang['strsave'] = 'حفظ'; + $lang['strreset'] = 'إعادة Reset'; + $lang['strinsert'] = 'إدراج Insert'; + $lang['strselect'] = 'إختيار Select'; + $lang['strdelete'] = 'حذف Delete'; + $lang['strupdate'] = 'تعديل Update'; + $lang['strreferences'] = 'مراجع'; + $lang['stryes'] = 'نعم'; + $lang['strno'] = 'لا'; + $lang['strtrue'] = 'صحيح TRUE'; + $lang['strfalse'] = 'خاطئ FALSE'; + $lang['stredit'] = 'تحرير'; + $lang['strcolumns'] = 'أعمدة Columns'; + $lang['strrows'] = 'سجل/سجلات'; + $lang['strrowsaff'] = 'سجل تأثر/سجلات تأثرت'; + $lang['strobjects'] = 'object(s)'; + $lang['strexample'] = 'مثلا'; + $lang['strback'] = 'رجوع للخلف'; + $lang['strqueryresults'] = 'نتائج الإستعلام'; + $lang['strshow'] = 'اعرض'; + $lang['strempty'] = 'إفراغ Empty'; + $lang['strlanguage'] = 'اللغة'; + $lang['strencoding'] = 'الشيفرة Encoding'; + $lang['strvalue'] = 'القيمة Value'; + $lang['strunique'] = 'فريد Unique'; + $lang['strprimary'] = 'رئيسي Primary'; + $lang['strexport'] = 'تصدير Export'; + $lang['strimport'] = 'إستيراد Import'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = 'Go'; + $lang['stradmin'] = 'إدارة Admin'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'Analyze'; + $lang['strclusterindex'] = 'Cluster'; + $lang['strclustered'] = 'Clustered?'; + $lang['strreindex'] = 'Reindex'; + $lang['strrun'] = 'Run'; + $lang['stradd'] = 'إضافة'; + $lang['strevent'] = 'Event'; + $lang['strwhere'] = 'Where'; + $lang['strinstead'] = 'Do Instead'; + $lang['strwhen'] = 'When'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Data'; + $lang['strconfirm'] = 'تأكيد'; + $lang['strexpression'] = 'تعبير'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'إفتح'; + $lang['strcollapse'] = 'سكّر'; + $lang['strexplain'] = 'Explain'; + $lang['strexplainanalyze'] = 'Explain Analyze'; + $lang['strfind'] = 'بحث'; + $lang['stroptions'] = 'خيارات'; + $lang['strrefresh'] = 'تحديث Refresh'; + $lang['strdownload'] = 'تنزيل'; + $lang['strdownloadgzipped'] = 'تنزيل على شكل ملف مضغوط بـ gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Advanced'; + $lang['strvariables'] = 'Variables'; + $lang['strprocess'] = 'العملية Process'; + $lang['strprocesses'] = 'العمليات Processes'; + $lang['strsetting'] = 'Setting'; + $lang['streditsql'] = 'Edit SQL'; + $lang['strruntime'] = 'Total runtime: %s ms'; + $lang['strpaginate'] = 'Paginate results'; + $lang['struploadscript'] = 'or upload an SQL script:'; + $lang['strstarttime'] = 'Start Time'; + $lang['strfile'] = 'ملف'; + $lang['strfileimported'] = 'تم استيراد الملف.'; + + // Error handling + $lang['strbadconfig'] = 'إن الملف config.inc.php الذي لديك اصبح قديما. ستحتاج الى إعادة توليده من الملف الجديد config.inc.php-dist.'; + $lang['strnotloaded'] = 'إن اعداد PHP الموجود على هذا الخادم لاتدعم PostgreSQL. تحتاج الى اعادة تثبيت PHP بإستخدام الخيار --with-pgsql configure option.'; + $lang['strpostgresqlversionnotsupported'] = 'هذا الاصدار من PostgreSQL غير مدعوم. الرجاء الترقية الى الإصدار %s او أعلى.'; + $lang['strbadschema'] = 'Invalid schema specified.'; + $lang['strbadencoding'] = 'لقد فشل ضبط شيفرة العميل client encoding في قاعدة البيانات.'; + $lang['strsqlerror'] = 'خطأ SQL:'; + $lang['strinstatement'] = 'في الجملة statement:'; + $lang['strinvalidparam'] = 'Invalid script parameters.'; + $lang['strnodata'] = 'لم توجد سجلات.'; + $lang['strnoobjects'] = 'لم توجد كائنات.'; + $lang['strrownotunique'] = 'لا يوجد معرّف فريد unique identifier في هذا السجل.'; + $lang['strnouploads'] = 'تحميل الملفات غير مفعّل.'; + $lang['strimporterror'] = 'خطأ في الإستيراد.'; + $lang['strimporterrorline'] = 'خطأ في الإستيراد عند السطر: %s.'; + + // Tables + $lang['strtable'] = 'جدول Table'; + $lang['strtables'] = 'جداول Tables'; + $lang['strshowalltables'] = 'أعرض جميع الجداول Tables.'; + $lang['strnotables'] = 'لا يوجد جداول.'; + $lang['strnotable'] = 'لا يوجد جدول.'; + $lang['strcreatetable'] = 'إنشاء جدول Table جديد.'; + $lang['strtablename'] = 'إسم الجدول'; + $lang['strtableneedsname'] = 'يجب إعطاء إسم للجدول.'; + $lang['strtableneedsfield'] = 'يجب عليك تحديد على الأقل حقل واحد.'; + $lang['strtableneedscols'] = 'الجداول تتطلب عدد مقبول من الأعمدة.'; + $lang['strtablecreated'] = 'لقد تم إنشاء الجدول بنجاح.'; + $lang['strtablecreatedbad'] = 'لقد فشلت عملية إنشاء الجدول.'; + $lang['strconfdroptable'] = 'هل انت متأكد تريد حذف الجدول بإسم "%s"؟'; + $lang['strtabledropped'] = 'لقد تم حذف الجدول.'; + $lang['strtabledroppedbad'] = 'لقد فشلت عملية حذف الجدول.'; + $lang['strconfemptytable'] = 'هل انت متأكد تريد افراغ محتويات الجدول "%s"؟'; + $lang['strtableemptied'] = 'لقد تم افراغ محتويات الجدول بنجاح.'; + $lang['strtableemptiedbad'] = 'لقد فشلت عملية إفراغ محتويات الجدول.'; + $lang['strinsertrow'] = 'إدراج سجل.'; + $lang['strrowinserted'] = 'لقد تم إدراج السجل بنجاح.'; + $lang['strrowinsertedbad'] = 'لقد فشلت عملية إدراج السجل.'; + $lang['streditrow'] = 'تحرير السجل.'; + $lang['strrowupdated'] = 'تم تعديل السجل بنجاح.'; + $lang['strrowupdatedbad'] = 'لقد فشلت عملية تعديل السجل.'; + $lang['strdeleterow'] = 'إحذف السجل.'; + $lang['strconfdeleterow'] = 'هل انت متأكد تريد حذف هذا السجل؟'; + $lang['strrowdeleted'] = 'لقد تم حذف السجل بنجاح.'; + $lang['strrowdeletedbad'] = 'لقد فشلت عملية حذف السجل.'; + $lang['strinsertandrepeat'] = 'إدراج و إعادة'; + $lang['strfield'] = 'الحقل'; + $lang['strnumfields'] = 'عدد الحقول'; + $lang['strselectallfields'] = 'إختيار جميع الحقول'; + $lang['strselectneedscol'] = 'تحتاج عرض على الأقل عمود واحد.'; + $lang['strselectunary'] = 'العمليات الأحادية Unary operators لا يمكن ان يكون لها قيم.'; + $lang['straltercolumn'] = 'تعديل العمود'; + $lang['strcolumnaltered'] = 'لقد تم تعديل العمود بنجاح.'; + $lang['strcolumnalteredbad'] = 'لقد فشلت عملية تعديل العمود.'; + $lang['strconfdropcolumn'] = 'هل انت متأكد تريد حذف العمود "%s" من الجدول "%s"؟'; + $lang['strcolumndropped'] = 'لقد تم حذف العمود بنجاح.'; + $lang['strcolumndroppedbad'] = 'لقد فشلت عملية حذف العمود.'; + $lang['straddcolumn'] = 'إضافة عمود.'; + $lang['strcolumnadded'] = 'لقد تمت إضافة العمود بنجاح.'; + $lang['strcolumnaddedbad'] = 'لقد فشلت عملية إضافة العمود.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'لقد تم تعديل الجدول بنجاح.'; + $lang['strtablealteredbad'] = 'لقد فشلت عملية تعديل الجدول.'; + $lang['strdataonly'] = 'البيانات فقط'; + $lang['strstructureonly'] = 'الهيكلية فقط'; + $lang['strstructureanddata'] = 'الهيكلية والبيانات'; + $lang['strtabbed'] = 'Tabbed'; + $lang['strauto'] = 'Auto'; + + // Users + $lang['struser'] = 'المستخدم'; + $lang['strusers'] = 'المستخدمين'; + $lang['strusername'] = 'إسم المستخدم'; + $lang['strpassword'] = 'كلمة السر'; + $lang['strsuper'] = 'مستخدم ذو صلاحيّات عليا؟'; + $lang['strcreatedb'] = 'إنشاء قاعدة بيانات؟'; + $lang['strexpires'] = 'ينتهي'; + $lang['strsessiondefaults'] = 'Session defaults'; + $lang['strnousers'] = 'لم يوجد مستخدمين.'; + $lang['struserupdated'] = 'تم تعديل المستخدم بنجاح.'; + $lang['struserupdatedbad'] = 'فشل تعديل المستخدم.'; + $lang['strshowallusers'] = 'عرض جميع المستخدمين'; + $lang['strcreateuser'] = 'إضافة مستخدم جديد'; + $lang['struserneedsname'] = 'يجب إعطاء إسم للمستخدم.'; + $lang['strusercreated'] = 'تمت عملية إضافة المستخدم بنجاح.'; + $lang['strusercreatedbad'] = 'فشلت عملية إضافة المستخدم.'; + $lang['strconfdropuser'] = 'هل انت متأكد تريد حذف المستخدم "%s"؟'; + $lang['struserdropped'] = 'تم حذف المستخدم بنجاح.'; + $lang['struserdroppedbad'] = 'فشلت عملية حذف المستخدم.'; + $lang['straccount'] = 'Account'; + $lang['strchangepassword'] = 'تغيير كلمة السر'; + $lang['strpasswordchanged'] = 'تم تغيير كلمة السر بنجاح.'; + $lang['strpasswordchangedbad'] = 'لم ينجح تغيير كلمة السر.'; + $lang['strpasswordshort'] = 'كلمة السر أقصر من الحد الأدنى.'; + $lang['strpasswordconfirm'] = 'كلمة السر المدخلة لم تتطابق مع تأكيد كلمة السر.'; + + // Groups + $lang['strgroup'] = 'المجموعة'; + $lang['strgroups'] = 'المجموعات'; + $lang['strnogroup'] = 'لم توجد المجموعة.'; + $lang['strnogroups'] = 'لم توجد مجموعات.'; + $lang['strcreategroup'] = 'إضافة مجموعة جديدة'; + $lang['strshowallgroups'] = 'عرض جميع المجموعات'; + $lang['strgroupneedsname'] = 'يجب إعطاء إسم للمجموعة.'; + $lang['strgroupcreated'] = 'لقد تمت إضافة المجموعة بنجاح.'; + $lang['strgroupcreatedbad'] = 'لقد فشلت عملية إضافة المجموعة.'; + $lang['strconfdropgroup'] = 'هل انت متأكد تريد حذف المجموعة "%s"؟'; + $lang['strgroupdropped'] = 'تم حذف المجموعة بنجاح.'; + $lang['strgroupdroppedbad'] = 'لقد فشلت عملية حذف المجموعة.'; + $lang['strmembers'] = 'الأعضاء'; + $lang['straddmember'] = 'إضافة عضو'; + $lang['strmemberadded'] = 'تمت إضافة العضو.'; + $lang['strmemberaddedbad'] = 'لقد فشلت عملية إضافة العضو.'; + $lang['strdropmember'] = 'حذف عضو'; + $lang['strconfdropmember'] = 'هل أنت متأكد تريد حذف العضو "%s" من المجموعة "%s"؟'; + $lang['strmemberdropped'] = 'تم حذف العضو.'; + $lang['strmemberdroppedbad'] = 'لقد فشل حذف العضو.'; + + // Privileges + $lang['strprivilege'] = 'الصلاحيّة'; + $lang['strprivileges'] = 'الصلاحيات'; + $lang['strnoprivileges'] = 'هذا الكائن لديه صلاحيّات المالك الإفتراضية.'; + $lang['strgrant'] = 'تصريح Grant'; + $lang['strrevoke'] = 'سحب Revoke'; + $lang['strgranted'] = 'تم تغيير الصلاحيات.'; + $lang['strgrantfailed'] = 'لقد فشل تغيير الصلاحيات.'; + $lang['strgrantbad'] = 'يجب عليك تحديد على الاقل مستخدم واحد او مجموعة واحدة و على الأقل صلاحيّة واحدة.'; + $lang['strgrantor'] = 'المصرّح Grantor'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'قاعدة بيانات'; + $lang['strdatabases'] = 'قواعد البيانات'; + $lang['strshowalldatabases'] = 'عرض جميع قواعد البيانات'; + $lang['strnodatabase'] = 'لم يوجد قاعدة بيانات.'; + $lang['strnodatabases'] = 'لم يوجد قواعد بيانات.'; + $lang['strcreatedatabase'] = 'إنشاء قاعدة بيانات جديدة'; + $lang['strdatabasename'] = 'إسم قاعدة البيانات'; + $lang['strdatabaseneedsname'] = 'يجب عليك إعطاء إسم لقاعدة البيانات.'; + $lang['strdatabasecreated'] = 'تم إنشاء قاعدة البيانات بنجاح.'; + $lang['strdatabasecreatedbad'] = 'فشل إنشاء قاعدة البيانات.'; + $lang['strconfdropdatabase'] = 'هل أنت متأكد تريد حذف قاعدة البيانات بإسم "%s"?'; + $lang['strdatabasedropped'] = 'تم حذف قاعدة البيانات.'; + $lang['strdatabasedroppedbad'] = 'لقد فشلت عملية حذف قاعدة البيانات.'; + $lang['strentersql'] = 'أدخل الـSQL الذي تريد إستدعاءه هنا:'; + $lang['strsqlexecuted'] = 'تم إستدعاء الـSQL.'; + $lang['strvacuumgood'] = 'تمت عملية الـVacuum.'; + $lang['strvacuumbad'] = 'لقد فشلت عملية الـVacuum.'; + $lang['stranalyzegood'] = 'تمت عملية الفحص.'; + $lang['stranalyzebad'] = 'لقد فشلت عملية الفحص.'; + $lang['strreindexgood'] = 'تمت عملية إعادة الفهرسة بنجاح.'; + $lang['strreindexbad'] = 'لقد فشلت عملية إعادة الفهرسة.'; + $lang['strfull'] = 'Full'; + $lang['strfreeze'] = 'Freeze'; + $lang['strforce'] = 'Force'; + + // Views + $lang['strview'] = 'View عرض'; + $lang['strviews'] = 'عروض Views'; + $lang['strshowallviews'] = 'أعرض جميع العروض Views.'; + $lang['strnoview'] = 'لم يوجد عرض View.'; + $lang['strnoviews'] = 'لم يوجد عروض Views.'; + $lang['strcreateview'] = 'إنشاء عرض View جديد'; + $lang['strviewname'] = 'إسم العرض View'; + $lang['strviewneedsname'] = 'يجب إعطاء إسم للعرض View.'; + $lang['strviewneedsdef'] = 'يجب عليك إعطاء تعريف للعرض View.'; + $lang['strviewneedsfields'] = 'يجب عليك تحديد الحقول التي تريدها في العرض View.'; + $lang['strviewcreated'] = 'تم إنشاء العرض View.'; + $lang['strviewcreatedbad'] = 'فشلت عملية إنشاء العرض View.'; + $lang['strconfdropview'] = 'هل انت متأكد تريد حذف العرض View بإسم "%s"'; + $lang['strviewdropped'] = 'تم حذف العرض View.'; + $lang['strviewdroppedbad'] = 'لقد فشلت عملية حذف العرض View.'; + $lang['strviewupdated'] = 'تم تحديث العرض View بنجاح.'; + $lang['strviewupdatedbad'] = 'لقد فشلت عملية تحديث العرض View.'; + $lang['strviewlink'] = 'Linking Keys'; + $lang['strviewconditions'] = 'Additional Conditions'; + $lang['strcreateviewwiz'] = 'إنشاء عرض View بإستخدام الساحر Wizard.'; + + // Sequences + $lang['strsequence'] = 'تسلسل Sequence'; + $lang['strsequences'] = 'تسلسلات Sequences'; + $lang['strshowallsequences'] = 'عرض جميع التسلسلات'; + $lang['strnosequence'] = 'لم يوجد تسلسل.'; + $lang['strnosequences'] = 'لم يوجد تسلسلات.'; + $lang['strcreatesequence'] = 'إنشاء تسلسل جديد'; + $lang['strlastvalue'] = 'آخر قيمة'; + $lang['strincrementby'] = 'مقدار الزيادة Increment by'; + $lang['strstartvalue'] = 'قيمة البداية'; + $lang['strmaxvalue'] = 'القيمة القصوى'; + $lang['strminvalue'] = 'القيمة الدنيا'; + $lang['strcachevalue'] = 'Cache value'; + $lang['strlogcount'] = 'Log count'; + $lang['striscycled'] = 'Is cycled?'; + $lang['strsequenceneedsname'] = 'يجب إعطاء إسم للتسلسل sequence.'; + $lang['strsequencecreated'] = 'تم إنشاء التسلسل بنجاح.'; + $lang['strsequencecreatedbad'] = 'لقد فشل إنشاء التسلسل.'; + $lang['strconfdropsequence'] = 'هل أنت متأكد تريد حذف التسلسل بإسم "%s"؟'; + $lang['strsequencedropped'] = 'لقد تم حذف التسلسل بنجاح.'; + $lang['strsequencedroppedbad'] = 'لقد فشلت عملية حذف التسلسل.'; + $lang['strsequencereset'] = 'لقد تمت إعادة التسلسل بنجاح.'; + $lang['strsequenceresetbad'] = 'لقد فشلت إعادة التسلسل.'; + + // Indexes + $lang['strindex'] = 'فهرسIndex'; + $lang['strindexes'] = 'فهارسIndexes'; + $lang['strindexname'] = 'إسم الفهرس Index'; + $lang['strshowallindexes'] = 'عرض جميع الفهارس indexes'; + $lang['strnoindex'] = 'لم يوجد فهرس index.'; + $lang['strnoindexes'] = 'لم توجد فهارس indexes.'; + $lang['strcreateindex'] = 'إنشاء فهرس index جديد'; + $lang['strtabname'] = 'Tab name'; + $lang['strcolumnname'] = 'إسم العمود'; + $lang['strindexneedsname'] = 'يجب عليك إعطاء إسم للفهرس index.'; + $lang['strindexneedscols'] = 'الفهارس تتطلب عدد مقبول من الأعمدة.'; + $lang['strindexcreated'] = 'لقد تم إنشاء الفهرس بنجاح.'; + $lang['strindexcreatedbad'] = 'فشل إنشاء الفهرس.'; + $lang['strconfdropindex'] = 'هل انت متأكد تريد حذف الفهرس بإسم "%s"؟'; + $lang['strindexdropped'] = 'لقد تم حذف الفهرس بنجاح.'; + $lang['strindexdroppedbad'] = 'فشلت عملية حذف الفهرس.'; + $lang['strkeyname'] = 'إسم المفتاح Key'; + $lang['struniquekey'] = 'مفتاح فريد Unique key'; + $lang['strprimarykey'] = 'مفتاح رئيسي Primary key'; + $lang['strindextype'] = 'نوع الفهرس'; + $lang['strtablecolumnlist'] = 'الأعمدة في الجدول'; + $lang['strindexcolumnlist'] = 'الأعمدة في الفهرس'; + $lang['strconfcluster'] = 'Are you sure you want to cluster "%s"?'; + $lang['strclusteredgood'] = 'Cluster complete.'; + $lang['strclusteredbad'] = 'Cluster failed.'; + + // Rules + $lang['strrules'] = 'قواعد Rules'; + $lang['strrule'] = 'قاعدة Rule'; + $lang['strshowallrules'] = 'عرض جميع القواعد'; + $lang['strnorule'] = 'لم توجد قاعدة.'; + $lang['strnorules'] = 'لم توجد قواعد.'; + $lang['strcreaterule'] = 'إنشاء قاعدة rule جديدة'; + $lang['strrulename'] = 'إسم القاعدة rule name'; + $lang['strruleneedsname'] = 'يجب عليك إعطاء إسم للقاعدة rule.'; + $lang['strrulecreated'] = 'تم إنشاء القاعدة بنجاح.'; + $lang['strrulecreatedbad'] = 'فشل إنشاء القاعدة.'; + $lang['strconfdroprule'] = 'هل أنت متأكد تريد حذف القاعدة "%s" على "%s"؟'; + $lang['strruledropped'] = 'تم حذف القاعدة.'; + $lang['strruledroppedbad'] = 'فشل حذف القاعدة.'; + + // Constraints + $lang['strconstraints'] = 'قيود Constraints'; + $lang['strshowallconstraints'] = 'عرض جميع القيود constraints'; + $lang['strnoconstraints'] = 'لم يوجد قيود constraints.'; + $lang['strcreateconstraint'] = 'إنشاء قيد constraint جديد'; + $lang['strconstraintcreated'] = 'تم إنشاء القيد بنجاح.'; + $lang['strconstraintcreatedbad'] = 'فشل إنشاء القيد.'; + $lang['strconfdropconstraint'] = 'هل أنت متأكد تريد حذف القيد "%s" على "%s"؟'; + $lang['strconstraintdropped'] = 'تم حذف القيد بنجاح.'; + $lang['strconstraintdroppedbad'] = 'فشل حذف القيد.'; + $lang['straddcheck'] = 'إضافة فحص check'; + $lang['strcheckneedsdefinition'] = 'قيد الفحص يحتاج لتعريف.'; + $lang['strcheckadded'] = 'تم إضافة قيد الفحص بنحاح.'; + $lang['strcheckaddedbad'] = 'فشلت إضافة قيد الفحص.'; + $lang['straddpk'] = 'primary key إضافة مفتاح رئيسي.'; + $lang['strpkneedscols'] = 'المفتاح الرئيسي يتطلب على الأقل عمود واحد.'; + $lang['strpkadded'] = 'تمت إضافة المفتاح الرئيسي بنجاح.'; + $lang['strpkaddedbad'] = 'فشلت إضافة المفتاح الرئيسي.'; + $lang['stradduniq'] = 'unique key إضافة مفتاح فريد'; + $lang['struniqneedscols'] = 'المفتاح الفريد يتطلب عمود واحد على الأقل.'; + $lang['struniqadded'] = 'تمت إضافة المفتاح الفريد بنجاح.'; + $lang['struniqaddedbad'] = 'فشلت إضافة المفتاح الفريد.'; + $lang['straddfk'] = 'إضافة مفتاح خارجيforeign key'; + $lang['strfkneedscols'] = 'المفتاح الخارجي يتطلب عمود واحد على الأقل.'; + $lang['strfkneedstarget'] = 'المفتاح الخارجي يحتاج الى جدول هدف.'; + $lang['strfkadded'] = 'تمت إضافة المفتاح الخارجي بنجاح.'; + $lang['strfkaddedbad'] = 'فشلت إضافة المفتاح الخارجي.'; + $lang['strfktarget'] = 'الجدول الهدف Target table'; + $lang['strfkcolumnlist'] = 'الأعمدة في المفتاح'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'دالة Function'; + $lang['strfunctions'] = 'دوال Functions'; + $lang['strshowallfunctions'] = 'عرض جميع الدوال functions'; + $lang['strnofunction'] = 'لم توجد دالة function.'; + $lang['strnofunctions'] = 'لم توجد دوال functions.'; + $lang['strfunctionname'] = 'إسم الدالة function name'; + $lang['strreturns'] = 'Returns'; + $lang['strarguments'] = 'Arguments'; + $lang['strproglanguage'] = 'لغة برمجة'; + $lang['strfunctionneedsname'] = 'يجب عليك إعطاء إسم للدالة function.'; + $lang['strfunctionneedsdef'] = 'يجب عليك اعطاء تعريف للدالة function definition.'; + $lang['strfunctioncreated'] = 'تم إنشاء الدالة function بنجاح.'; + $lang['strfunctioncreatedbad'] = 'لقد فشل إنشاء الدالة.'; + $lang['strconfdropfunction'] = 'هل أنت متأكد تريد حذف الدالة function بإسم "%s"?'; + $lang['strfunctiondropped'] = 'تم حذف الدالة function بنجاح.'; + $lang['strfunctiondroppedbad'] = 'لقد فشلت عملية حذف الدالة function.'; + $lang['strfunctionupdated'] = 'لقد تم تعديل الدالة function.'; + $lang['strfunctionupdatedbad'] = 'لقد فشل تعديل الدالة function.'; + + // Triggers + $lang['strtrigger'] = 'محفّز Trigger'; + $lang['strtriggers'] = 'محفّزات Triggers'; + $lang['strshowalltriggers'] = 'عرض جميع المحفزات triggers'; + $lang['strnotrigger'] = 'لم يوجد المحفز trigger.'; + $lang['strnotriggers'] = 'لم يوجد محفزات triggers.'; + $lang['strcreatetrigger'] = 'إنشاء محفّز trigger جديد'; + $lang['strtriggerneedsname'] = 'يجب إعطاء اسم للمحفز.'; + $lang['strtriggerneedsfunc'] = 'يجب تحديد دالة function للمحفز.'; + $lang['strtriggercreated'] = 'تم إنشاء المحفز بنجاح.'; + $lang['strtriggercreatedbad'] = 'لقد فشلت عملية إنشاء المحفز.'; + $lang['strconfdroptrigger'] = 'هل أنت متأكد تريد حذف المحفّز trigger "%s" على "%s"؟'; + $lang['strtriggerdropped'] = 'تم حذف المحفز.'; + $lang['strtriggerdroppedbad'] = 'فشل حذف المحفز، لم يتم الحذف.'; + $lang['strtriggeraltered'] = 'تم تعديل المحفز بنجاح.'; + $lang['strtriggeralteredbad'] = 'فشلت عملية تعديل المحفز. لم يتم التعديل.'; + + // Types + $lang['strtype'] = 'نوع Type'; + $lang['strtypes'] = 'أنواع Types'; + $lang['strshowalltypes'] = 'عرض جميع الأنواع'; + $lang['strnotype'] = 'لم يوجد النوع.'; + $lang['strnotypes'] = 'لم يوجد أنواع.'; + $lang['strcreatetype'] = 'إنشاء نوع جديد.'; + $lang['strtypename'] = 'إسم النوع'; + $lang['strinputfn'] = 'دالة الإدخال Input function'; + $lang['stroutputfn'] = 'دالة الإخراج Output function'; + $lang['strpassbyval'] = 'Passed by val?'; + $lang['stralignment'] = 'Alignment'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Delimiter'; + $lang['strstorage'] = 'Storage'; + $lang['strtypeneedsname'] = 'يجب إعطاء إسم للنوع.'; + $lang['strtypeneedslen'] = 'يجب إعطاء طول للنوع.'; + $lang['strtypecreated'] = 'تم إنشاء النوع'; + $lang['strtypecreatedbad'] = 'فشل إنشاء النوع.'; + $lang['strconfdroptype'] = 'هل أنت متأكد تريد حذف النوع "%s"؟'; + $lang['strtypedropped'] = 'تم حذف النوع.'; + $lang['strtypedroppedbad'] = 'فشلت عملية حذف النوع.'; + + // Schemas + $lang['strschema'] = 'مخطط Schema'; + $lang['strschemas'] = 'المخططات Schemas'; + $lang['strshowallschemas'] = 'عرض جميع المخططات schemas'; + $lang['strnoschema'] = 'لم يوجد مخطط schema.'; + $lang['strnoschemas'] = 'لم توجد مخططات schemas.'; + $lang['strcreateschema'] = 'إنشاء مخطط schema جديد'; + $lang['strschemaname'] = 'إسم المخطط'; + $lang['strschemaneedsname'] = 'يجب عليك إعطاء إسم للمخطط.'; + $lang['strschemacreated'] = 'لقد تم انشاء المخطط بنجاح.'; + $lang['strschemacreatedbad'] = 'فشل إنشاء المخطط.'; + $lang['strconfdropschema'] = 'هل أنت متأكد تريد حذف المخطط Schema بإسم "%s"؟'; + $lang['strschemadropped'] = 'تم حذف المخطط.'; + $lang['strschemadroppedbad'] = 'فشلت عملية الحذف للمخطط.'; + $lang['strschemaaltered'] = 'تم تعديل المخطط.'; + $lang['strschemaalteredbad'] = 'فشلت عملية تعديل المخطط، لم يتم التعديل.'; + + // Reports + + // Domains + $lang['strdomain'] = 'نطاق Domain'; + $lang['strdomains'] = 'نطاقات Domains'; + $lang['strshowalldomains'] = 'عرض جيع النطاقات'; + $lang['strnodomains'] = 'لم يوجد نطاقات.'; + $lang['strcreatedomain'] = 'إنشاء نطاق جديد'; + $lang['strdomaindropped'] = 'تم حذف النطاق.'; + $lang['strdomaindroppedbad'] = 'لقد فشل حذف النطاق، لم يتم الحذف.'; + $lang['strconfdropdomain'] = 'هل أنت متأكد تريد حذف النطاق domain بإسم "%s"؟'; + $lang['strdomainneedsname'] = 'يجب إعطاء إسم للنطاق.'; + $lang['strdomaincreated'] = 'تم إنشاء النطاق بنجاح.'; + $lang['strdomaincreatedbad'] = 'لم يتم إنشاء النطاق، فشلت العملية.'; + $lang['strdomainaltered'] = 'تم تعديل النطاق.'; + $lang['strdomainalteredbad'] = 'فشلت عملية تعديل النطاق.'; + + // Operators + $lang['stroperator'] = 'Operator'; + $lang['stroperators'] = 'Operators'; + $lang['strshowalloperators'] = 'Show all operators'; + $lang['strnooperator'] = 'No operator found.'; + $lang['strnooperators'] = 'No operators found.'; + $lang['strcreateoperator'] = 'Create operator'; + $lang['strleftarg'] = 'Left Arg Type'; + $lang['strrightarg'] = 'Right Arg Type'; + $lang['strcommutator'] = 'Commutator'; + $lang['strnegator'] = 'Negator'; + $lang['strrestrict'] = 'Restrict'; + $lang['strjoin'] = 'Join'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Merges'; + $lang['strleftsort'] = 'Left sort'; + $lang['strrightsort'] = 'Right sort'; + $lang['strlessthan'] = 'Less than'; + $lang['strgreaterthan'] = 'Greater than'; + $lang['stroperatorneedsname'] = 'You must give a name for your operator.'; + $lang['stroperatorcreated'] = 'Operator created'; + $lang['stroperatorcreatedbad'] = 'Operator creation failed.'; + $lang['strconfdropoperator'] = 'Are you sure you want to drop the operator "%s"?'; + $lang['stroperatordropped'] = 'Operator dropped.'; + $lang['stroperatordroppedbad'] = 'Operator drop failed.'; + + // Casts + $lang['strcasts'] = 'Casts'; + $lang['strnocasts'] = 'No casts found.'; + $lang['strsourcetype'] = 'Source type'; + $lang['strtargettype'] = 'Target type'; + $lang['strimplicit'] = 'Implicit'; + $lang['strinassignment'] = 'In assignment'; + $lang['strbinarycompat'] = '(Binary compatible)'; + + // Conversions + $lang['strconversions'] = 'Conversions'; + $lang['strnoconversions'] = 'No conversions found.'; + $lang['strsourceencoding'] = 'Source encoding'; + $lang['strtargetencoding'] = 'Target encoding'; + + // Languages + $lang['strlanguages'] = 'Languages'; + $lang['strnolanguages'] = 'No languages found.'; + $lang['strtrusted'] = 'Trusted'; + + // Info + $lang['strnoinfo'] = 'No information available.'; + $lang['strreferringtables'] = 'Referring tables'; + $lang['strparenttables'] = 'Parent tables'; + $lang['strchildtables'] = 'Child tables'; + + // Aggregates + $lang['straggregates'] = 'Aggregates'; + $lang['strnoaggregates'] = 'No aggregates found.'; + $lang['stralltypes'] = '(All types)'; + + // Operator Classes + $lang['stropclasses'] = 'Op Classes'; + $lang['strnoopclasses'] = 'No operator classes found.'; + $lang['straccessmethod'] = 'Access method'; + + // Stats and performance + $lang['strrowperf'] = 'Row Performance'; + $lang['strioperf'] = 'I/O Performance'; + $lang['stridxrowperf'] = 'Index Row Performance'; + $lang['stridxioperf'] = 'Index I/O Performance'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sequential'; + $lang['strscan'] = 'Scan'; + $lang['strread'] = 'Read'; + $lang['strfetch'] = 'Fetch'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disk'; + $lang['strrows2'] = 'Rows'; + + // Miscellaneous + $lang['strtopbar'] = '%s يعمل على %s:%s -- You are logged in as user "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'مساعدة'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/catalan.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/catalan.php new file mode 100644 index 00000000..02fed655 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/catalan.php @@ -0,0 +1,897 @@ +<?php + + /** + * Catalan language file for phpPgAdmin. + * mantainer: Bernat Pegueroles <bpf@pegueroles.com> + * + * $Id: catalan.php,v 1.4 2008/03/14 03:31:43 xzilla Exp $ + */ + + // Language and character set + $lang['applang'] = 'Català'; + $lang['applocale'] = 'ca-ES'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Benvingut a phpPgAdmin.'; + $lang['strppahome'] = 'Pàgina web de phpPgAdmin'; + $lang['strpgsqlhome'] = 'Pàgina web de PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Documentació PostgreSQL (local)'; + $lang['strreportbug'] = 'Reportar un Bug'; + $lang['strviewfaq'] = 'Veure FAQ online'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Entrada'; + $lang['strloginfailed'] = 'Entrada fallida'; + $lang['strlogindisallowed'] = 'Entrada rebutjada per raons de seguretat.'; + $lang['strserver'] = 'Servidor'; + $lang['strservers'] = 'Servidors'; + $lang['strgroupservers'] = 'Servidors en el grup "%s"'; + $lang['strallservers'] = 'Tots els servidors'; + $lang['strintroduction'] = 'Introducció'; + $lang['strhost'] = 'Host'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Sortida'; + $lang['strowner'] = 'Propietari'; + $lang['straction'] = 'Acció'; + $lang['stractions'] = 'Accions'; + $lang['strname'] = 'Nom'; + $lang['strdefinition'] = 'Definició'; + $lang['strproperties'] = 'Propietats'; + $lang['strbrowse'] = 'Navega'; + $lang['strenable'] = 'Habilita'; + $lang['strdisable'] = 'Inhabilita'; + $lang['strdrop'] = 'Elimina'; + $lang['strdropped'] = 'Eliminat'; + $lang['strnull'] = 'Nul'; + $lang['strnotnull'] = 'No Nul'; + $lang['strprev'] = '< Previ'; + $lang['strnext'] = 'Següent >'; + $lang['strfirst'] = '<< Primer'; + $lang['strlast'] = 'Últim >>'; + $lang['strfailed'] = 'Fallat'; + $lang['strcreate'] = 'Crea'; + $lang['strcreated'] = 'Creat'; + $lang['strcomment'] = 'Comentari'; + $lang['strlength'] = 'Longitud'; + $lang['strdefault'] = 'Predeterminat'; + $lang['stralter'] = 'Modifica'; + $lang['strok'] = 'D\'acord'; + $lang['strcancel'] = 'Cancel·la'; + $lang['strkill'] = 'Mata'; + $lang['strac'] = 'Habilita AutoCompletat'; + $lang['strsave'] = 'Desa'; + $lang['strreset'] = 'Restableix'; + $lang['strrestart'] = 'Reinicia'; + $lang['strinsert'] = 'Inserta'; + $lang['strselect'] = 'Selecciona'; + $lang['strdelete'] = 'Elimina'; + $lang['strupdate'] = 'Actualitza'; + $lang['strreferences'] = 'Referències'; + $lang['stryes'] = 'Sí'; + $lang['strno'] = 'No'; + $lang['strtrue'] = 'Cert'; + $lang['strfalse'] = 'Fals'; + $lang['stredit'] = 'Edita'; + $lang['strcolumn'] = 'Columna'; + $lang['strcolumns'] = 'Columnes'; + $lang['strrows'] = 'fila(es)'; + $lang['strrowsaff'] = 'fila/es afectada/es.'; + $lang['strobjects'] = 'objecte(s)'; + $lang['strback'] = 'Enrere'; + $lang['strqueryresults'] = 'Resultat de la Consulta'; + $lang['strshow'] = 'Mostra'; + $lang['strempty'] = 'Buida'; + $lang['strlanguage'] = 'Idioma'; + $lang['strencoding'] = 'Codificació'; + $lang['strvalue'] = 'Valor'; + $lang['strunique'] = 'Únic'; + $lang['strprimary'] = 'Primari'; + $lang['strexport'] = 'Exporta'; + $lang['strimport'] = 'Importa'; + $lang['strallowednulls'] = 'Caràcters NULL Permesos'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Cadena o camp buit'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'Analyze'; + $lang['strclusterindex'] = 'Clúster'; + $lang['strclustered'] = 'Clusteritzat?'; + $lang['strreindex'] = 'Reindex'; + $lang['strexecute'] = 'Executa'; + $lang['stradd'] = 'Agrega'; + $lang['strevent'] = 'Event'; + $lang['strwhere'] = 'On'; + $lang['strinstead'] = 'Fes en el seu lloc'; + $lang['strwhen'] = 'Quan'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Dades'; + $lang['strconfirm'] = 'Confirma'; + $lang['strexpression'] = 'Expressió'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Expandeix'; + $lang['strcollapse'] = 'Colapsa'; + $lang['strfind'] = 'Cerca'; + $lang['stroptions'] = 'Opcions'; + $lang['strrefresh'] = 'Refresca'; + $lang['strdownload'] = 'Baixa'; + $lang['strdownloadgzipped'] = 'Baixa comprimit amb gzip'; + $lang['strinfo'] = 'Informació'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Avançat'; + $lang['strvariables'] = 'Variables'; + $lang['strprocess'] = 'Procés'; + $lang['strprocesses'] = 'Processos'; + $lang['strsetting'] = 'Ajustament'; + $lang['streditsql'] = 'Edita SQL'; + $lang['strruntime'] = 'Total temps d\'execució: %s ms'; + $lang['strpaginate'] = 'Pagina els resultats'; + $lang['struploadscript'] = 'o carrega un script SQL:'; + $lang['strstarttime'] = 'Hora d\'Inici'; + $lang['strfile'] = 'Fitxer'; + $lang['strfileimported'] = 'Fitxer importat.'; + $lang['strtrycred'] = 'Usa aquestes credencials a tots els servidors'; + $lang['strconfdropcred'] = 'Per raons de seguretat, la desconnexió eliminarà la informació d\'entrada compartida. Està segur de voler desconnectar ?'; + $lang['stractionsonmultiplelines'] = 'Accions a múltiples línies'; + $lang['strselectall'] = 'Seleccina\'ls tots'; + $lang['strunselectall'] = 'No en seleccionis cap'; + $lang['strlocale'] = 'Local'; + $lang['strcollation'] = 'Col·lació'; + $lang['strctype'] = 'Tipus de caràcter'; + $lang['strdefaultvalues'] = 'Valors per defecte'; + $lang['strnewvalues'] = 'Valors nous'; + $lang['strstart'] = 'Comença'; + $lang['strstop'] = 'Para'; + $lang['strgotoppage'] = 'Torna al principi'; + $lang['strtheme'] = 'Tema'; + $lang['strcluster'] = 'Clúster'; + + // Admin + $lang['stradminondatabase'] = 'Les següents tasques administratives s\'apliquen a tota la base de dades %s.'; + $lang['stradminontable'] = 'Les següents tasques administratives s\'apliquen a la taula %s.'; + + // User-supplied SQL history + $lang['strhistory'] = 'Història'; + $lang['strnohistory'] = 'No hi ha història.'; + $lang['strclearhistory'] = 'Neteja la història'; + $lang['strdelhistory'] = 'Elimina de la història'; + $lang['strconfdelhistory'] = 'Realment vol eliminar aquesta petició de la història?'; + $lang['strconfclearhistory'] = 'Realment vol elimnar la història?'; + $lang['strnodatabaseselected'] = 'Si us plau, seleccioni una base de dades.'; + + // Database Sizes + $lang['strnoaccess'] = 'Sense Accés'; + $lang['strsize'] = 'Tamany'; + $lang['strbytes'] = 'bytes'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Aquesta aplicació treballa millor en un navegador amb suport per frames, però es pot usar sense seguint el link de sota.'; + $lang['strnoframeslink'] = 'Usa sense frames'; + $lang['strbadconfig'] = 'El seu config.inc.php no està actualitzat. Necessitarà regenerar-lo a partir del nou config.inc.php-dist.'; + $lang['strnotloaded'] = 'La seva instal·lació de PHP no suporta la PostgreSQL. Necessita recompilar el PHP usant la opció de configuració --with-pgsql.'; + $lang['strpostgresqlversionnotsupported'] = 'Versió de PostgreSQL no suportada. Si su plau actualitzi a la versió %s o posterior.'; + $lang['strbadschema'] = 'Esquema especificat invàlid.'; + $lang['strbadencoding'] = 'Error al fixar la codificació del client a la base de dades.'; + $lang['strsqlerror'] = 'Error SQL:'; + $lang['strinstatement'] = 'En la sentència:'; + $lang['strinvalidparam'] = 'Paràmetres del script invàlids.'; + $lang['strnodata'] = 'No s\'han trobat files.'; + $lang['strnoobjects'] = 'No s\'han trobat objectes.'; + $lang['strrownotunique'] = 'No hi ha un identificador únic per aquesta fila.'; + $lang['strnouploads'] = 'La pujada de fitxers està deshabilitada.'; + $lang['strimporterror'] = 'Error d\'importació.'; + $lang['strimporterror-fileformat'] = 'Error d\'importació: Error al determinar automàticament el format del fitxer.'; + $lang['strimporterrorline'] = 'Error d\'importació a la línia %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Error d\'importació a la línia %s: La línia no té el número correcte de columnes.'; + $lang['strimporterror-uploadedfile'] = 'Error d\'importació: El fitxer no s\'ha pogut pujar al servidor'; + $lang['strcannotdumponwindows'] = 'El volcat de dades amb noms complexos de taules i esquemes en Windows no és suportada.'; + $lang['strinvalidserverparam'] = 'Intent de connexió amb un paràmetre del servidor invàlid, possiblement algú està provant d\'entrar al sistema.'; + $lang['strnoserversupplied'] = 'No s\'ha proporcionat cap servidor!'; + $lang['strbadpgdumppath'] = 'Error d\'exportació: Fallada en l\'execució de pg_dump (path definit a conf/config.inc.php : %s ). Sisplau, arregli el path en la configuració.'; + $lang['strbadpgdumpallpath'] = 'Error d\'exportació: Fallada en l\'execució de pg_dumpall (path definit a conf/config.inc.php : %s ). Sisplau, arregli el path en la configuració.'; + $lang['strconnectionfail'] = 'No hi ha connexió amb el servidor.'; + + // Tables + $lang['strtable'] = 'Taula'; + $lang['strtables'] = 'Taules'; + $lang['strshowalltables'] = 'Mostra totes les taules'; + $lang['strnotables'] = 'No s\'han trobat taules.'; + $lang['strnotable'] = 'No s\'ha trobat la taula.'; + $lang['strcreatetable'] = 'Crea una taula'; + $lang['strcreatetablelike'] = 'Crea una taula com a'; + $lang['strcreatetablelikeparent'] = 'Taula origen'; + $lang['strcreatelikewithdefaults'] = 'INCLUDE DEFAULTS'; + $lang['strcreatelikewithconstraints'] = 'INCLUDE CONSTRAINTS'; + $lang['strcreatelikewithindexes'] = 'INCLUDE INDEXES'; + $lang['strtablename'] = 'Nom de la taula'; + $lang['strtableneedsname'] = 'Ha d\'anomenar la taula.'; + $lang['strtablelikeneedslike'] = 'Ha de donar una taula d\'on copiar les propietats.'; + $lang['strtableneedsfield'] = 'Ha d\'especificar almenys un camp.'; + $lang['strtableneedscols'] = 'Ha d\'especificar un número vàlid de columnes.'; + $lang['strtablecreated'] = 'Taula creada.'; + $lang['strtablecreatedbad'] = 'No s\'ha pogut crear la taula.'; + $lang['strconfdroptable'] = 'Està segur de voler eliminar la taula "%s"?'; + $lang['strtabledropped'] = 'Taula eliminada.'; + $lang['strtabledroppedbad'] = 'No s\'ha pogut eliminar la taula.'; + $lang['strconfemptytable'] = 'Està segur que vol buidar la taula "%s"?'; + $lang['strtableemptied'] = 'Taula buidada.'; + $lang['strtableemptiedbad'] = 'No s\'ha pogut buidar la taula.'; + $lang['strinsertrow'] = 'Inserta una fila'; + $lang['strrowinserted'] = 'Fila insertada.'; + $lang['strrowinsertedbad'] = 'No s\'ha pogut insertar la taula.'; + $lang['strnofkref'] = 'No hi ha cap valor coincident en la foreign key %s.'; + $lang['strrowduplicate'] = 'Inserció de la taula fallada, intentant fer una inserció duplicada.'; + $lang['streditrow'] = 'Edita la fila'; + $lang['strrowupdated'] = 'Fila actualitzada.'; + $lang['strrowupdatedbad'] = 'No s\'ha pogut actualitzar la fila.'; + $lang['strdeleterow'] = 'Elimina la fila'; + $lang['strconfdeleterow'] = 'Està segur que vol eliminar aquesta fila?'; + $lang['strrowdeleted'] = 'Fila eliminada.'; + $lang['strrowdeletedbad'] = 'No s\'ha pogut eliminar la fila.'; + $lang['strinsertandrepeat'] = 'Inserta & Repeteix'; + $lang['strnumcols'] = 'Nombre de columnes'; + $lang['strcolneedsname'] = 'Ha d\'especificar un nom per la columna'; + $lang['strselectallfields'] = 'Selecciona tots els camps'; + $lang['strselectneedscol'] = 'Ha de mostrar almenys una columna.'; + $lang['strselectunary'] = 'Els operadors unaris no poden tenir valors.'; + $lang['strcolumnaltered'] = 'Columna modificada.'; + $lang['strcolumnalteredbad'] = 'No s\'ha pogut modificar la columna.'; + $lang['strconfdropcolumn'] = 'Està segur d\'eliminar la columna "%s" de la taula "%s"?'; + $lang['strcolumndropped'] = 'Columna eliminada.'; + $lang['strcolumndroppedbad'] = 'No s\'ha pogut eliminar la columna.'; + $lang['straddcolumn'] = 'Agrega una columna'; + $lang['strcolumnadded'] = 'Columna agregada.'; + $lang['strcolumnaddedbad'] = 'No s\'ha pogut agregar la columna.'; + $lang['strcascade'] = 'EN CASCADA'; + $lang['strtablealtered'] = 'Taula modificada.'; + $lang['strtablealteredbad'] = 'No s\'ha pogut modificar la columna.'; + $lang['strdataonly'] = 'Només dades'; + $lang['strstructureonly'] = 'Nomes estructura'; + $lang['strstructureanddata'] = 'Estructura i dades'; + $lang['strtabbed'] = 'Tabulat'; + $lang['strauto'] = 'Automàtic'; + $lang['strconfvacuumtable'] = 'Està segur de voler un vacuum "%s"?'; + $lang['strconfanalyzetable'] = 'Està segur de voler un analyze "%s"?'; + $lang['strconfreindextable'] = 'Està segur de voler un reindex "%s"?'; + $lang['strconfclustertable'] = 'Està sergur de voler un cluster "%s"?'; + $lang['strestimatedrowcount'] = 'Nombre estimat de files'; + $lang['strspecifytabletoanalyze'] = 'Ha d\'especificar almenys una taula per l\'analyze.'; + $lang['strspecifytabletoempty'] = 'Ha d\'especificar almenys una taula per buidar.'; + $lang['strspecifytabletodrop'] = 'Ha d\'especificar almenys una taula per eliminar.'; + $lang['strspecifytabletovacuum'] = 'Ha d\'especificar almenys una taula pel vacuum.'; + $lang['strspecifytabletoreindex'] = 'Ha d\'especifiar almenys una taula pel reindex.'; + $lang['strspecifytabletocluster'] = 'Ha d\'especificar almenys una taula pel cluster.'; + $lang['strnofieldsforinsert'] = 'No es pot insertar una fila a una taula sense cap columna.'; + + // Columns + $lang['strcolprop'] = 'Propietats de la Columna'; + $lang['strnotableprovided'] = 'No s\'ha proporcionat cap taula!'; + + // Users + $lang['struser'] = 'Usuari'; + $lang['strusers'] = 'Usuaris'; + $lang['strusername'] = 'Usuari'; + $lang['strpassword'] = 'Contrasenya'; + $lang['strsuper'] = 'Superusuari?'; + $lang['strcreatedb'] = 'Crear DB?'; + $lang['strexpires'] = 'Expira'; + $lang['strsessiondefaults'] = 'Valors predeterminats de la sessió'; + $lang['strnousers'] = 'No s\'han trobat usuaris.'; + $lang['struserupdated'] = 'Usuari actualitzat.'; + $lang['struserupdatedbad'] = 'L\'actualització de l\'usuari ha fallat.'; + $lang['strshowallusers'] = 'Mostra tots els usuaris'; + $lang['strcreateuser'] = 'Crea un usuari'; + $lang['struserneedsname'] = 'Ha de donar un nom a l\'usuari.'; + $lang['strusercreated'] = 'Usuari creat.'; + $lang['strusercreatedbad'] = 'Error al crear l\'usuari.'; + $lang['strconfdropuser'] = 'Està segur de voler eliminar l\'usuari "%s"?'; + $lang['struserdropped'] = 'Usuari eliminat.'; + $lang['struserdroppedbad'] = 'Error a l\'eliminar l\'usuari.'; + $lang['straccount'] = 'Compte'; + $lang['strchangepassword'] = 'Canvia la contrasenya'; + $lang['strpasswordchanged'] = 'Contrasenya canviada.'; + $lang['strpasswordchangedbad'] = 'Error al canviar la contrasenya.'; + $lang['strpasswordshort'] = 'Contrasenya massa curta.'; + $lang['strpasswordconfirm'] = 'La contrasenya no coincideix amb la confirmació.'; + + // Groups + $lang['strgroup'] = 'Grup'; + $lang['strgroups'] = 'Grups'; + $lang['strshowallgroups'] = 'Mostra tots els grups'; + $lang['strnogroup'] = 'Grup no trobat.'; + $lang['strnogroups'] = 'No s\'han trobat grups.'; + $lang['strcreategroup'] = 'Crea un grup'; + $lang['strgroupneedsname'] = 'Ha de donar un nom al grup.'; + $lang['strgroupcreated'] = 'Grup creat.'; + $lang['strgroupcreatedbad'] = 'No s\'ha pogut crear el grup.'; + $lang['strconfdropgroup'] = 'Està segur de voler eliminar el grup "%s"?'; + $lang['strgroupdropped'] = 'Grup eliminat.'; + $lang['strgroupdroppedbad'] = 'No s\'ha pogut eliminar el grup.'; + $lang['strmembers'] = 'Membres'; + $lang['strmemberof'] = 'Membre de'; + $lang['stradminmembers'] = 'Membres administradors'; + $lang['straddmember'] = 'Afegeix un membre'; + $lang['strmemberadded'] = 'Membre afegit.'; + $lang['strmemberaddedbad'] = 'No s\'ha pogut afegir el membre.'; + $lang['strdropmember'] = 'Elimina el membre'; + $lang['strconfdropmember'] = 'Està segur de voler eliminar el membre "%s" del grup "%s"?'; + $lang['strmemberdropped'] = 'Membre eliminat.'; + $lang['strmemberdroppedbad'] = 'No s\'ha pogut eliminar el membre.'; + + // Roles + $lang['strrole'] = 'Rol'; + $lang['strroles'] = 'Rols'; + $lang['strshowallroles'] = 'Mostra tots els rols'; + $lang['strnoroles'] = 'No s\'han trobat rols.'; + $lang['strinheritsprivs'] = 'Hereda privilegis?'; + $lang['strcreaterole'] = 'Crea un rol'; + $lang['strcancreaterole'] = 'Crear el rol?'; + $lang['strrolecreated'] = 'Rol creat.'; + $lang['strrolecreatedbad'] = 'No s\'ha pogut crear el rol.'; + $lang['strrolealtered'] = 'Rol modificat.'; + $lang['strrolealteredbad'] = 'No s\ha pogut modificar el rol.'; + $lang['strcanlogin'] = 'Pot entrar?'; + $lang['strconnlimit'] = 'Límit de la connexió'; + $lang['strdroprole'] = 'Elimina el rol'; + $lang['strconfdroprole'] = 'Està segur de voler eliminar el rol \'%s\'?'; + $lang['strroledropped'] = 'Rol eliminat.'; + $lang['strroledroppedbad'] = 'No s\'ha pogut eliminar el rol.'; + $lang['strnolimit'] = 'Sense límit'; + $lang['strnever'] = 'Mai'; + $lang['strroleneedsname'] = 'Ha de donar un nom al rol.'; + + // Privileges + $lang['strprivilege'] = 'Privilegi'; + $lang['strprivileges'] = 'Privilegis'; + $lang['strnoprivileges'] = 'Aquest objecte té els privilegis predeterminats.'; + $lang['strgrant'] = 'Concedeix'; + $lang['strrevoke'] = 'Revoca'; + $lang['strgranted'] = 'Privilegis canviats.'; + $lang['strgrantfailed'] = 'Ha fallat el canvi de privilegis.'; + $lang['strgrantbad'] = 'Ha d\'especificar almenys un usuari o grup i almenys un privilegi.'; + $lang['strgrantor'] = 'Cedent'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Base de dades'; + $lang['strdatabases'] = 'Bases de dades'; + $lang['strshowalldatabases'] = 'Mostra totes les bases de dades'; + $lang['strnodatabases'] = 'No s\'han trobat bases de dades.'; + $lang['strcreatedatabase'] = 'Crea una base de dades'; + $lang['strdatabasename'] = 'Nom de la base de dades'; + $lang['strdatabaseneedsname'] = 'Ha de donar un nom a la base de dades.'; + $lang['strdatabasecreated'] = 'Base de dades creada.'; + $lang['strdatabasecreatedbad'] = 'No s\'ha pogut crear la base de dades.'; + $lang['strconfdropdatabase'] = 'Està segur de voler eliminar la base de dades "%s"?'; + $lang['strdatabasedropped'] = 'Base de dades eliminada.'; + $lang['strdatabasedroppedbad'] = 'No s\'ha pogut eliminar la base de dades.'; + $lang['strentersql'] = 'Entri la sentència SQL per executar a sota:'; + $lang['strsqlexecuted'] = 'SQL executat.'; + $lang['strvacuumgood'] = 'Vacuum completat.'; + $lang['strvacuumbad'] = 'Vacuum ha fallat.'; + $lang['stranalyzegood'] = 'Analyze completat.'; + $lang['stranalyzebad'] = 'Analyze ha fallat.'; + $lang['strreindexgood'] = 'Reindex completat.'; + $lang['strreindexbad'] = 'Reindex ha fallat.'; + $lang['strfull'] = 'Ple'; + $lang['strfreeze'] = 'Congelat'; + $lang['strforce'] = 'Força'; + $lang['strsignalsent'] = 'Senyal enviat.'; + $lang['strsignalsentbad'] = 'L\'enviament del senyal ha fallat.'; + $lang['strallobjects'] = 'Tots els objectes'; + $lang['strdatabasealtered'] = 'Base de dades modificada.'; + $lang['strdatabasealteredbad'] = 'No s\'ha pogut modificar la base de dades.'; + $lang['strspecifydatabasetodrop'] = 'Ha d\'especificar almenys una base de dades per eliminar.'; + $lang['strtemplatedb'] = 'Plantilla'; + $lang['strconfanalyzedatabase'] = 'Està segur de voler un analyze de totes les taules de la base de dades "%s"?'; + $lang['strconfvacuumdatabase'] = 'Està segur de voler un vacuum de totes les taules de la base de dades "%s"?'; + $lang['strconfreindexdatabase'] = 'Està segur de voler un reindex de totes les taules de la base de dades "%s"?'; + $lang['strconfclusterdatabase'] = 'Està segur de voler un clúster de totes les taules de la base de dades "%s"?'; + + // Views + $lang['strview'] = 'Vista'; + $lang['strviews'] = 'Vistes'; + $lang['strshowallviews'] = 'Mostra totes les vistes'; + $lang['strnoview'] = 'No s\'ha trobat la vista.'; + $lang['strnoviews'] = 'No s\'han trobat vistes.'; + $lang['strcreateview'] = 'Crea una vista'; + $lang['strviewname'] = 'Nom de la vista'; + $lang['strviewneedsname'] = 'Ha d\'anomenar la vista.'; + $lang['strviewneedsdef'] = 'Ha de donar una definició a la vista.'; + $lang['strviewneedsfields'] = 'Ha de seleccionar les columnes de la vista.'; + $lang['strviewcreated'] = 'Vista creada.'; + $lang['strviewcreatedbad'] = 'No s\'ha pogut crear la vista.'; + $lang['strconfdropview'] = 'Està segur de voler eliminar la vista "%s"?'; + $lang['strviewdropped'] = 'Vista eliminada.'; + $lang['strviewdroppedbad'] = 'No s\'ha pogut eliminar la vista.'; + $lang['strviewupdated'] = 'Vista actualitzada.'; + $lang['strviewupdatedbad'] = 'No s\'ha pogut actualitzar la vista.'; + $lang['strviewlink'] = 'Enllaçant claus'; + $lang['strviewconditions'] = 'Condicions addicionals'; + $lang['strcreateviewwiz'] = 'Crea una vista amb l\'assistent'; + $lang['strrenamedupfields'] = 'Reanomena els camps duplicats'; + $lang['strdropdupfields'] = 'Elimina els camps duplicats'; + $lang['strerrordupfields'] = 'Error en els camps duplicats'; + $lang['strviewaltered'] = 'Vista modificada.'; + $lang['strviewalteredbad'] = 'No s\'ha pogut modificar la vista.'; + $lang['strspecifyviewtodrop'] = 'Ha d\'especificar almenys una vista per eliminar.'; + + // Sequences + $lang['strsequence'] = 'Seqüència'; + $lang['strsequences'] = 'Seqüències'; + $lang['strshowallsequences'] = 'Mostra totes les seqüències'; + $lang['strnosequence'] = 'No s\'ha trobat la seqüencia.'; + $lang['strnosequences'] = 'No s\'han trobat seqüencies.'; + $lang['strcreatesequence'] = 'Crea una seqüència'; + $lang['strlastvalue'] = 'Últim valor'; + $lang['strincrementby'] = 'Incrementar en'; + $lang['strstartvalue'] = 'Valor inicial'; + $lang['strrestartvalue'] = 'Valor al reiniciar'; + $lang['strmaxvalue'] = 'Valor màxim'; + $lang['strminvalue'] = 'Valor mínim'; + $lang['strcachevalue'] = 'Valor de cache'; + $lang['strlogcount'] = 'Compte del registre'; + $lang['strcancycle'] = 'Pot completar un cicle?'; + $lang['striscalled'] = 'Vol incrementar l\últim valor abans de retornar el següent valor (is_called)?'; + $lang['strsequenceneedsname'] = 'Ha d\'especificar un nom per la seqüència.'; + $lang['strsequencecreated'] = 'Seqüència creada.'; + $lang['strsequencecreatedbad'] = 'No s\'ha pogut crear la seqüència.'; + $lang['strconfdropsequence'] = 'Està segur de voler eliminar la seqüència "%s"?'; + $lang['strsequencedropped'] = 'Seqüència eliminada.'; + $lang['strsequencedroppedbad'] = 'No s\'ha pogut eliminar la seqüència.'; + $lang['strsequencerestart'] = 'Seqüència reiniciada.'; + $lang['strsequencerestartbad'] = 'No s\'ha pogut reiniciar la seqüència.'; + $lang['strsequencereset'] = 'Seqüència reiniciada.'; + $lang['strsequenceresetbad'] = 'No s\'ha pogut reiniciar la seqüència.'; + $lang['strsequencealtered'] = 'Seqüència modificada.'; + $lang['strsequencealteredbad'] = 'No s\'ha pogut modificar la seqüència.'; + $lang['strsetval'] = 'Fixa el valor'; + $lang['strsequencesetval'] = 'Valor de la seqüència fixat.'; + $lang['strsequencesetvalbad'] = 'No s\'ha pogut fixar el valor de la seqüencia.'; + $lang['strnextval'] = 'Valor incremental'; + $lang['strsequencenextval'] = 'Seqüència incrementada.'; + $lang['strsequencenextvalbad'] = 'No s\'ha pogut incrementar la seqüència.'; + $lang['strspecifysequencetodrop'] = 'Ha d\'especificar almenys una seqüència per eliminar.'; + + // Indexes + $lang['strindex'] = 'Índex'; + $lang['strindexes'] = 'Índexs'; + $lang['strindexname'] = 'Nom de l\'índex'; + $lang['strshowallindexes'] = 'Mostra tots els índexs'; + $lang['strnoindex'] = 'No s\'ha trobat l\'índex'; + $lang['strnoindexes'] = 'No s\'han trobat índexs.'; + $lang['strcreateindex'] = 'Crea un índex'; + $lang['strtabname'] = 'Nom de la pestanya'; + $lang['strcolumnname'] = 'Nom de la columna'; + $lang['strindexneedsname'] = 'Ha d\'anomenar l\'índex.'; + $lang['strindexneedscols'] = 'Els índexs requereixen un número vàlid de columnes.'; + $lang['strindexcreated'] = 'Índex creat'; + $lang['strindexcreatedbad'] = 'No s\'ha pogut crear l\'índex.'; + $lang['strconfdropindex'] = 'Està segur de voler eliminar l\'índex "%s"?'; + $lang['strindexdropped'] = 'Índex eliminat.'; + $lang['strindexdroppedbad'] = 'No s\'ha pogut eliminar l\'índex.'; + $lang['strkeyname'] = 'Nom de la clau'; + $lang['struniquekey'] = 'Clau única'; + $lang['strprimarykey'] = 'Clau primària'; + $lang['strindextype'] = 'Tipus d\'índex'; + $lang['strtablecolumnlist'] = 'Columnes a la taula'; + $lang['strindexcolumnlist'] = 'Columnes a l\'índex'; + $lang['strclusteredgood'] = 'Clúster completat.'; + $lang['strclusteredbad'] = 'No s\'ha pogut crear el clúster.'; + $lang['strconcurrently'] = 'Actualment'; + $lang['strnoclusteravailable'] = 'No hi ha el clúster disponible en l\'índex.'; + + // Rules + $lang['strrules'] = 'Regles'; + $lang['strrule'] = 'Regla'; + $lang['strshowallrules'] = 'Mostra totes les regles'; + $lang['strnorule'] = 'No s\'ha trobat la regla.'; + $lang['strnorules'] = 'No s\'han trobat regles.'; + $lang['strcreaterule'] = 'Crea una regla'; + $lang['strrulename'] = 'Nom de la regla'; + $lang['strruleneedsname'] = 'Ha d\'especificar un nom per la regla'; + $lang['strrulecreated'] = 'Regla creada.'; + $lang['strrulecreatedbad'] = 'No s\'ha pogut crear la regla.'; + $lang['strconfdroprule'] = 'Està segur de voler eliminar la regla "%s" a "%s"?'; + $lang['strruledropped'] = 'Regla eliminada.'; + $lang['strruledroppedbad'] = 'No s\'ha pogut eliminar la regla.'; + + // Constraints + $lang['strconstraint'] = 'Restricció'; + $lang['strconstraints'] = 'Restriccions'; + $lang['strshowallconstraints'] = 'Mostra totes les restriccions'; + $lang['strnoconstraints'] = 'No s\'han trobat restriccions.'; + $lang['strcreateconstraint'] = 'Crea una restricció'; + $lang['strconstraintcreated'] = 'Restricció creada.'; + $lang['strconstraintcreatedbad'] = 'No s\'ha pogut crear la restricció.'; + $lang['strconfdropconstraint'] = 'Està segur de voler eliminar la restricció "%s" de "%s"?'; + $lang['strconstraintdropped'] = 'Restricció eliminada.'; + $lang['strconstraintdroppedbad'] = 'No s\'ha pogut eliminar la restricció.'; + $lang['straddcheck'] = 'Agrega un control'; + $lang['strcheckneedsdefinition'] = 'La restricció de control necessita una definició.'; + $lang['strcheckadded'] = 'Restricció de control agregada.'; + $lang['strcheckaddedbad'] = 'No s\'ha pogut agregar la restricció de control.'; + $lang['straddpk'] = 'Agrega una clau primària'; + $lang['strpkneedscols'] = 'La clau primària requereix almenys una columna.'; + $lang['strpkadded'] = 'Clau primària agregada.'; + $lang['strpkaddedbad'] = 'No s\'ha pogut agregar la clau primària.'; + $lang['stradduniq'] = 'Agrega una clau única'; + $lang['struniqneedscols'] = 'La clau única requereix almenys una columna.'; + $lang['struniqadded'] = 'Clau única agregada.'; + $lang['struniqaddedbad'] = 'No s\'ha pogut agregar la clau única.'; + $lang['straddfk'] = 'Agrega una clau externa'; + $lang['strfkneedscols'] = 'La clau externa requereix almenys una columna.'; + $lang['strfkneedstarget'] = 'La clau externa requereix una taula de referència.'; + $lang['strfkadded'] = 'Clau externa agregada.'; + $lang['strfkaddedbad'] = 'No s\'ha pogut agregar la clau externa.'; + $lang['strfktarget'] = 'Taula de destí'; + $lang['strfkcolumnlist'] = 'Columnes a la clau'; + $lang['strondelete'] = 'A L\'ELIMINAR'; + $lang['stronupdate'] = 'A L\'ACTUALITZAR'; + + // Functions + $lang['strfunction'] = 'Funció'; + $lang['strfunctions'] = 'Funcions'; + $lang['strshowallfunctions'] = 'Mostra totes les funcions'; + $lang['strnofunction'] = 'No s\'ha trobat la funció.'; + $lang['strnofunctions'] = 'No s\'han trobat funcions'; + $lang['strcreateplfunction'] = 'Crea una funció SQL/PL'; + $lang['strcreateinternalfunction'] = 'Crea una funció interna'; + $lang['strcreatecfunction'] = 'Crea una funció C'; + $lang['strfunctionname'] = 'Nom de la funció'; + $lang['strreturns'] = 'Retorna'; + $lang['strproglanguage'] = 'Llenguatge de programació'; + $lang['strfunctionneedsname'] = 'Ha de donar un nom a la funció.'; + $lang['strfunctionneedsdef'] = 'Ha de donar una definició a la funció.'; + $lang['strfunctioncreated'] = 'Funció creada.'; + $lang['strfunctioncreatedbad'] = 'No s\'ha pogut crear la funció.'; + $lang['strconfdropfunction'] = 'Està segur de voler eliminar la funció "%s"?'; + $lang['strfunctiondropped'] = 'Funció eliminada.'; + $lang['strfunctiondroppedbad'] = 'No s\'ha pogut eliminar la funció.'; + $lang['strfunctionupdated'] = 'Funció actualitzada.'; + $lang['strfunctionupdatedbad'] = 'No s\'ha pogut actualitzar la funció.'; + $lang['strobjectfile'] = 'Fitxer objecte'; + $lang['strlinksymbol'] = 'Enllaç simbòlic'; + $lang['strarguments'] = 'Arguments'; + $lang['strargmode'] = 'Mode'; + $lang['strargtype'] = 'Tipus'; + $lang['strargadd'] = 'Afegeix un altre argument'; + $lang['strargremove'] = 'Elimina aquest argument'; + $lang['strargnoargs'] = 'Aquesta funció no tindrà arguments.'; + $lang['strargenableargs'] = 'Habilita els arguments passats a aquesta funció.'; + $lang['strargnorowabove'] = 'Hi ha d\'haver una fila sobre aquesta fila.'; + $lang['strargnorowbelow'] = 'Hi ha d\'haver una fila sota aquesta fila.'; + $lang['strargraise'] = 'Mou amunt.'; + $lang['strarglower'] = 'Mou avall.'; + $lang['strargremoveconfirm'] = 'Està segur de voler eliminar aquest argument? Això NO es pot desfer.'; + $lang['strfunctioncosting'] = 'Funció de Cost'; + $lang['strresultrows'] = 'Files Resultants'; + $lang['strexecutioncost'] = 'Cost de l\'Execució'; + $lang['strspecifyfunctiontodrop'] = 'Ha d\'especificar almenys una funció per eliminar.'; + + // Triggers + $lang['strtrigger'] = 'Disparador'; + $lang['strtriggers'] = 'Disparadors'; + $lang['strshowalltriggers'] = 'Mostrar tots els disparadors'; + $lang['strnotrigger'] = 'No s\'ha trobat el disparador.'; + $lang['strnotriggers'] = 'No s\'han trobat disparadors.'; + $lang['strcreatetrigger'] = 'Crea un disparador'; + $lang['strtriggerneedsname'] = 'Ha de donar un nom al disparador.'; + $lang['strtriggerneedsfunc'] = 'Ha d\'especificar una funció pel disparador.'; + $lang['strtriggercreated'] = 'Disparador creat.'; + $lang['strtriggercreatedbad'] = 'No s\'ha pogut crear el disparador.'; + $lang['strconfdroptrigger'] = 'Està segur de voler eliminar el disparador "%s" de "%s"?'; + $lang['strconfenabletrigger'] = 'Està segur de voler habilitar el disparador "%s" a "%s"?'; + $lang['strconfdisabletrigger'] = 'Està segur de voler inhabilitar el disparador "%s" a "%s"?'; + $lang['strtriggerdropped'] = 'Disparador eliminat.'; + $lang['strtriggerdroppedbad'] = 'No s\'ha pogut eliminar el disparador.'; + $lang['strtriggerenabled'] = 'Disparador habilitat.'; + $lang['strtriggerenabledbad'] = 'No s\'ha pogut habilitar el disparador.'; + $lang['strtriggerdisabled'] = 'Disparador inhabilitat.'; + $lang['strtriggerdisabledbad'] = 'No s\'ha pogut inhabilitar el disparador.'; + $lang['strtriggeraltered'] = 'Disparador modificat.'; + $lang['strtriggeralteredbad'] = 'No s\'ha pogut modificar el disparador.'; + $lang['strforeach'] = 'Per cada'; + + // Types + $lang['strtype'] = 'Tipus'; + $lang['strtypes'] = 'Tipus'; + $lang['strshowalltypes'] = 'Mostrar tots els tipus'; + $lang['strnotype'] = 'No s\'ha trobat el tipus.'; + $lang['strnotypes'] = 'No s\'han trobat els tipus.'; + $lang['strcreatetype'] = 'Crea un tipus'; + $lang['strcreatecomptype'] = 'Crea un tipus compost'; + $lang['strcreateenumtype'] = 'Crea un tipus d\'enumeració'; + $lang['strtypeneedsfield'] = 'Ha d\'especificar almenys un camp.'; + $lang['strtypeneedsvalue'] = 'Ha d\'especificar almenys un valor.'; + $lang['strtypeneedscols'] = 'Ha d\'especificar un número vàlid de camps.'; + $lang['strtypeneedsvals'] = 'Ha d\'especificar un número vàlid de valors.'; + $lang['strinputfn'] = 'Funció d\'entrada'; + $lang['stroutputfn'] = 'Funció de sortida'; + $lang['strpassbyval'] = 'Passat per valor?'; + $lang['stralignment'] = 'Alineament'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Delimitador'; + $lang['strstorage'] = 'Emmagatzemament'; + $lang['strfield'] = 'Camp'; + $lang['strnumfields'] = 'Num. de camps'; + $lang['strnumvalues'] = 'Num. de valors'; + $lang['strtypeneedsname'] = 'Ha de donar un nom al tipus.'; + $lang['strtypeneedslen'] = 'Ha de donar una longitud al tipus.'; + $lang['strtypecreated'] = 'Tipus creat'; + $lang['strtypecreatedbad'] = 'No s\'ha pogut crear el tipus.'; + $lang['strconfdroptype'] = 'Està segur de voler eliminar el tipus "%s"?'; + $lang['strtypedropped'] = 'Tipus eliminat.'; + $lang['strtypedroppedbad'] = 'No s\'ha pogut eliminar el tipus.'; + $lang['strflavor'] = 'Varietat'; + $lang['strbasetype'] = 'Base'; + $lang['strcompositetype'] = 'Compost'; + $lang['strpseudotype'] = 'Pseudo'; + $lang['strenum'] = 'Enumeració'; + $lang['strenumvalues'] = 'Valors de l\'enumeració'; + + // Schemas + $lang['strschema'] = 'Esquema'; + $lang['strschemas'] = 'Esquemes'; + $lang['strshowallschemas'] = 'Mostra tots els esquemes'; + $lang['strnoschema'] = 'No s\'ha trobat l\'esquema.'; + $lang['strnoschemas'] = 'No s\'han trobat esquemes.'; + $lang['strcreateschema'] = 'Crea un esquema'; + $lang['strschemaname'] = 'Nom de l\'esquema'; + $lang['strschemaneedsname'] = 'Ha d\'anomenar l\'esquema.'; + $lang['strschemacreated'] = 'Esquema creat'; + $lang['strschemacreatedbad'] = 'No s\'ha pogut crear l\'esquema.'; + $lang['strconfdropschema'] = 'Està segur de voler eliminar l\'esquema "%s"?'; + $lang['strschemadropped'] = 'Esquema eliminat.'; + $lang['strschemadroppedbad'] = 'No s\'ha pogut eliminar l\'esquema.'; + $lang['strschemaaltered'] = 'Esquema modificat.'; + $lang['strschemaalteredbad'] = 'No s\'ha pogut modificar l\'esquema.'; + $lang['strsearchpath'] = 'Camí de cerca de l\'esquema'; + $lang['strspecifyschematodrop'] = 'Ha d\especificar almenys un esquema per eliminar.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Domini'; + $lang['strdomains'] = 'Dominis'; + $lang['strshowalldomains'] = 'Mostrar tots els dominis'; + $lang['strnodomains'] = 'No s\'han trobat dominis.'; + $lang['strcreatedomain'] = 'Crea un domini'; + $lang['strdomaindropped'] = 'Domini eliminat.'; + $lang['strdomaindroppedbad'] = 'No s\'ha pogut eliminar el domini.'; + $lang['strconfdropdomain'] = 'Està segur de voler eliminar el domini "%s"?'; + $lang['strdomainneedsname'] = 'Ha d\'anomenar el domini.'; + $lang['strdomaincreated'] = 'Domini creat.'; + $lang['strdomaincreatedbad'] = 'No s\'ha pogut crear el domini.'; + $lang['strdomainaltered'] = 'Domini modificat.'; + $lang['strdomainalteredbad'] = 'No s\'ha pogut modificar el domini.'; + + // Operators + $lang['stroperator'] = 'Operador'; + $lang['stroperators'] = 'Operadors'; + $lang['strshowalloperators'] = 'Mostra tots els operadors'; + $lang['strnooperator'] = 'No s\'ha trobat l\'operador.'; + $lang['strnooperators'] = 'No s\'han trobat operadors.'; + $lang['strcreateoperator'] = 'Crea un operador'; + $lang['strleftarg'] = 'Tipus de l\'arg. esquerre'; + $lang['strrightarg'] = 'Tipus de l\'arg. dret'; + $lang['strcommutator'] = 'Commutador'; + $lang['strnegator'] = 'Negació'; + $lang['strrestrict'] = 'Restringeix'; + $lang['strjoin'] = 'Unieix'; + $lang['strhashes'] = 'Hash'; + $lang['strmerges'] = 'Fussiona'; + $lang['strleftsort'] = 'Sort esquerre'; + $lang['strrightsort'] = 'Sort dret'; + $lang['strlessthan'] = 'Menor que'; + $lang['strgreaterthan'] = 'Major que'; + $lang['stroperatorneedsname'] = 'Ha d\'anomenar l\'operador.'; + $lang['stroperatorcreated'] = 'Operador creat'; + $lang['stroperatorcreatedbad'] = 'No s\'ha pogut crear l\'operador.'; + $lang['strconfdropoperator'] = 'Està segur de voler eliminar l\'operador "%s"?'; + $lang['stroperatordropped'] = 'Operador eliminat.'; + $lang['stroperatordroppedbad'] = 'No s\'ha pogut eliminar l\'operador.'; + + // Casts + $lang['strcasts'] = 'Conversió de tipus'; + $lang['strnocasts'] = 'No s\'han trobat conversions.'; + $lang['strsourcetype'] = 'Tipus inicial'; + $lang['strtargettype'] = 'Tipus final'; + $lang['strimplicit'] = 'Implícit'; + $lang['strinassignment'] = 'En assignació'; + $lang['strbinarycompat'] = '(Compatible amb binari)'; + + // Conversions + $lang['strconversions'] = 'Conversions'; + $lang['strnoconversions'] = 'No s\'han trobat conversions.'; + $lang['strsourceencoding'] = 'Codificació inicial'; + $lang['strtargetencoding'] = 'Codificació final'; + + // Languages + $lang['strlanguages'] = 'Llenguatges'; + $lang['strnolanguages'] = 'No s\'han trobat llenguatges.'; + $lang['strtrusted'] = 'Fiable'; + + // Info + $lang['strnoinfo'] = 'No hi ha informació disponible.'; + $lang['strreferringtables'] = 'Referent a les taules'; + $lang['strparenttables'] = 'Taules pare'; + $lang['strchildtables'] = 'Taules fill'; + + // Aggregates + $lang['straggregate'] = 'Agregat'; + $lang['straggregates'] = 'Agregats'; + $lang['strnoaggregates'] = 'No s\'han trobat agregats'; + $lang['stralltypes'] = '(Tots els tipus)'; + $lang['strcreateaggregate'] = 'Crea un agregat'; + $lang['straggrbasetype'] = 'Tipus de dades d\'entrada'; + $lang['straggrsfunc'] = 'Funció de la transició de l\'estat'; + $lang['straggrstype'] = 'Tipus de dades pel valor de l\'estat'; + $lang['straggrffunc'] = 'Funció final'; + $lang['straggrinitcond'] = 'Condició inicial'; + $lang['straggrsortop'] = 'Operador ordre'; + $lang['strconfdropaggregate'] = 'Està segur de voler elimnar l\'agregat \'%s\'?'; + $lang['straggregatedropped'] = 'Agregat eliminat.'; + $lang['straggregatedroppedbad'] = 'No s\'ha pogut eliminar l\'agregat.'; + $lang['straggraltered'] = 'Agregat modificat.'; + $lang['straggralteredbad'] = 'No s\'ha pogut modificar l\'agregat.'; + $lang['straggrneedsname'] = 'Ha d\'especificar un nom per l\'agregat'; + $lang['straggrneedsbasetype'] = 'Ha d\'especificar el tipus de dades d\'entrada per l\'agregat'; + $lang['straggrneedssfunc'] = 'Ha d\'especificar el nom de la funció de transició de l\'estat per l\'agregat'; + $lang['straggrneedsstype'] = 'Ha d\'especificar el tipus de dades pel valor de l\'estat de l\'agregat'; + $lang['straggrcreated'] = 'Agregat creat.'; + $lang['straggrcreatedbad'] = 'No s\'ha pogut crear l\agregat.'; + $lang['straggrshowall'] = 'Mostra tots els agregats'; + + // Operator Classes + $lang['stropclasses'] = 'Classes d\'operadors'; + $lang['strnoopclasses'] = 'No s\'han trobat classes d\'operadors.'; + $lang['straccessmethod'] = 'Mètode d\'accés'; + + // Stats and performance + $lang['strrowperf'] = 'Row Performance'; + $lang['strioperf'] = 'I/O Performance'; + $lang['stridxrowperf'] = 'Index Row Performance'; + $lang['stridxioperf'] = 'Index I/O Performance'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sequential'; + $lang['strscan'] = 'Scan'; + $lang['strread'] = 'Read'; + $lang['strfetch'] = 'Fetch'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disk'; + $lang['strrows2'] = 'Rows'; + + // Tablespaces + $lang['strtablespace'] = 'Tablespace'; + $lang['strtablespaces'] = 'Tablespaces'; + $lang['strshowalltablespaces'] = 'Mostrar tots els tablespaces'; + $lang['strnotablespaces'] = 'No s\'han trobat tablespaces'; + $lang['strcreatetablespace'] = 'Crea un tablespace'; + $lang['strlocation'] = 'Localització'; + $lang['strtablespaceneedsname'] = 'Ha de donar un nom al tablespace.'; + $lang['strtablespaceneedsloc'] = 'Ha de donar un directori on crear el tablespace.'; + $lang['strtablespacecreated'] = 'Tablespace creat.'; + $lang['strtablespacecreatedbad'] = 'No s\'ha pogut crear el Tablespace.'; + $lang['strconfdroptablespace'] = 'Està segur de voler eliminar el tablespace "%s"?'; + $lang['strtablespacedropped'] = 'Tablespace eliminat.'; + $lang['strtablespacedroppedbad'] = 'No s\'ha pogut eliminar el tablespace.'; + $lang['strtablespacealtered'] = 'Tablespace modificat.'; + $lang['strtablespacealteredbad'] = 'No s\'ha pogut modifcar el tablespace.'; + + // Miscellaneous + $lang['strtopbar'] = '%s corrent a %s:%s -- Ha entrat com a usuari "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Ajuda'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Cercador de pàgines d\'ajuda'; + $lang['strselecthelppage'] = 'Selecciona una pàgina d\'ajuda'; + $lang['strinvalidhelppage'] = 'Pàgina d\'ajuda invàlida.'; + $lang['strlogintitle'] = 'Entrar a %s'; + $lang['strlogoutmsg'] = 'Sortir de %s'; + $lang['strloading'] = 'Carregant...'; + $lang['strerrorloading'] = 'Error Carregant'; + $lang['strclicktoreload'] = 'Clicar per recarregar'; + + // Autovacuum + $lang['strautovacuum'] = 'Autovacuum'; + $lang['strturnedon'] = 'Activat'; + $lang['strturnedoff'] = 'Desactivat'; + $lang['strenabled'] = 'Habilitat'; + $lang['strnovacuumconf'] = 'No s\'ha trobat la configuració de l\'autovacuum.'; + $lang['strvacuumbasethreshold'] = 'Llindar Base del Vacuum'; + $lang['strvacuumscalefactor'] = 'Factor d\'Escala del Vacuum'; + $lang['stranalybasethreshold'] = 'Llindar Base de l\'Analyze'; + $lang['stranalyzescalefactor'] = 'Factor d\'Escala de l\'Analyze'; + $lang['strvacuumcostdelay'] = 'Cost del Retard del Vacuum'; + $lang['strvacuumcostlimit'] = 'Límit de Cost del Vacuum'; + $lang['strvacuumpertable'] = 'Configuració de l\'autovacuum per taula'; + $lang['straddvacuumtable'] = 'Afegeix la configuració de l\'autovacuum per una taula'; + $lang['streditvacuumtable'] = 'Edita la configuració de l\'autovacuum de la taula %s'; + $lang['strdelvacuumtable'] = 'Vol eliminar la configuració de l\'autovacuum de la taula %s ?'; + $lang['strvacuumtablereset'] = 'S\'ha inicialitzat la configuració de l\'autovacuum de la taula %s als valors per defecte'; + $lang['strdelvacuumtablefail'] = 'No s\'ha pogut eliminar la configuració de l\'autovacuum de la taula %s'; + $lang['strsetvacuumtablesaved'] = 'Configuració de l\'autovacuum de la taula %s desada.'; + $lang['strsetvacuumtablefail'] = 'Ha fallat la configuració de l\'autovacuum de la taula %s.'; + $lang['strspecifydelvacuumtable'] = 'Ha d\'especificar la taula d\'on vol eliminar els paràmetres de l\'autovacuum.'; + $lang['strspecifyeditvacuumtable'] = 'Ha d\'especificar la taula d\'on vol editar els paràmetres de l\'autovacuum.'; + $lang['strnotdefaultinred'] = 'Els paràmetres no per defecte en vermell.'; + + // Table-level Locks + $lang['strlocks'] = 'Bloquejos'; + $lang['strtransaction'] = 'ID de la Transacció'; + $lang['strvirtualtransaction'] = 'ID de la Transacció Virtual'; + $lang['strprocessid'] = 'ID del Procés'; + $lang['strmode'] = 'Mode de Bloqueig'; + $lang['strislockheld'] = 'S\'aguanta el bloqueig?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Transaccions preparades'; + $lang['strxactid'] = 'ID de la Transacció'; + $lang['strgid'] = 'ID Global'; + + // Fulltext search + $lang['strfulltext'] = 'Cerca del Text Completa (FTS)'; + $lang['strftsconfig'] = 'Configuració FTS'; + $lang['strftsconfigs'] = 'Configuracions'; + $lang['strftscreateconfig'] = 'Crea una configuració FTS'; + $lang['strftscreatedict'] = 'Crea un diccionari'; + $lang['strftscreatedicttemplate'] = 'Crea una plantilla d\'un diccionari'; + $lang['strftscreateparser'] = 'Crea un analitzador'; + $lang['strftsnoconfigs'] = 'No s\'ha trobat cap configuració FTS.'; + $lang['strftsconfigdropped'] = 'Configuració FTS eliminada.'; + $lang['strftsconfigdroppedbad'] = 'No s\'ha pogut eliminar la configuració FTS.'; + $lang['strconfdropftsconfig'] = 'Està segur de voler eliminar la configuració FTS "%s"?'; + $lang['strconfdropftsdict'] = 'Està segur de voler eliminar el diccionari FTS "%s"?'; + $lang['strconfdropftsmapping'] = 'Està segur de voler eliminar el traçat "%s" de la configuració FTS "%s"?'; + $lang['strftstemplate'] = 'Plantilla'; + $lang['strftsparser'] = 'Analitzador'; + $lang['strftsconfigneedsname'] = 'Ha de donar un nom a la configuració FTS.'; + $lang['strftsconfigcreated'] = 'Configuració FTS creada.'; + $lang['strftsconfigcreatedbad'] = 'No s\'ha pogut crear la configuració FTS.'; + $lang['strftsmapping'] = 'Traçat'; + $lang['strftsdicts'] = 'Diccionaris'; + $lang['strftsdict'] = 'Diccionari'; + $lang['strftsemptymap'] = 'Mapa de la configuració FTS buida.'; + $lang['strftsconfigaltered'] = 'Configuració FTS modificada.'; + $lang['strftsconfigalteredbad'] = 'No s\'ha pogut modificar la configuració FTS.'; + $lang['strftsconfigmap'] = 'Mapa de la configuració FTS'; + $lang['strftsparsers'] = 'Analitzadors FTS'; + $lang['strftsnoparsers'] = 'No hi ha analitzadors FTS disponibles.'; + $lang['strftsnodicts'] = 'No hi ha diccionaris FTS disponibles.'; + $lang['strftsdictcreated'] = 'Diccionari FTS creat.'; + $lang['strftsdictcreatedbad'] = 'No s\ha pogut crear el diccionari FTS.'; + $lang['strftslexize'] = 'Lexize'; + $lang['strftsinit'] = 'Inicialitzador'; + $lang['strftsoptionsvalues'] = 'Opcions i valors'; + $lang['strftsdictneedsname'] = 'Ha de donar un nom al diccionari FTS.'; + $lang['strftsdictdropped'] = 'Diccionari FTS eliminat.'; + $lang['strftsdictdroppedbad'] = 'No s\'ha pogut eliminar el diccionari FTS.'; + $lang['strftsdictaltered'] = 'Diccionari FTS modificat.'; + $lang['strftsdictalteredbad'] = 'No s\'ha pogut modificar el diccionari FTS.'; + $lang['strftsaddmapping'] = 'Afegeix un nou traçat'; + $lang['strftsspecifymappingtodrop'] = 'Ha d\'especificar almenys un traçat per eliminar.'; + $lang['strftsspecifyconfigtoalter'] = 'Ha d\'especificar la configuració FTS per modificar'; + $lang['strftsmappingdropped'] = 'Traçat FTS eliminat.'; + $lang['strftsmappingdroppedbad'] = 'No s\'ha pogut eliminar el traçat FTS.'; + $lang['strftsnodictionaries'] = 'No s\'han trobat diccionaris.'; + $lang['strftsmappingaltered'] = 'Traçat FTS modificat.'; + $lang['strftsmappingalteredbad'] = 'No s\'ha pogut modificar el traçat FTS.'; + $lang['strftsmappingadded'] = 'Traçat FTS afegit.'; + $lang['strftsmappingaddedbad'] = 'No s\'ha pogut afegir el traçat FTS.'; + $lang['strftstabconfigs'] = 'Configuracions'; + $lang['strftstabdicts'] = 'Diccionaris'; + $lang['strftstabparsers'] = 'Analitzadors'; + $lang['strftscantparsercopy'] = 'No es pot especificar alhora un analitzador i una plantilla durant la creació de la configuració de la cerca de text.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-sim.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-sim.php new file mode 100644 index 00000000..49b056e4 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-sim.php @@ -0,0 +1,359 @@ +<?php + +/** +* @maintainer He Wei Ping [laser@zhengmai.com.cn] +*/ + +// Language and character set +$lang['applang'] = '简体中文(统一码)'; +$lang['applocale'] = 'zh-CN'; +$lang['applangdir'] = 'ltr'; + +// Basic strings +$lang['strintro'] = '迎使用 phpPgAdmin。'; +$lang['strlogin'] = '登录'; +$lang['strloginfailed'] = '登录失败'; +$lang['strserver'] = '服务器'; +$lang['strlogout'] = '注销'; +$lang['strowner'] = '所属人'; +$lang['straction'] = '功能'; +$lang['stractions'] = '功能'; +$lang['strname'] = '名字'; +$lang['strdefinition'] = '定义'; +$lang['strsequence'] = '序列'; +$lang['strsequences'] = '序列'; +$lang['stroperators'] = '操作'; +$lang['strtypes'] = '类型'; +$lang['straggregates'] = '聚集'; +$lang['strproperties'] = '属性'; +$lang['strbrowse'] = '浏览'; +$lang['strdrop'] = '删除'; +$lang['strdropped'] = '已删除'; +$lang['strnull'] = '空'; +$lang['strnotnull'] = '非空'; +$lang['strprev'] = '上一个'; +$lang['strnext'] = '下一个'; +$lang['strfailed'] = '失败'; +$lang['strcreate'] = '创建'; +$lang['strcomment'] = '注释'; +//$lang['strnext'] = 'Next'; +$lang['strlength'] = '长度'; +$lang['strdefault'] = '默认'; +$lang['stralter'] = '更改'; +$lang['strcancel'] = '取消'; +$lang['strsave'] = '存储'; +$lang['strinsert'] = '插入'; +$lang['strselect'] = '选取'; +$lang['strdelete'] = '删除'; +$lang['strupdate'] = '更新'; +$lang['strreferences'] = '参考'; +$lang['stryes'] = '是'; +$lang['strno'] = '否'; +$lang['stredit'] = '编辑'; +$lang['strrows'] = '行'; +$lang['strexample'] = '如:'; +$lang['strback'] = '返回'; +$lang['strqueryresults'] = '查寻结果'; +$lang['strshow'] = '显示'; +$lang['strempty'] = '空'; +$lang['strlanguage'] = '语言'; + +// Error handling +$lang['strbadconfig'] = '您的 config.inc.php 已失效。您需要自行通过 config.inc.php-ist 修改。'; +$lang['strnotloaded'] = '您的 PHP 中没有完整的数据库支持。'; +$lang['strsqlerror'] = 'SQL:错误'; +$lang['strinstatement'] = 'In statement:'; +$lang['strinvalidparam'] = '无效的脚本参数'; +$lang['strnodata'] = '查无此行。'; + +// Tables +$lang['strnotables'] = '查无此表。'; +$lang['strnotable'] = '查无此表。'; +$lang['strtable'] = '数据表'; +$lang['strtables'] = '数据表'; +$lang['strtablecreated'] = '建表完成。'; +$lang['strtablecreatedbad'] = '建表失败'; +$lang['strtableneedsfield'] = '至少需要一个数据段。'; +$lang['strinsertrow'] = '插入行'; +$lang['strrowinserted'] = '插入行完成。'; +$lang['strrowinsertedbad'] = '先插入行。'; +$lang['streditrow'] = '更改行'; +$lang['strrowupdated'] = '完成行更新。'; +$lang['strrowupdatedbad'] = '更新行失败。'; +$lang['strdeleterow'] = '删除行'; +$lang['strconfdeleterow'] = '真的要除所有的行?'; +$lang['strrowdeleted'] = '删除除行完成。'; +$lang['strrowdeletedbad'] = '除行失败。'; +$lang['strsaveandrepeat'] = '重复存储'; +$lang['strconfemptytable'] = '真的要清空"%s"数据表?'; +$lang['strtableemptied'] = '数据表清空完成。'; +$lang['strtableemptiedbad'] = '数据表清空失败。'; +$lang['strconfdroptable'] = '真的要删除除"%s"数据表?'; +$lang['strtabledropped'] = '善除数据表完成。'; +$lang['strtabledroppedbad'] = '删除数据表失败。'; + +// Users +$lang['struseradmin'] = '用户管理'; +$lang['struser'] = '用户'; +$lang['strusers'] = '用户'; +$lang['strusername'] = '用名'; +$lang['strpassword'] = '密码'; +$lang['strsuper'] = '超级用户'; +$lang['strcreatedb'] = '建库'; +$lang['strexpires'] = '过期'; +$lang['strnousers'] = '查无此用户'; + +// Groups +$lang['strgroupadmin'] = '组管理'; +$lang['strgroup'] = '组'; +$lang['strgroups'] = '群组'; +$lang['strnogroups'] = '查无群组。'; +$lang['strcreategroup'] = '创建组'; +$lang['strshowallgroups'] = '显示所有群组'; +$lang['strgroupneedsname'] = '你必给您组命名。'; +$lang['strgroupcreated'] = '建组完成。'; +$lang['strgroupcreatedbad'] = '建组失败。'; +$lang['strconfdropgroup'] = '真的要删除"%s"组?'; +$lang['strgroupdropped'] = '删除组完成。'; +$lang['strgroupdroppedbad'] = '删除组失败。'; +$lang['strmembers'] = '成员'; + +// Privilges +$lang['strprivileges'] = '特权'; +$lang['strgrant'] = '赋予'; +$lang['strrevoke'] = '撤回'; + +// Databases +$lang['strdatabase'] = '数据库'; +$lang['strdatabases'] = '数据库'; +$lang['strnodatabases'] = '查无此数据库。'; +$lang['strdatabaseneedsname'] = '你必须给您的数据库命名。'; + +// Views +$lang['strviewneedsname'] = '你必须给您的视图命名。'; +$lang['strviewneedsdef'] = '你必须定义您的视图。'; +$lang['strcreateview'] = '建立视图'; +$lang['strnoviews'] = '查无视图。'; +$lang['strview'] = '视图'; +$lang['strviews'] = '视图'; + +// Sequences +$lang['strnosequences'] = '查无序列。'; +$lang['strsequencename'] = '序列名称'; +$lang['strlastvalue'] = '最后的数目'; +$lang['strincrementby'] = '增量(加/减)'; +$lang['strmaxvalue'] = '最大值'; +$lang['strminvalue'] = '最小值'; +$lang['strcachevalue'] = 'cache_value'; +$lang['strlogcount'] = 'log_cnt'; +$lang['striscycled'] = 'is_cycled'; +$lang['strreset'] = '重置'; + +// Indexes +$lang['strindexes'] = '索引'; +$lang['strindexname'] = '索引名'; +$lang['strtabname'] = 'Tab Name'; +$lang['strcolumnname'] = 'Column Name'; +$lang['struniquekey'] = '唯一键'; +$lang['strprimarykey'] = '主键'; +$lang['strshowallindexes'] = '显示所有索引'; +$lang['strcreateindex'] = '创建索引'; +$lang['strindexneedsname'] = '你必须给您的索引命名。'; +$lang['strindexneedscols'] = '你必须给你的字段赋予一个正整数。'; +$lang['strindexcreated'] = '创建索引完成'; +$lang['strindexcreatedbad'] = '创建索引失败.'; +$lang['strconfdropindex'] = '真的要删除"%s"索引?'; +$lang['strindexdropped'] = '删除索引完成。'; +$lang['strindexdroppedbad'] = '删除除索引失败。'; + +// Rules +$lang['strrules'] = '规则'; +$lang['strrule'] = '规则'; +$lang['strnorules'] = '查无此规则'; +$lang['strcreaterule'] = '创建规则'; + +// Tables +$lang['strfield'] = '列'; +$lang['strfields'] = '列'; +$lang['strtype'] = '类型'; +$lang['strvalue'] = '值'; +$lang['strshowalltables'] = '示所有表。'; +$lang['strunique'] = '唯一'; +$lang['strprimary'] = '主'; +$lang['strkeyname'] = '键名'; +$lang['strnumfields'] = '列数'; +$lang['strcreatetable'] = '创建表'; +$lang['strtableneedsname'] = '你必您的索引命名。'; +$lang['strtableneedscols'] = '你必须给你的字段赋予一个正整数。'; +$lang['strexport'] = '导出'; +$lang['strconstraints'] = '强制'; +$lang['strcolumns'] = '列'; + +// Functions +$lang['strnofunctions'] = '查无此函数'; +$lang['strfunction'] = '函数'; +$lang['strfunctions'] = '函数'; +$lang['strreturns'] = 'Returns'; +$lang['strarguments'] = '参数'; +$lang['strproglanguage'] = '语言'; +$lang['strfunctionneedsname'] = '你必须给您的函数命名。'; +$lang['strfunctionneedsdef'] = '你必须定义您的函数。'; + +// Triggers +$lang['strtrigger'] = '触发器'; +$lang['strtriggers'] = '触发器'; +$lang['strnotriggers'] = '查无此触发器。'; +$lang['strcreatetrigger'] = '创建触发器'; + +// Types +$lang['strtype'] = '类型'; +$lang['strtypes'] = '类型'; +$lang['strnotypes'] = '查无此类型。'; +$lang['strcreatetype'] = '创建类型'; +$lang['strconfdroptype'] = '真的要删除"%s"类型?'; +$lang['strtypedropped'] = '删除类型完成。'; +$lang['strtypedroppedbad'] = '删除类型失败。'; +$lang['strtypecreated'] = '创建类型完成。'; +$lang['strtypecreatedbad'] = '建型失败。'; +$lang['strshowalltypes'] = '显示所有的类型'; +$lang['strinputfn'] = '输入功能'; +$lang['stroutputfn'] = '输出功能'; +$lang['strpassbyval'] = 'Passed by val?'; +$lang['stralignment'] = 'Alignment'; +$lang['strelement'] = '元素'; +$lang['strdelimiter'] = '分隔符'; +$lang['strstorage'] = '磁盘存储'; +$lang['strtypeneedsname'] = '你必给您的类型命名。'; +$lang['strtypeneedslen'] = '你必给您的类型定义一个长度。'; + +// Schemas +$lang['strschema'] = '模式'; +$lang['strschemas'] = '模式'; +$lang['strcreateschema'] = '创建模式'; +$lang['strnoschemas'] = '没有此模式'; +$lang['strconfdropschema'] = '你确定要删除"%s"模式么?'; +$lang['strschemadropped'] = '模式已删除'; +$lang['strschemadroppedbad'] = '模式删除失败'; +$lang['strschemacreated'] = '模式已建立'; +$lang['strschemacreatedbad'] = '创建模式失败'; +$lang['strshowallschemas'] = '显示所有模式?'; +$lang['strschemaneedsname'] = '必须给模式命名'; + +$lang['strcreated'] = '创建完成'; +$lang['strok'] = '完成'; +$lang['strencoding'] = '编码'; +$lang['strsql'] = 'SQL码'; +$lang['stradmin'] = '管理'; +$lang['strvacuum'] = '清理(Vacuum)'; +$lang['stranalyze'] = '分析'; +$lang['strreindex'] = '重建索引'; +$lang['strrun'] = '执行'; +$lang['stradd'] = '创建'; +$lang['strformat'] = '格式化'; +$lang['strtablename'] = '资料表名称'; +$lang['strfieldneedsname'] = '你必须给您的数据段命名'; +$lang['struserupdated'] = '用户更新'; +$lang['struserupdatedbad'] = '用户更新'; +$lang['strshowallusers'] = '显示所有用户'; +$lang['strcreateuser'] = '创建用户'; +$lang['strusercreated'] = '创建用户完成'; +$lang['strusercreatedbad'] = '创建用户失败'; +$lang['strconfdropuser'] = '您确定要删除用户"%s"么?'; +$lang['struserdropped'] = '用户删除完成'; +$lang['struserdroppedbad'] = '删除用户失败'; +$lang['strnogroup'] = '查无此群组。'; +$lang['strprivilege'] = '特权'; +$lang['strgranted'] = '特权赋予完成'; +$lang['strgrantfailed'] = '特权赋予失败'; +$lang['strgrantuser'] = '特权赋予用户'; +$lang['strgrantgroup'] = '特权赋予组'; +$lang['strshowalldatabases'] = '显示所有数据库'; +$lang['strnodatabase'] = '查无此数据库。'; +$lang['strcreatedatabase'] = '创建数据库'; +$lang['strdatabasename'] = '数据库名称'; +$lang['strdatabasecreated'] = '创建数据库完成'; +$lang['strdatabasecreatedbad'] = '创建数据库失败'; +$lang['strconfdropdatabase'] = '您确定要删除数据库"%s"么?'; +$lang['strdatabasedropped'] = '数据库删除完成'; +$lang['strdatabasedroppedbad'] = '删除数据库失败'; +$lang['strentersql'] = '请在下方输入要执行的SQL码:'; +$lang['strvacuumgood'] = '清理(Vacuum)完成'; +$lang['strvacuumbad'] = '清理(Vacuum)失败'; +$lang['stranalyzegood'] = '分析完成'; +$lang['stranalyzebad'] = '分析失败'; +$lang['strshowallviews'] = '显示所视图'; +$lang['strnoview'] = '查无此视图'; +$lang['strviewname'] = '视图名称'; +$lang['strviewcreated'] = '创建视图完成'; +$lang['strviewcreatedbad'] = '创建视图失败'; +$lang['strconfdropview'] = '您确定要删除视图"%s"么?'; +$lang['strviewdropped'] = '视图删除完成'; +$lang['strviewdroppedbad'] = '删除视图失败'; +$lang['strviewupdated'] = '视图更新完成'; +$lang['strviewupdatedbad'] = '视图更新失败'; +$lang['strshowallsequences'] = '显示所有序列'; +$lang['strnosequence'] = '查无此序列'; +$lang['strcreatesequence'] = '创建序列'; +$lang['strstartvalue'] = '起始值'; +$lang['strsequenceneedsname'] = '你必须给您的序列命名'; +$lang['strsequencecreated'] = '创建序列完成'; +$lang['strsequencecreatedbad'] = '创建序列失败'; +$lang['strconfdropsequence'] = '您确定要删除序列"%s"么?'; +$lang['strsequencedropped'] = '序列删除完成'; +$lang['strsequencedroppedbad'] = '删除序列失败'; +$lang['strnoindex'] = '查无此索引'; +$lang['strnoindexes'] = '查无此索引'; +$lang['strindextype'] = '索引的类型'; +$lang['strshowallrules'] = '显示所有规则'; +$lang['strnorule'] = '查无此规则'; +$lang['strrulename'] = '规则名称'; +$lang['strruleneedsname'] = '你必须给您的规则命名'; +$lang['strrulecreated'] = '创建规则完成'; +$lang['strrulecreatedbad'] = '创建规则失败'; +$lang['strconfdroprule'] = '您确定要把规则"%s"在资料库"%s"中删除么?'; +$lang['strruledropped'] = '规则删除完成'; +$lang['strruledroppedbad'] = '删除规则失败'; +$lang['strshowallconstraints'] = '显示所有强制'; +$lang['strnoconstraints'] = '查无此强制'; +$lang['strcreateconstraint'] = '创建强制'; +$lang['strconstraintcreated'] = '创建强制完成'; +$lang['strconstraintcreatedbad'] = '创建强制失败'; +$lang['strconfdropconstraint'] = '您确定要把强制"%s"在资料库"%s"中删除么?'; +$lang['strconstraintdropped'] = '删除强制完成'; +$lang['strconstraintdroppedbad'] = '删除强制失败'; +$lang['straddpk'] = '新增主键'; +$lang['strpkneedscols'] = '主键须要至少一列'; +$lang['strpkadded'] = '主键新增完成'; +$lang['strpkaddedbad'] = '新增主键失败'; +$lang['strshowallfunctions'] = '显示所有函数'; +$lang['strnofunction'] = '查无此函数'; +$lang['strcreatefunction'] = '创建函数'; +$lang['strfunctionname'] = '函数名称'; +$lang['strfunctioncreated'] = '创建函数完成'; +$lang['strfunctioncreatedbad'] = '创建函数失败'; +$lang['strconfdropfunction'] = '您确定要删除函数"%s"么?'; +$lang['strfunctiondropped'] = '删除函数完成.'; +$lang['strfunctiondroppedbad'] = '删除函数失败'; +$lang['strfunctionupdated'] = '更新函数完成.'; +$lang['strfunctionupdatedbad'] = '更新函数失败'; +$lang['strshowalltriggers'] = '显示所有触发器'; +$lang['strnotrigger'] = '查无此触发器'; +$lang['strtriggerneedsname'] = '你必须给您的触发器命名'; +$lang['strtriggerneedsfunc'] = '你必须给您的触发器一个函数'; +$lang['strtriggercreated'] = '创建触发器完成'; +$lang['strtriggercreatedbad'] = '创建触发器失败'; +$lang['strconfdroptrigger'] = '您确定要把触发器"%s"在资料库"%s"中删除么?'; +$lang['strtriggerdropped'] = '删除触发器完成.'; +$lang['strtriggerdroppedbad'] = '删除触发器失败'; +$lang['strnotype'] = '查无此类型'; +$lang['strtypename'] = '类型名称'; +$lang['strnoschema'] = '查无此模式'; +$lang['strschemaname'] = '模式名称'; + + + +// Miscellaneous +$lang['strtopbar'] = '%s 架于 %s:%s - 您是 "%s"'; +$lang['strtimefmt'] = 'jS M, Y g:iA'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-tr.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-tr.php new file mode 100644 index 00000000..766ccb53 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-tr.php @@ -0,0 +1,583 @@ +<?php + + /** + * Translated by Chih-Hsin Lee [chlee@femh.org.tw] + * $Id: chinese-tr.php,v 1.15 2007/04/24 11:42:07 soranzo Exp $ + * + * + */ + + // Language and character set + $lang['applang'] = '正體中文(big5)'; + $lang['applocale'] = 'zh-TW'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = '歡迎使用phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmin首頁'; + $lang['strpgsqlhome'] = 'PostgreSQL首頁'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL 文件 (本機)'; + $lang['strreportbug'] = '通報程式臭蟲'; + $lang['strviewfaq'] = '常見問與答'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = '登入'; + $lang['strloginfailed'] = '登入失敗'; + $lang['strlogindisallowed'] = '伺服器拒絕登入'; + $lang['strserver'] = '伺服器'; + $lang['strlogout'] = '退出'; + $lang['strowner'] = '所屬人'; + $lang['straction'] = '功能'; + $lang['stractions'] = '功能'; + $lang['strname'] = '名字'; + $lang['strdefinition'] = '定義'; + $lang['strproperties'] = '屬性'; + $lang['strbrowse'] = '瀏覽'; + $lang['strdrop'] = '刪除'; + $lang['strdropped'] = '已刪除'; + $lang['strnull'] = '允許空值'; + $lang['strnotnull'] = '不允許空值'; + $lang['strprev'] = '< 上一步'; + $lang['strnext'] = '下一步 >'; + $lang['strfirst'] = '<< 第一步'; + $lang['strlast'] = '最後一步 >>'; + $lang['strfailed'] = '失敗'; + $lang['strcreate'] = '建立'; + $lang['strcreated'] = '已建立'; + $lang['strcomment'] = '註釋'; + $lang['strlength'] = '長度'; + $lang['strdefault'] = '預設值'; + $lang['stralter'] = '修改'; + $lang['strok'] = '確定'; + $lang['strcancel'] = '取消'; + $lang['strsave'] = '儲存'; + $lang['strreset'] = '重設'; + $lang['strinsert'] = '插入'; + $lang['strselect'] = '選取'; + $lang['strdelete'] = '刪除'; + $lang['strupdate'] = '更新'; + $lang['strreferences'] = '參考'; + $lang['stryes'] = '是'; + $lang['strno'] = '否'; + $lang['strtrue'] = '真'; + $lang['strfalse'] = '假'; + $lang['stredit'] = '修改'; + $lang['strcolumns'] = '資料行'; + $lang['strrows'] = '資料列'; + $lang['strrowsaff'] = '資料列受影響。'; + $lang['strobjects'] = '物件'; + $lang['strexample'] = '例如:'; + $lang['strback'] = '返回'; + $lang['strqueryresults'] = '查詢結果'; + $lang['strshow'] = '顯示'; + $lang['strempty'] = '空'; + $lang['strlanguage'] = '語言'; + $lang['strencoding'] = '編碼'; + $lang['strvalue'] = '值'; + $lang['strunique'] = '獨一鍵'; + $lang['strprimary'] = '主索引鍵'; + $lang['strexport'] = '匯出'; + $lang['strimport'] = '匯入'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = '開始'; + $lang['stradmin'] = '管理'; + $lang['strvacuum'] = '清理(Vacuum)'; + $lang['stranalyze'] = '分析'; + $lang['strclusterindex'] = '叢集'; + $lang['strclustered'] = '叢集?'; + $lang['strreindex'] = '重建索引'; + $lang['strrun'] = '執行'; + $lang['stradd'] = '加入'; + $lang['strevent'] = '事件'; + $lang['strwhere'] = 'Where'; + $lang['strinstead'] = 'Do Instead'; + $lang['strwhen'] = '當'; + $lang['strformat'] = '格式'; + $lang['strdata'] = '資料'; + $lang['strconfirm'] = '確認'; + $lang['strexpression'] = '表示式'; + $lang['strellipsis'] = '...'; + $lang['strexpand'] = '展開'; + $lang['strcollapse'] = '摺疊'; + $lang['strexplain'] = '闡明'; + $lang['strexplainanalyze'] = '闡明分析'; + $lang['strfind'] = '尋找'; + $lang['stroptions'] = '選項'; + $lang['strrefresh'] = '重新整理'; + $lang['strdownload'] = '下載'; + $lang['strdownloadgzipped'] = '以gzip壓縮後下載'; + $lang['strinfo'] = '資訊'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = '進階'; + $lang['strvariables'] = '變數'; + $lang['strprocess'] = '程序'; + $lang['strprocesses'] = '程序'; + $lang['strsetting'] = '設定'; + $lang['streditsql'] = '編輯SQL'; + $lang['strruntime'] = '總共執行時間: %s ms'; + $lang['strpaginate'] = '分頁顯示結果'; + $lang['struploadscript'] = '或是上傳一個SQL指令檔:'; + $lang['strstarttime'] = '開始時間'; + $lang['strfile'] = '檔案'; + $lang['strfileimported'] = '檔案已匯入。'; + + // Error handling + $lang['strbadconfig'] = '您的 config.inc.php 無效。請利用 config.inc.php-dist 建立您的 config.inc.php 檔。'; + $lang['strnotloaded'] = '您的 PHP 環境未安裝必需的資料庫支援。'; + $lang['strbadschema'] = '指定了無效的模式 (schema)。'; + $lang['strbadencoding'] = '資料庫無法設定用戶端的編碼方式。'; + $lang['strsqlerror'] = 'SQL 錯誤:'; + $lang['strinstatement'] = '於陳述內:'; + $lang['strinvalidparam'] = '無效的 script 變數。'; + $lang['strnodata'] = '找不到任何資料列。'; + $lang['strnoobjects'] = '找不到任何物件。'; + $lang['strrownotunique'] = '此顯料列無獨特識別項。'; + $lang['strnouploads'] = '上傳檔案功能已停用。'; + $lang['strimporterror'] = '匯入錯誤。'; + $lang['strimporterrorline'] = '匯入錯誤發生於第 %s 行。'; + + // Tables + $lang['strtable'] = '資料表'; + $lang['strtables'] = '資料表'; + $lang['strshowalltables'] = '顯示所有的資料表'; + $lang['strnotables'] = '找不到此資料表。'; + $lang['strnotable'] = '找不到任何資料表。'; + $lang['strcreatetable'] = '建立新資料表'; + $lang['strtablename'] = '資料表名'; + $lang['strtableneedsname'] = '您需為您的資料表命名。'; + $lang['strtableneedsfield'] = '您至少應指定一個欄位。'; + $lang['strtableneedscols'] = '資料表需要一定數目的資料行。'; + $lang['strtablecreated'] = '成功建立資料表。'; + $lang['strtablecreatedbad'] = '建立資料表作業失敗。'; + $lang['strconfdroptable'] = '您確定要刪除資料表 "%s"?'; + $lang['strtabledropped'] = '成功刪除資料表。'; + $lang['strtabledroppedbad'] = '刪除資料表作業失敗。'; + $lang['strconfemptytable'] = '您確定要清空資料表 "%s"?'; + $lang['strtableemptied'] = '成功清空資料表。'; + $lang['strtableemptiedbad'] = '清空資料表作業失敗。'; + $lang['strinsertrow'] = '插入資料行'; + $lang['strrowinserted'] = '成功插入資料行。'; + $lang['strrowinsertedbad'] = '插入資料行作業失敗。'; + $lang['streditrow'] = '修改資料行'; + $lang['strrowupdated'] = '成功更新資料行。'; + $lang['strrowupdatedbad'] = '更新資料行作業失敗。'; + $lang['strdeleterow'] = '刪除資料行'; + $lang['strconfdeleterow'] = '您確定要刪除些資料行?'; + $lang['strrowdeleted'] = '成功刪除資料行。'; + $lang['strrowdeletedbad'] = '資料行刪除作業失敗。'; + $lang['strsaveandrepeat'] = '儲存並重覆'; + $lang['strfield'] = '欄位'; + $lang['strfields'] = '欄位'; + $lang['strnumfields'] = '欄位數目'; + $lang['strfieldneedsname'] = '您需為您的欄位命名。'; + $lang['strselectallfields'] = '選擇所有欄位'; + $lang['strselectneedscol'] = '至少應顯示一資料列。'; + $lang['strselectunary'] = '不能為一元運算子指定數值。'; + $lang['straltercolumn'] = '修改資料列'; + $lang['strcolumnaltered'] = '成功修改資料列。'; + $lang['strcolumnalteredbad'] = '修改資料列作業失敗。'; + $lang['strconfdropcolumn'] = '您確定要刪除資料列 "%s" 於資料表 "%s"?'; + $lang['strcolumndropped'] = '成功刪除資料列。'; + $lang['strcolumndroppedbad'] = '刪除資料列作業失敗。'; + $lang['straddcolumn'] = '加入新資料欄'; + $lang['strcolumnadded'] = '成功加入資料欄。'; + $lang['strcolumnaddedbad'] = '加入資料欄作業失敗。'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = '資料表已修改。'; + $lang['strtablealteredbad'] = '資料表修改作業失敗。'; + $lang['strdataonly'] = '只顯示資料'; + $lang['strstructureonly'] = '只有結構'; + $lang['strstructureanddata'] = '資料和結構'; + $lang['strtabbed'] = 'Tabbed'; + $lang['strauto'] = '自動'; + + // Users + $lang['struser'] = '用戶'; + $lang['strusers'] = '用戶'; + $lang['strusername'] = '用戶名'; + $lang['strpassword'] = '密碼'; + $lang['strsuper'] = '超級用戶?'; + $lang['strcreatedb'] = '允許建立資料庫?'; + $lang['strexpires'] = '失效'; + $lang['strsessiondefaults'] = '預設Session'; + $lang['strnousers'] = '找不到此用戶。'; + $lang['struserupdated'] = '成功更新用戶。'; + $lang['struserupdatedbad'] = '更新用戶作業失敗。'; + $lang['strshowallusers'] = '顯示所有用戶'; + $lang['strcreateuser'] = '建立新用戶'; + $lang['struserneedsname'] = '請為此用戶命戶'; + $lang['strusercreated'] = '成功建立新用戶。'; + $lang['strusercreatedbad'] = '建立新用戶作業失敗。'; + $lang['strconfdropuser'] = '您確定要刪除用戶 "%s"?'; + $lang['struserdropped'] = '用戶已刪除。'; + $lang['struserdroppedbad'] = '刪除用戶作業失敗。'; + $lang['straccount'] = '帳戶'; + $lang['strchangepassword'] = '更改密碼'; + $lang['strpasswordchanged'] = '成功更改密碼。'; + $lang['strpasswordchangedbad'] = '更改密碼作業失敗。'; + $lang['strpasswordshort'] = '密碼太短。'; + $lang['strpasswordconfirm'] = '所輸入的兩組密碼不同。'; + + // Groups + $lang['strgroup'] = '群組'; + $lang['strgroups'] = '群組'; + $lang['strnogroup'] = '找不到此群組。'; + $lang['strnogroups'] = '找不到任何群組。'; + $lang['strcreategroup'] = '建立新群組'; + $lang['strshowallgroups'] = '顯示所有群組'; + $lang['strgroupneedsname'] = '您需為您的群組命名。'; + $lang['strgroupcreated'] = '成功建立群組。'; + $lang['strgroupcreatedbad'] = '群組建立作業失敗。'; + $lang['strconfdropgroup'] = '您確定刪除群組 "%s"?'; + $lang['strgroupdropped'] = '成功刪除群組。'; + $lang['strgroupdroppedbad'] = '刪除群組作業失敗。'; + $lang['strmembers'] = '用戶'; + $lang['straddmember'] = '新增用戶'; + $lang['strmemberadded'] = '已加入用戶。'; + $lang['strmemberaddedbad'] = '新增用戶失敗。'; + $lang['strdropmember'] = '刪除用戶'; + $lang['strconfdropmember'] = '您確定要刪除用戶 "%s" 從群組 "%s"中?'; + $lang['strmemberdropped'] = '用戶已刪除。'; + $lang['strmemberdroppedbad'] = '刪除用戶作業失敗。'; + + // Privilges + $lang['strprivilege'] = '特權'; + $lang['strprivileges'] = '特權'; + $lang['strnoprivileges'] = '該物件有預設的所屬入特權。'; + $lang['strgrant'] = '賦予'; + $lang['strrevoke'] = '撤回'; + $lang['strgranted'] = '成功更改特權。'; + $lang['strgrantfailed'] = '更改特權作業失敗。'; + $lang['strgrantbad'] = '您應為一名使用者或群組指定至少一個特權。'; + $lang['stralterprivs'] = '更改特權'; + $lang['strgrantor'] = '授權者'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = '資料庫'; + $lang['strdatabases'] = '資料庫'; + $lang['strshowalldatabases'] = '顯示所有資料庫'; + $lang['strnodatabase'] = '找不到此資料庫。'; + $lang['strnodatabases'] = '找不到任何資料庫。'; + $lang['strcreatedatabase'] = '建立新資料庫'; + $lang['strdatabasename'] = '資料庫名'; + $lang['strdatabaseneedsname'] = '您需為您的資料庫命名。'; + $lang['strdatabasecreated'] = '成功建立資料庫。'; + $lang['strdatabasecreatedbad'] = '建立資料庫作業失敗。'; + $lang['strconfdropdatabase'] = '您確定要刪除資料庫 "%s"?'; + $lang['strdatabasedropped'] = '成功刪除資料庫。'; + $lang['strdatabasedroppedbad'] = '刪除資料庫作業失敗。'; + $lang['strentersql'] = '於下方輸入所要執行的 SQL 陳述式:'; + $lang['strsqlexecuted'] = '成功執行 SQL 。'; + $lang['strvacuumgood'] = '清理(Vacuum)作業完成。'; + $lang['strvacuumbad'] = '清理(Vacuum)作業失敗。'; + $lang['stranalyzegood'] = '分析作業完成。'; + $lang['stranalyzebad'] = '分析作業失敗.'; + $lang['strreindexgood'] = '索引重建完成。'; + $lang['strreindexbad'] = '索引重建失敗。'; + $lang['strfull'] = '完整'; + $lang['strfreeze'] = '凍結'; + $lang['strforce'] = '強制'; + + // Views + $lang['strview'] = '視表'; + $lang['strviews'] = '視表'; + $lang['strshowallviews'] = '顯示所有視表'; + $lang['strnoview'] = '找不到此視表。'; + $lang['strnoviews'] = '找不到任何視表。'; + $lang['strcreateview'] = '建立新視表'; + $lang['strviewname'] = '視表名'; + $lang['strviewneedsname'] = '您需為您的視表命名。'; + $lang['strviewneedsdef'] = '您必須定義你的視表。'; + $lang['strviewneedsfields'] = '請選擇要加入視表的資料欄。'; + $lang['strviewcreated'] = '成功建立新視表。'; + $lang['strviewcreatedbad'] = '建立新視表作業失敗'; + $lang['strconfdropview'] = '您確定要刪除視表 "%s"?'; + $lang['strviewdropped'] = '成功刪除視表。'; + $lang['strviewdroppedbad'] = '刪除視表作業失敗。'; + $lang['strviewupdated'] = '成功更新視表。'; + $lang['strviewupdatedbad'] = '更新視表作業失敗。'; + $lang['strviewlink'] = '連結索引'; + $lang['strviewconditions'] = '額外條件'; + $lang['strcreateviewwiz'] = '使用視表精靈'; + + // Sequences + $lang['strsequence'] = '序列'; + $lang['strsequences'] = '序列'; + $lang['strshowallsequences'] = '顯示所有序列'; + $lang['strnosequence'] = '找不到此序列。'; + $lang['strnosequences'] = '找不到任何序列。'; + $lang['strcreatesequence'] = '建立新序列'; + $lang['strlastvalue'] = '結束值'; + $lang['strincrementby'] = '增量 (加/減) '; + $lang['strstartvalue'] = '啟始值'; + $lang['strmaxvalue'] = '最大值'; + $lang['strminvalue'] = '最少值'; + $lang['strcachevalue'] = '快取值'; + $lang['strlogcount'] = '登錄數量'; + $lang['striscycled'] = '循環?'; + $lang['strsequenceneedsname'] = '您需為您的序列命名。'; + $lang['strsequencecreated'] = '成功建立新序列。'; + $lang['strsequencecreatedbad'] = '建立新序列作業失敗。'; + $lang['strconfdropsequence'] = '您確定要刪除序列 "%s"?'; + $lang['strsequencedropped'] = '成功刪除序列。'; + $lang['strsequencedroppedbad'] = '刪除序列作業失敗。'; + $lang['strsequencereset'] = '已重設序列。'; + $lang['strsequenceresetbad'] = '重設序列失敗。'; + + // Indexes + $lang['strindex'] = '索引'; + $lang['strindexes'] = '索引'; + $lang['strindexname'] = '索引名'; + $lang['strshowallindexes'] = '顯示所有的索引'; + $lang['strnoindex'] = '找不到此索引。'; + $lang['strnoindexes'] = '找不到任何索引。'; + $lang['strcreateindex'] = '建立新索引'; + $lang['strtabname'] = '檢索名'; + $lang['strcolumnname'] = '資料列名'; + $lang['strindexneedsname'] = '您需為您的索引命名。'; + $lang['strindexneedscols'] = '索引應有一定數問的資料列。'; + $lang['strindexcreated'] = '成功建立新索引'; + $lang['strindexcreatedbad'] = '建立索引作業失敗。'; + $lang['strconfdropindex'] = '您確定要刪除索引 "%s"?'; + $lang['strindexdropped'] = '成功刪除索引。'; + $lang['strindexdroppedbad'] = '刪除索引作業失敗。'; + $lang['strkeyname'] = '鍵名'; + $lang['struniquekey'] = '獨一鍵'; + $lang['strprimarykey'] = '主索引鍵'; + $lang['strindextype'] = '索引類型'; + $lang['strtablecolumnlist'] = '資料表所含的資料列'; + $lang['strindexcolumnlist'] = '索引所含的資料列'; + $lang['strconfcluster'] = '您確定要叢集 "%s"?'; + $lang['strclusteredgood'] = '叢集完成。'; + $lang['strclusteredbad'] = '叢集失敗。'; + + // Rules + $lang['strrules'] = '規則'; + $lang['strrule'] = '規則'; + $lang['strshowallrules'] = '顯示所有的規則'; + $lang['strnorule'] = '找不到此規則。'; + $lang['strnorules'] = '找不到任何規則。'; + $lang['strcreaterule'] = '建立新規則'; + $lang['strrulename'] = '規則名'; + $lang['strruleneedsname'] = '您需為您的規則命名。'; + $lang['strrulecreated'] = '成功建立新規則。'; + $lang['strrulecreatedbad'] = '建立新規則作業失敗。'; + $lang['strconfdroprule'] = '您確定要刪除 "%s" 於 "%s"?'; + $lang['strruledropped'] = '成功刪除規則。'; + $lang['strruledroppedbad'] = '刪除規則作業失敗。'; + + // Constraints + $lang['strconstraints'] = '約束'; + $lang['strshowallconstraints'] = '顯示所有的約束'; + $lang['strnoconstraints'] = '找不到此約束。'; + $lang['strcreateconstraint'] = '建立新約束'; + $lang['strconstraintcreated'] = '成功建立新約束。'; + $lang['strconstraintcreatedbad'] = '新建約束作業失敗。'; + $lang['strconfdropconstraint'] = '您確定要刪除約束 "%s" 於 "%s"?'; + $lang['strconstraintdropped'] = '成功刪除約束。'; + $lang['strconstraintdroppedbad'] = '刪除約束作業失敗。'; + $lang['straddcheck'] = '加入新查驗 (check)'; + $lang['strcheckneedsdefinition'] = '您需定義您的查驗 (check)。'; + $lang['strcheckadded'] = '成功加入新查驗 (check)。'; + $lang['strcheckaddedbad'] = '加入新查驗 (check) 作業失敗。'; + $lang['straddpk'] = '加入主索引鍵'; + $lang['strpkneedscols'] = '主索引鍵至少應包含一個資料行。'; + $lang['strpkadded'] = '成功加入主索引鍵。'; + $lang['strpkaddedbad'] = '加入主索引鍵作作業失敗。'; + $lang['stradduniq'] = '加入獨一鍵'; + $lang['struniqneedscols'] = '獨一鍵至少應包含一個資料行。'; + $lang['struniqadded'] = '成功加入獨一鍵。'; + $lang['struniqaddedbad'] = '加入獨一鍵作業失敗。'; + $lang['straddfk'] = '加入外部索引鍵'; + $lang['strfkneedscols'] = '外部索引鍵至少應包含一個資料行。'; + $lang['strfkneedstarget'] = '外部索引鍵需參照目標資料表。'; + $lang['strfkadded'] = '成功加入外部索引鍵。'; + $lang['strfkaddedbad'] = '加入外部索引鍵作業失敗。'; + $lang['strfktarget'] = '目標資料表'; + $lang['strfkcolumnlist'] = '鍵所含的資料行'; + $lang['strondelete'] = '於刪除時'; + $lang['stronupdate'] = '於更改時'; + + // Functions + $lang['strfunction'] = '函數'; + $lang['strfunctions'] = '函數'; + $lang['strshowallfunctions'] = '顯示所有的函數'; + $lang['strnofunction'] = '找不到此函數。'; + $lang['strnofunctions'] = '找不到任何函數。'; + $lang['strcreatefunction'] = '建立新函數'; + $lang['strfunctionname'] = '函數名'; + $lang['strreturns'] = '返回'; + $lang['strarguments'] = '參數'; + $lang['strproglanguage'] = '程式語言'; + $lang['strfunctionneedsname'] = '您需為您的函數命名。'; + $lang['strfunctionneedsdef'] = '您必須定義您的函數。'; + $lang['strfunctioncreated'] = '成功建立新函數。'; + $lang['strfunctioncreatedbad'] = '新建函數作業失敗。'; + $lang['strconfdropfunction'] = '您確定要刪除函數 "%s"?'; + $lang['strfunctiondropped'] = '成功刪除函數。'; + $lang['strfunctiondroppedbad'] = '刪除函數作業失敗。'; + $lang['strfunctionupdated'] = '成功更改函數。'; + $lang['strfunctionupdatedbad'] = '更改函數作業失敗。'; + + // Triggers + $lang['strtrigger'] = '觸發器'; + $lang['strtriggers'] = '觸發器'; + $lang['strshowalltriggers'] = '顯示所有的觸發器'; + $lang['strnotrigger'] = '找不到此觸發器。'; + $lang['strnotriggers'] = '找不到任何觸發器。'; + $lang['strcreatetrigger'] = '建立新觸發器'; + $lang['strtriggerneedsname'] = '您需為您的觸發器命名。'; + $lang['strtriggerneedsfunc'] = '您必須為你的觸發器指定一個函數。'; + $lang['strtriggercreated'] = '成功建立新觸發器。'; + $lang['strtriggercreatedbad'] = '建立觸發器作業失敗。'; + $lang['strconfdroptrigger'] = '您確定要刪除觸發器 "%s" 於 "%s"?'; + $lang['strtriggerdropped'] = '成功刪除觸發器。'; + $lang['strtriggerdroppedbad'] = '刪除觸發器作業失敗。'; + $lang['strtriggeraltered'] = '觸發器已修改。'; + $lang['strtriggeralteredbad'] = '修改觸發器作業失敗。'; + + // Types + $lang['strtype'] = '類型'; + $lang['strtypes'] = '類型'; + $lang['strshowalltypes'] = '顯示所有的類型'; + $lang['strnotype'] = '找不到此類型。'; + $lang['strnotypes'] = '找不到任何類型。'; + $lang['strcreatetype'] = '建立新類型'; + $lang['strtypename'] = '類型名'; + $lang['strinputfn'] = '輸入函數'; + $lang['stroutputfn'] = '輸出函數'; + $lang['strpassbyval'] = '以值傳送?'; + $lang['stralignment'] = '排列'; + $lang['strelement'] = '元素'; + $lang['strdelimiter'] = '分隔符號'; + $lang['strstorage'] = '儲存'; + $lang['strtypeneedsname'] = '您需為您的類型命名。'; + $lang['strtypeneedslen'] = '您必須指定您的類型的長度。'; + $lang['strtypecreated'] = '成功建立新類型'; + $lang['strtypecreatedbad'] = ' 建立類型作業失敗。'; + $lang['strconfdroptype'] = '您確定要刪除類型 "%s"?'; + $lang['strtypedropped'] = '成功刪除類型。'; + $lang['strtypedroppedbad'] = '刪除類型作業失敗。'; + + // Schemas + $lang['strschema'] = '模式'; + $lang['strschemas'] = '模式'; + $lang['strshowallschemas'] = '顯示所有的模式'; + $lang['strnoschema'] = '找不到此模式'; + $lang['strnoschemas'] = '找不到任何模式。'; + $lang['strcreateschema'] = '建立新模式'; + $lang['strschemaname'] = '模式名'; + $lang['strschemaneedsname'] = '您需為您的模式命名。'; + $lang['strschemacreated'] = '成功建立新模式。'; + $lang['strschemacreatedbad'] = '建立模式作業失敗。'; + $lang['strconfdropschema'] = '您確定要刪除模式 "%s"?'; + $lang['strschemadropped'] = '成功刪除模式。 '; + $lang['strschemadroppedbad'] = '刪除模式作業失敗。'; + $lang['strschemaaltered'] = '成功修改模式'; + $lang['strschemaalteredbad'] = '修改模式失敗。'; + + // Reports + + // Domains + $lang['strdomain'] = '領域'; + $lang['strdomains'] = '領域'; + $lang['strshowalldomains'] = '顯示所有領域'; + $lang['strnodomains'] = '找不到任何領域。'; + $lang['strcreatedomain'] = '新建領域'; + $lang['strdomaindropped'] = '領域已刪除。'; + $lang['strdomaindroppedbad'] = '領域刪除作業失敗。'; + $lang['strconfdropdomain'] = '您確定要刪除領域 "%s"?'; + $lang['strdomainneedsname'] = '您需為此領域命名。'; + $lang['strdomaincreated'] = '領域已建立。'; + $lang['strdomaincreatedbad'] = '新建領域作業失敗。'; + $lang['strdomainaltered'] = '領域已修改。'; + $lang['strdomainalteredbad'] = '修改領域作業失敗。'; + + // Operators + $lang['stroperator'] = '運算子'; + $lang['stroperators'] = '運算子'; + $lang['strshowalloperators'] = '顯示所有運算子s'; + $lang['strnooperator'] = '找不到運算子。'; + $lang['strnooperators'] = '找不到任何運算子。'; + $lang['strcreateoperator'] = '新建運算子'; + $lang['strleftarg'] = '左引數型態'; + $lang['strrightarg'] = '右引數型態'; + $lang['strcommutator'] = '轉換器'; + $lang['strnegator'] = '否定器'; + $lang['strrestrict'] = '限制'; + $lang['strjoin'] = '結合'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = '合併'; + $lang['strleftsort'] = '左排序'; + $lang['strrightsort'] = '右排序'; + $lang['strlessthan'] = '小於'; + $lang['strgreaterthan'] = '大於'; + $lang['stroperatorneedsname'] = '您需為您的運算子命名。'; + $lang['stroperatorcreated'] = '運算子已建立'; + $lang['stroperatorcreatedbad'] = '運算子新建作業失敗。'; + $lang['strconfdropoperator'] = '您確定要刪除運算子 "%s"?'; + $lang['stroperatordropped'] = '運算子已刪除。'; + $lang['stroperatordroppedbad'] = '運算子刪除失敗。'; + + // Casts + $lang['strcasts'] = '型別轉換'; + $lang['strnocasts'] = '找不到型別轉換。'; + $lang['strsourcetype'] = '原始型別'; + $lang['strtargettype'] = '目摽型別'; + $lang['strimplicit'] = '隱含'; + $lang['strinassignment'] = '指派中'; + $lang['strbinarycompat'] = '(二元相符)'; + + // Conversions + $lang['strconversions'] = '轉換'; + $lang['strnoconversions'] = '找不到轉換。'; + $lang['strsourceencoding'] = '原始編碼'; + $lang['strtargetencoding'] = '目標編碼'; + + // Languages + $lang['strlanguages'] = '語言'; + $lang['strnolanguages'] = '找不到語言。'; + $lang['strtrusted'] = '受信任的'; + + // Info + $lang['strnoinfo'] = '無法取得資訊。'; + $lang['strreferringtables'] = '參照資料表'; + $lang['strparenttables'] = '父資料表'; + $lang['strchildtables'] = '子資料表'; + + // Aggregates + $lang['straggregates'] = '匯總'; + $lang['strnoaggregates'] = '找不到任何匯總。'; + $lang['stralltypes'] = '(全部類型)'; + + // Operator Classes + $lang['stropclasses'] = '運算子類別'; + $lang['strnoopclasses'] = '找不到任何運算類別。'; + $lang['straccessmethod'] = '拒絕存取'; + + // Stats and performance + $lang['strrowperf'] = '資料行效率'; + $lang['strioperf'] = 'I/O效率'; + $lang['stridxrowperf'] = '索引行效率'; + $lang['stridxioperf'] = '索引I/O效率'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = '循序'; + $lang['strscan'] = '掃描'; + $lang['strread'] = '讀取'; + $lang['strfetch'] = 'Fetch'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST索引'; + $lang['strcache'] = '快取'; + $lang['strdisk'] = '磁碟'; + $lang['strrows2'] = '資料行'; + + // Miscellaneous + $lang['strtopbar'] = '%s 執行於 %s:%s - 您是 "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = '說明'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-utf8-zh_CN.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-utf8-zh_CN.php new file mode 100644 index 00000000..d2f2a29a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-utf8-zh_CN.php @@ -0,0 +1,902 @@ +<?php +/** +* Chinese language file for phpPgAdmin. +* +* $Id: chinese-utf8-zh_CN.php,v 1.6 2013/04/15 cozhan $ +*/ + + // Language and character set + $lang['applang'] = '简体中文(统一码)'; + $lang['applocale'] = 'zh-CN.UTF-8'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = '欢迎使用 phpPgAdmin。'; + $lang['strppahome'] = 'phpPgAdmin 主页'; + $lang['strpgsqlhome'] = 'PostgreSQL 主页'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL 文档 (本地)'; + $lang['strreportbug'] = '报告 Bug'; + $lang['strviewfaq'] = '查看在线 FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = '登录'; + $lang['strloginfailed'] = '登录失败'; + $lang['strlogindisallowed'] = '出于安全原因禁止登录。'; + $lang['strserver'] = '服务器'; + $lang['strservers'] = '服务器'; + $lang['strgroupservers'] = '群组"%s"中的服务器'; + $lang['strallservers'] = '所有服务器'; + $lang['strintroduction'] = '介绍'; + $lang['strhost'] = '主机'; + $lang['strport'] = '端口'; + $lang['strlogout'] = '注销'; + $lang['strowner'] = '所属人'; + $lang['straction'] = '操作'; + $lang['stractions'] = '操作'; + $lang['strname'] = '名字'; + $lang['strdefinition'] = '定义'; + $lang['strproperties'] = '属性'; + $lang['strbrowse'] = '浏览'; + $lang['strenable'] = '有效'; + $lang['strdisable'] = '无效'; + $lang['strdrop'] = '删除'; + $lang['strdropped'] = '已删除'; + $lang['strnull'] = '空值'; + $lang['strnotnull'] = '非空'; + $lang['strprev'] = '前一页'; + $lang['strnext'] = '下一页'; + $lang['strfirst'] = '<< 第一页'; + $lang['strlast'] = '最后一页 >>'; + $lang['strfailed'] = '失败'; + $lang['strcreate'] = '创建'; + $lang['strcreated'] = '已创建'; + $lang['strcomment'] = '注释'; + $lang['strlength'] = '长度'; + $lang['strdefault'] = '默认'; + $lang['stralter'] = '变更'; + $lang['strok'] = '确认'; + $lang['strcancel'] = '取消'; + $lang['strkill'] = '终止'; + $lang['strac'] = '自动完成有效'; + $lang['strsave'] = '保存'; + $lang['strreset'] = '重置'; + $lang['strrestart'] = '重启'; + $lang['strinsert'] = '插入'; + $lang['strselect'] = '选择'; + $lang['strdelete'] = '删除'; + $lang['strupdate'] = '更新'; + $lang['strreferences'] = '参考'; + $lang['stryes'] = '是'; + $lang['strno'] = '否'; + $lang['strtrue'] = 'TRUE'; + $lang['strfalse'] = 'FALSE'; + $lang['stredit'] = '编辑'; + $lang['strcolumn'] = '列'; + $lang['strcolumns'] = '列'; + $lang['strrows'] = '行'; + $lang['strrowsaff'] = '行已影响(变更)。'; + $lang['strobjects'] = '对象'; + $lang['strback'] = '返回'; + $lang['strqueryresults'] = '查询结果'; + $lang['strshow'] = '显示'; + $lang['strempty'] = '清空'; + $lang['strlanguage'] = '语言'; + $lang['strencoding'] = '编码'; + $lang['strvalue'] = '值'; + $lang['strunique'] = '唯一'; + $lang['strprimary'] = '主'; + $lang['strexport'] = '导出'; + $lang['strimport'] = '导入'; + $lang['strallowednulls'] = '允许空串'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = '空 字符串/字段'; + $lang['strsql'] = 'SQL码'; + $lang['stradmin'] = '管理'; + $lang['strvacuum'] = '清理'; + $lang['stranalyze'] = '分析'; + $lang['strclusterindex'] = '集群'; + $lang['strclustered'] = '集群?'; + $lang['strreindex'] = '重建索引'; + $lang['strexecute'] = '执行'; + $lang['stradd'] = '添加'; + $lang['strevent'] = '事件'; + $lang['strwhere'] = 'Where'; + $lang['strinstead'] = 'Do Instead'; + $lang['strwhen'] = '当'; + $lang['strformat'] = '格式'; + $lang['strdata'] = '数据'; + $lang['strconfirm'] = '确认'; + $lang['strexpression'] = '表达式'; + $lang['strellipsis'] = '。。。'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = '扩展'; + $lang['strcollapse'] = '崩溃'; + $lang['strfind'] = '查找'; + $lang['stroptions'] = '选项'; + $lang['strrefresh'] = '刷新'; + $lang['strdownload'] = '下载'; + $lang['strdownloadgzipped'] = '下载使用gzip压缩的文件'; + $lang['strinfo'] = '信息'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = '高级'; + $lang['strvariables'] = '变量'; + $lang['strprocess'] = '进程'; + $lang['strprocesses'] = '进程'; + $lang['strsetting'] = '设置'; + $lang['streditsql'] = '编辑 SQL'; + $lang['strruntime'] = '总执行时间: %s ms'; + $lang['strpaginate'] = '分页结果'; + $lang['struploadscript'] = '或者上传一个 SQL 脚本:'; + $lang['strstarttime'] = '开始时间'; + $lang['strfile'] = '文件'; + $lang['strfileimported'] = '文件已导入。'; + $lang['strtrycred'] = '对所有服务器使用该用户名和密码'; + $lang['strconfdropcred'] = '因为安全原因,中断连接将会销毁你的登录信息。你确定要中断连接吗?'; + $lang['stractionsonmultiplelines'] = '多行上的操作'; + $lang['strselectall'] = '选择所有'; + $lang['strunselectall'] = '取消选择所有'; + $lang['strlocale'] = '本地'; + $lang['strcollation'] = '校对'; + $lang['strctype'] = '字符类型'; + $lang['strdefaultvalues'] = '默认值'; + $lang['strnewvalues'] = '新值'; + $lang['strstart'] = '启动'; + $lang['strstop'] = '停止'; + $lang['strgotoppage'] = '回到顶端'; + $lang['strtheme'] = '主题'; + $lang['strcluster'] = '集群'; + + // Admin + $lang['stradminondatabase'] = '以下管理功能可应用于数据库 %s.'; + $lang['stradminontable'] = '以下管理功能可应用于表 %s.'; + + // User-supplied SQL history + $lang['strhistory'] = '历史'; + $lang['strnohistory'] = '无历史.'; + $lang['strclearhistory'] = '清空历史'; + $lang['strdelhistory'] = '从历史删除'; + $lang['strconfdelhistory'] = '确定要从历史删除吗 ?'; + $lang['strconfclearhistory'] = '确定要清空历史吗 ?'; + $lang['strnodatabaseselected'] = '请选择一个数据库.'; + + // Database sizes + $lang['strnoaccess'] = '无法访问'; + $lang['strsize'] = '大小'; + $lang['strbytes'] = '字节'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = '该程序在具有框架功能的浏览器上工作的更好,请按下面的链接在不支持框架的浏览器上工作。'; + $lang['strnoframeslink'] = '不使用框架'; + $lang['strbadconfig'] = '您的 config.inc.php 已失效。您需要自行通过 config.inc.php-ist 恢复。'; + $lang['strnotloaded'] = '您安装的 PHP 不支持PostgreSQL。 你需要重新编译PHP并使用 --with-pgsql 配置选项。'; + $lang['strpostgresqlversionnotsupported'] = '旧版本的PostgreSQL不被支持。 请更新到版本 %s 或更高版本。'; + $lang['strbadschema'] = '无效的模式。'; + $lang['strbadencoding'] = '设定客户端编码错误。'; + $lang['strsqlerror'] = 'SQL:错误'; + $lang['strinstatement'] = '在语句:'; + $lang['strinvalidparam'] = '无效的脚本参数。'; + $lang['strnodata'] = '查无数据行。'; + $lang['strnoobjects'] = '查无对象。'; + $lang['strrownotunique'] = '该行无唯一约束。'; + $lang['strnouploads'] = '文件上传被禁止。'; + $lang['strimporterror'] = '导入错误。'; + $lang['strimporterror-fileformat'] = '导入错误: 自动识别文件类型失败。'; + $lang['strimporterrorline'] = '导入错误,出错行 %s。'; + $lang['strimporterrorline-badcolumnnum'] = '导入错误,出错行 %s: 该行列数不正确。'; + $lang['strimporterror-uploadedfile'] = '导入错误: 文件不能上传到服务器'; + $lang['strcannotdumponwindows'] = '复杂表和模式名称的转储在Windows 不被支持。'; + $lang['strinvalidserverparam'] = '尝试用无效的服务器参数连接,可能有人正尝试攻击你的系统。'; + $lang['strnoserversupplied'] = '没有选择数据库!'; + $lang['strbadpgdumppath'] = '导出错误:在 conf/config.inc.php 中指定的路径 %s 下执行pg_dump失败。请在配置中修改路径并重新登录。'; + $lang['strbadpgdumpallpath'] = '导出错误:在 conf/config.inc.php 中指定的路径 %s 下执行pg_dumpall失败。请在配置中修改路径并重新登录。'; + $lang['strconnectionfail'] = '无法连接服务器。'; + + // Tables + $lang['strtable'] = '数据表'; + $lang['strtables'] = '数据表'; + $lang['strshowalltables'] = '显示示所有表。'; + $lang['strnotables'] = '查无数据表。'; + $lang['strnotable'] = '查无此表。'; + $lang['strcreatetable'] = '创建表'; + $lang['strcreatetablelike'] = '创建表(以现有表为模板)'; + $lang['strcreatetablelikeparent'] = '源表'; + $lang['strcreatelikewithdefaults'] = '包含默认值'; + $lang['strcreatelikewithconstraints'] = '包含约束'; + $lang['strcreatelikewithindexes'] = '包含表名'; + $lang['strtablename'] = '表名'; + $lang['strtableneedsname'] = '必须指定表名。'; + $lang['strtablelikeneedslike'] = '必须指定要拷贝的属性所属的数据表.'; + $lang['strtableneedsfield'] = '必须至少指定一个字段。'; + $lang['strtableneedscols'] = '必须指定一个有效的列数。'; + $lang['strtablecreated'] = '数据表已创建。'; + $lang['strtablecreatedbad'] = '数据表创建失败'; + $lang['strconfdroptable'] = '确定要删除"%s"数据表吗?'; + $lang['strtabledropped'] = '数据表已删除。'; + $lang['strtabledroppedbad'] = '数据表删除失败。'; + $lang['strconfemptytable'] = '确定要清空"%s"数据表吗?'; + $lang['strtableemptied'] = '数据表已清空。'; + $lang['strtableemptiedbad'] = '数据表清空失败。'; + $lang['strinsertrow'] = '插入行'; + $lang['strrowinserted'] = '行已插入。'; + $lang['strrowinsertedbad'] = '行插入失败。'; + $lang['strnofkref'] = '在外键 %s 中找不到相应的值。'; + $lang['strrowduplicate'] = '行插入失败, 尝试再次插入。'; + $lang['streditrow'] = '编辑行'; + $lang['strrowupdated'] = '行已更新。'; + $lang['strrowupdatedbad'] = '行更新失败。'; + $lang['strdeleterow'] = '删除行'; + $lang['strconfdeleterow'] = '确定要删除该行吗?'; + $lang['strrowdeleted'] = '行已删除。'; + $lang['strrowdeletedbad'] = '行删除失败。'; + $lang['strinsertandrepeat'] = '插入 & 替换'; + $lang['strnumcols'] = '列数目'; + $lang['strcolneedsname'] = '必须指定列名'; + $lang['strselectallfields'] = '选择所有字段'; + $lang['strselectneedscol'] = '必须至少显示一列。'; + $lang['strselectunary'] = '单项操作不能有值。'; + $lang['strcolumnaltered'] = '列已变更。'; + $lang['strcolumnalteredbad'] = '列变更失败。'; + $lang['strconfdropcolumn'] = '确定要将列 "%s" 从表 "%s" 中删除吗?'; + $lang['strcolumndropped'] = '列已删除。'; + $lang['strcolumndroppedbad'] = '列删除失败。'; + $lang['straddcolumn'] = '添加列'; + $lang['strcolumnadded'] = '列已添加。'; + $lang['strcolumnaddedbad'] = '列添加失败。'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = '数据表已变更。'; + $lang['strtablealteredbad'] = '数据表变更失败。'; + $lang['strdataonly'] = '仅数据'; + $lang['strstructureonly'] = '仅结构'; + $lang['strstructureanddata'] = '结构和数据'; + $lang['strtabbed'] = '固定(Tabbed)'; + $lang['strauto'] = '自动'; + $lang['strconfvacuumtable'] = '确定要清理 "%s" 吗?'; + $lang['strconfanalyzetable'] = '确定要分析 "%s" 吗?'; + $lang['strconfreindextable'] = '确定要重新索引 "%s" 吗?'; + $lang['strconfclustertable'] = '确定要集群 "%s" 吗?'; + $lang['strestimatedrowcount'] = '估计的行数'; + $lang['strspecifytabletoanalyze'] = '必须至少选择一个表来分析'; + $lang['strspecifytabletoempty'] = '必须至少选择一个表来清空'; + $lang['strspecifytabletodrop'] = '必须至少选择一个表来移除'; + $lang['strspecifytabletovacuum'] = '必须至少选择一个表来清理(vacuum)'; + $lang['strspecifytabletoreindex'] = '必须至少选择一个要重新索引的表。'; + $lang['strspecifytabletocluster'] = '必须至少选择一个要集群的表。'; + $lang['strnofieldsforinsert'] = '无法在没有任何列定义的表中插入数据。'; + + // Columns + $lang['strcolprop'] = '列属性'; + $lang['strnotableprovided'] = '没有相应的表!'; + + // Users + $lang['struser'] = '用户'; + $lang['strusers'] = '用户'; + $lang['strusername'] = '用名'; + $lang['strpassword'] = '密码'; + $lang['strsuper'] = '超级用户'; + $lang['strcreatedb'] = '创建数据库?'; + $lang['strexpires'] = '过期'; + $lang['strsessiondefaults'] = '会话默认'; + $lang['strnousers'] = '查无此用户。'; + $lang['struserupdated'] = '用户已更新。'; + $lang['struserupdatedbad'] = '用户更新失败。'; + $lang['strshowallusers'] = '显示所有用户'; + $lang['strcreateuser'] = '创建用户'; + $lang['struserneedsname'] = '必须指定用户名称。'; + $lang['strusercreated'] = '用户已创建。'; + $lang['strusercreatedbad'] = '用户创建失败。'; + $lang['strconfdropuser'] = '确定要删除用户"%s"吗?'; + $lang['struserdropped'] = '用户已删除。'; + $lang['struserdroppedbad'] = '用户删除失败。'; + $lang['straccount'] = '帐户'; + $lang['strchangepassword'] = '修改密码'; + $lang['strpasswordchanged'] = '密码已修改。'; + $lang['strpasswordchangedbad'] = '密码修改失败。'; + $lang['strpasswordshort'] = '密码太短了。'; + $lang['strpasswordconfirm'] = '密码不匹配。'; + + // Groups + $lang['strgroup'] = '群组'; + $lang['strgroups'] = '群组'; + $lang['strgroupgroups'] = '在"%s"中的群组'; + $lang['strshowallgroups'] = '显示所有群组'; + $lang['strnogroup'] = '查无此群组。'; + $lang['strnogroups'] = '查无群组。'; + $lang['strcreategroup'] = '创建群组'; + $lang['strgroupneedsname'] = '必须指定群组名称。'; + $lang['strgroupcreated'] = '群组已创建。'; + $lang['strgroupcreatedbad'] = '群组创建失败。'; + $lang['strconfdropgroup'] = '确定要删除群组"%s"吗?'; + $lang['strgroupdropped'] = '群组已删除。'; + $lang['strgroupdroppedbad'] = '群组删除失败。'; + $lang['strmembers'] = '成员'; + $lang['strmemberof'] = '所属成员'; + $lang['stradminmembers'] = '管理成员'; + $lang['straddmember'] = '添加成员'; + $lang['strmemberadded'] = '成员已添加。'; + $lang['strmemberaddedbad'] = '成员添加失败。'; + $lang['strdropmember'] = '删除成员'; + $lang['strconfdropmember'] = '确定要将成员 "%s" 从群组 "%s"中删除吗?'; + $lang['strmemberdropped'] = '成员已删除。'; + $lang['strmemberdroppedbad'] = '成员删除失败。'; + + // Roles + $lang['strrole'] = '角色'; + $lang['strroles'] = '角色'; + $lang['strshowallroles'] = '显示所有角色'; + $lang['strnoroles'] = '查无角色。'; + $lang['strinheritsprivs'] = '继承权限?'; + $lang['strcreaterole'] = '创建角色'; + $lang['strcancreaterole'] = '创建角色?'; + $lang['strrolecreated'] = '角色已创建。'; + $lang['strrolecreatedbad'] = '角色创建失败。'; + $lang['strrolealtered'] = '角色已变更。'; + $lang['strrolealteredbad'] = '角色变更失败。'; + $lang['strcanlogin'] = '可以登录?'; + $lang['strconnlimit'] = '连接限制'; + $lang['strdroprole'] = '删除角色'; + $lang['strconfdroprole'] = '确定要删除角色 "%s"吗?'; + $lang['strroledropped'] = '角色已删除。'; + $lang['strroledroppedbad'] = '角色删除失败。'; + $lang['strnolimit'] = '无限制'; + $lang['strnever'] = '从不'; + $lang['strroleneedsname'] = '必须指定角色名称。'; + + // Privileges + $lang['strprivilege'] = '权限'; + $lang['strprivileges'] = '权限'; + $lang['strnoprivileges'] = '这个对象拥有默认所属人的权限。'; + $lang['strgrant'] = '赋予'; + $lang['strrevoke'] = '撤回'; + $lang['strgranted'] = '权限已改变'; + $lang['strgrantfailed'] = '权限改变失败'; + $lang['strgrantbad'] = '必须指定至少一个用户或一个组和一个权限。'; + $lang['strgrantor'] = '赋予者'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = '数据库'; + $lang['strdatabases'] = '数据库'; + $lang['strshowalldatabases'] = '显示所有数据库'; + $lang['strnodatabases'] = '查无数据库。'; + $lang['strcreatedatabase'] = '创建数据库'; + $lang['strdatabasename'] = '数据库名称'; + $lang['strdatabaseneedsname'] = '必须指定数据库名称。'; + $lang['strdatabasecreated'] = '数据库已创建。'; + $lang['strdatabasecreatedbad'] = '数据库创建失败。'; + $lang['strconfdropdatabase'] = '确定要删除数据库"%s"吗?'; + $lang['strdatabasedropped'] = '数据库已删除。'; + $lang['strdatabasedroppedbad'] = '数据库删除失败'; + $lang['strentersql'] = '请在下方输入要执行的SQL语句:'; + $lang['strsqlexecuted'] = 'SQL 已执行。'; + $lang['strvacuumgood'] = '清理完成'; + $lang['strvacuumbad'] = '清理失败'; + $lang['stranalyzegood'] = '分析完成'; + $lang['stranalyzebad'] = '分析失败'; + $lang['strreindexgood'] = '重建索引完成。'; + $lang['strreindexbad'] = '重建索引失败。'; + $lang['strfull'] = '完全'; + $lang['strfreeze'] = '冻结'; + $lang['strforce'] = '强制'; + $lang['strsignalsent'] = '信号已发送。'; + $lang['strsignalsentbad'] = '信号发送失败。'; + $lang['strallobjects'] = '所有对象'; + $lang['strdatabasealtered'] = '数据库已变更。'; + $lang['strdatabasealteredbad'] = '数据库变更失败。'; + $lang['strspecifydatabasetodrop'] = '必须至少指定一个要移除的数据库'; + $lang['strtemplatedb'] = '模板'; + $lang['strconfanalyzedatabase'] = '你确定要分析数据库"%s"中的所有表吗?'; + $lang['strconfvacuumdatabase'] = '你确定要清理数据库"%s"中的所有表吗?'; + $lang['strconfreindexdatabase'] = '你确定要重新索引数据库"%s"中的所有表吗?'; + $lang['strconfclusterdatabase'] = '你确定要集群数据库"%s"中的所有表吗?'; + + // Views + $lang['strview'] = '视图'; + $lang['strviews'] = '视图'; + $lang['strshowallviews'] = '显示所有视图'; + $lang['strnoview'] = '查无此视图'; + $lang['strnoviews'] = '查无视图。'; + $lang['strcreateview'] = '创建视图'; + $lang['strviewname'] = '视图名称'; + $lang['strviewneedsname'] = '必须指定视图名称。'; + $lang['strviewneedsdef'] = '必须指定视图定义。'; + $lang['strviewneedsfields'] = '必须指定视图里要选择的列。'; + $lang['strviewcreated'] = '视图已创建。'; + $lang['strviewcreatedbad'] = '视图创建失败。'; + $lang['strconfdropview'] = '确定要删除视图"%s"吗?'; + $lang['strviewdropped'] = '视图已删除。'; + $lang['strviewdroppedbad'] = '视图删除失败。'; + $lang['strviewupdated'] = '视图已更新。'; + $lang['strviewupdatedbad'] = '视图更新失败'; + $lang['strviewlink'] = '连接关键字(Linking keys)'; + $lang['strviewconditions'] = '附加条件'; + $lang['strcreateviewwiz'] = '使用向导创建视图'; + $lang['strrenamedupfields'] = '重命名复制的字段'; + $lang['strdropdupfields'] = '移除复制的字段'; + $lang['strerrordupfields'] = '复制字段时发生错误'; + $lang['strviewaltered'] = '视图已变更。'; + $lang['strviewalteredbad'] = '视图变更失败。'; + $lang['strspecifyviewtodrop'] = '必须至少指定一个要移除的视图'; + + // Sequences + $lang['strsequence'] = '序列'; + $lang['strsequences'] = '序列'; + $lang['strshowallsequences'] = '显示所有序列'; + $lang['strnosequence'] = '查无此序列'; + $lang['strnosequences'] = '查无序列。'; + $lang['strcreatesequence'] = '创建序列'; + $lang['strlastvalue'] = '最后值'; + $lang['strincrementby'] = '增量'; + $lang['strstartvalue'] = '起始值'; + $lang['strrestartvalue'] = '重新计算'; + $lang['strmaxvalue'] = '最大值'; + $lang['strminvalue'] = '最小值'; + $lang['strcachevalue'] = '缓存值'; + $lang['strlogcount'] = '日志计数(Log count)'; + $lang['strcancycle'] = '可以循环吗?'; + $lang['striscalled'] = '将在返回下一个值前递增最后的值(is_called)吗?'; + $lang['strsequenceneedsname'] = '必须指定序列名称。'; + $lang['strsequencecreated'] = '序列已创建。'; + $lang['strsequencecreatedbad'] = '序列创建失败。'; + $lang['strconfdropsequence'] = '确定要删除序列"%s"吗?'; + $lang['strsequencedropped'] = '序列已删除。'; + $lang['strsequencedroppedbad'] = '序列删除失败。'; + $lang['strsequencerestart'] = '重新计算序列。'; + $lang['strsequencerestartbad'] = '序列重新计算失败。'; + $lang['strsequencereset'] = '序列已重置。'; + $lang['strsequenceresetbad'] = '序列重置失败。'; + $lang['strsequencealtered'] = '序列已变更。'; + $lang['strsequencealteredbad'] = '序列变更失败。'; + $lang['strsetval'] = '设定序列值'; + $lang['strsequencesetval'] = '序列值已设定。'; + $lang['strsequencesetvalbad'] = '序列值设置失败。'; + $lang['strnextval'] = '递增序列值'; + $lang['strsequencenextval'] = '序列值已递增。'; + $lang['strsequencenextvalbad'] = '序列值递增失败。'; + $lang['strspecifysequencetodrop'] = '必须至少指定一个序列来删除'; + + // Indexes + $lang['strindex'] = '索引'; + $lang['strindexes'] = '索引'; + $lang['strindexname'] = '索引名'; + $lang['strshowallindexes'] = '显示所有索引'; + $lang['strnoindex'] = '查无此索引'; + $lang['strnoindexes'] = '查无索引'; + $lang['strcreateindex'] = '创建索引'; + $lang['strtabname'] = '数据表名'; + $lang['strcolumnname'] = '列名'; + $lang['strindexneedsname'] = '必须指定索引名称。'; + $lang['strindexneedscols'] = '必须给索引指定有效的列数。'; + $lang['strindexcreated'] = '索引已创建'; + $lang['strindexcreatedbad'] = '索引创建失败。'; + $lang['strconfdropindex'] = '确定要删除"%s"索引?'; + $lang['strindexdropped'] = '索引已删除。'; + $lang['strindexdroppedbad'] = '索引删除失败。'; + $lang['strkeyname'] = '键名'; + $lang['struniquekey'] = '唯一键'; + $lang['strprimarykey'] = '主键'; + $lang['strindextype'] = '索引类型'; + $lang['strtablecolumnlist'] = '表中的列'; + $lang['strindexcolumnlist'] = '索引中的列'; + $lang['strconfcluster'] = '确定要集群 "%s"吗?'; + $lang['strclusteredgood'] = '集群完成。'; + $lang['strclusteredbad'] = '集群失败。'; + $lang['strconcurrently'] = '并发'; + $lang['strnoclusteravailable'] = '表中没有集群索引。'; + + // Rules + $lang['strrules'] = '规则'; + $lang['strrule'] = '规则'; + $lang['strshowallrules'] = '显示所有规则'; + $lang['strnorule'] = '查无此规则。'; + $lang['strnorules'] = '查无规则'; + $lang['strcreaterule'] = '创建规则'; + $lang['strrulename'] = '规则名称'; + $lang['strruleneedsname'] = '必须指定规则名称。'; + $lang['strrulecreated'] = '规则已创建。'; + $lang['strrulecreatedbad'] = '规则创建失败。'; + $lang['strconfdroprule'] = '确定要将规则"%s"从"%s"中删除吗?'; + $lang['strruledropped'] = '规则已删除。'; + $lang['strruledroppedbad'] = '规则删除失败。'; + + // Constraints + $lang['strconstraint'] = '约束'; + $lang['strconstraints'] = '约束'; + $lang['strshowallconstraints'] = '显示所有约束。'; + $lang['strnoconstraints'] = '查无此约束。'; + $lang['strcreateconstraint'] = '创建约束'; + $lang['strconstraintcreated'] = '约束已创建。'; + $lang['strconstraintcreatedbad'] = '约束创建失败。'; + $lang['strconfdropconstraint'] = '确定要将强制"%s"从"%s"中删除吗?'; + $lang['strconstraintdropped'] = '约束已删除。'; + $lang['strconstraintdroppedbad'] = '约束删除失败。'; + $lang['straddcheck'] = '添加检查约束'; + $lang['strcheckneedsdefinition'] = '必须指定检查约束的定义。'; + $lang['strcheckadded'] = '检查约束已添加。'; + $lang['strcheckaddedbad'] = '检查约束添加失败。'; + $lang['straddpk'] = '添加主键'; + $lang['strpkneedscols'] = '主键至少需指定一列。'; + $lang['strpkadded'] = '主键已添加。'; + $lang['strpkaddedbad'] = '主键添加失败。'; + $lang['stradduniq'] = '添加唯一键'; + $lang['struniqneedscols'] = '唯一键至少需指定一列。'; + $lang['struniqadded'] = '唯一键已添加。'; + $lang['struniqaddedbad'] = '唯一键添加失败。'; + $lang['straddfk'] = '添加外键'; + $lang['strfkneedscols'] = '外键至少需指定一列。'; + $lang['strfkneedstarget'] = '外键需指定一个目标数据表。'; + $lang['strfkadded'] = '外键已添加。'; + $lang['strfkaddedbad'] = '外键添加失败。'; + $lang['strfktarget'] = '目标数据表'; + $lang['strfkcolumnlist'] = '键中的列'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = '函数'; + $lang['strfunctions'] = '函数'; + $lang['strshowallfunctions'] = '显示所有函数'; + $lang['strnofunction'] = '查无此函数'; + $lang['strnofunctions'] = '查无函数'; + $lang['strcreateplfunction'] = '创建 SQL/PL 函数'; + $lang['strcreateinternalfunction'] = '创建内部函数'; + $lang['strcreatecfunction'] = '创建 C 函数'; + $lang['strfunctionname'] = '函数名称'; + $lang['strreturns'] = '返回'; + $lang['strproglanguage'] = '过程语言'; + $lang['strfunctionneedsname'] = '必须指定函数名称。'; + $lang['strfunctionneedsdef'] = '必须指定函数定义。'; + $lang['strfunctioncreated'] = '函数已创建'; + $lang['strfunctioncreatedbad'] = '函数创建失败'; + $lang['strconfdropfunction'] = '确定要删除函数"%s"吗?'; + $lang['strfunctiondropped'] = '函数已删除。'; + $lang['strfunctiondroppedbad'] = '函数删除失败。'; + $lang['strfunctionupdated'] = '函数已更新。'; + $lang['strfunctionupdatedbad'] = '函数更新失败。'; + $lang['strobjectfile'] = '对象文件'; + $lang['strlinksymbol'] = '连接对象'; + $lang['strarguments'] = '参数'; + $lang['strargmode'] = '模式'; + $lang['strargtype'] = '类型'; + $lang['strargadd'] = '新添加一个参数'; + $lang['strargremove'] = '移除这个参数'; + $lang['strargnoargs'] = '该函数无参数。'; + $lang['strargenableargs'] = '使该函数的参数有效。'; + $lang['strargnorowabove'] = '在该行上面须有一行。'; + $lang['strargnorowbelow'] = '在该行下面须有一行。'; + $lang['strargraise'] = '上移。'; + $lang['strarglower'] = '下移。'; + $lang['strargremoveconfirm'] = '确定要移除这个参数吗?这个操作不能撤销。'; + $lang['strfunctioncosting'] = '函数代价(Function Costing)'; + $lang['strresultrows'] = '结果行'; + $lang['strexecutioncost'] = '执行代价'; + $lang['strspecifyfunctiontodrop'] = '必须至少指定一个函数来删除'; + + // Triggers + $lang['strtrigger'] = '触发器'; + $lang['strtriggers'] = '触发器'; + $lang['strshowalltriggers'] = '显示所有触发器'; + $lang['strnotrigger'] = '查无此触发器。'; + $lang['strnotriggers'] = '查无触发器。'; + $lang['strcreatetrigger'] = '创建触发器'; + $lang['strtriggerneedsname'] = '必须指定触发器名称。'; + $lang['strtriggerneedsfunc'] = '必须给触发器指定一个函数。'; + $lang['strtriggercreated'] = '触发器已创建。'; + $lang['strtriggercreatedbad'] = '触发器创建失败。'; + $lang['strconfdroptrigger'] = '确定要将触发器"%s"从"%s"中删除吗?'; + $lang['strconfenabletrigger'] = '确定要使触发器 "%s" 在 "%s"上有效吗?'; + $lang['strconfdisabletrigger'] = '确定要使触发器 "%s" 在 "%s"上无效吗?'; + $lang['strtriggerdropped'] = '触发器已删除。'; + $lang['strtriggerdroppedbad'] = '触发器删除失败。'; + $lang['strtriggerenabled'] = '触发器已有效。'; + $lang['strtriggerenabledbad'] = '触发器有效化失败。'; + $lang['strtriggerdisabled'] = '触发器已无效。'; + $lang['strtriggerdisabledbad'] = '触发器无效化失败。'; + $lang['strtriggeraltered'] = '触发器已变更。'; + $lang['strtriggeralteredbad'] = '触发器变更失败。'; + $lang['strforeach'] = '给每一个'; + + // Types + $lang['strtype'] = '类型'; + $lang['strtypes'] = '类型'; + $lang['strshowalltypes'] = '显示所有的类型'; + $lang['strnotype'] = '查无此类型'; + $lang['strnotypes'] = '查无类型。'; + $lang['strcreatetype'] = '创建类型'; + $lang['strcreatecomptype'] = '创建组合类型'; + $lang['strcreateenumtype'] = '创建枚举类型'; + $lang['strtypeneedsfield'] = '必须至少指定一个字段。'; + $lang['strtypeneedsvalue'] = '必须至少指定一个值'; + $lang['strtypeneedscols'] = '必须指定有效的字段数。'; + $lang['strtypeneedsvals'] = '必须指定一个有效的字段数。'; + $lang['strinputfn'] = '输入函数'; + $lang['stroutputfn'] = '输出函数'; + $lang['strpassbyval'] = '传值?'; + $lang['stralignment'] = '参数'; + $lang['strelement'] = '元素'; + $lang['strdelimiter'] = '分隔符'; + $lang['strstorage'] = '磁盘存储'; + $lang['strfield'] = '字段'; + $lang['strnumfields'] = '列数'; + $lang['strnumvalues'] = '值数'; + $lang['strtypeneedsname'] = '必须指定类型名称。'; + $lang['strtypeneedslen'] = '必须指定类型长度。'; + $lang['strtypecreated'] = '类型已创建。'; + $lang['strtypecreatedbad'] = '类型创建失败。'; + $lang['strconfdroptype'] = '确定要删除"%s"类型吗?'; + $lang['strtypedropped'] = '类型已删除。'; + $lang['strtypedroppedbad'] = '类型删除失败。'; + $lang['strflavor'] = '风格(Flavor)'; + $lang['strbasetype'] = '基本'; + $lang['strcompositetype'] = '组合'; + $lang['strpseudotype'] = '伪(Pseudo)'; + $lang['strenum'] = 'Enum'; + $lang['strenumvalues'] = '枚举类型'; + + // Schemas + $lang['strschema'] = '模式'; + $lang['strschemas'] = '模式'; + $lang['strshowallschemas'] = '显示所有模式'; + $lang['strnoschema'] = '查无此模式'; + $lang['strnoschemas'] = '查无模式'; + $lang['strcreateschema'] = '创建模式'; + $lang['strschemaname'] = '模式名称'; + $lang['strschemaneedsname'] = '必须指定模式名称'; + $lang['strschemacreated'] = '模式已创建'; + $lang['strschemacreatedbad'] = '模式创建失败'; + $lang['strconfdropschema'] = '确定要删除模式"%s"吗?'; + $lang['strschemadropped'] = '模式已删除'; + $lang['strschemadroppedbad'] = '模式删除失败'; + $lang['strschemaaltered'] = '模式已变更。'; + $lang['strschemaalteredbad'] = '模式变更失败。'; + $lang['strsearchpath'] = '模式查找路径'; + $lang['strspecifyschematodrop'] = '必须至少指定一个模式来删除'; + + // Reports + + // Domains + $lang['strdomain'] = '域'; + $lang['strdomains'] = '域'; + $lang['strshowalldomains'] = '显示所有域'; + $lang['strnodomains'] = '查无 域。'; + $lang['strcreatedomain'] = '创建域'; + $lang['strdomaindropped'] = '域已删除。'; + $lang['strdomaindroppedbad'] = '域删除失败。'; + $lang['strconfdropdomain'] = '确定要删除域 "%s"吗?'; + $lang['strdomainneedsname'] = '必须指定域名称。'; + $lang['strdomaincreated'] = '域已创建。'; + $lang['strdomaincreatedbad'] = '域创建失败。'; + $lang['strdomainaltered'] = '域已变更。'; + $lang['strdomainalteredbad'] = '域变更失败。'; + + // Operators + $lang['stroperator'] = '操作符'; + $lang['stroperators'] = '操作符'; + $lang['strshowalloperators'] = '显示所有操作符'; + $lang['strnooperator'] = '查无此操作符。'; + $lang['strnooperators'] = '查无操作符。'; + $lang['strcreateoperator'] = '创建操作符'; + $lang['strleftarg'] = '左参数类型'; + $lang['strrightarg'] = '右参数类型'; + $lang['strcommutator'] = '转换符'; + $lang['strnegator'] = '非操作符'; + $lang['strrestrict'] = '受限'; + $lang['strjoin'] = '连接'; + $lang['strhashes'] = '哈希'; + $lang['strmerges'] = '合并'; + $lang['strleftsort'] = '左排序'; + $lang['strrightsort'] = '右排序'; + $lang['strlessthan'] = '小于'; + $lang['strgreaterthan'] = '大于'; + $lang['stroperatorneedsname'] = '必须指定操作符名称。'; + $lang['stroperatorcreated'] = '操作符已创建'; + $lang['stroperatorcreatedbad'] = '操作符创建失败。'; + $lang['strconfdropoperator'] = '确定要删除操作符 "%s"吗?'; + $lang['stroperatordropped'] = '操作符已删除。'; + $lang['stroperatordroppedbad'] = '操作符删除失败。'; + + // Casts + $lang['strcasts'] = '类型转换'; + $lang['strnocasts'] = '查无类型转换。'; + $lang['strsourcetype'] = '源类型'; + $lang['strtargettype'] = '目标类型'; + $lang['strimplicit'] = '隐含的'; + $lang['strinassignment'] = '委派中'; + $lang['strbinarycompat'] = '(二进制兼容)'; + + // Conversions + $lang['strconversions'] = '编码转换'; + $lang['strnoconversions'] = '查无编码转换。'; + $lang['strsourceencoding'] = '源编码'; + $lang['strtargetencoding'] = '目标编码'; + + // Languages + $lang['strlanguages'] = '过程语言'; + $lang['strnolanguages'] = '查无过程语言。'; + $lang['strtrusted'] = '信任的'; + + // Info + $lang['strnoinfo'] = '无资料(information)可用。'; + $lang['strreferringtables'] = '查询(Referring)表'; + $lang['strparenttables'] = '父表'; + $lang['strchildtables'] = '子表'; + + // Aggregates + $lang['straggregate'] = '聚集'; + $lang['straggregates'] = '聚集'; + $lang['strnoaggregates'] = '查无聚集。'; + $lang['stralltypes'] = '(所有类型)'; + $lang['strcreateaggregate'] = '创建聚集'; + $lang['straggrbasetype'] = '输入数据类型'; + $lang['straggrsfunc'] = '状态转化函数'; + $lang['straggrstype'] = '状态类型'; + $lang['straggrffunc'] = '最终函数'; + $lang['straggrinitcond'] = '初始函数'; + $lang['straggrsortop'] = '排序操作符'; + $lang['strconfdropaggregate'] = '确定要删除聚集 "%s"吗?'; + $lang['straggregatedropped'] = '聚集已删除。'; + $lang['straggregatedroppedbad'] = '聚集删除失败。'; + $lang['straggraltered'] = '聚集已变更。'; + $lang['straggralteredbad'] = '聚集变更失败。'; + $lang['straggrneedsname'] = '必须指定聚集的名称'; + $lang['straggrneedsbasetype'] = '必须指定聚集的输入数据类型'; + $lang['straggrneedssfunc'] = '必须指定聚集的状态转换函数'; + $lang['straggrneedsstype'] = '必须指定聚集的状态值的数据类型'; + $lang['straggrcreated'] = '聚集已创建。'; + $lang['straggrcreatedbad'] = '聚集创建失败。'; + $lang['straggrshowall'] = '显示所有聚集'; + + // Operator Classes + $lang['stropclasses'] = '操作符类'; + $lang['strnoopclasses'] = '查无此操作符类。'; + $lang['straccessmethod'] = '存取方法'; + + // Stats and performance + $lang['strrowperf'] = '行性能'; + $lang['strioperf'] = 'I/O 性能'; + $lang['stridxrowperf'] = '索引行性能'; + $lang['stridxioperf'] = '索引 I/O 性能'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = '顺序扫描'; + $lang['strscan'] = '扫描'; + $lang['strread'] = '读取'; + $lang['strfetch'] = '取得'; + $lang['strheap'] = '堆'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST 索引'; + $lang['strcache'] = '缓存'; + $lang['strdisk'] = '硬盘'; + $lang['strrows2'] = '行'; + + // Tablespaces + $lang['strtablespace'] = '表空间'; + $lang['strtablespaces'] = '表空间'; + $lang['strshowalltablespaces'] = '显示所有表空间'; + $lang['strnotablespaces'] = '查无此表空间。'; + $lang['strcreatetablespace'] = '创建表空间'; + $lang['strlocation'] = '位置'; + $lang['strtablespaceneedsname'] = '必须指定表空间名称。'; + $lang['strtablespaceneedsloc'] = '必须指定创建表空间的文件夹。'; + $lang['strtablespacecreated'] = '表空间已创建。'; + $lang['strtablespacecreatedbad'] = '表空间创建失败。'; + $lang['strconfdroptablespace'] = '确定要删除表空间 "%s"吗?'; + $lang['strtablespacedropped'] = '表空间已删除。'; + $lang['strtablespacedroppedbad'] = '表空间删除失败。'; + $lang['strtablespacealtered'] = '表空间已变更。'; + $lang['strtablespacealteredbad'] = '表空间变更失败。'; + + // Miscellaneous + $lang['strtopbar'] = '%s 架于 %s:%s - 您是 "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = '帮助'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = '帮助页面浏览'; + $lang['strselecthelppage'] = '选择一个帮助页面'; + $lang['strinvalidhelppage'] = '无效的帮助页面。'; + $lang['strlogintitle'] = '登入 %s'; + $lang['strlogoutmsg'] = '注销 %s'; + $lang['strloading'] = '加载中。。。'; + $lang['strerrorloading'] = '加载错误'; + $lang['strclicktoreload'] = '点击重新加载'; + + // Autovacuum + $lang['strautovacuum'] = '自动清理(Autovacuum)'; + $lang['strturnedon'] = '打开'; + $lang['strturnedoff'] = '关闭'; + $lang['strenabled'] = '有效'; + $lang['strnovacuumconf'] = '没有自动清理配置。'; + $lang['strvacuumbasethreshold'] = '清理基本临界值'; + $lang['strvacuumscalefactor'] = '清理换算系数'; + $lang['stranalybasethreshold'] = '分析基本临界值'; + $lang['stranalyzescalefactor'] = '分析换算系数'; + $lang['strvacuumcostdelay'] = '清理成本延迟'; + $lang['strvacuumcostlimit'] = '清理成本限制'; + $lang['strvacuumpertable'] = '此表的自动清理配置'; + $lang['straddvacuumtable'] = '为此表增加自动清理配置'; + $lang['streditvacuumtable'] = '编辑表 %s 的自动清理配置'; + $lang['strdelvacuumtable'] = '删除表 %s 的自动清理配置?'; + $lang['strvacuumtablereset'] = '还原表 %s 的自动清理配置为默认值'; + $lang['strdelvacuumtablefail'] = '无法删除表 %s 的自动清理配置'; + $lang['strsetvacuumtablesaved'] = '已保存表 %s 的自动清理配置'; + $lang['strsetvacuumtablefail'] = '表 %s 的自动清理配置失败'; + $lang['strspecifydelvacuumtable'] = '请指定你希望移除自动清理配置的表。'; + $lang['strspecifyeditvacuumtable'] = '请指定你希望编辑自动清理配置的表。'; + $lang['strnotdefaultinred'] = '非默认值被标注为红色。'; + + // Table-level Locks + $lang['strlocks'] = '锁'; + $lang['strtransaction'] = '事务ID'; + $lang['strvirtualtransaction'] = '虚拟事务ID'; + $lang['strprocessid'] = '进程ID'; + $lang['strmode'] = '锁定模式'; + $lang['strislockheld'] = '拥有锁?'; + + // Prepared transactions + $lang['strpreparedxacts'] = '已准备事务'; + $lang['strxactid'] = '事务ID'; + $lang['strgid'] = '全域ID'; + + // Fulltext search + $lang['strfulltext'] = '全文检索'; + $lang['strftsconfig'] = '全文检索配置'; + $lang['strftsconfigs'] = '配置'; + $lang['strftscreateconfig'] = '创建 全文检索配置'; + $lang['strftscreatedict'] = '创建字典'; + $lang['strftscreatedicttemplate'] = '创建字典模板'; + $lang['strftscreateparser'] = '创建分析器'; + $lang['strftsnoconfigs'] = '没有找到全文检索配置。'; + $lang['strftsconfigdropped'] = '全文检索配置已移除。'; + $lang['strftsconfigdroppedbad'] = '全文检索移除失败。'; + $lang['strconfdropftsconfig'] = '确定要移除全文检索检索配置 "%s"吗?'; + $lang['strconfdropftsdict'] = '确定要移除全文检索字典 "%s"吗?'; + $lang['strconfdropftsmapping'] = '确定要将映射 "%s" 从全文检索配置 "%s"中移除吗?'; + $lang['strftstemplate'] = '模板'; + $lang['strftsparser'] = '分析器'; + $lang['strftsconfigneedsname'] = '必须指定全文检索配置名称。'; + $lang['strftsconfigcreated'] = '全文检索配置已创建'; + $lang['strftsconfigcreatedbad'] = '全文检索配置创建失败。'; + $lang['strftsmapping'] = '映射'; + $lang['strftsdicts'] = '字典'; + $lang['strftsdict'] = '字典'; + $lang['strftsemptymap'] = '空的全文检索配置映射。'; + $lang['strftsconfigaltered'] = '全文检索已变更。'; + $lang['strftsconfigalteredbad'] = '全文检索变更失败。'; + $lang['strftsconfigmap'] = '全文检索配置映射'; + $lang['strftsparsers'] = '全文检索分析器'; + $lang['strftsnoparsers'] = '无有效的全文检索分析器。'; + $lang['strftsnodicts'] = '无有效的全文检索字典。'; + $lang['strftsdictcreated'] = '全文检索字典已创建'; + $lang['strftsdictcreatedbad'] = '全文检索字典创建失败。'; + $lang['strftslexize'] = 'Lexize'; + $lang['strftsinit'] = '初始化'; + $lang['strftsoptionsvalues'] = '选项和值'; + $lang['strftsdictneedsname'] = '必须指定全文检索字典名称。'; + $lang['strftsdictdropped'] = '全文检索字典已移除。'; + $lang['strftsdictdroppedbad'] = '全文检索字典移除失败。'; + $lang['strftsdictaltered'] = '全文检索字典已变更。'; + $lang['strftsdictalteredbad'] = '全文检索字典变更失败。'; + $lang['strftsaddmapping'] = '添加映射'; + $lang['strftsspecifymappingtodrop'] = '必须最少指定一个映射来移除'; + $lang['strftsspecifyconfigtoalter'] = '必须指定一个全文检索配置来变更'; + $lang['strftsmappingdropped'] = '全文检索映射已删除。'; + $lang['strftsmappingdroppedbad'] = '全文检索映射移除失败。'; + $lang['strftsnodictionaries'] = '查无字典。'; + $lang['strftsmappingaltered'] = '全文检索映射已变更。'; + $lang['strftsmappingalteredbad'] = '全文检索映射变更失败。'; + $lang['strftsmappingadded'] = '全文检索映射已添加。'; + $lang['strftsmappingaddedbad'] = '全文检索映射添加失败。'; + $lang['strftstabconfigs'] = '配置'; + $lang['strftstabdicts'] = '字典'; + $lang['strftstabparsers'] = '分析器'; + $lang['strftscantparsercopy'] = '不能在创建全文检索配置时指定分析器和模板。'; + + //Plugins + $lang['strpluginnotfound'] = '错误:没有找到\'%s\'插件。请检查该插件是否在plugins/目录下,或插件是否包含plugin.php。注意插件名大小写敏感。'; + $lang['stractionnotfound'] = '错误:动作\'%s\'不在插件\'%s\'中,或没有被指定为合法的动作。'; + $lang['strhooknotfound'] = '错误:连接\'%s\'不可用.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-utf8-zh_TW.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-utf8-zh_TW.php new file mode 100644 index 00000000..4514584c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/chinese-utf8-zh_TW.php @@ -0,0 +1,863 @@ +<?php + + /** + * Chinese zh_TW translation file for phpPgAdmin. Use this as a basis + * for new translations. + * @maintainer 郭朝益 [Kuo.ChaoYi@gmail.com] + * + * $Id: chinese-utf8-zh_TW.php,v 1.6 2008/01/03 03:11:57 xzilla Exp $ + * EN-Revision: 1.228 + */ + + // Language and character set + $lang['applang'] = '正體中文(UTF-8)'; + $lang['applocale'] = 'zh-TW'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = '歡迎使用 phpPgAdmin。'; + $lang['strppahome'] = 'phpPgAdmin 首頁'; + $lang['strpgsqlhome'] = 'PostgreSQL 首頁'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL 文件 (本機)'; + $lang['strreportbug'] = '通報程式 Bug'; + $lang['strviewfaq'] = '檢視線上 FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = '登入'; + $lang['strloginfailed'] = '登入失敗'; + $lang['strlogindisallowed'] = '出於安全原因禁止登入。'; + $lang['strserver'] = '伺服器'; + $lang['strservers'] = '伺服器'; + $lang['strintroduction'] = '介紹'; + $lang['strhost'] = '主機'; + $lang['strport'] = '埠號'; + $lang['strlogout'] = '登出'; + $lang['strowner'] = '擁有人'; + $lang['straction'] = '動作'; + $lang['stractions'] = '動作'; + $lang['strname'] = '名稱'; + $lang['strdefinition'] = '定義'; + $lang['strproperties'] = '屬性'; + $lang['strbrowse'] = '瀏覽'; + $lang['strenable'] = '啟用'; + $lang['strdisable'] = '停用'; + $lang['strdrop'] = '移除'; + $lang['strdropped'] = '已移除'; + $lang['strnull'] = '空值'; + $lang['strnotnull'] = '不允許空值'; + $lang['strprev'] = '< 上一步'; + $lang['strnext'] = '下一步 >'; + $lang['strfirst'] = '<< 最前一步'; + $lang['strlast'] = '最後一步 >>'; + $lang['strfailed'] = '失敗'; + $lang['strcreate'] = '建立'; + $lang['strcreated'] = '已建立'; + $lang['strcomment'] = '註釋'; + $lang['strlength'] = '長度'; + $lang['strdefault'] = '預設值'; + $lang['stralter'] = '修改'; + $lang['strok'] = '確定'; + $lang['strcancel'] = '取消'; + $lang['strac'] = '啟用自動完成'; + $lang['strsave'] = '儲存'; + $lang['strreset'] = '重設'; + $lang['strinsert'] = '插入'; + $lang['strselect'] = '選取'; + $lang['strdelete'] = '刪除'; + $lang['strupdate'] = '更新'; + $lang['strreferences'] = '參照'; + $lang['stryes'] = '是'; + $lang['strno'] = '否'; + $lang['strtrue'] = '真(TRUE)'; + $lang['strfalse'] = '假(FALSE)'; + $lang['stredit'] = '編輯'; + $lang['strcolumn'] = '欄位'; + $lang['strcolumns'] = '欄位'; + $lang['strrows'] = '資料列'; + $lang['strrowsaff'] = '資料列受影響。'; + $lang['strobjects'] = '物件'; + $lang['strback'] = '返回'; + $lang['strqueryresults'] = '查詢結果'; + $lang['strshow'] = '顯示'; + $lang['strempty'] = '清空'; + $lang['strlanguage'] = '語言'; + $lang['strencoding'] = '字元編碼'; + $lang['strunique'] = '唯一值'; + $lang['strprimary'] = '主鍵(PK)'; + $lang['strexport'] = '匯出'; + $lang['strimport'] = '匯入'; + $lang['strallowednulls'] = '允許空字串'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = '空 字串/欄位'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = '管理'; + $lang['strvacuum'] = '清理(Vacuum)'; + $lang['stranalyze'] = '分析'; + $lang['strclusterindex'] = '叢集'; + $lang['strclustered'] = '已叢集?'; + $lang['strreindex'] = '重建索引'; + $lang['strrun'] = '執行'; + $lang['stradd'] = '新增'; + $lang['strevent'] = '事件'; + $lang['strwhere'] = '條件'; + $lang['strinstead'] = '已被取代'; + $lang['strwhen'] = '當'; + $lang['strformat'] = '格式'; + $lang['strdata'] = '資料'; + $lang['strconfirm'] = '確認'; + $lang['strexpression'] = '表達式'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = '展開'; + $lang['strcollapse'] = '摺疊'; + $lang['strfind'] = '尋找'; + $lang['stroptions'] = '選項'; + $lang['strrefresh'] = '重新整理'; + $lang['strdownload'] = '下載'; + $lang['strdownloadgzipped'] = '以 gzip 壓縮並下載'; + $lang['strinfo'] = '資訊'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = '進階'; + $lang['strvariables'] = '變數'; + $lang['strprocess'] = '進程'; + $lang['strprocesses'] = '進程'; + $lang['strsetting'] = '設定'; + $lang['streditsql'] = '編輯 SQL'; + $lang['strruntime'] = '總共執行時間: %s ms'; + $lang['strpaginate'] = '分頁顯示結果'; + $lang['struploadscript'] = '或是上傳一個 SQL 稿本檔: '; + $lang['strstarttime'] = '啟動時間'; + $lang['strfile'] = '檔案'; + $lang['strfileimported'] = '檔案已匯入。'; + $lang['strtrycred'] = '使用這些憑證給全部伺服器'; + $lang['stractionsonmultiplelines'] = '動作在多個行列上'; + $lang['strcheckall'] = '檢查全部'; + $lang['struncheckall'] = '不檢查全部'; + $lang['strcluster'] = '叢集'; + + // User-supplied SQL history + $lang['strhistory'] = '歷程'; + $lang['strnohistory'] = '無歷程。'; + $lang['strclearhistory'] = '清空歷程'; + $lang['strdelhistory'] = '從歷程刪除'; + $lang['strconfdelhistory'] = '確實要從歷程刪除嗎 ?'; + $lang['strconfclearhistory'] = '確實要清空歷程嗎 ?'; + $lang['strnodatabaseselected'] = '請選擇一個資料庫。'; + + // Database sizes + $lang['strsize'] = '容量'; + $lang['strbytes'] = '位元組'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = '這個應用最好以一個能啟用框架頁(frame)的瀏覽器運作,但也能夠被使用在沒有框架頁下接繼運作,請按下面的連結。'; + $lang['strnoframeslink'] = '使用不包括框架頁(frame)'; + $lang['strbadconfig'] = '您的 config.inc.php 是過時的。您將需要從新的 config.inc.php-dist 重建它。'; + $lang['strnotloaded'] = '您的 PHP 環境未安裝 PostgreSQL 必要的支持。您必需重新編譯 PHP 使用 --with-pgsql 組態選項。'; + $lang['strpostgresqlversionnotsupported'] = '版本的 PostgreSQL 未被支持。請升級版本到 %s 或是更高者。'; + $lang['strbadschema'] = '無效的架構模式被指定。'; + $lang['strbadencoding'] = '在資料庫中設定客戶端字元編碼失敗。'; + $lang['strsqlerror'] = 'SQL 錯誤: '; + $lang['strinstatement'] = '在區塊內: '; + $lang['strinvalidparam'] = '無效的稿本變數。'; + $lang['strnodata'] = '找不到資料列。'; + $lang['strnoobjects'] = '找不到物件。'; + $lang['strrownotunique'] = '該資料列無唯一約束。'; + $lang['strnouploads'] = '上傳檔案功能是已停用。'; + $lang['strimporterror'] = '匯入錯誤。'; + $lang['strimporterror-fileformat'] = '匯入錯誤: 自動識別檔案格式已失敗。'; + $lang['strimporterrorline'] = '匯入錯誤發生在第 %s 行。'; + $lang['strimporterrorline-badcolumnnum'] = '匯入錯誤發生在第 %s 行: 該行不具備正確的欄位編號。'; + $lang['strimporterror-uploadedfile'] = '匯入錯誤: 檔案無法被上傳到這伺服器'; + $lang['strcannotdumponwindows'] = '複雜的資料表與架構模式名稱轉儲在 Windows 是未被支持的。'; + $lang['strinvalidserverparam'] = '試圖用無效的伺服器參數連結, 可能有人正試圖攻擊您的系統。'; + $lang['strnoserversupplied'] = '沒有選擇資料庫!'; + + // Tables + $lang['strtable'] = '資料表'; + $lang['strtables'] = '資料表'; + $lang['strshowalltables'] = '顯示全部資料表'; + $lang['strnotables'] = '找不到資料表。'; + $lang['strnotable'] = '找不到任何資料表。'; + $lang['strcreatetable'] = '建立新資料表'; + $lang['strtablename'] = '資料表名'; + $lang['strtableneedsname'] = '您必需為您的資料表命名。'; + $lang['strtableneedsfield'] = '您至少應指定一個欄位。'; + $lang['strtableneedscols'] = '您必需指定一個合法的欄位數量。'; + $lang['strtablecreated'] = '資料表已建立。'; + $lang['strtablecreatedbad'] = '建立資料表作業已失敗。'; + $lang['strconfdroptable'] = '您確定要移除資料表 "%s"?'; + $lang['strtabledropped'] = '資料表已移除。'; + $lang['strtabledroppedbad'] = '資料表移除已失敗。'; + $lang['strconfemptytable'] = '您確定要清空資料表 "%s"?'; + $lang['strtableemptied'] = '資料表已清空。'; + $lang['strtableemptiedbad'] = '資料表清空已失敗。'; + $lang['strinsertrow'] = '插入資料列'; + $lang['strrowinserted'] = '資料列已插入。'; + $lang['strrowinsertedbad'] = '資料列插入已失敗。'; + $lang['strrowduplicate'] = '資料列插入失敗, 試圖做複製品插入。'; + $lang['streditrow'] = '編輯資料列'; + $lang['strrowupdated'] = '資料列已更新。'; + $lang['strrowupdatedbad'] = '資料列更新已失敗。'; + $lang['strdeleterow'] = '刪除資料列'; + $lang['strconfdeleterow'] = '您確定要刪除這些資料列??'; + $lang['strrowdeleted'] = '資料列已刪除。'; + $lang['strrowdeletedbad'] = '資料列刪除已失敗。'; + $lang['strinsertandrepeat'] = '插入與重作'; + $lang['strnumcols'] = '欄位數量'; + $lang['strcolneedsname'] = '您必需為這個欄位特定一個名稱'; + $lang['strselectallfields'] = '選擇全部欄位'; + $lang['strselectneedscol'] = '您必需至少顯示一資料列。'; + $lang['strselectunary'] = '一元運算子不能有值。'; + $lang['straltercolumn'] = '修改資料列'; + $lang['strcolumnaltered'] = '資料列已修改。'; + $lang['strcolumnalteredbad'] = '資料列修改已失敗。'; + $lang['strconfdropcolumn'] = '您確定要移除欄位 "%s" 從資料表 "%s"?'; + $lang['strcolumndropped'] = '欄位已移除。'; + $lang['strcolumndroppedbad'] = '欄位移除已失敗。'; + $lang['straddcolumn'] = '新增欄位'; + $lang['strcolumnadded'] = '欄位已新增。'; + $lang['strcolumnaddedbad'] = '欄位新增已失敗。'; + $lang['strcascade'] = '附屬串聯(CASCADE)'; + $lang['strtablealtered'] = '資料表已修改。'; + $lang['strtablealteredbad'] = '資料表修改已失敗。'; + $lang['strdataonly'] = '只有資料'; + $lang['strstructureonly'] = '只有結構'; + $lang['strstructureanddata'] = '結構和資料'; + $lang['strtabbed'] = '固定(Tabbed)'; + $lang['strauto'] = '自動'; + $lang['strconfvacuumtable'] = '您確定將要清理(vacuum) "%s" 嗎?'; + $lang['strconfanalyzetable'] = '確定要分析 "%s" 嗎?'; + $lang['strestimatedrowcount'] = '已估算的資料列計數'; + $lang['strestimatedrowcount'] = '估計的資料列數'; + $lang['strspecifytabletoanalyze'] = '必須至少選擇一個資料表來分析'; + $lang['strspecifytabletoempty'] = '必須至少選擇一個資料表來清空'; + $lang['strspecifytabletodrop'] = '必須至少選擇一個資料表來移除'; + $lang['strspecifytabletovacuum'] = '必須至少選擇一個資料表來清理(vacuum)'; + + // Columns + $lang['strcolprop'] = '欄位屬性'; + $lang['strnotableprovided'] = '沒有指定資料表!'; + + // Users + $lang['struser'] = '使用者'; + $lang['strusers'] = '使用者'; + $lang['strusername'] = '使用者名稱'; + $lang['strpassword'] = '密碼'; + $lang['strsuper'] = '超級使用者?'; + $lang['strcreatedb'] = '能建立資料庫?'; + $lang['strexpires'] = '失效逾期'; + $lang['strsessiondefaults'] = 'Session 預設'; + $lang['strnousers'] = '找不到此使用者。'; + $lang['struserupdated'] = '使用者已更新。'; + $lang['struserupdatedbad'] = '使用者更新已失敗。'; + $lang['strshowallusers'] = '顯示所有使用者'; + $lang['strcreateuser'] = '建立新使用者'; + $lang['struserneedsname'] = '您必需為您的使用者命名。'; + $lang['strusercreated'] = '使用者已建立。'; + $lang['strusercreatedbad'] = '使用者建立已失敗。'; + $lang['strconfdropuser'] = '您確定您要移除這個使用者 "%s"?'; + $lang['struserdropped'] = '使用者已移除。'; + $lang['struserdroppedbad'] = '使用者移除已失敗。'; + $lang['straccount'] = '帳戶'; + $lang['strchangepassword'] = '變更密碼'; + $lang['strpasswordchanged'] = '密碼已變更。'; + $lang['strpasswordchangedbad'] = '密碼變更已失敗。'; + $lang['strpasswordshort'] = '密碼太簡短。'; + $lang['strpasswordconfirm'] = '所輸入的確認密碼不符。'; + + // Groups + $lang['strgroup'] = '群組'; + $lang['strgroups'] = '群組'; + $lang['strshowallgroups'] = '顯示全部群組'; + $lang['strnogroup'] = '找不到群組。'; + $lang['strnogroups'] = '找不到任何群組。'; + $lang['strcreategroup'] = '建立群組'; + $lang['strgroupneedsname'] = '您必需為您的群組命名。'; + $lang['strgroupcreated'] = '群組已建立。'; + $lang['strgroupcreatedbad'] = '群組建立已失敗。'; + $lang['strconfdropgroup'] = '您確定您要移除這個群組 "%s"?'; + $lang['strgroupdropped'] = '群組已移除。'; + $lang['strgroupdroppedbad'] = '群組移除已失敗。'; + $lang['strmembers'] = '成員'; + $lang['strmemberof'] = '成員屬於'; + $lang['stradminmembers'] = '管理員成員'; + $lang['straddmember'] = '增加成員'; + $lang['strmemberadded'] = '成員已加入。'; + $lang['strmemberaddedbad'] = '成員加入已失敗。'; + $lang['strdropmember'] = '移除成員'; + $lang['strconfdropmember'] = '您確定您要移除這個成員 "%s" 從這個群組 "%s"?'; + $lang['strmemberdropped'] = '成員已移除。'; + $lang['strmemberdroppedbad'] = '成員移除已失敗。'; + + // Roles + $lang['strrole'] = '角色'; + $lang['strroles'] = '角色'; + $lang['strshowallroles'] = '顯示全部角色'; + $lang['strnoroles'] = '找不到任何角色。'; + $lang['strinheritsprivs'] = '繼承特權?'; + $lang['strcreaterole'] = '建立角色'; + $lang['strcancreaterole'] = '能建立角色?'; + $lang['strrolecreated'] = '角色已建立。'; + $lang['strrolecreatedbad'] = '角色建立已失敗。'; + $lang['stralterrole'] = '修改角色'; + $lang['strrolealtered'] = '角色被修改。'; + $lang['strrolealteredbad'] = '角色修改已失敗。'; + $lang['strcanlogin'] = '可以登入?'; + $lang['strconnlimit'] = '連線限制'; + $lang['strdroprole'] = '移除角色'; + $lang['strconfdroprole'] = '您確定您要移除這個角色 "%s"?'; + $lang['strroledropped'] = '角色已移除。'; + $lang['strroledroppedbad'] = '角色移除已失敗。'; + $lang['strnolimit'] = '不限制'; + $lang['strnever'] = '從末'; + $lang['strroleneedsname'] = '您必需為這個角色命名。'; + + // Privileges + $lang['strprivilege'] = '特權'; + $lang['strprivileges'] = '特權'; + $lang['strnoprivileges'] = '這個物件有預設的擁有人特權。'; + $lang['strgrant'] = '賦予'; + $lang['strrevoke'] = '撤回'; + $lang['strgranted'] = '特權已變更。'; + $lang['strgrantfailed'] = '特權變更失敗。'; + $lang['strgrantbad'] = '您必需至少在一名使用者或群組中指定至少一項特權。'; + $lang['strgrantor'] = '授權者'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = '資料庫'; + $lang['strdatabases'] = '資料庫'; + $lang['strshowalldatabases'] = '顯示全部資料庫'; + $lang['strnodatabases'] = '找不到任何資料庫。'; + $lang['strcreatedatabase'] = '建立資料庫'; + $lang['strdatabasename'] = '資料庫名稱'; + $lang['strdatabaseneedsname'] = '您必需為您的資料庫給一個名稱。'; + $lang['strdatabasecreated'] = '資料庫已建立。'; + $lang['strdatabasecreatedbad'] = '資料庫建立失敗。'; + $lang['strconfdropdatabase'] = '您確定您要移除這個資料庫 "%s"?'; + $lang['strdatabasedropped'] = '資料庫已移除。'; + $lang['strdatabasedroppedbad'] = '資料庫移除失敗。'; + $lang['strentersql'] = '在下方輸入 SQL 來執行: '; + $lang['strsqlexecuted'] = 'SQL 已執行。'; + $lang['strvacuumgood'] = '清理完成。'; + $lang['strvacuumbad'] = '清理失敗。'; + $lang['stranalyzegood'] = '分析完成。'; + $lang['stranalyzebad'] = '分析失敗。'; + $lang['strreindexgood'] = '重建索引完成。'; + $lang['strreindexbad'] = '重建索引失敗。'; + $lang['strfull'] = '全部性'; + $lang['strfreeze'] = '凍結'; + $lang['strforce'] = '強制'; + $lang['strsignalsent'] = '訊號傳遞。'; + $lang['strsignalsentbad'] = '傳遞訊號失敗。'; + $lang['strallobjects'] = '全部物件'; + $lang['strdatabasealtered'] = '資料庫已修改。'; + $lang['strdatabasealteredbad'] = '資料庫修改已失敗。'; + $lang['strspecifydatabasetodrop'] = '必須至少指定一個資料庫來移除'; + + // Views + $lang['strview'] = '視觀表'; + $lang['strviews'] = '視觀表'; + $lang['strshowallviews'] = '顯示全部視觀表'; + $lang['strnoview'] = '找不到視觀表。'; + $lang['strnoviews'] = '找不到任何視觀表。'; + $lang['strcreateview'] = '建立視觀表'; + $lang['strviewname'] = '視觀表名稱'; + $lang['strviewneedsname'] = '您必需為您的視觀表給一個名稱。'; + $lang['strviewneedsdef'] = '您必需為你的視觀表給一個定義。'; + $lang['strviewneedsfields'] = '您必需在您的視觀表中選擇給這個欄位。'; + $lang['strviewcreated'] = '視觀表已建立。'; + $lang['strviewcreatedbad'] = '視觀表建立已失敗。'; + $lang['strconfdropview'] = '您確定您要移除這個視觀表 "%s" 嗎?'; + $lang['strviewdropped'] = '視觀表已移除。'; + $lang['strviewdroppedbad'] = '視觀表移除已失敗。'; + $lang['strviewlink'] = '連結鍵(Linking keys)'; + $lang['strviewconditions'] = '附加条件'; + $lang['strviewconditions'] = '附加的條件限制'; + $lang['strcreateviewwiz'] = '建立視觀表精靈'; + $lang['strrenamedupfields'] = '重新命名複製的字串'; + $lang['strdropdupfields'] = '移除複制的字串'; + $lang['strerrordupfields'] = '複製字串時發生錯誤'; + $lang['strviewupdated'] = '視觀表已更新。'; + $lang['strviewupdatedbad'] = '視觀表更新已失敗。'; + $lang['strspecifyviewtodrop'] = '必须至少指定一个视图来移除'; + + // Sequences + $lang['strsequence'] = '序列數'; + $lang['strsequences'] = '序列數'; + $lang['strshowallsequences'] = '顯示全部序列數'; + $lang['strnosequence'] = '找不到序列數。'; + $lang['strnosequences'] = '找不到任何序列數。'; + $lang['strcreatesequence'] = '建立序列數'; + $lang['strlastvalue'] = '最後值'; + $lang['strincrementby'] = '遞增量'; + $lang['strstartvalue'] = '初始值'; + $lang['strmaxvalue'] = '最大值'; + $lang['strminvalue'] = '最小值'; + $lang['strcachevalue'] = '快取值'; + $lang['strlogcount'] = '日誌計數'; + $lang['striscycled'] = '可循環?'; + $lang['striscalled'] = '將在返回下一個值前遞增最後的值(is_called)嗎?'; + $lang['strsequenceneedsname'] = '您必需為您的序列數給一個名稱。'; + $lang['strsequencecreated'] = '序列數已建立。'; + $lang['strsequencecreatedbad'] = '序列數建立失敗。'; + $lang['strconfdropsequence'] = '您確定您要移除這個序列數 "%s"?'; + $lang['strsequencedropped'] = '序列數已移除。'; + $lang['strsequencedroppedbad'] = '序列數移除已失敗。'; + $lang['strsequencereset'] = '序列數重置。'; + $lang['strsequenceresetbad'] = '序列數重置已失敗。'; + $lang['straltersequence'] = '修改序列數'; + $lang['strsequencealtered'] = '序列數已修改。'; + $lang['strsequencealteredbad'] = '序列數修改已失敗。'; + $lang['strsetval'] = '設定序列數值'; + $lang['strsequencesetval'] = '序列數值已設定。'; + $lang['strsequencesetvalbad'] = '序列數值設定已失敗。'; + $lang['strnextval'] = '遞增量'; + $lang['strsequencenextval'] = '序列數已遞增。'; + $lang['strsequencenextvalbad'] = '序列數已遞增失敗。'; + $lang['strspecifysequencetodrop'] = '必須至少指定一個序列數來刪除'; + + // Indexes + $lang['strindex'] = '索引'; + $lang['strindexes'] = '索引'; + $lang['strindexname'] = '索引名稱'; + $lang['strshowallindexes'] = '顯示全部索引'; + $lang['strnoindex'] = '找不到索引。'; + $lang['strnoindexes'] = '找不到任何索引。'; + $lang['strcreateindex'] = '建立索引'; + $lang['strtabname'] = '資料表名稱'; + $lang['strcolumnname'] = '欄位名稱'; + $lang['strindexneedsname'] = '您必需為您的索引給一個名稱。'; + $lang['strindexneedscols'] = '索引要求一個有效欄位數量。'; + $lang['strindexcreated'] = '索引已建立'; + $lang['strindexcreatedbad'] = '索引建立失敗。'; + $lang['strconfdropindex'] = '您確定您要移除這個索引 "%s" 嗎?'; + $lang['strindexdropped'] = '索引已移除。'; + $lang['strindexdroppedbad'] = '索引移除失敗。'; + $lang['strkeyname'] = '鍵名'; + $lang['struniquekey'] = '唯一鍵'; + $lang['strprimarykey'] = '主鍵(pkey)'; + $lang['strindextype'] = '索引類型'; + $lang['strtablecolumnlist'] = '資料表欄位'; + $lang['strindexcolumnlist'] = '索引欄位'; + $lang['strconfcluster'] = '您確定您要叢集化 "%s" 嗎?'; + $lang['strclusteredgood'] = '叢集完成。'; + $lang['strclusteredbad'] = '叢集已失敗。'; + + // Rules + $lang['strrules'] = '規則'; + $lang['strrule'] = '規則'; + $lang['strshowallrules'] = '顯示全部規則'; + $lang['strnorule'] = '找不到規則。'; + $lang['strnorules'] = '找不到任何規則。'; + $lang['strcreaterule'] = '建立規則'; + $lang['strrulename'] = '規則名稱'; + $lang['strruleneedsname'] = '您必需為您的規則給一個名稱。'; + $lang['strrulecreated'] = '規則已建立。'; + $lang['strrulecreatedbad'] = '規則建立已失敗。'; + $lang['strconfdroprule'] = '您確定您要移除這個規則 "%s" 在 "%s"上嗎?'; + $lang['strruledropped'] = '規則規則已移除。'; + $lang['strruledroppedbad'] = '規則移除已失敗。'; + + // Constraints + $lang['strconstraint'] = '約束限制'; + $lang['strconstraints'] = '約束限制'; + $lang['strshowallconstraints'] = '顯示全部約束限制'; + $lang['strnoconstraints'] = '找不到任何約束限制。'; + $lang['strcreateconstraint'] = '建立約束限制'; + $lang['strconstraintcreated'] = '約束限制已建立。'; + $lang['strconstraintcreatedbad'] = '約束限制建立已失敗。'; + $lang['strconfdropconstraint'] = '您確定您要移除這約束限制 "%s" 在 "%s" 上嗎?'; + $lang['strconstraintdropped'] = '約束限制已移除。'; + $lang['strconstraintdroppedbad'] = '約束限制移除已失敗。'; + $lang['straddcheck'] = '增加約束檢查(Check)'; + $lang['strcheckneedsdefinition'] = '約束檢查(Check)限制需要定義。'; + $lang['strcheckadded'] = '約束檢查限制已增加。'; + $lang['strcheckaddedbad'] = '增加約束檢查限制已失敗。'; + $lang['straddpk'] = '增加主鍵(pkey)'; + $lang['strpkneedscols'] = '主鍵(pkey)要求最少一個欄位。'; + $lang['strpkadded'] = '主鍵(pkey)已增加。'; + $lang['strpkaddedbad'] = '增加主鍵(pkey)已失敗。'; + $lang['stradduniq'] = '增加唯一約束限制'; + $lang['struniqneedscols'] = '唯一約束限制要求最少一個欄位。'; + $lang['struniqadded'] = '唯一約束限制已增加。'; + $lang['struniqaddedbad'] = '增加唯一約束限制已失敗。'; + $lang['straddfk'] = '增加外部鍵(fkey)'; + $lang['strfkneedscols'] = '外部鍵(fkey)要求最少一個欄位。'; + $lang['strfkneedstarget'] = '外部鍵(fkey)要求一個資料表。'; + $lang['strfkadded'] = '外部鍵(fkey)已增加。'; + $lang['strfkaddedbad'] = '增加外部鍵(fkey)已失敗。'; + $lang['strfktarget'] = '目標資料表'; + $lang['strfkcolumnlist'] = '鍵欄位'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = '函數'; + $lang['strfunctions'] = '函數'; + $lang['strshowallfunctions'] = '顯示全部函數'; + $lang['strnofunction'] = '找不到函數。'; + $lang['strnofunctions'] = '找不到任何函數。'; + $lang['strcreateplfunction'] = '建立 SQL/PL 函數'; + $lang['strcreateinternalfunction'] = '建立內部函數'; + $lang['strcreatecfunction'] = '建立 C 函數'; + $lang['strfunctionname'] = '函數名稱'; + $lang['strreturns'] = '遞回'; + $lang['strproglanguage'] = '程序語言'; + $lang['strfunctionneedsname'] = '您必需為您的函數給一個名稱。'; + $lang['strfunctionneedsdef'] = '您必需為您的函數給一個定義。'; + $lang['strfunctioncreated'] = '函數已建立。'; + $lang['strfunctioncreatedbad'] = '函數建立已失敗。'; + $lang['strconfdropfunction'] = '您確定您要移除這個函數 "%s"?'; + $lang['strfunctiondropped'] = '函數已移除。'; + $lang['strfunctiondroppedbad'] = '函數移除已失敗。'; + $lang['strfunctionupdated'] = '函數已更新。'; + $lang['strfunctionupdatedbad'] = '函數更新已失敗。'; + $lang['strobjectfile'] = '物件檔案'; + $lang['strlinksymbol'] = '連結物件標記'; + $lang['strarguments'] = '引數'; + $lang['strargmode'] = '方式'; + $lang['strargtype'] = '類型'; + $lang['strargadd'] = '增加作者引數'; + $lang['strargremove'] = '移除這個引數'; + $lang['strargnoargs'] = '這個函數將不能工作任何引數。'; + $lang['strargenableargs'] = '啟用引數已被傳遞到這個函數。'; + $lang['strargnorowabove'] = '需要資料列在這資料列之上。'; + $lang['strargnorowbelow'] = '需要資料列在這資料列之前。'; + $lang['strargraise'] = '向上移。'; + $lang['strarglower'] = '向下移。'; + $lang['strargremoveconfirm'] = '您確定你要移除這個引數? 這個作業未能完成。'; + $lang['strfunctioncosting'] = '函數成本'; + $lang['strresultrows'] = '结果集資料行數'; + $lang['strexecutioncost'] = '執行成本'; + $lang['strspecifyfunctiontodrop'] = '必須至少指定一個函數來刪除'; + + // Triggers + $lang['strtrigger'] = '觸發器'; + $lang['strtriggers'] = '觸發器'; + $lang['strshowalltriggers'] = '顯示全部觸發器'; + $lang['strnotrigger'] = '找不到觸發器。'; + $lang['strnotriggers'] = '找不到任何觸發器。'; + $lang['strcreatetrigger'] = '建立觸發器'; + $lang['strtriggerneedsname'] = '您必需為您的觸發器明確指定一個名稱。'; + $lang['strtriggerneedsfunc'] = '您必需為您的觸發器明確指定一個函數。'; + $lang['strtriggercreated'] = '觸發器已建立。'; + $lang['strtriggercreatedbad'] = '觸發器建立已失敗。'; + $lang['strconfdroptrigger'] = '您確定您要移除這個觸發器 "%s" on "%s"?'; + $lang['strconfenabletrigger'] = '您確定您要啟用這個觸發器觸發器 "%s" 在 "%s" 上?'; + $lang['strconfdisabletrigger'] = '您確定您要停用這個觸發器觸發器 "%s" on "%s" 上?'; + $lang['strtriggerdropped'] = '觸發器已移除。'; + $lang['strtriggerdroppedbad'] = '觸發器移除已失敗。'; + $lang['strtriggerenabled'] = '觸發器啟用。'; + $lang['strtriggerenabledbad'] = '觸發器啟用已失敗。'; + $lang['strtriggerdisabled'] = '觸發器停用。'; + $lang['strtriggerdisabledbad'] = '觸發器停用已失敗。'; + $lang['strtriggeraltered'] = '觸發器已修改。'; + $lang['strtriggeralteredbad'] = '觸發器修改已失敗。'; + $lang['strforeach'] = '給每個'; + + // Types + $lang['strtype'] = '類型'; + $lang['strtypes'] = '類型'; + $lang['strshowalltypes'] = '顯示全部類型'; + $lang['strnotype'] = '找不到類型。'; + $lang['strnotypes'] = '找不到任何類型。'; + $lang['strcreatetype'] = '建立類型'; + $lang['strcreatecomptype'] = '建立合成類型'; + $lang['strcreateenumtype'] = '建立列舉類型'; + $lang['strtypeneedsfield'] = '您必須明確指定最少一個欄位。'; + $lang['strtypeneedsvalue'] = '您必須明確指定最少一個值。'; + $lang['strtypeneedscols'] = '您必須明確指定有效的欄位數。'; + $lang['strtypeneedsvals'] = '您必須明確指定一個有效的欄位數。'; + $lang['strinputfn'] = '輸入類型'; + $lang['stroutputfn'] = '輸出類型'; + $lang['strpassbyval'] = '以值傳送?'; + $lang['stralignment'] = '列隊組合'; + $lang['strelement'] = '元素'; + $lang['strdelimiter'] = '分隔符號'; + $lang['strstorage'] = '儲藏所'; + $lang['strfield'] = '欄位'; + $lang['strvalue'] = '值'; + $lang['strnumfields'] = '欄位數. '; + $lang['strnumvalues'] = '值數'; + $lang['strtypeneedsname'] = '您必需為您的類型給一個名稱。'; + $lang['strtypeneedslen'] = '您必需為您的類型給一個長度。'; + $lang['strtypecreated'] = '類型已建立'; + $lang['strtypecreatedbad'] = '類型建立已失敗。'; + $lang['strconfdroptype'] = '您確定您要移除這個類型 "%s" 嗎?'; + $lang['strtypedropped'] = '類型已移除。'; + $lang['strtypedroppedbad'] = '類型移除已失敗。'; + $lang['strflavor'] = '風格(Flavor)'; + $lang['strbasetype'] = '基礎'; + $lang['strcompositetype'] = '合成'; + $lang['strpseudotype'] = '偽(Pseudo)'; + $lang['strenum'] = 'Enum'; + $lang['strenumvalues'] = '列舉類型'; + + // Schemas + $lang['strschema'] = '架構模式'; + $lang['strschemas'] = '架構模式'; + $lang['strshowallschemas'] = '顯示全部架構模式'; + $lang['strnoschema'] = '找不到架構模式。'; + $lang['strnoschemas'] = '找不到任何架構模式。'; + $lang['strcreateschema'] = '建立架構模式'; + $lang['strschemaname'] = '架構模式名稱'; + $lang['strschemaneedsname'] = '您必需為您的架構模式給一個名稱。'; + $lang['strschemacreated'] = '架構模式已建立'; + $lang['strschemacreatedbad'] = '架構模式建立已失敗。'; + $lang['strconfdropschema'] = '您確定您要移除這個架構模式 "%s" 嗎?'; + $lang['strschemadropped'] = '架構模式已移除。'; + $lang['strschemadroppedbad'] = '架構模式移除失敗。'; + $lang['strschemaaltered'] = '架構模式已修改。'; + $lang['strschemaalteredbad'] = '架構模式修改已失敗。'; + $lang['strsearchpath'] = '架構模式搜尋路徑'; + $lang['strspecifyschematodrop'] = '您必須至少指定一個架構模式來刪除'; + + // Reports + + // Domains + $lang['strdomain'] = '共同值域'; + $lang['strdomains'] = '共同值域'; + $lang['strshowalldomains'] = '顯示全部共同值域'; + $lang['strnodomains'] = '找不到任何共同值域。'; + $lang['strcreatedomain'] = '建立共同值域'; + $lang['strdomaindropped'] = '共同值域已移除。'; + $lang['strdomaindroppedbad'] = '共同值域移除已失敗。'; + $lang['strconfdropdomain'] = '您確定您要移除這個共同值域 "%s"?'; + $lang['strdomainneedsname'] = '您必需為您的共同值域給一個名稱。。'; + $lang['strdomaincreated'] = '共同值域已建立。'; + $lang['strdomaincreatedbad'] = '共同值域建立已失敗。'; + $lang['strdomainaltered'] = '共同值域已修改。'; + $lang['strdomainalteredbad'] = '共同值域修改已失敗。'; + + // Operators + $lang['stroperator'] = '運算子'; + $lang['stroperators'] = '運算子'; + $lang['strshowalloperators'] = '顯示全部運算子'; + $lang['strnooperator'] = '找不到運算子。'; + $lang['strnooperators'] = '找不到任何運算子。'; + $lang['strcreateoperator'] = '建立運算子'; + $lang['strleftarg'] = '左引數類型'; + $lang['strrightarg'] = '右引數類型'; + $lang['strcommutator'] = '轉換器'; + $lang['strnegator'] = '否定器'; + $lang['strrestrict'] = '限制'; + $lang['strjoin'] = '結合'; + $lang['strhashes'] = '雜湊(Hashes)'; + $lang['strmerges'] = '合併'; + $lang['strleftsort'] = '左排序'; + $lang['strrightsort'] = '右排序'; + $lang['strlessthan'] = '小於'; + $lang['strgreaterthan'] = '大於'; + $lang['stroperatorneedsname'] = '您必需為您的運算子給一個名稱。'; + $lang['stroperatorcreated'] = '運算子已建立'; + $lang['stroperatorcreatedbad'] = '運算子建立已失敗。'; + $lang['strconfdropoperator'] = '您確定您要移除這個運算子 "%s" 嗎?'; + $lang['stroperatordropped'] = '運算子已移除。'; + $lang['stroperatordroppedbad'] = '運算子移除已失敗。'; + + // Casts + $lang['strcasts'] = '類型轉換'; + $lang['strnocasts'] = '找不到任何類型轉換。'; + $lang['strsourcetype'] = '來源類型'; + $lang['strtargettype'] = '目標類型'; + $lang['strimplicit'] = '隱含'; + $lang['strinassignment'] = '在指派中'; + $lang['strbinarycompat'] = '(二進制碼相容)'; + + // Conversions + $lang['strconversions'] = '編碼轉換'; + $lang['strnoconversions'] = '找不到任何編碼轉換。'; + $lang['strsourceencoding'] = '來源編碼'; + $lang['strtargetencoding'] = '目標編碼'; + + // Languages + $lang['strlanguages'] = '程序語言'; + $lang['strnolanguages'] = '找不到任何程序語言。'; + $lang['strtrusted'] = '被信任的'; + + // Info + $lang['strnoinfo'] = '無資訊可用。'; + $lang['strreferringtables'] = '參照中資料表'; + $lang['strparenttables'] = '父資料表'; + $lang['strchildtables'] = '子資料表'; + + // Aggregates + $lang['straggregate'] = '聚集函數'; + $lang['straggregates'] = '聚集函數'; + $lang['strnoaggregates'] = '找不到任何聚集函數。'; + $lang['stralltypes'] = '(全部類型)'; + $lang['strcreateaggregate'] = '建立聚集函數'; + $lang['straggrbasetype'] = '輸入資料類型'; + $lang['straggrsfunc'] = '狀態過渡函數'; + $lang['straggrstype'] = '狀態類型'; + $lang['straggrffunc'] = '最終函數'; + $lang['straggrinitcond'] = '最初條件'; + $lang['straggrsortop'] = '排序運算子'; + $lang['strconfdropaggregate'] = '您確定您要移除這個聚集函數 "%s" 嗎?'; + $lang['straggregatedropped'] = '聚集函數已移除。'; + $lang['straggregatedroppedbad'] = '聚集函數移除已失敗。'; + $lang['straggraltered'] = '聚集函數已修改。'; + $lang['straggralteredbad'] = '聚集函數修改已失敗。'; + $lang['straggrneedsname'] = '您必需具體指定一個名稱給這個聚集函數。'; + $lang['straggrneedsbasetype'] = '您必需具體指定這聚集函數的進入資料類型。'; + $lang['straggrneedssfunc'] = '您必需具體指定這這聚集函數的狀態過渡函數名稱。'; + $lang['straggrneedsstype'] = '您必需具體指定這聚集函數群狀態值的資料類型'; + $lang['straggrcreated'] = '聚集函數已建立。'; + $lang['straggrcreatedbad'] = '聚集函數建立已失敗。'; + $lang['straggrshowall'] = '顯示全部聚集函數'; + + // Operator Classes + $lang['stropclasses'] = '運算子類別'; + $lang['strnoopclasses'] = '找不到任何運算子類別。'; + $lang['straccessmethod'] = '存取方法'; + + // Stats and performance + $lang['strrowperf'] = '資料列性能'; + $lang['strioperf'] = 'I/O 性能'; + $lang['stridxrowperf'] = '索引資料列性能'; + $lang['stridxioperf'] = '索引 I/O 性能'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = '順序性'; + $lang['strscan'] = '掃描'; + $lang['strread'] = '讀取'; + $lang['strfetch'] = '取得'; + $lang['strheap'] = '堆疊'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST 索引'; + $lang['strcache'] = '快取'; + $lang['strdisk'] = '磁碟'; + $lang['strrows2'] = '資料列'; + + // Tablespaces + $lang['strtablespace'] = '表空間'; + $lang['strtablespaces'] = '表空間'; + $lang['strshowalltablespaces'] = '顯示全部表空間'; + $lang['strnotablespaces'] = '找不到任何表空間。'; + $lang['strcreatetablespace'] = '建立表空間'; + $lang['strlocation'] = '所在位置'; + $lang['strtablespaceneedsname'] = '您必需為您的表空間給一個名稱。'; + $lang['strtablespaceneedsloc'] = '您必需給一個目錄夾來建立表空間。'; + $lang['strtablespacecreated'] = '表空間已建立。'; + $lang['strtablespacecreatedbad'] = '表空間建立已失敗。'; + $lang['strconfdroptablespace'] = '您確定您要移除這個表空間 "%s"?'; + $lang['strtablespacedropped'] = '表空間已移除。'; + $lang['strtablespacedroppedbad'] = '表空間移除已失敗。'; + $lang['strtablespacealtered'] = '表空間已修改。'; + $lang['strtablespacealteredbad'] = '表空間修改已失敗。'; + + // Miscellaneous + $lang['strtopbar'] = '%s 運作於 %s: %s -- 您是已登入的使用者 "%s"'; + $lang['strtimefmt'] = 'jS M, Y g: iA'; + $lang['strhelp'] = '說明'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = '說明頁瀏覽器'; + $lang['strselecthelppage'] = '選擇一個說明頁'; + $lang['strinvalidhelppage'] = '無效說明頁。'; + $lang['strlogintitle'] = '登入到 %s'; + $lang['strlogoutmsg'] = '登出 %s'; + $lang['strloading'] = '載入中...'; + $lang['strerrorloading'] = '載入中錯誤'; + $lang['strclicktoreload'] = '點擊到重新載入'; + + // Autovacuum + $lang['strautovacuum'] = '自動清理(Autovacuum)'; + $lang['strturnedon'] = '已轉動 - 開啟'; + $lang['strturnedoff'] = '已轉動 - 關閉'; + $lang['strenabled'] = '啟用'; + $lang['strvacuumbasethreshold'] = 'Vacuum 基本門檻'; + $lang['strvacuumscalefactor'] = 'Vacuum 換算係數'; + $lang['stranalybasethreshold'] = 'Analyze 基本門檻'; + $lang['stranalyzescalefactor'] = 'Analyze 換算係數'; + $lang['strvacuumcostdelay'] = 'Vacuum 成本延遲'; + $lang['strvacuumcostlimit'] = 'Vacuum 成本限制'; + + // Table-level Locks + $lang['strlocks'] = '鎖定'; + $lang['strtransaction'] = '事務交易 ID'; + $lang['strvirtualtransaction'] = '虛擬事務交易 ID'; + $lang['strprocessid'] = '進程 ID'; + $lang['strmode'] = '鎖定模式'; + $lang['strislockheld'] = '是鎖定執(held)?'; + + // Prepared transactions + $lang['strpreparedxacts'] = '已準備事務交易'; + $lang['strxactid'] = '事務交易 ID'; + $lang['strgid'] = 'Global ID'; + + // Fulltext search + $lang['strfulltext'] = '全文檢索'; + $lang['strftsconfig'] = '全文檢索組態'; + $lang['strftsconfigs'] = '組態'; + $lang['strftscreateconfig'] = '新建全文檢索組態'; + $lang['strftscreatedict'] = '新建字典'; + $lang['strftscreatedicttemplate'] = '新建字典模板'; + $lang['strftscreateparser'] = '新建分析器'; + $lang['strftsnoconfigs'] = '沒有找到全文檢索組態。'; + $lang['strftsconfigdropped'] = '全文檢索組態已移除。'; + $lang['strftsconfigdroppedbad'] = '全文檢索移除失敗。'; + $lang['strconfdropftsconfig'] = '確定要移除全文檢索檢索組態 "%s" 嗎?'; + $lang['strconfdropftsdict'] = '確定要移除全文檢索字典 "%s" 嗎?'; + $lang['strconfdropftsmapping'] = '確定要將映射 "%s" 從全文檢索組態 "%s" 中移除嗎?'; + $lang['strftstemplate'] = '模板'; + $lang['strftsparser'] = '分析器'; + $lang['strftsconfigneedsname'] = '必須指定全文檢索組態名稱。'; + $lang['strftsconfigcreated'] = '全文檢索組態已創建'; + $lang['strftsconfigcreatedbad'] = '全文檢索組態創建失敗。'; + $lang['strftsmapping'] = '映射'; + $lang['strftsdicts'] = '字典'; + $lang['strftsdict'] = '字典'; + $lang['strftsemptymap'] = '空的全文檢索組態映射。'; + $lang['strftswithmap'] = '附帶映射(With map)'; + $lang['strftsmakedefault'] = '為本地化作成默認值'; + $lang['strftsconfigaltered'] = '全文檢索已修改。'; + $lang['strftsconfigalteredbad'] = '全文檢索修改失敗。'; + $lang['strftsconfigmap'] = '全文檢索組態映射'; + $lang['strftsparsers'] = '全文檢索分析器'; + $lang['strftsnoparsers'] = '無有效的全文檢索分析器。'; + $lang['strftsnodicts'] = '無有效的全文檢索字典。'; + $lang['strftsdictcreated'] = '全文檢索字典已創建'; + $lang['strftsdictcreatedbad'] = '全文檢索字典創建失敗。'; + $lang['strftslexize'] = '詞彙'; + $lang['strftsinit'] = '初始化'; + $lang['strftsoptionsvalues'] = '選項和值'; + $lang['strftsdictneedsname'] = '必須指定全文檢索字典名稱。'; + $lang['strftsdictdropped'] = '全文檢索字典已移除。'; + $lang['strftsdictdroppedbad'] = '全文檢索字典移除失敗。'; + $lang['strftsdictaltered'] = '全文檢索字典已修改。'; + $lang['strftsdictalteredbad'] = '全文檢索字典修改失敗。'; + $lang['strftsaddmapping'] = '增加映射'; + $lang['strftsspecifymappingtodrop'] = '必須最少指定一個映射來移除'; + $lang['strftsspecifyconfigtoalter'] = '必須指定一個全文檢索配置來修改'; + $lang['strftsmappingdropped'] = '全文檢索映射已刪除。'; + $lang['strftsmappingdroppedbad'] = '全文檢索映射移除失敗。'; + $lang['strftsnodictionaries'] = '查無字典。'; + $lang['strftsmappingaltered'] = '全文檢索映射已修改。'; + $lang['strftsmappingalteredbad'] = '全文檢索映射修改失敗。'; + $lang['strftsmappingadded'] = '全文檢索映射已增加。'; + $lang['strftsmappingaddedbad'] = '全文檢索映射增加失敗。'; + $lang['strftstabconfigs'] = '組態'; + $lang['strftstabdicts'] = '字典'; + $lang['strftstabparsers'] = '分析器'; + $lang['strftsaddmapping'] = '增加映射'; + $lang['strftsspecifymappingtodrop'] = '必须最少指定一个映射来移除'; + $lang['strftsspecifyconfigtoalter'] = '必须指定一个全文检索組態来修改'; + $lang['strftsmappingdropped'] = '全文检索映射已删除。'; + $lang['strftsmappingdroppedbad'] = '全文检索映射移除失败。'; + $lang['strftsnodictionaries'] = '查无字典。'; + $lang['strftsmappingaltered'] = '全文检索映射已修改。'; + $lang['strftsmappingalteredbad'] = '全文检索映射修改失败。'; + $lang['strftsmappingadded'] = '全文检索映射已增加。'; + $lang['strftsmappingaddedbad'] = '全文检索映射增加失败。'; + $lang['strftsmappingdropped'] = '全文检索映射已删除。'; + $lang['strftsmappingdroppedbad'] = '全文检索映射移除失败。'; + $lang['strftstabconfigs'] = '組態'; + $lang['strftstabdicts'] = '字典'; + $lang['strftstabparsers'] = '分析器'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/czech.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/czech.php new file mode 100644 index 00000000..c8f79866 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/czech.php @@ -0,0 +1,897 @@ +<?php + + /** + * Czech language file for phpPgAdmin. Based on Englis file. + * Translators: marek@manet.cz + * + * $Id: czech.php,v 1.232 2010/08/27 16:34:33 ioguix Exp $ + */ + + // Language and character set + $lang['applang'] = 'Česky'; + $lang['applocale'] = 'cs-CZ'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Vítejte v phpPgAdmin.'; + $lang['strppahome'] = 'Domovská stránka phpPgAdmin'; + $lang['strpgsqlhome'] = 'Domovská stránka PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Lokální dokumentace k PostgreSQL'; + $lang['strreportbug'] = 'Nahlásit chybu'; + $lang['strviewfaq'] = 'Přečíst si časté dotazy a odpovědi'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Přihlásit'; + $lang['strloginfailed'] = 'Přihlášení se nezdařilo'; + $lang['strlogindisallowed'] = 'Z bezpečnostních důvodů není přihlášení povoleno.'; + $lang['strserver'] = 'Server'; + $lang['strservers'] = 'Servery'; + $lang['strgroupservers'] = 'Servery ve skupině „%s“'; + $lang['strallservers'] = 'Všechny servery'; + $lang['strintroduction'] = 'Úvodní stránka'; + $lang['strhost'] = 'Hostitel'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Odhlásit'; + $lang['strowner'] = 'Vlastník'; + $lang['straction'] = 'Akce'; + $lang['stractions'] = 'Akce'; + $lang['strname'] = 'Název'; + $lang['strdefinition'] = 'Definice'; + $lang['strproperties'] = 'Vlastnosti'; + $lang['strbrowse'] = 'Procházet'; + $lang['strenable'] = 'Povolit'; + $lang['strdisable'] = 'Zakázat'; + $lang['strdrop'] = 'Odstranit'; + $lang['strdropped'] = 'Odstraněno'; + $lang['strnull'] = 'Prázdný'; + $lang['strnotnull'] = 'Neprázdný'; + $lang['strprev'] = '< Předchozí'; + $lang['strnext'] = 'Následující >'; + $lang['strfirst'] = '<< První'; + $lang['strlast'] = 'Poslední >>'; + $lang['strfailed'] = 'Nezdařilo se'; + $lang['strcreate'] = 'Vytvořit'; + $lang['strcreated'] = 'Vytvořeno'; + $lang['strcomment'] = 'Komentář'; + $lang['strlength'] = 'Délka'; + $lang['strdefault'] = 'Výchozí'; + $lang['stralter'] = 'Změnit'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Storno'; + $lang['strkill'] = 'Zabít'; + $lang['strac'] = 'Povolit automatické dokončení'; + $lang['strsave'] = 'Uložit'; + $lang['strreset'] = 'Resetovat'; + $lang['strrestart'] = 'Restartovat'; + $lang['strinsert'] = 'Vložit'; + $lang['strselect'] = 'Vybrat'; + $lang['strdelete'] = 'Smazat'; + $lang['strupdate'] = 'Aktualizovat'; + $lang['strreferences'] = 'Odkazy'; + $lang['stryes'] = 'Ano'; + $lang['strno'] = 'Ne'; + $lang['strtrue'] = 'PRAVDA'; + $lang['strfalse'] = 'NEPRAVDA'; + $lang['stredit'] = 'Upravit'; + $lang['strcolumn'] = 'Sloupec'; + $lang['strcolumns'] = 'Sloupce'; + $lang['strrows'] = 'řádků'; + $lang['strrowsaff'] = 'řádků změněno.'; + $lang['strobjects'] = 'objektů'; + $lang['strback'] = 'Zpět'; + $lang['strqueryresults'] = 'Výsledky dotazu'; + $lang['strshow'] = 'Zobrazit'; + $lang['strempty'] = 'Vyprázdnit'; + $lang['strlanguage'] = 'Jazyk'; + $lang['strencoding'] = 'Kódování'; + $lang['strvalue'] = 'Hodnota'; + $lang['strunique'] = 'Jedinečný'; + $lang['strprimary'] = 'Primární'; + $lang['strexport'] = 'Export'; + $lang['strimport'] = 'Import'; + $lang['strallowednulls'] = 'Povolené nulové znaky'; + $lang['strbackslashn'] = '\n'; + $lang['stremptystring'] = 'Prázdné řetězce/pole'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Správa'; + $lang['strvacuum'] = 'Uklidit'; + $lang['stranalyze'] = 'Analyzovat'; + $lang['strclusterindex'] = 'Přeskupit'; + $lang['strclustered'] = 'Přeskupeno?'; + $lang['strreindex'] = 'Přeindexovat'; + $lang['strexecute'] = 'Provést'; + $lang['stradd'] = 'Přidat'; + $lang['strevent'] = 'Událost'; + $lang['strwhere'] = 'Kde'; + $lang['strinstead'] = 'Místo původního'; + $lang['strwhen'] = 'Kdy'; + $lang['strformat'] = 'Formát'; + $lang['strdata'] = 'Data'; + $lang['strconfirm'] = 'Potvrzení'; + $lang['strexpression'] = 'Výraz'; + $lang['strellipsis'] = '…'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Rozbalit'; + $lang['strcollapse'] = 'Sbalit'; + $lang['strfind'] = 'Hledat'; + $lang['stroptions'] = 'Volby'; + $lang['strrefresh'] = 'Občerstvit'; + $lang['strdownload'] = 'Stáhnout'; + $lang['strdownloadgzipped'] = 'Stáhnout komprimované pomocí gzip'; + $lang['strinfo'] = 'Informace'; + $lang['stroids'] = 'OID'; + $lang['stradvanced'] = 'Pokročilé'; + $lang['strvariables'] = 'Proměnné'; + $lang['strprocess'] = 'Proces'; + $lang['strprocesses'] = 'Procesy'; + $lang['strsetting'] = 'Nastavení'; + $lang['streditsql'] = 'Upravit SQL'; + $lang['strruntime'] = 'Celková doba běhu: %s ms'; + $lang['strpaginate'] = 'Stránkovat výsledky'; + $lang['struploadscript'] = 'nebo nahrajte skript SQL:'; + $lang['strstarttime'] = 'Čas spuštění'; + $lang['strfile'] = 'Soubor'; + $lang['strfileimported'] = 'Soubor byl importován.'; + $lang['strtrycred'] = 'Použít tato prověření pro všechny servery'; + $lang['strconfdropcred'] = 'Odpojením se z bezpečnostních důvodů smažou vaše sdílené připojovací informace. Opravdu se chcete odpojit?'; + $lang['stractionsonmultiplelines'] = 'Akce pro víc řádků'; + $lang['strselectall'] = 'Vybrat vše'; + $lang['strunselectall'] = 'Zrušit výběr'; + $lang['strlocale'] = 'Místní nastavení'; + $lang['strcollation'] = 'Řazení'; + $lang['strctype'] = 'Typ znaku'; + $lang['strdefaultvalues'] = 'Výchozí hodnoty'; + $lang['strnewvalues'] = 'Nové hodnoty'; + $lang['strstart'] = 'Spustit'; + $lang['strstop'] = 'Zastavit'; + $lang['strgotoppage'] = 'zpět nahoru'; + $lang['strtheme'] = 'Motiv'; + $lang['strcluster'] = 'Klastr'; + + // Admin + $lang['stradminondatabase'] = 'Následující úlohy správy použít na celou databázi %s.'; + $lang['stradminontable'] = 'Následující úlohy správy použít na tabulku %s.'; + + // User-supplied SQL history + $lang['strhistory'] = 'Historie'; + $lang['strnohistory'] = 'Bez historie.'; + $lang['strclearhistory'] = 'Smazat historii'; + $lang['strdelhistory'] = 'Odebrat z historie'; + $lang['strconfdelhistory'] = 'Opravdu tento požadavek odebrat z historie?'; + $lang['strconfclearhistory'] = 'Skutečně smazat historii?'; + $lang['strnodatabaseselected'] = 'Zvolte prosím databázi.'; + + // Database sizes + $lang['strnoaccess'] = 'Bez přístupu'; + $lang['strsize'] = 'Velikost'; + $lang['strbytes'] = 'B'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Tato aplikace pracuje nejlépe, pokud jsou v prohlížeči povolené rámy. Může ale pracovat i bez rámů, stačí kliknout na následující odkaz.'; + $lang['strnoframeslink'] = 'Použít bez rámů'; + $lang['strbadconfig'] = 'Váš config.inc.php je zastaralý. Potřebujete jej vygenerovat znovu z nového config.inc.php-dist.'; + $lang['strnotloaded'] = 'Vaše instalace PHP nepodporuje PostgreSQL. Potřebujete znovu přeložit PHP s použitím volby --with-pgsql.'; + $lang['strpostgresqlversionnotsupported'] = 'Verze PostgreSQL není podporovaná. Přejděte prosím na verzi %s nebo novější.'; + $lang['strbadschema'] = 'Zadáno neplatné schéma.'; + $lang['strbadencoding'] = 'Nezdařilo se nastavit kódování klienta v databázi.'; + $lang['strsqlerror'] = 'Chyba SQL:'; + $lang['strinstatement'] = 'Ve výrazu:'; + $lang['strinvalidparam'] = 'Neplatné parametry skriptu.'; + $lang['strnodata'] = 'Nenalezen žádný řádek.'; + $lang['strnoobjects'] = 'Nenalezen žádný objekt.'; + $lang['strrownotunique'] = 'Pro tento řádek neexistuje jedinečný identifikátor.'; + $lang['strnouploads'] = 'Je zakázané nahrávání souborů.'; + $lang['strimporterror'] = 'Chyba při importu.'; + $lang['strimporterror-fileformat'] = 'Chyba při importu: Nezdařilo se automaticky zjistit formát souboru.'; + $lang['strimporterrorline'] = 'Chyba při importu na řádku %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Chyba při importu na řádku %s: Řádek nemá správný počet sloupců.'; + $lang['strimporterror-uploadedfile'] = 'Chyba při importu: Soubor nelze nahrát na server'; + $lang['strcannotdumponwindows'] = 'Ve Windows není podporovaný výpis názvů komplexních tabulek a schémat.'; + $lang['strinvalidserverparam'] = 'Pokus o připojení s neplatnými parametry serveru, možná se někdo snaží neoprávněně napojit do vašeho systému.'; + $lang['strnoserversupplied'] = 'Není nabízen žádný server!'; + $lang['strbadpgdumppath'] = 'Chyba při exportu: Nezdařilo se spustit pg_dump (s cestou danou ve vašem conf/config.inc.php: %s). Opravte prosím cestu ve svém nastavení a zkuste to znovu.'; + $lang['strbadpgdumpallpath'] = 'Chyba při exportu: Nezdařilo se spustit pg_dumpall (s cestou danou ve vašem conf/config.inc.php: %s). Opravte prosím cestu ve svém nastavení a zkuste to znovu.'; + $lang['strconnectionfail'] = 'Nelze se připojit k serveru.'; + + // Tables + $lang['strtable'] = 'Tabulka'; + $lang['strtables'] = 'Tabulky'; + $lang['strshowalltables'] = 'Zobrazit všechny tabulky'; + $lang['strnotables'] = 'Nenalezeny žádné tabulky.'; + $lang['strnotable'] = 'Nenalezena žádná tabulka.'; + $lang['strcreatetable'] = 'Vytvořit tabulku'; + $lang['strcreatetablelike'] = 'Vytvořit tabulku podle'; + $lang['strcreatetablelikeparent'] = 'Zdrojová tabulka'; + $lang['strcreatelikewithdefaults'] = 'Včetně výchozích'; + $lang['strcreatelikewithconstraints'] = 'Včetně omezení'; + $lang['strcreatelikewithindexes'] = 'Včetně indexů'; + $lang['strtablename'] = 'Název tabulky'; + $lang['strtableneedsname'] = 'Musíte zadat název pro tabulku.'; + $lang['strtablelikeneedslike'] = 'Musíte zvolit, z které tabulky se budou vlastnosti kopírovat.'; + $lang['strtableneedsfield'] = 'Musíte zadat nejméně jedno pole.'; + $lang['strtableneedscols'] = 'Musíte zadat platný počet sloupců.'; + $lang['strtablecreated'] = 'Tabulka byla vytvořena.'; + $lang['strtablecreatedbad'] = 'Nezdařilo se vytvořit tabulku.'; + $lang['strconfdroptable'] = 'Opravdu chcete odstranit tabulku „%s“?'; + $lang['strtabledropped'] = 'Tabulka byla odstraněna.'; + $lang['strtabledroppedbad'] = 'Nezdařilo se odstranit tabulku.'; + $lang['strconfemptytable'] = 'Opravdu chcete vyprázdnit tabulku „%s“?'; + $lang['strtableemptied'] = 'Tabulka byla vyprázdněna.'; + $lang['strtableemptiedbad'] = 'Nezdařilo se vyprázdnit tabulku.'; + $lang['strinsertrow'] = 'Vložit řádek'; + $lang['strrowinserted'] = 'Řádek byl vložen.'; + $lang['strrowinsertedbad'] = 'Nezdařilo se vložit řádek.'; + $lang['strnofkref'] = 'Cizímu klíči %s neodpovídá žádná hodnota.'; + $lang['strrowduplicate'] = 'Nezdařilo se vložení řádku, pokus o duplicitní vložení.'; + $lang['streditrow'] = 'Upravit řádek'; + $lang['strrowupdated'] = 'Řádek byl aktualizován.'; + $lang['strrowupdatedbad'] = 'Nezdařilo se aktualizovat řádek.'; + $lang['strdeleterow'] = 'Smazat řádek'; + $lang['strconfdeleterow'] = 'Opravdu chcete smazat tento řádek?'; + $lang['strrowdeleted'] = 'Řádek byl smazán.'; + $lang['strrowdeletedbad'] = 'Nezdařilo se smazat řádek.'; + $lang['strinsertandrepeat'] = 'Vloži a opakovat'; + $lang['strnumcols'] = 'Počet sloupců'; + $lang['strcolneedsname'] = 'Musíte zadat název pro sloupec'; + $lang['strselectallfields'] = 'Vybrat všechna pole'; + $lang['strselectneedscol'] = 'Musíte zvolit alespoň jeden sloupec, který se má zobrazit.'; + $lang['strselectunary'] = 'Unární operátory nemohou mít hodnoty.'; + $lang['strcolumnaltered'] = 'Změny v sloupci byly provedeny.'; + $lang['strcolumnalteredbad'] = 'Nezdařilo se provést změny v sloupci.'; + $lang['strconfdropcolumn'] = 'Opravdu chcete odstranit sloupec „%s“ z tabulky „%s“?'; + $lang['strcolumndropped'] = 'Sloupec byl odstraněn.'; + $lang['strcolumndroppedbad'] = 'Nezdařilo se odstranit sloupec.'; + $lang['straddcolumn'] = 'Přidat sloupec'; + $lang['strcolumnadded'] = 'Sloupec byl přidán.'; + $lang['strcolumnaddedbad'] = 'Nezdařilo se přidat sloupec.'; + $lang['strcascade'] = 'Kaskádovitě'; + $lang['strtablealtered'] = 'Změny v tabulce byly provedeny.'; + $lang['strtablealteredbad'] = 'Nezdařilo se provést změny v tabulce.'; + $lang['strdataonly'] = 'Pouze data'; + $lang['strstructureonly'] = 'Pouze strukturu'; + $lang['strstructureanddata'] = 'Strukturu a data'; + $lang['strtabbed'] = 'S tabulátory'; + $lang['strauto'] = 'Automaticky'; + $lang['strconfvacuumtable'] = 'Opravdu chcete provést úklid „%s“?'; + $lang['strconfanalyzetable'] = 'Opravdu chcete analyzovat „%s“?'; + $lang['strconfreindextable'] = 'Opravdu chcete přeindexovat „%s“?'; + $lang['strconfclustertable'] = 'Opravdu chcete přeskupit "%s"?'; + $lang['strestimatedrowcount'] = 'Odhadnutý počet řádků'; + $lang['strspecifytabletoanalyze'] = 'Pokud chcete analyzovat tabulky, tak musíte nejméně jednu vybrat.'; + $lang['strspecifytabletoempty'] = 'Pokud chcete vyprázdnit tabulky, tak musíte nejméně jednu vybrat.'; + $lang['strspecifytabletodrop'] = 'Pokud chcete odstranit tabulky, tak musíte nejméně jednu vybrat.'; + $lang['strspecifytabletovacuum'] = 'Pokud chcete provést úklid tabulek, tak musíte nejméně jednu vybrat.'; + $lang['strspecifytabletoreindex'] = 'Pokud chcete přeindexovat tabulku, tak musíte nejméně jednu vybrat.'; + $lang['strspecifytabletocluster'] = 'Pokud chcete přeskupit tabulku, tak musíte nejméně jednu vybrat.'; + $lang['strnofieldsforinsert'] = 'Nemůžete vložit řádek do tabulky, která nemá žádné sloupce.'; + + // Columns + $lang['strcolprop'] = 'Vlastnosti sloupce'; + $lang['strnotableprovided'] = 'Není k dispozici žádná tabulka!'; + + // Users + $lang['struser'] = 'Uživatel'; + $lang['strusers'] = 'Uživatelé'; + $lang['strusername'] = 'Jméno uživatele'; + $lang['strpassword'] = 'Heslo'; + $lang['strsuper'] = 'Superuživatel?'; + $lang['strcreatedb'] = 'Vytvářet DB?'; + $lang['strexpires'] = 'Ztratí platnost'; + $lang['strsessiondefaults'] = 'Výchozí hodnoty sezení'; + $lang['strnousers'] = 'Nenalezeni žádní uživatelé.'; + $lang['struserupdated'] = 'Uživatel byl aktualizován'; + $lang['struserupdatedbad'] = 'Nezdařilo se aktualizovat uživatele.'; + $lang['strshowallusers'] = 'Zobrazit všechny uživatele'; + $lang['strcreateuser'] = 'Vytvořit uživatele'; + $lang['struserneedsname'] = 'Musíte zadat jméno uživatele.'; + $lang['strusercreated'] = 'Uživatel byl vytvořen.'; + $lang['strusercreatedbad'] = 'Nezdařilo se vytvořit uživatele.'; + $lang['strconfdropuser'] = 'Opravdu chcete odstranit uživatele „%s“?'; + $lang['struserdropped'] = 'Uživatel byl odstraněn.'; + $lang['struserdroppedbad'] = 'Nezdařilo se odstranit uživatele.'; + $lang['straccount'] = 'Účet'; + $lang['strchangepassword'] = 'Změnit heslo'; + $lang['strpasswordchanged'] = 'Heslo bylo změněno.'; + $lang['strpasswordchangedbad'] = 'Nezdařilo se změnit heslo.'; + $lang['strpasswordshort'] = 'Heslo je příliš krátké.'; + $lang['strpasswordconfirm'] = 'Heslo a jeho potvrzení nejsou shodné.'; + + // Groups + $lang['strgroup'] = 'Skupina'; + $lang['strgroups'] = 'Skupiny'; + $lang['strshowallgroups'] = 'Zobrazit všechny skupiny'; + $lang['strnogroup'] = 'Skupina nebyla nalezena.'; + $lang['strnogroups'] = 'Nebyly nalezeny žádné skupiny.'; + $lang['strcreategroup'] = 'Vytvořit skupinu'; + $lang['strgroupneedsname'] = 'Musíte zadat název pro skupinu.'; + $lang['strgroupcreated'] = 'Skupina byly vytvořena.'; + $lang['strgroupcreatedbad'] = 'Nezdařilo se vytvořit skupinu.'; + $lang['strconfdropgroup'] = 'Opravdu chcete odstranit skupinu „%s“?'; + $lang['strgroupdropped'] = 'Skupiny byla odstraněna.'; + $lang['strgroupdroppedbad'] = 'Nezdařilo se odstranit skupinu.'; + $lang['strmembers'] = 'Členové'; + $lang['strmemberof'] = 'Členem v'; + $lang['stradminmembers'] = 'Členové správci'; + $lang['straddmember'] = 'Přidat člena'; + $lang['strmemberadded'] = 'Člen byl přidán.'; + $lang['strmemberaddedbad'] = 'Nezdařilo se přidat člena.'; + $lang['strdropmember'] = 'Odebrat člena'; + $lang['strconfdropmember'] = 'Opravdu chcete odebrat člena „%s“ ze skupiny „%s“?'; + $lang['strmemberdropped'] = 'Člen byl odebrán.'; + $lang['strmemberdroppedbad'] = 'Nezdařilo se odebrat člena.'; + + // Roles + $lang['strrole'] = 'Role'; + $lang['strroles'] = 'Role'; + $lang['strshowallroles'] = 'Zobrazit všechny role'; + $lang['strnoroles'] = 'Nenalezena žádná role.'; + $lang['strinheritsprivs'] = 'Dědit oprávnění?'; + $lang['strcreaterole'] = 'Vytvořit roli'; + $lang['strcancreaterole'] = 'Vytvářet role?'; + $lang['strrolecreated'] = 'Role byl vytvořena.'; + $lang['strrolecreatedbad'] = 'Nezdařilo se vytvořit roli.'; + $lang['strrolealtered'] = 'Změny v roli byly provedeny.'; + $lang['strrolealteredbad'] = 'Nezdařilo se provést změny v roli.'; + $lang['strcanlogin'] = 'Přihlašovat se?'; + $lang['strconnlimit'] = 'Omezení připojení'; + $lang['strdroprole'] = 'Odstranit roli'; + $lang['strconfdroprole'] = 'Opravdu chcete odstranit roli „%s“?'; + $lang['strroledropped'] = 'Role byla odstraněna.'; + $lang['strroledroppedbad'] = 'Nezdařilo se odstranit roli.'; + $lang['strnolimit'] = 'Bez omezení'; + $lang['strnever'] = 'Nikdy'; + $lang['strroleneedsname'] = 'Musíte zadat název pro roli.'; + + // Privileges + $lang['strprivilege'] = 'Oprávnění'; + $lang['strprivileges'] = 'Oprávnění'; + $lang['strnoprivileges'] = 'Tento objekt má oprávnění výchozího vlastníka.'; + $lang['strgrant'] = 'Přidělit'; + $lang['strrevoke'] = 'Odepřít'; + $lang['strgranted'] = 'Oprávnění byla změněna.'; + $lang['strgrantfailed'] = 'Nezdařilo se změnit oprávnění.'; + $lang['strgrantbad'] = 'Musíte zvolit nejméně jednoho uživatele nebo skupinu a nejméně jedno oprávnění.'; + $lang['strgrantor'] = 'Přidělil'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Databáze'; + $lang['strdatabases'] = 'Databáze'; + $lang['strshowalldatabases'] = 'Zobrazit všechny databáze'; + $lang['strnodatabases'] = 'Žádné databáze nenalezeny.'; + $lang['strcreatedatabase'] = 'Vytvořit databázi'; + $lang['strdatabasename'] = 'Název databáze'; + $lang['strdatabaseneedsname'] = 'Musíte zadat název pro databázi.'; + $lang['strdatabasecreated'] = 'Databáze byla vytvořena.'; + $lang['strdatabasecreatedbad'] = 'Nezdařilo se vytvořit databázi.'; + $lang['strconfdropdatabase'] = 'Opravdu chcete odstranit databázi „%s“?'; + $lang['strdatabasedropped'] = 'Databáze byla odstraněna.'; + $lang['strdatabasedroppedbad'] = 'Nezdařilo se odstranit databázi.'; + $lang['strentersql'] = 'Zadejte dotaz SQL, který chcete provést:'; + $lang['strsqlexecuted'] = 'Dotaz SQL byl proveden.'; + $lang['strvacuumgood'] = 'Úklid byl dokončen.'; + $lang['strvacuumbad'] = 'Úklid se nezdařil.'; + $lang['stranalyzegood'] = 'Analýza byla dokončena.'; + $lang['stranalyzebad'] = 'Analýza se nezdařila.'; + $lang['strreindexgood'] = 'Přeindexace byla dokončena.'; + $lang['strreindexbad'] = 'Přeindexace se nezdařila.'; + $lang['strfull'] = 'Úplný'; + $lang['strfreeze'] = 'Zmrazit'; + $lang['strforce'] = 'Vynutit'; + $lang['strsignalsent'] = 'Signál byl odeslán.'; + $lang['strsignalsentbad'] = 'Signál se nezdařilo odeslat.'; + $lang['strallobjects'] = 'Všechny objekty'; + $lang['strdatabasealtered'] = 'Změny v databázi byly provedeny.'; + $lang['strdatabasealteredbad'] = 'Nezdařilo se provést změny v databázi.'; + $lang['strspecifydatabasetodrop'] = 'Pokud chcete odstranit databáze, tak musíte nejméně jednu vybrat.'; + $lang['strtemplatedb'] = 'Šablona'; + $lang['strconfanalyzedatabase'] = 'Opravdu chcete analyzovat všechny tabulky v databázi „%s“?'; + $lang['strconfvacuumdatabase'] = 'Opravdu chcete uklidit všechny tabulky v databázi „%s“?'; + $lang['strconfreindexdatabase'] = 'Opravdu chcete přeindexovat všechny tabulky v databázi „%s“?'; + $lang['strconfclusterdatabase'] = 'Opravdu chcete přeskupit všechny tabulky v databázi „%s“?'; + + // Views + $lang['strview'] = 'Pohled'; + $lang['strviews'] = 'Pohledy'; + $lang['strshowallviews'] = 'Zobrazit všechny pohledy'; + $lang['strnoview'] = 'Nenalezen žádný pohled.'; + $lang['strnoviews'] = 'Nenalezeny žádné pohledy.'; + $lang['strcreateview'] = 'Vytvořit pohled'; + $lang['strviewname'] = 'Název pohledu'; + $lang['strviewneedsname'] = 'Musíte zadat název pro pohled.'; + $lang['strviewneedsdef'] = 'Musíte zadat definici pro pohled.'; + $lang['strviewneedsfields'] = 'Musíte zvolit, které sloupce chcete v pohledu mít.'; + $lang['strviewcreated'] = 'Pohled vytvořen.'; + $lang['strviewcreatedbad'] = 'Pohled se nezdařilo vytvořit.'; + $lang['strconfdropview'] = 'Opravdu chcete odstranit pohled „%s“?'; + $lang['strviewdropped'] = 'Pohled byl odstraněn.'; + $lang['strviewdroppedbad'] = 'Pohled se nezdařilo odstranit.'; + $lang['strviewupdated'] = 'Pohled byl aktualizován.'; + $lang['strviewupdatedbad'] = 'Pohled se nezdařilo aktualizovat.'; + $lang['strviewlink'] = 'Propojovací klíče'; + $lang['strviewconditions'] = 'Doplňující podmínky'; + $lang['strcreateviewwiz'] = 'Vytvořit pohled pomocí průvodce'; + $lang['strrenamedupfields'] = 'Duplicitní pole přejmenovat'; + $lang['strdropdupfields'] = 'Duplicitní pole odstranit'; + $lang['strerrordupfields'] = 'V případě duplicitních polí ohlásit chybu'; + $lang['strviewaltered'] = 'Změny v pohledu byly provedeny.'; + $lang['strviewalteredbad'] = 'Nezdařilo se provést změny v pohledu.'; + $lang['strspecifyviewtodrop'] = 'Pokud chcete odstranit pohledy, tak musíte nejméně jeden vybrat.'; + + // Sequences + $lang['strsequence'] = 'Sekvence'; + $lang['strsequences'] = 'Sekvence'; + $lang['strshowallsequences'] = 'Zobrazit všechny sekvence'; + $lang['strnosequence'] = 'Nenalezena žádná sekvence.'; + $lang['strnosequences'] = 'Nenalezeny žádné sekvence.'; + $lang['strcreatesequence'] = 'Vytvořit sekvenci'; + $lang['strlastvalue'] = 'Poslední hodnota'; + $lang['strincrementby'] = 'Přírůstek'; + $lang['strstartvalue'] = 'Počáteční hodnota'; + $lang['strrestartvalue'] = 'Nová počáteční hodnota'; + $lang['strmaxvalue'] = 'Max. hodnota'; + $lang['strminvalue'] = 'Min. hodnota'; + $lang['strcachevalue'] = 'Připraveno dopředu'; + $lang['strlogcount'] = 'Dostupných hodnot bez zápisu (log_cnt)'; + $lang['strcancycle'] = 'Cyklicky?'; + $lang['striscalled'] = 'Zvýšit před vrácením následující (is_called)?'; + $lang['strsequenceneedsname'] = 'Musíte zadat název pro sekvenci.'; + $lang['strsequencecreated'] = 'Sekvence byla vytvořena.'; + $lang['strsequencecreatedbad'] = 'Nezdařilo se vytvořit sekvenci.'; + $lang['strconfdropsequence'] = 'Opravdu chcete odstranit sekvenci „%s“?'; + $lang['strsequencedropped'] = 'Sekvence byla odstraněna.'; + $lang['strsequencedroppedbad'] = 'Nezdařilo se odstranit sekvenci.'; + $lang['strsequencerestart'] = 'Sekvence nastavena na novou počáteční hodnotu.'; + $lang['strsequencerestartbad'] = 'Nezdařilo se nastavit novou počáteční hodnotu sekvence.'; + $lang['strsequencereset'] = 'Sekvence byla nastavena na počáteční hodnotu.'; + $lang['strsequenceresetbad'] = 'Nezdařilo se nastavit počáteční hodnotu sekvence.'; + $lang['strsequencealtered'] = 'Změny v sekvenci byly provedeny.'; + $lang['strsequencealteredbad'] = 'Nezdařilo se provést změny v sekvenci.'; + $lang['strsetval'] = 'Nastavit hodnotu'; + $lang['strsequencesetval'] = 'Hodnota sekvence byla nastavena.'; + $lang['strsequencesetvalbad'] = 'Nezdařilo se změnit hodnotu sekvence.'; + $lang['strnextval'] = 'Zvýšit hodnotu'; + $lang['strsequencenextval'] = 'Hodnota sekvence byla zvýšena.'; + $lang['strsequencenextvalbad'] = 'Nezdařilo se zvýšit hodnotu sekvence.'; + $lang['strspecifysequencetodrop'] = 'Pokud chcete odstranit sekvence, tak musíte nejméně jednu vybrat.'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Indexy'; + $lang['strindexname'] = 'Název indexu'; + $lang['strshowallindexes'] = 'Zobrazit všechny indexy'; + $lang['strnoindex'] = 'Nenalezen žádný index.'; + $lang['strnoindexes'] = 'Nenalezeny žádné indexy.'; + $lang['strcreateindex'] = 'Vytvořit index'; + $lang['strtabname'] = 'Název tabulky'; + $lang['strcolumnname'] = 'Název sloupce'; + $lang['strindexneedsname'] = 'Musíte zadat název pro index.'; + $lang['strindexneedscols'] = 'Index musí obsahovat nejméně jeden sloupec.'; + $lang['strindexcreated'] = 'Index byl vytvořen.'; + $lang['strindexcreatedbad'] = 'Nezdařilo se vytvořit index.'; + $lang['strconfdropindex'] = 'Opravdu chcete odstranit index „%s“?'; + $lang['strindexdropped'] = 'Index byl odstraněn.'; + $lang['strindexdroppedbad'] = 'Nezdařilo se odstranit index.'; + $lang['strkeyname'] = 'Název klíče'; + $lang['struniquekey'] = 'Jedinečný klíč'; + $lang['strprimarykey'] = 'Primární klíč'; + $lang['strindextype'] = 'Typ indexu'; + $lang['strtablecolumnlist'] = 'Sloupce v tabulce'; + $lang['strindexcolumnlist'] = 'Sloupce v indexu'; + $lang['strclusteredgood'] = 'Přeskupení dokončeno.'; + $lang['strclusteredbad'] = 'Přeskupení se nezdařilo.'; + $lang['strconcurrently'] = 'Souběžně'; + $lang['strnoclusteravailable'] = 'Tabulka není přeskupena podle indexu.'; + + // Rules + $lang['strrules'] = 'Pravidla'; + $lang['strrule'] = 'Pravidlo'; + $lang['strshowallrules'] = 'Zobrazit všechna pravidla'; + $lang['strnorule'] = 'Nenalezeno žádné pravidlo.'; + $lang['strnorules'] = 'Nenalezena žádná pravidla.'; + $lang['strcreaterule'] = 'Vytvořit pravidlo'; + $lang['strrulename'] = 'Název pravidla'; + $lang['strruleneedsname'] = 'Musíte zadat název pro pravidlo.'; + $lang['strrulecreated'] = 'Pravidlo bylo vytvořeno.'; + $lang['strrulecreatedbad'] = 'Nezdařilo se vytvořit pravidlo.'; + $lang['strconfdroprule'] = 'Opravdu chcete odstranit pravidlo „%s“ na „%s“?'; + $lang['strruledropped'] = 'Pravidlo bylo odstraněno.'; + $lang['strruledroppedbad'] = 'Nezdařilo se odstranit pravidlo.'; + + // Constraints + $lang['strconstraint'] = 'Omezení'; + $lang['strconstraints'] = 'Omezení'; + $lang['strshowallconstraints'] = 'Zobrazit všechna omezení'; + $lang['strnoconstraints'] = 'Nenalezena žádná omezení.'; + $lang['strcreateconstraint'] = 'Vytvořit omezení'; + $lang['strconstraintcreated'] = 'Omezení bylo vytvořeno.'; + $lang['strconstraintcreatedbad'] = 'Nezdařilo se vytvořit omezení.'; + $lang['strconfdropconstraint'] = 'Opravdu chcete odstranit omezení „%s“ na „%s“?'; + $lang['strconstraintdropped'] = 'Omezení bylo odstraněno.'; + $lang['strconstraintdroppedbad'] = 'Nezdařilo se odstranit omezení.'; + $lang['straddcheck'] = 'Přidat kontrolu'; + $lang['strcheckneedsdefinition'] = 'Musíte zadat definici kontroly.'; + $lang['strcheckadded'] = 'Kontrola byla přidána.'; + $lang['strcheckaddedbad'] = 'Nezdařilo se přidat kontrolu.'; + $lang['straddpk'] = 'Přidat primární klíč'; + $lang['strpkneedscols'] = 'Primární klíč musí obsahovat nejméně jeden sloupec.'; + $lang['strpkadded'] = 'Primární klíč byl přidán.'; + $lang['strpkaddedbad'] = 'Nezdařilo se přidat primární klíč.'; + $lang['stradduniq'] = 'Přidat jedinečný klíč'; + $lang['struniqneedscols'] = 'Jedinečný klíč musí obsahovat nejméně jeden sloupec.'; + $lang['struniqadded'] = 'Jedinečný klíč byl přidán.'; + $lang['struniqaddedbad'] = 'Nezdařilo se přidat jedinečný klíč.'; + $lang['straddfk'] = 'Přidat cizí klíč'; + $lang['strfkneedscols'] = 'Cizí klíč musí obsahovat nejméně jeden sloupec.'; + $lang['strfkneedstarget'] = 'Musíte zadat cílovou tabulku, na kterou se cizí klíč odkazuje.'; + $lang['strfkadded'] = 'Cizí klíč byl přidán.'; + $lang['strfkaddedbad'] = 'Nezdařilo se přidat cizí klíč.'; + $lang['strfktarget'] = 'Cílová tabulka'; + $lang['strfkcolumnlist'] = 'Sloupce v klíči'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Funkce'; + $lang['strfunctions'] = 'Funkce'; + $lang['strshowallfunctions'] = 'Zobrazit všechny funkce'; + $lang['strnofunction'] = 'Nenalezena žádná funkce.'; + $lang['strnofunctions'] = 'Nenalezeny žádné funkce.'; + $lang['strcreateplfunction'] = 'Vytvořit funkci SQL/PL'; + $lang['strcreateinternalfunction'] = 'Vytvořit interní funkci'; + $lang['strcreatecfunction'] = 'Vytvořit funkci C'; + $lang['strfunctionname'] = 'Název funkce'; + $lang['strreturns'] = 'Vrací'; + $lang['strproglanguage'] = 'Programovací jazyk'; + $lang['strfunctionneedsname'] = 'Musíte zadat název pro funkci.'; + $lang['strfunctionneedsdef'] = 'Musíte zadat definici pro funkci.'; + $lang['strfunctioncreated'] = 'Funkce byl vytvořena.'; + $lang['strfunctioncreatedbad'] = 'Nezdařilo se vytvořit funkci.'; + $lang['strconfdropfunction'] = 'Opravdu chcete odstranit funkci „%s“?'; + $lang['strfunctiondropped'] = 'Funkce byla odstraněna.'; + $lang['strfunctiondroppedbad'] = 'Nezdařilo se odstranit funkci.'; + $lang['strfunctionupdated'] = 'Funkce byla aktualizována.'; + $lang['strfunctionupdatedbad'] = 'Nezdařilo se aktualizovat funkci.'; + $lang['strobjectfile'] = 'Soubor s objektem'; + $lang['strlinksymbol'] = 'Napojený symbol'; + $lang['strarguments'] = 'Argumenty'; + $lang['strargmode'] = 'Režim'; + $lang['strargtype'] = 'Typ'; + $lang['strargadd'] = 'Přidat další argument'; + $lang['strargremove'] = 'Odebrat tento argument'; + $lang['strargnoargs'] = 'Tato funkce nepřebírá žádné argumenty.'; + $lang['strargenableargs'] = 'Povolit argumentům průchod do této funkce.'; + $lang['strargnorowabove'] = 'Nad tímto řádkem již žádný není.'; + $lang['strargnorowbelow'] = 'Pod tímto řádkem již žádný není.'; + $lang['strargraise'] = 'Přesunout výše.'; + $lang['strarglower'] = 'Přesunout níže.'; + $lang['strargremoveconfirm'] = 'Opravdu chcete odebrat tento argument? Operaci nelze vrátit zpět.'; + $lang['strfunctioncosting'] = 'Cena funkcí'; + $lang['strresultrows'] = 'Počet řádků'; + $lang['strexecutioncost'] = 'Cena provádění'; + $lang['strspecifyfunctiontodrop'] = 'Pokud chcete odstranit funkce, tak musíte nejméně jednu vybrat.'; + + // Triggers + $lang['strtrigger'] = 'Trigger'; + $lang['strtriggers'] = 'Triggery'; + $lang['strshowalltriggers'] = 'Zobrazit všechny triggery'; + $lang['strnotrigger'] = 'Nenalezen žádný trigger.'; + $lang['strnotriggers'] = 'Nenalezeny žádné triggery.'; + $lang['strcreatetrigger'] = 'Vytvořit trigger'; + $lang['strtriggerneedsname'] = 'Musíte zadat název pro trigger.'; + $lang['strtriggerneedsfunc'] = 'Musíte zvolit funkci pro trigger.'; + $lang['strtriggercreated'] = 'Trigger byl vytvořen.'; + $lang['strtriggercreatedbad'] = 'Nezdařilo se vytvořit trigger.'; + $lang['strconfdroptrigger'] = 'Opravdu chcete odstranit trigger „%s“ v „%s“?'; + $lang['strconfenabletrigger'] = 'Opravdu chcete povolit trigger „%s“ v „%s“?'; + $lang['strconfdisabletrigger'] = 'Opravdu chcete zakázat trigger „%s“ v „%s“?'; + $lang['strtriggerdropped'] = 'Trigger byl odstraněn.'; + $lang['strtriggerdroppedbad'] = 'Nezdařilo se odstranit trigger.'; + $lang['strtriggerenabled'] = 'Trigger byl povolen.'; + $lang['strtriggerenabledbad'] = 'Nezdařilo se povolit trigger.'; + $lang['strtriggerdisabled'] = 'Trigger byl zakázán.'; + $lang['strtriggerdisabledbad'] = 'Nezdařilo se zakázat trigger.'; + $lang['strtriggeraltered'] = 'Změny v triggeru byly provedeny.'; + $lang['strtriggeralteredbad'] = 'Nezdařilo se provést změny v triggeru.'; + $lang['strforeach'] = 'Pro každý'; + + // Types + $lang['strtype'] = 'Typ'; + $lang['strtypes'] = 'Typy'; + $lang['strshowalltypes'] = 'Zobrazit všechny typy'; + $lang['strnotype'] = 'Nenalezen žádný typ.'; + $lang['strnotypes'] = 'Nenalezeny žádné typy.'; + $lang['strcreatetype'] = 'Vytvořit externí typ'; + $lang['strcreatecomptype'] = 'Vytvořit složený typ'; + $lang['strcreateenumtype'] = 'Vytvořit výčtový typ'; + $lang['strtypeneedsfield'] = 'Musíte zadat nejméně jedno pole.'; + $lang['strtypeneedsvalue'] = 'Musíte zadat nejméně jednu hodnotu.'; + $lang['strtypeneedscols'] = 'Musíte zadat platný počet polí.'; + $lang['strtypeneedsvals'] = 'Musíte zadat platný počet hodnot.'; + $lang['strinputfn'] = 'Vstupní funkce'; + $lang['stroutputfn'] = 'Výstupní funkce'; + $lang['strpassbyval'] = 'Předávaný hodnotou?'; + $lang['stralignment'] = 'Zarovnání'; + $lang['strelement'] = 'Prvek'; + $lang['strdelimiter'] = 'Oddělovač'; + $lang['strstorage'] = 'Uložení'; + $lang['strfield'] = 'Pole'; + $lang['strnumfields'] = 'Počet polí'; + $lang['strnumvalues'] = 'Počet hodnot'; + $lang['strtypeneedsname'] = 'Musíte zadat název pro typ.'; + $lang['strtypeneedslen'] = 'Musíte zadat délku pro typ.'; + $lang['strtypecreated'] = 'Typ byl vytvořen.'; + $lang['strtypecreatedbad'] = 'Nezdařilo se vytvořit typ.'; + $lang['strconfdroptype'] = 'Opravdu chcete odstranit typ „%s“?'; + $lang['strtypedropped'] = 'Typ byl odstraněn.'; + $lang['strtypedroppedbad'] = 'Nezdařilo se odstranit typ.'; + $lang['strflavor'] = 'Druh'; + $lang['strbasetype'] = 'Základní'; + $lang['strcompositetype'] = 'Složený'; + $lang['strpseudotype'] = 'Pseudo'; + $lang['strenum'] = 'Výčtový'; + $lang['strenumvalues'] = 'Výčtové hodnoty'; + + // Schemas + $lang['strschema'] = 'Schéma'; + $lang['strschemas'] = 'Schémata'; + $lang['strshowallschemas'] = 'Zobrazit všechna schémata'; + $lang['strnoschema'] = 'Nebylo nalezeno žádné schéma.'; + $lang['strnoschemas'] = 'Nebyla nalezena žádná schémata.'; + $lang['strcreateschema'] = 'Vytvořit schéma'; + $lang['strschemaname'] = 'Název schématu'; + $lang['strschemaneedsname'] = 'Musíte zadat název pro schéma.'; + $lang['strschemacreated'] = 'Schéma bylo vytvořeno.'; + $lang['strschemacreatedbad'] = 'Nezdařilo se vytvořit schéma.'; + $lang['strconfdropschema'] = 'Opravdu chcete odstranit schéma „%s“?'; + $lang['strschemadropped'] = 'Schéma bylo odstraněno.'; + $lang['strschemadroppedbad'] = 'Nezdařilo se odstranit schéma.'; + $lang['strschemaaltered'] = 'Změny ve schématu byly provedeny.'; + $lang['strschemaalteredbad'] = 'Nezdařilo se provést změny ve schématu.'; + $lang['strsearchpath'] = 'Prohledávaná schémata'; + $lang['strspecifyschematodrop'] = 'Pokud chcete odstranit schémata, tak musíte nejméně jedno vybrat.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Doména'; + $lang['strdomains'] = 'Domény'; + $lang['strshowalldomains'] = 'Zobrazit všechny domény'; + $lang['strnodomains'] = 'Nebyly nalezeny žádné domény.'; + $lang['strcreatedomain'] = 'Vytvořit doménu'; + $lang['strdomaindropped'] = 'Doména byla odstraněna.'; + $lang['strdomaindroppedbad'] = 'Nezdařilo se odstranit doménu.'; + $lang['strconfdropdomain'] = 'Opravdu chcete odstranit doménu „%s“?'; + $lang['strdomainneedsname'] = 'Musíte zadat název pro doménu.'; + $lang['strdomaincreated'] = 'Doména byla vytvořena.'; + $lang['strdomaincreatedbad'] = 'Nezdařilo se vytvořit doménu.'; + $lang['strdomainaltered'] = 'Změny v doméně byly provedeny.'; + $lang['strdomainalteredbad'] = 'Nezdařilo se provést změny v doméně.'; + + // Operators + $lang['stroperator'] = 'Operátor'; + $lang['stroperators'] = 'Operátory'; + $lang['strshowalloperators'] = 'Zobrazit všechny operátory'; + $lang['strnooperator'] = 'Nebyl nalezen žádný operátor.'; + $lang['strnooperators'] = 'Nebyly nalezeny žádné operátory.'; + $lang['strcreateoperator'] = 'Vytvořit operátor'; + $lang['strleftarg'] = 'Levý operand'; + $lang['strrightarg'] = 'Pravý operand'; + $lang['strcommutator'] = 'Komutátor'; + $lang['strnegator'] = 'Negátor'; + $lang['strrestrict'] = 'Omezení'; + $lang['strjoin'] = 'Propojení'; + $lang['strhashes'] = 'Heše'; + $lang['strmerges'] = 'Slučování'; + $lang['strleftsort'] = 'Levé řazení'; + $lang['strrightsort'] = 'Pravé řazení'; + $lang['strlessthan'] = 'Operátor <'; + $lang['strgreaterthan'] = 'Operátor >'; + $lang['stroperatorneedsname'] = 'Musíte zadat název pro operátor.'; + $lang['stroperatorcreated'] = 'Operátor byl vytvořen.'; + $lang['stroperatorcreatedbad'] = 'Nezdařilo se vytvořit operátor.'; + $lang['strconfdropoperator'] = 'Opravdu chcete odstranit operátor „%s“?'; + $lang['stroperatordropped'] = 'Operátor byl odstraněn.'; + $lang['stroperatordroppedbad'] = 'Nezdařilo se odstranit operátor.'; + + // Casts + $lang['strcasts'] = 'Přetypování'; + $lang['strnocasts'] = 'Nenalezena žádná přetypování.'; + $lang['strsourcetype'] = 'Zdrojový typ'; + $lang['strtargettype'] = 'Cílový typ'; + $lang['strimplicit'] = 'Implicitní'; + $lang['strinassignment'] = 'V přiřazení'; + $lang['strbinarycompat'] = '(Binárně zaměnitelné)'; + + // Conversions + $lang['strconversions'] = 'Konverze'; + $lang['strnoconversions'] = 'Nenalezeny žádné konverze.'; + $lang['strsourceencoding'] = 'Zdrojové kódování'; + $lang['strtargetencoding'] = 'Cílové kódování'; + + // Languages + $lang['strlanguages'] = 'Jazyky'; + $lang['strnolanguages'] = 'Nenalezeny žádné jazyky.'; + $lang['strtrusted'] = 'Důvěryhodný'; + + // Info + $lang['strnoinfo'] = 'Nejsou dostupné žádné informace.'; + $lang['strreferringtables'] = 'Odkazující tabulky'; + $lang['strparenttables'] = 'Rodičovské tabulky'; + $lang['strchildtables'] = 'Dceřiné tabulky'; + + // Aggregates + $lang['straggregate'] = 'Agregační funkce'; + $lang['straggregates'] = 'Agregační funkce'; + $lang['strnoaggregates'] = 'Nebyly nalezeny žádné agregační funkce.'; + $lang['stralltypes'] = '(Všechny typy)'; + $lang['strcreateaggregate'] = 'Vytvořit agregační funkci'; + $lang['straggrbasetype'] = 'Typ vstupních dat'; + $lang['straggrsfunc'] = 'Funkce stavového přechodu'; + $lang['straggrstype'] = 'Datový typ stavové hodnoty'; + $lang['straggrffunc'] = 'Finální funkce'; + $lang['straggrinitcond'] = 'Počáteční podmínka'; + $lang['straggrsortop'] = 'Operátor řazení'; + $lang['strconfdropaggregate'] = 'Opravdu chcete odstranit agregační funkci „%s“?'; + $lang['straggregatedropped'] = 'Agregační funkce byla odstraněna.'; + $lang['straggregatedroppedbad'] = 'Nezdařilo se odstranit agregační funkci.'; + $lang['straggraltered'] = 'Změny v agregační funkci byly provedeny.'; + $lang['straggralteredbad'] = 'Nezdařilo se provést změny v agregační funkci.'; + $lang['straggrneedsname'] = 'Musíte zadat název pro agregační funkci.'; + $lang['straggrneedsbasetype'] = 'Musíte zadat typ vstupních dat pro agregační funkci.'; + $lang['straggrneedssfunc'] = 'Musíte zadat název funkce stavového přechodu pro agregační funkci.'; + $lang['straggrneedsstype'] = 'Musíte zadat datový typ stavové hodnoty pro agregační funkci.'; + $lang['straggrcreated'] = 'Agregační funkce byla vytvořena.'; + $lang['straggrcreatedbad'] = 'Nezdařilo se vytvořit agregační funkci.'; + $lang['straggrshowall'] = 'Zobrazit všechny agregační funkce'; + + // Operator Classes + $lang['stropclasses'] = 'Třídy operátorů'; + $lang['strnoopclasses'] = 'Nebely nalezeny žádné třídy operátorů.'; + $lang['straccessmethod'] = 'Metoda přístupu'; + + // Stats and performance + $lang['strrowperf'] = 'Souhrn řádkových operací'; + $lang['strioperf'] = 'Souhrn V/V operací'; + $lang['stridxrowperf'] = 'Souhrn Indexových řádkových operací'; + $lang['stridxioperf'] = 'Souhrn Indexových V/V operací'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sekvenčně'; + $lang['strscan'] = 'Prohledáno'; + $lang['strread'] = 'Čteno'; + $lang['strfetch'] = 'Načteno'; + $lang['strheap'] = 'Hromada'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Mezipaměť'; + $lang['strdisk'] = 'Disk'; + $lang['strrows2'] = 'Řádků'; + + // Tablespaces + $lang['strtablespace'] = 'Prostor tabulek'; + $lang['strtablespaces'] = 'Prostory tabulek'; + $lang['strshowalltablespaces'] = 'Zobrazit všechny prostory tabulek'; + $lang['strnotablespaces'] = 'Nebyly nalezeny žádné prostory tabulek.'; + $lang['strcreatetablespace'] = 'Vytvořit prostor tabulek'; + $lang['strlocation'] = 'Umístění'; + $lang['strtablespaceneedsname'] = 'Musíte zadat název pro prostor tabulek.'; + $lang['strtablespaceneedsloc'] = 'Musíte zadat složku, ve které se má prostor tabulek vytvořit.'; + $lang['strtablespacecreated'] = 'Prostor tabulek byl vytvořen.'; + $lang['strtablespacecreatedbad'] = 'Nezdařilo se vytvořit prostor tabulek.'; + $lang['strconfdroptablespace'] = 'Opravdu chcete odstranit prostor tabulek „%s“?'; + $lang['strtablespacedropped'] = 'Prostor tabulek byl odstraněn.'; + $lang['strtablespacedroppedbad'] = 'Nezdařilo se odstranit prostor tabulek.'; + $lang['strtablespacealtered'] = 'Změny v prostoru tabulek byly provedeny.'; + $lang['strtablespacealteredbad'] = 'Nezdařilo se provést změny v prostoru tabulek.'; + + // Miscellaneous + $lang['strtopbar'] = '%s běžící na %s:%s -- Jste přihlášený jako uživatel „%s“'; + $lang['strtimefmt'] = 'j. M Y G:i'; + $lang['strhelp'] = 'Nápověda'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Výběr stránky s nápovědou'; + $lang['strselecthelppage'] = 'Zvolte stránku s nápovědou'; + $lang['strinvalidhelppage'] = 'Neplatná stránka s nápovědou.'; + $lang['strlogintitle'] = 'Přihlášení k %s'; + $lang['strlogoutmsg'] = 'Odhlášení od %s'; + $lang['strloading'] = 'Načítá se…'; + $lang['strerrorloading'] = 'Chyba při načítání'; + $lang['strclicktoreload'] = 'Klikněte pro opětovné načtení'; + + // Autovacuum + $lang['strautovacuum'] = 'Automatický úklid'; + $lang['strturnedon'] = 'Zapnuto'; + $lang['strturnedoff'] = 'Vypnuto'; + $lang['strenabled'] = 'Povoleno'; + $lang['strnovacuumconf'] = 'Nebylo nalezeno žádné nastavení automatického úklidu.'; + $lang['strvacuumbasethreshold'] = 'VACUUM - základní práh'; + $lang['strvacuumscalefactor'] = 'VACUUM - škálovací faktor'; + $lang['stranalybasethreshold'] = 'ANALYZE - základní práh'; + $lang['stranalyzescalefactor'] = 'ANALYZE - škálovací faktor'; + $lang['strvacuumcostdelay'] = 'VACUUM - délka přestávky'; + $lang['strvacuumcostlimit'] = 'VACUUM - cenový limit'; + $lang['strvacuumpertable'] = 'Nastavení automatického uklidu jednotlivých tabulek'; + $lang['straddvacuumtable'] = 'Přidat nastavení automatického úklidu pro tabulku'; + $lang['streditvacuumtable'] = 'Upravit nastavení automatického úklidu pro tabulku %s'; + $lang['strdelvacuumtable'] = 'Smazat nastavení automatického úklidu pro tabulku %s ?'; + $lang['strvacuumtablereset'] = 'Autovacuum setup for table %s reset to default values'; + $lang['strdelvacuumtablefail'] = 'Nezdařilo se odebrat nastavení automatického úklidu pro tabulku %s'; + $lang['strsetvacuumtablesaved'] = 'Nastavení automatického úklidu pro tabulku %s bylo uloženo.'; + $lang['strsetvacuumtablefail'] = 'Nezdařilo se nastavení automatického úklidu pro tabulku %s.'; + $lang['strspecifydelvacuumtable'] = 'Musíte zadat tabulku, ze které chcete odebrat parametry automatického úklidu.'; + $lang['strspecifyeditvacuumtable'] = 'Musíte zadat tabulku, ze které chcete upravit parametry automatického úklidu.'; + $lang['strnotdefaultinred'] = 'V účtu nejsou žádné výchozí hodnoty.'; + + // Table-level Locks + $lang['strlocks'] = 'Zámky'; + $lang['strtransaction'] = 'ID transakce'; + $lang['strvirtualtransaction'] = 'ID virtuální transakce'; + $lang['strprocessid'] = 'ID procesu'; + $lang['strmode'] = 'Režim zámku'; + $lang['strislockheld'] = 'Je zámek držený?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Připravené transakce'; + $lang['strxactid'] = 'Transakční ID'; + $lang['strgid'] = 'Globální ID'; + + // Fulltext search + $lang['strfulltext'] = 'Plně textové vyhledávání'; + $lang['strftsconfig'] = 'Nastavení FTS'; + $lang['strftsconfigs'] = 'Nastavení'; + $lang['strftscreateconfig'] = 'Vytvořit nastavení FTS'; + $lang['strftscreatedict'] = 'Vytvořit slovník'; + $lang['strftscreatedicttemplate'] = 'Vytvořit šablonu slovníku'; + $lang['strftscreateparser'] = 'Vytvořit analyzátor'; + $lang['strftsnoconfigs'] = 'Nebylo nalezeno žádné nastavení FTS.'; + $lang['strftsconfigdropped'] = 'Nastavení FTS bylo odstraněno.'; + $lang['strftsconfigdroppedbad'] = 'Nezdařilo se odstranit nastavení FTS.'; + $lang['strconfdropftsconfig'] = 'Opravdu chcete odstranit nastavení FTS „%s“?'; + $lang['strconfdropftsdict'] = 'Opravdu chcete odstranit slovník FTS „%s“?'; + $lang['strconfdropftsmapping'] = 'Opravdu chcete odstranit mapování „%s“ nastavení FTS „%s“?'; + $lang['strftstemplate'] = 'Šablona'; + $lang['strftsparser'] = 'Analyzátor'; + $lang['strftsconfigneedsname'] = 'Musíte zadat název pro nastavení FTS.'; + $lang['strftsconfigcreated'] = 'Nastavení FTS bylo vytvořeno.'; + $lang['strftsconfigcreatedbad'] = 'Nezdařilo se vytvořit nastavení FTS.'; + $lang['strftsmapping'] = 'Mapování'; + $lang['strftsdicts'] = 'Slovníky'; + $lang['strftsdict'] = 'Slovník'; + $lang['strftsemptymap'] = 'Vyprázdnit mapu nastavení FTS.'; + $lang['strftsconfigaltered'] = 'Byly provedeny změny nastavení FTS.'; + $lang['strftsconfigalteredbad'] = 'Nezdařilo se provést změny nastavení FTS.'; + $lang['strftsconfigmap'] = 'Mapa nastavení FTS'; + $lang['strftsparsers'] = 'Analyzátory FTS'; + $lang['strftsnoparsers'] = 'Nejsou dostupné žádné analyzátory FTS.'; + $lang['strftsnodicts'] = 'Nejsou dostupné žádné slovníky FTS.'; + $lang['strftsdictcreated'] = 'Slovník FTS byl vytvořen.'; + $lang['strftsdictcreatedbad'] = 'Nezdařilo se vytvořit slovník FTS.'; + $lang['strftslexize'] = 'Lexikální funkce'; + $lang['strftsinit'] = 'Inicializační funkce'; + $lang['strftsoptionsvalues'] = 'Volby a hodnoty'; + $lang['strftsdictneedsname'] = 'Musíte zadat název pro slovník FTS.'; + $lang['strftsdictdropped'] = 'Slovník FTS byl odstraněn.'; + $lang['strftsdictdroppedbad'] = 'Nezdařilo se odstranit slovník FTS.'; + $lang['strftsdictaltered'] = 'Byly provedeny změny slovníku FTS.'; + $lang['strftsdictalteredbad'] = 'Nezdařilo se provést změny slovníku FTS.'; + $lang['strftsaddmapping'] = 'Přidat nové mapování'; + $lang['strftsspecifymappingtodrop'] = 'Pokud chcete odstranit mapování, tak musíte nejméně jedno vybrat.'; + $lang['strftsspecifyconfigtoalter'] = 'Musíte vybrat, které nastavení FTS chcete změnit.'; + $lang['strftsmappingdropped'] = 'Mapování FTS bylo odstraněno.'; + $lang['strftsmappingdroppedbad'] = 'Nezdařilo se odstranit mapování FTS.'; + $lang['strftsnodictionaries'] = 'Nebyly nalezeny žádné slovníky.'; + $lang['strftsmappingaltered'] = 'Byly provedeny změny mapování FTS.'; + $lang['strftsmappingalteredbad'] = 'Nezdařilo se provést změny mapování FTS.'; + $lang['strftsmappingadded'] = 'Mapování FTS bylo přidáno.'; + $lang['strftsmappingaddedbad'] = 'Nezdařilo se přidat mapování FTS.'; + $lang['strftstabconfigs'] = 'Nastavení'; + $lang['strftstabdicts'] = 'Slovníky'; + $lang['strftstabparsers'] = 'Analyzátory'; + $lang['strftscantparsercopy'] = 'Při vytváření nastavení textového vyhledávání nemůžete naráz zadat analyzátor i šablonu.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/danish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/danish.php new file mode 100644 index 00000000..52527332 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/danish.php @@ -0,0 +1,617 @@ +<?php + + /** + * Danish language file for phpPgAdmin. + * created by Arne Eckmann <bananstat@users.sourceforge.net> + */ + + // Language and character set + $lang['applang'] = 'Danish'; + $lang['applocale'] = 'da-DK'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Velkommen til phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmins Hjemmeside'; + $lang['strpgsqlhome'] = 'PostgreSQLs Hjemmeside'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL Dokumentation (lokalt)'; + $lang['strreportbug'] = 'Rapporter fejl'; + $lang['strviewfaq'] = 'Ofte stillede spørgsmål'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Login'; + $lang['strloginfailed'] = 'Login mislykkedes'; + $lang['strlogindisallowed'] = 'Login forbudt'; + $lang['strserver'] = 'Server'; + $lang['strlogout'] = 'Log ud'; + $lang['strowner'] = 'Ejer'; + $lang['straction'] = 'Handling'; + $lang['stractions'] = 'Handlinger'; + $lang['strname'] = 'Navn'; + $lang['strdefinition'] = 'Definition'; + $lang['strproperties'] = 'Egenskaber'; + $lang['strbrowse'] = 'Bladre'; + $lang['strdrop'] = 'Fjern'; + $lang['strdropped'] = 'Fjernet'; + $lang['strnull'] = 'Ingenting'; + $lang['strnotnull'] = 'Ikke ingenting'; + $lang['strfirst'] = '<< Første'; + $lang['strlast'] = 'Sidste >>'; + $lang['strprev'] = 'Forgående'; + $lang['strfailed'] = 'Mislykkedes'; + $lang['strnext'] = 'Næste'; + $lang['strcreate'] = 'Opret'; + $lang['strcreated'] = 'Oprettet'; + $lang['strcomment'] = 'Kommentar'; + $lang['strlength'] = 'Længde'; + $lang['strdefault'] = 'Standardværdi'; + $lang['stralter'] = 'Ændre'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Fortryd'; + $lang['strsave'] = 'Gem'; + $lang['strreset'] = 'Nulstil'; + $lang['strinsert'] = 'Indsæt'; + $lang['strselect'] = 'Vælg'; + $lang['strdelete'] = 'Slet'; + $lang['strupdate'] = 'Opdater'; + $lang['strreferences'] = 'Referencer'; + $lang['stryes'] = 'Ja'; + $lang['strno'] = 'Nej'; + $lang['strtrue'] = 'Sand'; + $lang['strfalse'] = 'Falsk'; + $lang['stredit'] = 'Redigere'; + $lang['strcolumn'] = 'Kolonne'; + $lang['strcolumns'] = 'Kolonner'; + $lang['strrows'] = 'Række(r)'; + $lang['strrowsaff'] = 'Række(r) berørt.'; + $lang['strobjects'] = 'Objekt'; + $lang['strexample'] = 'f.eks.'; + $lang['strback'] = 'Tilbage'; + $lang['strqueryresults'] = 'Søgeresultat'; + $lang['strshow'] = 'Vise'; + $lang['strempty'] = 'Tøm'; + $lang['strlanguage'] = 'Sprog'; + $lang['strencoding'] = 'Kodning'; + $lang['strvalue'] = 'Værdi'; + $lang['strunique'] = 'Unik'; + $lang['strprimary'] = 'Primær'; + $lang['strexport'] = 'Eksportere'; + $lang['strimport'] = 'Importere'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = 'Udfør'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Ryd op'; + $lang['stranalyze'] = 'Analysere'; + $lang['strclusterindex'] = 'Klynge'; + $lang['strclustered'] = 'Klynget?'; + $lang['strreindex'] = 'Genindekser'; + $lang['strrun'] = 'Udfør'; + $lang['stradd'] = 'Tilføj'; + $lang['strevent'] = 'Hændelse'; + $lang['strwhere'] = 'Hvor'; + $lang['strinstead'] = 'Gør i stedet'; + $lang['strwhen'] = 'Når'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Data'; + $lang['strconfirm'] = 'Bekræft'; + $lang['strexpression'] = 'Udtryk'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Udvid'; + $lang['strcollapse'] = 'Klap sammen'; + $lang['strexplain'] = 'Forklar'; + $lang['strexplainanalyze'] = 'Forklar analyze'; + $lang['strfind'] = 'Søg'; + $lang['stroptions'] = 'Alternativ'; + $lang['strrefresh'] = 'Opdater'; + $lang['strdownload'] = 'Download'; + $lang['strdownloadgzipped'] = 'Download komprimeret som gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OID´er'; + $lang['stradvanced'] = 'Avanceret'; + $lang['strvariables'] = 'Variable'; + $lang['strprocess'] = 'Proces'; + $lang['strprocesses'] = 'Processer'; + $lang['strsetting'] = 'Indstilling'; + $lang['streditsql'] = 'Rediger SQL'; + $lang['strruntime'] = 'Total runtime: %s ms'; + $lang['strpaginate'] = 'Paginere resultater'; + $lang['struploadscript'] = 'eller upload et SQL script:'; + $lang['strstarttime'] = 'Starttid'; + $lang['strfile'] = 'Fil'; + $lang['strfileimported'] = 'Fil importeret.'; + $lang['strparameters'] = 'Parametrer'; + + // Error handling + $lang['strnotloaded'] = 'Du har ikke ikke indlagt korrekt databaseunderstøttelse i din PHP-installation.'; + $lang['strbadconfig'] = 'Din config.inc.php er ikke opdateret. Du er nødt til at genetablere den fra den nye config.inc.php-dist.'; + $lang['strbadencoding'] = 'Det lykkedes ikke at sætte klientkodning i databasen.'; + $lang['strbadSchema'] = 'Forkert Skema angivet.'; + $lang['strinstatement'] = 'I påstanden:'; + $lang['strsqlerror'] = 'SQL fejl:'; + $lang['strinvalidparam'] = 'Ugyldig scriptparam.'; + $lang['strnodata'] = 'Ingen rækker fundet.'; + $lang['strnoobjects'] = 'Ingen objekter fundet.'; + $lang['strrownotunique'] = 'Denne række har ingen unik nøgle.'; + + // Tables + $lang['strtable'] = 'Tabel'; + $lang['strtables'] = 'Tabeller'; + $lang['strshowalltables'] = 'Vis alle tabeller'; + $lang['strnotables'] = 'Fandt ingen tabeller.'; + $lang['strnotable'] = 'Fandt ingen tabel.'; + $lang['strcreatetable'] = 'Opret tabel'; + $lang['strtablename'] = 'Tabelnavn'; + $lang['strtableneedsname'] = 'Tabel skal have et navn.'; + $lang['strtableneedsfield'] = 'Der skal mindst være et felt.'; + $lang['strtableneedscols'] = 'tabeller kræver et tilladeligt antal kolonner.'; + $lang['strtablecreated'] = 'Tabel oprettet.'; + $lang['strtablecreatedbad'] = 'Tabeloprettelse mislykkedes.'; + $lang['strconfdroptable'] = 'Er du sikker på at du vil fjerne tabellen "%s"?'; + $lang['strtabledropped'] = 'Tabel fjernet.'; + $lang['strinsertrow'] = 'Indsæt række'; + $lang['strtabledroppedbad'] = 'Det lykkedes ikke at fjerne tabellen.'; + $lang['strrowinserted'] = 'Række indsat.'; + $lang['strconfemptytable'] = 'Er du sikker på at du vil tømme tabellen "%s"?'; + $lang['strrowupdated'] = 'Række opdateret.'; + $lang['strrowinsertedbad'] = 'Det lykkedes ikke indsætte række.'; + $lang['strtableemptied'] = 'Tabellen tømt.'; + $lang['strrowupdatedbad'] = 'Opdatering af række mislykkedes.'; + $lang['streditrow'] = 'Rediger række'; + $lang['strrowdeleted'] = 'Række slettet.'; + $lang['strrowdeletedbad'] = 'Sletning af række mislykkedes.'; + $lang['strfield'] = 'Felt'; + $lang['strconfdeleterow'] = 'Er du sikker på at du vil slette denne række?'; + $lang['strnumfields'] = 'Antal felter'; + $lang['strsaveandrepeat'] = 'Gem & Fortsæt'; + $lang['strtableemptiedbad'] = 'Det lykkedes ikke at tømme tabellen'; + $lang['strdeleterow'] = 'Slet række'; + $lang['strfields'] = 'Felt'; + $lang['strfieldneedsname'] = 'Feltet skal have et navn'; + $lang['strcolumndropped'] = 'Kolonne fjernet.'; + $lang['strselectallfields'] = 'Vælg alle felter'; + $lang['strselectneedscol'] = 'Der skal vælges mindst een kolonne'; + $lang['strselectunary'] = 'Unary operander kan ikke have værdien.'; + $lang['strcolumnaltered'] = 'Kolonne ændret.'; + $lang['straltercolumn'] = 'Ændre kolonne'; + $lang['strcolumnalteredbad'] = 'Det lykkes ikke at ændre kolonne.'; + $lang['strconfdropcolumn'] = 'Er du sikker på at du vil fjerne kolonne "%s" fra tabel "%s"?'; + $lang['strcolumndroppedbad'] = 'Det lykkedes ikke at fjerne kolonne.'; + $lang['straddcolumn'] = 'Tilføj kolonne'; + $lang['strcolumnadded'] = 'Kolonne tiføjet.'; + $lang['strcolumnaddedbad'] = 'Det lykkedes ikke at tilføje kolonne.'; + $lang['strcascade'] = 'KASKAD'; + $lang['strdataonly'] = 'Udelukkende data'; + $lang['strtablealtered'] = 'Tabel ændret.'; + $lang['strtablealteredbad'] = 'Det lykkedes ikke at ændre tabel.'; + $lang['strestimatedrowcount'] = 'Anslået antal rækker'; + + // Users + $lang['struser'] = 'Bruger'; + $lang['strusers'] = 'Brugere'; + $lang['strusername'] = 'Brugernavn'; + $lang['strpassword'] = 'Password'; + $lang['strsuper'] = 'Superbruger?'; + $lang['strcreatedb'] = 'Opret database?'; + $lang['strexpires'] = 'Udløber'; + $lang['strsessiondefaults'] = 'Sessionsindstillinger'; + $lang['strnewname'] = 'Nyt navn'; + $lang['strnousers'] = 'Der blev ikke fundet nogen brugere.'; + $lang['strrename'] = 'Omdøb'; + $lang['struserrenamed'] = 'Brugernavn ændret.'; + $lang['struserrenamedbad'] = 'Det lykkedes ikke at omdøbe bruger.'; + $lang['struserupdated'] = 'Bruger opdateret.'; + $lang['struserupdatedbad'] = 'Opdatering af bruger mislykkedes.'; + $lang['strshowallusers'] = 'Vis alle brugere'; + $lang['strcreateuser'] = 'Opret bruger'; + $lang['struserneedsname'] = 'Bruger behøver et navn.'; + $lang['strconfdropuser'] = 'Er du sikker på at du vil slette brugeren "%s"?'; + $lang['strusercreated'] = 'Bruger oprettet.'; + $lang['strusercreatedbad'] = 'Oprettelse af bruger mislykkedes.'; + $lang['struserdropped'] = 'Bruger slettet.'; + $lang['struserdroppedbad'] = 'Sletning af bruger mislykkedes.'; + $lang['straccount'] = 'Konto'; + $lang['strchangepassword'] = 'Ændre password'; + $lang['strpasswordchanged'] = 'Password ændret.'; + $lang['strpasswordchangedbad'] = 'Ændring af password mislykkedes.'; + $lang['strpasswordshort'] = 'Password er for kort.'; + $lang['strpasswordconfirm'] = 'Password er forskellig fra bekræftelsen.'; + + // Groups + $lang['strgroup'] = 'Gruppe'; + $lang['strgroups'] = 'Grupper'; + $lang['strnogroup'] = 'Gruppe blev ikke fundet.'; + $lang['strnogroups'] = 'Ingen grupper blev fundet.'; + $lang['strcreategroup'] = 'Opret gruppe'; + $lang['strshowallgroups'] = 'Vis alle grupper'; + $lang['strgroupneedsname'] = 'Gruppen skal have et navn.'; + $lang['strgroupcreated'] = 'Gruppe oprettet.'; + $lang['strgroupdropped'] = 'Gruppe slettet.'; + $lang['strgroupcreatedbad'] = 'Oprettelse af gruppe mislykkedes.'; + $lang['strconfdropgroup'] = 'Er du sikker på at du vil slette gruppe "%s"?'; + $lang['strgrant'] = 'Tildel'; + $lang['strgranted'] = 'Privilegier ændret.'; + $lang['strgroupdroppedbad'] = 'Det lykkedes ikke at fjerne gruppe.'; + $lang['straddmember'] = 'Tilføj medlem'; + $lang['strmemberadded'] = 'Medlem tilføjet.'; + $lang['strmemberaddedbad'] = 'Det lykkedes ikke at tilføje medlem.'; + $lang['strdropmember'] = 'Fjern medlem'; + $lang['strconfdropmember'] = 'Er du sikker på at du vil fjerne medlem "%s" fra gruppen "%s"?'; + $lang['strmemberdropped'] = 'Medlem fjernet.'; + $lang['strmemberdroppedbad'] = 'Det lykkedes ikke at fjerne medlem.'; + + // Privileges + $lang['strprivilege'] = 'Rettighed'; + $lang['strprivileges'] = 'Rettigheder'; + $lang['strnoprivileges'] = 'Dette objekt har standard ejerrettigheder.'; + $lang['strmembers'] = 'Medlemmer'; + $lang['strrevoke'] = 'Inddrag'; + $lang['strgrantbad'] = 'Du skal angive mindst en bruger eller gruppe og mindst et privilegie.'; + $lang['strgrantfailed'] = 'Ændring af rettigheder mislykkedes.'; + $lang['stralterprivs'] = 'Ændre rettigheder'; + $lang['strdatabase'] = 'Database'; + $lang['strdatabasedropped'] = 'Database fjernet.'; + $lang['strdatabases'] = 'Databaser'; + $lang['strentersql'] = 'Indtast SQL til eksekvering :'; + $lang['strgrantor'] = 'Tilladelsesudsteder'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Database'; + $lang['strdatabases'] = 'Databaser'; + $lang['strshowalldatabases'] = 'Vis alle databaser'; + $lang['strnodatabase'] = 'Database blev ikke fundet.'; + $lang['strnodatabases'] = 'Der blev ikke fundet nogen databaser.'; + $lang['strcreatedatabase'] = 'Opret database'; + $lang['strdatabasename'] = 'Databasenavn'; + $lang['strdatabaseneedsname'] = 'Databasen skal have et navn.'; + $lang['strdatabasecreated'] = 'Database oprettet.'; + $lang['strdatabasecreatedbad'] = 'Oprettelse af database mislykkedes.'; + $lang['strconfdropdatabase'] = 'Er du sikker på at du vil fjerne database "%s"?'; + $lang['strdatabasedroppedbad'] = 'Fjernelse af database mislykkedes.'; + $lang['strentersql'] = 'Enter the SQL to execute below:'; + $lang['strsqlexecuted'] = 'SQL-kommando udført.'; + $lang['strvacuumgood'] = 'Vacuum udført.'; + $lang['strvacuumbad'] = 'Vacuum mislykkedes.'; + $lang['stranalyzegood'] = 'Analysen lykkedes.'; + $lang['stranalyzebad'] = 'Analysen mislykkedes.'; + $lang['strreindexgood'] = 'Reindeksering komplet.'; + $lang['strreindexbad'] = 'Reindeksering slog fejl.'; + $lang['strfull'] = 'Fuld'; + $lang['strfreeze'] = 'Fastfrys'; + $lang['strforce'] = 'Force'; + $lang['strsignalsent'] = 'Signal sendt.'; + $lang['strsignalsentbad'] = 'Afsendelse af signal mislykkedes.'; + $lang['strallobjects'] = 'Alle objekter'; + $lang['strstructureonly'] = 'Kun struktur'; + $lang['strstructureanddata'] = 'Struktur og data'; + + // Views + $lang['strview'] = 'View'; + $lang['strviews'] = 'Views'; + $lang['strshowallviews'] = 'Vis alle views'; + $lang['strnoview'] = 'Ingen view blev fundet.'; + $lang['strnoviews'] = 'Ingen views blev fundet.'; + $lang['strcreateview'] = 'Opret view'; + $lang['strviewname'] = 'Navn på view'; + $lang['strviewneedsname'] = 'View skal have et navn.'; + $lang['strviewneedsdef'] = 'Du skal angive en defintion for view.'; + $lang['strviewcreated'] = 'View oprettet.'; + $lang['strviewcreatedbad'] = 'Oprettelse af View mislykkedes.'; + $lang['strconfdropview'] = 'Er du sikker på at du vil fjerne view "%s"?'; + $lang['strviewdropped'] = 'View fjernet.'; + $lang['strviewdroppedbad'] = 'Fjernelse af view mislykkedes.'; + $lang['strviewupdated'] = 'View opdateret.'; + $lang['strviewupdatedbad'] = 'Opdatering af view mislykkedes.'; + $lang['strviewlink'] = 'Linking Keys'; + $lang['strviewconditions'] = 'Yderligere vilkår'; + $lang['strcreateviewwiz'] = 'Opret view med hjælp af wizard'; + + // Sequences + $lang['strsequence'] = 'Sekvens'; + $lang['strsequences'] = 'Sekvenser'; + $lang['strshowallsequences'] = 'Vis alle sekvenser'; + $lang['strnosequence'] = 'Sekvens blev ikke fundet.'; + $lang['strnosequences'] = 'Ingen sekvenser blev fundet.'; + $lang['strcreatesequence'] = 'Opret sekvens'; + $lang['strlastvalue'] = 'Seneste værdi'; + $lang['strincrementby'] = 'Øg med'; + $lang['strstartvalue'] = 'Startværdi'; + $lang['strmaxvalue'] = 'Største værdi'; + $lang['strminvalue'] = 'Mindste værdi'; + $lang['strcachevalue'] = 'Cachens værdi'; + $lang['strlogcount'] = 'Log count'; + $lang['striscycled'] = 'Is cycled?'; + $lang['strsequenceneedsname'] = 'Sekvens skal have et navn.'; + $lang['strsequencecreated'] = 'Sekvens oprettet.'; + $lang['strsequencecreatedbad'] = 'Oprettelse af sekvens mislykkedes.'; + $lang['strconfdropsequence'] = 'Er du sikker på at du vil fjerne sekvensen "%s"?'; + $lang['strsequencedropped'] = 'Sekvensen fjernet.'; + $lang['strsequencedroppedbad'] = 'Fjernelse af sekvens mislykkedes.'; + + // Indexes + $lang['strindex'] = 'Indeks'; + $lang['strindexes'] = 'Indekser'; + $lang['strindexname'] = 'Indeksnavn'; + $lang['strshowallindexes'] = 'Vis alle indeks'; + $lang['strnoindex'] = 'Ingen indeks blev fundet.'; + $lang['strsequencereset'] = 'Nulstil sekvens.'; + $lang['strsequenceresetbad'] = 'Nulstilling af sekvens mislykkedes.'; + $lang['strnoindexes'] = 'Ingen indeks blev fundet.'; + $lang['strcreateindex'] = 'Opret indeks'; + $lang['strindexname'] = 'Indeksnavn'; + $lang['strtabname'] = 'Tabelnavn'; + $lang['strcolumnname'] = 'Kolonnenavn'; + $lang['strindexneedsname'] = 'Indeks skal have et navn'; + $lang['strindexneedscols'] = 'Indeks kræveret gyldigt antal kolonner.'; + $lang['strindexcreated'] = 'Indeks oprettet'; + $lang['strindexcreatedbad'] = 'Oprettelse af indeks mislykkedes.'; + $lang['strconfdropindex'] = 'Er du sikker på at du vil fjerne indeks "%s"?'; + $lang['strindexdropped'] = 'Indeks fjernet.'; + $lang['strindexdroppedbad'] = 'Det lykkedes ikke at fjerne indeks.'; + $lang['strkeyname'] = 'Nøglebetegnelse'; + $lang['struniquekey'] = 'Unik nøgle'; + $lang['strprimarykey'] = 'Primærnøgle'; + $lang['strindextype'] = 'Indekstype'; + $lang['strindexname'] = 'Indeksnavn'; + $lang['strtablecolumnlist'] = 'Tabelkolonner'; + $lang['strindexcolumnlist'] = 'Indekskolonner'; + $lang['strconfcluster'] = 'Are you sure you want to cluster "%s"?'; + $lang['strclusteredgood'] = 'Cluster complete.'; + $lang['strclusteredbad'] = 'Cluster failed.'; + + // Rules + $lang['strrules'] = 'Regler'; + $lang['strrule'] = 'Regel'; + $lang['strshowallrules'] = 'Vis alle regler'; + $lang['strnorule'] = 'Regel blev ikke fundet.'; + $lang['strnorules'] = 'Ingen regler blev fundet.'; + $lang['strcreaterule'] = 'Opret regel'; + $lang['strrulename'] = 'Regelnavn'; + $lang['strruleneedsname'] = 'Regel skal have et navn.'; + $lang['strrulecreated'] = 'Regel oprettet.'; + $lang['strrulecreatedbad'] = 'Oprettelse af regel mislykkedes.'; + $lang['strconfdroprule'] = 'Er du sikker på at du fjerne regel "%s" for "%s"?'; + $lang['strruledropped'] = 'Regel fjernet.'; + $lang['strruledroppedbad'] = 'Det lykkedes ikke at fjerne regel.'; + + // Constraints + $lang['strconstraints'] = 'Afgrænsninger'; + $lang['strshowallconstraints'] = 'Vis alle afgrænsninger'; + $lang['strnoconstraints'] = 'Der blev ikke fundet nogen afgrænsninger.'; + $lang['strcreateconstraint'] = 'Opret afgrænsning'; + $lang['strconstraintcreated'] = 'Afgrænsning oprettet.'; + $lang['strconstraintcreatedbad'] = 'Det lykkedes ikke at oprette afgrænsning.'; + $lang['strconfdropconstraint'] = 'Er du sikker på at du vil fjerne afgrænsning "%s" for "%s"?'; + $lang['strconstraintdropped'] = 'Afgrænsning fjernet.'; + $lang['strconstraintdroppedbad'] = 'Det lykkedes ikke at fjerne afgrænsning.'; + $lang['straddcheck'] = 'Tilføj check'; + $lang['strcheckneedsdefinition'] = 'Check afgrænsning skal defineres.'; + $lang['strcheckadded'] = 'Check tilføjet.'; + $lang['strcheckaddedbad'] = 'Det lykkedes ikke at tilføje check.'; + $lang['straddpk'] = 'Tilføj primærnøgle'; + $lang['strpkneedscols'] = 'Primærnøgle kræver mindst en kolonne.'; + $lang['strpkadded'] = 'Primærnøgle tilføjet.'; + $lang['strpkaddedbad'] = 'Tilføjelse af primærnøgle mislykkedes.'; + $lang['stradduniq'] = 'Tilføj unik nøgle'; + $lang['struniqneedscols'] = 'Unik nøgle kræver mindst een kolonne.'; + $lang['struniqadded'] = 'Unik nøgle tilføjet.'; + $lang['struniqaddedbad'] = 'Tilføjelse af unik nøgle mislykkedes.'; + $lang['straddfk'] = 'Tilføj ekstern nøgle'; + $lang['strfkneedscols'] = 'Ekstern nøgle kræver mindst een kolonne.'; + $lang['strfkneedstarget'] = 'Ekstern nøgle kræver en måltabel.'; + $lang['strfkadded'] = 'Ekstern nøgle tilføjet.'; + $lang['strfkaddedbad'] = 'Tilføjelse af ekstern nøgle mislykkedes.'; + $lang['strfktarget'] = 'Måltabel'; + $lang['strfkcolumnlist'] = 'Kolonner i nøgle'; + $lang['strondelete'] = 'VED SLETNING'; + $lang['stronupdate'] = 'VED OPDATERING'; + + // Functions + $lang['strfunction'] = 'Funktion'; + $lang['strfunctions'] = 'Funktioner'; + $lang['strshowallfunctions'] = 'Vis alle funktioner'; + $lang['strnofunction'] = 'Hittade ingen funktion.'; + $lang['strnofunctions'] = 'Hittade inga funktioner.'; + $lang['strcreatefunction'] = 'Opret funktion'; + $lang['strcreateplfunction'] = 'Opret SQL/PL funktion'; + $lang['strcreateinternalfunction'] = 'Opret intern funktion'; + $lang['strcreatecfunction'] = 'Opret C funktion'; + $lang['strfunctionname'] = 'Funktionsnavn'; + $lang['strreturns'] = 'Tilbage'; + $lang['strarguments'] = 'Argumenter'; + $lang['strfunctionneedsname'] = 'Funktionen skal have et navn.'; + $lang['strfunctionneedsdef'] = 'Funktionen skal defineres.'; + $lang['strfunctioncreated'] = 'Funktion oprettet.'; + $lang['strfunctioncreatedbad'] = 'Oprettelse af funktion mislykkedes.'; + $lang['strconfdropfunction'] = 'Er du sikker på at du vil slette funktionen "%s"?'; + $lang['strproglanguage'] = 'Programmeringssprog'; + $lang['strfunctiondropped'] = 'Funktionen fjernet.'; + $lang['strfunctiondroppedbad'] = 'Fjernelse af funktionen mislykkedes.'; + $lang['strfunctionupdated'] = 'Funktion opdateret.'; + $lang['strfunctionupdatedbad'] = 'Opdatering af funktion mislykkedes.'; + + // Triggers + $lang['strtrigger'] = 'Trigger'; + $lang['strtriggers'] = 'Triggere'; + $lang['strshowalltriggers'] = 'Vis alle triggere'; + $lang['strnotrigger'] = 'Hittede ingen trigger.'; + $lang['strnotriggers'] = 'Hittede ingen trigger.'; + $lang['strcreatetrigger'] = 'Opret trigger'; + $lang['strtriggerneedsname'] = 'Trigger skal have et navn.'; + $lang['strtriggerneedsfunc'] = 'Du skal specificere en funktion for trigger.'; + $lang['strtriggercreated'] = 'Trigger oprettet.'; + $lang['strtriggerdropped'] = 'Trigger fjernet.'; + $lang['strtriggercreatedbad'] = 'Det lykkedes ikke at oprette trigger.'; + $lang['strconfdroptrigger'] = 'Er du sikker på at du vil fjerne trigger "%s" på "%s"?'; + $lang['strtriggerdroppedbad'] = 'Det lykkedes ikke at fjerne trigger.'; + + + + $lang['strstorage'] = 'Lagring'; + $lang['strtriggeraltered'] = 'Trigger ændret.'; + $lang['strtriggeralteredbad'] = 'Det lykkedes ikke at ændre trigger.'; + + // Types + $lang['strtype'] = 'Type'; + $lang['strtypes'] = 'Typer'; + $lang['strshowalltypes'] = 'Vis alle typer'; + $lang['strnotype'] = 'Typen blev ikke fundet.'; + $lang['strnotypes'] = 'Ingen typer fundet.'; + + $lang['strtypeneedslen'] = 'Du skal angive typens længde.'; + + $lang['strcreatetype'] = 'Opret type'; + $lang['strtypename'] = 'Navn på typen'; + $lang['strinputfn'] = 'Input funktion'; + $lang['stroutputfn'] = 'Output funktion'; + $lang['strpassbyval'] = 'Passed by val?'; + $lang['stralignment'] = 'Justering'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Begrænser'; + $lang['strtypeneedsname'] = 'Typen skal have et navn.'; + $lang['strtypecreated'] = 'Type oprettet'; + $lang['strtypecreatedbad'] = 'Det lykkedes ikke at oprette type.'; + $lang['strconfdroptype'] = 'Er du sikker på at du vil fjerne typen "%s"?'; + $lang['strtypedropped'] = 'Typen fjernet.'; + $lang['strtypedroppedbad'] = 'Det lykkedes ikke at fjerne typen.'; + + // Schemas + $lang['strschema'] = 'Skema'; + $lang['strschemas'] = 'Skemaer'; + $lang['strshowallschemas'] = 'Vis alle skemaer'; + $lang['strnoschema'] = 'Der blev ikke fundet noget skema.'; + $lang['strnoschemas'] = 'Der blev ikke fundet nogen skemaer.'; + $lang['strcreateschema'] = 'Opret skema'; + $lang['strschemaname'] = 'Skemanavn'; + $lang['strschemaneedsname'] = 'Skema skal have et navn.'; + $lang['strschemacreated'] = 'Skema oprettet'; + $lang['strschemacreatedbad'] = 'Det lykkedes ikke at oprette skema.'; + $lang['strconfdropschema'] = 'Er du sikker på, at du vil fjerne skemaet "%s"?'; + $lang['strschemadropped'] = 'Skema fjernet.'; + $lang['strschemadroppedbad'] = 'Det lykkedes ikka at fjerne skema.'; + + // Reports + $lang['strtopbar'] = '%s kører på %s:%s -- Du er logged ind som bruger "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + + // Domains + $lang['strdomain'] = 'Domæne'; + $lang['strdomains'] = 'Domæner'; + $lang['strshowalldomains'] = 'Vis alle domæner'; + $lang['strnodomains'] = 'Ingen domæner blev fundet.'; + $lang['strcreatedomain'] = 'Opret domæne'; + $lang['strdomaindropped'] = 'Domæne fjernet.'; + $lang['strdomaindroppedbad'] = 'Det lykkedes ikke at fjerne domæne.'; + $lang['strconfdropdomain'] = 'Er du sikker på at du vil fjerne domænet "%s"?'; + $lang['strdomainneedsname'] = 'Du skal indtaste et domænenavn.'; + $lang['strdomaincreated'] = 'Domæne oprettet.'; + $lang['strdomaincreatedbad'] = 'Det lykkedes ikke at oprette et domæne.'; + $lang['strdomainaltered'] = 'Domæne ændret.'; + $lang['strdomainalteredbad'] = 'Det lykkedes ikke at ændre domæne.'; + + // Operators + $lang['stroperator'] = 'Operator'; + $lang['stroperators'] = 'Operatorer'; + $lang['strshowalloperators'] = 'Vis alle operatorer'; + $lang['strnooperator'] = 'Operator blev ikke.'; + $lang['strnooperators'] = 'Der blev ikke fundet nogen operatorer.'; + $lang['strcreateoperator'] = 'Opret operator'; + $lang['strleftarg'] = 'Left Arg Type'; + $lang['strrightarg'] = 'Right Arg Type'; + $lang['strcommutator'] = 'Commutator'; + $lang['strnegator'] = 'Negator'; + $lang['strrestrict'] = 'Restrict'; + $lang['strjoin'] = 'Join'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Merges'; + $lang['strleftsort'] = 'Left sort'; + $lang['strrightsort'] = 'Right sort'; + $lang['strlessthan'] = 'Less than'; + $lang['strgreaterthan'] = 'Greater than'; + $lang['stroperatorneedsname'] = 'Operator skal have et navn.'; + $lang['stroperatorcreated'] = 'Operator oprettet'; + $lang['stroperatorcreatedbad'] = 'Oprettelse af operator mislykkedes.'; + $lang['strconfdropoperator'] = 'Er du sikker på, at du vil fjerne operator "%s"?'; + $lang['stroperatordropped'] = 'Operator fjernet.'; + $lang['stroperatordroppedbad'] = 'Fjernelse af operator mislykkedes.'; + + // Casts + $lang['strcasts'] = 'Typekonverteringer'; + $lang['strnocasts'] = 'Ingen typekonverteringer fundet.'; + $lang['strsourcetype'] = 'Kildetype'; + $lang['strtargettype'] = 'Måltype'; + $lang['strimplicit'] = 'Implicit'; + $lang['strinassignment'] = 'Tildelt i'; + $lang['strbinarycompat'] = '(Binært kompatibel)'; + + // Conversions + $lang['strconversions'] = 'Konverteringer'; + $lang['strnoconversions'] = 'Ingen konverteringer fundet.'; + $lang['strsourceencoding'] = 'Kildekodning'; + $lang['strtargetencoding'] = 'Målkodning'; + + // Languages + $lang['strlanguages'] = 'Sprog'; + $lang['strnolanguages'] = 'Der blev ikke fundet noget sprog.'; + $lang['strtrusted'] = 'Pålidelig(e)'; + + // Info + $lang['strnoinfo'] = 'Ingen tilgængelig information.'; + $lang['strreferringtables'] = 'Refererende tabeller'; + $lang['strparenttables'] = 'Overordnede tabeller'; + $lang['strchildtables'] = 'Underordnede tabeller'; + + // Aggregates + $lang['straggregates'] = 'Sammenlægninger'; + $lang['strnoaggregates'] = 'Ingen sammenlægninger fundet.'; + $lang['stralltypes'] = '(Alle typer)'; + + // Operator Classes + $lang['stropclasses'] = 'Operatorklasser'; + $lang['strnoopclasses'] = 'Ingen Operatorklasser fundet.'; + $lang['straccessmethod'] = 'Tilgangsmetode'; + + // Stats and performance + $lang['strrowperf'] = 'Row Performance'; + $lang['strioperf'] = 'I/O Performance'; + $lang['stridxrowperf'] = 'Index Row Performance'; + $lang['stridxioperf'] = 'Index I/O Performance'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sequential'; + $lang['strscan'] = 'Scan'; + $lang['strread'] = 'Read'; + $lang['strfetch'] = 'Fetch'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disk'; + $lang['strrows2'] = 'Rows'; + + // Tablespaces + $lang['strtablespace'] = 'Tabelområde'; + $lang['strtablespaces'] = 'Tabelområder'; + $lang['strshowalltablespaces'] = 'Vis alle tabelområder'; + $lang['strnotablespaces'] = 'Ingen tabelområder fundet.'; + $lang['strcreatetablespace'] = 'Opret tabelområder'; + $lang['strlocation'] = 'Location'; + $lang['strtablespaceneedsname'] = 'Tabelområdet skal have et navn.'; + $lang['strtablespaceneedsloc'] = 'Du skal angive hvilken mappe tabelområdet skal oprettes i.'; + $lang['strtablespacecreated'] = 'Tabelområde oprettet.'; + $lang['strtablespacecreatedbad'] = 'Oprettelse af tabelområde lykkedes ikke.'; + $lang['strconfdroptablespace'] = 'Er du sikker på, at du vil fjerne tabelområde "%s"?'; + $lang['strtablespacedropped'] = 'Tabelområde fjernet.'; + $lang['strtablespacedroppedbad'] = 'Fjernelse af tabelområde lykkedes ikke.'; + $lang['strtablespacealtered'] = 'Tabelområde ændret.'; + $lang['strtablespacealteredbad'] = 'Ændring af tabelområde lykkedes ikke.'; + + // Miscellaneous + $lang['strtopbar'] = '%s Kører på %s:%s -- Du er logged ind som bruger "%s", %s'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Hjælp'; + $lang['strhelpicon'] = '?'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/dutch.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/dutch.php new file mode 100644 index 00000000..998b94c3 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/dutch.php @@ -0,0 +1,467 @@ +<?php + + /** + * Dutch Language file for WebDB. + * @maintainer Hugo Jonker [hugo@gewis.win.tue.nl] + * + * $Id: dutch.php,v 1.18 2007/04/24 11:42:07 soranzo Exp $ + */ + + $lang['applang'] = 'Nederlands'; + $lang['applocale'] = 'nl-NL'; + $lang['applangdir'] = 'ltr'; + + $lang['strlogin'] = 'Login'; + $lang['strnotables'] = 'Geen tabellen gevonden.'; + $lang['strppahome'] = 'phpPgAdmin Homepage'; + $lang['strpgsqlhome'] = 'PostgreSQL Homepage'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL Documentatie (lokaal)'; + $lang['strreportbug'] = 'Meldt een fout'; + $lang['strviewfaq'] = 'Bekijk FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + $lang['strnotable'] = 'Geen tabel gevonden.'; + $lang['strnoviews'] = 'Geen views gevonden.'; + $lang['strnofunctions'] = 'Geen functies gevonden.'; + $lang['strowner'] = 'Eigenaar'; + $lang['straction'] = 'Actie'; + $lang['stractions'] = 'Acties'; + $lang['strname'] = 'Naam'; + $lang['strtable'] = 'Tabel'; + $lang['strtables'] = 'Tabellen'; + $lang['strview'] = 'View'; + $lang['strviews'] = 'Views'; + $lang['strdefinition'] = 'Definitie'; + $lang['strtriggers'] = 'Triggers'; + $lang['strrules'] = 'Regels'; + $lang['strsequence'] = 'Sequence'; + $lang['strsequences'] = 'Sequences'; + $lang['strfunction'] = 'Functie'; + $lang['strfunctions'] = 'Functies'; + $lang['stroperators'] = 'Operatoren'; + $lang['strtypes'] = 'Types'; + $lang['straggregates'] = 'Aggregaten'; + $lang['strproperties'] = 'Eigenschappen'; + $lang['strbrowse'] = 'Bekijk'; + $lang['strdrop'] = 'Verwijder'; + $lang['strdropped'] = 'Verwijderd'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Niet Null'; + $lang['strprev'] = 'Vorige'; + $lang['strnext'] = 'Volgende'; + $lang['strfailed'] = 'mislukt'; + $lang['strnotloaded'] = 'Deze PHP-installatie is zonder ondersteuning van dit type database gecompileerd.'; + $lang['strcreate'] = 'Creëer'; + $lang['strcomment'] = 'Commentaar'; + + $lang['strlength'] = 'Lengte'; + $lang['strdefault'] = 'Standaard'; + $lang['stralter'] = 'Wijzig'; + $lang['strcancel'] = 'Cancel'; + $lang['strprivileges'] = 'Privileges'; + $lang['strtrue'] = 'True'; + $lang['strfalse'] = 'False'; + $lang['strinsert'] = 'Voeg in'; + $lang['strselect'] = 'Selecteer'; + $lang['strdelete'] = 'Verwijder'; + $lang['strupdate'] = 'Vernieuw'; + $lang['strrule'] = 'Regel'; + $lang['strreferences'] = 'Referenties'; + $lang['strtrigger'] = 'Triggers'; + $lang['stryes'] = 'Ja'; + $lang['strno'] = 'Nee'; + $lang['stredit'] = 'Edit'; + $lang['strinvalidparam'] = 'Ongeldige parameters.'; + + // Error handling + $lang['strsqlerror'] = 'SQL fout:'; + $lang['strinstatement'] = 'In statement:'; + $lang['strimport'] = 'Importeer'; + + // Users + $lang['struser'] = 'Gebruiker'; + $lang['strgroup'] = 'Groep'; + $lang['strusername'] = 'Gebruikersnaam'; + $lang['strpassword'] = 'wachtwoord'; + $lang['strsuper'] = 'Superuser?'; + $lang['strcreatedb'] = 'Creëer DB?'; + $lang['strexpires'] = 'Verloopt'; + $lang['strnousers'] = 'Geen gebruikers gevonden.'; + + // Databases + $lang['strdatabase'] = 'Database'; + $lang['strdatabases'] = 'Databases'; + $lang['strdata'] = 'Data'; + $lang['strconfirm'] = 'Bevestig'; + $lang['strexpression'] = 'Uitdrukking'; + $lang['strellipsis'] = '...'; + $lang['strexpand'] = 'Uitvouwen'; + $lang['strcollapse'] = 'Inklappen'; + $lang['strnodatabases'] = 'Geen Databases gevonden.'; + $lang['strdatabaseneedsname'] = 'U dient uw database een naam te geven.'; + + // Views + $lang['strviewneedsname'] = 'U dient uw view een naam te geven.'; + $lang['strviewneedsdef'] = 'U dinet uw view te definiëren.'; + + // Sequences + $lang['strnosequences'] = 'Geen sequences gevonden.'; + //$lang['strsequencename'] = 'sequence_naam'; + $lang['strlastvalue'] = 'laatste_waarde'; + $lang['strincrementby'] = 'verhoog_met'; + $lang['strmaxvalue'] = 'max_waarde'; + $lang['strminvalue'] = 'min_waarde'; + $lang['strcachevalue'] = 'cache_waarde'; + $lang['strlogcount'] = 'log_cnt'; + $lang['striscycled'] = 'is_cyclisch'; + $lang['strreset'] = 'Reset'; + + // Indicies + $lang['strindexname'] = 'Index Naam'; + $lang['strtabname'] = 'Tab Naam'; + $lang['strcolumnname'] = 'Kolom Naam'; + $lang['struniquekey'] = 'Unieke sleutel'; + $lang['strprimarykey'] = 'Primaire sleutel'; + + // Tables + $lang['strfield'] = 'veld'; + $lang['strfields'] = 'velden'; + $lang['strtype'] = 'type'; + $lang['strvalue'] = 'waarde'; + $lang['strshowalltables'] = 'Toon alle tabellen'; + $lang['strunique'] = 'uniek'; + $lang['strprimary'] = 'Primair'; + $lang['strkeyname'] = 'sleutel naam'; + $lang['strnumfields'] = 'aantal velden'; + $lang['strcreatetable'] = 'Creëer tabel'; + $lang['strtableneedsname'] = 'U dient uw tabel een naam te geven.'; + $lang['strtableneedscols'] = 'U dient uw tabel een geldig aantal kolommen te geven.'; + $lang['strexport'] = 'exporteer'; + $lang['strconstraints'] = 'constraints'; + $lang['strcolumns'] = 'kolommen'; + + // Functions + $lang['strreturns'] = 'Retourneert'; + $lang['strarguments'] = 'Argumenten'; + $lang['strlanguage'] = 'taal'; + $lang['strfunctionneedsname'] = 'U dient uw functie een naam te geven.'; + $lang['strfunctionneedsdef'] = 'U dient uw functie te definiëren.'; + + // Triggers + $lang['strtriggers'] = 'Triggers'; + $lang['strnotriggers'] = 'Geen triggers gevonden.'; + $lang['strcreatetrigger'] = 'Creëer trigger'; + + // Types + $lang['strtype'] = 'Type'; + $lang['strtypes'] = 'Types'; + $lang['strcascade'] = 'CASCADE'; + $lang['strnotypes'] = 'Geen types gevonden.'; + $lang['strcreatetype'] = 'Creëer type'; + $lang['strconfdroptype'] = 'Weet u zeker dat u het type "%s" wilt verwijderen?'; + $lang['strtypedropped'] = 'Type verwijderd.'; + $lang['strtypedroppedbad'] = 'Verwijdering van het type mislukt.'; + $lang['strtypecreated'] = 'Type gecreëerd'; + $lang['strtypecreatedbad'] = 'Type creatie mislukt.'; + $lang['strshowalltypes'] = 'Toon alle types'; + $lang['strinputfn'] = 'Invoer functie'; + $lang['stroutputfn'] = 'Uitvoer functie'; + $lang['strpassbyval'] = 'Passed by val?'; + $lang['stralignment'] = 'Alignment'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Scheidingsteken'; + $lang['strstorage'] = 'Opslag'; + $lang['strtypeneedsname'] = 'U dient uw type een naam te geven.'; + $lang['strtypeneedslen'] = 'U dient uw type een lengte te geven.'; + + // New translations + $lang['strintro'] = 'Welkom bij phpPgAdmin.'; + $lang['straccount'] = 'Account'; + $lang['strchangepassword'] = 'Verander wachtwoord'; + $lang['strpasswordchanged'] = 'Wachtwoord veranderd.'; + $lang['strpasswordchangedbad'] = 'Wachtwoord veranderen mislukt.'; + $lang['strpasswordshort'] = 'Wachtwoord is te kort.'; + $lang['strpasswordconfirm'] = 'Wachtwoord verschilt van bevestigings-wachtwoord.'; + $lang['strloginfailed'] = 'Inloggen mislukt'; + $lang['strserver'] = 'Server'; + $lang['strlogout'] = 'Log uit'; + $lang['strcreated'] = 'Aangemaakt'; + $lang['strok'] = 'OK'; + $lang['strsave'] = 'Bewaar'; + $lang['strrows'] = 'rij(en)'; + $lang['strrowsaff'] = 'rij(en) gewijzigd.'; + $lang['strexample'] = 'bijv.'; + $lang['strback'] = 'Terug'; + $lang['strqueryresults'] = 'Query resultaten'; + $lang['strshow'] = 'Toon'; + $lang['strempty'] = 'Leeg'; + $lang['strencoding'] = 'Encoding'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = 'Go'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'Analyzeer'; + $lang['strclusterindex'] = 'Cluster'; + $lang['strreindex'] = 'Reindex'; + $lang['strrun'] = 'Run'; + $lang['stradd'] = 'Voeg toe'; + $lang['strevent'] = 'Event'; + $lang['strwhere'] = 'Where'; + $lang['strgrantbad'] = 'U dient minstens een gebruiker of groep en minstens een privilege op te geven.'; + $lang['stralterprivs'] = 'Wijzig privilege'; + $lang['strinstead'] = 'Do Instead'; + $lang['strwhen'] = 'zodra'; + $lang['strformat'] = 'Format'; + $lang['strbadconfig'] = 'Het bestand config.inc.php is verouderd. U kunt een verbeterde versie afleiden van het bestand config.inc.php-dist.'; + $lang['strbadschema'] = 'Ongeldig schema gespecificeerd.'; + $lang['strbadencoding'] = 'Het zetten van de client encoding in de database is mislukt.'; + $lang['strnodata'] = 'Geen rijen gevonden.'; + $lang['strtablename'] = 'Tabelnaam'; + $lang['strtableneedsfield'] = 'U dient ten minste één veld te specificeren.'; + $lang['strtablecreated'] = 'Tabel aangemaakt.'; + $lang['strtablecreatedbad'] = 'Het aanmaken van de tabel is mislukt.'; + $lang['strconfdroptable'] = 'Weet u zeker dat u de tabel "%s" wilt verwijderen?'; + $lang['strtabledropped'] = 'Tabel verwijderd.'; + $lang['strtabledroppedbad'] = 'Verwijderen van de tabel is mislukt.'; + $lang['strconfemptytable'] = 'Weet u zeker dat u alle rijen uit tabel "%s" wilt verwijderen?'; + $lang['strtableemptied'] = 'Alle rijen uit de tabel verwijderd.'; + $lang['strtableemptiedbad'] = 'Verwijderen van rijen is mislukt.'; + $lang['strinsertrow'] = 'Voeg een rij toe'; + $lang['strrowinserted'] = 'Rij toegevoegd.'; + $lang['strrowinsertedbad'] = 'Toevoegen van rij is mislukt.'; + $lang['streditrow'] = 'Wijzig rij'; + $lang['strrowupdated'] = 'Rij geupdate.'; + $lang['strrowupdatedbad'] = 'Het updaten van de rij is mislukt.'; + $lang['strdeleterow'] = 'Verwijder rij'; + $lang['strconfdeleterow'] = 'Weet u zeker dat u deze rij wilt verwijderen?'; + $lang['strrowdeleted'] = 'Rij verwijderd.'; + $lang['strrowdeletedbad'] = 'Verwijderen van de rij mislukt.'; + $lang['strsaveandrepeat'] = 'Save & Repeat'; + $lang['strfieldneedsname'] = 'U dient het veld een naam te geven'; + $lang['strselectneedscol'] = 'U moet ten minste één kolom als uitvoer tonen'; + $lang['straltercolumn'] = 'Wijzig kolom'; + $lang['strcolumnaltered'] = 'Kolom gewijzigd.'; + $lang['strcolumnalteredbad'] = 'Wijzigen van de kolom is mislukt.'; + $lang['strconfdropcolumn'] = 'Weet u zeker dat u de kolom "%s" wilt verwijderen uit tabel "%s"?'; + $lang['strcolumndropped'] = 'Kolom verwijderd.'; + $lang['strcolumndroppedbad'] = 'Verwijderen van de kolom is mislukt.'; + $lang['straddcolumn'] = 'Voeg kolom toe'; + $lang['strcolumnadded'] = 'Kolom toegevoegd.'; + $lang['strcolumnaddedbad'] = 'Toevoegen van de kolom is mislukt.'; + $lang['strschemaanddata'] = 'Schema & Data'; + $lang['strschemaonly'] = 'Enkel schema'; + $lang['strdataonly'] = 'Enkel data'; + $lang['strusers'] = 'gebruikers'; + $lang['struserupdated'] = 'gebruiker geupdate.'; + $lang['struserupdatedbad'] = 'gebruikerupdate mislukt.'; + $lang['strshowallusers'] = 'Toon alle gebruikers'; + $lang['strusercreated'] = 'Gebruiker aangemaakt.'; + $lang['strconfdropuser'] = 'Weet u zeker dat u de gebruiker "%s" wilt verwijderen?'; + $lang['struserdropped'] = 'Gebruiker verwijderd.'; + $lang['struserdroppedbad'] = 'Verwijdering van de gebruiker mislukt.'; + $lang['strgroups'] = 'Groepen'; + $lang['strnogroup'] = 'Groep niet gevonden.'; + $lang['strnogroups'] = 'Geen groepen gevonden.'; + $lang['strcreategroup'] = 'Maak groep aan'; + $lang['strshowallgroups'] = 'Toon alle groepen'; + $lang['strgroupneedsname'] = 'U moet een naam opgeven voor uw groep.'; + $lang['strgroupcreated'] = 'Groep aangemaakt.'; + $lang['strgroupcreatedbad'] = 'Het aanmaken van de groep is mislukt.'; + $lang['strconfdropgroup'] = 'Weet u zeker dat u de groep "%s" wilt verwijderen?'; + $lang['strgroupdropped'] = 'Groep verwijderd.'; + $lang['strgroupdroppedbad'] = 'Verwijdering van de groep is mislukt.'; + $lang['strmembers'] = 'Leden'; + $lang['strprivilege'] = 'Rechten'; + $lang['strnoprivileges'] = 'Dit object heeft standaard eigenaar rechten.'; + $lang['strgrant'] = 'Sta toe'; + $lang['strrevoke'] = 'Ontzeg'; + $lang['strgranted'] = 'Rechten toegevoegd.'; + $lang['strgrantfailed'] = 'Rechten toevoegen is mislukt.'; + $lang['strshowalldatabases'] = 'Toon alle databases'; + $lang['strnodatabase'] = 'Geen database gevonden.'; + $lang['strcreatedatabase'] = 'Maak database aan'; + $lang['strdatabasename'] = 'Database naam'; + $lang['strdatabasecreated'] = 'Database aangemaakt.'; + $lang['strdatabasecreatedbad'] = 'Het aanmaken van de database is misluk.'; + $lang['strconfdropdatabase'] = 'Weet u zeker dat u de database "%s" wilt verwijderen?'; + $lang['strdatabasedropped'] = 'Database verwijderd.'; + $lang['strdatabasedroppedbad'] = 'Database verwijdering is mislukt.'; + $lang['strentersql'] = 'Type hieronder de uit te voeren SQL:'; + $lang['strsqlexecuted'] = 'SQL uitgevoerd.'; + $lang['strvacuumgood'] = 'Vacuum klaar.'; + $lang['strvacuumbad'] = 'Vacuum mislukt.'; + $lang['stranalyzegood'] = 'Analyze klaar.'; + $lang['stranalyzebad'] = 'Analyze mislukt.'; + $lang['strshowallviews'] = 'Toon alle views'; + $lang['strnoview'] = 'Geen views gevonden.'; + $lang['strcreateview'] = 'Maak view aan'; + $lang['strviewname'] = 'View naam'; + $lang['strviewcreated'] = 'View aangemaakt.'; + $lang['strviewcreatedbad'] = 'Aanmaken van de View mislukt.'; + $lang['strconfdropview'] = 'Weet u zeker dat u de view "%s" wilt verwijderen?'; + $lang['strviewdropped'] = 'View verwijderd.'; + $lang['strviewdroppedbad'] = 'Verwijderen van de view mislukt.'; + $lang['strviewupdated'] = 'View geupdate.'; + $lang['strviewupdatedbad'] = 'View updaten mislukt.'; + $lang['strshowallsequences'] = 'Toon alle sequences'; + $lang['strnosequence'] = 'Geen sequence gevonden.'; + $lang['strcreatesequence'] = 'Maak sequence aan'; + $lang['strstartvalue'] = 'Start waarde'; + $lang['strsequenceneedsname'] = 'U dient een naam op te geven voor de sequence.'; + $lang['strsequencecreated'] = 'Sequence aangemaakt.'; + $lang['strsequencecreatedbad'] = 'Aanmaken van de sequence mislukt.'; + $lang['strconfdropsequence'] = 'Weet u zeker dat u de sequence "%s" wilt verwijderen?'; + $lang['strsequencedropped'] = 'Sequence verwijderd.'; + $lang['strsequencedroppedbad'] = 'Verwijdering van de sequence mislukt.'; + $lang['strindexes'] = 'Indices'; + $lang['strshowallindexes'] = 'Toon alle indices'; + $lang['strnoindex'] = 'Geen index gevonden.'; + $lang['strnoindexes'] = 'Geen indices gevonden.'; + $lang['strcreateindex'] = 'Maak index aan'; + $lang['strindexneedsname'] = 'U dient een naam op te geven voor de index.'; + $lang['strindexneedscols'] = 'Indices dienen uit minimaal één kolom te bestaan.'; + $lang['strindexcreated'] = 'Index aangemaakt'; + $lang['strindexcreatedbad'] = 'Het aanmaken van de index is mislukt.'; + $lang['strconfdropindex'] = 'Weet u zeker dat u de index "%s" wilt verwijderen?'; + $lang['strindexdropped'] = 'Index verwijderd.'; + $lang['strindexdroppedbad'] = 'Verwijdering van de index mislukt.'; + $lang['strindextype'] = 'Type van de index'; + $lang['strtablecolumnlist'] = 'Kolommen in tabel'; + $lang['strindexcolumnlist'] = 'Kolommen in index'; + $lang['strshowallrules'] = 'Toon alle Rules'; + $lang['strnorule'] = 'Geen rule gevonden.'; + $lang['strnorules'] = 'Geen rules gevonden.'; + $lang['strcreaterule'] = 'Maak rule aan'; + $lang['strrulename'] = 'Rule naam'; + $lang['strruleneedsname'] = 'U dient een naam op te geven voor de rule.'; + $lang['strrulecreated'] = 'Rule aangemaakt.'; + $lang['strrulecreatedbad'] = 'Het aanmaken van de rule is mislukt.'; + $lang['strconfdroprule'] = 'Weet u zeker dat u de rule "%s" op "%s" wilt verwijderen?'; + $lang['strruledropped'] = 'Rule verwijderd.'; + $lang['strruledroppedbad'] = 'Verwijdering van de rule mislukt.'; + $lang['strshowallconstraints'] = 'Toon alle constraints'; + $lang['strnoconstraints'] = 'Geen constraints gevonden.'; + $lang['strcreateconstraint'] = 'Maak constraint aan'; + $lang['strconstraintcreated'] = 'Constraint aangemaakt.'; + $lang['strconstraintcreatedbad'] = 'Het aanmaken van de constraint is mislukt.'; + $lang['strconfdropconstraint'] = 'Weet u zeker dat u de constraint "%s" op "%s" wilt verwijderen?'; + $lang['strconstraintdropped'] = 'Constraint verwijderd.'; + $lang['strconstraintdroppedbad'] = 'Verwijdering van de constraint mislukt.'; + $lang['straddcheck'] = 'Voeg Check toe'; + $lang['strcheckneedsdefinition'] = 'Check constraint moeten gedefiniëerd zijn.'; + $lang['strcheckadded'] = 'Check constraint toegevoegd.'; + $lang['strcheckaddedbad'] = 'Toevoegen van check constraint mislukt.'; + $lang['straddpk'] = 'Voeg primaire sleutel toe'; + $lang['strpkneedscols'] = 'Primaire sleutel dient minsten éé te hebben.'; + $lang['strpkadded'] = 'Primaire sleutel toegevoegd.'; + $lang['strpkaddedbad'] = 'Toevoegen van primaire sleutel is mislukt.'; + $lang['stradduniq'] = 'Voeg unieke sleutel toe.'; + $lang['struniqneedscols'] = 'Unieke sleutel dient minstens één kolom te hebben.'; + $lang['struniqadded'] = 'Unieke sleutel toegevoegd.'; + $lang['struniqaddedbad'] = 'Toevoegen van unieke sleutel mislukt.'; + $lang['straddfk'] = 'Voeg Foreign sleutel toe'; + $lang['strfkneedscols'] = 'Foreign sleutel dient minstens één kolom te hebben.'; + $lang['strfkneedstarget'] = 'Foreign sleutel dient een doeltabel te hebben.'; + $lang['strfkadded'] = 'Foreign sleutel toegevoegd.'; + $lang['strfkaddedbad'] = 'Toevoegen van foreign sleutel mislukt.'; + $lang['strfktarget'] = 'Doeltabel'; + $lang['strfkcolumnlist'] = 'Kolommen in sleutel'; + $lang['strshowallfunctions'] = 'Toon alle functies'; + $lang['strnofunction'] = 'Geen functies gevonden.'; + $lang['strcreatefunction'] = 'Maak functie aan'; + $lang['strfunctionname'] = 'Functie naam'; + $lang['strfunctioncreated'] = 'Functie aangemaakt.'; + $lang['strfunctioncreatedbad'] = 'Het aanmaken van de functie is mislukt.'; + $lang['strconfdropfunction'] = 'Weet u zeker dat u de functie "%s" wilt verwijderen?'; + $lang['strfunctiondropped'] = 'Functie verwijderd.'; + $lang['strfunctiondroppedbad'] = 'Verwijdering van de functie mislukt.'; + $lang['strfunctionupdated'] = 'Functie geupdate.'; + $lang['strfunctionupdatedbad'] = 'Het updaten van de functie is mislukt.'; + $lang['strshowalltriggers'] = 'Toon alle triggers'; + $lang['strnotrigger'] = 'Geen trigger gevonden.'; + $lang['strtriggerneedsname'] = 'U dient een naam op te geven voor de trigger.'; + $lang['strtriggerneedsfunc'] = 'U dient een functie op te geven voor de trigger.'; + $lang['strtriggercreated'] = 'Trigger aangemaakt.'; + $lang['strtriggercreatedbad'] = 'Het aanmaken van de trigger is mislukt.'; + $lang['strconfdroptrigger'] = 'Weet u zeker dat u de trigger "%s" op "%s" wilt verwijderen?'; + $lang['strtriggerdropped'] = 'Trigger verwijderd.'; + $lang['strtriggerdroppedbad'] = 'Verwijdering van trigger mislukt.'; + $lang['strnotype'] = 'Geen type gevonden.'; + $lang['strtypename'] = 'Type naam'; + $lang['strschema'] = 'Schema'; + $lang['strschemas'] = 'Schema\'s'; + $lang['strshowallschemas'] = 'Toon alle schema\'s'; + $lang['strnoschema'] = 'Geen schema gevonden.'; + $lang['strnoschemas'] = 'Geen schema\'s gevonden.'; + $lang['strcreateschema'] = 'Maak schema aan'; + $lang['strschemaname'] = 'Schema naam'; + $lang['strschemaneedsname'] = 'U dient een naam op te geven voor het schema.'; + $lang['strschemacreated'] = 'Schema aangemaakt'; + $lang['strschemacreatedbad'] = 'Het aanmaken van het schema is mislukt.'; + $lang['strconfdropschema'] = 'Weet u zeker dat u het schema "%s" wilt verwijderen?'; + $lang['strschemadropped'] = 'Schema verwijderd.'; + $lang['strschemadroppedbad'] = 'Verwijdering van het schema mislukt.'; + $lang['strtopbar'] = '%s draaiend op %s:%s -- U bent ingelogd als gebruiker "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // These were missing after using the language conversion tool :( + + $lang['strfirst'] = '<< Eerste'; + $lang['strlast'] = 'Laatste >>'; + $lang['strexplain'] = 'Verklaring'; + $lang['strfind'] = 'Zoek'; + $lang['stroptions'] = 'Opties'; + $lang['strrefresh'] = 'Ververs'; + $lang['strdownload'] = 'Download'; + $lang['strrownotunique'] = 'Geen unieke identifier voor deze rij.'; + $lang['strselectallfields'] = 'Selecteer alle velden'; + $lang['strtablealtered'] = 'Tabel gewijzigd.'; + $lang['strtablealteredbad'] = 'Tabel wijzigen mislukt.'; + $lang['strcreateuser'] = 'Creëer gebruiker'; + $lang['strusercreatedbad'] = 'Gebruiker creëren mislukt.'; + $lang['straddmember'] = 'Voeg groepslid toe'; + $lang['strmemberadded'] = 'Groepslid toegevoegd.'; + $lang['strmemberaddedbad'] = 'Toevoegen groepslid mislukt.'; + $lang['strdropmember'] = 'Verwijder groepslid'; + $lang['strconfdropmember'] = 'Weet u zeker dat u "%s" uit groep "%s" wilt verwijderen?'; + $lang['strmemberdropped'] = 'Groepslid verwijderd.'; + $lang['strmemberdroppedbad'] = 'Verwijderen van groepslid mislukt.'; + $lang['strgrantor'] = 'Grantor'; + $lang['strasterisk'] = '*'; + $lang['strsequencereset'] = 'Sequence reset.'; + $lang['strsequenceresetbad'] = 'Sequence reset mislukt.'; + $lang['strproglanguage'] = 'Programmeertaal'; + $lang['strtriggeraltered'] = 'Trigger gewijzigd.'; + $lang['strtriggeralteredbad'] = 'Trigger wijziging mislukt.'; + $lang['strdomain'] = 'Domein'; + $lang['strdomains'] = 'Domeinen'; + $lang['strshowalldomains'] = 'Toon alle domeinen'; + $lang['strnodomains'] = 'Geen domeinen gevonden.'; + $lang['strcreatedomain'] = 'Creëer domein'; + $lang['strdomaindropped'] = 'Domein verwijderd.'; + $lang['strdomaindroppedbad'] = 'Verwijderen van domein mislukt.'; + $lang['strconfdropdomain'] = 'Weet u zeker dat u het domein "%s" wilt verwijderen?'; + $lang['strdomainneedsname'] = 'U dient een naam op te geven voor uw domein.'; + $lang['strdomaincreated'] = 'Domein gecreëerd.'; + $lang['strdomaincreatedbad'] = 'Domeincreatie mislukt.'; + $lang['strdomainaltered'] = 'Domein gewijzigd.'; + $lang['strdomainalteredbad'] = 'Wijzigen van het domein mislukt.'; + $lang['stroperator'] = 'Operator'; + $lang['strshowalloperators'] = 'Toon alle operators'; + $lang['strnooperator'] = 'Geen operator gevonden.'; + $lang['strnooperators'] = 'Geen operators gevonden.'; + $lang['strcreateoperator'] = 'Creëer operator'; + $lang['stroperatorname'] = 'Naam van de operator'; + $lang['strleftarg'] = 'Linkerargument type'; + $lang['strrightarg'] = 'Rechterargument type'; + $lang['stroperatorneedsname'] = 'U dient een naam op te geven voor uw operator.'; + $lang['stroperatorcreated'] = 'Operator gecreëerd'; + $lang['stroperatorcreatedbad'] = 'Operator creatie mislukt.'; + $lang['strconfdropoperator'] = 'Weet u zeker dat u de operator "%s" wilt verwijderen?'; + $lang['stroperatordropped'] = 'Operator verwijderd.'; + $lang['stroperatordroppedbad'] = 'Verwijderen van de operator mislukt.'; + $lang['strhelp'] = 'Help'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/english.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/english.php new file mode 100644 index 00000000..c232a752 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/english.php @@ -0,0 +1,905 @@ +<?php + + /** + * English language file for phpPgAdmin. Use this as a basis + * for new translations. + * + * $Id: english.php,v 1.232 2008/02/23 16:34:33 ioguix Exp $ + */ + + // Language and character set + $lang['applang'] = 'English'; + $lang['applocale'] = 'en-US'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Welcome to phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmin Homepage'; + $lang['strpgsqlhome'] = 'PostgreSQL Homepage'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL Documentation (local)'; + $lang['strreportbug'] = 'Report a Bug'; + $lang['strviewfaq'] = 'View online FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Login'; + $lang['strloginfailed'] = 'Login failed'; + $lang['strlogindisallowed'] = 'Login disallowed for security reasons.'; + $lang['strserver'] = 'Server'; + $lang['strservers'] = 'Servers'; + $lang['strgroupservers'] = 'Servers in group "%s"'; + $lang['strallservers'] = 'All servers'; + $lang['strintroduction'] = 'Introduction'; + $lang['strhost'] = 'Host'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Logout'; + $lang['strowner'] = 'Owner'; + $lang['straction'] = 'Action'; + $lang['stractions'] = 'Actions'; + $lang['strname'] = 'Name'; + $lang['strdefinition'] = 'Definition'; + $lang['strproperties'] = 'Properties'; + $lang['strbrowse'] = 'Browse'; + $lang['strenable'] = 'Enable'; + $lang['strdisable'] = 'Disable'; + $lang['strdrop'] = 'Drop'; + $lang['strdropped'] = 'Dropped'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Not Null'; + $lang['strprev'] = '< Prev'; + $lang['strnext'] = 'Next >'; + $lang['strfirst'] = '<< First'; + $lang['strlast'] = 'Last >>'; + $lang['strfailed'] = 'Failed'; + $lang['strcreate'] = 'Create'; + $lang['strcreated'] = 'Created'; + $lang['strcomment'] = 'Comment'; + $lang['strlength'] = 'Length'; + $lang['strdefault'] = 'Default'; + $lang['stralter'] = 'Alter'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Cancel'; + $lang['strkill'] = 'Kill'; + $lang['strac'] = 'Enable AutoComplete'; + $lang['strsave'] = 'Save'; + $lang['strreset'] = 'Reset'; + $lang['strrestart'] = 'Restart'; + $lang['strinsert'] = 'Insert'; + $lang['strselect'] = 'Select'; + $lang['strdelete'] = 'Delete'; + $lang['strupdate'] = 'Update'; + $lang['strreferences'] = 'References'; + $lang['stryes'] = 'Yes'; + $lang['strno'] = 'No'; + $lang['strtrue'] = 'TRUE'; + $lang['strfalse'] = 'FALSE'; + $lang['stredit'] = 'Edit'; + $lang['strcolumn'] = 'Column'; + $lang['strcolumns'] = 'Columns'; + $lang['strrows'] = 'row(s)'; + $lang['strrowsaff'] = 'row(s) affected.'; + $lang['strobjects'] = 'object(s)'; + $lang['strback'] = 'Back'; + $lang['strqueryresults'] = 'Query Results'; + $lang['strshow'] = 'Show'; + $lang['strempty'] = 'Empty'; + $lang['strlanguage'] = 'Language'; + $lang['strencoding'] = 'Encoding'; + $lang['strvalue'] = 'Value'; + $lang['strunique'] = 'Unique'; + $lang['strprimary'] = 'Primary'; + $lang['strexport'] = 'Export'; + $lang['strimport'] = 'Import'; + $lang['strallowednulls'] = 'Allowed NULL characters'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Empty string/field'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'Analyze'; + $lang['strclusterindex'] = 'Cluster'; + $lang['strclustered'] = 'Clustered?'; + $lang['strreindex'] = 'Reindex'; + $lang['strexecute'] = 'Execute'; + $lang['stradd'] = 'Add'; + $lang['strevent'] = 'Event'; + $lang['strwhere'] = 'Where'; + $lang['strinstead'] = 'Do Instead'; + $lang['strwhen'] = 'When'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Data'; + $lang['strconfirm'] = 'Confirm'; + $lang['strexpression'] = 'Expression'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Expand'; + $lang['strcollapse'] = 'Collapse'; + $lang['strfind'] = 'Find'; + $lang['stroptions'] = 'Options'; + $lang['strrefresh'] = 'Refresh'; + $lang['strdownload'] = 'Download'; + $lang['strdownloadgzipped'] = 'Download compressed with gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Advanced'; + $lang['strvariables'] = 'Variables'; + $lang['strprocess'] = 'Process'; + $lang['strprocesses'] = 'Processes'; + $lang['strblocked'] = 'Blocked'; + $lang['strsetting'] = 'Setting'; + $lang['streditsql'] = 'Edit SQL'; + $lang['strruntime'] = 'Total runtime: %s ms'; + $lang['strpaginate'] = 'Paginate results'; + $lang['struploadscript'] = 'or upload an SQL script:'; + $lang['strstarttime'] = 'Start Time'; + $lang['strfile'] = 'File'; + $lang['strfileimported'] = 'File imported.'; + $lang['strtrycred'] = 'Use these credentials for all servers'; + $lang['strconfdropcred'] = 'For security reason, disconnecting will destroy your shared login information. Are you sure you want to disconnect ?'; + $lang['stractionsonmultiplelines'] = 'Actions on multiple lines'; + $lang['strselectall'] = 'Select all'; + $lang['strunselectall'] = 'Unselect all'; + $lang['strlocale'] = 'Locale'; + $lang['strcollation'] = 'Collation'; + $lang['strctype'] = 'Character Type'; + $lang['strdefaultvalues'] = 'Default values'; + $lang['strnewvalues'] = 'New values'; + $lang['strstart'] = 'Start'; + $lang['strstop'] = 'Stop'; + $lang['strgotoppage'] = 'back to top'; + $lang['strtheme'] = 'Theme'; + $lang['strcluster'] = 'Cluster'; + + // Admin + $lang['stradminondatabase'] = 'The following administrative tasks apply on the whole %s database.'; + $lang['stradminontable'] = 'The following administrative tasks apply on the table %s.'; + + // User-supplied SQL history + $lang['strhistory'] = 'History'; + $lang['strnohistory'] = 'No history.'; + $lang['strclearhistory'] = 'Clear history'; + $lang['strdelhistory'] = 'Delete from history'; + $lang['strconfdelhistory'] = 'Really remove this request from history?'; + $lang['strconfclearhistory'] = 'Really clear history?'; + $lang['strnodatabaseselected'] = 'Please, select a database.'; + + // Database sizes + $lang['strnoaccess'] = 'No Access'; + $lang['strsize'] = 'Size'; + $lang['strbytes'] = 'bytes'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'This application works best with a frames-enabled browser, but can be used without frames by following the link below.'; + $lang['strnoframeslink'] = 'Use without frames'; + $lang['strbadconfig'] = 'Your config.inc.php is out of date. You will need to regenerate it from the new config.inc.php-dist.'; + $lang['strnotloaded'] = 'Your PHP installation does not support PostgreSQL. You need to recompile PHP using the --with-pgsql configure option.'; + $lang['strpostgresqlversionnotsupported'] = 'Version of PostgreSQL not supported. Please upgrade to version %s or later.'; + $lang['strbadschema'] = 'Invalid schema specified.'; + $lang['strbadencoding'] = 'Failed to set client encoding in database.'; + $lang['strsqlerror'] = 'SQL error:'; + $lang['strinstatement'] = 'In statement:'; + $lang['strinvalidparam'] = 'Invalid script parameters.'; + $lang['strnodata'] = 'No rows found.'; + $lang['strnoobjects'] = 'No objects found.'; + $lang['strrownotunique'] = 'No unique identifier for this row.'; + $lang['strnouploads'] = 'File uploads are disabled.'; + $lang['strimporterror'] = 'Import error.'; + $lang['strimporterror-fileformat'] = 'Import error: Failed to automatically determine the file format.'; + $lang['strimporterrorline'] = 'Import error on line %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Import error on line %s: Line does not possess the correct number of columns.'; + $lang['strimporterror-uploadedfile'] = 'Import error: File could not be uploaded to the server'; + $lang['strcannotdumponwindows'] = 'Dumping of complex table and schema names on Windows is not supported.'; + $lang['strinvalidserverparam'] = 'Attempt to connect with invalid server parameter, possibly someone is trying to hack your system.'; + $lang['strnoserversupplied'] = 'No server supplied!'; + $lang['strbadpgdumppath'] = 'Export error: Failed to execute pg_dump (given path in your conf/config.inc.php : %s). Please, fix this path in your configuration and relog.'; + $lang['strbadpgdumpallpath'] = 'Export error: Failed to execute pg_dumpall (given path in your conf/config.inc.php : %s). Please, fix this path in your configuration and relog.'; + $lang['strconnectionfail'] = 'Can not connect to server.'; + + // Tables + $lang['strtable'] = 'Table'; + $lang['strtables'] = 'Tables'; + $lang['strshowalltables'] = 'Show all tables'; + $lang['strnotables'] = 'No tables found.'; + $lang['strnotable'] = 'No table found.'; + $lang['strcreatetable'] = 'Create table'; + $lang['strcreatetablelike'] = 'Create table like'; + $lang['strcreatetablelikeparent'] = 'Source table'; + $lang['strcreatelikewithdefaults'] = 'INCLUDE DEFAULTS'; + $lang['strcreatelikewithconstraints'] = 'INCLUDE CONSTRAINTS'; + $lang['strcreatelikewithindexes'] = 'INCLUDE INDEXES'; + $lang['strtablename'] = 'Table name'; + $lang['strtableneedsname'] = 'You must give a name for your table.'; + $lang['strtablelikeneedslike'] = 'You must give a table to copy properties from.'; + $lang['strtableneedsfield'] = 'You must specify at least one field.'; + $lang['strtableneedscols'] = 'You must specify a valid number of columns.'; + $lang['strtablecreated'] = 'Table created.'; + $lang['strtablecreatedbad'] = 'Table creation failed.'; + $lang['strconfdroptable'] = 'Are you sure you want to drop the table "%s"?'; + $lang['strtabledropped'] = 'Table dropped.'; + $lang['strtabledroppedbad'] = 'Table drop failed.'; + $lang['strconfemptytable'] = 'Are you sure you want to empty the table "%s"?'; + $lang['strtableemptied'] = 'Table emptied.'; + $lang['strtableemptiedbad'] = 'Table empty failed.'; + $lang['strinsertrow'] = 'Insert row'; + $lang['strrowinserted'] = 'Row inserted.'; + $lang['strrowinsertedbad'] = 'Row insert failed.'; + $lang['strnofkref'] = 'There is no matching value in the foreign key %s.'; + $lang['strrowduplicate'] = 'Row insert failed, attempted to do duplicate insert.'; + $lang['streditrow'] = 'Edit row'; + $lang['strrowupdated'] = 'Row updated.'; + $lang['strrowupdatedbad'] = 'Row update failed.'; + $lang['strdeleterow'] = 'Delete Row'; + $lang['strconfdeleterow'] = 'Are you sure you want to delete this row?'; + $lang['strrowdeleted'] = 'Row deleted.'; + $lang['strrowdeletedbad'] = 'Row deletion failed.'; + $lang['strinsertandrepeat'] = 'Insert & Repeat'; + $lang['strnumcols'] = 'Number of columns'; + $lang['strcolneedsname'] = 'You must specify a name for the column'; + $lang['strselectallfields'] = 'Select all fields'; + $lang['strselectneedscol'] = 'You must show at least one column.'; + $lang['strselectunary'] = 'Unary operators cannot have values.'; + $lang['strcolumnaltered'] = 'Column altered.'; + $lang['strcolumnalteredbad'] = 'Column alteration failed.'; + $lang['strconfdropcolumn'] = 'Are you sure you want to drop column "%s" from table "%s"?'; + $lang['strcolumndropped'] = 'Column dropped.'; + $lang['strcolumndroppedbad'] = 'Column drop failed.'; + $lang['straddcolumn'] = 'Add column'; + $lang['strcolumnadded'] = 'Column added.'; + $lang['strcolumnaddedbad'] = 'Column add failed.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Table altered.'; + $lang['strtablealteredbad'] = 'Table alteration failed.'; + $lang['strdataonly'] = 'Data only'; + $lang['strstructureonly'] = 'Structure only'; + $lang['strstructureanddata'] = 'Structure and data'; + $lang['strtabbed'] = 'Tabbed'; + $lang['strauto'] = 'Auto'; + $lang['strconfvacuumtable'] = 'Are you sure you want to vacuum "%s"?'; + $lang['strconfanalyzetable'] = 'Are you sure you want to analyze "%s"?'; + $lang['strconfreindextable'] = 'Are you sure you want to reindex "%s"?'; + $lang['strconfclustertable'] = 'Are you sure you want to cluster "%s"?'; + $lang['strestimatedrowcount'] = 'Estimated row count'; + $lang['strspecifytabletoanalyze'] = 'You must specify at least one table to analyze.'; + $lang['strspecifytabletoempty'] = 'You must specify at least one table to empty.'; + $lang['strspecifytabletodrop'] = 'You must specify at least one table to drop.'; + $lang['strspecifytabletovacuum'] = 'You must specify at least one table to vacuum.'; + $lang['strspecifytabletoreindex'] = 'You must specify at least one table to reindex.'; + $lang['strspecifytabletocluster'] = 'You must specify at least one table to cluster.'; + $lang['strnofieldsforinsert'] = 'You cannot insert a row into a table with no column.'; + + // Columns + $lang['strcolprop'] = 'Column properties'; + $lang['strnotableprovided'] = 'No table provided!'; + + // Users + $lang['struser'] = 'User'; + $lang['strusers'] = 'Users'; + $lang['strusername'] = 'Username'; + $lang['strpassword'] = 'Password'; + $lang['strsuper'] = 'Superuser?'; + $lang['strcreatedb'] = 'Create DB?'; + $lang['strexpires'] = 'Expires'; + $lang['strsessiondefaults'] = 'Session defaults'; + $lang['strnousers'] = 'No users found.'; + $lang['struserupdated'] = 'User updated.'; + $lang['struserupdatedbad'] = 'User update failed.'; + $lang['strshowallusers'] = 'Show all users'; + $lang['strcreateuser'] = 'Create user'; + $lang['struserneedsname'] = 'You must give a name for your user.'; + $lang['strusercreated'] = 'User created.'; + $lang['strusercreatedbad'] = 'Failed to create user.'; + $lang['strconfdropuser'] = 'Are you sure you want to drop the user "%s"?'; + $lang['struserdropped'] = 'User dropped.'; + $lang['struserdroppedbad'] = 'Failed to drop user.'; + $lang['straccount'] = 'Account'; + $lang['strchangepassword'] = 'Change password'; + $lang['strpasswordchanged'] = 'Password changed.'; + $lang['strpasswordchangedbad'] = 'Failed to change password.'; + $lang['strpasswordshort'] = 'Password is too short.'; + $lang['strpasswordconfirm'] = 'Password does not match confirmation.'; + + // Groups + $lang['strgroup'] = 'Group'; + $lang['strgroups'] = 'Groups'; + $lang['strgroupgroups'] = 'Groups in group "%s"'; + $lang['strshowallgroups'] = 'Show all groups'; + $lang['strnogroup'] = 'Group not found.'; + $lang['strnogroups'] = 'No groups found.'; + $lang['strcreategroup'] = 'Create group'; + $lang['strgroupneedsname'] = 'You must give a name for your group.'; + $lang['strgroupcreated'] = 'Group created.'; + $lang['strgroupcreatedbad'] = 'Group creation failed.'; + $lang['strconfdropgroup'] = 'Are you sure you want to drop the group "%s"?'; + $lang['strgroupdropped'] = 'Group dropped.'; + $lang['strgroupdroppedbad'] = 'Group drop failed.'; + $lang['strmembers'] = 'Members'; + $lang['strmemberof'] = 'Member of'; + $lang['stradminmembers'] = 'Admin members'; + $lang['straddmember'] = 'Add member'; + $lang['strmemberadded'] = 'Member added.'; + $lang['strmemberaddedbad'] = 'Member add failed.'; + $lang['strdropmember'] = 'Drop member'; + $lang['strconfdropmember'] = 'Are you sure you want to drop the member "%s" from the group "%s"?'; + $lang['strmemberdropped'] = 'Member dropped.'; + $lang['strmemberdroppedbad'] = 'Member drop failed.'; + + // Roles + $lang['strrole'] = 'Role'; + $lang['strroles'] = 'Roles'; + $lang['strshowallroles'] = 'Show all roles'; + $lang['strnoroles'] = 'No roles found.'; + $lang['strinheritsprivs'] = 'Inherits privileges?'; + $lang['strcreaterole'] = 'Create role'; + $lang['strcancreaterole'] = 'Can create role?'; + $lang['strrolecreated'] = 'Role created.'; + $lang['strrolecreatedbad'] = 'Create role failed.'; + $lang['strrolealtered'] = 'Role altered.'; + $lang['strrolealteredbad'] = 'Role alter failed.'; + $lang['strcanlogin'] = 'Can login?'; + $lang['strconnlimit'] = 'Connection limit'; + $lang['strdroprole'] = 'Drop role'; + $lang['strconfdroprole'] = 'Are you sure you want to drop the role "%s"?'; + $lang['strroledropped'] = 'Role dropped.'; + $lang['strroledroppedbad'] = 'Role drop failed.'; + $lang['strnolimit'] = 'No limit'; + $lang['strnever'] = 'Never'; + $lang['strroleneedsname'] = 'You must give a name for the role.'; + + // Privileges + $lang['strprivilege'] = 'Privilege'; + $lang['strprivileges'] = 'Privileges'; + $lang['strnoprivileges'] = 'This object has default owner privileges.'; + $lang['strgrant'] = 'Grant'; + $lang['strrevoke'] = 'Revoke'; + $lang['strgranted'] = 'Privileges changed.'; + $lang['strgrantfailed'] = 'Failed to change privileges.'; + $lang['strgrantbad'] = 'You must specify at least one user or group and at least one privilege.'; + $lang['strgrantor'] = 'Grantor'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Database'; + $lang['strdatabases'] = 'Databases'; + $lang['strshowalldatabases'] = 'Show all databases'; + $lang['strnodatabases'] = 'No databases found.'; + $lang['strcreatedatabase'] = 'Create database'; + $lang['strdatabasename'] = 'Database name'; + $lang['strdatabaseneedsname'] = 'You must give a name for your database.'; + $lang['strdatabasecreated'] = 'Database created.'; + $lang['strdatabasecreatedbad'] = 'Database creation failed.'; + $lang['strconfdropdatabase'] = 'Are you sure you want to drop the database "%s"?'; + $lang['strdatabasedropped'] = 'Database dropped.'; + $lang['strdatabasedroppedbad'] = 'Database drop failed.'; + $lang['strentersql'] = 'Enter the SQL to execute below:'; + $lang['strsqlexecuted'] = 'SQL executed.'; + $lang['strvacuumgood'] = 'Vacuum complete.'; + $lang['strvacuumbad'] = 'Vacuum failed.'; + $lang['stranalyzegood'] = 'Analyze complete.'; + $lang['stranalyzebad'] = 'Analyze failed.'; + $lang['strreindexgood'] = 'Reindex complete.'; + $lang['strreindexbad'] = 'Reindex failed.'; + $lang['strfull'] = 'Full'; + $lang['strfreeze'] = 'Freeze'; + $lang['strforce'] = 'Force'; + $lang['strsignalsent'] = 'Signal sent.'; + $lang['strsignalsentbad'] = 'Sending signal failed.'; + $lang['strallobjects'] = 'All objects'; + $lang['strdatabasealtered'] = 'Database altered.'; + $lang['strdatabasealteredbad'] = 'Database alter failed.'; + $lang['strspecifydatabasetodrop'] = 'You must specify at least one database to drop.'; + $lang['strtemplatedb'] = 'Template'; + $lang['strconfanalyzedatabase'] = 'Are you sure you want to analyze all tables in database "%s"?'; + $lang['strconfvacuumdatabase'] = 'Are you sure you want to vacuum all tables in database "%s"?'; + $lang['strconfreindexdatabase'] = 'Are you sure you want to reindex all tables in database "%s"?'; + $lang['strconfclusterdatabase'] = 'Are you sure you want to cluster all tables in database "%s"?'; + + // Views + $lang['strview'] = 'View'; + $lang['strviews'] = 'Views'; + $lang['strshowallviews'] = 'Show all views'; + $lang['strnoview'] = 'No view found.'; + $lang['strnoviews'] = 'No views found.'; + $lang['strcreateview'] = 'Create view'; + $lang['strviewname'] = 'View name'; + $lang['strviewneedsname'] = 'You must give a name for your view.'; + $lang['strviewneedsdef'] = 'You must give a definition for your view.'; + $lang['strviewneedsfields'] = 'You must give the columns you want selected in your view.'; + $lang['strviewcreated'] = 'View created.'; + $lang['strviewcreatedbad'] = 'View creation failed.'; + $lang['strconfdropview'] = 'Are you sure you want to drop the view "%s"?'; + $lang['strviewdropped'] = 'View dropped.'; + $lang['strviewdroppedbad'] = 'View drop failed.'; + $lang['strviewupdated'] = 'View updated.'; + $lang['strviewupdatedbad'] = 'View update failed.'; + $lang['strviewlink'] = 'Linking keys'; + $lang['strviewconditions'] = 'Additional conditions'; + $lang['strcreateviewwiz'] = 'Create view with wizard'; + $lang['strrenamedupfields'] = 'Rename duplicate fields'; + $lang['strdropdupfields'] = 'Drop duplicate fields'; + $lang['strerrordupfields'] = 'Error on duplicate fields'; + $lang['strviewaltered'] = 'View altered.'; + $lang['strviewalteredbad'] = 'View alteration failed.'; + $lang['strspecifyviewtodrop'] = 'You must specify at least one view to drop.'; + + // Sequences + $lang['strsequence'] = 'Sequence'; + $lang['strsequences'] = 'Sequences'; + $lang['strshowallsequences'] = 'Show all sequences'; + $lang['strnosequence'] = 'No sequence found.'; + $lang['strnosequences'] = 'No sequences found.'; + $lang['strcreatesequence'] = 'Create sequence'; + $lang['strlastvalue'] = 'Last value'; + $lang['strincrementby'] = 'Increment by'; + $lang['strstartvalue'] = 'Start value'; + $lang['strrestartvalue'] = 'Restart value'; + $lang['strmaxvalue'] = 'Max value'; + $lang['strminvalue'] = 'Min value'; + $lang['strcachevalue'] = 'Cache value'; + $lang['strlogcount'] = 'Log count'; + $lang['strcancycle'] = 'Can cycle?'; + $lang['striscalled'] = 'Will increment last value before returning next value (is_called)?'; + $lang['strsequenceneedsname'] = 'You must specify a name for your sequence.'; + $lang['strsequencecreated'] = 'Sequence created.'; + $lang['strsequencecreatedbad'] = 'Sequence creation failed.'; + $lang['strconfdropsequence'] = 'Are you sure you want to drop sequence "%s"?'; + $lang['strsequencedropped'] = 'Sequence dropped.'; + $lang['strsequencedroppedbad'] = 'Sequence drop failed.'; + $lang['strsequencerestart'] = 'Sequence restarted.'; + $lang['strsequencerestartbad'] = 'Sequence restart failed.'; + $lang['strsequencereset'] = 'Sequence reset.'; + $lang['strsequenceresetbad'] = 'Sequence reset failed.'; + $lang['strsequencealtered'] = 'Sequence altered.'; + $lang['strsequencealteredbad'] = 'Sequence alteration failed.'; + $lang['strsetval'] = 'Set value'; + $lang['strsequencesetval'] = 'Sequence value set.'; + $lang['strsequencesetvalbad'] = 'Sequence value set failed.'; + $lang['strnextval'] = 'Increment value'; + $lang['strsequencenextval'] = 'Sequence incremented.'; + $lang['strsequencenextvalbad'] = 'Sequence increment failed.'; + $lang['strspecifysequencetodrop'] = 'You must specify at least one sequence to drop.'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Indexes'; + $lang['strindexname'] = 'Index name'; + $lang['strshowallindexes'] = 'Show all indexes'; + $lang['strnoindex'] = 'No index found.'; + $lang['strnoindexes'] = 'No indexes found.'; + $lang['strcreateindex'] = 'Create index'; + $lang['strtabname'] = 'Tab name'; + $lang['strcolumnname'] = 'Column name'; + $lang['strindexneedsname'] = 'You must give a name for your index.'; + $lang['strindexneedscols'] = 'Indexes require a valid number of columns.'; + $lang['strindexcreated'] = 'Index created.'; + $lang['strindexcreatedbad'] = 'Index creation failed.'; + $lang['strconfdropindex'] = 'Are you sure you want to drop the index "%s"?'; + $lang['strindexdropped'] = 'Index dropped.'; + $lang['strindexdroppedbad'] = 'Index drop failed.'; + $lang['strkeyname'] = 'Key name'; + $lang['struniquekey'] = 'Unique key'; + $lang['strprimarykey'] = 'Primary key'; + $lang['strindextype'] = 'Type of index'; + $lang['strtablecolumnlist'] = 'Columns in table'; + $lang['strindexcolumnlist'] = 'Columns in index'; + $lang['strconfcluster'] = 'Are you sure you want to cluster on "%s"?'; + $lang['strclusteredgood'] = 'Cluster complete.'; + $lang['strclusteredbad'] = 'Cluster failed.'; + $lang['strconcurrently'] = 'Concurrently'; + $lang['strnoclusteravailable'] = 'Table not clustered on an index.'; + + // Rules + $lang['strrules'] = 'Rules'; + $lang['strrule'] = 'Rule'; + $lang['strshowallrules'] = 'Show all rules'; + $lang['strnorule'] = 'No rule found.'; + $lang['strnorules'] = 'No rules found.'; + $lang['strcreaterule'] = 'Create rule'; + $lang['strrulename'] = 'Rule name'; + $lang['strruleneedsname'] = 'You must specify a name for your rule.'; + $lang['strrulecreated'] = 'Rule created.'; + $lang['strrulecreatedbad'] = 'Rule creation failed.'; + $lang['strconfdroprule'] = 'Are you sure you want to drop the rule "%s" on "%s"?'; + $lang['strruledropped'] = 'Rule dropped.'; + $lang['strruledroppedbad'] = 'Rule drop failed.'; + + // Constraints + $lang['strconstraint'] = 'Constraint'; + $lang['strconstraints'] = 'Constraints'; + $lang['strshowallconstraints'] = 'Show all constraints'; + $lang['strnoconstraints'] = 'No constraints found.'; + $lang['strcreateconstraint'] = 'Create constraint'; + $lang['strconstraintcreated'] = 'Constraint created.'; + $lang['strconstraintcreatedbad'] = 'Constraint creation failed.'; + $lang['strconfdropconstraint'] = 'Are you sure you want to drop the constraint "%s" on "%s"?'; + $lang['strconstraintdropped'] = 'Constraint dropped.'; + $lang['strconstraintdroppedbad'] = 'Constraint drop failed.'; + $lang['straddcheck'] = 'Add check'; + $lang['strcheckneedsdefinition'] = 'Check constraint needs a definition.'; + $lang['strcheckadded'] = 'Check constraint added.'; + $lang['strcheckaddedbad'] = 'Failed to add check constraint.'; + $lang['straddpk'] = 'Add primary key'; + $lang['strpkneedscols'] = 'Primary key requires at least one column.'; + $lang['strpkadded'] = 'Primary key added.'; + $lang['strpkaddedbad'] = 'Failed to add primary key.'; + $lang['stradduniq'] = 'Add unique key'; + $lang['struniqneedscols'] = 'Unique key requires at least one column.'; + $lang['struniqadded'] = 'Unique key added.'; + $lang['struniqaddedbad'] = 'Failed to add unique key.'; + $lang['straddfk'] = 'Add foreign key'; + $lang['strfkneedscols'] = 'Foreign key requires at least one column.'; + $lang['strfkneedstarget'] = 'Foreign key requires a target table.'; + $lang['strfkadded'] = 'Foreign key added.'; + $lang['strfkaddedbad'] = 'Failed to add foreign key.'; + $lang['strfktarget'] = 'Target table'; + $lang['strfkcolumnlist'] = 'Columns in key'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Function'; + $lang['strfunctions'] = 'Functions'; + $lang['strshowallfunctions'] = 'Show all functions'; + $lang['strnofunction'] = 'No function found.'; + $lang['strnofunctions'] = 'No functions found.'; + $lang['strcreateplfunction'] = 'Create SQL/PL function'; + $lang['strcreateinternalfunction'] = 'Create internal function'; + $lang['strcreatecfunction'] = 'Create C function'; + $lang['strfunctionname'] = 'Function name'; + $lang['strreturns'] = 'Returns'; + $lang['strproglanguage'] = 'Programming language'; + $lang['strfunctionneedsname'] = 'You must give a name for your function.'; + $lang['strfunctionneedsdef'] = 'You must give a definition for your function.'; + $lang['strfunctioncreated'] = 'Function created.'; + $lang['strfunctioncreatedbad'] = 'Function creation failed.'; + $lang['strconfdropfunction'] = 'Are you sure you want to drop the function "%s"?'; + $lang['strfunctiondropped'] = 'Function dropped.'; + $lang['strfunctiondroppedbad'] = 'Function drop failed.'; + $lang['strfunctionupdated'] = 'Function updated.'; + $lang['strfunctionupdatedbad'] = 'Function update failed.'; + $lang['strobjectfile'] = 'Object File'; + $lang['strlinksymbol'] = 'Link Symbol'; + $lang['strarguments'] = 'Arguments'; + $lang['strargmode'] = 'Mode'; + $lang['strargtype'] = 'Type'; + $lang['strargadd'] = 'Add another argument'; + $lang['strargremove'] = 'Remove this argument'; + $lang['strargnoargs'] = 'This function will not take any arguments.'; + $lang['strargenableargs'] = 'Enable arguments being passed to this function.'; + $lang['strargnorowabove'] = 'There needs to be a row above this row.'; + $lang['strargnorowbelow'] = 'There needs to be a row below this row.'; + $lang['strargraise'] = 'Move up.'; + $lang['strarglower'] = 'Move down.'; + $lang['strargremoveconfirm'] = 'Are you sure you want to remove this argument? This CANNOT be undone.'; + $lang['strfunctioncosting'] = 'Function Costing'; + $lang['strresultrows'] = 'Result Rows'; + $lang['strexecutioncost'] = 'Execution Cost'; + $lang['strspecifyfunctiontodrop'] = 'You must specify at least one function to drop.'; + + // Triggers + $lang['strtrigger'] = 'Trigger'; + $lang['strtriggers'] = 'Triggers'; + $lang['strshowalltriggers'] = 'Show all triggers'; + $lang['strnotrigger'] = 'No trigger found.'; + $lang['strnotriggers'] = 'No triggers found.'; + $lang['strcreatetrigger'] = 'Create trigger'; + $lang['strtriggerneedsname'] = 'You must specify a name for your trigger.'; + $lang['strtriggerneedsfunc'] = 'You must specify a function for your trigger.'; + $lang['strtriggercreated'] = 'Trigger created.'; + $lang['strtriggercreatedbad'] = 'Trigger creation failed.'; + $lang['strconfdroptrigger'] = 'Are you sure you want to drop the trigger "%s" on "%s"?'; + $lang['strconfenabletrigger'] = 'Are you sure you want to enable the trigger "%s" on "%s"?'; + $lang['strconfdisabletrigger'] = 'Are you sure you want to disable the trigger "%s" on "%s"?'; + $lang['strtriggerdropped'] = 'Trigger dropped.'; + $lang['strtriggerdroppedbad'] = 'Trigger drop failed.'; + $lang['strtriggerenabled'] = 'Trigger enabled.'; + $lang['strtriggerenabledbad'] = 'Trigger enable failed.'; + $lang['strtriggerdisabled'] = 'Trigger disabled.'; + $lang['strtriggerdisabledbad'] = 'Trigger disable failed.'; + $lang['strtriggeraltered'] = 'Trigger altered.'; + $lang['strtriggeralteredbad'] = 'Trigger alteration failed.'; + $lang['strforeach'] = 'For each'; + + // Types + $lang['strtype'] = 'Type'; + $lang['strtypes'] = 'Types'; + $lang['strshowalltypes'] = 'Show all types'; + $lang['strnotype'] = 'No type found.'; + $lang['strnotypes'] = 'No types found.'; + $lang['strcreatetype'] = 'Create type'; + $lang['strcreatecomptype'] = 'Create composite type'; + $lang['strcreateenumtype'] = 'Create enum type'; + $lang['strtypeneedsfield'] = 'You must specify at least one field.'; + $lang['strtypeneedsvalue'] = 'You must specify at least one value.'; + $lang['strtypeneedscols'] = 'You must specify a valid number of fields.'; + $lang['strtypeneedsvals'] = 'You must specify a valid number of values.'; + $lang['strinputfn'] = 'Input function'; + $lang['stroutputfn'] = 'Output function'; + $lang['strpassbyval'] = 'Passed by val?'; + $lang['stralignment'] = 'Alignment'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Delimiter'; + $lang['strstorage'] = 'Storage'; + $lang['strfield'] = 'Field'; + $lang['strnumfields'] = 'Num. of fields'; + $lang['strnumvalues'] = 'Num. of values'; + $lang['strtypeneedsname'] = 'You must give a name for your type.'; + $lang['strtypeneedslen'] = 'You must give a length for your type.'; + $lang['strtypecreated'] = 'Type created.'; + $lang['strtypecreatedbad'] = 'Type creation failed.'; + $lang['strconfdroptype'] = 'Are you sure you want to drop the type "%s"?'; + $lang['strtypedropped'] = 'Type dropped.'; + $lang['strtypedroppedbad'] = 'Type drop failed.'; + $lang['strflavor'] = 'Flavor'; + $lang['strbasetype'] = 'Base'; + $lang['strcompositetype'] = 'Composite'; + $lang['strpseudotype'] = 'Pseudo'; + $lang['strenum'] = 'Enum'; + $lang['strenumvalues'] = 'Enum values'; + + // Schemas + $lang['strschema'] = 'Schema'; + $lang['strschemas'] = 'Schemas'; + $lang['strshowallschemas'] = 'Show all schemas'; + $lang['strnoschema'] = 'No schema found.'; + $lang['strnoschemas'] = 'No schemas found.'; + $lang['strcreateschema'] = 'Create schema'; + $lang['strschemaname'] = 'Schema name'; + $lang['strschemaneedsname'] = 'You must give a name for your schema.'; + $lang['strschemacreated'] = 'Schema created.'; + $lang['strschemacreatedbad'] = 'Schema creation failed.'; + $lang['strconfdropschema'] = 'Are you sure you want to drop the schema "%s"?'; + $lang['strschemadropped'] = 'Schema dropped.'; + $lang['strschemadroppedbad'] = 'Schema drop failed.'; + $lang['strschemaaltered'] = 'Schema altered.'; + $lang['strschemaalteredbad'] = 'Schema alteration failed.'; + $lang['strsearchpath'] = 'Schema search path'; + $lang['strspecifyschematodrop'] = 'You must specify at least one schema to drop.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Domain'; + $lang['strdomains'] = 'Domains'; + $lang['strshowalldomains'] = 'Show all domains'; + $lang['strnodomains'] = 'No domains found.'; + $lang['strcreatedomain'] = 'Create domain'; + $lang['strdomaindropped'] = 'Domain dropped.'; + $lang['strdomaindroppedbad'] = 'Domain drop failed.'; + $lang['strconfdropdomain'] = 'Are you sure you want to drop the domain "%s"?'; + $lang['strdomainneedsname'] = 'You must give a name for your domain.'; + $lang['strdomaincreated'] = 'Domain created.'; + $lang['strdomaincreatedbad'] = 'Domain creation failed.'; + $lang['strdomainaltered'] = 'Domain altered.'; + $lang['strdomainalteredbad'] = 'Domain alteration failed.'; + + // Operators + $lang['stroperator'] = 'Operator'; + $lang['stroperators'] = 'Operators'; + $lang['strshowalloperators'] = 'Show all operators'; + $lang['strnooperator'] = 'No operator found.'; + $lang['strnooperators'] = 'No operators found.'; + $lang['strcreateoperator'] = 'Create operator'; + $lang['strleftarg'] = 'Left Arg Type'; + $lang['strrightarg'] = 'Right Arg Type'; + $lang['strcommutator'] = 'Commutator'; + $lang['strnegator'] = 'Negator'; + $lang['strrestrict'] = 'Restrict'; + $lang['strjoin'] = 'Join'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Merges'; + $lang['strleftsort'] = 'Left sort'; + $lang['strrightsort'] = 'Right sort'; + $lang['strlessthan'] = 'Less than'; + $lang['strgreaterthan'] = 'Greater than'; + $lang['stroperatorneedsname'] = 'You must give a name for your operator.'; + $lang['stroperatorcreated'] = 'Operator created.'; + $lang['stroperatorcreatedbad'] = 'Operator creation failed.'; + $lang['strconfdropoperator'] = 'Are you sure you want to drop the operator "%s"?'; + $lang['stroperatordropped'] = 'Operator dropped.'; + $lang['stroperatordroppedbad'] = 'Operator drop failed.'; + + // Casts + $lang['strcasts'] = 'Casts'; + $lang['strnocasts'] = 'No casts found.'; + $lang['strsourcetype'] = 'Source type'; + $lang['strtargettype'] = 'Target type'; + $lang['strimplicit'] = 'Implicit'; + $lang['strinassignment'] = 'In assignment'; + $lang['strbinarycompat'] = '(Binary compatible)'; + + // Conversions + $lang['strconversions'] = 'Conversions'; + $lang['strnoconversions'] = 'No conversions found.'; + $lang['strsourceencoding'] = 'Source encoding'; + $lang['strtargetencoding'] = 'Target encoding'; + + // Languages + $lang['strlanguages'] = 'Languages'; + $lang['strnolanguages'] = 'No languages found.'; + $lang['strtrusted'] = 'Trusted'; + + // Info + $lang['strnoinfo'] = 'No information available.'; + $lang['strreferringtables'] = 'Referring tables'; + $lang['strparenttables'] = 'Parent tables'; + $lang['strchildtables'] = 'Child tables'; + + // Aggregates + $lang['straggregate'] = 'Aggregate'; + $lang['straggregates'] = 'Aggregates'; + $lang['strnoaggregates'] = 'No aggregates found.'; + $lang['stralltypes'] = '(All types)'; + $lang['strcreateaggregate'] = 'Create aggregate'; + $lang['straggrbasetype'] = 'Input data type'; + $lang['straggrsfunc'] = 'State transition function'; + $lang['straggrstype'] = 'Data type for state value'; + $lang['straggrffunc'] = 'Final function'; + $lang['straggrinitcond'] = 'Initial condition'; + $lang['straggrsortop'] = 'Sort operator'; + $lang['strconfdropaggregate'] = 'Are you sure you want to drop the aggregate "%s"?'; + $lang['straggregatedropped'] = 'Aggregate dropped.'; + $lang['straggregatedroppedbad'] = 'Aggregate drop failed.'; + $lang['straggraltered'] = 'Aggregate altered.'; + $lang['straggralteredbad'] = 'Aggregate alteration failed.'; + $lang['straggrneedsname'] = 'You must specify a name for the aggregate.'; + $lang['straggrneedsbasetype'] = 'You must specify the input data type for the aggregate.'; + $lang['straggrneedssfunc'] = 'You must specify the name of the state transition function for the aggregate.'; + $lang['straggrneedsstype'] = 'You must specify the data type for the aggregate\'s state value.'; + $lang['straggrcreated'] = 'Aggregate created.'; + $lang['straggrcreatedbad'] = 'Aggregate creation failed.'; + $lang['straggrshowall'] = 'Show all aggregates'; + + // Operator Classes + $lang['stropclasses'] = 'Op Classes'; + $lang['strnoopclasses'] = 'No operator classes found.'; + $lang['straccessmethod'] = 'Access method'; + + // Stats and performance + $lang['strrowperf'] = 'Row Performance'; + $lang['strioperf'] = 'I/O Performance'; + $lang['stridxrowperf'] = 'Index Row Performance'; + $lang['stridxioperf'] = 'Index I/O Performance'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sequential'; + $lang['strscan'] = 'Scan'; + $lang['strread'] = 'Read'; + $lang['strfetch'] = 'Fetch'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disk'; + $lang['strrows2'] = 'Rows'; + + // Tablespaces + $lang['strtablespace'] = 'Tablespace'; + $lang['strtablespaces'] = 'Tablespaces'; + $lang['strshowalltablespaces'] = 'Show all tablespaces'; + $lang['strnotablespaces'] = 'No tablespaces found.'; + $lang['strcreatetablespace'] = 'Create tablespace'; + $lang['strlocation'] = 'Location'; + $lang['strtablespaceneedsname'] = 'You must give a name for your tablespace.'; + $lang['strtablespaceneedsloc'] = 'You must give a directory in which to create the tablespace.'; + $lang['strtablespacecreated'] = 'Tablespace created.'; + $lang['strtablespacecreatedbad'] = 'Tablespace creation failed.'; + $lang['strconfdroptablespace'] = 'Are you sure you want to drop the tablespace "%s"?'; + $lang['strtablespacedropped'] = 'Tablespace dropped.'; + $lang['strtablespacedroppedbad'] = 'Tablespace drop failed.'; + $lang['strtablespacealtered'] = 'Tablespace altered.'; + $lang['strtablespacealteredbad'] = 'Tablespace alteration failed.'; + + // Miscellaneous + $lang['strtopbar'] = '%s running on %s:%s -- You are logged in as user "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Help'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Help page browser'; + $lang['strselecthelppage'] = 'Select a help page'; + $lang['strinvalidhelppage'] = 'Invalid help page.'; + $lang['strlogintitle'] = 'Login to %s'; + $lang['strlogoutmsg'] = 'Logged out of %s'; + $lang['strloading'] = 'Loading...'; + $lang['strerrorloading'] = 'Error Loading'; + $lang['strclicktoreload'] = 'Click to reload'; + + // Autovacuum + $lang['strautovacuum'] = 'Autovacuum'; + $lang['strturnedon'] = 'Turned On'; + $lang['strturnedoff'] = 'Turned Off'; + $lang['strenabled'] = 'Enabled'; + $lang['strnovacuumconf'] = 'No autovacuum configuration found.'; + $lang['strvacuumbasethreshold'] = 'Vacuum Base Threshold'; + $lang['strvacuumscalefactor'] = 'Vacuum Scale Factor'; + $lang['stranalybasethreshold'] = 'Analyze Base Threshold'; + $lang['stranalyzescalefactor'] = 'Analyze Scale Factor'; + $lang['strvacuumcostdelay'] = 'Vacuum Cost Delay'; + $lang['strvacuumcostlimit'] = 'Vacuum Cost Limit'; + $lang['strvacuumpertable'] = 'Autovacuum setup per table'; + $lang['straddvacuumtable'] = 'Add autovacuum setup for a table'; + $lang['streditvacuumtable'] = 'Edit autovacuum setup for table %s'; + $lang['strdelvacuumtable'] = 'Delete autovacuum setup for table %s ?'; + $lang['strvacuumtablereset'] = 'Autovacuum setup for table %s reset to default values'; + $lang['strdelvacuumtablefail'] = 'Fail to remove the autovacuum setup for table %s'; + $lang['strsetvacuumtablesaved'] = 'Autovacuum setup for table %s saved.'; + $lang['strsetvacuumtablefail'] = 'Autovacuum setup for table %s failed.'; + $lang['strspecifydelvacuumtable'] = 'You must specify the table you want remove the autovacuum parameters from.'; + $lang['strspecifyeditvacuumtable'] = 'You must specify the table you want to edit the autovacuum parameters from.'; + $lang['strnotdefaultinred'] = 'Not default values are in red.'; + + // Table-level Locks + $lang['strlocks'] = 'Locks'; + $lang['strtransaction'] = 'Transaction ID'; + $lang['strvirtualtransaction'] = 'Virtual Transaction ID'; + $lang['strprocessid'] = 'Process ID'; + $lang['strmode'] = 'Lock mode'; + $lang['strislockheld'] = 'Is lock held?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Prepared transactions'; + $lang['strxactid'] = 'Transaction ID'; + $lang['strgid'] = 'Global ID'; + + // Fulltext search + $lang['strfulltext'] = 'Full Text Search'; + $lang['strftsconfig'] = 'FTS configuration'; + $lang['strftsconfigs'] = 'Configurations'; + $lang['strftscreateconfig'] = 'Create FTS configuration'; + $lang['strftscreatedict'] = 'Create dictionary'; + $lang['strftscreatedicttemplate'] = 'Create dictionary template'; + $lang['strftscreateparser'] = 'Create parser'; + $lang['strftsnoconfigs'] = 'No FTS configuration found.'; + $lang['strftsconfigdropped'] = 'FTS configuration dropped.'; + $lang['strftsconfigdroppedbad'] = 'FTS configuration drop failed.'; + $lang['strconfdropftsconfig'] = 'Are you sure you want to drop the FTS configuration "%s"?'; + $lang['strconfdropftsdict'] = 'Are you sure you want to drop the FTS dictionary "%s"?'; + $lang['strconfdropftsmapping'] = 'Are you sure you want to drop mapping "%s" of FTS configuration "%s"?'; + $lang['strftstemplate'] = 'Template'; + $lang['strftsparser'] = 'Parser'; + $lang['strftsconfigneedsname'] = 'You must give a name for your FTS configuration.'; + $lang['strftsconfigcreated'] = 'FTS configuration created.'; + $lang['strftsconfigcreatedbad'] = 'FTS configuration creation failed.'; + $lang['strftsmapping'] = 'Mapping'; + $lang['strftsdicts'] = 'Dictionaries'; + $lang['strftsdict'] = 'Dictionary'; + $lang['strftsemptymap'] = 'Empty FTS configuration map.'; + $lang['strftsconfigaltered'] = 'FTS configuration altered.'; + $lang['strftsconfigalteredbad'] = 'FTS configuration alter failed.'; + $lang['strftsconfigmap'] = 'FTS configuration map'; + $lang['strftsparsers'] = 'FTS parsers'; + $lang['strftsnoparsers'] = 'No FTS parsers available.'; + $lang['strftsnodicts'] = 'No FTS dictionaries available.'; + $lang['strftsdictcreated'] = 'FTS dictionary created.'; + $lang['strftsdictcreatedbad'] = 'FTS dictionary creation failed.'; + $lang['strftslexize'] = 'Lexize'; + $lang['strftsinit'] = 'Init'; + $lang['strftsoptionsvalues'] = 'Options and values'; + $lang['strftsdictneedsname'] = 'You must give a name for your FTS dictionary.'; + $lang['strftsdictdropped'] = 'FTS dictionary dropped.'; + $lang['strftsdictdroppedbad'] = 'FTS dictionary drop failed.'; + $lang['strftsdictaltered'] = 'FTS dictionary altered.'; + $lang['strftsdictalteredbad'] = 'FTS dictionary alter failed.'; + $lang['strftsaddmapping'] = 'Add new mapping'; + $lang['strftsspecifymappingtodrop'] = 'You must specify at least one mapping to drop.'; + $lang['strftsspecifyconfigtoalter'] = 'You must specify a FTS configuration to alter'; + $lang['strftsmappingdropped'] = 'FTS mapping dropped.'; + $lang['strftsmappingdroppedbad'] = 'FTS mapping drop failed.'; + $lang['strftsnodictionaries'] = 'No dictionaries found.'; + $lang['strftsmappingaltered'] = 'FTS mapping altered.'; + $lang['strftsmappingalteredbad'] = 'FTS mapping alter failed.'; + $lang['strftsmappingadded'] = 'FTS mapping added.'; + $lang['strftsmappingaddedbad'] = 'FTS mapping add failed.'; + $lang['strftstabconfigs'] = 'Configurations'; + $lang['strftstabdicts'] = 'Dictionaries'; + $lang['strftstabparsers'] = 'Parsers'; + $lang['strftscantparsercopy'] = 'Can\'t specify both parser and template during text search configuration creation.'; + + //Plugins + $lang['strpluginnotfound'] = 'Error: plugin \'%s\' not found. Check if this plugin exists in the plugins/ directory, or if this plugins has a plugin.php file. Plugin\'s names are case sensitive'; + $lang['stractionnotfound'] = 'Error: action \'%s\' not found in the \'%s\' plugin, or it was not specified as an action.'; + $lang['strhooknotfound'] = 'Error: hook \'%s\' is not avaliable.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/french.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/french.php new file mode 100644 index 00000000..09ff57ad --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/french.php @@ -0,0 +1,899 @@ +<?php + + /** + * French Language file for phpPgAdmin. + * @maintainer Guillaume (ioguix) de Rorthais + * + * $Id: french.php,v 1.36 2008/03/27 10:46:32 ioguix Exp $ + */ + + // Language and character set + $lang['applang'] = 'Français'; + $lang['applocale'] = 'fr-FR'; + $lang['applangdir'] = 'ltr'; + + // Basic strings + $lang['strintro'] = 'Bienvenue sur phpPgAdmin.'; + $lang['strppahome'] = 'Page d\'accueil de phpPgAdmin'; + $lang['strpgsqlhome'] = 'Page d\'accueil de PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Documentation PostgreSQL (local)'; + $lang['strreportbug'] = 'Rapporter un bug'; + $lang['strviewfaq'] = 'Lire la FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Connexion'; + $lang['strloginfailed'] = 'Échec de la connexion'; + $lang['strlogindisallowed'] = 'Connexion désactivée pour raison de sécurité'; + $lang['strserver'] = 'Serveur'; + $lang['strservers'] = 'Serveurs'; + $lang['strgroupservers'] = 'Serveurs du groupe "%s"'; + $lang['strallservers'] = 'Tous les serveurs'; + $lang['strintroduction'] = 'Introduction'; + $lang['strhost'] = 'Hôte'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Déconnexion'; + $lang['strowner'] = 'Propriétaire'; + $lang['straction'] = 'Action'; + $lang['stractions'] = 'Actions'; + $lang['strname'] = 'Nom'; + $lang['strdefinition'] = 'Définition'; + $lang['strproperties'] = 'Propriétés'; + $lang['strbrowse'] = 'Parcourir'; + $lang['strenable'] = 'Activer'; + $lang['strdisable'] = 'Désactiver'; + $lang['strdrop'] = 'Supprimer'; + $lang['strdropped'] = 'Supprimé'; + $lang['strnull'] = 'NULL (le mot)'; + $lang['strnotnull'] = 'NOT NULL'; + $lang['strprev'] = 'Précédent'; + $lang['strnext'] = 'Suivant'; + $lang['strfirst'] = '<< Début'; + $lang['strlast'] = 'Fin >>'; + $lang['strfailed'] = 'Échec'; + $lang['strcreate'] = 'Créer'; + $lang['strcreated'] = 'Créé'; + $lang['strcomment'] = 'Commentaire'; + $lang['strlength'] = 'Longueur'; + $lang['strdefault'] = 'Défaut'; + $lang['stralter'] = 'Modifier'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Annuler'; + $lang['strkill'] = 'Tuer'; + $lang['strac'] = 'Activer la complétion automatique'; + $lang['strsave'] = 'Sauvegarder'; + $lang['strreset'] = 'Réinitialiser'; + $lang['strrestart'] = 'Redémarrer'; + $lang['strinsert'] = 'Insérer'; + $lang['strselect'] = 'Sélectionner'; + $lang['strdelete'] = 'Effacer'; + $lang['strupdate'] = 'Modifier'; + $lang['strreferences'] = 'Références'; + $lang['stryes'] = 'Oui'; + $lang['strno'] = 'Non'; + $lang['strtrue'] = 'TRUE'; + $lang['strfalse'] = 'FALSE'; + $lang['stredit'] = 'Éditer'; + $lang['strcolumn'] = 'Colonne'; + $lang['strcolumns'] = 'Colonnes'; + $lang['strrows'] = 'ligne(s)'; + $lang['strrowsaff'] = 'ligne(s) affectée(s).'; + $lang['strobjects'] = 'objet(s)'; + $lang['strback'] = 'Retour'; + $lang['strqueryresults'] = 'Résultats de la requête'; + $lang['strshow'] = 'Voir'; + $lang['strempty'] = 'Vider'; + $lang['strlanguage'] = 'Langage'; + $lang['strencoding'] = 'Codage'; + $lang['strvalue'] = 'Valeur'; + $lang['strunique'] = 'Unique'; + $lang['strprimary'] = 'Primaire'; + $lang['strexport'] = 'Exporter'; + $lang['strimport'] = 'Importer'; + $lang['strallowednulls'] = 'Autoriser les caractères NULL'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Chaîne/champ vide'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'Analyze'; + $lang['strclusterindex'] = 'Cluster'; + $lang['strclustered'] = 'En Cluster ?'; + $lang['strreindex'] = 'Reindex'; + $lang['strexecute'] = 'Lancer'; + $lang['stradd'] = 'Ajouter'; + $lang['strevent'] = 'Événement'; + $lang['strwhere'] = 'Où'; + $lang['strinstead'] = 'Faire à la place'; + $lang['strwhen'] = 'Quand'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Donnée'; + $lang['strconfirm'] = 'Confirmer'; + $lang['strexpression'] = 'Expression'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ' :'; + $lang['strexpand'] = 'Étendre'; + $lang['strcollapse'] = 'Réduire'; + $lang['strfind'] = 'Rechercher'; + $lang['stroptions'] = 'Options'; + $lang['strrefresh'] = 'Rafraichir'; + $lang['strdownload'] = 'Télécharger'; + $lang['strdownloadgzipped'] = 'Télécharger avec compression gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OID'; + $lang['stradvanced'] = 'Avancé'; + $lang['strvariables'] = 'Variables'; + $lang['strprocess'] = 'Processus'; + $lang['strprocesses'] = 'Processus'; + $lang['strsetting'] = 'Paramétrage'; + $lang['streditsql'] = 'Éditer SQL'; + $lang['strruntime'] = 'Temps d\'exécution total : %s ms'; + $lang['strpaginate'] = 'Paginer les résultats'; + $lang['struploadscript'] = 'ou importer un script SQL :'; + $lang['strstarttime'] = 'Heure de début'; + $lang['strfile'] = 'Fichier'; + $lang['strfileimported'] = 'Fichier importé.'; + $lang['strtrycred'] = 'Utilisez ces identifiants pour tous les serveurs'; + $lang['strconfdropcred'] = 'For security reason, disconnecting will destroy your shared login information. Are you sure you want to disconnect ?'; + $lang['strconfdropcred'] = 'Par mesure de sécurité, la déconnexion supprimera le partage de vos identifiants pour tous les serveurs. Êtes-vous certain de vouloir vous déconnecter ?'; + $lang['stractionsonmultiplelines'] = 'Actions sur plusieurs lignes'; + $lang['strselectall'] = 'Sélectionner tout'; + $lang['strunselectall'] = 'Desélectionner tout'; + $lang['strlocale'] = 'Locale'; + $lang['strcollation'] = 'Tri'; + $lang['strctype'] = 'Type de cartactère'; + $lang['strdefaultvalues'] = 'Valeurs par défaut'; + $lang['strnewvalues'] = 'Nouvelles valeurs'; + $lang['strstart'] = 'Démarrer'; + $lang['strstop'] = 'Arrêter'; + $lang['strgotoppage'] = 'Haut de la page'; + $lang['strtheme'] = 'Thème'; + + // Admin + $lang['stradminondatabase'] = 'Les actions d\'administration suivantes s\'appliquent à l\'ensemble de la base de donnée %s.'; + $lang['stradminontable'] = 'Les actions d\'administration suivantes s\'appliquent à la table %s.'; + + // User-supplied SQL history + $lang['strhistory'] = 'Historique'; + $lang['strnohistory'] = 'Pas d\'historique.'; + $lang['strclearhistory'] = 'Éffacer l\'historique'; + $lang['strdelhistory'] = 'Supprimer de l\'historique'; + $lang['strconfdelhistory'] = 'Voulez-vous vraiment supprimer cette requête de l\'historique ?'; + $lang['strconfclearhistory'] = 'Voulez-vous vraiment éffacer l\'historique ?'; + $lang['strnodatabaseselected'] = 'Veuillez sélectionner une base de données.'; + + // Database Sizes + $lang['strnoaccess'] = 'Pas d\'Accès'; + $lang['strsize'] = 'Taille'; + $lang['strbytes'] = 'octets'; + $lang['strkb'] = ' Ko'; + $lang['strmb'] = ' Mo'; + $lang['strgb'] = ' Go'; + $lang['strtb'] = ' To'; + + // Error handling + $lang['strnoframes'] = 'Cette application fonctionne mieux avec un navigateur pouvant afficher des frames mais peut être utilisée sans frames en suivant les liens ci-dessous.'; + $lang['strnoframeslink'] = 'Utiliser sans frames'; + $lang['strbadconfig'] = 'Le fichier de configuration config.inc.php est obsolète. Vous avez besoin de le regénérer à partir de config.inc.php-dist.'; + $lang['strnotloaded'] = 'Vous n\'avez pas compilé correctement le support de la base de données dans votre installation de PHP.'; + $lang['strpostgresqlversionnotsupported'] = 'Cette version de PostgreSQL n\'est pas supportée. Merci de mettre à jour PHP à la version %s ou ultérieure.'; + $lang['strbadschema'] = 'Schéma spécifié invalide.'; + $lang['strbadencoding'] = 'Impossible de spécifier l\'encodage de la base de données.'; + $lang['strsqlerror'] = 'Erreur SQL :'; + $lang['strinstatement'] = 'Dans l\'instruction :'; + $lang['strinvalidparam'] = 'Paramètres de script invalides.'; + $lang['strnodata'] = 'Pas de résultats.'; + $lang['strnoobjects'] = 'Aucun objet trouvé.'; + $lang['strrownotunique'] = 'Pas d\'identifiant unique pour cette ligne.'; + $lang['strnouploads'] = 'Importation de fichiers désactivée.'; + $lang['strimporterror'] = 'Erreur d\'importation.'; + $lang['strimporterror-fileformat'] = 'Erreur d\'importation : échec lors de la détermination automatique du format de fichier.'; + $lang['strimporterrorline'] = 'Erreur d\'importation à la ligne %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Erreur d\'importation sur la ligne %s : la ligne ne possède pas le bon nombre de colonnes.'; + $lang['strimporterror-uploadedfile'] = 'Erreur d\'importation : le fichier n\'a pas pû être récupéré sur le serveur.'; + $lang['strcannotdumponwindows'] = 'La sauvegarde de table complexe et des noms de schémas n\'est pas supporté sur Windows.'; + $lang['strinvalidserverparam'] = 'Tentative de connexion avec un serveur invalide, il est possible que quelqu\'un essai de pirater votre système.'; + $lang['strnoserversupplied'] = 'Aucun serveur fournis !'; + $lang['strbadpgdumppath'] = 'Erreur d\'export : n\'a pu exécuter pg_dump (chemin indiqué dans votre conf/config.inc.php : %s). Merci de corriger le chemin dans votre configuration et de vous reconnecter.'; + $lang['strbadpgdumpallpath'] = 'Erreur d\'export : n\'a pu exécuter pg_dumpall (chemin indiqué dans votre conf/config.inc.php : %s). Merci de corriger le chemin dans votre configuration et de vous reconnecter.'; + $lang['strconnectionfail'] = 'Connexion au serveur échouée.'; + + // Tables + $lang['strtable'] = 'Table'; + $lang['strtables'] = 'Tables'; + $lang['strshowalltables'] = 'Voir toutes les tables'; + $lang['strnotables'] = 'Aucune table trouvée.'; + $lang['strnotable'] = 'Aucune table trouvée.'; + $lang['strcreatetable'] = 'Créer une table'; + $lang['strcreatetablelike'] = 'Créer une table d\'après une table existante'; + $lang['strcreatetablelikeparent'] = 'Table modèle'; + $lang['strcreatelikewithdefaults'] = 'inclure les valeurs par défaut.'; + $lang['strcreatelikewithconstraints'] = 'inclure les contraintes.'; + $lang['strcreatelikewithindexes'] = 'inclure les indexes.'; + $lang['strtablename'] = 'Nom de la table'; + $lang['strtableneedsname'] = 'Vous devez donner un nom pour votre table.'; + $lang['strtablelikeneedslike'] = 'Vous devez préciser une table modèle.'; + $lang['strtableneedsfield'] = 'Vous devez spécifier au moins un champ.'; + $lang['strtableneedscols'] = 'Vous devez indiquer un nombre valide de colonnes.'; + $lang['strtablecreated'] = 'Table créée.'; + $lang['strtablecreatedbad'] = 'Échec de la création de table.'; + $lang['strconfdroptable'] = 'Êtes-vous sur de vouloir supprimer la table « %s » ?'; + $lang['strtabledropped'] = 'Table supprimée.'; + $lang['strtabledroppedbad'] = 'Échec lors de la suppression de table.'; + $lang['strconfemptytable'] = 'Êtes-vous sûr de vouloir vider la table « %s » ?'; + $lang['strtableemptied'] = 'Table vide.'; + $lang['strtableemptiedbad'] = 'Échec du vidage de la table.'; + $lang['strinsertrow'] = 'Insérer un enregistrement.'; + $lang['strrowinserted'] = 'Enregistrement inséré.'; + $lang['strrowinsertedbad'] = 'Échec lors de l\'insertion d\'un enregistrement.'; + $lang['strnofkref'] = 'Aucune valeur correspondate pour la clé étrangère %s.'; + $lang['strrowduplicate'] = 'Échec lors de l\'insertion d\'un enregistrement, a tenté de faire une insertion dupliquée.'; + $lang['streditrow'] = 'Éditer l\'enregistrement.'; + $lang['strrowupdated'] = 'Enregistrement mis à jour.'; + $lang['strrowupdatedbad'] = 'Échec de mise à jour de l\'enregistrement.'; + $lang['strdeleterow'] = 'Effacer l\'enregistrement'; + $lang['strconfdeleterow'] = 'Êtes-vous sûr de vouloir supprimer cet enregistrement ?'; + $lang['strrowdeleted'] = 'Enregistrement supprimé.'; + $lang['strrowdeletedbad'] = 'Échec lors de la suppression de l\'enregistrement.'; + $lang['strinsertandrepeat'] = 'Insérer et répéter'; + $lang['strnumcols'] = 'Nombre de colonnes'; + $lang['strcolneedsname'] = 'Vous devez spécifier un nom pour la colonne'; + $lang['strselectallfields'] = 'Sélectionner tous les champs'; + $lang['strselectneedscol'] = 'Vous devez sélectionner au moins une colonne.'; + $lang['strselectunary'] = 'Les opérateurs unaires ne peuvent avoir de valeurs.'; + $lang['strcolumnaltered'] = 'Colonne modifiée.'; + $lang['strcolumnalteredbad'] = 'Échec lors de la modification de la colonne.'; + $lang['strconfdropcolumn'] = 'Êtes-vous sûr de vouloir supprimer la colonne « %s » de la table « %s » ?'; + $lang['strcolumndropped'] = 'Colonne supprimée.'; + $lang['strcolumndroppedbad'] = 'Échec lors de la suppression de la colonne.'; + $lang['straddcolumn'] = 'Ajouter une colonne'; + $lang['strcolumnadded'] = 'Colonne ajoutée.'; + $lang['strcolumnaddedbad'] = 'Échec lors de l\'ajout de la colonne.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Table modifiée.'; + $lang['strtablealteredbad'] = 'Échec lors de la modification de la table.'; + $lang['strdataonly'] = 'Données seulement'; + $lang['strstructureonly'] = 'Structure seulement'; + $lang['strstructureanddata'] = 'Structure et données'; + $lang['strtabbed'] = 'Tabulé'; + $lang['strauto'] = 'Auto'; + $lang['strconfvacuumtable'] = 'Êtes-vous sûr de vouloir faire un vacuum de « %s » ?'; + $lang['strconfanalyzetable'] = 'Êtes-vous sûr de vouloir éffectuer un ANALYZE sur « %s » ?'; + $lang['strconfreindextable'] = 'Êtes-vous sûr de vouloir réindexer « %s » ?'; + $lang['strconfclustertable'] = 'Êtes-vous sûr de vouloir lancer un CLUSTER sur «%s » ?'; + $lang['strestimatedrowcount'] = 'Nombre d\'enregistrements estimés'; + $lang['strspecifytabletoanalyze'] = 'Vous devez spécifier au moins une table à analyzer'; + $lang['strspecifytabletoempty'] = 'Vous devez spécifier au moins une table à vider'; + $lang['strspecifytabletodrop'] = 'Vous devez spécifier au moins une table à supprimer'; + $lang['strspecifytabletovacuum'] = 'Vous devez spécifier au moins une table sur laquelle éffectuer le vacuum'; + $lang['strspecifytabletoreindex'] = 'Vous devez spécifier au moins une table à réindexer.'; + $lang['strspecifytabletocluster'] = 'Vous devez spécifier au moins une table sur laquelle éffectuer la commande CLUSTER.'; + $lang['strnofieldsforinsert'] = 'Vous ne pouvez insérer de données dans une table sans champs.'; + + // Columns + $lang['strcolprop'] = 'Propriétés de la Colonne'; + $lang['strnotableprovided'] = 'Aucune table fournie !'; + + // Users + $lang['struser'] = 'Utilisateur'; + $lang['strusers'] = 'Utilisateurs'; + $lang['strusername'] = 'Utilisateur'; + $lang['strpassword'] = 'Mot de passe'; + $lang['strsuper'] = 'Super utilisateur ?'; + $lang['strcreatedb'] = 'Créer base de données ?'; + $lang['strexpires'] = 'Expiration'; + $lang['strsessiondefaults'] = 'Session par défaut'; + $lang['strnousers'] = 'Aucun utilisateur trouvé.'; + $lang['struserupdated'] = 'Utilisateur mis à jour.'; + $lang['struserupdatedbad'] = 'Échec lors de la mise à jour de l\'utilisateur.'; + $lang['strshowallusers'] = 'Voir tous les utilisateurs'; + $lang['strcreateuser'] = 'Créer un utilisateur'; + $lang['struserneedsname'] = 'Vous devez donner un nom pour votre utilisateur.'; + $lang['strusercreated'] = 'Utilisateur créé.'; + $lang['strusercreatedbad'] = 'Échec lors de la création de l\'utilisateur.'; + $lang['strconfdropuser'] = 'Êtes-vous sûr de vouloir supprimer l\'utilisateur « %s » ?'; + $lang['struserdropped'] = 'Utilisateur supprimé.'; + $lang['struserdroppedbad'] = 'Échec lors de la suppression de l\'utilisateur.'; + $lang['straccount'] = 'Comptes'; + $lang['strchangepassword'] = 'Modifier le mot de passe'; + $lang['strpasswordchanged'] = 'Mot de passe modifié.'; + $lang['strpasswordchangedbad'] = 'Échec lors de la modification du mot de passe.'; + $lang['strpasswordshort'] = 'Le mot de passe est trop court.'; + $lang['strpasswordconfirm'] = 'Le mot de passe de confirmation est différent.'; + + // Groups + $lang['strgroup'] = 'Groupe'; + $lang['strgroups'] = 'Groupes'; + $lang['strgroupgroups'] = 'Groupes du groupe "%s"'; + $lang['strshowallgroups'] = 'Afficher tous les groupes'; + $lang['strnogroup'] = 'Groupe introuvable.'; + $lang['strnogroups'] = 'Aucun groupe trouvé.'; + $lang['strcreategroup'] = 'Créer un groupe'; + $lang['strgroupneedsname'] = 'Vous devez indiquer un nom pour votre groupe.'; + $lang['strgroupcreated'] = 'Groupe créé.'; + $lang['strgroupcreatedbad'] = 'Échec lors de la création du groupe.'; + $lang['strconfdropgroup'] = 'Êtes-vous sûr de vouloir supprimer le groupe « %s » ?'; + $lang['strgroupdropped'] = 'Groupe supprimé.'; + $lang['strgroupdroppedbad'] = 'Échec lors de la suppression du groupe.'; + $lang['strmembers'] = 'Membres'; + $lang['strmemberof'] = 'Membre de'; + $lang['stradminmembers'] = 'Membres admin'; + $lang['straddmember'] = 'Ajouter un membre'; + $lang['strmemberadded'] = 'Membre ajouté.'; + $lang['strmemberaddedbad'] = 'Échec lors de l\'ajout du membre.'; + $lang['strdropmember'] = 'Supprimer un membre'; + $lang['strconfdropmember'] = 'Êtes-vous sûr de vouloir supprimer le membre « %s » du groupe « %s » ?'; + $lang['strmemberdropped'] = 'Membre supprimé.'; + $lang['strmemberdroppedbad'] = 'Échec lors de la suppression du membre.'; + + // Roles + $lang['strrole'] = 'Rôle'; + $lang['strroles'] = 'Rôles'; + $lang['strshowallroles'] = 'Afficher tous les rôles'; + $lang['strnoroles'] = 'Aucun rôle trouvé.'; + $lang['strinheritsprivs'] = 'Hérite des droits ?'; + $lang['strcreaterole'] = 'Créer un rôle'; + $lang['strcancreaterole'] = 'Peut créer un rôle ?'; + $lang['strrolecreated'] = 'Rôle créé.'; + $lang['strrolecreatedbad'] = 'Échec lors de la création du rôle.'; + $lang['strrolealtered'] = 'Rôle modifié.'; + $lang['strrolealteredbad'] = 'Échec lors de la modification du rôle.'; + $lang['strcanlogin'] = 'Peut se connecter ?'; + $lang['strconnlimit'] = 'Limite de connexion'; + $lang['strdroprole'] = 'Supprimer un rôle'; + $lang['strconfdroprole'] = 'Êtes-vous sûr de vouloir supprimer le rôle « %s » ?'; + $lang['strroledropped'] = 'Rôle supprimé.'; + $lang['strroledroppedbad'] = 'Échec lors de la suppression du rôle.'; + $lang['strnolimit'] = 'Aucune limite'; + $lang['strnever'] = 'Jamais'; + $lang['strroleneedsname'] = 'Vous devez donner un nom à ce rôle.'; + + // Privileges + $lang['strprivilege'] = 'Droit'; + $lang['strprivileges'] = 'Droits'; + $lang['strnoprivileges'] = 'Cet objet possède les droits par défault.'; + $lang['strgrant'] = 'Accorder (GRANT)'; + $lang['strrevoke'] = 'Révoquer (REVOKE)'; + $lang['strgranted'] = 'Droits accordés.'; + $lang['strgrantfailed'] = 'Échec lors de l\'octroi des droits.'; + $lang['strgrantbad'] = 'Vous devez spécifier au moins un utilisateur ou groupe et au moins un droit.'; + $lang['strgrantor'] = 'Grantor'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Base de données'; + $lang['strdatabases'] = 'Bases de données'; + $lang['strshowalldatabases'] = 'Voir toutes les bases de données'; + $lang['strnodatabases'] = 'Aucune base de données trouvée.'; + $lang['strcreatedatabase'] = 'Créer une base de données'; + $lang['strdatabasename'] = 'Nom de la base de données'; + $lang['strdatabaseneedsname'] = 'Vous devez donner un nom pour votre base de données.'; + $lang['strdatabasecreated'] = 'Base de données créée.'; + $lang['strdatabasecreatedbad'] = 'Échec lors de la création de la base de données.'; + $lang['strconfdropdatabase'] = 'Êtes-vous sûr de vouloir supprimer la base de données « %s » ?'; + $lang['strdatabasedropped'] = 'Base de données supprimée.'; + $lang['strdatabasedroppedbad'] = 'Échec lors de la suppression de la base de données.'; + $lang['strentersql'] = 'Veuillez saisir ci-dessous la requête SQL à exécuter :'; + $lang['strsqlexecuted'] = 'Requête SQL exécutée.'; + $lang['strvacuumgood'] = 'Vacuum exécuté.'; + $lang['strvacuumbad'] = 'Échec du Vacuum.'; + $lang['stranalyzegood'] = 'Analyse effectuée.'; + $lang['stranalyzebad'] = 'Échec de l\'analyse.'; + $lang['strreindexgood'] = 'Réindexation exécutée.'; + $lang['strreindexbad'] = 'Échec de la réindexation.'; + $lang['strfull'] = 'Intégral (FULL)'; + $lang['strfreeze'] = 'Freeze'; + $lang['strforce'] = 'Forcer'; + $lang['strsignalsent'] = 'Signal envoyé.'; + $lang['strsignalsentbad'] = 'Échec lors de l\'envoi du signal.'; + $lang['strallobjects'] = 'Tous les objets'; + $lang['strdatabasealtered'] = 'Base de données modifiée.'; + $lang['strdatabasealteredbad'] = 'Échec lors de la modification de la base de données.'; + $lang['strspecifydatabasetodrop'] = 'Vous devez spécifier au moins une base de données à supprimer'; + $lang['strtemplatedb'] = 'Modèle'; + $lang['strconfanalyzedatabase'] = 'Êtes vous sûr de vouloir éffectuer un ANALYZE sur toutes les tables de la base de données « %s » ?'; + $lang['strconfvacuumdatabase'] = 'Êtes vous sûr de vouloir éffectuer un VACUUM sur toutes les tables de la base de données « %s » ?'; + $lang['strconfreindexdatabase'] = 'Êtes vous sûr de vouloir réindexer toutes les tables de la base de données « %s » ?'; + $lang['strconfclusterdatabase'] = 'Êtes vous sûr de vouloir éffectuer un CLUSTER sur toutes les tables de la base de données « %s » ?'; + + // Views + $lang['strview'] = 'Vue'; + $lang['strviews'] = 'Vues'; + $lang['strshowallviews'] = 'Voir toutes les vues'; + $lang['strnoview'] = 'Aucne vue trouvée.'; + $lang['strnoviews'] = 'Aucune vue trouvée.'; + $lang['strcreateview'] = 'Créer une vue'; + $lang['strviewname'] = 'Nom de la vue'; + $lang['strviewneedsname'] = 'Vous devez indiquer un nom pour votre vue.'; + $lang['strviewneedsdef'] = 'Vous devez indiquer une définition pour votre vue.'; + $lang['strviewneedsfields'] = 'Vous devez préciser les colonnes que vous voulez sélectionner dans votre vue.'; + $lang['strviewcreated'] = 'Vue créée.'; + $lang['strviewcreatedbad'] = 'Échec lors de la création de la vue.'; + $lang['strconfdropview'] = 'Êtes-vous sûr de vouloir supprimer la vue « %s » ?'; + $lang['strviewdropped'] = 'Vue supprimée.'; + $lang['strviewdroppedbad'] = 'Échec lors de la suppression de la vue.'; + $lang['strviewupdated'] = 'Vue mise à jour.'; + $lang['strviewupdatedbad'] = 'Échec lors de la mise à jour de la vue.'; + $lang['strviewlink'] = 'Clés liées'; + $lang['strviewconditions'] = 'Conditions supplémentaires'; + $lang['strcreateviewwiz'] = 'Créer une vue avec l\'assistant'; + $lang['strrenamedupfields'] = 'Renommer les champs dupliqués'; + $lang['strdropdupfields'] = 'Ignorer les champs dupliqués'; + $lang['strerrordupfields'] = 'Erreur en cas de champs dupliqués'; + $lang['strviewaltered'] = 'Vue modifiée.'; + $lang['strviewalteredbad'] = 'Échec lors de la modification de la vue.'; + $lang['strspecifyviewtodrop'] = 'Vous devez spécifier au moins une vue à supprimer.'; + + // Sequences + $lang['strsequence'] = 'Séquence'; + $lang['strsequences'] = 'Séquences'; + $lang['strshowallsequences'] = 'Voir toutes les séquences'; + $lang['strnosequence'] = 'Aucune séquence trouvée.'; + $lang['strnosequences'] = 'Aucune séquence trouvée.'; + $lang['strcreatesequence'] = 'Créer une séquence'; + $lang['strlastvalue'] = 'Dernière valeur'; + $lang['strincrementby'] = 'Incrémenter par '; + $lang['strstartvalue'] = 'Valeur de départ'; + $lang['strrestartvalue'] = 'Valeur de redémarrage'; + $lang['strmaxvalue'] = 'Valeur maximale'; + $lang['strminvalue'] = 'Valeur minimale'; + $lang['strcachevalue'] = 'Valeur de cache'; + $lang['strlogcount'] = 'Comptage'; + $lang['strcancycle'] = 'Peut boucler?'; + $lang['striscalled'] = 'Incrémentera la dernière valeur avant de retourner la prochaine valeur (is_called) ?'; + $lang['strsequenceneedsname'] = 'Vous devez spécifier un nom pour votre séquence.'; + $lang['strsequencecreated'] = 'Séquence créée.'; + $lang['strsequencecreatedbad'] = 'Échec lors de la création de la séquence.'; + $lang['strconfdropsequence'] = 'Êtes-vous sûr de vouloir supprimer la séquence « %s » ?'; + $lang['strsequencedropped'] = 'Séquence supprimée.'; + $lang['strsequencedroppedbad'] = 'Échec lors de la suppression de la séquence.'; + $lang['strsequencerestart'] = 'Séquence redémarrée.'; + $lang['strsequencerestartbad'] = 'Échec tu redémarrage de la séquence.'; + $lang['strsequencereset'] = 'Séquence initialisée.'; + $lang['strsequenceresetbad'] = 'Échec lors de l\'initialisation de la séquence.'; + $lang['strsequencealtered'] = 'Séquence modifiée.'; + $lang['strsequencealteredbad'] = 'Échec lors de la modification de la séquence.'; + $lang['strsetval'] = 'Initialiser à une valeur'; + $lang['strsequencesetval'] = 'Séquence initialisée.'; + $lang['strsequencesetvalbad'] = 'Échec lors de l\'initialisation de la séquence.'; + $lang['strnextval'] = 'Incrémenter la valeur'; + $lang['strsequencenextval'] = 'Séquence incrémentée.'; + $lang['strsequencenextvalbad'] = 'Échec lors de l\'incrémentation de la valeur.'; + $lang['strspecifysequencetodrop'] = 'Vous devez spécifier au moins une séquence à supprimer.'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Index'; + $lang['strindexname'] = 'Nom de l\'index'; + $lang['strshowallindexes'] = 'Voir tous les index'; + $lang['strnoindex'] = 'Aucun index trouvé.'; + $lang['strnoindexes'] = 'Aucun index trouvé.'; + $lang['strcreateindex'] = 'Créer un index'; + $lang['strtabname'] = 'Nom de la table'; + $lang['strcolumnname'] = 'Nom de la colonne'; + $lang['strindexneedsname'] = 'Vous devez indiquer un nom pour votre index'; + $lang['strindexneedscols'] = 'Vous devez indiquer un nombre valide de colonnes.'; + $lang['strindexcreated'] = 'Index créé'; + $lang['strindexcreatedbad'] = 'Échec lors de la création de l\'index.'; + $lang['strconfdropindex'] = 'Êtes-vous sûr de vouloir supprimer l\'index « %s » ?'; + $lang['strindexdropped'] = 'Index supprimé.'; + $lang['strindexdroppedbad'] = 'Échec lors de la suppression de l\'index.'; + $lang['strkeyname'] = 'Nom de la clé'; + $lang['struniquekey'] = 'Clé unique'; + $lang['strprimarykey'] = 'Clé primaire'; + $lang['strindextype'] = 'Type d\'index'; + $lang['strtablecolumnlist'] = 'Liste des colonnes'; + $lang['strindexcolumnlist'] = 'Liste des colonnes dans l\'index'; + $lang['strclusteredgood'] = 'Cluster effectué.'; + $lang['strclusteredbad'] = 'Échec du cluster.'; + $lang['strconcurrently'] = 'En parallèle'; + $lang['strnoclusteravailable'] = 'La table n\'est pas encore ordonnée selon un index.'; + $lang['strcluster'] = 'Cluster'; + + // Rules + $lang['strrules'] = 'Règles'; + $lang['strrule'] = 'Règle'; + $lang['strshowallrules'] = 'Voir toutes les règles'; + $lang['strnorule'] = 'Aucune règle trouvée.'; + $lang['strnorules'] = 'Aucune règle trouvée.'; + $lang['strcreaterule'] = 'Créer une règle'; + $lang['strrulename'] = 'Nom de la règle'; + $lang['strruleneedsname'] = 'Vous devez indiquer un nom pour votre règle.'; + $lang['strrulecreated'] = 'Règle créée.'; + $lang['strrulecreatedbad'] = 'Échec lors de la création de la règle.'; + $lang['strconfdroprule'] = 'Êtes-vous sûr de vouloir supprimer la règle « %s » sur « %s » ?'; + $lang['strruledropped'] = 'Règle supprimée.'; + $lang['strruledroppedbad'] = 'Échec lors de la suppression de la règle.'; + + // Constraints + $lang['strconstraint'] = 'Contrainte'; + $lang['strconstraints'] = 'Contraintes'; + $lang['strshowallconstraints'] = 'Voir toutes les contraintes'; + $lang['strnoconstraints'] = 'Aucune contrainte trouvée.'; + $lang['strcreateconstraint'] = 'Créer une contrainte'; + $lang['strconstraintcreated'] = 'Création d\'une contrainte.'; + $lang['strconstraintcreatedbad'] = 'Échec lors de la création de la contrainte.'; + $lang['strconfdropconstraint'] = 'Êtes-vous sûr de vouloir supprimer la contrainte « %s » sur « %s » ?'; + $lang['strconstraintdropped'] = 'Contrainte supprimée.'; + $lang['strconstraintdroppedbad'] = 'Échec lors de la suppression de la contrainte.'; + $lang['straddcheck'] = 'Ajouter une contrainte'; + $lang['strcheckneedsdefinition'] = 'La contrainte a besoin d\'une définition.'; + $lang['strcheckadded'] = 'Contrainte ajoutée.'; + $lang['strcheckaddedbad'] = 'Échec lors de l\'ajout d\'une contrainte de vérification (CHECK).'; + $lang['straddpk'] = 'Ajouter une clé primaire'; + $lang['strpkneedscols'] = 'La clé primaire nécessite au moins une colonne.'; + $lang['strpkadded'] = 'Clé primaire ajoutée.'; + $lang['strpkaddedbad'] = 'Échec lors de l\'ajout de la clé primaire.'; + $lang['stradduniq'] = 'Ajouter une clé unique'; + $lang['struniqneedscols'] = 'Une clé unique nécessite au moins une colonne.'; + $lang['struniqadded'] = 'La clé unique a été ajoutée.'; + $lang['struniqaddedbad'] = 'Échec lors de la création de la clé unique.'; + $lang['straddfk'] = 'Ajouter une clé étrangère'; + $lang['strfkneedscols'] = 'Une clé étrangère nécessite au moins une colonne.'; + $lang['strfkneedstarget'] = 'Une clé étrangère nécessite une table cible.'; + $lang['strfkadded'] = 'La clé étrangère a été ajoutée.'; + $lang['strfkaddedbad'] = 'Échec lors de la création de la clé étrangère.'; + $lang['strfktarget'] = 'Table cible'; + $lang['strfkcolumnlist'] = 'Liste des colonnes de la clé'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Fonction'; + $lang['strfunctions'] = 'Fonctions'; + $lang['strshowallfunctions'] = 'Voir toutes les fonctions'; + $lang['strnofunction'] = 'Aucune fonction trouvée.'; + $lang['strnofunctions'] = 'Aucune fonction trouvée.'; + $lang['strcreateplfunction'] = 'Créer une fonction PL/SQL'; + $lang['strcreateinternalfunction'] = 'Créer une fonction interne'; + $lang['strcreatecfunction'] = 'Créer une fonction C'; + $lang['strfunctionname'] = 'Nom de la fonction'; + $lang['strreturns'] = 'Valeur de sortie'; + $lang['strproglanguage'] = 'Langage'; + $lang['strfunctionneedsname'] = 'Vous devez indiquer un nom pour votre fonction.'; + $lang['strfunctionneedsdef'] = 'Vous devez indiquer une définition pour votre fonction.'; + $lang['strfunctioncreated'] = 'Fonction créée.'; + $lang['strfunctioncreatedbad'] = 'Échec lors de la création de la fonction.'; + $lang['strconfdropfunction'] = 'Êtes-vous sûr de vouloir supprimer la fonction « %s » ?'; + $lang['strfunctiondropped'] = 'Fonction supprimée.'; + $lang['strfunctiondroppedbad'] = 'Échec lors de la suppression de la fonction.'; + $lang['strfunctionupdated'] = 'Fonction mise à jour.'; + $lang['strfunctionupdatedbad'] = 'Échec lors de la mise à jour de la fonction.'; + $lang['strobjectfile'] = 'Fichier objet'; + $lang['strlinksymbol'] = 'Symbole lien'; + $lang['strarguments'] = 'Arguments'; + $lang['strargmode'] = 'Mode'; + $lang['strargtype'] = 'Type'; + $lang['strargadd'] = 'Ajouter un autre argument'; + $lang['strargremove'] = 'Supprimer cet argument'; + $lang['strargnoargs'] = 'Cet fonction ne prend pas d\'arguments.'; + $lang['strargenableargs'] = 'Active les arguments passés à cette fonction.'; + $lang['strargnorowabove'] = 'Il doit y avoir une ligne au-dessus de cette ligne.'; + $lang['strargnorowbelow'] = 'Il doit y avoir une ligne en-dessous de cette ligne.'; + $lang['strargraise'] = 'Monter.'; + $lang['strarglower'] = 'Descendre.'; + $lang['strargremoveconfirm'] = 'Êtes-vous sûr de vouloir supprimer cet argument ? cette opération ne peut pas être annulée.'; + $lang['strfunctioncosting'] = 'Coût de la function'; + $lang['strresultrows'] = 'Lignes de résultat'; + $lang['strexecutioncost'] = 'Coût d\'exécution'; + $lang['strspecifyfunctiontodrop'] = 'Vous devez spécifier au moins une fonction à supprimer.'; + + // Triggers + $lang['strtrigger'] = 'Trigger'; + $lang['strtriggers'] = 'Triggers'; + $lang['strshowalltriggers'] = 'Voir tous les triggers'; + $lang['strnotrigger'] = 'Aucun trigger trouvé.'; + $lang['strnotriggers'] = 'Aucun trigger trouvé.'; + $lang['strcreatetrigger'] = 'Créer un trigger'; + $lang['strtriggerneedsname'] = 'Vous devez indiquer un nom pour votre trigger.'; + $lang['strtriggerneedsfunc'] = 'Vous devez indiquer une fonction pour votre trigger.'; + $lang['strtriggercreated'] = 'Trigger créé.'; + $lang['strtriggercreatedbad'] = 'Échec lors de la création du trigger.'; + $lang['strconfdroptrigger'] = 'Êtes-vous sûr de vouloir supprimer le trigger « %s » sur « %s » ?'; + $lang['strconfenabletrigger'] = 'Êtes-vous sûr de vouloir activer le trigger « %s » sur « %s» ?'; + $lang['strconfdisabletrigger'] = 'Êtes-vous sûr de vouloir désactiver le trigger « %s » sur « %s» ?'; + $lang['strtriggerdropped'] = 'Trigger supprimé.'; + $lang['strtriggerdroppedbad'] = 'Échec lors de la suppression du trigger.'; + $lang['strtriggerenabled'] = 'Trigger activé.'; + $lang['strtriggerenabledbad'] = 'Échec lors de l\'activation du trigger.'; + $lang['strtriggerdisabled'] = 'Trigger désactivé.'; + $lang['strtriggerdisabledbad'] = 'Échec lors de la désactivation du trigger.'; + $lang['strtriggeraltered'] = 'Trigger modifié.'; + $lang['strtriggeralteredbad'] = 'Échec lors de la modification du trigger.'; + $lang['strforeach'] = 'Pour chaque'; + + // Types + $lang['strtype'] = 'Type'; + $lang['strtypes'] = 'Types'; + $lang['strshowalltypes'] = 'Voir tous les types'; + $lang['strnotype'] = 'Aucun type trouvé.'; + $lang['strnotypes'] = 'Aucun type trouvé.'; + $lang['strcreatetype'] = 'Créer un type'; + $lang['strcreatecomptype'] = 'Créer un type composé'; + $lang['strcreateenumtype'] = 'Créer un type enum'; + $lang['strtypeneedsfield'] = 'Vous devez spécifier au moins un champ.'; + $lang['strtypeneedsvalue'] = 'Vous devez spécifier au moins une valeur.'; + $lang['strtypeneedscols'] = 'Vous devez spécifier un nombre valide de champs.'; + $lang['strtypeneedsvals'] = 'Vous devez spécifier un nombre valide de valeurs.'; + $lang['strinputfn'] = 'Fonction d\'entrée'; + $lang['stroutputfn'] = 'Fonction de sortie'; + $lang['strpassbyval'] = 'Passée par valeur ?'; + $lang['stralignment'] = 'Alignement'; + $lang['strelement'] = 'Élément'; + $lang['strdelimiter'] = 'Délimiteur'; + $lang['strstorage'] = 'Stockage'; + $lang['strfield'] = 'Champ'; + $lang['strnumfields'] = 'Nombre de champs'; + $lang['strnumvalues'] = 'Nombre de valeurs'; + $lang['strtypeneedsname'] = 'Vous devez indiquer un nom pour votre type.'; + $lang['strtypeneedslen'] = 'Vous devez indiquer une longueur pour votre type.'; + $lang['strtypecreated'] = 'Type créé'; + $lang['strtypecreatedbad'] = 'Échec lors de la création du type.'; + $lang['strconfdroptype'] = 'Êtes-vous sûr de vouloir supprimer le type « %s » ?'; + $lang['strtypedropped'] = 'Type supprimé.'; + $lang['strtypedroppedbad'] = 'Échec lors de la suppression du type.'; + $lang['strflavor'] = 'Genre'; + $lang['strbasetype'] = 'Base'; + $lang['strcompositetype'] = 'Composite'; + $lang['strpseudotype'] = 'Pseudo'; + $lang['strenum'] = 'Enum'; + $lang['strenumvalues'] = 'Valeurs de l\'enum'; + + // Schemas + $lang['strschema'] = 'Schéma'; + $lang['strschemas'] = 'Schémas'; + $lang['strshowallschemas'] = 'Voir tous les schémas'; + $lang['strnoschema'] = 'Aucun schéma trouvé.'; + $lang['strnoschemas'] = 'Aucun schéma trouvé.'; + $lang['strcreateschema'] = 'Créer un schéma'; + $lang['strschemaname'] = 'Nom du schéma'; + $lang['strschemaneedsname'] = 'Vous devez indiquer un nom pour votre schéma.'; + $lang['strschemacreated'] = 'Schéma créé'; + $lang['strschemacreatedbad'] = 'Échec lors de la création du schéma.'; + $lang['strconfdropschema'] = 'Êtes-vous sûr de vouloir supprimer le schéma « %s » ?'; + $lang['strschemadropped'] = 'Schéma supprimé.'; + $lang['strschemadroppedbad'] = 'Échec lors de la suppression du schéma.'; + $lang['strschemaaltered'] = 'Schema modifié.'; + $lang['strschemaalteredbad'] = 'Échec lors de la modification du schéma.'; + $lang['strsearchpath'] = 'Chemin de recherche du schéma'; + $lang['strspecifyschematodrop'] = 'Vous devez spécifier au moins un schéma à supprimer.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Domaine'; + $lang['strdomains'] = 'Domaines'; + $lang['strshowalldomains'] = 'Voir tous les domaines'; + $lang['strnodomains'] = 'Pas de domaine trouvé.'; + $lang['strcreatedomain'] = 'Créer un domaine'; + $lang['strdomaindropped'] = 'Domaine supprimé.'; + $lang['strdomaindroppedbad'] = 'Échec lors de la suppression.'; + $lang['strconfdropdomain'] = 'Êtes-vous sur de vouloir supprimer le domaine « %s » ?'; + $lang['strdomainneedsname'] = 'Vous devez donner un nom pour votre domaine.'; + $lang['strdomaincreated'] = 'Domaine créé.'; + $lang['strdomaincreatedbad'] = 'Échec lors de la création du domaine.'; + $lang['strdomainaltered'] = 'Domaine modifié.'; + $lang['strdomainalteredbad'] = 'Échec lors de la modification du domaine.'; + + // Operators + $lang['stroperator'] = 'Opérateur'; + $lang['stroperators'] = 'Opérateurs'; + $lang['strshowalloperators'] = 'Voir tous les opérateurs'; + $lang['strnooperator'] = 'Pas d\'opérateur trouvé.'; + $lang['strnooperators'] = 'Pas d\'opérateur trouvé.'; + $lang['strcreateoperator'] = 'Créer un opérateur'; + $lang['strleftarg'] = 'Type de l\'argument de gauche'; + $lang['strrightarg'] = 'Type de l\'argument de droite'; + $lang['strcommutator'] = 'Commutateur'; + $lang['strnegator'] = 'Négation'; + $lang['strrestrict'] = 'Restriction'; + $lang['strjoin'] = 'Jointure'; + $lang['strhashes'] = 'Hachages'; + $lang['strmerges'] = 'Assemblages'; + $lang['strleftsort'] = 'Tri gauche'; + $lang['strrightsort'] = 'Tri droite'; + $lang['strlessthan'] = 'Plus petit que'; + $lang['strgreaterthan'] = 'Plus grand que'; + $lang['stroperatorneedsname'] = 'Vous devez donner un nom pour votre opérateur.'; + $lang['stroperatorcreated'] = 'Opérateur créé'; + $lang['stroperatorcreatedbad'] = 'Échec lors de la création de l\'opérateur.'; + $lang['strconfdropoperator'] = 'Êtes-vous sur de vouloir supprimer l\'opérateur « %s » ?'; + $lang['stroperatordropped'] = 'Opérateur supprimé.'; + $lang['stroperatordroppedbad'] = 'Échec lors de la suppression de l\'opérateur.'; + + // Casts + $lang['strcasts'] = 'Conversions'; + $lang['strnocasts'] = 'Aucune conversion trouvée.'; + $lang['strsourcetype'] = 'Type source'; + $lang['strtargettype'] = 'Type cible'; + $lang['strimplicit'] = 'Implicite'; + $lang['strinassignment'] = 'En affectation'; + $lang['strbinarycompat'] = '(binaire compatible)'; + + // Conversions + $lang['strconversions'] = 'Conversions'; + $lang['strnoconversions'] = 'Aucune conversion trouvée.'; + $lang['strsourceencoding'] = 'Codage source'; + $lang['strtargetencoding'] = 'Codage cible'; + + // Languages + $lang['strlanguages'] = 'Langages'; + $lang['strnolanguages'] = 'Pas de langage trouvé.'; + $lang['strtrusted'] = 'De confiance'; + + // Info + $lang['strnoinfo'] = 'Pas d\'information disponible.'; + $lang['strreferringtables'] = 'Tables référentes'; + $lang['strparenttables'] = 'Tables parents'; + $lang['strchildtables'] = 'Tables enfants'; + + // Aggregates + $lang['straggregate'] = 'Agrégat'; + $lang['straggregates'] = 'Agrégats'; + $lang['strnoaggregates'] = 'Aucun agrégat trouvé.'; + $lang['stralltypes'] = '(tous les types)'; + $lang['strcreateaggregate'] = 'Créer un agrégat'; + $lang['straggrbasetype'] = 'Type de données en entrée'; + $lang['straggrsfunc'] = 'Fonction de transition de l\'état'; + $lang['straggrstype'] = 'Type de la valeur de transition'; + $lang['straggrffunc'] = 'Fonction finale'; + $lang['straggrinitcond'] = 'Condition initiale'; + $lang['straggrsortop'] = 'Opérateur de tri'; + $lang['strconfdropaggregate'] = 'Êtes-vous sûr de vouloir supprimer l\'agrégat « %s »?'; + $lang['straggregatedropped'] = 'Agrégat supprimé.'; + $lang['straggregatedroppedbad'] = 'Échec lors de la suppression de l\'agrégat.'; + $lang['straggraltered'] = 'Agrégat modifié.'; + $lang['straggralteredbad'] = 'Échec lors de la modification de l\'agrégat.'; + $lang['straggrneedsname'] = 'Vous devez indiquer un nom pour l\'agrégat'; + $lang['straggrneedsbasetype'] = 'Vous devez indiquer le type de données en entrée pour l\'agrégat'; + $lang['straggrneedssfunc'] = 'Vous devez indiquer le nom de la fonction de transition de l\'agrégat'; + $lang['straggrneedsstype'] = 'Vous devez indiquer le type de donnée pour la valeur d\'état pour l\'agrégat'; + $lang['straggrcreated'] = 'Agrégat créé.'; + $lang['straggrcreatedbad'] = 'Échec lors de la création de l\'agrégat.'; + $lang['straggrshowall'] = 'Afficher tous les agrégats'; + + // Operator Classes + $lang['stropclasses'] = 'Classes d\'opérateur'; + $lang['strnoopclasses'] = 'Aucune classe d\'opérateur trouvée.'; + $lang['straccessmethod'] = 'Méthode d\'accès'; + + // Stats and performance + $lang['strrowperf'] = 'Performance des enregistrements'; + $lang['strioperf'] = 'Performance en entrée/sortie'; + $lang['stridxrowperf'] = 'Performance des index'; + $lang['stridxioperf'] = 'Performance des index en entrées/sortie'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Séquentiel'; + $lang['strscan'] = 'Parcours'; + $lang['strread'] = 'Lecture'; + $lang['strfetch'] = 'Récupération'; + $lang['strheap'] = 'En-tête'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'Index TOAST'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disque'; + $lang['strrows2'] = 'Enregistrements'; + + // Tablespaces + $lang['strtablespace'] = 'Tablespace'; + $lang['strtablespaces'] = 'Tablespaces'; + $lang['strshowalltablespaces'] = 'Voir tous les tablespaces'; + $lang['strnotablespaces'] = 'Aucun tablespace trouvé.'; + $lang['strcreatetablespace'] = 'Créer un tablespace'; + $lang['strlocation'] = 'Emplacement'; + $lang['strtablespaceneedsname'] = 'Vous devez donner un nom à votre tablespace.'; + $lang['strtablespaceneedsloc'] = 'Vous devez préciser un répertoire dans lequel sera créé le tablespace.'; + $lang['strtablespacecreated'] = 'Tablespace créé.'; + $lang['strtablespacecreatedbad'] = 'Échec lors de la création du tablespace.'; + $lang['strconfdroptablespace'] = 'Êtes-vous sûr de vouloir supprimer le tablespace « %s » ?'; + $lang['strtablespacedropped'] = 'Tablespace supprimé.'; + $lang['strtablespacedroppedbad'] = 'Échec lors de la suppression du tablespace.'; + $lang['strtablespacealtered'] = 'Tablespace modifié.'; + $lang['strtablespacealteredbad'] = 'Échec lors de la modification du tablespace.'; + + // Miscellaneous + $lang['strtopbar'] = '%s lancé sur %s:%s -- Vous êtes connecté avec le profil « %s »'; + $lang['strtimefmt'] = 'j M Y, H:i'; + $lang['strhelp'] = 'Aide'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Navigateur pour l\'aide'; + $lang['strselecthelppage'] = 'Sélectionner une page d\'aide'; + $lang['strinvalidhelppage'] = 'Page d\'aide invalide.'; + $lang['strlogintitle'] = 'Se connecter à %s'; + $lang['strlogoutmsg'] = 'Déconnecté de %s'; + $lang['strloading'] = 'Chargement...'; + $lang['strerrorloading'] = 'Erreur lors du chargement'; + $lang['strclicktoreload'] = 'Cliquer pour recharger'; + + //Autovacuum + $lang['strautovacuum'] = 'Autovacuum'; + $lang['strturnedon'] = 'Activé'; + $lang['strturnedoff'] = 'Désactivé'; + $lang['strenabled'] = 'activé'; + $lang['strnovacuumconf'] = 'Aucune configuration autovacuum trouvée.'; + $lang['strvacuumbasethreshold'] = 'Limite de base pour le Vacuum'; + $lang['strvacuumscalefactor'] = 'Facteur d\'échelle pour le Vacuum'; + $lang['stranalybasethreshold'] = 'Limite de base pour le Analyze'; + $lang['stranalyzescalefactor'] = 'Facteur d\'échelle pour le Analyze'; + $lang['strvacuumcostdelay'] = 'Délai du coût du Vacuum'; + $lang['strvacuumcostlimit'] = 'Limite du coût du Vacuum'; + $lang['strvacuumpertable'] = 'Configuration autovacuum par table'; + $lang['straddvacuumtable'] = 'Configurer autovacuum pour cette table'; + $lang['streditvacuumtable'] = 'Modifier la configuration autovacuum pour la table « %s »'; + $lang['strdelvacuumtable'] = 'Supprimer la configuration autovacuum pour la table « %s » ?'; + $lang['strvacuumtablereset'] = 'Configuration autovacuum par défaut pour la table « %s ».'; + $lang['strdelvacuumtablefail'] = 'Échec lors de la suppression de la configuration autovacuumpour la table « %s »'; + $lang['strsetvacuumtablesaved'] = 'Configuration autovacuum pour la table « %s » enregistrée.'; + $lang['strsetvacuumtablefail'] = 'Échec de la configuration autovacuum pour la table « %s ».'; + $lang['strspecifydelvacuumtable'] = 'Vous devez spécifier la table où supprimer les paramètres autovacuum.'; + $lang['strspecifyeditvacuumtable'] = 'Vous devez spécifier la table où éditer les paramètres autovacuum.'; + $lang['strnotdefaultinred'] = 'Valeurs différentes de celles par défaut en rouge.'; + + //Table-level Locks + $lang['strlocks'] = 'Verrous'; + $lang['strtransaction'] = 'ID de transaction'; + $lang['strvirtualtransaction'] = 'ID Virtuel de Transaction'; + $lang['strprocessid'] = 'ID du processus'; + $lang['strmode'] = 'Mode du verrou'; + $lang['strislockheld'] = 'Verrou détenu ?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Transactions préparées'; + $lang['strxactid'] = 'ID de transaction'; + $lang['strgid'] = 'ID global'; + + // Fulltext search + $lang['strfulltext'] = 'Recherche textuelle'; + $lang['strftsconfig'] = 'Configuration FTS'; + $lang['strftsconfigs'] = 'Configurations'; + $lang['strftscreateconfig'] = 'Créer une configuration FTS'; + $lang['strftscreatedict'] = 'Créer un dictionnaire'; + $lang['strftscreatedicttemplate'] = 'Créer un modèle de dictionnaire'; + $lang['strftscreateparser'] = 'Créer un analyseur syntaxique'; + $lang['strftsnoconfigs'] = 'Aucune configuration FTS trouvée.'; + $lang['strftsconfigdropped'] = 'Configuration FTS supprimée.'; + $lang['strftsconfigdroppedbad'] = 'Échec lors de la suppression de la configuration FTS.'; + $lang['strconfdropftsconfig'] = 'Êtes-vous sûr de vouloir supprimer la configuration FTS « %s » ?'; + $lang['strconfdropftsdict'] = 'Êtes-vous sûr de vouloir supprimer le dictionnaire FTS « %s » ?'; + $lang['strconfdropftsmapping'] = 'Êtes-vous sûr de vouloir supprimer le mapping « %s » de la configuration FTS « %s » ?'; + $lang['strftstemplate'] = 'Modèle'; + $lang['strftsparser'] = 'Analyseur syntaxique'; + $lang['strftsconfigneedsname'] = 'Vous devez donner un nom pour votre configuration FTS.'; + $lang['strftsconfigcreated'] = 'Configuration FTS créée'; + $lang['strftsconfigcreatedbad'] = 'Échec lors de la création de la configuration FTS.'; + $lang['strftsmapping'] = 'Type de jeton'; + $lang['strftsdicts'] = 'Dictionaires'; + $lang['strftsdict'] = 'Dictionaire'; + $lang['strftsemptymap'] = 'Aucune liaisons configurée.'; + $lang['strftsconfigaltered'] = 'Configuration FTS modifiée.'; + $lang['strftsconfigalteredbad'] = 'Échec lors de l\'édition de la configuration FTS.'; + $lang['strftsconfigmap'] = 'Configuration des liaisons type de jeton / dictionnaires'; + $lang['strftsparsers'] = 'Analyseurs syntaxique FTS'; + $lang['strftsnoparsers'] = 'Aucun analyseur syntaxique FTS disponnible.'; + $lang['strftsnodicts'] = 'Aucun dictionnaire FTS disponible.'; + $lang['strftsdictcreated'] = 'Dictionnaire FTS créé'; + $lang['strftsdictcreatedbad'] = 'Échec lors de la création du dictionnaire FTS.'; + $lang['strftslexize'] = 'Lexize'; + $lang['strftsinit'] = 'Init'; + $lang['strftsoptionsvalues'] = 'Options et Valeurs'; + $lang['strftsdictneedsname'] = 'Vous devez donner un nom pour votre dictionnaire FTS.'; + $lang['strftsdictdropped'] = 'Dictionnaire FTS supprimé.'; + $lang['strftsdictdroppedbad'] = 'Échec lors de la suppression du dictionnaire FTS.'; + $lang['strftsdictaltered'] = 'Dictionnaire FTS modifié.'; + $lang['strftsdictalteredbad'] = 'Échec lors de l\'édition du dictionnaire FTS.'; + $lang['strftsaddmapping'] = 'Ajouter une nouvelle liaison'; + $lang['strftsspecifymappingtodrop'] = 'Vous devez spécifier au moins une liaison à suppimer.'; + $lang['strftsspecifyconfigtoalter'] = 'Vous devez spécifier une configuration FTS à modifier'; + $lang['strftsmappingdropped'] = 'Laison supprimée.'; + $lang['strftsmappingdroppedbad'] = 'Échec lors de la suppression de la liaison.'; + $lang['strftsnodictionaries'] = 'Aucun dictionnaire trouvé.'; + $lang['strftsmappingaltered'] = 'Liaison modifiée.'; + $lang['strftsmappingalteredbad'] = 'Échec lors de la modification de la liaison.'; + $lang['strftsmappingadded'] = 'Liaison ajoutée.'; + $lang['strftsmappingaddedbad'] = 'Échec lors de la suppression de la liaison.'; + $lang['strftstabconfigs'] = 'Configurations'; + $lang['strftstabdicts'] = 'Dictionaires'; + $lang['strftstabparsers'] = 'Analyseurs syntaxique'; + $lang['strftscantparsercopy'] = 'Vous ne pouvez spécifier en même temps un modèle et un analyseur lors de la création d\'une configuration FTS.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/galician.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/galician.php new file mode 100644 index 00000000..9ee7a059 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/galician.php @@ -0,0 +1,909 @@ +<?php + + /** + * Galician language file for phpPgAdmin. + * Tradución ao galego do phpPgAdmin. + * + * Maintainer: + * Mantedor: + * Adrián Chaves Fernández (Gallaecio) <adriyetichaves@gmail.com> + * Proxecto Trasno, <proxecto@trasno.net>. + * + * + * Comentarios sobre a tradución: + * - Escolleuse «eliminar» como tradución para “drop”, e «borrar» como tradución para + * “delete”. + * - Fixéronse certas escollas de vocabulario: “vacuum” → «purgación» (aconsellada por + * Leandro Regueiro), “cluster” → «contentrado». + * + */ + + // Language and character set + $lang['applang'] = 'Galego'; + $lang['applocale'] = 'gl-ES'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Benvida ou benvido ao phpPgAdmin.'; + $lang['strppahome'] = 'Sitio web do phpPgAdmin'; + $lang['strpgsqlhome'] = 'Sitio web de PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Documentación de PostgreSQL (local)'; + $lang['strreportbug'] = 'Informar dun erro'; + $lang['strviewfaq'] = 'Ver as preguntas máis frecuentes en liña'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Identificarse'; + $lang['strloginfailed'] = 'Non se puido levar a cabo a identificación.'; + $lang['strlogindisallowed'] = 'A identificación está desactivada por motivos de seguridade.'; + $lang['strserver'] = 'Servidor'; + $lang['strservers'] = 'Servidores'; + $lang['strgroupservers'] = 'Servidores no grupo «%s»'; + $lang['strallservers'] = 'Todos os servidores'; + $lang['strintroduction'] = 'Introdución'; + $lang['strhost'] = 'Enderezo IP'; + $lang['strport'] = 'Porto'; + $lang['strlogout'] = 'Saír'; + $lang['strowner'] = 'Propietario'; + $lang['straction'] = 'Acción'; + $lang['stractions'] = 'Accións'; + $lang['strname'] = 'Nome'; + $lang['strdefinition'] = 'Definición'; + $lang['strproperties'] = 'Propiedades'; + $lang['strbrowse'] = 'Navegar'; + $lang['strenable'] = 'Activar'; + $lang['strdisable'] = 'Desactivar'; + $lang['strdrop'] = 'Eliminar'; + $lang['strdropped'] = 'Eliminada'; + $lang['strnull'] = 'Nulo'; + $lang['strnotnull'] = 'Non nulo'; + $lang['strprev'] = '< Anterior'; + $lang['strnext'] = 'Seguinte >'; + $lang['strfirst'] = '« Principio'; + $lang['strlast'] = 'Final »'; + $lang['strfailed'] = 'Fallou'; + $lang['strcreate'] = 'Crear'; + $lang['strcreated'] = 'Creada'; + $lang['strcomment'] = 'Comentario'; + $lang['strlength'] = 'Lonxitude'; + $lang['strdefault'] = 'Predeterminado'; + $lang['stralter'] = 'Cambiar'; + $lang['strok'] = 'Aceptar'; + $lang['strcancel'] = 'Cancelar'; + $lang['strkill'] = 'Matar'; + $lang['strac'] = 'Activar o completado automático'; + $lang['strsave'] = 'Gardar'; + $lang['strreset'] = 'Restablecer'; + $lang['strrestart'] = 'Reiniciar'; + $lang['strinsert'] = 'Inserir'; + $lang['strselect'] = 'Seleccionar'; + $lang['strdelete'] = 'Borrar'; + $lang['strupdate'] = 'Actualizar'; + $lang['strreferences'] = 'Fai referencia a'; + $lang['stryes'] = 'Si'; + $lang['strno'] = 'Non'; + $lang['strtrue'] = 'CERTO'; + $lang['strfalse'] = 'FALSO'; + $lang['stredit'] = 'Editar'; + $lang['strcolumn'] = 'Columna'; + $lang['strcolumns'] = 'Columnas'; + $lang['strrows'] = 'fila(s)'; + $lang['strrowsaff'] = 'fila(s) afectadas.'; + $lang['strobjects'] = 'obxecto(s)'; + $lang['strback'] = 'Volver'; + $lang['strqueryresults'] = 'Resultados da consulta'; + $lang['strshow'] = 'Amosar'; + $lang['strempty'] = 'Baleiro'; + $lang['strlanguage'] = 'Lingua'; + $lang['strencoding'] = 'Codificación'; + $lang['strvalue'] = 'Valor'; + $lang['strunique'] = 'Único'; + $lang['strprimary'] = 'Primaria'; + $lang['strexport'] = 'Exportar'; + $lang['strimport'] = 'Importar'; + $lang['strallowednulls'] = 'Permitir valores nulos'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Cadea ou campo baleiro'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Administración'; + $lang['strvacuum'] = 'Purgar'; + $lang['stranalyze'] = 'Analizar'; + $lang['strclusterindex'] = 'Concentrar'; + $lang['strclustered'] = 'Concentrada?'; + $lang['strreindex'] = 'Indexar'; + $lang['strexecute'] = 'Executar'; + $lang['stradd'] = 'Engadir'; + $lang['strevent'] = 'Evento'; + $lang['strwhere'] = 'Onde'; + $lang['strinstead'] = 'En vez de iso'; + $lang['strwhen'] = 'Cando'; + $lang['strformat'] = 'Formato'; + $lang['strdata'] = 'Datos'; + $lang['strconfirm'] = 'Confirmar'; + $lang['strexpression'] = 'Expresión'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Expandir'; + $lang['strcollapse'] = 'Colapsar'; + $lang['strfind'] = 'Buscar'; + $lang['stroptions'] = 'Opcións'; + $lang['strrefresh'] = 'Actualizar'; + $lang['strdownload'] = 'Descargar'; + $lang['strdownloadgzipped'] = 'Descargar comprimida con gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Avanzado'; + $lang['strvariables'] = 'Variables'; + $lang['strprocess'] = 'Proceso'; + $lang['strprocesses'] = 'Procesos'; + $lang['strsetting'] = 'Configuración'; + $lang['streditsql'] = 'Editar SQL'; + $lang['strruntime'] = 'Tempo total funcionando: %s ms'; + $lang['strpaginate'] = 'Amosar os resultados por páxinas'; + $lang['struploadscript'] = 'ou cargue un guión en SQL:'; + $lang['strstarttime'] = 'Hora de inicio'; + $lang['strfile'] = 'Ficheiro'; + $lang['strfileimported'] = 'Importouse o ficheiro.'; + $lang['strtrycred'] = 'Utilizar estas credenciais para todos os servidores'; + $lang['strconfdropcred'] = 'Por motivos de seguridade, ao desconectarse destruirase a información compartida sobre a súa identidade. Está seguro de que quere desconectarse?'; + $lang['stractionsonmultiplelines'] = 'Accións en varias liñas'; + $lang['strselectall'] = 'Marcar todo'; + $lang['strunselectall'] = 'Desmarcar todo'; + $lang['strlocale'] = 'Configuración rexional'; + $lang['strcollation'] = 'Recompilación'; + $lang['strctype'] = 'Tipo de carácter'; + $lang['strdefaultvalues'] = 'Valores predeterminados'; + $lang['strnewvalues'] = 'Valores novos'; + $lang['strstart'] = 'Iniciar'; + $lang['strstop'] = 'Deter'; + $lang['strgotoppage'] = 'Volver arriba'; + $lang['strtheme'] = 'Tema visual'; + $lang['strcluster'] = 'Concentrador'; + + // Admin + $lang['stradminondatabase'] = 'As seguintes tarefas administrativas realizaranse en toda a base de datos «%s».'; + $lang['stradminontable'] = 'As seguintes tarefas administrativas realizaranse na táboa «%s».'; + + // User-supplied SQL history + $lang['strhistory'] = 'Historial'; + $lang['strnohistory'] = 'Sen historial.'; + $lang['strclearhistory'] = 'Borrar o historial'; + $lang['strdelhistory'] = 'Borrar do historial'; + $lang['strconfdelhistory'] = 'Seguro que quere borrar esta solicitude do historial?'; + $lang['strconfclearhistory'] = 'Seguro que quere borrar o historial?'; + $lang['strnodatabaseselected'] = 'Escolla unha base de datos.'; + + // Database sizes + $lang['strnoaccess'] = 'Sen acceso'; + $lang['strsize'] = 'Tamaño'; + $lang['strbytes'] = 'bytes'; + $lang['strkb'] = 'kiB'; + $lang['strmb'] = 'MiB'; + $lang['strgb'] = 'GiB'; + $lang['strtb'] = 'TiB'; + + // Error handling + $lang['strnoframes'] = 'Este aplicativo funciona mellor nos navegadores que permiten o uso de marcos, pero pode usalo sen eles premendo na ligazón que hai máis abaixo.'; + $lang['strnoframeslink'] = 'Utilizar sen marcos'; + $lang['strbadconfig'] = 'O seu ficheiro de configuración «config.inc.php» está obsoleto. Terá que volvelo crear a partires do novo ficheiro «config.inc.php-dist».'; + $lang['strnotloaded'] = 'A súa instalación de PHP non está preparada para utilizar PostgreSQL. Terá que compilar PHP de novo utilizando a opción de configuración «--with-pgsql».'; + $lang['strpostgresqlversionnotsupported'] = 'Este aplicativo non é compatible coa versión de PostgreSQL que está a usar. Actualíceo á versión %s ou outra versión posterior.'; + $lang['strbadschema'] = 'O esquema especificado non era correcto.'; + $lang['strbadencoding'] = 'Non se deu establecida a codificación do cliente na base de datos.'; + $lang['strsqlerror'] = 'Erro de SQL:'; + $lang['strinstatement'] = 'Na instrución:'; + $lang['strinvalidparam'] = 'Os parámetros fornecidos ao guión non son correctos.'; + $lang['strnodata'] = 'Non se atopou fila algunha.'; + $lang['strnoobjects'] = 'Non se atopou obxecto algún.'; + $lang['strrownotunique'] = 'Esta fila non ten ningún identificador único.'; + $lang['strnouploads'] = 'A carga de ficheiros está desactivada.'; + $lang['strimporterror'] = 'Produciuse un erro ao importar.'; + $lang['strimporterror-fileformat'] = 'Produciuse un erro ao importar: non se puido determinar de maneira automática o formato do ficheiro.'; + $lang['strimporterrorline'] = 'Produciuse un erro ao importar, na liña %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Produciuse un erro ao importar, na liña %s: a liña non ten unha cantidade de columnas axeitada.'; + $lang['strimporterror-uploadedfile'] = 'Produciuse un erro ao importar: non se puido cargar o ficheiro no servidor.'; + $lang['strcannotdumponwindows'] = 'O envorcado de táboas complexas e mais nomes de esquemas non pode efectuarse en sistemas Microsoft Windows.'; + $lang['strinvalidserverparam'] = 'Produciuse un intento de conexión cun servidor non permitido como parámetro, é posible que alguén estea intentando atacar o seu sistema.'; + $lang['strnoserversupplied'] = 'Non se forneceu ningún servidor!'; + $lang['strbadpgdumppath'] = 'Produciuse un erro ao exportar: non se conseguiu executar pg_dump (a ruta indicada no seu ficheiro «conf/config.inc.php» é «%s»). Cambie a ruta no ficheiro de configuración e volva intentalo.'; + $lang['strbadpgdumpallpath'] = 'Produciuse un erro ao exportar: non se conseguiu executar pg_dumpall (a ruta indicada no seu ficheiro «conf/config.inc.php» é «%s»). Cambie a ruta no ficheiro de configuración e volva intentalo.'; + $lang['strconnectionfail'] = 'Non se puido establecer a conexión co servidor.'; + + // Tables + $lang['strtable'] = 'Táboa'; + $lang['strtables'] = 'Táboas'; + $lang['strshowalltables'] = 'Amosar todas as táboas'; + $lang['strnotables'] = 'Non se atopou táboa algunha.'; + $lang['strnotable'] = 'Non se atopou táboa algunha.'; + $lang['strcreatetable'] = 'Crear unha táboa'; + $lang['strcreatetablelike'] = 'Crear unha táboa coma'; + $lang['strcreatetablelikeparent'] = 'Táboa orixinal'; + $lang['strcreatelikewithdefaults'] = 'INCLUÍR OS VALORES PREDETERMINADOS'; + $lang['strcreatelikewithconstraints'] = 'INCLUÍR AS RESTRICIÓNS'; + $lang['strcreatelikewithindexes'] = 'INCLUÍR OS ÍNDICES'; + $lang['strtablename'] = 'Nome da táboa'; + $lang['strtableneedsname'] = 'Debe fornecer un nome para a táboa.'; + $lang['strtablelikeneedslike'] = 'Debe fornecer unha táboa á que copiarlle as propiedades.'; + $lang['strtableneedsfield'] = 'Debe indicar polo menos un campo.'; + $lang['strtableneedscols'] = 'Debe indicar un número de columnas correcto.'; + $lang['strtablecreated'] = 'Creouse a táboa.'; + $lang['strtablecreatedbad'] = 'Non se conseguiu crear a táboa.'; + $lang['strconfdroptable'] = 'Está seguro de que quere eliminar a táboa «%s»?'; + $lang['strtabledropped'] = 'Eliminouse a táboa.'; + $lang['strtabledroppedbad'] = 'Non se conseguiu eliminar a táboa.'; + $lang['strconfemptytable'] = 'Está seguro de que quere baleirar a táboa «%s»?'; + $lang['strtableemptied'] = 'Baleirouse a táboa.'; + $lang['strtableemptiedbad'] = 'Non se conseguiu baleirar a táboa.'; + $lang['strinsertrow'] = 'Inserir unha fila'; + $lang['strrowinserted'] = 'Inseriuse unha fila.'; + $lang['strrowinsertedbad'] = 'Non se conseguiu inserir a fila.'; + $lang['strnofkref'] = 'Non existe ningún valor que coincida na clave externa «%s».'; + $lang['strrowduplicate'] = 'Non se conseguiu inserir a fila, intentouse facer unha inxección duplicada.'; + $lang['streditrow'] = 'Modificar a fila'; + $lang['strrowupdated'] = 'Actualizouse a fila.'; + $lang['strrowupdatedbad'] = 'Non se conseguiu actualizar a fila.'; + $lang['strdeleterow'] = 'Borrar a fila'; + $lang['strconfdeleterow'] = 'Está seguro de que quere borrar esta fila?'; + $lang['strrowdeleted'] = 'Borrouse a fila.'; + $lang['strrowdeletedbad'] = 'Non se conseguiu borrar a fila.'; + $lang['strinsertandrepeat'] = 'Inserir e repetir'; + $lang['strnumcols'] = 'Número de columnas'; + $lang['strcolneedsname'] = 'Debe especificar un nome para a columna'; + $lang['strselectallfields'] = 'Marcar todos os campos'; + $lang['strselectneedscol'] = 'Debe amosar polo menos unha columna.'; + $lang['strselectunary'] = 'Os operadores dun só operando non poden ter valores.'; + $lang['strcolumnaltered'] = 'Modificouse a columna.'; + $lang['strcolumnalteredbad'] = 'Non se conseguiu modificar a columna.'; + $lang['strconfdropcolumn'] = 'Está seguro de que quere eliminar a columna «%s» da táboa «%s»?'; + $lang['strcolumndropped'] = 'Eliminouse a columna.'; + $lang['strcolumndroppedbad'] = 'Non se conseguiu eliminar a columna.'; + $lang['straddcolumn'] = 'Engadir unha columna'; + $lang['strcolumnadded'] = 'Engadiuse a columna.'; + $lang['strcolumnaddedbad'] = 'Non se conseguiu engadir a columna.'; + $lang['strcascade'] = 'EN CASCADA'; + $lang['strtablealtered'] = 'Modificouse a táboa.'; + $lang['strtablealteredbad'] = 'Non se conseguiu modificar a táboa.'; + $lang['strdataonly'] = 'Só datos'; + $lang['strstructureonly'] = 'Só estrutura'; + $lang['strstructureanddata'] = 'Estrutura e datos'; + $lang['strtabbed'] = 'Tabulado'; + $lang['strauto'] = 'Detectar'; + $lang['strconfvacuumtable'] = 'Está seguro de que quere purgar «%s»?'; + $lang['strconfanalyzetable'] = 'Está seguro de que quere analizar «%s»?'; + $lang['strconfreindextable'] = 'Está seguro de que quere indexar «%s»?'; + $lang['strconfclustertable'] = 'Está seguro de que quere concentrar «%s»?'; + $lang['strestimatedrowcount'] = 'Número estimado de filas'; + $lang['strspecifytabletoanalyze'] = 'Debe especificar polo menos unha táboa a analizar.'; + $lang['strspecifytabletoempty'] = 'Debe especificar polo menos unha táboa a baleirar.'; + $lang['strspecifytabletodrop'] = 'Debe especificar polo menos unha táboa a eliminar.'; + $lang['strspecifytabletovacuum'] = 'Debe especificar polo menos unha táboa a purgar.'; + $lang['strspecifytabletoreindex'] = 'Debe especificar polo menos unha táboa a indexar.'; + $lang['strspecifytabletocluster'] = 'Debe especificar polo menos unha táboa a concentrar.'; + $lang['strnofieldsforinsert'] = 'Non pode inserir filas nunha táboa sen columnas.'; + + // Columns + $lang['strcolprop'] = 'Propiedades da columna'; + $lang['strnotableprovided'] = 'Non se forneceu ningunha táboa!'; + + // Users + $lang['struser'] = 'Usuario'; + $lang['strusers'] = 'Usuarios'; + $lang['strusername'] = 'Nome'; + $lang['strpassword'] = 'Contrasinal'; + $lang['strsuper'] = 'Administrador?'; + $lang['strcreatedb'] = 'Crear bases de datos?'; + $lang['strexpires'] = 'Caducidade'; + $lang['strsessiondefaults'] = 'Valores predeterminados da sesión'; + $lang['strnousers'] = 'Non se atopou ningún usuario.'; + $lang['struserupdated'] = 'Actualizouse o usuario.'; + $lang['struserupdatedbad'] = 'Non se conseguiu actualizar o usuario.'; + $lang['strshowallusers'] = 'Listar todos os usuarios'; + $lang['strcreateuser'] = 'Crear un usuario'; + $lang['struserneedsname'] = 'Debe fornecer un nome para o usuario.'; + $lang['strusercreated'] = 'Creouse o usuario.'; + $lang['strusercreatedbad'] = 'Non se conseguiu crear o usuario.'; + $lang['strconfdropuser'] = 'Está seguro de que quere eliminar o usuario «%s»?'; + $lang['struserdropped'] = 'Eliminouse o usuario.'; + $lang['struserdroppedbad'] = 'Non se conseguiu eliminar o usuario.'; + $lang['straccount'] = 'Conta'; + $lang['strchangepassword'] = 'Cambiar de contrasinal'; + $lang['strpasswordchanged'] = 'Cambiouse o contrasinal.'; + $lang['strpasswordchangedbad'] = 'Non se conseguiu cambiar o contrasinal.'; + $lang['strpasswordshort'] = 'O contrasinal é curto de máis.'; + $lang['strpasswordconfirm'] = 'Os contrasinais introducidos son distintos.'; + + // Groups + $lang['strgroup'] = 'Grupo'; + $lang['strgroups'] = 'Grupos'; + $lang['strshowallgroups'] = 'Amosar todos os grupos'; + $lang['strnogroup'] = 'Non se atopou o grupo.'; + $lang['strnogroups'] = 'Non se atopou grupo algún.'; + $lang['strcreategroup'] = 'Crear un grupo'; + $lang['strgroupneedsname'] = 'Debe fornecer un nome para o grupo.'; + $lang['strgroupcreated'] = 'Creouse o grupo.'; + $lang['strgroupcreatedbad'] = 'Non se conseguiu crear o grupo.'; + $lang['strconfdropgroup'] = 'está seguro de que quere eliminar o grupo «%s»?'; + $lang['strgroupdropped'] = 'Eliminouse o grupo.'; + $lang['strgroupdroppedbad'] = 'Non se conseguiu eliminar o grupo.'; + $lang['strmembers'] = 'Membros'; + $lang['strmemberof'] = 'Membros de'; + $lang['stradminmembers'] = 'Membros administradores'; + $lang['straddmember'] = 'Engadir un membro'; + $lang['strmemberadded'] = 'Engadiuse o membro.'; + $lang['strmemberaddedbad'] = 'Non se conseguiu engadir o membro.'; + $lang['strdropmember'] = 'Eliminar o membro'; + $lang['strconfdropmember'] = 'Está seguro de que quere eliminar o membro «%s» do grupo «%s»?'; + $lang['strmemberdropped'] = 'Eliminouse o membro.'; + $lang['strmemberdroppedbad'] = 'Non se conseguiu eliminar o membro.'; + + // Roles + $lang['strrole'] = 'Rol'; + $lang['strroles'] = 'Roles'; + $lang['strshowallroles'] = 'Amosar todos os roles'; + $lang['strnoroles'] = 'Non se atopou rol algún.'; + $lang['strinheritsprivs'] = 'Herdar os privilexios?'; + $lang['strcreaterole'] = 'Crear un rol'; + $lang['strcancreaterole'] = 'Pode crear roles?'; + $lang['strrolecreated'] = 'Creouse o rol.'; + $lang['strrolecreatedbad'] = 'Non se conseguiu crear o rol.'; + $lang['strrolealtered'] = 'Modificouse o rol.'; + $lang['strrolealteredbad'] = 'Non se conseguiu modificar o rol.'; + $lang['strcanlogin'] = 'Pode identificarse?'; + $lang['strconnlimit'] = 'Límite da conexión'; + $lang['strdroprole'] = 'Eliminar o rol'; + $lang['strconfdroprole'] = 'Está seguro de que quere eliminar o rol «%s»?'; + $lang['strroledropped'] = 'Eliminouse o rol.'; + $lang['strroledroppedbad'] = 'Non se conseguiu eliminar o rol.'; + $lang['strnolimit'] = 'Sen límite'; + $lang['strnever'] = 'Nunca'; + $lang['strroleneedsname'] = 'Ten que darlle un nome ao rol.'; + + // Privileges + $lang['strprivilege'] = 'Privilexio'; + $lang['strprivileges'] = 'Privilexios'; + $lang['strnoprivileges'] = 'Este obxecto ten os privilexios predeterminados do propietario.'; + $lang['strgrant'] = 'Conceder'; + $lang['strrevoke'] = 'Revogar'; + $lang['strgranted'] = 'Cambiáronse os privilexios.'; + $lang['strgrantfailed'] = 'Non se conseguiu cambiar os privilexios.'; + $lang['strgrantbad'] = 'Ten que especificar polo menos un usuario ou grupo e un privilexio.'; + $lang['strgrantor'] = 'Autor da concesión'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Base de datos'; + $lang['strdatabases'] = 'Bases de datos'; + $lang['strshowalldatabases'] = 'Amosar todas as bases de datos'; + $lang['strnodatabases'] = 'Non se atopou base de datos algunha.'; + $lang['strcreatedatabase'] = 'Crear unha base de datos'; + $lang['strdatabasename'] = 'Nome da base de datos'; + $lang['strdatabaseneedsname'] = 'Debe darlle un nome á base de datos.'; + $lang['strdatabasecreated'] = 'Creouse a base de datos.'; + $lang['strdatabasecreatedbad'] = 'Non se conseguiu crear a base de datos.'; + $lang['strconfdropdatabase'] = 'Está seguro de que quere eliminar a base de datos «%s»?'; + $lang['strdatabasedropped'] = 'Eliminouse a base de datos.'; + $lang['strdatabasedroppedbad'] = 'Non se conseguiu eliminar a base de datos.'; + $lang['strentersql'] = 'Introduza a continuación as instrucións SQL a executar:'; + $lang['strsqlexecuted'] = 'Executáronse as instrucións SQL.'; + $lang['strvacuumgood'] = 'Completouse a purgación.'; + $lang['strvacuumbad'] = 'Non se conseguiu efectuar a purgación.'; + $lang['stranalyzegood'] = 'Completouse a análise.'; + $lang['stranalyzebad'] = 'Non se conseguiu completar a análise.'; + $lang['strreindexgood'] = 'Completouse o indexado.'; + $lang['strreindexbad'] = 'Non se conseguiu completar o indexado.'; + $lang['strfull'] = 'Completo'; + $lang['strfreeze'] = 'Agresivo'; + $lang['strforce'] = 'Forzar'; + $lang['strsignalsent'] = 'Enviouse o sinal.'; + $lang['strsignalsentbad'] = 'Non se conseguiu enviar o sinal.'; + $lang['strallobjects'] = 'Todos os obxectos'; + $lang['strdatabasealtered'] = 'Modificouse a base de datos.'; + $lang['strdatabasealteredbad'] = 'Non se conseguiu modificar a base de datos.'; + $lang['strspecifydatabasetodrop'] = 'Debe especificar polo menos unha base de datos a eliminar.'; + $lang['strtemplatedb'] = 'Modelo'; + $lang['strconfanalyzedatabase'] = 'Está seguro de que quere analizar todas as táboas da base de datos «%s»?'; + $lang['strconfvacuumdatabase'] = 'Está seguro de que quere purgar todas as táboas da base de datos «%s»?'; + $lang['strconfreindexdatabase'] = 'Está seguro de que quere indexar todas as táboas da base de datos «%s»?'; + $lang['strconfclusterdatabase'] = 'Está seguro de que quere concentrar todas as táboas da base de datos «%s»?'; + + // Views + $lang['strview'] = 'Vista'; + $lang['strviews'] = 'Vistas'; + $lang['strshowallviews'] = 'Listar todas as vistas'; + $lang['strnoview'] = 'Non se atopou vista algunha.'; + $lang['strnoviews'] = 'Non se atopou vista algunha.'; + $lang['strcreateview'] = 'Crear unha vista'; + $lang['strviewname'] = 'Nome da vista'; + $lang['strviewneedsname'] = 'Debe fornecer un nome para a vista.'; + $lang['strviewneedsdef'] = 'Debe fornecer unha descrición da vista.'; + $lang['strviewneedsfields'] = 'Debe indicar que columnas quere ter na vista.'; + $lang['strviewcreated'] = 'Creouse a vista.'; + $lang['strviewcreatedbad'] = 'Non se conseguiu crear a vista.'; + $lang['strconfdropview'] = 'Está seguro de que quere eliminar a vista «%s»?'; + $lang['strviewdropped'] = 'Eliminouse a vista.'; + $lang['strviewdroppedbad'] = 'Non se conseguiu eliminar a vista.'; + $lang['strviewupdated'] = 'Actualizouse a vista.'; + $lang['strviewupdatedbad'] = 'Non se conseguiu actualizar a vista.'; + $lang['strviewlink'] = 'Unión de claves'; + $lang['strviewconditions'] = 'Condicións adicionais'; + $lang['strcreateviewwiz'] = 'Crear unha vista co asistente'; + $lang['strrenamedupfields'] = 'Renomear os campos duplicados'; + $lang['strdropdupfields'] = 'Eliminar os campos duplicados'; + $lang['strerrordupfields'] = 'Non permitir que haxa campos duplicados'; + $lang['strviewaltered'] = 'Modificouse a vista.'; + $lang['strviewalteredbad'] = 'Non se conseguiu modificar a vista.'; + $lang['strspecifyviewtodrop'] = 'Debe especificar polo menos unha vista a borrar.'; + + // Sequences + $lang['strsequence'] = 'Secuencia'; + $lang['strsequences'] = 'Secuencias'; + $lang['strshowallsequences'] = 'Amosar todas as secuencias'; + $lang['strnosequence'] = 'Non se atopou secuencia algunha.'; + $lang['strnosequences'] = 'Non se atopou secuencia algunha.'; + $lang['strcreatesequence'] = 'Crear unha secuencia'; + $lang['strlastvalue'] = 'Último valor'; + $lang['strincrementby'] = 'Aumentar en'; + $lang['strstartvalue'] = 'Valor inicial'; + $lang['strrestartvalue'] = 'Valor do reinicio'; + $lang['strmaxvalue'] = 'Valor máximo'; + $lang['strminvalue'] = 'Valor mínimo'; + $lang['strcachevalue'] = 'Valor da caché'; + $lang['strlogcount'] = 'Conta de rexistros'; + $lang['strcancycle'] = 'Pode repetirse?'; + $lang['striscalled'] = 'Aumentará o último valor antes de devolver o seguinte (is_called)?'; + $lang['strsequenceneedsname'] = 'Debe fornecer un nome para a secuencia.'; + $lang['strsequencecreated'] = 'Creouse a secuencia.'; + $lang['strsequencecreatedbad'] = 'Non se conseguiu crear a secuencia.'; + $lang['strconfdropsequence'] = 'Está seguro de que quere eliminar a secuencia «%s»?'; + $lang['strsequencedropped'] = 'Eliminouse a secuencia.'; + $lang['strsequencedroppedbad'] = 'Non se conseguiu eliminar a secuencia.'; + $lang['strsequencerestart'] = 'Reiniciouse a secuencia.'; + $lang['strsequencerestartbad'] = 'Non se conseguiu reiniciar a secuencia.'; + $lang['strsequencereset'] = 'Restableceuse a secuencia.'; + $lang['strsequenceresetbad'] = 'Non se conseguiu restablecer a secuencia.'; + $lang['strsequencealtered'] = 'Modificouse a secuencia.'; + $lang['strsequencealteredbad'] = 'Non se conseguiu modificar a secuencia.'; + $lang['strsetval'] = 'Establecer o valor'; + $lang['strsequencesetval'] = 'Estableceuse o valor da secuencia.'; + $lang['strsequencesetvalbad'] = 'Non se conseguiu establecer o valor da secuencia.'; + $lang['strnextval'] = 'Aumentar o valor'; + $lang['strsequencenextval'] = 'Aumentouse o valor da secuencia.'; + $lang['strsequencenextvalbad'] = 'Non se conseguiu aumentar o valor da secuencia.'; + $lang['strspecifysequencetodrop'] = 'Debe especificar polo menos unha secuencia a eliminar.'; + + // Indexes + $lang['strindex'] = 'Índice'; + $lang['strindexes'] = 'Índices'; + $lang['strindexname'] = 'Nome do índice'; + $lang['strshowallindexes'] = 'Listar todos os índices'; + $lang['strnoindex'] = 'Non se atopou índice algún.'; + $lang['strnoindexes'] = 'Non se atopou índice algún.'; + $lang['strcreateindex'] = 'Crear un índice'; + $lang['strtabname'] = 'Nome da lapela'; + $lang['strcolumnname'] = 'Nome da columna'; + $lang['strindexneedsname'] = 'Debe fornecer un nome para o índice.'; + $lang['strindexneedscols'] = 'Os índices teñen que ter un número de columnas correcto.'; + $lang['strindexcreated'] = 'Creouse o índice.'; + $lang['strindexcreatedbad'] = 'Non se conseguiu crear o índice.'; + $lang['strconfdropindex'] = 'Está seguro de que quere eliminar o índice «%s»?'; + $lang['strindexdropped'] = 'Eliminouse o índice.'; + $lang['strindexdroppedbad'] = 'Non se conseguiu eliminar o índice.'; + $lang['strkeyname'] = 'Nome da clave'; + $lang['struniquekey'] = 'Clave única'; + $lang['strprimarykey'] = 'Clave primaria'; + $lang['strindextype'] = 'Tipo de índice'; + $lang['strtablecolumnlist'] = 'Columnas na táboa'; + $lang['strindexcolumnlist'] = 'Columnas no índice'; + $lang['strconfcluster'] = 'Está seguro de que quere concentrar «%s»?'; + $lang['strclusteredgood'] = 'Completouse o concentrado.'; + $lang['strclusteredbad'] = 'Non se conseguiu completar o concentrado.'; + $lang['strconcurrently'] = 'Simultaneamente'; + $lang['strnoclusteravailable'] = 'A táboa non está concentrada nun índice.'; + + // Rules + $lang['strrules'] = 'Regras'; + $lang['strrule'] = 'Regra'; + $lang['strshowallrules'] = 'Listar todas as regras'; + $lang['strnorule'] = 'Non se atopou regra algunha.'; + $lang['strnorules'] = 'Non se atopou regra algunha.'; + $lang['strcreaterule'] = 'Crear unha regra'; + $lang['strrulename'] = 'Nome da regra'; + $lang['strruleneedsname'] = 'Debe fornecer un nome para a regra.'; + $lang['strrulecreated'] = 'Creouse a regra.'; + $lang['strrulecreatedbad'] = 'Non se conseguiu crear a regra.'; + $lang['strconfdroprule'] = 'Está seguro de que quere eliminar a regra «%s» en «%s»?'; + $lang['strruledropped'] = 'Eliminouse a regra.'; + $lang['strruledroppedbad'] = 'Non se conseguiu eliminar a regra.'; + + // Constraints + $lang['strconstraint'] = 'Restrición'; + $lang['strconstraints'] = 'Restricións'; + $lang['strshowallconstraints'] = 'Listar todas as restricións'; + $lang['strnoconstraints'] = 'Non se atopou restrición algunha.'; + $lang['strcreateconstraint'] = 'Crear unha restrición'; + $lang['strconstraintcreated'] = 'Creouse a restrición.'; + $lang['strconstraintcreatedbad'] = 'Non se conseguiu crear a restrición.'; + $lang['strconfdropconstraint'] = 'Está seguro de que quere eliminar a restrición «%s» en «%s»?'; + $lang['strconstraintdropped'] = 'Eliminouse a restrición.'; + $lang['strconstraintdroppedbad'] = 'Non se conseguiu eliminar a restrición.'; + $lang['straddcheck'] = 'Engadir unha comprobación'; + $lang['strcheckneedsdefinition'] = 'A comprobación necesita unha definición.'; + $lang['strcheckadded'] = 'Engadiuse a comprobación.'; + $lang['strcheckaddedbad'] = 'Non se conseguiu engadir a comprobación.'; + $lang['straddpk'] = 'Engadir unha clave primaria'; + $lang['strpkneedscols'] = 'A clave primaria necesita polo menos unha columna.'; + $lang['strpkadded'] = 'Engadiuse a clave primaria.'; + $lang['strpkaddedbad'] = 'Non se conseguiu engadir a clave primaria.'; + $lang['stradduniq'] = 'Engadir unha clave única'; + $lang['struniqneedscols'] = 'A clave única necesita polo menos unha columna.'; + $lang['struniqadded'] = 'Engadiuse a clave única.'; + $lang['struniqaddedbad'] = 'Non se conseguiu engadir a clave única.'; + $lang['straddfk'] = 'Engadir unha clave externa'; + $lang['strfkneedscols'] = 'A clave externa necesita polo menos unha columna.'; + $lang['strfkneedstarget'] = 'A clave externa necesita unha táboa externa.'; + $lang['strfkadded'] = 'Engadiuse a clave externa.'; + $lang['strfkaddedbad'] = 'Non se conseguiu engadir a clave externa.'; + $lang['strfktarget'] = 'Táboa externa'; + $lang['strfkcolumnlist'] = 'Columnas na clave'; + $lang['strondelete'] = 'AO ACTUALIZAR'; // Sei que son instrucións cando se usa SQL, pero na + $lang['stronupdate'] = 'AO BORRAR'; // interface paréceme mellor traducilos. + + // Functions + $lang['strfunction'] = 'Función'; + $lang['strfunctions'] = 'Funcións'; + $lang['strshowallfunctions'] = 'Listar todas as funcións'; + $lang['strnofunction'] = 'Non se atopou función algunha.'; + $lang['strnofunctions'] = 'Non se atopou función algunha.'; + $lang['strcreateplfunction'] = 'Crear unha función SQL/PL'; + $lang['strcreateinternalfunction'] = 'Crear unha función interna'; + $lang['strcreatecfunction'] = 'Crear unha función en C'; + $lang['strfunctionname'] = 'Nome da función'; + $lang['strreturns'] = 'Devolve'; + $lang['strproglanguage'] = 'Linguaxe de programación'; + $lang['strfunctionneedsname'] = 'Debe fornecer un nome para a función.'; + $lang['strfunctionneedsdef'] = 'Debe fornecer unha definición para a función.'; + $lang['strfunctioncreated'] = 'Creouse a función.'; + $lang['strfunctioncreatedbad'] = 'Non se conseguiu crear a función.'; + $lang['strconfdropfunction'] = 'Está seguro de que quere eliminar a función «%s»?'; + $lang['strfunctiondropped'] = 'Eliminouse a función.'; + $lang['strfunctiondroppedbad'] = 'Non se conseguiu eliminar a función.'; + $lang['strfunctionupdated'] = 'Actualizouse a función.'; + $lang['strfunctionupdatedbad'] = 'Non se conseguiu actualizar a función.'; + $lang['strobjectfile'] = 'Ficheiro de obxecto'; + $lang['strlinksymbol'] = 'Símbolo da ligazón'; + $lang['strarguments'] = 'Argumentos'; + $lang['strargmode'] = 'Modo'; + $lang['strargtype'] = 'Tipo'; + $lang['strargadd'] = 'Engadir outro argumento'; + $lang['strargremove'] = 'Borrar este argumento'; + $lang['strargnoargs'] = 'Esta función non recibirá argumento ningún.'; + $lang['strargenableargs'] = 'Permitir que se lle fornezan argumentos á función.'; + $lang['strargnorowabove'] = 'Ten que haber unha fila antes desta.'; + $lang['strargnorowbelow'] = 'Ten que haber unha fila despois desta.'; + $lang['strargraise'] = 'Subir.'; + $lang['strarglower'] = 'Baixar.'; + $lang['strargremoveconfirm'] = 'Está seguro de que quere borrar este argumento? Esta acción non se pode desfacer.'; + $lang['strfunctioncosting'] = 'Custo da función'; + $lang['strresultrows'] = 'Filas resultantes'; + $lang['strexecutioncost'] = 'Custo de execución'; + $lang['strspecifyfunctiontodrop'] = 'Debe especificar polo menos unha función a eliminar.'; + + // Triggers + $lang['strtrigger'] = 'Disparador'; + $lang['strtriggers'] = 'Disparadores'; + $lang['strshowalltriggers'] = 'Listar todos os disparadores'; + $lang['strnotrigger'] = 'Non se atopor disparador algún.'; + $lang['strnotriggers'] = 'Non se atopor disparador algún.'; + $lang['strcreatetrigger'] = 'Crear un disparador'; + $lang['strtriggerneedsname'] = 'Debe fornecer un nome para o disparador.'; + $lang['strtriggerneedsfunc'] = 'Debe especificar unha función para o disparador.'; + $lang['strtriggercreated'] = 'Creouse o disparador.'; + $lang['strtriggercreatedbad'] = 'Non se conseguiu crear o disparador.'; + $lang['strconfdroptrigger'] = 'Está seguro de que quere eliminar o disparador «%s» en «%s»?'; + $lang['strconfenabletrigger'] = 'Está seguro de que quere activar o disparador «%s» en «%s»?'; + $lang['strconfdisabletrigger'] = 'Está seguro de que quere desactivar o disparador «%s» en «%s»?'; + $lang['strtriggerdropped'] = 'Eliminouse o disparador.'; + $lang['strtriggerdroppedbad'] = 'Non se conseguiu eliminar o disparador.'; + $lang['strtriggerenabled'] = 'Activouse o disparador.'; + $lang['strtriggerenabledbad'] = 'Non se conseguiu activar o disparador.'; + $lang['strtriggerdisabled'] = 'Desactivouse o disparador.'; + $lang['strtriggerdisabledbad'] = 'Non se conseguiu desactivar o disparador.'; + $lang['strtriggeraltered'] = 'Modificouse o disparador.'; + $lang['strtriggeralteredbad'] = 'Non se conseguiu modificar o disparador.'; + $lang['strforeach'] = 'Por cada'; // «For each [row or instruction]» + + // Types + $lang['strtype'] = 'Tipo'; + $lang['strtypes'] = 'Tipos'; + $lang['strshowalltypes'] = 'Listar todos os tipos'; + $lang['strnotype'] = 'Non se atopou tipo algún.'; + $lang['strnotypes'] = 'Non se atopou tipo algún.'; + $lang['strcreatetype'] = 'Crear un tipo'; + $lang['strcreatecomptype'] = 'Crear un tipo composto'; + $lang['strcreateenumtype'] = 'Crear un tipo de enumeración'; + $lang['strtypeneedsfield'] = 'Debe especificar polo menos un campo.'; + $lang['strtypeneedsvalue'] = 'Debe especificar polo menos un valor.'; + $lang['strtypeneedscols'] = 'Debe especificar un número correcto de campos.'; + $lang['strtypeneedsvals'] = 'Debe especificar un número correcto de valores.'; + $lang['strinputfn'] = 'Función de entrada'; + $lang['stroutputfn'] = 'Función de saída'; + $lang['strpassbyval'] = 'Pasado por valor?'; + $lang['stralignment'] = 'Aliñación'; + $lang['strelement'] = 'Elemento'; + $lang['strdelimiter'] = 'Delimitador'; + $lang['strstorage'] = 'Almacenamento'; + $lang['strfield'] = 'Campo'; + $lang['strnumfields'] = 'Cantidade de campos'; + $lang['strnumvalues'] = 'Cantidade de valores'; + $lang['strtypeneedsname'] = 'Debe fornecer un nome para o tipo.'; + $lang['strtypeneedslen'] = 'Debe fornecer unha lonxitude para o tipo.'; + $lang['strtypecreated'] = 'Creouse o tipo.'; + $lang['strtypecreatedbad'] = 'Non se conseguiu crear o tipo.'; + $lang['strconfdroptype'] = 'Está seguro de que quere eliminar o tipo «%s»?'; + $lang['strtypedropped'] = 'Eliminouse o tipo.'; + $lang['strtypedroppedbad'] = 'Non se conseguiu eliminar o tipo.'; + $lang['strflavor'] = 'Subtipo'; + $lang['strbasetype'] = 'Base'; + $lang['strcompositetype'] = 'Composto'; + $lang['strpseudotype'] = 'Pseudo'; + $lang['strenum'] = 'Enumeración'; + $lang['strenumvalues'] = 'Valores da enumeración'; + + // Schemas + $lang['strschema'] = 'Esquema'; + $lang['strschemas'] = 'Esquemas'; + $lang['strshowallschemas'] = 'Listar todos os esquemas'; + $lang['strnoschema'] = 'Non se atopou esquema algún.'; + $lang['strnoschemas'] = 'Non se atopou esquema algún.'; + $lang['strcreateschema'] = 'Crear un esquema'; + $lang['strschemaname'] = 'Nome do esquema'; + $lang['strschemaneedsname'] = 'Debe fornecer un nome para o esquema.'; + $lang['strschemacreated'] = 'Creouse o esquema.'; + $lang['strschemacreatedbad'] = 'Non se conseguiu crear o esquema.'; + $lang['strconfdropschema'] = 'Está seguro de que quere eliminar o esquema «%s»?'; + $lang['strschemadropped'] = 'Eliminouse o esquema.'; + $lang['strschemadroppedbad'] = 'Non se conseguiu eliminar o esquema.'; + $lang['strschemaaltered'] = 'Modificouse o esquema.'; + $lang['strschemaalteredbad'] = 'Non se conseguiu modificar o esquema.'; + $lang['strsearchpath'] = 'Ruta de busca do esquema'; + $lang['strspecifyschematodrop'] = 'Debe especificar polo menos un esquema a eliminar.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Dominio'; + $lang['strdomains'] = 'Dominios'; + $lang['strshowalldomains'] = 'Listar todos os dominios'; + $lang['strnodomains'] = 'Non se atopou dominio algún.'; + $lang['strcreatedomain'] = 'Crear un dominio'; + $lang['strdomaindropped'] = 'Eliminouse o dominio.'; + $lang['strdomaindroppedbad'] = 'Non se conseguiu eliminar o dominio.'; + $lang['strconfdropdomain'] = 'Está seguro de que quere eliminar o dominio «%s»?'; + $lang['strdomainneedsname'] = 'Debe fornecer un nome para o dominio.'; + $lang['strdomaincreated'] = 'Creouse o dominio.'; + $lang['strdomaincreatedbad'] = 'Non se conseguiu crear o dominio.'; + $lang['strdomainaltered'] = 'Modificouse o dominio.'; + $lang['strdomainalteredbad'] = 'Non se conseguiu modificar o dominio.'; + + // Operators + $lang['stroperator'] = 'Operador'; + $lang['stroperators'] = 'Operadores'; + $lang['strshowalloperators'] = 'Listar todos os operadores'; + $lang['strnooperator'] = 'Non se atopou operador algún.'; + $lang['strnooperators'] = 'Non se atopou operador algún.'; + $lang['strcreateoperator'] = 'Crear un operador'; + $lang['strleftarg'] = 'Tipo do argumento esquerdo'; + $lang['strrightarg'] = 'Tipo do argumento dereito'; + $lang['strcommutator'] = 'Conmutador'; + $lang['strnegator'] = 'Negación'; + $lang['strrestrict'] = 'Restrinxir'; + $lang['strjoin'] = 'Unir'; + $lang['strhashes'] = 'Hashes'; // Non sei como traducilo. + $lang['strmerges'] = 'Mesturas'; + $lang['strleftsort'] = 'Ordenar pola esquerda'; + $lang['strrightsort'] = 'Ordenar pola dereita'; + $lang['strlessthan'] = 'Menor que'; + $lang['strgreaterthan'] = 'Maior que'; + $lang['stroperatorneedsname'] = 'Debe fornecer un nome para o operador.'; + $lang['stroperatorcreated'] = 'Creouse o operador.'; + $lang['stroperatorcreatedbad'] = 'Non se conseguiu crear o operador.'; + $lang['strconfdropoperator'] = 'Está seguro de que quere eliminar o operador «%s»?'; + $lang['stroperatordropped'] = 'Eliminouse o operador.'; + $lang['stroperatordroppedbad'] = 'Non se conseguiu eliminar o operador.'; + + // Casts + $lang['strcasts'] = 'Molde'; + $lang['strnocasts'] = 'Non se atopou molde algún.'; + $lang['strsourcetype'] = 'Tipo orixe'; + $lang['strtargettype'] = 'Tipo obxectivo'; + $lang['strimplicit'] = 'Implícito'; + $lang['strinassignment'] = 'Na asignación'; + $lang['strbinarycompat'] = '(Compatible a nivel binario)'; + + // Conversions + $lang['strconversions'] = 'Conversións'; + $lang['strnoconversions'] = 'Non se atopou conversión algunha.'; + $lang['strsourceencoding'] = 'Codificación orixinal'; + $lang['strtargetencoding'] = 'Codificación obxectivo'; + + // Languages + $lang['strlanguages'] = 'Linguas'; + $lang['strnolanguages'] = 'Non se atopou lingua algunha.'; + $lang['strtrusted'] = 'De confianza'; + + // Info + $lang['strnoinfo'] = 'Non hai información dispoñible.'; + $lang['strreferringtables'] = 'Táboas que fan referencia a esta'; + $lang['strparenttables'] = 'Táboas superiores'; + $lang['strchildtables'] = 'Táboas subordinadas'; + + // Aggregates + $lang['straggregate'] = 'Conxunto'; + $lang['straggregates'] = 'Conxuntos'; + $lang['strnoaggregates'] = 'Non se atopou conxunto algún.'; + $lang['stralltypes'] = '(Todos os tipos)'; + $lang['strcreateaggregate'] = 'Crear un conxunto'; + $lang['straggrbasetype'] = 'Tipo de dato de entrada'; + $lang['straggrsfunc'] = 'Función de cambio de estado'; + $lang['straggrstype'] = 'Tipo de dato para o valor do estado'; + $lang['straggrffunc'] = 'Función final'; + $lang['straggrinitcond'] = 'Condición inicial'; + $lang['straggrsortop'] = 'Operador de orde'; + $lang['strconfdropaggregate'] = 'Está seguro de que quere eliminar o conxunto «%s»?'; + $lang['straggregatedropped'] = 'Eliminouse o conxunto.'; + $lang['straggregatedroppedbad'] = 'Non se conseguiu eliminar o conxunto.'; + $lang['straggraltered'] = 'Modificouse o conxunto.'; + $lang['straggralteredbad'] = 'Non se conseguiu eliminar o conxunto.'; + $lang['straggrneedsname'] = 'Debe fornecer un nome para o conxunto.'; + $lang['straggrneedsbasetype'] = 'Debe fornecer un tipo de dato de entrada para o conxunto.'; + $lang['straggrneedssfunc'] = 'Debe fornecer o nome da función de cambio de estado para o conxunto.'; + $lang['straggrneedsstype'] = 'Debe fornecer un tipo de dato para o valor do estado do conxunto.'; + $lang['straggrcreated'] = 'Creouse o conxunto.'; + $lang['straggrcreatedbad'] = 'Non se conseguiu crear o conxunto.'; + $lang['straggrshowall'] = 'Listar todos os conxuntos'; + + // Operator Classes + $lang['stropclasses'] = 'Clases de operador'; + $lang['strnoopclasses'] = 'Non se atopor clase de operador algunha.'; + $lang['straccessmethod'] = 'Método de acceso'; + + // Stats and performance + $lang['strrowperf'] = 'Rendemento das filas'; + $lang['strioperf'] = 'Rendemento da entrada e saída'; + $lang['stridxrowperf'] = 'Rendemento das filas do índice'; + $lang['stridxioperf'] = 'Rendemento da entrada e saída do índice'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Secuencial'; + $lang['strscan'] = 'Explorar'; + $lang['strread'] = 'Ler'; + $lang['strfetch'] = 'Obter'; + $lang['strheap'] = 'Pila'; + $lang['strtoast'] = 'TOAST'; // Non traduzo por se son siglas, que non o teño claro. + $lang['strtoastindex'] = 'Índice TOAST'; + $lang['strcache'] = 'Caché'; + $lang['strdisk'] = 'Disco'; + $lang['strrows2'] = 'Filas'; + + // Tablespaces + $lang['strtablespace'] = 'Alias de ruta'; + $lang['strtablespaces'] = 'Alias de ruta'; + $lang['strshowalltablespaces'] = 'Listar todos os alias de ruta'; + $lang['strnotablespaces'] = 'Non se atopou alias de ruta algún.'; + $lang['strcreatetablespace'] = 'Crear un alias de ruta'; + $lang['strlocation'] = 'Lugar'; + $lang['strtablespaceneedsname'] = 'Debe fornecer un nome para o alias de ruta.'; + $lang['strtablespaceneedsloc'] = 'Debe fornecer unha ruta para a que crear o alias.'; + $lang['strtablespacecreated'] = 'Creouse o alias de ruta.'; + $lang['strtablespacecreatedbad'] = 'non se conseguiu crear o alias de ruta.'; + $lang['strconfdroptablespace'] = 'Está seguro de que quere borrar o alias de ruta «%s»?'; + $lang['strtablespacedropped'] = 'Eliminouse o alias de ruta.'; + $lang['strtablespacedroppedbad'] = 'Non se conseguiu eliminar o alias de ruta.'; + $lang['strtablespacealtered'] = 'Modificouse o alias de ruta.'; + $lang['strtablespacealteredbad'] = 'Non se conseguiu modificar o alias de ruta.'; + + // Miscellaneous + $lang['strtopbar'] = '%s, executándose no enderezo %s:%s. Está identificado coma «%s».'; + $lang['strtimefmt'] = 'd/m/Y, G:i:s'; + $lang['strhelp'] = 'Axuda'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Navegador das páxinas de axuda'; + $lang['strselecthelppage'] = 'Escolla unha páxina de axuda'; + $lang['strinvalidhelppage'] = 'Páxina de axuda incorrecta.'; + $lang['strlogintitle'] = 'Identificarse en %s'; + $lang['strlogoutmsg'] = 'Saíu de %s'; + $lang['strloading'] = 'Cargando...'; + $lang['strerrorloading'] = 'Produciuse un erro durante o proceso de carga'; + $lang['strclicktoreload'] = 'Prema aquí para recargar'; + + // Autovacuum + $lang['strautovacuum'] = 'Purgación automática'; + $lang['strturnedon'] = 'Acendido'; + $lang['strturnedoff'] = 'Apagado'; + $lang['strenabled'] = 'Activado'; + $lang['strnovacuumconf'] = 'Non se atopou ningunha configuración para purgacións automáticas.'; + $lang['strvacuumbasethreshold'] = 'Límite da base da purgación'; + $lang['strvacuumscalefactor'] = 'Factores de escala da purgación'; + $lang['stranalybasethreshold'] = 'Límite da base da análise'; + $lang['stranalyzescalefactor'] = 'Factores de escala da análise'; + $lang['strvacuumcostdelay'] = 'Atraso do custo da purgación'; + $lang['strvacuumcostlimit'] = 'Custo límite da purgación'; + $lang['strvacuumpertable'] = 'Configuración da purgación automática por táboa'; + $lang['straddvacuumtable'] = 'Engadir unha configuración de purgación automática dunha táboa'; + $lang['streditvacuumtable'] = 'Modificar a configuración de purgación automática da táboa «%s»'; + $lang['strdelvacuumtable'] = 'Está seguro de que quere eliminar a configuración de purgación automática da táboa «%s»?'; + $lang['strvacuumtablereset'] = 'A configuración de purgación automática da táboa «%s» restableceuse aos seus valores predeterminados'; + $lang['strdelvacuumtablefail'] = 'Non se conseguiu eliminar a configuración de purgación automática da táboa «%s»'; + $lang['strsetvacuumtablesaved'] = 'Gardouse a configuración de purgación automática da táboa «%s».'; + $lang['strsetvacuumtablefail'] = 'Non se conseguiu gardar a configuración de purgación automática da táboa «%s».'; + $lang['strspecifydelvacuumtable'] = 'Debe especificar unha táboa da que borrar os parámetros de purgación.'; + $lang['strspecifyeditvacuumtable'] = 'Debe especificar unha táboa na que modificar os parámetros de purgación.'; + $lang['strnotdefaultinred'] = 'Os valores que non sexan os predeterminados están en cor vermella.'; + + // Table-level Locks + $lang['strlocks'] = 'Bloqueos'; + $lang['strtransaction'] = 'Identificador da transacción'; + $lang['strvirtualtransaction'] = 'Identificador da transacción virtual'; + $lang['strprocessid'] = 'Identificador do proceso'; + $lang['strmode'] = 'Modo de bloqueo'; + $lang['strislockheld'] = 'Está activo o bloqueo?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Transaccións preparadas'; + $lang['strxactid'] = 'Identificador da transacción'; + $lang['strgid'] = 'Identificador global'; + + // Fulltext search + $lang['strfulltext'] = 'Busca de texto completa'; + $lang['strftsconfig'] = 'Configuración de BTC'; + $lang['strftsconfigs'] = 'Configuracións'; + $lang['strftscreateconfig'] = 'Crear unha configuración de BTC'; + $lang['strftscreatedict'] = 'Crear un dicionario'; + $lang['strftscreatedicttemplate'] = 'Crear un modelo de dicionario'; + $lang['strftscreateparser'] = 'Crear un analizador'; + $lang['strftsnoconfigs'] = 'Non se atopou configuración de BTC algunha.'; + $lang['strftsconfigdropped'] = 'Eliminouse a configuración de BTC.'; + $lang['strftsconfigdroppedbad'] = 'Non se conseguiu eliminar a configuración de BTC.'; + $lang['strconfdropftsconfig'] = 'Está seguro de que quere eliminar a configuración de BTC «%s»?'; + $lang['strconfdropftsdict'] = 'Está seguro de que quere eliminar o dicionario de BTC «%s»?'; + $lang['strconfdropftsmapping'] = 'Está seguro de que quere eliminar a aplicación «%s» da configuración de BTC «%s»?'; + $lang['strftstemplate'] = 'Modelo'; + $lang['strftsparser'] = 'Analizador'; + $lang['strftsconfigneedsname'] = 'Debe fornecer un nome para a configuración de BTC.'; + $lang['strftsconfigcreated'] = 'Creouse a configuración de BTC.'; + $lang['strftsconfigcreatedbad'] = 'non se conseguiu crear a configuración de BTC.'; + $lang['strftsmapping'] = 'Aplicación'; + $lang['strftsdicts'] = 'Dicionarios'; + $lang['strftsdict'] = 'Dicionario'; + $lang['strftsemptymap'] = 'Aplicación da configuración de BTC baleira.'; + $lang['strftsconfigaltered'] = 'Modificouse a configuración de BTC.'; + $lang['strftsconfigalteredbad'] = 'Non se conseguiu modificar a configuración de BTC.'; + $lang['strftsconfigmap'] = 'Aplicación da configuración de BTC'; + $lang['strftsparsers'] = 'Analizadores de BTC'; + $lang['strftsnoparsers'] = 'Non hai ningún analizador de BTC dispoñible.'; + $lang['strftsnodicts'] = 'Non hai ningún dicionario de BTC dispoñible.'; + $lang['strftsdictcreated'] = 'Creouse o dicionario de BTC.'; + $lang['strftsdictcreatedbad'] = 'Non se conseguiu crear o dicionario de BTC.'; + $lang['strftslexize'] = 'Análise léxica'; + $lang['strftsinit'] = 'Comezo'; + $lang['strftsoptionsvalues'] = 'Opcións e valores'; + $lang['strftsdictneedsname'] = 'Debe fornecer un nome para o dicionario de BTC.'; + $lang['strftsdictdropped'] = 'Eliminouse o dicionario de BTC.'; + $lang['strftsdictdroppedbad'] = 'Non se conseguiu eliminar o dicionario de BTC.'; + $lang['strftsdictaltered'] = 'Modificouse o dicionario de BTC.'; + $lang['strftsdictalteredbad'] = 'Non se conseguiu modifica o dicionario de BTC.'; + $lang['strftsaddmapping'] = 'Engadir unha nova aplicación'; + $lang['strftsspecifymappingtodrop'] = 'Debe especificar polo menos unha aplicación a eliminar.'; + $lang['strftsspecifyconfigtoalter'] = 'Debe especificar polo menos unha configuración de BTC a modificar'; + $lang['strftsmappingdropped'] = 'Eliminouse a aplicación de BTC.'; + $lang['strftsmappingdroppedbad'] = 'Non se conseguiu eliminar a aplicación de BTC.'; + $lang['strftsnodictionaries'] = 'Non se atopou dicionario algún.'; + $lang['strftsmappingaltered'] = 'Modificouse a aplicación de BTC.'; + $lang['strftsmappingalteredbad'] = 'Non se conseguiu modificar a aplicación de BTC.'; + $lang['strftsmappingadded'] = 'Engadiuse a aplicación de BTC.'; + $lang['strftsmappingaddedbad'] = 'Non se conseguiu engadir a aplicación de BTC.'; + $lang['strftstabconfigs'] = 'Configuracións'; + $lang['strftstabdicts'] = 'Dicionarios'; + $lang['strftstabparsers'] = 'Analizadores'; + $lang['strftscantparsercopy'] = 'Non se pode especificar tanto un analizador coma un modelo durante a creación dunha configuración de busca de texto.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/german.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/german.php new file mode 100644 index 00000000..a1a0a449 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/german.php @@ -0,0 +1,852 @@ +<?php + + /** + * German language file for phpPgAdmin. Use this as a basis + * + * @maintainer Laurenz Albe <laurenz.albe@wien.gv.at> + * + * $Id: german.php,v 1.30 2008/02/18 23:06:51 ioguix Exp $ + */ + + // Language and character set + $lang['applang'] = 'Deutsch'; + $lang['applocale'] = 'de-DE'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Willkommen bei phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmin Homepage'; + $lang['strpgsqlhome'] = 'PostgreSQL Homepage'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL Dokumentation (lokal)'; + $lang['strreportbug'] = 'Fehler melden'; + $lang['strviewfaq'] = 'Online-FAQ ansehen'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Anmelden'; + $lang['strloginfailed'] = 'Anmeldung fehlgeschlagen'; + $lang['strlogindisallowed'] = 'Anmeldung aus Sicherheitsgründen verweigert.'; + $lang['strserver'] = 'Server'; + $lang['strservers'] = 'Server'; + $lang['strintroduction'] = 'Einführung'; + $lang['strhost'] = 'Host'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Abmelden'; + $lang['strowner'] = 'Besitzer'; + $lang['straction'] = 'Aktion'; + $lang['stractions'] = 'Aktionen'; + $lang['strname'] = 'Name'; + $lang['strdefinition'] = 'Definition'; + $lang['strproperties'] = 'Eigenschaften'; + $lang['strbrowse'] = 'Durchsuchen'; + $lang['strenable'] = 'Einschalten'; + $lang['strdisable'] = 'Ausschalten'; + $lang['strdrop'] = 'Löschen'; + $lang['strdropped'] = 'Gelöscht'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Nicht Null'; + $lang['strprev'] = '< Zurück'; + $lang['strnext'] = 'Weiter >'; + $lang['strfirst'] = '<< Anfang'; + $lang['strlast'] = 'Ende >>'; + $lang['strfailed'] = 'Fehlgeschlagen'; + $lang['strcreate'] = 'Erstellen'; + $lang['strcreated'] = 'Erstellt'; + $lang['strcomment'] = 'Kommentar'; + $lang['strlength'] = 'Länge'; + $lang['strdefault'] = 'Standardwert'; + $lang['stralter'] = 'Ändern'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Abbrechen'; + $lang['strac'] = 'Automatische Vervollständigung einschalten'; + $lang['strsave'] = 'Speichern'; + $lang['strreset'] = 'Zurücksetzen'; + $lang['strinsert'] = 'Einfügen'; + $lang['strselect'] = 'Abfrage'; + $lang['strdelete'] = 'Löschen'; + $lang['strupdate'] = 'Ändern'; + $lang['strreferences'] = 'Verweise'; + $lang['stryes'] = 'Ja'; + $lang['strno'] = 'Nein'; + $lang['strtrue'] = 'WAHR'; + $lang['strfalse'] = 'FALSCH'; + $lang['stredit'] = 'Bearbeiten'; + $lang['strcolumn'] = 'Spalte'; + $lang['strcolumns'] = 'Spalten'; + $lang['strrows'] = 'Datensätze'; + $lang['strrowsaff'] = 'Datensätze betroffen.'; + $lang['strobjects'] = 'Objekt(e)'; + $lang['strback'] = 'Zurück'; + $lang['strqueryresults'] = 'Abfrageergebnis'; + $lang['strshow'] = 'Anzeigen'; + $lang['strempty'] = 'Leeren'; + $lang['strlanguage'] = 'Sprache'; + $lang['strencoding'] = 'Zeichenkodierung'; + $lang['strvalue'] = 'Wert'; + $lang['strunique'] = 'Eindeutig'; + $lang['strprimary'] = 'Primär'; + $lang['strexport'] = 'Exportieren'; + $lang['strimport'] = 'Importieren'; + $lang['strallowednulls'] = 'NULL-Zeichen erlaubt'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Leere Zeichenkette / Leere Spalte'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Bereinigen'; + $lang['stranalyze'] = 'Analysieren'; + $lang['strclusterindex'] = 'Cluster'; + $lang['strclustered'] = 'Geclustert?'; + $lang['strreindex'] = 'Reindexieren'; + $lang['strexecute'] = 'Ausführen'; + $lang['stradd'] = 'Hinzufügen'; + $lang['strevent'] = 'Ereignis'; + $lang['strwhere'] = 'Bedingung'; + $lang['strinstead'] = 'Tu stattdessen'; + $lang['strwhen'] = 'Wann'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Daten'; + $lang['strconfirm'] = 'Bestätigen'; + $lang['strexpression'] = 'Ausdruck'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Aufklappen'; + $lang['strcollapse'] = 'Zuklappen'; + $lang['strfind'] = 'Suchen'; + $lang['stroptions'] = 'Optionen'; + $lang['strrefresh'] = 'Aktualisieren'; + $lang['strdownload'] = 'Herunterladen'; + $lang['strdownloadgzipped'] = 'gzip-komprimiert herunterladen'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Erweitert'; + $lang['strvariables'] = 'Variable'; + $lang['strprocess'] = 'Prozess'; + $lang['strprocesses'] = 'Prozesse'; + $lang['strsetting'] = 'Einstellung'; + $lang['streditsql'] = 'SQL bearbeiten'; + $lang['strruntime'] = 'Laufzeit gesamt: %s ms'; + $lang['strpaginate'] = 'Ergebnisse seitenweise anzeigen'; + $lang['struploadscript'] = 'oder laden Sie ein SQL-Script hoch:'; + $lang['strstarttime'] = 'Beginnzeitpunkt'; + $lang['strfile'] = 'Datei'; + $lang['strfileimported'] = 'Datei importiert.'; + $lang['strtrycred'] = 'Diese Anmeldedaten für alle Server verwenden'; + $lang['strconfdropcred'] = 'Aus Sicherheitsgründen werden gemeinsamme Anmeldedaten beim Abmelden gelöscht. Sind Sie sicher, dass sie sich abmelden wollen?'; + $lang['stractionsonmultiplelines'] = 'Mehrzeilige Aktionen'; + $lang['strselectall'] = 'Alle auswählen'; + $lang['strunselectall'] = 'Alle abwählen'; + $lang['strlocale'] = 'Spracheinstellung'; + $lang['strcluster'] = 'Cluster'; + + // User-supplied SQL history + $lang['strhistory'] = 'Befehlsspeicher'; + $lang['strnohistory'] = 'Kein Befehlsspeicher.'; + $lang['strclearhistory'] = 'Befehlsspeicher löschen'; + $lang['strdelhistory'] = 'Aus dem Befehlsspeicher löschen'; + $lang['strconfdelhistory'] = 'Diese Abfrage wirklich aus dem Befehlsspeicher löschen?'; + $lang['strconfclearhistory'] = 'Befehlsspeicher wirklich löschen?'; + $lang['strnodatabaseselected'] = 'Bitte wählen Sie eine Datenbank aus.'; + + // Database sizes + $lang['strsize'] = 'Größe'; + $lang['strbytes'] = 'Bytes'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Diese Anwendung funktioniert am besten mit einem Browser, der Frames beherrscht, kann aber mit dem untenstehenden Link auch ohne Frames verwendet werden.'; + $lang['strnoframeslink'] = 'Ohne Frames arbeiten'; + $lang['strbadconfig'] = 'Ihre config.inc.php ist nicht aktuell. Sie müssen sie aus der config.inc.php-dist neu erzeugen.'; + $lang['strnotloaded'] = 'Ihre PHP-Installation unterstützt PostgreSQL nicht. Sie müssen PHP unter Verwendung der Konfigurationsoption --with-pgsql neu kompilieren.'; + $lang['strpostgresqlversionnotsupported'] = 'Ihre PostgreSQL-Version wird nicht unterstützt. Bitte stellen Sie Ihre Datenbank auf Version %s oder eine neuere Version um.'; + $lang['strbadschema'] = 'Ungültiges Schema angegeben.'; + $lang['strbadencoding'] = 'Kann die Client-Zeichenkodierung nicht in der Datenbank setzen.'; + $lang['strsqlerror'] = 'SQL-Fehler:'; + $lang['strinstatement'] = 'In der Anweisung:'; + $lang['strinvalidparam'] = 'Unzulässige Script-Parameter.'; + $lang['strnodata'] = 'Keine Datensätze gefunden.'; + $lang['strnoobjects'] = 'Keine Objekte gefunden.'; + $lang['strrownotunique'] = 'Dieser Datensatz hat keine eindeutige Spalte.'; + $lang['strnouploads'] = 'Das Hochladen von Dateien ist ausgeschaltet.'; + $lang['strimporterror'] = 'Importfehler.'; + $lang['strimporterror-fileformat'] = 'Importfehler: Dateiformat konnte nicht automatisch bestimmt werden.'; + $lang['strimporterrorline'] = 'Importfehler in Zeile %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Importfehler in Zeile %s: die Zeile hat nicht die richtige Anzahl von Spalten.'; + $lang['strimporterror-uploadedfile'] = 'Importfehler: die Datei konnte nicht auf den Server geladen werden'; + $lang['strcannotdumponwindows'] = 'Das Ablegen von komplizierten Tabellen- und Schemanamen wird auf Windows nicht unterstützt.'; + $lang['strinvalidserverparam'] = 'Es wurde versucht, mit einem ungültigen Server-Parameter eine Verbindung herzustellen. Möglicherweise versucht jemand, in Ihr System einzubrechen.'; + $lang['strnoserversupplied'] = 'Kein Server angegeben!'; + + // Tables + $lang['strtable'] = 'Tabelle'; + $lang['strtables'] = 'Tabellen'; + $lang['strshowalltables'] = 'Alle Tabellen anzeigen'; + $lang['strnotables'] = 'Keine Tabellen gefunden.'; + $lang['strnotable'] = 'Keine Tabelle gefunden.'; + $lang['strcreatetable'] = 'Neue Tabelle erstellen'; + $lang['strcreatetablelike'] = 'Neue Tabelle als Kopie einer bestehenden anlegen'; + $lang['strcreatetablelikeparent'] = 'Ursprüngliche Tabelle'; + $lang['strcreatelikewithdefaults'] = 'DEFAULT-Werte mitkopieren'; + $lang['strcreatelikewithconstraints'] = 'Constraints mitkopieren'; + $lang['strcreatelikewithindexes'] = 'Indizes mitkopieren'; + $lang['strtablename'] = 'Tabellenname'; + $lang['strtableneedsname'] = 'Sie müssen für die Tabelle einen Namen angeben.'; + $lang['strtablelikeneedslike'] = 'Sie müssen eine Tabelle angeben, deren Spaltendefinitionen kopiert werden sollen.'; + $lang['strtableneedsfield'] = 'Sie müssen mindestens eine Spalte angeben.'; + $lang['strtableneedscols'] = 'Sie müssen eine zulässige Anzahl von Spalten angeben.'; + $lang['strtablecreated'] = 'Tabelle erstellt.'; + $lang['strtablecreatedbad'] = 'Erstellen der Tabelle fehlgeschlagen.'; + $lang['strconfdroptable'] = 'Sind Sie sicher, dass Sie die Tabelle "%s" löschen möchten?'; + $lang['strtabledropped'] = 'Tabelle gelöscht.'; + $lang['strtabledroppedbad'] = 'Löschen der Tabelle fehlgeschlagen.'; + $lang['strconfemptytable'] = 'Sind Sie sicher, dass Sie den Inhalt der Tabelle "%s" löschen möchten?'; + $lang['strtableemptied'] = 'Tabelleninhalt gelöscht.'; + $lang['strtableemptiedbad'] = 'Löschen des Tabelleninhaltes fehlgeschlagen.'; + $lang['strinsertrow'] = 'Datensatz einfügen'; + $lang['strrowinserted'] = 'Datensatz eingefügt.'; + $lang['strrowinsertedbad'] = 'Einfügen des Datensatzes fehlgeschlagen.'; + $lang['strrowduplicate'] = 'Einfügen des Datensatzes fehlgeschlagen: es wurde versucht, ein Duplikat einzufügen.'; + $lang['streditrow'] = 'Datensatz bearbeiten'; + $lang['strrowupdated'] = 'Datensatz geändert.'; + $lang['strrowupdatedbad'] = 'Ändern des Datensatzes fehlgeschlagen.'; + $lang['strdeleterow'] = 'Datensatz löschen'; + $lang['strconfdeleterow'] = 'Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?'; + $lang['strrowdeleted'] = 'Datensatz gelöscht.'; + $lang['strrowdeletedbad'] = 'Löschen des Datensatzes fehlgeschlagen.'; + $lang['strinsertandrepeat'] = 'Einfügen und Wiederholen'; + $lang['strnumcols'] = 'Anzahl der Spalten'; + $lang['strcolneedsname'] = 'Sie müssen einen Namen für die Spalte angeben'; + $lang['strselectallfields'] = 'Alle Felder auswählen'; + $lang['strselectneedscol'] = 'Sie müssen mindestens eine Spalte anzeigen lassen.'; + $lang['strselectunary'] = 'Unäre Operatoren können keine Werte haben.'; + $lang['strcolumnaltered'] = 'Spalte geändert.'; + $lang['strcolumnalteredbad'] = 'Ändern der Spalte fehlgeschlagen.'; + $lang['strconfdropcolumn'] = 'Sind Sie sicher, dass Sie die Spalte "%s" aus der Tabelle "%s" löschen möchten?'; + $lang['strcolumndropped'] = 'Spalte gelöscht.'; + $lang['strcolumndroppedbad'] = 'Löschen der Spalte fehlgschlagen.'; + $lang['straddcolumn'] = 'Spalte hinzufügen'; + $lang['strcolumnadded'] = 'Spalte hinzugefügt.'; + $lang['strcolumnaddedbad'] = 'Hinzufügen der Spalte fehlgeschlagen.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Tabelle geändert.'; + $lang['strtablealteredbad'] = 'Ändern der Tabelle fehlgeschlagen.'; + $lang['strdataonly'] = 'Nur die Daten'; + $lang['strstructureonly'] = 'Nur die Struktur'; + $lang['strstructureanddata'] = 'Struktur und Daten'; + $lang['strtabbed'] = 'Mit Tabluatoren'; + $lang['strauto'] = 'Automatisch'; + $lang['strconfvacuumtable'] = 'Sind sie sicher, dass Sie VACUUM auf "%s" ausführen wollen?'; + $lang['strconfanalyzetable'] = 'Sind sie sicher, dass Sie ANALYZE auf "%s" ausführen wollen?'; + $lang['strestimatedrowcount'] = 'Geschätzte Anzahl von Datensätzen'; + $lang['strspecifytabletoanalyze'] = 'Sie müssen mindestens eine Tabelle angeben, die analysiert werden soll.'; + $lang['strspecifytabletoempty'] = 'Sie müssen mindestens eine Tabelle angeben, deren Inhalt gelöscht werden soll.'; + $lang['strspecifytabletodrop'] = 'Sie müssen mindestens eine Tabelle angeben, die gelöscht werden soll.'; + $lang['strspecifytabletovacuum'] = 'Sie müssen mindestens eine Tabelle angeben, die bereinigt werden soll.'; + + // Columns + $lang['strcolprop'] = 'Spalteneigenschaften'; + $lang['strnotableprovided'] = 'Keine Tabelle angegeben!'; + + // Users + $lang['struser'] = 'Benutzer'; + $lang['strusers'] = 'Benutzer'; + $lang['strusername'] = 'Benutzername'; + $lang['strpassword'] = 'Passwort'; + $lang['strsuper'] = 'Superuser?'; + $lang['strcreatedb'] = 'Datenbank erstellen?'; + $lang['strexpires'] = 'Gültig bis'; + $lang['strsessiondefaults'] = 'Standardwerte für Datenbanksitzungen'; + $lang['strnousers'] = 'Keine Benutzer gefunden.'; + $lang['struserupdated'] = 'Benutzer geändert.'; + $lang['struserupdatedbad'] = 'Ändern des Benutzers fehlgeschlagen.'; + $lang['strshowallusers'] = 'Alle Benutzer anzeigen'; + $lang['strcreateuser'] = 'Benutzer anlegen'; + $lang['struserneedsname'] = 'Sie müssen einen Namen für den Benutzer angeben.'; + $lang['strusercreated'] = 'Benutzer angelegt.'; + $lang['strusercreatedbad'] = 'Anlegen des Benutzers fehlgeschlagen.'; + $lang['strconfdropuser'] = 'Sind Sie sicher, dass Sie den Benutzer "%s" löschen möchten?'; + $lang['struserdropped'] = 'Benutzer gelöscht.'; + $lang['struserdroppedbad'] = 'Löschen des Benutzers fehlgeschlagen.'; + $lang['straccount'] = 'Benutzerkonto'; + $lang['strchangepassword'] = 'Passwort ändern'; + $lang['strpasswordchanged'] = 'Passwort geändert.'; + $lang['strpasswordchangedbad'] = 'Ändern des Passwortes fehlgeschlagen.'; + $lang['strpasswordshort'] = 'Passwort ist zu kurz.'; + $lang['strpasswordconfirm'] = 'Passwort und Passwortbestätigung stimmen nicht überein.'; + + // Groups + $lang['strgroup'] = 'Gruppe'; + $lang['strgroups'] = 'Gruppen'; + $lang['strshowallgroups'] = 'Alle Gruppen anzeigen'; + $lang['strnogroup'] = 'Gruppe nicht gefunden.'; + $lang['strnogroups'] = 'Keine Gruppe gefunden.'; + $lang['strcreategroup'] = 'Gruppe anlegen'; + $lang['strgroupneedsname'] = 'Sie müssen für die Gruppe einen Namen angeben.'; + $lang['strgroupcreated'] = 'Gruppe angelegt.'; + $lang['strgroupcreatedbad'] = 'Anlegen der Gruppe fehlgeschlagen.'; + $lang['strconfdropgroup'] = 'Sind Sie sicher, dass Sie die Gruppe "%s" löschen möchten?'; + $lang['strgroupdropped'] = 'Gruppe gelöscht.'; + $lang['strgroupdroppedbad'] = 'Löschen der Gruppe fehlgeschlagen.'; + $lang['strmembers'] = 'Mitglieder'; + $lang['strmemberof'] = 'Mitglied von'; + $lang['stradminmembers'] = 'Administrative Mitglieder'; + $lang['straddmember'] = 'Mitglied hinzufügen'; + $lang['strmemberadded'] = 'Mitglied hinzugefügt.'; + $lang['strmemberaddedbad'] = 'Hinzufügen des Mitglieds fehlgeschlagen.'; + $lang['strdropmember'] = 'Mitglied löschen'; + $lang['strconfdropmember'] = 'Sind Sie sicher, dass Sie das Mitglied "%s" aus der Gruppe "%s" löschen wollen?'; + $lang['strmemberdropped'] = 'Mitglied gelöscht.'; + $lang['strmemberdroppedbad'] = 'Löschen des Mitglieds fehlgeschlagen.'; + + // Roles + $lang['strrole'] = 'Rolle'; + $lang['strroles'] = 'Rollen'; + $lang['strshowallroles'] = 'Alle Rollen anzeigen'; + $lang['strnoroles'] = 'Keine Rollen gefunden.'; + $lang['strinheritsprivs'] = 'Rechte vererben?'; + $lang['strcreaterole'] = 'Rolle anlegen'; + $lang['strcancreaterole'] = 'Darf Rollen anlegen?'; + $lang['strrolecreated'] = 'Rolle angelegt.'; + $lang['strrolecreatedbad'] = 'Anlegen der Rolle fehlgeschlagen.'; + $lang['strrolealtered'] = 'Rolle geändert.'; + $lang['strrolealteredbad'] = 'Ändern der Rolle fehlgeschlagen.'; + $lang['strcanlogin'] = 'Darf sich anmelden?'; + $lang['strconnlimit'] = 'Maximalzahl an Datenbankverbindungen'; + $lang['strdroprole'] = 'Rolle löschen'; + $lang['strconfdroprole'] = 'Sind Sie sicher, dass Sie die Rolle "%s" löschen möchten?'; + $lang['strroledropped'] = 'Rolle gelöscht.'; + $lang['strroledroppedbad'] = 'Löschen der Rolle fehlgeschlagen.'; + $lang['strnolimit'] = 'Unbeschränkt'; + $lang['strnever'] = 'Nie'; + $lang['strroleneedsname'] = 'Sie müssen für die Rolle einen Namen angeben.'; + + // Privileges + $lang['strprivilege'] = 'Recht'; + $lang['strprivileges'] = 'Rechte'; + $lang['strnoprivileges'] = 'Für dieses Objekt gelten die Standard-Eigentümerrechte.'; + $lang['strgrant'] = 'Rechte erteilen'; + $lang['strrevoke'] = 'Rechte entziehen'; + $lang['strgranted'] = 'Rechte geändert.'; + $lang['strgrantfailed'] = 'Ändern der Rechte fehlgeschlagen.'; + $lang['strgrantbad'] = 'Sie müssen mindestens einen Benutzer oder eine Gruppe und mindestens ein Recht angeben.'; + $lang['strgrantor'] = 'Recht vergeben von'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Datenbank'; + $lang['strdatabases'] = 'Datenbanken'; + $lang['strshowalldatabases'] = 'Alle Datenbanken anzeigen'; + $lang['strnodatabases'] = 'Keine Datenbanken gefunden.'; + $lang['strcreatedatabase'] = 'Datenbank erstellen'; + $lang['strdatabasename'] = 'Datenbankname'; + $lang['strdatabaseneedsname'] = 'Sie müssen für die Datenbank einen Namen angeben.'; + $lang['strdatabasecreated'] = 'Datenbank erstellt.'; + $lang['strdatabasecreatedbad'] = 'Erstellen der Datenbank fehlgeschlagen.'; + $lang['strconfdropdatabase'] = 'Sind Sie sicher, dass Sie die Datenbank "%s" löschen möchten?'; + $lang['strdatabasedropped'] = 'Datenbank gelöscht.'; + $lang['strdatabasedroppedbad'] = 'Löschen der Datenbank fehlgeschlagen.'; + $lang['strentersql'] = 'Auszuführende SQL-Anweisungen hier eingeben:'; + $lang['strsqlexecuted'] = 'SQL-Anweisungen ausgeführt.'; + $lang['strvacuumgood'] = 'Tabellenbereinigung abgeschlossen.'; + $lang['strvacuumbad'] = 'Tabellenbereinigung fehlgeschlagen.'; + $lang['stranalyzegood'] = 'Analyse abgeschlossen.'; + $lang['stranalyzebad'] = 'Analyse fehlgeschlagen.'; + $lang['strreindexgood'] = 'Neuindexierung abgeschlossen.'; + $lang['strreindexbad'] = 'Neuindexierung fehlgeschlagen.'; + $lang['strfull'] = 'Mit Reorganisation'; + $lang['strfreeze'] = 'Aggressives "Einfrieren"'; + $lang['strforce'] = 'Erzwingen'; + $lang['strsignalsent'] = 'Signal gesendet.'; + $lang['strsignalsentbad'] = 'Senden des Signales fehlgeschlagen.'; + $lang['strallobjects'] = 'Alle Objekte'; + $lang['strdatabasealtered'] = 'Datenbank geändert.'; + $lang['strdatabasealteredbad'] = 'Ändern der Datenbank fehlgeschlagen.'; + $lang['strspecifydatabasetodrop'] = 'Sie müssen mindestens eine Datenbank angeben, die gelöscht werden soll.'; + + // Views + $lang['strview'] = 'Sicht'; + $lang['strviews'] = 'Sichten'; + $lang['strshowallviews'] = 'Alle Sichten anzeigen'; + $lang['strnoview'] = 'Keine Sicht gefunden.'; + $lang['strnoviews'] = 'Keine Sichten gefunden.'; + $lang['strcreateview'] = 'Sicht erstellen'; + $lang['strviewname'] = 'Name der Sicht'; + $lang['strviewneedsname'] = 'Sie müssen für die Sicht einen Namen angeben.'; + $lang['strviewneedsdef'] = 'Sie müssen für die Sicht eine Definition angeben.'; + $lang['strviewneedsfields'] = 'Sie müssen die Spalten angeben, die sie in der Sicht haben wollen.'; + $lang['strviewcreated'] = 'Sicht erstellt.'; + $lang['strviewcreatedbad'] = 'Erstellen der Sicht fehlgeschlagen.'; + $lang['strconfdropview'] = 'Sind Sie sicher, dass Sie die Sicht "%s" löschen möchten?'; + $lang['strviewdropped'] = 'Sicht gelöscht.'; + $lang['strviewdroppedbad'] = 'Löschen der Sicht fehlgeschlagen.'; + $lang['strviewupdated'] = 'Sicht geändert.'; + $lang['strviewupdatedbad'] = 'Ändern der Sicht fehlgeschlagen.'; + $lang['strviewlink'] = 'Verbindende Schlüssel'; + $lang['strviewconditions'] = 'Zusätzliche Bedingungen'; + $lang['strcreateviewwiz'] = 'Sicht mit dem Assistenten erstellen'; + $lang['strrenamedupfields'] = 'Doppelte Spalten umbenennen'; + $lang['strdropdupfields'] = 'Doppelte Spalten entfernen'; + $lang['strerrordupfields'] = 'Fehler bei den doppelten Spalten'; + $lang['strviewaltered'] = 'Sicht geändert.'; + $lang['strviewalteredbad'] = 'Ändern der Sicht fehlgeschlagen.'; + $lang['strspecifyviewtodrop'] = 'Sie müssen mindestens eine Sicht angeben, die gelöscht werden soll.'; + + // Sequences + $lang['strsequence'] = 'Sequenz'; + $lang['strsequences'] = 'Sequenzen'; + $lang['strshowallsequences'] = 'Alle Sequenzen anzeigen'; + $lang['strnosequence'] = 'Keine Sequenz gefunden.'; + $lang['strnosequences'] = 'Keine Sequenzen gefunden.'; + $lang['strcreatesequence'] = 'Sequenz erstellen'; + $lang['strlastvalue'] = 'Letzter Wert'; + $lang['strincrementby'] = 'Erhöhen um'; + $lang['strstartvalue'] = 'Startwert'; + $lang['strmaxvalue'] = 'Maximalwert'; + $lang['strminvalue'] = 'Minimalwert'; + $lang['strcachevalue'] = 'Anzahl Werte im Cache'; + $lang['strlogcount'] = 'WAL-Zähler (log_cnt)'; + $lang['strcancycle'] = 'Zyklisch?'; + $lang['striscalled'] = 'Wird erhöht werden, wenn der nächste Wert angefordert wird (is_called)?'; + $lang['strsequenceneedsname'] = 'Sie müssen für die Sequenz einen Namen angeben.'; + $lang['strsequencecreated'] = 'Sequenz erstellt.'; + $lang['strsequencecreatedbad'] = 'Erstellen der Sequenz fehlgeschlagen.'; + $lang['strconfdropsequence'] = 'Sind Sie sicher, dass die die Sequenz "%s" löschen möchten?'; + $lang['strsequencedropped'] = 'Sequenz gelöscht.'; + $lang['strsequencedroppedbad'] = 'Löschen der Sequenz fehlgeschlagen.'; + $lang['strsequencereset'] = 'Sequenz zurückgesetzt.'; + $lang['strsequenceresetbad'] = 'Rücksetzen der Sequenz fehlgeschlagen.'; + $lang['strsequencealtered'] = 'Sequenz geändert.'; + $lang['strsequencealteredbad'] = 'Ändern der Sequenz fehlgeschlagen.'; + $lang['strsetval'] = 'Wert setzen'; + $lang['strsequencesetval'] = 'Sequenzwert gesetzt.'; + $lang['strsequencesetvalbad'] = 'Setzen des Sequenzwertes fehlgeschlagen.'; + $lang['strnextval'] = 'Wert erhöhen'; + $lang['strsequencenextval'] = 'Sequenzwert erhöht.'; + $lang['strsequencenextvalbad'] = 'Erhöhen des Sequenzwertes fehlgeschlagen.'; + $lang['strspecifysequencetodrop'] = 'Sie müssen mindestens eine Sequenz angeben, die gelöscht werden soll.'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Indizes'; + $lang['strindexname'] = 'Indexname'; + $lang['strshowallindexes'] = 'Alle Indizes anzeigen'; + $lang['strnoindex'] = 'Kein Index gefunden.'; + $lang['strnoindexes'] = 'Keine Indizes gefunden.'; + $lang['strcreateindex'] = 'Index erstellen'; + $lang['strtabname'] = 'Tabellenname'; + $lang['strcolumnname'] = 'Spaltenname'; + $lang['strindexneedsname'] = 'Sie müssen für den Index einen Namen angeben.'; + $lang['strindexneedscols'] = 'Sie müssen eine zulässige Anzahl an Spalten angeben.'; + $lang['strindexcreated'] = 'Index erstellt.'; + $lang['strindexcreatedbad'] = 'Erstellen des Index fehlgeschlagen.'; + $lang['strconfdropindex'] = 'Sind Sie sicher, dass sie den Index "%s" löschen möchten?'; + $lang['strindexdropped'] = 'Index gelöscht.'; + $lang['strindexdroppedbad'] = 'Löschen des Index fehlgeschlagen.'; + $lang['strkeyname'] = 'Schlüsselname'; + $lang['struniquekey'] = 'Eindeutiger Schlüssel'; + $lang['strprimarykey'] = 'Primärerschlüssel'; + $lang['strindextype'] = 'Typ des Index'; + $lang['strtablecolumnlist'] = 'Spalten in der Tabelle'; + $lang['strindexcolumnlist'] = 'Spalten im Index'; + $lang['strconfcluster'] = 'Sind Sie sicher, dass Sie "%s" clustern wollen?'; + $lang['strclusteredgood'] = 'Clustern abgeschlossen.'; + $lang['strclusteredbad'] = 'Clustern fehlgeschlagen.'; + + // Rules + $lang['strrules'] = 'Regeln'; + $lang['strrule'] = 'Regel'; + $lang['strshowallrules'] = 'Alle Regeln anzeigen'; + $lang['strnorule'] = 'Keine Regel gefunden.'; + $lang['strnorules'] = 'Keine Regeln gefunden.'; + $lang['strcreaterule'] = 'Regel erstellen'; + $lang['strrulename'] = 'Regelname'; + $lang['strruleneedsname'] = 'Sie müssen für die Regel einen Namen angeben.'; + $lang['strrulecreated'] = 'Regel erstellt.'; + $lang['strrulecreatedbad'] = 'Erstellen der Regel fehlgeschlagen.'; + $lang['strconfdroprule'] = 'Sind Sie sicher, dass Sie die Regel "%s" in der Tabelle "%s" löschen möchten?'; + $lang['strruledropped'] = 'Regel gelöscht.'; + $lang['strruledroppedbad'] = 'Löschen der Regel fehlgeschlagen.'; + + // Constraints + $lang['strconstraint'] = 'Constraint'; + $lang['strconstraints'] = 'Constraints'; + $lang['strshowallconstraints'] = 'Alle Constraints anzeigen'; + $lang['strnoconstraints'] = 'Keine Constraints gefunden.'; + $lang['strcreateconstraint'] = 'Constraint erstellen'; + $lang['strconstraintcreated'] = 'Constraint erstellt.'; + $lang['strconstraintcreatedbad'] = 'Erstellen des Constraints fehlgeschlagen.'; + $lang['strconfdropconstraint'] = 'Sind Sie sicher, dass Sie den Constraint "%s" in der Tabelle "%s" löschen möchten?'; + $lang['strconstraintdropped'] = 'Constraint gelöscht.'; + $lang['strconstraintdroppedbad'] = 'Löschen des Constraints fehlgeschlagen.'; + $lang['straddcheck'] = 'Check-Constraint hinzufügen'; + $lang['strcheckneedsdefinition'] = 'Ein Check-Constraint braucht eine Definition.'; + $lang['strcheckadded'] = 'Check-Constraint hinzugefügt.'; + $lang['strcheckaddedbad'] = 'Hinzufügen des Check-Constraints fehlgeschlagen.'; + $lang['straddpk'] = 'Primärschlüssel hinzufügen'; + $lang['strpkneedscols'] = 'Ein Primärschlüssel benötigt mindestens eine Spalte.'; + $lang['strpkadded'] = 'Primärschlüssel hinzugefügt.'; + $lang['strpkaddedbad'] = 'Hinzufügen des Primärschlüssels fehlgeschlagen.'; + $lang['stradduniq'] = 'Eindeutigen Schlüssel hinzufügen'; + $lang['struniqneedscols'] = 'Ein eindeutiger Schlüssel benötigt mindestens eine Spalte.'; + $lang['struniqadded'] = 'Eindeutiger Schlüssel hinzugefügt.'; + $lang['struniqaddedbad'] = 'Hinzufügen eines eindeutigen Schlüssels fehlgeschlagen.'; + $lang['straddfk'] = 'Fremdschlüssel hinzufügen'; + $lang['strfkneedscols'] = 'Ein Fremdschlüssel benötigt mindestens eine Spalte.'; + $lang['strfkneedstarget'] = 'Ein Fremdschlüssel benötigt eine Zieltabelle.'; + $lang['strfkadded'] = 'Fremdschlüssel hinzugefügt.'; + $lang['strfkaddedbad'] = 'Hinzufügen eines Fremdschlüssels fehlgeschlagen.'; + $lang['strfktarget'] = 'Zieltabelle'; + $lang['strfkcolumnlist'] = 'Spalten im Schlüssel'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Funktion'; + $lang['strfunctions'] = 'Funktionen'; + $lang['strshowallfunctions'] = 'Alle Funktionen anzeigen'; + $lang['strnofunction'] = 'Keine Funktion gefunden.'; + $lang['strnofunctions'] = 'Keine Funktionen gefunden.'; + $lang['strcreateplfunction'] = 'SQL/PL-Funktion erstellen'; + $lang['strcreateinternalfunction'] = 'Interne Funktion erstellen'; + $lang['strcreatecfunction'] = 'C-Funktion erstellen'; + $lang['strfunctionname'] = 'Funktionsname'; + $lang['strreturns'] = 'Rückgabetyp'; + $lang['strproglanguage'] = 'Programmiersprache'; + $lang['strfunctionneedsname'] = 'Sie müssen für die Funktion einen Namen angeben.'; + $lang['strfunctionneedsdef'] = 'Sie müssen für die Funktion eine Definition angeben.'; + $lang['strfunctioncreated'] = 'Funktion erstellt.'; + $lang['strfunctioncreatedbad'] = 'Erstellen der Funktion fehlgeschlagen.'; + $lang['strconfdropfunction'] = 'Sind Sie sicher, dass sie die Funktion "%s" löschen möchten?'; + $lang['strfunctiondropped'] = 'Funktion gelöscht.'; + $lang['strfunctiondroppedbad'] = 'Löschen der Funktion fehlgeschlagen.'; + $lang['strfunctionupdated'] = 'Funktion geändert.'; + $lang['strfunctionupdatedbad'] = 'Ändern der Funktion fehlgeschlagen.'; + $lang['strobjectfile'] = 'Objektdatei'; + $lang['strlinksymbol'] = 'Link-Symbol'; + $lang['strarguments'] = 'Funktionsargumente'; + $lang['strargmode'] = 'Richtung'; + $lang['strargtype'] = 'Datentyp'; + $lang['strargadd'] = 'Weiteres Argument hinzufügen'; + $lang['strargremove'] = 'Dieses Argument entfernen'; + $lang['strargnoargs'] = 'Diese Funktion kann nur ohne Argumente aufgerufen werden.'; + $lang['strargenableargs'] = 'Diese Funktion kann mit Argumenten aufgerufen werden.'; + $lang['strargnorowabove'] = 'Oberhalb dieser Spalte muss eine weitere Spalte sein.'; + $lang['strargnorowbelow'] = 'Unterhalb dieser Spalte muss eine weitere Spalte sein.'; + $lang['strargraise'] = 'Hinaufschieben.'; + $lang['strarglower'] = 'Hinunterschieben.'; + $lang['strargremoveconfirm'] = 'Sind Sie sicher, dass Sie dieses Argument entfernen wollen? Das kann nicht rückgängig gemacht werden.'; + $lang['strfunctioncosting'] = 'Ausführungskosten'; + $lang['strresultrows'] = 'Geschätzte Anzahl der Ergebniszeilen'; + $lang['strexecutioncost'] = 'Geschätzte Ausführungskosten'; + $lang['strspecifyfunctiontodrop'] = 'Sie müssen mindestens eine Funktion angeben, die gelöscht werden soll.'; + + // Triggers + $lang['strtrigger'] = 'Trigger'; + $lang['strtriggers'] = 'Trigger'; + $lang['strshowalltriggers'] = 'Alle Trigger anzeigen'; + $lang['strnotrigger'] = 'Kein Trigger gefunden.'; + $lang['strnotriggers'] = 'Keine Trigger gefunden.'; + $lang['strcreatetrigger'] = 'Trigger erstellen'; + $lang['strtriggerneedsname'] = 'Sie müssen für den Trigger einen Namen angeben.'; + $lang['strtriggerneedsfunc'] = 'Sie müssen für den Trigger eine Funktion angeben.'; + $lang['strtriggercreated'] = 'Trigger erstellt.'; + $lang['strtriggercreatedbad'] = 'Erstellen des Triggers fehlgeschlagen.'; + $lang['strconfdroptrigger'] = 'Sind Sie sicher, dass Sie den Trigger "%s" auf der Tabelle "%s" löschen möchten?'; + $lang['strconfenabletrigger'] = 'Sind Sie sicher, dass Sie den Trigger "%s" auf der Tabelle "%s" aktivieren möchten?'; + $lang['strconfdisabletrigger'] = 'Sind Sie sicher, dass Sie den Trigger "%s" auf der Tabelle "%s" deaktivieren möchten?'; + $lang['strtriggerdropped'] = 'Trigger gelöscht.'; + $lang['strtriggerdroppedbad'] = 'Löschen des Triggers fehlgeschlagen.'; + $lang['strtriggerenabled'] = 'Trigger aktiviert.'; + $lang['strtriggerenabledbad'] = 'Aktivieren des Triggers fehlgeschlagen.'; + $lang['strtriggerdisabled'] = 'Trigger deaktiviert.'; + $lang['strtriggerdisabledbad'] = 'Deaktivieren des Triggers fehlgeschlagen.'; + $lang['strtriggeraltered'] = 'Trigger geändert.'; + $lang['strtriggeralteredbad'] = 'Ändern des Triggers fehlgeschlagen.'; + $lang['strforeach'] = 'Für alle'; + + // Types + $lang['strtype'] = 'Datentyp'; + $lang['strtypes'] = 'Datentypen'; + $lang['strshowalltypes'] = 'Alle Datentypen anzeigen'; + $lang['strnotype'] = 'Kein Datentyp gefunden.'; + $lang['strnotypes'] = 'Keine Datentypen gefunden.'; + $lang['strcreatetype'] = 'Datentyp erstellen'; + $lang['strcreatecomptype'] = 'Zusammengesetzten Typ erstellen'; + $lang['strcreateenumtype'] = 'Aufzählungstyp erstellen'; + $lang['strtypeneedsfield'] = 'Sie müssen mindestens ein Feld angeben.'; + $lang['strtypeneedsvalue'] = 'Sie müssen mindestens einen Wert angeben.'; + $lang['strtypeneedscols'] = 'Sie müssen eine gültige Anzahl von Spalten angeben.'; + $lang['strtypeneedsvals'] = 'Sie müssen eine gültige Anzahl von Werten angeben.'; + $lang['strinputfn'] = 'Eingabefunktion'; + $lang['stroutputfn'] = 'Ausgabefunktion'; + $lang['strpassbyval'] = 'Übergabe "by value"?'; + $lang['stralignment'] = 'Alignment'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Trennzeichen'; + $lang['strstorage'] = 'Speicherung'; + $lang['strfield'] = 'Spalte'; + $lang['strnumfields'] = 'Anzahl Spalten'; + $lang['strnumvalues'] = 'Anzahl Werte'; + $lang['strtypeneedsname'] = 'Sie müssen einen Namen für den Datentyp angeben.'; + $lang['strtypeneedslen'] = 'Sie müssen eine Länge für den Datentyp angeben.'; + $lang['strtypecreated'] = 'Datentyp erstellt.'; + $lang['strtypecreatedbad'] = 'Erstellen des Datentypen fehlgeschlagen.'; + $lang['strconfdroptype'] = 'Sind Sie sicher, dass Sie den Datentyp "%s" löschen möchten?'; + $lang['strtypedropped'] = 'Datentyp gelöscht.'; + $lang['strtypedroppedbad'] = 'Löschen des Datentyps fehlgeschlagen.'; + $lang['strflavor'] = 'Art'; + $lang['strbasetype'] = 'Basis-Typ'; + $lang['strcompositetype'] = 'Zusammengesetzt'; + $lang['strpseudotype'] = 'Pseudo'; + $lang['strenum'] = 'Aufzählend'; + $lang['strenumvalues'] = 'Wert'; + + // Schemas + $lang['strschema'] = 'Schema'; + $lang['strschemas'] = 'Schemata'; + $lang['strshowallschemas'] = 'Alle Schemata anzeigen'; + $lang['strnoschema'] = 'Kein Schema gefunden.'; + $lang['strnoschemas'] = 'Keine Schemata gefunden.'; + $lang['strcreateschema'] = 'Schema erstellen'; + $lang['strschemaname'] = 'Name des Schema'; + $lang['strschemaneedsname'] = 'Sie müssen für das Schema einen Namen angeben.'; + $lang['strschemacreated'] = 'Schema erstellt.'; + $lang['strschemacreatedbad'] = 'Erstellen des Schemas fehlgeschlagen.'; + $lang['strconfdropschema'] = 'Sind Sie sicher, dass sie das Schema "%s" löschen möchten?'; + $lang['strschemadropped'] = 'Schema gelöscht.'; + $lang['strschemadroppedbad'] = 'Löschen des Schemas fehlgeschlagen'; + $lang['strschemaaltered'] = 'Schema geändert.'; + $lang['strschemaalteredbad'] = 'Ändern des Schemas fehlgeschlagen.'; + $lang['strsearchpath'] = 'Schemasuchpfad'; + $lang['strspecifyschematodrop'] = 'Sie müssen mindestens ein Schema angeben, das gelöscht werden soll.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Domäne'; + $lang['strdomains'] = 'Domänen'; + $lang['strshowalldomains'] = 'Alle Domänen anzeigen'; + $lang['strnodomains'] = 'Keine Domänen gefunden.'; + $lang['strcreatedomain'] = 'Domäne erstellen'; + $lang['strdomaindropped'] = 'Domäne gelöscht.'; + $lang['strdomaindroppedbad'] = 'Löschen der Domäne fehlgeschlagen.'; + $lang['strconfdropdomain'] = 'Sind Sie sicher, dass Sie die Domäne "%s" löschen wollen?'; + $lang['strdomainneedsname'] = 'Sie müssen einen Namen für die Domäne angeben.'; + $lang['strdomaincreated'] = 'Domäne erstellt.'; + $lang['strdomaincreatedbad'] = 'Erstellen der Domäne fehlgeschlagen.'; + $lang['strdomainaltered'] = 'Domäne geändert.'; + $lang['strdomainalteredbad'] = 'Ändern der Domäne fehlgeschlagen.'; + + // Operators + $lang['stroperator'] = 'Operator'; + $lang['stroperators'] = 'Operatoren'; + $lang['strshowalloperators'] = 'Alle Operatoren anzeigen'; + $lang['strnooperator'] = 'Kein Operator gefunden.'; + $lang['strnooperators'] = 'Keine Operatoren gefunden.'; + $lang['strcreateoperator'] = 'Operator erstellen'; + $lang['strleftarg'] = 'Typ des linken Arguments'; + $lang['strrightarg'] = 'Typ des rechter Arguments'; + $lang['strcommutator'] = 'Kommutator'; + $lang['strnegator'] = 'Negator'; + $lang['strrestrict'] = 'Funktion zur Schätzung der Restriktions-Selektivität'; + $lang['strjoin'] = 'Funktion zur Schätzung der Join-Selektivität'; + $lang['strhashes'] = 'Unterstützt Hash-Joins'; + $lang['strmerges'] = 'Unterstützt Merge-Joins'; + $lang['strleftsort'] = 'Kleiner-Operator zum Sortieren der linken Seite'; + $lang['strrightsort'] = 'Kleiner-Operator zum Sortieren der rechten Seite'; + $lang['strlessthan'] = 'Kleiner-Operator'; + $lang['strgreaterthan'] = 'Größer-Operator'; + $lang['stroperatorneedsname'] = 'Sie müssen einen Namen für den Operator angeben.'; + $lang['stroperatorcreated'] = 'Operator erstellt.'; + $lang['stroperatorcreatedbad'] = 'Erstellen des Operators fehlgeschlagen.'; + $lang['strconfdropoperator'] = 'Sind Sie sicher, dass Sie den Operator "%s" löschen wollen?'; + $lang['stroperatordropped'] = 'Operator gelöscht.'; + $lang['stroperatordroppedbad'] = 'Löschen des Operators fehlgeschlagen.'; + + // Casts + $lang['strcasts'] = 'Typumwandlungen'; + $lang['strnocasts'] = 'Keine Typumwandlungen gefunden.'; + $lang['strsourcetype'] = 'Ursprungs-Datentyp'; + $lang['strtargettype'] = 'Ziel-Datentyp'; + $lang['strimplicit'] = 'Implizit'; + $lang['strinassignment'] = 'Bei Zuweisungen'; + $lang['strbinarycompat'] = '(Binärkompatibel)'; + + // Conversions + $lang['strconversions'] = 'Konvertierungen'; + $lang['strnoconversions'] = 'Keine Konvertierungen gefunden.'; + $lang['strsourceencoding'] = 'Ursprungs-Zeichenkodierung'; + $lang['strtargetencoding'] = 'Ziel-Zeichenkodierung'; + + // Languages + $lang['strlanguages'] = 'Programmiersprachen'; + $lang['strnolanguages'] = 'Keine Sprachen gefunden.'; + $lang['strtrusted'] = 'Vertrauenswürdig'; + + // Info + $lang['strnoinfo'] = 'Keine Informationen vorhanden.'; + $lang['strreferringtables'] = 'Tabellen, die mit Fremdschlüsseln auf diese Tabelle verweisen'; + $lang['strparenttables'] = 'Elterntabellen'; + $lang['strchildtables'] = 'Kindtabellen'; + + // Aggregates + $lang['straggregate'] = 'Aggregatsfunktion'; + $lang['straggregates'] = 'Aggregatsfunktionen'; + $lang['strnoaggregates'] = 'Keine Aggregatsfunktionen gefunden.'; + $lang['stralltypes'] = '(Alle Typen)'; + $lang['strcreateaggregate'] = 'Aggregatsfunktion erstellen'; + $lang['straggrbasetype'] = 'Eingabedatentyp'; + $lang['straggrsfunc'] = 'Zustandsübergangsfunktion'; + $lang['straggrstype'] = 'Datentyp für den Zustandswert'; + $lang['straggrffunc'] = 'Ergebnisfunktion'; + $lang['straggrinitcond'] = 'Zustandswert zu Beginn'; + $lang['straggrsortop'] = 'Operator für Sortierung'; + $lang['strconfdropaggregate'] = 'Sind Sie sicher, dass Sie die Aggregatsfunktion "%s" löschen wollen?'; + $lang['straggregatedropped'] = 'Aggregatsfunktion gelöscht.'; + $lang['straggregatedroppedbad'] = 'Löschen der Aggregatsfunktion fehlgeschlagen.'; + $lang['straggraltered'] = 'Aggregatsfunktion geändert.'; + $lang['straggralteredbad'] = 'Ändern der Aggregatsfunktion fehlgeschlagen.'; + $lang['straggrneedsname'] = 'Sie müssen einen Namen für die Aggregatsfunktion angeben.'; + $lang['straggrneedsbasetype'] = 'Sie müssen den Eingabedatentyp für die Aggregatsfunktion angeben.'; + $lang['straggrneedssfunc'] = 'Sie müssen den Namen der Zustandsübergangsfunktion für die Aggregatsfunktion angeben.'; + $lang['straggrneedsstype'] = 'Sie müssen den Datentyp für den Zustandswert der Aggregatsfunktion angeben.'; + $lang['straggrcreated'] = 'Aggregatsfunktion erstellt.'; + $lang['straggrcreatedbad'] = 'Erstellen der Aggregatsfunktion fehlgeschlagen.'; + $lang['straggrshowall'] = 'Alle Aggregatsfunktionen anzeigen'; + + // Operator Classes + $lang['stropclasses'] = 'Operatorklassen'; + $lang['strnoopclasses'] = 'Keine Operatorklassen gefunden.'; + $lang['straccessmethod'] = 'Zugriffsmethode'; + + // Stats and performance + $lang['strrowperf'] = 'Zeilen-Performance'; + $lang['strioperf'] = 'E/A Performance'; + $lang['stridxrowperf'] = 'Index-Zeilen-Performance'; + $lang['stridxioperf'] = 'Index-E/A-Performance'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sequentiell'; + $lang['strscan'] = 'Durchsuchen'; + $lang['strread'] = 'Lesen'; + $lang['strfetch'] = 'Holen'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST-Index'; + $lang['strcache'] = 'Zwischenspeicher'; + $lang['strdisk'] = 'Festplatte'; + $lang['strrows2'] = 'Zeilen'; + + // Tablespaces + $lang['strtablespace'] = 'Tablespace'; + $lang['strtablespaces'] = 'Tablespaces'; + $lang['strshowalltablespaces'] = 'Alle Tablespaces anzeigen'; + $lang['strnotablespaces'] = 'Keine Tablespaces gefunden.'; + $lang['strcreatetablespace'] = 'Tablespace erstellen'; + $lang['strlocation'] = 'Pfad'; + $lang['strtablespaceneedsname'] = 'Sie müssen einen Namen für den Tablespace angeben.'; + $lang['strtablespaceneedsloc'] = 'Sie müssen ein Verzeichnis angeben, in dem Sie den Tablespace erstellen möchten.'; + $lang['strtablespacecreated'] = 'Tablespace erstellt.'; + $lang['strtablespacecreatedbad'] = 'Erstellen des Tablespace fehlgeschlagen.'; + $lang['strconfdroptablespace'] = 'Sind Sie sicher, dass Sie den Tablespace "%s" löschen wollen?'; + $lang['strtablespacedropped'] = 'Tablespace gelöscht.'; + $lang['strtablespacedroppedbad'] = 'Löschen des Tablespace fehlgeschlagen.'; + $lang['strtablespacealtered'] = 'Tablespace geändert.'; + $lang['strtablespacealteredbad'] = 'Ändern des Tablespace fehlgeschlagen.'; + + // Miscellaneous + $lang['strtopbar'] = '%s läuft auf %s:%s -- Sie sind als "%s" angemeldet'; + $lang['strtimefmt'] = 'D, j. n. Y, G:i'; + $lang['strhelp'] = 'Hilfe'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Browser für Hilfeseiten'; + $lang['strselecthelppage'] = 'Hilfeseite auswählen'; + $lang['strinvalidhelppage'] = 'Ungültige Hilfeseite.'; + $lang['strlogintitle'] = 'Bei %s anmelden'; + $lang['strlogoutmsg'] = 'Von %s abgemeldet'; + $lang['strloading'] = 'Lade...'; + $lang['strerrorloading'] = 'Fehler beim Laden'; + $lang['strclicktoreload'] = 'Klicken Sie zum Neuladen'; + + // Autovacuum + $lang['strautovacuum'] = 'Autovacuum'; + $lang['strturnedon'] = 'Eingeschaltet'; + $lang['strturnedoff'] = 'Ausgeschaltet'; + $lang['strenabled'] = 'Aktiviert'; + $lang['strvacuumbasethreshold'] = 'Autovacuum-Schwellwert'; + $lang['strvacuumscalefactor'] = 'Autovacuum-Skalierungsfaktor'; + $lang['stranalybasethreshold'] = 'Analyze-Schwellwert'; + $lang['stranalyzescalefactor'] = 'Analyze-Skalierungsfaktor'; + $lang['strvacuumcostdelay'] = 'Pause nach Erreichen des Autovacuum-Kostenlimits'; + $lang['strvacuumcostlimit'] = 'Autovacuum-Kostenlimits'; + + // Table-level Locks + $lang['strlocks'] = 'Sperren'; + $lang['strtransaction'] = 'Transaktions-ID'; + $lang['strvirtualtransaction'] = 'Virtuelle Transaktions-ID'; + $lang['strprocessid'] = 'Prozess-ID'; + $lang['strmode'] = 'Art der Sperre'; + $lang['strislockheld'] = 'Sperre gewährt?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Vorbereitete verteilte Transaktionen'; + $lang['strxactid'] = 'Transaktions-ID'; + $lang['strgid'] = 'Globale ID'; + + // Fulltext search + $lang['strfulltext'] = 'Volltextsuche'; + $lang['strftsconfig'] = 'Volltextsuch-Konfiguration'; + $lang['strftsconfigs'] = 'Konfigurationen'; + $lang['strftscreateconfig'] = 'Volltextsuch-Konfiguration erstellen'; + $lang['strftscreatedict'] = 'Wörterbuch erstellen'; + $lang['strftscreatedicttemplate'] = 'Wörterbuch-Blaupause erstellen'; + $lang['strftscreateparser'] = 'Parser erstellen'; + $lang['strftsnoconfigs'] = 'Keine Volltextsuch-Konfigurationen gefunden.'; + $lang['strftsconfigdropped'] = 'Volltextsuch-Konfiguration gelöscht.'; + $lang['strftsconfigdroppedbad'] = 'Löschen der Volltextsuch-Konfiguration fehlgeschlagen.'; + $lang['strconfdropftsconfig'] = 'Sind Sie sicher, dass Sie die Volltextsuch-Konfiguration "%s" löschen möchten?'; + $lang['strconfdropftsdict'] = 'Sind Sie sicher, dass Sie das Wörterbuch "%s" löschen möchten?'; + $lang['strconfdropftsmapping'] = 'Sind Sie sicher, dass Sie die Zuordnung "%s" der Volltextsuch-Konfiguration "%s" löschen möchten?'; + $lang['strftstemplate'] = 'Blaupause'; + $lang['strftsparser'] = 'Parser'; + $lang['strftsconfigneedsname'] = 'Sie müssen für die Volltextsuch-Konfiguration einen Namen angeben.'; + $lang['strftsconfigcreated'] = 'Volltextsuch-Konfiguration erstellt.'; + $lang['strftsconfigcreatedbad'] = 'Erstellen der Volltextsuch-Konfiguration fehlgeschlagen.'; + $lang['strftsmapping'] = 'Zuordnung'; + $lang['strftsdicts'] = 'Wörterbücher'; + $lang['strftsdict'] = 'Wörterbuch'; + $lang['strftsemptymap'] = 'Leere Zuordnung für Volltextsuch-Konfiguration.'; + $lang['strftswithmap'] = 'Mit Zuordnung'; + $lang['strftsmakedefault'] = 'Als Standardwert für die angegebene Spracheinstellung festlegen'; + $lang['strftsconfigaltered'] = 'Volltextsuch-Konfiguration geändert.'; + $lang['strftsconfigalteredbad'] = 'Ändern der Volltextsuch-Konfiguration fehlgeschlagen.'; + $lang['strftsconfigmap'] = 'Zuordnung für Volltextsuch-Konfiguration'; + $lang['strftsparsers'] = 'Parsers für Volltextsuch-Konfiguration'; + $lang['strftsnoparsers'] = 'Keine Parsers für Volltextsuch-Konfiguration vorhanden'; + $lang['strftsnodicts'] = 'Keine Wörterbücher für die Volltextsuche vorhanden.'; + $lang['strftsdictcreated'] = 'Wörterbuch für die Volltextsuche erstellt.'; + $lang['strftsdictcreatedbad'] = 'Erstellen des Wörterbuches für die Volltextsuche fehlgeschlagen.'; + $lang['strftslexize'] = 'Funktion zum Zerlegen in Lexeme'; + $lang['strftsinit'] = 'Initialisierungsfunktion'; + $lang['strftsoptionsvalues'] = 'Optionen und Werte'; + $lang['strftsdictneedsname'] = 'Sie müssen für das Volltextsuch-Wörterbuch einen Namen angeben.'; + $lang['strftsdictdropped'] = 'Wörterbuches für die Volltextsuche gelöscht.'; + $lang['strftsdictdroppedbad'] = 'Löschen des Wörterbuches für die Volltextsuche fehlgeschlagen.'; + $lang['strftsdictaltered'] = 'Wörterbuches für die Volltextsuche geändert.'; + $lang['strftsdictalteredbad'] = 'Ändern des Wörterbuches für die Volltextsuche fehlgeschlagen.'; + $lang['strftsaddmapping'] = 'Neue Zuordnung hinzufügen'; + $lang['strftsspecifymappingtodrop'] = 'Sie müssen mindestens eine Zuordnung angeben, die gelöscht werden soll.'; + $lang['strftsspecifyconfigtoalter'] = 'Sie müssen eine Volltextsuch-Konfiguration angeben, die geändert werden soll'; + $lang['strftsmappingdropped'] = 'Volltextsuch-Zuordnung gelöscht.'; + $lang['strftsmappingdroppedbad'] = 'Löschen der Volltextsuch-Zuordnung fehlgeschlagen.'; + $lang['strftsnodictionaries'] = 'Keine Wörterbücher gefunden.'; + $lang['strftsmappingaltered'] = 'Volltextsuch-Zuordnung geändert.'; + $lang['strftsmappingalteredbad'] = 'Ändern der Volltextsuch-Zuordnung fehlgeschlagen.'; + $lang['strftsmappingadded'] = 'Volltextsuch-Zuordnung hinzugefügt.'; + $lang['strftsmappingaddedbad'] = 'Hinzufügen der Volltextsuch-Zuordnung fehlgeschlagen.'; + $lang['strftstabconfigs'] = 'Volltextsuch-Konfigurationen'; + $lang['strftstabdicts'] = 'Wörterbücher'; + $lang['strftstabparsers'] = 'Parser'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/greek.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/greek.php new file mode 100644 index 00000000..89f8f9e6 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/greek.php @@ -0,0 +1,744 @@ +<?php + + /* + * Greek language file for phpPgAdmin. + * + * $Id: greek.php,v 0.5 June 2009, Adamantios Diamantidis Exp $ + */ + + // Language and character set + $lang['applang'] = 'Ελληνικά'; + $lang['applocale'] = 'el-GR'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Καλώς ήρθατε στο phpPgAdmin.'; + $lang['strppahome'] = 'Αρχική σελίδα phpPgAdmin'; + $lang['strpgsqlhome'] = 'Αρχική σελίδα PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Εγχειρίδια PostgreSQL (τοπικό αντίγραφο)'; + $lang['strreportbug'] = 'Αναφορά ελαττώματος στο phpPgAdmin'; + $lang['strviewfaq'] = 'Συχνές ερωτήσεις (FAQ)'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Είσοδος'; + $lang['strloginfailed'] = 'Αποτυχία εισόδου'; + $lang['strlogindisallowed'] = 'Η είσοδος δεν επιτρέπεται για λόγους ασφαλείας.'; + $lang['strserver'] = 'Διακομιστής'; + $lang['strservers'] = 'Διακομιστές'; + $lang['strintroduction'] = 'Αρχική'; + $lang['strhost'] = 'Κόμβος'; + $lang['strport'] = 'Θύρα'; + $lang['strlogout'] = 'Εξοδος'; + $lang['strowner'] = 'Κάτοχος'; + $lang['straction'] = 'Πράξη'; + $lang['stractions'] = 'Ενέργειες'; + $lang['strname'] = 'Ονομα'; + $lang['strdefinition'] = 'Ορισμός'; + $lang['strproperties'] = 'Ιδιότητες'; + $lang['strbrowse'] = 'Προβολή'; + $lang['strenable'] = 'Ενεργοποίηση'; + $lang['strdisable'] = 'Απενεργοποίηση'; + $lang['strdrop'] = 'Διαγραφή'; + $lang['strdropped'] = 'Διαγράφηκε'; + $lang['strnull'] = 'Κενό'; + $lang['strnotnull'] = 'Να μην είναι κενό'; + $lang['strprev'] = '< Προηγούμενη'; + $lang['strnext'] = 'Επόμενη >'; + $lang['strfirst'] = '<< Πρώτη'; + $lang['strlast'] = 'Τελευταία >>'; + $lang['strfailed'] = 'Απέτυχε'; + $lang['strcreate'] = 'Δημιουργία'; + $lang['strcreated'] = 'Δημιουργήθηκε'; + $lang['strcomment'] = 'Σχόλιο'; + $lang['strlength'] = 'Μήκος'; + $lang['strdefault'] = 'Αρχική τιμή'; + $lang['stralter'] = 'Τροποποίηση'; + $lang['strok'] = 'Εντάξει'; + $lang['strcancel'] = 'Ακυρο'; + $lang['strac'] = 'Ενεργοποίηση Αυτόματης Συμπλήρωσης (AutoComplete)'; + $lang['strsave'] = 'Αποθήκευση'; + $lang['strreset'] = 'Καθαρισμός'; + $lang['strinsert'] = 'Εισαγωγή'; + $lang['strselect'] = 'Επιλογή'; + $lang['strdelete'] = 'Διαγραφή'; + $lang['strupdate'] = 'Ενημέρωση'; + $lang['strreferences'] = 'Σχέσεις'; + $lang['stryes'] = 'Ναι'; + $lang['strno'] = 'Οχι'; + $lang['strtrue'] = 'ΑΛΗΘΕΣ'; + $lang['strfalse'] = 'ΨΕΥΔΕΣ'; + $lang['stredit'] = 'Προσαρμογή'; + $lang['strcolumn'] = 'Στήλη'; + $lang['strcolumns'] = 'Στήλες'; + $lang['strrows'] = 'γραμμές'; + $lang['strrowsaff'] = 'γραμμές επηρεάστηκαν.'; + $lang['strobjects'] = 'αντικείμενα'; + $lang['strback'] = 'Πίσω'; + $lang['strqueryresults'] = 'Αποτελέσματα Ερωτήματος'; + $lang['strshow'] = 'Εμφάνιση'; + $lang['strempty'] = 'Αδειασμα'; + $lang['strlanguage'] = 'Γλώσσα'; + $lang['strencoding'] = 'Κωδικοποίηση'; + $lang['strvalue'] = 'Τιμή'; + $lang['strunique'] = 'Μοναδικό'; + $lang['strprimary'] = 'Πρωτεύον'; + $lang['strexport'] = 'Εξαγωγή'; + $lang['strimport'] = 'Εισαγωγή'; + $lang['strallowednulls'] = 'Επιτρεπόμενοι κενοί χαρακτήρες'; + $lang['strbackslashn'] = '\N'; + $lang['strnull'] = 'κενό'; + $lang['stremptystring'] = 'κενή συμβολοσειρά/κενό πεδίο'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Διαχείριση'; + $lang['strvacuum'] = 'Εκκένωση'; + $lang['stranalyze'] = 'Ανάλυση'; + $lang['strclusterindex'] = 'Ομαδοποίηση'; + $lang['strclustered'] = 'Ομαδοποιημένο'; + $lang['strreindex'] = 'Ανανέωση Ευρετηρίου'; + $lang['stradd'] = 'Προσθήκη'; + $lang['strevent'] = 'Ενέργεια'; + $lang['strwhere'] = 'Οπου'; + $lang['strinstead'] = 'Αντί να'; + $lang['strwhen'] = 'Πότε'; + $lang['strformat'] = 'Μορφή δεδομένων'; + $lang['strdata'] = 'Δεδομένα'; + $lang['strconfirm'] = 'Επιβεβαίωση'; + $lang['strexpression'] = 'Εκφραση'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Ανάπτυξη'; + $lang['strcollapse'] = 'Σύμπτυξη'; + $lang['strfind'] = 'Αναζήτηση'; + $lang['stroptions'] = 'Επιλογές'; + $lang['strrefresh'] = 'Ανανέωση'; + $lang['strdownload'] = 'Καταφόρτωση'; + $lang['strdownloadgzipped'] = 'Συμπίεση κατά gzip'; + $lang['strinfo'] = 'Πληροφορίες'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Προχωρημένα'; + $lang['strvariables'] = 'Μεταβλητές'; + $lang['strprocess'] = 'Διεργασία'; + $lang['strprocesses'] = 'Διεργασίες'; + $lang['strsetting'] = 'Τιμή'; + $lang['streditsql'] = 'Επεξεργασία SQL'; + $lang['strruntime'] = 'Συνολικός χρόνος εκτέλεσης: %s ms'; + $lang['strpaginate'] = 'Σελιδοποίηση'; + $lang['struploadscript'] = 'ή ανεβάστε σενάριο (script) SQL:'; + $lang['strstarttime'] = 'Ωρα Εναρξης'; + $lang['strfile'] = 'Αρχείο'; + $lang['strfileimported'] = 'Αρχείο εισήχθη.'; + $lang['strtrycred'] = 'Χρήση αυτών των διαπιστευτηρίων για όλους τους διακομιστές'; + $lang['strexecute'] = 'Εκτέλεση'; + + // Database Sizes + $lang['strsize'] = 'Μέγεθος'; + $lang['strbytes'] = 'bytes'; + $lang['strkb'] = 'KB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Το phpPgAdmin λειτουργεί καλύτερα με προγράμματα πλοήγησης που υποστηρίζουν πλαίσια (frames). Εαν επιθυμείτε να συνεχίσετε ακολουθήστε την παρακάτω σύνδεση.'; + $lang['strnoframeslink'] = 'Χρήση χωρίς πλαίσια'; + $lang['strbadconfig'] = 'Το αρχείο config.inc.php είναι παλιό. Επαναδημιουργήστε το χρησιμοποιώντας το config.inc.php-dist.'; + $lang['strnotloaded'] = 'Η τρέχουσα εγκατάσταση της PHP δεν υποστηρίζει PostgreSQL. Εγκαταστήστε την πάλι με την επιλογή --with-pgsql (compilation option).'; + $lang['strpostgresqlversionnotsupported'] = 'Η τρέχουσα έκδοση της PostgreSQL δεν υποστηρίζεται από το phpPgAdmin. Παρακαλώ αναβαθμίστε στην έκδοση %s ή νεότερη.'; + $lang['strbadschema'] = 'Το σχήμα που δηλώθηκε δεν είναι έγκυρο.'; + $lang['strbadencoding'] = 'Αποτυχία ορισμού κωδικοποίησης στη βάση δεδομένων.'; + $lang['strsqlerror'] = 'Σφάλμα στην SQL:'; + $lang['strinstatement'] = 'Στη δήλωση:'; + $lang['strinvalidparam'] = 'Λάθος παράμετροι.'; + $lang['strnodata'] = 'Δε βρέθηκαν γραμμές.'; + $lang['strnoobjects'] = 'Δε βρέθηκαν αντικείμενα.'; + $lang['strrownotunique'] = 'Δε βρέθηκε μοναδικό κλειδί στη γραμμή.'; + $lang['strnouploads'] = 'Η αποστολή αρχείων είναι απενεργοποιημένη.'; + $lang['strimporterror'] = 'Σφάλμα κατά την εισαγωγή.'; + $lang['strimporterror-fileformat'] = 'Σφάλμα κατά την εισαγωγή: απέτυχε η αυτόματη αναγνώριση του τύπου του αρχείου.'; + $lang['strimporterrorline'] = 'Σφάλμα κατά την εισαγωγή της γραμμής %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Σφάλμα κατά την εισαγωγή της γραμμής %s: δεν περιέχει το σωστό αριθμό στηλών.'; + $lang['strimporterror-uploadedfile'] = 'Σφάλμα κατά την εισαγωγή: αποτυχία αποστολής στο διακομιστή.'; + $lang['strcannotdumponwindows'] = 'Η αποτύπωση (dumping) περίπλοκων πινάκων και σχημάτων (schemas) δεν υποστηρίζεται στα Windows.'; + + // Tables + $lang['strtable'] = 'Πίνακας'; + $lang['strtables'] = 'Πίνακες'; + $lang['strshowalltables'] = 'Εμφάνιση όλων των πινάκων'; + $lang['strnotables'] = 'Δεν βρέθηκαν πίνακες.'; + $lang['strnotable'] = 'Δε βρέθηκε πίνακας.'; + $lang['strcreatetable'] = 'Δημιουργία πίνακα'; + $lang['strtablename'] = 'Ονομα πίνακα'; + $lang['strtableneedsname'] = 'Πρέπει να εισάγετε το όνομα του πίνακα.'; + $lang['strtableneedsfield'] = 'Πρέπει να εισάγετε τουλάχιστον ένα πεδίο.'; + $lang['strtableneedscols'] = 'Πρέπει να εισάγετε έγκυρο αριθμό στηλών.'; + $lang['strtablecreated'] = 'Ο πίνακας δημιουργήθηκε.'; + $lang['strtablecreatedbad'] = 'Η δημιουργία του πίνακα απέτυχε.'; + $lang['strconfdroptable'] = 'Διαγραφή του πίνακα "%s"?'; + $lang['strtabledropped'] = 'Ο πίνακας διαγράφηκε.'; + $lang['strtabledroppedbad'] = 'Η διαγραφή του πίνακα απέτυχε.'; + $lang['strconfemptytable'] = 'Διαγραφή των περιεχομένων του πίνακα "%s"?'; + $lang['strtableemptied'] = 'Τα περιεχόμενα του πίνακα διαγράφηκαν.'; + $lang['strtableemptiedbad'] = 'Η διαγραφή των περιεχομένων του πίνακα απέτυχε.'; + $lang['strinsertrow'] = 'Εισαγωγή γραμμής'; + $lang['strrowinserted'] = 'Η γραμμή εισήχθη.'; + $lang['strrowinsertedbad'] = 'H εισαγωγή της γραμμής απέτυχε.'; + $lang['strrowduplicate'] = 'H εισαγωγή της γραμμής απέτυχε, διπλή εγγραφή.'; + $lang['streditrow'] = 'Επεξεργασία γραμμής'; + $lang['strrowupdated'] = 'Η γραμμή ενημερώθηκε.'; + $lang['strrowupdatedbad'] = 'Η ενημέρωση της γραμμής απέτυχε.'; + $lang['strdeleterow'] = 'Διαγραφή γραμμής'; + $lang['strconfdeleterow'] = 'Διαγραφή της γραμμής?'; + $lang['strrowdeleted'] = 'Η γραμμή διαγράφηκε.'; + $lang['strrowdeletedbad'] = 'Η διαγραφή της γραμμής απέτυχε.'; + $lang['strinsertandrepeat'] = 'Εισαγωγή και επανάληψη'; + $lang['strnumcols'] = 'Αριθμός στηλών'; + $lang['strcolneedsname'] = 'Πρέπει να ορίσετε το όνομα της στήλης'; + $lang['strselectallfields'] = 'Επιλογή όλων των πεδίων'; + $lang['strselectneedscol'] = 'Πρέπει να εμφανιστεί τουλάχιστον μία στήλη.'; + $lang['strselectunary'] = 'Οι μονοτελείς τελεστές (unary operators) δεν πρέπει να έχουν τιμές.'; + $lang['strcolumnaltered'] = 'Η στήλη τροποποιήθηκε.'; + $lang['strcolumnalteredbad'] = 'Η τροποποίηση της στήλης απέτυχε.'; + $lang['strconfdropcolumn'] = 'Διαγραφή στήλης "%s" από τον πίνακα "%s"?'; + $lang['strcolumndropped'] = 'Η στήλη διαγράφηκε.'; + $lang['strcolumndroppedbad'] = 'Η διαγραφή της στήλης απέτυχε.'; + $lang['straddcolumn'] = 'Εισαγωγή στήλης'; + $lang['strcolumnadded'] = 'Η στήλη εισήχθη.'; + $lang['strcolumnaddedbad'] = 'Η εισαγωγή της στήλης απέτυχε.'; + $lang['strcascade'] = 'ΔΙΑΤΑΞΗ'; + $lang['strtablealtered'] = 'Ο πίνακας τροποποιήθηκε.'; + $lang['strtablealteredbad'] = 'Η τροποποίηση του πίνακα απέτυχε.'; + $lang['strdataonly'] = 'Μόνο τα δεδομένα'; + $lang['strstructureonly'] = 'Μόνο τη δομή'; + $lang['strstructureanddata'] = 'Δομή και δεδομένα'; + $lang['strtabbed'] = 'Με στηλοθέτες'; + $lang['strauto'] = 'Αυτόματα'; + $lang['strconfvacuumtable'] = 'Να εκκενωθεί ο πίνακας "%s"?'; + $lang['strestimatedrowcount'] = 'Εκτιμώμενος αριθμός γραμμών'; + + // Columns + $lang['strcolprop'] = 'Ιδιότητες Στήλης'; + + // Users + $lang['struser'] = 'Χρήστη'; + $lang['strusers'] = 'Χρήστες'; + $lang['strusername'] = 'Ονομα χρήστη'; + $lang['strpassword'] = 'Κωδικός χρήστη'; + $lang['strsuper'] = 'Υπερχρήστης?'; + $lang['strcreatedb'] = 'Δημιουργία βάσης?'; + $lang['strexpires'] = 'Λήξη'; + $lang['strsessiondefaults'] = 'Εξ ορισμού παράμετροι συνεδρίας'; + $lang['strnousers'] = 'Δε βρέθηκαν χρήστες.'; + $lang['struserupdated'] = 'Ο λογαριασμός χρήστη ενημερώθηκε.'; + $lang['struserupdatedbad'] = 'Η ενημέρωση του χρήστη απέτυχε.'; + $lang['strshowallusers'] = 'Εμφάνιση όλων των χρηστών'; + $lang['strcreateuser'] = 'Δημιουργία χρήστη'; + $lang['struserneedsname'] = 'Πρέπει να εισάγετε όνομα χρήστη.'; + $lang['strusercreated'] = 'Ο χρήστης δημιουργήθηκε.'; + $lang['strusercreatedbad'] = 'Η δημιουργία του χρήστη απέτυχε.'; + $lang['strconfdropuser'] = 'Διαγραφή του χρήστη "%s"?'; + $lang['struserdropped'] = 'Ο χρήστης διαγράφηκε.'; + $lang['struserdroppedbad'] = 'Η διαγραφή του χρήστη απέτυχε.'; + $lang['straccount'] = 'Λογαριασμός'; + $lang['strchangepassword'] = 'Αλλαγή κωδικού'; + $lang['strpasswordchanged'] = 'Ο κωδικός αλλάχθηκε.'; + $lang['strpasswordchangedbad'] = 'Η αλλαγή του κωδικού απέτυχε.'; + $lang['strpasswordshort'] = 'Ο κωδικός έχει πολύ μικρό μήκος.'; + $lang['strpasswordconfirm'] = 'Σφάλμα στην επιβεβαίωση του κωδικού.'; + + // Groups + $lang['strgroup'] = 'Ομάδα'; + $lang['strgroups'] = 'Ομάδες'; + $lang['strnogroup'] = 'Η ομάδα δε βρέθηκε.'; + $lang['strnogroups'] = 'Δε βρέθηκαν ομάδες.'; + $lang['strcreategroup'] = 'Δημιουργία ομάδας'; + $lang['strshowallgroups'] = 'Εμφάνιση όλων των ομάδων'; + $lang['strgroupneedsname'] = 'Πρέπει να δώσετε όνομα στην ομάδα.'; + $lang['strgroupcreated'] = 'Η ομάδα δημιουργήθηκε.'; + $lang['strgroupcreatedbad'] = 'Η δημιουργία ομάδας απέτυχε.'; + $lang['strconfdropgroup'] = 'Διαγραφή της ομάδας "%s"?'; + $lang['strgroupdropped'] = 'Η ομάδα διαγράφηκε.'; + $lang['strgroupdroppedbad'] = 'Η διαγραφή της ομάδας απέτυχε.'; + $lang['strmembers'] = 'Μέλη'; + $lang['strmemberof'] = 'Μέλος της ομάδας'; + $lang['stradminmembers'] = 'Μέλη της ομάδας διαχειριστών'; + $lang['straddmember'] = 'Προσθήκη μέλους'; + $lang['strmemberadded'] = 'Το μέλος προστέθηκε στην ομάδα.'; + $lang['strmemberaddedbad'] = 'Η προσθήκη του μέλους απέτυχε.'; + $lang['strdropmember'] = 'Διαγραφή μέλους'; + $lang['strconfdropmember'] = 'Διαγραφή του μέλους "%s" από την ομάδα "%s"?'; + $lang['strmemberdropped'] = 'Το μέλος διαγράφηκε.'; + $lang['strmemberdroppedbad'] = 'Η διαγραφή του μέλους απέτυχε.'; + + // Roles + $lang['strrole'] = 'Ρόλος'; + $lang['strroles'] = 'Ρόλοι'; + $lang['strshowallroles'] = 'Εμφάνιση όλων των ρόλων'; + $lang['strinheritsprivs'] = 'Κληρονομεί προνόμια?'; + $lang['strcreaterole'] = 'Δημιουργία ρόλου'; + $lang['strcancreaterole'] = 'Δημιουργία ρόλου?'; + $lang['strrolecreated'] = 'Ο ρόλος δημιουργήθηκε.'; + $lang['strrolecreatedbad'] = 'Η δημιουργία του ρόλου απέτυχε.'; + $lang['strcanlogin'] = 'Επιτρέπεται η σύνδεση?'; + $lang['strconnlimit'] = 'Οριο συνδέσεων'; + $lang['strdroprole'] = 'Διαγραφή ρόλου'; + $lang['strconfdroprole'] = 'Διαγραφή του ρόλου "%s"?'; + $lang['strroledropped'] = 'Ο ρόλος διαγράφηκε.'; + $lang['strroledroppedbad'] = 'Η διαγραφή του ρόλου απέτυχε.'; + $lang['strnoroles'] = 'Δε βρέθηκαν ρόλοι.'; + $lang['strnolimit'] = 'Κανένα όριο'; + $lang['strnever'] = 'Ποτέ'; + $lang['strroleneedsname'] = 'Πρέπει να δώσετε όνομα στο ρόλο.'; + + // Privileges + $lang['strprivilege'] = 'Προνόμιο'; + $lang['strprivileges'] = 'Προνόμια'; + $lang['strnoprivileges'] = 'Αυτό το αντικείμενο έχει τα εξ ορισμού προνόμια.'; + $lang['strgrant'] = 'Παροχή'; + $lang['strrevoke'] = 'Ανάκληση'; + $lang['strgranted'] = 'Τα προνόμια αλλάχθηκαν.'; + $lang['strgrantfailed'] = 'Αποτυχία αλλαγής προνομίων.'; + $lang['strgrantbad'] = 'Πρέπει να ορίσετε τουλάχιστον ένα χρήστη ή ομάδα και τουλάχιστον ένα προνόμιο.'; + $lang['strgrantor'] = 'Εκχωρητής'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Βάση'; + $lang['strdatabases'] = 'Βάσεις'; + $lang['strshowalldatabases'] = 'Εμφάνιση όλων των βάσεων'; + $lang['strnodatabases'] = 'Δε βρέθηκαν βάσεις.'; + $lang['strcreatedatabase'] = 'Δημιουργία βάσης'; + $lang['strdatabasename'] = 'Ονομα βάσης'; + $lang['strdatabaseneedsname'] = 'Πρέπει να δώσετε όνομα βάσης.'; + $lang['strdatabasecreated'] = 'Η βάση δημιουργήθηκε.'; + $lang['strdatabasecreatedbad'] = 'Η δημιουργία της βάσης απέτυχε.'; + $lang['strconfdropdatabase'] = 'Διαγραφή της βάσης "%s"?'; + $lang['strdatabasedropped'] = 'Η βάση διαγράφηκε.'; + $lang['strdatabasedroppedbad'] = 'Η δημιουργία της βάσης απέτυχε.'; + $lang['strentersql'] = 'Εισάγετε SQL προς εκτέλεση:'; + $lang['strsqlexecuted'] = 'H SQL εκτελέστηκε.'; + $lang['strvacuumgood'] = 'Η εκκένωση ολοκληρώθηκε.'; + $lang['strvacuumbad'] = 'Η εκκένωση απέτυχε.'; + $lang['stranalyzegood'] = 'Η ανάλυση ολοκληρώθηκε.'; + $lang['stranalyzebad'] = 'Η ανάλυση απέτυχε.'; + $lang['strreindexgood'] = 'Η επαναδεικτοδότηση ολοκληρώθηκε.'; + $lang['strreindexbad'] = 'Η επαναδεικτοδότηση απέτυχε.'; + $lang['strfull'] = 'Ολα'; + $lang['strfreeze'] = 'Πάγωμα'; + $lang['strforce'] = 'Υποχρεωτικά'; + $lang['strsignalsent'] = 'Το σήμα εστάλη.'; + $lang['strsignalsentbad'] = 'Η αποστολή του σήματος απέτυχε.'; + $lang['strallobjects'] = 'Ολα τα αντικείμενα'; + $lang['strdatabasealtered'] = 'Η βάση τροποποιήθηκε.'; + $lang['strdatabasealteredbad'] = 'Η τροποποίηση της βάσης απέτυχε.'; + + // Views + $lang['strview'] = 'Οψη'; + $lang['strviews'] = 'Οψεις'; + $lang['strshowallviews'] = 'Εμφάνιση όλων των όψεων'; + $lang['strnoview'] = 'Δε βρέθηκε όψη.'; + $lang['strnoviews'] = 'Δε βρέθηκαν όψεις.'; + $lang['strcreateview'] = 'Δημιουργία όψης'; + $lang['strviewname'] = 'Ονομα όψης'; + $lang['strviewneedsname'] = 'Πρέπει να δώσετε όνομα στην όψη.'; + $lang['strviewneedsdef'] = 'Πρέπει να δώσετε τον ορισμό της όψης.'; + $lang['strviewneedsfields'] = 'Πρέπει να δώσετε τις στήλες της όψης.'; + $lang['strviewcreated'] = 'Η όψη δημιουργήθηκε.'; + $lang['strviewcreatedbad'] = 'Η δημιουργία της όψης απέτυχε.'; + $lang['strconfdropview'] = 'Διαγραφή της όψης "%s"?'; + $lang['strviewdropped'] = 'Η όψη διαγράφηκε.'; + $lang['strviewdroppedbad'] = 'Η διαγραφή της όψης απέτυχε.'; + $lang['strviewupdated'] = 'Η όψη ενημερώθηκε.'; + $lang['strviewupdatedbad'] = 'Η ενημέρωση της όψης απέτυχε.'; + $lang['strviewlink'] = 'Σύζευξη κλειδιών'; + $lang['strviewconditions'] = 'Πρόσθετες συνθήκες'; + $lang['strcreateviewwiz'] = 'Δημιουργία όψης με βοηθό'; + + // Sequences + $lang['strsequence'] = 'Ακολουθία'; + $lang['strsequences'] = 'Ακολουθίες'; + $lang['strshowallsequences'] = 'Εμφάνιση όλων των ακολουθιών'; + $lang['strnosequence'] = 'Δε βρέθηκε ακολουθία.'; + $lang['strnosequences'] = 'Δε βρέθηκαν ακολουθίες.'; + $lang['strcreatesequence'] = 'Δημιουργία ακολουθίας'; + $lang['strlastvalue'] = 'Τελευταία τιμή'; + $lang['strincrementby'] = 'Προσαύξηση κατά'; + $lang['strstartvalue'] = 'Τιμή εκκίνησης'; + $lang['strmaxvalue'] = 'Μέγιστη τιμή'; + $lang['strminvalue'] = 'Ελάχιστη τιμή'; + $lang['strcachevalue'] = 'Αριθμός εγγραφών στην κρυφή μνήμη (cache)'; + $lang['strlogcount'] = 'Καταγραφή'; + $lang['strcancycle'] = 'Να μηδενίζεται?'; + $lang['striscalled'] = 'Εχει κληθεί?'; + $lang['strsequenceneedsname'] = 'Πρέπει να δώσετε όνομα για την ακολουθία.'; + $lang['strsequencecreated'] = 'Η ακολουθία δημιουργήθηκε.'; + $lang['strsequencecreatedbad'] = 'Η δημιουργία της ακολουθίας απέτυχε.'; + $lang['strconfdropsequence'] = 'Να διαγραφεί η ακολουθία "%s"?'; + $lang['strsequencedropped'] = 'Η ακολουθία διαγράφηκε.'; + $lang['strsequencedroppedbad'] = 'Η διαγραφή της ακολουθίας απέτυχε.'; + $lang['strsequencereset'] = 'Η ακολουθία επανεκκινήθηκε.'; + $lang['strsequenceresetbad'] = 'Η επανεκκίνηση της ακολουθίας απέτυχε.'; + $lang['strsequencealtered'] = 'Η ακολουθία τροποποιήθηκε.'; + $lang['strsequencealteredbad'] = 'Η τροποποίηση της ακολουθίας απέτυχε.'; + $lang['strsetval'] = 'Αλλαγή τιμής'; + $lang['strsequencesetval'] = 'Η τιμή της ακολουθίας ορίσθηκε.'; + $lang['strsequencesetvalbad'] = 'Απέτυχε ο ορισμός τιμής της ακολουθίας.'; + $lang['strnextval'] = 'Προσαύξηση'; + $lang['strsequencenextval'] = 'Η ακολουθία προσαυξήθηκε.'; + $lang['strsequencenextvalbad'] = 'Η προσαύξηση της ακολουθίας απέτυχε.'; + + // Indexes + $lang['strindex'] = 'Ευρετήριο'; + $lang['strindexes'] = 'Ευρετήρια'; + $lang['strindexname'] = 'Ονομα ευρετηρίου'; + $lang['strshowallindexes'] = 'Εμφάνιση όλων των ευρετηρίων'; + $lang['strnoindex'] = 'Δε βρέθηκε ευρετήριο.'; + $lang['strnoindexes'] = 'Δε βρέθηκαν ευρετήρια.'; + $lang['strcreateindex'] = 'Δημιουργία ευρετηρίου'; + $lang['strtabname'] = 'Ονομα καρτέλας'; + $lang['strcolumnname'] = 'Ονομα στήλης'; + $lang['strindexneedsname'] = 'Πρέπει να δώσετε όνομα στο ευρετήριο.'; + $lang['strindexneedscols'] = 'Τα ευρετήρια απαιτούν έναν έγκυρο αριθμό στηλών.'; + $lang['strindexcreated'] = 'Το ευρετήριο δημιουργήθηκε.'; + $lang['strindexcreatedbad'] = 'Η δημιουργία του ευρετηρίου απέτυχε.'; + $lang['strconfdropindex'] = 'Να διαγραφεί το ευρετήριο "%s"?'; + $lang['strindexdropped'] = 'Το ευρετήριο διαγράφηκε.'; + $lang['strindexdroppedbad'] = 'Η διαγραφή του ευρετηρίου απέτυχε.'; + $lang['strkeyname'] = 'Ονομα κλειδιού'; + $lang['struniquekey'] = 'Μοναδικό κλειδί'; + $lang['strprimarykey'] = 'Πρωτεύον κλειδί'; + $lang['strindextype'] = 'Τύπος ευρετηρίου'; + $lang['strtablecolumnlist'] = 'Στήλες πίνακα'; + $lang['strindexcolumnlist'] = 'Στήλες ευρετηρίου'; + $lang['strconfcluster'] = 'Να ομαδοποιηθούν τα "%s"?'; + $lang['strclusteredgood'] = 'Η ομαδοποίηση ολοκληρώθηκε.'; + $lang['strclusteredbad'] = 'Η ομαδοποίηση απέτυχε.'; + $lang['strcluster'] = 'Συστοιχία'; + + // Rules + $lang['strrules'] = 'Κανόνες'; + $lang['strrule'] = 'Κανόνας'; + $lang['strshowallrules'] = 'Εμφάνιση όλων των κανόνων'; + $lang['strnorule'] = 'Δε βρέθηκε κανόνας.'; + $lang['strnorules'] = 'Δε βρέθηκαν κανόνες.'; + $lang['strcreaterule'] = 'Δημιουργία κανόνα'; + $lang['strrulename'] = 'Ονομα κανόνα'; + $lang['strruleneedsname'] = 'Πρέπει να δώσετε όνομα στον κανόνα.'; + $lang['strrulecreated'] = 'Ο κανόνας δημιουργήθηκε.'; + $lang['strrulecreatedbad'] = 'Η δημιουργία του κανόνα απέτυχε.'; + $lang['strconfdroprule'] = 'Να διαγραφεί ο κανόνας "%s" στον "%s"?'; + $lang['strruledropped'] = 'Ο κανόνας διαγράφηκε.'; + $lang['strruledroppedbad'] = 'Η διαγραφή του κανόνα απέτυχε.'; + + // Constraints + $lang['strconstraint'] = 'Περιορισμός'; + $lang['strconstraints'] = 'Περιορισμοί'; + $lang['strshowallconstraints'] = 'Εμφάνιση όλων των περιορισμών'; + $lang['strnoconstraints'] = 'Δε βρέθηκαν περιορισμοί.'; + $lang['strcreateconstraint'] = 'Δημιουργία περιορισμού'; + $lang['strconstraintcreated'] = 'Ο περιορισμός δημιουργήθηκε.'; + $lang['strconstraintcreatedbad'] = 'Η δημιουργία του περιορισμού απέτυχε.'; + $lang['strconfdropconstraint'] = 'Να διαγραφεί ο περιορισμός "%s" στον "%s"?'; + $lang['strconstraintdropped'] = 'Ο περιορισμός διαγράφηκε.'; + $lang['strconstraintdroppedbad'] = 'Η διαγραφή του περιορισμού απέτυχε.'; + $lang['straddcheck'] = 'Προσθήκη ελέγχου'; + $lang['strcheckneedsdefinition'] = 'Πρέπει να οριστεί ο έλεγχος.'; + $lang['strcheckadded'] = 'Ο έλεγχος προστέθηκε.'; + $lang['strcheckaddedbad'] = 'Η προσθήκη ελέγχου απέτυχε.'; + $lang['straddpk'] = 'Προσθήκη πρωτεύοντος κλειδιού'; + $lang['strpkneedscols'] = 'Το πρωτεύον κλειδί χρειάζεται τουλάχιστον μία στήλη.'; + $lang['strpkadded'] = 'Το πρωτεύον κλειδί προστέθηκε.'; + $lang['strpkaddedbad'] = 'Αποτυχία προσθήκης πρωτεύοντος κλειδιού.'; + $lang['stradduniq'] = 'Προσθήκη μοναδικού κλειδιού'; + $lang['struniqneedscols'] = 'Το μοναδικό κλειδί χρειάζεται τουλάχιστον μία στήλη.'; + $lang['struniqadded'] = 'Το μοναδικό κλειδί προστέθηκε.'; + $lang['struniqaddedbad'] = 'Αποτυχία προσθήκης μοναδικού κλειδιού.'; + $lang['straddfk'] = 'Προσθήση ξένου κλειδιού'; + $lang['strfkneedscols'] = 'Το ξένο κλειδί χρειάζεται τουλάχιστον μία στήλη.'; + $lang['strfkneedstarget'] = 'Το ξένο κλειδί χρειάζεται ένα αποδέκτη πίνακα.'; + $lang['strfkadded'] = 'Το ξένο κλειδί προστέθηκε.'; + $lang['strfkaddedbad'] = 'Αποτυχία προσθήκης ξένου κλειδιού.'; + $lang['strfktarget'] = 'Αποδέκτης πίνακας'; + $lang['strfkcolumnlist'] = 'Στήλες στο κλειδί'; + $lang['strondelete'] = 'ΚΑΤΑ ΤΗ ΔΙΑΓΡΑΦΗ'; + $lang['stronupdate'] = 'ΚΑΤΑ ΤΗΝ ΕΝΗΜΕΡΩΣΗ'; + + // Functions + $lang['strfunction'] = 'Συνάρτηση'; + $lang['strfunctions'] = 'Συναρτήσεις'; + $lang['strshowallfunctions'] = 'Εμφάνιση όλων των συναρτήσεων'; + $lang['strnofunction'] = 'Δε βρέθηκε συνάρτηση.'; + $lang['strnofunctions'] = 'Δε βρέθηκαν συναρτήσεις.'; + $lang['strcreateplfunction'] = 'Δημιουργία συνάρτησης σε SQL/PL'; + $lang['strcreateinternalfunction'] = 'Δημιουργία εσωτερικής συνάρτησης'; + $lang['strcreatecfunction'] = 'Δημιουργία συνάρτησης σε C'; + $lang['strfunctionname'] = 'Ονομα συνάρτησης'; + $lang['strreturns'] = 'Επιστρέφει'; + $lang['strproglanguage'] = 'Γλώσσα προγραμματισμού'; + $lang['strfunctionneedsname'] = 'Πρέπει να δώσετε όνομα στη συνάρτηση.'; + $lang['strfunctionneedsdef'] = 'Πρέπει να δώσετε ορισμό στη συνάρτηση.'; + $lang['strfunctioncreated'] = 'Η συνάρτηση δημιουργήθηκε.'; + $lang['strfunctioncreatedbad'] = 'Η δημιουργία της συνάρτησης απέτυχε.'; + $lang['strconfdropfunction'] = 'Να διαγραφεί η συνάρτηση "%s"?'; + $lang['strfunctiondropped'] = 'Η συνάρτηση διαγράφηκε.'; + $lang['strfunctiondroppedbad'] = 'Η διαγραφή της συνάρτησης απέτυχε.'; + $lang['strfunctionupdated'] = 'Η συνάρτηση ενημερώθηκε.'; + $lang['strfunctionupdatedbad'] = 'Η ενημέρωση της συνάρτησης απέτυχε.'; + $lang['strobjectfile'] = 'Αρχείο αντικειμένου'; + $lang['strlinksymbol'] = 'Ονομα συνάρτησης στον πηγαίο κώδικα'; + $lang['strarguments'] = 'Ορίσματα'; + $lang['strargmode'] = 'Είδος'; + $lang['strargtype'] = 'Τύπος'; + $lang['strargadd'] = 'Επιπλέον όρισμα'; + $lang['strargremove'] = 'Διαγραφή ορίσματος'; + $lang['strargnoargs'] = 'Αυτή η συνάρτηση δεν έχει ορίσματα.'; + $lang['strargenableargs'] = 'Ενεργοποίηση ορισμάτων που τροφοδοτούν τη συνάρτηση.'; + $lang['strargnorowabove'] = 'Δεν υπάρχει γραμμή πάνω από αυτήν.'; + $lang['strargnorowbelow'] = 'Δεν υπάρχει γραμμή κάτω από αυτήν.'; + $lang['strargraise'] = 'Μετακίνηση πάνω.'; + $lang['strarglower'] = 'Μετακίνηση κάτω.'; + $lang['strargremoveconfirm'] = 'Να διαγραφεί το όρισμα; Η ενέργεια είναι ΜΗ ΑΝΑΣΤΡΕΨΙΜΗ.'; + + + // Triggers + $lang['strtrigger'] = 'Εναυσμα'; + $lang['strtriggers'] = 'Εναύσματα'; + $lang['strshowalltriggers'] = 'Εμφάνιση όλων των εναυσμάτων'; + $lang['strnotrigger'] = 'Δε βρέθηκε έναυσμα.'; + $lang['strnotriggers'] = 'Δε βρέθηκαν εναύσματα.'; + $lang['strcreatetrigger'] = 'Δημιουργία εναύσματος'; + $lang['strtriggerneedsname'] = 'Πρέπει να δώσετε όνομα στο έναυσμα.'; + $lang['strtriggerneedsfunc'] = 'Το έναυσμα πρέπει να αντιστοιχεί σε μία συνάρτηση.'; + $lang['strtriggercreated'] = 'Το έναυσμα δημιουργήθηκε.'; + $lang['strtriggercreatedbad'] = 'Η δημιουργία του εναύσματος απέτυχε.'; + $lang['strconfdroptrigger'] = 'Να διαγραφεί το έναυσμα "%s" στον "%s"?'; + $lang['strconfenabletrigger'] = 'Να ενεργοποιηθεί το έναυσμα "%s" στον "%s"?'; + $lang['strconfdisabletrigger'] = 'Να απενεργοποιηθεί το έναυσμα "%s" στον "%s"?'; + $lang['strtriggerdropped'] = 'Το έναυσμα διαγράφηκε.'; + $lang['strtriggerdroppedbad'] = 'Η διαγραφή του εναύσματος απέτυχε.'; + $lang['strtriggerenabled'] = 'Το έναυσμα ενεργοποιήθηκε.'; + $lang['strtriggerenabledbad'] = 'Η ενεργοποίηση του εναύσματος απέτυχε.'; + $lang['strtriggerdisabled'] = 'Το έναυσμα απενεργοποιήθηκε.'; + $lang['strtriggerdisabledbad'] = 'Η απενεργοποίηση απέτυχε.'; + $lang['strtriggeraltered'] = 'Το έναυσμα τροποποιήθηκε.'; + $lang['strtriggeralteredbad'] = 'Η τροποποίηση του εναύσματος απέτυχε.'; + $lang['strforeach'] = 'Για κάθε'; + + // Types + $lang['strtype'] = 'Τύπος'; + $lang['strtypes'] = 'Τύποι'; + $lang['strshowalltypes'] = 'Εμφάνιση όλων των τύπων'; + $lang['strnotype'] = 'Δε βρέθηκε τύπος.'; + $lang['strnotypes'] = 'Δε βρέθηκαν τύποι.'; + $lang['strcreatetype'] = 'Δημιουργία τύπου'; + $lang['strcreatecomptype'] = 'Δημιουργία σύνθετου τύπου'; + $lang['strtypeneedsfield'] = 'Πρέπει να ορίσετε τουλάχιστον ένα πεδίο.'; + $lang['strtypeneedscols'] = 'Πρέπει να ορίσετε έναν έγκυρο αριθμό πεδίων.'; + $lang['strinputfn'] = 'Συνάρτηση εισόδου'; + $lang['stroutputfn'] = 'Συνάρτηση εξόδου'; + $lang['strpassbyval'] = 'Να μεταφέρεται η μεταβλητή?'; + $lang['stralignment'] = 'Στοίχιση'; + $lang['strelement'] = 'Στοιχείο'; + $lang['strdelimiter'] = 'Διαχωριστής'; + $lang['strstorage'] = 'Αποθήκευση'; + $lang['strfield'] = 'Πεδίο'; + $lang['strnumfields'] = 'Αριθμός πεδίων'; + $lang['strtypeneedsname'] = 'Πρέπει να δώσετε όνομα στον τύπο.'; + $lang['strtypeneedslen'] = 'Πρέπει να ορίσετε το μήκος του τύπου.'; + $lang['strtypecreated'] = 'Ο τύπος δημιουργήθηκε.'; + $lang['strtypecreatedbad'] = 'Η δημιουργία του τύπου απέτυχε.'; + $lang['strconfdroptype'] = 'Να διαγραφεί ο τύπος "%s"?'; + $lang['strtypedropped'] = 'Ο τύπος διαγράφηκε.'; + $lang['strtypedroppedbad'] = 'Η διαγραφή του τύπου απέτυχε.'; + $lang['strflavor'] = 'Εντύπωση'; + $lang['strbasetype'] = 'Βάση'; + $lang['strcompositetype'] = 'Σύνθεση'; + $lang['strpseudotype'] = 'Ψεύδο'; + + // Schemas + $lang['strschema'] = 'Σχήμα'; + $lang['strschemas'] = 'Σχήματα'; + $lang['strshowallschemas'] = 'Εμφάνιση όλων των σχημάτων'; + $lang['strnoschema'] = 'Δε βρέθηκε σχήμα.'; + $lang['strnoschemas'] = 'Δε βρέθηκαν σχήματα.'; + $lang['strcreateschema'] = 'Δημιουργία σχήματος'; + $lang['strschemaname'] = 'Ονομα σχήματος'; + $lang['strschemaneedsname'] = 'Πρέπει να δώσετε όνομα στο σχήμα.'; + $lang['strschemacreated'] = 'Το σχήμα δημιουργήθηκε'; + $lang['strschemacreatedbad'] = 'Η δημιουργία του σχήματος απέτυχε.'; + $lang['strconfdropschema'] = 'Να διαγραφεί το σχήμα "%s"?'; + $lang['strschemadropped'] = 'Το σχήμα διαγράφηκε.'; + $lang['strschemadroppedbad'] = 'Η διαγραφή του σχήματος απέτυχε.'; + $lang['strschemaaltered'] = 'Το σχήμα τροποποιήθηκε.'; + $lang['strschemaalteredbad'] = 'Η τροποποίηση του σχήματος απέτυχε.'; + $lang['strsearchpath'] = 'Πορεία αναζήτησης σχήματος'; + + // Reports + + // Domains + $lang['strdomain'] = 'Τομέας'; + $lang['strdomains'] = 'Τομείς'; + $lang['strshowalldomains'] = 'Εμφάνιση όλων των τομέων'; + $lang['strnodomains'] = 'Δε βρέθηκαν τομείς.'; + $lang['strcreatedomain'] = 'Δημιουργία τομέα'; + $lang['strdomaindropped'] = 'Ο τομέας διαγράφηκε.'; + $lang['strdomaindroppedbad'] = 'Η διαγραφή του τομέα απέτυχε.'; + $lang['strconfdropdomain'] = 'Να διαγραφεί ο τομέας "%s"?'; + $lang['strdomainneedsname'] = 'Πρέπει να δώσετε όνομα στον τομέα.'; + $lang['strdomaincreated'] = 'Ο τομέας δημιουργήθηκε.'; + $lang['strdomaincreatedbad'] = 'Η δημιουργία του τομέα απέτυχε.'; + $lang['strdomainaltered'] = 'Ο τομέας τροποποιήθηκε.'; + $lang['strdomainalteredbad'] = 'Η τροποποίηση του τομέα απέτυχε.'; + + // Operators + $lang['stroperator'] = 'Τελεστής'; + $lang['stroperators'] = 'Τελεστές'; + $lang['strshowalloperators'] = 'Εμφάνιση όλων των τελεστών'; + $lang['strnooperator'] = 'Δε βρέθηκε τελεστής.'; + $lang['strnooperators'] = 'Δε βρέθηκαν τελεστές.'; + $lang['strcreateoperator'] = 'Δημιουργία τελεστή'; + $lang['strleftarg'] = 'Είδος αριστερής παραμέτρου'; + $lang['strrightarg'] = 'Είδος δεξιάς παραμέτρου'; + $lang['strcommutator'] = 'Αντιμετάθεση'; + $lang['strnegator'] = 'Αρνηση'; + $lang['strrestrict'] = 'Περιορισμός'; + $lang['strjoin'] = 'Σύζευξη'; + $lang['strhashes'] = 'Κατάτμηση'; + $lang['strmerges'] = 'Ενωση'; + $lang['strleftsort'] = 'Αριστερή ταξινόμηση'; + $lang['strrightsort'] = 'Δεξιά ταξινόμηση'; + $lang['strlessthan'] = 'Μικρότερο από'; + $lang['strgreaterthan'] = 'Μεγαλύτερο από'; + $lang['stroperatorneedsname'] = 'Πρέπει να δώσετε όνομα στον τελεστή.'; + $lang['stroperatorcreated'] = 'Ο τελεστής δημιουργήθηκε'; + $lang['stroperatorcreatedbad'] = 'Η δημιουργία του τελεστή απέτυχε.'; + $lang['strconfdropoperator'] = 'Να διαγραφεί ο τελεστής "%s"?'; + $lang['stroperatordropped'] = 'Ο τελεστής διαγράφηκε.'; + $lang['stroperatordroppedbad'] = 'Η διαγραφή του τελεστή απέτυχε.'; + + // Casts + $lang['strcasts'] = 'Μετατροπή τύπου'; + $lang['strnocasts'] = 'Δε βρέθηκαν μετατροπές τύπου.'; + $lang['strsourcetype'] = 'Τύπος εισόδου'; + $lang['strtargettype'] = 'Τύπος εξόδου'; + $lang['strimplicit'] = 'Απόλυτη'; + $lang['strinassignment'] = 'Σε ανάθεση'; + $lang['strbinarycompat'] = '(Δυαδική συμβατότητα)'; + + // Conversions + $lang['strconversions'] = 'Μετατροπές'; + $lang['strnoconversions'] = 'Δε βρέθηκαν μετατροπές.'; + $lang['strsourceencoding'] = 'Κωδικοποίηση εισόδου'; + $lang['strtargetencoding'] = 'Κωδικοποίηση εξόδου'; + + // Languages + $lang['strlanguages'] = 'Γλώσσες'; + $lang['strnolanguages'] = 'Δε βρέθηκαν γλώσσες.'; + $lang['strtrusted'] = 'Αξιόπιστη'; + + // Info + $lang['strnoinfo'] = 'Δε βρέθηκαν πληροφορίες.'; + $lang['strreferringtables'] = 'Σχετικοί πίνακες'; + $lang['strparenttables'] = 'Γονικοί πίνακες'; + $lang['strchildtables'] = 'Θυγατρικοί πίνακες'; + + // Aggregates + $lang['straggregate'] = 'Συγκεντρωτική συνάρτηση'; + $lang['straggregates'] = 'Συγκεντρωτικές συναρτήσεις'; + $lang['strnoaggregates'] = 'Δε βρέθηκαν συγκεντρωτικές συναρτήσεις'; + $lang['stralltypes'] = '(Ολοι οι τύποι)'; + $lang['strcreateaggregate'] = 'Δημιουργία συγκεντρωτικής συνάρτησης'; + $lang['straggrbasetype'] = 'Μορφή δεδομένων εισόδου'; + $lang['straggrsfunc'] = 'Συνάρτηση μεταβολής κατάστασης'; + $lang['straggrstype'] = 'Μορφή δεδομένων κατάστασης'; + $lang['straggrffunc'] = 'Τελική συνάρτηση'; + $lang['straggrinitcond'] = 'Αρχική συνθήκη'; + $lang['straggrsortop'] = 'Τελεστής ταξινόμησης'; + $lang['strconfdropaggregate'] = 'Να διαγραφεί η συγκεντρωτική συνάρτηση "%s"?'; + $lang['straggregatedropped'] = 'Η συγκεντρωτική συνάρτηση διαγράφηκε.'; + $lang['straggregatedroppedbad'] = 'Η διαγραφή της συγκεντρωτικής συνάρτησης απέτυχε.'; + $lang['straggraltered'] = 'Η συγκεντρωτική συνάρτηση τροποποιήθηκε.'; + $lang['straggralteredbad'] = 'Η τροποποίηση της συγκεντρωτικής συνάρτησης απέτυχε.'; + $lang['straggrneedsname'] = 'Πρέπει να δώσετε όνομα στη συγκεντρωτική συνάρτηση.'; + $lang['straggrneedsbasetype'] = 'Πρέπει να δώσετε τη μορφή δεδομένων εισόδου της συγκεντρωτικής συνάρτησης'; + $lang['straggrneedssfunc'] = 'Πρέπει να δώσετε το όνομα της συνάρτησης μεταβολής κατάστασης'; + $lang['straggrneedsstype'] = 'Πρέπει να δώσετε τη μορφή δεδομένων της τιμής κατάστασης'; + $lang['straggrcreated'] = 'Η συγκεντρωτική συνάρτηση δημιουργήθηκε.'; + $lang['straggrcreatedbad'] = 'Η δημιουργία της συγκεντρωτικής συνάρτησης απέτυχε.'; + $lang['straggrshowall'] = 'Εμφάνιση όλων των συγκεντρωτικών συναρτήσεων'; + + // Operator Classes + $lang['stropclasses'] = 'Κλάσεις τελεστών'; + $lang['strnoopclasses'] = 'Δε βρέθηκαν κλάσεις τελεστών.'; + $lang['straccessmethod'] = 'Μέθοδος πρόσβασης'; + + // Stats and performance + $lang['strrowperf'] = 'Επιδόσεις γραμμών'; + $lang['strioperf'] = 'Επιδόσεις Εισόδου/Εξόδου'; + $lang['stridxrowperf'] = 'Επιδόσεις γραμμών ευρετηρίου'; + $lang['stridxioperf'] = 'Επιδόσεις Εισόδου/Εξόδου ευρετηρίου'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Αλληλουχία'; + $lang['strscan'] = 'Σάρωση'; + $lang['strread'] = 'Ανάγνωση'; + $lang['strfetch'] = 'Απόδοση'; + $lang['strheap'] = 'Σωρός'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'Ευρετήριο TOAST'; + $lang['strcache'] = 'Κρυφή μνήμη'; + $lang['strdisk'] = 'Δίσκος'; + $lang['strrows2'] = 'Γραμμές'; + + // Tablespaces + $lang['strtablespace'] = 'Τοποθεσία πίνακα'; + $lang['strtablespaces'] = 'Τοποθεσίες πινάκων'; + $lang['strshowalltablespaces'] = 'Εμφάνιση όλων των τοποθεσιών'; + $lang['strnotablespaces'] = 'Δε βρέθηκαν τοποθεσίες πινάκων.'; + $lang['strcreatetablespace'] = 'Δημιουργία τοποθεσίας πίνακα'; + $lang['strlocation'] = 'Τοποθεσία'; + $lang['strtablespaceneedsname'] = 'Πρέπει να δώσετε όνομα στην τοποθεσία.'; + $lang['strtablespaceneedsloc'] = 'Πρέπει να δώσετε την ακριβή θέση του καταλόγου όπου θα δημιουργηθεί ο πίνακας.'; + $lang['strtablespacecreated'] = 'Η τοποθεσία δημιουργήθηκε.'; + $lang['strtablespacecreatedbad'] = 'Η δημιουργία της τοποθεσίας απέτυχε.'; + $lang['strconfdroptablespace'] = 'Να διαγραφεί η τοποθεσία "%s"?'; + $lang['strtablespacedropped'] = 'Η τοποθεσία διαγράφηκε.'; + $lang['strtablespacedroppedbad'] = 'Η διαγραφή της τοποθεσίας απέτυχε.'; + $lang['strtablespacealtered'] = 'Η τοποθεσία τροποποιήθηκε.'; + $lang['strtablespacealteredbad'] = 'Η τροποποίηση της τοποθεσίας απέτυχε.'; + + // Miscellaneous + $lang['strtopbar'] = '%s στο %s:%s -- Είστε συνδεδεμένος ως "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Βοήθεια'; + $lang['strhelpicon'] = '?'; + $lang['strlogintitle'] = 'Σύνδεση με %s'; + $lang['strlogoutmsg'] = 'Αποσύνδεση από %s'; + $lang['strloading'] = 'Φόρτωση...'; + $lang['strerrorloading'] = 'Σφάλμα στη φόρτωση'; + $lang['strclicktoreload'] = 'Να ξαναφορτωθεί'; + + // Autovacuum + $lang['strautovacuum'] = 'Αυτόματη εκκένωση'; + $lang['strturnedon'] = 'Ανοιχτή'; + $lang['strturnedoff'] = 'Κλειστή'; + $lang['strenabled'] = 'Ενεργοποιημένη'; + $lang['strvacuumbasethreshold'] = 'Βάση κατωφλίου εκκένωσης'; + $lang['strvacuumscalefactor'] = 'Συντελεστής κλίμακας εκκένωσης'; + $lang['stranalybasethreshold'] = 'Ανάλυση βάσης κατωφλίου'; + $lang['stranalyzescalefactor'] = 'Ανάλυση συντελεστή κλίμακας'; + $lang['strvacuumcostdelay'] = 'Καθυστέρηση κόστους εκκένωσης'; + $lang['strvacuumcostlimit'] = 'Οριο κόστους εκκένωσης'; + + // Table-level Locks + $lang['strlocks'] = 'Κλειδώματα'; + $lang['strtransaction'] = 'Ταυτότητα συναλλαγής'; + $lang['strprocessid'] = 'Ταυτότητα διεργασίας'; + $lang['strmode'] = 'Τρόπος κλειδώματος'; + $lang['strislockheld'] = 'Διατηρείται το κλείδωμα?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Ετοιμες συναλλαγές'; + $lang['strxactid'] = 'Ταυτότητα'; + $lang['strgid'] = 'Γενική ταυτότητα'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/hebrew.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/hebrew.php new file mode 100644 index 00000000..5b9aea39 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/hebrew.php @@ -0,0 +1,615 @@ +<?php + + /** + * Hebrew language file for phpPgAdmin. + * Jonatan Perry <Jonatan44@hotpop.com> + * + * $Id: hebrew.php,v 1.4 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Hebrew'; + $lang['applocale'] = 'he-IL'; + $lang['applangdir'] = 'rtl'; + + // Welcome + $lang['strintro'] = 'ברוכים הבאים ל phpPgAdmin.'; + $lang['strppahome'] = 'עמוד הבית של phpPgAdmin.'; + $lang['strpgsqlhome'] = 'עמוד הבית של PostgreSQL.'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'תיעוד PostgreSQL (מקומי)'; + $lang['strreportbug'] = 'דווח על באג'; + $lang['strviewfaq'] = 'צפה ב FAQ מקוון'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'התחברות'; + $lang['strloginfailed'] = 'התחברות נכשלה'; + $lang['strlogindisallowed'] = 'התחברות מבוטלת בשל בעיות אבטחה.'; + $lang['strserver'] = 'שרת'; + $lang['strlogout'] = 'התנתקות'; + $lang['strowner'] = 'בעל'; + $lang['straction'] = 'פעולה'; + $lang['stractions'] = 'פעולות'; + $lang['strname'] = 'שם'; + $lang['strdefinition'] = 'הגדרה'; + $lang['strproperties'] = 'העדפות'; + $lang['strbrowse'] = 'דפדף'; + $lang['strdrop'] = 'מחק'; + $lang['strdropped'] = 'נמחק'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'לא null'; + $lang['strprev'] = 'קודם <'; + $lang['strnext'] = '> הבאה'; + $lang['strfirst'] = 'ראשון <<'; + $lang['strlast'] = '>> אחרון'; + $lang['strfailed'] = 'נכשל'; + $lang['strcreate'] = 'צור'; + $lang['strcreated'] = 'נוצר'; + $lang['strcomment'] = 'הערה'; + $lang['strlength'] = 'אורך'; + $lang['strdefault'] = 'ברירת מחדל'; + $lang['stralter'] = 'ערוך'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'בטל'; + $lang['strsave'] = 'שמור'; + $lang['strreset'] = 'שחזר'; + $lang['strinsert'] = 'הכנס'; + $lang['strselect'] = 'בחר'; + $lang['strdelete'] = 'מחק'; + $lang['strupdate'] = 'עדכן'; + $lang['strreferences'] = 'תיעודים'; + $lang['stryes'] = 'כן'; + $lang['strno'] = 'לא'; + $lang['strtrue'] = 'אמת'; + $lang['strfalse'] = 'שקר'; + $lang['stredit'] = 'ערוך'; + $lang['strcolumns'] = 'עמודות'; + $lang['strrows'] = 'שורות'; + $lang['strrowsaff'] = 'שורות מושפעות'; + $lang['strobjects'] = 'נתונים'; + $lang['strexample'] = 'דוגמה.'; + $lang['strback'] = 'קודם'; + $lang['strqueryresults'] = 'תוצאות השאילתה'; + $lang['strshow'] = 'הראה'; + $lang['strempty'] = 'רוקן'; + $lang['strlanguage'] = 'שפה'; + $lang['strencoding'] = 'קידוד'; + $lang['strvalue'] = 'ערך'; + $lang['strunique'] = 'מיוחד'; + $lang['strprimary'] = 'ראשי'; + $lang['strexport'] = 'יצוא'; + $lang['strimport'] = 'יבוא'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = 'לך'; + $lang['stradmin'] = 'מנהל'; + $lang['strvacuum'] = 'ריק'; + $lang['stranalyze'] = 'נתח'; + $lang['strclusterindex'] = 'אשכול'; + $lang['strclustered'] = 'מאושכל?'; + $lang['strreindex'] = 'אנדקס מחדש'; + $lang['strrun'] = 'הרץ'; + $lang['stradd'] = 'הוסף'; + $lang['strevent'] = 'אירוע'; + $lang['strwhere'] = 'איפה'; + $lang['strinstead'] = 'תעשה במקום'; + $lang['strwhen'] = 'כש'; + $lang['strformat'] = 'סוג'; + $lang['strdata'] = 'מידע'; + $lang['strconfirm'] = 'אשר'; + $lang['strexpression'] = 'ביטוי'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'הרחב'; + $lang['strcollapse'] = 'צמצם'; + $lang['strexplain'] = 'הסבק'; + $lang['strexplainanalyze'] = 'הסבר נתיחה'; + $lang['strfind'] = 'מצא'; + $lang['stroptions'] = 'אפשרויות'; + $lang['strrefresh'] = 'רענן'; + $lang['strdownload'] = 'הורד'; + $lang['strdownloadgzipped'] = 'הורד דחוס ב gzip'; + $lang['strinfo'] = 'מידע'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'מתקדם'; + $lang['strvariables'] = 'משתנים'; + $lang['strprocess'] = 'תהליך'; + $lang['strprocesses'] = 'תהליכים'; + $lang['strsetting'] = 'הגדרות'; + $lang['streditsql'] = 'ערוך SQL'; + $lang['strruntime'] = 'זמן-ריצה כולל: %s ms'; + $lang['strpaginate'] = 'Paginate results'; + $lang['struploadscript'] = 'או העלה תסריט SQL:'; + $lang['strstarttime'] = 'זמן התחלה'; + $lang['strfile'] = 'קובץ'; + $lang['strfileimported'] = 'קובץ יובא'; + + // Error handling + $lang['strbadconfig'] = 'קובץ ה config.inc.php שלך אינו מעודכן. אתה תיצטרך ליצור אחד חדש יותר מהקובץ config.inc.php-dist החדש'; + $lang['strnotloaded'] = 'התקנת ה PHP שלך אינה תומכת ב PostgreSQL. אתה תיצטרך להדר אותה מחדש אם הפקודה --with-pqlsql בזמן ההגדרה'; + $lang['strphpversionnotsupported'] = 'גירסת ה PHP שלך אינה ניתמכת. אנא עדכן אותה לגירסה %s או חדשה יותר.'; + $lang['strpostgresqlversionnotsupported'] = 'גערסת ה PostgrSQL שלך אינה ניתמכת. אנא עדכן אותה לגירסה %s או חדשה יותר.'; + $lang['strbadschema'] = 'תרשים שגוי צויין'; + $lang['strbadencoding'] = 'נכשל בהתאמת קידוד משתמש למסד הנתונים.'; + $lang['strsqlerror'] = 'שגיאת SQL:'; + $lang['strinstatement'] = 'בהצהרה:'; + $lang['strinvalidparam'] = 'ממדי תסריט שגוי.'; + $lang['strnodata'] = 'לא נמצאו שורות.'; + $lang['strnoobjects'] = 'לא נמצאו נתונים.'; + $lang['strrownotunique'] = 'No unique identifier for this row.'; + $lang['strnouploads'] = 'העלאת קבצים בוטלה.'; + $lang['strimporterror'] = 'שגיאת יבוא.'; + $lang['strimporterrorline'] = 'שגיאת יבוא בשורה: %s.'; + + // Tables + $lang['strtable'] = 'טבלה'; + $lang['strtables'] = 'טבלאות'; + $lang['strshowalltables'] = 'הראה את כל הטבלאות.'; + $lang['strnotables'] = 'לא נמצאו טבלאות.'; + $lang['strnotable'] = 'טבלה לא נמצאה.'; + $lang['strcreatetable'] = 'צור טבלה'; + $lang['strtablename'] = 'שם טבלה'; + $lang['strtableneedsname'] = 'אתה חייב לתת שם לטבלה שלך.'; + $lang['strtableneedsfield'] = 'אתה חייב לציין לפחות שדה אחד.'; + $lang['strtableneedscols'] = 'אתה חייב לציין מספר תקין של עמודות.'; + $lang['strtablecreated'] = 'טבלה נוצרה.'; + $lang['strtablecreatedbad'] = 'יצירת טבלה נכשלה.'; + $lang['strconfdroptable'] = 'אתה בטוח שברצונך למחוק את הטבלה "%s"?'; + $lang['strtabledropped'] = 'טבלה נמחקה.'; + $lang['strtabledroppedbad'] = 'מחיקת טבלה נכשלה.'; + $lang['strconfemptytable'] = 'האם אתה בטוח שברצונך לרוקן את הטבלה "%s"?'; + $lang['strtableemptied'] = 'טבלה רוקנה.'; + $lang['strtableemptiedbad'] = 'ריקון טבלה נכשל.'; + $lang['strinsertrow'] = 'הכנס שדה'; + $lang['strrowinserted'] = 'שדה הוכנס.'; + $lang['strrowinsertedbad'] = 'הכנסת שדה נכשלה.'; + $lang['streditrow'] = 'ערוך שדה'; + $lang['strrowupdated'] = 'שדה עודכן.'; + $lang['strrowupdatedbad'] = 'עידכון שדה נכשל.'; + $lang['strdeleterow'] = 'מחק שדה'; + $lang['strconfdeleterow'] = 'האם אתה בטוח שברצונך למחוק את השדה הזה?'; + $lang['strrowdeleted'] = 'שדה נמחק.'; + $lang['strrowdeletedbad'] = 'מחיקת שדה נכשל.'; + $lang['strinsertandrepeat'] = 'חזור &הכנס '; + $lang['strfield'] = 'שדה'; + $lang['strnumfields'] = 'מספר השדות'; + $lang['strselectallfields'] = 'בחר את כל השדות'; + $lang['strselectneedscol'] = 'אתה חייב להראות לפחות שדה אחד'; + $lang['strselectunary'] = 'Unary operators cannot have values.'; + $lang['straltercolumn'] = 'ערוך עמודה'; + $lang['strcolumnaltered'] = 'עמודה נערכה'; + $lang['strcolumnalteredbad'] = 'עריכת עמודה נכשלה.'; + $lang['strconfdropcolumn'] = 'האם אתה בטוח שברצונך למחוק את העמודה "%s" מהטבלה "%squot;?'; + $lang['strcolumndropped'] = 'עמודה נחמקה.'; + $lang['strcolumndroppedbad'] = 'מחיקת עמודה נכשלה.'; + $lang['straddcolumn'] = 'הוסף עמודה.'; + $lang['strcolumnadded'] = 'עמודה נוספה.'; + $lang['strcolumnaddedbad'] = 'הוספת עמודה נכשלה'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'טבלה נערכה.'; + $lang['strtablealteredbad'] = 'עריכת טבלה נכשלה.'; + $lang['strdataonly'] = 'מידע בלבד'; + $lang['strstructureonly'] = 'מבנה בילבד'; + $lang['strstructureanddata'] = 'מבנה ונתונים'; + $lang['strtabbed'] = 'תוייק'; + $lang['strauto'] = 'אוטומטי'; + + // Users + $lang['struser'] = 'משתמש'; + $lang['strusers'] = 'משתמשים'; + $lang['strusername'] = 'שם משתמש'; + $lang['strpassword'] = 'סיסמה'; + $lang['strsuper'] = 'משתמש על?'; + $lang['strcreatedb'] = 'יצירת בסיס נתונים?'; + $lang['strexpires'] = 'Expires'; + $lang['strsessiondefaults'] = 'הפעלת ברירת מחדל'; + $lang['strnousers'] = 'לא נמצאו משתמשים'; + $lang['struserupdated'] = 'משתמש עודכן.'; + $lang['struserupdatedbad'] = 'עדכון משתמש נכשל.'; + $lang['strshowallusers'] = 'הראה את כל המשתמשים.'; + $lang['strcreateuser'] = 'צור משתמש'; + $lang['struserneedsname'] = 'אתה חייב לתת שם למשתמש שלך.'; + $lang['strusercreated'] = 'משתמש נוצר.'; + $lang['strusercreatedbad'] = 'יצירת משתמש נכשל.'; + $lang['strconfdropuser'] = 'אתה בטוח שברצונך למחוק את המשתמש "%s"?'; + $lang['struserdropped'] = 'משתמש נמחק.'; + $lang['struserdroppedbad'] = 'מחיקת משתמש נכשל.'; + $lang['straccount'] = 'חשבון'; + $lang['strchangepassword'] = 'שנה סיסמה'; + $lang['strpasswordchanged'] = 'סיסמה שונתה.'; + $lang['strpasswordchangedbad'] = 'נכשל בשינוי סיסמה.'; + $lang['strpasswordshort'] = 'סיסמה קצרה מידי.'; + $lang['strpasswordconfirm'] = 'סיסמה אינה תואמת לאישורה.'; + + // Groups + $lang['strgroup'] = 'קבוצה'; + $lang['strgroups'] = 'קבוצות'; + $lang['strnogroup'] = 'קבוצה לא נמצאה.'; + $lang['strnogroups'] = 'לא נמצאו קבוצות.'; + $lang['strcreategroup'] = 'צור קבוצה'; + $lang['strshowallgroups'] = 'הראה את כל הקבוצות'; + $lang['strgroupneedsname'] = 'אתה חייב לתת שם לקבוצה שלך.'; + $lang['strgroupcreated'] = 'קבוצה נוצרה.'; + $lang['strgroupcreatedbad'] = 'יצירת קבוצה נכשלה.'; + $lang['strconfdropgroup'] = 'האם אתה בטוח שברצונך למחוק את הקבוצה "%s"?'; + $lang['strgroupdropped'] = 'קבוצה נמחקה.'; + $lang['strgroupdroppedbad'] = 'מחיקת קבוצה נכשלה.'; + $lang['strmembers'] = 'חברים'; + $lang['straddmember'] = 'הוסף חבר'; + $lang['strmemberadded'] = 'חבר נוסף.'; + $lang['strmemberaddedbad'] = 'הוספת חבר נכשלה.'; + $lang['strdropmember'] = 'מחק חבר.'; + $lang['strconfdropmember'] = 'באם אתה בטוח שברצונך למחוק את החבר "%s" מהקבוצה "%s"?'; + $lang['strmemberdropped'] = 'חבר נמחק.'; + $lang['strmemberdroppedbad'] = 'מחיקת חבר נכשלה.'; + + // Privileges + $lang['strprivilege'] = 'זכות'; + $lang['strprivileges'] = 'זכויות'; + $lang['strnoprivileges'] = 'לנתון זה יש זכויות ברירת מחדל של בעלים.'; + $lang['strgrant'] = 'Grant'; + $lang['strrevoke'] = 'Revoke'; + $lang['strgranted'] = 'זכויות שונו.'; + $lang['strgrantfailed'] = 'שינוי זכויות נכשל.'; + $lang['strgrantbad'] = 'אתה חייב לציין לפחות משתמש אחד אם קבוצה בעלי זכות.'; + $lang['strgrantor'] = 'Grantor'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'בסיס נתונים'; + $lang['strdatabases'] = 'בסיסי נתונים'; + $lang['strshowalldatabases'] = 'הראה את כל בסיסי הנתונים.'; + $lang['strnodatabase'] = 'בסיס נתונים לא נמצאה.'; + $lang['strnodatabases'] = 'לא נמצאו בסיסי נתונים.'; + $lang['strcreatedatabase'] = 'צור בסיס נתונים.'; + $lang['strdatabasename'] = 'שם בסיס הנתונים'; + $lang['strdatabaseneedsname'] = 'אתה חייב לתת שם לבסיס הנתונים שלך'; + $lang['strdatabasecreated'] = 'בסיס נתונים נוצר'; + $lang['strdatabasecreatedbad'] = 'יצירת בסיס נתונים נכשלה.'; + $lang['strconfdropdatabase'] = 'אתה בטוח שברצונך למחוק את בסיס הנתונים "%s"?'; + $lang['strdatabasedropped'] = 'מסד נתונים נמחק'; + $lang['strdatabasedroppedbad'] = 'מחיקת מסד הנתונים נכשלה.'; + $lang['strentersql'] = 'הכנס את ה SQL כדאי להריץ אותו פה:'; + $lang['strsqlexecuted'] = 'SQL הורץ.'; + $lang['strvacuumgood'] = 'ריק הושלם.'; + $lang['strvacuumbad'] = 'ריק נכשל.'; + $lang['stranalyzegood'] = 'ניתוח הושלם.'; + $lang['stranalyzebad'] = 'ניתוח נכשל.'; + $lang['strreindexgood'] = 'אנידוקס מחדש הושלם.'; + $lang['strreindexbad'] = 'אנידוקס מחדש נכשל.'; + $lang['strfull'] = 'מלא'; + $lang['strfreeze'] = 'Freeze'; + $lang['strforce'] = 'כוח'; + $lang['strsignalsent'] = 'שלח אות.'; + $lang['strsignalsentbad'] = 'שליחת אות נכשלה.'; + $lang['strallobjects'] = 'כל העצמים'; + + // Views + $lang['strview'] = 'צפייה'; + $lang['strviews'] = 'צפיות'; + $lang['strshowallviews'] = 'הראה את כל הצפיות'; + $lang['strnoview'] = 'צפייה לא נמצאה.'; + $lang['strnoviews'] = 'צפיות לא נמצאו.'; + $lang['strcreateview'] = 'צור צפייה'; + $lang['strviewname'] = 'שם הצפייה'; + $lang['strviewneedsname'] = 'אתה חייב לתת שם לצפייה'; + $lang['strviewneedsdef'] = 'אתה חייב לציין הגדרה לצפייה.'; + $lang['strviewneedsfields'] = 'אתה חייב לתת את העמודה אשר אתה רוצה לצפייה.'; + $lang['strviewcreated'] = 'צפייה נוצרה.'; + $lang['strviewcreatedbad'] = 'יצירת צפייה נכשלה.'; + $lang['strconfdropview'] = 'האם אתה בטוח שברצונך למחוק את הצפייה "%s"'; + $lang['strviewdropped'] = 'צפייה נמחקה.'; + $lang['strviewdroppedbad'] = 'מחיקת צפייה נכשלה.'; + $lang['strviewupdated'] = 'צפייה עודכנה.'; + $lang['strviewupdatedbad'] = 'עדכון צפייה נכשלה.'; + $lang['strviewlink'] = 'קישורי מפתח'; + $lang['strviewconditions'] = 'Additional Conditions'; + $lang['strcreateviewwiz'] = 'צור צפייה בעזרת אשף.'; + + // Sequences + $lang['strsequence'] = 'נוסחה'; + $lang['strsequences'] = 'נוסחאות'; + $lang['strshowallsequences'] = 'הראה את כל הנוסחאות.'; + $lang['strnosequence'] = 'נוסחה לא נמצאה.'; + $lang['strnosequences'] = 'לא נמצאו נוסחאות.'; + $lang['strcreatesequence'] = 'צור נוסחה'; + $lang['strlastvalue'] = 'ערך אחרון'; + $lang['strincrementby'] = 'Increment by'; + $lang['strstartvalue'] = 'ערך התחלה'; + $lang['strmaxvalue'] = 'ערך מקסימלי'; + $lang['strminvalue'] = 'ערך מינימלי'; + $lang['strcachevalue'] = 'ערך מטמון'; + $lang['strlogcount'] = 'ספירת יומן'; + $lang['striscycled'] = 'Is cycled?'; + $lang['strsequenceneedsname'] = 'אתה חייב לציין שם לנוסחה שלך.'; + $lang['strsequencecreated'] = 'נוסחה נוצרה.'; + $lang['strsequencecreatedbad'] = 'יצירת נוסחה נכשלה.'; + $lang['strconfdropsequence'] = 'האם אתה בטוח שברצונך למחוק את הנוסחה "%s"?'; + $lang['strsequencedropped'] = 'נוסחה נמחקה..'; + $lang['strsequencedroppedbad'] = 'נחיקת נוסחה נכשלה.'; + $lang['strsequencereset'] = 'נוסחה אותחלה.'; + $lang['strsequenceresetbad'] = 'איתחול נוסחה נכשלה.'; + + // Indexes + $lang['strindex'] = 'אינדקס'; + $lang['strindexes'] = 'אינדקסים'; + $lang['strindexname'] = 'שם האינדקס'; + $lang['strshowallindexes'] = 'צפה בכל האינדקסים'; + $lang['strnoindex'] = 'אינדקס לא נמצאה.'; + $lang['strnoindexes'] = 'לא נמצאו אינדקסים.'; + $lang['strcreateindex'] = 'צור אינקדס.'; + $lang['strtabname'] = 'תקייה אינקדס'; + $lang['strcolumnname'] = 'שם העמודה'; + $lang['strindexneedsname'] = 'אתה חייב לציין שם לאינדקס.'; + $lang['strindexneedscols'] = 'אינדקסים דורשים מספר תקין של עמודות.'; + $lang['strindexcreated'] = 'אינדקס נוצר.'; + $lang['strindexcreatedbad'] = 'יצירת אינקדס נכשלה.'; + $lang['strconfdropindex'] = 'האם אתה בטוח שברצונל למחוק את האינקדס "%s"?'; + $lang['strindexdropped'] = 'אינדקס נמחק.'; + $lang['strindexdroppedbad'] = 'מחיקת אינדקס נכשלה.'; + $lang['strkeyname'] = 'שם המפתח'; + $lang['struniquekey'] = 'מםתח יחודי'; + $lang['strprimarykey'] = 'מפתח ראשי'; + $lang['strindextype'] = 'סוג האינדקס'; + $lang['strtablecolumnlist'] = 'עמודות בטבלה'; + $lang['strindexcolumnlist'] = 'עמודות באינדקס'; + $lang['strconfcluster'] = 'האם אתה בטוח שברצונך למחוק את האשכול "%s"?'; + $lang['strclusteredgood'] = 'אשכול הושלם.'; + $lang['strclusteredbad'] = 'אשכול נכשל.'; + + // Rules + $lang['strrules'] = 'חוקים'; + $lang['strrule'] = 'חוק'; + $lang['strshowallrules'] = 'הראה את כל החוקים'; + $lang['strnorule'] = 'חוק לא נמצאה.'; + $lang['strnorules'] = 'לא נמצאו חוקים.'; + $lang['strcreaterule'] = 'צור חוק'; + $lang['strrulename'] = 'שם החוק'; + $lang['strruleneedsname'] = 'אתה חייב לציין שם לחוק.'; + $lang['strrulecreated'] = 'חוק נוצר.'; + $lang['strrulecreatedbad'] = 'יצירת חוק נכשלה.'; + $lang['strconfdroprule'] = 'האם אתה בטוח שברצונך למחוק את החוק "%s" מ "l%s"?'; + $lang['strruledropped'] = 'חוק נמחק.'; + $lang['strruledroppedbad'] = 'מחיקת חוק נכשלה.'; + + // Constraints + $lang['strconstraints'] = 'מבנים'; + $lang['strshowallconstraints'] = 'הראה את כל המבנים.'; + $lang['strnoconstraints'] = 'לא נמצאו מבנים.'; + $lang['strcreateconstraint'] = 'צור מבנה'; + $lang['strconstraintcreated'] = 'מבנה נוצר.'; + $lang['strconstraintcreatedbad'] = 'יצירת מבנה נכשלה.'; + $lang['strconfdropconstraint'] = 'האם אתה בטוח שברצונך למחוק את הבמנה "%s" מ "%s"?'; + $lang['strconstraintdropped'] = 'מבנה נמחק.'; + $lang['strconstraintdroppedbad'] = 'מחיקת מבנה נכשלה.'; + $lang['straddcheck'] = 'הוסף בדיקה'; + $lang['strcheckneedsdefinition'] = 'בדיקת מבנה זקוקה להגדרה.'; + $lang['strcheckadded'] = 'בדיקה מבנה נוספה.'; + $lang['strcheckaddedbad'] = 'בדיקת מבנה נכשלה.'; + $lang['straddpk'] = 'הוסף מפתח ראשי'; + $lang['strpkneedscols'] = 'מפתח ראשי דורש לפחות עמודה אחת.'; + $lang['strpkadded'] = 'מפתח ראשי נוסף.'; + $lang['strpkaddedbad'] = 'הוספת מפתח ראשי נכשלה.'; + $lang['stradduniq'] = 'הוסף מפתח מיוחד.'; + $lang['struniqneedscols'] = 'מפתח מיוחד דורש לפחות עמודה אחת.'; + $lang['struniqadded'] = 'מפתח מיוחד נוסף.'; + $lang['struniqaddedbad'] = 'נוספת מפתח מיוחד נכשלה.'; + $lang['straddfk'] = 'הוסף מפתח זר'; + $lang['strfkneedscols'] = 'מפתח זר דורש לפתוח עמודה אחת.'; + $lang['strfkneedstarget'] = 'מפתח זר דורש טבלת מטרה.'; + $lang['strfkadded'] = 'מפתח זר נוסף.'; + $lang['strfkaddedbad'] = 'יצירת מפתח זר נכשלה.'; + $lang['strfktarget'] = 'טבלת מטרה'; + $lang['strfkcolumnlist'] = 'עמודות במפתח'; + $lang['strondelete'] = 'DELETE ב'; + $lang['stronupdate'] = 'UPDATE ב'; + + // Functions + $lang['strfunction'] = 'פונקציה'; + $lang['strfunctions'] = 'פונקציות'; + $lang['strshowallfunctions'] = 'הראה את כל הפונקציות'; + $lang['strnofunction'] = 'פונקציה לא נמצאה.'; + $lang['strnofunctions'] = 'לא נמצאו פונקציות.'; + $lang['strcreateplfunction'] = 'צור פונקצית SQL/PL'; + $lang['strcreateinternalfunction'] = 'צור פונקציה פנימית'; + $lang['strcreatecfunction'] = 'צור פונקצית C'; + $lang['strfunctionname'] = 'שם הפונקציה'; + $lang['strreturns'] = 'חזרות'; + $lang['strarguments'] = 'ארגומנטים'; + $lang['strproglanguage'] = 'שפת תיכנות'; + $lang['strfunctionneedsname'] = 'אתה חייב לתת שם לפונקציה שלך.'; + $lang['strfunctionneedsdef'] = 'אתה חייב לציין הגדרה לפונקציה.'; + $lang['strfunctioncreated'] = 'פונקצייה נוצרה.'; + $lang['strfunctioncreatedbad'] = 'יצירת פונקצייה נכשלה.'; + $lang['strconfdropfunction'] = 'האם אתה בטוח שברצונך למחוק את הפונקצייה "%s"?'; + $lang['strfunctiondropped'] = 'פונקצייה נמחקה.'; + $lang['strfunctiondroppedbad'] = 'מחיקת פונקציה נכשלה.'; + $lang['strfunctionupdated'] = 'פונקציה עודכנה.'; + $lang['strfunctionupdatedbad'] = 'עדכון פונקציה נכשל.'; + $lang['strobjectfile'] = 'קובץ אובייקט'; + $lang['strlinksymbol'] = 'קישור סימלי'; + + // Triggers + $lang['strtrigger'] = 'זרז'; + $lang['strtriggers'] = 'זרזים'; + $lang['strshowalltriggers'] = 'הראה את כל הזרזים'; + $lang['strnotrigger'] = 'זרז לא נימצאה.'; + $lang['strnotriggers'] = 'לא נימצאו זרזים.'; + $lang['strcreatetrigger'] = 'צור זרז'; + $lang['strtriggerneedsname'] = 'אתה חייב לציין שם לזרז.'; + $lang['strtriggerneedsfunc'] = 'אתה חייב לציין פונקציה לזרז.'; + $lang['strtriggercreated'] = 'זרז נוצר.'; + $lang['strtriggercreatedbad'] = 'יצירת זרז נכשלה.'; + $lang['strconfdroptrigger'] = 'האם אתה בטוח שברצונך למחוק את הזרז "%s" מ "%s"?'; + $lang['strtriggerdropped'] = 'זרז נמחק.'; + $lang['strtriggerdroppedbad'] = 'מחיקת זרז נכשלה.'; + $lang['strtriggeraltered'] = 'זרז נערך.'; + $lang['strtriggeralteredbad'] = 'עריכת זרז נכשלה.'; + + // Types + $lang['strtype'] = 'סוג'; + $lang['strtypes'] = 'סוגים'; + $lang['strshowalltypes'] = 'הראה את כל הסוגים.'; + $lang['strnotype'] = 'סוג לא נמצאה.'; + $lang['strnotypes'] = 'לא נמצאו סוגים.'; + $lang['strcreatetype'] = 'צור סוג'; + $lang['strcreatecomptype'] = 'Create composite type'; + $lang['strtypeneedsfield'] = 'אתה חייב לציין לפחות שדה אחד.'; + $lang['strtypeneedscols'] = 'אתה חייב לציין מספר תקין של שדות.'; + $lang['strtypename'] = 'שם הסוג'; + $lang['strinputfn'] = 'פונקצית קלט'; + $lang['stroutputfn'] = 'פונקצית פלט'; + $lang['strpassbyval'] = 'Passed by val?'; + $lang['stralignment'] = 'Alignment'; + $lang['strelement'] = 'אלמנט'; + $lang['strdelimiter'] = 'Delimiter'; + $lang['strstorage'] = 'אחסנה'; + $lang['strtypeneedsname'] = 'אתה חייב לציין שם לסוג.'; + $lang['strtypeneedslen'] = 'אתה חייב לציין אורך לסוג.'; + $lang['strtypecreated'] = 'סוג נוצר.'; + $lang['strtypecreatedbad'] = 'יצירת סוג נכשלה.'; + $lang['strconfdroptype'] = 'האם אתה בטוח שברצונך למחוק את הסוג "%s"?'; + $lang['strtypedropped'] = 'סוג נמחק.'; + $lang['strtypedroppedbad'] = 'מחיקת סוג נכשלה.'; + $lang['strflavor'] = 'Flavor'; + $lang['strbasetype'] = 'בסיס'; + $lang['strcompositetype'] = 'Composite'; + $lang['strpseudotype'] = 'פאסדו'; + + // Schemas + $lang['strschema'] = 'תרשים'; + $lang['strschemas'] = 'תרשמים'; + $lang['strshowallschemas'] = 'הראה את כל התרשימים'; + $lang['strnoschema'] = 'תרשים לא נמצאה.'; + $lang['strnoschemas'] = 'לא נמצאו תרשימים.'; + $lang['strcreateschema'] = 'צור תרשים'; + $lang['strschemaname'] = 'שם התרשים'; + $lang['strschemaneedsname'] = 'אתה חייב לציין שם לתרשים.'; + $lang['strschemacreated'] = 'תרשים נוצר'; + $lang['strschemacreatedbad'] = 'יצירת תרשים נכשלה.'; + $lang['strconfdropschema'] = 'האם אתה בטוח שברצונך למחוק את התרשים "?"?'; + $lang['strschemadropped'] = 'תרשים נמחק.'; + $lang['strschemadroppedbad'] = 'מחיקת תרשים נכשלה.'; + $lang['strschemaaltered'] = 'תרשים נערך.'; + $lang['strschemaalteredbad'] = 'עריכת תרשים נכשלה.'; + $lang['strsearchpath'] = 'חיפוש מיקום התרשים.'; + + // Reports + + // Domains + $lang['strdomain'] = 'תחום'; + $lang['strdomains'] = 'תחומים'; + $lang['strshowalldomains'] = 'הראה את כל התחומים'; + $lang['strnodomains'] = 'לא נמצאו תחומים.'; + $lang['strcreatedomain'] = 'צור תחום'; + $lang['strdomaindropped'] = 'תחום נמחק.'; + $lang['strdomaindroppedbad'] = 'מחיקת תחום נכשלה.'; + $lang['strconfdropdomain'] = 'האם אתה בטוח שברצונך למחוק את התחום "%s"?'; + $lang['strdomainneedsname'] = 'אתה חייב לציין שם לתחום שלך.'; + $lang['strdomaincreated'] = 'תחום נוצר.'; + $lang['strdomaincreatedbad'] = 'יצירת תחום נכשלה.'; + $lang['strdomainaltered'] = 'תחום נערך.'; + $lang['strdomainalteredbad'] = 'עריכת תחום נכשלה.'; + + // Operators + $lang['stroperator'] = 'מפעיל'; + $lang['stroperators'] = 'מפעילים'; + $lang['strshowalloperators'] = 'הראה את כל המפעילים'; + $lang['strnooperator'] = 'מפעיל לא נמצאה.'; + $lang['strnooperators'] = 'לא נמצאו מפעילים.'; + $lang['strcreateoperator'] = 'צור מפעיל'; + $lang['strleftarg'] = 'סידור סוג לשמאל'; + $lang['strrightarg'] = 'סידור שמאל לימין'; + $lang['strcommutator'] = 'Commutator'; + $lang['strnegator'] = 'Negator'; + $lang['strrestrict'] = 'Restrict'; + $lang['strjoin'] = 'חבר'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Merges'; + $lang['strleftsort'] = 'סידור לשמאל'; + $lang['strrightsort'] = 'סידור לימין'; + $lang['strlessthan'] = 'פחות מ'; + $lang['strgreaterthan'] = 'גדול מ'; + $lang['stroperatorneedsname'] = 'אתה חייב לציין שם למפעיל.'; + $lang['stroperatorcreated'] = 'מפעיל נוצר.'; + $lang['stroperatorcreatedbad'] = 'יצירת מפעיל נכשלה.'; + $lang['strconfdropoperator'] = 'האם אתה בטוח שברצונך למחוק את המפעיל "%s"?'; + $lang['stroperatordropped'] = 'מפעיל נמחק.'; + $lang['stroperatordroppedbad'] = 'מחיקת מפעיל נכשלה.'; + + // Casts + $lang['strcasts'] = 'Casts'; + $lang['strnocasts'] = 'No casts found.'; + $lang['strsourcetype'] = 'סוג המקור'; + $lang['strtargettype'] = 'סוג המטרה'; + $lang['strimplicit'] = 'Implicit'; + $lang['strinassignment'] = 'In assignment'; + $lang['strbinarycompat'] = '(Binary compatible)'; + + // Conversions + $lang['strconversions'] = 'המרה'; + $lang['strnoconversions'] = 'לא נימצאה המרה.'; + $lang['strsourceencoding'] = 'סוג הקידוד של המקור'; + $lang['strtargetencoding'] = 'סוג הקידוד של המטרה'; + + // Languages + $lang['strlanguages'] = 'שפות'; + $lang['strnolanguages'] = 'לא נמצאו שפות'; + $lang['strtrusted'] = 'Trusted'; + + // Info + $lang['strnoinfo'] = 'אין מידע זמין.'; + $lang['strreferringtables'] = 'Referring tables'; + $lang['strparenttables'] = 'Parent tables'; + $lang['strchildtables'] = 'Child tables'; + + // Aggregates + $lang['straggregates'] = 'Aggregates'; + $lang['strnoaggregates'] = 'No aggregates found.'; + $lang['stralltypes'] = '(כל הסוגים)'; + + // Operator Classes + $lang['stropclasses'] = 'Op Classes'; + $lang['strnoopclasses'] = 'No operator classes found.'; + $lang['straccessmethod'] = 'שיטת גישה'; + + // Stats and performance + $lang['strrowperf'] = 'תפקוד שדות'; + $lang['strioperf'] = 'תפקוד קלט/פלט'; + $lang['stridxrowperf'] = 'תפקוד אנדוקס שדה'; + $lang['stridxioperf'] = 'תפקוד אנדוקס קלט/פלט'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sequential'; + $lang['strscan'] = 'חיפוש'; + $lang['strread'] = 'קרא'; + $lang['strfetch'] = 'Fetch'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'מטמון'; + $lang['strdisk'] = 'דיסק'; + $lang['strrows2'] = 'שורה'; + + // Tablespaces + $lang['strtablespace'] = 'מרחבון'; + $lang['strtablespaces'] = 'מרחבונים'; + $lang['strshowalltablespaces'] = 'הראה את כל המרחבונים'; + $lang['strnotablespaces'] = 'לא נמצאו מרחבונים.'; + $lang['strcreatetablespace'] = 'צור מרחבון'; + $lang['strlocation'] = 'מיקום'; + $lang['strtablespaceneedsname'] = 'אתה חייב לציין שם למרחבון.'; + $lang['strtablespaceneedsloc'] = 'אתה חייב לציין תיקיה שבה יבצר המרחבון.'; + $lang['strtablespacecreated'] = 'מרחבון נוצר.'; + $lang['strtablespacecreatedbad'] = 'יצירת מרחבון נכשלה.'; + $lang['strconfdroptablespace'] = 'האם אתה בטוח שברצונך למחוק את המרחבון "%s"?'; + $lang['strtablespacedropped'] = 'מרחבון נמחק.'; + $lang['strtablespacedroppedbad'] = 'מחיקת מרחבון נכשלה.'; + $lang['strtablespacealtered'] = 'מרחבון נערך.'; + $lang['strtablespacealteredbad'] = 'עריכת מרחבון מכשלה.'; + + // Miscellaneous + $lang['strtopbar'] = '%s רץ על %s:%s -- אתה מחובר כמשתמש - "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'עזרה'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/hungarian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/hungarian.php new file mode 100644 index 00000000..125109b9 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/hungarian.php @@ -0,0 +1,901 @@ +<?php + + /** + * Hungarian language file for phpPgAdmin. + * maintainer: Sulyok Peti <sulyokpeti@gmail.com> + * + * + */ + + // Language and character set + $lang['applang'] = 'Magyar'; + $lang['applocale'] = 'hu-HU'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Üdvözli a phpPgAdmin!'; + $lang['strppahome'] = 'A phpPgAdmin honlapja'; + $lang['strpgsqlhome'] = 'A PostgreSQL honlapja'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'A PostgreSQL (helyi) dokumentációja'; + $lang['strreportbug'] = 'Hibajelentés feladása'; + $lang['strviewfaq'] = 'GYIK megtekintése'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Bejelentkezés'; + $lang['strloginfailed'] = 'Nem sikerült bejelentkezni'; + $lang['strlogindisallowed'] = 'Biztonsági okból engedélyezettlen a bejelentkezés.'; + $lang['strserver'] = 'Szolgáló'; + $lang['strservers'] = 'Szolgálók'; + $lang['strgroupservers'] = 'Szolgálók „%s” csoportban'; + $lang['strallservers'] = 'Minden szolgáló'; + $lang['strintroduction'] = 'Bevezető'; + $lang['strhost'] = 'Gazda'; + $lang['strport'] = 'Kapu'; + $lang['strlogout'] = 'Kilépés'; + $lang['strowner'] = 'Tulajdonos'; + $lang['straction'] = 'Művelet'; + $lang['stractions'] = 'Műveletek'; + $lang['strname'] = 'Név'; + $lang['strdefinition'] = 'Definíció'; + $lang['strproperties'] = 'Tulajdonságok'; + $lang['strbrowse'] = 'Tallóz'; + $lang['strenable'] = 'Enged'; + $lang['strdisable'] = 'Tilt'; + $lang['strdrop'] = 'Töröl'; + $lang['strdropped'] = 'Törlölve'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Not Null'; + $lang['strprev'] = '< Előző'; + $lang['strnext'] = 'Következő >'; + $lang['strfirst'] = '<< Első'; + $lang['strlast'] = 'Utolsó >>'; + $lang['strfailed'] = 'Sikertelen'; + $lang['strcreate'] = 'Teremt'; + $lang['strcreated'] = 'Megteremtve'; + $lang['strcomment'] = 'Megjegyzés'; + $lang['strlength'] = 'Hossz'; + $lang['strdefault'] = 'Alapértelmezés'; + $lang['stralter'] = 'Módosít'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Mégsem'; + $lang['strkill'] = 'Öl'; + $lang['strac'] = 'Önműködő kiegészítés engedélyezése'; + $lang['strsave'] = 'Ment'; + $lang['strreset'] = 'Újra'; + $lang['strrestart'] = 'Újraindít'; + $lang['strinsert'] = 'Beszúr'; + $lang['strselect'] = 'Kiválaszt'; + $lang['strdelete'] = 'Töröl'; + $lang['strupdate'] = 'Időszerűsít'; + $lang['strreferences'] = 'Hivatkozások'; + $lang['stryes'] = 'Igen'; + $lang['strno'] = 'Nem'; + $lang['strtrue'] = 'IGAZ'; + $lang['strfalse'] = 'HAMIS'; + $lang['stredit'] = 'Szerkeszt'; + $lang['strcolumn'] = 'Oszlop'; + $lang['strcolumns'] = 'Oszlopok'; + $lang['strrows'] = 'sor'; + $lang['strrowsaff'] = 'sor érintett.'; + $lang['strobjects'] = 'objektum'; + $lang['strback'] = 'Vissza'; + $lang['strqueryresults'] = 'Lekérdezés eredményei'; + $lang['strshow'] = 'Megjelenít'; + $lang['strempty'] = 'Ürít'; + $lang['strlanguage'] = 'Nyelv'; + $lang['strencoding'] = 'Kódolás'; + $lang['strvalue'] = 'Érték'; + $lang['strunique'] = 'egyedi'; + $lang['strprimary'] = 'Elsődleges'; + $lang['strexport'] = 'Kivisz'; + $lang['strimport'] = 'Behoz'; + $lang['strallowednulls'] = 'Engedélyezett NULL betűk'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Üres szöveg/mező'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Gazda'; + $lang['strvacuum'] = 'Takarít'; + $lang['stranalyze'] = 'Elemez'; + $lang['strclusterindex'] = 'Fürtöz'; + $lang['strclustered'] = 'Fürtözve?'; + $lang['strreindex'] = 'Újraindexel'; + $lang['strexecute'] = 'Végrehajt'; + $lang['stradd'] = 'Bővít'; + $lang['strevent'] = 'Esemény'; + $lang['strwhere'] = 'Hol'; + $lang['strinstead'] = 'Inkább'; + $lang['strwhen'] = 'Mikor'; + $lang['strformat'] = 'Alak'; + $lang['strdata'] = 'Adatok'; + $lang['strconfirm'] = 'Megerősít'; + $lang['strexpression'] = 'Kifejezés'; + $lang['strellipsis'] = '…'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Kinyit'; + $lang['strcollapse'] = 'Összecsuk'; + $lang['strfind'] = 'Keres'; + $lang['stroptions'] = 'Részletek'; + $lang['strrefresh'] = 'Frissít'; + $lang['strdownload'] = 'Letöltés'; + $lang['strdownloadgzipped'] = 'Gzippel tömörített letöltés'; + $lang['strinfo'] = 'Infó'; + $lang['stroids'] = 'OID-k'; + $lang['stradvanced'] = 'Haladó'; + $lang['strvariables'] = 'Változók'; + $lang['strprocess'] = 'Folyamat'; + $lang['strprocesses'] = 'Folyamatok'; + $lang['strsetting'] = 'Beállítás'; + $lang['streditsql'] = 'SQL-szerkesztés'; + $lang['strruntime'] = 'Teljes futási idő: %s ms'; + $lang['strpaginate'] = 'Oldalakra tördelés'; + $lang['struploadscript'] = 'vagy egy SQL-írás feltöltése:'; + $lang['strstarttime'] = 'Kezdés ideje'; + $lang['strfile'] = 'Fájl'; + $lang['strfileimported'] = 'Fájl behozva.'; + $lang['strtrycred'] = 'Használja minden kiszolgálóhoz e beállításokat'; + $lang['strconfdropcred'] = 'Biztonság okán a szétválás megszünteti a megosztott bejelentkező adatait. Biztosan szét akar válni?'; + $lang['stractionsonmultiplelines'] = 'Több soros műveletek'; + $lang['strselectall'] = 'Mindent kiválaszt'; + $lang['strunselectall'] = 'Semmit sem választ ki'; + $lang['strlocale'] = 'Helyszín'; + $lang['strcollation'] = 'Összerakás'; + $lang['strctype'] = 'Betűtípus'; + $lang['strdefaultvalues'] = 'Alapértékek'; + $lang['strnewvalues'] = 'Új értékek'; + $lang['strstart'] = 'Indít'; + $lang['strstop'] = 'Leállít'; + $lang['strgotoppage'] = 'vissza a tetejére'; + $lang['strtheme'] = 'Téma'; + $lang['strcluster'] = 'Fürt'; + + // Admin + $lang['stradminondatabase'] = 'A következő adminisztratív feladatok %s adatbázis egészére vonatkoznak.'; + $lang['stradminontable'] = 'A következő adminisztratív feladatok %s táblára vonatkoznak.'; + + // User-supplied SQL history + $lang['strhistory'] = 'Előzmények'; + $lang['strnohistory'] = 'Nincs előzmény.'; + $lang['strclearhistory'] = 'Előzményeket töröl'; + $lang['strdelhistory'] = 'Előzményekből töröl'; + $lang['strconfdelhistory'] = 'Tényleg töröli e kérelmet az előzményekből?'; + $lang['strconfclearhistory'] = 'Tényleg töröli az előzményeket?'; + $lang['strnodatabaseselected'] = 'Ki kell választani az adatbázist.'; + + // Database sizes + $lang['strnoaccess'] = 'Nincs hozzáférés'; + $lang['strsize'] = 'Méret'; + $lang['strbytes'] = 'bájt'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Ez alkalmazás legjobban kereteket támogató böngészővel működik, de használható keretek nélkül is az alábbi hivatkozásra kattintva.'; + $lang['strnoframeslink'] = 'Keretek nélküli használat'; + $lang['strbadconfig'] = 'A config.inc.php elavult. Újra kell teremteni az új config.inc.php-dist fájlból.'; + $lang['strnotloaded'] = 'Az ön PHP rendszere nem támogatja a PostgreSQL-t.'; + $lang['strpostgresqlversionnotsupported'] = 'A PostgreSQL e változata nem megfelelő. Kérem telepítse a %s változatot, vagy újabbat!'; + $lang['strbadschema'] = 'A megadott séma érvénytelen.'; + $lang['strbadencoding'] = 'Az ügyfél oldali kódolás beállítása az adatbázisban nem sikerült.'; + $lang['strsqlerror'] = 'SQL hiba:'; + $lang['strinstatement'] = 'A következő kifejezésben:'; + $lang['strinvalidparam'] = 'Érvénytelen paraméterek.'; + $lang['strnodata'] = 'Nincsenek sorok.'; + $lang['strnoobjects'] = 'Nincsenek objektumok.'; + $lang['strrownotunique'] = 'Nincs egyedi azonosító ehhez a sorhoz.'; + $lang['strnouploads'] = 'Fájl feltöltése letiltva.'; + $lang['strimporterror'] = 'Behozatali hiba.'; + $lang['strimporterror-fileformat'] = 'Behozatali hiba: nem sikerült automatikusan megállapítani a fájl formátumát.'; + $lang['strimporterrorline'] = 'Behozatali hiba a %s. sorban.'; + $lang['strimporterrorline-badcolumnnum'] = 'Behozatali hiba a(z) %s. számú sorban: A sor nem tartalmazza a megfelelő számú sort.'; + $lang['strimporterror-uploadedfile'] = 'Behozatali hiba: A fájlt nem sikerült feltülteni a kiszolgálóra.'; + $lang['strcannotdumponwindows'] = 'Összetett tábla ömlesztése és séma nevek Windows-on nem támogatottak.'; + $lang['strinvalidserverparam'] = 'Érvénytelen kiszolgáló paraméterrel próbáltak csatlakozni. Lehet, hogy valaki betörni próbál a rendszerbe.'; + $lang['strnoserversupplied'] = 'Nincs megadva kiszolgáló!'; + $lang['strbadpgdumppath'] = 'Kiviteli hiba: Elbukott a pg_dump végrehajtása (conf/config.inc.php fájlban megadott ösvény: %s). Kérem, javítsa ki ezt a beállításban, és ismételjen.'; + $lang['strbadpgdumpallpath'] = 'Kiviteli hiba: Elbukott a pg_dumpall végrehajtása (conf/config.inc.php fájlban megadott ösvény: %s). Kérem, javítsa ki ezt a beállításban, és ismételjen.'; + $lang['strconnectionfail'] = 'Nem csatlakozhatok a szolgálóhoz.'; + + // Tables + $lang['strtable'] = 'Tábla'; + $lang['strtables'] = 'Táblák'; + $lang['strshowalltables'] = 'Minden tábla megjelenítése'; + $lang['strnotables'] = 'Nincsenek táblák.'; + $lang['strnotable'] = 'Nincs tábla.'; + $lang['strcreatetable'] = 'Táblát teremt'; + $lang['strcreatetablelike'] = 'Táblát teremt mint'; + $lang['strcreatetablelikeparent'] = 'Forrás tábla'; + $lang['strcreatelikewithdefaults'] = 'ALAPÉRTELMEZÉSEKKEL'; + $lang['strcreatelikewithconstraints'] = 'MEGSZORÍTÁSOKKAL'; + $lang['strcreatelikewithindexes'] = 'INDEXEKKEL'; + $lang['strtablename'] = 'Tábla neve'; + $lang['strtableneedsname'] = 'Meg kell adni a tábla nevét.'; + $lang['strtablelikeneedslike'] = 'Meg kell adni a tábla nevét, ahonnan tulajdonságokat lehet másolni.'; + $lang['strtableneedsfield'] = 'Legalább egy oszlopot meg kell adni.'; + $lang['strtableneedscols'] = 'A táblának érvényes számú oszlop kell.'; + $lang['strtablecreated'] = 'A tábla megteremtve.'; + $lang['strtablecreatedbad'] = 'Nem sikerült táblát teremteni.'; + $lang['strconfdroptable'] = 'Biztosan törölni kívánja „%s” táblát?'; + $lang['strtabledropped'] = 'A tábla törölve.'; + $lang['strtabledroppedbad'] = 'Nem sikerült a táblát törölni.'; + $lang['strconfemptytable'] = 'Biztosan ki akarja üríteni „%s” táblát?'; + $lang['strtableemptied'] = 'A tábla kiürítve.'; + $lang['strtableemptiedbad'] = 'Nem sikerült a táblát kiüríteni.'; + $lang['strinsertrow'] = 'Sor beszúrása'; + $lang['strrowinserted'] = 'A sor beszúrva.'; + $lang['strrowinsertedbad'] = 'Nem sikerült a sort beszúrni.'; + $lang['strnofkref'] = 'Nincs %s idegen kulcshoz illő érték.'; + $lang['strrowduplicate'] = 'Nem sikerült sort beszúrni. Dupla beszúrási kísérlet.'; + $lang['streditrow'] = 'Sor szerkesztése'; + $lang['strrowupdated'] = 'A sor időszerűsítve.'; + $lang['strrowupdatedbad'] = 'Nem sikerült a sort időszerűsíteni.'; + $lang['strdeleterow'] = 'Sor törlése'; + $lang['strconfdeleterow'] = 'Biztosan törölni kívánja ezt a sort?'; + $lang['strrowdeleted'] = 'A sor törölve.'; + $lang['strrowdeletedbad'] = 'Nem sikerült a sort törölni.'; + $lang['strinsertandrepeat'] = 'Beszúrás & Ismétlés'; + $lang['strnumcols'] = 'Oszlopok száma'; + $lang['strcolneedsname'] = 'Meg kell adnia az oszlop nevét'; + $lang['strselectallfields'] = 'Minden oszlop kijelölése'; + $lang['strselectneedscol'] = 'Ki kell választani egy oszlopot'; + $lang['strselectunary'] = 'Egyváltozós műveleteknek nem lehetnek értékei'; + $lang['strcolumnaltered'] = 'Az oszlop megváltoztatva.'; + $lang['strcolumnalteredbad'] = 'Nem sikerült az oszlopot megváltoztatni.'; + $lang['strconfdropcolumn'] = 'Biztosan törölni kívánja „%s” oszlopot „%s” táblából?'; + $lang['strcolumndropped'] = 'Az oszlop törölve.'; + $lang['strcolumndroppedbad'] = 'Nem sikerült az oszlopot törölni.'; + $lang['straddcolumn'] = 'Oszloppal bővítés'; + $lang['strcolumnadded'] = 'Oszloppal bővítve.'; + $lang['strcolumnaddedbad'] = 'Nem sikerült az oszloppal bővíteni.'; + $lang['strcascade'] = 'ZUHATAG'; + $lang['strtablealtered'] = 'A tábla megváltoztatva.'; + $lang['strtablealteredbad'] = 'Nem sikerült a táblát megváltoztatni.'; + $lang['strdataonly'] = 'Csak adatok'; + $lang['strstructureonly'] = 'Csak struktúra'; + $lang['strstructureanddata'] = 'Struktúra és adatok'; + $lang['strtabbed'] = 'Füles'; + $lang['strauto'] = 'Autó'; + $lang['strconfvacuumtable'] = 'Biztosan ki akarja takarítani „%s” táblát?'; + $lang['strconfanalyzetable'] = 'Biztosan elemezzük „%s” táblát?'; + $lang['strconfreindextable'] = 'Biztosan újra akarja indexelni „%s” táblát?'; + $lang['strconfclustertable'] = 'Biztosan fürtözni akarja „%s” táblát?'; + $lang['strestimatedrowcount'] = 'Becsült sorok száma'; + $lang['strspecifytabletoanalyze'] = 'Legalább egy elemzendő táblát meg kell adni.'; + $lang['strspecifytabletoempty'] = 'Legalább egy ürítendő táblát meg kell adni.'; + $lang['strspecifytabletodrop'] = 'Legalább egy törlendő táblát meg kell adni.'; + $lang['strspecifytabletovacuum'] = 'Legalább egy takarítandó táblát meg kell adni.'; + $lang['strspecifytabletoreindex'] = 'Legalább egy indexelendő táblát meg kell adni.'; + $lang['strspecifytabletocluster'] = 'Legalább egy fürtözendő táblát meg kell adni.'; + $lang['strnofieldsforinsert'] = 'Oszloptalan táblába nem szúrhat be sort.'; + + // Columns + $lang['strcolprop'] = 'Tábla tulajdonságai'; + $lang['strnotableprovided'] = 'Nincs tábla megadva!'; + + // Users + $lang['struser'] = 'Használó'; + $lang['strusers'] = 'Használók'; + $lang['strusername'] = 'Használó neve'; + $lang['strpassword'] = 'Jelszó'; + $lang['strsuper'] = 'Rendszergazda?'; + $lang['strcreatedb'] = 'Létrehozhat AB-t?'; + $lang['strexpires'] = 'Lejár'; + $lang['strsessiondefaults'] = 'Munkamenet alapértékei'; + $lang['strnousers'] = 'Nincsenek használók.'; + $lang['struserupdated'] = 'Használó időszerűsítve.'; + $lang['struserupdatedbad'] = 'Nem sikerült a használót időszerűsíteni.'; + $lang['strshowallusers'] = 'Minden használó megjelenítése'; + $lang['strcreateuser'] = 'Használó teremtése'; + $lang['struserneedsname'] = 'A használónak nevet kell adni.'; + $lang['strusercreated'] = 'A használó megteremtve.'; + $lang['strusercreatedbad'] = 'Nem sikerült a használót megteremteni.'; + $lang['strconfdropuser'] = 'Biztosan törölni akarja „%s” használót?'; + $lang['struserdropped'] = 'A használó törölve.'; + $lang['struserdroppedbad'] = 'Nem sikerült a használót törölni.'; + $lang['straccount'] = 'Számla'; + $lang['strchangepassword'] = 'Jelszó megváltoztatása'; + $lang['strpasswordchanged'] = 'A jelszó megváltoztatva.'; + $lang['strpasswordchangedbad'] = 'Nem sikerült a jelszót megváltoztatni.'; + $lang['strpasswordshort'] = 'A jelszó túl rövid.'; + $lang['strpasswordconfirm'] = 'A jelszó nem egyezik a megerősítéssel.'; + + // Groups + $lang['strgroup'] = 'Csoport'; + $lang['strgroups'] = 'Csoportok'; + $lang['strshowallgroups'] = 'Minden csoportot megjelenít'; + $lang['strnogroup'] = 'Nincs csoport.'; + $lang['strnogroups'] = 'Nincsenek csoportok.'; + $lang['strcreategroup'] = 'Csoportot teremt'; + $lang['strgroupneedsname'] = 'A csoportnak nevet kell adni.'; + $lang['strgroupcreated'] = 'A csoport megteremtve.'; + $lang['strgroupcreatedbad'] = 'Nem sikerült a csoportot megteremteni.'; + $lang['strconfdropgroup'] = 'Biztosan törölni kívánja „%s” csoportot?'; + $lang['strgroupdropped'] = 'A csoport törölve.'; + $lang['strgroupdroppedbad'] = 'Nem sikerült a csoportot törölni.'; + $lang['strmembers'] = 'Tagok'; + $lang['strmemberof'] = 'Tagja '; + $lang['stradminmembers'] = 'Admin tagok'; + $lang['straddmember'] = 'Tagot vesz fel'; + $lang['strmemberadded'] = 'Tag felvéve.'; + $lang['strmemberaddedbad'] = 'Nem sikerült tagot felvenni.'; + $lang['strdropmember'] = 'Tag kicsapása'; + $lang['strconfdropmember'] = 'Biztosan ki akarja csapni „%s” tagot „%s” csoportból?'; + $lang['strmemberdropped'] = 'A tag kicsapva.'; + $lang['strmemberdroppedbad'] = 'Nem sikerült a tagot kicsapni.'; + + // Roles + $lang['strrole'] = 'Szerep'; + $lang['strroles'] = 'Szerepek'; + $lang['strshowallroles'] = 'Minden szerepet megjelenít'; + $lang['strnoroles'] = 'Nincs szerep.'; + $lang['strinheritsprivs'] = 'Jogosultságokat örököl?'; + $lang['strcreaterole'] = 'Szerepet teremt'; + $lang['strcancreaterole'] = 'Teremthet szerepet?'; + $lang['strrolecreated'] = 'Szerep megteremtve.'; + $lang['strrolecreatedbad'] = 'Nem sikerült szerepet teremteni.'; + $lang['strrolealtered'] = 'Szerep megváltoztatva.'; + $lang['strrolealteredbad'] = 'Nem sikerült szerepet változtatni.'; + $lang['strcanlogin'] = 'Beléphet?'; + $lang['strconnlimit'] = 'Kapcsolat korlátja'; + $lang['strdroprole'] = 'Szerepet töröl'; + $lang['strconfdroprole'] = 'Biztosan töröljük „%s” szerepet?'; + $lang['strroledropped'] = 'Szerep törölve.'; + $lang['strroledroppedbad'] = 'Nem sikerült szerepet törölni.'; + $lang['strnolimit'] = 'Nincs korlát'; + $lang['strnever'] = 'Soha'; + $lang['strroleneedsname'] = 'Nevet kell adni a szerepnek.'; + + // Privileges + $lang['strprivilege'] = 'Jogosultság'; + $lang['strprivileges'] = 'Jogosultságok'; + $lang['strnoprivileges'] = 'Ez objektum alap-jogosultságokkal rendelkezik.'; + $lang['strgrant'] = 'Feljogosít'; + $lang['strrevoke'] = 'Jogosultságot megvon'; + $lang['strgranted'] = 'A jogosultságok megváltoztatva.'; + $lang['strgrantfailed'] = 'Nem sikerült a jogosultságokat megváltoztatni.'; + $lang['strgrantbad'] = 'Legalább egy felhasználót és jogosultságot ki kell választani.'; + $lang['strgrantor'] = 'Jogosító'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Adatbázis'; + $lang['strdatabases'] = 'Adatbázisok'; + $lang['strshowalldatabases'] = 'Minden adatbázist megjelenít'; + $lang['strnodatabases'] = 'Nincs adatbázis.'; + $lang['strcreatedatabase'] = 'Adatbázist teremt'; + $lang['strdatabasename'] = 'Adatbázisnév'; + $lang['strdatabaseneedsname'] = 'Meg kell adni az adatbázis nevét.'; + $lang['strdatabasecreated'] = 'Az adatbázis megteremtve.'; + $lang['strdatabasecreatedbad'] = 'Nem sikerült megteremteni az adatbázist.'; + $lang['strconfdropdatabase'] = 'Biztosan törölni akarja „%s” adatbázist?'; + $lang['strdatabasedropped'] = 'Az adatbázis törölve.'; + $lang['strdatabasedroppedbad'] = 'Nem sikerült törölni az adatbázist.'; + $lang['strentersql'] = 'Írja be a végrehajtandó SQL-kifejezéseket ide:'; + $lang['strsqlexecuted'] = 'Az SQL-kifejezések végrehajtva.'; + $lang['strvacuumgood'] = 'A takarítás kész.'; + $lang['strvacuumbad'] = 'Nem sikerült kitakarítani.'; + $lang['stranalyzegood'] = 'Az elemzés kész.'; + $lang['stranalyzebad'] = 'Nem sikerült kielemezni.'; + $lang['strreindexgood'] = 'Újraindexelés kész.'; + $lang['strreindexbad'] = 'Nem sikerült az újraindexelés.'; + $lang['strfull'] = 'Teljes'; + $lang['strfreeze'] = 'Befagyaszt'; + $lang['strforce'] = 'Kényszerít'; + $lang['strsignalsent'] = 'Jelzés elküldve.'; + $lang['strsignalsentbad'] = 'Nem sikerült jelzést küldeni.'; + $lang['strallobjects'] = 'Minden objektum'; + $lang['strdatabasealtered'] = 'Adatbázis megváltoztatva.'; + $lang['strdatabasealteredbad'] = 'Nem sikerült az adatbázist megváltoztatni.'; + $lang['strspecifydatabasetodrop'] = 'Meg kell adni a törlendő adatbázist'; + $lang['strtemplatedb'] = 'Sablon'; + $lang['strconfanalyzedatabase'] = 'Biztosan elemezni akarja „%s” adatbázis minden tábláját?'; + $lang['strconfvacuumdatabase'] = 'Biztosan takarítani akarja „%s” adatbázis minden tábláját?'; + $lang['strconfreindexdatabase'] = 'Biztosan indexelni akarja „%s” adatbázis minden tábláját?'; + $lang['strconfclusterdatabase'] = 'Biztosan fürtözni akarja „%s” adatbázis minden tábláját?'; + + // Views + $lang['strview'] = 'Nézet'; + $lang['strviews'] = 'Nézetek'; + $lang['strshowallviews'] = 'Minden nézetet megjelenít'; + $lang['strnoview'] = 'Nincs nézet.'; + $lang['strnoviews'] = 'Nincsenek nézetek.'; + $lang['strcreateview'] = 'Nézetet teremt'; + $lang['strviewname'] = 'Nézetnév'; + $lang['strviewneedsname'] = 'Meg kell adni a nézetnevet.'; + $lang['strviewneedsdef'] = 'Meg kell adni a nézet definícióját.'; + $lang['strviewneedsfields'] = 'Meg kell adnia a oszlopokat, amiket ki akar jelölni a nézetben.'; + $lang['strviewcreated'] = 'A nézet megteremtve.'; + $lang['strviewcreatedbad'] = 'Nem sikerült megteremteni a nézetet.'; + $lang['strconfdropview'] = 'Biztosan törölni kívánja „%s” nézetet?'; + $lang['strviewdropped'] = 'A nézet törölve.'; + $lang['strviewdroppedbad'] = 'Nem sikerült törölni a nézetet.'; + $lang['strviewupdated'] = 'A nézet időszerűsítve.'; + $lang['strviewupdatedbad'] = 'Nem sikerült időszerűsíteni a nézetet.'; + $lang['strviewlink'] = 'Hivatkozások'; + $lang['strviewconditions'] = 'További feltételek'; + $lang['strcreateviewwiz'] = 'Nézetet teremt varázslóval'; + $lang['strrenamedupfields'] = 'Másolt mezőket nevez át'; + $lang['strdropdupfields'] = 'Másolt mezőket töröl'; + $lang['strerrordupfields'] = 'Hiba a másolt mezőkben'; + $lang['strviewaltered'] = 'Nézet megváltoztatva.'; + $lang['strviewalteredbad'] = 'Nem sikerült megváltoztatni a nézetet.'; + $lang['strspecifyviewtodrop'] = 'Meg kell adni a törlendő nézetet'; + + // Sequences + $lang['strsequence'] = 'Sorozat'; + $lang['strsequences'] = 'Sorozatok'; + $lang['strshowallsequences'] = 'Minden sorozatot megjelenít'; + $lang['strnosequence'] = 'Nincs sorozat.'; + $lang['strnosequences'] = 'Nincsenek sorozatok.'; + $lang['strcreatesequence'] = 'Sorozatot teremt'; + $lang['strlastvalue'] = 'Utolsó érték'; + $lang['strincrementby'] = 'Növekmény'; + $lang['strstartvalue'] = 'Kezdő érték'; + $lang['strrestartvalue'] = 'Újrakezdő érték'; + $lang['strmaxvalue'] = 'Felső korlát'; + $lang['strminvalue'] = 'Alsó korlát'; + $lang['strcachevalue'] = 'Gyorstár értéke'; + $lang['strlogcount'] = 'Számláló'; + $lang['strcancycle'] = 'Körbejárhat?'; + $lang['striscalled'] = 'Növekedjék mielőtt visszatér a következő értékkel (is_called)?'; + $lang['strsequenceneedsname'] = 'Meg kell adni a sorozatnevet.'; + $lang['strsequencecreated'] = 'A sorozat megteremtve.'; + $lang['strsequencecreatedbad'] = 'Nem sikerült megteremteni a sorozatot.'; + $lang['strconfdropsequence'] = 'Biztosan törölni kívánja „%s” sorozatot?'; + $lang['strsequencedropped'] = 'A sorozat törölve.'; + $lang['strsequencedroppedbad'] = 'Nem sikerült törölni a sorozatot.'; + $lang['strsequencerestart'] = 'Sorozat újrakezdve.'; + $lang['strsequencerestartbad'] = 'Nem sikerült újrakezdeni a sorozatot.'; + $lang['strsequencereset'] = 'Sorozat nullázása.'; + $lang['strsequenceresetbad'] = 'Nem sikerült nullázni a sorozatot.'; + $lang['strsequencealtered'] = 'Sorozat megváltoztatva.'; + $lang['strsequencealteredbad'] = 'Nem sikerült megváltoztatni a sorozatot.'; + $lang['strsetval'] = 'Értéket ad'; + $lang['strsequencesetval'] = 'Érték megadva.'; + $lang['strsequencesetvalbad'] = 'Nem sikerült az értékadás.'; + $lang['strnextval'] = 'Növekmény'; + $lang['strsequencenextval'] = 'Sorozat megnövelve.'; + $lang['strsequencenextvalbad'] = 'Nem sikerült megnövelni a sorozatot.'; + $lang['strspecifysequencetodrop'] = 'Meg kell adnia a törlendő sorozatot'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Indexek'; + $lang['strindexname'] = 'Indexnév'; + $lang['strshowallindexes'] = 'Minden indexet megjelenít'; + $lang['strnoindex'] = 'Nincs index.'; + $lang['strnoindexes'] = 'Nincsenek indexek.'; + $lang['strcreateindex'] = 'Indexet teremt'; + $lang['strtabname'] = 'Táblanév'; + $lang['strcolumnname'] = 'Oszlopnév'; + $lang['strindexneedsname'] = 'Meg kell adni az index nevét.'; + $lang['strindexneedscols'] = 'Meg kell adni az oszlopok (érvényes) számát.'; + $lang['strindexcreated'] = 'Az index megteremtve'; + $lang['strindexcreatedbad'] = 'Nem sikerült megteremteni az indexet.'; + $lang['strconfdropindex'] = 'Biztosan törölni kívánja „%s” indexet?'; + $lang['strindexdropped'] = 'Az index törölve.'; + $lang['strindexdroppedbad'] = 'Nem sikerült törölni az indexet.'; + $lang['strkeyname'] = 'Kulcsnév'; + $lang['struniquekey'] = 'Egyedi kulcs'; + $lang['strprimarykey'] = 'Elsődleges kulcs'; + $lang['strindextype'] = 'Indextípus'; + $lang['strtablecolumnlist'] = 'A tábla oszlopai'; + $lang['strindexcolumnlist'] = 'Az index oszlopai'; + $lang['strclusteredgood'] = 'Fürtözés kész.'; + $lang['strclusteredbad'] = 'Nem sikerült fürtözni.'; + $lang['strconcurrently'] = 'Egyszerre'; + $lang['strnoclusteravailable'] = 'A tábla nincs indexre fürtözve.'; + + // Rules + $lang['strrules'] = 'Szabályok'; + $lang['strrule'] = 'Szabály'; + $lang['strshowallrules'] = 'Minden szabályt megjelenít'; + $lang['strnorule'] = 'Nincs szabály.'; + $lang['strnorules'] = 'Nincsenek szabályok.'; + $lang['strcreaterule'] = 'Szabályt teremt'; + $lang['strrulename'] = 'Szabálynév'; + $lang['strruleneedsname'] = 'Meg kell adni a szabálynevet.'; + $lang['strrulecreated'] = 'A szabály megteremtve.'; + $lang['strrulecreatedbad'] = 'Nem sikerült megteremteni a szabályt.'; + $lang['strconfdroprule'] = 'Biztosan törölni kívánja „%s” szabályt „%s” táblában?'; + $lang['strruledropped'] = 'A szabály törölve.'; + $lang['strruledroppedbad'] = 'Nem sikerült törölni a szabályt.'; + + // Constraints + $lang['strconstraint'] = 'Megszorítás'; + $lang['strconstraints'] = 'Megszorítások'; + $lang['strshowallconstraints'] = 'Minden megszorítást megjelenít'; + $lang['strnoconstraints'] = 'Nincsenek megszorítások.'; + $lang['strcreateconstraint'] = 'Megszorítást teremt'; + $lang['strconstraintcreated'] = 'A megszorítás megteremtve.'; + $lang['strconstraintcreatedbad'] = 'Nem sikerült megteremteni a megszorítást.'; + $lang['strconfdropconstraint'] = 'Biztosan törölni kívánja „%s” megszorítást „%s” táblában?'; + $lang['strconstraintdropped'] = 'A megszorítás törölve.'; + $lang['strconstraintdroppedbad'] = 'Nem sikerült törölni a megszorítást.'; + $lang['straddcheck'] = 'Ellenőrzést ad hozzá'; + $lang['strcheckneedsdefinition'] = 'Meg kell adni az ellenőrzés definícióját.'; + $lang['strcheckadded'] = 'Az ellenőrzés hozzáadva.'; + $lang['strcheckaddedbad'] = 'Nem sikerült hozzáadni az ellenőrzést.'; + $lang['straddpk'] = 'Elsődleges kulcsot ad hozzá'; + $lang['strpkneedscols'] = 'Legalább egy oszlopot meg kell adni elsődleges kulcsnak.'; + $lang['strpkadded'] = 'Elsődleges kulcs hozzáadva.'; + $lang['strpkaddedbad'] = 'Nem sikerült hozzáadni az elsődleges kulcsot.'; + $lang['stradduniq'] = 'Egyedi kulcsot ad hozzá'; + $lang['struniqneedscols'] = 'Legalább egy oszlopot meg kell adni egyedi kulcsnak.'; + $lang['struniqadded'] = 'Az egyedi kulcs hozzáadva.'; + $lang['struniqaddedbad'] = 'Nem sikerült hozzáadni az egyedi kulcsot.'; + $lang['straddfk'] = 'Külső kulcsot ad hozzá'; + $lang['strfkneedscols'] = 'Legalább egy oszlopot meg kell adni külső kulcsnak.'; + $lang['strfkneedstarget'] = 'Meg kell adni a céltáblát a külső kulcsnak.'; + $lang['strfkadded'] = 'A külső kulcs hozzáadva.'; + $lang['strfkaddedbad'] = 'Nem sikerült hozzáadni a külső kulcsot.'; + $lang['strfktarget'] = 'Céltábla'; + $lang['strfkcolumnlist'] = 'Kulcsoszlopok'; + $lang['strondelete'] = 'TÖRLÉSKOR'; + $lang['stronupdate'] = 'VÁLTOZTATÁSKOR'; + + // Functions + $lang['strfunction'] = 'Függvény'; + $lang['strfunctions'] = 'Függvények'; + $lang['strshowallfunctions'] = 'Minden függvényt megjelenít'; + $lang['strnofunction'] = 'Nincs függvény.'; + $lang['strnofunctions'] = 'Nincsenek függvények.'; + $lang['strcreateplfunction'] = 'SQL/PL függvényt teremt'; + $lang['strcreateinternalfunction'] = 'Belső függvényt teremt'; + $lang['strcreatecfunction'] = 'C függvényt teremt'; + $lang['strfunctionname'] = 'Függvénynév'; + $lang['strreturns'] = 'Visszatérő érték'; + $lang['strproglanguage'] = 'Programnyelv'; + $lang['strfunctionneedsname'] = 'Meg kell adni a függvény nevét.'; + $lang['strfunctionneedsdef'] = 'Meg kell adni a függvény definícióját.'; + $lang['strfunctioncreated'] = 'A függvény megteremtve.'; + $lang['strfunctioncreatedbad'] = 'Nem sikerült megteremteni a függvényt.'; + $lang['strconfdropfunction'] = 'Biztosan törölni kívánja „%s” függvényt?'; + $lang['strfunctiondropped'] = 'A függvény törölve.'; + $lang['strfunctiondroppedbad'] = 'Nem sikerült törölni a függvényt.'; + $lang['strfunctionupdated'] = 'A függvény időszerűsítve.'; + $lang['strfunctionupdatedbad'] = 'Nem sikerült a függvényt időszerűsíteni.'; + $lang['strobjectfile'] = 'Célkód fájl'; + $lang['strlinksymbol'] = 'Szerkesztő szimbólum'; + $lang['strarguments'] = 'Argumentumok'; + $lang['strargmode'] = 'Mód'; + $lang['strargtype'] = 'Típus'; + $lang['strargadd'] = 'Más argumentumot ad hozzá'; + $lang['strargremove'] = 'Argumentumot töröl'; + $lang['strargnoargs'] = 'E függvénynek nincsenek argumentumai.'; + $lang['strargenableargs'] = 'E függvénynek átadott argumentumok engedélyezése.'; + $lang['strargnorowabove'] = 'Egy sornak kell lennie e fölött.'; + $lang['strargnorowbelow'] = 'Egy sornak kell lennie ez alatt.'; + $lang['strargraise'] = 'Mozgás fel.'; + $lang['strarglower'] = 'Mozgás le.'; + $lang['strargremoveconfirm'] = 'Biztosan töröljük ez argumentumot? Ez VISSZAVONHATATLAN.'; + $lang['strfunctioncosting'] = 'Függvény költségei'; + $lang['strresultrows'] = 'Eredmény sorok'; + $lang['strexecutioncost'] = 'Végrehajtás költsége'; + $lang['strspecifyfunctiontodrop'] = 'Legalább egy törlendő függvényt meg kell adni'; + + // Triggers + $lang['strtrigger'] = 'Ravasz'; + $lang['strtriggers'] = 'Ravaszok'; + $lang['strshowalltriggers'] = 'Minden ravaszt megjelenít'; + $lang['strnotrigger'] = 'Nincs ravasz.'; + $lang['strnotriggers'] = 'Nincsenek ravaszok.'; + $lang['strcreatetrigger'] = 'Ravaszt teremt'; + $lang['strtriggerneedsname'] = 'Meg kell adni a ravasz nevét.'; + $lang['strtriggerneedsfunc'] = 'Meg kell adni egy függvény nevét a ravaszhoz.'; + $lang['strtriggercreated'] = 'Ravasz megteremtve.'; + $lang['strtriggercreatedbad'] = 'Nem sikerült megteremteni a ravaszt.'; + $lang['strconfdroptrigger'] = 'Biztosan törölni kívánja „%s” ravaszt „%s” táblában?'; + $lang['strconfenabletrigger'] = 'Biztosan engedélyezzük „%s” ravaszt „%s” elemre?'; + $lang['strconfdisabletrigger'] = 'Biztosan letiltsuk „%s” ravaszt „%s” elemre?'; + $lang['strtriggerdropped'] = 'Ravasz törölve.'; + $lang['strtriggerdroppedbad'] = 'Nem sikerült törölni a ravaszt.'; + $lang['strtriggerenabled'] = 'Ravasz engedélyezve.'; + $lang['strtriggerenabledbad'] = 'Nem sikerült a ravaszt engedélyezni.'; + $lang['strtriggerdisabled'] = 'Ravasz letiltva.'; + $lang['strtriggerdisabledbad'] = 'Nem sikerült a ravaszt letiltani.'; + $lang['strtriggeraltered'] = 'Ravasz megváltoztatva.'; + $lang['strtriggeralteredbad'] = 'Nem sikerült megváltoztatni a triggert.'; + $lang['strforeach'] = 'Mindegyik'; + + // Types + $lang['strtype'] = 'Típus'; + $lang['strtypes'] = 'Típusok'; + $lang['strshowalltypes'] = 'Minden típust megjelenít'; + $lang['strnotype'] = 'Nincs típus.'; + $lang['strnotypes'] = 'Nincsenek típusok.'; + $lang['strcreatetype'] = 'Típust teremt'; + $lang['strcreatecomptype'] = 'Összetett típust teremt'; + $lang['strcreateenumtype'] = 'Felsorolás típust teremt'; + $lang['strtypeneedsfield'] = 'Legalább egy oszlopot meg kell adnia.'; + $lang['strtypeneedsvalue'] = 'Legalább egy értéket meg kell adni.'; + $lang['strtypeneedscols'] = 'Érvényes oszlopszámot kell megadnia.'; + $lang['strtypeneedsvals'] = 'Érvényes értékszámot kell megadni.'; + $lang['strinputfn'] = 'Beviteli függvény'; + $lang['stroutputfn'] = 'Kiviteli függvény'; + $lang['strpassbyval'] = 'Érték szerinti átadás?'; + $lang['stralignment'] = 'Igazít'; + $lang['strelement'] = 'Elem'; + $lang['strdelimiter'] = 'Határoló'; + $lang['strstorage'] = 'Tár'; + $lang['strfield'] = 'Oszlop'; + $lang['strnumfields'] = 'Oszlopok száma'; + $lang['strnumvalues'] = 'Értékek száma'; + $lang['strtypeneedsname'] = 'Típusnevet kell megadni.'; + $lang['strtypeneedslen'] = 'Meg kell adni a típus hosszát.'; + $lang['strtypecreated'] = 'Típus megteremtve'; + $lang['strtypecreatedbad'] = 'Nem sikerült megteremteni a típust.'; + $lang['strconfdroptype'] = 'Biztosan törölni kívánja „%s” típust?'; + $lang['strtypedropped'] = 'Típus törölve.'; + $lang['strtypedroppedbad'] = 'Nem sikerült törölni a típust.'; + $lang['strflavor'] = 'Fajta'; + $lang['strbasetype'] = 'Alap'; + $lang['strcompositetype'] = 'Összetett'; + $lang['strpseudotype'] = 'Ál'; + $lang['strenum'] = 'Felsorolás'; + $lang['strenumvalues'] = 'Felsorolás értékei'; + + // Schemas + $lang['strschema'] = 'Séma'; + $lang['strschemas'] = 'Sémák'; + $lang['strshowallschemas'] = 'Minden sémát megjelenít'; + $lang['strnoschema'] = 'Nincs séma.'; + $lang['strnoschemas'] = 'Nincsenek sémák.'; + $lang['strcreateschema'] = 'Sémát teremt'; + $lang['strschemaname'] = 'Sémanév'; + $lang['strschemaneedsname'] = 'Meg kell adni a sémanevet.'; + $lang['strschemacreated'] = 'A séma megteremtve'; + $lang['strschemacreatedbad'] = 'Nem sikerült a sémát megteremteni.'; + $lang['strconfdropschema'] = 'Biztosan törölni kívánja „%s” sémát?'; + $lang['strschemadropped'] = 'A séma törölve.'; + $lang['strschemadroppedbad'] = 'Nem sikerült a sémát törölni.'; + $lang['strschemaaltered'] = 'Séma megváltoztatva.'; + $lang['strschemaalteredbad'] = 'Nem sikerült a sémát megváltoztatni.'; + $lang['strsearchpath'] = 'Séma keresési útvonala'; + $lang['strspecifyschematodrop'] = 'Meg kell adni a törlendő sémát'; + + // Reports + + // Domains + $lang['strdomain'] = 'Tartomány'; + $lang['strdomains'] = 'Tartományok'; + $lang['strshowalldomains'] = 'Minden tartományt megjelenít'; + $lang['strnodomains'] = 'Nincsnek tartományok.'; + $lang['strcreatedomain'] = 'Tartományt teremt'; + $lang['strdomaindropped'] = 'A tartomány törölve.'; + $lang['strdomaindroppedbad'] = 'Nem sikerült törölni a tartományt.'; + $lang['strconfdropdomain'] = 'Biztosan törölni kívánja „%s” tartományt?'; + $lang['strdomainneedsname'] = 'Meg kell adni a tartománynevet.'; + $lang['strdomaincreated'] = 'A tartomány megteremtve.'; + $lang['strdomaincreatedbad'] = 'Nem sikerült megteremteni a tartományt.'; + $lang['strdomainaltered'] = 'A tartomány megváltoztatva.'; + $lang['strdomainalteredbad'] = 'Nem sikerült megváltoztatni a tartományt.'; + + // Operators + $lang['stroperator'] = 'Operátor'; + $lang['stroperators'] = 'Operátorok'; + $lang['strshowalloperators'] = 'Minden operátort megjelenít'; + $lang['strnooperator'] = 'Nincs operátor.'; + $lang['strnooperators'] = 'Nincsenek operátorok.'; + $lang['strcreateoperator'] = 'Operátort teremt'; + $lang['strleftarg'] = 'Bal arg típus'; + $lang['strrightarg'] = 'Jobb arg típus'; + $lang['strcommutator'] = 'Kommutátor'; + $lang['strnegator'] = 'Tagadó'; + $lang['strrestrict'] = 'Megszorítás'; + $lang['strjoin'] = 'Összekapcsolás'; + $lang['strhashes'] = 'Hasít'; + $lang['strmerges'] = 'Összefésül'; + $lang['strleftsort'] = 'Balrendezés'; + $lang['strrightsort'] = 'Jobbrendezés'; + $lang['strlessthan'] = 'Kisebb mint'; + $lang['strgreaterthan'] = 'Nagyobb mint'; + $lang['stroperatorneedsname'] = 'Meg kell adni az operátornevet.'; + $lang['stroperatorcreated'] = 'Az operátor megteremtve'; + $lang['stroperatorcreatedbad'] = 'Nem sikerült megteremteni az operátort.'; + $lang['strconfdropoperator'] = 'Biztosan törölni kívánja „%s” operátort?'; + $lang['stroperatordropped'] = 'Az operátor törölve.'; + $lang['stroperatordroppedbad'] = 'Nem sikerült törölni az operátort.'; + + // Casts + $lang['strcasts'] = 'Kasztok'; + $lang['strnocasts'] = 'Nincsenek kasztok.'; + $lang['strsourcetype'] = 'Forrástípus'; + $lang['strtargettype'] = 'Céltípus'; + $lang['strimplicit'] = 'Implicit'; + $lang['strinassignment'] = 'Értékadásban'; + $lang['strbinarycompat'] = '(Binárisan kompatibilis)'; + + // Conversions + $lang['strconversions'] = 'Átalakítások'; + $lang['strnoconversions'] = 'Nincsenek átalakítások.'; + $lang['strsourceencoding'] = 'Forráskódolás'; + $lang['strtargetencoding'] = 'Célkódolás'; + + // Languages + $lang['strlanguages'] = 'Nyelvek'; + $lang['strnolanguages'] = 'Nincsenek nyelvek.'; + $lang['strtrusted'] = 'Hiteles'; + + // Info + $lang['strnoinfo'] = 'Nincs elérhető információ.'; + $lang['strreferringtables'] = 'Kapcsolódó táblák'; + $lang['strparenttables'] = 'Szülőtáblák'; + $lang['strchildtables'] = 'Gyerektáblák'; + + // Aggregates + $lang['straggregate'] = 'Aggregálás'; + $lang['straggregates'] = 'Aggregálások'; + $lang['strnoaggregates'] = 'Nincsenek aggregálások.'; + $lang['stralltypes'] = '(Minden típus)'; + $lang['strcreateaggregate'] = 'Aggregálást teremt'; + $lang['straggrbasetype'] = 'Bemenő adattípus'; + $lang['straggrsfunc'] = 'Állapotátmeneti függvény'; + $lang['straggrstype'] = 'Állapotérték adattípusa'; + $lang['straggrffunc'] = 'Végső függvény'; + $lang['straggrinitcond'] = 'Kezdő feltétel'; + $lang['straggrsortop'] = 'Rendező művelet'; + $lang['strconfdropaggregate'] = 'Biztosan töröljük „%s” aggregálást?'; + $lang['straggregatedropped'] = 'Aggregálás törölve.'; + $lang['straggregatedroppedbad'] = 'Nem sikerült törölni az aggregálást.'; + $lang['straggraltered'] = 'Aggregálás megváltoztatva.'; + $lang['straggralteredbad'] = 'Nem sikerült az aggregálást megváltoztatni.'; + $lang['straggrneedsname'] = 'Meg kell adni az aggregálás nevét.'; + $lang['straggrneedsbasetype'] = 'Meg kell adni az aggregálás bemenő adattípusát.'; + $lang['straggrneedssfunc'] = 'Meg kell adni az aggregálás állapotátmeneti függvényének nevét.'; + $lang['straggrneedsstype'] = 'Meg kell adni az aggregálás állapotértékének adattípusát.'; + $lang['straggrcreated'] = 'Aggregálás megteremtve.'; + $lang['straggrcreatedbad'] = 'Nem sikerült megteremteni az aggregálást.'; + $lang['straggrshowall'] = 'Minden aggregálás megjelenítése'; + + // Operator Classes + $lang['stropclasses'] = 'Operátor-osztályok'; + $lang['strnoopclasses'] = 'Nincsenek operátor-osztályok.'; + $lang['straccessmethod'] = 'Hozzáférés módja'; + + // Stats and performance + $lang['strrowperf'] = 'Sorteljesítmény'; + $lang['strioperf'] = 'I/O-teljesítmény'; + $lang['stridxrowperf'] = 'Indexsor-teljesítmény'; + $lang['stridxioperf'] = 'Index-I/O-teljesítmény'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Szekvenciális'; + $lang['strscan'] = 'Keresés'; + $lang['strread'] = 'Olvasás'; + $lang['strfetch'] = 'Lehívás'; + $lang['strheap'] = 'Kupac'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Gyorstár'; + $lang['strdisk'] = 'Lemez'; + $lang['strrows2'] = 'Sorok'; + + // Tablespaces + $lang['strtablespace'] = 'Táblahely'; + $lang['strtablespaces'] = 'Táblahelyek'; + $lang['strshowalltablespaces'] = 'Minden táblahelyet megjelenít'; + $lang['strnotablespaces'] = 'Nincsenek táblahelyek.'; + $lang['strcreatetablespace'] = 'Táblahelyet teremt'; + $lang['strlocation'] = 'Hely'; + $lang['strtablespaceneedsname'] = 'Nevet kell adnia a táblahelynek.'; + $lang['strtablespaceneedsloc'] = 'Meg kell adnia egy mappát, ahol a táblahelyet teremti.'; + $lang['strtablespacecreated'] = 'Táblahely teremtve.'; + $lang['strtablespacecreatedbad'] = 'Nem sikerült táblahelyet teremteni.'; + $lang['strconfdroptablespace'] = 'Biztosan ki akarja dobni „%s” táblahelyet?'; + $lang['strtablespacedropped'] = 'Táblahely kidobva.'; + $lang['strtablespacedroppedbad'] = 'Nem sikerült kidobni a táblahelyet.'; + $lang['strtablespacealtered'] = 'Táblahely megváltoztatva.'; + $lang['strtablespacealteredbad'] = 'Nem sikerült megváltoztatni a táblahelyet.'; + + // Miscellaneous + $lang['strtopbar'] = '%s fut %s:%s címen — Ön „%s” néven jelentkezett be.'; + $lang['strtimefmt'] = 'Y.m.d. H:i'; + $lang['strhelp'] = 'Súgó'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Súgólap böngésző'; + $lang['strselecthelppage'] = 'Súgólapot választ'; + $lang['strinvalidhelppage'] = 'Érvénytelen súgólap.'; + $lang['strlogintitle'] = 'Belépett %s helyre'; + $lang['strlogoutmsg'] = 'Kilépett %s helyről'; + $lang['strloading'] = 'Betöltök...'; + $lang['strerrorloading'] = 'Betöltési hiba'; + $lang['strclicktoreload'] = 'Kattintson az újratöltéshez'; + + // Autovacuum + $lang['strautovacuum'] = 'Önműködő takarítás'; + $lang['strturnedon'] = 'Bekapcsolva'; + $lang['strturnedoff'] = 'Kikapcsolva'; + $lang['strenabled'] = 'Engedélyezve'; + $lang['strnovacuumconf'] = 'Nem találtam önműködő takarítást beállítva.'; + $lang['strvacuumbasethreshold'] = 'Takarítás alap küszbértéke'; + $lang['strvacuumscalefactor'] = 'Takarítás méretező tényezője'; + $lang['stranalybasethreshold'] = 'Alap küszöbértéket elemez'; + $lang['stranalyzescalefactor'] = 'Méretező tényezőt elemez'; + $lang['strvacuumcostdelay'] = 'Takarítás költségének késése'; + $lang['strvacuumcostlimit'] = 'Takarítás költségének korlátja'; + $lang['strvacuumpertable'] = 'Önműködő takarítás beállítása táblánként'; + $lang['straddvacuumtable'] = 'Önműködő takarítást állít be egy táblára'; + $lang['streditvacuumtable'] = 'Önműködő takarítást szerkeszt %s táblára'; + $lang['strdelvacuumtable'] = 'Törli az önműködő takarítást %s tábláról?'; + $lang['strvacuumtablereset'] = 'Az önműködő takarítást %s táblára visszaállítja az alap értékekre'; + $lang['strdelvacuumtablefail'] = 'Nem sikerült törölni az önműködő takarítást %s tábláról'; + $lang['strsetvacuumtablesaved'] = 'Önműködő takarítás %s táblára mentve.'; + $lang['strsetvacuumtablefail'] = 'Önműködő takarítást %s táblára nem sikerült beállítani.'; + $lang['strspecifydelvacuumtable'] = 'Meg kell adni a táblát, amiről törölni akarja az önműködő takarítás paramétereit.'; + $lang['strspecifyeditvacuumtable'] = 'Meg kell adni a táblát, amin szerkeszteni akarja az önműködő takarítás paramétereit.'; + $lang['strnotdefaultinred'] = 'A nem alap értékek pirosak.'; + + // Table-level Locks + $lang['strlocks'] = 'Zárak'; + $lang['strtransaction'] = 'Tranzakció AZ'; + $lang['strvirtualtransaction'] = 'Látszólagos tranzakció AZ'; + $lang['strprocessid'] = 'Folyamat AZ'; + $lang['strmode'] = 'Zármód'; + $lang['strislockheld'] = 'Zár tartva?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Előkészített tranzakciók'; + $lang['strxactid'] = 'Tranzakció AZ'; + $lang['strgid'] = 'Globális AZ'; + + // Fulltext search + $lang['strfulltext'] = 'Teljes szövegben keres'; + $lang['strftsconfig'] = 'TSzK összeállítás'; + $lang['strftsconfigs'] = 'Összeállítások'; + $lang['strftscreateconfig'] = 'TSzK összeállítást teremt'; + $lang['strftscreatedict'] = 'Szótárt teremt'; + $lang['strftscreatedicttemplate'] = 'Szótársablont teremt'; + $lang['strftscreateparser'] = 'Elemzőt teremt'; + $lang['strftsnoconfigs'] = 'Nincs TSzK összeállítás.'; + $lang['strftsconfigdropped'] = 'TSzK összeállítás törölve.'; + $lang['strftsconfigdroppedbad'] = 'Nem sikerült törölni a TSzK összeállítást.'; + $lang['strconfdropftsconfig'] = 'Biztosan töröljük „%s” TSzK összeállítást?'; + $lang['strconfdropftsdict'] = 'Biztosan töröljük „%s” TSzK szótárt?'; + $lang['strconfdropftsmapping'] = 'Biztosan töröljük „%s” hozzárendelést „%s” TSzK összeállításból?'; + $lang['strftstemplate'] = 'Sablon'; + $lang['strftsparser'] = 'Elemző'; + $lang['strftsconfigneedsname'] = 'Meg kell adni a TSzK összeállítás nevét.'; + $lang['strftsconfigcreated'] = 'TSzK összeállítás megteremtve.'; + $lang['strftsconfigcreatedbad'] = 'Nem sikerült megteremteni a TSzK összeállítást.'; + $lang['strftsmapping'] = 'Hozzárendel'; + $lang['strftsdicts'] = 'Szótárak'; + $lang['strftsdict'] = 'Szótár'; + $lang['strftsemptymap'] = 'Üres hozzárendelés a TSzK összeállításban.'; + $lang['strftsconfigaltered'] = 'TSzK összeállítás megváltoztatva.'; + $lang['strftsconfigalteredbad'] = 'Nem sikerült a TSzK összeállítást megváltoztatni.'; + $lang['strftsconfigmap'] = 'TSzK összeállítás hozzárendelése'; + $lang['strftsparsers'] = 'TSzK elemzők'; + $lang['strftsnoparsers'] = 'Nincs TSzK elemző.'; + $lang['strftsnodicts'] = 'Nincs TSzK szótár.'; + $lang['strftsdictcreated'] = 'TSzK szótár megteremtve.'; + $lang['strftsdictcreatedbad'] = 'Nem sikerült a TSzK szótárt megteremteni.'; + $lang['strftslexize'] = 'Szókincs'; + $lang['strftsinit'] = 'Kezdés'; + $lang['strftsoptionsvalues'] = 'Opciók és értékek'; + $lang['strftsdictneedsname'] = 'Meg kell adni a TSzK szótár nevét.'; + $lang['strftsdictdropped'] = 'TSzK szótár törölve.'; + $lang['strftsdictdroppedbad'] = 'Nem sikerült a TSzK szótárt törölni.'; + $lang['strftsdictaltered'] = 'TSzK szótár megváltoztatva.'; + $lang['strftsdictalteredbad'] = 'Nem sikerült a TSzK szótárt megváltoztatni.'; + $lang['strftsaddmapping'] = 'Új hozzárendelés hozzáadása'; + $lang['strftsspecifymappingtodrop'] = 'Meg kell adni legalább egy törlendő TSzK hozzárendelést.'; + $lang['strftsspecifyconfigtoalter'] = 'Meg kell adni a megváltoztatandó TSzK összeállítást'; + $lang['strftsmappingdropped'] = 'TSzK hozzárendelés törölve.'; + $lang['strftsmappingdroppedbad'] = 'Nem sikerült a TSzK hozzárendelést törölni.'; + $lang['strftsnodictionaries'] = 'Nincs szótár.'; + $lang['strftsmappingaltered'] = 'TSzK hozzárendelés megváltoztatva.'; + $lang['strftsmappingalteredbad'] = 'Nem sikerült a TSzK hozzárendelést megváltoztatni.'; + $lang['strftsmappingadded'] = 'TSzK hozzárendelés hozzáadva.'; + $lang['strftsmappingaddedbad'] = 'Nem sikerült hozzáadni a TSzK hozzárendeléshez.'; + $lang['strftsmappingdropped'] = 'TSzK hozzárendelés törölve.'; + $lang['strftsmappingdroppedbad'] = 'Nem sikerült a TSzK hozzárendelést törölni.'; + $lang['strftstabconfigs'] = 'Összeállítások'; + $lang['strftstabdicts'] = 'Szótárak'; + $lang['strftstabparsers'] = 'Elemzők'; + $lang['strftscantparsercopy'] = 'Nem állíthat be együtt elemzőt és sablont szövegkereső beállítás közben.'; + + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/italian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/italian.php new file mode 100644 index 00000000..3f2675a4 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/italian.php @@ -0,0 +1,720 @@ +<?php + + /** + * Italian language file, based on the english language file for phpPgAdmin. + * Nicola Soranzo [nsoranzo@tiscali.it] + * + * $Id: italian.php,v 1.46 2007/07/19 03:11:52 xzilla Exp $ + */ + + // Language and character set - Lingua e set di caratteri + $lang['applang'] = 'Italiano'; + $lang['applocale'] = 'it-IT'; + $lang['applangdir'] = 'ltr'; + + // Welcome - Benvenuto + $lang['strintro'] = 'Benvenuto in phpPgAdmin.'; + $lang['strppahome'] = 'Homepage di phpPgAdmin'; + $lang['strpgsqlhome'] = 'Homepage di PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Documentazione su PostgreSQL (locale)'; + $lang['strreportbug'] = 'Riferisci un bug'; + $lang['strviewfaq'] = 'Visualizza le FAQ (domande ricorrenti) on line'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings - Stringhe basilari + $lang['strlogin'] = 'Login'; + $lang['strloginfailed'] = 'Login fallito'; + $lang['strlogindisallowed'] = 'Login disabilitato per ragioni di sicurezza'; + $lang['strserver'] = 'Server'; + $lang['strservers'] = 'Server'; + $lang['strintroduction'] = 'Introduzione'; + $lang['strhost'] = 'Host'; + $lang['strport'] = 'Porta'; + $lang['strlogout'] = 'Logout'; + $lang['strowner'] = 'Proprietario'; + $lang['straction'] = 'Azione'; + $lang['stractions'] = 'Azioni'; + $lang['strname'] = 'Nome'; + $lang['strdefinition'] = 'Definizione'; + $lang['strproperties'] = 'Proprietà'; + $lang['strbrowse'] = 'Visualizza'; + $lang['strenable'] = 'Abilita'; + $lang['strdisable'] = 'Disabilita'; + $lang['strdrop'] = 'Elimina'; + $lang['strdropped'] = 'Eliminato'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Non Nullo'; + $lang['strprev'] = '< Prec.'; + $lang['strnext'] = 'Succ. >'; + $lang['strfirst'] = '<< Primo'; + $lang['strlast'] = 'Ultimo >>'; + $lang['strfailed'] = 'Fallito'; + $lang['strcreate'] = 'Crea'; + $lang['strcreated'] = 'Creato'; + $lang['strcomment'] = 'Commento'; + $lang['strlength'] = 'Lunghezza'; + $lang['strdefault'] = 'Default'; + $lang['stralter'] = 'Modifica'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Annulla'; + $lang['strac'] = 'Abilita autocompletamento'; + $lang['strsave'] = 'Salva'; + $lang['strreset'] = 'Reset'; + $lang['strinsert'] = 'Inserisci'; + $lang['strselect'] = 'Seleziona'; + $lang['strdelete'] = 'Cancella'; + $lang['strupdate'] = 'Aggiorna'; + $lang['strreferences'] = 'Riferimenti'; + $lang['stryes'] = 'Si'; + $lang['strno'] = 'No'; + $lang['strtrue'] = 'TRUE'; + $lang['strfalse'] = 'FALSE'; + $lang['stredit'] = 'Modifica'; + $lang['strcolumn'] = 'Colonna'; + $lang['strcolumns'] = 'Colonne'; + $lang['strrows'] = 'riga(ghe)'; + $lang['strrowsaff'] = 'riga(ghe) interessata(e).'; + $lang['strobjects'] = 'oggetto(i)'; + $lang['strback'] = 'Indietro'; + $lang['strqueryresults'] = 'Risultato Query'; + $lang['strshow'] = 'Mostra'; + $lang['strempty'] = 'Svuota'; + $lang['strlanguage'] = 'Lingua'; + $lang['strencoding'] = 'Codifica'; + $lang['strvalue'] = 'Valore'; + $lang['strunique'] = 'Univoco'; + $lang['strprimary'] = 'Primaria'; + $lang['strexport'] = 'Esporta'; + $lang['strimport'] = 'Importa'; + $lang['strallowednulls'] = 'Caratteri NULL consentiti'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Stringa vuota'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Amministratore'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'Analizza'; + $lang['strclusterindex'] = 'Clusterizza'; + $lang['strclustered'] = 'Clusterizzato?'; + $lang['strreindex'] = 'Reindicizza'; + $lang['strexecute'] = 'Esegui'; + $lang['stradd'] = 'Aggiungi'; + $lang['strevent'] = 'Evento'; + $lang['strwhere'] = 'Condizione'; + $lang['strinstead'] = 'Invece fai'; + $lang['strwhen'] = 'Quando'; + $lang['strformat'] = 'Formato'; + $lang['strdata'] = 'Dati'; + $lang['strconfirm'] = 'Conferma'; + $lang['strexpression'] = 'Espressione'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Espandi'; + $lang['strcollapse'] = 'Raccogli'; + $lang['strexplain'] = 'Explain'; + $lang['strexplainanalyze'] = 'Explain Analyze'; + $lang['strfind'] = 'Trova'; + $lang['stroptions'] = 'Opzioni'; + $lang['strrefresh'] = 'Ricarica'; + $lang['strdownload'] = 'Scarica'; + $lang['strdownloadgzipped'] = 'Scarica compresso con gzip'; + $lang['strinfo'] = 'Informazioni'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Avanzato'; + $lang['strvariables'] = 'Variabili'; + $lang['strprocess'] = 'Processo'; + $lang['strprocesses'] = 'Processi'; + $lang['strsetting'] = 'Valore'; + $lang['streditsql'] = 'Modifica SQL'; + $lang['strruntime'] = 'Tempo di esecuzione totale: %s ms'; + $lang['strpaginate'] = 'Dividi in pagine i risultati'; + $lang['struploadscript'] = 'oppure esegui l\'upload di uno script SQL:'; + $lang['strstarttime'] = 'Inizio'; + $lang['strfile'] = 'File'; + $lang['strfileimported'] = 'File importato.'; + $lang['strtrycred'] = 'Usa queste credenziali per tutti i server'; + $lang['stractionsonmultiplelines'] = 'Azioni su righe multiple'; + $lang['strselectall'] = 'Seleziona tutti'; + $lang['strunselectall'] = 'Deseleziona tutti'; + + // Database sizes - Dimensioni dei database + $lang['strsize'] = 'Dimensione'; + $lang['strbytes'] = 'byte'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling - Gestione degli errori + $lang['strnoframes'] = 'Questa applicazione funziona al meglio utilizzando un browser che supporti i frame, ma può essere usata senza frame seguendo il link sottostante.'; + $lang['strnoframeslink'] = 'Usa senza frame'; + $lang['strbadconfig'] = 'Il file config.inc.php è obsoleto. È necessario rigenerarlo utilizzando il nuovo file config.inc.php-dist .'; + $lang['strnotloaded'] = 'La tua installazione di PHP non supporta PostgreSQL. È necessario ricompilare PHP usando l\'opzione di configurazione --with-pgsql .'; + $lang['strpostgresqlversionnotsupported'] = 'Versione di PostgreSQL non supportata. È necessario aggiornarlo alla versione %s o successiva.'; + $lang['strbadschema'] = 'Schema specificato non valido.'; + $lang['strbadencoding'] = 'Impostazione della codifica del client nel database fallito.'; + $lang['strsqlerror'] = 'Errore SQL:'; + $lang['strinstatement'] = 'Nel costrutto:'; + $lang['strinvalidparam'] = 'Parametri di script non validi.'; + $lang['strnodata'] = 'Nessuna riga trovata.'; + $lang['strnoobjects'] = 'Nessun oggetto trovato.'; + $lang['strrownotunique'] = 'Nessun identificatore univoco per questa riga.'; + $lang['strnouploads'] = 'L\'upload dei file è disabilitato.'; + $lang['strimporterror'] = 'Errore durante l\'import.'; + $lang['strimporterror-fileformat'] = 'Errore durante l\'import: determinazione automatica del formato del file fallita.'; + $lang['strimporterrorline'] = 'Errore durante l\'import alla linea %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Errore durante l\'import alla linea %s: la linea non possiede il numero corretto di colonne.'; + $lang['strimporterror-uploadedfile'] = 'Errore durante l\'import: non è stato possibile caricare il file sul server'; + $lang['strcannotdumponwindows'] = 'Il dump di nomi complessi di tabelle o schemi sotto Windows non è supportato.'; + $lang['strinvalidserverparam'] = 'Tentativo di connessione al server con parametri non validi, è possibile che qualcuno stia cercando di forzare il sistema.'; + + // Tables - Tabelle + $lang['strtable'] = 'Tabella'; + $lang['strtables'] = 'Tabelle'; + $lang['strshowalltables'] = 'Mostra tutte le tabelle'; + $lang['strnotables'] = 'Nessuna tabella trovata.'; + $lang['strnotable'] = 'Tabella non trovata.'; + $lang['strcreatetable'] = 'Crea tabella'; + $lang['strtablename'] = 'Nome tabella'; + $lang['strtableneedsname'] = 'È necessario specificare un nome per la tabella.'; + $lang['strtableneedsfield'] = 'È necessario specificare almeno un campo.'; + $lang['strtableneedscols'] = 'È necessario specificare un numero di colonne valido.'; + $lang['strtablecreated'] = 'Tabella creata.'; + $lang['strtablecreatedbad'] = 'Creazione della tabella fallita.'; + $lang['strconfdroptable'] = 'Eliminare la tabella "%s"?'; + $lang['strtabledropped'] = 'Tabella eliminata.'; + $lang['strtabledroppedbad'] = 'Eliminazione della tabella fallita.'; + $lang['strconfemptytable'] = 'Svuotare la tabella "%s"?'; + $lang['strtableemptied'] = 'Tabella svuotata.'; + $lang['strtableemptiedbad'] = 'Svuotamento della tabella fallito.'; + $lang['strinsertrow'] = 'Inserisci riga'; + $lang['strrowinserted'] = 'Riga inserita.'; + $lang['strrowinsertedbad'] = 'Inserimento della riga fallito.'; + $lang['strrowduplicate'] = 'Inserimento della riga fallito, tentativo di eseguire un inserimento duplicato.'; + $lang['streditrow'] = 'Modifica riga'; + $lang['strrowupdated'] = 'Riga aggiornata.'; + $lang['strrowupdatedbad'] = 'Aggiornamento della riga fallito.'; + $lang['strdeleterow'] = 'Cancella riga'; + $lang['strconfdeleterow'] = 'Cancellare questa riga?'; + $lang['strrowdeleted'] = 'Riga cancellata.'; + $lang['strrowdeletedbad'] = 'Cancellazione della riga fallita.'; + $lang['strinsertandrepeat'] = 'Inserisci e ripeti'; + $lang['strnumcols'] = 'Numero di colonne'; + $lang['strcolneedsname'] = 'È necessario specificare un nome per la colonna'; + $lang['strselectallfields'] = 'Seleziona tutti i campi'; + $lang['strselectneedscol'] = 'È necessario scegliere almeno una colonna.'; + $lang['strselectunary'] = 'Gli operatori unari non possono avere un valore.'; + $lang['strcolumnaltered'] = 'Colonna modificata.'; + $lang['strcolumnalteredbad'] = 'Modifica della colonna fallita.'; + $lang['strconfdropcolumn'] = 'Eliminare la colonna "%s" dalla tabella "%s"?'; + $lang['strcolumndropped'] = 'Colonna eliminata.'; + $lang['strcolumndroppedbad'] = 'Eliminazione della colonna fallita.'; + $lang['straddcolumn'] = 'Aggiungi colonna'; + $lang['strcolumnadded'] = 'Colonna aggiunta.'; + $lang['strcolumnaddedbad'] = 'Aggiunta della colonna fallita.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Tabella modificata.'; + $lang['strtablealteredbad'] = 'Modifica della tabella fallita.'; + $lang['strdataonly'] = 'Solo i dati'; + $lang['strstructureonly'] = 'Solo la struttura'; + $lang['strstructureanddata'] = 'Struttura e dati'; + $lang['strtabbed'] = 'Tabulato'; + $lang['strauto'] = 'Auto'; + $lang['strconfvacuumtable'] = 'Effettuare il vacuum su "%s"?'; + $lang['strestimatedrowcount'] = 'Numero stimato di righe'; + $lang['strspecifytabletoanalyze'] = 'È necessario specificare almeno una tabella da analizzare'; + + // Colonne - Columns + $lang['strcolprop'] = 'Proprietà della colonna'; + + // Users - Utenti + $lang['struser'] = 'Utente'; + $lang['strusers'] = 'Utenti'; + $lang['strusername'] = 'Username'; + $lang['strpassword'] = 'Password'; + $lang['strsuper'] = 'Superuser?'; + $lang['strcreatedb'] = 'Può creare DB?'; + $lang['strexpires'] = 'Scadenza'; + $lang['strsessiondefaults'] = 'Defaults della sessione'; + $lang['strnousers'] = 'Nessun utente trovato'; + $lang['struserupdated'] = 'Utente aggiornato.'; + $lang['struserupdatedbad'] = 'Aggiornamento utente fallito.'; + $lang['strshowallusers'] = 'Mostra tutti gli utenti'; + $lang['strcreateuser'] = 'Crea utente'; + $lang['struserneedsname'] = 'È necessario specificare un nome per l\'utente.'; + $lang['strusercreated'] = 'Utente creato.'; + $lang['strusercreatedbad'] = 'Creazione dell\'utente fallita.'; + $lang['strconfdropuser'] = 'Eliminare l\'utente "%s"?'; + $lang['struserdropped'] = 'Utente eliminato.'; + $lang['struserdroppedbad'] = 'Eliminazione dell\'utente fallita.'; + $lang['straccount'] = 'Account'; + $lang['strchangepassword'] = 'Modifica password'; + $lang['strpasswordchanged'] = 'Password modificata.'; + $lang['strpasswordchangedbad'] = 'Modifica della password fallita.'; + $lang['strpasswordshort'] = 'La password è troppo corta.'; + $lang['strpasswordconfirm'] = 'Le due password non coincidono.'; + + // Groups - Gruppi + $lang['strgroup'] = 'Gruppo'; + $lang['strgroups'] = 'Gruppi'; + $lang['strshowallgroups'] = 'Mostra tutti i gruppi'; + $lang['strnogroup'] = 'Gruppo non trovato.'; + $lang['strnogroups'] = 'Nessun gruppo trovato.'; + $lang['strcreategroup'] = 'Crea gruppo'; + $lang['strgroupneedsname'] = 'È necessario specificare un nome per il gruppo.'; + $lang['strgroupcreated'] = 'Gruppo creato.'; + $lang['strgroupcreatedbad'] = 'Creazione del gruppo fallita.'; + $lang['strconfdropgroup'] = 'Eliminare il gruppo "%s"?'; + $lang['strgroupdropped'] = 'Gruppo eliminato.'; + $lang['strgroupdroppedbad'] = 'Eliminazione del gruppo fallita.'; + $lang['strmembers'] = 'Membri'; + $lang['strmemberof'] = 'Membro di'; + $lang['stradminmembers'] = 'Membri amministratore'; + $lang['straddmember'] = 'Aggiungi membro'; + $lang['strmemberadded'] = 'Membro aggiunto.'; + $lang['strmemberaddedbad'] = 'Aggiunta del membro fallita.'; + $lang['strdropmember'] = 'Elimina membro'; + $lang['strconfdropmember'] = 'Eliminare il membro "%s" dal gruppo "%s"?'; + $lang['strmemberdropped'] = 'Membro eliminato.'; + $lang['strmemberdroppedbad'] = 'Eliminazione del membro fallita.'; + + // Ruoli - Roles + $lang['strrole'] = 'Ruolo'; + $lang['strroles'] = 'Ruoli'; + $lang['strshowallroles'] = 'Mostra tutti i ruoli'; + $lang['strnoroles'] = 'Nessun ruolo trovato.'; + $lang['strinheritsprivs'] = 'Eredita i privilegi?'; + $lang['strcreaterole'] = 'Crea ruolo'; + $lang['strcancreaterole'] = 'Può creare ruoli?'; + $lang['strrolecreated'] = 'Ruolo creato.'; + $lang['strrolecreatedbad'] = 'Creazione del ruolo fallita.'; + $lang['strrolealtered'] = 'Ruolo modificato.'; + $lang['strrolealteredbad'] = 'Modifica del ruolo fallita.'; + $lang['strcanlogin'] = 'Può effettuare login?'; + $lang['strconnlimit'] = 'Limite alle connessioni'; + $lang['strdroprole'] = 'Elimina ruolo'; + $lang['strconfdroprole'] = 'Eliminare il ruolo "%s"?'; + $lang['strroledropped'] = 'Ruolo eliminato.'; + $lang['strroledroppedbad'] = 'Eliminazione del ruolo fallita.'; + $lang['strnolimit'] = 'Nessun limite'; + $lang['strnever'] = 'Mai'; + $lang['strroleneedsname'] = 'È necessario specificare un nome per il ruolo.'; + + // Privileges - Privilegi + $lang['strprivilege'] = 'Privilegio'; + $lang['strprivileges'] = 'Privilegi'; + $lang['strnoprivileges'] = 'Questo oggetto di default ha i privilegi del proprietario.'; + $lang['strgrant'] = 'Concedi'; + $lang['strrevoke'] = 'Revoca'; + $lang['strgranted'] = 'Privilegi concessi.'; + $lang['strgrantfailed'] = 'Concessione dei privilegi fallita.'; + $lang['strgrantbad'] = 'È necessario specificare almeno un utente o gruppo ed almeno un privilegio.'; + $lang['strgrantor'] = 'Concedente'; + $lang['strasterisk'] = '*'; + + // Databases - Database + $lang['strdatabase'] = 'Database'; + $lang['strdatabases'] = 'Database'; + $lang['strshowalldatabases'] = 'Mostra tutti i database'; + $lang['strnodatabases'] = 'Nessun database trovato.'; + $lang['strcreatedatabase'] = 'Crea database'; + $lang['strdatabasename'] = 'Nome del database'; + $lang['strdatabaseneedsname'] = 'È necessario specificare un nome per il database.'; + $lang['strdatabasecreated'] = 'Database creato.'; + $lang['strdatabasecreatedbad'] = 'Creazione del database fallita.'; + $lang['strconfdropdatabase'] = 'Eliminare il database "%s"?'; + $lang['strdatabasedropped'] = 'Database eliminato.'; + $lang['strdatabasedroppedbad'] = 'Eliminazione del database fallita.'; + $lang['strentersql'] = 'Inserire la query SQL da eseguire qui sotto:'; + $lang['strsqlexecuted'] = 'SQL eseguito.'; + $lang['strvacuumgood'] = 'Vacuum completato.'; + $lang['strvacuumbad'] = 'Vacuum fallito.'; + $lang['stranalyzegood'] = 'Analyze completato.'; + $lang['stranalyzebad'] = 'Analyze fallito'; + $lang['strreindexgood'] = 'Reindicizzamento completato.'; + $lang['strreindexbad'] = 'Reindicizzamento fallito.'; + $lang['strfull'] = 'Completo'; + $lang['strfreeze'] = 'Freeze'; + $lang['strforce'] = 'Forza'; + $lang['strsignalsent'] = 'Segnale inviato.'; + $lang['strsignalsentbad'] = 'Invio del segnale fallito.'; + $lang['strallobjects'] = 'Tutti gli oggetti'; + $lang['strdatabasealtered'] = 'Database modificato.'; + $lang['strdatabasealteredbad'] = 'Modifica del database fallita.'; + + // Views - Viste + $lang['strview'] = 'Vista'; + $lang['strviews'] = 'Viste'; + $lang['strshowallviews'] = 'Mostra tutte le viste'; + $lang['strnoview'] = 'Vista non trovata.'; + $lang['strnoviews'] = 'Nessuna vista trovata.'; + $lang['strcreateview'] = 'Crea vista'; + $lang['strviewname'] = 'Nome vista'; + $lang['strviewneedsname'] = 'È necessario specificare un nome per la vista.'; + $lang['strviewneedsdef'] = 'È necessario specificare una definizione per la vista.'; + $lang['strviewneedsfields'] = 'È necessario specificare le colonne da selezionare nella vista.'; + $lang['strviewcreated'] = 'Vista creata.'; + $lang['strviewcreatedbad'] = 'Creazione della vista fallita.'; + $lang['strconfdropview'] = 'Eliminare la vista "%s"?'; + $lang['strviewdropped'] = 'Vista eliminata.'; + $lang['strviewdroppedbad'] = 'Eliminazione della vista fallita.'; + $lang['strviewupdated'] = 'Vista aggiornata.'; + $lang['strviewupdatedbad'] = 'Aggiornamento della vista fallito.'; + $lang['strviewlink'] = 'Chiavi collegate'; + $lang['strviewconditions'] = 'Condizioni aggiuntive'; + $lang['strcreateviewwiz'] = 'Crea vista tramite wizard'; + + // Sequences - Sequenze + $lang['strsequence'] = 'Sequenza'; + $lang['strsequences'] = 'Sequenze'; + $lang['strshowallsequences'] = 'Mostra tutte le sequenze'; + $lang['strnosequence'] = 'Sequenza non trovata.'; + $lang['strnosequences'] = 'Nessuna sequenza trovata.'; + $lang['strcreatesequence'] = 'Crea sequenza'; + $lang['strlastvalue'] = 'Ultimo valore'; + $lang['strincrementby'] = 'Incrementa di'; + $lang['strstartvalue'] = 'Valore iniziale'; + $lang['strmaxvalue'] = 'Valore massimo'; + $lang['strminvalue'] = 'Valore minimo'; + $lang['strcachevalue'] = 'Valori in cache'; + $lang['strcancycle'] = 'Può ricominciare?'; + $lang['striscalled'] = 'Incrementerà l\'ultimo valore prima di ritornare il prossimo valore (is_called)?'; + $lang['strsequenceneedsname'] = 'È necessario specificare un nome per la sequenza.'; + $lang['strsequencecreated'] = 'Sequenza creata.'; + $lang['strsequencecreatedbad'] = 'Creazione della sequenza fallita.'; + $lang['strconfdropsequence'] = 'Eliminare la sequenza "%s"?'; + $lang['strsequencedropped'] = 'Sequenza eliminata.'; + $lang['strsequencedroppedbad'] = 'Eliminazione della sequenza fallita.'; + $lang['strsequencereset'] = 'Reset della sequenza effettuato.'; + $lang['strsequenceresetbad'] = 'Reset della sequenza fallito.'; + $lang['strsequencealtered'] = 'Sequenza modificata.'; + $lang['strsequencealteredbad'] = 'Modifica della sequenza fallita.'; + $lang['strsetval'] = 'Imposta valore'; + $lang['strsequencesetval'] = 'Valore della sequenza impostato.'; + $lang['strsequencesetvalbad'] = 'Impostazione del valore della sequenza fallito.'; + $lang['strnextval'] = 'Incrementa valore'; + $lang['strsequencenextval'] = 'Sequenza incrementata.'; + $lang['strsequencenextvalbad'] = 'Incremento della sequenza fallito.'; + + // Indexes - Indici + $lang['strindex'] = 'Indice'; + $lang['strindexes'] = 'Indici'; + $lang['strindexname'] = 'Nome dell\'indice'; + $lang['strshowallindexes'] = 'Mostra tutti gli indici'; + $lang['strnoindex'] = 'Indice non trovato.'; + $lang['strnoindexes'] = 'Nessun indice trovato.'; + $lang['strcreateindex'] = 'Crea Indice'; + $lang['strtabname'] = 'Nome del tab'; + $lang['strcolumnname'] = 'Nome della colonna'; + $lang['strindexneedsname'] = 'È necessario specificare un nome per l\'indice'; + $lang['strindexneedscols'] = 'Gli indici richiedono di un numero valido di colonne.'; + $lang['strindexcreated'] = 'Indice creato'; + $lang['strindexcreatedbad'] = 'Creazione indice fallita.'; + $lang['strconfdropindex'] = 'Eliminare l\'indice "%s"?'; + $lang['strindexdropped'] = 'Indice eliminato.'; + $lang['strindexdroppedbad'] = 'Eliminazione dell\'indice fallita.'; + $lang['strkeyname'] = 'Nome della chiave'; + $lang['struniquekey'] = 'Chiave Univoca'; + $lang['strprimarykey'] = 'Chiave Primaria'; + $lang['strindextype'] = 'Tipo di indice'; + $lang['strtablecolumnlist'] = 'Colonne nella tabella'; + $lang['strindexcolumnlist'] = 'Colonne nell\'indice'; + $lang['strconfcluster'] = 'Clusterizzare "%s"?'; + $lang['strclusteredgood'] = 'Clusterizzazione completata.'; + $lang['strclusteredbad'] = 'Clusterizzazione fallita.'; + $lang['strcluster'] = 'Cluster'; + + // Rules - Regole + $lang['strrules'] = 'Regole'; + $lang['strrule'] = 'Regola'; + $lang['strshowallrules'] = 'Mostra tutte le regole'; + $lang['strnorule'] = 'Regola non trovata.'; + $lang['strnorules'] = 'Nessuna regola trovata.'; + $lang['strcreaterule'] = 'Crea regola'; + $lang['strrulename'] = 'Nome della regola'; + $lang['strruleneedsname'] = 'È necessario specificare un nome per la regola.'; + $lang['strrulecreated'] = 'Regola creata.'; + $lang['strrulecreatedbad'] = 'Creazione della regola fallita.'; + $lang['strconfdroprule'] = 'Eliminare la regola "%s" su "%s"?'; + $lang['strruledropped'] = 'Regola eliminata.'; + $lang['strruledroppedbad'] = 'Eliminazione della regola fallita.'; + + // Constraints - Vincoli + $lang['strconstraint'] = 'Vincolo'; + $lang['strconstraints'] = 'Vincoli'; + $lang['strshowallconstraints'] = 'Mostra tutti i vincoli'; + $lang['strnoconstraints'] = 'Nessun vincolo trovato.'; + $lang['strcreateconstraint'] = 'Crea vincolo'; + $lang['strconstraintcreated'] = 'Vincolo creato.'; + $lang['strconstraintcreatedbad'] = 'Creazione del vincolo fallita.'; + $lang['strconfdropconstraint'] = 'Eliminare il vincolo "%s" su "%s"?'; + $lang['strconstraintdropped'] = 'Vincolo eliminato.'; + $lang['strconstraintdroppedbad'] = 'Eliminazione vincolo fallita.'; + $lang['straddcheck'] = 'Aggiungi un Check'; + $lang['strcheckneedsdefinition'] = 'Il vincolo Check necessita di una definizione.'; + $lang['strcheckadded'] = 'Vincolo Check aggiunto.'; + $lang['strcheckaddedbad'] = 'Inserimento del vincolo Check fallito.'; + $lang['straddpk'] = 'Aggiungi una chiave primaria'; + $lang['strpkneedscols'] = 'La chiave primaria richiede almeno una colonna.'; + $lang['strpkadded'] = 'Chiave primaria aggiunta.'; + $lang['strpkaddedbad'] = 'Aggiunta della chiave primaria fallita.'; + $lang['stradduniq'] = 'Aggiungi una chiave univoca'; + $lang['struniqneedscols'] = 'La chiave univoca richiede almeno una colonna.'; + $lang['struniqadded'] = 'Chiave univoca aggiunta.'; + $lang['struniqaddedbad'] = 'Aggiunta chiave univoca fallita.'; + $lang['straddfk'] = 'Aggiungi una chiave esterna'; + $lang['strfkneedscols'] = 'La chiave esterna richiede almeno una colonna.'; + $lang['strfkneedstarget'] = 'La chiave esterna richiede una tabella obiettivo.'; + $lang['strfkadded'] = 'Chiave esterna aggiunta.'; + $lang['strfkaddedbad'] = 'Aggiunta della chiave esterna fallita.'; + $lang['strfktarget'] = 'Tabella obiettivo'; + $lang['strfkcolumnlist'] = 'Colonne della chiave'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions - Funzioni + $lang['strfunction'] = 'Funzione'; + $lang['strfunctions'] = 'Funzioni'; + $lang['strshowallfunctions'] = 'Mostra tutte le funzioni'; + $lang['strnofunction'] = 'Funzione non trovata.'; + $lang['strnofunctions'] = 'Nessuna funzione trovata.'; + $lang['strcreateplfunction'] = 'Crea funzione SQL/PL'; + $lang['strcreateinternalfunction'] = 'Crea funzione internal'; + $lang['strcreatecfunction'] = 'Crea funzione C'; + $lang['strfunctionname'] = 'Nome della funzione'; + $lang['strreturns'] = 'Restituisce'; + $lang['strproglanguage'] = 'Linguaggio di programmazione'; + $lang['strfunctionneedsname'] = 'È necessario specificare un nome per la funzione.'; + $lang['strfunctionneedsdef'] = 'È necessario specificare una definizione per la funzione.'; + $lang['strfunctioncreated'] = 'Funzione creata.'; + $lang['strfunctioncreatedbad'] = 'Creazione funzione fallita.'; + $lang['strconfdropfunction'] = 'Eliminare la funzione "%s"?'; + $lang['strfunctiondropped'] = 'Funzione eliminata.'; + $lang['strfunctiondroppedbad'] = 'Eliminazione della funzione fallita.'; + $lang['strfunctionupdated'] = 'Funzione aggiornata.'; + $lang['strfunctionupdatedbad'] = 'Aggiornamento della funzione fallito.'; + $lang['strobjectfile'] = 'File oggetto'; + $lang['strlinksymbol'] = 'Simbolo di collegamento'; + $lang['strarguments'] = 'Argomenti'; + + // Triggers - Trigger + $lang['strtrigger'] = 'Trigger'; + $lang['strtriggers'] = 'Trigger'; + $lang['strshowalltriggers'] = 'Mostra tutti i trigger'; + $lang['strnotrigger'] = 'Trigger non trovato.'; + $lang['strnotriggers'] = 'Nessun trigger trovato.'; + $lang['strcreatetrigger'] = 'Crea Trigger'; + $lang['strtriggerneedsname'] = 'È necessario specificare un nome per il trigger.'; + $lang['strtriggerneedsfunc'] = 'È necessario specificare una funzione per il trigger.'; + $lang['strtriggercreated'] = 'Trigger creato.'; + $lang['strtriggercreatedbad'] = 'Creazione del trigger fallita.'; + $lang['strconfdroptrigger'] = 'Eliminare il trigger "%s" su "%s"?'; + $lang['strtriggerdropped'] = 'Trigger eliminato.'; + $lang['strtriggerdroppedbad'] = 'Eliminazione del trigger fallita.'; + $lang['strtriggeraltered'] = 'Trigger modificato.'; + $lang['strtriggeralteredbad'] = 'Modifica del trigger fallita.'; + $lang['strforeach'] = 'Per ogni'; + + // Types - Tipi + $lang['strtype'] = 'Tipo'; + $lang['strtypes'] = 'Tipi'; + $lang['strshowalltypes'] = 'Mostra tutti i tipi'; + $lang['strnotype'] = 'Tipo non trovato.'; + $lang['strnotypes'] = 'Nessun tipo trovato.'; + $lang['strcreatetype'] = 'Crea Tipo'; + $lang['strcreatecomptype'] = 'Crea tipo composto'; + $lang['strtypeneedsfield'] = 'È necessario specificare almeno un campo.'; + $lang['strtypeneedscols'] = 'È necessario specificare un numero di campi valido.'; + $lang['strtypename'] = 'Nome Tipo'; + $lang['strinputfn'] = 'Funzione di input'; + $lang['stroutputfn'] = 'Funzione di output'; + $lang['strpassbyval'] = 'Passato per valore?'; + $lang['stralignment'] = 'Allineamento'; + $lang['strelement'] = 'Elemento'; + $lang['strdelimiter'] = 'Delimitatore'; + $lang['strstorage'] = 'Memorizzazione'; + $lang['strfield'] = 'Campo'; + $lang['strnumfields'] = 'Numero di campi'; + $lang['strtypeneedsname'] = 'È necessario specificare un nome per il tipo.'; + $lang['strtypeneedslen'] = 'È necessario specificare una lunghezza per il tipo.'; + $lang['strtypecreated'] = 'Tipo creato'; + $lang['strtypecreatedbad'] = 'Creazione del tipo fallita.'; + $lang['strconfdroptype'] = 'Eliminare il tipo "%s"?'; + $lang['strtypedropped'] = 'Tipo eliminato.'; + $lang['strtypedroppedbad'] = 'Eliminazione del tipo fallita.'; + $lang['strflavor'] = 'Varietà'; + $lang['strbasetype'] = 'Base'; + $lang['strcompositetype'] = 'Composto'; + $lang['strpseudotype'] = 'Pseudo-tipo'; + + // Schemas - Schemi + $lang['strschema'] = 'Schema'; + $lang['strschemas'] = 'Schemi'; + $lang['strshowallschemas'] = 'Mostra tutti gli schemi'; + $lang['strnoschema'] = 'Schema non trovato.'; + $lang['strnoschemas'] = 'Nessuno schema trovato.'; + $lang['strcreateschema'] = 'Crea schema'; + $lang['strschemaname'] = 'Nome dello schema'; + $lang['strschemaneedsname'] = 'È necessario specificare un nome per lo schema.'; + $lang['strschemacreated'] = 'Schema creato'; + $lang['strschemacreatedbad'] = 'Creazione dello schema fallita.'; + $lang['strconfdropschema'] = 'Eliminare lo schema "%s"?'; + $lang['strschemadropped'] = 'Schema eliminato.'; + $lang['strschemadroppedbad'] = 'Eliminazione dello schema fallita.'; + $lang['strschemaaltered'] = 'Schema modificato.'; + $lang['strschemaalteredbad'] = 'Modifica dello schema fallita.'; + $lang['strsearchpath'] = 'Ordine di ricerca dello schema'; + + // Reports - Rapporti + + // Domains - Domini + $lang['strdomain'] = 'Dominio'; + $lang['strdomains'] = 'Domini'; + $lang['strshowalldomains'] = 'Mostra tutti i domini'; + $lang['strnodomains'] = 'Nessun dominio trovato.'; + $lang['strcreatedomain'] = 'Crea dominio'; + $lang['strdomaindropped'] = 'Dominio eliminato.'; + $lang['strdomaindroppedbad'] = 'Eliminazione del dominio fallita.'; + $lang['strconfdropdomain'] = 'Eliminare il dominio "%s"?'; + $lang['strdomainneedsname'] = 'È necessario specificare un nome per il dominio.'; + $lang['strdomaincreated'] = 'Dominio creato.'; + $lang['strdomaincreatedbad'] = 'Creazione del dominio fallita.'; + $lang['strdomainaltered'] = 'Dominio modificato.'; + $lang['strdomainalteredbad'] = 'Modifica del dominio fallita.'; + + // Operators - Operatori + $lang['stroperator'] = 'Operatore'; + $lang['stroperators'] = 'Operatori'; + $lang['strshowalloperators'] = 'Mostra tutti gli operatori'; + $lang['strnooperator'] = 'Operatore non trovato.'; + $lang['strnooperators'] = 'Nessun operatore trovato.'; + $lang['strcreateoperator'] = 'Crea operatore'; + $lang['strleftarg'] = 'Tipo dell\'argomento di sinistra'; + $lang['strrightarg'] = 'Tipo dell\'argomento di destra'; + $lang['strcommutator'] = 'Commutatore'; + $lang['strnegator'] = 'Negator'; + $lang['strrestrict'] = 'Restrict'; + $lang['strjoin'] = 'Join'; + $lang['strhashes'] = 'Supporta hash join'; + $lang['strmerges'] = 'Supporta merge join'; + $lang['strleftsort'] = 'Ordinamento sinistro'; + $lang['strrightsort'] = 'Ordinamento destro'; + $lang['strlessthan'] = 'Minore'; + $lang['strgreaterthan'] = 'Maggiore'; + $lang['stroperatorneedsname'] = 'È necessario specificare un nome per l\'operatore.'; + $lang['stroperatorcreated'] = 'Operatore creato'; + $lang['stroperatorcreatedbad'] = 'Creazione dell\'operatore fallita.'; + $lang['strconfdropoperator'] = 'Eliminare l\'operatore "%s"?'; + $lang['stroperatordropped'] = 'Operatore eliminato.'; + $lang['stroperatordroppedbad'] = 'Eliminazione dell\'operatore fallita.'; + + // Casts - Cast + $lang['strcasts'] = 'Cast'; + $lang['strnocasts'] = 'Nessun cast trovato.'; + $lang['strsourcetype'] = 'Tipo sorgente'; + $lang['strtargettype'] = 'Tipo destinazione'; + $lang['strimplicit'] = 'Implicito'; + $lang['strinassignment'] = 'Negli assegnamenti'; + $lang['strbinarycompat'] = '(Compatibile in binario)'; + + // Conversions - Conversioni + $lang['strconversions'] = 'Conversioni'; + $lang['strnoconversions'] = 'Nessuna conversione trovata.'; + $lang['strsourceencoding'] = 'Codifica sorgente'; + $lang['strtargetencoding'] = 'Codifica destinazione'; + + // Languages - Linguaggi + $lang['strlanguages'] = 'Linguaggi'; + $lang['strnolanguages'] = 'Nessun linguaggio trovato.'; + $lang['strtrusted'] = 'Trusted'; + + // Info + $lang['strnoinfo'] = 'Nessuna informazione disponibile.'; + $lang['strreferringtables'] = 'Tabelle referenti'; + $lang['strparenttables'] = 'Tabella padre'; + $lang['strchildtables'] = 'Tabella figlia'; + + // Aggregates - Aggregati + $lang['straggregate'] = 'Aggregato'; + $lang['straggregates'] = 'Aggregati'; + $lang['strnoaggregates'] = 'Nessun aggregato trovato.'; + $lang['stralltypes'] = '(Tutti i tipi)'; + $lang['strcreateaggregate'] = 'Crea aggregato'; + $lang['straggrsfunc'] = 'Funzione di transizione di stato'; + $lang['straggrstype'] = 'Tipo di dato per il valore di stato'; + $lang['straggrffunc'] = 'Funzione finale'; + $lang['straggrinitcond'] = 'Condizione iniziale'; + $lang['straggrsortop'] = 'Operatore di ordinamento'; + $lang['strconfdropaggregate'] = 'Eliminare l\'aggregato "%s"?'; + $lang['straggregatedropped'] = 'Aggregato eliminato.'; + $lang['straggregatedroppedbad'] = 'Eliminazione dell\'aggregato fallita.'; + $lang['straggraltered'] = 'Aggregato modificato.'; + $lang['straggralteredbad'] = 'Modifica dell\'aggregato fallita.'; + $lang['straggrneedsname'] = 'È necessario specificare un nome per l\'aggregato.'; + $lang['straggrneedssfunc'] = 'È necessario specificare il nome della funzione di transizione di stato per l\'aggregato.'; + $lang['straggrneedsstype'] = 'È necessario specificare il tipo di dato per il valore di stato dell\'aggregato.'; + $lang['straggrcreated'] = 'Aggregato creato.'; + $lang['straggrcreatedbad'] = 'Creazione dell\'aggregato fallita.'; + $lang['straggrshowall'] = 'Mostra tutti gli aggregati'; + + // Operator classes - Classi di operatori + $lang['stropclasses'] = 'Classi di operatori'; + $lang['strnoopclasses'] = 'Nessuna classe di operatori trovata.'; + $lang['straccessmethod'] = 'Metodo di accesso'; + + // Stats and performance - Statistiche e performance + $lang['strrowperf'] = 'Performance sulle righe'; + $lang['strioperf'] = 'Performance sull\'I/O'; + $lang['stridxrowperf'] = 'Performance sulle righe per gli indici'; + $lang['stridxioperf'] = 'Performance sull\'I/O per gli indici'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sequenziale'; + $lang['strscan'] = 'Scan'; + $lang['strread'] = 'Read'; + $lang['strfetch'] = 'Fetch'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disco'; + $lang['strrows2'] = 'Righe'; + + // Tablespaces - Tablespace + $lang['strtablespace'] = 'Tablespace'; + $lang['strtablespaces'] = 'Tablespace'; + $lang['strshowalltablespaces'] = 'Mostra tutti i tablespace'; + $lang['strnotablespaces'] = 'Nessun tablespace trovato.'; + $lang['strcreatetablespace'] = 'Crea tablespace'; + $lang['strlocation'] = 'Directory'; + $lang['strtablespaceneedsname'] = 'È necessario specificare un nome per il tablespace.'; + $lang['strtablespaceneedsloc'] = 'È necessario specificare una directory in cui creare il tablespace.'; + $lang['strtablespacecreated'] = 'Tablespace creato.'; + $lang['strtablespacecreatedbad'] = 'Crezione del tablespace fallita.'; + $lang['strconfdroptablespace'] = 'Eliminare il tablespace "%s"?'; + $lang['strtablespacedropped'] = 'Tablespace eliminato.'; + $lang['strtablespacedroppedbad'] = 'Eliminazione del tablespace fallita.'; + $lang['strtablespacealtered'] = 'Tablespace modificato.'; + $lang['strtablespacealteredbad'] = 'Modifica del tablespace fallita.'; + + // Miscellaneous - Varie + $lang['strtopbar'] = '%s in esecuzione su %s:%s -- Utente "%s"'; + $lang['strtimefmt'] = 'j M Y - g:iA'; + $lang['strhelp'] = 'Aiuto'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Browser delle pagine di aiuto'; + $lang['strselecthelppage'] = 'Seleziona una pagina di aiuto'; + $lang['strinvalidhelppage'] = 'Pagina di aiuto non valida.'; + $lang['strlogintitle'] = 'Login su %s'; + $lang['strlogoutmsg'] = 'Logout da %s effettuato'; + $lang['strloading'] = 'Caricamento...'; + $lang['strerrorloading'] = 'Errore nel caricamento di'; + $lang['strclicktoreload'] = 'Clicca per ricaricare'; + + // Autovacuum + $lang['strautovacuum'] = 'Vacuum automatico'; + + // Prepared transactions - Transazioni preparate + $lang['strpreparedxacts'] = 'Transazioni preparate'; + $lang['strxactid'] = 'ID della transazione'; + $lang['strgid'] = 'ID globale'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/japanese.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/japanese.php new file mode 100644 index 00000000..6c72f8ad --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/japanese.php @@ -0,0 +1,855 @@ +<?php + + /** + * Japanese language file for phpPgAdmin. + * @maintainer Tadashi Jokagi [elf2000@users.sourceforge.net] + * + * $Id: japanese.php,v 1.19 2007/12/27 04:08:35 xzilla Exp $ + * EN-Revision: 1.228 + */ + + // Language and character set + $lang['applang'] = '日本語(EUC-JP)'; + $lang['applocale'] = 'ja-JP'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'ようこそ phpPgAdmin へ。'; + $lang['strppahome'] = 'phpPgAdmin ホームページ'; + $lang['strpgsqlhome'] = 'PostgreSQL ホームページ'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL ドキュメント (ローカル)'; + $lang['strreportbug'] = 'バグレポート'; + $lang['strviewfaq'] = 'FAQ を表示する'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'ログイン'; + $lang['strloginfailed'] = 'ログインに失敗しました'; + $lang['strlogindisallowed'] = 'ログインが許可されませんでした。'; + $lang['strserver'] = 'サーバー'; + $lang['strservers'] = 'サーバー'; + $lang['strintroduction'] = '導入'; + $lang['strhost'] = 'ホスト'; + $lang['strport'] = 'ポート'; + $lang['strlogout'] = 'ログアウト'; + $lang['strowner'] = '所有者'; + $lang['straction'] = 'アクション'; + $lang['stractions'] = '操作'; + $lang['strname'] = '名前'; + $lang['strdefinition'] = '定義'; + $lang['strproperties'] = 'プロパティ'; + $lang['strbrowse'] = '表示'; + $lang['strenable'] = '有効'; + $lang['strdisable'] = '無効'; + $lang['strdrop'] = '破棄'; + $lang['strdropped'] = '破棄しました。'; + $lang['strnull'] = 'NULL'; + $lang['strnotnull'] = 'NOT NULL'; + $lang['strprev'] = '前に'; + $lang['strnext'] = '次に'; + $lang['strfirst'] = '<< 最初'; + $lang['strlast'] = '最後 >>'; + $lang['strfailed'] = '失敗'; + $lang['strcreate'] = '作成'; + $lang['strcreated'] = '作成しました。'; + $lang['strcomment'] = 'コメント'; + $lang['strlength'] = '長さ'; + $lang['strdefault'] = 'デフォルト'; + $lang['stralter'] = '変更'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = '取り消し'; + $lang['strac'] = '自動補完を有効にする'; + $lang['strsave'] = '保存'; + $lang['strreset'] = 'リセット'; + $lang['strinsert'] = '挿入'; + $lang['strselect'] = '選択'; + $lang['strdelete'] = '削除'; + $lang['strupdate'] = '更新'; + $lang['strreferences'] = '参照'; + $lang['stryes'] = 'はい'; + $lang['strno'] = 'いいえ'; + $lang['strtrue'] = '真'; + $lang['strfalse'] = '偽'; + $lang['stredit'] = '編集'; + $lang['strcolumn'] = 'カラム'; + $lang['strcolumns'] = 'カラム'; + $lang['strrows'] = 'レコード'; + $lang['strrowsaff'] = '影響を受けたレコード'; + $lang['strobjects'] = 'オブジェクト'; + $lang['strback'] = '戻る'; + $lang['strqueryresults'] = 'クエリ結果'; + $lang['strshow'] = '表示'; + $lang['strempty'] = '空にする'; + $lang['strlanguage'] = '言語'; + $lang['strencoding'] = 'エンコード'; + $lang['strvalue'] = '値'; + $lang['strunique'] = 'ユニーク'; + $lang['strprimary'] = 'プライマリ'; + $lang['strexport'] = 'エクスポート'; + $lang['strimport'] = 'インポート'; + $lang['strallowednulls'] = 'NULL 文字を許可する'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = '空の文字列/項目'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = '管理'; + $lang['strvacuum'] = 'バキューム'; + $lang['stranalyze'] = '解析'; + $lang['strclusterindex'] = 'クラスター'; +$lang['strclustered'] = 'Clustered?'; + $lang['strreindex'] = '再インデックス'; + $lang['strexecute'] = '実行する'; + $lang['stradd'] = '追加'; + $lang['strevent'] = 'イベント'; + $lang['strwhere'] = 'Where'; + $lang['strinstead'] = '代行'; + $lang['strwhen'] = 'When'; + $lang['strformat'] = 'フォーマット'; + $lang['strdata'] = 'データ'; + $lang['strconfirm'] = '確認'; + $lang['strexpression'] = '評価式'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = '展開'; + $lang['strcollapse'] = '閉じる'; + $lang['strfind'] = '検索'; + $lang['stroptions'] = 'オプション'; + $lang['strrefresh'] = '再表示'; + $lang['strdownload'] = 'ダウンロード'; + $lang['strdownloadgzipped'] = 'gzip で圧縮してダウンロード'; + $lang['strinfo'] = '情報'; + $lang['stroids'] = 'OID '; + $lang['stradvanced'] = '高度な'; + $lang['strvariables'] = '変数'; + $lang['strprocess'] = 'プロセス'; + $lang['strprocesses'] = 'プロセス'; + $lang['strsetting'] = '設定'; + $lang['streditsql'] = 'SQL 編集'; + $lang['strruntime'] = '総実行時間: %s ミリ秒'; + $lang['strpaginate'] = '結果のページ分割処理を行う'; + $lang['struploadscript'] = 'または SQL スクリプトをアップロード:'; + $lang['strstarttime'] = '開始時間'; + $lang['strfile'] = 'ファイル'; + $lang['strfileimported'] = 'ファイルをインポートしました。'; + $lang['strtrycred'] = 'すべてのサーバーでこの情報を使う'; + $lang['stractionsonmultiplelines'] = '複数行の操作'; + $lang['strselectall'] = 'すべて選択する'; + $lang['strunselectall'] = 'すべて選択を解除する'; + $lang['strlocale'] = 'ロケール'; + + // User-supplied SQL history + $lang['strhistory'] = '履歴'; + $lang['strnohistory'] = '履歴がありません。'; + $lang['strclearhistory'] = '履歴を消去するす'; + $lang['strdelhistory'] = '履歴から削除する'; + $lang['strconfdelhistory'] = '本当に履歴からこの要求を削除しますか?'; + $lang['strconfclearhistory'] = '本当に履歴を消去しますか?'; + $lang['strnodatabaseselected'] = 'データベースを選択してください。'; + + // Database Sizes + $lang['strsize'] = 'サイズ'; + $lang['strbytes'] = 'バイト'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'このアプリケーションを使用するためにはフレームが使用可能なブラウザーが必要です。'; + $lang['strnoframeslink'] = 'フレームを除外して使う'; + $lang['strbadconfig'] = 'config.inc.php が旧式です。新しい config.inc.php-dist から再作成する必要があります。'; + $lang['strnotloaded'] = 'データベースをサポートするように PHP のコンパイル・インストールがされていません。configure の --with-pgsql オプションを用いて PHP を再コンパイルする必要があります。'; + $lang['strpostgresqlversionnotsupported'] = 'このバージョンの PostgreSQL はサポートしていません。バージョン %s 以上にアップグレードしてください。'; + $lang['strbadschema'] = '無効のスキーマが指定されました。'; + $lang['strbadencoding'] = 'データベースの中でクライアントエンコードを指定しませんでした。'; + $lang['strsqlerror'] = 'SQL エラー:'; + $lang['strinstatement'] = '文:'; + $lang['strinvalidparam'] = 'スクリプトパラメータが無効です。'; + $lang['strnodata'] = 'レコードが見つかりません。'; + $lang['strnoobjects'] = 'オブジェクトが見つかりません。'; + $lang['strrownotunique'] = 'このレコードには一意識別子がありません。'; + $lang['strnouploads'] = 'ファイルアップロードが無効です。'; + $lang['strimporterror'] = 'インポートエラー'; + $lang['strimporterror-fileformat'] = 'インポートエラー: ファイル形式を自動的に確定できません。.'; + $lang['strimporterrorline'] = '%s 行目がインポートエラーです。'; + $lang['strimporterrorline-badcolumnnum'] = '%s 行でインポートエラー: 行は正しい列数を持っていません。'; + $lang['strimporterror-uploadedfile'] = 'インポートエラー: サーバーにファイルをアップロードすることができないかもしれません。'; + $lang['strcannotdumponwindows'] = 'Windows 上での複合テーブルとスキーマ名のダンプはサポートしていません。'; +$lang['strinvalidserverparam'] = 'Attempt to connect with invalid server parameter, possibly someone is trying to hack your system.'; + $lang['strnoserversupplied'] = 'サーバーが指定されていません!'; + + // Tables + $lang['strtable'] = 'テーブル'; + $lang['strtables'] = 'テーブル'; + $lang['strshowalltables'] = 'すべてのテーブルを表示する'; + $lang['strnotables'] = 'テーブルが見つかりません。'; + $lang['strnotable'] = 'テーブルが見つかりません。'; + $lang['strcreatetable'] = 'テーブルを作成する'; + $lang['strcreatetablelike'] = 'このテーブルを元に新しいテーブルを作成する'; + $lang['strcreatetablelikeparent'] = '元テーブル'; + $lang['strcreatelikewithdefaults'] = 'DEFAULT を含む'; + $lang['strcreatelikewithconstraints'] = 'CONSTRAINTS を含む'; + $lang['strcreatelikewithindexes'] = 'INDEX を含む'; + $lang['strtablename'] = 'テーブル名'; + $lang['strtableneedsname'] = 'テーブル名を指定する必要があります。'; +$lang['strtablelikeneedslike'] = 'You must give a table to copy properties from.'; + $lang['strtableneedsfield'] = '少なくとも一つのフィールドを指定しなければなりません。'; + $lang['strtableneedscols'] = '有効なカラム数を指定しなければなりません。'; + $lang['strtablecreated'] = 'テーブルを作成しました。'; + $lang['strtablecreatedbad'] = 'テーブルの作成に失敗しました。'; + $lang['strconfdroptable'] = 'テーブル「%s」を本当に破棄しますか?'; + $lang['strtabledropped'] = 'テーブルを破棄しました。'; + $lang['strtabledroppedbad'] = 'テーブルの破棄に失敗しました。'; + $lang['strconfemptytable'] = '本当にテーブル「%s」の内容を破棄しますか?'; + $lang['strtableemptied'] = 'テーブルが空になりました.'; + $lang['strtableemptiedbad'] = 'テーブルを空にできませんでした。'; + $lang['strinsertrow'] = 'レコードの挿入'; + $lang['strrowinserted'] = 'レコードを挿入しました。'; + $lang['strrowinsertedbad'] = 'レコードの挿入に失敗しました。'; + $lang['strrowduplicate'] = 'レコードの挿入に失敗し、挿入の複製を試みました。'; + $lang['streditrow'] = 'レコード編集'; + $lang['strrowupdated'] = 'レコードを更新しました。'; + $lang['strrowupdatedbad'] = 'レコードの更新に失敗しました。'; + $lang['strdeleterow'] = 'レコード削除'; + $lang['strconfdeleterow'] = '本当にこのレコードを削除しますか?'; + $lang['strrowdeleted'] = 'レコードを削除しました。'; + $lang['strrowdeletedbad'] = 'レコードの削除に失敗しました。'; + $lang['strinsertandrepeat'] = '挿入と繰り返し'; + $lang['strnumcols'] = 'カラムの数'; + $lang['strcolneedsname'] = 'カラムの名前を指定しなければりません。'; + $lang['strselectallfields'] = 'すべてのフィールドを選択する'; + $lang['strselectneedscol'] = '少なくとも一カラムは必要です。'; + $lang['strselectunary'] = '単項のオペレーターは値を持つことができません。'; + $lang['strcolumnaltered'] = 'カラムを変更しました。'; + $lang['strcolumnalteredbad'] = 'カラムの変更に失敗しました。'; + $lang['strconfdropcolumn'] = '本当にカラム「%s」をテーブル「%s」から破棄していいですか?'; + $lang['strcolumndropped'] = 'カラムを破棄しました。'; + $lang['strcolumndroppedbad'] = 'カラムの破棄に失敗しました。'; + $lang['straddcolumn'] = 'カラムの追加'; + $lang['strcolumnadded'] = 'カラムを追加しました。'; + $lang['strcolumnaddedbad'] = 'カラムの追加に失敗しました。'; + $lang['strcascade'] = 'カスケード'; + $lang['strtablealtered'] = 'テーブルを変更しました。'; + $lang['strtablealteredbad'] = 'テーブルの変更に失敗しました。'; + $lang['strdataonly'] = 'データのみ'; + $lang['strstructureonly'] = '構造のみ'; + $lang['strstructureanddata'] = '構造とデータ'; + $lang['strtabbed'] = 'タブ区切り'; + $lang['strauto'] = '自動'; + $lang['strconfvacuumtable'] = '本当に「%s」をバキュームしますか?'; + $lang['strconfanalyzetable'] = '「%s」を本当に分析(ANALYZE)しますか?'; + $lang['strestimatedrowcount'] = '評価済レコード数'; + $lang['strspecifytabletoanalyze'] = 'テーブルを解析には少なくとも 1 つ指定しなければなりません'; + $lang['strspecifytabletoempty'] = 'テーブルを空にするには少なくとも 1 つ指定しなければなりません'; + $lang['strspecifytabletodrop'] = 'テーブルを破棄するには少なくとも 1 つ指定しなければなりません'; + $lang['strspecifytabletovacuum'] = 'テーブルをバキュームするには少なくとも 1 つ指定しなければなりません'; + + // Columns + $lang['strcolprop'] = 'カラムのプロパティ'; + $lang['strnotableprovided'] = 'テーブルが指定されていません!'; + + // Users + $lang['struser'] = 'ユーザー'; + $lang['strusers'] = 'ユーザー'; + $lang['strusername'] = 'ユーザー名'; + $lang['strpassword'] = 'パスワード'; + $lang['strsuper'] = 'スーパーユーザーですか?'; + $lang['strcreatedb'] = 'データベースを作成しますか?'; + $lang['strexpires'] = '有効期限'; + $lang['strsessiondefaults'] = 'セッションデフォルト'; + $lang['strnousers'] = 'ユーザーが見つかりません。'; + $lang['struserupdated'] = 'ユーザーを更新しました。'; + $lang['struserupdatedbad'] = 'ユーザーの更新に失敗しました。'; + $lang['strshowallusers'] = 'すべてのユーザーを表示する'; + $lang['strcreateuser'] = 'ユーザーを作成する'; + $lang['struserneedsname'] = 'ユーザーの名前をが必要です。'; + $lang['strusercreated'] = 'ユーザーを作成しました。'; + $lang['strusercreatedbad'] = 'ユーザーの作成に失敗しました。'; + $lang['strconfdropuser'] = '本当にユーザー「%s」を破棄しますか?'; + $lang['struserdropped'] = 'ユーザーを破棄しました。'; + $lang['struserdroppedbad'] = 'ユーザーの削除に破棄しました'; + $lang['straccount'] = 'アカウント'; + $lang['strchangepassword'] = 'パスワード変更'; + $lang['strpasswordchanged'] = 'パスワードの変更をしました。'; + $lang['strpasswordchangedbad'] = 'パスワードの変更に失敗しました。'; + $lang['strpasswordshort'] = 'パスワードが短すぎます。'; + $lang['strpasswordconfirm'] = 'パスワードの確認が一致しませんでした。'; + + // Groups + $lang['strgroup'] = 'グループ'; + $lang['strgroups'] = 'グループ'; + $lang['strshowallgroups'] = 'すべてのグループを表示する'; + $lang['strnogroup'] = 'グループがありません。'; + $lang['strnogroups'] = 'グループが見つかりません。'; + $lang['strcreategroup'] = 'グループを作成する'; + $lang['strgroupneedsname'] = 'グループ名を指定しなければなりません。'; + $lang['strgroupcreated'] = 'グループを作成しました。'; + $lang['strgroupcreatedbad'] = 'グループの作成に失敗しました。'; + $lang['strconfdropgroup'] = '本当にグループ「%s」を破棄しますか?'; + $lang['strgroupdropped'] = 'グループを破棄しました。'; + $lang['strgroupdroppedbad'] = 'グループの破棄に失敗しました。'; + $lang['strmembers'] = 'メンバー'; + $lang['strmemberof'] = '次のグループのメンバー:'; + $lang['stradminmembers'] = '管理メンバー'; + $lang['straddmember'] = 'メンバーを追加する'; + $lang['strmemberadded'] = 'メンバーを追加しました。'; + $lang['strmemberaddedbad'] = 'メンバーの追加に失敗しました。'; + $lang['strdropmember'] = 'メンバー破棄'; + $lang['strconfdropmember'] = '本当にメンバー「%s」をグループ「%s」から破棄しますか?'; + $lang['strmemberdropped'] = 'メンバーを破棄しました。'; + $lang['strmemberdroppedbad'] = 'メンバーの破棄に失敗しました。'; + + // Roles + $lang['strrole'] = 'ロール'; + $lang['strroles'] = 'ロール'; + $lang['strshowallroles'] = 'すべてのロールを表示する'; + $lang['strnoroles'] = 'ロールが見つかりません。'; + $lang['strinheritsprivs'] = '特権を引き継ぎますか?'; + $lang['strcreaterole'] = 'ロールを作成する'; + $lang['strcancreaterole'] = 'ロールを作成できますか?'; + $lang['strrolecreated'] = 'ロールを作成しました。'; + $lang['strrolecreatedbad'] = 'ロールの作成に失敗しました。'; + $lang['strrolealtered'] = 'ロールを変更しました。'; + $lang['strrolealteredbad'] = 'ロールの変更に失敗しました。'; + $lang['strcanlogin'] = 'ログインできますか?'; + $lang['strconnlimit'] = '接続制限'; + $lang['strdroprole'] = 'ロールを破棄する'; + $lang['strconfdroprole'] = '本当にロール「%s」を破棄しますか?'; + $lang['strroledropped'] = 'ロールを破棄しました。'; + $lang['strroledroppedbad'] = 'ロールの破棄に失敗しました。'; + $lang['strnolimit'] = '制限なし'; + $lang['strnever'] = 'Never'; + $lang['strroleneedsname'] = 'ロールの名前を指定しなければなりません。'; + + // Privileges + $lang['strprivilege'] = '特権'; + $lang['strprivileges'] = '特権'; + $lang['strnoprivileges'] = 'このオブジェクトは特権を持っていません。'; + $lang['strgrant'] = '権限'; + $lang['strrevoke'] = '廃止'; + $lang['strgranted'] = '特権を与えました。'; + $lang['strgrantfailed'] = '特権を与える事に失敗しました。'; + $lang['strgrantbad'] = '少なくとも一人のユーザーかグループに、少なくともひとつの特権を指定しなければなりません。'; + $lang['strgrantor'] = '譲与'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'データベース'; + $lang['strdatabases'] = 'データベース'; + $lang['strshowalldatabases'] = 'すべてのデータベースを表示する'; + $lang['strnodatabases'] = 'データベースがまったくありません。'; + $lang['strcreatedatabase'] = 'データベースを作成する'; + $lang['strdatabasename'] = 'データベース名'; + $lang['strdatabaseneedsname'] = 'データベース名を指定しなければなりません。'; + $lang['strdatabasecreated'] = 'データベースを作成しました。'; + $lang['strdatabasecreatedbad'] = 'データベースの作成に失敗しました。'; + $lang['strconfdropdatabase'] = '本当にデータベース「%s」を破棄しますか?'; + $lang['strdatabasedropped'] = 'データベースを破棄しました。'; + $lang['strdatabasedroppedbad'] = 'データベースの破棄に失敗しました。'; + $lang['strentersql'] = '下に実行するSQLを入力します:'; + $lang['strsqlexecuted'] = 'SQLを実行しました。'; + $lang['strvacuumgood'] = 'バキュームを完了しました。'; + $lang['strvacuumbad'] = 'バキュームに失敗しました。'; + $lang['stranalyzegood'] = '解析を完了しました。'; + $lang['stranalyzebad'] = '解析に失敗しました。'; + $lang['strreindexgood'] = '再インデックスを完了しました。'; + $lang['strreindexbad'] = '再インデックスに失敗しました。'; + $lang['strfull'] = 'すべて'; + $lang['strfreeze'] = 'フリーズ'; + $lang['strforce'] = '強制'; + $lang['strsignalsent'] = 'シグナル送信'; + $lang['strsignalsentbad'] = 'シグナル送信に失敗しました'; + $lang['strallobjects'] = 'すべてのオブジェクト'; + $lang['strdatabasealtered'] = 'データベースを変更しました。'; + $lang['strdatabasealteredbad'] = 'データベースの変更に失敗しました。'; + $lang['strspecifydatabasetodrop'] = 'データベースを破棄するには少なくとも 1 つ指定しなければなりません'; + + // Views + $lang['strview'] = 'ビュー'; + $lang['strviews'] = 'ビュー'; + $lang['strshowallviews'] = 'すべてのビューを表示する'; + $lang['strnoview'] = 'ビューがありません。'; + $lang['strnoviews'] = 'ビューが見つかりません。'; + $lang['strcreateview'] = 'ビューを作成する'; + $lang['strviewname'] = 'ビュー名'; + $lang['strviewneedsname'] = 'ビュー名を指定しなければなりません。'; + $lang['strviewneedsdef'] = '定義名を指定しなければなりません。'; + $lang['strviewneedsfields'] = 'ビューのの中から選択し、希望のカラムを指定しなければなりません。'; + $lang['strviewcreated'] = 'ビューを作成しました。'; + $lang['strviewcreatedbad'] = 'ビューの作成に失敗しました。'; + $lang['strconfdropview'] = '本当にビュー「%s」を破棄しますか?'; + $lang['strviewdropped'] = 'ビューを破棄しました。'; + $lang['strviewdroppedbad'] = 'ビューの破棄に失敗しました。'; + $lang['strviewupdated'] = 'ビューを更新しました。'; + $lang['strviewupdatedbad'] = 'ビューの更新に失敗しました。'; + $lang['strviewlink'] = 'リンクしたキー'; + $lang['strviewconditions'] = '追加条件'; + $lang['strcreateviewwiz'] = 'ウィザードでビューを作成する'; + $lang['strrenamedupfields'] = '重複項目の名前を変更する'; + $lang['strdropdupfields'] = '重複項目を破棄する'; + $lang['strerrordupfields'] = '重複項目のエラーです'; + $lang['strviewaltered'] = 'ビューを変更しました。'; + $lang['strviewalteredbad'] = 'ビューの変更に失敗しました。'; + $lang['strspecifyviewtodrop'] = 'ビューを破棄するには少なくとも 1 つ指定しなければなりません'; + + // Sequences + $lang['strsequence'] = 'シーケンス'; + $lang['strsequences'] = 'シーケンス'; + $lang['strshowallsequences'] = 'すべてのシーケンスを表示する'; + $lang['strnosequence'] = 'シーケンスがありません。'; + $lang['strnosequences'] = 'シーケンスが見つかりません。'; + $lang['strcreatesequence'] = 'シーケンスを作成する'; + $lang['strlastvalue'] = '最終値'; + $lang['strincrementby'] = '増加数'; + $lang['strstartvalue'] = '開始値'; + $lang['strmaxvalue'] = '最大値'; + $lang['strminvalue'] = '最小値'; + $lang['strcachevalue'] = 'キャッシュ値'; + $lang['strlogcount'] = 'ログカウント'; +$lang['strcancycle'] = 'Can cycle?'; +$lang['striscalled'] = 'Will increment last value before returning next value (is_called)?'; + $lang['strsequenceneedsname'] = 'シーケンス名を指定しなければなりません。'; + $lang['strsequencecreated'] = 'シーケンスを作成しました。'; + $lang['strsequencecreatedbad'] = 'シーケンスの作成に失敗しました。'; + $lang['strconfdropsequence'] = '本当にシーケンス「%s」を破棄しますか?'; + $lang['strsequencedropped'] = 'シーケンスを破棄しました。'; + $lang['strsequencedroppedbad'] = 'シーケンスの破棄に失敗しました。'; + $lang['strsequencereset'] = 'シーケンスリセットを行いました。'; + $lang['strsequenceresetbad'] = 'シーケンスのリセットに失敗しました。'; + $lang['strsequencealtered'] = 'シーケンスを変更しました。'; + $lang['strsequencealteredbad'] = 'シーケンスの変更に失敗しました。'; + $lang['strsetval'] = '値を設定する'; + $lang['strsequencesetval'] = 'シーケンス値を設定しました。'; + $lang['strsequencesetvalbad'] = 'シーケンス値の設定に失敗しました。'; + $lang['strnextval'] = '値を増加する'; + $lang['strsequencenextval'] = '値を増加しました。'; + $lang['strsequencenextvalbad'] = '値の増加に失敗しました。'; + $lang['strspecifysequencetodrop'] = 'シーケンスを破棄するには少なくとも 1 つ指定しなければなりません'; + + // Indexes + $lang['strindex'] = 'インデックス'; + $lang['strindexes'] = 'インデックス'; + $lang['strindexname'] = 'インデックス名'; + $lang['strshowallindexes'] = 'すべてのインデックスを表示する'; + $lang['strnoindex'] = 'インデックスがありません。'; + $lang['strnoindexes'] = 'インデックスが見つかりません。'; + $lang['strcreateindex'] = 'インデックスを作成する'; + $lang['strtabname'] = 'タブ名'; + $lang['strcolumnname'] = 'カラム名'; + $lang['strindexneedsname'] = '有効なインデックス名を指定しなければいけません。'; + $lang['strindexneedscols'] = '有効なカラム数を指定しなければいけません。'; + $lang['strindexcreated'] = 'インデックスを作成しました。'; + $lang['strindexcreatedbad'] = 'インデックスの作成に失敗しました。'; + $lang['strconfdropindex'] = '本当にインデックス「%s」を破棄しますか?'; + $lang['strindexdropped'] = 'インデックスを破棄しました。'; + $lang['strindexdroppedbad'] = 'インデックスの破棄に失敗しました。'; + $lang['strkeyname'] = 'キー名'; + $lang['struniquekey'] = 'ユニークキー'; + $lang['strprimarykey'] = 'プライマリキー'; + $lang['strindextype'] = 'インデックスタイプ'; + $lang['strtablecolumnlist'] = 'テーブル中のカラム'; + $lang['strindexcolumnlist'] = 'インデックス中のカラム'; + $lang['strconfcluster'] = '本当に「%s」をクラスターにしますか?'; + $lang['strclusteredgood'] = 'クラスター完了です。'; + $lang['strclusteredbad'] = 'クラスターに失敗しました。'; + $lang['strcluster'] = 'クラスター'; + + // Rules + $lang['strrules'] = 'ルール'; + $lang['strrule'] = 'ルール'; + $lang['strshowallrules'] = 'すべてのルールを表示する'; + $lang['strnorule'] = 'ルールがありません。'; + $lang['strnorules'] = 'ルールが見つかりません。'; + $lang['strcreaterule'] = 'ルールを作成する'; + $lang['strrulename'] = 'ルール名'; + $lang['strruleneedsname'] = 'ルール名を指定しなければなりません。'; + $lang['strrulecreated'] = 'ルールを作成しました。'; + $lang['strrulecreatedbad'] = 'ルールの作成に失敗しました。'; + $lang['strconfdroprule'] = '本当にルール「%s」をデータベース「%s」から破棄しますか?'; + $lang['strruledropped'] = 'ルールを破棄しました。'; + $lang['strruledroppedbad'] = 'ルールの破棄に失敗しました。'; + + // Constraints + $lang['strconstraint'] = '検査制約'; + $lang['strconstraints'] = '検査制約'; + $lang['strshowallconstraints'] = 'すべての検査制約を表示する'; + $lang['strnoconstraints'] = '検査制約がありません。'; + $lang['strcreateconstraint'] = '検査制約を作成する'; + $lang['strconstraintcreated'] = '検査制約を作成しました。'; + $lang['strconstraintcreatedbad'] = '検査制約の作成に失敗しました。'; + $lang['strconfdropconstraint'] = '本当に検査制約「%s」をデータベース「%s」から破棄しますか?'; + $lang['strconstraintdropped'] = '検査制約を破棄しました。'; + $lang['strconstraintdroppedbad'] = '検査制約の破棄に失敗しました。'; + $lang['straddcheck'] = '検査を追加する'; + $lang['strcheckneedsdefinition'] = '検査制約には定義が必要です。'; + $lang['strcheckadded'] = '検査制約を追加しました。'; + $lang['strcheckaddedbad'] = '検査制約の追加に失敗しました。'; + $lang['straddpk'] = 'プライマリキーを追加する'; + $lang['strpkneedscols'] = 'プライマリキーは少なくとも一カラムを必要とします。'; + $lang['strpkadded'] = 'プライマリキーを追加しました。'; + $lang['strpkaddedbad'] = 'プライマリキーの追加に失敗しました。'; + $lang['stradduniq'] = 'ユニークキーを追加する'; + $lang['struniqneedscols'] = 'ユニークキーは少なくとも一カラムを必要とします。'; + $lang['struniqadded'] = 'ユニークキーを追加しました。'; + $lang['struniqaddedbad'] = 'ユニークキーの追加に失敗しました。'; + $lang['straddfk'] = '外部キーを追加する'; + $lang['strfkneedscols'] = '外部キーは少なくとも一カラムを必要とします。'; + $lang['strfkneedstarget'] = '外部キーはターゲットテーブルを必要とします。'; + $lang['strfkadded'] = '外部キーを追加しました。'; + $lang['strfkaddedbad'] = '外部キーの追加に失敗しました。'; + $lang['strfktarget'] = '対象テーブル'; + $lang['strfkcolumnlist'] = 'キー中のカラム'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = '関数'; + $lang['strfunctions'] = '関数'; + $lang['strshowallfunctions'] = 'すべて関数を表示する'; + $lang['strnofunction'] = '関数がありません。'; + $lang['strnofunctions'] = '関数が見つかりません。'; + $lang['strcreateplfunction'] = 'SQL/PL 関数を作成する'; + $lang['strcreateinternalfunction'] = '内部関数を作成する'; + $lang['strcreatecfunction'] = 'C 関数を作成する'; + $lang['strfunctionname'] = '関数名'; + $lang['strreturns'] = '返り値'; + $lang['strproglanguage'] = 'プログラミング言語'; + $lang['strfunctionneedsname'] = '関数名を指定しなければなりません。'; + $lang['strfunctionneedsdef'] = '関数の定義をしなければなりあせん。'; + $lang['strfunctioncreated'] = '関数を作成しました。'; + $lang['strfunctioncreatedbad'] = '関数の作成に失敗しました。'; + $lang['strconfdropfunction'] = '本当に関数「%s」を破棄しますか?'; + $lang['strfunctiondropped'] = '関数を破棄しました。'; + $lang['strfunctiondroppedbad'] = '関数の破棄に失敗しました。'; + $lang['strfunctionupdated'] = '関数を更新しました。'; + $lang['strfunctionupdatedbad'] = '関数の更新に失敗しました。'; + $lang['strobjectfile'] = 'オブジェクトファイル'; + $lang['strlinksymbol'] = 'リンクシンボル'; + $lang['strarguments'] = '引数'; + $lang['strargmode'] = 'モード'; + $lang['strargtype'] = '種類'; + $lang['strargadd'] = '他の引数を追加する'; + $lang['strargremove'] = 'この引数を削除する'; + $lang['strargnoargs'] = 'この関数はいくつかの引数を取らなでしょう。'; +$lang['strargenableargs'] = 'Enable arguments being passed to this function.'; + $lang['strargnorowabove'] = 'この行の上に行が必要です。'; + $lang['strargnorowbelow'] = 'この行の下に行が必要です。'; + $lang['strargraise'] = '上に移動します。'; + $lang['strarglower'] = '下に移動します。'; + $lang['strargremoveconfirm'] = '本当にこの引数を削除しますか? これは戻すことができませんThis CANNOT be undone。'; +$lang['strfunctioncosting'] = 'Function Costing'; +$lang['strresultrows'] = 'Result Rows'; +$lang['strexecutioncost'] = 'Execution Cost'; + $lang['strspecifyfunctiontodrop'] = '関数を破棄するには少なくとも 1 つ指定しなければなりません'; + + // Triggers + $lang['strtrigger'] = 'トリガー'; + $lang['strtriggers'] = 'トリガー'; + $lang['strshowalltriggers'] = 'すべてのトリガーを表示する'; + $lang['strnotrigger'] = 'トリガーがありません。'; + $lang['strnotriggers'] = 'トリガーが見つかりません。'; + $lang['strcreatetrigger'] = 'トリガーを作成する'; + $lang['strtriggerneedsname'] = 'トリガー名を指定する必要があります。'; + $lang['strtriggerneedsfunc'] = 'トリガーのための関数を指定しなければなりません。'; + $lang['strtriggercreated'] = 'トリガーを作成しました。'; + $lang['strtriggercreatedbad'] = 'トリガーの作成に失敗しました。'; + $lang['strconfdroptrigger'] = '本当にトリガー「%s」をデータベース「%s」から破棄しますか?'; + $lang['strconfenabletrigger'] = '本当に「%2$s」のトリガー「%1$s」を有効にしますか?'; + $lang['strconfdisabletrigger'] = '本当に「%2$s」のトリガー「%1$s」を無効にしますか?'; + $lang['strtriggerdropped'] = 'トリガーを破棄しました。'; + $lang['strtriggerdroppedbad'] = 'トリガーの破棄に失敗しました。'; + $lang['strtriggerenabled'] = 'トリガーを有効にしました。'; + $lang['strtriggerenabledbad'] = 'トリガーの有効化に失敗しました。'; + $lang['strtriggerdisabled'] = 'トリガーを無効にしました。'; + $lang['strtriggerdisabledbad'] = 'トリガーの無効化に失敗しました。'; + $lang['strtriggeraltered'] = 'トリガーを変更しました。'; + $lang['strtriggeralteredbad'] = 'トリガーの変更に失敗しました。'; +$lang['strforeach'] = 'For each'; + + // Types + $lang['strtype'] = 'データ型'; + $lang['strtypes'] = 'データ型'; + $lang['strshowalltypes'] = 'すべてのデータ型を表示する'; + $lang['strnotype'] = 'データ型がありません。'; + $lang['strnotypes'] = 'データ型が見つかりませんでした。'; + $lang['strcreatetype'] = 'データ型を作成する'; + $lang['strcreatecomptype'] = '複合型を作成する'; +$lang['strcreateenumtype'] = 'Create enum type'; + $lang['strtypeneedsfield'] = '少なくとも 1 つのフィールドを指定しなければなりません。'; + $lang['strtypeneedsvalue'] = '少なくとも 1 つの値を指定しなければなりません。'; + $lang['strtypeneedscols'] = '有効なフィールドの数を指定しなければなりません。'; +$lang['strtypeneedsvals'] = 'You must specify a valid number of values.'; + $lang['strinputfn'] = '入力関数'; + $lang['stroutputfn'] = '出力関数'; +$lang['strpassbyval'] = 'Passed by val?'; + $lang['stralignment'] = 'アライメント'; + $lang['strelement'] = '要素'; + $lang['strdelimiter'] = 'デミリタ'; + $lang['strstorage'] = 'ストレージ'; + $lang['strfield'] = 'フィールド'; +$lang['strvalue'] = 'Value'; +$lang['strvalue'] = 'Value'; + $lang['strnumfields'] = 'フィールド数'; +$lang['strnumvalues'] = 'Num. of values'; + $lang['strtypeneedsname'] = '型名を指定しなければなりません。'; + $lang['strtypeneedslen'] = 'データ型の長さを指定しなければなりません。'; + $lang['strtypecreated'] = 'データ型を作成しました。'; + $lang['strtypecreatedbad'] = 'データ型の作成に失敗しました。'; + $lang['strconfdroptype'] = '本当にデータ型「%s」を破棄しますか?'; + $lang['strtypedropped'] = 'データ型を破棄しました。'; + $lang['strtypedroppedbad'] = 'データ型の破棄に失敗しました。'; + $lang['strflavor'] = '種類'; + $lang['strbasetype'] = '基本'; + $lang['strcompositetype'] = '複合型'; + $lang['strpseudotype'] = '擬似データ'; +$lang['strenum'] = 'Enum'; +$lang['strenumvalues'] = 'Enum Values'; + + // Schemas + $lang['strschema'] = 'スキーマ'; + $lang['strschemas'] = 'スキーマ'; + $lang['strshowallschemas'] = 'すべてのスキーマを表示する'; + $lang['strnoschema'] = 'スキーマがありません。'; + $lang['strnoschemas'] = 'スキーマが見つかりません。'; + $lang['strcreateschema'] = 'スキーマを作成する'; + $lang['strschemaname'] = 'スキーマ名'; + $lang['strschemaneedsname'] = 'スキーマ名を指定する必要があります。'; + $lang['strschemacreated'] = 'スキーマを作成しました。'; + $lang['strschemacreatedbad'] = 'スキーマの作成に失敗しました。'; + $lang['strconfdropschema'] = '本当にスキーマ「%s」を破棄しますか?'; + $lang['strschemadropped'] = 'スキーマを破棄しました。'; + $lang['strschemadroppedbad'] = 'スキーマの破棄に失敗しました。'; + $lang['strschemaaltered'] = 'スキーマを変更しました。'; + $lang['strschemaalteredbad'] = 'スキーマの変更に失敗しました。'; + $lang['strsearchpath'] = 'スキーマ検索パス'; + $lang['strspecifyschematodrop'] = 'スキーマを破棄するには少なくとも 1 つ指定しなければなりません'; + + // Reports + + // Domains + $lang['strdomain'] = 'ドメイン'; + $lang['strdomains'] = 'ドメイン'; + $lang['strshowalldomains'] = 'すべてのドメインを表示する'; + $lang['strnodomains'] = 'ドメインがありません。'; + $lang['strcreatedomain'] = 'ドメイン作成'; + $lang['strdomaindropped'] = 'ドメインを破棄しました。'; + $lang['strdomaindroppedbad'] = 'ドメインの破棄に失敗しました。'; + $lang['strconfdropdomain'] = '本当にドメイン「%s」を破棄しますか?'; + $lang['strdomainneedsname'] = 'ドメイン名を指定する必要があります。'; + $lang['strdomaincreated'] = 'ドメインを作成しました。'; + $lang['strdomaincreatedbad'] = 'ドメインの作成に失敗しました。'; + $lang['strdomainaltered'] = 'ドメインを変更しました。'; + $lang['strdomainalteredbad'] = 'ドメインの変更に失敗しました。'; + + // Operators + $lang['stroperator'] = '演算子'; + $lang['stroperators'] = '演算子'; + $lang['strshowalloperators'] = 'すべての演算子を表示する'; + $lang['strnooperator'] = '演算子が見つかりません。'; + $lang['strnooperators'] = '演算子クラスが見つかりません。'; + $lang['strcreateoperator'] = '演算子を作成しました。'; + $lang['strleftarg'] = '左引数タイプ'; + $lang['strrightarg'] = '右引数タイプ'; + $lang['strcommutator'] = '交代'; + $lang['strnegator'] = '否定'; + $lang['strrestrict'] = '制限'; + $lang['strjoin'] = '結合'; + $lang['strhashes'] = 'ハッシュ'; + $lang['strmerges'] = '併合'; + $lang['strleftsort'] = '左ソート'; + $lang['strrightsort'] = '右ソート'; + $lang['strlessthan'] = '未満'; + $lang['strgreaterthan'] = '以上'; + $lang['stroperatorneedsname'] = '演算子名を指定する必要があります。'; + $lang['stroperatorcreated'] = '演算子を作成しました。'; + $lang['stroperatorcreatedbad'] = '演算子の作成に失敗しました。'; + $lang['strconfdropoperator'] = '本当に演算子「%s」を破棄しますか?'; + $lang['stroperatordropped'] = '演算子を破棄しました。'; + $lang['stroperatordroppedbad'] = '演算子の破棄に失敗しました。'; + + // Casts + $lang['strcasts'] = 'キャスト'; + $lang['strnocasts'] = 'キャストが見つかりません。'; + $lang['strsourcetype'] = 'ソースタイプ'; + $lang['strtargettype'] = 'ターゲットタイプ'; + $lang['strimplicit'] = '暗黙'; +$lang['strinassignment'] = 'In assignment'; + $lang['strbinarycompat'] = '(バイナリー互換)'; + + // Conversions + $lang['strconversions'] = '変換'; + $lang['strnoconversions'] = '変換が見つかりません。'; + $lang['strsourceencoding'] = '変換元エンコード'; + $lang['strtargetencoding'] = '変換先エンコード'; + + // Languages + $lang['strlanguages'] = '言語'; + $lang['strnolanguages'] = '言語が存在しません。'; +$lang['strtrusted'] = 'Trusted'; + + // Info + $lang['strnoinfo'] = '有効な情報がありません。'; + $lang['strreferringtables'] = '参照テーブル'; + $lang['strparenttables'] = '親テーブル'; + $lang['strchildtables'] = '子テーブル'; + + // Aggregates + $lang['straggregate'] = '集計'; + $lang['straggregates'] = '集計'; + $lang['strnoaggregates'] = '集計がありません。'; + $lang['stralltypes'] = '(すべての種類)'; + $lang['strcreateaggregate'] = '集計を作成する'; + $lang['straggrbasetype'] = '入力データの種類'; + $lang['straggrsfunc'] = '状態遷移関数'; + $lang['straggrstype'] = '状態データの種類'; + $lang['straggrffunc'] = '終了関数'; + $lang['straggrinitcond'] = '初期状態'; + $lang['straggrsortop'] = 'ソート操作'; + $lang['strconfdropaggregate'] = '本当に集計「%s」を破棄しますか?'; + $lang['straggregatedropped'] = '集計を破棄しました。'; + $lang['straggregatedroppedbad'] = '集計の破棄に失敗しました。'; + $lang['straggraltered'] = '集計を変更しました。'; + $lang['straggralteredbad'] = '集計の変更に失敗しました。'; + $lang['straggrneedsname'] = '集計は名前を指定しなければなりません'; + $lang['straggrneedsbasetype'] = '集計は入力データの種類を指定しなければなりません'; + $lang['straggrneedssfunc'] = '集計は状態遷移関数の名前を指定しなければなりません'; + $lang['straggrneedsstype'] = '集計の状態値のデータの種類を指定しなければなりません'; + $lang['straggrcreated'] = '集計を作成しました。'; + $lang['straggrcreatedbad'] = '集計の作成に失敗しました。'; + $lang['straggrshowall'] = 'すべての集計を表示する'; + + // Operator Classes + $lang['stropclasses'] = '演算子クラス'; + $lang['strnoopclasses'] = '演算子クラスが見つかりません。'; + $lang['straccessmethod'] = 'アクセス方法'; + + // Stats and performance + $lang['strrowperf'] = '行パフォーマンス'; + $lang['strioperf'] = 'I/O パフォーマンス'; + $lang['stridxrowperf'] = 'インデックス行パフォーマンス'; + $lang['stridxioperf'] = 'インデックス I/O パフォーマンス'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'シーケンシャル'; + $lang['strscan'] = '検索'; + $lang['strread'] = '読込'; + $lang['strfetch'] = '取得'; + $lang['strheap'] = 'ヒープ'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST インデックス'; + $lang['strcache'] = 'キャッシュ'; + $lang['strdisk'] = 'ディスク'; + $lang['strrows2'] = '行'; + + // Tablespaces + $lang['strtablespace'] = 'テーブル空間'; + $lang['strtablespaces'] = 'テーブル空間'; + $lang['strshowalltablespaces'] = 'すべてのテーブルスペースを表示する'; + $lang['strnotablespaces'] = 'テーブル空間が見つかりません。'; + $lang['strcreatetablespace'] = 'テーブル空間を作成する'; + $lang['strlocation'] = 'ロケーション'; + $lang['strtablespaceneedsname'] = 'テーブル空間名を指定する必要があります。'; + $lang['strtablespaceneedsloc'] = 'テーブル空間作成をするディレクトリを指定する必要があります。'; + $lang['strtablespacecreated'] = 'テーブル空間を作成しました。'; + $lang['strtablespacecreatedbad'] = 'テーブル空間の作成に失敗しました。'; + $lang['strconfdroptablespace'] = '本当にテーブル空間「%s」を破棄しますか?'; + $lang['strtablespacedropped'] = 'テーブル空間を破棄しました。'; + $lang['strtablespacedroppedbad'] = 'テーブル空間の破棄に失敗しました。'; + $lang['strtablespacealtered'] = 'テーブル空間を変更しました。'; + $lang['strtablespacealteredbad'] = 'テーブル空間の変更に失敗しました。'; + + // Miscellaneous + $lang['strtopbar'] = 'サーバー %2$s のポート番号 %3$s で実行中の %1$s に接続中 -- ユーザー「%4$s」としてログイン中'; + $lang['strtimefmt'] = 'Y 年 n 月 j 日 G:i'; + $lang['strhelp'] = 'ヘルプ'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'ヘルプページブラウザー'; + $lang['strselecthelppage'] = 'ヘルプページを選んでください'; + $lang['strinvalidhelppage'] = '無効なヘルプページです。'; + $lang['strlogintitle'] = '%s にログイン'; + $lang['strlogoutmsg'] = '%s をログアウトしました。'; + $lang['strloading'] = '読み込み中...'; + $lang['strerrorloading'] = '読み込み中のエラーです。'; + $lang['strclicktoreload'] = 'クリックで再読み込み'; + + // Autovacuum + $lang['strautovacuum'] = 'オートバキューム'; + $lang['strturnedon'] = 'オンにする'; + $lang['strturnedoff'] = 'オフにする'; +$lang['strenabled'] = 'Enabled'; + $lang['strvacuumbasethreshold'] = '閾値に基づいたバキューム'; +$lang['strvacuumscalefactor'] = 'Vacuum Scale Factor'; + $lang['stranalybasethreshold'] = '閾値に基づいた解析'; +$lang['stranalyzescalefactor'] = 'Analyze Scale Factor'; +$lang['strvacuumcostdelay'] = 'Vacuum Cost Delay'; +$lang['strvacuumcostlimit'] = 'Vacuum Cost Limit'; + + // Table-level Locks + $lang['strlocks'] = 'ロック'; + $lang['strtransaction'] = 'トランザクション ID'; + $lang['strvirtualtransaction'] = '仮想トランザクション ID'; + $lang['strprocessid'] = 'プロセス ID'; + $lang['strmode'] = 'ロックモード'; +$lang['strislockheld'] = 'Is lock held?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'プリペアを用いたトランザクション'; + $lang['strxactid'] = 'トランザクション ID'; + $lang['strgid'] = '全体 ID'; + + // Fulltext search + $lang['strfulltext'] = '全文テキスト検索'; + $lang['strftsconfig'] = 'FTS 設定'; + $lang['strftsconfigs'] = '設定'; + $lang['strftscreateconfig'] = 'FTS 設定の作成'; + $lang['strftscreatedict'] = '辞書を作成する'; + $lang['strftscreatedicttemplate'] = '辞書のテンプレートを作成する'; + $lang['strftscreateparser'] = 'パーサーを作成する'; + $lang['strftsnoconfigs'] = 'FTS 設定が見つかりません。'; + $lang['strftsconfigdropped'] = 'FTS 設定を破棄しました。'; + $lang['strftsconfigdroppedbad'] = 'FTS 設定の破棄に失敗しました。'; + $lang['strconfdropftsconfig'] = '本当に FTS 設定「%s」を破棄しますか?'; + $lang['strconfdropftsdict'] = '本当に FTS 辞書「%s」を破棄しますか?'; + $lang['strconfdropftsmapping'] = '本当に FTS 設定「%s」のマップ「%s」を破棄しますか?'; + $lang['strftstemplate'] = 'テンプレート'; + $lang['strftsparser'] = 'パーサー'; + $lang['strftsconfigneedsname'] = 'FTS 設定には名前を指定する必要があります。'; + $lang['strftsconfigcreated'] = 'FTS 設定を作成しました。'; + $lang['strftsconfigcreatedbad'] = 'FTS 設定の作成に失敗しました。'; +$lang['strftsmapping'] = 'Mapping'; + $lang['strftsdicts'] = '辞書'; + $lang['strftsdict'] = '辞書'; + $lang['strftsemptymap'] = 'FTS 設定マップが空です。'; +$lang['strftswithmap'] = 'With map'; +$lang['strftsmakedefault'] = 'Make default for given locale'; + $lang['strftsconfigaltered'] = 'FTS 設定を変更しました。'; + $lang['strftsconfigalteredbad'] = 'FTS 設定の変更に失敗しました。'; + $lang['strftsconfigmap'] = 'FTS 設定マップ'; + $lang['strftsparsers'] = 'FTS パーサー'; + $lang['strftsnoparsers'] = '利用できる FTS パーサーがありません。'; + $lang['strftsnodicts'] = '利用できる FTS 辞書がありません。'; + $lang['strftsdictcreated'] = 'FTS 辞書を作成しました。'; + $lang['strftsdictcreatedbad'] = 'FTS 辞書の作成に失敗しました'; +$lang['strftslexize'] = 'Lexize'; +$lang['strftsinit'] = 'Init'; + $lang['strftsoptionsvalues'] = 'オプションと値'; + $lang['strftsdictneedsname'] = 'FTS 辞書の名前を指定しなければなりません。'; + $lang['strftsdictdropped'] = 'FTS 辞書を破棄しました。'; + $lang['strftsdictdroppedbad'] = 'FTS 辞書の破棄に失敗しました。'; + $lang['strftsdictaltered'] = 'FTS 辞書を変更しました。'; + $lang['strftsdictalteredbad'] = 'FTS 辞書の変更に失敗しました。'; + $lang['strftsaddmapping'] = '新規マップを追加する'; + $lang['strftsspecifymappingtodrop'] = 'マップを破棄をするには少なくとも 1 つ指定しなければなりません'; + $lang['strftsspecifyconfigtoalter'] = 'FTS 設定を変更するには指定しなければなりません'; + $lang['strftsmappingdropped'] = 'FTS マップを破棄しました。'; + $lang['strftsmappingdroppedbad'] = 'FTS マップの破棄に失敗しました。'; + $lang['strftsnodictionaries'] = '辞書が見つかりません。'; + $lang['strftsmappingaltered'] = 'FTS マップを変更しました。'; + $lang['strftsmappingalteredbad'] = 'FTS マップの変更に失敗しました。'; + $lang['strftsmappingadded'] = 'FTS マップを追加しました。'; + $lang['strftsmappingaddedbad'] = 'FTS マップの追加に失敗しました。'; + $lang['strftsmappingdropped'] = 'FTS マップを破棄しました。'; + $lang['strftsmappingdroppedbad'] = 'FTS マップの破棄に失敗しました。'; + $lang['strftstabconfigs'] = '設定'; + $lang['strftstabdicts'] = '辞書'; + $lang['strftstabparsers'] = 'パーサー'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/langcheck b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/langcheck new file mode 100644 index 00000000..aa95d25d --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/langcheck @@ -0,0 +1,71 @@ +#!/usr/local/bin/php -q +<?php + + /** + * This script will generate a report on the status of a language + * as compared to the master english translation. + * + * $Id: langcheck,v 1.5 2005/07/19 18:21:58 soranzo Exp $ + */ + // cytopia edit + //error_reporting(E_ALL); + error_reporting(E_ERROR | E_WARNING | E_PARSE); + //error_reporting(E_ALL & ~E_DEPRECATED); + + // Prevent timeouts (non-safe mode only) + if (!ini_get('safe_mode')) set_time_limit(0); + + // Check arguments + if (sizeof($_SERVER['argv']) != 2 or ( + is_file($_SERVER['argv'][1]) ? ( + substr_compare(pathinfo($_SERVER['argv'][1], PATHINFO_EXTENSION), "php", 0, 3, FALSE) == 0 ? TRUE : FALSE) : FALSE )) { + echo "Usage: langcheck <language>\n\n"; + echo " <language> is the filename without the .php extension\n"; + exit; + } + elseif (!file_exists("{$_SERVER['argv'][1]}.php")) { + echo "Error: File not found.\n"; + exit; + } + + // Include english source file + include('./english.php'); + + $master = $lang; + $master_keys = array_keys($lang); + unset($lang); + + // Include target language file + include("./{$_SERVER['argv'][1]}.php"); + $slave = $lang; + $slave_keys = array_keys($lang); + + echo "Source file: english.php\n"; + echo "Target file: {$_SERVER['argv'][1]}.php\n\n"; + + // Find missing values + $diff = array_diff($master_keys, $slave_keys); + echo "Missing Strings\n"; + echo "---------------\n\n"; + if (sizeof($diff) > 0) { + foreach ($diff as $v) { + echo "\$lang['{$v}'] = '", str_replace("'", "\\'", $master[$v]), "';\n"; + } + echo "\n"; + echo "Translations: ", sizeof($master_keys) - sizeof($diff), "/", sizeof($master_keys), "\n\n"; + + } + else echo "None\n\n"; + + // Find extra values (to be deleted) + $diff = array_diff($slave_keys, $master_keys); + echo "Deleted Strings\n"; + echo "---------------\n\n"; + if (sizeof($diff) > 0) { + foreach ($diff as $v) { + echo "\$lang['{$v}'] = '", str_replace("'", "\\'", $slave[$v]), "';\n"; + } + } + else echo "None\n"; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/lithuanian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/lithuanian.php new file mode 100644 index 00000000..4134644a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/lithuanian.php @@ -0,0 +1,898 @@ +<?php + + /** + * Lithuanian language file for phpPgAdmin. + * @maintainer artvras [artvras@users.sourceforge.net] + * + * $Id: lithuanian.php,v 1.0 2011/05/25 14:34:33 $ + */ + + // Language and character set + $lang['applang'] = 'Lietuvių'; + $lang['applocale'] = 'lt-LT'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Sveiki atvykę į phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmin pradinis puslapis'; + $lang['strpgsqlhome'] = 'PostgreSQL pradinis puslapis'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL dokumentacija (vietinė)'; + $lang['strreportbug'] = 'Pranešti apie klaidą'; + $lang['strviewfaq'] = 'Peržiūrėti internetinį DUK'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Prisijungti'; + $lang['strloginfailed'] = 'Nepavyko prisijungti'; + $lang['strlogindisallowed'] = 'Prisijungti neleidžiama saugumo sumetimais.'; + $lang['strserver'] = 'Serveris'; + $lang['strservers'] = 'Serveriai'; + $lang['strgroupservers'] = 'Serveriai grupėje "%s"'; + $lang['strallservers'] = 'Visi serveriai'; + $lang['strintroduction'] = 'Įžanga';//Pradžia +$lang['strhost'] = 'Host';//Pagrindinis kompiuteris + $lang['strport'] = 'Prievadas'; + $lang['strlogout'] = 'Atsijungti'; + $lang['strowner'] = 'Valdytojas';//Savininkas + $lang['straction'] = 'Veiksmas'; + $lang['stractions'] = 'Veiksmai'; + $lang['strname'] = 'Pavadinimas'; + $lang['strdefinition'] = 'Apibrėžtis'; + $lang['strproperties'] = 'Savybės'; + $lang['strbrowse'] = 'Peržiūrėti';//Naršyti + $lang['strenable'] = 'Įjungti'; + $lang['strdisable'] = 'Išjungti'; + $lang['strdrop'] = 'Šalinti'; + $lang['strdropped'] = 'Pašalintas'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Ne Null'; + $lang['strprev'] = '< Ankstesnis'; + $lang['strnext'] = 'Tolesnis >'; + $lang['strfirst'] = '<< Pirmas'; + $lang['strlast'] = 'Paskutinis >>'; + $lang['strfailed'] = 'Nepavyko'; + $lang['strcreate'] = 'Sukurti'; + $lang['strcreated'] = 'Sukurta'; + $lang['strcomment'] = 'Komentaras'; + $lang['strlength'] = 'Ilgis'; + $lang['strdefault'] = 'Numatytoji reikšmė';//Numatytas(-a) + $lang['stralter'] = 'Pakeisti'; + $lang['strok'] = 'Gerai'; + $lang['strcancel'] = 'Atsisakyti'; + $lang['strkill'] = 'Nutraukti';//Sunaikinti + $lang['strac'] = 'Įjungti automatinį baigimą'; + $lang['strsave'] = 'Įrašyti'; + $lang['strreset'] = 'Atstatyti į pradinę būseną';//Atkurti + $lang['strrestart'] = 'Paleisti iš naujo'; + $lang['strinsert'] = 'Įterpti'; + $lang['strselect'] = 'Atrinkti'; + $lang['strdelete'] = 'Šalinti'; + $lang['strupdate'] = 'Atnaujinti'; + $lang['strreferences'] = 'Rodyklės'; + $lang['stryes'] = 'Taip'; + $lang['strno'] = 'Ne'; + $lang['strtrue'] = 'TIESA'; + $lang['strfalse'] = 'NETIESA'; + $lang['stredit'] = 'Taisyti'; + $lang['strcolumn'] = 'Stulpelis'; + $lang['strcolumns'] = 'Stulpeliai'; + $lang['strrows'] = 'įrašas(-ai)'; + $lang['strrowsaff'] = 'įrašas(-ai) paveikti.'; + $lang['strobjects'] = 'objektas (-ai)'; + $lang['strback'] = 'Atgal'; + $lang['strqueryresults'] = 'Užklausos rezultatai'; + $lang['strshow'] = 'Rodyti'; + $lang['strempty'] = 'Išvalyti';//Šalinti turinį + $lang['strlanguage'] = 'Kalba'; + $lang['strencoding'] = 'Koduotė'; + $lang['strvalue'] = 'Reikšmė'; + $lang['strunique'] = 'Unikalus'; + $lang['strprimary'] = 'Pirminis'; + $lang['strexport'] = 'Eksportuoti'; + $lang['strimport'] = 'Importuoti'; + $lang['strallowednulls'] = 'Leidžiami NULL simboliai'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Tuščia eilutė/laukas'; + $lang['strsql'] = 'SQL'; +$lang['stradmin'] = 'Admin';//Administratorius + $lang['strvacuum'] = 'Apvalyti'; + $lang['stranalyze'] = 'Analizuoti'; + $lang['strclusterindex'] = 'Pertvarkyti'; + $lang['strclustered'] = 'Sutvarkyta?'; + $lang['strreindex'] = 'Perindeksuoti'; + $lang['strexecute'] = 'Vykdyti'; + $lang['stradd'] = 'Pridėti'; + $lang['strevent'] = 'Įvykis'; + $lang['strwhere'] = 'Sąlyga';//Kur + $lang['strinstead'] = 'Atlikti užuot'; + $lang['strwhen'] = 'Kai'; + $lang['strformat'] = 'Formatas'; + $lang['strdata'] = 'Duomenys'; + $lang['strconfirm'] = 'Patvirtinti'; + $lang['strexpression'] = 'Išraiška'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Išskleisti'; + $lang['strcollapse'] = 'Suskleisti'; + $lang['strfind'] = 'Ieškoti'; + $lang['stroptions'] = 'Parinktys'; + $lang['strrefresh'] = 'Atnaujinti'; + $lang['strdownload'] = 'Parsisiųsti'; + $lang['strdownloadgzipped'] = 'Parsisiųsti suspaustą su gzip'; + $lang['strinfo'] = 'Informacija'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Išplėstinis(-ė)';//papildomas(-a), + $lang['strvariables'] = 'Kintamieji'; + $lang['strprocess'] = 'Procesas'; + $lang['strprocesses'] = 'Procesai'; + $lang['strsetting'] = 'Nuostata';//Parinktis + $lang['streditsql'] = 'Redaguoti SQL'; + $lang['strruntime'] = 'Visa vykdymo trukmė: %s ms'; + $lang['strpaginate'] = 'Rezultatus skaidyti į puslapius'; + $lang['struploadscript'] = 'arba nusiųsti SQL skriptą:'; + $lang['strstarttime'] = 'Pradžios laikas'; + $lang['strfile'] = 'Failas'; + $lang['strfileimported'] = 'Failas importuotas.'; + $lang['strtrycred'] = 'Naudoti šiuos įgaliojimus visiems serveriams'; + $lang['strconfdropcred'] = 'Dėl saugumo, ryšio nutraukimas panaikins jūsų bendrą prisijungimo informaciją. Ar tikrai norite nutraukti ryšį ?'; + $lang['stractionsonmultiplelines'] = 'Veiksmai keliose eilutėse'; + $lang['strselectall'] = 'Visi';//Pažymėti visus + $lang['strunselectall'] = 'Nieko';//Panaikinti žymėjimą visiems + $lang['strlocale'] = 'Lokalė'; + $lang['strcollation'] = 'Rikiavimas'; +$lang['strctype'] = 'Character Type';//Simbolių(ženklų) tipas + $lang['strdefaultvalues'] = 'Numatytosios reikšmės'; + $lang['strnewvalues'] = 'Naujosios reikšmės'; + $lang['strstart'] = 'Paleisti'; + $lang['strstop'] = 'Stabdyti'; + $lang['strgotoppage'] = 'atgal į viršų'; + $lang['strtheme'] = 'Apipavidalinimas'; + $lang['strcluster'] = 'Klasteris'; + + // Admin + $lang['stradminondatabase'] = 'Šios administracinės užduotys taikomos visai %s duomenų bazei.'; + $lang['stradminontable'] = 'Šios administracinės užduotys taikomos lentelei %s.'; + + // User-supplied SQL history + $lang['strhistory'] = 'Praeitis'; + $lang['strnohistory'] = 'Nėra praeities.'; + $lang['strclearhistory'] = 'Išvalyti praeitį'; + $lang['strdelhistory'] = 'Šalinti iš praeities sąrašo'; + $lang['strconfdelhistory'] = 'Ar tikrai pašalinti šią užklausą iš preities sąrašo?'; + $lang['strconfclearhistory'] = 'Ar tikrai išvalyti praeitį?'; + $lang['strnodatabaseselected'] = 'Prašom pasirinkiti duomenų bazę.'; + + // Database sizes + $lang['strnoaccess'] = 'Nėra prieigos'; + $lang['strsize'] = 'Dydis'; + $lang['strbytes'] = 'baitai'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Ši programa geriausiai veikia su naršykle, kurioje palaikomi HTML rėmeliai(frames),tačiau gali būti naudojama be rėmelių spustelėjus toliau pateiktą nuorodą.'; + $lang['strnoframeslink'] = 'Naudoti be rėmelių'; + $lang['strbadconfig'] = 'Jūsų config.inc.php pasenęs. Reikia atkurti jį iš naujo config.inc.php-dist.'; + $lang['strnotloaded'] = 'Jūsų PHP įdiegimas nepalaiko PostgreSQL. Reikia perkompiliuoti PHP naudojant --with-pgsql konfigūravimo parametrą.'; + $lang['strpostgresqlversionnotsupported'] = 'PostgreSQL versija nepalaikoma. Prašom atnaujinti iki %s arba naujesnės versijos.'; + $lang['strbadschema'] = 'Nurodyta neteisinga schema.'; + $lang['strbadencoding'] = 'Nepavyko nustatyti kliento koduotės duomenų bazėje.'; + $lang['strsqlerror'] = 'SQL klaida:'; + $lang['strinstatement'] = 'Sakinyje:'; + $lang['strinvalidparam'] = 'Neteisingi skripto parametrai.'; + $lang['strnodata'] = 'Įrašų nerasta.'; + $lang['strnoobjects'] = 'Objektų nerasta.'; + $lang['strrownotunique'] = 'Šiame įraše nėra unikalaus identifikatoriaus.'; + $lang['strnouploads'] = 'Failų išsiuntimai - negalimi.'; + $lang['strimporterror'] = 'Importavimo klaida.'; + $lang['strimporterror-fileformat'] = 'Importavimo klaida: Nepavyko automatiškai nustatyti failo formato.'; + $lang['strimporterrorline'] = 'Importavimo klaida eilutėje %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Importavimo klaida eilutėje %s: Eilutėje neteisingas stulpelių skaičius.'; + $lang['strimporterror-uploadedfile'] = 'Importavimo klaida: Failas negali būti nusiųstas į serverį'; + $lang['strcannotdumponwindows'] = 'Atminties išklotinės suformavimas su sudėtingais lentelių ir schemų vardais Windows operacinėje sistemoje nepalaikomas'; + $lang['strinvalidserverparam'] = 'Bandymas prisijungti su negaliojančiu serverio parametru, galbūt kas nors bando nulaužti jūsų sistemą.'; + $lang['strnoserversupplied'] = 'Nenurodytas serveris!'; + $lang['strbadpgdumppath'] = 'Eksportavimo klaida: nepavyko įvykdyti pg_dump (pateiktas kelias Jūsų conf/config.inc.php : %s). Pataisykite šį kelią savo konfigūracijoje ir prisijunkite iš naujo.'; + $lang['strbadpgdumpallpath'] = 'Eksportavimo klaida: nepavyko įvykdyti pg_dumpall (pateiktas kelias Jūsų conf/config.inc.php : %s). Pataisykite šį kelią savo konfigūracijoje ir prisijunkite iš naujo.'; + $lang['strconnectionfail'] = 'Nepavyksta prisijungti prie serverio.'; + + // Tables + $lang['strtable'] = 'Lentelė'; + $lang['strtables'] = 'Lentelės'; + $lang['strshowalltables'] = 'Rodyti visas lenteles'; + $lang['strnotables'] = 'Lentelių nerasta.'; + $lang['strnotable'] = 'Lentelė nerasta.'; + $lang['strcreatetable'] = 'Sukurti lentelę'; + $lang['strcreatetablelike'] = 'Sukurti lentelę kaip'; + $lang['strcreatetablelikeparent'] = 'Pirminė lentelė'; + $lang['strcreatelikewithdefaults'] = 'ĮTRAUKTI NUMATYTĄSIAS REIKŠMES'; + $lang['strcreatelikewithconstraints'] = 'ĮTRAUKTI RIBOJIMUS'; + $lang['strcreatelikewithindexes'] = 'ĮTRAUKTI INDEKSUS'; + $lang['strtablename'] = 'Lentelės pavadinimas'; + $lang['strtableneedsname'] = 'Turite suteikti lentelei pavadinimą.'; + $lang['strtablelikeneedslike'] = 'Turite nurodyti lentelę, kurios savybes reikia kopijuoti.'; + $lang['strtableneedsfield'] = 'Turite nurodyti bent vieną lauką.'; + $lang['strtableneedscols'] = 'Turite nurodyti teisingą stulpelių skaičių.'; + $lang['strtablecreated'] = 'Lentelė sukurta.'; + $lang['strtablecreatedbad'] = 'Nepavyko sukurti lentelės.'; + $lang['strconfdroptable'] = 'Ar tikrai norite šalinti lentelę "%s"?'; + $lang['strtabledropped'] = 'Lentelė pašalinta.'; + $lang['strtabledroppedbad'] = 'Nepavyko pašalinti lentelės.'; + $lang['strconfemptytable'] = 'Ar tikrai norite išvalyti lentelę "%s"?'; + $lang['strtableemptied'] = 'Lentelė išvalyta.'; + $lang['strtableemptiedbad'] = 'Nepavyko išvalyti lentelės.'; + $lang['strinsertrow'] = 'Įterpti įrašą'; + $lang['strrowinserted'] = 'Įrašas įterptas.'; + $lang['strrowinsertedbad'] = 'Nepavyko įterpti įrašo.'; + $lang['strnofkref'] = 'Nėra atitinkamos reikšmės išoriniame rakte %s.'; + $lang['strrowduplicate'] = 'Nepavyko įterpti įrašo, bandyta dubliuoti įrašą.'; + $lang['streditrow'] = 'Taisyti įrašą'; + $lang['strrowupdated'] = 'Įrašas atnaujintas.'; + $lang['strrowupdatedbad'] = 'Nepavyko atnaujinti įrašo.'; + $lang['strdeleterow'] = 'Šalinti įrašą'; + $lang['strconfdeleterow'] = 'Ar tikrai norite šalinti šį įrašą?'; + $lang['strrowdeleted'] = 'Įrašas pašalintas.'; + $lang['strrowdeletedbad'] = 'Nepavyko pašalinti įrašo.'; + $lang['strinsertandrepeat'] = 'Įterpti ir kartoti'; + $lang['strnumcols'] = 'Stulpelių skaičius'; + $lang['strcolneedsname'] = 'Turite nurodyti stulpelio pavadinimą'; + $lang['strselectallfields'] = 'Pažymėti visus laukus'; + $lang['strselectneedscol'] = 'Turite rodyti bent vieną stulpelį.'; + $lang['strselectunary'] = 'Vienviečiai operatoriai negali turėti reikšmių.'; + $lang['strcolumnaltered'] = 'Stulpelis pakeistas.'; + $lang['strcolumnalteredbad'] = 'Nepavyko pakeisti stulpelio.'; + $lang['strconfdropcolumn'] = 'Ar tikrai norite šalinti stulpelį "%s" iš lentelės "%s"?'; + $lang['strcolumndropped'] = 'Stulpelis pašalintas.'; + $lang['strcolumndroppedbad'] = 'Nepavyko pašalinti stulpelio.'; + $lang['straddcolumn'] = 'Pridėti stulpelį'; + $lang['strcolumnadded'] = 'Stulpelis pridėtas.'; + $lang['strcolumnaddedbad'] = 'Nepavyko pridėti stulpelio.'; +$lang['strcascade'] = 'CASCADE';//Pakopinis + $lang['strtablealtered'] = 'Lentelė pakeista.'; + $lang['strtablealteredbad'] = 'Nepavyko pakeisti lentelės.'; + $lang['strdataonly'] = 'Tik duomenis'; + $lang['strstructureonly'] = 'Tik struktūrą'; + $lang['strstructureanddata'] = 'Struktūrą ir duomenis'; +$lang['strtabbed'] = 'Tabbed';//Atskirtas tabuliavimo žymėmis +$lang['strauto'] = 'Auto'; + $lang['strconfvacuumtable'] = 'Ar tikrai norite apvalyti "%s"?'; + $lang['strconfanalyzetable'] = 'Ar tikrai norite analizuoti "%s"?'; + $lang['strconfreindextable'] = 'Ar tikrai norite perindeksuoti "%s"?'; + $lang['strconfclustertable'] = 'Ar tikrai norite sutvarkyti "%s"?'; + $lang['strestimatedrowcount'] = 'Apskaičiuotasis įrašų skaičius';//Apytikris + $lang['strspecifytabletoanalyze'] = 'Turite nurodyti bent vieną lentelę, kuri turi būti išanalizuota.'; + $lang['strspecifytabletoempty'] = 'Turite nurodyti bent vieną lentelę, kuri turi būti išvalyta.'; + $lang['strspecifytabletodrop'] = 'Turite nurodyti bent vieną lentelę, kuri turi būti pašalinta.'; + $lang['strspecifytabletovacuum'] = 'Turite nurodyti bent vieną lentelę, kuri turi būti apvalyta.'; + $lang['strspecifytabletoreindex'] = 'Turite nurodyti bent vieną lentelę, kuri turi būti perindeksuota.'; + $lang['strspecifytabletocluster'] = 'Turite nurodyti bent vieną lentelę, kuri turi būti sutvarkyta.'; + $lang['strnofieldsforinsert'] = 'Negalite įterpti įrašo į lentelę be stulpelių.'; + + // Columns + $lang['strcolprop'] = 'Stulpelio savybės'; + $lang['strnotableprovided'] = 'Nenurodyta lentelė!'; + + // Users + $lang['struser'] = 'Naudotojas'; + $lang['strusers'] = 'Naudotojai'; + $lang['strusername'] = 'Naudotojo vardas'; + $lang['strpassword'] = 'Slaptažodis'; +$lang['strsuper'] = 'Superuser?'; + $lang['strcreatedb'] = 'Gali kurti DB?'; + $lang['strexpires'] = 'Baigia galioti'; + $lang['strsessiondefaults'] = 'Seanso numatytosios reikšmės'; + $lang['strnousers'] = 'Naudotojų nerasta.'; + $lang['struserupdated'] = 'Naudotojas atnaujintas.'; + $lang['struserupdatedbad'] = 'Nepavyko atnaujinti naudotojo.'; + $lang['strshowallusers'] = 'Rodyti visus naudotojus'; + $lang['strcreateuser'] = 'Kurti naudotoją'; + $lang['struserneedsname'] = 'Turite suteikti naudotojui vardą.'; + $lang['strusercreated'] = 'Naudotojas sukurtas.'; + $lang['strusercreatedbad'] = 'Nepavyko sukurti naudotojo.'; + $lang['strconfdropuser'] = 'Ar tikrai norite pašalinti naudotoją "%s"?'; + $lang['struserdropped'] = 'Naudotojas pašalintas.'; + $lang['struserdroppedbad'] = 'Nepavyko pašalinti naudotojo.'; + $lang['straccount'] = 'Paskyra'; + $lang['strchangepassword'] = 'Keisti slaptažodį'; + $lang['strpasswordchanged'] = 'Slaptažodis pakeistas.'; + $lang['strpasswordchangedbad'] = 'Nepavyko pakeisti slaptažodžio.'; + $lang['strpasswordshort'] = 'Slaptažodis per trumpas.'; + $lang['strpasswordconfirm'] = 'Slaptažodis neatitinka patvirtinimo.'; + + // Groups + $lang['strgroup'] = 'Grupė'; + $lang['strgroups'] = 'Grupės'; + $lang['strshowallgroups'] = 'Rodyti visas grupes'; + $lang['strnogroup'] = 'Grupė nerasta.'; + $lang['strnogroups'] = 'Grupių nerasta.'; + $lang['strcreategroup'] = 'Kurti grupę'; + $lang['strgroupneedsname'] = 'Turite suteikti grupei pavadinimą.'; + $lang['strgroupcreated'] = 'Grupė sukurta.'; + $lang['strgroupcreatedbad'] = 'Nepavyko sukurti grupės.'; + $lang['strconfdropgroup'] = 'Ar tikrai norite šalinti grupę "%s"?'; + $lang['strgroupdropped'] = 'Grupė pašalinta.'; + $lang['strgroupdroppedbad'] = 'Nepavyko pašalinti grupės.'; + $lang['strmembers'] = 'Nariai'; + $lang['strmemberof'] = 'Yra narys'; + $lang['stradminmembers'] = 'Admin nariai'; + $lang['straddmember'] = 'Pridėti narį'; + $lang['strmemberadded'] = 'Narys pridėtas.'; + $lang['strmemberaddedbad'] = 'Nepavyko pridėti nario.'; + $lang['strdropmember'] = 'Šalinti narį'; + $lang['strconfdropmember'] = 'Ar tikrai norite šalinti narį "%s" iš grupės "%s"?'; + $lang['strmemberdropped'] = 'Narys pašalintas.'; + $lang['strmemberdroppedbad'] = 'Nepavyko pašalinti nario.'; + + // Roles + $lang['strrole'] = 'Rolė'; + $lang['strroles'] = 'Rolės'; + $lang['strshowallroles'] = 'Rodyti roles'; + $lang['strnoroles'] = 'Rolių nerasta.'; + $lang['strinheritsprivs'] = 'Paveldi privilegijas?'; + $lang['strcreaterole'] = 'Kurti rolę'; + $lang['strcancreaterole'] = 'Gali kurti rolę?'; + $lang['strrolecreated'] = 'Rolė sukurta.'; + $lang['strrolecreatedbad'] = 'Nepavyko sukurti rolės.'; + $lang['strrolealtered'] = 'Rolė pakeista.'; + $lang['strrolealteredbad'] = 'Nepavyko pakeisti rolės.'; + $lang['strcanlogin'] = 'Gali prisijungti?'; + $lang['strconnlimit'] = 'Sujungimų limitas'; + $lang['strdroprole'] = 'Šalinti rolę'; + $lang['strconfdroprole'] = 'Ar tikrai norite šalinti rolę "%s"?'; + $lang['strroledropped'] = 'Rolė pašalinta.'; + $lang['strroledroppedbad'] = 'Nepavyko pašalinti rolės.'; + $lang['strnolimit'] = 'Be ribojimų'; + $lang['strnever'] = 'Niekada'; + $lang['strroleneedsname'] = 'Turite suteikti rolei pavadinimą.'; + + // Privileges + $lang['strprivilege'] = 'Privilegija'; + $lang['strprivileges'] = 'Privilegijos'; + $lang['strnoprivileges'] = 'Šiam objektui taikomos numatytosios valdytojo privilegijos.'; + $lang['strgrant'] = 'Suteikti'; + $lang['strrevoke'] = 'Panaikinti';//Atšaukti + $lang['strgranted'] = 'Privilegijos pakeistos.'; + $lang['strgrantfailed'] = 'Nepavyko pakeisti privilegijų.'; + $lang['strgrantbad'] = 'Turite nurodyti bent vieną naudotoją arba grupę ir bent vieną privilegiją.'; + $lang['strgrantor'] = 'Teikėjas'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Duomenų bazė'; + $lang['strdatabases'] = 'Duomenų bazės'; + $lang['strshowalldatabases'] = 'Rodyti duomenų bazes'; + $lang['strnodatabases'] = 'Duomenų bazių nerasta.'; + $lang['strcreatedatabase'] = 'Kurti duomenų bazę'; + $lang['strdatabasename'] = 'Duomenų bazės pavadinimas'; + $lang['strdatabaseneedsname'] = 'Turite suteikti duomenų bazei pavadinimą.'; + $lang['strdatabasecreated'] = 'Duomenų bazė sukurta.'; + $lang['strdatabasecreatedbad'] = 'Nepavyko sukurti duomenų bazės.'; + $lang['strconfdropdatabase'] = 'Ar tikrai norite šalinti duomenų bazę "%s"?'; + $lang['strdatabasedropped'] = 'Duomenų bazė pašalinta.'; + $lang['strdatabasedroppedbad'] = 'Nepavyko pašalinti duomenų bazės.'; + $lang['strentersql'] = 'Įveskite SQL užklausą žemiau:'; + $lang['strsqlexecuted'] = 'SQL užklausa įvykdyta.'; + $lang['strvacuumgood'] = 'Apvalymas atliktas.'; + $lang['strvacuumbad'] = 'Nepavyko atlikti apvalymo.'; + $lang['stranalyzegood'] = 'Analizė atlikta.'; + $lang['stranalyzebad'] = 'Nepavyko atlikti analizės.'; + $lang['strreindexgood'] = 'Perindeksavimas atliktas.'; + $lang['strreindexbad'] = 'Perindeksavimas nepavyko.'; + $lang['strfull'] = 'Visiškas'; +$lang['strfreeze'] = 'Freeze'; +$lang['strforce'] = 'Force'; + $lang['strsignalsent'] = 'Signalas išsiųstas.'; + $lang['strsignalsentbad'] = 'Nepavyko išsiųsti signalo.'; + $lang['strallobjects'] = 'Visi objektai'; + $lang['strdatabasealtered'] = 'Duomenų bazė pakeista.'; + $lang['strdatabasealteredbad'] = 'Nepavyko pakeisti duomenų bazės.'; + $lang['strspecifydatabasetodrop'] = 'Turite nurodyti bent vieną duomenų bazę, kurią reikia šalinti.'; + $lang['strtemplatedb'] = 'Šablonas'; + $lang['strconfanalyzedatabase'] = 'Ar tikrai norite analizuoti visas lenteles duomenų bazėje "%s"?'; + $lang['strconfvacuumdatabase'] = 'Ar tikrai norite apvalyti visas lenteles duomenų bazėje "%s"?'; + $lang['strconfreindexdatabase'] = 'Ar tikrai norite perindeksuoti visas lenteles duomenų bazėje "%s"?'; + $lang['strconfclusterdatabase'] = 'Ar tikrai norite sutvarkyti visas lenteles duomenų bazėje "%s"?'; + + // Views + $lang['strview'] = 'Rodinys'; + $lang['strviews'] = 'Rodiniai'; + $lang['strshowallviews'] = 'Rodyti visus rodinius'; + $lang['strnoview'] = 'Rodinys nerastas.'; + $lang['strnoviews'] = 'Rodinių nerasta.'; + $lang['strcreateview'] = 'Kurti rodinį'; + $lang['strviewname'] = 'Rodinio pavadinimas'; + $lang['strviewneedsname'] = 'Turite suteikti rodiniui pavadinimą.'; + $lang['strviewneedsdef'] = 'Turite pateikti rodinio apibrėžtį.'; + $lang['strviewneedsfields'] = 'Turite nurodyti stulpelius, kurie turi būti rodinyje.'; + $lang['strviewcreated'] = 'Rodinys sukurtas.'; + $lang['strviewcreatedbad'] = 'Nepavyko sukurti rodinio.'; + $lang['strconfdropview'] = 'Ar tikrai norite pašalinti rodinį "%s"?'; + $lang['strviewdropped'] = 'Rodinys pašalintas.'; + $lang['strviewdroppedbad'] = 'Nepavyko pašalinti rodinio.'; + $lang['strviewupdated'] = 'Rodinys atnaujintas.'; + $lang['strviewupdatedbad'] = 'Nepavyko atnaujinti rodinio.'; + $lang['strviewlink'] = 'Saistantys raktai'; + $lang['strviewconditions'] = 'Papildomos sąlygos'; + $lang['strcreateviewwiz'] = 'Kurti rodinį su vedikliu'; + $lang['strrenamedupfields'] = 'Pervadinti dubliuojančiuosius laukus'; + $lang['strdropdupfields'] = 'Pašalinti dubliuojančiuosius laukus'; + $lang['strerrordupfields'] = 'Klaida dubliuojančiuose laukuose'; + $lang['strviewaltered'] = 'Rodinys pakeistas.'; + $lang['strviewalteredbad'] = 'Nepavyko pakeisti rodinio.'; + $lang['strspecifyviewtodrop'] = 'Turite nurodyti bent vieną rodinį, kurį norite pašalinti.'; + + // Sequences + $lang['strsequence'] = 'Seka'; + $lang['strsequences'] = 'Sekos'; + $lang['strshowallsequences'] = 'Rodyti visas sekas'; + $lang['strnosequence'] = 'Seka nerasta.'; + $lang['strnosequences'] = 'Sekų nerasta.'; + $lang['strcreatesequence'] = 'Kurti seką'; + $lang['strlastvalue'] = 'Paskutinė reikšmė'; + $lang['strincrementby'] = 'Prieaugis'; + $lang['strstartvalue'] = 'Pradinė reikšmė'; + $lang['strrestartvalue'] = 'Paleidimo iš naujo reikšmė'; + $lang['strmaxvalue'] = 'Maks. reikšmė'; + $lang['strminvalue'] = 'Min. reikšmė'; + $lang['strcachevalue'] = 'Reikšmė podėlyje'; +$lang['strlogcount'] = 'Log count'; +$lang['strcancycle'] = 'Can cycle?';//Gali kartotis? + $lang['striscalled'] = 'Padidins paskutinę reikšmę prieš grąžinant kitą reikšmę (is_called)?'; + $lang['strsequenceneedsname'] = 'Turite suteikti sekai vardą.'; + $lang['strsequencecreated'] = 'Seka sukurta.'; + $lang['strsequencecreatedbad'] = 'Nepavyko sukurti sekos.'; + $lang['strconfdropsequence'] = 'Ar tikrai norite pašalinti seką "%s"?'; + $lang['strsequencedropped'] = 'Seka pašalinta.'; + $lang['strsequencedroppedbad'] = 'Nepavyko pašalinti sekos.'; + $lang['strsequencerestart'] = 'Seka paleista iš naujo.'; + $lang['strsequencerestartbad'] = 'Nepavyko sekos paleist iš naujo.'; + $lang['strsequencereset'] = 'Seka atstatyta į pradinę būseną.'; + $lang['strsequenceresetbad'] = 'Nepavyko sekos atstatyti į pradinę būseną.'; + $lang['strsequencealtered'] = 'Seka pakeista.'; + $lang['strsequencealteredbad'] = 'Nepavyko pakeisti sekos.'; + $lang['strsetval'] = 'Nustatyti reikšmę'; + $lang['strsequencesetval'] = 'Sekos reikšmė nustatyta.'; + $lang['strsequencesetvalbad'] = 'Nepavyko nustatyti sekos reikšmės.'; + $lang['strnextval'] = 'Padidinti reikšmę'; + $lang['strsequencenextval'] = 'Sekos reikšmė padidėjo.'; + $lang['strsequencenextvalbad'] = 'Sekos reikšmės padidinti nepavyko.'; + $lang['strspecifysequencetodrop'] = 'Turite nurodyti bent vieną seką, kurią norite pašalinti.'; + + // Indexes + $lang['strindex'] = 'Indeksas'; + $lang['strindexes'] = 'Indeksai'; + $lang['strindexname'] = 'Indekso pavadinimas'; + $lang['strshowallindexes'] = 'Rodyti visus indeksus'; + $lang['strnoindex'] = 'Indeksas nerastas.'; + $lang['strnoindexes'] = 'Indeksų nerasta.'; + $lang['strcreateindex'] = 'Kurti indeksą'; + $lang['strtabname'] = 'Lentelės pavadinimas'; + $lang['strcolumnname'] = 'Stulpelio pavadinimas'; + $lang['strindexneedsname'] = 'Turite suteikti indeksui pavadinimą.'; + $lang['strindexneedscols'] = 'Turite nurodyti teisingą stulpelių skaičių.'; + $lang['strindexcreated'] = 'Indeksas sukurtas.'; + $lang['strindexcreatedbad'] = 'Nepavyko sukurti indekso.'; + $lang['strconfdropindex'] = 'Ar tikrai norite pašalinti indeksą "%s"?'; + $lang['strindexdropped'] = 'Indeksas pašalintas.'; + $lang['strindexdroppedbad'] = 'Nepavyko pašalinti indekso.'; + $lang['strkeyname'] = 'Rakto pavadinimas'; + $lang['struniquekey'] = 'Unikalus raktas'; + $lang['strprimarykey'] = 'Pirminis raktas'; + $lang['strindextype'] = 'Indekso tipas'; + $lang['strtablecolumnlist'] = 'Stulpeliai lentelėje'; + $lang['strindexcolumnlist'] = 'Stulpeliai indekse'; + $lang['strconfcluster'] = 'Ar tikrai norite pertvarkyti "%s"?'; + $lang['strclusteredgood'] = 'Pertvarka atlikta.'; + $lang['strclusteredbad'] = 'Nepavyko atlikti pertvarkos.'; + $lang['strconcurrently'] = 'Lygiagrečiai';//tuo pat metu + $lang['strnoclusteravailable'] = 'Lentelė nesutvarkyta pagal indeksą.'; + + // Rules + $lang['strrules'] = 'Taisyklės'; + $lang['strrule'] = 'Taisyklė'; + $lang['strshowallrules'] = 'Rodyti visas taisykles'; + $lang['strnorule'] = 'Taisyklė nerasta.'; + $lang['strnorules'] = 'Taisyklių nerasta.'; + $lang['strcreaterule'] = 'Kurti taisyklę'; + $lang['strrulename'] = 'Taisyklės pavadinimas'; + $lang['strruleneedsname'] = 'Turite suteikti taisyklei pavadinimą.'; + $lang['strrulecreated'] = 'Taisyklė sukurta.'; + $lang['strrulecreatedbad'] = 'Nepavyko sukurti taisyklės.'; + $lang['strconfdroprule'] = 'Ar tikrai norite šalinti taisyklę "%s" taikomą "%s"?'; + $lang['strruledropped'] = 'Taisyklė pašalinta.'; + $lang['strruledroppedbad'] = 'Nepavyko pašalinti taisyklės.'; + + // Constraints + $lang['strconstraint'] = 'Ribojimas'; + $lang['strconstraints'] = 'Ribojimai'; + $lang['strshowallconstraints'] = 'Rodyti visus ribojimus'; + $lang['strnoconstraints'] = 'Ribojimų nerasta.'; + $lang['strcreateconstraint'] = 'Kurti ribojimą'; + $lang['strconstraintcreated'] = 'Ribojimas sukurtas.'; + $lang['strconstraintcreatedbad'] = 'Nepavyko sukurti ribojimo.'; + $lang['strconfdropconstraint'] = 'Ar tikrai norite šalinti ribojimą "%s" lentelei "%s"?'; + $lang['strconstraintdropped'] = 'Ribojimas pašalintas.'; + $lang['strconstraintdroppedbad'] = 'Nepavyko pašalinti ribojimo.'; + $lang['straddcheck'] = 'Pridėti tikrinimą'; + $lang['strcheckneedsdefinition'] = 'Tikrinimo ribojimui būtina apibrėžtis.'; + $lang['strcheckadded'] = 'Tikrinimo ribojimas pridėtas.'; + $lang['strcheckaddedbad'] = 'Nepavyko pridėti tikrinimo ribojimo.'; + $lang['straddpk'] = 'Pridėti pirminį raktą'; + $lang['strpkneedscols'] = 'Pirminiam raktui būtina priskirti bent vieną stulpelį.'; + $lang['strpkadded'] = 'Pirminis raktas pridėtas.'; + $lang['strpkaddedbad'] = 'Nepavyko pridėti pirminio rakto.'; + $lang['stradduniq'] = 'Pridėti unikalų raktą'; + $lang['struniqneedscols'] = 'Unikaliam raktui būtina priskirti bent vieną stulpelį.'; + $lang['struniqadded'] = 'Unikalus raktas pridėtas.'; + $lang['struniqaddedbad'] = 'Nepavyko pridėti unikalaus rakto.'; + $lang['straddfk'] = 'Pridėti išorinį raktą'; + $lang['strfkneedscols'] = 'Išoriniam raktui būtina priskirti bent vieną stulpelį.'; + $lang['strfkneedstarget'] = 'Būtina nurodyti išorinio rakto paskirties lentelę.'; + $lang['strfkadded'] = 'Išorinis raktas pridėtas.'; + $lang['strfkaddedbad'] = 'Nepavyko pridėti išorinio rakto.'; + $lang['strfktarget'] = 'Paskirties lentelė'; + $lang['strfkcolumnlist'] = 'Rakto stulpeliai'; + $lang['strondelete'] = 'šalinant'; + $lang['stronupdate'] = 'atnaujinant'; + + // Functions + $lang['strfunction'] = 'Funkcija'; + $lang['strfunctions'] = 'Funkcijos'; + $lang['strshowallfunctions'] = 'Rodyti visas funkcijas'; + $lang['strnofunction'] = 'Funkcija nerasta.'; + $lang['strnofunctions'] = 'Funkcijų nerasta.'; + $lang['strcreateplfunction'] = 'Kurti SQL/PL funkciją'; + $lang['strcreateinternalfunction'] = 'Kurti vidinę funkciją'; + $lang['strcreatecfunction'] = 'Kurti C funkciją'; + $lang['strfunctionname'] = 'Funkcijos pavadinimas'; + $lang['strreturns'] = 'Grąžina'; + $lang['strproglanguage'] = 'Programavimo kalba'; + $lang['strfunctionneedsname'] = 'Turite suteikti funkcijai pavadinimą.'; + $lang['strfunctionneedsdef'] = 'Turite pateikti funkcijos apibrėžtį.'; + $lang['strfunctioncreated'] = 'Funkcija sukurta.'; + $lang['strfunctioncreatedbad'] = 'Nepavyko sukurti funkcijos.'; + $lang['strconfdropfunction'] = 'Ar tikrai norite šalinti funkciją "%s"?'; + $lang['strfunctiondropped'] = 'Funkcija pašalinta.'; + $lang['strfunctiondroppedbad'] = 'Nepavyko pašalinti funkcijos.'; + $lang['strfunctionupdated'] = 'Funkcija atnaujinta.'; + $lang['strfunctionupdatedbad'] = 'Nepavyko atnaujinti funkcijos.'; + $lang['strobjectfile'] = 'Objektinis Failas'; + $lang['strlinksymbol'] = 'Sąsajos simbolis (C funkcijos pavadinimas)'; + $lang['strarguments'] = 'Argumentai'; + $lang['strargmode'] = 'Veiksena'; + $lang['strargtype'] = 'Tipas'; + $lang['strargadd'] = 'Pridėti dar vieną argumentą'; + $lang['strargremove'] = 'Pašalinti šį argumentą'; + $lang['strargnoargs'] = 'Ši funkcija nepriims jokių argumentų.'; + $lang['strargenableargs'] = 'Leisti perduoti argumentus šiai funkcijai.'; + $lang['strargnorowabove'] = 'Turi būti eilutė virš šios eilutės.'; + $lang['strargnorowbelow'] = 'Turi būti eilutė žemiau šios eilutės.'; + $lang['strargraise'] = 'Pakelti.'; + $lang['strarglower'] = 'Nuleisti.'; + $lang['strargremoveconfirm'] = 'Ar tikrai norite pašalinti šį argumentą? Pašalinimas negalės būti atšauktas.'; +$lang['strfunctioncosting'] = 'Function Costing'; + $lang['strresultrows'] = 'Eilučių rezultate'; + $lang['strexecutioncost'] = 'Vykdymo sąnaudos'; + $lang['strspecifyfunctiontodrop'] = 'Turite nurodyti bent vieną funkciją, kurią norite pašalinti.'; + + // Triggers + $lang['strtrigger'] = 'Trigeris'; + $lang['strtriggers'] = 'Trigeriai'; + $lang['strshowalltriggers'] = 'Rodyti visus trigerius'; + $lang['strnotrigger'] = 'Trigeris nerastas.'; + $lang['strnotriggers'] = 'Trigerių nerasta.'; + $lang['strcreatetrigger'] = 'Kurti trigerį'; + $lang['strtriggerneedsname'] = 'Turite nurodyti trigerio pavadinimą.'; + $lang['strtriggerneedsfunc'] = 'Turite priskirti funkciją trigeriui.'; + $lang['strtriggercreated'] = 'Trigeris sukurtas.'; + $lang['strtriggercreatedbad'] = 'Nepavyko sukurti trigerio.'; + $lang['strconfdroptrigger'] = 'Ar tikrai norite šalinti trigerį "%s" lentelėje "%s"?'; + $lang['strconfenabletrigger'] = 'Ar tikrai norite įjungti trigerį "%s" lentelėje "%s"?'; + $lang['strconfdisabletrigger'] = 'Ar tikrai norite išjungti trigerį "%s" lentelėje "%s"?'; + $lang['strtriggerdropped'] = 'Trigeris pašalintas.'; + $lang['strtriggerdroppedbad'] = 'Nepavyko pašalinti trigerio.'; + $lang['strtriggerenabled'] = 'Trigeris įjungtas.'; + $lang['strtriggerenabledbad'] = 'Nepavyko įjungti trigerio.'; + $lang['strtriggerdisabled'] = 'Trigeris išjungtas.'; + $lang['strtriggerdisabledbad'] = 'Nepavyko išjungti trigerio.'; + $lang['strtriggeraltered'] = 'Trigeris pakeistas.'; + $lang['strtriggeralteredbad'] = 'Nepavyko pakeisti trigerio.'; + $lang['strforeach'] = 'Kiekvienam(-ai)'; + + // Types + $lang['strtype'] = 'Duomenų tipas'; + $lang['strtypes'] = 'Duomenų tipai'; + $lang['strshowalltypes'] = 'Rodyti visus duomenų tipus'; + $lang['strnotype'] = 'Duomenų tipas nerastas.'; + $lang['strnotypes'] = 'Duomenų tipų nerasta.'; + $lang['strcreatetype'] = 'Kurti duomenų tipą'; + $lang['strcreatecomptype'] = 'Kurti struktūrinį duomenų tipą'; + $lang['strcreateenumtype'] = 'Kurti enum duomenų tipą'; + $lang['strtypeneedsfield'] = 'Turite nurodyti bent vieną lauką.'; + $lang['strtypeneedsvalue'] = 'Turite nurodyti bent vieną reikšmę.'; + $lang['strtypeneedscols'] = 'Turite nurodyti teisingą laukų skaičių.'; + $lang['strtypeneedsvals'] = 'Turite nurodyti teisingą reikšmių skaičių.'; + $lang['strinputfn'] = 'Įvesties funkcija'; + $lang['stroutputfn'] = 'Išvesties funkcija'; + $lang['strpassbyval'] = 'Perdavimas reikšme?'; + $lang['stralignment'] = 'Lygiavimas'; + $lang['strelement'] = 'Elementas'; + $lang['strdelimiter'] = 'Skirtukas'; + $lang['strstorage'] = 'Atmintinė'; + $lang['strfield'] = 'Laukas'; + $lang['strnumfields'] = 'Laukų sk.'; + $lang['strnumvalues'] = 'Reikšmių sk.'; + $lang['strtypeneedsname'] = 'Turite suteikti duomenų tipui pavadinimą.'; + $lang['strtypeneedslen'] = 'Turite nurodyti duomenų tipo ilgį.'; + $lang['strtypecreated'] = 'Duomenų tipas sukurtas.'; + $lang['strtypecreatedbad'] = 'Nepavyko sukurti duomenų tipo.'; + $lang['strconfdroptype'] = 'Ar tikrai norite šalinti duomenų tipą "%s"?'; + $lang['strtypedropped'] = 'Duomenų tipas pašalintas.'; + $lang['strtypedroppedbad'] = 'Nepavyko pašalinti duomenų tipo.'; + $lang['strflavor'] = 'Atmaina'; + $lang['strbasetype'] = 'Bazinis'; + $lang['strcompositetype'] = 'Struktūrinis'; + $lang['strpseudotype'] = 'Pseudo'; +$lang['strenum'] = 'Enum'; + $lang['strenumvalues'] = 'Enum reikšmės'; + + // Schemas + $lang['strschema'] = 'Schema'; + $lang['strschemas'] = 'Schemos'; + $lang['strshowallschemas'] = 'Rodyti visas schemas'; + $lang['strnoschema'] = 'Schema nerasta.'; + $lang['strnoschemas'] = 'Schemų nerasta.'; + $lang['strcreateschema'] = 'Kurti schemą'; + $lang['strschemaname'] = 'Schemos pavadinimas'; + $lang['strschemaneedsname'] = 'Turite suteikti schemai pavadinimą.'; + $lang['strschemacreated'] = 'Schema sukurta.'; + $lang['strschemacreatedbad'] = 'Nepavyko sukurti schemos.'; + $lang['strconfdropschema'] = 'Ar tikrai norite šalinti schemą "%s"?'; + $lang['strschemadropped'] = 'Schema pašalinta.'; + $lang['strschemadroppedbad'] = 'Nepavyko pašalinti schemos.'; + $lang['strschemaaltered'] = 'Schema pakeista.'; + $lang['strschemaalteredbad'] = 'Nepavyko pakeisti schemos.'; + $lang['strsearchpath'] = 'Schemų paieškos kelias'; + $lang['strspecifyschematodrop'] = 'Turite nurodyti bent vieną schemą, kurią norite pašalinti.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Domenas'; + $lang['strdomains'] = 'Domenai'; + $lang['strshowalldomains'] = 'Rodyti visus domenus'; + $lang['strnodomains'] = 'Domenų nerasta.'; + $lang['strcreatedomain'] = 'Kurti domeną'; + $lang['strdomaindropped'] = 'Domenas pašalintas.'; + $lang['strdomaindroppedbad'] = 'Nepavyko pašalinti domeno.'; + $lang['strconfdropdomain'] = 'Ar tikrai norite šalinti domeną "%s"?'; + $lang['strdomainneedsname'] = 'Turite suteikti domenui vardą.'; + $lang['strdomaincreated'] = 'Domenas sukurtas.'; + $lang['strdomaincreatedbad'] = 'Nepavyko sukurti domeno.'; + $lang['strdomainaltered'] = 'Domenas pakeistas.'; + $lang['strdomainalteredbad'] = 'Nepavyko pakeisti domeno.'; + + // Operators + $lang['stroperator'] = 'Operatorius'; + $lang['stroperators'] = 'Operatoriai'; + $lang['strshowalloperators'] = 'Rodyti visus operatorius'; + $lang['strnooperator'] = 'Operatorius nerastas.'; + $lang['strnooperators'] = 'Operatorių nerasta.'; + $lang['strcreateoperator'] = 'Kurti operatorių'; + $lang['strleftarg'] = 'Kairiojo argumento tipas'; + $lang['strrightarg'] = 'Dešiniojo argumento tipas'; +$lang['strcommutator'] = 'Commutator';//komutatyvumas, perstatomumas, +$lang['strnegator'] = 'Negator';//inversija,neigimas, neigimo operacija +$lang['strrestrict'] = 'Restrict';//ribojimas +$lang['strjoin'] = 'Join'; +$lang['strhashes'] = 'Hashes'; +$lang['strmerges'] = 'Merges'; +$lang['strleftsort'] = 'Left sort'; +$lang['strrightsort'] = 'Right sort'; + $lang['strlessthan'] = 'Mažiau nei'; + $lang['strgreaterthan'] = 'Daugiau nei'; + $lang['stroperatorneedsname'] = 'Turite suteikti operatoriui pavadinimą.'; + $lang['stroperatorcreated'] = 'Operatorius sukurtas.'; + $lang['stroperatorcreatedbad'] = 'Nepavyko sukurti operatoriaus.'; + $lang['strconfdropoperator'] = 'Ar tikrai norite šalinti operatorių "%s"?'; + $lang['stroperatordropped'] = 'Operatorius pašalintas.'; + $lang['stroperatordroppedbad'] = 'Nepavyko pašalinti operatoriaus.'; + + // Casts +$lang['strcasts'] = 'Casts';//duomenų tipo keitimas +$lang['strnocasts'] = 'No casts found.'; +$lang['strsourcetype'] = 'Source type'; +$lang['strtargettype'] = 'Target type'; +$lang['strimplicit'] = 'Implicit';//numanomas(-a) +$lang['strinassignment'] = 'In assignment'; +$lang['strbinarycompat'] = '(Binary compatible)';//suderintas(-a) su dvejetainė sistema + + // Conversions + $lang['strconversions'] = 'Konvertavimai'; + $lang['strnoconversions'] = 'Konvertavimai nerasti.'; +$lang['strsourceencoding'] = 'Source encoding';//pradinė koduotė +$lang['strtargetencoding'] = 'Target encoding';//galutinė koduotė + + // Languages + $lang['strlanguages'] = 'Programavimo kalbos'; + $lang['strnolanguages'] = 'Kalbų nerasta.'; + $lang['strtrusted'] = 'Patikima'; + + // Info + $lang['strnoinfo'] = 'Nėra informacijos.'; + $lang['strreferringtables'] = 'Priklausomos lentelės'; + $lang['strparenttables'] = 'Viršlentelės'; + $lang['strchildtables'] = 'Polentelės'; + + // Aggregates + $lang['straggregate'] = 'Agregavimo funkcija'; + $lang['straggregates'] = 'Agregavimo funkcijos'; + $lang['strnoaggregates'] = 'Agregavimo funkcijų nerasta.'; + $lang['stralltypes'] = '(Visi tipai)'; + $lang['strcreateaggregate'] = 'Kurti agregavimo funkciją'; + $lang['straggrbasetype'] = 'Pradinių duomenų tipas'; + $lang['straggrsfunc'] = 'Būsenos keitimo funkcija'; + $lang['straggrstype'] = 'Būsenos reikšmės duomenų tipas'; + $lang['straggrffunc'] = 'Galutinė funkcija'; + $lang['straggrinitcond'] = 'Pradinė sąlyga'; + $lang['straggrsortop'] = 'Rikiavimo operatorius'; + $lang['strconfdropaggregate'] = 'Ar tikrai norite šalinti agregavimo funkciją "%s"?'; + $lang['straggregatedropped'] = 'Agregavimo funkcija pašalinta.'; + $lang['straggregatedroppedbad'] = 'Nepavyko pašalinti agregavimo funkcijos.'; + $lang['straggraltered'] = 'Agregavimo funkcija pakeista.'; + $lang['straggralteredbad'] = 'Nepavyko pakeisti agregavimo funkcijos.'; + $lang['straggrneedsname'] = 'Turite suteikti agregavimo funkcijai pavadinimą.'; + $lang['straggrneedsbasetype'] = 'Turite nurodyti agregavimo funkcijos pradinių duomenų tipą.'; + $lang['straggrneedssfunc'] = 'Turite nurodyti agregavimo funkcijos būsenos keitimo funkcijos pavadinimą.'; + $lang['straggrneedsstype'] = 'Turite nurodyti agregavimo funkcijos būsenos reikšmės duomenų tipą.'; + $lang['straggrcreated'] = 'Agregavimo funkcija sukurta.'; + $lang['straggrcreatedbad'] = 'Nepavyko sukurti agregavimo funkcijos.'; + $lang['straggrshowall'] = 'Rodyti visas agregavimo funkcijas'; + + // Operator Classes + $lang['stropclasses'] = 'Operatorių klasės'; + $lang['strnoopclasses'] = 'Operatorių klasių nerasta.'; + $lang['straccessmethod'] = 'Prieigos metodas'; + + // Stats and performance + $lang['strrowperf'] = 'Įrašų Našumas'; + $lang['strioperf'] = 'I/O Našumas'; + $lang['stridxrowperf'] = 'Indeksų Įrašų Našumas'; + $lang['stridxioperf'] = 'Indeksų I/O Našumas'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Nuoseklus'; + $lang['strscan'] = 'Peržiūrėti'; + $lang['strread'] = 'Skaityti'; + $lang['strfetch'] = 'Paimti'; + $lang['strheap'] = 'Krūva'; +$lang['strtoast'] = 'TOAST'; +$lang['strtoastindex'] = 'TOAST Indeksas'; + $lang['strcache'] = 'Podėlis'; + $lang['strdisk'] = 'Diskas'; + $lang['strrows2'] = 'Įrašai'; + + // Tablespaces + $lang['strtablespace'] = 'Lentelių erdvė'; + $lang['strtablespaces'] = 'Lentelių erdvės'; + $lang['strshowalltablespaces'] = 'Rodyti visas lentelių erdves'; + $lang['strnotablespaces'] = 'Lentelių erdvių nerasta.'; + $lang['strcreatetablespace'] = 'Kurti lentelių erdvę'; + $lang['strlocation'] = 'Vieta'; + $lang['strtablespaceneedsname'] = 'Turite suteikti lentelių erdvei pavadinimą.'; + $lang['strtablespaceneedsloc'] = 'Turite nurodyti katalogą, kuriame turi būti sukurta lentelių erdvė.'; + $lang['strtablespacecreated'] = 'Lentelių erdvė sukurta.'; + $lang['strtablespacecreatedbad'] = 'Nepavyko sukurti lentelių erdvės.'; + $lang['strconfdroptablespace'] = 'Ar tikrai norite šalinti lentelių erdvę "%s"?'; + $lang['strtablespacedropped'] = 'Lentelių erdvė pašalinta.'; + $lang['strtablespacedroppedbad'] = 'Nepavyko pašalinti lentelių erdvės.'; + $lang['strtablespacealtered'] = 'Lentelių erdvė pakeista.'; + $lang['strtablespacealteredbad'] = 'Nepavyko pakeisti lentelių erdvės.'; + + // Miscellaneous + $lang['strtopbar'] = '%s veikia %s:%s -- Jūs esate prisijungęs kaip "%s"'; + $lang['strtimefmt'] = 'j M Y - g:iA'; + $lang['strhelp'] = 'Pagalba'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Pagalbos puslapio naršyklė'; + $lang['strselecthelppage'] = 'Pasirinkite pagalbos puslapį'; + $lang['strinvalidhelppage'] = 'Netinkamas pagalbos puslapis.'; + $lang['strlogintitle'] = 'Prisijungti prie %s'; + $lang['strlogoutmsg'] = 'Atsijungta nuo %s'; + $lang['strloading'] = 'Įkeliama...'; + $lang['strerrorloading'] = 'Klaida įkeliant'; + $lang['strclicktoreload'] = 'Spustelėkite, kad būtų atsiųsta iš naujo'; + + // Autovacuum + $lang['strautovacuum'] = 'Automatinis apvalymas'; + $lang['strturnedon'] = 'Įjungta'; + $lang['strturnedoff'] = 'Išjungta'; + $lang['strenabled'] = 'Veiksnus'; + $lang['strnovacuumconf'] = 'Automatinio apvalymo konfigūracijų nerasta.'; + $lang['strvacuumbasethreshold'] = 'Apvalymo bazinė riba'; + $lang['strvacuumscalefactor'] = 'Apvalymo skalės koeficientas'; + $lang['stranalybasethreshold'] = 'Analizės bazinė riba'; + $lang['stranalyzescalefactor'] = 'Analizės skalės koeficientas'; +$lang['strvacuumcostdelay'] = 'Apvalymo Cost Delay'; +$lang['strvacuumcostlimit'] = 'Apvalymo Cost Limit'; + $lang['strvacuumpertable'] = 'Lentelių automatinio apvalymo konfigūracijos'; + $lang['straddvacuumtable'] = 'Pridėti lentelės automatinio apvalymo konfigūraciją'; + $lang['streditvacuumtable'] = 'Taisyti lentelės %s automatinio apvalymo konfigūraciją'; + $lang['strdelvacuumtable'] = 'Šalinti lentelės %s automatinio apvalymo konfigūraciją ?'; + $lang['strvacuumtablereset'] = 'Lentelės %s automatinio apvalymo konfigūracijos reikšmės atstatytos į numatytąsias'; + $lang['strdelvacuumtablefail'] = 'Nepavyko panaikinti lentelės %s automatinio apvalymo konfigūracijos'; + $lang['strsetvacuumtablesaved'] = 'Lentelės %s automatinio apvalymo konfigūracija įrašyta.'; + $lang['strsetvacuumtablefail'] = 'Nepavyko konfigūruoti lentelės %s automatinio apvalymo.'; + $lang['strspecifydelvacuumtable'] = 'Turite nurodyti lentelę, kurios automatinio apvalymo konfigūraciją norite panaikinti.'; + $lang['strspecifyeditvacuumtable'] = 'Turite nurodyti lentelę, kurios automatinio apvalymo konfigūraciją norite taisyti.'; + $lang['strnotdefaultinred'] = 'Reikšmės, kitokios nei numatytosios, pažymėtos raudonai.'; + + // Table-level Locks + $lang['strlocks'] = 'Blokuotės'; + $lang['strtransaction'] = 'Operacijos Identifikatorius'; + $lang['strvirtualtransaction'] = 'Virtualios Operacijos Identifikatorius'; + $lang['strprocessid'] = 'Proceso Identifikatorius'; + $lang['strmode'] = 'Blokuotės veiksena'; + $lang['strislockheld'] = 'Ar blokuotė veikia?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Paruoštos operacijos'; + $lang['strxactid'] = 'Operacijos identifikatorius'; + $lang['strgid'] = 'Globalus identifikatorius'; + + // Fulltext search +$lang['strfulltext'] = 'Full Text Search'; + $lang['strftsconfig'] = 'FTS konfigūracija'; + $lang['strftsconfigs'] = 'Konfigūracijos'; + $lang['strftscreateconfig'] = 'Kurti FTS konfigūraciją'; + $lang['strftscreatedict'] = 'Kurti žodyną'; + $lang['strftscreatedicttemplate'] = 'Kurti žodyno šabloną'; + $lang['strftscreateparser'] = 'Kurti analizatorių'; + $lang['strftsnoconfigs'] = 'FTS konfigūracijų nerasta.'; + $lang['strftsconfigdropped'] = 'FTS konfigūracija pašalinta.'; + $lang['strftsconfigdroppedbad'] = 'Nepavyko pašalinti FTS konfigūracijos.'; + $lang['strconfdropftsconfig'] = 'Ar tikrai norite šalinti FTS konfigūraciją "%s"?'; + $lang['strconfdropftsdict'] = 'Ar tikrai norite šalinti FTS žodyną "%s"?'; + $lang['strconfdropftsmapping'] = 'Ar tikrai norite šalinti atvaizdį "%s" FTS konfigūracijai "%s"?'; + $lang['strftstemplate'] = 'Šablonas'; + $lang['strftsparser'] = 'Analizatorius'; + $lang['strftsconfigneedsname'] = 'Turite suteikti FTS konfigūracijai pavadinimą.'; + $lang['strftsconfigcreated'] = 'FTS konfigūracija sukurta.'; + $lang['strftsconfigcreatedbad'] = 'Nepavyko sukurti FTS konfigūracijos.'; + $lang['strftsmapping'] = 'Atvaizdis'; + $lang['strftsdicts'] = 'Žodynai'; + $lang['strftsdict'] = 'Žodynas'; + $lang['strftsemptymap'] = 'Išvalyti FTS konfigūracijos atvaizdį.'; + $lang['strftsconfigaltered'] = 'FTS konfigūracija pakeista.'; + $lang['strftsconfigalteredbad'] = 'Nepavyko pakeisti FTS konfigūracijos.'; + $lang['strftsconfigmap'] = 'FTS konfigūracijos atvaizdis'; + $lang['strftsparsers'] = 'FTS analizatoriai'; + $lang['strftsnoparsers'] = 'FTS analizatorių nėra.'; + $lang['strftsnodicts'] = 'FTS žodynų nėra.'; + $lang['strftsdictcreated'] = 'FTS žodynas sukurtas.'; + $lang['strftsdictcreatedbad'] = 'Nepavyko sukurti FTS žodyno.'; +$lang['strftslexize'] = 'Lexize'; +$lang['strftsinit'] = 'Init'; + $lang['strftsoptionsvalues'] = 'Parinktys ir reikšmės'; + $lang['strftsdictneedsname'] = 'Turite suteikti FTS žodynui pavadinimą.'; + $lang['strftsdictdropped'] = 'FTS žodynas pašalintas.'; + $lang['strftsdictdroppedbad'] = 'Nepavyko pašalinti FTS žodyno.'; + $lang['strftsdictaltered'] = 'FTS žodynas pakeistas.'; + $lang['strftsdictalteredbad'] = 'Nepavyko pakeisti FTS žodyno.'; + $lang['strftsaddmapping'] = 'Pridėti naują atvaizdį'; + $lang['strftsspecifymappingtodrop'] = 'Turite nurodyti bent vieną atvaizdį, kurį norite pašalinti.'; + $lang['strftsspecifyconfigtoalter'] = 'Turite nurodyti bent vieną FTS konfigūraciją, kurią norite pakeisti.'; + $lang['strftsmappingdropped'] = 'FTS atvaizdis pašalintas.'; + $lang['strftsmappingdroppedbad'] = 'Nepavyko pašalinti FTS atvaizdžio.'; + $lang['strftsnodictionaries'] = 'Žodynų nerasta.'; + $lang['strftsmappingaltered'] = 'FTS atvaizdis pakeistas.'; + $lang['strftsmappingalteredbad'] = 'Nepavyko pakeisti FTS atvaizdžio.'; + $lang['strftsmappingadded'] = 'FTS atvaizdis pridėtas.'; + $lang['strftsmappingaddedbad'] = 'Nepavyko pridėti FTS atvaizdžio.'; + $lang['strftstabconfigs'] = 'Konfigūracijos'; + $lang['strftstabdicts'] = 'Žodynai'; + $lang['strftstabparsers'] = 'Analizatoriai'; + $lang['strftscantparsercopy'] = 'Negalima nurodyti kartu ir analizatoriaus, ir šablono, teksto paieškos konfikūracijos kūrimo metu.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/mongol.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/mongol.php new file mode 100644 index 00000000..e2e9d6c7 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/mongol.php @@ -0,0 +1,527 @@ +<?php + + /** + * Mongolian language file for phpPgAdmin. + * @maintainer Erdenemandal Bat-Erdene [endeeuk@yahoo.com] + * + * $Id: mongol.php,v 1.5 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Mongolian'; + $lang['applocale'] = 'mn-MN'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'phpPgAdmin-Ф дСздСЪ ЭЯвЩЬЮЯ ее.'; + $lang['strppahome'] = 'phpPgAdmin - ?ЮФгмЮ ФмЬЧмУ'; + $lang['strpgsqlhome'] = 'PostgreSQL - ?ЮФгмЮ ФмЬЧмУ'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL - тЩоЩЧ ТСвЩЭд (ьЯЫСЬ)'; + $lang['strreportbug'] = 'сЬФССЮй ЭмФммЬмЬ'; + $lang['strviewfaq'] = 'сгееЬд ТС ШСвЩеЬд'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'шЯЬТЯЧФЯШ'; + $lang['strloginfailed'] = 'шЯЬТЯЬдйЮ СЬФСС'; + $lang['strlogindisallowed'] = 'шЯЬТЯЧФЯШ ТЯЬЯЭжЧ?Ъ'; + $lang['strserver'] = 'є?з ЫЯЭаиРдХв' ; + $lang['strlogout'] = 'чСвСШ'; + $lang['strowner'] = 'ќкмЭлЩЧо'; + $lang['straction'] = '?ЪЬФмЬ'; + $lang['stractions'] = '?ЪЬФмЬ??Ф'; + $lang['strname'] = 'юмв'; + $lang['strdefinition'] = 'єЯФЯвШЯЪЬЯЬд'; + $lang['straggregates'] = 'юмЧдЧмШ'; + $lang['strproperties'] = 'є?Ь?з (лЩЮж оСЮСв)'; + $lang['strbrowse'] = 'шСвСШ'; + $lang['strdrop'] = 'шСгСШ'; + $lang['strdropped'] = 'шСгСЧФгСЮ'; + $lang['strnull'] = 'шЯЯгЯЮ'; + $lang['strnotnull'] = 'шЯЯгЯШ ТЩл'; + $lang['strprev'] = '< ?ЭЮ?Ш'; + $lang['strnext'] = 'фСвССЧЩЪЮ >'; + $lang['strfirst'] = '<< ќШмЮФ'; + $lang['strlast'] = 'ѓ??ЬФ >>'; + $lang['strfailed'] = 'сЬФСС'; + $lang['strcreate'] = '??гЧмШ'; + $lang['strcreated'] = '??гЧмгмЮ'; + $lang['strcomment'] = 'єСЪЬТСв'; + $lang['strlength'] = 'ѕвд'; + $lang['strdefault'] = 'єЯФЯвШЯЪ Тег'; + $lang['stralter'] = '??воЩЬ?Ш'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'ш?оЩЮЧ?Ъ ТЯЬЧЯШ'; + $lang['strsave'] = 'шСФЧСЬСШ'; + $lang['strreset'] = 'свЩЬЧСШ'; + $lang['strinsert'] = 'явееЬЧС ШЩЪШ'; + $lang['strselect'] = 'ѓЯЮЧЯШ'; + $lang['strdelete'] = 'ѕгдЧСШ'; + $lang['strupdate'] = 'ѓСЪжЩвееЬСШ'; + $lang['strreferences'] = 'шСЭССвСЬ'; + $lang['stryes'] = 'єЩЪЭ'; + $lang['strno'] = '?Ч?Ъ'; + $lang['strtrue'] = '?ЮмЮ'; + $lang['strfalse'] = 'шеФСЬ'; + $lang['stredit'] = 'њСгСШ'; + $lang['strcolumns'] = 'тСЧСЮС'; + $lang['strrows'] = 'э?в'; + $lang['strobjects'] = 'яТиХЫд'; + $lang['strexample'] = 'ЧмШ Эмд'; + $lang['strback'] = 'теУСШ'; + $lang['strqueryresults'] = 'сгееЬЧйЮ ?в Ф?Ю'; + $lang['strshow'] = '?кмШ'; + $lang['strempty'] = 'шЯЯгЬЯШ'; + $lang['strlanguage'] = 'шмЬ'; + $lang['strencoding'] = 'ыЯФоЩЬЯШ'; + $lang['strvalue'] = 'ѕдЧС'; + $lang['strunique'] = 'яЮУЧЯЪ'; + $lang['strprimary'] = '?ЮФгмЮ'; + $lang['strexport'] = 'ќЫгаЯвд'; + $lang['strimport'] = 'щЭаЯвд'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = '?вЧмЬжЬ??Ь'; + $lang['stradmin'] = 'њЯШЩЯЮ ТСЪЧееЬСШ'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'ф?Ю лЩЮжЩЬЧмм'; + $lang['strclusterindex'] = 'ыЬСгдХв'; + $lang['strclustered'] = 'ыЬСгдХв'; + $lang['strreindex'] = 'фСШЩЮ ЩЮФХЫгЬмШ'; + $lang['strrun'] = 'сжЩЬЬееЬСШ'; + $lang['stradd'] = 'юмЭмШ'; + $lang['strevent'] = 'є?Ь?з'; + $lang['strwhere'] = 'шССЮС'; + $lang['strinstead'] = 'явЯЮФ Юи '; + $lang['strwhen'] = 'шмкмм'; + $lang['strformat'] = 'цЯвЭСд'; + $lang['strdata'] = '?Ч?ЧФ?Ь'; + $lang['strconfirm'] = 'тСдСЬЧССжееЬСШ'; + $lang['strexpression'] = '?ЪЬФмЬ'; + $lang['strellipsis'] = '...'; + $lang['strexpand'] = '?вЧ?дЧ?Ш'; + $lang['strcollapse'] = 'ѕЮСЬд'; + $lang['strexplain'] = 'єСЪЬТСв'; + $lang['strfind'] = 'яЬЯШ'; + $lang['stroptions'] = 'ѓЯЮЧЯЬд'; + $lang['strrefresh'] = 'ѓмвЧммШ'; + $lang['strdownload'] = 'єСдСж СзСШ'; + $lang['strinfo'] = 'эмФммЬмЬ'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'юмЭмЬд'; + + // Error handling + $lang['strbadconfig'] = 'єСЮй config.inc.php ШееоЩвгСЮ ТСЪЮС. config.inc.php-dist ?ССг ФСШЩЮ ??гЧм.'; + $lang['strnotloaded'] = 'єСЮй PHP гееЬЧСЬд Юи PostgreSQL ?Ч?ЧФЬЩЪЮ гСЮдСЪ ШСЭдвСЮ СжЭЬЬСШ ТЯЬЯжЧ?Ъ ТСЪЮС. єС PHP ?ЧСС ФСШЩЮ --with-pgsql дЯШЩвЧЯЯдЯЪ гееЬЧС.'; + $lang['strbadschema'] = 'єЯШЩвЧЯЯ Тевее'; + $lang['strbadencoding'] = 'Failed to set client encoding in database.'; + $lang['strsqlerror'] = 'SQL СЬФСС:'; + $lang['strinstatement'] = 'ї ЯаХвСдЯвХ:'; + $lang['strinvalidparam'] = 'юХзХвЮйЪ аСвСЭХдв гЫвЩадС.'; + $lang['strnodata'] = 'фСЮЮйШ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strnoobjects'] = 'яТпХЫдЯз ЮХ ЯТЮСвежХЮЯ.'; + $lang['strrownotunique'] = 'юХд еЮЩЫСЬиЮЯЧЯ ЩФХЮдЩЦЩЫСдЯвС ФЬб мдЯЪ кСаЩгЩ.'; + + // Tables + $lang['strtable'] = 'єСТЬЩУС'; + $lang['strtables'] = 'єСТЬЩУй'; + $lang['strshowalltables'] = '№ЯЫСкСди згХ дСТЬЩУй'; + $lang['strnotables'] = 'єСТЬЩУ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strnotable'] = ' єСТЬЩУС ЮХ ЯТЮСвежХЮС.'; + $lang['strcreatetable'] = 'ѓЯкФСди дСТЬЩУе'; + $lang['strtablename'] = 'щЭб дСТЬЩУй'; + $lang['strtableneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ ЯавХФХЬЩди ЩЭб дСТЬЩУй.'; + $lang['strtableneedsfield'] = 'їСЭ ЮХЯТШЯФЩЭЯ ЯавХФХЬЩди аЯ ЫвСЪЮХЪ ЭХвХ ЯФЮЯ аЯЬХ.'; + $lang['strtableneedscols'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ФЯаегдЩЭЯХ оЩгЬЯ СдвЩТедЯз.'; + $lang['strtablecreated'] = 'єСТЬЩУС гЯкФСЮС.'; + $lang['strtablecreatedbad'] = 'ѓЯкФСЮЩХ дСТЬЩУй авХвзСЮЯ.'; + $lang['strconfdroptable'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еФСЬЩди дСТЬЩУе "%s"?'; + $lang['strtabledropped'] = 'єСТЬЩУС еФСЬХЮС.'; + $lang['strtabledroppedbad'] = 'ѕФСЬХЮЩХ дСТЬЩУй авХвзСЮЯ.'; + $lang['strconfemptytable'] = 'їй езХвХЮй, одЯ ШЯдЩдХ ЯоЩгдЩди дСТЬЩУе "%s"?'; + $lang['strtableemptied'] = 'єСТЬЩУС ЯоЩнХЮС.'; + $lang['strtableemptiedbad'] = 'яоЩгдЫС дСТЬЩУй авХвзСЮС.'; + $lang['strinsertrow'] = 'фЯТСзЩди кСаЩги'; + $lang['strrowinserted'] = 'њСаЩги ФЯТСзЬХЮС.'; + $lang['strrowinsertedbad'] = 'фЯТСзЬХЮЩХ кСаЩгЩ авХвзСЮЯ.'; + $lang['streditrow'] = 'ђХФСЫдЩвЯзСди кСаЩги'; + $lang['strrowupdated'] = 'њСаЩги ЯТЮЯзЬХЮС.'; + $lang['strrowupdatedbad'] = 'яТЮЯзЬХЮЩХ кСаЩгЩ авХвзСЮЯ.'; + $lang['strdeleterow'] = 'ѕФСЬЩди кСаЩги'; + $lang['strconfdeleterow'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еФСЬЩди кСаЩги?'; + $lang['strrowdeleted'] = 'њСаЩги еФСЬХЮС.'; + $lang['strrowdeletedbad'] = 'ѕФСЬХЮЩХ кСаЩгЩ авХвзСЮЯ.'; + $lang['strsaveandrepeat'] = 'їгдСзЩди Щ аЯздЯвЩди'; + $lang['strfield'] = '№ЯЬХ'; + $lang['strfields'] = '№ЯЬб'; + $lang['strnumfields'] = 'ыЯЬ-зЯ аЯЬХЪ'; + $lang['strfieldneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ ЮСкзСди аЯЬХ'; + $lang['strselectallfields'] = 'їйТвСди згХ аЯЬб'; + $lang['strselectneedscol'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди аЯ ЫвСЪЮХЪ ЭХвХ ЯФЩЮ СдвЩТед'; + $lang['strselectunary'] = 'ѕЮСвЮйЪ ЯаХвСдЯв ЮХ ЭЯжХд ЩЭХди зХЬЩоЩЮе.'; + $lang['straltercolumn'] = 'щкЭХЮЩди СдвЩТед'; + $lang['strcolumnaltered'] = 'сдвЩТед ЩкЭХЮХЮ.'; + $lang['strcolumnalteredbad'] = 'щкЭХЮХЮЩХ СдвЩТедС авХвзСЮЯ.'; + $lang['strconfdropcolumn'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еФСЬЩди СдвЩТед "%s" дСТЬЩУй "%s"?'; + $lang['strcolumndropped'] = 'сдвЩТед еФСЬХЮ.'; + $lang['strcolumndroppedbad'] = 'ѕФСЬХЮЩХ СдвЩТедС авХвзСЮЯ.'; + $lang['straddcolumn'] = 'фЯТСзЩди СдвЩТед'; + $lang['strcolumnadded'] = 'сдвЩТед ФЯТСзЬХЮ.'; + $lang['strcolumnaddedbad'] = 'фЯТСзЬХЮЩХ СдвЩТедС авХвзСЮЯ.'; + $lang['strdataonly'] = 'єЯЬиЫЯ ФСЮЮйХ'; + $lang['strcascade'] = 'ыСгЫСФЯЭ'; + $lang['strtablealtered'] = 'єСТЬЩУС ЩкЭХЮХЮС.'; + $lang['strtablealteredbad'] = 'щкЭХЮХЮЩХ дСТЬЩУй авХвзСЮЯ.'; + $lang['strdataonly'] = 'єЯЬиЫЯ ФСЮЮйХ'; + $lang['strstructureonly'] = 'єЯЬиЫЯ гдвеЫдеве'; + $lang['strstructureanddata'] = 'ѓдвеЫдеве Щ ФСЮЮйХ'; + + // Users + $lang['struser'] = '№ЯЬикЯзСдХЬи'; + $lang['strusers'] = '№ЯЬикЯзСдХЬЩ'; + $lang['strusername'] = 'щЭб аЯЬикЯзСдХЬб'; + $lang['strpassword'] = '№СвЯЬи'; + $lang['strsuper'] = 'ѓеаХваЯЬикЯзСдХЬи?'; + $lang['strcreatedb'] = 'ѓЯкФСди ТСке ФСЮЮйШ?'; + $lang['strexpires'] = 'ѓвЯЫ ФХЪгдзЩб'; + $lang['strnousers'] = 'юХд дСЫЩШ аЯЬикЯзСдХЬХЪ.'; + $lang['struserupdated'] = '№ЯЬикЯзСдХЬи ЯТЮЯзЬХЮ.'; + $lang['struserupdatedbad'] = 'яТЮЯзЬХЮЩХ аЯЬикЯзСдХЬб авХвзСЮЯ.'; + $lang['strshowallusers'] = '№ЯЫСкСди згХШ аЯЬикЯзСдХЬХЪ'; + $lang['strcreateuser'] = 'ѓЯкФСди аЯЬикЯзСдХЬб'; + $lang['struserneedsname'] = 'їй ФЯЬжЮй ззХгдЩ ЩЭб аЯЬикЯзСдХЬб.'; + $lang['strusercreated'] = '№ЯЬикЯзСдХЬи гЯкФСЮ.'; + $lang['strusercreatedbad'] = 'ѓЯкФСЮЩХ аЯЬикЯзСдХЬб авХвзСЮЯ.'; + $lang['strconfdropuser'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еФСЬЩди аЯЬикЯзСдХЬб "%s"?'; + $lang['struserdropped'] = '№ЯЬикЯзСдХЬи еФСЬХЮ.'; + $lang['struserdroppedbad'] = 'ѕФСЬХЮЩХ аЯЬикЯзСдХЬб авХвзСЮЯ.'; + $lang['straccount'] = 'сЫЫСеЮд'; + $lang['strchangepassword'] = 'щкЭХЮЩди аСвЯЬи'; + $lang['strpasswordchanged'] = '№СвЯЬи ЩкЭХЮХЮ.'; + $lang['strpasswordchangedbad'] = 'щкЭХЮХЮЩХ аСвЯЬб авХвзСЮЯ.'; + $lang['strpasswordshort'] = '№СвЯЬи гЬЩлЫЯЭ ЫЯвЯдЫЩЪ.'; + $lang['strpasswordconfirm'] = '№СвЯЬи ЮХ гЯЯдзХдгдзеХд аЯФдзХвжФХЮЩР.'; + + // Groups + $lang['strgroup'] = 'чвеааС'; + $lang['strgroups'] = 'чвеаай'; + $lang['strnogroup'] = 'чвеааС ЮХ ЯТЮСвежХЮС.'; + $lang['strnogroups'] = 'юЩ ЯФЮЯЪ Чвеаай ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreategroup'] = 'ѓЯкФСди Чвеаае'; + $lang['strshowallgroups'] = '№ЯЫСкСди згХ Чвеаай'; + $lang['strgroupneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЮСкзСЮЩХ Чвеаай.'; + $lang['strgroupcreated'] = 'чвеааС гЯкФСЮС.'; + $lang['strgroupcreatedbad'] = 'ѓЯкФСЮЩХ Чвеаай авХвзСЮЯ.'; + $lang['strconfdropgroup'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еФСЬЩди Чвеаае "%s"?'; + $lang['strgroupdropped'] = 'чвеааС еФСЬХЮС.'; + $lang['strgroupdroppedbad'] = 'ѕФСЬХЮЩХ Чвеаай авХвзСЮЯ.'; + $lang['strmembers'] = 'ѕоСгдЮЩЫЯз'; + $lang['straddmember'] = 'фЯТСзЩди еоСгдЮЩЫС'; + $lang['strmemberadded'] = 'ѕоСгдЮЩЫ ФЯТСзЬХЮ.'; + $lang['strmemberaddedbad'] = 'фЯТСзЬХЮЩХ еоСгдЮЩЫС авХвзСЮЯ.'; + $lang['strdropmember'] = 'ѕФСЬЩди еоСгдЮЩЫС'; + $lang['strconfdropmember'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еФСЬЩди еоСгдЮЩЫС "%s" Щк Чвеаай "%s"?'; + $lang['strmemberdropped'] = 'ѕоСгдЮЩЫ еФСЬХЮ.'; + $lang['strmemberdroppedbad'] = 'ѕФСЬХЮЩХ еоСгдЮЩЫС авХвзСЮЯ.'; + + // Privilges + $lang['strprivilege'] = '№вЩзЩЬХЧЩб'; + $lang['strprivileges'] = '№вЩзЩЬХЧЩЩ'; + $lang['strnoprivileges'] = 'яТпХЫд ЮХ ЩЭХХд авЩзЩЬХЧЩЪ.'; + $lang['strgrant'] = 'ѕгЩЬЩди'; + $lang['strrevoke'] = 'ягЬСТЩди'; + $lang['strgranted'] = '№вЩзЩЬХЧЩЩ ЩкЭХЮХЮй.'; + $lang['strgrantfailed'] = 'щкЭХЮХЮЩХ авЩзЩЬХЧЩЪ авХвзСЮЯ.'; + $lang['strgrantbad'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ШЯдб Тй ЯФЮЯЧЯ аЯЬикЯзСдХЬб ЩЬЩ Чвеаае Щ ШЯдб Тй ЯФЮе авЩзЩЬХЧЩР.'; + $lang['stralterprivs'] = 'щкЭХЮЩди авЩзЩЬХЧЩЩ'; + $lang['strgrantor'] = 'фЯЮЯв'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'тСкС ФСЮЮйШ'; + $lang['strdatabases'] = 'тСкй ФСЮЮйШ'; + $lang['strshowalldatabases'] = '№ЯЫСкСди згХ ТСкй ФСЮЮйШ'; + $lang['strnodatabase'] = 'тСкС ФСЮЮйШ ЮХ ЯТЮСвежХЮС.'; + $lang['strnodatabases'] = 'юЩ ЯФЮЯЪ ТСкй ФСЮЮйШ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreatedatabase'] = 'ѓЯкФСди ТСке ФСЮЮйШ'; + $lang['strdatabasename'] = 'щЭб ТСкй ФСЮЮйШ'; + $lang['strdatabaseneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ авЩгзЯЩди ЩЭб їСлХЪ ТСкХ ФСЮЮйШ.'; + $lang['strdatabasecreated'] = 'тСкС ФСЮЮйШ гЯкФСЮС.'; + $lang['strdatabasecreatedbad'] = 'ѓЯкФСЮЩХ ТСкй ФСЮЮйШ авХвзСЮЯ.'; + $lang['strconfdropdatabase'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди ТСке ФСЮЮйШ "%s"?'; + $lang['strdatabasedropped'] = ' тСкС ФСЮЮйШ еЮЩодЯжХЮС.'; + $lang['strdatabasedroppedbad'] = 'ѕЮЩодЯжХЮЩХ ТСкй ФСЮЮйШ авХвзСЮЯ.'; + $lang['strentersql'] = 'їзХФЩдХ SQL-кСавЯг ЮЩжХ:'; + $lang['strvacuumgood'] = 'яаХвСУЩб аХвХгдвЯЪЫЩ кСзХвлХЮС.'; + $lang['strvacuumbad'] = 'яаХвСУЩб аХвХгдвЯЪЫЩ авХвзСЮС.'; + $lang['stranalyzegood'] = ' яаХвСУЩб СЮСЬЩкС кСзХвлХЮС.'; + $lang['stranalyzebad'] = ' яаХвСУЩб СЮСЬЩкС кСзХвлХЮС.'; + + // Views + $lang['strview'] = '№вХФгдСзЬХЮЩХ'; + $lang['strviews'] = '№вХФгдСзЬХЮЩб'; + $lang['strshowallviews'] = '№ЯЫСкСди згХ авХФгдСзЬХЮЩб'; + $lang['strnoview'] = '№вХФгдСзЬХЮЩХ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strnoviews'] = 'юЩ ЯФЮЯЧЯ авХФгдСзЬХЮЩб ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreateview'] = 'ѓЯкФСди авХФгдСзЬХЮЩХ'; + $lang['strviewname'] = 'щЭб авХФгдСзЬХЮЩб'; + $lang['strviewneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб авХФгдСзЬХЮЩб.'; + $lang['strviewneedsdef'] = ' їСЭ ЮХЯТШЯФЩЭЯ ЯавХФХЬЩди СдвЩТедй авХФгдСзЬХЮЩб.'; + $lang['strviewcreated'] = '№вХФгдСзЬХЮЩХ гЯкФСЮЯ.'; + $lang['strviewcreatedbad'] = 'ѓЯкФСЮЩХ авХФгдСзЬХЮЩб авХвзСЮЯ.'; + $lang['strconfdropview'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди авХФгдСзЬХЮЩХ "%s"?'; + $lang['strviewdropped'] = '№вХФгдСзЬХЮЩХ еЮЩодЯжХЮЯ.'; + $lang['strviewdroppedbad'] = 'ѕЮЩодЯжХЮЩХ авХФгдСзЬХЮЩб авХвзСЮЯ.'; + $lang['strviewupdated'] = '№вХФгдСзЬХЮЩХ ЯТЮЯзЬХЮЯ.'; + $lang['strviewupdatedbad'] = 'яТЮЯзЬХЮЩХ авХФгдСзЬХЮЩб авХвзСЮЯ.'; + + // Sequences + $lang['strsequence'] = '№ЯгЬХФЯзСдХЬиЮЯгди'; + $lang['strsequences'] = ' №ЯгЬХФЯзСдХЬиЮЯгдЩ'; + $lang['strshowallsequences'] = '№ЯЫСкСди згХ аЯгЬХФЯзСдХЬиЮЯгдЩ'; + $lang['strnosequence'] = '№ЯгЬХФЯзСдХЬиЮЯгди ЮХ ЯТЮСвежХЮС.'; + $lang['strnosequences'] = 'юЩ ЯФЮЯЪ аЯгЬХФЯзСдХЬиЮЯгдЩ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreatesequence'] = 'ѓЯкФСди аЯгЬХФЯзСдХЬиЮЯгди'; + $lang['strlastvalue'] = '№ЯгЬХФЮХХ кЮСоХЮЩХ'; + $lang['strincrementby'] = 'ѕзХЬЩоХЮЩХ ЮС'; + $lang['strstartvalue'] = 'юСоСЬиЮЯХ кЮСоХЮЩХ'; + $lang['strmaxvalue'] = 'эСЫг. зХЬЩоЩЮС'; + $lang['strminvalue'] = 'эЩЮ. зХЬЩоЩЮС'; + $lang['strcachevalue'] = 'ђСкЭХв ЫмлС'; + $lang['strlogcount'] = 'Log Count'; + $lang['striscycled'] = 'њСУЩЫЬЩди?'; + $lang['strsequenceneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб аЯгЬХФЯзСдХЬиЮЯгдЩ.'; + $lang['strsequencecreated'] = '№ЯгЬХФЯзСдХЬиЮЯгди гЯкФСЮС.'; + $lang['strsequencecreatedbad'] = 'ѓЯкФСЮЩХ аЯгЬХФЯзСдХЬиЮЯгдЩ авХвзСЮЯ.'; + $lang['strconfdropsequence'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди аЯгЬХФЯзСдХЬиЮЯгди "%s"?'; + $lang['strsequencedropped'] = '№ЯгЬХФЯзСдХЬиЮЯгди еЮЩодЯжХЮС.'; + $lang['strsequencedroppedbad'] = 'ѕЮЩодЯжХЮЩХ аЯгЬХФЯзСдХЬиЮЯгдЩ авХвзСЮЯ.'; + $lang['strsequencereset'] = '№ЯгЬХФЯзСдХЬиЮЯгди гТвЯлХЮС.'; + $lang['strsequenceresetbad'] = 'ѓТвЯг аЯгЬХФЯзСдХЬиЮЯгдЩ авХвзСЮ.'; + + // Indexes + $lang['strindexes'] = 'щЮФХЫг'; + $lang['strindexname'] = 'щЭб ЩЮФХЫгС'; + $lang['strshowallindexes'] = '№ЯЫСкСди згХ ЩЮФХЫгй'; + $lang['strnoindex'] = 'щЮФХЫг ЮХ ЯТЮСвежХЮ.'; + $lang['strnoindexes'] = 'юЩ ЯФЮЯЧЯ ЩЮФХЫгС ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreateindex'] = 'ѓЯкФСди ЩЮФХЫг'; + $lang['strtabname'] = 'щЭб дСТЬЩУй'; + $lang['strcolumnname'] = 'щЭб СдвЩТедС'; + $lang['strindexneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб ЩЮФХЫгС'; + $lang['strindexneedscols'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ФЯаегдЩЭЯХ ЫЯЬЩоХгдзЯ СдвЩТедЯз.'; + $lang['strindexcreated'] = 'щЮФХЫг гЯкФСЮ.'; + $lang['strindexcreatedbad'] = 'ѓЯкФСЮЩХ ЩЮФХЫгС авХвзСЮЯ.'; + $lang['strconfdropindex'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди ЩЮФХЫг "%s"?'; + $lang['strindexdropped'] = 'щЮФХЫг еЮЩодЯжХЮ.'; + $lang['strindexdroppedbad'] = 'ѕЮЩодЯжХЮЩХ ЩЮФХЫгС авХвзСЮЯ.'; + $lang['strkeyname'] = 'щЭб ЫЬРоС'; + $lang['struniquekey'] = 'ѕЮЩЫСЬиЮйЪ ЫЬРо'; + $lang['strprimarykey'] = '№ХвзЩоЮйЪ ЫЬРо'; + $lang['strindextype'] = 'їЩФ ЩЮФХЫгС'; + $lang['strindexname'] = 'щЭб ЩЮФХЫгС'; + $lang['strtablecolumnlist'] = 'сдвЩТедЯз з дСТЬЩУХ'; + $lang['strindexcolumnlist'] = 'сдвЩТедЯз з ЩЮФХЫгХ'; + $lang['strconfcluster'] = 'їй езХвХЮй, одЯ ШЯдЩдХ ЫЬСгдХвЩкЯзСди "%s"?'; + $lang['strclusteredgood'] = 'ыЬСгдХвЩкСУЩб кСзХвлХЮС.'; + $lang['strclusteredbad'] = 'ыЬСгдХвЩкСУЩб авХвзСЮС.'; + + // Rules + $lang['strrules'] = '№вСзЩЬС'; + $lang['strrule'] = '№вСзЩЬЯ'; + $lang['strshowallrules'] = '№ЯЫСкСди згХ авСзЩЬС'; + $lang['strnorule'] = '№вСзЩЬЯ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strnorules'] = 'юЩ ЯФЮЯЧЯ авСзЩЬС ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreaterule'] = 'ѓЯкФСди авСзЩЬЯ'; + $lang['strrulename'] = 'щЭб авСзЩЬС'; + $lang['strruleneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб авСзЩЬС.'; + $lang['strrulecreated'] = '№вСзЩЬЯ гЯкФСЮЯ.'; + $lang['strrulecreatedbad'] = 'ѓЯкФСЮЩХ авСзЩЬС авХвзСЮЯ.'; + $lang['strconfdroprule'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди авСзЩЬЯ "%s" on "%s"?'; + $lang['strruledropped'] = '№вСзЩЬЯ еЮЩодЯжХЮЯ.'; + $lang['strruledroppedbad'] = 'ѕЮЩодЯжХЮЩХ авСзЩЬС авХвзСЮЯ.'; + + // Constraints + $lang['strconstraints'] = 'яЧвСЮЩоХЮЩб'; + $lang['strshowallconstraints'] = '№ЯЫСкСди згХ ЯЧвСЮЩоХЮЩб'; + $lang['strnoconstraints'] = 'юЩ ЯФЮЯЧЯ ЯЧвСЮЩоХЮЩб ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreateconstraint'] = 'ѓЯкФСди ЯЧвСЮЩоХЮЩХ'; + $lang['strconstraintcreated'] = 'яЧвСЮЩоХЮЩХ гЯкФСЮЯ.'; + $lang['strconstraintcreatedbad'] = 'ѓЯкФСЮЩХ ЯЧвСЮЩоХЮЩб авХвзСЮЯ.'; + $lang['strconfdropconstraint'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди ЯЧвСЮЩоХЮЩХ "%s" on "%s"?'; + $lang['strconstraintdropped'] = 'яЧвСЮЩоХЮЩХ еЮЩодЯжХЮЯ.'; + $lang['strconstraintdroppedbad'] = 'ѕЮЩодЯжХЮЩХ ЯЧвСЮЩоХЮЩб авХвзСЮЯ.'; + $lang['straddcheck'] = 'фЯТСзЩди авЯзХвЫе'; + $lang['strcheckneedsdefinition'] = 'яЧвСЮЩоХЮЩХ авЯзХвЫЩ ЮежФСХдгб з ЯавХФХЬХЮЩЩ.'; + $lang['strcheckadded'] = 'яЧвСЮЩоХЮЩХ авЯзХвЫЩ ФЯТСзЬХЮЯ.'; + $lang['strcheckaddedbad'] = 'фЯТСзЬХЮЩХ ЯЧвСЮЩоХЮЩб авЯзХвЫЩ авХвзСЮЯ.'; + $lang['straddpk'] = 'фЯТСзЩди аХвзЩоЮйЪ ЫЬРо'; + $lang['strpkneedscols'] = '№ХвзЩоЮйЪ ЫЬРо ФЯЬжХЮ зЫЬРоСди ШЯдб Тй ЯФЩЮ СдвЩТед.'; + $lang['strpkadded'] = '№ХвзЩоЮйЪ ЫЬРо ФЯТСзЬХЮ.'; + $lang['strpkaddedbad'] = 'фЯТСзЬХЮЩХ аХвзЩоЮЯЧЯ ЫЬРоС авХвзСЮЯ.'; + $lang['stradduniq'] = 'фЯТСзЩди еЮЩЫСЬиЮйЪ ЫЬРо'; + $lang['struniqneedscols'] = 'ѕЮЩЫСЬиЮйЪ ЫЬРо ФЯЬжХЮ зЫЬРоСди ШЯдб Тй ЯФЩЮ СдвЩТед.'; + $lang['struniqadded'] = 'ѕЮЩЫСЬиЮйЪ ЫЬРо ФЯТСзЬХЮ.'; + $lang['struniqaddedbad'] = 'фЯТСзЬХЮЩХ еЮЩЫСЬиЮЯЧЯ ЫЬРоС авХвзСЮЯ.'; + $lang['straddfk'] = 'фЯТСзЩди зЮХлЮЩЪ ЫЬРо'; + $lang['strfkneedscols'] = 'їЮХлЮЩЪ ЫЬРо ФЯЬжХЮ зЫЬРоСди ШЯдб Тй ЯФЩЮ СдвЩТед.'; + $lang['strfkneedstarget'] = 'їЮХлЮХЭе ЫЬРое ЮХЯТШЯФЩЭЯ еЫСкСди УХЬХзеР дСТЬЩУе.'; + $lang['strfkadded'] = 'їЮХлЮЩЪ ЫЬРо ФЯТСзЬХЮ.'; + $lang['strfkaddedbad'] = 'фЯТСзЬХЮЩХ зЮХлЮХЧЯ ЫЬРоС авХвзСЮЯ.'; + $lang['strfktarget'] = 'уХЬХзСб дСТЬЩУС'; + $lang['strfkcolumnlist'] = 'сдвЩТедй з ЫЬРоХ'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'цеЮЫУЩб'; + $lang['strfunctions'] = ' цеЮЫУЩЩ'; + $lang['strshowallfunctions'] = '№ЯЫСкСди згХ ЦеЮЫУЩЩ'; + $lang['strnofunction'] = 'цеЮЫУЩб ЮХ ЯТЮСвежХЮС.'; + $lang['strnofunctions'] = 'юЩ ЯФЮЯЪ ЦеЮЫУЩЩ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreatefunction'] = 'ѓЯкФСди ЦеЮЫУЩР'; + $lang['strfunctionname'] = 'щЭб ЦеЮЫУЩЩ'; + $lang['strreturns'] = 'їЯкзвСнСХЭЯХ кЮСоХЮЩХ'; + $lang['strarguments'] = 'свЧеЭХЮдй'; + $lang['strproglanguage'] = 'ёкйЫ авЯЧвСЭЭЩвЯзСЮЩб'; + $lang['strproglanguage'] = 'ёкйЫ'; + $lang['strfunctionneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб ЦеЮЫУЩЩ.'; + $lang['strfunctionneedsdef'] = 'їСЭ ЮХЯТШЯФЩЭЯ ЯавХФХЬЩди ЦеЮЫУЩР.'; + $lang['strfunctioncreated'] = 'цеЮЫУЩб гЯкФСЮС.'; + $lang['strfunctioncreatedbad'] = 'ѓЯкФСЮЩХ ЦеЮЫУЩЩ авХвзСЮЯ.'; + $lang['strconfdropfunction'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди ЦеЮЫУЩР "%s"?'; + $lang['strfunctiondropped'] = 'цеЮЫУЩб еЮЩодЯжХЮС.'; + $lang['strfunctiondroppedbad'] = 'ѕЮЩодЯжХЮЩХ ЦеЮЫУЩЩ авХвзСЮЯ.'; + $lang['strfunctionupdated'] = 'цеЮЫУЩб ЯТЮЯзЬХЮС.'; + $lang['strfunctionupdatedbad'] = 'яТЮЯзЬХЮЩХ ЦеЮЫУЩЩ авХвзСЮЯ.'; + + // Triggers + $lang['strtrigger'] = 'євЩЧЧХв'; + $lang['strtriggers'] = ' євЩЧЧХвй'; + $lang['strshowalltriggers'] = '№ЯЫСкСди згХ двЩЧЧХвй'; + $lang['strnotrigger'] = 'євЩЧЧХв ЮХ ЯТЮСвежХЮ.'; + $lang['strnotriggers'] = 'юЩ ЯФЮЯЧЯ двЩЧЧХвС ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreatetrigger'] = 'ѓЯкФСди двЩЧЧХв'; + $lang['strtriggerneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб двЩЧЧХвС.'; + $lang['strtriggerneedsfunc'] = 'їСЭ ЮХЯТШЯФЩЭЯ ЯавХФХЬЩди ЦеЮЫУЩР двЩЧЧХвС.'; + $lang['strtriggercreated'] = 'євЩЧЧХв гЯкФСЮ.'; + $lang['strtriggercreatedbad'] = 'ѓЯкФСЮЩХ двЩЧЧХвС авХвзСЮЯ.'; + $lang['strconfdroptrigger'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди двЩЧЧХв "%s" ЮС "%s"?'; + $lang['strtriggerdropped'] = 'євЩЧЧХв еЮЩодЯжХЮ.'; + $lang['strtriggerdroppedbad'] = 'ѕЮЩодЯжХЮЩХ двЩЧЧХвС авХвзСЮЯ.'; + $lang['strtriggeraltered'] = 'євЩЧЧХв ЩкЭХЮХЮ.'; + $lang['strtriggeralteredbad'] = 'щкЭХЮХЮЩХ двЩЧЧХвС авХвзСЮЯ.'; + + // Types + $lang['strtype'] = 'єЩа ФСЮЮйШ'; + $lang['strtypes'] = 'єЩай ФСЮЮйШ'; + $lang['strshowalltypes'] = '№ЯЫСкСди згХ дЩай ФСЮЮйШ'; + $lang['strnotype'] = 'єЩа ФСЮЮйШ ЮХ ЯТЮСвежХЮ.'; + $lang['strnotypes'] = 'юЩ ЯФЮЯЧЯ дЩаС ФСЮЮйШ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreatetype'] = 'ѓЯкФСди дЩа ФСЮЮйШ'; + $lang['strtypename'] = 'щЭб дЩаС ФСЮЮйШ'; + $lang['strinputfn'] = 'цеЮЫУЩб ззЯФС'; + $lang['stroutputfn'] = 'цеЮЫУЩб зйзЯФС'; + $lang['strpassbyval'] = '№ХвХФСди аЯ кЮСоХЮЩР?'; + $lang['stralignment'] = 'їйвСзЮЩзСЮЩХ'; + $lang['strelement'] = 'ќЬХЭХЮд'; + $lang['strdelimiter'] = 'ђСкФХЬЩдХЬи'; + $lang['strstorage'] = 'Storage'; + $lang['strtypeneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб дЩаС ФСЮЮйШ.'; + $lang['strtypeneedslen'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди вСкЭХв ФЬб дЩаС ФСЮЮйШ.'; + $lang['strtypecreated'] = 'єЩа ФСЮЮйШ гЯкФСЮ.'; + $lang['strtypecreatedbad'] = 'ѓЯкФСЮЩХ дЩаС ФСЮЮйШ авХвзСЮЯ.'; + $lang['strconfdroptype'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди дЩа ФСЮЮйШ "%s"?'; + $lang['strtypedropped'] = 'єЩа ФСЮЮйШ еЮЩодЯжХЮ.'; + $lang['strtypedroppedbad'] = 'ѕЮЩодЯжХЮЩХ дЩаС ФСЮЮйШ авХвзСЮЯ.'; + + // Schemas + $lang['strschema'] = 'ѓШХЭС'; + $lang['strschemas'] = 'ѓШХЭй'; + $lang['strshowallschemas'] = '№ЯЫСкСди згХ гШХЭй'; + $lang['strnoschema'] = 'ѓШХЭС ЮХ ЯТЮСвежХЮС.'; + $lang['strnoschemas'] = 'юЩ ЯФЮЯЪ гШХЭй ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreateschema'] = 'ѓЯкФСди гШХЭе'; + $lang['strschemaname'] = 'щЭб гШХЭй'; + $lang['strschemaneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб гШХЭй.'; + $lang['strschemacreated'] = 'ѓШХЭС гЯкФСЮС.'; + $lang['strschemacreatedbad'] = 'ѓЯкФСЮЩХ гШХЭй авХвзСЮЯ.'; + $lang['strconfdropschema'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди гШХЭе "%s"?'; + $lang['strschemadropped'] = 'ѓШХЭС еЮЩодЯжХЮС.'; + $lang['strschemadroppedbad'] = 'ѕЮЩодЯжХЮЩХ гШХЭй авХвзСЮЯ.'; + + // Reports + + // Domains + $lang['strdomain'] = 'фЯЭХЮ'; + $lang['strdomains'] = 'фЯЭХЮй'; + $lang['strshowalldomains'] = '№ЯЫСкСди згХ ФЯЭХЮй'; + $lang['strnodomains'] = 'юЩ ЯФЮЯЧЯ ФЯЭХЮС ЮХ ЯТЮСвежХЮЯ.'; + $lang['strcreatedomain'] = 'ѓЯкФСди ФЯЭХЮ'; + $lang['strdomaindropped'] = 'фЯЭХЮ еФСЬХЮ.'; + $lang['strdomaindroppedbad'] = 'ѕФСЬХЮЩХ ФЯЭХЮС авХвзСЮЯ.'; + $lang['strconfdropdomain'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еФСЬЩди ФЯЭХЮ "%s"?'; + $lang['strdomainneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб ФЯЭХЮС.'; + $lang['strdomaincreated'] = 'фЯЭХЮ гЯкФСЮ.'; + $lang['strdomaincreatedbad'] = 'ѓЯкФСЮЩХ ФЯЭХЮС авХвзСЮЯ.'; + $lang['strdomainaltered'] = 'фЯЭХЮ ЩкЭХЮХЮ.'; + $lang['strdomainalteredbad'] = 'щкЭХЮХЮЩХ ФЯЭХЮС авХвзСЮЯ.'; + + // Operators + $lang['stroperator'] = 'яаХвСдЯв'; + $lang['stroperators'] = 'яаХвСдЯвй'; + $lang['strshowalloperators'] = '№ЯЫСкСди згХ ЯаХвСдЯвй'; + $lang['strnooperator'] = 'яаХвСдЯв ЮХ ЯТЮСвежХЮ.'; + $lang['strnooperators'] = 'яаХвСдЯвй ЮХ ЯТЮСвежХЮй.'; + $lang['strcreateoperator'] = 'ѓЯкФСди ЯаХвСдЯв'; + $lang['strleftarg'] = 'єЩа ЬХзЯЧЯ СвЧеЭХЮдС'; + $lang['strrightarg'] = 'єЩа авСзЯЧЯ СвЧеЭХЮдС'; + $lang['strcommutator'] = '№вХЯТвСкЯзСЮЩХ'; + $lang['strnegator'] = 'ядвЩУСЮЩХ'; + $lang['strrestrict'] = 'ягЬСТЬХЮЩХ'; + $lang['strjoin'] = 'яТпХФЩЮХЮЩХ'; + $lang['strhashes'] = 'шХлЩвЯзСЮЩХ'; + $lang['strmerges'] = 'ѓЬЩбЮЩХ'; + $lang['strleftsort'] = 'ѓЯдЩвЯзЫС аЯ ЬХзЯЭе'; + $lang['strrightsort'] = 'ѓЯдЩвЯзЫС аЯ авСзЯЭе'; + $lang['strlessthan'] = 'эХЮилХ'; + $lang['strgreaterthan'] = 'тЯЬилХ'; + $lang['stroperatorneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЮСкзСЮЩХ ЯаХвСдЯвС.'; + $lang['stroperatorcreated'] = 'яаХвСдЯв гЯкФСЮ'; + $lang['stroperatorcreatedbad'] = 'ЯкФСЮЩХ ЯаХвСдЯвС авХвзСЮЯ.'; + $lang['strconfdropoperator'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди ЯаХвСдЯв "%s"?'; + $lang['stroperatordropped'] = 'яаХвСдЯв еФСЬХЮ.'; + $lang['stroperatordroppedbad'] = 'ѕФСЬХЮЩХ ЯаХвСдЯвС авХвзСЮЯ.'; + + // Casts + $lang['strcasts'] = 'яТвСкУй'; + $lang['strnocasts'] = 'яТвСкУЯз ЮХ ЯТЮСвежХЮЯ.'; + $lang['strsourcetype'] = 'єЩа ЩгдЯоЮЩЫС'; + $lang['strtargettype'] = 'єЩа авЩХЭЮЩЫС'; + $lang['strimplicit'] = 'юХбзЮйЪ'; + $lang['strinassignment'] = 'ї ЮСкЮСоХЮЩЩ'; + $lang['strbinarycompat'] = '(ФзЯЩоЮЯ гЯзЭХгдЩЭйЪ)'; + + // Conversions + $lang['strconversions'] = '№вХЯТвСкЯзСЮЩХ'; + $lang['strnoconversions'] = '№вХЯТвСкЯзСЮЩЪ ЮХ ЯТЮСвежХЮЯ.'; + $lang['strsourceencoding'] = 'ыЯФЩвЯзЫС ЩгдЯоЮЩЫС'; + $lang['strtargetencoding'] = 'ыЯФЩвЯзЫС авЩХЭЮЩЫС'; + + // Languages + $lang['strlanguages'] = 'ёкйЫЩ'; + $lang['strnolanguages'] = 'ёкйЫЯз ЮХ ЯТЮСвежХЮЯ.'; + $lang['strtrusted'] = '№вЯзХвХЮЯ'; + + // Info + $lang['strnoinfo'] = 'юХд ФЯгдеаЮЯЪ ЩЮЦЯвЭСУЩЩ.'; + $lang['strreferringtables'] = 'ѓгйЬСРнЩХгб дСТЬЩУй'; + $lang['strparenttables'] = 'ђЯФЩдХЬигЫЩХ дСТЬЩУй'; + $lang['strchildtables'] = 'фЯоХвЮЩХ дСТЬЩУй'; + + // Miscellaneous + $lang['strtopbar'] = '%s зйаЯЬЮбХдгб ЮС %s:%s -- їй кСвХЧЩгдвЩвЯзСЮй ЫСЫ "%s"'; + $lang['strtimefmt'] = ' j-m-Y g:i'; + +?> + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/polish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/polish.php new file mode 100644 index 00000000..dc6cc042 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/polish.php @@ -0,0 +1,745 @@ +<?php + + /** + * Polish language file for WebDB. + * @maintainer Rafal Slubowski [slubek@users.sourceforge.net] + * + * $Id: polish.php,v 1.55 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Polski'; + $lang['applocale'] = 'pl-PL'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Witaj w phpPgAdmin.'; + $lang['strppahome'] = 'Strona domowa phpPgAdmin'; + $lang['strpgsqlhome'] = 'Strona domowa PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Dokumentacja PostgreSQL (lokalna)'; + $lang['strreportbug'] = 'Zgłoś raport o błędzie'; + $lang['strviewfaq'] = 'Przejrzyj FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Zaloguj'; + $lang['strloginfailed'] = 'Próba zalogowania nie powiodła się.'; + $lang['strlogindisallowed'] = 'Logowanie niedozwolone'; + $lang['strserver'] = 'Serwer'; + $lang['strservers'] = 'Serwery'; + $lang['strintroduction'] = 'Wprowadzenie'; + $lang['strhost'] = 'Host'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Wyloguj się'; + $lang['strowner'] = 'Właściciel'; + $lang['straction'] = 'Akcja'; + $lang['stractions'] = 'Akcje'; + $lang['strname'] = 'Nazwa'; + $lang['strdefinition'] = 'Definicja'; + $lang['strproperties'] = 'Właściwości'; + $lang['strbrowse'] = 'Przeglądaj'; + $lang['strenable'] = 'Aktywuj'; + $lang['strdisable'] = 'Deaktywuj'; + $lang['strdrop'] = 'Usuń'; + $lang['strdropped'] = 'Usunięty'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Not Null'; + $lang['strprev'] = 'Poprzedni'; + $lang['strnext'] = 'Następny'; + $lang['strfirst'] = '<< Pierwszy'; + $lang['strlast'] = 'Ostatni >>'; + $lang['strfailed'] = 'Nieudany'; + $lang['strcreate'] = 'Utwórz'; + $lang['strcreated'] = 'Utworzony'; + $lang['strcomment'] = 'Komentarz'; + $lang['strlength'] = 'Długość'; + $lang['strdefault'] = 'Domyślny'; + $lang['stralter'] = 'Zmień'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Anuluj'; + $lang['strac'] = 'Włącz autouzupełnianie'; + $lang['strsave'] = 'Zapisz'; + $lang['strreset'] = 'Wyczyść'; + $lang['strinsert'] = 'Wstaw'; + $lang['strselect'] = 'Wybierz'; + $lang['strdelete'] = 'Usuń'; + $lang['strupdate'] = 'Zmień'; + $lang['strreferences'] = 'Odnośniki'; + $lang['stryes'] = 'Tak'; + $lang['strno'] = 'Nie'; + $lang['strtrue'] = 'Prawda'; + $lang['strfalse'] = 'Fałsz'; + $lang['stredit'] = 'Edycja'; + $lang['strcolumn'] = 'Kolumna'; + $lang['strcolumns'] = 'Kolumny'; + $lang['strrows'] = 'wiersz(y)'; + $lang['strrowsaff'] = 'wiersz(y) dotyczy.'; + $lang['strobjects'] = 'obiekty'; + $lang['strback'] = 'Wstecz'; + $lang['strqueryresults'] = 'Wyniki zapytania'; + $lang['strshow'] = 'Pokaż'; + $lang['strempty'] = 'Wyczyść'; + $lang['strlanguage'] = 'Język'; + $lang['strencoding'] = 'Kodowanie'; + $lang['strvalue'] = 'Wartość'; + $lang['strunique'] = 'Unikatowy'; + $lang['strprimary'] = 'Główny'; + $lang['strexport'] = 'Eksport'; + $lang['strimport'] = 'Import'; + $lang['strallowednulls'] = 'Dozwolone znaki NULL'; + $lang['strbackslashn'] = '\N'; + $lang['strnull'] = 'Null'; + $lang['stremptystring'] = 'Pusty ciąg znaków/pole'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Administruj'; + $lang['strvacuum'] = 'Przeczyść'; + $lang['stranalyze'] = 'Analizuj'; + $lang['strclusterindex'] = 'Klastruj'; + $lang['strclustered'] = 'Klastrowany?'; + $lang['strreindex'] = 'Przeindeksuj'; + $lang['strrun'] = 'Uruchom'; + $lang['stradd'] = 'Dodaj'; + $lang['strremove'] = 'Usuń'; + $lang['strevent'] = 'Zdarzenie'; + $lang['strwhere'] = 'Gdzie'; + $lang['strinstead'] = 'Wykonaj zamiast'; + $lang['strwhen'] = 'Kiedy'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Dane'; + $lang['strconfirm'] = 'Potwierdź'; + $lang['strexpression'] = 'Wyrażenie'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Rozwiń'; + $lang['strcollapse'] = 'Zwiń'; + $lang['strexplain'] = 'Explain'; + $lang['strexplainanalyze'] = 'Explain Analyze'; + $lang['strfind'] = 'Znajdź'; + $lang['stroptions'] = 'Opcje'; + $lang['strrefresh'] = 'Odśwież'; + $lang['strdownload'] = 'Pobierz'; + $lang['strdownloadgzipped'] = 'Pobierz skompresowane gzip-em'; + $lang['strinfo'] = 'Informacje'; + $lang['stroids'] = 'OIDy'; + $lang['stradvanced'] = 'Zaawansowane'; + $lang['strvariables'] = 'Zmienne'; + $lang['strprocess'] = 'Proces'; + $lang['strprocesses'] = 'Procesy'; + $lang['strsetting'] = 'Ustawienie'; + $lang['streditsql'] = 'Edycja zapytania SQL'; + $lang['strruntime'] = 'Całkowity czas pracy: %s ms.'; + $lang['strpaginate'] = 'Wyświetl wyniki stronami'; + $lang['struploadscript'] = 'lub załaduj skrypt SQL:'; + $lang['strstarttime'] = 'Czas początku'; + $lang['strfile'] = 'Plik'; + $lang['strfileimported'] = 'Plik został zaimportowany.'; + $lang['strtrycred'] = 'Użyj tych parametrów dla wszystkich serwerów'; + $lang['strexecute'] = 'Wykonaj'; + + // Database Sizes + $lang['strsize'] = 'Rozmiar'; + $lang['strbytes'] = 'bajtów'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Ta aplikacja najlepiej działa w przeglądarce obsługującej ramki, ale możesz jej użyć również bez ramek, klikając poniższy link.'; + $lang['strnoframeslink'] = 'Otwórz bez ramek'; + $lang['strbadconfig'] = 'Twój plik config.inc.php jest przestarzały. Musisz go utworzyć ponownie wykorzystując nowy config.inc.php-dist.'; + $lang['strnotloaded'] = 'Nie wkompilowałeś do PHP obsługi tej bazy danych.'; + $lang['strpostgresqlversionnotsupported'] = 'Nieobsługiwana wersja PostgreSQL. Uaktualnij do wersji %s lub nowszej.'; + $lang['strbadschema'] = 'Podano błędny schemat.'; + $lang['strbadencoding'] = 'Błędne kodowanie bazy.'; + $lang['strsqlerror'] = 'Błąd SQL:'; + $lang['strinstatement'] = 'W poleceniu:'; + $lang['strinvalidparam'] = 'Błędny parametr.'; + $lang['strnodata'] = 'Nie znaleziono danych.'; + $lang['strnoobjects'] = 'Nie znaleziono obiektów.'; + $lang['strrownotunique'] = 'Brak unikatowego identyfikatora dla tego wiersza.'; + $lang['strnouploads'] = 'Ładowanie plików wyłączone.'; + $lang['strimporterror'] = 'Błąd importu.'; + $lang['strimporterror-fileformat'] = 'Błąd importu: Nie można automatycznie określić formatu pliku.'; + $lang['strimporterrorline'] = 'Błąd importu w linii %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Błąd importu w linii %s: Linia nie ma właściwej liczby kolumn.'; + $lang['strimporterror-uploadedfile'] = 'Błąd importu: plik nie może być załadowany na serwer.'; + $lang['strcannotdumponwindows'] = 'Zrzucanie złożonych nazw tabel i schematów pod Windows jest nie wspierane.'; + + // Tables + $lang['strtable'] = 'Tabela'; + $lang['strtables'] = 'Tabele'; + $lang['strshowalltables'] = 'Pokaż wszystkie tabele'; + $lang['strnotables'] = 'Nie znaleziono tabel.'; + $lang['strnotable'] = 'Nie znaleziono tabeli.'; + $lang['strcreatetable'] = 'Utwórz tabelę'; + $lang['strtablename'] = 'Nazwa tabeli'; + $lang['strtableneedsname'] = 'Musisz nazwać tabelę.'; + $lang['strtableneedsfield'] = 'Musisz podać przynajmniej jedno pole.'; + $lang['strtableneedscols'] = 'Musisz podać prawidłową liczbę kolumn.'; + $lang['strtablecreated'] = 'Tabela została utworzona.'; + $lang['strtablecreatedbad'] = 'Próba utworzenia tabeli się nie powiodła.'; + $lang['strconfdroptable'] = 'Czy na pewno chcesz usunąć tabelę "%s"?'; + $lang['strtabledropped'] = 'Tabela została usunięta.'; + $lang['strtabledroppedbad'] = 'Próba usunięcia tabeli się nie powiodła.'; + $lang['strconfemptytable'] = 'Czy na pewno chcesz wyczyścić tabelę "%s"?'; + $lang['strtableemptied'] = 'Tabela została wyczyszczona.'; + $lang['strtableemptiedbad'] = 'Próba wyczyszczenia tabeli się nie powiodła.'; + $lang['strinsertrow'] = 'Wstaw wiersz'; + $lang['strrowinserted'] = 'Wiersz został wstawiony.'; + $lang['strrowinsertedbad'] = 'Próba wstawienia wiersza się nie powiodła.'; + $lang['strrowduplicate'] = 'Próba wstawienia zduplikowanego wiersza.'; + $lang['streditrow'] = 'Edycja wiersza'; + $lang['strrowupdated'] = 'Wiersz został zaktualizowany.'; + $lang['strrowupdatedbad'] = 'Próba aktualizacji wiersza się nie powiodła.'; + $lang['strdeleterow'] = 'Usuń wiersz'; + $lang['strconfdeleterow'] = 'Czy na pewno chcesz usunąć ten wiersz?'; + $lang['strrowdeleted'] = 'Wiersz został usunięty.'; + $lang['strrowdeletedbad'] = 'Próba usunięcia wiersza się nie powiodła.'; + $lang['strinsertandrepeat'] = 'Wstaw i powtórz'; + $lang['strnumcols'] = 'Ilość kolumn'; + $lang['strcolneedsname'] = 'Musisz podać nazwę kolumny.'; + $lang['strselectallfields'] = 'Wybierz wszystkie pola'; + $lang['strselectneedscol'] = 'Musisz wybrać przynajmniej jedną kolumnę.'; + $lang['strselectunary'] = 'Operatory bezargumentowe (IS NULL/IS NOT NULL) nie mogą mieć podanej wartości.'; + $lang['straltercolumn'] = 'Zmień kolumnę'; + $lang['strcolumnaltered'] = 'Kolumna została zmodyfikowana.'; + $lang['strcolumnalteredbad'] = 'Próba modyfikacji kolumny się nie powiodła.'; + $lang['strconfdropcolumn'] = 'Czy na pewno chcesz usunąć kolumnę "%s" z tabeli "%s"?'; + $lang['strcolumndropped'] = 'Kolumna została usunięta.'; + $lang['strcolumndroppedbad'] = 'Próba usunięcia kolumny się nie powiodła.'; + $lang['straddcolumn'] = 'Dodaj kolumnę'; + $lang['strcolumnadded'] = 'Kolumna została dodana.'; + $lang['strcolumnaddedbad'] = 'Próba dodania kolumny się nie powiodła.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Tabela została zmodyfikowana.'; + $lang['strtablealteredbad'] = 'Próba modyfikacji tabeli się nie powiodła.'; + $lang['strdataonly'] = 'Tylko dane'; + $lang['strstructureonly'] = 'Tylko struktura'; + $lang['strstructureanddata'] = 'Struktura i dane'; + $lang['strtabbed'] = 'Z tabulacjami'; + $lang['strauto'] = 'Automatyczny'; + $lang['strconfvacuumtable'] = 'Czy na pewno chcesz wykonać vacuum "%s"?'; + $lang['strestimatedrowcount'] = 'Przybliżona ilość wierszy'; + + // Columns + $lang['strcolprop'] = 'Właściwości kolumny'; + + // Users + $lang['struser'] = 'Użytkownik'; + $lang['strusers'] = 'Użytkownicy'; + $lang['strusername'] = 'Nazwa użytkownika'; + $lang['strpassword'] = 'Hasło'; + $lang['strsuper'] = 'Administrator?'; + $lang['strcreatedb'] = 'Tworzenie BD?'; + $lang['strexpires'] = 'Wygasa'; + $lang['strsessiondefaults'] = 'Wartości domyślne sesji'; + $lang['strnousers'] = 'Nie znaleziono użytkowników.'; + $lang['struserupdated'] = 'Parametry użytkownika zostały zaktualizowane.'; + $lang['struserupdatedbad'] = 'Próba aktualizacji parametrów użytkownika się nie powiodła.'; + $lang['strshowallusers'] = 'Pokaż wszystkich użytkowników'; + $lang['strcreateuser'] = 'Utwórz użytkownika'; + $lang['struserneedsname'] = 'Musisz podać nazwę użytkownika.'; + $lang['strusercreated'] = 'Użytkownik został utworzony.'; + $lang['strusercreatedbad'] = 'Próba utworzenia użytkownika się nie powiodła.'; + $lang['strconfdropuser'] = 'Czy na pewno chcesz usunąć użytkownika "%s"?'; + $lang['struserdropped'] = 'Użytkownik został usunięty.'; + $lang['struserdroppedbad'] = 'Próba usunięcia użytkownika się nie powiodła.'; + $lang['straccount'] = 'Konto'; + $lang['strchangepassword'] = 'Zmień hasło'; + $lang['strpasswordchanged'] = 'Hasło zostało zmienione.'; + $lang['strpasswordchangedbad'] = 'Próba zmiany hasła się nie powiodła.'; + $lang['strpasswordshort'] = 'Hasło jest za krótkie.'; + $lang['strpasswordconfirm'] = 'Hasło i potwierdzenie muszą być takie same.'; + + // Groups + $lang['strgroup'] = 'Grupa'; + $lang['strgroups'] = 'Grupy'; + $lang['strnogroup'] = 'Nie znaleziono grupy.'; + $lang['strnogroups'] = 'Nie znaleziono grup.'; + $lang['strcreategroup'] = 'Utwórz grupę'; + $lang['strshowallgroups'] = 'Pokaż wszystkie grupy'; + $lang['strgroupneedsname'] = 'Musisz nazwać grupę.'; + $lang['strgroupcreated'] = 'Grupa została utworzona.'; + $lang['strgroupcreatedbad'] = 'Próba utworzenia grupy się nie powiodła.'; + $lang['strconfdropgroup'] = 'Czy na pewno chcesz utworzyć grupę "%s"?'; + $lang['strgroupdropped'] = 'Grupa została usunięta.'; + $lang['strgroupdroppedbad'] = 'Próba usunięcia grupy się nie powiodła.'; + $lang['strmembers'] = 'Członkowie'; + $lang['straddmember'] = 'Dodaj członka grupy'; + $lang['strmemberadded'] = 'Członek grupy został dodany.'; + $lang['strmemberaddedbad'] = 'Próba dodania członka grupy się nie powiodła.'; + $lang['strdropmember'] = 'Usuń członka grupy'; + $lang['strconfdropmember'] = 'Czy na pewno chcesz usunąć "%s" z grupy "%s"?'; + $lang['strmemberdropped'] = 'Członek grupy został usunięty.'; + $lang['strmemberdroppedbad'] = 'Próba usunięcia członka grupy się nie powiodła.'; + + // Roles + $lang['strrole'] = 'Rola'; + $lang['strroles'] = 'Role'; + $lang['strinheritsprivs'] = 'Dziedziczyć uprawnienia?'; + $lang['strcreaterole'] = 'Utwórz rolę'; + $lang['strcatupdate'] = 'Modyfikacja katalogów?'; + $lang['strcanlogin'] = 'Może się logować?'; + $lang['strmaxconnections'] = 'Maks. ilość połączeń'; + $lang['strconfdroprole'] = 'Czy na pewno chcesz usunąć rolę "%s"?'; + $lang['strroledropped'] = 'Rola została usunięta.'; + $lang['strroledroppedbad'] = 'Próba usunięcia roli się nie powiodła.'; + + // Privileges + $lang['strprivilege'] = 'Uprawnienie'; + $lang['strprivileges'] = 'Uprawnienia'; + $lang['strnoprivileges'] = 'Ten obiekt nie ma uprawnień.'; + $lang['strgrant'] = 'Nadaj'; + $lang['strrevoke'] = 'Zabierz'; + $lang['strgranted'] = 'Uprawnienia zostały nadane.'; + $lang['strgrantfailed'] = 'Próba nadania uprawnień się nie powiodła.'; + $lang['strgrantbad'] = 'Musisz podać użytkownika lub grupę, a także uprawnienia, jakie chcesz nadać.'; + $lang['strgrantor'] = 'Kto nadał'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Baza danych'; + $lang['strdatabases'] = 'Bazy danych'; + $lang['strshowalldatabases'] = 'Pokaż wszystkie bazy danych'; + $lang['strnodatabase'] = 'Nie znaleziono bazy danych.'; + $lang['strnodatabases'] = 'Nie znaleziono żadnej bazy danych.'; + $lang['strcreatedatabase'] = 'Utwórz bazę danych'; + $lang['strdatabasename'] = 'Nazwa bazy danych'; + $lang['strdatabaseneedsname'] = 'Musisz nazwać bazę danych.'; + $lang['strdatabasecreated'] = 'Baza danych została utworzona.'; + $lang['strdatabasecreatedbad'] = 'Próba utworzenia bazy danych się nie powiodła.'; + $lang['strconfdropdatabase'] = 'Czy na pewno chcesz usunąć bazę danych "%s"?'; + $lang['strdatabasedropped'] = 'Baza danych została usunięta.'; + $lang['strdatabasedroppedbad'] = 'Próba usunięcia bazy danych się nie powiodła.'; + $lang['strentersql'] = 'Podaj polecenie SQL do wykonania:'; + $lang['strsqlexecuted'] = 'Polecenie SQL zostało wykonane.'; + $lang['strvacuumgood'] = 'Czyszczenie bazy zostało zakończone.'; + $lang['strvacuumbad'] = 'Próba czyszczenia bazy się nie powiodła.'; + $lang['stranalyzegood'] = 'Analiza bazy została zakończona.'; + $lang['stranalyzebad'] = 'Próba analizy się nie powiodła.'; + $lang['strreindexgood'] = 'Reindeksacja została zakończona.'; + $lang['strreindexbad'] = 'Próba reindeksacji się nie powiodła.'; + $lang['strfull'] = 'Pełne'; + $lang['strfreeze'] = 'Zamrożenie'; + $lang['strforce'] = 'Wymuszenie'; + $lang['strsignalsent'] = 'Sygnał został wysłany.'; + $lang['strsignalsentbad'] = 'Próba wysłania sygnału się nie powiodła.'; + $lang['strallobjects'] = 'Wszystkie obiekty'; + $lang['strdatabasealtered'] = 'Baza danych została zmieniona.'; + $lang['strdatabasealteredbad'] = 'Próba modyfikacji bazy danych się nie powiodła.'; + + // Views + $lang['strview'] = 'Widok'; + $lang['strviews'] = 'Widoki'; + $lang['strshowallviews'] = 'Pokaż wszystkie widoki'; + $lang['strnoview'] = 'Nie znaleziono widoku.'; + $lang['strnoviews'] = 'Nie znaleziono widoków.'; + $lang['strcreateview'] = 'Utwórz widok'; + $lang['strviewname'] = 'Nazwa widoku'; + $lang['strviewneedsname'] = 'Musisz nazwać widok.'; + $lang['strviewneedsdef'] = 'Musisz zdefiniować widok.'; + $lang['strviewneedsfields'] = 'Musisz podać kolumny, które mają być widoczne w widoku.'; + $lang['strviewcreated'] = 'Widok został utworzony.'; + $lang['strviewcreatedbad'] = 'Próba utworzenia widoku się nie powiodła.'; + $lang['strconfdropview'] = 'Czy na pewno chcesz usunąć widok "%s"?'; + $lang['strviewdropped'] = 'Widok został usunięty.'; + $lang['strviewdroppedbad'] = 'Próba usunięcia widoku się nie powiodła.'; + $lang['strviewupdated'] = 'Widok został zaktualizowany.'; + $lang['strviewupdatedbad'] = 'Próba aktualizacji widoku się nie powiodła.'; + $lang['strviewlink'] = 'Klucze łączące'; + $lang['strviewconditions'] = 'Dodatkowe warunki'; + $lang['strcreateviewwiz'] = 'Utwórz widok przy użyciu kreatora widoków'; + + // Sequences + $lang['strsequence'] = 'Sekwencja'; + $lang['strsequences'] = 'Sekwencje'; + $lang['strshowallsequences'] = 'Pokaż wszystkie sekwencje'; + $lang['strnosequence'] = 'Nie znaleziono sekwencji.'; + $lang['strnosequences'] = 'Nie znaleziono sekwencji.'; + $lang['strcreatesequence'] = 'Utwórz sekwencję'; + $lang['strlastvalue'] = 'Ostatnia wartość'; + $lang['strincrementby'] = 'Zwiększana o'; + $lang['strstartvalue'] = 'Wartość początkowa'; + $lang['strmaxvalue'] = 'Wartość maks.'; + $lang['strminvalue'] = 'Wartość min.'; + $lang['strcachevalue'] = 'Wartość keszowana'; + $lang['strlogcount'] = 'log_cnt'; + $lang['striscycled'] = 'czy cykliczna'; + $lang['strsequenceneedsname'] = 'Musisz nazwać sekwencję.'; + $lang['strsequencecreated'] = 'Sekwencja została utworzona.'; + $lang['strsequencecreatedbad'] = 'Próba utworzenia sekwencji się nie powiodła.'; + $lang['strconfdropsequence'] = 'Czy na pewno chcesz usunąć sekwencję "%s"?'; + $lang['strsequencedropped'] = 'Sekwencja została usunięta.'; + $lang['strsequencedroppedbad'] = 'Próba usunięcia sekwencji się nie powiodła.'; + $lang['strsequencereset'] = 'Sekwencja została wyzerowana.'; + $lang['strsequenceresetbad'] = 'Próba zerowania sekwencji się nie powiodła.'; + $lang['straltersequence'] = 'Zmień sekwencję'; + $lang['strsequencealtered'] = 'Sekwencja została zmieniona.'; + $lang['strsequencealteredbad'] = 'Próba modyfikacji sekwencji się nie powiodła.'; + $lang['strsetval'] = 'Ustaw wartość'; + $lang['strsequencesetval'] = 'Wartość sekwencji została ustawiona.'; + $lang['strsequencesetvalbad'] = 'Próba ustawienia wartości sekwencji się nie powiodła.'; + $lang['strnextval'] = 'Zwiększ wartość sekwencję'; + $lang['strsequencenextval'] = 'Wartość sekwencji została zwiększona.'; + $lang['strsequencenextvalbad'] = 'Próba zwiększenia wartości sekwencji się nie powiodła.'; + + // Indeksy + $lang['strindex'] = 'Indeks'; + $lang['strindexes'] = 'Indeksy'; + $lang['strindexname'] = 'Nazwa indeksu'; + $lang['strshowallindexes'] = 'Pokaż wszystkie indeksy'; + $lang['strnoindex'] = 'Nie znaleziono indeksu.'; + $lang['strnoindexes'] = 'Nie znaleziono indeksów.'; + $lang['strcreateindex'] = 'Utwórz indeks'; + $lang['strtabname'] = 'Tab Name'; + $lang['strcolumnname'] = 'Nazwa kolumny'; + $lang['strindexneedsname'] = 'Musisz nazwać indeks.'; + $lang['strindexneedscols'] = 'W skład indeksu musi wchodzić przynajmniej jedna kolumna.'; + $lang['strindexcreated'] = 'Indeks został utworzony.'; + $lang['strindexcreatedbad'] = 'Próba utworzenia indeksu się nie powiodła.'; + $lang['strconfdropindex'] = 'Czy na pewno chcesz usunąć indeks "%s"?'; + $lang['strindexdropped'] = 'Indeks został usunięty.'; + $lang['strindexdroppedbad'] = 'Próba usunięcia indeksu się nie powiodła.'; + $lang['strkeyname'] = 'Nazwa klucza'; + $lang['struniquekey'] = 'Klucz Unikatowy'; + $lang['strprimarykey'] = 'Klucz Główny'; + $lang['strindextype'] = 'Typ indeksu'; + $lang['strtablecolumnlist'] = 'Kolumny w tabeli'; + $lang['strindexcolumnlist'] = 'Kolumny w indeksie'; + $lang['strconfcluster'] = 'Czy na pewno chcesz zklastrować "%s"?'; + $lang['strclusteredgood'] = 'Klastrowanie zostało zakończone.'; + $lang['strclusteredbad'] = 'Próba klastrowania się nie powiodła.'; + $lang['strcluster'] = 'Klaster'; + + // Rules + $lang['strrules'] = 'Reguły'; + $lang['strrule'] = 'Reguła'; + $lang['strshowallrules'] = 'Pokaż wszystkie reguły'; + $lang['strnorule'] = 'Nie znaleziono reguły.'; + $lang['strnorules'] = 'Nie znaleziono reguł.'; + $lang['strcreaterule'] = 'Utwórz regułę'; + $lang['strrulename'] = 'Nazwa reguły'; + $lang['strruleneedsname'] = 'Musisz nazwać regułę.'; + $lang['strrulecreated'] = 'Reguła została utworzona.'; + $lang['strrulecreatedbad'] = 'Próba utworzenia reguły się nie powiodła.'; + $lang['strconfdroprule'] = 'Czy na pewno chcesz usunąć regułę "%s" na "%s"?'; + $lang['strruledropped'] = 'Reguła została usunięta.'; + $lang['strruledroppedbad'] = 'Próba usunięcia reguły się nie powiodła.'; + + // Constraints + $lang['strconstraint'] = 'Więz integralności'; + $lang['strconstraints'] = 'Więzy integralności'; + $lang['strshowallconstraints'] = 'Pokaż wszystkie więzy integralności'; + $lang['strnoconstraints'] = 'Nie znaleziono więzów integralności.'; + $lang['strcreateconstraint'] = 'Utwórz więzy integralności'; + $lang['strconstraintcreated'] = 'Więzy integralności zostały utworzone.'; + $lang['strconstraintcreatedbad'] = 'Próba utworzenia więzów integralności się nie powiodła.'; + $lang['strconfdropconstraint'] = 'Czy na pewno chcesz usunąć więzy integralności "%s" na "%s"?'; + $lang['strconstraintdropped'] = 'Więzy integralności zostały usunięte.'; + $lang['strconstraintdroppedbad'] = 'Próba usunięcia więzów integralności się nie powiodła.'; + $lang['straddcheck'] = 'Dodaj warunek'; + $lang['strcheckneedsdefinition'] = 'Musisz zdefiniować warunek.'; + $lang['strcheckadded'] = 'Warunek został dodany.'; + $lang['strcheckaddedbad'] = 'Próba dodania warunku się nie powiodła.'; + $lang['straddpk'] = 'Dodaj klucz główny'; + $lang['strpkneedscols'] = 'Klucz główny musi zawierać przynajmniej jedną kolumnę.'; + $lang['strpkadded'] = 'Klucz główny został dodany.'; + $lang['strpkaddedbad'] = 'Próba dodania klucza głównego się nie powiodła.'; + $lang['stradduniq'] = 'Dodaj klucz unikatowy'; + $lang['struniqneedscols'] = 'Klucz unikatowy musi zawierać przynajmniej jedną kolumnę.'; + $lang['struniqadded'] = 'Klucz unikatowy został dodany.'; + $lang['struniqaddedbad'] = 'Próba dodania klucza unikatowego się nie powiodła.'; + $lang['straddfk'] = 'Dodaj klucz obcy'; + $lang['strfkneedscols'] = 'Obcy klucz musi zawierać przynajmniej jedną kolumnę.'; + $lang['strfkneedstarget'] = 'Klucz obcy wymaga podania nazwy tabeli docelowej.'; + $lang['strfkadded'] = 'Klucz obcy został dodany.'; + $lang['strfkaddedbad'] = 'Próba dodania klucza obcego się nie powiodła.'; + $lang['strfktarget'] = 'Tabela docelowa'; + $lang['strfkcolumnlist'] = 'Kolumna w kluczu'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Funkcja'; + $lang['strfunctions'] = 'Funkcje'; + $lang['strshowallfunctions'] = 'Pokaż wszystkie funkcje'; + $lang['strnofunction'] = 'Nie znaleziono funkcji.'; + $lang['strnofunctions'] = 'Nie znaleziono funkcji.'; + $lang['strcreateplfunction'] = 'Utwórz funkcję SQL/PL'; + $lang['strcreateinternalfunction'] = 'Utwórz funkcję wewnętrzną'; + $lang['strcreatecfunction'] = 'Utwórz funkcję C'; + $lang['strfunctionname'] = 'Nazwa funkcji'; + $lang['strreturns'] = 'Zwraca'; + $lang['strproglanguage'] = 'Język'; + $lang['strfunctionneedsname'] = 'Musisz nazwać funkcję.'; + $lang['strfunctionneedsdef'] = 'Musisz zdefiniować funkcję.'; + $lang['strfunctioncreated'] = 'Funkcja została utworzona.'; + $lang['strfunctioncreatedbad'] = 'Próba utworzenia funkcji się nie powiodła.'; + $lang['strconfdropfunction'] = 'Czy na pewno chcesz usunąć funkcję "%s"?'; + $lang['strfunctiondropped'] = 'Funkcja została usunięta.'; + $lang['strfunctiondroppedbad'] = 'Próba usunięcia funkcji się nie powiodła.'; + $lang['strfunctionupdated'] = 'Funkcja została zaktualizowana.'; + $lang['strfunctionupdatedbad'] = 'Próba aktualizacji funkcji się nie powiodła.'; + $lang['strobjectfile'] = 'Plik obiektów'; + $lang['strlinksymbol'] = 'Łącz symbol'; + $lang['strarguments'] = 'Argumenty'; + $lang['strargname'] = 'Nazwa'; + $lang['strargmode'] = 'Tryb'; + $lang['strargtype'] = 'Typ'; + $lang['strargadd'] = 'Dodaj nowy argument'; + $lang['strargremove'] = 'Usuń ten argument'; + $lang['strargnoargs'] = 'Ta funkcja nie będzie wymagała żadnych argumentów.'; + $lang['strargenableargs'] = 'Włącz podawanie argumentów tej funkcji.'; + $lang['strargnorowabove'] = 'Nad tym wierszem musi być wiersz.'; + $lang['strargnorowbelow'] = 'Pod tym wierszem musi być inny wiersz.'; + $lang['strargraise'] = 'Przesuń w górę.'; + $lang['strarglower'] = 'Przesuń w dół.'; + $lang['strargremoveconfirm'] = 'Czy na pewno chcesz usunąć ten argument? Tej operacji nie będzie można cofnąć.'; + + + // Triggers + $lang['strtrigger'] = 'Procedura wyzwalana'; + $lang['strtriggers'] = 'Procedury wyzwalane'; + $lang['strshowalltriggers'] = 'Pokaż wszystkie procedury wyzwalane'; + $lang['strnotrigger'] = 'Nie znaleziono procedury wyzwalanej.'; + $lang['strnotriggers'] = 'Nie znaleziono procedur wyzwalanych.'; + $lang['strcreatetrigger'] = 'Utwórz procedurę wyzwalaną'; + $lang['strtriggerneedsname'] = 'Musisz nazwać procedurę wyzwalaną.'; + $lang['strtriggerneedsfunc'] = 'Musisz podać funkcję procedury wyzwalanej.'; + $lang['strtriggercreated'] = 'Procedura wyzwalana została utworzona.'; + $lang['strtriggercreatedbad'] = 'Próba utworzenia procedury wyzwalanej się nie powiodła.'; + $lang['strconfdroptrigger'] = 'Czy na pewno chcesz usunąć procedurę "%s" wyzwalaną przez "%s"?'; + $lang['strconfenabletrigger'] = 'Czy na pewno chcesz włączyć procedurę wyzwalaną "%s" on "%s"?'; + $lang['strconfdisabletrigger'] = 'Czy na pewno chcesz wyłączyć procedurę wyzwalaną "%s" on "%s"?'; + $lang['strtriggerdropped'] = 'Procedura wyzwalana została usunięta.'; + $lang['strtriggerdroppedbad'] = 'Próba usunięcia procedury wyzwalanej się nie powiodła.'; + $lang['strtriggerenabled'] = 'Procedura wyzwalana została włączona.'; + $lang['strtriggerenabledbad'] = 'Próba włączenia procedury wyzwalanej się nie powiodła.'; + $lang['strtriggerdisabled'] = 'Procedura wyzwalana została wyłączona.'; + $lang['strtriggerdisabledbad'] = 'Próba wyłączenia procedury wyzwalanej się nie powiodła.'; + $lang['strtriggeraltered'] = 'Procedura wyzwalana została zmieniona.'; + $lang['strtriggeralteredbad'] = 'Próba modyfikacji procedury wyzwalanej się nie powiodła.'; + $lang['strforeach'] = 'Dla wszystkich'; + + // Types + $lang['strtype'] = 'Typ'; + $lang['strtypes'] = 'Typy'; + $lang['strshowalltypes'] = 'Pokaż wszystkie typy'; + $lang['strnotype'] = 'Nie znaleziono typu.'; + $lang['strnotypes'] = 'Nie znaleziono typów.'; + $lang['strcreatetype'] = 'Utwórz typ'; + $lang['strcreatecomptype'] = 'Utwórz typ złożony'; + $lang['strtypeneedsfield'] = 'Musisz podać przynajmniej jedno pole.'; + $lang['strtypeneedscols'] = 'Musisz podać poprawną ilość pól.'; + $lang['strtypename'] = 'Nazwa typu'; + $lang['strinputfn'] = 'Funkcja wejściowa'; + $lang['stroutputfn'] = 'Funkcja wyjściowa'; + $lang['strpassbyval'] = 'Przekazywany przez wartość?'; + $lang['stralignment'] = 'Wyrównanie bajtowe'; + $lang['strelement'] = 'Typ elementów'; + $lang['strdelimiter'] = 'Znak oddzielający elementy tabeli'; + $lang['strstorage'] = 'Technika przechowywania'; + $lang['strfield'] = 'Pole'; + $lang['strnumfields'] = 'Ilość pól'; + $lang['strtypeneedsname'] = 'Musisz nazwać typ.'; + $lang['strtypeneedslen'] = 'Musisz podać długość typu.'; + $lang['strtypecreated'] = 'Typ został utworzony.'; + $lang['strtypecreatedbad'] = 'Próba utworzenia typu się nie powiodła.'; + $lang['strconfdroptype'] = 'Czy na pewno chcesz usunąć typ "%s"?'; + $lang['strtypedropped'] = 'Typ został usunięty.'; + $lang['strtypedroppedbad'] = 'Próba usunięcia typu się nie powiodła.'; + $lang['strflavor'] = 'Flavor'; + $lang['strbasetype'] = 'podstawowy'; + $lang['strcompositetype'] = 'złożony'; + $lang['strpseudotype'] = 'pseudo'; + + // Schemas + $lang['strschema'] = 'Schemat'; + $lang['strschemas'] = 'Schematy'; + $lang['strshowallschemas'] = 'Pokaż wszystkie schematy'; + $lang['strnoschema'] = 'Nie znaleziono schematu.'; + $lang['strnoschemas'] = 'Nie znaleziono schematów.'; + $lang['strcreateschema'] = 'Utwórz schemat'; + $lang['strschemaname'] = 'Nazwa schematu'; + $lang['strschemaneedsname'] = 'Musisz nadać schematowi nazwę.'; + $lang['strschemacreated'] = 'Schemat został utworzony.'; + $lang['strschemacreatedbad'] = 'Próba utworzenia schematu się nie powiodła.'; + $lang['strconfdropschema'] = 'Czy na pewno chcesz usunąć schemat "%s"?'; + $lang['strschemadropped'] = 'Schemat został usunięty.'; + $lang['strschemadroppedbad'] = 'Próba usunięcia schematu się nie powiodła.'; + $lang['strschemaaltered'] = 'Schemat został zmieniony.'; + $lang['strschemaalteredbad'] = 'Próba zmiany schematu się nie powiodła.'; + $lang['strsearchpath'] = 'Ścieżka wyszukiwania schematu'; + + // Reports + + // Domeny + $lang['strdomain'] = 'Domena'; + $lang['strdomains'] = 'Domeny'; + $lang['strshowalldomains'] = 'Pokaż wszystkie domeny'; + $lang['strnodomains'] = 'Nie znaleziono domen.'; + $lang['strcreatedomain'] = 'Utwórz domenę'; + $lang['strdomaindropped'] = 'Domena została usunięta.'; + $lang['strdomaindroppedbad'] = 'Próba usunięcia domeny się nie powiodła.'; + $lang['strconfdropdomain'] = 'Czy na pewno chcesz usunąć domenę "%s"?'; + $lang['strdomainneedsname'] = 'Musisz nazwać domenę.'; + $lang['strdomaincreated'] = 'Domena została utworzona.'; + $lang['strdomaincreatedbad'] = 'Próba utworzenia domeny się nie powiodła.'; + $lang['strdomainaltered'] = 'Domena została zmieniona.'; + $lang['strdomainalteredbad'] = 'Próba modyfikacji domeny się nie powiodła.'; + + // Operators + $lang['stroperator'] = 'Operator'; + $lang['stroperators'] = 'Operatory'; + $lang['strshowalloperators'] = 'Pokaż wszystkie operatory'; + $lang['strnooperator'] = 'Nie znaleziono operatora.'; + $lang['strnooperators'] = 'Nie znaleziono operatorów.'; + $lang['strcreateoperator'] = 'Utwórz operator'; + $lang['strleftarg'] = 'Typ lewego argumentu'; + $lang['strrightarg'] = 'Typ prawego argumentu'; + $lang['strcommutator'] = 'Komutator'; + $lang['strnegator'] = 'Negacja'; + $lang['strrestrict'] = 'Zastrzeżenie'; + $lang['strjoin'] = 'Połączenie'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Merges'; + $lang['strleftsort'] = 'Lewe sortowanie'; + $lang['strrightsort'] = 'Prawe sortowanie'; + $lang['strlessthan'] = 'Mniej niż'; + $lang['strgreaterthan'] = 'Więcej niż'; + $lang['stroperatorneedsname'] = 'Musisz nazwać operator.'; + $lang['stroperatorcreated'] = 'Operator został utworzony.'; + $lang['stroperatorcreatedbad'] = 'Próba utworzenia operatora się nie powiodła.'; + $lang['strconfdropoperator'] = 'Czy na pewno chcesz usunąć operator "%s"?'; + $lang['stroperatordropped'] = 'Operator został usunięty.'; + $lang['stroperatordroppedbad'] = 'Próba usunięcia operatora się nie powiodła.'; + + // Casts + $lang['strcasts'] = 'Rzutowania'; + $lang['strnocasts'] = 'Nie znaleziono rzutowań.'; + $lang['strsourcetype'] = 'Typ źródłowy'; + $lang['strtargettype'] = 'Typ docelowy'; + $lang['strimplicit'] = 'Domniemany'; + $lang['strinassignment'] = 'W przydziale'; + $lang['strbinarycompat'] = '(Kompatybilny binarnie)'; + + // Conversions + $lang['strconversions'] = 'Konwersje'; + $lang['strnoconversions'] = 'Nie znaleziono konwersji.'; + $lang['strsourceencoding'] = 'Kodowanie źródłowe'; + $lang['strtargetencoding'] = 'Kodowanie docelowe'; + + // Languages + $lang['strlanguages'] = 'Języki'; + $lang['strnolanguages'] = 'Nie znaleziono języków.'; + $lang['strtrusted'] = 'Zaufany'; + + // Info + $lang['strnoinfo'] = 'Brak informacji na ten temat'; + $lang['strreferringtables'] = 'Tabele zależne'; + $lang['strparenttables'] = 'Tabela nadrzędne'; + $lang['strchildtables'] = 'Tabela podrzędna'; + + // Aggregates + $lang['straggregate'] = 'Funkcja agregująca'; + $lang['straggregates'] = 'Funkcje agregujące'; + $lang['strnoaggregates'] = 'Nie znaleziono funkcji agregujących.'; + $lang['stralltypes'] = '(Wszystkie typy)'; +$lang['straggrtransfn'] = 'Transition function'; + $lang['strcreateaggregate'] = 'Utwórz funkcję agregującą'; + $lang['straggrbasetype'] = 'Typ danych wejściowych'; +$lang['straggrsfunc'] = 'State transition function'; +$lang['straggrffunc'] = 'Final function'; + $lang['straggrinitcond'] = 'Warunek początkowy'; + $lang['straggrsortop'] = 'Operator sortowania'; + $lang['strconfdropaggregate'] = 'Czy na pewno chcesz usunąć funkcję agregującą "%s"?'; + $lang['straggregatedropped'] = 'Funkcja agregująca została usunięta.'; + $lang['straggregatedroppedbad'] = 'Próba usunięcia funkcji agregującej się nie powiodła.'; + $lang['stralteraggregate'] = 'Zmień funkcję agregującą'; + $lang['straggraltered'] = 'Funkcja agregująca została zmieniona.'; + $lang['straggralteredbad'] = 'Próba zmiany funkcji agregującej się nie powiodła.'; + $lang['straggrneedsname'] = 'Musisz podać nazwę funkcji agregującej'; + $lang['straggrneedsbasetype'] = 'Musisz podać typ danych wejściowych funkcji agregującej'; +$lang['straggrneedssfunc'] = 'You must specify the name of the state transition function for the aggregate'; +$lang['straggrneedsstype'] = 'You must specify the data type for the aggregate\'s state value'; + $lang['straggrcreated'] = 'Funkcja agregująca została utworzona.'; + $lang['straggrcreatedbad'] = 'Próba utworzenia funkcji agregującej się nie powiodła.'; + $lang['straggrshowall'] = 'Pokaż wszystkie funkcje agregujące'; + + // Operator Classes + $lang['stropclasses'] = 'Klasy operatorów'; + $lang['strnoopclasses'] = 'Nie znaleziono klas operatorów.'; + $lang['straccessmethod'] = 'Metoda dostępu'; + + // Stats and performance + $lang['strrowperf'] = 'Wydajność wierszowa'; + $lang['strioperf'] = 'Wydajność I/O'; + $lang['stridxrowperf'] = 'Wydajność indeksu wierszowego'; + $lang['stridxioperf'] = 'Wydajność indeksu We/Wy'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sekwencyjny'; + $lang['strscan'] = 'Skanuj'; + $lang['strread'] = 'Czytaj'; + $lang['strfetch'] = 'Pobierz'; + $lang['strheap'] = 'Sterta'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'Indeks TOAST'; + $lang['strcache'] = 'Kesz'; + $lang['strdisk'] = 'Dysk'; + $lang['strrows2'] = 'Wiersze'; + + // Tablespaces + $lang['strtablespace'] = 'Przestrzeń tabel'; + $lang['strtablespaces'] = 'Przestrzenie tabel'; + $lang['strshowalltablespaces'] = 'Pokaż wszystkie przestrzenie tabel'; + $lang['strnotablespaces'] = 'Nie znaleziono przestrzeni tabel.'; + $lang['strcreatetablespace'] = 'Utwórz przestrzeń tabel'; + $lang['strlocation'] = 'Położenie'; + $lang['strtablespaceneedsname'] = 'Musisz podać nazwę przestrzeni tabel.'; + $lang['strtablespaceneedsloc'] = 'Musisz podać nazwę katalogu, w którym chcesz utworzyć przestrzeń tabel.'; + $lang['strtablespacecreated'] = 'Przestrzeń tabel została utworzona.'; + $lang['strtablespacecreatedbad'] = 'Próba utworzenia przestrzeni tabel się nie powiodła.'; + $lang['strconfdroptablespace'] = 'Czy na pewno chcesz usunąć przestrzeń tabel "%s"?'; + $lang['strtablespacedropped'] = 'Przestrzeń tabel została usunięta.'; + $lang['strtablespacedroppedbad'] = 'Próba usunięcia przestrzeni tabel się nie powiodła.'; + $lang['strtablespacealtered'] = 'Przestrzeń tabel została zmieniona.'; + $lang['strtablespacealteredbad'] = 'Próba modyfikacji przestrzeni tabel się nie powiodła.'; + + + // Miscellaneous + $lang['strtopbar'] = '%s uruchomiony na %s:%s -- Jesteś zalogowany jako "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Pomoc'; + $lang['strhelpicon'] = '?'; + $lang['strlogintitle'] = 'Zaloguj do %s'; + $lang['strlogoutmsg'] = 'Wylogowano z %s'; + $lang['strloading'] = 'Ładuję...'; + $lang['strerrorloading'] = 'Błąd ładowania'; + $lang['strclicktoreload'] = 'Kliknij aby odświeżyć'; + + //Autovacuum + $lang['strautovacuum'] = 'Czyszczenie automatyczne'; + $lang['strturnedon'] = 'Włączone'; + $lang['strturnedoff'] = 'Wyłączone'; + $lang['strenabled'] = 'Aktywne'; + $lang['strvacuumbasethreshold'] = 'Podstawowy próg czyszczenia'; + $lang['strvacuumscalefactor'] = 'Współczynnik czyszczenia'; + $lang['stranalybasethreshold'] = 'Podstawowy próg analizy'; + $lang['stranalyzescalefactor'] = 'Współczynnik analizy'; + $lang['strvacuumcostdelay'] = 'Opóźnienie po przekroczeniu kosztu czyszczenia'; + $lang['strvacuumcostlimit'] = 'Limit kosztu czyszczenia'; + + //Table-level Locks + $lang['strlocks'] = 'Blokady'; + $lang['strtransaction'] = 'ID transakcji'; + $lang['strprocessid'] = 'ID procesu'; + $lang['strmode'] = 'Tryb blokowania'; + $lang['strislockheld'] = 'Czy blokada obowiązuje?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Przygotowane transakcje'; + $lang['strxactid'] = 'ID transakcji'; + $lang['strgid'] = 'Globalny ID'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/portuguese-br.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/portuguese-br.php new file mode 100644 index 00000000..8f956583 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/portuguese-br.php @@ -0,0 +1,898 @@ +<?php + + /** + * Brazilian Portuguese language file for phpPgAdmin. + * @maintainer Fernando Alberto Reuter Wendt (fernandowendt@msn.com) + * + * $Id: portuguese-br.php,v 2.1 2011/01/25 09:25:10 fwendt Exp $ + */ + + // Language and character set + $lang['applang'] = 'Português-Brasileiro'; + $lang['applocale'] = 'pt-BR'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Bem-vindo ao phpPgAdmin.'; + $lang['strppahome'] = 'Página inicial phpPgAdmin'; + $lang['strpgsqlhome'] = 'Página inicial PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Documentação PostgreSQL (local)'; + $lang['strreportbug'] = 'Reportar um Bug'; + $lang['strviewfaq'] = 'Visualizar FAQ online'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Identificação'; + $lang['strloginfailed'] = 'Falha na identificação'; + $lang['strlogindisallowed'] = 'Identificação desabilitada por motivos de segurança.'; + $lang['strserver'] = 'Servidor'; + $lang['strservers'] = 'Servidores'; + $lang['strgroupservers'] = 'Servidores no grupo "%s"'; + $lang['strallservers'] = 'Todos os servidores'; + $lang['strintroduction'] = 'Introdução'; + $lang['strhost'] = 'Host'; + $lang['strport'] = 'Porta'; + $lang['strlogout'] = 'Sair'; + $lang['strowner'] = 'Proprietário'; + $lang['straction'] = 'Ação'; + $lang['stractions'] = 'Ações'; + $lang['strname'] = 'Nome'; + $lang['strdefinition'] = 'Definição'; + $lang['strproperties'] = 'Propriedades'; + $lang['strbrowse'] = 'Navegar'; + $lang['strenable'] = 'Habilitar'; + $lang['strdisable'] = 'Desabilitar'; + $lang['strdrop'] = 'Deletar'; + $lang['strdropped'] = 'Deletado(a)'; + $lang['strnull'] = 'Nulo'; + $lang['strnotnull'] = 'Não nulo'; + $lang['strprev'] = '< Anterior'; + $lang['strnext'] = 'Próximo >'; + $lang['strfirst'] = '<< Primeiro'; + $lang['strlast'] = 'Último >>'; + $lang['strfailed'] = 'Falhou'; + $lang['strcreate'] = 'Criar'; + $lang['strcreated'] = 'Criado'; + $lang['strcomment'] = 'Comentário'; + $lang['strlength'] = 'Tamanho'; + $lang['strdefault'] = 'Padrão'; + $lang['stralter'] = 'Alterar'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Cancelar'; + $lang['strkill'] = 'Encerrar'; + $lang['strac'] = 'Habilitar AutoComplete'; + $lang['strsave'] = 'Salvar'; + $lang['strreset'] = 'Reiniciar'; + $lang['strrestart'] = 'Reinicializar'; + $lang['strinsert'] = 'Inserir'; + $lang['strselect'] = 'Selecionar'; + $lang['strdelete'] = 'Deletar'; + $lang['strupdate'] = 'Atualizar'; + $lang['strreferences'] = 'Referências'; + $lang['stryes'] = 'Sim'; + $lang['strno'] = 'Não'; + $lang['strtrue'] = 'TRUE'; + $lang['strfalse'] = 'FALSE'; + $lang['stredit'] = 'Editar'; + $lang['strcolumn'] = 'Coluna'; + $lang['strcolumns'] = 'Colunas'; + $lang['strrows'] = 'linha(s)'; + $lang['strrowsaff'] = 'linha(s) afetadas.'; + $lang['strobjects'] = 'objeto(s)'; + $lang['strback'] = 'Voltar'; + $lang['strqueryresults'] = 'Resultados da consulta'; + $lang['strshow'] = 'Exibir'; + $lang['strempty'] = 'Vazio'; + $lang['strlanguage'] = 'Linguagem'; + $lang['strencoding'] = 'Codificação'; + $lang['strvalue'] = 'Valor'; + $lang['strunique'] = 'Único(a)'; + $lang['strprimary'] = 'Primário(a)'; + $lang['strexport'] = 'Exportar'; + $lang['strimport'] = 'Importar'; + $lang['strallowednulls'] = 'Caracteres NULL permitidos'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Texto/campo vazio'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Administração'; + $lang['strvacuum'] = 'Vácuo'; + $lang['stranalyze'] = 'Analisar'; + $lang['strclusterindex'] = 'Cluster'; + $lang['strclustered'] = 'Clusterizado?'; + $lang['strreindex'] = 'Reindexar'; + $lang['strexecute'] = 'Executar'; + $lang['stradd'] = 'Adicionar'; + $lang['strevent'] = 'Evento'; + $lang['strwhere'] = 'Onde'; + $lang['strinstead'] = 'Faça preferivelmente'; + $lang['strwhen'] = 'Quando'; + $lang['strformat'] = 'Formato'; + $lang['strdata'] = 'Data'; + $lang['strconfirm'] = 'Confirma'; + $lang['strexpression'] = 'Expressão'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Expandir'; + $lang['strcollapse'] = 'Reduzir'; + $lang['strfind'] = 'Encontrar'; + $lang['stroptions'] = 'Opções'; + $lang['strrefresh'] = 'Atualizar'; + $lang['strdownload'] = 'Download'; + $lang['strdownloadgzipped'] = 'Download compactado com gzip'; + $lang['strinfo'] = 'Informações'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Avançado'; + $lang['strvariables'] = 'Variáveis'; + $lang['strprocess'] = 'Processo'; + $lang['strprocesses'] = 'Processos'; + $lang['strsetting'] = 'Valor atribuído'; + $lang['streditsql'] = 'Editar SQL'; + $lang['strruntime'] = 'Tempo de execução total: %s ms'; + $lang['strpaginate'] = 'Paginar resultados'; + $lang['struploadscript'] = 'ou carregue o script SQL de um arquivo:'; + $lang['strstarttime'] = 'Hora de início'; + $lang['strfile'] = 'Arquivo'; + $lang['strfileimported'] = 'Arquivo importado.'; + $lang['strtrycred'] = 'Utilizar estas credenciais para todos os servidores'; + $lang['strconfdropcred'] = 'Por motivos de segurança, a desconexão irá destruir suas informações de login compartilhado. Tem certeza que deseja se desconectar?'; + $lang['stractionsonmultiplelines'] = 'Ações sobre múltiplas linhas'; + $lang['strselectall'] = 'Selecionar tudo'; + $lang['strunselectall'] = 'Desmarcar tudo'; + $lang['strlocale'] = 'Local'; + $lang['strcollation'] = 'Comparação'; + $lang['strctype'] = 'Tipo de codificação'; + $lang['strdefaultvalues'] = 'Valores padrão'; + $lang['strnewvalues'] = 'Novos valores'; + $lang['strstart'] = 'Iniciar'; + $lang['strstop'] = 'Parar'; + $lang['strgotoppage'] = 'Topo da página'; + $lang['strtheme'] = 'Tema'; + + // Admin + $lang['stradminondatabase'] = 'As tarefas administrativas a seguir se aplicam em toda a base de dados %s.'; + $lang['stradminontable'] = 'As tarefas administrativas a seguir se aplicam na tabela %s.'; + + // User-supplied SQL history + $lang['strhistory'] = 'Histórico'; + $lang['strnohistory'] = 'Sem histórico.'; + $lang['strclearhistory'] = 'Limpar histórico'; + $lang['strdelhistory'] = 'Deletar do histórico'; + $lang['strconfdelhistory'] = 'Realmente remover esta entrada do histórico?'; + $lang['strconfclearhistory'] = 'Realmente limpar o histórico?'; + $lang['strnodatabaseselected'] = 'Por favor, selecione uma base de dados.'; + + // Database sizes + $lang['strnoaccess'] = 'Sem acesso'; + $lang['strsize'] = 'Tamanho'; + $lang['strbytes'] = 'bytes'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Esta aplicação opera melhor em um navegador com suporte a frames, mas pode ser utilizada sem frames acessando o link abaixo.'; + $lang['strnoframeslink'] = 'Utilizar sem frames'; + $lang['strbadconfig'] = 'Seu arquivo config.inc.php está desatualizado. Você terá que gerá-lo novamente a partir do novo arquivo config.inc.php-dist.'; + $lang['strnotloaded'] = 'Sua instalação do PHP não têm suporte ao PostgreSQL. Você deverá recompilar o PHP utilizando a opção de configuração --with-pgsql (GNU-Linux) ou habilitar a extensão extension=php_pgsql.dll no php.ini (Microsoft Windows).'; + $lang['strpostgresqlversionnotsupported'] = 'Versão do PostgreSQL não suportada. Por favor, atualize para a sua versão %s ou posterior.'; + $lang['strbadschema'] = 'Esquema especificado inválido.'; + $lang['strbadencoding'] = 'Falha ao atribuir a codificação do cliente na base de dados.'; + $lang['strsqlerror'] = 'Erro de SQL:'; + $lang['strinstatement'] = 'No bloco:'; + $lang['strinvalidparam'] = 'Parâmetros de script inválidos.'; + $lang['strnodata'] = 'Nenhuma linha encontrada.'; + $lang['strnoobjects'] = 'Nenhum objeto encontrado.'; + $lang['strrownotunique'] = 'Nenhum identificador único para esta linha.'; + $lang['strnouploads'] = 'O upload de arquivos está desabilitado.'; + $lang['strimporterror'] = 'Erro de importação.'; + $lang['strimporterror-fileformat'] = 'Erro de importação: Falhou ao determinar automáticamente o formato do arquivo.'; + $lang['strimporterrorline'] = 'Erro de importação na linha %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Erro de importação na linha %s: Linha não possui o número correto de colunas.'; + $lang['strimporterror-uploadedfile'] = 'Erro de importação: O arquivo não pode ser carregado para o servidor'; + $lang['strcannotdumponwindows'] = 'O dumping de uma tabela complexa e um nome de esquema não é suportado no Windows.'; + $lang['strinvalidserverparam'] = 'Tentativa de conectar com um parâmetro de servidor inválido, possivelmente alguém está tentando hackear o seu sistema.'; + $lang['strnoserversupplied'] = 'Nenhum servidor informado!'; + $lang['strbadpgdumppath'] = 'Erro de exportação: Falha ao executar pg_dump (caminho apontado no seu conf/config.inc.php : %s). Por favor, ajuste este diretório na sua configuração e relogue no sistema.'; + $lang['strbadpgdumpallpath'] = 'Erro de exportação: Falha ao executar pg_dumpall (caminho apontado no seu conf/config.inc.php : %s). Por favor, este diretório na sua configuração e relogue no sistema.'; + $lang['strconnectionfail'] = 'A conexão falhou.'; + + // Tables + $lang['strtable'] = 'Tabela'; + $lang['strtables'] = 'Tabelas'; + $lang['strshowalltables'] = 'Exibir todas as tabelas'; + $lang['strnotables'] = 'Nenhuma tabela encontrada.'; + $lang['strnotable'] = 'Nenhuma tabela encontrada.'; + $lang['strcreatetable'] = 'Criar tabela'; + $lang['strcreatetablelike'] = 'Criar tabela similar'; + $lang['strcreatetablelikeparent'] = 'Tabela de origem'; + $lang['strcreatelikewithdefaults'] = 'INCLUDE DEFAULTS'; + $lang['strcreatelikewithconstraints'] = 'INCLUDE CONSTRAINTS'; + $lang['strcreatelikewithindexes'] = 'INCLUDE INDEXES'; + $lang['strtablename'] = 'Nome da tabela'; + $lang['strtableneedsname'] = 'Você deve informar um nome para a sua tabela.'; + $lang['strtablelikeneedslike'] = 'Você deve informar uma tabela para copiar suas propriedades.'; + $lang['strtableneedsfield'] = 'Você deve informar ao menos um campo.'; + $lang['strtableneedscols'] = 'Você deve informar um número de colunas válido.'; + $lang['strtablecreated'] = 'Tabela criada.'; + $lang['strtablecreatedbad'] = 'Falha ao criar a tabela.'; + $lang['strconfdroptable'] = 'Você têm certeza que deseja deletar a tabela "%s"?'; + $lang['strtabledropped'] = 'Tabela deletada.'; + $lang['strtabledroppedbad'] = 'Falha ao deletar a tabela.'; + $lang['strconfemptytable'] = 'Você têm certeza que deseja esvaziar a tabela "%s"?'; + $lang['strtableemptied'] = 'Tabela esvaziada.'; + $lang['strtableemptiedbad'] = 'Falha ao esvaziar a tabela.'; + $lang['strinsertrow'] = 'Inserir linha'; + $lang['strrowinserted'] = 'Linha inserida.'; + $lang['strrowinsertedbad'] = 'Falha ao inserir a linha.'; + $lang['strnofkref'] = 'Não há valor correspondendo na chave estrangeira %s.'; + $lang['strrowduplicate'] = 'Falha ao inserir a linha, tentativa de inserção duplicada.'; + $lang['streditrow'] = 'Editar linha'; + $lang['strrowupdated'] = 'Linha atualizada.'; + $lang['strrowupdatedbad'] = 'Falha ao atualizar a linha.'; + $lang['strdeleterow'] = 'Deletar linha'; + $lang['strconfdeleterow'] = 'Você têm certeza que deseja deletar esta linha?'; + $lang['strrowdeleted'] = 'Linha deletada.'; + $lang['strrowdeletedbad'] = 'Falha ao deletar a linha.'; + $lang['strinsertandrepeat'] = 'Inserir & Repetir'; + $lang['strnumcols'] = 'Número de colunas'; + $lang['strcolneedsname'] = 'Você deve informar um nome para a coluna'; + $lang['strselectallfields'] = 'Selecionar todos os campos'; + $lang['strselectneedscol'] = 'Você deve exibir ao menos uma coluna.'; + $lang['strselectunary'] = 'Operadores unários não podem ter valores.'; + $lang['strcolumnaltered'] = 'Coluna alterada.'; + $lang['strcolumnalteredbad'] = 'Falha ao alterar a coluna.'; + $lang['strconfdropcolumn'] = 'Você têm certeza que deseja remover a coluna "%s" da tabela "%s"?'; + $lang['strcolumndropped'] = 'Coluna removida.'; + $lang['strcolumndroppedbad'] = 'Falha ao remover a coluna.'; + $lang['straddcolumn'] = 'Adicionar coluna'; + $lang['strcolumnadded'] = 'Coluna adicionada.'; + $lang['strcolumnaddedbad'] = 'Falha ao adicionar a coluna.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Tabela alterada.'; + $lang['strtablealteredbad'] = 'Falha ao alterar a tabela.'; + $lang['strdataonly'] = 'Somente dados'; + $lang['strstructureonly'] = 'Somente estrutura'; + $lang['strstructureanddata'] = 'Estrutura e dados'; + $lang['strtabbed'] = 'Tabulado'; + $lang['strauto'] = 'Auto'; + $lang['strconfvacuumtable'] = 'Você têm certeza que deseja realizar vácuo em "%s"?'; + $lang['strconfanalyzetable'] = 'Você têm certeza que deseja analizar "%s"?'; + $lang['strconfreindextable'] = 'Você têm certeza que deseja reindexar "%s"?'; + $lang['strconfclustertable'] = 'Você têm certeza que deseja clusterizar "%s"?'; + $lang['strestimatedrowcount'] = 'Número estimado de linhas'; + $lang['strspecifytabletoanalyze'] = 'Você deve especificar ao menos uma tabela para analisar.'; + $lang['strspecifytabletoempty'] = 'Você deve especificar ao menos uma tabela para esvaziar.'; + $lang['strspecifytabletodrop'] = 'Você deve especificar ao menos uma tabela para deletar.'; + $lang['strspecifytabletovacuum'] = 'Você deve especificar ao menos uma tabela para o vácuo.'; + $lang['strspecifytabletoreindex'] = 'Você deve especificar ao menos uma tabela para reindexar.'; + $lang['strspecifytabletocluster'] = 'Você deve especificar ao menos uma tabela para clusterizar.'; + $lang['strnofieldsforinsert'] = 'Você não pode inserir uma linha em uma tabela sem colunas.'; + + // Columns + $lang['strcolprop'] = 'Propriedades da coluna'; + $lang['strnotableprovided'] = 'Nenhuma tabela informada!'; + + // Users + $lang['struser'] = 'Usuário'; + $lang['strusers'] = 'Usuários'; + $lang['strusername'] = 'Nome de usuário'; + $lang['strpassword'] = 'Senha'; + $lang['strsuper'] = 'Super usuário?'; + $lang['strcreatedb'] = 'Criar DB?'; + $lang['strexpires'] = 'Expira'; + $lang['strsessiondefaults'] = 'Padrões de sessão'; + $lang['strnousers'] = 'Nenhum usuário encontrado.'; + $lang['struserupdated'] = 'Usuário atualizado.'; + $lang['struserupdatedbad'] = 'Falha ao atualizar usuário.'; + $lang['strshowallusers'] = 'Exibir todos os usuários'; + $lang['strcreateuser'] = 'Criar usuário'; + $lang['struserneedsname'] = 'Você deve informar um nome para o seu usuário.'; + $lang['strusercreated'] = 'Usuário criado.'; + $lang['strusercreatedbad'] = 'Falha ao criar usuário.'; + $lang['strconfdropuser'] = 'Você têm certeza que deseja deletar o usuário "%s"?'; + $lang['struserdropped'] = 'Usuário deletado.'; + $lang['struserdroppedbad'] = 'Falha ao deletar usuário.'; + $lang['straccount'] = 'Conta'; + $lang['strchangepassword'] = 'Alterar senha'; + $lang['strpasswordchanged'] = 'Senha alterada.'; + $lang['strpasswordchangedbad'] = 'Falha ao alterar a senha.'; + $lang['strpasswordshort'] = 'A senha é muito curta.'; + $lang['strpasswordconfirm'] = 'A confirmação de senha não confere.'; + + // Groups + $lang['strgroup'] = 'Grupo'; + $lang['strgroups'] = 'Grupos'; + $lang['strshowallgroups'] = 'Exibir todos os grupos'; + $lang['strnogroup'] = 'Grupo não encontrado.'; + $lang['strnogroups'] = 'Nenhum grupo encontrado.'; + $lang['strcreategroup'] = 'Criar grupo'; + $lang['strgroupneedsname'] = 'Você deve informar um nome para o seu grupo.'; + $lang['strgroupcreated'] = 'Grupo criado.'; + $lang['strgroupcreatedbad'] = 'Falha ao criar o grupo.'; + $lang['strconfdropgroup'] = 'Você têm certeza que deseja deletar o grupo "%s"?'; + $lang['strgroupdropped'] = 'Grupo deletado.'; + $lang['strgroupdroppedbad'] = 'Falha ao deletar grupo.'; + $lang['strmembers'] = 'Membros'; + $lang['strmemberof'] = 'Membro de'; + $lang['stradminmembers'] = 'Membros administrativos'; + $lang['straddmember'] = 'Adicionar membros'; + $lang['strmemberadded'] = 'Membro adicionado.'; + $lang['strmemberaddedbad'] = 'Falha ao adicionar membro.'; + $lang['strdropmember'] = 'Deletar membro'; + $lang['strconfdropmember'] = 'Você têm certeza que deseja deletar o membro "%s" do grupo "%s"?'; + $lang['strmemberdropped'] = 'Membro deletado.'; + $lang['strmemberdroppedbad'] = 'Falha ao deletar membro.'; + + // Roles + $lang['strrole'] = 'Papel'; + $lang['strroles'] = 'Papéis'; + $lang['strshowallroles'] = 'Exibir todos os papéis'; + $lang['strnoroles'] = 'Nenhum papel encontrado.'; + $lang['strinheritsprivs'] = 'Herdar privilégios?'; + $lang['strcreaterole'] = 'Criar papel'; + $lang['strcancreaterole'] = 'Pode criar papéis?'; + $lang['strrolecreated'] = 'Papel criado.'; + $lang['strrolecreatedbad'] = 'Falha ao criar o papel.'; + $lang['strrolealtered'] = 'Papel alterado.'; + $lang['strrolealteredbad'] = 'Falha ao alterar o papel.'; + $lang['strcanlogin'] = 'Pode logar?'; + $lang['strconnlimit'] = 'Limite de conexões'; + $lang['strdroprole'] = 'Deletar papel'; + $lang['strconfdroprole'] = 'Você têm certeza que deseja deletar o papel "%s"?'; + $lang['strroledropped'] = 'Papel deletado.'; + $lang['strroledroppedbad'] = 'Falha ao deletar o papel.'; + $lang['strnolimit'] = 'Sem limite'; + $lang['strnever'] = 'Nunca'; + $lang['strroleneedsname'] = 'Você deve informar um nome para o papel.'; + + // Privileges + $lang['strprivilege'] = 'Privilégio'; + $lang['strprivileges'] = 'Privilégios'; + $lang['strnoprivileges'] = 'Este objeto têm os privilégios padrões de proprietário.'; + $lang['strgrant'] = 'Conceder'; + $lang['strrevoke'] = 'Revogar'; + $lang['strgranted'] = 'Privilégios alterados.'; + $lang['strgrantfailed'] = 'Falha ao alterar os privilégios.'; + $lang['strgrantbad'] = 'Você deve informar ao menos um usuário ou grupo e ao menos um privilégio.'; + $lang['strgrantor'] = 'Provedor'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Banco de dados'; + $lang['strdatabases'] = 'Bancos de dados'; + $lang['strshowalldatabases'] = 'Exibir todos os bancos de dados'; + $lang['strnodatabases'] = 'Nenhum banco de dados encontrado.'; + $lang['strcreatedatabase'] = 'Criar banco de dados'; + $lang['strdatabasename'] = 'Nome do banco de dados'; + $lang['strdatabaseneedsname'] = 'Você deve informar um nome para o seu banco de dados.'; + $lang['strdatabasecreated'] = 'Banco de dados criado.'; + $lang['strdatabasecreatedbad'] = 'Falha ao criar o banco de dados.'; + $lang['strconfdropdatabase'] = 'Você tem certeza que deseja deletar o banco de dados "%s"?'; + $lang['strdatabasedropped'] = 'Banco de dados deletado.'; + $lang['strdatabasedroppedbad'] = 'Falha ao deletar o banco de dados.'; + $lang['strentersql'] = 'Informe o SQL a executar abaixo:'; + $lang['strsqlexecuted'] = 'SQL executado.'; + $lang['strvacuumgood'] = 'Vácuo completo.'; + $lang['strvacuumbad'] = 'Falha ao realizar o vácuo.'; + $lang['stranalyzegood'] = 'Análise completa.'; + $lang['stranalyzebad'] = 'Falha ao realizar a análise.'; + $lang['strreindexgood'] = 'Reindexação completa.'; + $lang['strreindexbad'] = 'Falha ao executar a reindexação.'; + $lang['strfull'] = 'Completo'; + $lang['strfreeze'] = 'Congelar'; + $lang['strforce'] = 'Forçar'; + $lang['strsignalsent'] = 'Sinal enviado.'; + $lang['strsignalsentbad'] = 'Falha ao enviar o sinal.'; + $lang['strallobjects'] = 'Todos os objetos'; + $lang['strdatabasealtered'] = 'Banco de dados alterado.'; + $lang['strdatabasealteredbad'] = 'Falha ao alterar o banco de dados.'; + $lang['strspecifydatabasetodrop'] = 'Você deve especificar ao menos um banco de dados para deletar.'; + $lang['strtemplatedb'] = 'Modelo'; + $lang['strconfanalyzedatabase'] = 'Você têm certeza que deseja analisar todas as tabelas na base de dados "%s"?'; + $lang['strconfvacuumdatabase'] = 'Você têm certeza que deseja realizar vácuo em todas as tabelas na base de dados "%s"?'; + $lang['strconfreindexdatabase'] = 'Você têm certeza que deseja reindexar todas as tabelas na base de dados "%s"?'; + $lang['strconfclusterdatabase'] = 'Você têm certeza que deseja clusterizar todas as tabelas na base de dados "%s"?'; + + // Views + $lang['strview'] = 'Visão'; + $lang['strviews'] = 'Visões'; + $lang['strshowallviews'] = 'Exibir todas as visões'; + $lang['strnoview'] = 'Nenhuma visão encontrada.'; + $lang['strnoviews'] = 'Nenhuma visão encontrada.'; + $lang['strcreateview'] = 'Criar visão'; + $lang['strviewname'] = 'Nome da visão'; + $lang['strviewneedsname'] = 'Você deve informar o nome da sua visão.'; + $lang['strviewneedsdef'] = 'Você deve informar uma definição para a sua visão.'; + $lang['strviewneedsfields'] = 'Você deve informar as colunas que você deseja selecionar para a sua visão.'; + $lang['strviewcreated'] = 'Visão criada.'; + $lang['strviewcreatedbad'] = 'Falha ao criar a visão.'; + $lang['strconfdropview'] = 'Você têm certeza que deseja deletar a visão "%s"?'; + $lang['strviewdropped'] = 'Visão deletada.'; + $lang['strviewdroppedbad'] = 'Falha ao deletar a visão.'; + $lang['strviewupdated'] = 'Visão atualizada.'; + $lang['strviewupdatedbad'] = 'Falha ao atualizar a visão.'; + $lang['strviewlink'] = 'Chaves de ligação'; + $lang['strviewconditions'] = 'Condições adicionais'; + $lang['strcreateviewwiz'] = 'Criar visão com o assistente'; + $lang['strrenamedupfields'] = 'Renomear campos duplicados'; + $lang['strdropdupfields'] = 'Deletar campos duplicados'; + $lang['strerrordupfields'] = 'Erro quando campos duplicados'; + $lang['strviewaltered'] = 'Visão alterada.'; + $lang['strviewalteredbad'] = 'Falha ao alterar a visão.'; + $lang['strspecifyviewtodrop'] = 'Você deve informar ao menos uma visão para deletar.'; + + // Sequences + $lang['strsequence'] = 'Seqüência'; + $lang['strsequences'] = 'Seqüências'; + $lang['strshowallsequences'] = 'Exibir todas as seqüências'; + $lang['strnosequence'] = 'Nenhuma seqüência encontrada.'; + $lang['strnosequences'] = 'Nenhuma seqüência encontrada.'; + $lang['strcreatesequence'] = 'Criar seqüência'; + $lang['strlastvalue'] = 'Último valor'; + $lang['strincrementby'] = 'Incrementado por'; + $lang['strstartvalue'] = 'Valor inicial'; + $lang['strrestartvalue'] = 'Valor de reinicialização'; + $lang['strmaxvalue'] = 'Valor máximo'; + $lang['strminvalue'] = 'Valor mínimo'; + $lang['strcachevalue'] = 'Valor de cache'; + $lang['strlogcount'] = 'Contador do log'; + $lang['strcancycle'] = 'Pode ser cíclica?'; + $lang['striscalled'] = 'Irá incrementar o último valor antes de retornar o próximo valor (is_called)?'; + $lang['strsequenceneedsname'] = 'Você deve informar um nome para a sua seqüência.'; + $lang['strsequencecreated'] = 'Seqüência criada.'; + $lang['strsequencecreatedbad'] = 'Falha ao criar a seqüência.'; + $lang['strconfdropsequence'] = 'Você têm certeza que deseja deletar a seqüência "%s"?'; + $lang['strsequencedropped'] = 'Seqüência deletada.'; + $lang['strsequencedroppedbad'] = 'Falha ao deletar a seqüência.'; + $lang['strsequencerestart'] = 'Seqüência reinicializada.'; + $lang['strsequencerestartbad'] = 'Falha ao reinicializar a seqüência.'; + $lang['strsequencereset'] = 'Reinicializar a seqüência.'; + $lang['strsequenceresetbad'] = 'Falha ao reinicializar a seqüência.'; + $lang['strsequencealtered'] = 'Seqüência alterada.'; + $lang['strsequencealteredbad'] = 'Falha ao alterar a seqüência.'; + $lang['strsetval'] = 'Atribuir valor'; + $lang['strsequencesetval'] = 'Atribuir valor da seqüência.'; + $lang['strsequencesetvalbad'] = 'Falha ao atribuir valor da seqüência.'; + $lang['strnextval'] = 'Valor de incremento'; + $lang['strsequencenextval'] = 'Seqüência incrementada.'; + $lang['strsequencenextvalbad'] = 'Falha ao incrementar a seqüência.'; + $lang['strspecifysequencetodrop'] = 'Você deve informar ao menos uma seqüência para deletar.'; + + // Indexes + $lang['strindex'] = 'Índice'; + $lang['strindexes'] = 'Índices'; + $lang['strindexname'] = 'Nome do índice'; + $lang['strshowallindexes'] = 'Exibir todos os índices'; + $lang['strnoindex'] = 'Nenhum índice encontrado.'; + $lang['strnoindexes'] = 'Nenhum índice encontrado.'; + $lang['strcreateindex'] = 'Criar índice'; + $lang['strtabname'] = 'Nome da tabela'; + $lang['strcolumnname'] = 'Nome da coluna'; + $lang['strindexneedsname'] = 'Você deve informar um nome para o seu índice.'; + $lang['strindexneedscols'] = 'Índices requerem um número válido de colunas.'; + $lang['strindexcreated'] = 'Índice criado.'; + $lang['strindexcreatedbad'] = 'Falha ao criar o índice.'; + $lang['strconfdropindex'] = 'Você têm certeza que deseja deletar o índice "%s"?'; + $lang['strindexdropped'] = 'Índice deletado.'; + $lang['strindexdroppedbad'] = 'Falha ao deletar o índice.'; + $lang['strkeyname'] = 'Nome da chave'; + $lang['struniquekey'] = 'Chave única'; + $lang['strprimarykey'] = 'Chave primária'; + $lang['strindextype'] = 'Tipo de índice'; + $lang['strtablecolumnlist'] = 'Colunas na tabela'; + $lang['strindexcolumnlist'] = 'Colunas no índice'; + $lang['strconfcluster'] = 'Você têm certeza que deseja clusterizar "%s"?'; + $lang['strclusteredgood'] = 'Clusterização completa.'; + $lang['strclusteredbad'] = 'Falha ao clusterizar.'; + $lang['strcluster'] = 'Cluster'; + $lang['strconcurrently'] = 'Simultaneamente'; + $lang['strnoclusteravailable'] = 'Tabela não clusterizada em um índice.'; + + // Rules + $lang['strrules'] = 'Regras'; + $lang['strrule'] = 'Regra'; + $lang['strshowallrules'] = 'Exibir todas as regras'; + $lang['strnorule'] = 'Nenhuma regra encontrada.'; + $lang['strnorules'] = 'Nenhuma regra encontrada.'; + $lang['strcreaterule'] = 'Criar regra'; + $lang['strrulename'] = 'Nome da regra'; + $lang['strruleneedsname'] = 'Você deve informar um nome para a sua regra.'; + $lang['strrulecreated'] = 'Regra criada.'; + $lang['strrulecreatedbad'] = 'Falha ao criar a regra.'; + $lang['strconfdroprule'] = 'Você têm certeza que deseja deletar a regra "%s" em "%s"?'; + $lang['strruledropped'] = 'Regra deletada.'; + $lang['strruledroppedbad'] = 'Falha ao deletar a regra.'; + + // Constraints + $lang['strconstraint'] = 'Restrição'; + $lang['strconstraints'] = 'Restrições'; + $lang['strshowallconstraints'] = 'Exibir todas as restrições'; + $lang['strnoconstraints'] = 'Nenhuma restrição encontrada.'; + $lang['strcreateconstraint'] = 'Criar restrição'; + $lang['strconstraintcreated'] = 'Restrição criada.'; + $lang['strconstraintcreatedbad'] = 'Falha ao criar a restrição.'; + $lang['strconfdropconstraint'] = 'Você têm certeza que deseja deletar a restrição "%s" em "%s"?'; + $lang['strconstraintdropped'] = 'Restrição deletada.'; + $lang['strconstraintdroppedbad'] = 'Falha ao deletar a restrição.'; + $lang['straddcheck'] = 'Adicionar checagem'; + $lang['strcheckneedsdefinition'] = 'Checagem de restrição necessita de uma definição.'; + $lang['strcheckadded'] = 'Checagem de restrição adicionada.'; + $lang['strcheckaddedbad'] = 'Falha ao adicionar checagem de restrição.'; + $lang['straddpk'] = 'Adicionar chave primária'; + $lang['strpkneedscols'] = 'Chave primária necessita de ao menos uma coluna.'; + $lang['strpkadded'] = 'Chave primária adicionada.'; + $lang['strpkaddedbad'] = 'Falha ao adicionar chave primária.'; + $lang['stradduniq'] = 'Adicionar chave única'; + $lang['struniqneedscols'] = 'Chave única necessita de ao menos uma coluna.'; + $lang['struniqadded'] = 'Chave única adicionada.'; + $lang['struniqaddedbad'] = 'Falha ao adicionar chave única.'; + $lang['straddfk'] = 'Adicionar chave estrangeira'; + $lang['strfkneedscols'] = 'Chave estrangeira necessita de ao menos uma coluna.'; + $lang['strfkneedstarget'] = 'Chave estrangeira necessita de uma tabela alvo.'; + $lang['strfkadded'] = 'Chave estrangeira adicionada.'; + $lang['strfkaddedbad'] = 'Falha ao adicionar a chave estrangeira.'; + $lang['strfktarget'] = 'Tabela alvo'; + $lang['strfkcolumnlist'] = 'Colunas em chaves'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Função'; + $lang['strfunctions'] = 'Funções'; + $lang['strshowallfunctions'] = 'Exibir todas as funções'; + $lang['strnofunction'] = 'Nenhuma função encontrada.'; + $lang['strnofunctions'] = 'Nenhuma função encontrada.'; + $lang['strcreateplfunction'] = 'Criar função em PL/SQL'; + $lang['strcreateinternalfunction'] = 'Criar função interna'; + $lang['strcreatecfunction'] = 'Criar função em C'; + $lang['strfunctionname'] = 'Nome da função'; + $lang['strreturns'] = 'Retorno'; + $lang['strproglanguage'] = 'Linguagem de programação'; + $lang['strfunctionneedsname'] = 'Você deve informar um nome para a sua função.'; + $lang['strfunctionneedsdef'] = 'Você deve informar uma definição para a sua função.'; + $lang['strfunctioncreated'] = 'Função criada.'; + $lang['strfunctioncreatedbad'] = 'Falha ao criar a função.'; + $lang['strconfdropfunction'] = 'Você têm certeza que deseja deletar a função "%s"?'; + $lang['strfunctiondropped'] = 'Função deletada.'; + $lang['strfunctiondroppedbad'] = 'Falha ao deletar a função.'; + $lang['strfunctionupdated'] = 'Função atualizada.'; + $lang['strfunctionupdatedbad'] = 'Falha ao atualizar a função.'; + $lang['strobjectfile'] = 'Arquivo objeto'; + $lang['strlinksymbol'] = 'Símbolo de link'; + $lang['strarguments'] = 'Argumentos'; + $lang['strargmode'] = 'Modo'; + $lang['strargtype'] = 'Tipo'; + $lang['strargadd'] = 'Adicionar outro argumento'; + $lang['strargremove'] = 'Remover este argumento'; + $lang['strargnoargs'] = 'Esta função não irá utilizar argumentos.'; + $lang['strargenableargs'] = 'Habilitar argumentos passados para esta função.'; + $lang['strargnorowabove'] = 'É preciso ter uma linha acima desta.'; + $lang['strargnorowbelow'] = 'É preciso ter uma linha abaixo desta.'; + $lang['strargraise'] = 'Mover acima.'; + $lang['strarglower'] = 'Mover abaixo.'; + $lang['strargremoveconfirm'] = 'Você têm certeza que deseja remover este argumento? Isto NÃO PODE ser desfeito.'; + $lang['strfunctioncosting'] = 'Custo da função'; + $lang['strresultrows'] = 'Linhas resultantes'; + $lang['strexecutioncost'] = 'Custo de execução'; + $lang['strspecifyfunctiontodrop'] = 'Você deve informar ao menos uma função para deletar.'; + + // Triggers + $lang['strtrigger'] = 'Gatilho'; + $lang['strtriggers'] = 'Gatilhos'; + $lang['strshowalltriggers'] = 'Exibir todos os gatilhos'; + $lang['strnotrigger'] = 'Nenhum gatilho encontrado.'; + $lang['strnotriggers'] = 'Nenhum gatilho encontrado.'; + $lang['strcreatetrigger'] = 'Criar gatilho'; + $lang['strtriggerneedsname'] = 'Você deve informar um nome para o seu gatilho.'; + $lang['strtriggerneedsfunc'] = 'Você deve informar uma função para o seu gatilho.'; + $lang['strtriggercreated'] = 'Gatilho criado.'; + $lang['strtriggercreatedbad'] = 'Falha ao criar o gatilho.'; + $lang['strconfdroptrigger'] = 'Você têm certeza que deseja deletar o gatilho "%s" em "%s"?'; + $lang['strconfenabletrigger'] = 'Você têm certeza que deseja ativar o gatilho "%s" em "%s"?'; + $lang['strconfdisabletrigger'] = 'Você têm certeza que deseja desativar o gatilho "%s" em "%s"?'; + $lang['strtriggerdropped'] = 'Gatilho deletado.'; + $lang['strtriggerdroppedbad'] = 'Falha ao deletar o gatilho.'; + $lang['strtriggerenabled'] = 'Gatilho ativado.'; + $lang['strtriggerenabledbad'] = 'Falha ao ativar o gatilho.'; + $lang['strtriggerdisabled'] = 'Gatilho desativado.'; + $lang['strtriggerdisabledbad'] = 'Falha ao desativar o gatilho.'; + $lang['strtriggeraltered'] = 'Gatilho alterado.'; + $lang['strtriggeralteredbad'] = 'Falha ao alterar o gatilho.'; + $lang['strforeach'] = 'Para cada'; + + // Types + $lang['strtype'] = 'Tipo'; + $lang['strtypes'] = 'Tipos'; + $lang['strshowalltypes'] = 'Exibir todos os tipos'; + $lang['strnotype'] = 'Nenhum tipo encontrado.'; + $lang['strnotypes'] = 'Nenhum tipo encontrado.'; + $lang['strcreatetype'] = 'Criar tipo'; + $lang['strcreatecomptype'] = 'Criar tipo composto'; + $lang['strcreateenumtype'] = 'Criar tipo enumerado'; + $lang['strtypeneedsfield'] = 'Você deve informar ao menos um campo.'; + $lang['strtypeneedsvalue'] = 'Você deve informar ao menos um valor.'; + $lang['strtypeneedscols'] = 'Você deve informar um número válido de campos.'; + $lang['strtypeneedsvals'] = 'Você deve informar um número válido de valores.'; + $lang['strinputfn'] = 'Função de entrada'; + $lang['stroutputfn'] = 'Função de saída'; + $lang['strpassbyval'] = 'Passado por valor?'; + $lang['stralignment'] = 'Alinhamento'; + $lang['strelement'] = 'Elemento'; + $lang['strdelimiter'] = 'Delimitador'; + $lang['strstorage'] = 'Armazenamento'; + $lang['strfield'] = 'Campo'; + $lang['strnumfields'] = 'Num. de campos'; + $lang['strnumvalues'] = 'Num. de valores'; + $lang['strtypeneedsname'] = 'Você deve informar um nome para o seu tipo.'; + $lang['strtypeneedslen'] = 'Você deve informar o tamanho para o seu tipo.'; + $lang['strtypecreated'] = 'Tipo criado.'; + $lang['strtypecreatedbad'] = 'Falha ao criar o tipo.'; + $lang['strconfdroptype'] = 'Você têm certeza que deseja deletar o tipo "%s"?'; + $lang['strtypedropped'] = 'Tipo deletado.'; + $lang['strtypedroppedbad'] = 'Falha ao deletar o tipo.'; + $lang['strflavor'] = 'Sabor'; + $lang['strbasetype'] = 'Base'; + $lang['strcompositetype'] = 'Composto'; + $lang['strpseudotype'] = 'Pseudo'; + $lang['strenum'] = 'Enum'; + $lang['strenumvalues'] = 'Valores enum'; + + // Schemas + $lang['strschema'] = 'Esquema'; + $lang['strschemas'] = 'Esquemas'; + $lang['strshowallschemas'] = 'Exibir todos os esquemas'; + $lang['strnoschema'] = 'Nenhum esquema encontrado.'; + $lang['strnoschemas'] = 'Nenhum esquema encontrado.'; + $lang['strcreateschema'] = 'Criar esquema'; + $lang['strschemaname'] = 'Nome do esquema'; + $lang['strschemaneedsname'] = 'Você deve informar um nome para o seu esquema.'; + $lang['strschemacreated'] = 'Esquema criado.'; + $lang['strschemacreatedbad'] = 'Falha ao criar o esquema'; + $lang['strconfdropschema'] = 'Você têm certeza que deseja deletar o esquema "%s"?'; + $lang['strschemadropped'] = 'Esquema deletado.'; + $lang['strschemadroppedbad'] = 'Falha ao deletar o esquema.'; + $lang['strschemaaltered'] = 'Esquema alterado.'; + $lang['strschemaalteredbad'] = 'Falha ao alterar o esquema.'; + $lang['strsearchpath'] = 'Diretório de pesquisa do esquema'; + $lang['strspecifyschematodrop'] = 'Você deve informar ao menos um esquema para deletar.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Domínio'; + $lang['strdomains'] = 'Domínios'; + $lang['strshowalldomains'] = 'Exibir todos os domínios'; + $lang['strnodomains'] = 'Nenhum domínio encontrado.'; + $lang['strcreatedomain'] = 'Criar domínio'; + $lang['strdomaindropped'] = 'Domínio deletado.'; + $lang['strdomaindroppedbad'] = 'Falha ao deletar o domínio.'; + $lang['strconfdropdomain'] = 'Você têm certeza que deseja deletar o domínio "%s"?'; + $lang['strdomainneedsname'] = 'Você deve informar um nome para o seu domínio.'; + $lang['strdomaincreated'] = 'Domínio criado.'; + $lang['strdomaincreatedbad'] = 'Falha ao criar o domínio.'; + $lang['strdomainaltered'] = 'Domínio alterado.'; + $lang['strdomainalteredbad'] = 'Falha ao alterar o domínio.'; + + // Operators + $lang['stroperator'] = 'Operador'; + $lang['stroperators'] = 'Operadores'; + $lang['strshowalloperators'] = 'Exibir todos os operadores'; + $lang['strnooperator'] = 'Nenhum operador encontrado.'; + $lang['strnooperators'] = 'Nenhum operador encontrado.'; + $lang['strcreateoperator'] = 'Criar operador'; + $lang['strleftarg'] = 'Tipo de Arg Esquerdo'; + $lang['strrightarg'] = 'Tipo de Arg Direito'; + $lang['strcommutator'] = 'Comutador'; + $lang['strnegator'] = 'Negador'; + $lang['strrestrict'] = 'Restrito'; + $lang['strjoin'] = 'Junção'; + $lang['strhashes'] = 'Misturador'; + $lang['strmerges'] = 'Fusão'; + $lang['strleftsort'] = 'Ordenação esquerda'; + $lang['strrightsort'] = 'Ordenação direita'; + $lang['strlessthan'] = 'Menor que'; + $lang['strgreaterthan'] = 'Maior que'; + $lang['stroperatorneedsname'] = 'Você deve informar um nome para o seu operador.'; + $lang['stroperatorcreated'] = 'Operador criado.'; + $lang['stroperatorcreatedbad'] = 'Falha ao criar o operador.'; + $lang['strconfdropoperator'] = 'Você têm certeza que deseja deletar o operador "%s"?'; + $lang['stroperatordropped'] = 'Operador deletado.'; + $lang['stroperatordroppedbad'] = 'Falha ao deletar o operador.'; + + // Casts + $lang['strcasts'] = 'Moldes'; + $lang['strnocasts'] = 'Nenhum molde encontrado.'; + $lang['strsourcetype'] = 'Tipo fonte'; + $lang['strtargettype'] = 'Tipo alvo'; + $lang['strimplicit'] = 'Implícito'; + $lang['strinassignment'] = 'Em atribuição'; + $lang['strbinarycompat'] = '(Compatibilidade binária)'; + + // Conversions + $lang['strconversions'] = 'Conversões'; + $lang['strnoconversions'] = 'Nenhuma conversão encontrada.'; + $lang['strsourceencoding'] = 'Codificação fonte'; + $lang['strtargetencoding'] = 'Codificação alvo'; + + // Languages + $lang['strlanguages'] = 'Linguagens'; + $lang['strnolanguages'] = 'Nenhuma linguagem encontrada.'; + $lang['strtrusted'] = 'Confiado'; + + // Info + $lang['strnoinfo'] = 'Nenhuma informação disponível.'; + $lang['strreferringtables'] = 'Tabelas de referência'; + $lang['strparenttables'] = 'Tabelas pais'; + $lang['strchildtables'] = 'Tabelas filhas'; + + // Aggregates + $lang['straggregate'] = 'Agregação'; + $lang['straggregates'] = 'Agregações'; + $lang['strnoaggregates'] = 'Nenhuma agregação encontrada.'; + $lang['stralltypes'] = '(Todos os tipos)'; + $lang['strcreateaggregate'] = 'Criar agregação'; + $lang['straggrbasetype'] = 'Tipo de dados de entrada'; + $lang['straggrsfunc'] = 'Função de transição de estado'; + $lang['straggrstype'] = 'Tipo de dados para valor de estado'; + $lang['straggrffunc'] = 'Função final'; + $lang['straggrinitcond'] = 'Condição inicial'; + $lang['straggrsortop'] = 'Operador de ordem'; + $lang['strconfdropaggregate'] = 'Você têm certeza que deseja deletar a agregação "%s"?'; + $lang['straggregatedropped'] = 'Agregação deletada.'; + $lang['straggregatedroppedbad'] = 'Falha ao deletar a agregação.'; + $lang['straggraltered'] = 'Agregação alterada.'; + $lang['straggralteredbad'] = 'Falha ao alterar a agregação.'; + $lang['straggrneedsname'] = 'Você deve informar um nome para a sua agregação.'; + $lang['straggrneedsbasetype'] = 'Você deve informar o tipo de entrada de dados para a agregação.'; + $lang['straggrneedssfunc'] = 'Você deve informar o nome da função de transição de estado para a agregação.'; + $lang['straggrneedsstype'] = 'Você deve informar o tipo de dados para o valor de estado da agregação.'; + $lang['straggrcreated'] = 'Agregação criada.'; + $lang['straggrcreatedbad'] = 'Falha ao criar a agregação.'; + $lang['straggrshowall'] = 'Exibir todas as agregações'; + + // Operator Classes + $lang['stropclasses'] = 'Classes Op'; + $lang['strnoopclasses'] = 'Nenhuma classe operador encontrada.'; + $lang['straccessmethod'] = 'Método de acesso'; + + // Stats and performance + $lang['strrowperf'] = 'Performance de linha'; + $lang['strioperf'] = 'Performance de I/O'; + $lang['stridxrowperf'] = 'Índice de Performance de linha'; + $lang['stridxioperf'] = 'Índice de Performance de I/O'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Seqüêncial'; + $lang['strscan'] = 'Pesquisa'; + $lang['strread'] = 'Leitura'; + $lang['strfetch'] = 'Afetado'; + $lang['strheap'] = 'Pilha'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'Índice TOAST'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disco'; + $lang['strrows2'] = 'Linhas'; + + // Tablespaces + $lang['strtablespace'] = 'Tablespace'; + $lang['strtablespaces'] = 'Tablespaces'; + $lang['strshowalltablespaces'] = 'Exibir todos os tablespaces'; + $lang['strnotablespaces'] = 'Nenhum tablespace encontrado.'; + $lang['strcreatetablespace'] = 'Criar tablespace'; + $lang['strlocation'] = 'Localização'; + $lang['strtablespaceneedsname'] = 'Você deve informar um nome para o tablespace.'; + $lang['strtablespaceneedsloc'] = 'Você deve informar um diretório em qual será criado o tablespace.'; + $lang['strtablespacecreated'] = 'Tablespace criado.'; + $lang['strtablespacecreatedbad'] = 'Falha ao criar o tablespace.'; + $lang['strconfdroptablespace'] = 'Você têm certeza que deseja deletar o tablespace "%s"?'; + $lang['strtablespacedropped'] = 'Tablespace deletado.'; + $lang['strtablespacedroppedbad'] = 'Falha ao deletar o tablespace.'; + $lang['strtablespacealtered'] = 'Tablespace alterado.'; + $lang['strtablespacealteredbad'] = 'Falha ao alterar o tablespace.'; + + // Miscellaneous + $lang['strtopbar'] = '%s rodando em %s:%s -- Você está logado como usuário "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Ajuda'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Navegar na página de ajuda'; + $lang['strselecthelppage'] = 'Selecione uma página de ajuda'; + $lang['strinvalidhelppage'] = 'Página de ajuda inválida.'; + $lang['strlogintitle'] = 'Conectado em %s'; + $lang['strlogoutmsg'] = 'Desconectado de %s'; + $lang['strloading'] = 'Carregando...'; + $lang['strerrorloading'] = 'Erro no carregamento'; + $lang['strclicktoreload'] = 'Clique para recarregar'; + + // Autovacuum + $lang['strautovacuum'] = 'Vácuo automático'; + $lang['strturnedon'] = 'Ligado'; + $lang['strturnedoff'] = 'Desligado'; + $lang['strenabled'] = 'Ativado'; + $lang['strnovacuumconf'] = 'Nenhuma configuração de vácuo automático encontrada.'; + $lang['strvacuumbasethreshold'] = 'Vácuo a partir do ponto inicial da base'; + $lang['strvacuumscalefactor'] = 'Vácuo por fator de escala'; + $lang['stranalybasethreshold'] = 'Analisar a partir do ponto inicial da base'; + $lang['stranalyzescalefactor'] = 'Analisar por fator de escala'; + $lang['strvacuumcostdelay'] = 'Custo de retardo do vácuo'; + $lang['strvacuumcostlimit'] = 'Custo máximo do vácuo'; + $lang['strvacuumpertable'] = 'Configuração de vácuo automático por tabela'; + $lang['straddvacuumtable'] = 'Adicionar configuração de vácuo automático para a tabela'; + $lang['streditvacuumtable'] = 'Editar a configuração de vácuo automático para a tabela %s'; + $lang['strdelvacuumtable'] = 'Deletar a configuração de vácuo automático para a tabela %s ?'; + $lang['strvacuumtablereset'] = 'Configuração de vácuo automático para a tabela %s redefinida para os valores padrão'; + $lang['strdelvacuumtablefail'] = 'Falha ao remover a configuração de vácuo automático para a tabela %s'; + $lang['strsetvacuumtablesaved'] = 'Configuração de vácuo automático para a tabela %s salva.'; + $lang['strsetvacuumtablefail'] = 'Configuração de vácuo automático para a tabela %s falhou.'; + $lang['strspecifydelvacuumtable'] = 'Você deve especificar a tabela que deseja remover os parâmetros de vácuo automático.'; + $lang['strspecifyeditvacuumtable'] = 'Você deve especificar a tabela que deseja editar os parâmetros de vácuo automático.'; + $lang['strnotdefaultinred'] = 'Valores não padrão estão em vermelho.'; + + // Table-level Locks + $lang['strlocks'] = 'Travas'; + $lang['strtransaction'] = 'ID de transação'; + $lang['strvirtualtransaction'] = 'ID de transação virtual'; + $lang['strprocessid'] = 'ID do processo'; + $lang['strmode'] = 'Modo de trava'; + $lang['strislockheld'] = 'A trava prendeu?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Transações preparadas'; + $lang['strxactid'] = 'ID da transação'; + $lang['strgid'] = 'ID global'; + + // Fulltext search + $lang['strfulltext'] = 'Busca por Texto Completo'; + $lang['strftsconfig'] = 'Configuração BTC'; + $lang['strftsconfigs'] = 'Configurações'; + $lang['strftscreateconfig'] = 'Criar uma configuração BTC'; + $lang['strftscreatedict'] = 'Criar um dicionário'; + $lang['strftscreatedicttemplate'] = 'Criar um modelo de dicionário'; + $lang['strftscreateparser'] = 'Criar parser'; + $lang['strftsnoconfigs'] = 'Nenhuma configuração BTC encontrada.'; + $lang['strftsconfigdropped'] = 'Configuração BTC eliminada.'; + $lang['strftsconfigdroppedbad'] = 'Falha ao eliminar da configuração BTC.'; + $lang['strconfdropftsconfig'] = 'Deseja eliminar a configuração BTC "%s"?'; + $lang['strconfdropftsdict'] = 'Deseja eliminar o dicionário BTC "%s"?'; + $lang['strconfdropftsmapping'] = 'Deseja eliminar o mapeamento "%s" da configuração BTC "%s"?'; + $lang['strftstemplate'] = 'Modelo'; + $lang['strftsparser'] = 'Parser'; + $lang['strftsconfigneedsname'] = 'Informe o nome para a sua configuração BTC.'; + $lang['strftsconfigcreated'] = 'Configuração BTC criada.'; + $lang['strftsconfigcreatedbad'] = 'Falha ao criar a configuração BTC.'; + $lang['strftsmapping'] = 'Mapeamento'; + $lang['strftsdicts'] = 'Dicionários'; + $lang['strftsdict'] = 'Dicionário'; + $lang['strftsemptymap'] = 'Mapa de configuração BTC vazio.'; + $lang['strftsconfigaltered'] = 'Configuração BTC alterada.'; + $lang['strftsconfigalteredbad'] = 'Falha ao alterar a configuração BTC.'; + $lang['strftsconfigmap'] = 'Mapa de configuração BTC'; + $lang['strftsparsers'] = 'Parsers BTC'; + $lang['strftsnoparsers'] = 'Nenhum parser BTC disponível.'; + $lang['strftsnodicts'] = 'Nenhum dicionário BTC disponível.'; + $lang['strftsdictcreated'] = 'Dicionário BTC criado.'; + $lang['strftsdictcreatedbad'] = 'Falha ao criar o dicionário BTC.'; + $lang['strftslexize'] = 'Lexize'; + $lang['strftsinit'] = 'Inicializar'; + $lang['strftsoptionsvalues'] = 'Opções e valores'; + $lang['strftsdictneedsname'] = 'Informe o nome para o dicionário BTC.'; + $lang['strftsdictdropped'] = 'Dicionário BTC eliminado.'; + $lang['strftsdictdroppedbad'] = 'Falha ao eliminar o dicionário BTC.'; + $lang['strftsdictaltered'] = 'Dicionário BTC alterado.'; + $lang['strftsdictalteredbad'] = 'Falha ao alterar o dicinário BTC.'; + $lang['strftsaddmapping'] = 'Adicionar novo mapeamento'; + $lang['strftsspecifymappingtodrop'] = 'Informe ao menos um mapeamento para eliminar.'; + $lang['strftsspecifyconfigtoalter'] = 'Informe uma configuração BTC para alterar'; + $lang['strftsmappingdropped'] = 'Mapeamento BTC eliminado.'; + $lang['strftsmappingdroppedbad'] = 'Falha ao remover o mapeamento BTC.'; + $lang['strftsnodictionaries'] = 'Nenhum dicionário encontrado.'; + $lang['strftsmappingaltered'] = 'Mapeamento BTC alterado.'; + $lang['strftsmappingalteredbad'] = 'Falha ao alterar o mapeamento BTC.'; + $lang['strftsmappingadded'] = 'Mapeamento BTC adicionado.'; + $lang['strftsmappingaddedbad'] = 'Falha ao adicionar o mapeamento BTC.'; + $lang['strftstabconfigs'] = 'Configurações'; + $lang['strftstabdicts'] = 'Dicionários'; + $lang['strftstabparsers'] = 'Parsers'; + $lang['strftscantparsercopy'] = 'Não é possível especificar ambos parser e modelo durante a criação da configuração de busca de texto.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/portuguese-pt.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/portuguese-pt.php new file mode 100644 index 00000000..01b12a41 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/portuguese-pt.php @@ -0,0 +1,608 @@ +<?php + +/** +* Portuguese language file for phpPgAdmin. +* @maintainer Francisco Alves Cabrita (include@npf.pt.freebsd.org) +* +*/ + +// Language and character set +$lang['applang'] = 'Português-Português'; +$lang['applocale'] = 'pt-PT'; +$lang['applangdir'] = 'ltr'; + +// Basic strings +$lang['strintro'] = 'Bem-vindo ao phpPgAdmin.'; +$lang['strppahome'] = 'Página inicial phpPgAdmin '; +$lang['strpgsqlhome'] = 'Página inicial PostgreSQL '; +$lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; +$lang['strreportbug'] = 'Relatório de Bug'; +$lang['strviewfaq'] = 'Visualizar FAQ'; +$lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; +$lang['strlogin'] = 'Autenticação'; +$lang['strloginfailed'] = 'Falha na autenticação'; +$lang['strserver'] = 'Servidor'; +$lang['strlogout'] = 'Sair'; +$lang['strowner'] = 'Propietário'; +$lang['straction'] = 'Acção'; +$lang['stractions'] = 'Acções'; +$lang['strname'] = 'Nome'; +$lang['strdefinition'] = 'Definição'; +$lang['stroperators'] = 'Operadores'; +$lang['straggregates'] = 'Agregados'; +$lang['strproperties'] = 'Propriedades'; +$lang['strbrowse'] = 'Navegar'; +$lang['strdrop'] = 'Eliminar'; +$lang['strdropped'] = 'Eliminado'; +$lang['strnull'] = 'Nulo'; +$lang['strnotnull'] = 'Não Nulo'; +$lang['strprev'] = 'Anterior'; +$lang['strnext'] = 'Próximo'; +$lang['strfailed'] = 'Falha'; +$lang['strcreate'] = 'Criar'; +$lang['strcreated'] = 'Criado'; +$lang['strcomment'] = 'Comentário'; +$lang['strlength'] = 'Extensão'; +$lang['strdefault'] = 'Padrão'; +$lang['stralter'] = 'Alterar'; +$lang['strok'] = 'OK'; +$lang['strcancel'] = 'Cancelar'; +$lang['strsave'] = 'Gravar'; +$lang['strreset'] = 'Reiniciar'; +$lang['strinsert'] = 'Inserir'; +$lang['strselect'] = 'Seleccionar'; +$lang['strdelete'] = 'Eliminar'; +$lang['strupdate'] = 'Atualizar'; +$lang['strreferences'] = 'Referências'; +$lang['stryes'] = 'Sim'; +$lang['strno'] = 'Não'; +$lang['stredit'] = 'Editar'; +$lang['strcolumns'] = 'Colunas'; +$lang['strrows'] = 'Linha(s)'; +$lang['strrowsaff'] = 'Linha(s) afectadas.'; +$lang['strexample'] = 'eg.'; +$lang['strback'] = 'Voltar'; +$lang['strqueryresults'] = 'Resultados da pesquisa'; +$lang['strshow'] = 'Exibir'; +$lang['strempty'] = 'Vazio'; +$lang['strlanguage'] = 'Linguagem'; +$lang['strencoding'] = 'Codificação'; +$lang['strvalue'] = 'Valor'; +$lang['strunique'] = 'Único'; +$lang['strprimary'] = 'Primário'; +$lang['strexport'] = 'Exportar'; +$lang['strsql'] = 'SQL'; +$lang['strgo'] = 'Ir'; +$lang['strimport'] = 'Importar'; +$lang['stradmin'] = 'Administrador'; +$lang['strvacuum'] = 'Vácuo'; +$lang['stranalyze'] = 'Analiza'; +$lang['strclusterindex'] = 'Cluster'; +$lang['strreindex'] = 'Reordenar'; +$lang['strrun'] = 'Executar'; +$lang['stradd'] = 'Adicionar'; +$lang['strevent'] = 'Evento'; +$lang['strwhere'] = 'Onde'; +$lang['strinstead'] = 'Fazer ao invés'; +$lang['strwhen'] = 'Quando'; +$lang['strformat'] = 'Formato'; +$lang['strstart'] = 'Iniciar'; +$lang['strstop'] = 'Parar'; +$lang['strgotoppage'] = 'Topo da página'; + +// Error handling +$lang['strdata'] = 'Data'; +$lang['strconfirm'] = 'Confirmar'; +$lang['strexpression'] = 'Expressão'; + $lang['strellipsis'] = '...'; +$lang['strexpand'] = 'Expandir'; +$lang['strcollapse'] = 'Diminuir'; +$lang['strbadconfig'] = 'O config.inc.php está desatualizado. Você deve criá-lo novamente a partir do novo config.inc.php-dist.'; +$lang['strnotloaded'] = 'A sua instalação do PHP não suporta chamadas a este tipo de base de dados.'; +$lang['strbadschema'] = 'Esquema inválido.'; +$lang['strbadencoding'] = 'Falha ao definir codificação do cliente na base de dados.'; +$lang['strsqlerror'] = 'Erro de SQL:'; +$lang['strinstatement'] = 'Indicação de entrada :'; +$lang['strinvalidparam'] = 'Parâmetros de script inválidos.'; +$lang['strnodata'] = 'Não foram encontradas linhas.'; +$lang['strconnectionfail'] = 'A conexão falhou.'; + +// Tables +$lang['strtable'] = 'Tabela'; +$lang['strtables'] = 'Tabelas'; +$lang['strshowalltables'] = 'Exibir todas as tabelas'; +$lang['strnotables'] = 'Tabelas não encontradas.'; +$lang['strnotable'] = 'Tabela não encontradas.'; +$lang['strcreatetable'] = 'Criar tabela'; +$lang['strtablename'] = 'Nome da tabela '; +$lang['strtableneedsname'] = 'A tabela necessita de um nome.'; +$lang['strtableneedsfield'] = 'Especifique pelo menos um campo.'; +$lang['strtableneedscols'] = 'As tabelas requerem um número válido de colunas.'; +$lang['strtablecreated'] = 'Tabela criada.'; +$lang['strtablecreatedbad'] = 'Falha na criação de tabela.'; +$lang['strconfdroptable'] = 'Tem certeza que quer eliminar a tabela "%s"?'; +$lang['strtabledropped'] = 'Tabela eliminada.'; +$lang['strtabledroppedbad'] = 'Falha ao eliminar a tabela.'; +$lang['strconfemptytable'] = 'Tem certeza que quer esvaziar a tabela "%s"?'; +$lang['strtableemptied'] = 'Tabela vazia.'; +$lang['strtableemptiedbad'] = 'Falha ao esvaziar a tabela.'; +$lang['strinsertrow'] = 'Inserir linha'; +$lang['strrowinserted'] = 'Linha inserida.'; +$lang['strrowinsertedbad'] = 'Falha ao inserir linha.'; +$lang['streditrow'] = 'Editar linha'; +$lang['strrowupdated'] = 'Linha actualizada.'; +$lang['strrowupdatedbad'] = 'Falha na actualização da linha.'; +$lang['strdeleterow'] = 'Eliminar linha'; +$lang['strconfdeleterow'] = 'Tem certeza que quer eliminar esta linha?'; +$lang['strrowdeleted'] = 'Linha eliminada.'; +$lang['strrowdeletedbad'] = 'Falha ao eliminar a linha .'; +$lang['strfield'] = 'Campo'; +$lang['strnumfields'] = 'Número de campos'; +$lang['strselectneedscol'] = 'Deve exibir pelo menos uma coluna'; +$lang['straltercolumn'] = 'Alterar coluna'; +$lang['strcolumnaltered'] = 'Coluna altereda.'; +$lang['strcolumnalteredbad'] = 'Falha na alteração de coluna.'; +$lang['strconfdropcolumn'] = 'Tem certeza que quer eliminar a coluna "%s" da tabela "%s"?'; +$lang['strcolumndropped'] = 'Coluna eliminada.'; +$lang['strcolumndroppedbad'] = 'Eliminação da coluna falhou.'; +$lang['straddcolumn'] = 'Adicionar coluna'; +$lang['strcolumnadded'] = 'Coluna adicionada.'; +$lang['strcolumnaddedbad'] = 'Adição de coluna falhou.'; +$lang['strdataonly'] = 'Dados apenas'; + +// Users +$lang['strcascade'] = 'CASCATA'; +$lang['struser'] = 'Utilizador'; +$lang['strusers'] = 'Utilizadores'; +$lang['strusername'] = 'Nome do utilizador'; +$lang['strpassword'] = 'Palavra-chave'; +$lang['strsuper'] = 'Super-Utilizador?'; +$lang['strcreatedb'] = 'Criar Base de Dados?'; +$lang['strexpires'] = 'Expira'; +$lang['strnousers'] = 'Utilizadores não encontrados.'; +$lang['struserupdated'] = 'Utilizador alterado.'; +$lang['struserupdatedbad'] = 'Alteração do utilizador falhou.'; +$lang['strshowallusers'] = 'Mostra todos os utilizadores'; +$lang['strcreateuser'] = 'Criar Utilizador'; +$lang['strusercreated'] = 'Utilizador criado.'; +$lang['strusercreatedbad'] = 'Falhou ao criar utilizador.'; +$lang['strconfdropuser'] = 'Tem certeza que quer eliminar o utilizador "%s"?'; +$lang['struserdropped'] = 'Utilizador eliminado.'; +$lang['struserdroppedbad'] = 'Falha ao eliminar utilizador.'; + +// Groups +$lang['straccount'] = 'Conta'; +$lang['strchangepassword'] = 'Alterar palavra-chave'; +$lang['strpasswordchanged'] = 'Palavra-chave alterada.'; +$lang['strpasswordchangedbad'] = 'Falha ao alterar palavra-passe.'; +$lang['strpasswordshort'] = 'Palavra-chave muito curta.'; +$lang['strpasswordconfirm'] = 'Palavra-chave não coincide com a confirmação.'; +$lang['strgroup'] = 'Grupo'; +$lang['strgroups'] = 'Grupos'; +$lang['strnogroups'] = 'Grupos não encotrados.'; +$lang['strshowallgroups'] = 'Exibir todos os grupos'; +$lang['strgroupneedsname'] = 'Insira um nome para o seu grupo.'; +$lang['strgroupcreated'] = 'Grupo criado.'; +$lang['strgroupcreatedbad'] = 'Falha na criação de grupo.'; +$lang['strconfdropgroup'] = 'Tem certeza que quer eliminar o grupo "%s"?'; +$lang['strgroupdropped'] = 'Grupo eliminado.'; +$lang['strgroupdroppedbad'] = 'Falha ao eliminar grupo.'; +$lang['strmembers'] = 'Membros'; + +// Privilges +$lang['strprivilege'] = 'Privilégio'; +$lang['strprivileges'] = 'Privilégios'; +$lang['strnoprivileges'] = 'Este objeto tem privilégios padrões de proprietário.'; +$lang['strgrant'] = 'Concede'; +$lang['strrevoke'] = 'Revoga'; +$lang['strgranted'] = 'Privilágios concedidos.'; +$lang['strgrantfailed'] = 'Falha ao conceder privilégios.'; +$lang['strgrantbad'] = 'Deverá especificar um utilizador ou grupo e pelo menos um previlégio.'; + +// Databases +$lang['strdatabase'] = 'Base de dados'; +$lang['strdatabases'] = 'Base de dados'; +$lang['strshowalldatabases'] = 'Exibir todos os base de dados'; +$lang['strnodatabase'] = 'Base de dados não encontrada.'; +$lang['strnodatabases'] = 'Bases de dados não encontradas.'; +$lang['strcreatedatabase'] = 'Criar base de dados'; +$lang['strdatabasename'] = 'Nome da base de dados'; +$lang['strdatabaseneedsname'] = 'Insira um nome para a sua base de dados.'; +$lang['strdatabasecreated'] = 'Base de dados criada.'; +$lang['strdatabasecreatedbad'] = 'Falhou na criação da Base de dados.'; +$lang['strconfdropdatabase'] = 'Tem certeza que quer eliminar a base de dados "%s"?'; +$lang['strdatabasedropped'] = 'Base de dados eliminada.'; +$lang['strdatabasedroppedbad'] = 'Falha ao eliminar a base de dados.'; +$lang['strentersql'] = 'Digite abaixo a instrução SQL a ser executado:'; +$lang['strsqlexecuted'] = 'SQL executado.'; +$lang['strvacuumgood'] = 'Vácuo completo.'; +$lang['strvacuumbad'] = 'Falha ao executar vácuo.'; +$lang['stranalyzegood'] = 'Análize completa.'; +$lang['stranalyzebad'] = 'Falha ao executar análize.'; + +// Views +$lang['strview'] = 'Visualização'; +$lang['strviews'] = 'Visualizações'; +$lang['strshowallviews'] = 'Exibir todas as visualizações'; +$lang['strnoview'] = 'Visualização não encontrada.'; +$lang['strnoviews'] = 'Visualizações não encontradas.'; +$lang['strcreateview'] = 'Criar visualização'; +$lang['strviewname'] = 'Nome da visualização'; +$lang['strviewneedsname'] = 'Você deve dar um nome a sua visualização.'; +$lang['strviewneedsdef'] = 'Crie uma definição para sua visualização.'; +$lang['strviewcreated'] = 'Visualização criada.'; +$lang['strviewcreatedbad'] = 'Falha na criação de visualização.'; +$lang['strconfdropview'] = 'Tem certeza que quer eliminar a visualização "%s"?'; +$lang['strviewdropped'] = 'Visualização eliminada.'; +$lang['strviewdroppedbad'] = 'Falha ao eliminar a visualização.'; +$lang['strviewupdated'] = 'Visualização alterada.'; +$lang['strviewupdatedbad'] = 'Falha ao alterar visualização.'; + +// Sequences +$lang['strsequence'] = 'Sequência'; +$lang['strsequences'] = 'Sequências'; +$lang['strshowallsequences'] = 'Listar todas as sequências'; +$lang['strnosequence'] = 'Sequência não encontrada.'; +$lang['strnosequences'] = 'Sequências não encontradas.'; +$lang['strcreatesequence'] = 'Criar sequência'; +$lang['strlastvalue'] = 'Último valor'; +$lang['strincrementby'] = 'Incrementar por'; +$lang['strstartvalue'] = 'Valor inicial'; +$lang['strmaxvalue'] = 'Valor máximo'; +$lang['strminvalue'] = 'Valor mínimo'; +$lang['strcachevalue'] = 'Valor de cache'; +$lang['strlogcount'] = 'Contador do log'; + $lang['striscycled'] = 'Foi dado um ciclo ?'; +$lang['strsequenceneedsname'] = 'Dê um nome a sua sequência.'; +$lang['strsequencecreated'] = 'Sequência criada.'; +$lang['strsequencecreatedbad'] = 'Falha na criação da sequência.'; +$lang['strconfdropsequence'] = 'Tem certeza que quer eliminar a sequência "%s"?'; +$lang['strsequencedropped'] = 'Sequência eliminada.'; +$lang['strsequencedroppedbad'] = 'Falha ao eliminar a sequência.'; + +// Indexes +$lang['strindexes'] = 'Índices'; +$lang['strindexname'] = 'Nome do índice'; +$lang['strshowallindexes'] = 'Exibir todos os índices'; +$lang['strnoindex'] = 'Índice não encontrado.'; +$lang['strnoindexes'] = 'Índices não encontrados.'; +$lang['strcreateindex'] = 'Criar índice'; +$lang['strindexname'] = 'Nome do índice'; +$lang['strtabname'] = 'Nome da tabela'; +$lang['strcolumnname'] = 'Nome da coluna'; +$lang['strindexneedsname'] = 'Dê um nome ao seu índice'; +$lang['strindexneedscols'] = 'Índices requerem um número válido de colunas.'; +$lang['strindexcreated'] = 'Índice criado'; +$lang['strindexcreatedbad'] = 'Falha na criação do índice.'; +$lang['strconfdropindex'] = 'Tem a certeza que quer eliminar o índice "%s"?'; +$lang['strindexdropped'] = 'Indice eliminado.'; +$lang['strindexdroppedbad'] = 'Falha ao eliminar o índice.'; +$lang['strkeyname'] = 'Nome da chave'; +$lang['struniquekey'] = 'Chave única'; +$lang['strprimarykey'] = 'Chave primária'; +$lang['strindextype'] = 'Tipo de índice'; +$lang['strindexname'] = 'Nome do índice'; +$lang['strtablecolumnlist'] = 'Colunas na tabela'; +$lang['strindexcolumnlist'] = 'Colunas no índice'; + +// Rules +$lang['strrules'] = 'Regras'; +$lang['strrule'] = 'Regra'; +$lang['strshowallrules'] = 'Exibir todas as regras'; +$lang['strnorule'] = 'Regra não encontrada.'; +$lang['strnorules'] = 'Regras não encontradas.'; +$lang['strcreaterule'] = 'Criar regra'; +$lang['strrulename'] = 'Nome da regra'; +$lang['strruleneedsname'] = 'Dê um nome para sua regra.'; +$lang['strrulecreated'] = 'Regra criada.'; +$lang['strrulecreatedbad'] = 'Falha na criação de regra.'; +$lang['strconfdroprule'] = 'Tem certeza que quer eliminar a regra "%s" on "%s"?'; +$lang['strruledropped'] = 'Regra eliminada.'; +$lang['strruledroppedbad'] = 'Falha ao eliminar a regra.'; + +// Constraints +$lang['strconstraints'] = 'Restrição'; +$lang['strshowallconstraints'] = 'Exibir todos as restrições'; +$lang['strnoconstraints'] = 'Restrições não encontradas.'; +$lang['strcreateconstraint'] = 'Criar restrição'; +$lang['strconstraintcreated'] = 'Restrição criada.'; +$lang['strconstraintcreatedbad'] = 'Falha na criação de restrição.'; +$lang['strconfdropconstraint'] = 'Tem certeza que quer eliminar a restrição "%s" on "%s"?'; +$lang['strconstraintdropped'] = 'Restrição eliminada.'; +$lang['strconstraintdroppedbad'] = 'Falha ao eliminar de restrição.'; +$lang['straddcheck'] = 'Adicona verificação'; +$lang['strcheckneedsdefinition'] = 'Verificação de regras necessita de uma definição.'; +$lang['strcheckadded'] = 'Verificação de restrição adicionada.'; +$lang['strcheckaddedbad'] = 'Falha ao adicionar verificação de restrição.'; +$lang['straddpk'] = 'Adicionar chave primária'; +$lang['strpkneedscols'] = 'Chave primária requer pelo menos uma coluna.'; +$lang['strpkadded'] = 'Chave primária adicionada.'; +$lang['strpkaddedbad'] = 'Falha ao adicinoar chave primária.'; +$lang['stradduniq'] = 'Adiciona chave única'; +$lang['struniqneedscols'] = 'Chave única requer ao menos uma coluna.'; +$lang['struniqadded'] = 'Chave única adicionada.'; +$lang['struniqaddedbad'] = 'Falha ao adicionar chave única.'; +$lang['straddfk'] = 'Adicionar chave estrangeira'; +$lang['strfkneedscols'] = 'Chave estrangeira requer ao menos uma coluna.'; +$lang['strfkneedstarget'] = 'Chave estrangeira requer uma tabela de referência.'; +$lang['strfkadded'] = 'Chave estrangeira adicionada.'; +$lang['strfkaddedbad'] = 'Falha ao adicionar chave estrangeira.'; +$lang['strfktarget'] = 'Tabela alvo'; +$lang['strfkcolumnlist'] = 'Colunas em chaves'; +$lang['strondelete'] = 'ELIMINAR ACTIVO'; +$lang['stronupdate'] = 'ALTERAR ACTIVO'; + +// Functions +$lang['strfunction'] = 'Função'; +$lang['strfunctions'] = 'Funções'; +$lang['strshowallfunctions'] = 'Exibir todas as funções'; +$lang['strnofunction'] = 'Função não encontrada.'; +$lang['strnofunctions'] = 'Funções não encontradas.'; +$lang['strfunctionname'] = 'Nome da função'; +$lang['strreturns'] = 'Retorno'; +$lang['strarguments'] = 'Argumentos'; +$lang['strproglanguage'] = 'Linguagem'; +$lang['strfunctionneedsname'] = 'Dê um nome à sua função.'; +$lang['strfunctionneedsdef'] = 'A função precisa de uma definição.'; +$lang['strfunctioncreated'] = 'Função criada.'; +$lang['strfunctioncreatedbad'] = 'Falha na criação de função.'; +$lang['strconfdropfunction'] = 'Tem certeza que quer eliminar a função "%s"?'; +$lang['strfunctiondropped'] = 'Função eliminada.'; +$lang['strfunctiondroppedbad'] = 'Falha ao eliminar de função.'; +$lang['strfunctionupdated'] = 'Função actualizada'; +$lang['strfunctionupdatedbad'] = 'Falha na actualização da função.'; + +// Triggers +$lang['strtrigger'] = 'Gatilho'; +$lang['strtriggers'] = 'Gatilhos'; +$lang['strshowalltriggers'] = 'Exibir todos os gatilhos'; +$lang['strnotrigger'] = 'Não foi encontrado gatilho.'; +$lang['strnotriggers'] = 'Não foram encontrados gatilhos.'; +$lang['strcreatetrigger'] = 'Criar Gatilhos'; +$lang['strtriggerneedsname'] = 'Dê um nome ao gatilho.'; + $lang['strtriggerneedsfunc'] = 'Especifique uma função para seu gatilho.'; +$lang['strtriggercreated'] = 'Gatilho criado.'; +$lang['strtriggercreatedbad'] = 'Falha na criação do gatilho.'; +$lang['strconfdroptrigger'] = 'Tem certeza que quer eliminar o gatilho "%s" em "%s"?'; +$lang['strtriggerdropped'] = 'Gatilho eliminado.'; +$lang['strtriggerdroppedbad'] = 'Falha ao eliminar o gatilho.'; + +// Types +$lang['strtype'] = 'Tipo'; +$lang['strtypes'] = 'Tipos'; +$lang['strshowalltypes'] = 'Exibir todos os tipos'; +$lang['strnotype'] = 'Tipo não encontrado.'; +$lang['strnotypes'] = 'Tipos não encontrados.'; +$lang['strcreatetype'] = 'Criar tipo'; +$lang['strtypename'] = 'Nome do tipo'; +$lang['strinputfn'] = 'Função de entrada'; +$lang['stroutputfn'] = 'Função de saída'; + $lang['strpassbyval'] = 'Passado por valor?'; +$lang['stralignment'] = 'Alinhamento'; +$lang['strelement'] = 'Elemento'; +$lang['strdelimiter'] = 'Delimitador'; +$lang['strstorage'] = 'Armazenamento'; +$lang['strtypeneedsname'] = 'Dê um nome ao seu tipo.'; +$lang['strtypeneedslen'] = 'Tipo precisa de extenção.'; +$lang['strtypecreated'] = 'Tipo criado'; +$lang['strtypecreatedbad'] = 'Criação de tipo falhou.'; +$lang['strconfdroptype'] = 'Tem certeza que que eliminar o tipo "%s"?'; +$lang['strtypedropped'] = 'Tipo eliminado.'; +$lang['strtypedroppedbad'] = 'Eliminação de tipo falhou.'; + +// Schemas +$lang['strschema'] = 'Esquema'; +$lang['strschemas'] = 'Esquemas'; +$lang['strshowallschemas'] = 'Exibir todos os esquemas'; +$lang['strnoschema'] = 'Esquema não encontado.'; +$lang['strnoschemas'] = 'Não foram encontrados esquemas.'; +$lang['strcreateschema'] = 'Criar esquema'; +$lang['strschemaname'] = 'Nome do esquema'; +$lang['strschemaneedsname'] = 'Dê um nome ao seu esquema.'; +$lang['strschemacreated'] = 'Esquema criado'; +$lang['strschemacreatedbad'] = 'Falha na criação dos esquemas.'; +$lang['strconfdropschema'] = 'Tem a certeza que quer eliminar o esquema "%s"?'; +$lang['strschemadropped'] = 'Esquema eliminado.'; +$lang['strschemadroppedbad'] = 'Falha ao eliminar o esquema.'; + +// Reports + +// Miscellaneous +$lang['strtopbar'] = '%s a correr em %s:%s -- Você está ligado como "%s"'; +$lang['strtimefmt'] = 'jS M, Y g:iA'; + + +//Missing Strings 16/05/05 + +$lang['strlocaldocs'] = 'Documentação do PostgreSQL (local)'; +$lang['strlogindisallowed'] = 'Autenticação não permitida por questões de sugurança.'; +$lang['strfirst'] = '<< Primeiro'; +$lang['strlast'] = 'Último >>'; +$lang['strtrue'] = 'VERDADEIRO'; +$lang['strfalse'] = 'FALSO'; +$lang['strcolumn'] = 'Coluna'; +$lang['strobjects'] = 'objecto(s)'; +$lang['strclustered'] = 'Conjunto?'; +$lang['strseparator'] = ': '; +$lang['strexplain'] = 'Explicação'; +$lang['strexplainanalyze'] = 'Explicação de Análise'; +$lang['strfind'] = 'Procurar'; +$lang['stroptions'] = 'Opções'; +$lang['strrefresh'] = 'Actualizar'; +$lang['strdownload'] = 'Descarreguar'; +$lang['strdownloadgzipped'] = 'Descarregar comprimido com gzip'; +$lang['strinfo'] = 'Informação'; +$lang['stroids'] = 'OIDs'; +$lang['stradvanced'] = 'Avançado'; +$lang['strvariables'] = 'Variáveis'; +$lang['strprocess'] = 'Processo'; +$lang['strprocesses'] = 'Processos'; +$lang['strsetting'] = 'Configurações'; +$lang['streditsql'] = 'Editar SQL'; +$lang['strruntime'] = 'Tempo total decorrido: %s ms'; +$lang['strpaginate'] = 'Paginar resultados'; +$lang['struploadscript'] = 'ou upload um script SQL:'; +$lang['strstarttime'] = 'Hora de início'; +$lang['strfile'] = 'Ficheiro'; +$lang['strfileimported'] = 'Ficheiro importado.'; +$lang['strphpversionnotsupported'] = 'Versão do PHP não é suportada. Por favor actualize para a versão %s ou superior.'; +$lang['strpostgresqlversionnotsupported'] = 'Versão do PostgreSQL não é suportada. Por favor actualize para a versão %s ou superior.'; +$lang['strnoobjects'] = 'Não foram escontrados objectos.'; +$lang['strrownotunique'] = 'Não existe identificador único para esta linha.'; +$lang['strnouploads'] = 'Upload de ficheiros indisponível.'; +$lang['strimporterror'] = 'Erro na importação.'; +$lang['strimporterrorline'] = 'Erro ao importar na linha %s.'; +$lang['strinsertandrepeat'] = 'Inserir & Repetir'; +$lang['strnumcols'] = 'Número de colunas'; +$lang['strcolneedsname'] = 'Tem de definir um nome para a coluna.'; +$lang['strselectallfields'] = 'Seleccione todos os campos'; +$lang['strselectunary'] = 'Operadores unários não podem ter valores.'; +$lang['strtablealtered'] = 'Tabela alterada.'; +$lang['strtablealteredbad'] = 'Alteração da Tabela falhou.'; +$lang['strstructureonly'] = 'Só Estrutura'; +$lang['strstructureanddata'] = 'Estrutura e dados'; +$lang['strtabbed'] = 'Tabulado'; +$lang['strauto'] = 'Auto'; +$lang['strconfvacuumtable'] = 'Tem a certeza que pretende aspirar "%s"?'; +$lang['strestimatedrowcount'] = 'Contagem de linhas Estimada'; +$lang['strsessiondefaults'] = 'Configurações padrão da sessão'; +$lang['struserneedsname'] = 'Tem de dar um nome ao seu útilizador.'; +$lang['strnogroup'] = 'Grupo não encontrado.'; +$lang['strcreategroup'] = 'Criar grupo'; +$lang['straddmember'] = 'Adicionar membro'; +$lang['strmemberadded'] = 'Membro adicionado.'; +$lang['strmemberaddedbad'] = 'Falha ao adicionar Membro.'; +$lang['strdropmember'] = 'Retirar membro'; +$lang['strconfdropmember'] = 'Tem a certeza que pretende retirar o membro "%s" do grupo "%s"?'; +$lang['strmemberdropped'] = 'Membro retirado.'; +$lang['strmemberdroppedbad'] = 'Falha ao retirar membro.'; +$lang['strgrantor'] = 'Grantor'; +$lang['strasterisk'] = '*'; +$lang['strreindexgood'] = 'Reindexação completa.'; +$lang['strreindexbad'] = 'Falha na Reindexação.'; +$lang['strfull'] = 'Cheio'; +$lang['strfreeze'] = 'Congelado'; +$lang['strforce'] = 'Forçar'; +$lang['strsignalsent'] = 'Sinal enviado.'; +$lang['strsignalsentbad'] = 'Falha ao enviar sinal.'; +$lang['strallobjects'] = 'Todos os objectos'; +$lang['strviewneedsfields'] = 'Tem de específicar a coluna que pretende seleccionar para a sua vista.'; +$lang['strviewlink'] = 'ligar chaves'; +$lang['strviewconditions'] = 'Condições Adicionais'; +$lang['strcreateviewwiz'] = 'Criar vista com assistente'; +$lang['strsequencereset'] = 'Limpar sequência.'; +$lang['strsequenceresetbad'] = 'Falha ao limpar sequência.'; +$lang['strindex'] = 'Index'; +$lang['strconfcluster'] = 'Tem a certeza que pretende conjugar "%s"?'; +$lang['strclusteredgood'] = 'Conjugação completa.'; +$lang['strclusteredbad'] = 'Falha ao conjugar.'; +$lang['strcreateplfunction'] = 'Criar função Create SQL/PL'; +$lang['strcreateinternalfunction'] = 'Criar função interna'; +$lang['strcreatecfunction'] = 'Criar função em C'; +$lang['strobjectfile'] = 'Ficheiro Objecto'; +$lang['strlinksymbol'] = 'Ligar Símbolo'; +$lang['strtriggeraltered'] = 'Trigger Alterado.'; +$lang['strtriggeralteredbad'] = 'Falha ao alterar Trigger.'; +$lang['strcreatecomptype'] = 'Criar tipo composto'; +$lang['strtypeneedsfield'] = 'Tem de específicar pelo menos um campo.'; +$lang['strtypeneedscols'] = 'Tem de específicar um número válido de campos.'; +$lang['strflavor'] = 'Sabor'; +$lang['strbasetype'] = 'Base'; +$lang['strcompositetype'] = 'Compôr'; +$lang['strpseudotype'] = 'Pseudo'; +$lang['strschemaaltered'] = 'Esquema Alterado.'; +$lang['strschemaalteredbad'] = 'Falha ao alterar o esquema.'; +$lang['strsearchpath'] = 'Caminho de pesquisa no esquema'; +$lang['strdomain'] = 'Domínio'; +$lang['strdomains'] = 'Domínios'; +$lang['strshowalldomains'] = 'Lista todos os domínios'; +$lang['strnodomains'] = 'Não foram encontrados domínios.'; +$lang['strcreatedomain'] = 'Criar domínio'; +$lang['strdomaindropped'] = 'Eliminar domínio.'; +$lang['strdomaindroppedbad'] = 'Falha ao eliminar o domínio.'; +$lang['strconfdropdomain'] = 'Tem a certeza que pretende eliminar o dominio "%s"?'; +$lang['strdomainneedsname'] = 'Tem de específicar um nome para o seu domínio.'; +$lang['strdomaincreated'] = 'Domínio criado.'; +$lang['strdomaincreatedbad'] = 'Falha ao criar domínio.'; +$lang['strdomainaltered'] = 'Alterar domínio.'; +$lang['strdomainalteredbad'] = 'Falha ao alterar domínio.'; +$lang['stroperator'] = 'Operador'; +$lang['strshowalloperators'] = 'Lista todos os operadores'; +$lang['strnooperator'] = 'Não foi encontrado o operador.'; +$lang['strnooperators'] = 'Não foram encontrados operadores.'; +$lang['strcreateoperator'] = 'Criar operador'; +$lang['strleftarg'] = 'Tipo de ARGumento esquerdo'; +$lang['strrightarg'] = 'Tipo de ARGumento direito'; +$lang['strcommutator'] = 'Comutador'; +$lang['strnegator'] = 'Negador'; +$lang['strrestrict'] = 'Restrito'; +$lang['strjoin'] = 'Juntar'; +$lang['strhashes'] = 'Referências'; +$lang['strmerges'] = 'Mesclrar'; +$lang['strleftsort'] = 'Ordenação esquerda'; +$lang['strrightsort'] = 'Ordenação direita'; +$lang['strlessthan'] = 'Menor que'; +$lang['strgreaterthan'] = 'Maior que'; +$lang['stroperatorneedsname'] = 'Tem de específicar um nome para o operador.'; +$lang['stroperatorcreated'] = 'Operador criado'; +$lang['stroperatorcreatedbad'] = 'Falha ao criar operador.'; +$lang['strconfdropoperator'] = 'Tem a certeza que pretende eliminar o operador "%s"?'; +$lang['stroperatordropped'] = 'Operador eliminado.'; +$lang['stroperatordroppedbad'] = 'Falha ao eliminar o operador.'; +$lang['strcasts'] = 'Molde'; +$lang['strnocasts'] = 'Não foram encontrador moldes.'; +$lang['strsourcetype'] = 'Tipo de fonte'; +$lang['strtargettype'] = 'Tipo de alvo'; +$lang['strimplicit'] = 'Implicito'; +$lang['strinassignment'] = 'Em assignamento'; +$lang['strbinarycompat'] = '(Binario compativél)'; +$lang['strconversions'] = 'Conversões'; +$lang['strnoconversions'] = 'Não foram encontradas conversões.'; +$lang['strsourceencoding'] = 'Codificação da fonte'; +$lang['strtargetencoding'] = 'Codificação do alvo'; +$lang['strlanguages'] = 'Línguas'; +$lang['strnolanguages'] = 'Não foram encontradas línguas.'; +$lang['strtrusted'] = 'Confiado'; +$lang['strnoinfo'] = 'Informação indisponível.'; +$lang['strreferringtables'] = 'Tabelas de referência'; +$lang['strparenttables'] = 'Tabelas pai'; +$lang['strchildtables'] = 'Tabelas filho'; +$lang['strnoaggregates'] = 'Não foram encontrados agregados.'; +$lang['stralltypes'] = '(Todos os tipos)'; +$lang['stropclasses'] = 'Classes Op'; +$lang['strnoopclasses'] = 'Não foram encontrados operadores de classes.'; +$lang['straccessmethod'] = 'Método de acesso'; +$lang['strrowperf'] = 'Performance das linhas'; +$lang['strioperf'] = 'Performance de E/S'; +$lang['stridxrowperf'] = 'Performance de indexação de linhas'; +$lang['stridxioperf'] = 'Performance em indexação E/S'; +$lang['strpercent'] = '%'; +$lang['strsequential'] = 'Sequêncial'; +$lang['strscan'] = 'Pesquisar'; +$lang['strread'] = 'Lêr'; +$lang['strfetch'] = 'Descarregar'; +$lang['strheap'] = 'Fila'; +$lang['strtoast'] = 'QUEIMAR'; +$lang['strtoastindex'] = 'QUEIMAR Index'; +$lang['strcache'] = 'Cache'; +$lang['strdisk'] = 'Disco'; +$lang['strrows2'] = 'Linhas'; +$lang['strtablespace'] = 'Espaço de Tabela'; +$lang['strtablespaces'] = 'Espaços de Tabela'; +$lang['strshowalltablespaces'] = 'Lista todos os espaços de tabela'; +$lang['strnotablespaces'] = 'Não foram encontrados espaços de tabela.'; +$lang['strcreatetablespace'] = 'Criar espaço de tabela'; +$lang['strlocation'] = 'Localização'; +$lang['strtablespaceneedsname'] = 'Tem de específicar um nome para o espaço de tabela.'; +$lang['strtablespaceneedsloc'] = 'Tem de específicar um directório no qual irá criar o espaço de tabela.'; +$lang['strtablespacecreated'] = 'Espaço de Tabela criado.'; +$lang['strtablespacecreatedbad'] = 'Falha ao criar espaço de tabela.'; +$lang['strconfdroptablespace'] = 'Tem a certeza que pretende eliminar o espaço de tabela "%s"?'; +$lang['strtablespacedropped'] = 'Espaço de tabela eliminado.'; +$lang['strtablespacedroppedbad'] = 'Falha ao eliminar o espaço de tabela.'; +$lang['strtablespacealtered'] = 'Espaço de tabela alterado.'; +$lang['strtablespacealteredbad'] = 'Alteração do Espaçamento de Tabela falhou.'; +$lang['strhelp'] = 'Ajuda'; +$lang['strhelpicon'] = '?'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/romanian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/romanian.php new file mode 100644 index 00000000..667e9326 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/romanian.php @@ -0,0 +1,758 @@ +<?php +/** + * Romanian language file, based on the english language file for phpPgAdmin. + * Alin Vaida [alin.vaida@gmail.com] + * + * $Id: romanian.php,v 1.7 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Română'; + $lang['applocale'] = 'ro-RO'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Bun venit în phpPgAdmin.'; + $lang['strppahome'] = 'Pagina phpPgAdmin'; + $lang['strpgsqlhome'] = 'Pagina PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Documentaţie locală PostgreSQL'; + $lang['strreportbug'] = 'Raportaţi o eroare'; + $lang['strviewfaq'] = 'Întrebări frecvente online'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Autentificare'; + $lang['strloginfailed'] = 'Autentificare eşuată'; + $lang['strlogindisallowed'] = 'Autentificare nepermisă din motive de securitate.'; + $lang['strserver'] = 'Server'; + $lang['strservers'] = 'Servere'; + $lang['strintroduction'] = 'Introducere'; + $lang['strhost'] = 'Gazdă'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Ieşire'; + $lang['strowner'] = 'Proprietar'; + $lang['straction'] = 'Acţiune'; + $lang['stractions'] = 'Acţiuni'; + $lang['strname'] = 'Nume'; + $lang['strdefinition'] = 'Definiţie'; + $lang['strproperties'] = 'Proprietăţi'; + $lang['strbrowse'] = 'Vizualizare'; + $lang['strenable'] = 'Activare'; + $lang['strdisable'] = 'Dezactivare'; + $lang['strdrop'] = 'Ştergere'; + $lang['strdropped'] = 'Şters'; + $lang['strnull'] = 'Nul'; + $lang['strnotnull'] = 'Ne-nul'; + $lang['strprev'] = '< Înapoi'; + $lang['strnext'] = 'Înainte >'; + $lang['strfirst'] = '<< Început'; + $lang['strlast'] = 'Sfârşit >>'; + $lang['strfailed'] = 'Eşuat'; + $lang['strcreate'] = 'Creare'; + $lang['strcreated'] = 'Creat'; + $lang['strcomment'] = 'Comentariu'; + $lang['strlength'] = 'Lungime'; + $lang['strdefault'] = 'Implicit'; + $lang['stralter'] = 'Modificare'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Anulare'; + $lang['strac'] = 'Activare Auto-completare'; + $lang['strsave'] = 'Salvare'; + $lang['strreset'] = 'Reiniţializare'; + $lang['strinsert'] = 'Inserare'; + $lang['strselect'] = 'Selectare'; + $lang['strdelete'] = 'Ştergere'; + $lang['strupdate'] = 'Actualizare'; + $lang['strreferences'] = 'Referinţe'; + $lang['stryes'] = 'Da'; + $lang['strno'] = 'Nu'; + $lang['strtrue'] = 'TRUE'; + $lang['strfalse'] = 'FALSE'; + $lang['stredit'] = 'Editare'; + $lang['strcolumn'] = 'Coloană'; + $lang['strcolumns'] = 'Coloane'; + $lang['strrows'] = 'rând(uri)'; + $lang['strrowsaff'] = 'rând(uri) afectate.'; + $lang['strobjects'] = 'obiect(e)'; + $lang['strback'] = 'Înapoi'; + $lang['strqueryresults'] = 'Rezultatele interogării'; + $lang['strshow'] = 'Afişare'; + $lang['strempty'] = 'Golire'; + $lang['strlanguage'] = 'Limbă'; + $lang['strencoding'] = 'Codificare'; + $lang['strvalue'] = 'Valoare'; + $lang['strunique'] = 'Unic'; + $lang['strprimary'] = 'Primar'; + $lang['strexport'] = 'Export'; + $lang['strimport'] = 'Import'; + $lang['strallowednulls'] = 'Caractere NULL permise'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Şir/câmp gol'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Administrare'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'Analiză'; + $lang['strclusterindex'] = 'Grupare'; + $lang['strclustered'] = 'Grupat?'; + $lang['strreindex'] = 'Re-indexare'; + $lang['strrun'] = 'Executare'; + $lang['stradd'] = 'Adăugare'; + $lang['strevent'] = 'Eveniment'; + $lang['strwhere'] = 'În schimb'; + $lang['strinstead'] = 'Execută în schimb'; + $lang['strwhen'] = 'Când'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Dată'; + $lang['strconfirm'] = 'Confirmare'; + $lang['strexpression'] = 'Expresie'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Expandare'; + $lang['strcollapse'] = 'Restrângere'; + $lang['strexplain'] = 'Explicare'; + $lang['strexplainanalyze'] = 'Explicare & Analiză'; + $lang['strfind'] = 'Căutare'; + $lang['stroptions'] = 'Opţiuni'; + $lang['strrefresh'] = 'Reîmprospătare'; + $lang['strdownload'] = 'Transfer'; + $lang['strdownloadgzipped'] = 'Transfer comprimat cu gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OID-uri'; + $lang['stradvanced'] = 'Avansat'; + $lang['strvariables'] = 'Variabile'; + $lang['strprocess'] = 'Proces'; + $lang['strprocesses'] = 'Procese'; + $lang['strsetting'] = 'Valoare'; + $lang['streditsql'] = 'Editare SQL'; + $lang['strruntime'] = 'Timp total de rulare:%s ms'; + $lang['strpaginate'] = 'Paginare rezultate'; + $lang['struploadscript'] = 'sau încărcare script SQL:'; + $lang['strstarttime'] = 'Timp start'; + $lang['strfile'] = 'Fişier'; + $lang['strfileimported'] = 'Fişier importat'; + $lang['strtrycred'] = 'Folosiţi aceste acreditări pentru toate serverele'; + $lang['strexecute'] = 'Executare'; + + // Database sizes + $lang['strsize'] = 'Dimensiune'; + $lang['strbytes'] = 'octeţi'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Această aplicaţie funcţionează cel mai bine într-un browser ce suportă frame-uri , dar poate fi folosită şi fără frame-uri, urmând legătura de mai jos.'; + $lang['strnoframeslink'] = 'Fără frame-uri'; + $lang['strbadconfig'] = 'Fişierul config.inc.php este învechit. Trebuie să-l re-generaţi folosind noul fişier config.inc.php-dist.'; + $lang['strnotloaded'] = 'Instalarea de PHP nu suportă PostgreSQL. Trebuie să re-compilaţi PHP folosind opţiunea --with-pgsql la configurare.'; + $lang['strpostgresqlversionnotsupported'] = 'Versiune de PostgreSQL ne-suportată. Actualizaţi la versiunea %s sau ulterioară.'; + $lang['strbadschema'] = 'Schemă specificată incorectă.'; + $lang['strbadencoding'] = 'Imposibil de setat codificarea client în baza de date.'; + $lang['strsqlerror'] = 'Eroare SQL:'; + $lang['strinstatement'] = 'În instrucţiunea:'; + $lang['strinvalidparam'] = 'Parametrii scriptului sunt incorecţi.'; + $lang['strnodata'] = 'Nici un rând găsit.'; + $lang['strnoobjects'] = 'Nici un obiect găsit.'; + $lang['strrownotunique'] = 'Nici un identificator unic pentru acest rând.'; + $lang['strnouploads'] = 'Încărcarea de fişiere este dezactivată.'; + $lang['strimporterror'] = 'Eroare la importare.'; + $lang['strimporterror-fileformat'] = 'Eroare la importare: Imposibil de determinat în mod automat formatul fişierului.'; + $lang['strimporterrorline'] = 'Eroare la importare pe linia %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Eroare la importare pe linia %s: Linia nu are numărul corect de coloane.'; + $lang['strimporterror-uploadedfile'] = 'Eroare la importare: Fişierul nu a putut fi încărcat pe server'; + $lang['strcannotdumponwindows'] = 'Descărcarea de tabele complexe şi nume de scheme în Windows nu este suportată.'; + + // Tables + $lang['strtable'] = 'Tabelă'; + $lang['strtables'] = 'Tabele'; + $lang['strshowalltables'] = 'Afişare toate tabelele'; + $lang['strnotables'] = 'Nici o tabelă găsită.'; + $lang['strnotable'] = 'Nici o tabelă găsită.'; + $lang['strcreatetable'] = 'Creare tabelă.'; + $lang['strtablename'] = 'Nume tabelă'; + $lang['strtableneedsname'] = 'Specificaţi un nume pentru tabelă.'; + $lang['strtableneedsfield'] = 'Specificaţi cel puţin un câmp.'; + $lang['strtableneedscols'] = 'Specificaţi un număr corect de coloane.'; + $lang['strtablecreated'] = 'Tabelă creată.'; + $lang['strtablecreatedbad'] = 'Creare tabelă eşuată.'; + $lang['strconfdroptable'] = 'Sigur ştergeţi tabela "%s"?'; + $lang['strtabledropped'] = 'Tabelă ştearsă.'; + $lang['strtabledroppedbad'] = 'Ştergere tabelă eşuată.'; + $lang['strconfemptytable'] = 'Sigur goliţi tabela "%s"?'; + $lang['strtableemptied'] = 'Tabelă golită.'; + $lang['strtableemptiedbad'] = 'Golire tabelă eşuată.'; + $lang['strinsertrow'] = 'Inserare rând'; + $lang['strrowinserted'] = 'Rând inserat'; + $lang['strrowinsertedbad'] = 'Inserare rând eşuată.'; + $lang['strrowduplicate'] = 'Inserare de rând eşuată, s-a încercat inserarea unui duplicat.'; + $lang['streditrow'] = 'Editare rând'; + $lang['strrowupdated'] = 'Rând actualizat.'; + $lang['strrowupdatedbad'] = 'Actualizare rând eşuată.'; + $lang['strdeleterow'] = 'Ştergere rând.'; + $lang['strconfdeleterow'] = 'Sigur ştergeţi acest rând?'; + $lang['strrowdeleted'] = 'Rând şters.'; + $lang['strrowdeletedbad'] = 'Ştergere rând eşuată.'; + $lang['strinsertandrepeat'] = 'Inserare & Repetare'; + $lang['strnumcols'] = 'Număr de coloane'; + $lang['strcolneedsname'] = 'Specificaţi un nume pentru coloană'; + $lang['strselectallfields'] = 'Selectare toate câmpurile'; + $lang['strselectneedscol'] = 'Afişaţi cel puţin o coloană.'; + $lang['strselectunary'] = 'Operatorii unari nu pot avea valori.'; + $lang['straltercolumn'] = 'Modificare coloană'; + $lang['strcolumnaltered'] = 'Coloană modificată.'; + $lang['strcolumnalteredbad'] = 'Modificare coloană eşuată.'; + $lang['strconfdropcolumn'] = 'Sigur ştergeţi coloana "%s" din tabela "%s"?'; + $lang['strcolumndropped'] = 'Coloană ştearsă.'; + $lang['strcolumndroppedbad'] = 'Ştergere coloană eşuată.'; + $lang['straddcolumn'] = 'Adăugare coloană'; + $lang['strcolumnadded'] = 'Coloană adăugată.'; + $lang['strcolumnaddedbad'] = 'Adăugare coloană eşuată.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Tabelă modificată.'; + $lang['strtablealteredbad'] = 'Modificare tabelă eşuată.'; + $lang['strdataonly'] = 'Numai date'; + $lang['strstructureonly'] = 'Numai structură'; + $lang['strstructureanddata'] = 'Structură şi date'; + $lang['strtabbed'] = 'Cu tab-uri'; + $lang['strauto'] = 'Automat'; + $lang['strconfvacuumtable'] = 'Sigur executaţi "vacuum" pe "%s"?'; + $lang['strestimatedrowcount'] = 'Număr estimat de rânduri'; + + // Columns + $lang['strcolprop'] = 'Proprietăţi coloană'; + + // Users + $lang['struser'] = 'Utilizator'; + $lang['strusers'] = 'Utilizatori'; + $lang['strusername'] = 'Nume utilizator'; + $lang['strpassword'] = 'Parolă'; + $lang['strsuper'] = 'Utilizator privilegiat?'; + $lang['strcreatedb'] = 'Creează BD?'; + $lang['strexpires'] = 'Expiră la'; + $lang['strsessiondefaults'] = 'Valori implicite pentru sesiune'; + $lang['strnousers'] = 'Nici un utilizator găsit.'; + $lang['struserupdated'] = 'Utilizator actualizat.'; + $lang['struserupdatedbad'] = 'Actualizare utilizator eşuată.'; + $lang['strshowallusers'] = 'Afişare toţi utilizatorii'; + $lang['strcreateuser'] = 'Creare utilizator'; + $lang['struserneedsname'] = 'Specificaţi un nume pentru utilizator.'; + $lang['strusercreated'] = 'Utilizator creat.'; + $lang['strusercreatedbad'] = 'Creare utilizator eşuată.'; + $lang['strconfdropuser'] = 'Sigur ştergeţi utilizatorul "%s"?'; + $lang['struserdropped'] = 'Utilizator şters.'; + $lang['struserdroppedbad'] = 'Ştergere utilizator eşuată.'; + $lang['straccount'] = 'Cont'; + $lang['strchangepassword'] = 'Schimbare parolă'; + $lang['strpasswordchanged'] = 'Parolă schimbată.'; + $lang['strpasswordchangedbad'] = 'Schimbare parolă eşuată.'; + $lang['strpasswordshort'] = 'Parola este prea scurtă.'; + $lang['strpasswordconfirm'] = 'Parola nu se confirmă.'; + + // Groups + $lang['strgroup'] = 'Grup'; + $lang['strgroups'] = 'Grupuri'; + $lang['strshowallgroups'] = 'Afişare toate grupurile'; + $lang['strnogroup'] = 'Grup negăsit.'; + $lang['strnogroups'] = 'Nici un grup găsit.'; + $lang['strcreategroup'] = 'Creare grup'; + $lang['strgroupneedsname'] = 'Specificaţi un nume pentru grup.'; + $lang['strgroupcreated'] = 'Grup creat.'; + $lang['strgroupcreatedbad'] = 'Creare grup eşuată.'; + $lang['strconfdropgroup'] = 'Sigur ştergeţi grupul "%s"?'; + $lang['strgroupdropped'] = 'Grup şters.'; + $lang['strgroupdroppedbad'] = 'Ştergere grup eşuată.'; + $lang['strmembers'] = 'Membri'; + $lang['strmemberof'] = 'Membru al'; + $lang['stradminmembers'] = 'Membri administratori'; + $lang['straddmember'] = 'Adăugare membru'; + $lang['strmemberadded'] = 'Membru adăugat.'; + $lang['strmemberaddedbad'] = 'Adăugare membru eşuată.'; + $lang['strdropmember'] = 'Ştergere membru'; + $lang['strconfdropmember'] = 'Sigur ştergeţi membrul "%s" din grupul "%s"?'; + $lang['strmemberdropped'] = 'Membru şters.'; + $lang['strmemberdroppedbad'] = 'Ştergere membru eşuată.'; + + // Roles + $lang['strrole'] = 'Rol'; + $lang['strroles'] = 'Roluri'; + $lang['strshowallroles'] = 'Afişare toate rolurile'; + $lang['strnoroles'] = 'Nici un rol găsit'; + $lang['strinheritsprivs'] = 'Moştenire privilegii?'; + $lang['strcreaterole'] = 'Creare rol'; + $lang['strcancreaterole'] = 'Creare rol posibilă?'; + $lang['strrolecreated'] = 'Rol creat'; + $lang['strrolecreatedbad'] = 'Creare rol eşuată'; + $lang['stralterrole'] = 'Modificare rol'; + $lang['strrolealtered'] = 'Rol modificat'; + $lang['strrolealteredbad'] = 'Modificare rol eşuată'; + $lang['strcanlogin'] = 'Autentificare posibilă?'; + $lang['strconnlimit'] = 'Limită conectare'; + $lang['strdroprole'] = 'Ştergere rol'; + $lang['strconfdroprole'] = 'Sigur ştergeţi rolul "%s"?'; + $lang['strroledropped'] = 'Rol şters'; + $lang['strroledroppedbad'] = 'Ştergere rol eşuată'; + $lang['strnolimit'] = 'Fără limită'; + $lang['strnever'] = 'Niciodată'; + $lang['strroleneedsname'] = 'Specificaţi un nume pentru rol'; + + // Privileges + $lang['strprivilege'] = 'Privilegiu'; + $lang['strprivileges'] = 'Privilegii'; + $lang['strnoprivileges'] = 'Acest obiect are privilegiile implicite ale proprietarului.'; + $lang['strgrant'] = 'Acordare'; + $lang['strrevoke'] = 'Revocare'; + $lang['strgranted'] = 'Privilegii schimbate.'; + $lang['strgrantfailed'] = 'Schimbare privilegii eşuată.'; + $lang['strgrantbad'] = 'Specificaţi cel puţin un utilizator sau grup şi cel puţin un privilegiu.'; + $lang['strgrantor'] = 'Acordat de'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Bază de date'; + $lang['strdatabases'] = 'Baze de date'; + $lang['strshowalldatabases'] = 'Afişare toate bazele de date'; + $lang['strnodatabases'] = 'Nici o bază de date găsită.'; + $lang['strcreatedatabase'] = 'Creare bază de date'; + $lang['strdatabasename'] = 'Nume bază de date'; + $lang['strdatabaseneedsname'] = 'Specificaţi un nume pentru baza de date.'; + $lang['strdatabasecreated'] = 'Bază de date creată.'; + $lang['strdatabasecreatedbad'] = 'Creare bază de date eşuată.'; + $lang['strconfdropdatabase'] = 'Sigur ştergeţi baza de date "%s"?'; + $lang['strdatabasedropped'] = 'Bază de date ştearsă.'; + $lang['strdatabasedroppedbad'] = 'Ştergere bază de date eşuată.'; + $lang['strentersql'] = 'Introduceţi instrucţiunea SQL de executat:'; + $lang['strsqlexecuted'] = 'Instrucţiune SQL executată.'; + $lang['strvacuumgood'] = 'Vacuum terminat.'; + $lang['strvacuumbad'] = 'Vacuum eşuat.'; + $lang['stranalyzegood'] = 'Analiză terminată.'; + $lang['stranalyzebad'] = 'Analiză eşuată.'; + $lang['strreindexgood'] = 'Re-indexare terminată.'; + $lang['strreindexbad'] = 'Re-indexare eşuată.'; + $lang['strfull'] = 'Complet'; + $lang['strfreeze'] = 'Îngheţare'; + $lang['strforce'] = 'Forţare'; + $lang['strsignalsent'] = 'Semnal trimis.'; + $lang['strsignalsentbad'] = 'Trimitere semnal eşuată.'; + $lang['strallobjects'] = 'Toate obiectele'; + $lang['strdatabasealtered'] = 'Bază de date modificată.'; + $lang['strdatabasealteredbad'] = 'Modificarea bazei de date a eşuat.'; + + // Views + $lang['strview'] = 'Vizualizare'; + $lang['strviews'] = 'Vizualizări'; + $lang['strshowallviews'] = 'Afişare toate vizualizările'; + $lang['strnoview'] = 'Nici o vizualizare găsită.'; + $lang['strnoviews'] = 'Nici o vizualizare găsită.'; + $lang['strcreateview'] = 'Creare vizualizare'; + $lang['strviewname'] = 'Nume vizualizare'; + $lang['strviewneedsname'] = 'Specificaţi un nume pentru vizualizare.'; + $lang['strviewneedsdef'] = 'Specificaţi o definiţie pentru vizualizare.'; + $lang['strviewneedsfields'] = 'Specificaţi coloanele pe care le doriţi selectate în vizualizare.'; + $lang['strviewcreated'] = 'Vizualizare creată.'; + $lang['strviewcreatedbad'] = 'Creare vizualizare eşuată.'; + $lang['strconfdropview'] = 'Sigur ştergeţi vizualizarea "%s"?'; + $lang['strviewdropped'] = 'Vizualizare ştearsă.'; + $lang['strviewdroppedbad'] = 'Ştergere vizualizare eşuată.'; + $lang['strviewupdated'] = 'Vizualizare actualizată'; + $lang['strviewupdatedbad'] = 'Actualizare vizualizare eşuată.'; + $lang['strviewlink'] = 'Chei de legătură'; + $lang['strviewconditions'] = 'Condiţii suplimentare'; + $lang['strcreateviewwiz'] = 'Creare vizualizare folosind expertul'; + + // Sequences + $lang['strsequence'] = 'Secvenţă'; + $lang['strsequences'] = 'Secvenţe'; + $lang['strshowallsequences'] = 'Afişare toate secvenţele'; + $lang['strnosequence'] = 'Nici o secvenţă găsită.'; + $lang['strnosequences'] = 'Nici o secvenţă găsită.'; + $lang['strcreatesequence'] = 'Creare secvenţă'; + $lang['strlastvalue'] = 'Ultima valoare'; + $lang['strincrementby'] = 'Incrementare cu'; + $lang['strstartvalue'] = 'Valoare de start'; + $lang['strmaxvalue'] = 'Valoare maximă'; + $lang['strminvalue'] = 'Valoare minimă'; + $lang['strcachevalue'] = 'Valoare cache'; + $lang['strlogcount'] = 'Log count'; + $lang['striscycled'] = 'Ciclică?'; + $lang['strsequenceneedsname'] = 'Specificaţi un nume pentru secvenţă.'; + $lang['strsequencecreated'] = 'Secvenţă creată.'; + $lang['strsequencecreatedbad'] = 'Creare secvenţă eşuată.'; + $lang['strconfdropsequence'] = 'Sigur ştergeţi secvenţa "%s"?'; + $lang['strsequencedropped'] = 'Secvenţă ştearsă.'; + $lang['strsequencedroppedbad'] = 'Ştergere secvenţă eşuată.'; + $lang['strsequencereset'] = 'Reiniţializare secvenţă.'; + $lang['strsequenceresetbad'] = 'Reiniţializare secvenţă eşuată.'; + $lang['straltersequence'] = 'Modificare secvenţă'; + $lang['strsequencealtered'] = 'Secvenţă modificată'; + $lang['strsequencealteredbad'] = 'Modificare secvenţă eşuată'; + $lang['strsetval'] = 'Setare valoare'; + $lang['strsequencesetval'] = 'Valoare secvenţă setată'; + $lang['strsequencesetvalbad'] = 'Setare valoare secvenţă eşuată'; + $lang['strnextval'] = 'Valoare increment'; + $lang['strsequencenextval'] = 'Secvenţă incrementată'; + $lang['strsequencenextvalbad'] = 'Incremetare secvenţă eşuată'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Indexuri'; + $lang['strindexname'] = 'Nume index'; + $lang['strshowallindexes'] = 'Afişare toate indexurile'; + $lang['strnoindex'] = 'Nici un index găsit.'; + $lang['strnoindexes'] = 'Nici un index găsit.'; + $lang['strcreateindex'] = 'Creare index'; + $lang['strtabname'] = 'Nume tabelă'; + $lang['strcolumnname'] = 'Nume coloană'; + $lang['strindexneedsname'] = 'Specificaţi un nume pentru index.'; + $lang['strindexneedscols'] = 'Indexurile necesită un număr corect de coloane.'; + $lang['strindexcreated'] = 'Index creat'; + $lang['strindexcreatedbad'] = 'Creare index eşuată.'; + $lang['strconfdropindex'] = 'Sigur ştergeţi indexul "%s"?'; + $lang['strindexdropped'] = 'Index şters.'; + $lang['strindexdroppedbad'] = 'Ştergere index eşuată.'; + $lang['strkeyname'] = 'Nume cheie'; + $lang['struniquekey'] = 'Cheie unică'; + $lang['strprimarykey'] = 'Cheie primară'; + $lang['strindextype'] = 'Tip de index'; + $lang['strtablecolumnlist'] = 'Coloane în tabelă'; + $lang['strindexcolumnlist'] = 'Coloane în index'; + $lang['strconfcluster'] = 'Sigur grupaţi "%s"?'; + $lang['strclusteredgood'] = 'Grupare completă.'; + $lang['strclusteredbad'] = 'Grupare eşuată.'; + $lang['strcluster'] = 'Grupare'; + + // Rules + $lang['strrules'] = 'Reguli'; + $lang['strrule'] = 'Regulă'; + $lang['strshowallrules'] = 'Afişare toate regulile'; + $lang['strnorule'] = 'Nici o regulă găsită.'; + $lang['strnorules'] = 'Nici o regulă găsită.'; + $lang['strcreaterule'] = 'Creare regulă'; + $lang['strrulename'] = 'Nume regulă'; + $lang['strruleneedsname'] = 'Specificaţi un nume pentru regulă.'; + $lang['strrulecreated'] = 'Regulă creată.'; + $lang['strrulecreatedbad'] = 'Creare regulă eşuată.'; + $lang['strconfdroprule'] = 'Sigur ştergeţi regula "%s"?'; + $lang['strruledropped'] = 'Regulă ştearsă.'; + $lang['strruledroppedbad'] = 'Ştergere regulă eşuată.'; + + // Constraints + $lang['strconstraint'] = 'Restricţie'; + $lang['strconstraints'] = 'Restricţii'; + $lang['strshowallconstraints'] = 'Afişare toate restricţiile'; + $lang['strnoconstraints'] = 'Nici o restricţie găsită.'; + $lang['strcreateconstraint'] = 'Creare restricţie'; + $lang['strconstraintcreated'] = 'Restricţie creată.'; + $lang['strconstraintcreatedbad'] = 'Creare restricţie eşuată.'; + $lang['strconfdropconstraint'] = 'Sigur ştergeţi restricţia "%s"?'; + $lang['strconstraintdropped'] = 'Restricţie ştearsă.'; + $lang['strconstraintdroppedbad'] = 'Ştergere restricţie eşuată.'; + $lang['straddcheck'] = 'Adăugare verificare'; + $lang['strcheckneedsdefinition'] = 'Verificarea de restricţie necesită o definiţie.'; + $lang['strcheckadded'] = 'Verificare de restricţie adăugată.'; + $lang['strcheckaddedbad'] = 'Adăugare verificare de restricţie eşuată.'; + $lang['straddpk'] = 'Adăugare cheie primară'; + $lang['strpkneedscols'] = 'Cheia primară necesită cel puţin o coloană.'; + $lang['strpkadded'] = 'Cheie primară adăugată.'; + $lang['strpkaddedbad'] = 'Adăugare cheie primară eşuată.'; + $lang['stradduniq'] = 'Adăugare cheie unică'; + $lang['struniqneedscols'] = 'Cheia unică necesită cel puţin o coloană.'; + $lang['struniqadded'] = 'Cheie unică adăugată.'; + $lang['struniqaddedbad'] = 'Adăugare cheie unică eşuată.'; + $lang['straddfk'] = 'Adăugare cheie străină'; + $lang['strfkneedscols'] = 'Cheia străină necesită cel puţin o coloană.'; + $lang['strfkneedstarget'] = 'Cheia străină necesită o tabelă de destinaţie.'; + $lang['strfkadded'] = 'Cheie străină adăugată.'; + $lang['strfkaddedbad'] = 'Adăugare cheie străină eşuată.'; + $lang['strfktarget'] = 'Tabelă de destinaţie'; + $lang['strfkcolumnlist'] = 'Coloane în cheie'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Funcţie'; + $lang['strfunctions'] = 'Funcţii'; + $lang['strshowallfunctions'] = 'Afişare toate funcţiile'; + $lang['strnofunction'] = 'Nici o functie găsită.'; + $lang['strnofunctions'] = 'Nici o functie găsită.'; + $lang['strcreateplfunction'] = 'Creare funcţie SQL/PL'; + $lang['strcreateinternalfunction'] = 'Creare funcţie internă'; + $lang['strcreatecfunction'] = 'Creare funcţie C'; + $lang['strfunctionname'] = 'Nume funcţie'; + $lang['strreturns'] = 'Întoarce'; + $lang['strproglanguage'] = 'Limbaj de programare'; + $lang['strfunctionneedsname'] = 'Specificaţi un nume pentru funcţie.'; + $lang['strfunctionneedsdef'] = 'Specificaţi o definiţie pentru functie.'; + $lang['strfunctioncreated'] = 'Funcţie creată.'; + $lang['strfunctioncreatedbad'] = 'Creare funcţie eşuată.'; + $lang['strconfdropfunction'] = 'Sigur ştergeţi funcţia "%s"?'; + $lang['strfunctiondropped'] = 'Funcţie ştearsă.'; + $lang['strfunctiondroppedbad'] = 'Ştergere funcţie eşuată.'; + $lang['strfunctionupdated'] = 'Funcţie actualizată.'; + $lang['strfunctionupdatedbad'] = 'Actualizare funcţie eşuată.'; + $lang['strobjectfile'] = 'Fişier obiect'; + $lang['strlinksymbol'] = 'Simbol de legătură'; + $lang['strarguments'] = 'Argumente'; + $lang['strargmode'] = 'Mod'; + $lang['strargtype'] = 'Tip'; + $lang['strargadd'] = 'Adăugare alt argument'; + $lang['strargremove'] = 'Eliminare argument'; + $lang['strargnoargs'] = 'Această funcţie nu acceptă nici un argument'; + $lang['strargenableargs'] = 'Activare argumente pasate acestei funcţii'; + $lang['strargnorowabove'] = 'Trebuie să existe un rând deasupra acestui rând'; + $lang['strargnorowbelow'] = 'Trebuie să existe un rând dedesubtul acestui rând'; + $lang['strargraise'] = 'Mutare în sus'; + $lang['strarglower'] = 'Mutare în jos'; + $lang['strargremoveconfirm'] = 'Sigur eliminaţi acest argument? Această acţiune NU poate fi revocată.'; + + // Triggers + $lang['strtrigger'] = 'Declanşator'; + $lang['strtriggers'] = 'Declanşatori'; + $lang['strshowalltriggers'] = 'Afişare toate declanşatoarele'; + $lang['strnotrigger'] = 'Nici un declanşator găsit.'; + $lang['strnotriggers'] = 'Nici un declanşator găsit.'; + $lang['strcreatetrigger'] = 'Creare declanşator'; + $lang['strtriggerneedsname'] = 'Specificaţi un nume pentru declanşator.'; + $lang['strtriggerneedsfunc'] = 'Specificaţi o funcţie pentru declanşator.'; + $lang['strtriggercreated'] = 'Declanşator creat.'; + $lang['strtriggercreatedbad'] = 'Creare declanşator eşuată.'; + $lang['strconfdroptrigger'] = 'Sigur ştergeţi declanşatorul "%s" de pe "%s"?'; + $lang['strconfenabletrigger'] = 'Sigur activaţi declanşatorul "%s" pentru "%s"?'; + $lang['strconfdisabletrigger'] = 'Sigur dezactivaţi declanşatorul "%s" pentru "%s"?'; + $lang['strtriggerdropped'] = 'Declanşator şters.'; + $lang['strtriggerdroppedbad'] = 'Ştergere declanşator eşuată.'; + $lang['strtriggerenabled'] = 'Declanşator activat'; + $lang['strtriggerenabledbad'] = 'Activare declanşator eşuată'; + $lang['strtriggerdisabled'] = 'Declanşator dezactivat'; + $lang['strtriggerdisabledbad'] = 'Dezactivare declanşator eşuată'; + $lang['strtriggeraltered'] = 'Declanşator modificat.'; + $lang['strtriggeralteredbad'] = 'Modificare declanşator eşuată.'; + $lang['strforeach'] = 'Pentru fiecare'; + + // Types + $lang['strtype'] = 'Tip'; + $lang['strtypes'] = 'Tipuri'; + $lang['strshowalltypes'] = 'Afişare toate tipurile'; + $lang['strnotype'] = 'Nici un tip găsit.'; + $lang['strnotypes'] = 'Nici un tip găsit.'; + $lang['strcreatetype'] = 'Creare tip'; + $lang['strcreatecomptype'] = 'Creare tip compus'; + $lang['strtypeneedsfield'] = 'Specificaţi cel puţin un câmp.'; + $lang['strtypeneedscols'] = 'Specificaţi un număr corect de cămpuri.'; + $lang['strtypename'] = 'Nume tip'; + $lang['strinputfn'] = 'Funcţie de intrare'; + $lang['stroutputfn'] = 'Funcţie de ieşire'; + $lang['strpassbyval'] = 'Transmis prin valoare?'; + $lang['stralignment'] = 'Aliniere'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Delimitator'; + $lang['strstorage'] = 'Stocare'; + $lang['strfield'] = 'Câmp'; + $lang['strnumfields'] = 'Număr de câmpuri'; + $lang['strtypeneedsname'] = 'Specificaţi un nume pentru tip.'; + $lang['strtypeneedslen'] = 'Specificaţi o lungime pentru tip.'; + $lang['strtypecreated'] = 'Tip creat.'; + $lang['strtypecreatedbad'] = 'Creare tip eşuată.'; + $lang['strconfdroptype'] = 'Sigur ştergeţi tipul "%s"?'; + $lang['strtypedropped'] = 'Tip şters.'; + $lang['strtypedroppedbad'] = 'Ştergere tip eşuată.'; + $lang['strflavor'] = 'Flavor'; + $lang['strbasetype'] = 'Bază'; + $lang['strcompositetype'] = 'Compus'; + $lang['strpseudotype'] = 'Pseudo'; + + // Schemas + $lang['strschema'] = 'Schemă'; + $lang['strschemas'] = 'Scheme'; + $lang['strshowallschemas'] = 'Afişare toate schemele'; + $lang['strnoschema'] = 'Nici o schemă găsită.'; + $lang['strnoschemas'] = 'Nici o schemă găsită.'; + $lang['strcreateschema'] = 'Creare schemă'; + $lang['strschemaname'] = 'Nume schemă'; + $lang['strschemaneedsname'] = 'Specificaţi un nume pentru schemă.'; + $lang['strschemacreated'] = 'Schemă creată.'; + $lang['strschemacreatedbad'] = 'Creare schemă eşuată.'; + $lang['strconfdropschema'] = 'Sigur ştergeţi schema "%s"?'; + $lang['strschemadropped'] = 'Schemă ştearsă.'; + $lang['strschemadroppedbad'] = 'Ştergere schemă eşuată.'; + $lang['strschemaaltered'] = 'Schemă modificată.'; + $lang['strschemaalteredbad'] = 'Modificare schemă eşuată.'; + $lang['strsearchpath'] = 'Cale de căutare pentru schemă'; + + // Reports + + // Domains + $lang['strdomain'] = 'Domeniu'; + $lang['strdomains'] = 'Domenii'; + $lang['strshowalldomains'] = 'Afişare toate domeniile'; + $lang['strnodomains'] = 'Nici un domeniu găsit.'; + $lang['strcreatedomain'] = 'Creare domeniu'; + $lang['strdomaindropped'] = 'Domeniu şters.'; + $lang['strdomaindroppedbad'] = 'Ştergere domeniu eşuată.'; + $lang['strconfdropdomain'] = 'Sigur ştergeţi domeniul "%s"?'; + $lang['strdomainneedsname'] = 'Specificaţi un nume pentru domeniu.'; + $lang['strdomaincreated'] = 'Domeniu creat.'; + $lang['strdomaincreatedbad'] = 'Creare domeniu eşuată.'; + $lang['strdomainaltered'] = 'Domeniu modificat.'; + $lang['strdomainalteredbad'] = 'Modificare domeniu eşuată.'; + + // Operators + $lang['stroperator'] = 'Operator'; + $lang['stroperators'] = 'Operatori'; + $lang['strshowalloperators'] = 'Afişare toţi operatorii'; + $lang['strnooperator'] = 'Nici un operator găsit.'; + $lang['strnooperators'] = 'Nici un operator găsit.'; + $lang['strcreateoperator'] = 'Creare operator'; + $lang['strleftarg'] = 'Tipul argumentului stâng'; + $lang['strrightarg'] = 'Tipul argumentului drept'; + $lang['strcommutator'] = 'Comutator'; + $lang['strnegator'] = 'Negator'; + $lang['strrestrict'] = 'Restrict'; + $lang['strjoin'] = 'Relaţionare'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Îmbină'; + $lang['strleftsort'] = 'Sortare stânga'; + $lang['strrightsort'] = 'Sortare dreapta'; + $lang['strlessthan'] = 'Mai mic decăt'; + $lang['strgreaterthan'] = 'Mai mare decăt'; + $lang['stroperatorneedsname'] = 'Specificaţi un nume pentru operator.'; + $lang['stroperatorcreated'] = 'Operator creat.'; + $lang['stroperatorcreatedbad'] = 'Creare operator eşuată.'; + $lang['strconfdropoperator'] = 'Sigur ştergeţi operatorul "%s"?'; + $lang['stroperatordropped'] = 'Operator şters.'; + $lang['stroperatordroppedbad'] = 'Ştergere operator eşuată.'; + + // Casts + $lang['strcasts'] = 'Conversii de tip'; + $lang['strnocasts'] = 'Nici o conversie de tip găsită.'; + $lang['strsourcetype'] = 'Tip sursă'; + $lang['strtargettype'] = 'Tip destinaţie'; + $lang['strimplicit'] = 'Implicit'; + $lang['strinassignment'] = 'În alocare'; + $lang['strbinarycompat'] = '(Compatibil binar)'; + + // Conversions + $lang['strconversions'] = 'Conversii'; + $lang['strnoconversions'] = 'Nici o conversie găsită.'; + $lang['strsourceencoding'] = 'Codificare sursă'; + $lang['strtargetencoding'] = 'Codificare destinaţie'; + + // Languages + $lang['strlanguages'] = 'Limbaje'; + $lang['strnolanguages'] = 'Nici un limbaj găsit.'; + $lang['strtrusted'] = 'Sigur'; + + // Info + $lang['strnoinfo'] = 'Nici o informaţie disponibilă.'; + $lang['strreferringtables'] = 'Tabele referite'; + $lang['strparenttables'] = 'Tabele părinte'; + $lang['strchildtables'] = 'Tabele copii'; + + // Aggregates + $lang['straggregate'] = 'Agregare'; + $lang['straggregates'] = 'Agregări'; + $lang['strnoaggregates'] = 'Nici o agregare găsită.'; + $lang['stralltypes'] = '(Toate tipurile)'; + $lang['straggrtransfn'] = 'Funcţie de tranziţie'; + $lang['strcreateaggregate'] = 'Creare agregare'; + $lang['straggrbasetype'] = 'Tip dată de intrare'; + $lang['straggrsfunc'] = 'Funcţie tranziţie de stare'; + $lang['straggrffunc'] = 'Funcţie finală'; + $lang['straggrinitcond'] = 'Condiţie iniţială'; + $lang['straggrsortop'] = 'Operator sortare'; + $lang['strdropaggregate'] = 'Ştergere agregare'; + $lang['strconfdropaggregate'] = 'Sigur ştergeţi agregarea "%s"?'; + $lang['straggregatedropped'] = 'Agregare ştearsă.'; + $lang['straggregatedroppedbad'] = 'Ştergere agregare eşuată.'; + $lang['stralteraggregate'] = 'Modificare agregare'; + $lang['straggraltered'] = 'Agregare modificată.'; + $lang['straggralteredbad'] = 'Modificare agregare eşuată.'; + $lang['straggrneedsname'] = 'Specificaţi un nume pentru agregare'; + $lang['straggrneedsbasetype'] = 'Specificaţi tipul de dată de intrare pentru agregare'; + $lang['straggrneedssfunc'] = 'Specificaţi numele funcţiei tranziţiei de stare pentru agregare'; + $lang['straggrneedsstype'] = 'Specificaţi tipul datei pentru valoarea stării agregării'; + $lang['straggrcreated'] = 'Agregare creată.'; + $lang['straggrcreatedbad'] = 'Creare agregare eşuată.'; + $lang['straggrshowall'] = 'Afişare toate agregările'; + + // Operator Classes + $lang['stropclasses'] = 'Clase de operatori'; + $lang['strnoopclasses'] = 'Nici o clasă de operatori găsită.'; + $lang['straccessmethod'] = 'Metodă de acces'; + + // Stats and performance + $lang['strrowperf'] = 'Performanţă rând'; + $lang['strioperf'] = 'Performanţă I/O'; + $lang['stridxrowperf'] = 'Performanţă index/rând'; + $lang['stridxioperf'] = 'Performanţă index I/O'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Secvenţial'; + $lang['strscan'] = 'Scanare'; + $lang['strread'] = 'Citire'; + $lang['strfetch'] = 'Transfer'; + $lang['strheap'] = 'Stivă'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'Index TOAST'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disc'; + $lang['strrows2'] = 'Rânduri'; + + // Tablespaces + $lang['strtablespace'] = 'Spaţiu de tabele'; + $lang['strtablespaces'] = 'Spaţii de tabele'; + $lang['strshowalltablespaces'] = 'Afişare toate spaţiile de tabele'; + $lang['strnotablespaces'] = 'Nici un spaţiu de tabele găsit.'; + $lang['strcreatetablespace'] = 'Creare spaţiu de tabele'; + $lang['strlocation'] = 'Locaţie'; + $lang['strtablespaceneedsname'] = 'Specificaţi un nume pentru spaţiul de tabele.'; + $lang['strtablespaceneedsloc'] = 'Specificaţi directorul în care va fi creat spaţiul de tabele.'; + $lang['strtablespacecreated'] = 'Spaţiu de tabele creat.'; + $lang['strtablespacecreatedbad'] = 'Creare spaţiu de tabele eşuată.'; + $lang['strconfdroptablespace'] = 'Sigur ştergeţi spaţiul de tabele "%s"?'; + $lang['strtablespacedropped'] = 'Spaţiu de tabele şters.'; + $lang['strtablespacedroppedbad'] = 'Ştergere şpaţiu de tabele eşuată.'; + $lang['strtablespacealtered'] = 'Spaţiu de tabele modificat.'; + $lang['strtablespacealteredbad'] = 'Modificare şpaţiu de tabele eşuată.'; + + // Miscellaneous + $lang['strtopbar'] = '%s rulând pe %s:%s -- Sunteţi autentificat ca utilizator "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Ajutor'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Pagini de ajutor'; + $lang['strselecthelppage'] = 'Selectaţi o pagină de ajutor'; + $lang['strinvalidhelppage'] = 'Pagină de ajutor incorectă.'; + $lang['strlogintitle'] = 'Autentificare la %s'; + $lang['strlogoutmsg'] = 'Ieşire din %s'; + $lang['strloading'] = 'Încărcare...'; + $lang['strerrorloading'] = 'Eroare la încărcare'; + $lang['strclicktoreload'] = 'Faceţi clic pentru reîncărcare'; + + // Autovacuum + $lang['strautovacuum'] = 'Autovacuum'; + $lang['strturnedon'] = 'Pornit'; + $lang['strturnedoff'] = 'Oprit'; + $lang['strenabled'] = 'Activat'; + $lang['strvacuumbasethreshold'] = 'Vacuum Base Threshold'; + $lang['strvacuumscalefactor'] = 'Vacuum Scale Factor'; + $lang['stranalybasethreshold'] = 'Analyze Base Threshold'; + $lang['stranalyzescalefactor'] = 'Analyze Scale Factor'; + $lang['strvacuumcostdelay'] = 'Vacuum Cost Delay'; + $lang['strvacuumcostlimit'] = 'Vacuum Cost Limit'; + + // Table-level Locks + $lang['strlocks'] = 'Blocări'; + $lang['strtransaction'] = 'ID tranzacţie'; + $lang['strprocessid'] = 'ID proces'; + $lang['strmode'] = 'Mod blocare'; + $lang['strislockheld'] = 'Blocaj reţinut?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Tranzacţii preparate'; + $lang['strxactid'] = 'ID tranzacţie'; + $lang['strgid'] = 'ID global'; + + + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/russian-utf8.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/russian-utf8.php new file mode 100644 index 00000000..12cd7710 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/russian-utf8.php @@ -0,0 +1,894 @@ +<?php + + /** + * Russian UTF-8 language file for phpPgAdmin. + * based on translation of Alexander Khodorivsky [askh@ukr.net] + * @maintainer Alexey Baturin [alexey.baturin.nsk@gmail.com] + * + * $Id: russian.php,v 1.12 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Русский (UTF-8)'; + $lang['applocale'] = 'ru-RU.UTF-8'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Добро пожаловать в phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmin - домашняя страница'; + $lang['strpgsqlhome'] = 'PostgreSQL - домашняя страница'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL - документация (локально)'; + $lang['strreportbug'] = 'Отчет об ошибках'; + $lang['strviewfaq'] = 'Просмотр онлайн FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Вход'; + $lang['strloginfailed'] = 'Ошибка входа'; + $lang['strlogindisallowed'] = 'Вход невозможен по соображениям безопасности'; + $lang['strserver'] = 'Сервер'; + $lang['strservers'] = 'Серверы'; + $lang['strgroupservers'] = 'Серверы в группе "%s"'; + $lang['strallservers'] = 'Все серверы'; + $lang['strintroduction'] = 'Введение'; + $lang['strhost'] = 'Хост'; + $lang['strport'] = 'Порт'; + $lang['strlogout'] = 'Выход'; + $lang['strowner'] = 'Владелец'; + $lang['straction'] = 'Действие'; + $lang['stractions'] = 'Действия'; + $lang['strname'] = 'Имя'; + $lang['strdefinition'] = 'Определение'; + $lang['strproperties'] = 'Свойства'; + $lang['strbrowse'] = 'Просмотреть'; + $lang['strenable'] = 'Включить'; + $lang['strdisable'] = 'Выключить'; + $lang['strdrop'] = 'Удалить'; + $lang['strdropped'] = 'Удалено'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Not Null'; + $lang['strprev'] = '< Пред'; + $lang['strnext'] = 'След. >'; + $lang['strfirst'] = '<< Перв.'; + $lang['strlast'] = 'Посл. >>'; + $lang['strfailed'] = 'Прервано'; + $lang['strcreate'] = 'Создать'; + $lang['strcreated'] = 'Создано'; + $lang['strcomment'] = 'Комментарий'; + $lang['strlength'] = 'Длина'; + $lang['strdefault'] = 'По умолчанию'; + $lang['stralter'] = 'Изменить'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Отменить'; + $lang['strkill'] = 'Убить'; + $lang['strac'] = 'Включить автодополнение'; + $lang['strsave'] = 'Сохранить'; + $lang['strreset'] = 'Сбросить'; + $lang['strinsert'] = 'Вставить'; + $lang['strselect'] = 'Выбрать'; + $lang['strdelete'] = 'Удалить'; + $lang['strupdate'] = 'Обновить'; + $lang['strreferences'] = 'Ссылки'; + $lang['stryes'] = 'Да'; + $lang['strno'] = 'Нет'; + $lang['strtrue'] = 'Истина'; + $lang['strfalse'] = 'Ложь'; + $lang['stredit'] = 'Редактировать'; + $lang['strcolumn'] = 'Атрибут'; + $lang['strcolumns'] = 'Атрибуты'; + $lang['strrows'] = 'запис(ь/и/ей)'; + $lang['strrowsaff'] = 'запис(ь/и/ей) обработано.'; + $lang['strobjects'] = 'объект(а/ов)'; + $lang['strback'] = 'Назад'; + $lang['strqueryresults'] = 'Результаты запроса'; + $lang['strshow'] = 'Показать'; + $lang['strempty'] = 'Очистить'; + $lang['strlanguage'] = 'Язык'; + $lang['strencoding'] = 'Кодировка'; + $lang['strvalue'] = 'Значение'; + $lang['strunique'] = 'Уникальный'; + $lang['strprimary'] = 'Первичный'; + $lang['strexport'] = 'Экспорт'; + $lang['strimport'] = 'Импорт'; + $lang['strallowednulls'] = 'Разрешенные NULL-символы'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Пустая строка/поле'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Управление'; + $lang['strvacuum'] = 'Перестроить'; + $lang['stranalyze'] = 'Анализировать'; + $lang['strclusterindex'] = 'Кластеризовать'; + $lang['strclustered'] = 'Кластеризован?'; + $lang['strreindex'] = 'Перестроить индекс'; + $lang['strexecute'] = 'Выполнить'; + $lang['stradd'] = 'Добавить'; + $lang['strevent'] = 'Событие'; + $lang['strwhere'] = 'Где'; + $lang['strinstead'] = 'Делать вместо'; + $lang['strwhen'] = 'Когда'; + $lang['strformat'] = 'Формат'; + $lang['strdata'] = 'Данные'; + $lang['strconfirm'] = 'Подтвердить'; + $lang['strexpression'] = 'Выражение'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Расширить'; + $lang['strcollapse'] = 'Свернуть'; + $lang['strfind'] = 'Найти'; + $lang['stroptions'] = 'Опции'; + $lang['strrefresh'] = 'Обновить'; + $lang['strdownload'] = 'Загрузить'; + $lang['strdownloadgzipped'] = 'Загрузить архив gzip'; + $lang['strinfo'] = 'Сведения'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Дополнительно'; + $lang['strvariables'] = 'Переменные'; + $lang['strprocess'] = 'Процесс'; + $lang['strprocesses'] = 'Процессы'; + $lang['strsetting'] = 'Опции'; + $lang['streditsql'] = 'Редактировать SQL'; + $lang['strruntime'] = 'Время выполнения: %s мсек'; + $lang['strpaginate'] = 'Нумеровать страницы с результатами'; + $lang['struploadscript'] = 'или загрузить SQL-скрипт:'; + $lang['strstarttime'] = 'Время начала'; + $lang['strfile'] = 'Файл'; + $lang['strfileimported'] = 'Файл импортирован.'; + $lang['strtrycred'] = 'Использовать эти данные аутентификации для всех серверов'; + $lang['strconfdropcred'] = 'В целях безопасности отключение уничтожит общую аутентификационную информацию. Вы действительно хотите отключится?'; + $lang['stractionsonmultiplelines'] = 'Действия над несколькими строками.'; + $lang['strselectall'] = 'Выбрать все'; + $lang['strunselectall'] = 'Отменить выбор всех'; + $lang['strlocale'] = 'Локаль'; + $lang['strcollation'] = 'Порядок сортировки строк (LC_COLLATE)'; + $lang['strctype'] = 'Классификация символов (LC_CTYPE)'; + $lang['strdefaultvalues'] = 'Значения по умолчанию'; + $lang['strnewvalues'] = 'Новые значения'; + $lang['strstart'] = 'Запустить автоматическое обновление'; + $lang['strstop'] = 'Остановить автоматическое обновление'; + $lang['strgotoppage'] = 'вверх'; + $lang['strtheme'] = 'Тема'; + $lang['strcluster'] = 'Кластер'; + + // Admin + $lang['stradminondatabase'] = 'Следующие административные задачи применяются ко всей базе данных %s.'; + $lang['stradminontable'] = 'Следующие административные задачи применяются к таблице %s.'; + + // User-supplied SQL history + $lang['strhistory'] = 'История'; + $lang['strnohistory'] = 'Нет истории.'; + $lang['strclearhistory'] = 'Очистить историю'; + $lang['strdelhistory'] = 'Удалить из истории'; + $lang['strconfdelhistory'] = 'Вы действительно хотите удалить этот запрос из истории?'; + $lang['strconfclearhistory'] = 'Вы действительно хотите очистить историю?'; + $lang['strnodatabaseselected'] = 'Пожалуйста, выберете базу данных.'; + + // Database sizes + $lang['strnoaccess'] = 'Нет доступа'; + $lang['strsize'] = 'Размер'; + $lang['strbytes'] = 'байт'; + $lang['strkb'] = 'кБ'; + $lang['strmb'] = 'МБ'; + $lang['strgb'] = 'ГБ'; + $lang['strtb'] = 'ТБ'; + + // Error handling + $lang['strnoframes'] = 'Это приложение лучше всего работает в браузере, который поддерживает фреймы, но оно может работать и без использования фреймов если перейти по ссылке ниже.'; + $lang['strnoframeslink'] = 'Использовать без фреймов'; + $lang['strbadconfig'] = 'Ваш config.inc.php является устаревшим. Вам необходимо обновить его из config.inc.php-dist.'; + $lang['strnotloaded'] = 'Ваша инсталяция PHP не поддерживает PostgreSQL. Вам необходимо пересобрать PHP, используя параметр --with-pgsql для configure.'; + $lang['strpostgresqlversionnotsupported'] = 'Версия PostgreSQL не поддерживается. Пожалуйста, обновитесь до версии %s или более поздней.'; + $lang['strbadschema'] = 'Обнаружена неверная схема.'; + $lang['strbadencoding'] = 'Ошибка при установке кодировки клиента (client encoding).'; + $lang['strsqlerror'] = 'Ошибка SQL:'; + $lang['strinstatement'] = 'В операторе:'; + $lang['strinvalidparam'] = 'Неверный параметр скрипта.'; + $lang['strnodata'] = 'Данных не найдено.'; + $lang['strnoobjects'] = 'Объектов не найдено.'; + $lang['strrownotunique'] = 'Нет уникального идентификатора для этой записи.'; + $lang['strnouploads'] = 'Загрузка файла невозможна.'; + $lang['strimporterror'] = 'Ошибка импорта.'; + $lang['strimporterror-fileformat'] = 'Ошибка импорта: Невозможно автоматически определить формат файла.'; + $lang['strimporterrorline'] = 'Ошибка канала при импорте %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Ошибка импорта в строке %s: Строка не обладает необходимым числом атрибутов.'; + $lang['strimporterror-uploadedfile'] = 'Ошибка импорта: Файл не может быть загружен на сервер'; + $lang['strcannotdumponwindows'] = 'Экспорт таблиц и схем со сложными именами в Windows не поддерживается.'; + $lang['strinvalidserverparam'] = 'Попытка соединения с некорректным значением параметра "сервер", возможно кто-то пытается взломать вашу систему.'; + $lang['strnoserversupplied'] = 'Значение параметра "сервер" не представлено!'; + $lang['strbadpgdumppath'] = 'Ошибка экспорта: Невозможно выполнить pg_dump (указанный в conf/config.inc.php путь: %s). Пожалуйста, исправте этот путь в конфигурации и заново войдите в систему.'; + $lang['strbadpgdumpallpath'] = 'Ошибка экспорта: Невозможно выполнить pg_dumpall (указанный в conf/config.inc.php путь: %s). Пожалуйста, исправте этот путь в конфигурации и заново войдите в систему.'; + $lang['strconnectionfail'] = 'Ошибка подключения к серверу.'; + + // Tables + $lang['strtable'] = 'Таблица'; + $lang['strtables'] = 'Таблицы'; + $lang['strshowalltables'] = 'Показать все таблицы'; + $lang['strnotables'] = 'Таблиц не найдено.'; + $lang['strnotable'] = 'Таблица не обнаружена.'; + $lang['strcreatetable'] = 'Создать таблицу'; + $lang['strcreatetablelike'] = 'Создать таблицу наподобие'; + $lang['strcreatetablelikeparent'] = 'Исходная таблица'; + $lang['strcreatelikewithdefaults'] = 'включить значения по умолчанию'; + $lang['strcreatelikewithconstraints'] = 'включить ограничения'; + $lang['strcreatelikewithindexes'] = 'включить индексы'; + $lang['strtablename'] = 'Имя таблицы'; + $lang['strtableneedsname'] = 'Вам необходимо определить имя таблицы.'; + $lang['strtablelikeneedslike'] = 'Вам необходимо определить исходную таблицу.'; + $lang['strtableneedsfield'] = 'Вам необходимо определить по крайней мере одно поле.'; + $lang['strtableneedscols'] = 'Вам необходимо указать допустимое число атрибутов.'; + $lang['strtablecreated'] = 'Таблица создана.'; + $lang['strtablecreatedbad'] = 'Создание таблицы прервано.'; + $lang['strconfdroptable'] = 'Вы уверены, что хотите удалить таблицу "%s"?'; + $lang['strtabledropped'] = 'Таблица удалена.'; + $lang['strtabledroppedbad'] = 'Удаление таблицы прервано.'; + $lang['strconfemptytable'] = 'Вы уверены, что хотите очистить таблицу "%s"?'; + $lang['strtableemptied'] = 'Таблица очищена.'; + $lang['strtableemptiedbad'] = 'Очистка таблицы прервана.'; + $lang['strinsertrow'] = 'Добавить запись'; + $lang['strrowinserted'] = 'Запись добавлена.'; + $lang['strrowinsertedbad'] = 'Добавление записи прервано.'; + $lang['strnofkref'] = 'Нет соответствующего значения внешнего ключа %s.'; + $lang['strrowduplicate'] = 'Вставка строки прервана, попытка сделать дублирующую вставку.'; + $lang['streditrow'] = 'Редактировать запись'; + $lang['strrowupdated'] = 'Запись обновлена.'; + $lang['strrowupdatedbad'] = 'Обновление записи прервано.'; + $lang['strdeleterow'] = 'Удалить запись'; + $lang['strconfdeleterow'] = 'Вы уверены, что хотите удалить запись?'; + $lang['strrowdeleted'] = 'Запись удалена.'; + $lang['strrowdeletedbad'] = 'Удаление записи прервано.'; + $lang['strinsertandrepeat'] = 'Вставить и повторить'; + $lang['strnumcols'] = 'Количество атрибутов'; + $lang['strcolneedsname'] = 'Вам необходимо определить имя столбца'; + $lang['strselectallfields'] = 'Выбрать все поля'; + $lang['strselectneedscol'] = 'Вам необходимо указать по крайней мере один атрибут'; + $lang['strselectunary'] = 'Унарный оператор не может иметь величину.'; + $lang['strcolumnaltered'] = 'Атрибут изменен.'; + $lang['strcolumnalteredbad'] = 'Изменение атрибута прервано.'; + $lang['strconfdropcolumn'] = 'Вы уверены, что хотите удалить атрибут "%s" таблицы "%s"?'; + $lang['strcolumndropped'] = 'Атрибут удален.'; + $lang['strcolumndroppedbad'] = 'Удаление атрибута прервано.'; + $lang['straddcolumn'] = 'Добавить атрибут'; + $lang['strcolumnadded'] = 'Атрибут добавлен.'; + $lang['strcolumnaddedbad'] = 'Добавление атрибута прервано.'; + $lang['strcascade'] = 'Каскадом'; + $lang['strtablealtered'] = 'Таблица изменена.'; + $lang['strtablealteredbad'] = 'Изменение таблицы прервано.'; + $lang['strdataonly'] = 'Только данные'; + $lang['strstructureonly'] = 'Только структуру'; + $lang['strstructureanddata'] = 'Структуру и данные'; + $lang['strtabbed'] = 'Через табуляцию'; + $lang['strauto'] = 'Авто'; + $lang['strconfvacuumtable'] = 'Вы действительно хотите перестроить "%s"?'; + $lang['strconfanalyzetable'] = 'Вы действительно хотите произвести анализ "%s"?'; + $lang['strconfreindextable'] = 'Вы действительно хотите перестроить индекс "%s"?'; + $lang['strconfclustertable'] = 'Вы действительно хотите кластеризовать "%s"?'; + $lang['strestimatedrowcount'] = 'Предполагаемое число строк'; + $lang['strspecifytabletoanalyze'] = 'Вам необходимо указать как минимум одну таблицу для анализа.'; + $lang['strspecifytabletoempty'] = 'Вам необходимо указать как минимум одну таблицу для очистки.'; + $lang['strspecifytabletodrop'] = 'Вам необходимо указать как минимум одну таблицу для удаления.'; + $lang['strspecifytabletovacuum'] = 'Вам необходимо указать как минимум одну таблицу для перестроения.'; + $lang['strspecifytabletoreindex'] = 'Вам необходимо указать как минимум одну таблицу для перестроения индекса.'; + $lang['strspecifytabletocluster'] = 'Вам необходимо указать как минимум одну таблицу для кластеризации.'; + $lang['strnofieldsforinsert'] = 'Вы не можете вставить строку в таблицу без столбцов.'; + + // Columns + $lang['strcolprop'] = 'Свойства столбца'; + $lang['strnotableprovided'] = 'Значение параметра "таблица" не представлено!'; + + // Users + $lang['struser'] = 'Пользователь'; + $lang['strusers'] = 'Пользователи'; + $lang['strusername'] = 'Имя пользователя'; + $lang['strpassword'] = 'Пароль'; + $lang['strsuper'] = 'Суперпользователь?'; + $lang['strcreatedb'] = 'Создать базу данных?'; + $lang['strexpires'] = 'Срок действия'; + $lang['strsessiondefaults'] = 'Опции сеанса по умолчанию'; + $lang['strnousers'] = 'Нет таких пользователей.'; + $lang['struserupdated'] = 'Пользователь обновлен.'; + $lang['struserupdatedbad'] = 'Обновление пользователя прервано.'; + $lang['strshowallusers'] = 'Показать всех пользователей'; + $lang['strcreateuser'] = 'Создать пользователя'; + $lang['struserneedsname'] = 'Вы должны ввести имя пользователя.'; + $lang['strusercreated'] = 'Пользователь создан.'; + $lang['strusercreatedbad'] = 'Создание пользователя прервано.'; + $lang['strconfdropuser'] = 'Вы уверены, что хотите удалить пользователя "%s"?'; + $lang['struserdropped'] = 'Пользователь удален.'; + $lang['struserdroppedbad'] = 'Удаление пользователя прервано.'; + $lang['straccount'] = 'Аккаунт'; + $lang['strchangepassword'] = 'Изменить пароль'; + $lang['strpasswordchanged'] = 'Пароль изменен.'; + $lang['strpasswordchangedbad'] = 'Изменение пароля прервано.'; + $lang['strpasswordshort'] = 'Пароль слишком короткий.'; + $lang['strpasswordconfirm'] = 'Пароль не соответствует подтверждению.'; + + // Groups + $lang['strgroup'] = 'Группа'; + $lang['strgroups'] = 'Группы'; + $lang['strshowallgroups'] = 'Показать все группы'; + $lang['strnogroup'] = 'Группа не обнаружена.'; + $lang['strnogroups'] = 'Ни одной группы не найдено.'; + $lang['strcreategroup'] = 'Создать группу'; + $lang['strgroupneedsname'] = 'Вам необходимо указать название группы.'; + $lang['strgroupcreated'] = 'Группа создана.'; + $lang['strgroupcreatedbad'] = 'Создание группы прервано.'; + $lang['strconfdropgroup'] = 'Вы уверены, что хотите удалить группу "%s"?'; + $lang['strgroupdropped'] = 'Группа удалена.'; + $lang['strgroupdroppedbad'] = 'Удаление группы прервано.'; + $lang['strmembers'] = 'Участников'; + $lang['strmemberof'] = 'Добавить в роли'; + $lang['stradminmembers'] = 'Admin-участников'; + $lang['straddmember'] = 'Добавить участника'; + $lang['strmemberadded'] = 'Участник добавлен.'; + $lang['strmemberaddedbad'] = 'Добавление участника прервано.'; + $lang['strdropmember'] = 'Удалить участника'; + $lang['strconfdropmember'] = 'Вы уверены, что хотите удалить участника "%s" из группы "%s"?'; + $lang['strmemberdropped'] = 'Участник удален.'; + $lang['strmemberdroppedbad'] = 'Удаление участника прервано.'; + + // Roles + $lang['strrole'] = 'Роль'; + $lang['strroles'] = 'Роли'; + $lang['strshowallroles'] = 'Показать все роли'; + $lang['strnoroles'] = 'Роли не найдены.'; + $lang['strinheritsprivs'] = 'Наследовать привилегии?'; + $lang['strcreaterole'] = 'Создать роль'; + $lang['strcancreaterole'] = 'Может создавать роли?'; + $lang['strrolecreated'] = 'Роль создана.'; + $lang['strrolecreatedbad'] = 'Создание роли прервано.'; + $lang['strrolealtered'] = 'Роль изменена.'; + $lang['strrolealteredbad'] = 'Изменение роли прервано.'; + $lang['strcanlogin'] = 'Может логиниться?'; + $lang['strconnlimit'] = 'Лимит соединений'; + $lang['strdroprole'] = 'Удалить роль'; + $lang['strconfdroprole'] = 'Вы действительно хотите удалить роль "%s"?'; + $lang['strroledropped'] = 'Роль удалена.'; + $lang['strroledroppedbad'] = 'Удаление роли прервано.'; + $lang['strnolimit'] = 'Без ограничений'; + $lang['strnever'] = 'Никогда'; + $lang['strroleneedsname'] = 'Вам необходимо определить имя роли.'; + + // Privileges + $lang['strprivilege'] = 'Привилегия'; + $lang['strprivileges'] = 'Привилегии'; + $lang['strnoprivileges'] = 'Объект не имеет привилегий.'; + $lang['strgrant'] = 'Усилить'; + $lang['strrevoke'] = 'Ослабить'; + $lang['strgranted'] = 'Привилегии изменены.'; + $lang['strgrantfailed'] = 'Изменение привилегий прервано.'; + $lang['strgrantbad'] = 'Вам необходимо указать хотя бы одного пользователя или группу и хотя бы одну привилегию.'; + $lang['strgrantor'] = 'Донор'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'База данных'; + $lang['strdatabases'] = 'Базы данных'; + $lang['strshowalldatabases'] = 'Показать все базы данных'; + $lang['strnodatabases'] = 'Ни одной базы данных не найдено.'; + $lang['strcreatedatabase'] = 'Создать базу данных'; + $lang['strdatabasename'] = 'Имя базы данных'; + $lang['strdatabaseneedsname'] = 'Вам необходимо присвоить имя Вашей базе данных.'; + $lang['strdatabasecreated'] = 'База данных создана.'; + $lang['strdatabasecreatedbad'] = 'Создание базы данных прервано.'; + $lang['strconfdropdatabase'] = 'Вы уверены, что хотите уничтожить базу данных "%s"?'; + $lang['strdatabasedropped'] = 'База данных уничтожена.'; + $lang['strdatabasedroppedbad'] = 'Уничтожение базы данных прервано.'; + $lang['strentersql'] = 'Введите SQL-запрос ниже:'; + $lang['strsqlexecuted'] = 'SQL-запрос выполнен.'; + $lang['strvacuumgood'] = 'Операция перестроения завершена.'; + $lang['strvacuumbad'] = 'Операция перестроения прервана.'; + $lang['stranalyzegood'] = 'Операция анализа завершена.'; + $lang['stranalyzebad'] = 'Операция анализа прервана.'; + $lang['strreindexgood'] = 'Переиндексация завершена.'; + $lang['strreindexbad'] = 'Переиндексация прервана.'; + $lang['strfull'] = 'Полностью'; + $lang['strfreeze'] = 'Заморозить'; + $lang['strforce'] = 'Принудительно'; + $lang['strsignalsent'] = 'Сигнал отправлен.'; + $lang['strsignalsentbad'] = 'Отправка сигнала прервана.'; + $lang['strallobjects'] = 'Все объекты'; + $lang['strdatabasealtered'] = 'База данных изменена.'; + $lang['strdatabasealteredbad'] = 'Изменение базы данных прервано.'; + $lang['strspecifydatabasetodrop'] = 'Вам необходимо указать как минимум одну базу данных для удаления.'; + $lang['strtemplatedb'] = 'Шаблон'; + $lang['strconfanalyzedatabase'] = 'Вы действительно хотите анализировать все таблицы в базе данных "%s"?'; + $lang['strconfvacuumdatabase'] = 'Вы действительно хотите перестроить все таблицы в базе данных "%s"?'; + $lang['strconfreindexdatabase'] = 'Вы действительно хотите перестроить индекс всех таблиц в базе данных "%s"?'; + $lang['strconfclusterdatabase'] = 'Вы действительно хотите кластеризовать все таблицы в базе данных "%s"?'; + + // Views + $lang['strview'] = 'Представление'; + $lang['strviews'] = 'Представления'; + $lang['strshowallviews'] = 'Показать все представления'; + $lang['strnoview'] = 'Представление не найдено.'; + $lang['strnoviews'] = 'Ни одного представления не найдено.'; + $lang['strcreateview'] = 'Создать представление'; + $lang['strviewname'] = 'Имя представления'; + $lang['strviewneedsname'] = 'Вам необходимо указать имя представления.'; + $lang['strviewneedsdef'] = 'Вам необходимо определить атрибуты представления.'; + $lang['strviewneedsfields'] = 'Вам необходимо определить атрибуты для выборки в ваше представление.'; + $lang['strviewcreated'] = 'Представление создано.'; + $lang['strviewcreatedbad'] = 'Создание представления прервано.'; + $lang['strconfdropview'] = 'Вы уверены, что хотите уничтожить представление "%s"?'; + $lang['strviewdropped'] = 'Представление уничтожено.'; + $lang['strviewdroppedbad'] = 'Уничтожение представления прервано.'; + $lang['strviewupdated'] = 'Представление обновлено.'; + $lang['strviewupdatedbad'] = 'Обновление представления прервано.'; + $lang['strviewlink'] = 'Связанные ключи'; + $lang['strviewconditions'] = 'Дополнительные условия'; + $lang['strcreateviewwiz'] = 'Создать представление помощником'; + $lang['strrenamedupfields'] = 'Переименовывать поля-дубликаты'; + $lang['strdropdupfields'] = 'Удалять поля-дубликаты'; + $lang['strerrordupfields'] = 'Ошибка при появлении полей-дубликатов'; + $lang['strviewaltered'] = 'Представление изменено.'; + $lang['strviewalteredbad'] = 'Изменение представления прервано.'; + $lang['strspecifyviewtodrop'] = 'Вам необходимо определить как минимум одно представление для удаления.'; + + // Sequences + $lang['strsequence'] = 'Последовательность'; + $lang['strsequences'] = 'Последовательности'; + $lang['strshowallsequences'] = 'Показать все последовательности'; + $lang['strnosequence'] = 'Последовательность не обнаружена.'; + $lang['strnosequences'] = 'Ни одной последовательности не найдено.'; + $lang['strcreatesequence'] = 'Создать последовательность'; + $lang['strlastvalue'] = 'Последнее значение'; + $lang['strincrementby'] = 'Увеличение на'; + $lang['strstartvalue'] = 'Начальное значение'; + $lang['strmaxvalue'] = 'Макс. величина'; + $lang['strminvalue'] = 'Мин. величина'; + $lang['strcachevalue'] = 'Размер кэша'; + $lang['strlogcount'] = 'Log Count'; + $lang['strcancycle'] = 'Может зацикливаться?'; + $lang['striscalled'] = 'Увеличит последнее значение после получения следующего значения (is_called)?'; + $lang['strsequenceneedsname'] = 'Вам необходимо указать имя последовательности.'; + $lang['strsequencecreated'] = 'Последовательность создана.'; + $lang['strsequencecreatedbad'] = 'Создание последовательности прервано.'; + $lang['strconfdropsequence'] = 'Вы уверены, что хотите уничтожить последовательность "%s"?'; + $lang['strsequencedropped'] = 'Последовательность уничтожена.'; + $lang['strsequencedroppedbad'] = 'Уничтожение последовательности прервано.'; + $lang['strsequencereset'] = 'Последовательность сброшена.'; + $lang['strsequenceresetbad'] = 'Сброс последовательности прерван.'; + $lang['strsequencealtered'] = 'Последовательность изменена.'; + $lang['strsequencealteredbad'] = 'Изменение последовательности прервано.'; + $lang['strsetval'] = 'Установить значение'; + $lang['strsequencesetval'] = 'Значение последовательности установлено.'; + $lang['strsequencesetvalbad'] = 'Изменение значения последовательности прервано.'; + $lang['strnextval'] = 'Инкрементировать значение'; + $lang['strsequencenextval'] = 'Значение последовательности инкрементировано.'; + $lang['strsequencenextvalbad'] = 'Инкрементирование значения последовательности прервано.'; + $lang['strspecifysequencetodrop'] = 'Вам необходимо указать как минимун одну последовательность для удаления.'; + + // Indexes + $lang['strindex'] = 'Индекс'; + $lang['strindexes'] = 'Индексы'; + $lang['strindexname'] = 'Имя индекса'; + $lang['strshowallindexes'] = 'Показать все индексы'; + $lang['strnoindex'] = 'Индекс не обнаружен.'; + $lang['strnoindexes'] = 'Ни одного индекса не найдено.'; + $lang['strcreateindex'] = 'Создать индекс'; + $lang['strtabname'] = 'Имя таблицы'; + $lang['strcolumnname'] = 'Имя атрибута'; + $lang['strindexneedsname'] = 'Вам необходимо указать имя индекса'; + $lang['strindexneedscols'] = 'Вам необходимо указать допустимое количество атрибутов.'; + $lang['strindexcreated'] = 'Индекс создан.'; + $lang['strindexcreatedbad'] = 'Создание индекса прервано.'; + $lang['strconfdropindex'] = 'Вы уверены, что хотите уничтожить индекс "%s"?'; + $lang['strindexdropped'] = 'Индекс уничтожен.'; + $lang['strindexdroppedbad'] = 'Уничтожение индекса прервано.'; + $lang['strkeyname'] = 'Имя ключа'; + $lang['struniquekey'] = 'Уникальный ключ'; + $lang['strprimarykey'] = 'Первичный ключ'; + $lang['strindextype'] = 'Вид индекса'; + $lang['strtablecolumnlist'] = 'Атрибутов в таблице'; + $lang['strindexcolumnlist'] = 'Атрибутов в индексе'; + $lang['strclusteredgood'] = 'Кластеризация завершена.'; + $lang['strclusteredbad'] = 'Кластеризация прервана.'; + $lang['strconcurrently'] = 'Без блокировки записи (CONCURRENTLY)'; + $lang['strnoclusteravailable'] = 'Таблица не кластеризуема по индексу.'; + + // Rules + $lang['strrules'] = 'Правила'; + $lang['strrule'] = 'Правило'; + $lang['strshowallrules'] = 'Показать все правила'; + $lang['strnorule'] = 'Правило не найдено.'; + $lang['strnorules'] = 'Ни одного правила не найдено.'; + $lang['strcreaterule'] = 'Создать правило'; + $lang['strrulename'] = 'Имя правила'; + $lang['strruleneedsname'] = 'Вам необходимо указать имя правила.'; + $lang['strrulecreated'] = 'Правило создано.'; + $lang['strrulecreatedbad'] = 'Создание правила прервано.'; + $lang['strconfdroprule'] = 'Вы уверены, что хотите уничтожить правило "%s" on "%s"?'; + $lang['strruledropped'] = 'Правило уничтожено.'; + $lang['strruledroppedbad'] = 'Уничтожение правила прервано.'; + + // Constraints + $lang['strconstraint'] = 'Ограничение'; + $lang['strconstraints'] = 'Ограничения'; + $lang['strshowallconstraints'] = 'Показать все ограничения'; + $lang['strnoconstraints'] = 'Ни одного ограничения не найдено.'; + $lang['strcreateconstraint'] = 'Создать ограничение'; + $lang['strconstraintcreated'] = 'Ограничение создано.'; + $lang['strconstraintcreatedbad'] = 'Создание ограничения прервано.'; + $lang['strconfdropconstraint'] = 'Вы уверены, что хотите уничтожить ограничение "%s" on "%s"?'; + $lang['strconstraintdropped'] = 'Ограничение уничтожено.'; + $lang['strconstraintdroppedbad'] = 'Уничтожение ограничения прервано.'; + $lang['straddcheck'] = 'Добавить проверку'; + $lang['strcheckneedsdefinition'] = 'Ограничение проверки нуждается в определении.'; + $lang['strcheckadded'] = 'Ограничение проверки добавлено.'; + $lang['strcheckaddedbad'] = 'Добавление ограничения проверки прервано.'; + $lang['straddpk'] = 'Добавить первичный ключ'; + $lang['strpkneedscols'] = 'Первичный ключ должен включать хотя бы один атрибут.'; + $lang['strpkadded'] = 'Первичный ключ добавлен.'; + $lang['strpkaddedbad'] = 'Добавление первичного ключа прервано.'; + $lang['stradduniq'] = 'Добавить уникальный ключ'; + $lang['struniqneedscols'] = 'Уникальный ключ должен включать хотя бы один атрибут.'; + $lang['struniqadded'] = 'Уникальный ключ добавлен.'; + $lang['struniqaddedbad'] = 'Добавление уникального ключа прервано.'; + $lang['straddfk'] = 'Добавить внешний ключ'; + $lang['strfkneedscols'] = 'Внешний ключ должен включать хотя бы один атрибут.'; + $lang['strfkneedstarget'] = 'Внешнему ключу необходимо указать целевую таблицу.'; + $lang['strfkadded'] = 'Внешний ключ добавлен.'; + $lang['strfkaddedbad'] = 'Добавление внешнего ключа прервано.'; + $lang['strfktarget'] = 'Целевая таблица'; + $lang['strfkcolumnlist'] = 'Атрибуты в ключе'; + $lang['strondelete'] = 'при удалении'; + $lang['stronupdate'] = 'при обновлении'; + + // Functions + $lang['strfunction'] = 'Функция'; + $lang['strfunctions'] = 'Функции'; + $lang['strshowallfunctions'] = 'Показать все функции'; + $lang['strnofunction'] = 'Функция не обнаружена.'; + $lang['strnofunctions'] = 'Ни одной функции не найдено.'; + $lang['strcreateplfunction'] = 'Создать SQL/PL функцию'; + $lang['strcreateinternalfunction'] = 'Создать внутреннюю функцию'; + $lang['strcreatecfunction'] = 'Создать функцию на языке C'; + $lang['strfunctionname'] = 'Имя функции'; + $lang['strreturns'] = 'Возвращаемое значение'; + $lang['strproglanguage'] = 'Язык'; + $lang['strfunctionneedsname'] = 'Вам необходимо указать имя функции.'; + $lang['strfunctionneedsdef'] = 'Вам необходимо определить функцию.'; + $lang['strfunctioncreated'] = 'Функция создана.'; + $lang['strfunctioncreatedbad'] = 'Создание функции прервано.'; + $lang['strconfdropfunction'] = 'Вы уверены, что хотите уничтожить функцию "%s"?'; + $lang['strfunctiondropped'] = 'Функция уничтожена.'; + $lang['strfunctiondroppedbad'] = 'Уничтожение функции прервано.'; + $lang['strfunctionupdated'] = 'Функция обновлена.'; + $lang['strfunctionupdatedbad'] = 'Обновление функции прервано.'; + $lang['strobjectfile'] = 'Объектный файл'; + $lang['strlinksymbol'] = 'Символ линковки (имя функции в C)'; + $lang['strarguments'] = 'Аргументы'; + $lang['strargmode'] = 'Режим'; + $lang['strargtype'] = 'Тип'; + $lang['strargadd'] = 'Добавить еще аргумент'; + $lang['strargremove'] = 'Удалить этот аргумент'; + $lang['strargnoargs'] = 'Эта функция не будет принимать аргументов.'; + $lang['strargenableargs'] = 'Включить передачу аргументов этой функции.'; + $lang['strargnorowabove'] = 'Необходима строка выше этой строки.'; + $lang['strargnorowbelow'] = 'Необходима строка ниже этой строки.'; + $lang['strargraise'] = 'Переместить вверх.'; + $lang['strarglower'] = 'Переместить вниз.'; + $lang['strargremoveconfirm'] = 'Вы действительно хотите удалить этот аргумент? Отменить удаление невозможно.'; + $lang['strfunctioncosting'] = 'Стоимости функции'; + $lang['strresultrows'] = 'Строк в результате'; + $lang['strexecutioncost'] = 'Стоимость исполнения'; + $lang['strspecifyfunctiontodrop'] = 'Вам необходимо указать как минимум одну функцию для удаления.'; + + // Triggers + $lang['strtrigger'] = 'Триггер'; + $lang['strtriggers'] = 'Триггеры'; + $lang['strshowalltriggers'] = 'Показать все триггеры'; + $lang['strnotrigger'] = 'Триггер не обнаружен.'; + $lang['strnotriggers'] = 'Ни одного триггера не найдено.'; + $lang['strcreatetrigger'] = 'Создать триггер'; + $lang['strtriggerneedsname'] = 'Вам необходимо указать имя триггера.'; + $lang['strtriggerneedsfunc'] = 'Вам необходимо определить функцию триггера.'; + $lang['strtriggercreated'] = 'Триггер создан.'; + $lang['strtriggercreatedbad'] = 'Создание триггера прервано.'; + $lang['strconfdroptrigger'] = 'Вы уверены, что хотите уничтожить триггер "%s" на "%s"?'; + $lang['strconfenabletrigger'] = 'Вы действительно хотите включить триггер "%s" на "%s"?'; + $lang['strconfdisabletrigger'] = 'Вы действительно хотите выключить триггер "%s" на "%s"?'; + $lang['strtriggerdropped'] = 'Триггер уничтожен.'; + $lang['strtriggerdroppedbad'] = 'Уничтожение триггера прервано.'; + $lang['strtriggerenabled'] = 'Триггер включен.'; + $lang['strtriggerenabledbad'] = 'Включение триггера прервано.'; + $lang['strtriggerdisabled'] = 'Триггер выключен.'; + $lang['strtriggerdisabledbad'] = 'Выключение триггера прервано.'; + $lang['strtriggeraltered'] = 'Триггер изменен.'; + $lang['strtriggeralteredbad'] = 'Изменение триггера прервано.'; + $lang['strforeach'] = 'Для каждого'; + + // Types + $lang['strtype'] = 'Тип данных'; + $lang['strtypes'] = 'Типы данных'; + $lang['strshowalltypes'] = 'Показать все типы данных'; + $lang['strnotype'] = 'Тип данных не обнаружен.'; + $lang['strnotypes'] = 'Ни одного типа данных не найдено.'; + $lang['strcreatetype'] = 'Создать тип данных'; + $lang['strcreatecomptype'] = 'Создать композитный тип'; + $lang['strcreateenumtype'] = 'Создать перечислимый тип'; + $lang['strtypeneedsfield'] = 'Вам необходимо указать как минимум одно поле.'; + $lang['strtypeneedsvalue'] = 'Вам необходимо указать как минимум одно значение.'; + $lang['strtypeneedscols'] = 'Вам необходимо указать корректное число полей.'; + $lang['strtypeneedsvals'] = 'Вам необходимо указать корректное число значений.'; + $lang['strinputfn'] = 'Функция ввода'; + $lang['stroutputfn'] = 'Функция вывода'; + $lang['strpassbyval'] = 'Передать по значению?'; + $lang['stralignment'] = 'Выравнивание'; + $lang['strelement'] = 'Элемент'; + $lang['strdelimiter'] = 'Разделитель'; + $lang['strstorage'] = 'Хранилище'; + $lang['strfield'] = 'Поле'; + $lang['strnumfields'] = 'Кол-во полей'; + $lang['strnumvalues'] = 'Кол-во значений'; + $lang['strtypeneedsname'] = 'Вам необходимо указать имя типа данных.'; + $lang['strtypeneedslen'] = 'Вам необходимо указать размер для типа данных.'; + $lang['strtypecreated'] = 'Тип данных создан.'; + $lang['strtypecreatedbad'] = 'Создание типа данных прервано.'; + $lang['strconfdroptype'] = 'Вы уверены, что хотите уничтожить тип данных "%s"?'; + $lang['strtypedropped'] = 'Тип данных уничтожен.'; + $lang['strtypedroppedbad'] = 'Уничтожение типа данных прервано.'; + $lang['strflavor'] = 'Тип'; + $lang['strbasetype'] = 'Базовый'; + $lang['strcompositetype'] = 'Композитный'; + $lang['strpseudotype'] = 'Псевдо'; + $lang['strenum'] = 'Перечислимый'; + $lang['strenumvalues'] = 'Перечислимые значения'; + + // Schemas + $lang['strschema'] = 'Схема'; + $lang['strschemas'] = 'Схемы'; + $lang['strshowallschemas'] = 'Показать все схемы'; + $lang['strnoschema'] = 'Схема не обнаружена.'; + $lang['strnoschemas'] = 'Ни одной схемы не найдено.'; + $lang['strcreateschema'] = 'Создать схему'; + $lang['strschemaname'] = 'Имя схемы'; + $lang['strschemaneedsname'] = 'Вам необходимо указать имя схемы.'; + $lang['strschemacreated'] = 'Схема создана.'; + $lang['strschemacreatedbad'] = 'Создание схемы прервано.'; + $lang['strconfdropschema'] = 'Вы уверены, что хотите уничтожить схему "%s"?'; + $lang['strschemadropped'] = 'Схема уничтожена.'; + $lang['strschemadroppedbad'] = 'Уничтожение схемы прервано.'; + $lang['strschemaaltered'] = 'Схема обновлена.'; + $lang['strschemaalteredbad'] = 'Обновление схемы прервано.'; + $lang['strsearchpath'] = 'Пути поиска в схемах'; + $lang['strspecifyschematodrop'] = 'Вам необходимо указать как минимум одну схему для удаления.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Домен'; + $lang['strdomains'] = 'Домены'; + $lang['strshowalldomains'] = 'Показать все домены'; + $lang['strnodomains'] = 'Ни одного домена не найдено.'; + $lang['strcreatedomain'] = 'Создать домен'; + $lang['strdomaindropped'] = 'Домен удален.'; + $lang['strdomaindroppedbad'] = 'Удаление домена прервано.'; + $lang['strconfdropdomain'] = 'Вы уверены, что хотите удалить домен "%s"?'; + $lang['strdomainneedsname'] = 'Вам необходимо указать имя домена.'; + $lang['strdomaincreated'] = 'Домен создан.'; + $lang['strdomaincreatedbad'] = 'Создание домена прервано.'; + $lang['strdomainaltered'] = 'Домен изменен.'; + $lang['strdomainalteredbad'] = 'Изменение домена прервано.'; + + // Operators + $lang['stroperator'] = 'Оператор'; + $lang['stroperators'] = 'Операторы'; + $lang['strshowalloperators'] = 'Показать все операторы'; + $lang['strnooperator'] = 'Оператор не обнаружен.'; + $lang['strnooperators'] = 'Операторы не обнаружены.'; + $lang['strcreateoperator'] = 'Создать оператор'; + $lang['strleftarg'] = 'Тип левого аргумента'; + $lang['strrightarg'] = 'Тип правого аргумента'; + $lang['strcommutator'] = 'Преобразование'; + $lang['strnegator'] = 'Отрицание'; + $lang['strrestrict'] = 'Ослабление'; + $lang['strjoin'] = 'Объединение'; + $lang['strhashes'] = 'Хеширование'; + $lang['strmerges'] = 'Слияние'; + $lang['strleftsort'] = 'Сотировка по левому'; + $lang['strrightsort'] = 'Сотировка по правому'; + $lang['strlessthan'] = 'Меньше'; + $lang['strgreaterthan'] = 'Больше'; + $lang['stroperatorneedsname'] = 'Вам необходимо указать название оператора.'; + $lang['stroperatorcreated'] = 'Оператор создан'; + $lang['stroperatorcreatedbad'] = 'Создание оператора прервано.'; + $lang['strconfdropoperator'] = 'Вы уверены, что хотите уничтожить оператор "%s"?'; + $lang['stroperatordropped'] = 'Оператор удален.'; + $lang['stroperatordroppedbad'] = 'Удаление оператора прервано.'; + + // Casts + $lang['strcasts'] = 'Образцы'; + $lang['strnocasts'] = 'Образцов не найдено.'; + $lang['strsourcetype'] = 'Тип источника'; + $lang['strtargettype'] = 'Тип приемника'; + $lang['strimplicit'] = 'Неявный'; + $lang['strinassignment'] = 'В назначении'; + $lang['strbinarycompat'] = '(двоично совместимый)'; + + // Conversions + $lang['strconversions'] = 'Преобразование'; + $lang['strnoconversions'] = 'Преобразований не найдено.'; + $lang['strsourceencoding'] = 'Кодировка источника'; + $lang['strtargetencoding'] = 'Кодировка приемника'; + + // Languages + $lang['strlanguages'] = 'Языки'; + $lang['strnolanguages'] = 'Языков не найдено.'; + $lang['strtrusted'] = 'Проверено'; + + // Info + $lang['strnoinfo'] = 'Нет доступной информации.'; + $lang['strreferringtables'] = 'Ссылающиеся таблицы'; + $lang['strparenttables'] = 'Родительские таблицы'; + $lang['strchildtables'] = 'Дочерние таблицы'; + + // Aggregates + $lang['straggregate'] = 'Агрегатное выражение'; + $lang['straggregates'] = 'Агрегатные выражения'; + $lang['strnoaggregates'] = 'Агрегатных выражений не найдено.'; + $lang['stralltypes'] = '(Все типы)'; + $lang['strcreateaggregate'] = 'Создать агрегатное выражение'; + $lang['straggrbasetype'] = 'Входной тип данных'; + $lang['straggrsfunc'] = 'Функция смены состояний'; + $lang['straggrstype'] = 'Тип переменной состояния'; + $lang['straggrffunc'] = 'Финальная функция'; + $lang['straggrinitcond'] = 'Начальное условие'; + $lang['straggrsortop'] = 'Оператор сортировки'; + $lang['strconfdropaggregate'] = 'Вы действительно хотите удалить агрегатное выражение "%s"?'; + $lang['straggregatedropped'] = 'Агрегатное выражение удалено.'; + $lang['straggregatedroppedbad'] = 'Удаление агрегатного выражения прервано.'; + $lang['straggraltered'] = 'Агрегатное выражение изменено.'; + $lang['straggralteredbad'] = 'Изменение агрегатного выражения прервано.'; + $lang['straggrneedsname'] = 'Вам необходимо определить имя агрегатного выражения.'; + $lang['straggrneedsbasetype'] = 'Вам необходимо указать входной тип данных для агрегатного выражения.'; + $lang['straggrneedssfunc'] = 'Вам необходимо укакзать имя функции смены состояний для агрегатного выражения.'; + $lang['straggrneedsstype'] = 'Вам необходимо указать тип переменной состояния для агрегатного выражения.'; + $lang['straggrcreated'] = 'Агрегатное выражение создано.'; + $lang['straggrcreatedbad'] = 'Создание агрегатного выражения прервано.'; + $lang['straggrshowall'] = 'Показать все агрегатные выражения'; + + // Operator Classes + $lang['stropclasses'] = 'Классы операторов'; + $lang['strnoopclasses'] = 'Классов операторов не найдено.'; + $lang['straccessmethod'] = 'Метод доступа'; + + // Stats and performance + $lang['strrowperf'] = 'Представление записи'; + $lang['strioperf'] = 'Представление ввода/вывода'; + $lang['stridxrowperf'] = 'Представление индекса записи'; + $lang['stridxioperf'] = 'Представление индекса ввода/вывода'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Последовательный'; + $lang['strscan'] = 'Сканировать'; + $lang['strread'] = 'Читать'; + $lang['strfetch'] = 'Извлечь'; + $lang['strheap'] = 'Мусор'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST индекс'; + $lang['strcache'] = 'Кеш'; + $lang['strdisk'] = 'Диск'; + $lang['strrows2'] = 'Записи'; + + // Tablespaces + $lang['strtablespace'] = 'Табличное пространство'; + $lang['strtablespaces'] = 'Табличные пространства'; + $lang['strshowalltablespaces'] = 'Показать все табличные пространства'; + $lang['strnotablespaces'] = 'Табличные пространства не найдены.'; + $lang['strcreatetablespace'] = 'Создать табличное пространство'; + $lang['strlocation'] = 'Расположение'; + $lang['strtablespaceneedsname'] = 'Вам необходимо определить имя табличного пространства.'; + $lang['strtablespaceneedsloc'] = 'Вам необходимо определить директорию, в которой табличное пространство буде создано.'; + $lang['strtablespacecreated'] = 'Табличное пространство создано.'; + $lang['strtablespacecreatedbad'] = 'Создание табличного пространства прервано.'; + $lang['strconfdroptablespace'] = 'Вы действительно хотите удалить табличное пространство "%s"?'; + $lang['strtablespacedropped'] = 'Табличное пространство удалено.'; + $lang['strtablespacedroppedbad'] = 'Удаление табличного пространства прервано.'; + $lang['strtablespacealtered'] = 'Табличное пространство изменено.'; + $lang['strtablespacealteredbad'] = 'Изменение табличного пространства прервано.'; + + // Miscellaneous + $lang['strtopbar'] = '%s выполняется на %s:%s -- Вы зарегистрированы как "%s"'; + $lang['strtimefmt'] = ' j-m-Y g:i'; + $lang['strhelp'] = 'Помощь'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Просмотр страниц помощи'; + $lang['strselecthelppage'] = 'Выберете страницу помощи'; + $lang['strinvalidhelppage'] = 'Неправильная страница помощи.'; + $lang['strlogintitle'] = 'Вошли на %s'; + $lang['strlogoutmsg'] = 'Вышли из %s'; + $lang['strloading'] = 'Загрузка...'; + $lang['strerrorloading'] = 'Ошибка при загрузке'; + $lang['strclicktoreload'] = 'Щелкните для перезагрузки'; + + // Autovacuum + $lang['strautovacuum'] = 'Автоматическое перестроение'; + $lang['strturnedon'] = 'Включено'; + $lang['strturnedoff'] = 'Выключено'; + $lang['strenabled'] = 'Включено'; + $lang['strnovacuumconf'] = 'Конфигурация автоматического перестроения не найдена.'; + $lang['strvacuumbasethreshold'] = 'Базовый порог перестроения'; + $lang['strvacuumscalefactor'] = 'Масштабный множитель перестроения'; + $lang['stranalybasethreshold'] = 'Базовый порог анализа'; + $lang['stranalyzescalefactor'] = 'Масштабный множитель анализа'; + $lang['strvacuumcostdelay'] = 'Задержка при превышении стоимости перестроения'; + $lang['strvacuumcostlimit'] = 'Ограничение стоимости перестроения'; + $lang['strvacuumpertable'] = 'Установки автоматического перестроения по таблицам'; + $lang['straddvacuumtable'] = 'Добавить установки автоматического перестроения для таблицы'; + $lang['streditvacuumtable'] = 'Редактировать установки автоматического перестроения для таблицы %s'; + $lang['strdelvacuumtable'] = 'Удалить установки автоматического перестроения для таблицы %s?'; + $lang['strvacuumtablereset'] = 'Сброс установок автоматического перестроения для таблицы %s к значениям по умолчанию'; + $lang['strdelvacuumtablefail'] = 'Ошибка при удалении установок автоматического перестроения для таблицы %s'; + $lang['strsetvacuumtablesaved'] = 'Установки автоматического перестроения для таблицы %s сохранены.'; + $lang['strsetvacuumtablefail'] = 'Ошибка при сохранении установок автоматического перестроения %s.'; + $lang['strspecifydelvacuumtable'] = 'Вам необходимо указать таблицу, для которой вы хотите удалить установки автоматического перестроения.'; + $lang['strspecifyeditvacuumtable'] = 'Вам необходимо указать таблицу, для которой вы хотите редактировать установки автоматического перестроения.'; + $lang['strnotdefaultinred'] = 'Значения, отличные от значений по умолчанию, отмечены красным цветом.'; + + // Table-level Locks + $lang['strlocks'] = 'Блокировки'; + $lang['strtransaction'] = 'ID транзакции'; + $lang['strvirtualtransaction'] = 'ID виртуальной транзакции'; + $lang['strprocessid'] = 'ID процесса'; + $lang['strmode'] = 'Режим блокировки'; + $lang['strislockheld'] = 'Блокировка удерживается?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Подготовленные транзакции'; + $lang['strxactid'] = 'ID транзакции'; + $lang['strgid'] = 'Глобальный ID'; + + // Fulltext search + $lang['strfulltext'] = 'Полнотекстовый поиск (FTS)'; + $lang['strftsconfig'] = 'Конфигурация FTS'; + $lang['strftsconfigs'] = 'Конфигурации'; + $lang['strftscreateconfig'] = 'Создать конфигурацию FTS'; + $lang['strftscreatedict'] = 'Создать словарь'; + $lang['strftscreatedicttemplate'] = 'Создать шаблон словаря'; + $lang['strftscreateparser'] = 'Создать парсер'; + $lang['strftsnoconfigs'] = 'Конфигурации FTS не найдены.'; + $lang['strftsconfigdropped'] = 'Конфигурация FTS удалена.'; + $lang['strftsconfigdroppedbad'] = 'Удаление конфигурации FTS прервано.'; + $lang['strconfdropftsconfig'] = 'Вы действительно хотите удалить конфигурацию FTS "%s"?'; + $lang['strconfdropftsdict'] = 'Вы действительно хотите удалить словарь FTS "%s"?'; + $lang['strconfdropftsmapping'] = 'Вы действительно хотите удалить правило "%s" конфигурации FTS "%s"?'; + $lang['strftstemplate'] = 'Шаблон'; + $lang['strftsparser'] = 'Парсер'; + $lang['strftsconfigneedsname'] = 'Вам необходимо определить имя конфигурации FTS.'; + $lang['strftsconfigcreated'] = 'Конфигурация FTS создана.'; + $lang['strftsconfigcreatedbad'] = 'Создание конфигурации FTS прервано.'; + $lang['strftsmapping'] = 'Правила'; + $lang['strftsdicts'] = 'Словари'; + $lang['strftsdict'] = 'Словарь'; + $lang['strftsemptymap'] = 'Конфигурация правил FTS пуста.'; + $lang['strftsconfigaltered'] = 'Конфигурация FTS изменена.'; + $lang['strftsconfigalteredbad'] = 'Изменение конфигурации FTS прервано.'; + $lang['strftsconfigmap'] = 'Конфигурация правил FTS'; + $lang['strftsparsers'] = 'Парсеры FTS'; + $lang['strftsnoparsers'] = 'Нет доступных парсеров FTS.'; + $lang['strftsnodicts'] = 'Нет доступных словарей FTS.'; + $lang['strftsdictcreated'] = 'Словарь FTS создан.'; + $lang['strftsdictcreatedbad'] = 'Создание словаря FTS прервано.'; + $lang['strftslexize'] = 'Функция преобразования токена в лексему (lexize)'; + $lang['strftsinit'] = 'Функция инициализации'; + $lang['strftsoptionsvalues'] = 'Опции и значения'; + $lang['strftsdictneedsname'] = 'Вам необходимо определить имя словаря FTS.'; + $lang['strftsdictdropped'] = 'Словарь FTS удален.'; + $lang['strftsdictdroppedbad'] = 'Удаление словаря FTS прервано.'; + $lang['strftsdictaltered'] = 'Словарь FTS изменен.'; + $lang['strftsdictalteredbad'] = 'Изменение словаря FTS прервано.'; + $lang['strftsaddmapping'] = 'Добавить новое правило'; + $lang['strftsspecifymappingtodrop'] = 'Вам необходимо указать как минимум одно правило для удаления.'; + $lang['strftsspecifyconfigtoalter'] = 'Вам необходимо указать конфигурацию FTS для изменения'; + $lang['strftsmappingdropped'] = 'Правило FTS удалено.'; + $lang['strftsmappingdroppedbad'] = 'Удаление правила FTS прервано.'; + $lang['strftsnodictionaries'] = 'Словари не найдены.'; + $lang['strftsmappingaltered'] = 'Правило FTS изменено.'; + $lang['strftsmappingalteredbad'] = 'Изменение правила FTS прервано.'; + $lang['strftsmappingadded'] = 'Правило FTS добавлено.'; + $lang['strftsmappingaddedbad'] = 'Добавление правила FTS прервано.'; + $lang['strftstabconfigs'] = 'Конфигурации'; + $lang['strftstabdicts'] = 'Словари'; + $lang['strftstabparsers'] = 'Парсеры'; + $lang['strftscantparsercopy'] = 'При создании конфигурации поиска нельзя указывать одновременно парсер и шаблон.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/russian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/russian.php new file mode 100644 index 00000000..da842798 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/russian.php @@ -0,0 +1,586 @@ +<?php + + /** + * Russian KOI8 language file for phpPgAdmin. + * @maintainer Alexander Khodorivsky [askh@ukr.net] + * + * $Id: russian.php,v 1.12 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Русский КОИ8'; + $lang['applocale'] = 'ru-RU'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Добро пожаловать в phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmin - домашняя страница'; + $lang['strpgsqlhome'] = 'PostgreSQL - домашняя страница'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL - документация (локально)'; + $lang['strreportbug'] = 'Отчет об ошибках'; + $lang['strviewfaq'] = 'Просмотр онлайн FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Логин'; + $lang['strloginfailed'] = 'Неверный логин'; + $lang['strlogindisallowed'] = 'Логин недопустим по соображениям безопасности'; + $lang['strserver'] = 'Сервер'; + $lang['strlogout'] = 'Перерегистрация'; + $lang['strowner'] = 'Пользователь'; + $lang['straction'] = 'Действие'; + $lang['stractions'] = 'Действия'; + $lang['strname'] = 'Имя'; + $lang['strdefinition'] = 'Определение'; + $lang['strproperties'] = 'Свойства'; + $lang['strbrowse'] = 'Просмотреть'; + $lang['strdrop'] = 'Удалить'; + $lang['strdropped'] = 'Удалено'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Not Null'; + $lang['strprev'] = '< Предыд.'; + $lang['strnext'] = 'След. >'; + $lang['strfirst'] = '<< Перв.'; + $lang['strlast'] = 'Посл. >>'; + $lang['strfailed'] = 'Прервано'; + $lang['strcreate'] = 'Создать'; + $lang['strcreated'] = 'Создано'; + $lang['strcomment'] = 'Комментарий'; + $lang['strlength'] = 'Длина'; + $lang['strdefault'] = 'По умолчанию'; + $lang['stralter'] = 'Изменить'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Отменить'; + $lang['strsave'] = 'Сохранить'; + $lang['strreset'] = 'Сбросить'; + $lang['strinsert'] = 'Вставить'; + $lang['strselect'] = 'Выбрать'; + $lang['strdelete'] = 'Удалить'; + $lang['strupdate'] = 'Обновить'; + $lang['strreferences'] = 'Ссылки'; + $lang['stryes'] = 'Да'; + $lang['strno'] = 'Нет'; + $lang['strtrue'] = 'Истина'; + $lang['strfalse'] = 'Ложь'; + $lang['stredit'] = 'Редактировать'; + $lang['strcolumns'] = 'Атрибуты'; + $lang['strrows'] = 'запис(ь/и/ей)'; + $lang['strrowsaff'] = 'запис(ь/и/ей) обработано.'; + $lang['strobjects'] = 'объект(а/ов)'; + $lang['strexample'] = 'и т.д.'; + $lang['strback'] = 'Назад'; + $lang['strqueryresults'] = 'Результаты запроса'; + $lang['strshow'] = 'Показать'; + $lang['strempty'] = 'Очистить'; + $lang['strlanguage'] = 'Язык'; + $lang['strencoding'] = 'Кодировка'; + $lang['strvalue'] = 'Величина'; + $lang['strunique'] = 'Уникальный'; + $lang['strprimary'] = 'Первичный'; + $lang['strexport'] = 'Экспорт'; + $lang['strimport'] = 'Импорт'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = 'Выполнить'; + $lang['stradmin'] = 'Управление'; + $lang['strvacuum'] = 'Перестроить'; + $lang['stranalyze'] = 'Анализировать'; + $lang['strclusterindex'] = 'Кластеризовать'; + $lang['strclustered'] = 'Кластеризован?'; + $lang['strreindex'] = 'Перестроить индекс'; + $lang['strrun'] = 'Выполнить'; + $lang['stradd'] = 'Добавить'; + $lang['strevent'] = 'Событие'; + $lang['strwhere'] = 'Где'; + $lang['strinstead'] = 'Делать вместо'; + $lang['strwhen'] = 'Когда'; + $lang['strformat'] = 'Формат'; + $lang['strdata'] = 'Данные'; + $lang['strconfirm'] = 'Подтвердить'; + $lang['strexpression'] = 'Выражение'; + $lang['strellipsis'] = '...'; + $lang['strexpand'] = 'Расширить'; + $lang['strcollapse'] = 'Свернуть'; + $lang['strexplain'] = 'Объяснить'; + $lang['strexplainanalyze'] = 'Объяснить анализ'; + $lang['strfind'] = 'Найти'; + $lang['stroptions'] = 'Опции'; + $lang['strrefresh'] = 'Обновить'; + $lang['strdownload'] = 'Загрузить'; + $lang['strdownloadgzipped'] = 'Загрузить архив gzip'; + $lang['strinfo'] = 'Сведения'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Дополнительно'; + $lang['strvariables'] = 'Переменные'; + $lang['strprocess'] = 'Процесс'; + $lang['strprocesses'] = 'Процессы'; + $lang['strsetting'] = 'Опции'; + $lang['streditsql'] = 'Редактировать SQL'; + $lang['strruntime'] = 'Время выполнения: %s мсек'; + $lang['strpaginate'] = 'Нумеровать страницы с результатами'; + $lang['struploadscript'] = 'или загрузить SQL-скрипт:'; + $lang['strstarttime'] = 'Время начала'; + $lang['strfile'] = 'Файл'; + $lang['strfileimported'] = 'Файл импортирован.'; + + // Error handling + $lang['strbadconfig'] = 'Ваш config.inc.php является устаревшим. Вам необходимо обновить его из config.inc.php-dist.'; + $lang['strnotloaded'] = 'Ваша инсталяция PHP не поддерживает PostgreSQL. Вам необходимо пересобрать PHP, используя параметр --with-pgsql для configure.'; + $lang['strbadschema'] = 'Обнаружена неверная схема.'; + $lang['strbadencoding'] = 'Failed to set client encoding in database.'; + $lang['strsqlerror'] = 'Ошибка SQL:'; + $lang['strinstatement'] = 'В операторе:'; + $lang['strinvalidparam'] = 'Неверный параметр скрипта.'; + $lang['strnodata'] = 'Данных не найдено.'; + $lang['strnoobjects'] = 'Объектов не найдено.'; + $lang['strrownotunique'] = 'Нет уникального идентификатора для этой записи.'; + $lang['strnouploads'] = 'Загрузка файла невозможна.'; + $lang['strimporterror'] = 'Ошибка импорта.'; + $lang['strimporterrorline'] = 'Ошибка канала при импорте %s.'; + + // Tables + $lang['strtable'] = 'Таблица'; + $lang['strtables'] = 'Таблицы'; + $lang['strshowalltables'] = 'Показать все таблицы'; + $lang['strnotables'] = 'Таблиц не найдено.'; + $lang['strnotable'] = ' Таблица не обнаружена.'; + $lang['strcreatetable'] = 'Создать таблицу'; + $lang['strtablename'] = 'Имя таблицы'; + $lang['strtableneedsname'] = 'Вам необходимо определить имя таблицы.'; + $lang['strtableneedsfield'] = 'Вам необходимо определить по крайней мере одно поле.'; + $lang['strtableneedscols'] = 'Вам необходимо указать допустимое число атрибутов.'; + $lang['strtablecreated'] = 'Таблица создана.'; + $lang['strtablecreatedbad'] = 'Создание таблицы прервано.'; + $lang['strconfdroptable'] = 'Вы уверены, что хотите удалить таблицу "%s"?'; + $lang['strtabledropped'] = 'Таблица удалена.'; + $lang['strtabledroppedbad'] = 'Удаление таблицы прервано.'; + $lang['strconfemptytable'] = 'Вы уверены, что хотите очистить таблицу "%s"?'; + $lang['strtableemptied'] = 'Таблица очищена.'; + $lang['strtableemptiedbad'] = 'Очистка таблицы прервана.'; + $lang['strinsertrow'] = 'Добавить запись'; + $lang['strrowinserted'] = 'Запись добавлена.'; + $lang['strrowinsertedbad'] = 'Добавление записи прервано.'; + $lang['streditrow'] = 'Редактировать запись'; + $lang['strrowupdated'] = 'Запись обновлена.'; + $lang['strrowupdatedbad'] = 'Обновление записи прервано.'; + $lang['strdeleterow'] = 'Удалить запись'; + $lang['strconfdeleterow'] = 'Вы уверены, что хотите удалить запись?'; + $lang['strrowdeleted'] = 'Запись удалена.'; + $lang['strrowdeletedbad'] = 'Удаление записи прервано.'; + $lang['strsaveandrepeat'] = 'Вставить и повторить'; + $lang['strfield'] = 'Поле'; + $lang['strfields'] = 'Поля'; + $lang['strnumfields'] = 'Кол-во полей'; + $lang['strfieldneedsname'] = 'Вам необходимо назвать поле'; + $lang['strselectallfields'] = 'Выбрать все поля'; + $lang['strselectneedscol'] = 'Вам необходимо указать по крайней мере один атрибут'; + $lang['strselectunary'] = 'Унарный оператор не может иметь величину.'; + $lang['straltercolumn'] = 'Изменить атрибут'; + $lang['strcolumnaltered'] = 'Атрибут изменен.'; + $lang['strcolumnalteredbad'] = 'Изменение атрибута прервано.'; + $lang['strconfdropcolumn'] = 'Вы уверены, что хотите удалить атрибут "%s" таблицы "%s"?'; + $lang['strcolumndropped'] = 'Атрибут удален.'; + $lang['strcolumndroppedbad'] = 'Удаление атрибута прервано.'; + $lang['straddcolumn'] = 'Добавить атрибут'; + $lang['strcolumnadded'] = 'Атрибут добавлен.'; + $lang['strcolumnaddedbad'] = 'Добавление атрибута прервано.'; + $lang['strdataonly'] = 'Только данные'; + $lang['strcascade'] = 'Каскадом'; + $lang['strtablealtered'] = 'Таблица изменена.'; + $lang['strtablealteredbad'] = 'Изменение таблицы прервано.'; + $lang['strdataonly'] = 'Только данные'; + $lang['strstructureonly'] = 'Только структуру'; + $lang['strstructureanddata'] = 'Структуру и данные'; + $lang['strtabbed'] = 'Через табуляцию'; + $lang['strauto'] = 'Авто'; + + // Users + $lang['struser'] = 'Пользователь'; + $lang['strusers'] = 'Пользователи'; + $lang['strusername'] = 'Имя пользователя'; + $lang['strpassword'] = 'Пароль'; + $lang['strsuper'] = 'Суперпользователь?'; + $lang['strcreatedb'] = 'Создать базу данных?'; + $lang['strexpires'] = 'Срок действия'; + $lang['strsessiondefaults'] = 'Опции сеанса по умолчанию'; + $lang['strnousers'] = 'Нет таких пользователей.'; + $lang['struserupdated'] = 'Пользователь обновлен.'; + $lang['struserupdatedbad'] = 'Обновление пользователя прервано.'; + $lang['strshowallusers'] = 'Показать всех пользователей'; + $lang['strcreateuser'] = 'Создать пользователя'; + $lang['struserneedsname'] = 'Вы должны ввести имя пользователя.'; + $lang['strusercreated'] = 'Пользователь создан.'; + $lang['strusercreatedbad'] = 'Создание пользователя прервано.'; + $lang['strconfdropuser'] = 'Вы уверены, что хотите удалить пользователя "%s"?'; + $lang['struserdropped'] = 'Пользователь удален.'; + $lang['struserdroppedbad'] = 'Удаление пользователя прервано.'; + $lang['straccount'] = 'Аккаунт'; + $lang['strchangepassword'] = 'Изменить пароль'; + $lang['strpasswordchanged'] = 'Пароль изменен.'; + $lang['strpasswordchangedbad'] = 'Изменение пароля прервано.'; + $lang['strpasswordshort'] = 'Пароль слишком короткий.'; + $lang['strpasswordconfirm'] = 'Пароль не соответствует подтверждению.'; + + // Groups + $lang['strgroup'] = 'Группа'; + $lang['strgroups'] = 'Группы'; + $lang['strnogroup'] = 'Группа не обнаружена.'; + $lang['strnogroups'] = 'Ни одной группы не найдено.'; + $lang['strcreategroup'] = 'Создать группу'; + $lang['strshowallgroups'] = 'Показать все группы'; + $lang['strgroupneedsname'] = 'Вам необходимо указать название группы.'; + $lang['strgroupcreated'] = 'Группа создана.'; + $lang['strgroupcreatedbad'] = 'Создание группы прервано.'; + $lang['strconfdropgroup'] = 'Вы уверены, что хотите удалить группу "%s"?'; + $lang['strgroupdropped'] = 'Группа удалена.'; + $lang['strgroupdroppedbad'] = 'Удаление группы прервано.'; + $lang['strmembers'] = 'Участников'; + $lang['straddmember'] = 'Добавить участника'; + $lang['strmemberadded'] = 'Участник добавлен.'; + $lang['strmemberaddedbad'] = 'Добавление участника прервано.'; + $lang['strdropmember'] = 'Удалить участника'; + $lang['strconfdropmember'] = 'Вы уверены, что хотите удалить участника "%s" из группы "%s"?'; + $lang['strmemberdropped'] = 'Участник удален.'; + $lang['strmemberdroppedbad'] = 'Удаление участника прервано.'; + + // Privilges + $lang['strprivilege'] = 'Привилегия'; + $lang['strprivileges'] = 'Привилегии'; + $lang['strnoprivileges'] = 'Объект не имеет привилегий.'; + $lang['strgrant'] = 'Усилить'; + $lang['strrevoke'] = 'Ослабить'; + $lang['strgranted'] = 'Привилегии изменены.'; + $lang['strgrantfailed'] = 'Изменение привилегий прервано.'; + $lang['strgrantbad'] = 'Вам необходимо указать хотя бы одного пользователя или группу и хотя бы одну привилегию.'; + $lang['stralterprivs'] = 'Изменить привилегии'; + $lang['strgrantor'] = 'Донор'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'База данных'; + $lang['strdatabases'] = 'Базы данных'; + $lang['strshowalldatabases'] = 'Показать все базы данных'; + $lang['strnodatabase'] = 'База данных не обнаружена.'; + $lang['strnodatabases'] = 'Ни одной базы данных не найдено.'; + $lang['strcreatedatabase'] = 'Создать базу данных'; + $lang['strdatabasename'] = 'Имя базы данных'; + $lang['strdatabaseneedsname'] = 'Вам необходимо присвоить имя Вашей базе данных.'; + $lang['strdatabasecreated'] = 'База данных создана.'; + $lang['strdatabasecreatedbad'] = 'Создание базы данных прервано.'; + $lang['strconfdropdatabase'] = 'Вы уверены, что хотите уничтожить базу данных "%s"?'; + $lang['strdatabasedropped'] = ' База данных уничтожена.'; + $lang['strdatabasedroppedbad'] = 'Уничтожение базы данных прервано.'; + $lang['strentersql'] = 'Введите SQL-запрос ниже:'; + $lang['strsqlexecuted'] = 'SQL-запрос выполнен.'; + $lang['strvacuumgood'] = 'Операция перестройки завершена.'; + $lang['strvacuumbad'] = 'Операция перестройки прервана.'; + $lang['stranalyzegood'] = ' Операция анализа завершена.'; + $lang['stranalyzebad'] = ' Операция анализа завершена.'; + $lang['strreindexgood'] = 'Переиндексация завершена.'; + $lang['strreindexbad'] = 'Переиндексация прервана.'; + $lang['strfull'] = 'Полностью'; + $lang['strfreeze'] = 'Заморозить'; + $lang['strforce'] = 'Принудительно'; + + // Views + $lang['strview'] = 'Представление'; + $lang['strviews'] = 'Представления'; + $lang['strshowallviews'] = 'Показать все представления'; + $lang['strnoview'] = 'Представление не найдено.'; + $lang['strnoviews'] = 'Ни одного представления не найдено.'; + $lang['strcreateview'] = 'Создать представление'; + $lang['strviewname'] = 'Имя представления'; + $lang['strviewneedsname'] = 'Вам необходимо указать имя представления.'; + $lang['strviewneedsdef'] = 'Вам необходимо определить атрибуты представления.'; + $lang['strviewneedsfields'] = 'Вам необходимо определить атрибуты для выборки в ваше представление.'; + $lang['strviewcreated'] = 'Представление создано.'; + $lang['strviewcreatedbad'] = 'Создание представления прервано.'; + $lang['strconfdropview'] = 'Вы уверены, что хотите уничтожить представление "%s"?'; + $lang['strviewdropped'] = 'Представление уничтожено.'; + $lang['strviewdroppedbad'] = 'Уничтожение представления прервано.'; + $lang['strviewupdated'] = 'Представление обновлено.'; + $lang['strviewupdatedbad'] = 'Обновление представления прервано.'; + $lang['strviewlink'] = 'Связанные ключи'; + $lang['strviewconditions'] = 'Дополнительные условия'; + $lang['strcreateviewwiz'] = 'Создать представление помощником'; + + // Sequences + $lang['strsequence'] = 'Последовательность'; + $lang['strsequences'] = ' Последовательности'; + $lang['strshowallsequences'] = 'Показать все последовательности'; + $lang['strnosequence'] = 'Последовательность не обнаружена.'; + $lang['strnosequences'] = 'Ни одной последовательности не найдено.'; + $lang['strcreatesequence'] = 'Создать последовательность'; + $lang['strlastvalue'] = 'Последнее значение'; + $lang['strincrementby'] = 'Увеличение на'; + $lang['strstartvalue'] = 'Начальное значение'; + $lang['strmaxvalue'] = 'Макс. величина'; + $lang['strminvalue'] = 'Мин. величина'; + $lang['strcachevalue'] = 'Размер кэша'; + $lang['strlogcount'] = 'Log Count'; + $lang['striscycled'] = 'Зациклить?'; + $lang['strsequenceneedsname'] = 'Вам необходимо указать имя последовательности.'; + $lang['strsequencecreated'] = 'Последовательность создана.'; + $lang['strsequencecreatedbad'] = 'Создание последовательности прервано.'; + $lang['strconfdropsequence'] = 'Вы уверены, что хотите уничтожить последовательность "%s"?'; + $lang['strsequencedropped'] = 'Последовательность уничтожена.'; + $lang['strsequencedroppedbad'] = 'Уничтожение последовательности прервано.'; + $lang['strsequencereset'] = 'Последовательность сброшена.'; + $lang['strsequenceresetbad'] = 'Сброс последовательности прерван.'; + + // Indexes + $lang['strindex'] = 'Индекс'; + $lang['strindexes'] = 'Индексы'; + $lang['strindexname'] = 'Имя индекса'; + $lang['strshowallindexes'] = 'Показать все индексы'; + $lang['strnoindex'] = 'Индекс не обнаружен.'; + $lang['strnoindexes'] = 'Ни одного индекса не найдено.'; + $lang['strcreateindex'] = 'Создать индекс'; + $lang['strtabname'] = 'Имя таблицы'; + $lang['strcolumnname'] = 'Имя атрибута'; + $lang['strindexneedsname'] = 'Вам необходимо указать имя индекса'; + $lang['strindexneedscols'] = 'Вам необходимо указать допустимое количество атрибутов.'; + $lang['strindexcreated'] = 'Индекс создан.'; + $lang['strindexcreatedbad'] = 'Создание индекса прервано.'; + $lang['strconfdropindex'] = 'Вы уверены, что хотите уничтожить индекс "%s"?'; + $lang['strindexdropped'] = 'Индекс уничтожен.'; + $lang['strindexdroppedbad'] = 'Уничтожение индекса прервано.'; + $lang['strkeyname'] = 'Имя ключа'; + $lang['struniquekey'] = 'Уникальный ключ'; + $lang['strprimarykey'] = 'Первичный ключ'; + $lang['strindextype'] = 'Вид индекса'; + $lang['strindexname'] = 'Имя индекса'; + $lang['strtablecolumnlist'] = 'Атрибутов в таблице'; + $lang['strindexcolumnlist'] = 'Атрибутов в индексе'; + $lang['strconfcluster'] = 'Вы уверены, что хотите кластеризовать "%s"?'; + $lang['strclusteredgood'] = 'Кластеризация завершена.'; + $lang['strclusteredbad'] = 'Кластеризация прервана.'; + + // Rules + $lang['strrules'] = 'Правила'; + $lang['strrule'] = 'Правило'; + $lang['strshowallrules'] = 'Показать все правила'; + $lang['strnorule'] = 'Правило не найдено.'; + $lang['strnorules'] = 'Ни одного правила не найдено.'; + $lang['strcreaterule'] = 'Создать правило'; + $lang['strrulename'] = 'Имя правила'; + $lang['strruleneedsname'] = 'Вам необходимо указать имя правила.'; + $lang['strrulecreated'] = 'Правило создано.'; + $lang['strrulecreatedbad'] = 'Создание правила прервано.'; + $lang['strconfdroprule'] = 'Вы уверены, что хотите уничтожить правило "%s" on "%s"?'; + $lang['strruledropped'] = 'Правило уничтожено.'; + $lang['strruledroppedbad'] = 'Уничтожение правила прервано.'; + + // Constraints + $lang['strconstraints'] = 'Ограничения'; + $lang['strshowallconstraints'] = 'Показать все ограничения'; + $lang['strnoconstraints'] = 'Ни одного ограничения не найдено.'; + $lang['strcreateconstraint'] = 'Создать ограничение'; + $lang['strconstraintcreated'] = 'Ограничение создано.'; + $lang['strconstraintcreatedbad'] = 'Создание ограничения прервано.'; + $lang['strconfdropconstraint'] = 'Вы уверены, что хотите уничтожить ограничение "%s" on "%s"?'; + $lang['strconstraintdropped'] = 'Ограничение уничтожено.'; + $lang['strconstraintdroppedbad'] = 'Уничтожение ограничения прервано.'; + $lang['straddcheck'] = 'Добавить проверку'; + $lang['strcheckneedsdefinition'] = 'Ограничение проверки нуждается в определении.'; + $lang['strcheckadded'] = 'Ограничение проверки добавлено.'; + $lang['strcheckaddedbad'] = 'Добавление ограничения проверки прервано.'; + $lang['straddpk'] = 'Добавить первичный ключ'; + $lang['strpkneedscols'] = 'Первичный ключ должен включать хотя бы один атрибут.'; + $lang['strpkadded'] = 'Первичный ключ добавлен.'; + $lang['strpkaddedbad'] = 'Добавление первичного ключа прервано.'; + $lang['stradduniq'] = 'Добавить уникальный ключ'; + $lang['struniqneedscols'] = 'Уникальный ключ должен включать хотя бы один атрибут.'; + $lang['struniqadded'] = 'Уникальный ключ добавлен.'; + $lang['struniqaddedbad'] = 'Добавление уникального ключа прервано.'; + $lang['straddfk'] = 'Добавить внешний ключ'; + $lang['strfkneedscols'] = 'Внешний ключ должен включать хотя бы один атрибут.'; + $lang['strfkneedstarget'] = 'Внешнему ключу необходимо указать целевую таблицу.'; + $lang['strfkadded'] = 'Внешний ключ добавлен.'; + $lang['strfkaddedbad'] = 'Добавление внешнего ключа прервано.'; + $lang['strfktarget'] = 'Целевая таблица'; + $lang['strfkcolumnlist'] = 'Атрибуты в ключе'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Функция'; + $lang['strfunctions'] = ' Функции'; + $lang['strshowallfunctions'] = 'Показать все функции'; + $lang['strnofunction'] = 'Функция не обнаружена.'; + $lang['strnofunctions'] = 'Ни одной функции не найдено.'; + $lang['strcreatefunction'] = 'Создать функцию'; + $lang['strfunctionname'] = 'Имя функции'; + $lang['strreturns'] = 'Возвращаемое значение'; + $lang['strarguments'] = 'Аргументы'; + $lang['strproglanguage'] = 'Язык программирования'; + $lang['strproglanguage'] = 'Язык'; + $lang['strfunctionneedsname'] = 'Вам необходимо указать имя функции.'; + $lang['strfunctionneedsdef'] = 'Вам необходимо определить функцию.'; + $lang['strfunctioncreated'] = 'Функция создана.'; + $lang['strfunctioncreatedbad'] = 'Создание функции прервано.'; + $lang['strconfdropfunction'] = 'Вы уверены, что хотите уничтожить функцию "%s"?'; + $lang['strfunctiondropped'] = 'Функция уничтожена.'; + $lang['strfunctiondroppedbad'] = 'Уничтожение функции прервано.'; + $lang['strfunctionupdated'] = 'Функция обновлена.'; + $lang['strfunctionupdatedbad'] = 'Обновление функции прервано.'; + + // Triggers + $lang['strtrigger'] = 'Триггер'; + $lang['strtriggers'] = ' Триггеры'; + $lang['strshowalltriggers'] = 'Показать все триггеры'; + $lang['strnotrigger'] = 'Триггер не обнаружен.'; + $lang['strnotriggers'] = 'Ни одного триггера не найдено.'; + $lang['strcreatetrigger'] = 'Создать триггер'; + $lang['strtriggerneedsname'] = 'Вам необходимо указать имя триггера.'; + $lang['strtriggerneedsfunc'] = 'Вам необходимо определить функцию триггера.'; + $lang['strtriggercreated'] = 'Триггер создан.'; + $lang['strtriggercreatedbad'] = 'Создание триггера прервано.'; + $lang['strconfdroptrigger'] = 'Вы уверены, что хотите уничтожить триггер "%s" на "%s"?'; + $lang['strtriggerdropped'] = 'Триггер уничтожен.'; + $lang['strtriggerdroppedbad'] = 'Уничтожение триггера прервано.'; + $lang['strtriggeraltered'] = 'Триггер изменен.'; + $lang['strtriggeralteredbad'] = 'Изменение триггера прервано.'; + + // Types + $lang['strtype'] = 'Тип данных'; + $lang['strtypes'] = 'Типы данных'; + $lang['strshowalltypes'] = 'Показать все типы данных'; + $lang['strnotype'] = 'Тип данных не обнаружен.'; + $lang['strnotypes'] = 'Ни одного типа данных не найдено.'; + $lang['strcreatetype'] = 'Создать тип данных'; + $lang['strtypename'] = 'Имя типа данных'; + $lang['strinputfn'] = 'Функция ввода'; + $lang['stroutputfn'] = 'Функция вывода'; + $lang['strpassbyval'] = 'Передать по значению?'; + $lang['stralignment'] = 'Выравнивание'; + $lang['strelement'] = 'Элемент'; + $lang['strdelimiter'] = 'Разделитель'; + $lang['strstorage'] = 'Storage'; + $lang['strtypeneedsname'] = 'Вам необходимо указать имя типа данных.'; + $lang['strtypeneedslen'] = 'Вам необходимо указать размер для типа данных.'; + $lang['strtypecreated'] = 'Тип данных создан.'; + $lang['strtypecreatedbad'] = 'Создание типа данных прервано.'; + $lang['strconfdroptype'] = 'Вы уверены, что хотите уничтожить тип данных "%s"?'; + $lang['strtypedropped'] = 'Тип данных уничтожен.'; + $lang['strtypedroppedbad'] = 'Уничтожение типа данных прервано.'; + + // Schemas + $lang['strschema'] = 'Схема'; + $lang['strschemas'] = 'Схемы'; + $lang['strshowallschemas'] = 'Показать все схемы'; + $lang['strnoschema'] = 'Схема не обнаружена.'; + $lang['strnoschemas'] = 'Ни одной схемы не найдено.'; + $lang['strcreateschema'] = 'Создать схему'; + $lang['strschemaname'] = 'Имя схемы'; + $lang['strschemaneedsname'] = 'Вам необходимо указать имя схемы.'; + $lang['strschemacreated'] = 'Схема создана.'; + $lang['strschemacreatedbad'] = 'Создание схемы прервано.'; + $lang['strconfdropschema'] = 'Вы уверены, что хотите уничтожить схему "%s"?'; + $lang['strschemadropped'] = 'Схема уничтожена.'; + $lang['strschemadroppedbad'] = 'Уничтожение схемы прервано.'; + $lang['strschemaaltered'] = 'Схема обновлена.'; + $lang['strschemaalteredbad'] = 'Обновление схемы прервано.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Домен'; + $lang['strdomains'] = 'Домены'; + $lang['strshowalldomains'] = 'Показать все домены'; + $lang['strnodomains'] = 'Ни одного домена не найдено.'; + $lang['strcreatedomain'] = 'Создать домен'; + $lang['strdomaindropped'] = 'Домен удален.'; + $lang['strdomaindroppedbad'] = 'Удаление домена прервано.'; + $lang['strconfdropdomain'] = 'Вы уверены, что хотите удалить домен "%s"?'; + $lang['strdomainneedsname'] = 'Вам необходимо указать имя домена.'; + $lang['strdomaincreated'] = 'Домен создан.'; + $lang['strdomaincreatedbad'] = 'Создание домена прервано.'; + $lang['strdomainaltered'] = 'Домен изменен.'; + $lang['strdomainalteredbad'] = 'Изменение домена прервано.'; + + // Operators + $lang['stroperator'] = 'Оператор'; + $lang['stroperators'] = 'Операторы'; + $lang['strshowalloperators'] = 'Показать все операторы'; + $lang['strnooperator'] = 'Оператор не обнаружен.'; + $lang['strnooperators'] = 'Операторы не обнаружены.'; + $lang['strcreateoperator'] = 'Создать оператор'; + $lang['strleftarg'] = 'Тип левого аргумента'; + $lang['strrightarg'] = 'Тип правого аргумента'; + $lang['strcommutator'] = 'Преобразование'; + $lang['strnegator'] = 'Отрицание'; + $lang['strrestrict'] = 'Ослабление'; + $lang['strjoin'] = 'Объединение'; + $lang['strhashes'] = 'Хеширование'; + $lang['strmerges'] = 'Слияние'; + $lang['strleftsort'] = 'Сотировка по левому'; + $lang['strrightsort'] = 'Сотировка по правому'; + $lang['strlessthan'] = 'Меньше'; + $lang['strgreaterthan'] = 'Больше'; + $lang['stroperatorneedsname'] = 'Вам необходимо указать название оператора.'; + $lang['stroperatorcreated'] = 'Оператор создан'; + $lang['stroperatorcreatedbad'] = 'Создание оператора прервано.'; + $lang['strconfdropoperator'] = 'Вы уверены, что хотите уничтожить оператор "%s"?'; + $lang['stroperatordropped'] = 'Оператор удален.'; + $lang['stroperatordroppedbad'] = 'Удаление оператора прервано.'; + + // Casts + $lang['strcasts'] = 'Образцы'; + $lang['strnocasts'] = 'Образцов не найдено.'; + $lang['strsourcetype'] = 'Тип источника'; + $lang['strtargettype'] = 'Тип приемника'; + $lang['strimplicit'] = 'Неявный'; + $lang['strinassignment'] = 'В назначении'; + $lang['strbinarycompat'] = '(двоично совместимый)'; + + // Conversions + $lang['strconversions'] = 'Преобразование'; + $lang['strnoconversions'] = 'Преобразований не найдено.'; + $lang['strsourceencoding'] = 'Кодировка источника'; + $lang['strtargetencoding'] = 'Кодировка приемника'; + + // Languages + $lang['strlanguages'] = 'Языки'; + $lang['strnolanguages'] = 'Языков не найдено.'; + $lang['strtrusted'] = 'Проверено'; + + // Info + $lang['strnoinfo'] = 'Нет доступной информации.'; + $lang['strreferringtables'] = 'Ссылающиеся таблицы'; + $lang['strparenttables'] = 'Родительские таблицы'; + $lang['strchildtables'] = 'Дочерние таблицы'; + + // Aggregates + $lang['straggregates'] = 'Агрегатные выражения'; + $lang['strnoaggregates'] = 'Агрегатных выражений не найдено.'; + $lang['stralltypes'] = '(Все типы)'; + + // Operator Classes + $lang['stropclasses'] = 'Классы операторов'; + $lang['strnoopclasses'] = 'Классов операторов не найдено.'; + $lang['straccessmethod'] = 'Метод доступа'; + + // Stats and performance + $lang['strrowperf'] = 'Представление записи'; + $lang['strioperf'] = 'Представление ввода/вывода'; + $lang['stridxrowperf'] = 'Представление индекса записи'; + $lang['stridxioperf'] = 'Представление индекса ввода/вывода'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Последовательный'; + $lang['strscan'] = 'Сканировать'; + $lang['strread'] = 'Читать'; + $lang['strfetch'] = 'Извлечь'; + $lang['strheap'] = 'Мусор'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST индекс'; + $lang['strcache'] = 'Кеш'; + $lang['strdisk'] = 'Диск'; + $lang['strrows2'] = 'Записи'; + + // Miscellaneous + $lang['strtopbar'] = '%s выполняется на %s:%s -- Вы зарегистрированы как "%s"'; + $lang['strtimefmt'] = ' j-m-Y g:i'; + $lang['strhelp'] = 'Помощь'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/slovak.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/slovak.php new file mode 100644 index 00000000..51a3f6b3 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/slovak.php @@ -0,0 +1,648 @@ +<?php + + /* + * Slovenska lokalizacia phpPgAdmin-u. + * ado (at) imladris.sk + */ + + // Language and character set + $lang['applang'] = 'Slovensky'; + $lang['applocale'] = 'sk-SK'; + $lang['applangdir'] = 'ltr'; + + // Basic strings + $lang['strintro'] = 'Vitaje vo phpPgAdmin-e.'; + $lang['strppahome'] = 'phpPgAdmin Homepage'; + $lang['strpgsqlhome'] = 'PostgreSQL Homepage'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL Dokumentácia'; + $lang['strreportbug'] = 'Oznámiť Chybu'; + $lang['strviewfaq'] = 'Zobraziť FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Prihlásenie'; + $lang['strloginfailed'] = 'Prihlásenie zlyhalo'; + $lang['strlogindisallowed'] = 'Prihlásenie je vypnuté kôli bezpečnosti'; + $lang['strserver'] = 'Server'; + $lang['strservers'] = 'Servery'; + $lang['strintroduction'] = 'Úvod'; + $lang['strhost'] = 'Hostiteľ'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Odhlásiť'; + $lang['strowner'] = 'Vlastník'; + $lang['straction'] = 'Akcia'; + $lang['stractions'] = 'Akcie'; + $lang['strname'] = 'Meno'; + $lang['strdefinition'] = 'Definícia'; + $lang['strproperties'] = 'Vlastnosti'; + $lang['strbrowse'] = 'Prehliadať'; + $lang['strdrop'] = 'Odstrániť'; + $lang['strdropped'] = 'Odstránený'; + $lang['strnull'] = 'Nulový'; + $lang['strnotnull'] = 'Ne-nulový'; + $lang['strprev'] = 'Predchádzajúci'; + $lang['strnext'] = 'Ďaľší'; + $lang['strfirst'] = '<< Prvý'; + $lang['strlast'] = 'Posledný >>'; + $lang['strfailed'] = 'Chyba.'; + $lang['strcreate'] = 'Vytvoriť'; + $lang['strcreated'] = 'Vytvorené'; + $lang['strcomment'] = 'Komentár'; + $lang['strlength'] = 'Dĺžka'; + $lang['strdefault'] = 'Predvolené'; + $lang['stralter'] = 'Zmeniť'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Zrušiť'; + $lang['strsave'] = 'Uložiť'; + $lang['strreset'] = 'Reset'; + $lang['strinsert'] = 'Vložiť'; + $lang['strselect'] = 'Vybrať'; + $lang['strdelete'] = 'Zmazať'; + $lang['strupdate'] = 'Aktualizovať'; + $lang['strreferences'] = 'Referencie'; + $lang['stryes'] = 'Áno'; + $lang['strno'] = 'Nie'; + $lang['strtrue'] = 'True'; + $lang['strfalse'] = 'False'; + $lang['stredit'] = 'Upraviť'; + $lang['strcolumn'] = 'Stĺpec'; + $lang['strcolumns'] = 'Stĺpce'; + $lang['strrows'] = 'riadky'; + $lang['strrowsaff'] = 'riadkov ovplyvnených.'; + $lang['strobjects'] = 'objekt(y)'; + $lang['strback'] = 'Späť'; + $lang['strqueryresults'] = 'Výsledky Dotazu'; + $lang['strshow'] = 'Ukázať'; + $lang['strempty'] = 'Vyprázdniť'; + $lang['strlanguage'] = 'Jazyk'; + $lang['strencoding'] = 'Kódovanie'; + $lang['strvalue'] = 'Hodnota'; + $lang['strunique'] = 'Unikátny'; + $lang['strprimary'] = 'Primárny'; + $lang['strexport'] = 'Exportovať'; + $lang['strimport'] = 'Import'; + $lang['strallowednulls'] = 'Povolený NULL znak'; + $lang['strbackslashn'] = '\N'; + $lang['strnull'] = 'Null'; + $lang['strnull'] = 'NULL (slovo)'; + $lang['stremptystring'] = 'Prázdny reťazec/pole'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Vyčistiť'; + $lang['stranalyze'] = 'Analyzovať'; + $lang['strclusterindex'] = 'Cluster'; + $lang['strclustered'] = 'Clustered?'; + $lang['strreindex'] = 'Reindex'; + $lang['strrun'] = 'Spustiť'; + $lang['stradd'] = 'Pridať'; + $lang['strremove'] = 'Zmazať'; + $lang['strevent'] = 'Prípadne'; + $lang['strwhere'] = 'Kde'; + $lang['strinstead'] = 'Urobiť Namiesto'; + $lang['strwhen'] = 'Kedy'; + $lang['strformat'] = 'Formát'; + $lang['strdata'] = 'Dáta'; + $lang['strconfirm'] = 'Potvrdiť'; + $lang['strexpression'] = 'Výraz'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Rozšíriť'; + $lang['strcollapse'] = 'Zbaliť'; + $lang['strexplain'] = 'Vysvetliť'; + $lang['strexplainanalyze'] = 'Vysvetliť Analyze'; + $lang['strfind'] = 'Nájsť'; + $lang['stroptions'] = 'Nastavenia'; + $lang['strrefresh'] = 'Obnoviť'; + $lang['strdownload'] = 'Download'; + $lang['strdownloadgzipped'] = 'Stiahnuť skomprimované pomocou gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Viac'; + $lang['strvariables'] = 'Premenné'; + $lang['strprocess'] = 'Proces'; + $lang['strprocesses'] = 'Procesy'; + $lang['strsetting'] = 'Nastavenie'; + $lang['streditsql'] = 'Upraviť SQL'; + $lang['strruntime'] = 'Celkový beh: %s ms'; + $lang['strpaginate'] = 'Výsledky stránkovania'; + $lang['struploadscript'] = 'alebo uploadni SQL skript:'; + $lang['strstarttime'] = 'Čas štartu'; + $lang['strfile'] = 'Súbor'; + $lang['strfileimported'] = 'Súbor importovaný.'; + $lang['strtrycred'] = 'Použiť tieto hodnoty pre všetky hodnoty'; +$lang['strexecute'] = 'Execute'; + + // Error handling + $lang['strnoframes'] = 'Táto aplikácia funguje najlapšie s prehliadačom, ktorý podporuje technológiu frame-ov, no môže byť použitý aj takým, ktorý to nepodporuje nasledovaním tohto odkazu:'; + $lang['strnoframeslink'] = 'Nepoužívať frame-y'; + $lang['strbadconfig'] = 'Tvoj config.inc.php je zastaralý. Musíš vygenerovať nový zo súboru config.inc.php-dist.'; + $lang['strnotloaded'] = 'Tvoje PHP nie je skompilované s potrebnou podporou databáz.'; + $lang['strpostgresqlversionnotsupported'] = 'Tvoja verzia PostgreSQL nie je podporovaná. Prosím aktualizuj ju na verziu %s alebo vyššiu.'; + $lang['strbadschema'] = 'Špecifikovaná chybná schéma.'; + $lang['strbadencoding'] = 'Nastavenie kódovania v databáze zlyhalo.'; + $lang['strsqlerror'] = 'SQL chyba:'; + $lang['strinstatement'] = 'Vo výraze:'; + $lang['strinvalidparam'] = 'Chybné parametre skriptu.'; + $lang['strnodata'] = 'Nenájdené žiadne záznamy.'; + $lang['strnoobjects'] = 'Nenájdené žiadne objekty.'; + $lang['strrownotunique'] = 'Žiadny unikátny identifikárot pre tento riadok.'; + $lang['strnouploads'] = 'Upload súborov je vypnutý.'; + $lang['strimporterror'] = 'Chyba Import-u.'; + $lang['strimporterror-fileformat'] = 'Chyba importu: Automatické určenie formátu súboru zlyhalo.'; + $lang['strimporterrorline'] = 'Chyba Import-u na riadku %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Chyba importu na riadku %s: Riadok nemá správny počet stĺpcov.'; + $lang['strimporterror-uploadedfile'] = 'Chyba importu: Súbor nemôže byť upload-nutý k serveru'; + $lang['strcannotdumponwindows'] = 'Dump komplexných tabuliek a schém nie je na platforme Windows podporovaný.'; + + // Tables + $lang['strtable'] = 'Tabuľka'; + $lang['strtables'] = 'Tabuľky'; + $lang['strshowalltables'] = 'Zobraziť Všetky Tabuľky'; + $lang['strnotables'] = 'Nenájdené žiadne tabuľky.'; + $lang['strnotable'] = 'Nenájdená žiadna tabuľka.'; + $lang['strcreatetable'] = 'Vytvoriť tabuľku'; + $lang['strtablename'] = 'Názov tabuľky'; + $lang['strtableneedsname'] = 'Musíš zadať názov pre tvoju tabuľku.'; + $lang['strtableneedsfield'] = 'Musíš špecifikovať aspoň jedno pole.'; + $lang['strtableneedscols'] = 'Tabuľky vyžadujú vyhovujúci počet stĺpcov.'; + $lang['strtablecreated'] = 'Tabuľka vytvorená.'; + $lang['strtablecreatedbad'] = 'Tabuľka nebola vytvorená.'; + $lang['strconfdroptable'] = 'Naozaj chceš odstrániť tabuľku "%s"?'; + $lang['strtabledropped'] = 'Tabuľka odstránená.'; + $lang['strtabledroppedbad'] = 'Tabuľka nebola odstránená.'; + $lang['strconfemptytable'] = 'Si si istý, že chceš vyprázdniť tabuľku "%s"?'; + $lang['strtableemptied'] = 'Tabuľka vyprázdnená.'; + $lang['strtableemptiedbad'] = 'Tabuľka nebola vyprázdnená.'; + $lang['strinsertrow'] = 'Vložiť Riadok'; + $lang['strrowinserted'] = 'Riadok vložený.'; + $lang['strrowinsertedbad'] = 'Riadok nebol vložený.'; + $lang['strrowduplicate'] = 'Vloženie riadku zlyhalo, pokus o duplikátny insert.'; + $lang['streditrow'] = 'Upraviť Riadok'; + $lang['strrowupdated'] = 'Riadok upravený.'; + $lang['strrowupdatedbad'] = 'Riadok nebol upravený.'; + $lang['strdeleterow'] = 'Zmazať Riadok'; + $lang['strconfdeleterow'] = 'Si si istý, že chceš zmazať tento riadok?'; + $lang['strrowdeleted'] = 'Riadok zmazaný.'; + $lang['strrowdeletedbad'] = 'Riadok nebol zmazaný.'; + $lang['strinsertandrepeat'] = 'Vložiť & Zopakovať'; + $lang['strnumcols'] = 'Počet stĺpcov'; + $lang['strcolneedsname'] = 'Musíš zadať názov pre tvoj stĺpec'; + $lang['strselectallfields'] = 'Vybrať všetky polia'; + $lang['strselectneedscol'] = 'Musíš označiť aspoň jeden stĺpec.'; + $lang['strselectunary'] = 'Unárne operátory nemôžu mať hodnoty.'; + $lang['straltercolumn'] = 'Zmeniť Stĺpec'; + $lang['strcolumnaltered'] = 'Stĺpec zmenený.'; + $lang['strcolumnalteredbad'] = 'Stĺpec nebol zmenený.'; + $lang['strconfdropcolumn'] = 'Naozaj chceš zmazať stĺpec "%s" z tabuľky "%s"?'; + $lang['strcolumndropped'] = 'Stĺpec zmenený.'; + $lang['strcolumndroppedbad'] = 'Stĺpec nebol zmazaný.'; + $lang['straddcolumn'] = 'Pridať Stĺpec'; + $lang['strcolumnadded'] = 'Stĺpec pridaný.'; + $lang['strcolumnaddedbad'] = 'Stĺpec nebol pridaný.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Tabuľka zmenená.'; + $lang['strtablealteredbad'] = 'Tabuľka nebola zmenená.'; + $lang['strdataonly'] = 'Iba Dáta'; + $lang['strstructureonly'] = 'Iba Štruktúra'; + $lang['strstructureanddata'] = 'Štruktúra a Dáta'; + $lang['strtabbed'] = 'Tabbed'; + $lang['strauto'] = 'Auto'; + $lang['strconfvacuumtable'] = 'Naozaj chceš vyčistiť "%s"?'; + $lang['strestimatedrowcount'] = 'Odhadovaný počet riadkov'; + + // Users + $lang['struser'] = 'Používateľ'; + $lang['strusers'] = 'Používatelia'; + $lang['strusername'] = 'Meno používateľa'; + $lang['strpassword'] = 'Heslo'; + $lang['strsuper'] = 'Superuser?'; + $lang['strcreatedb'] = 'Vytváranie DB?'; + $lang['strexpires'] = 'Expiruje'; + $lang['strsessiondefaults'] = 'Sessions defaults'; //s cim to tak suvis??:) + $lang['strnousers'] = 'Nenájdení žiadni používatelia.'; + $lang['struserupdated'] = 'Požívatelia zmenení.'; + $lang['struserupdatedbad'] = 'Použivatelia neboli zmenení.'; + $lang['strshowallusers'] = 'Zobraziť Všetkých Používateľov'; + $lang['strcreateuser'] = 'Vytvoriť používateľa'; + $lang['struserneedsname'] = 'Musíš zadať meno pre svojho používateľa.'; + $lang['strusercreated'] = 'Používateľ vytvorený.'; + $lang['strusercreatedbad'] = 'Používateľ nebol vytvorený.'; + $lang['strconfdropuser'] = 'Naozaj chceš zmazať používateľa "%s"?'; + $lang['struserdropped'] = 'Používateľ zmazaný.'; + $lang['struserdroppedbad'] = 'Používateľ nebol zmazaný.'; + + // Groups + $lang['straccount'] = 'Konto'; + $lang['strchangepassword'] = 'Zmeniť Heslo'; + $lang['strpasswordchanged'] = 'Heslo zmenené.'; + $lang['strpasswordchangedbad'] = 'Heslo NEBOLO zmenené.'; + $lang['strpasswordshort'] = 'Heslo je príliš krátke.'; + $lang['strpasswordconfirm'] = 'Heslo sa nezhoduje so zadaným overovacím heslom.'; + + // Groups + $lang['strgroup'] = 'Skupina'; + $lang['strgroups'] = 'Skupiny'; + $lang['strnogroup'] = 'Skupina nenájdená.'; + $lang['strnogroups'] = 'Žiadne skupiny nenájdené.'; + $lang['strcreategroup'] = 'Vytvoriť Skupinu'; + $lang['strshowallgroups'] = 'Zobraziť Všetky Skupiny'; + $lang['strgroupneedsname'] = 'Musíš zadať názov pre tvoju skupinu.'; + $lang['strgroupcreated'] = 'Skupina Vytvorená.'; + $lang['strgroupcreatedbad'] = 'Skupina nebola vytvorená.'; + $lang['strconfdropgroup'] = 'Naozaj chceš zmazať skupinu "%s"?'; + $lang['strgroupdropped'] = 'Skupina zmazaná.'; + $lang['strgroupdroppedbad'] = 'Skupina nebola zmazaná.'; + $lang['strmembers'] = 'Členovia'; + $lang['straddmember'] = 'Pridať člena'; + $lang['strmemberadded'] = 'Člen pridaný.'; + $lang['strmemberaddedbad'] = 'Člen nebol pridaný.'; + $lang['strdropmember'] = 'Zmazať člena'; + $lang['strconfdropmember'] = 'Naozaj chceš zmazať cľena "%s" zo skupiny "%s"?'; + $lang['strmemberdropped'] = 'Člen zmazaný.'; + $lang['strmemberdroppedbad'] = 'Člen nebol zmazaný.'; + + // Privilges + $lang['strprivilege'] = 'Privilégiá'; + $lang['strprivileges'] = 'Privilégiá'; + $lang['strnoprivileges'] = 'Tento objekt nemá privilégiá.'; + $lang['strgrant'] = 'Povoliť'; + $lang['strrevoke'] = 'Odobrať'; + $lang['strgranted'] = 'Privilégiá pridané.'; + $lang['strgrantfailed'] = 'Privilégiá neboli pridané.'; + $lang['strgrantbad'] = 'Musíš špecifikovat aspoň jedného užívateľa/skupinu a aspoň jedno privilégium.'; + $lang['strgrantor'] = 'Prideľovateľ'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Databáza'; + $lang['strdatabases'] = 'Databázy'; + $lang['strshowalldatabases'] = 'Zobraziť všetky databázy'; + $lang['strnodatabase'] = 'Nenájdená žiadna Databáza.'; + $lang['strnodatabases'] = 'Nenájdené žiadne Databázy.'; + $lang['strcreatedatabase'] = 'Vytvoriť databázu'; + $lang['strdatabasename'] = 'Názov databázy'; + $lang['strdatabaseneedsname'] = 'Musíš zadať názov pre tvoju databázu.'; + $lang['strdatabasecreated'] = 'Databáza vytvorená.'; + $lang['strdatabasecreatedbad'] = 'Databáza nebola vytvorená.'; + $lang['strconfdropdatabase'] = 'Naozaj chceš zmazať databázu "%s"?'; + $lang['strdatabasedropped'] = 'Databáze zmazaná.'; + $lang['strdatabasedroppedbad'] = 'Databáza nebola zmazaná.'; + $lang['strentersql'] = 'Vložiť SQL dotaz:'; + $lang['strsqlexecuted'] = 'SQL dotaz vykonaný.'; + $lang['strvacuumgood'] = 'Vyčistenie kompletné.'; + $lang['strvacuumbad'] = 'Vyčistnie zlyhalo.'; + $lang['stranalyzegood'] = 'Analyzovanie kompletné.'; + $lang['stranalyzebad'] = 'Analyzovanie zlyhalo.'; + $lang['strreindexgood'] = 'Reindex hotový.'; + $lang['strreindexbad'] = 'Reindex zlyhal.'; + $lang['strfull'] = 'Full'; //todo - konzultovat!! + $lang['strfreeze'] = 'Freeze'; //deto + $lang['strforce'] = 'Force'; // -||- + $lang['strsignalsent'] = 'Signál odoslaný.'; + $lang['strsignalsentbad'] = 'Odoslanie signálu zlyhalo.'; + $lang['strallobjects'] = 'Všetky objekty'; + $lang['strdatabasealtered'] = 'Databáza zmenená.'; + $lang['strdatabasealteredbad'] = 'Databáza nebola zmenená.'; + + // Views + $lang['strview'] = 'Náhľad'; + $lang['strviews'] = 'Náhľady'; + $lang['strshowallviews'] = 'Zobraziť Všetky Náhľady'; + $lang['strnoview'] = 'Nenájdený žiadny náhľad.'; + $lang['strnoviews'] = 'Nenájdené žiadne náhľady.'; + $lang['strcreateview'] = 'Vytvoriť Náhľad'; + $lang['strviewname'] = 'Názov náhľadu'; + $lang['strviewneedsname'] = 'Musíš zadať názov pre tvoj náhľad.'; + $lang['strviewneedsdef'] = 'Musíš zadať definíciu pre tvoj náhľad.'; + $lang['strviewneedsfields'] = 'Mušíš zvoliť stĺpce, ktoré chceš mať vo svojom náhľade.'; + $lang['strviewcreated'] = 'Náhľad vytvorený.'; + $lang['strviewcreatedbad'] = 'Náhľad nebol vytvorený.'; + $lang['strconfdropview'] = 'Naozaj chceš zmazať náhľad "%s"?'; + $lang['strviewdropped'] = 'Náhľad zmazaný.'; + $lang['strviewdroppedbad'] = 'Náhľad nebol zmazaný.'; + $lang['strviewupdated'] = 'Náhľad upravený.'; + $lang['strviewupdatedbad'] = 'Náhľad nebol upravený.'; + $lang['strviewlink'] = 'Linkujúce Kľúče'; + $lang['strviewconditions'] = 'Doplňujúce Podmienky'; + $lang['strcreateviewwiz'] = 'Vytvoriť náhľad cez \"pomocníka\"'; + + // Sequences + $lang['strsequence'] = 'Sekvencia'; + $lang['strsequences'] = 'Sekvencie'; + $lang['strshowallsequences'] = 'Zobraziť Všetky Sekvencie'; + $lang['strnosequence'] = 'Nenájdená žiadna sekvencia.'; + $lang['strnosequences'] = 'nenájdené žiadne sekvencie.'; + $lang['strcreatesequence'] = 'Vytvoriť Sekvenciu'; + $lang['strlastvalue'] = 'Posledná Hodnota'; + $lang['strincrementby'] = 'Inkrementovať od'; + $lang['strstartvalue'] = 'Start Hodnota'; + $lang['strmaxvalue'] = 'Max Hodnota'; + $lang['strminvalue'] = 'Min Hodnota'; + $lang['strcachevalue'] = 'Cache Hodnota'; + $lang['strlogcount'] = 'Log Súčet'; + $lang['striscycled'] = 'Je Cycled?'; + $lang['strsequenceneedsname'] = 'Musíš zadať názov pre tvoju sekvenciu.'; + $lang['strsequencecreated'] = 'Sekvencia vytvorená.'; + $lang['strsequencecreatedbad'] = 'Sekvencia nebola vytvorená.'; + $lang['strconfdropsequence'] = 'Naozaj chceš zmazať sekvenciu "%s"?'; + $lang['strsequencedropped'] = 'Sekvencia zmazaná.'; + $lang['strsequencedroppedbad'] = 'Sekvencia nebola zmazaná.'; + $lang['strsequencereset'] = 'Sekvencia resetovaná.'; + $lang['strsequenceresetbad'] = 'Sekvencia nebola resetovaná.'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Indexy'; + $lang['strindexname'] = 'Názov Indexu'; + $lang['strshowallindexes'] = 'Zobraziť Všetky Indexy'; + $lang['strnoindex'] = 'Nenájdený žiadny index.'; + $lang['strnoindexes'] = 'Nenájdené žiadne indexy.'; + $lang['strcreateindex'] = 'Vytvoriť Index'; + $lang['strtabname'] = 'Tab Meno'; + $lang['strcolumnname'] = 'Názov ståpca'; + $lang['strindexneedsname'] = 'Musíš zadať názov pre tvoj index'; + $lang['strindexneedscols'] = 'Index vyžaduje vyhovujúci počet stĺpcov.'; + $lang['strindexcreated'] = 'Index vytvorený'; + $lang['strindexcreatedbad'] = 'Index nebol vytvorený.'; + $lang['strconfdropindex'] = 'Naozaj chceš zmazať index "%s"?'; + $lang['strindexdropped'] = 'Index zmazaný.'; + $lang['strindexdroppedbad'] = 'Index nebol zmazaný.'; + $lang['strkeyname'] = 'Názov Kľúču'; + $lang['struniquekey'] = 'Unikátny Kľúč'; + $lang['strprimarykey'] = 'Primárny Kľúč'; + $lang['strindextype'] = 'Typ indexu'; + $lang['strtablecolumnlist'] = 'Stĺpce v Tabuľke'; + $lang['strindexcolumnlist'] = 'Stľpce v Indexe'; + $lang['strconfcluster'] = 'Naozaj chceš vytvoriť cluster "%s"?'; + $lang['strclusteredgood'] = 'Cluster hotový.'; + $lang['strclusteredbad'] = 'Cluster nebol vytvorený.'; +$lang['strcluster'] = 'Cluster'; + + // Rules + $lang['strrules'] = 'Pravidlá'; + $lang['strrule'] = 'Pravidlo'; + $lang['strshowallrules'] = 'Zobraziť Všetky Pravidlá'; + $lang['strnorule'] = 'Nenájdené žiadne pravidlo.'; + $lang['strnorules'] = 'Nenájdené žiadne pravidlá.'; + $lang['strcreaterule'] = 'Vytvoriť pravidlo'; + $lang['strrulename'] = 'Názov pravidla'; + $lang['strruleneedsname'] = 'Musíš zadať názov pre tvoje pravidlo.'; + $lang['strrulecreated'] = 'Pravidlo vytvorené.'; + $lang['strrulecreatedbad'] = 'Pravidlo nebolo vytvorené.'; + $lang['strconfdroprule'] = 'Naozaj chceš zmazať pravidlo "%s" na "%s"?'; + $lang['strruledropped'] = 'Pravidlo zmazané.'; + $lang['strruledroppedbad'] = 'Pravidlo nebolo zmazané.'; + + // Constraints + $lang['strconstraint'] = 'Obmedzenie'; + $lang['strconstraints'] = 'Obmedzenia'; + $lang['strshowallconstraints'] = 'Zobraziť Všetky Obmedzenia'; + $lang['strnoconstraints'] = 'Nenájdené žiadne obmedzenie.'; + $lang['strcreateconstraint'] = 'Vytvoriť Obmedzenie'; + $lang['strconstraintcreated'] = 'Obmedzenie vytvorené.'; + $lang['strconstraintcreatedbad'] = 'Obmedzenie nebolo vytvorené.'; + $lang['strconfdropconstraint'] = 'Naozaj chceš zmazať obmedzenie "%s" na "%s"?'; + $lang['strconstraintdropped'] = 'Obmedzenie zmazané.'; + $lang['strconstraintdroppedbad'] = 'Obmedzenie nebolo zmazané.'; + $lang['straddcheck'] = 'Pridať Overovanie'; + $lang['strcheckneedsdefinition'] = 'Overovanie Obmedzenia vyžaduje jeho definovanie.'; + $lang['strcheckadded'] = 'Overovanie obmedzenia pridané.'; + $lang['strcheckaddedbad'] = 'Overovanie obmedzenia nebolo pridané.'; + $lang['straddpk'] = 'Pridať Primárny Kľúč'; + $lang['strpkneedscols'] = 'Primárny kľúč vyžaduje aspoň jeden stĺpec.'; + $lang['strpkadded'] = 'Primárny kľúč pridaný.'; + $lang['strpkaddedbad'] = 'Primárny kľúč nebol pridaný.'; + $lang['stradduniq'] = 'Pridať Unikátny Kľúč'; + $lang['struniqneedscols'] = 'Unikátny kľúč vyžaduje aspoň jeden stĺpec.'; + $lang['struniqadded'] = 'Unikátny kľúč pridaný.'; + $lang['struniqaddedbad'] = 'Unikátny kľúč nebol pridaný.'; + $lang['straddfk'] = 'Pridať Cudzí Kľúč'; + $lang['strfkneedscols'] = 'Cudzí kľúč vyžaduje aspoň jeden stĺpec.'; + $lang['strfkneedstarget'] = 'Cudzí kľúč vyžaduje cieľovú tabuľku.'; + $lang['strfkadded'] = 'Cudzí kľúč pridaný.'; + $lang['strfkaddedbad'] = 'Cudzí kľúč nebol pridaný.'; + $lang['strfktarget'] = 'Cieľová tabuľka'; + $lang['strfkcolumnlist'] = 'Stľpce v kľúči'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Funkcia'; + $lang['strfunctions'] = 'Funkcie'; + $lang['strshowallfunctions'] = 'Zobraziť vŠetky funkcie'; + $lang['strnofunction'] = 'Nenájdená žiadna funkcia.'; + $lang['strnofunctions'] = 'Nenájdené žiadne funkcie.'; + $lang['strcreateplfunction'] = 'Vytvoriť SQL/PL funkciu'; + $lang['strcreateinternalfunction'] = 'Vytvoriť internú funkciu'; + $lang['strcreatecfunction'] = 'Vytvoriť C funkciu'; + $lang['strfunctionname'] = 'Názov funkcie'; + $lang['strreturns'] = 'Vracia'; + $lang['strarguments'] = 'Argumenty'; + $lang['strproglanguage'] = 'Jazyk'; + $lang['strfunctionneedsname'] = 'Musíš zadať názov pre tvoju funkciu.'; + $lang['strfunctionneedsdef'] = 'Musíš zadať definíciu pre tvoju funkciu.'; + $lang['strfunctioncreated'] = 'Funkcia vytvorená.'; + $lang['strfunctioncreatedbad'] = 'Funkcia nebola vytvorená.'; + $lang['strconfdropfunction'] = 'Si si istý, že chceš zmazať funkciu "%s"?'; + $lang['strfunctiondropped'] = 'Funkcia zmazaná.'; + $lang['strfunctiondroppedbad'] = 'Funkcia nebola zmazaná.'; + $lang['strfunctionupdated'] = 'Funkcia upravená.'; + $lang['strfunctionupdatedbad'] = 'Funkcia nebola upravená.'; + $lang['strobjectfile'] = 'Objektový súbor'; + $lang['strlinksymbol'] = 'Link symbol'; + + // Triggers + $lang['strtrigger'] = 'Trigger'; //su to medzipravidla ?? po cesky spouste.. + $lang['strtriggers'] = 'Trigger-y'; + $lang['strshowalltriggers'] = 'Zobraziť Všetky Trigger-y'; + $lang['strnotrigger'] = 'Nenájdený žiadny Trigger.'; + $lang['strnotriggers'] = 'Nenájdené žiadne Trigger-y.'; + $lang['strcreatetrigger'] = 'Vytvoriť Trigger'; + $lang['strtriggerneedsname'] = 'Musíš zadať názov pre tvoj Trigger.'; + $lang['strtriggerneedsfunc'] = 'Musíš zadať funkciu pre tvoj Trigger.'; + $lang['strtriggercreated'] = 'Trigger vytvorený.'; + $lang['strtriggercreatedbad'] = 'Trigger nebol vytvorený.'; + $lang['strconfdroptrigger'] = 'Naozaj chceš zmazať Trigger "%s" na "%s"?'; + $lang['strtriggerdropped'] = 'Trigger zmazaný.'; + $lang['strtriggerdroppedbad'] = 'Trigger nebol zmazaný.'; + $lang['strtriggeraltered'] = 'Trigger zmenený.'; + $lang['strtriggeralteredbad'] = 'Trigger nebol zmenený.'; + $lang['strforeach'] = 'Pre každých'; + + // Types + $lang['strtype'] = 'Typ'; + $lang['strtypes'] = 'Typy'; + $lang['strshowalltypes'] = 'Zobraziť Všetky typy'; + $lang['strnotype'] = 'Nenájdený žiadny typ.'; + $lang['strnotypes'] = 'Nenájdené žiadne typy.'; + $lang['strcreatetype'] = 'Vytvoriť Typ'; + $lang['strcreatecomptype'] = 'Vytvoriť kompozitný typ'; + $lang['strtypeneedsfield'] = 'Musíš vybrať aspoň jedno pole.'; + $lang['strtypeneedscols'] = 'Musíš zadať správny počet polí.'; + $lang['strtypename'] = 'Názov typu'; + $lang['strinputfn'] = 'Vstupná funkcia'; + $lang['stroutputfn'] = 'Výstupná funkcia'; + $lang['strpassbyval'] = 'Passed by val?'; + $lang['stralignment'] = 'Alignment'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Delimiter'; + $lang['strstorage'] = 'Storage'; + $lang['strfield'] = 'Pole'; + $lang['strnumfields'] = 'Počet polí'; + $lang['strtypeneedsname'] = 'Musíš zadať názov pre tvoj typ.'; + $lang['strtypeneedslen'] = 'Musíš zadať dĺžku pre tvoj typ.'; + $lang['strtypecreated'] = 'Typ Vytvorený'; + $lang['strtypecreatedbad'] = 'Typ nebol vytvorený.'; + $lang['strconfdroptype'] = 'Naozaj chceš zmazať typ "%s"?'; + $lang['strtypedropped'] = 'Typ zmazaný.'; + $lang['strtypedroppedbad'] = 'Typ nebol zmazaný.'; + $lang['strflavor'] = 'Flavor'; //todo + $lang['strbasetype'] = 'Základný'; + $lang['strcompositetype'] = 'Kompozitný'; + $lang['strpseudotype'] = 'Pseudo'; + + // Schemas + $lang['strschema'] = 'Schéma'; + $lang['strschemas'] = 'Schémy'; + $lang['strshowallschemas'] = 'Zobraziť Všetky Schémy'; + $lang['strnoschema'] = 'Nenájdená žiadna schéma.'; + $lang['strnoschemas'] = 'Nenájdené žiadne schémy.'; + $lang['strcreateschema'] = 'Vytvoriť Schému'; + $lang['strschemaname'] = 'Názov Schémy'; + $lang['strschemaneedsname'] = 'Musíš zadať názov pre tvoju schému.'; + $lang['strschemacreated'] = 'Schéma vytvorená'; + $lang['strschemacreatedbad'] = 'Schéma nebola vytvorená.'; + $lang['strconfdropschema'] = 'Naozaj chceš zmazať schému "%s"?'; + $lang['strschemadropped'] = 'Schéma zmazaná.'; + $lang['strschemadroppedbad'] = 'Schéma nebola zmazaná.'; + $lang['strschemaaltered'] = 'Schéma zmenená.'; + $lang['strschemaalteredbad'] = 'Schéma nebola zmenená.'; + $lang['strsearchpath'] = 'Cesta k nájdeniu Schémy'; + + // Reports + + //Domains + $lang['strdomain'] = 'Doména'; + $lang['strdomains'] = 'Domény'; + $lang['strshowalldomains'] = 'Zobraziť Všetky Domény'; + $lang['strnodomains'] = 'Nenájdené žiadne domény.'; + $lang['strcreatedomain'] = 'Vytvoriť doménu'; + $lang['strdomaindropped'] = 'Doména zmazaná.'; + $lang['strdomaindroppedbad'] = 'Doména nebola zmazaná.'; + $lang['strconfdropdomain'] = 'Naozaj chceš zmazať doménu "%s"?'; + $lang['strdomainneedsname'] = 'Musíš zadať názov pre tvoju doménu.'; + $lang['strdomaincreated'] = 'Doména vytvorená.'; + $lang['strdomaincreatedbad'] = 'Doména nebola vytvorená.'; + $lang['strdomainaltered'] = 'Doména zmenená.'; + $lang['strdomainalteredbad'] = 'Doména nebola zmenená.'; + + //Operators + $lang['stroperator'] = 'Operátor'; + $lang['stroperators'] = 'Operátory'; + $lang['strshowalloperators'] = 'Zobraziť Všetky Operátory'; + $lang['strnooperator'] = 'Nenájdený žiadny operátor.'; + $lang['strnooperators'] = 'Nenájdené žiadne operátory.'; + $lang['strcreateoperator'] = 'Vytvoriť Operátor'; + $lang['strleftarg'] = 'Ľavý Arg Typ'; + $lang['strrightarg'] = 'Pravý Arg Typ'; + $lang['strcommutator'] = 'Komutátor'; + $lang['strnegator'] = 'Negátor'; + $lang['strrestrict'] = 'Obmedziť'; + $lang['strjoin'] = 'Join'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Merges'; + $lang['strleftsort'] = 'Ľavý sort'; + $lang['strrightsort'] = 'Pravý sort'; + $lang['strlessthan'] = 'Menej ako'; + $lang['strgreaterthan'] = 'Viac ako'; + $lang['stroperatorneedsname'] = 'Musíš zadať názov pre tvoj operátor.'; + $lang['stroperatorcreated'] = 'Operátor vytvorený'; + $lang['stroperatorcreatedbad'] = 'Operátor nebol vytvorený.'; + $lang['strconfdropoperator'] = 'Naozaj chceš zmazať operátor "%s"?'; + $lang['stroperatordropped'] = 'Operátor zmazaný.'; + $lang['stroperatordroppedbad'] = 'Operátor nebol zmazaný.'; + + //Casts + $lang['strcasts'] = 'Cast-y'; + $lang['strnocasts'] = 'Nenájdené žiadne Cast-y.'; + $lang['strsourcetype'] = 'Zdrojový typ'; + $lang['strtargettype'] = 'Cieľový typ'; + $lang['strimplicit'] = 'Implicitný'; + $lang['strinassignment'] = 'V priradení'; + $lang['strbinarycompat'] = '(Binárne identické)'; + + // Conversions + $lang['strconversions'] = 'Konverzie'; + $lang['strnoconversions'] = 'Nenájdené žiadne konverzie.'; + $lang['strsourceencoding'] = 'Zdojové kódovanie'; + $lang['strtargetencoding'] = 'Cieľové kódovanie'; + + // Languages + $lang['strlanguages'] = 'Jazyky'; + $lang['strnolanguages'] = 'Nenájdené žiadne jazyky.'; + $lang['strtrusted'] = 'Trusted'; + + // Info + $lang['strnoinfo'] = 'Informácie nedostupné.'; + $lang['strreferringtables'] = 'Referujúce tabuľky'; + $lang['strparenttables'] = 'Rodičovské tabuľky'; + $lang['strchildtables'] = 'Dcérske tabuľky'; + + // Aggregates + $lang['straggregates'] = 'Agregáty'; + $lang['strnoaggregates'] = 'Nenájdené žiadne agregáty.'; + $lang['stralltypes'] = '(Všetky typy)'; + + // Operator Classes + $lang['stropclasses'] = 'Op Triedy'; + $lang['strnoopclasses'] = 'Nenájdené žiadne op. triedy.'; + $lang['straccessmethod'] = 'Prístupové metódy'; + + // Stats and performance + $lang['strrowperf'] = 'Výkonnosť Riadku'; //to znie dost tupo.. + $lang['strioperf'] = 'I/O Výkon'; + $lang['stridxrowperf'] = 'Výkonnosť Indexovania Riadkov'; + $lang['stridxioperf'] = 'Index I/O Výkon'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sekvenčný'; + $lang['strscan'] = 'Scan'; //co s tymto tu??? + $lang['strread'] = 'Načítať'; + $lang['strfetch'] = 'Získať'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disk'; + $lang['strrows2'] = 'Riadkov'; + + // Tablespaces + $lang['strtablespace'] = 'Priestor pre tabuľku'; + $lang['strtablespaces'] = 'Priestory tabuliek'; + $lang['strshowalltablespaces'] = 'Zobraziť všetky priestory pre tabuľky'; + $lang['strnotablespaces'] = 'Nenájdené žiadne priestory tabuliek.'; + $lang['strcreatetablespace'] = 'Vytvoriť priestor pre tabuľku'; + $lang['strlocation'] = 'Umiestnenie'; + $lang['strtablespaceneedsname'] = 'Musíš zadať názov priestoru tabuľky.'; + $lang['strtablespaceneedsloc'] = 'Musíš zadať adresár, vktorom sa má vytvoriť priestor pre tabuľku.'; + $lang['strtablespacecreated'] = 'Priestor pre tabuľku bol vytvorený.'; + $lang['strtablespacecreatedbad'] = 'Vytvorenie priestoru pre tabuľku zlyhalo.'; + $lang['strconfdroptablespace'] = 'Naozaj chceš odstrániť priestor tabuľky "%s"?'; + $lang['strtablespacedropped'] = 'Priestor pre tabuľku bol odstránený.'; + $lang['strtablespacedroppedbad'] = 'Odstránenie priestoru zlyhalo.'; + $lang['strtablespacealtered'] = 'Priestor tabuľky zmenený.'; + $lang['strtablespacealteredbad'] = 'Zmenenie priestoru tabuľky zlyhalo.'; + + + // Miscellaneous + $lang['strtopbar'] = '%s beží na %s:%s -- si prihlásený ako "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Pomoc'; + $lang['strhelpicon'] = '?'; + $lang['strlogintitle'] = 'Prihlasujem do %s'; + $lang['strlogoutmsg'] = 'Odhlásený z %s'; + $lang['strloading'] = 'Spracuvávam...'; + $lang['strerrorloading'] = 'Chyba spracovania'; + $lang['strclicktoreload'] = 'Klikni pre obnovenie'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/spanish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/spanish.php new file mode 100644 index 00000000..e4dcb5af --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/spanish.php @@ -0,0 +1,905 @@ +<?php + + /** + * Spanish language file for phpPgAdmin. + * @maintainer 2003-2006 Martín Marqués (martin@bugs.unl.edu.ar) + * @maintainer 2006-2010 xzilla + * @maintainer 2010-2016 Miguel Useche (migueluseche@skatox.com) + * + */ + // Language and character set + $lang['applang'] = 'Spanish'; + $lang['applocale'] = 'es-ES'; + $lang['applangdir'] = 'ltr'; + + // Bienvenido + $lang['strintro'] = 'Bienvenido a phpPgAdmin.'; + $lang['strppahome'] = 'Página web de phpPgAdmin'; + $lang['strpgsqlhome'] = 'Página web de PostgreSQL'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'Documentación de PostgreSQL (local)'; + $lang['strreportbug'] = 'Reportar un problema'; + $lang['strviewfaq'] = 'Ver las preguntas frecuentes'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Autenticar'; + $lang['strloginfailed'] = 'Falló la autenticación'; + $lang['strlogindisallowed'] = 'Ingreso desactivado por razones de seguridad'; + $lang['strserver'] = 'Servidor'; + $lang['strservers'] = 'Servidores'; + $lang['strgroupservers'] = 'Servidores en el grupo "%s"'; + $lang['strallservers'] = 'Todo los servidores'; + $lang['strintroduction'] = 'Introducción'; + $lang['strhost'] = 'Host'; + $lang['strport'] = 'Puerto'; + $lang['strlogout'] = 'Cerrar sesión'; + $lang['strowner'] = 'Dueño'; + $lang['straction'] = 'Acción'; + $lang['stractions'] = 'Acciones'; + $lang['strname'] = 'Nombre'; + $lang['strdefinition'] = 'Definición'; + $lang['strproperties'] = 'Propiedades'; + $lang['strbrowse'] = 'Examinar'; + $lang['strenable'] = 'Activar'; + $lang['strdisable'] = 'Desactivar'; + $lang['strdrop'] = 'Eliminar'; + $lang['strdropped'] = 'Eliminado'; + $lang['strnull'] = 'Nulo'; + $lang['strnotnull'] = 'No Nulo'; + $lang['strprev'] = '< Previo'; + $lang['strnext'] = 'Siguiente >'; + $lang['strfirst'] = '<< Principio'; + $lang['strlast'] = 'Fin >>'; + $lang['strfailed'] = 'Falló'; + $lang['strcreate'] = 'Crear'; + $lang['strcreated'] = 'Creado'; + $lang['strcomment'] = 'Comentario'; + $lang['strlength'] = 'Longitud'; + $lang['strdefault'] = 'Predeterminado'; + $lang['stralter'] = 'Modificar'; + $lang['strok'] = 'Aceptar'; + $lang['strcancel'] = 'Cancelar'; + $lang['strkill'] = 'Terminar'; + $lang['strac'] = 'Activar AutoCompletado'; + $lang['strsave'] = 'Guardar'; + $lang['strreset'] = 'Reestablecer'; + $lang['strrestart'] = 'Reiniciar'; + $lang['strinsert'] = 'Insertar'; + $lang['strselect'] = 'Seleccionar'; + $lang['strdelete'] = 'Eliminar'; + $lang['strupdate'] = 'Actualizar'; + $lang['strreferences'] = 'Referencia'; + $lang['stryes'] = 'Si'; + $lang['strno'] = 'No'; + $lang['strtrue'] = 'VERDADERO'; + $lang['strfalse'] = 'FALSO'; + $lang['stredit'] = 'Editar'; + $lang['strcolumn'] = 'Columna'; + $lang['strcolumns'] = 'Columnas'; + $lang['strrows'] = 'fila(s)'; + $lang['strrowsaff'] = 'fila(s) afectadas.'; + $lang['strobjects'] = 'objeto(s)'; + $lang['strback'] = 'Atrás'; + $lang['strqueryresults'] = 'Resultado de la consulta'; + $lang['strshow'] = 'Mostrar'; + $lang['strempty'] = 'Vaciar'; + $lang['strlanguage'] = 'Idioma'; + $lang['strencoding'] = 'Codificación'; + $lang['strvalue'] = 'Valor'; + $lang['strunique'] = 'Único'; + $lang['strprimary'] = 'Primaria'; + $lang['strexport'] = 'Exportar'; + $lang['strimport'] = 'Importar'; + $lang['strallowednulls'] = 'Permitir valores nulos'; + $lang['strbackslashn'] = '\N'; + $lang['stremptystring'] = 'Cadena o campo vacio'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Limpiar'; + $lang['stranalyze'] = 'Analizar'; + $lang['strclusterindex'] = 'Clúster'; + $lang['strclustered'] = '¿En Clúster?'; + $lang['strreindex'] = 'Actualizar índices'; + $lang['strexecute'] = 'Ejecutar'; + $lang['stradd'] = 'Agregar'; + $lang['strevent'] = 'Evento'; + $lang['strwhere'] = 'Dónde'; + $lang['strinstead'] = 'Hacer en su lugar'; + $lang['strwhen'] = 'Cuándo'; + $lang['strformat'] = 'Formato'; + $lang['strdata'] = 'Dato'; + $lang['strconfirm'] = 'Confirmar'; + $lang['strexpression'] = 'Expresión'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Expandir'; + $lang['strcollapse'] = 'Contraer'; + $lang['strfind'] = 'Buscar'; + $lang['stroptions'] = 'Opciones'; + $lang['strrefresh'] = 'Refrescar'; + $lang['strdownload'] = 'Descargar'; + $lang['strdownloadgzipped'] = 'Descargar comprimido con gzip'; + $lang['strinfo'] = 'Información'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Avanzado'; + $lang['strvariables'] = 'Variables'; + $lang['strprocess'] = 'Proceso'; + $lang['strprocesses'] = 'Procesos'; + $lang['strblocked'] = 'Bloqueados'; + $lang['strsetting'] = 'Configuración'; + $lang['streditsql'] = 'Editar SQL'; + $lang['strruntime'] = 'Tiempo total de ejecución: %s ms'; + $lang['strpaginate'] = 'Paginar resultados'; + $lang['struploadscript'] = 'o subir un script SQL:'; + $lang['strstarttime'] = 'Hora de comienzo'; + $lang['strfile'] = 'Archivo'; + $lang['strfileimported'] = 'Archivo importado.'; + $lang['strtrycred'] = 'Usar estas crendeciales para todos los servidores'; + $lang['strconfdropcred'] = 'Por razones de seguridad, al desconectar se destruirá tu información compartida. ¿Estás seguro que desea desconectarse?'; + $lang['stractionsonmultiplelines'] = 'Acciones en múltiples líneas'; + $lang['strselectall'] = 'Seleccionar todos'; + $lang['strunselectall'] = 'Seleccionar ninguno'; + $lang['strlocale'] = 'Localización'; + $lang['strcollation'] = 'Colación'; + $lang['strctype'] = 'Tipo de caracter'; + $lang['strdefaultvalues'] = 'Valores por defecto'; + $lang['strnewvalues'] = 'Nuevos valores'; + $lang['strstart'] = 'Iniciar'; + $lang['strstop'] = 'Detener'; + $lang['strgotoppage'] = 'subir al inicio'; + $lang['strtheme'] = 'Tema'; + $lang['strcluster'] = 'Clúster'; + + // Admin + $lang['stradminondatabase'] = 'Las siguientes tareas administrativas aplican a toda la base de datos %s.'; + $lang['stradminontable'] = 'Las siguientes tareas administrativas aplican a la tabla %s.'; + + // User-supplied SQL history + $lang['strhistory'] = 'Historial'; + $lang['strnohistory'] = 'Sin historial.'; + $lang['strclearhistory'] = 'Borrar historial'; + $lang['strdelhistory'] = 'Borrar del historial'; + $lang['strconfdelhistory'] = '¿Desea borrar esta solicitud del historial?'; + $lang['strconfclearhistory'] = '¿Desea borrar el historial?'; + $lang['strnodatabaseselected'] = 'Por favor, seleccione una base de datos.'; + + // Database sizes + $lang['strnoaccess'] = 'Sin acceso'; + $lang['strsize'] = 'Tamaño'; + $lang['strbytes'] = 'bytes'; + $lang['strkb'] = 'kB'; + $lang['strmb'] = 'MB'; + $lang['strgb'] = 'GB'; + $lang['strtb'] = 'TB'; + + // Error handling + $lang['strnoframes'] = 'Esta aplicación funciona mejor con un navegador con soporte para marcos, pero puede usarse sin marcos siguiendo el link de abajo.'; + $lang['strnoframeslink'] = 'Usar sin marcos'; + $lang['strbadconfig'] = 'Su archivo config.inc.php está desactualizado. Deberá regenerarlo a partir del nuevo archivo config.inc.php-dist.'; + $lang['strnotloaded'] = 'Su instalación de PHP no tiene el soporte correcto para PostgreSQL. Deberá recompilar PHP usando la opción --with-pgsql en el configure.'; + $lang['strpostgresqlversionnotsupported'] = 'Su versión de PostgreSQL no está soportada. Por favor actualice a la versión %s o mas reciente.'; + $lang['strbadschema'] = 'El esquema especificado es inválido.'; + $lang['strbadencoding'] = 'No se pudo configurar la codificación del cliente en la base de datos.'; + $lang['strsqlerror'] = 'Error de SQL:'; + $lang['strinstatement'] = 'En la setencia:'; + $lang['strinvalidparam'] = 'Parámetros inválidos del script.'; + $lang['strnodata'] = 'No se encontraron filas.'; + $lang['strnoobjects'] = 'No se encontraron objetos.'; + $lang['strrownotunique'] = 'No existe un identificador único para este registro.'; + $lang['strnouploads'] = 'Está deshabilitada la subida de archivos.'; + $lang['strimporterror'] = 'Error de importación.'; + $lang['strimporterror-fileformat'] = 'Error de importacion: Falló la detección del formato del archivo.'; + $lang['strimporterrorline'] = 'Error de importación en la línea %s.'; + $lang['strimporterrorline-badcolumnnum'] = 'Error de importación en la línea %s: La línea no posee un número incorrecto de columnas.'; + $lang['strimporterror-uploadedfile'] = 'Error de importación: No se pudo subir el archivo al servidor'; + $lang['strcannotdumponwindows'] = 'El volcado de datos de tablas y esquemas con nombres complejos no esta soportado en Windows.'; + $lang['strinvalidserverparam'] = 'Intento de conexión al servidor con un parámetro inválido. Posiblemente alguien está intentando atacar tu sistema.'; + $lang['strnoserversupplied'] = 'No se suministró un servidor'; + $lang['strbadpgdumppath'] = 'Error de exportación: Falló la ejecución de execute pg_dump (según la ruta dada en conf/config.inc.php : %s). Por favor, arregla esta ruta en tu configuración y vuelve a iniciar sesión.'; + $lang['strbadpgdumpallpath'] = 'Error de exportación: Falló la ejecución de pg_dumpall (según la ruta dada en conf/config.inc.php : %s). Por favor, arregla esta ruta en tu configuración y vuelve a iniciar sesión.'; + $lang['strconnectionfail'] = 'No se puede conectar al servidor.'; + + // Tables + $lang['strtable'] = 'Tabla'; + $lang['strtables'] = 'Tablas'; + $lang['strshowalltables'] = 'Mostrar todas las tablas'; + $lang['strnotables'] = 'No se encontraron tablas.'; + $lang['strnotable'] = 'No se encontró la tabla.'; + $lang['strcreatetable'] = 'Crear tabla'; + $lang['strcreatetablelike'] = 'Crear una tabla a partir de una existente'; + $lang['strcreatetablelikeparent'] = 'Tabla de origen'; + $lang['strcreatelikewithdefaults'] = 'INCLUIR VALORES POR DEFECTO'; + $lang['strcreatelikewithconstraints'] = 'INCLUIR RESTRICCIONES'; + $lang['strcreatelikewithindexes'] = 'INCLUIR ÍNDICES'; + $lang['strtablename'] = 'Nombre de la tabla'; + $lang['strtableneedsname'] = 'Debes darle un nombre a la tabla.'; + $lang['strtablelikeneedslike'] = 'Debes especificar una tabla para copiar sus propiedades.'; + $lang['strtableneedsfield'] = 'Debes especificar al menos un campo.'; + $lang['strtableneedscols'] = 'Debes especificar un número válido de columnas.'; + $lang['strtablecreated'] = 'Tabla creada.'; + $lang['strtablecreatedbad'] = 'Falló la creación de la tabla.'; + $lang['strconfdroptable'] = '¿Estás seguro que desea eliminar la tabla "%s"?'; + $lang['strtabledropped'] = 'Tabla eliminada.'; + $lang['strtabledroppedbad'] = 'Falló la eliminación de la tabla.'; + $lang['strconfemptytable'] = '¿Estás seguro que desea vaciar la tabla "%s"?'; + $lang['strtableemptied'] = 'Tabla vaciada.'; + $lang['strtableemptiedbad'] = 'Falló el vaciado de la tabla.'; + $lang['strinsertrow'] = 'Insertar Fila'; + $lang['strrowinserted'] = 'Fila insertada.'; + $lang['strrowinsertedbad'] = 'Falló la inserción de fila.'; + $lang['strnofkref'] = 'No se hay un valor coincidente en la clave foránea %s.'; + $lang['strrowduplicate'] = 'Falló la inserción de fila , se intentó hacer una inserción duplicada.'; + $lang['streditrow'] = 'Editar fila'; + $lang['strrowupdated'] = 'Fila actualizada.'; + $lang['strrowupdatedbad'] = 'Falló la actualización de la fila.'; + $lang['strdeleterow'] = 'Eliminar Fila'; + $lang['strconfdeleterow'] = '¿Estás seguro que quiere eliminar esta fila?'; + $lang['strrowdeleted'] = 'Fila eliminada.'; + $lang['strrowdeletedbad'] = 'Falló la eliminación de fila.'; + $lang['strinsertandrepeat'] = 'Insertar y Repite'; + $lang['strnumcols'] = 'Número de columnas'; + $lang['strcolneedsname'] = 'Debes especificar un nombre para la columna'; + $lang['strselectallfields'] = 'Seleccionar todos los campos.'; + $lang['strselectneedscol'] = 'Debes elegir al menos una columna'; + $lang['strselectunary'] = 'Los operadores unarios no pueden tener valores.'; + $lang['strcolumnaltered'] = 'Columna Modificada.'; + $lang['strcolumnalteredbad'] = 'Falló la modificación de columna.'; + $lang['strconfdropcolumn'] = '¿Estás seguro que quiere eliminar la columna "%s" de la tabla "%s"?'; + $lang['strcolumndropped'] = 'Columna eliminada.'; + $lang['strcolumndroppedbad'] = 'Falló la eliminación de columna.'; + $lang['straddcolumn'] = 'Agregar Columna'; + $lang['strcolumnadded'] = 'Columna agregada.'; + $lang['strcolumnaddedbad'] = 'Falló el agregado de columna.'; + $lang['strcascade'] = 'EN CASCADA'; + $lang['strtablealtered'] = 'Tabla modificada.'; + $lang['strtablealteredbad'] = 'Falló la modificación de la Tabla.'; + $lang['strdataonly'] = 'Solamente datos'; + $lang['strstructureonly'] = 'Solo la estructura'; + $lang['strstructureanddata'] = 'Estructura y datos'; + $lang['strtabbed'] = 'Tabulado'; + $lang['strauto'] = 'Automático'; + $lang['strconfvacuumtable'] = '¿Estás seguro que quiere limpiar "%s"?'; + $lang['strconfanalyzetable'] = '¿Estás seguro que quiere analizar "%s"?'; + $lang['strconfreindextable'] = '¿Estás seguro que quiere actualizar los índices "%s"?'; + $lang['strconfclustertable'] = '¿Estás seguro que quiere clusterizar "%s"?'; + $lang['strestimatedrowcount'] = 'Cantidad de filas estimadas'; + $lang['strspecifytabletoanalyze'] = 'Debes especificar al menos una tabla para analizar.'; + $lang['strspecifytabletoempty'] = 'Debes especificar al menos una tabla para vaciar.'; + $lang['strspecifytabletodrop'] = 'Debes especificar al menos una tabla para eliminar.'; + $lang['strspecifytabletovacuum'] = 'Debes especificar al menos una tabla para limpiar.'; + $lang['strspecifytabletoreindex'] = 'Debes especificar al menos una tabla para actualizar sus índices.'; + $lang['strspecifytabletocluster'] = 'Debes especificar al menos una tabla para clusterizar.'; + $lang['strnofieldsforinsert'] = 'No puedes insertar un registro en una tabla sin columnas.'; + + // Columns + $lang['strcolprop'] = 'Propiedades de la Columna'; + $lang['strnotableprovided'] = '¡No se suministró al menos una tabla!'; + + // Users + $lang['struser'] = 'Usuario'; + $lang['strusers'] = 'Usuarios'; + $lang['strusername'] = 'Nombre de usuario'; + $lang['strpassword'] = 'Contraseña'; + $lang['strsuper'] = '¿Superusuario?'; + $lang['strcreatedb'] = '¿Puede crear BD?'; + $lang['strexpires'] = 'Expira'; + $lang['strsessiondefaults'] = 'Valores predeterminados de la sesión.'; + $lang['strnousers'] = 'No se encontraron usuarios.'; + $lang['struserupdated'] = 'Usuario actualizado.'; + $lang['struserupdatedbad'] = 'Falló la actualización del usuario.'; + $lang['strshowallusers'] = 'Mostrar todos los usuarios'; + $lang['strcreateuser'] = 'Crear usuario'; + $lang['struserneedsname'] = 'Debes dar un nombre a su usuario.'; + $lang['strusercreated'] = 'Usuario creado.'; + $lang['strusercreatedbad'] = 'Falló la creación del usuario.'; + $lang['strconfdropuser'] = '¿Estás seguro de querer eliminar el usuario "%s"?'; + $lang['struserdropped'] = 'Usuario eliminado.'; + $lang['struserdroppedbad'] = 'Falló la eliminación del usuario.'; + $lang['straccount'] = 'Cuenta'; + $lang['strchangepassword'] = 'Cambiar Contraseña'; + $lang['strpasswordchanged'] = 'Contraseña modificada.'; + $lang['strpasswordchangedbad'] = 'Falló al modificar contraseña.'; + $lang['strpasswordshort'] = 'La contraseña es muy corta.'; + $lang['strpasswordconfirm'] = 'Las contraseñas no coinciden.'; + + // Groups + $lang['strgroup'] = 'Grupo'; + $lang['strgroups'] = 'Grupos'; + $lang['strgroupgroups'] = 'Groups in group "%s"'; + $lang['strshowallgroups'] = 'Mostrar todos los grupos'; + $lang['strnogroup'] = 'Grupo no encontrado.'; + $lang['strnogroups'] = 'No se encontraron grupos.'; + $lang['strcreategroup'] = 'Crear Grupo'; + $lang['strgroupneedsname'] = 'Debes darle un nombre al grupo.'; + $lang['strgroupcreated'] = 'Grupo creado.'; + $lang['strgroupcreatedbad'] = 'Falló la creación del grupo.'; + $lang['strconfdropgroup'] = '¿Estás seguro de querer eliminar el grupo "%s"?'; + $lang['strgroupdropped'] = 'Grupo eliminado.'; + $lang['strgroupdroppedbad'] = 'Falló la eliminación del grupo.'; + $lang['strmembers'] = 'Miembros'; + $lang['strmemberof'] = 'Miembro de'; + $lang['stradminmembers'] = 'Administadores '; + $lang['straddmember'] = 'Agregar miembro'; + $lang['strmemberadded'] = 'Miembro agregado.'; + $lang['strmemberaddedbad'] = 'Falló la agregación de un nuevo miembro.'; + $lang['strdropmember'] = 'Retirar miembro'; + $lang['strconfdropmember'] = '¿Estás seguro de retirar el miembro "%s" del grupo "%s"?'; + $lang['strmemberdropped'] = 'Miembro retirado.'; + $lang['strmemberdroppedbad'] = 'Falló al retirar un miembro del grupo.'; + + // Roles + $lang['strrole'] = 'Rol'; + $lang['strroles'] = 'Roles'; + $lang['strshowallroles'] = 'Mostrar todas los roles'; + $lang['strnoroles'] = 'No se encontraron roles.'; + $lang['strinheritsprivs'] = '¿Hereda privilegios?'; + $lang['strcreaterole'] = 'Crear rol'; + $lang['strcancreaterole'] = '¿Puede crear roles?'; + $lang['strrolecreated'] = 'Rol creado.'; + $lang['strrolecreatedbad'] = 'Falló la creación del rol.'; + $lang['strrolealtered'] = 'Rol modificado.'; + $lang['strrolealteredbad'] = 'Falló la modificación del rol.'; + $lang['strcanlogin'] = '¿Puede iniciar sesión?'; + $lang['strconnlimit'] = 'Límite de conexión'; + $lang['strdroprole'] = 'Eliminar rol'; + $lang['strconfdroprole'] = '¿Estás seguro de que desea eliminar el rol "%s"?'; + $lang['strroledropped'] = 'Rol eliminado.'; + $lang['strroledroppedbad'] = 'Falló la eliminación del rol.'; + $lang['strnolimit'] = 'Sin límite'; + $lang['strnever'] = 'Nunca'; + $lang['strroleneedsname'] = 'Debes darle un nombre al rol.'; + + // Privileges + $lang['strprivilege'] = 'Privilegio'; + $lang['strprivileges'] = 'Privilegios'; + $lang['strnoprivileges'] = 'Por defecto, este objeto tiene privilegios de usuario.'; + $lang['strgrant'] = 'Otorgar'; + $lang['strrevoke'] = 'Revocar'; + $lang['strgranted'] = 'Los privilegios cambiaron.'; + $lang['strgrantfailed'] = 'Falló la actualización de los privilegios.'; + $lang['strgrantbad'] = 'Debes especificar al menos un usuario o grupo y al menos un privilegio.'; + $lang['strgrantor'] = 'Cedente'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Base de Datos'; + $lang['strdatabases'] = 'Bases de Datos'; + $lang['strshowalldatabases'] = 'Mostrar todas las bases de datos'; + $lang['strnodatabases'] = 'No se encontraron las bases de datos.'; + $lang['strcreatedatabase'] = 'Crear base de datos'; + $lang['strdatabasename'] = 'Nombre de la base de datos'; + $lang['strdatabaseneedsname'] = 'Debes darle un nombre a la base de datos.'; + $lang['strdatabasecreated'] = 'Base de datos creada.'; + $lang['strdatabasecreatedbad'] = 'Falló la creación de la base de datos.'; + $lang['strconfdropdatabase'] = '¿Estás seguro que quiere eliminar la base de datos "%s"?'; + $lang['strdatabasedropped'] = 'Base de datos eliminada.'; + $lang['strdatabasedroppedbad'] = 'Falló al eliminar la base de datos.'; + $lang['strentersql'] = 'Ingrese la sentencia de SQL para ejecutar:'; + $lang['strsqlexecuted'] = 'SQL ejecutada.'; + $lang['strvacuumgood'] = 'Limpieza completada.'; + $lang['strvacuumbad'] = 'Falló la limpieza.'; + $lang['stranalyzegood'] = 'Análisis completado.'; + $lang['stranalyzebad'] = 'El analisis falló.'; + $lang['strreindexgood'] = 'Actualización de índices completada.'; + $lang['strreindexbad'] = 'Falló la actualización de índices.'; + $lang['strfull'] = 'Llena'; + $lang['strfreeze'] = 'Congelar'; + $lang['strforce'] = 'Forzar'; + $lang['strsignalsent'] = 'Señal enviada.'; + $lang['strsignalsentbad'] = 'Falló el envío de la señal.'; + $lang['strallobjects'] = 'Todos los objetos'; + $lang['strdatabasealtered'] = 'Base de Datos modificada.'; + $lang['strdatabasealteredbad'] = 'Falló al intentar modificar la base de datos.'; + $lang['strspecifydatabasetodrop'] = 'Debes especificar al menos una base de datos para eliminar.'; + $lang['strtemplatedb'] = 'Plantilla'; + $lang['strconfanalyzedatabase'] = '¿Estás seguro que desea analizar todas las tablas en la base de datos "%s"?'; + $lang['strconfvacuumdatabase'] = '¿Estás seguro que desea limpiar todas las tablas en la base de datos "%s"?'; + $lang['strconfreindexdatabase'] = '¿Estás seguro que desea actualizar los índices de todas las tablas en la base de datos "%s"?'; + $lang['strconfclusterdatabase'] = '¿Estás seguro que desea ordenar todas las tablas en la base de datos "%s"?'; + + // Views + $lang['strview'] = 'Vista'; + $lang['strviews'] = 'Vistas'; + $lang['strshowallviews'] = 'Mostrar todas las vistas'; + $lang['strnoview'] = 'No se encontró la vista.'; + $lang['strnoviews'] = 'No se encontraron vistas.'; + $lang['strcreateview'] = 'Crear Vista'; + $lang['strviewname'] = 'Ver el nombre'; + $lang['strviewneedsname'] = 'Debes darle un nombre a la vista.'; + $lang['strviewneedsdef'] = 'Debes darle una definición a su vista.'; + $lang['strviewneedsfields'] = 'Debes seleccionar las columnas deseadas en su vista.'; + $lang['strviewcreated'] = 'Vista creada.'; + $lang['strviewcreatedbad'] = 'Falló al crear la vista.'; + $lang['strconfdropview'] = '¿Estás seguro que quiere eliminar la vista "%s"?'; + $lang['strviewdropped'] = 'Vista eliminada.'; + $lang['strviewdroppedbad'] = 'Falló al intentar eliminar la vista.'; + $lang['strviewupdated'] = 'Vista actualizada.'; + $lang['strviewupdatedbad'] = 'Falló al actualizar la vista.'; + $lang['strviewlink'] = 'Claves de enlace'; + $lang['strviewconditions'] = 'Condiciones adicionales'; + $lang['strcreateviewwiz'] = 'Crear vista usando el asistente'; + $lang['strrenamedupfields'] = 'Renombrar campos duplicados'; + $lang['strdropdupfields'] = 'Eliminar campos duplicados'; + $lang['strerrordupfields'] = 'Error en campos duplicados'; + $lang['strviewaltered'] = 'Vista modificada.'; + $lang['strviewalteredbad'] = 'Falló en la modificación de la vista.'; + $lang['strspecifyviewtodrop'] = 'Debes especificar al menos una vista a eliminar.'; + + // Sequences + $lang['strsequence'] = 'Secuencia'; + $lang['strsequences'] = 'Secuencias'; + $lang['strshowallsequences'] = 'Mostrar todas las secuencias'; + $lang['strnosequence'] = 'No se encontró la secuencia.'; + $lang['strnosequences'] = 'No se encontraron las secuencias.'; + $lang['strcreatesequence'] = 'Crear secuencia'; + $lang['strlastvalue'] = 'Último Valor'; + $lang['strincrementby'] = 'Incremento'; + $lang['strstartvalue'] = 'Valor inicial'; + $lang['strrestartvalue'] = 'Reiniciar valor'; + $lang['strmaxvalue'] = 'Valor máximo'; + $lang['strminvalue'] = 'Valor mínimo'; + $lang['strcachevalue'] = 'Valor de la caché'; + $lang['strlogcount'] = 'Registrar cuenta'; + $lang['strcancycle'] = '¿Cíclica?'; + $lang['striscalled'] = '¿Incrementará el último valor antes de ser llamado (is_called)?'; + $lang['strsequenceneedsname'] = 'Debes especificar el nombre de la secuencia.'; + $lang['strsequencecreated'] = 'Secuencia creada.'; + $lang['strsequencecreatedbad'] = 'Falló la creación de la secuencia.'; + $lang['strconfdropsequence'] = '¿Estás seguro que quiere eliminar la secuencia "%s"?'; + $lang['strsequencedropped'] = 'Secuencia eliminada.'; + $lang['strsequencedroppedbad'] = 'Falló la eliminación de la secuencia.'; + $lang['strsequencerestart'] = 'Secuencia restablecida.'; + $lang['strsequencerestartbad'] = 'Falló al restablecer la secuencia.'; + $lang['strsequencereset'] = 'Secuencia reiniciada.'; + $lang['strsequenceresetbad'] = 'Falló al intentar reiniciar la secuencia.'; + $lang['strsequencealtered'] = 'Secuencia modificada.'; + $lang['strsequencealteredbad'] = 'Falló la modificación de la secuencia.'; + $lang['strsetval'] = 'Fijar el valor'; + $lang['strsequencesetval'] = 'Fijar el valor de la secuencia.'; + $lang['strsequencesetvalbad'] = 'Falló la fijación del valor en la secuencia.'; + $lang['strnextval'] = 'Valor de incremento'; + $lang['strsequencenextval'] = 'Secuencia incrementada.'; + $lang['strsequencenextvalbad'] = 'Falló el incremento de la secuencia.'; + $lang['strspecifysequencetodrop'] = 'Debes especificar al menos una secuencia a eliminar.'; + + // Indexes + $lang['strindex'] = 'Índice'; + $lang['strindexes'] = 'Índices'; + $lang['strindexname'] = 'Nombre del Índice'; + $lang['strshowallindexes'] = 'Mostrar Todos los Índices'; + $lang['strnoindex'] = 'No se encontró el índice.'; + $lang['strnoindexes'] = 'No se encontraron índices.'; + $lang['strcreateindex'] = 'Crear Índice'; + $lang['strtabname'] = 'Nombre de la pestaña'; + $lang['strcolumnname'] = 'Nombre de Columna'; + $lang['strindexneedsname'] = 'Debes darle un nombre al índice'; + $lang['strindexneedscols'] = 'Los índices requieren un número válido de columnas.'; + $lang['strindexcreated'] = 'Índice creado'; + $lang['strindexcreatedbad'] = 'Falló la creación del índice.'; + $lang['strconfdropindex'] = '¿Estás seguro d eliminar el índice "%s"?'; + $lang['strindexdropped'] = 'Índice eliminado.'; + $lang['strindexdroppedbad'] = 'Falló la eliminación del índice.'; + $lang['strkeyname'] = 'Nombre de la clave'; + $lang['struniquekey'] = 'Clave única'; + $lang['strprimarykey'] = 'Clave primaria'; + $lang['strindextype'] = 'Tipo de índice'; + $lang['strtablecolumnlist'] = 'Columnas en tabla'; + $lang['strindexcolumnlist'] = 'Columnas en el índice'; + $lang['strconfcluster'] = '¿Estás seguro de querer clusterizar en "%s"?'; + $lang['strclusteredgood'] = 'Clusterización completa.'; + $lang['strclusteredbad'] = 'Falló la clusterización de la tabla.'; + $lang['strconcurrently'] = 'Concurrente'; + $lang['strnoclusteravailable'] = 'Tabla no ordenada en un índice.'; + + // Rules + $lang['strrules'] = 'Reglas'; + $lang['strrule'] = 'Regla'; + $lang['strshowallrules'] = 'Mostrar todas las reglas'; + $lang['strnorule'] = 'No se encontró la regla.'; + $lang['strnorules'] = 'No se encontraron las reglas.'; + $lang['strcreaterule'] = 'Crear regla'; + $lang['strrulename'] = 'Nombre de regla'; + $lang['strruleneedsname'] = 'Debes darle un nombre a la regla.'; + $lang['strrulecreated'] = 'Regla creada.'; + $lang['strrulecreatedbad'] = 'Falló la creación de la regla.'; + $lang['strconfdroprule'] = '¿Estás seguro de querer eliminar la regla "%s" en "%s"?'; + $lang['strruledropped'] = 'Regla eliminada.'; + $lang['strruledroppedbad'] = 'Falló la eliminación de la regla.'; + + // Constraints + $lang['strconstraint'] = 'Restricción'; + $lang['strconstraints'] = 'Restricciones'; + $lang['strshowallconstraints'] = 'Mostrar todas las restricciones'; + $lang['strnoconstraints'] = 'No se encontraron restricciones.'; + $lang['strcreateconstraint'] = 'Crear restricción'; + $lang['strconstraintcreated'] = 'Restricción creada.'; + $lang['strconstraintcreatedbad'] = 'Falló la creación de la restricción.'; + $lang['strconfdropconstraint'] = '¿Estás seguro que quiere eliminar la restricción "%s" de "%s"?'; + $lang['strconstraintdropped'] = 'Restricción eliminada.'; + $lang['strconstraintdroppedbad'] = 'Falló al eliminar la restricción.'; + $lang['straddcheck'] = 'Agregar chequeo'; + $lang['strcheckneedsdefinition'] = 'La restricción de chequeo necesita una definición.'; + $lang['strcheckadded'] = 'Restricción de chequeo agregada.'; + $lang['strcheckaddedbad'] = 'Fallo al intentar agregar restricción de chequeo.'; + $lang['straddpk'] = 'Agregar clave primaria'; + $lang['strpkneedscols'] = 'La clave primaria necesita al menos un campo.'; + $lang['strpkadded'] = 'Clave primaria agregada.'; + $lang['strpkaddedbad'] = 'Falló al intentar crear la clave primaria.'; + $lang['stradduniq'] = 'Agregar clave única'; + $lang['struniqneedscols'] = 'La clave única necesita al menos un campo.'; + $lang['struniqadded'] = 'Clave única agregada.'; + $lang['struniqaddedbad'] = 'Falló al intentar agregar la clave única.'; + $lang['straddfk'] = 'Agregar clave foránea'; + $lang['strfkneedscols'] = 'La clave foránea necesita al menos un campo.'; + $lang['strfkneedstarget'] = 'La clave foránea necesita una tabla para referenciar.'; + $lang['strfkadded'] = 'Clave foránea agregada.'; + $lang['strfkaddedbad'] = 'Fallo al agregar la clave foránea.'; + $lang['strfktarget'] = 'Tabla de destino'; + $lang['strfkcolumnlist'] = 'Campos en la clave'; + $lang['strondelete'] = 'AL ELIMINAR'; + $lang['stronupdate'] = 'AL ACTUALIZAR'; + + // Functions + $lang['strfunction'] = 'Función'; + $lang['strfunctions'] = 'Funciones'; + $lang['strshowallfunctions'] = 'Mostrar todas las funciones'; + $lang['strnofunction'] = 'No se encontró la función.'; + $lang['strnofunctions'] = 'No se encontraron funciones.'; + $lang['strcreateplfunction'] = 'Crear función SQL/PL'; + $lang['strcreateinternalfunction'] = 'Crear función interna'; + $lang['strcreatecfunction'] = 'Crear función en C'; + $lang['strfunctionname'] = 'Nombre de la función'; + $lang['strreturns'] = 'Retorna'; + $lang['strproglanguage'] = 'Lenguaje de programación'; + $lang['strfunctionneedsname'] = 'Debes darle un nombre a la función.'; + $lang['strfunctionneedsdef'] = 'Debes darle una definición a la función.'; + $lang['strfunctioncreated'] = 'Función creada.'; + $lang['strfunctioncreatedbad'] = 'Falló la creación de la función.'; + $lang['strconfdropfunction'] = '¿Estás seguro que quiere eliminar la función "%s"?'; + $lang['strfunctiondropped'] = 'Función eliminada.'; + $lang['strfunctiondroppedbad'] = 'Falló al eliminar la función.'; + $lang['strfunctionupdated'] = 'Función actualizada.'; + $lang['strfunctionupdatedbad'] = 'Falló al actualizar la función.'; + $lang['strobjectfile'] = 'Archivo de objeto'; + $lang['strlinksymbol'] = 'Vinculo simbólico'; + $lang['strarguments'] = 'Argumentos'; + $lang['strargmode'] = 'Modo'; + $lang['strargtype'] = 'Tipo'; + $lang['strargadd'] = 'Agregar otro argumento'; + $lang['strargremove'] = 'Eliminar este argumento'; + $lang['strargnoargs'] = 'Esta función no tendrá argumentos.'; + $lang['strargenableargs'] = 'Habilitar argumentos pasados a esta función.'; + $lang['strargnorowabove'] = 'Debe existir una fila por encima de esta fila.'; + $lang['strargnorowbelow'] = 'Debe exisitr una fila por debajo de esta fila.'; + $lang['strargraise'] = 'Mover arriba.'; + $lang['strarglower'] = 'Mover abajo.'; + $lang['strargremoveconfirm'] = '¿Esta seguro que quiere eliminar este argumento? Esto NO se puede deshacer.'; + $lang['strfunctioncosting'] = 'Costo de la función'; + $lang['strresultrows'] = 'Filas en el resultado'; + $lang['strexecutioncost'] = 'Costo de ejecución'; + $lang['strspecifyfunctiontodrop'] = 'Debes especificar al menos una función a eliminar.'; + + // Triggers + $lang['strtrigger'] = 'Disparador'; + $lang['strtriggers'] = 'Disparadores'; + $lang['strshowalltriggers'] = 'Mostrar todos los disparadores'; + $lang['strnotrigger'] = 'No se encontró el disparador.'; + $lang['strnotriggers'] = 'No se encontraron disparadores.'; + $lang['strcreatetrigger'] = 'Crear Disparador'; + $lang['strtriggerneedsname'] = 'Debes darle un nombre al disparador.'; + $lang['strtriggerneedsfunc'] = 'Debes especificar una función para el disparador.'; + $lang['strtriggercreated'] = 'Disparador creado.'; + $lang['strtriggercreatedbad'] = 'Falló la creación del disparador.'; + $lang['strconfdroptrigger'] = '¿Estás seguro que quiere eliminar el disparador "%s" en "%s"?'; + $lang['strconfenabletrigger'] = '¿Estás seguro que desea activar el disparador "%s" en "%s"?'; + $lang['strconfdisabletrigger'] = '¿Estás seguro que desea desactivar el disparador "%s" en "%s"?'; + $lang['strtriggerdropped'] = 'Disparador eliminado.'; + $lang['strtriggerdroppedbad'] = 'Falló al eliminar el disparador.'; + $lang['strtriggerenabled'] = 'Disparador activado.'; + $lang['strtriggerenabledbad'] = 'Falló la activación del disparador.'; + $lang['strtriggerdisabled'] = 'Disparador desactivado.'; + $lang['strtriggerdisabledbad'] = 'Falló la desactivación del disparador.'; + $lang['strtriggeraltered'] = 'Disparador modificado.'; + $lang['strtriggeralteredbad'] = 'Falló la modificación del disparador.'; + $lang['strforeach'] = 'Para cada uno'; + + // Types + $lang['strtype'] = 'Tipo de dato'; + $lang['strtypes'] = 'Tipos de datos'; + $lang['strshowalltypes'] = 'Mostrar todos los tipos'; + $lang['strnotype'] = 'No se encontró el tipo.'; + $lang['strnotypes'] = 'No se encontraron tipos.'; + $lang['strcreatetype'] = 'Crear Tipo'; + $lang['strcreatecomptype'] = 'Crear tipo compuesto'; + $lang['strcreateenumtype'] = 'Crear tipo enumerado'; + $lang['strtypeneedsfield'] = 'Debes especificar al menos un campo.'; + $lang['strtypeneedsvalue'] = 'Debes especificar al menos un valor.'; + $lang['strtypeneedscols'] = 'Tipos compuestos requieren de un número válido de columnas.'; + $lang['strtypeneedsvals'] = 'Debes especificar un número válido de valores.'; + $lang['strinputfn'] = 'Función de entrada'; + $lang['stroutputfn'] = 'Función de salida'; + $lang['strpassbyval'] = '¿Pasar por valor?'; + $lang['stralignment'] = 'Alineamiento'; + $lang['strelement'] = 'Elemento'; + $lang['strdelimiter'] = 'Delimitador'; + $lang['strstorage'] = 'Almacenamiento'; + $lang['strfield'] = 'Campo'; + $lang['strnumfields'] = 'Número de campos'; + $lang['strnumvalues'] = 'Número de valores'; + $lang['strtypeneedsname'] = 'Debes especificar un nombre para el tipo.'; + $lang['strtypeneedslen'] = 'Debes especificar una longitud para el tipo.'; + $lang['strtypecreated'] = 'Tipo creado'; + $lang['strtypecreatedbad'] = 'Falló la creación del tipo.'; + $lang['strconfdroptype'] = '¿Estás seguro de querer eliminar el tipo "%s"?'; + $lang['strtypedropped'] = 'Tipo eliminado.'; + $lang['strtypedroppedbad'] = 'Falló al eliminar el tipo.'; + $lang['strflavor'] = 'Tipo'; + $lang['strbasetype'] = 'Base'; + $lang['strcompositetype'] = 'Compuesto'; + $lang['strpseudotype'] = 'Seudo'; + $lang['strenum'] = 'Enumerado'; + $lang['strenumvalues'] = 'Valores enumerados'; + + // Schemas + $lang['strschema'] = 'Esquema'; + $lang['strschemas'] = 'Esquemas'; + $lang['strshowallschemas'] = 'Mostrar Todos los Esquemas'; + $lang['strnoschema'] = 'No se encontró el esquema.'; + $lang['strnoschemas'] = 'No se encontraron esquemas.'; + $lang['strcreateschema'] = 'Crear Esquema'; + $lang['strschemaname'] = 'Nombre del esquema'; + $lang['strschemaneedsname'] = 'Debes especificar un nombre para el esquema.'; + $lang['strschemacreated'] = 'Esquema creado'; + $lang['strschemacreatedbad'] = 'Falló la creación del esquema.'; + $lang['strconfdropschema'] = '¿Estás seguro que quiere eliminar el esquema "%s"?'; + $lang['strschemadropped'] = 'Esquema eliminado.'; + $lang['strschemadroppedbad'] = 'Falló la eliminación del esquema.'; + $lang['strschemaaltered'] = 'Esquema actualizado.'; + $lang['strschemaalteredbad'] = 'Falló la actualización del esquema.'; + $lang['strsearchpath'] = 'Ruta de la búsqueda en los esquemas'; + $lang['strspecifyschematodrop'] = 'Debes especificar al menos un esquema a eliminar.'; + + // Reports + + //Domains + $lang['strdomain'] = 'Dominio'; + $lang['strdomains'] = 'Dominios'; + $lang['strshowalldomains'] = 'Mostrar todos los dominios'; + $lang['strnodomains'] = 'No se encontraron dominios.'; + $lang['strcreatedomain'] = 'Crear dominio'; + $lang['strdomaindropped'] = 'Dominio eliminado.'; + $lang['strdomaindroppedbad'] = 'Falló la eliminación del dominio.'; + $lang['strconfdropdomain'] = '¿Esta seguro de querer eliminar el dominio "%s"?'; + $lang['strdomainneedsname'] = 'Debes dar un nombre para el dominio.'; + $lang['strdomaincreated'] = 'Dominio creado.'; + $lang['strdomaincreatedbad'] = 'Falló la creación del dominio.'; + $lang['strdomainaltered'] = 'Dominio modificado.'; + $lang['strdomainalteredbad'] = 'Falló al intentar modificar el dominio.'; + + // Operators + $lang['stroperator'] = 'Operador'; + $lang['stroperators'] = 'Operadores'; + $lang['strshowalloperators'] = 'Mostrar todos los operadores'; + $lang['strnooperator'] = 'No se encontró el operador.'; + $lang['strnooperators'] = 'No se encontraron operadores.'; + $lang['strcreateoperator'] = 'Crear operador'; + $lang['strleftarg'] = 'Tipo de datos del arg. izquierdo'; + $lang['strrightarg'] = 'Tipo de datos del arg. derecho'; + $lang['strcommutator'] = 'Conmutador'; + $lang['strnegator'] = 'Negación'; + $lang['strrestrict'] = 'Restringir'; + $lang['strjoin'] = 'Unión'; + $lang['strhashes'] = 'Llaves (Hash)'; + $lang['strmerges'] = 'Fusiones'; + $lang['strleftsort'] = 'Ordenado izquierdo'; + $lang['strrightsort'] = 'Ordenado derecho'; + $lang['strlessthan'] = 'Menor que'; + $lang['strgreaterthan'] = 'Mayor que'; + $lang['stroperatorneedsname'] = 'Debes darle un nombre al operador.'; + $lang['stroperatorcreated'] = 'Operador creado'; + $lang['stroperatorcreatedbad'] = 'Falló la creación del operador.'; + $lang['strconfdropoperator'] = '¿Estás seguro de querer eliminar el operador "%s"?'; + $lang['stroperatordropped'] = 'Operador eliminado.'; + $lang['stroperatordroppedbad'] = 'Falló en la eliminación del operador.'; + + // Casts + $lang['strcasts'] = 'Conversión de tipos'; + $lang['strnocasts'] = 'No se encontraron conversiones.'; + $lang['strsourcetype'] = 'Tipo del origen'; + $lang['strtargettype'] = 'Tipo del destino'; + $lang['strimplicit'] = 'Implícito'; + $lang['strinassignment'] = 'En asignación'; + $lang['strbinarycompat'] = '(Compatible con binario)'; + + // Conversions + $lang['strconversions'] = 'Conversiones'; + $lang['strnoconversions'] = 'No se encontraron conversiones.'; + $lang['strsourceencoding'] = 'Codificación de la fuente'; + $lang['strtargetencoding'] = 'Codificación del destino'; + + // Languages + $lang['strlanguages'] = 'Lenguajes'; + $lang['strnolanguages'] = 'No se encontraron lenguajes.'; + $lang['strtrusted'] = 'Confiable'; + + // Info + $lang['strnoinfo'] = 'No hay información disponible.'; + $lang['strreferringtables'] = 'Tablas referenciales'; + $lang['strparenttables'] = 'Tablas padre'; + $lang['strchildtables'] = 'Tablas hija'; + + // Aggregates + $lang['straggregate'] = 'Agregación'; + $lang['straggregates'] = 'Agregaciones'; + $lang['strnoaggregates'] = 'No se encontraron agregaciones.'; + $lang['stralltypes'] = '(Todos los tipos)'; + $lang['strcreateaggregate'] = 'Crear Agregación'; + $lang['straggrbasetype'] = 'Tipo del dato de entrada'; + $lang['straggrsfunc'] = 'Función de transición de estado'; + $lang['straggrstype'] = 'Tipo de dato para el valor de estado'; + $lang['straggrffunc'] = 'Función final'; + $lang['straggrinitcond'] = 'Condición inicial'; + $lang['straggrsortop'] = 'Operador de ordenamiento'; + $lang['strconfdropaggregate'] = '¿Estás seguro que desea eliminar la agregación "%s"?'; + $lang['straggregatedropped'] = 'Agregación eliminada.'; + $lang['straggregatedroppedbad'] = 'Falló en la eliminación de la agregación.'; + $lang['straggraltered'] = 'Agregación modificada.'; + $lang['straggralteredbad'] = 'Falló la modificación de la agregación.'; + $lang['straggrneedsname'] = 'Debes especificar un nombre para la agregación.'; + $lang['straggrneedsbasetype'] = 'Debes especificar un tipo de dato de entrada para la agregación.'; + $lang['straggrneedssfunc'] = 'Debes especificar el nombre de la función de transición de estado de la agregación.'; + $lang['straggrneedsstype'] = 'Debes especificar el tipo de dato para la el valor de estado de la agregación.'; + $lang['straggrcreated'] = 'Agregación creada.'; + $lang['straggrcreatedbad'] = 'Falló la creación de la agregación.'; + $lang['straggrshowall'] = 'Mostrar todas las agregaciones'; + + // Operator Classes + $lang['stropclasses'] = 'Clases de operadores'; + $lang['strnoopclasses'] = 'No se encontraron las clases de operadores.'; + $lang['straccessmethod'] = 'Método de acceso'; + + // Stats and performance + $lang['strrowperf'] = 'Rendimiento de fila'; + $lang['strioperf'] = 'Rentimiento de E/S'; + $lang['stridxrowperf'] = 'Rendimiento de índice de la fila'; + $lang['stridxioperf'] = 'Rendimiento de indexado de E/S'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Secuencial'; + $lang['strscan'] = 'Escanear'; + $lang['strread'] = 'Leer'; + $lang['strfetch'] = 'Extraer'; + $lang['strheap'] = 'Salto'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'Indice TOAST'; + $lang['strcache'] = 'Caché'; + $lang['strdisk'] = 'Disco'; + $lang['strrows2'] = 'Filas'; + + // Tablespaces + $lang['strtablespace'] = 'Tablespace'; + $lang['strtablespaces'] = 'Tablespaces'; + $lang['strshowalltablespaces'] = 'Mostrar todos los tablespaces'; + $lang['strnotablespaces'] = 'No se encontraron tablespaces.'; + $lang['strcreatetablespace'] = 'Crear tablespace'; + $lang['strlocation'] = 'Ubicación'; + $lang['strtablespaceneedsname'] = 'Debes darle un nombre al tablespace.'; + $lang['strtablespaceneedsloc'] = 'Debes dar un directorio en donde crear el tablespace.'; + $lang['strtablespacecreated'] = 'Tablespace creado.'; + $lang['strtablespacecreatedbad'] = 'Falló la creación del tablespace.'; + $lang['strconfdroptablespace'] = '¿Esta seguro que quiere eliminar el tablespace "%s"?'; + $lang['strtablespacedropped'] = 'Tablespace eliminado.'; + $lang['strtablespacedroppedbad'] = 'Falló la eliminación del tablespace.'; + $lang['strtablespacealtered'] = 'Tablespace modificado.'; + $lang['strtablespacealteredbad'] = 'Falló la modificación del Tablespace.'; + + // Miscellaneous + $lang['strtopbar'] = '%s corriendo en %s:%s -- Usted ha iniciado sesión con el usuario "%s"'; + $lang['strtimefmt'] = 'd/m/Y, G:i:s'; + $lang['strhelp'] = 'Ayuda'; + $lang['strhelpicon'] = '?'; + $lang['strhelppagebrowser'] = 'Buscador de la página de ayúda'; + $lang['strselecthelppage'] = 'Seleccione una página de ayuda'; + $lang['strinvalidhelppage'] = 'Página de ayuda inválida.'; + $lang['strlogintitle'] = 'Iniciar sesión en %s'; + $lang['strlogoutmsg'] = 'Saliendo de %s'; + $lang['strloading'] = 'Cargando...'; + $lang['strerrorloading'] = 'Error al cargar'; + $lang['strclicktoreload'] = 'Clic para recargar'; + + // Autovacuum + $lang['strautovacuum'] = 'Autolimpiado'; + $lang['strturnedon'] = 'Encendido'; + $lang['strturnedoff'] = 'Apagado'; + $lang['strenabled'] = 'Habilitado'; + $lang['strnovacuumconf'] = 'No se encontró configuración para autolimpiar.'; + $lang['strvacuumbasethreshold'] = 'Umbral de limpiar'; + $lang['strvacuumscalefactor'] = 'Factor de escala de limpiado'; + $lang['stranalybasethreshold'] = 'Analizar umbral base'; + $lang['stranalyzescalefactor'] = 'Analizar Facor de Escala'; + $lang['strvacuumcostdelay'] = 'Tiempo de retraso para limpiar'; + $lang['strvacuumcostlimit'] = 'Limite del costo de limpiar'; + $lang['strvacuumpertable'] = 'Configuración de autolimpiar de cada tabla'; + $lang['straddvacuumtable'] = 'Agregar configuración de autolimpiar a una tabla'; + $lang['streditvacuumtable'] = 'Editar configuración de autolimpiar para la tabla %s'; + $lang['strdelvacuumtable'] = '¿Eliminar configuración de autolimpiar para la tabla %s ?'; + $lang['strvacuumtablereset'] = 'Reiniciar configuración de autolimpiar para la tabla %s '; + $lang['strdelvacuumtablefail'] = 'Falló al remover la configuración de autolimpiar para la tabla %s'; + $lang['strsetvacuumtablesaved'] = 'Configuración de autolimpiar %s guardada.'; + $lang['strsetvacuumtablefail'] = 'Falló la configuración de autolimpiar para la tabla %s.'; + $lang['strspecifydelvacuumtable'] = 'Debes especificar la tabla a la que deseas removerle los parámetros de autolimpiar.'; + $lang['strspecifyeditvacuumtable'] = 'Debes especificar la tabla a la que deseeas editarle los parámetros de autolimpiar.'; + $lang['strnotdefaultinred'] = 'Los valores en rojo no son los valores por defecto.'; + + // Table-level Locks + $lang['strlocks'] = 'Bloqueos'; + $lang['strtransaction'] = 'ID de la transacción'; + $lang['strvirtualtransaction'] = 'ID de la transacción virtual'; + $lang['strprocessid'] = 'ID de proceso'; + $lang['strmode'] = 'Modo de bloqueo'; + $lang['strislockheld'] = '¿Se mantiene el bloqueo?'; + + // Prepared transactions + $lang['strpreparedxacts'] = 'Transacciones preparadas'; + $lang['strxactid'] = 'ID de la Transacción'; + $lang['strgid'] = 'ID Global'; + + // Fulltext search + $lang['strfulltext'] = 'Búsqueda de texto completo'; + $lang['strftsconfig'] = 'Configuración de BTC'; + $lang['strftsconfigs'] = 'Configuraciones'; + $lang['strftscreateconfig'] = 'Crear configuración de BTC'; + $lang['strftscreatedict'] = 'Crear diccionario'; + $lang['strftscreatedicttemplate'] = 'Crear plantilla de dicionario'; + $lang['strftscreateparser'] = 'Crear analizador'; + $lang['strftsnoconfigs'] = 'No se encontró configuración de búsqueda de texto completo.'; + $lang['strftsconfigdropped'] = 'Configuración de búsqueda de texto completo eliminada.'; + $lang['strftsconfigdroppedbad'] = 'Falló la eliminación de la configuración de búsqueda de texto completo.'; + $lang['strconfdropftsconfig'] = '¿Estás seguro de eliminar la configuración de búsqueda de texto completo "%s"?'; + $lang['strconfdropftsdict'] = '¿Estás seguro eliminar el diccionario de BTC "%s"?'; + $lang['strconfdropftsmapping'] = '¿Estás seguro de eliminar la asignación "%s" de la configuración de BTC "%s"?'; + $lang['strftstemplate'] = 'Plantilla'; + $lang['strftsparser'] = 'Analizador'; + $lang['strftsconfigneedsname'] = 'Debes suministrar un nombre para la configuración de la BTC.'; + $lang['strftsconfigcreated'] = 'Configuración de BTC creada.'; + $lang['strftsconfigcreatedbad'] = 'Falló la creación de BTC.'; + $lang['strftsmapping'] = 'Mapeo'; + $lang['strftsdicts'] = 'Diccionarios'; + $lang['strftsdict'] = 'Diccionario'; + $lang['strftsemptymap'] = 'Configuración vacía de la asignación de BTC .'; + $lang['strftsconfigaltered'] = 'Configuración de BTC modificada.'; + $lang['strftsconfigalteredbad'] = 'Falló la modificación de la configuración de BTC.'; + $lang['strftsconfigmap'] = 'Configuración de asignación de BTC'; + $lang['strftsparsers'] = 'Analizadores de BTC'; + $lang['strftsnoparsers'] = 'No hay analizadores de BTC disponibles.'; + $lang['strftsnodicts'] = 'No hay diccionarios de BTC disponibles.'; + $lang['strftsdictcreated'] = 'Diccionario de BTC creado.'; + $lang['strftsdictcreatedbad'] = 'Falló la creación del diccionario BTC.'; + $lang['strftslexize'] = 'Analizar léxicamente'; + $lang['strftsinit'] = 'Iniciar'; + $lang['strftsoptionsvalues'] = 'Opciones y valores'; + $lang['strftsdictneedsname'] = 'Debes suministrar un nombre para el diccionario de BTC.'; + $lang['strftsdictdropped'] = 'Diccionario de BTC eliminado.'; + $lang['strftsdictdroppedbad'] = 'Falló la eliminación del diccionario de BTC.'; + $lang['strftsdictaltered'] = 'Diccionario de BTC modificado.'; + $lang['strftsdictalteredbad'] = 'Falló la modificación del diccionario de BTC.'; + $lang['strftsaddmapping'] = 'Agregar nueva asignación'; + $lang['strftsspecifymappingtodrop'] = 'Debes especificar al menos una asignación a eliminar.'; + $lang['strftsspecifyconfigtoalter'] = 'Debes especificar una configuración de BTC a modificar'; + $lang['strftsmappingdropped'] = 'Asignación de BTC eliminada.'; + $lang['strftsmappingdroppedbad'] = 'Falló la eliminación de la asignación de BTC.'; + $lang['strftsnodictionaries'] = 'No se encontrarón diccionarios.'; + $lang['strftsmappingaltered'] = 'Asignación de BTC modificada.'; + $lang['strftsmappingalteredbad'] = 'Falló la modificación de la asignación de BTC.'; + $lang['strftsmappingadded'] = 'Asignación de BTC agregada.'; + $lang['strftsmappingaddedbad'] = 'Falló la asignación de BTC.'; + $lang['strftstabconfigs'] = 'Configuraciones'; + $lang['strftstabdicts'] = 'Diccionarios'; + $lang['strftstabparsers'] = 'Analizadores'; + $lang['strftscantparsercopy'] = 'No se puede especificar tanto el analizador como la plantilla durante la creación de la configuración de la búsqueda de texto.'; + + //Plugins + $lang['strpluginnotfound'] = 'Error: el plugin \'%s\' no se encontró. Chequea si existe en la carpeta plugins/ , o si el plugin contiene un archivo llamado plugin.php. Los nombres de los plugin son sensibles a las mayúsculas'; + $lang['stractionnotfound'] = 'Error: la acción \'%s\' no se encontró en el \'%s\' del plugin, o no se especificó como acción.'; + $lang['strhooknotfound'] = 'Error: el hook \'%s\' no está disponible.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/swedish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/swedish.php new file mode 100644 index 00000000..bed040ce --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/swedish.php @@ -0,0 +1,565 @@ +<?php + + /** + * Swedish language file for phpPgAdmin. + * maintainer S. Malmqvist <samoola@slak.nu> + * Due to lack of SQL knowledge som translations may be wrong, mail me the correct one and ill fix it + * + * $Id: swedish.php,v 1.11 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Swedish'; + $lang['applocale'] = 'sv-SE'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Välkommen till phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmins Hemsida'; + $lang['strpgsqlhome'] = 'PostgreSQLs Hemsida'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQLs Dokumentation (lokalt)'; + $lang['strreportbug'] = 'Rapportera ett fel'; + $lang['strviewfaq'] = 'Visa Frågor & Svar'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Logga in'; + $lang['strloginfailed'] = 'Inloggningen misslyckades'; + $lang['strlogindisallowed'] = 'Inloggningen ej tillåten'; + $lang['strserver'] = 'Server'; + $lang['strlogout'] = 'Logga ut'; + $lang['strowner'] = 'Ägare'; + $lang['straction'] = 'Åtgärd'; + $lang['stractions'] = 'Åtgärder'; + $lang['strname'] = 'Namn'; + $lang['strdefinition'] = 'Definition'; + $lang['strproperties'] = 'Egenskaper'; + $lang['strbrowse'] = 'Bläddra'; + $lang['strdrop'] = 'Ta bort'; + $lang['strdropped'] = 'Borttagen'; + $lang['strnull'] = 'Ingenting'; + $lang['strnotnull'] = 'Inte Ingenting'; + $lang['strfirst'] = '<< Första'; + $lang['strlast'] = 'Sista >>'; + $lang['strprev'] = 'Föregående'; + $lang['strfailed'] = 'Misslyckades'; + $lang['strnext'] = 'Nästa'; + $lang['strcreate'] = 'Skapa'; + $lang['strcreated'] = 'Skapad'; + $lang['strcomment'] = 'Kommentar'; + $lang['strlength'] = 'Längd'; + $lang['strdefault'] = 'Standardvärde'; + $lang['stralter'] = 'Ändra'; + $lang['strok'] = 'OK'; + $lang['strcancel'] = 'Ångra'; + $lang['strsave'] = 'Spara'; + $lang['strreset'] = 'Nollställ'; + $lang['strinsert'] = 'Infoga'; + $lang['strselect'] = 'Välj'; + $lang['strdelete'] = 'Radera'; + $lang['strupdate'] = 'Uppdatera'; + $lang['strreferences'] = 'Referencer'; + $lang['stryes'] = 'Ja'; + $lang['strno'] = 'Nej'; + $lang['strtrue'] = 'Sant'; + $lang['strfalse'] = 'Falskt'; + $lang['stredit'] = 'Redigera'; + $lang['strcolumns'] = 'Kolumner'; + $lang['strrows'] = 'Rad(er)'; + $lang['strrowsaff'] = 'Rad(er) Påverkade.'; + $lang['strobjects'] = 'Objekt'; + $lang['strexample'] = 't. ex.'; + $lang['strback'] = 'Bakåt'; + $lang['strqueryresults'] = 'Sökresultat'; + $lang['strshow'] = 'Visa'; + $lang['strempty'] = 'Tom'; + $lang['strlanguage'] = 'Språk'; + $lang['strencoding'] = 'Kodning'; + $lang['strvalue'] = 'Värde'; + $lang['strunique'] = 'Unik'; + $lang['strprimary'] = 'Primär'; + $lang['strexport'] = 'Exportera'; + $lang['strimport'] = 'Importera'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = 'Kör'; + $lang['stradmin'] = 'Admin'; + $lang['strvacuum'] = 'Städa upp'; + $lang['stranalyze'] = 'Analysera'; + $lang['strclusterindex'] = 'Kluster'; + $lang['strclustered'] = 'Klustrat?'; + $lang['strreindex'] = 'Återindexera'; + $lang['strrun'] = 'Kör'; + $lang['stradd'] = 'Lägg till'; + $lang['strinstead'] = 'Gör Istället'; + $lang['strevent'] = 'Händelse'; + $lang['strformat'] = 'Format'; + $lang['strwhen'] = 'När'; + $lang['strdata'] = 'Data'; + $lang['strconfirm'] = 'Bekräfta'; + $lang['strexpression'] = 'Uttryck'; + $lang['strellipsis'] = '...'; + $lang['strwhere'] = 'När'; + $lang['strexplain'] = 'Förklara'; + $lang['strfind'] = 'Sök'; + $lang['stroptions'] = 'Alternativ'; + $lang['strrefresh'] = 'Uppdatera'; + $lang['strcollapse'] = 'Förminska'; + $lang['strexpand'] = 'Utöka'; + $lang['strdownload'] = 'Ladda ner'; + $lang['strdownloadgzipped'] = 'Ladda ner komprimerat med gzip'; + $lang['strinfo'] = 'Info'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Avancerat'; + $lang['strvariables'] = 'Variabler'; + $lang['strprocess'] = 'Process'; + $lang['strprocesses'] = 'Processer'; + $lang['strsetting'] = 'Inställning'; + $lang['strparameters'] = 'Parametrar'; + + // Error handling + $lang['strnotloaded'] = 'Du har inte kompilerat in korrekt databasstöd i din PHP-installation.'; + $lang['strbadconfig'] = 'Din config.inc.php är ej uppdaterad. Du måste återskapa den från den nya config.inc.php-dist.'; + $lang['strbadencoding'] = 'Misslyckades att sätta klientkodning i databasen.'; + $lang['strbadschema'] = 'Otillåtet schema angett.'; + $lang['strinstatement'] = 'I påstående:'; + $lang['strsqlerror'] = 'SQL fel:'; + $lang['strinvalidparam'] = 'Otillåtna scriptparametrar.'; + $lang['strnodata'] = 'Hittade inga rader.'; + $lang['strnoobjects'] = 'Hittade inga objekt.'; + $lang['strrownotunique'] = 'Ingen unik nyckel för denna rad.'; + + // Tables + $lang['strtable'] = 'Tabell'; + $lang['strtables'] = 'Tabeller'; + $lang['strshowalltables'] = 'Visa alla tabeller'; + $lang['strnotables'] = 'Hittade inga tabeller.'; + $lang['strnotable'] = 'Hittade ingen tabell.'; + $lang['strcreatetable'] = 'Skapa tabell'; + $lang['strtablename'] = 'Tabellnamn'; + $lang['strtableneedsname'] = 'Du måste ge ett namn till din tabell.'; + $lang['strtableneedsfield'] = 'Du måste ange minst ett fält.'; + $lang['strtableneedscols'] = 'tabeller kräver ett tillåtet antal kolumner.'; + $lang['strtablecreated'] = 'Tabell skapad.'; + $lang['strtablecreatedbad'] = 'Misslyckades med att skapa Tabell.'; + $lang['strconfdroptable'] = 'Är du säker på att du vill ta bort tabellen "%s"?'; + $lang['strtabledropped'] = 'Tabellen borttagen.'; + $lang['strinsertrow'] = 'Infoga rad'; + $lang['strtabledroppedbad'] = 'Misslyckades med att ta bort tabellen.'; + $lang['strrowinserted'] = 'Rad infogad.'; + $lang['strconfemptytable'] = 'Är du säker på att du vill tömma tabellen "%s"?'; + $lang['strrowupdated'] = 'Rad uppdaterad.'; + $lang['strrowinsertedbad'] = 'Misslyckades att infoga rad.'; + $lang['strtableemptied'] = 'Tabellen tömd.'; + $lang['strrowupdatedbad'] = 'Misslyckades att uppdatera rad.'; + $lang['streditrow'] = 'Ändra rad'; + $lang['strrowdeleted'] = 'Rad raderad.'; + $lang['strrowdeletedbad'] = 'Misslyckades att radera rad.'; + $lang['strfield'] = 'Fält'; + $lang['strconfdeleterow'] = 'Är du säker på att du vill ta bort denna rad?'; + $lang['strnumfields'] = 'Antal fält'; + $lang['strsaveandrepeat'] = 'Infoga & Upprepa'; + $lang['strtableemptiedbad'] = 'Misslyckades med att tömma tabellen'; + $lang['strdeleterow'] = 'Radera rad'; + $lang['strfields'] = 'Fält'; + $lang['strfieldneedsname'] = 'Du måste namnge fältet'; + $lang['strcolumndropped'] = 'Kolumn raderad.'; + $lang['strselectallfields'] = 'Välj alla fält'; + $lang['strselectneedscol'] = 'Du måste visa minst en kolumn'; + $lang['strselectunary'] = 'Unära operander kan ej ha värden.'; + $lang['strcolumnaltered'] = 'Kolumn ändrad.'; + $lang['straltercolumn'] = 'Ändra kolumn'; + $lang['strcolumnalteredbad'] = 'Misslyckades att ändra kolumn.'; + $lang['strconfdropcolumn'] = 'Är du säker på att du vill radera kolumn "%s" från tabell "%s"?'; + $lang['strcolumndroppedbad'] = 'Misslyckades att radera kolumn.'; + $lang['straddcolumn'] = 'Lägg till kolumn'; + $lang['strcolumnadded'] = 'Kolumn inlagd.'; + $lang['strcolumnaddedbad'] = 'Misslyckades att lägga till kolumne.'; + $lang['strcascade'] = 'KASKAD'; + $lang['strdataonly'] = 'Endast Data'; + $lang['strtablealtered'] = 'Tabell ändrad.'; + $lang['strtablealteredbad'] = 'Misslyckades att ändra tabell.'; + + // Users + $lang['struser'] = 'Användare'; + $lang['strusers'] = 'Användare'; + $lang['strusername'] = 'Användarnamn'; + $lang['strpassword'] = 'Lösenord'; + $lang['strsuper'] = 'Superanvändare?'; + $lang['strcreatedb'] = 'Skapa Databas?'; + $lang['strexpires'] = 'Utgångsdatum'; + $lang['strsessiondefaults'] = 'Sessionsinställningar'; + $lang['strnewname'] = 'Nytt namn'; + $lang['strnousers'] = 'Hittade inga användare.'; + $lang['strrename'] = 'Döp om'; + $lang['struserrenamed'] = 'Användarnamn ändrat.'; + $lang['struserrenamedbad'] = 'Misslyckades att döpa om användare.'; + $lang['struserupdated'] = 'Användare uppdaterad.'; + $lang['struserupdatedbad'] = 'Misslyckades att uppdatera användare.'; + $lang['strshowallusers'] = 'Visa alla användare'; + $lang['strcreateuser'] = 'Skapa användare'; + $lang['struserneedsname'] = 'Du måste namnge användaren.'; + $lang['strconfdropuser'] = 'Är du säker på att du vill radera användaren "%s"?'; + $lang['strusercreated'] = 'Användare skapad.'; + $lang['strusercreatedbad'] = 'Misslyckades att skapa användare.'; + $lang['struserdropped'] = 'Användare raderad.'; + $lang['struserdroppedbad'] = 'Misslyckades att radera användare.'; + $lang['straccount'] = 'Konton'; + $lang['strchangepassword'] = 'Ändra lösenord'; + $lang['strpasswordchanged'] = 'Lösenord ändrat.'; + $lang['strpasswordchangedbad'] = 'Misslyckades att ändra lösenord.'; + $lang['strpasswordshort'] = 'För få tecken i lösenordet.'; + $lang['strpasswordconfirm'] = 'Lösenordet är inte samma som bekräftelsen.'; + $lang['strgroup'] = 'Grupp'; + $lang['strgroups'] = 'Grupper'; + $lang['strnogroup'] = 'Hittade ej grupp.'; + $lang['strnogroups'] = 'Hittade inga grupper.'; + $lang['strcreategroup'] = 'Skapa grupp'; + $lang['strshowallgroups'] = 'Visa alla grupper'; + $lang['strgroupneedsname'] = 'Du måste namnge din grupp.'; + $lang['strgroupcreated'] = 'Grupp skapad.'; + $lang['strgroupdropped'] = 'Grupp raderad.'; + $lang['strgroupcreatedbad'] = 'Misslyckades att skapa grupp.'; + $lang['strconfdropgroup'] = 'Är du säker på att du vill radera grupp "%s"?'; + $lang['strprivileges'] = 'Rättigheter'; + $lang['strgrant'] = 'Tillåt'; + $lang['strgranted'] = 'Rättigheter ändrade.'; + $lang['strgroupdroppedbad'] = 'Misslyckades att radera grupp.'; + $lang['straddmember'] = 'Lägg till medlem'; + $lang['strmemberadded'] = 'Medlem inlagd.'; + $lang['strmemberaddedbad'] = 'Misslyckades att lägga till medlem.'; + $lang['strdropmember'] = 'Radera medlem'; + $lang['strconfdropmember'] = 'Är du säker på att du vill radera medlem "%s" från gruppen "%s"?'; + $lang['strmemberdropped'] = 'Medlem raderad.'; + $lang['strmemberdroppedbad'] = 'Misslyckades att radera medlem.'; + $lang['strprivilege'] = 'Rättighet'; + $lang['strnoprivileges'] = 'Detta objekt har standard ägarrättigheter.'; + $lang['strmembers'] = 'Medelemmar'; + $lang['strrevoke'] = 'Ta tillbaka'; + $lang['strgrantbad'] = 'Du måste ange minst en användare eller grupp och minst en rättighet.'; + $lang['strgrantfailed'] = 'Misslyckades att ändra rättigheter.'; + $lang['stralterprivs'] = 'Ändra rättigheter'; + $lang['strdatabase'] = 'Databas'; + $lang['strdatabasedropped'] = 'Databas raderad.'; + $lang['strdatabases'] = 'Databaser'; + $lang['strentersql'] = 'Ange SQL att köra:'; + $lang['strgrantor'] = 'Tillståndsgivare'; + $lang['strasterisk'] = '*'; + $lang['strshowalldatabases'] = 'Visa alla databaser'; + $lang['strnodatabase'] = 'Hittade ingen databas.'; + $lang['strnodatabases'] = 'Hittade inga databaser.'; + $lang['strcreatedatabase'] = 'Skapa databas'; + $lang['strdatabasename'] = 'Databasnamn'; + $lang['strdatabaseneedsname'] = 'Du måste namnge databasen.'; + $lang['strdatabasecreated'] = 'Databas skapad.'; + $lang['strdatabasecreatedbad'] = 'Misslyckades att skapa databas.'; + $lang['strconfdropdatabase'] = 'Är du säker på att du vill radera databas "%s"?'; + $lang['strdatabasedroppedbad'] = 'Misslyckades att radera databas.'; + $lang['strsqlexecuted'] = 'SQL-kommando utfört.'; + $lang['strvacuumgood'] = 'Uppstädning utförd.'; + $lang['strvacuumbad'] = 'Uppstädning misslyckades.'; + $lang['stranalyzegood'] = 'Analysen lyckades.'; + $lang['stranalyzebad'] = 'Analysen misslyckades.'; + $lang['strstructureonly'] = 'Endast struktur'; + $lang['strstructureanddata'] = 'Struktur och data'; + + // Views + $lang['strview'] = 'Vy'; + $lang['strviews'] = 'Vyer'; + $lang['strshowallviews'] = 'Visa alla vyer'; + $lang['strnoview'] = 'Hittade ingen vy.'; + $lang['strnoviews'] = 'Hittade inga vyer.'; + $lang['strcreateview'] = 'Skapa vy'; + $lang['strviewname'] = 'Vynamn'; + $lang['strviewneedsname'] = 'Du måste namnge Vy.'; + $lang['strviewneedsdef'] = 'Du måste ange en definition för din vy.'; + $lang['strviewcreated'] = 'Vy skapad.'; + $lang['strviewcreatedbad'] = 'Misslyckades att skapa vy.'; + $lang['strconfdropview'] = 'Är du säker på att du vill radera vyn "%s"?'; + $lang['strviewdropped'] = 'Vy raderad.'; + $lang['strviewdroppedbad'] = 'Misslyckades att radera vy.'; + $lang['strviewupdated'] = 'Vy uppdaterad.'; + $lang['strviewupdatedbad'] = 'Misslyckades att uppdatera vy.'; + $lang['strviewlink'] = 'Länkade nycklar'; + $lang['strviewconditions'] = 'Ytterligare villkor'; + + // Sequences + $lang['strsequence'] = 'Sekvens'; + $lang['strsequences'] = 'Sekvenser'; + $lang['strshowallsequences'] = 'Visa alla sekvenser'; + $lang['strnosequence'] = 'Hittade ingen sekvens.'; + $lang['strnosequences'] = 'Hittade inga sekvenser.'; + $lang['strcreatesequence'] = 'Skapa sekvens'; + $lang['strlastvalue'] = 'Senaste värde'; + $lang['strincrementby'] = 'Öka med'; + $lang['strstartvalue'] = 'Startvärde'; + $lang['strmaxvalue'] = 'Största värde'; + $lang['strminvalue'] = 'Minsta värde'; + $lang['strcachevalue'] = 'Värde på cache'; + $lang['strlogcount'] = 'Räkna log'; + $lang['striscycled'] = 'Är upprepad?'; + $lang['strsequenceneedsname'] = 'Du måste ge ett namn till din sekvens.'; + $lang['strsequencecreated'] = 'Sekvens skapad.'; + $lang['strsequencecreatedbad'] = 'Misslyckades att skapa sekvens.'; + $lang['strconfdropsequence'] = 'Är du säker på att du vill radera sekvensen "%s"?'; + $lang['strsequencedropped'] = 'Sekvensen borrtagen.'; + $lang['strsequencedroppedbad'] = 'Misslyckades att radera sekvens.'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Index'; + $lang['strindexname'] = 'Indexnamn'; + $lang['strshowallindexes'] = 'Visa alla index'; + $lang['strnoindex'] = 'Hittade inget index.'; + $lang['strsequencereset'] = 'Nollställ sekvens.'; + $lang['strsequenceresetbad'] = 'Misslyckades att nollställa sekvens.'; + $lang['strnoindexes'] = 'Hittade inga index.'; + $lang['strcreateindex'] = 'Skapa index'; + $lang['strindexname'] = 'Indexnamn'; + $lang['strtabname'] = 'Tabellnamn'; + $lang['strcolumnname'] = 'Kolumnnamn'; + $lang['strindexneedsname'] = 'Du måste ge ett namn för ditt index'; + $lang['strindexneedscols'] = 'Det krävs ett giltigt antal kolumner för index.'; + $lang['strindexcreated'] = 'Index skapat'; + $lang['strindexcreatedbad'] = 'Misslyckades att skapa index.'; + $lang['strconfdropindex'] = 'Är du säker på att du vill radera index "%s"?'; + $lang['strindexdropped'] = 'Index raderat.'; + $lang['strindexdroppedbad'] = 'Misslyckades att radera index.'; + $lang['strkeyname'] = 'Nyckelvärdesnamn'; + $lang['struniquekey'] = 'Unikt nyckelvärde'; + $lang['strprimarykey'] = 'Primärnyckel'; + $lang['strindextype'] = 'Typ av index'; + $lang['strindexname'] = 'Indexnamn'; + $lang['strtablecolumnlist'] = 'Tabellkolumner'; + $lang['strindexcolumnlist'] = 'Indexkolumner'; + $lang['strconfcluster'] = 'Är du säker på att du vill klustra "%s"?'; + $lang['strclusteredgood'] = 'Klustring avslutad.'; + $lang['strclusteredbad'] = 'Klustring misslyckades.'; + + // Rules + $lang['strrules'] = 'Regler'; + $lang['strrule'] = 'Regel'; + $lang['strshowallrules'] = 'Visa alla regler'; + $lang['strnorule'] = 'Hittade ingen regel.'; + $lang['strnorules'] = 'Hittade inga regler.'; + $lang['strcreaterule'] = 'Skapa regel'; + $lang['strrulename'] = 'Regelnamn'; + $lang['strruleneedsname'] = 'Du måste ge ett namn till din regel.'; + $lang['strrulecreated'] = 'Regel skapad.'; + $lang['strrulecreatedbad'] = 'Misslyckades att skapa regel.'; + $lang['strconfdroprule'] = 'Är du säker på att du vill radera regel "%s" för "%s"?'; + $lang['strruledropped'] = 'Regel raderat.'; + $lang['strruledroppedbad'] = 'Misslyckades att radera regel.'; + + // Constraints + $lang['strconstraints'] = 'Begränsningar'; + $lang['strshowallconstraints'] = 'Visa alla begränsningar'; + $lang['strnoconstraints'] = 'Hittade inga begränsningar.'; + $lang['strcreateconstraint'] = 'Skapa begränsning'; + $lang['strconstraintcreated'] = 'Begränsning skapad.'; + $lang['strconstraintcreatedbad'] = 'Misslyckades att skapa begränsning.'; + $lang['strconfdropconstraint'] = 'Är du säker på att du vill radera begränsning "%s" för "%s"?'; + $lang['strconstraintdropped'] = 'Begränsning raderad.'; + $lang['strconstraintdroppedbad'] = 'Misslyckades att radera begränsning.'; + $lang['straddcheck'] = 'Lägg till en koll'; + $lang['strcheckneedsdefinition'] = 'En kollbegränsning behöver definieras.'; + $lang['strcheckadded'] = 'Kollbegränsning inlagd.'; + $lang['strcheckaddedbad'] = 'Misslyckades att lägga till en koll.'; + $lang['straddpk'] = 'Lägg till primärnyckel'; + $lang['strpkneedscols'] = 'Primärnyckel behöver minst en kolumn.'; + $lang['strpkadded'] = 'Primärnyckel inlagd.'; + $lang['strpkaddedbad'] = 'Misslyckades att lägga till primärnyckel.'; + $lang['stradduniq'] = 'Lägg till Unikt nyckelvärde'; + $lang['struniqneedscols'] = 'Unikt nyckelvärde behöver minst en kolumn.'; + $lang['struniqadded'] = 'Unikt nyckelvärde inlagt.'; + $lang['struniqaddedbad'] = 'Misslyckades att lägga till unikt nyckelvärde.'; + $lang['straddfk'] = 'Lägg till utomstående nyckel'; + $lang['strfkneedscols'] = 'Utomstående nyckel behöver minst en kolumn.'; + $lang['strfkneedstarget'] = 'Utomstående nycket behöver en måltabell.'; + $lang['strfkadded'] = 'Utomstående nyckel inlagd.'; + $lang['strfkaddedbad'] = 'Misslyckades att lägga till utomstående nyckel.'; + $lang['strfktarget'] = 'Måltabell'; + $lang['strfkcolumnlist'] = 'Kolumner i nyckel'; + $lang['strondelete'] = 'VID RADERING'; + $lang['stronupdate'] = 'VID UPPDATERING'; + + // Functions + $lang['strfunction'] = 'Funktion'; + $lang['strfunctions'] = 'Funktioner'; + $lang['strshowallfunctions'] = 'Visa alla funktioner'; + $lang['strnofunction'] = 'Hittade ingen funktion.'; + $lang['strnofunctions'] = 'Hittade inga funktioner.'; + $lang['strcreatefunction'] = 'Skapa funktion'; + $lang['strfunctionname'] = 'Funktionsnamn'; + $lang['strreturns'] = 'Återger'; + $lang['strarguments'] = 'Argument'; + $lang['strfunctionneedsname'] = 'Du måste namnge din funktion.'; + $lang['strfunctionneedsdef'] = 'Du måste definiera din funktion.'; + $lang['strfunctioncreated'] = 'Funktion skapad.'; + $lang['strfunctioncreatedbad'] = 'Misslyckades att skapa funktion.'; + $lang['strconfdropfunction'] = 'Är du säker på att du vill radera funktionen "%s"?'; + $lang['strproglanguage'] = 'Programmeringsspråk'; + $lang['strfunctiondropped'] = 'Funktionen raderad.'; + $lang['strfunctiondroppedbad'] = 'Misslyckades att radera funktion.'; + $lang['strfunctionupdated'] = 'Funktion uppdaterad.'; + $lang['strfunctionupdatedbad'] = 'Misslyckades att uppdatera funktion.'; + + // Triggers + $lang['strtrigger'] = 'Mekanism'; + $lang['strtriggers'] = 'Mekanismer'; + $lang['strshowalltriggers'] = 'Visa alla Mekanismer'; + $lang['strnotrigger'] = 'Hittade ingen mekanism.'; + $lang['strnotriggers'] = 'Hittade inga mekanismer.'; + $lang['strcreatetrigger'] = 'Skapa mekanism'; + $lang['strtriggerneedsname'] = 'Du måste namnge din mekanism.'; + $lang['strtriggerneedsfunc'] = 'Du måste specificera en funktion för din mekanism.'; + $lang['strtriggercreated'] = 'Mekanism skapad.'; + $lang['strtriggerdropped'] = 'Mekanism raderad.'; + $lang['strtriggercreatedbad'] = 'Misslyckades att skapa mekanism.'; + $lang['strconfdroptrigger'] = 'Är du säker på att du vill radera mekanismen "%s" på "%s"?'; + $lang['strtriggerdroppedbad'] = 'Misslyckades att radera mekanism.'; + + // Types + $lang['strtype'] = 'Typ'; + $lang['strstorage'] = 'Lagring'; + $lang['strtriggeraltered'] = 'Mekanism ändrad.'; + $lang['strtriggeralteredbad'] = 'Misslyckades att ändra mekanism.'; + $lang['strtypes'] = 'Typer'; + $lang['strtypeneedslen'] = 'Du måste ange typens längd.'; + $lang['strshowalltypes'] = 'Visa alla typer'; + $lang['strnotype'] = 'Hittade ingen typ.'; + $lang['strnotypes'] = 'Hittade inga typer.'; + $lang['strcreatetype'] = 'Skapa typ'; + $lang['strtypename'] = 'Namn på typen'; + $lang['strinputfn'] = 'Infogande funktion'; + $lang['stroutputfn'] = 'Funktion för utvärden'; + $lang['strpassbyval'] = 'Genomgått utvärdering?'; + $lang['stralignment'] = 'Justering'; + $lang['strelement'] = 'Element'; + $lang['strdelimiter'] = 'Avgränsare'; + $lang['strtypeneedsname'] = 'Du måste namnge din typ.'; + $lang['strtypecreated'] = 'Typ skapad'; + $lang['strtypecreatedbad'] = 'Misslyckades att skapa typ.'; + $lang['strconfdroptype'] = 'Är du säker på att du vill radera typen "%s"?'; + $lang['strtypedropped'] = 'Typ raderad.'; + $lang['strtypedroppedbad'] = 'Misslyckades att radera typ.'; + + // Schemas + $lang['strschema'] = 'Schema'; + $lang['strschemas'] = 'Scheman'; + $lang['strshowallschemas'] = 'Visa alla scheman'; + $lang['strnoschema'] = 'Hittade inget schema.'; + $lang['strnoschemas'] = 'Hittade inga scheman.'; + $lang['strcreateschema'] = 'Skapa Schema'; + $lang['strschemaname'] = 'Schemanamn'; + $lang['strschemaneedsname'] = 'Du måste namnge ditt Schema.'; + $lang['strschemacreated'] = 'Schema skapat'; + $lang['strschemacreatedbad'] = 'Misslyckades att skapa schema.'; + $lang['strconfdropschema'] = 'Är du säker på att du vill radera schemat "%s"?'; + $lang['strschemadropped'] = 'Schema raderat.'; + $lang['strschemadroppedbad'] = 'Misslyckades att radera schema.'; + + // Reports + $lang['strtopbar'] = '%s körs på %s:%s -- Du är inloggad som användare "%s"'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + + // Domains + $lang['strdomain'] = 'Domän'; + $lang['strdomains'] = 'Domäner'; + $lang['strshowalldomains'] = 'Visa alla domäner'; + $lang['strnodomains'] = 'Hittade inga domäner.'; + $lang['strcreatedomain'] = 'Skapa domän'; + $lang['strdomaindropped'] = 'Domän raderad.'; + $lang['strdomaindroppedbad'] = 'Misslyckades att radera domän.'; + $lang['strconfdropdomain'] = 'Är du säker på att du vill radera domänen "%s"?'; + $lang['strdomainneedsname'] = 'Du måste ange ett domännamn.'; + $lang['strdomaincreated'] = 'Domän skapad.'; + $lang['strdomaincreatedbad'] = 'Misslyckades att skapa domän.'; + $lang['strdomainaltered'] = 'Domän ändrad.'; + $lang['strdomainalteredbad'] = 'Misslyckades att ändra domän.'; + + // Operators + $lang['stroperator'] = 'Operand'; + $lang['stroperators'] = 'Operander'; + $lang['strshowalloperators'] = 'Visa alla operander'; + $lang['strnooperator'] = 'Hittade ingen operand.'; + $lang['strnooperators'] = 'Hittade inga operander.'; + $lang['strcreateoperator'] = 'Skapa operand'; + $lang['strleftarg'] = 'Arg Typ Vänster'; + $lang['strrightarg'] = 'Arg Typ Höger'; + $lang['strcommutator'] = 'Växlare'; + $lang['strnegator'] = 'Negerande'; + $lang['strrestrict'] = 'Spärra'; + $lang['strjoin'] = 'Slå ihop'; + $lang['strhashes'] = 'Hashtabeller'; + $lang['strmerges'] = 'Sammanslagningar'; + $lang['strleftsort'] = 'Sortera vänster'; + $lang['strrightsort'] = 'Sortera höger'; + $lang['strlessthan'] = 'Mindre än'; + $lang['strgreaterthan'] = 'Större än'; + $lang['stroperatorneedsname'] = 'Du måste namnge operanden.'; + $lang['stroperatorcreated'] = 'Operand skapad'; + $lang['stroperatorcreatedbad'] = 'Misslyckades att skapa operand.'; + $lang['strconfdropoperator'] = 'Är du säker på att du vill radera operanden "%s"?'; + $lang['stroperatordropped'] = 'Operand raderad.'; + $lang['stroperatordroppedbad'] = 'Misslyckades att radera operand.'; + + // Casts + $lang['strcasts'] = 'Typomvandlingar'; + $lang['strnocasts'] = 'Hittade inga typomvandlingar.'; + $lang['strsourcetype'] = 'Källtyp'; + $lang['strtargettype'] = 'Måltyp'; + $lang['strimplicit'] = 'Implicit'; + $lang['strinassignment'] = 'Tilldelat i'; + $lang['strbinarycompat'] = '(Binärt kompatibel)'; + + // Conversions + $lang['strconversions'] = 'Omkodningar'; + $lang['strnoconversions'] = 'Hittade inga omkodningar.'; + $lang['strsourceencoding'] = 'Källkodning'; + $lang['strtargetencoding'] = 'Målkodning'; + + // Languages + $lang['strlanguages'] = 'Språk'; + $lang['strnolanguages'] = 'Hittade inga språk.'; + $lang['strtrusted'] = 'Pålitlig(a)'; + + // Info + $lang['strnoinfo'] = 'Ingen information tillgänglig.'; + $lang['strreferringtables'] = 'Refererande tabeller'; + $lang['strparenttables'] = 'Ovanstående tabeller'; + $lang['strchildtables'] = 'Underliggande tabeller'; + + // Aggregates + $lang['straggregates'] = 'Sammanslagningar'; + $lang['strnoaggregates'] = 'Hittade inga sammanslagningar.'; + $lang['stralltypes'] = '(Alla typer)'; + + // Operator Classes + $lang['stropclasses'] = 'Op Klasser'; + $lang['strnoopclasses'] = 'Hittade inga operandklasser.'; + $lang['straccessmethod'] = 'Kopplingsmetod'; + + // Stats and performance + $lang['strrowperf'] = 'Radprestanda'; + $lang['strioperf'] = 'I/O Prestanda'; + $lang['stridxrowperf'] = 'Index Radprestanda'; + $lang['stridxioperf'] = 'Index I/O Prestanda'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sekventiell'; + $lang['strscan'] = 'Scanna'; + $lang['strread'] = 'Läs'; + $lang['strfetch'] = 'Hämta'; + $lang['strheap'] = 'Bunt'; + $lang['strtoast'] = 'Bränn'; + $lang['strtoastindex'] = 'Bränn Index'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disk'; + $lang['strrows2'] = 'Rader'; + + // Miscellaneous + $lang['strtopbar'] = '%s Körs på %s:%s -- Du är inloggad som användare "%s", %s'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Hjälp'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/synch b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/synch new file mode 100755 index 00000000..7e07d226 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/synch @@ -0,0 +1,71 @@ +#!/bin/bash +# This script will synchronize language file with the master +# english translation using diff(1) utility. +# It doesn't translate strings, only inserts english versions +# to proper positions and deletes removed. And it doesn't +# synchronize commented lines. +# You need to have GNU ed and diff installed in $PATH. +# +# Usage: synch <language> +# +# <language> is the filename without the .php extension +# +# BTW, diff should create better ed scripts than previous +# version of synch (that one with awk code). If it will not, +# be frightened about patching Linux kernel sources ;-) + +if [ -z $1 ] ; then + echo "You must tell me which language I should synchronize." + echo -e "for example: \n\t$0 polish" + exit +fi + +if [ ! -f $1.php ] ; then + echo "Sorry, I cannot find $1.php" + exit +fi + +echo "Making backup of $1.php" +cp $1.php $1.php.old + +# Find variables names ( "$lang['strfoo']" part ) +cat english.php | awk -F"=" '{print $1}' > english.tmp +cat $1.php | awk -F"=" '{print $1}' > $1.tmp + +# diff variable names and create ed script +diff --ignore-case --ignore-all-space --ignore-blank-lines \ + --ignore-matching-lines="*" \ + --ignore-matching-lines="[^:]//" \ + --ed \ + $1.tmp english.tmp > diff.ed + +# No more need for .tmp files +rm *.tmp + +# Add english values and ed destination file +cat diff.ed | awk ' +function grep_n(what, where, n, ln) { +# Returns line with searched text + + while ( (getline line < where ) > 0 ) { + if (index(line, what)>0) { + gsub("^\t","",what); + split(line,a,"="); + print what" = "a[2]; + } +} + close(where); +} + +BEGIN { FS="=" } + +/\$lang/{ grep_n($1, "english.php") ; + next; } + + { print } +END { print "w" }' \ +| ed $1.php + +# Clean temporary files +rm diff.ed + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/translations.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/translations.php new file mode 100644 index 00000000..4c694286 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/translations.php @@ -0,0 +1,86 @@ +<?php + /** + * Supported Translations for phpPgAdmin + * + * $Id: translations.php,v 1.4 2007/02/10 03:48:34 xzilla Exp $ + */ + + + // List of language files, and encoded language name. + + $appLangFiles = array( + 'afrikaans' => 'Afrikaans', + 'arabic' => 'عربي', + 'catalan' => 'Català', + 'chinese-tr' => '繁體中文', + 'chinese-sim' => '简体中文', + 'chinese-utf8-zh_TW' => '正體中文(UTF-8)', + 'chinese-utf8-zh_CN' => '简体中文(UTF-8)', + 'czech' => 'Česky', + 'danish' => 'Danish', + 'dutch' => 'Nederlands', + 'english' => 'English', + 'french' => 'Français', + 'galician' => 'Galego', + 'german' => 'Deutsch', + 'greek' => 'Ελληνικά', + 'hebrew' => 'Hebrew', + 'hungarian' => 'Magyar', + 'italian' => 'Italiano', + 'japanese' => '日本語', + 'lithuanian' => 'Lietuvių', + 'mongol' => 'Mongolian', + 'polish' => 'Polski', + 'portuguese-br' => 'Português-Brasileiro', + 'romanian' => 'Română', + 'russian' => 'Русский', + 'russian-utf8' => 'Русский (UTF-8)', + 'slovak' => 'Slovensky', + 'swedish' => 'Svenska', + 'spanish' => 'Español', + 'turkish' => 'Türkçe', + 'ukrainian' => 'Українська' + ); + + + // ISO639 language code to language file mapping. + // See http://www.w3.org/WAI/ER/IG/ert/iso639.htm for language codes + + // If it's available 'language-country', but not general + // 'language' translation (eg. 'portuguese-br', but not 'portuguese') + // specify both 'la' => 'language-country' and 'la-co' => 'language-country'. + + $availableLanguages = array( + 'af' => 'afrikaans', + 'ar' => 'arabic', + 'ca' => 'catalan', + 'zh' => 'chinese-tr', + 'zh-cn' => 'chinese-sim', + 'utf8-zh-cn' => 'chinese-utf8-cn', + 'utf8-zh-tw' => 'chinese-utf8-tw', + 'cs' => 'czech', + 'da' => 'danish', + 'nl' => 'dutch', + 'en' => 'english', + 'fr' => 'french', + 'gl' => 'galician', + 'de' => 'german', + 'el' => 'greek', + 'he' => 'hebrew', + 'hu' => 'hungarian', + 'it' => 'italian', + 'ja' => 'japanese', + 'lt' => 'lithuanian', + 'mn' => 'mongol', + 'pl' => 'polish', + 'pt' => 'portuguese-br', + 'pt-br' => 'portuguese-br', + 'ro' => 'romanian', + 'ru' => 'russian', + 'sk' => 'slovak', + 'sv' => 'swedish', + 'es' => 'spanish', + 'tr' => 'turkish', + 'uk' => 'ukrainian' + ); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/turkish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/turkish.php new file mode 100644 index 00000000..83773890 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/turkish.php @@ -0,0 +1,641 @@ +<?php + + /** + * Turkish language file for phpPgAdmin. Use this as a basis + * for new translations. + * + * $Id: turkish.php,v 1.15 2007/04/24 11:42:07 soranzo Exp $ + */ + + // Language and character set + $lang['applang'] = 'Türkçe'; + $lang['applocale'] = 'tr-TR'; + $lang['applangdir'] = 'ltr'; + + // Basic strings + $lang['strintro'] = 'phpPgAdmin\'e hoşgeldiniz.'; + $lang['strppahome'] = 'phpPgAdmin Ana Sayfası'; + $lang['strpgsqlhome'] = 'PostgreSQL Ana Sayfası'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL Belgeleri (yerel)'; + $lang['strreportbug'] = 'Hata Bildirin'; + $lang['strviewfaq'] = 'Sıkça Sorulan Sorular'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Giriş'; + $lang['strloginfailed'] = 'Giriş Başarısız'; + $lang['strlogindisallowed'] = 'Güvenlik nedeniyle girişe izin verilmedi.'; + $lang['strserver'] = 'Sunucu'; + $lang['strservers'] = 'Sunucular'; + $lang['strintroduction'] = 'Giriş'; + $lang['strhost'] = 'Sunucu'; + $lang['strport'] = 'Port'; + $lang['strlogout'] = 'Çıkış'; + $lang['strowner'] = 'Sahibi'; + $lang['straction'] = 'Eylem'; + $lang['stractions'] = 'Eylemler'; + $lang['strname'] = 'Ad'; + $lang['strdefinition'] = 'Tanım'; + $lang['strproperties'] = 'Özellikler'; + $lang['strbrowse'] = 'Gözat'; + $lang['strdrop'] = 'Sil'; + $lang['strdropped'] = 'Silindi'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Null/Null değil'; + $lang['strprev'] = 'Önceki'; + $lang['strnext'] = 'Sonraki'; + $lang['strfirst'] = '<< İlk'; + $lang['strlast'] = 'Son >>'; + $lang['strfailed'] = 'Başarısız oldu.'; + $lang['strcreate'] = 'Yarat'; + $lang['strcreated'] = 'Yaratıldı'; + $lang['strcomment'] = 'Yorum'; + $lang['strlength'] = 'Uzunluk'; + $lang['strdefault'] = 'Ön tanımlı değer'; + $lang['stralter'] = 'Değiştir'; + $lang['strok'] = 'Tamam'; + $lang['strcancel'] = 'İptal Et'; + $lang['strsave'] = 'Kaydet'; + $lang['strreset'] = 'Temizle'; + $lang['strinsert'] = 'Ekle'; + $lang['strselect'] = 'Seç'; + $lang['strdelete'] = 'Sil'; + $lang['strupdate'] = 'Güncelle'; + $lang['strreferences'] = 'References'; + $lang['stryes'] = 'Evet'; + $lang['strno'] = 'Hayır'; + $lang['strtrue'] = 'TRUE'; + $lang['strfalse'] = 'FALSE'; + $lang['stredit'] = 'Düzenle'; + $lang['strcolumn'] = 'KolonF'; + $lang['strcolumns'] = 'Kolonlar'; + $lang['strrows'] = 'satır'; + $lang['strrowsaff'] = 'satır işlendi.'; + $lang['strobjects'] = 'nesne(ler)'; + $lang['strback'] = 'Geri'; + $lang['strqueryresults'] = 'Sorgu sonuçları'; + $lang['strshow'] = 'Göster'; + $lang['strempty'] = 'Boşalt'; + $lang['strlanguage'] = 'Dil'; + $lang['strencoding'] = 'Karakter kodlaması'; + $lang['strvalue'] = 'Değer'; + $lang['strunique'] = 'Tekil'; + $lang['strprimary'] = 'Birincil'; + $lang['strexport'] = 'Export'; + $lang['strimport'] = 'Import'; + $lang['strallowednulls'] = 'İzin verilen NULL karakterler'; + $lang['strbackslashn'] = '\N'; + $lang['strnull'] = 'Null'; + $lang['strnull'] = 'NULL (sözcük)'; + $lang['stremptystring'] = 'Boş metin/alan'; + $lang['strsql'] = 'SQL'; + $lang['stradmin'] = 'Yönetici'; + $lang['strvacuum'] = 'Vacuum'; + $lang['stranalyze'] = 'Analyze'; + $lang['strclusterindex'] = 'Cluster'; + $lang['strclustered'] = 'Cluster edildi mi?'; + $lang['strreindex'] = 'Reindex'; + $lang['strrun'] = 'Çalıştır'; + $lang['stradd'] = 'Ekle'; + $lang['strremove'] = 'Kaldır'; + $lang['strevent'] = 'Event'; + $lang['strwhere'] = 'Where'; + $lang['strinstead'] = 'Do Instead'; + $lang['strwhen'] = 'When'; + $lang['strformat'] = 'Format'; + $lang['strdata'] = 'Veri'; + $lang['strconfirm'] = 'Onayla'; + $lang['strexpression'] = 'İfade'; + $lang['strellipsis'] = '...'; + $lang['strseparator'] = ': '; + $lang['strexpand'] = 'Genişlet'; + $lang['strcollapse'] = 'Dar görünüm'; + $lang['strexplain'] = 'Explain'; + $lang['strexplainanalyze'] = 'Explain Analyze'; + $lang['strfind'] = 'Bul'; + $lang['stroptions'] = 'Seçenekler'; + $lang['strrefresh'] = 'Yenile'; + $lang['strdownload'] = 'İndir'; + $lang['strdownloadgzipped'] = 'gzip ile sıkıştırılmış halde indir'; + $lang['strinfo'] = 'Bilgi'; + $lang['stroids'] = 'OIDler'; + $lang['stradvanced'] = 'Gelişmiş'; + $lang['strvariables'] = 'Değişkenler'; + $lang['strprocess'] = 'Süreç'; + $lang['strprocesses'] = 'Süreçler'; + $lang['strsetting'] = 'Ayar'; + $lang['streditsql'] = 'SQL Düzenle'; + $lang['strruntime'] = 'Toplam çalışma süresi: %s ms'; + $lang['strpaginate'] = 'Sonuçları sayfalandır.'; + $lang['struploadscript'] = 'ya da bir SQL betiği yükleyin:'; + $lang['strstarttime'] = 'Başlangıç zamanı'; + $lang['strfile'] = 'Dosya'; + $lang['strfileimported'] = 'Dosya import edildi.'; + $lang['strtrycred'] = 'Giriş bilgilerini tüm sunucular için kullan'; +$lang['strexecute'] = 'Execute'; + + // Error handling + $lang['strnoframes'] = 'Bu uygulama en iyi olarak frame destekli bir tarayıcı ile kullanılabilir; ancak frameler ile kullanmak istemiyorsanız aşağıdaki linke tıklayabilirsiniz.'; + $lang['strnoframeslink'] = 'Frame olmadan kullan'; + $lang['strbadconfig'] = 'config.inc.php dosyaniz güncel değil. Bu dosyayı yeni config.inc.php-dist dosyasından yaratmanız gerekmektedir.'; + $lang['strnotloaded'] = 'PHP kurulumunuzda PostgreSQL desteği bulunamamıştır.'; + $lang['strpostgresqlversionnotsupported'] = 'Bu PostgreSQL sürümü desteklenmemektedir. Lütfen %s ya da üstü bir sürüme güncelleyiniz.'; + $lang['strbadschema'] = 'Geçersiz şema.'; + $lang['strbadencoding'] = 'İstemci dil kodlamasını ayarlamaya çalışırken bir hata oluştu.'; + $lang['strsqlerror'] = 'SQL hatası:'; + $lang['strinstatement'] = 'Üstteki hata, aşağıdaki ifade içinde oluştu:'; + $lang['strinvalidparam'] = 'Geçersiz betik parametreleri.'; + $lang['strnodata'] = 'Satır bulunamadı.'; + $lang['strnoobjects'] = 'Hiçbir nesne bulunamadı..'; + $lang['strrownotunique'] = 'Bu satır için hiçbir tekil belirtici bulunamadı.'; + $lang['strnouploads'] = 'Dosya yükleme özelliği etkin değil.'; + $lang['strimporterror'] = 'Import hatası.'; + $lang['strimporterror-fileformat'] = 'Import hatası: Dosya tipi otomatik olarak belirlenemedi.'; + $lang['strimporterrorline'] = '%s numaralı satırda import hatası.'; +$lang['strimporterrorline-badcolumnnum'] = 'Import error on line %s: Line does not possess the correct number of columns.'; +$lang['strimporterror-uploadedfile'] = 'Import error: File could not be uploaded to the server'; +$lang['strcannotdumponwindows'] = 'Dumping of complex table and schema names on Windows is not supported.'; + + // Tables + $lang['strtable'] = 'Tablo'; + $lang['strtables'] = 'Tablolar'; + $lang['strshowalltables'] = 'Tüm tabloları göster'; + $lang['strnotables'] = 'Veritabanında tablo bulunamadı.'; + $lang['strnotable'] = 'Veritabanında tablo bulunamadı.'; + $lang['strcreatetable'] = 'Yeni tablo yarat'; + $lang['strtablename'] = 'Tablo adı'; + $lang['strtableneedsname'] = 'Tablonuza bir ad vermeniz gerekmektedir.'; + $lang['strtableneedsfield'] = 'En az bir alan belirtmeniz gerekmektedir.'; + $lang['strtableneedscols'] = 'Geçerli miktarda kolon sayısı belirtmeniz gerekmektedir.'; + $lang['strtablecreated'] = 'Tablo yaratıldı.'; + $lang['strtablecreatedbad'] = 'Tablo yaratılamadı.'; + $lang['strconfdroptable'] = '"%s" tablosunu kaldırmak istediğinizden emin misiniz?'; + $lang['strtabledropped'] = 'Tablo kaldırıldı.'; + $lang['strtabledroppedbad'] = 'Tablo kaldırılamadı.'; + $lang['strconfemptytable'] = '"%s" tablosunu boşaltmak istediğinizden emin misiniz?'; + $lang['strtableemptied'] = 'Tablo boşaltıldı.'; + $lang['strtableemptiedbad'] = 'Tablo boşaltılamadı.'; + $lang['strinsertrow'] = 'Yeni kayıt gir'; + $lang['strrowinserted'] = 'Yeni kayıt girildi.'; + $lang['strrowinsertedbad'] = 'Yeni kayıt girme işlemi başarısız oldu.'; + $lang['strrowduplicate'] = 'Satır ekleme başarısız oldu, birbirinin aynı iki kayıt girilmek istendi.'; + $lang['streditrow'] = 'Kayıdın içeriğini değiştir.'; + $lang['strrowupdated'] = 'Kayıt güncellendi.'; + $lang['strrowupdatedbad'] = 'Kayıt güncelleme işleme başarısız oldu.'; + $lang['strdeleterow'] = 'Kaydı sil'; + $lang['strconfdeleterow'] = 'Bu kaydı silmek istediğinize emin misiniz?'; + $lang['strrowdeleted'] = 'Kayıt silindi.'; + $lang['strrowdeletedbad'] = 'Kayıt silinme işlemi başarısız oldu.'; + $lang['strinsertandrepeat'] = 'Ekle ve Tekrarla'; + $lang['strnumcols'] = 'Kolon sayısı'; + $lang['strcolneedsname'] = 'Kolon için bir ad vermelisiniz.'; + $lang['strselectallfields'] = 'Tüm alanları seç'; + $lang['strselectneedscol'] = 'En az bir kolon işaretlemelisiniz'; + $lang['strselectunary'] = 'Unary operatörlerin değeri olamaz.'; + $lang['straltercolumn'] = 'Kolonu değiştir (alter)'; + $lang['strcolumnaltered'] = 'Kolon değiştirildi (alter)'; + $lang['strcolumnalteredbad'] = 'Kolon değiştirilme işlemi başarısız oldu.'; + $lang['strconfdropcolumn'] = '"%s" kolonunu "%s" tablosundan silmek istediğinize emin misiniz?'; + $lang['strcolumndropped'] = 'Kolon silindi.'; + $lang['strcolumndroppedbad'] = 'Kolon silme işlemi başarısız oldu.'; + $lang['straddcolumn'] = 'Yeni kolon ekle'; + $lang['strcolumnadded'] = 'Kolon eklendi.'; + $lang['strcolumnaddedbad'] = 'Kolon eklenemedi.'; + $lang['strcascade'] = 'CASCADE'; + $lang['strtablealtered'] = 'Tablo alter edildi..'; + $lang['strtablealteredbad'] = 'Tablo alteration işlemi başarısız oldu.'; + $lang['strdataonly'] = 'Sadece veri'; + $lang['strstructureonly'] = 'Sadece yapı'; + $lang['strstructureanddata'] = 'Yapı ve veri'; + $lang['strtabbed'] = 'Tabbed'; + $lang['strauto'] = 'Otomatik'; + $lang['strconfvacuumtable'] = '"%s" tablosunu vakumlamak istediğiniz emin misiniz?'; + $lang['strestimatedrowcount'] = 'Yaklaşık satır sayısı'; + + // Users + $lang['struser'] = 'Kullanıcı'; + $lang['strusers'] = 'Kullanıcılar'; + $lang['strusername'] = 'Kullanıcı Adı'; + $lang['strpassword'] = 'Şifresi'; + $lang['strsuper'] = 'Superuser mı?'; + $lang['strcreatedb'] = 'Veritabanı yaratabilsin mi?'; + $lang['strexpires'] = 'Expires'; + $lang['strsessiondefaults'] = 'Oturum varsayılanları'; + $lang['strnousers'] = 'Hiçbir kullanıcı bulunamadı.'; + $lang['struserupdated'] = 'Kullanıcı güncellendi.'; + $lang['struserupdatedbad'] = 'Kullanıcı güncelleme işlemi başarısız oldu.'; + $lang['strshowallusers'] = 'Tüm kullanıcıları göster.'; + $lang['strcreateuser'] = 'Yeni kullanıcı yarat'; + $lang['struserneedsname'] = 'Kullanıcınız için bir ad vermelisiniz.'; + $lang['strusercreated'] = 'Kullanıcı yaratıldı.'; + $lang['strusercreatedbad'] = 'Kullanıcı yaratılma işlemi başarısız oldu.'; + $lang['strconfdropuser'] = '"%s" kullanıcısını silmek istediğinize emin misiniz?'; + $lang['struserdropped'] = 'Kullanıcı silindi.'; + $lang['struserdroppedbad'] = 'Kullanıcı silme işlemi başarısız oldu.'; + $lang['straccount'] = 'Hesap'; + $lang['strchangepassword'] = 'Şifre Değiştir'; + $lang['strpasswordchanged'] = 'Şifre değiştirildi.'; + $lang['strpasswordchangedbad'] = 'Şifre değiştirme başarısız oldu.'; + $lang['strpasswordshort'] = 'Şifre çok kısa.'; + $lang['strpasswordconfirm'] = 'Şifreler uyuşmadı.'; + + // Groups + $lang['strgroup'] = 'Grup'; + $lang['strgroups'] = 'Gruplar'; + $lang['strnogroup'] = 'Grup bulunamadı.'; + $lang['strnogroups'] = 'Grup bulunamadı.'; + $lang['strcreategroup'] = 'Yeni grup yarat'; + $lang['strshowallgroups'] = 'Tüm grupları göster'; + $lang['strgroupneedsname'] = 'Grup yaratabilmek için bir ad vermelisiniz.'; + $lang['strgroupcreated'] = 'Grup yaratıldı.'; + $lang['strgroupcreatedbad'] = 'Grup yaratma işlemi başarısız oldu.'; + $lang['strconfdropgroup'] = '"%s" grubunu silmek istediğinize emin misiniz?'; + $lang['strgroupdropped'] = 'Grup silindi.'; + $lang['strgroupdroppedbad'] = 'Grup silme işlemi başarısız oldu.'; + $lang['strmembers'] = 'Üyeler'; + $lang['straddmember'] = 'Üye ekle'; + $lang['strmemberadded'] = 'Üye eklendi.'; + $lang['strmemberaddedbad'] = 'Üye ekleme başarısız oldu.'; + $lang['strdropmember'] = 'Üyeyi kaldır'; + $lang['strconfdropmember'] = '"%s" üyesini "%s" grubundan silmek istediğinize emin misiniz?'; + $lang['strmemberdropped'] = 'Üye silindi.'; + $lang['strmemberdroppedbad'] = 'Üye silme başarısız oldu.'; + + // Privilges + $lang['strprivilege'] = 'İzni'; + $lang['strprivileges'] = 'İzinler'; + $lang['strnoprivileges'] = 'Bu nesnenin bir izni yoktur.'; + $lang['strgrant'] = 'İzni ver'; + $lang['strrevoke'] = 'İzni kaldır'; + $lang['strgranted'] = 'İzimler verildi.'; + $lang['strgrantfailed'] = 'İzinlerin grant işlemi başarısız oldu.'; + + $lang['strgrantbad'] = 'En az bir kullanıcı ya da grup ve en az bir izin belirtmelisiniz.'; + $lang['strgrantor'] = 'Grantor'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'Veritabanı'; + $lang['strdatabases'] = 'Veritabanları'; + $lang['strshowalldatabases'] = 'Tüm veritabanlarını göster'; + $lang['strnodatabase'] = 'Veritabanı bulunamadı.'; + $lang['strnodatabases'] = 'Veritabanı bulunamadı.'; + $lang['strcreatedatabase'] = 'Veritabanı yarat'; + $lang['strdatabasename'] = 'Veritabanı adı'; + $lang['strdatabaseneedsname'] = 'Veritabanınıza bir ad vermelisiniz.'; + $lang['strdatabasecreated'] = 'Veritabanı yaratıldı.'; + $lang['strdatabasecreatedbad'] = 'Veritabanı yaratılamadı.'; + $lang['strconfdropdatabase'] = '"%s" veritabanını kaldırmak istediğinize emin misiniz?'; + $lang['strdatabasedropped'] = 'Veritabanı kaldırıldı.'; + $lang['strdatabasedroppedbad'] = 'Veritabanı kaldırma başarısız oldu.'; + $lang['strentersql'] = 'Veritabanı üzerinde çalıştırılacak sorgu/sorguları aşağıya yazınız:'; + $lang['strsqlexecuted'] = 'SQL çalıştırıldı.'; + $lang['strvacuumgood'] = 'Vacuum tamamlandı.'; + $lang['strvacuumbad'] = 'Vacuum işlemi başarısız oldu.'; + $lang['stranalyzegood'] = 'Analyze işlemi tamamlandı.'; + $lang['stranalyzebad'] = 'Analyze işlemi başarısız oldu.'; + $lang['strreindexgood'] = 'Reindex tamamlandı.'; + $lang['strreindexbad'] = 'Reindex başarısız oldu.'; + $lang['strfull'] = 'Full'; + $lang['strfreeze'] = 'Freeze'; + $lang['strforce'] = 'Force'; + $lang['strsignalsent'] = 'Sinyal gönderildi.'; + $lang['strsignalsentbad'] = 'Sinyal gönderme işlemi başarısız oldu'; + $lang['strallobjects'] = 'Tüm nesneler'; + $lang['strdatabasealtered'] = 'Veritabanı değiştirildi.'; + $lang['strdatabasealteredbad'] = 'Veritabanı değiştirme başarısız oldu.'; + + // Views + $lang['strview'] = 'View'; + $lang['strviews'] = 'Viewlar'; + $lang['strshowallviews'] = 'Tüm viewları göster'; + $lang['strnoview'] = 'Bir view bulunamadı.'; + $lang['strnoviews'] = 'Bir view bulunamadı.'; + $lang['strcreateview'] = 'View yarat'; + $lang['strviewname'] = 'View adı'; + $lang['strviewneedsname'] = 'View için bir ad belirtmelisiniz.'; + $lang['strviewneedsdef'] = 'View için bir tanım belirtmelisiniz.'; + $lang['strviewneedsfields'] = 'View içinde görünmesini istediğiniz kolonları belirtmelisiniz.'; + $lang['strviewcreated'] = 'View yaratıldı.'; + $lang['strviewcreatedbad'] = 'View yaratma işlemi başarısız oldu.'; + $lang['strconfdropview'] = '"%s" viewini kaldırmak istediğinize emin misiniz?'; + $lang['strviewdropped'] = 'View kaldırıldı.'; + $lang['strviewdroppedbad'] = 'View kaldırma işlemi başarısız oldu.'; + $lang['strviewupdated'] = 'View güncellendi.'; + $lang['strviewupdatedbad'] = 'View güncelleme işlemi başarısız oldu.'; + $lang['strviewlink'] = 'Linking Keys'; + $lang['strviewconditions'] = 'Ek durumlar'; + $lang['strcreateviewwiz'] = 'Sihirbaz ile view yaratın'; + + // Sequences + $lang['strsequence'] = 'Sequence'; + $lang['strsequences'] = 'Sequences'; + $lang['strshowallsequences'] = 'Show all sequences'; + $lang['strnosequence'] = 'No sequence found.'; + $lang['strnosequences'] = 'No sequences found.'; + $lang['strcreatesequence'] = 'Create sequence'; + $lang['strlastvalue'] = 'Son değer'; + $lang['strincrementby'] = 'Arttırma değeri'; + $lang['strstartvalue'] = 'Başlangıç Değeri'; + $lang['strmaxvalue'] = 'Max Değer'; + $lang['strminvalue'] = 'Min Değer'; + $lang['strcachevalue'] = 'Cache Değeri'; + $lang['strlogcount'] = 'Log Count'; + $lang['striscycled'] = 'Is Cycled?'; + $lang['strsequenceneedsname'] = 'Sequence için bir ad belirtmelisiniz.'; + $lang['strsequencecreated'] = 'Sequence yaratıldı.'; + $lang['strsequencecreatedbad'] = 'Sequence yaratma işlemi başarısız oldu.'; + $lang['strconfdropsequence'] = '"%s" sequence ini kaldırmak istediğinize emin misiniz?'; + $lang['strsequencedropped'] = 'Sequence kaldırıldı.'; + $lang['strsequencedroppedbad'] = 'Sequence kaldırma işlemi başarısız oldu.'; + $lang['strsequencereset'] = 'Sequence sıfırlandı.'; + $lang['strsequenceresetbad'] = 'Sequence sıfırlama başarısız oldu.'; + + // Indexes + $lang['strindex'] = 'Index'; + $lang['strindexes'] = 'Indeksler'; + $lang['strindexname'] = 'Indeks adı'; + $lang['strshowallindexes'] = 'Tüm indeksleri göster'; + $lang['strnoindex'] = 'Hiçbir indeks bulunamadı.'; + $lang['strnoindexes'] = 'Hiçbir indeks bulunamadı.'; + $lang['strcreateindex'] = 'Indeks yarat'; + $lang['strtabname'] = 'Tab Adı'; + $lang['strcolumnname'] = 'Kolon adı'; + $lang['strindexneedsname'] = 'Indeksinize bir ad vermeniz gerekmektedir.'; + $lang['strindexneedscols'] = 'Geçerli kolın sayısı vermeniz gerekmektedir.'; + $lang['strindexcreated'] = 'Indeks yaratıldı.'; + $lang['strindexcreatedbad'] = 'Index creation failed.'; + $lang['strconfdropindex'] = '"%s" indeksini kaldırmak istediğinize emin misiniz?'; + $lang['strindexdropped'] = 'Indeks kaldırıldı.'; + $lang['strindexdroppedbad'] = 'Indeks kaldırılamadı.'; + $lang['strkeyname'] = 'Anahtar adı'; + $lang['struniquekey'] = 'Tekil (Unique) Anahtar'; + $lang['strprimarykey'] = 'Birincil Anahtar (Primary Key)'; + $lang['strindextype'] = 'Indeksin tipi'; + $lang['strtablecolumnlist'] = 'Tablodaki kolonlar'; + $lang['strindexcolumnlist'] = 'Indeksteki kolonlar'; + $lang['strconfcluster'] = '"%s" tablosunu cluster etmek istiyor musunuz?'; + $lang['strclusteredgood'] = 'Cluster tamamlandı.'; + $lang['strclusteredbad'] = 'Cluster başarısız oldu.'; + $lang['strcluster'] = 'Küme'; + + // Rules + $lang['strrules'] = 'Rules'; + $lang['strrule'] = 'Rule'; + $lang['strshowallrules'] = 'Show all Rules'; + $lang['strnorule'] = 'Rule bulunamadı.'; + $lang['strnorules'] = 'Rule bulunamadı.'; + $lang['strcreaterule'] = 'Rule yarat'; + $lang['strrulename'] = 'Rule adı'; + $lang['strruleneedsname'] = 'Rule için bir ad belirtmelisiniz.'; + $lang['strrulecreated'] = 'Rule yaratıldı.'; + $lang['strrulecreatedbad'] = 'Rule yaratma işlemi başarısız oldu.'; + $lang['strconfdroprule'] = '"%s" kuralını "%s" tablosundan silmek istediğinize emin misiniz?'; + $lang['strruledropped'] = 'Rule silindi'; + $lang['strruledroppedbad'] = 'Rule silinme işlemi başarısız oldu.'; + + // Constraints + $lang['strconstraint'] = 'Kısıtlama'; + $lang['strconstraints'] = 'Kısıtlamalar'; + $lang['strshowallconstraints'] = 'Tüm kısıtlamaları (constraint) göster.'; + $lang['strnoconstraints'] = 'Hiçbir kısıtlama (constraint) bulunamadı.'; + $lang['strcreateconstraint'] = 'Kısıtlama (Constraint) yarat'; + $lang['strconstraintcreated'] = 'Kısıtlama (Constraint) yaratıldı.'; + $lang['strconstraintcreatedbad'] = 'Kısıtlama (Constraint) yaratma işlemi başarısız oldu.'; + $lang['strconfdropconstraint'] = '"%s" üzerindeki "%s" kısıtlamasını (constraint) kaldırmak istiyor musunuz?'; + $lang['strconstraintdropped'] = 'Kısıtlama (Constraint) kaldırıldı'; + $lang['strconstraintdroppedbad'] = 'Kısıtlama (Constraint) işlemi başarısız oldu.'; + $lang['straddcheck'] = 'Kontrol (Check) ekle'; + $lang['strcheckneedsdefinition'] = 'Kontrol (Check) kısıtlaması (constraint) için bir tanım girilmelidir.'; + $lang['strcheckadded'] = 'Kontrol kısıtlaması (Check constraint) eklendi.'; + $lang['strcheckaddedbad'] = 'Kontrol kısıtlaması (Check constraint) ekleme işlemi başarısız oldu.'; + $lang['straddpk'] = 'Birincil Anahtar Ekle'; + $lang['strpkneedscols'] = 'Birincil anahtar için en az bir kolon gereklidir.'; + $lang['strpkadded'] = 'Birincil anahtar eklendi.'; + $lang['strpkaddedbad'] = 'Birincil anahtar eklenemedi.'; + $lang['stradduniq'] = 'Tekil (Unique) anahtar ekle'; + $lang['struniqneedscols'] = 'Tekil anahtar yaratmak için en az bir kolon gerekir.'; + $lang['struniqadded'] = 'Tekil anahtar eklendi.'; + $lang['struniqaddedbad'] = 'Tekil anahtar eklenemedi.'; + $lang['straddfk'] = 'İkincil anahtar ekle'; + $lang['strfkneedscols'] = 'İkincil anahtar yaratmak için en az bir kolon gerekir.'; + $lang['strfkneedstarget'] = 'İkincil anahtar hedef bir tablo gerektirir.'; + $lang['strfkadded'] = 'İkincil anahtar eklendi.'; + $lang['strfkaddedbad'] = 'İkincil anahtar eklenemedi.'; + $lang['strfktarget'] = 'Hedef tablo'; + + $lang['strfkcolumnlist'] = 'Anahtardaki kolonlar'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + // Functions + $lang['strfunction'] = 'Fonksiyon'; + $lang['strfunctions'] = 'Fonksiyonlar'; + $lang['strshowallfunctions'] = 'Tüm fonksiyonları göster'; + $lang['strnofunction'] = 'Fonksiyon bulunamadı.'; + $lang['strnofunctions'] = 'Fonksiyon bulunamadı.'; + $lang['strcreateplfunction'] = 'SQL/PL fonksiyonu yarat'; + $lang['strcreateinternalfunction'] = 'İç (internal) fonksiyon yarat'; + $lang['strcreatecfunction'] = 'C fonksiyonu yarat'; + $lang['strfunctionname'] = 'Fonksiyon adı'; + $lang['strreturns'] = 'Dönderilen değer'; + $lang['strarguments'] = 'Argümanlar'; + $lang['strproglanguage'] = 'Dil'; + $lang['strfunctionneedsname'] = 'Fonksiyona bir ad vermelisiniz.'; + $lang['strfunctionneedsdef'] = 'Fonksiyona bir tanım vermelisiniz.'; + $lang['strfunctioncreated'] = 'Fonksiyon yaratıldı.'; + $lang['strfunctioncreatedbad'] = 'Fonksiyon yaratma işlemi başarısız oldu.'; + $lang['strconfdropfunction'] = '"%s" fonksiyonunu kaldırmak istediğinize emin misiniz?'; + $lang['strfunctiondropped'] = 'Fonksiyon kaldırıldı.'; + $lang['strfunctiondroppedbad'] = 'Fonksiyon kaldırma işlemi başarısız oldu.'; + $lang['strfunctionupdated'] = 'Fonksiyon güncellendi.'; + $lang['strfunctionupdatedbad'] = 'Function güncelleme işlemi başarısız oldu.'; + $lang['strobjectfile'] = 'Nesne dosyası'; + $lang['strlinksymbol'] = 'Bağlantı sembolü'; + + // Triggers + $lang['strtrigger'] = 'Trigger'; + $lang['strtriggers'] = 'Triggerlar'; + $lang['strshowalltriggers'] = 'Tüm triggerları göster'; + $lang['strnotrigger'] = 'Trigger bulunamadı.'; + $lang['strnotriggers'] = 'Trigger bulunamadı.'; + $lang['strcreatetrigger'] = 'Yeni trigger yarat'; + $lang['strtriggerneedsname'] = 'Trigger için bir ad belirtmelisiniz.'; + $lang['strtriggerneedsfunc'] = 'Trigger için bir fonksiyon belirtmelisiniz.'; + $lang['strtriggercreated'] = 'Trigger yaratıldı.'; + $lang['strtriggercreatedbad'] = 'Trigger yaratılamadı.'; + $lang['strconfdroptrigger'] = '"%s" triggerini "%s" tablosundan kaldırmak istediğinize emin misiniz?'; + $lang['strtriggerdropped'] = 'Trigger silindi.'; + $lang['strtriggerdroppedbad'] = 'Trigger silinme işlemi başarısız oldu.'; + $lang['strtriggeraltered'] = 'Trigger değiştirildi.'; + $lang['strtriggeralteredbad'] = 'Trigger değiştirilme işlemi başarısız oldu.'; + $lang['strforeach'] = 'Her bir'; + + // Types + $lang['strtype'] = 'Veri tipi'; + $lang['strtypes'] = 'Veri tipleri'; + $lang['strshowalltypes'] = 'Tüm veri tiplerini göster'; + $lang['strnotype'] = 'Hiç veri tipi bulunamadı.'; + $lang['strnotypes'] = 'Hiç veri tipi bulunamadı.'; + $lang['strcreatetype'] = 'Yeni veri tipi yarat'; + $lang['strcreatecomptype'] = 'Karmaşık veri tipi yarat'; + $lang['strtypeneedsfield'] = 'En az bir alan belirtmelisiniz.'; + $lang['strtypeneedscols'] = 'Geçerli bir alan sayısı belirtmelisiniz.'; + $lang['strtypename'] = 'Veri tipi adı'; + $lang['strinputfn'] = 'Giriş (Input) fonksiyonu'; + $lang['stroutputfn'] = 'Çıkış (Output) fonksiyonu'; + $lang['strpassbyval'] = 'Passed by val?'; + $lang['stralignment'] = 'Alignment'; + $lang['strelement'] = 'Eleman'; + $lang['strdelimiter'] = 'Delimiter'; + $lang['strstorage'] = 'Storage'; + $lang['strfield'] = 'Alan'; + $lang['strnumfields'] = 'Alanların sayısı'; + + $lang['strtypeneedsname'] = 'Veri tipi için bir ad vermelisiniz.'; + $lang['strtypeneedslen'] = 'Veri tipiniz için bir uzunluk belirtmelisiniz.'; + $lang['strtypecreated'] = 'Veri tipi yaratıldı'; + $lang['strtypecreatedbad'] = 'Veri tipi yaratılamadı.'; + $lang['strconfdroptype'] = '"%s" veri tipini kaldırmak istediğinize emin misiniz?'; + $lang['strtypedropped'] = 'Veri tipi kaldırıldı.'; + $lang['strtypedroppedbad'] = 'Veri tipi kaldırılamadı.'; + $lang['strflavor'] = 'Flavor'; + $lang['strbasetype'] = 'Base'; + $lang['strcompositetype'] = 'Composite'; + $lang['strpseudotype'] = 'Pseudo'; + + // Schemas + $lang['strschema'] = 'Şema'; + $lang['strschemas'] = 'Şemalar'; + $lang['strshowallschemas'] = 'Tüm şemaları göster'; + $lang['strnoschema'] = 'Bir şema bulunamadı.'; + $lang['strnoschemas'] = 'Bir şema bulunamadı.'; + $lang['strcreateschema'] = 'Şema yarat'; + $lang['strschemaname'] = 'Şema adı'; + $lang['strschemaneedsname'] = 'Şema için bir ad belirtmelisiniz.'; + $lang['strschemacreated'] = 'Şema yaratıldı'; + $lang['strschemacreatedbad'] = 'Şema yaratma işlemi başarısız oldu'; + $lang['strconfdropschema'] = '"%s" şemasını kaldırmak istediğinize emin misiniz?'; + $lang['strschemadropped'] = 'Şema kaldırıldı.'; + $lang['strschemadroppedbad'] = 'Şema kaldırma işlemi başarısız oldu.'; + $lang['strschemaaltered'] = 'Schema değiştirildi.'; + $lang['strschemaalteredbad'] = 'Schema değiştirilme işlemi başarısız oldu.'; + $lang['strsearchpath'] = 'Şema arama yolu'; + + // Reports + $lang['strdomain'] = 'Domain'; + $lang['strdomains'] = 'Domainler'; + $lang['strshowalldomains'] = 'Tüm domainleri göster.'; + $lang['strnodomains'] = 'Hiçbir domain bulunamadı.'; + $lang['strcreatedomain'] = 'Domain yarat'; + $lang['strdomaindropped'] = 'Domain silindi.'; + $lang['strdomaindroppedbad'] = 'Domain silme başarısız oldu.'; + $lang['strconfdropdomain'] = '"%s" domain\'ini silmek istediğinize emin misiniz??'; + $lang['strdomainneedsname'] = 'Domain için bir ad vermelisiniz.'; + $lang['strdomaincreated'] = 'Domain yaratıldı.'; + $lang['strdomaincreatedbad'] = 'Domain yaratma başarısız oldu.'; + $lang['strdomainaltered'] = 'Domain alter edildi.'; + $lang['strdomainalteredbad'] = 'Domain alter işlemi başarısız oldu.'; + + $lang['stroperator'] = 'Operatör'; + $lang['stroperators'] = 'Operatörler'; + $lang['strshowalloperators'] = 'Tüm operatörleri göster'; + $lang['strnooperator'] = 'Operatör bulunamadı.'; + $lang['strnooperators'] = 'Operatör bulunamadı.'; + $lang['strcreateoperator'] = 'Operatör yaratıldı.'; + $lang['strleftarg'] = 'Sol Arg Tipi'; + $lang['strrightarg'] = 'Sağ Arg Tipi'; + $lang['strcommutator'] = 'Commutator'; + $lang['strnegator'] = 'Negator'; + $lang['strrestrict'] = 'Restrict'; + $lang['strjoin'] = 'Join'; + $lang['strhashes'] = 'Hashes'; + $lang['strmerges'] = 'Merges'; + $lang['strleftsort'] = 'Left sort'; + $lang['strrightsort'] = 'Right sort'; + $lang['strlessthan'] = 'küçüktür'; + $lang['strgreaterthan'] = 'büyüktür'; + $lang['stroperatorneedsname'] = 'Operatöre bir ad vermelisiniz.'; + $lang['stroperatorcreated'] = 'Operatör yaratıldı'; + $lang['stroperatorcreatedbad'] = 'Operatör yaratma işlemi başarısız oldu.'; + $lang['strconfdropoperator'] = '"%s" operatörünü kaldırmak istediğinize emin misiniz?'; + $lang['stroperatordropped'] = 'Operatör kaldırıldı.'; + $lang['stroperatordroppedbad'] = 'Operator kaldırma işlemi başarısız oldu.'; + + // Casts + $lang['strcasts'] = 'Casts'; + $lang['strnocasts'] = 'Hiç cast bulunamadı.'; + $lang['strsourcetype'] = 'Kaynak tip'; + $lang['strtargettype'] = 'Hedef tip'; + $lang['strimplicit'] = 'Implicit'; + $lang['strinassignment'] = 'In assignment'; + $lang['strbinarycompat'] = '(Binary uyumlu)'; + + // Conversions + $lang['strconversions'] = 'Dönüşümleri'; + $lang['strnoconversions'] = 'Hiç dönüşüm bulunamadı.'; + $lang['strsourceencoding'] = 'Kaynak dil kodlaması'; + $lang['strtargetencoding'] = 'Hedef dil kodlaması'; + + // Languages + $lang['strlanguages'] = 'Diller'; + $lang['strnolanguages'] = 'Hiç bir dil bulunamadı.'; + $lang['strtrusted'] = 'Güvenilir'; + + // Info + $lang['strnoinfo'] = 'Hiç bir bilgi yok.'; + $lang['strreferringtables'] = 'Referring tables'; + $lang['strparenttables'] = 'Parent tablolar'; + $lang['strchildtables'] = 'Child tablolar'; + + // Aggregates + $lang['straggregates'] = 'Aggregate'; + $lang['strnoaggregates'] = 'Hiç aggregate bulunamadı.'; + $lang['stralltypes'] = '(Tüm veri tipleri)'; + $lang['stropclasses'] = 'Op sınıfları'; + $lang['strnoopclasses'] = 'Hiç operatör sınıfı bulunamadı.'; + $lang['straccessmethod'] = 'Erişim Yöntemi'; + $lang['strrowperf'] = 'Satır Başarımı'; + $lang['strioperf'] = 'I/O Başarımı'; + $lang['stridxrowperf'] = 'Index Satır Başarımı'; + $lang['stridxioperf'] = 'Index I/O Başarımı'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Sequential'; + $lang['strscan'] = 'Scan'; + $lang['strread'] = 'Read'; + $lang['strfetch'] = 'Fetch'; + $lang['strheap'] = 'Heap'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST Index'; + $lang['strcache'] = 'Cache'; + $lang['strdisk'] = 'Disk'; + $lang['strrows2'] = 'Rows'; + + // Tablespaces + $lang['strtablespace'] = 'Tablespace'; + $lang['strtablespaces'] = 'Tablespaceler'; + $lang['strshowalltablespaces'] = 'Tüm tablespaceleri göster'; + $lang['strnotablespaces'] = 'Hiç tablespace bulunamadı.'; + $lang['strcreatetablespace'] = 'Tablespace yarat'; + $lang['strlocation'] = 'Yer'; + $lang['strtablespaceneedsname'] = 'Tablespace\'e bir ad vermelisiniz.'; + $lang['strtablespaceneedsloc'] = 'Tablespace\'in yaratılacağı dizini belirtmelisiniz'; + $lang['strtablespacecreated'] = 'Tablespace yaratıldı.'; + $lang['strtablespacecreatedbad'] = 'Tablespace yaratılamadı.'; + $lang['strconfdroptablespace'] = '"%s" adlı tablespace\'i kaldırmak istediğinize emin misiniz?'; + $lang['strtablespacedropped'] = 'Tablespace kaldırıldı.'; + $lang['strtablespacedroppedbad'] = 'Tablespace kaldırılamadı.'; + $lang['strtablespacealtered'] = 'Tablespace değiştirildi.'; + $lang['strtablespacealteredbad'] = 'Tablespace değiştirilemedi.'; + + // Miscellaneous + $lang['strtopbar'] = '%s, %s:%s üzerinde çalışıyor-- "%s" kullanıcısı ile sisteme giriş yaptınız.'; + $lang['strtimefmt'] = 'jS M, Y g:iA'; + $lang['strhelp'] = 'Yardım'; + $lang['strhelpicon'] = '?'; + $lang['strlogintitle'] = '%s\'e giriş yap'; + $lang['strlogoutmsg'] = '%s\'den çıkıldı.'; + $lang['strloading'] = 'Yükleniyor...'; + $lang['strerrorloading'] = 'Yükleme hatası'; + $lang['strclicktoreload'] = 'Yeniden yüklemek için tıklayın.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/ukrainian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/ukrainian.php new file mode 100644 index 00000000..b4a6d361 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/lang/ukrainian.php @@ -0,0 +1,584 @@ +<?php + + /** + * Ukrainian KOI8-U language file for phpPgAdmin. + * @maintainer Alex Rootoff [rootoff{AT}pisem.net] + */ + + // Language and character set + $lang['applang'] = 'Українська'; + $lang['applocale'] = 'uk-UA'; + $lang['applangdir'] = 'ltr'; + + // Welcome + $lang['strintro'] = 'Вітаємо вас в phpPgAdmin.'; + $lang['strppahome'] = 'phpPgAdmin - домашня сторінка'; + $lang['strpgsqlhome'] = 'PostgreSQL - домашня сторінка'; + $lang['strpgsqlhome_url'] = 'http://www.postgresql.org/'; + $lang['strlocaldocs'] = 'PostgreSQL - документація (локальна)'; + $lang['strreportbug'] = 'Звіт про помилки'; + $lang['strviewfaq'] = 'Перегляд онлайн FAQ'; + $lang['strviewfaq_url'] = 'http://phppgadmin.sourceforge.net/doku.php?id=faq'; + + // Basic strings + $lang['strlogin'] = 'Логін'; + $lang['strloginfailed'] = 'Неправильний пароль'; + $lang['strlogindisallowed'] = 'Логін недопустимий із міркувань безпеки'; + $lang['strserver'] = 'Сервер'; + $lang['strlogout'] = 'Перереєстрація'; + $lang['strowner'] = 'Користувач'; + $lang['straction'] = 'Дія'; + $lang['stractions'] = 'Дії'; + $lang['strname'] = 'Ім"я'; + $lang['strdefinition'] = 'Визначення'; + $lang['strproperties'] = 'Властивості'; + $lang['strbrowse'] = 'Переглянути'; + $lang['strdrop'] = 'Видалити'; + $lang['strdropped'] = 'Видалено'; + $lang['strnull'] = 'Null'; + $lang['strnotnull'] = 'Not Null'; + $lang['strprev'] = '< Поперед.'; + $lang['strnext'] = 'Наст. >'; + $lang['strfirst'] = '<< Перший'; + $lang['strlast'] = 'Остан. >>'; + $lang['strfailed'] = 'Перервано'; + $lang['strcreate'] = 'Створити'; + $lang['strcreated'] = 'Створено'; + $lang['strcomment'] = 'Коментар'; + $lang['strlength'] = 'Довжина'; + $lang['strdefault'] = 'По замовчуванню'; + $lang['stralter'] = 'Змінити'; + $lang['strok'] = 'Гаразд'; + $lang['strcancel'] = 'Відмінити'; + $lang['strsave'] = 'Зберегти'; + $lang['strreset'] = 'Скинути'; + $lang['strinsert'] = 'Вставити'; + $lang['strselect'] = 'Вибрати'; + $lang['strdelete'] = 'Видалити'; + $lang['strupdate'] = 'Оновити'; + $lang['strreferences'] = 'Посилання'; + $lang['stryes'] = 'Так'; + $lang['strno'] = 'Ні'; + $lang['strtrue'] = 'Істина'; + $lang['strfalse'] = 'Фальш'; + $lang['stredit'] = 'Редагувати'; + $lang['strcolumns'] = 'Атрибути'; + $lang['strrows'] = 'запис(и/ів)'; + $lang['strrowsaff'] = 'запис(и/ів) опрацьовано.'; + $lang['strobjects'] = 'об"єкт(и/ів)'; + $lang['strexample'] = 'і т.д.'; + $lang['strback'] = 'Назад'; + $lang['strqueryresults'] = 'Результати запиту'; + $lang['strshow'] = 'Показати'; + $lang['strempty'] = 'Очистити'; + $lang['strlanguage'] = 'Мова'; + $lang['strencoding'] = 'Кодування'; + $lang['strvalue'] = 'Значення'; + $lang['strunique'] = 'Унікальний'; + $lang['strprimary'] = 'Первинний'; + $lang['strexport'] = 'Експорт'; + $lang['strimport'] = 'Імпорт'; + $lang['strsql'] = 'SQL'; + $lang['strgo'] = 'Виконати'; + $lang['stradmin'] = 'Управління'; + $lang['strvacuum'] = 'Перебудувати'; + $lang['stranalyze'] = 'Аналізувати'; + $lang['strclusterindex'] = 'Кластеризувати'; + $lang['strclustered'] = 'Кластеризовано?'; + $lang['strreindex'] = 'Перебудувати індекс'; + $lang['strrun'] = 'Виконати'; + $lang['stradd'] = 'Додати'; + $lang['strevent'] = 'Подія'; + $lang['strwhere'] = 'Де'; + $lang['strinstead'] = 'Робити замість'; + $lang['strwhen'] = 'Коли'; + $lang['strformat'] = 'Формат'; + $lang['strdata'] = 'Данні'; + $lang['strconfirm'] = 'Підтвердити'; + $lang['strexpression'] = 'Вираз'; + $lang['strellipsis'] = '...'; + $lang['strexpand'] = 'Разширити'; + $lang['strcollapse'] = 'Згорнути'; + $lang['strexplain'] = 'Пояснити'; + $lang['strexplainanalyze'] = 'Пояснити аналіз'; + $lang['strfind'] = 'Знайти'; + $lang['stroptions'] = 'Опції'; + $lang['strrefresh'] = 'Оновити'; + $lang['strdownload'] = 'Завантажити'; + $lang['strdownloadgzipped'] = 'Завантажити архів gzip'; + $lang['strinfo'] = 'Відомості'; + $lang['stroids'] = 'OIDs'; + $lang['stradvanced'] = 'Додатково'; + $lang['strvariables'] = 'Змінні'; + $lang['strprocess'] = 'Процес'; + $lang['strprocesses'] = 'Процеси'; + $lang['strsetting'] = 'Налаштування'; + $lang['streditsql'] = 'Редагувати SQL'; + $lang['strruntime'] = 'Час виконання: %s мсек'; + $lang['strpaginate'] = 'Нумерувати сторінки з результатами'; + $lang['struploadscript'] = 'чи завантажити SQL-скрипт:'; + $lang['strstarttime'] = 'Час початку'; + $lang['strfile'] = 'Файл'; + $lang['strfileimported'] = 'Файл імпортовано.'; + + // Error handling + $lang['strbadconfig'] = 'Ваш config.inc.php застарів. Вам необхідно оновити його із config.inc.php-dist.'; + $lang['strnotloaded'] = 'Ваша інсталяція PHP не підтримує PostgreSQL. Вам необхідно перекомпілювати PHP, використавши параметр --with-pgsql для configure.'; + $lang['strbadschema'] = 'Виявлено неправильну схему.'; + $lang['strbadencoding'] = 'Неможливо встановити Ваше кодування в базі даних.'; + $lang['strsqlerror'] = 'Помилка SQL:'; + $lang['strinstatement'] = 'В операторі:'; + $lang['strinvalidparam'] = 'Неправильний параметр скрипта.'; + $lang['strnodata'] = 'Даних не виявлено.'; + $lang['strnoobjects'] = 'Об"єктів не виявлено.'; + $lang['strrownotunique'] = 'Немає унікального ідентифікатора для цього запису.'; + $lang['strnouploads'] = 'Завантаження файла неможливе.'; + $lang['strimporterror'] = 'Помилка при імпортуванні.'; + $lang['strimporterrorline'] = 'Помилка каналу при імпортові %s.'; + + // Tables + $lang['strtable'] = 'Таблиця'; + $lang['strtables'] = 'Таблиці'; + $lang['strshowalltables'] = 'Показати всі таблиці'; + $lang['strnotables'] = 'Таблиць не виявлено.'; + $lang['strnotable'] = ' Таблицю не знайдено.'; + $lang['strcreatetable'] = 'Створити таблицю'; + $lang['strtablename'] = 'Ім"я таблиці'; + $lang['strtableneedsname'] = 'Вам необхідно визначити ім"я таблиці.'; + $lang['strtableneedsfield'] = 'Вам необхідно визначити щонайменше одне поле.'; + $lang['strtableneedscols'] = 'Вам необхідно вказати допустиме число атрибутів.'; + $lang['strtablecreated'] = 'Таблицю створено.'; + $lang['strtablecreatedbad'] = 'Створення таблиці перервано.'; + $lang['strconfdroptable'] = 'Ви впевнені, що бажаєте видалити таблицю "%s"?'; + $lang['strtabledropped'] = 'Таблицю видалено.'; + $lang['strtabledroppedbad'] = 'Видалення таблиці перервано.'; + $lang['strconfemptytable'] = 'Ви впевнені, що бажаєте очистити таблицю "%s"?'; + $lang['strtableemptied'] = 'Таблицю очищено.'; + $lang['strtableemptiedbad'] = 'Очищення таблиці перервано.'; + $lang['strinsertrow'] = 'Додати запис'; + $lang['strrowinserted'] = 'Запис додано.'; + $lang['strrowinsertedbad'] = 'Додавання запису перервано.'; + $lang['streditrow'] = 'Редагувати запис'; + $lang['strrowupdated'] = 'Запис оновлено.'; + $lang['strrowupdatedbad'] = 'Оновлення запису перервано.'; + $lang['strdeleterow'] = 'Видалити запис'; + $lang['strconfdeleterow'] = 'Ви впевнені, що бажаєте видалити запис?'; + $lang['strrowdeleted'] = 'Запис видалено.'; + $lang['strrowdeletedbad'] = 'Видалення запису перервано.'; + $lang['strsaveandrepeat'] = 'Вставити і повторити'; + $lang['strfield'] = 'Поле'; + $lang['strfields'] = 'Поля'; + $lang['strnumfields'] = 'К-ть полів'; + $lang['strfieldneedsname'] = 'Вам необхідно назвати поле'; + $lang['strselectallfields'] = 'Вибрати всі поля'; + $lang['strselectneedscol'] = 'Вам необхідно вказати щонайменше один атрибут'; + $lang['strselectunary'] = 'Унарний оператор не может мати величину.'; + $lang['straltercolumn'] = 'Змінити атрибут'; + $lang['strcolumnaltered'] = 'Атрибут змінено.'; + $lang['strcolumnalteredbad'] = 'Зміну атрибута перервано.'; + $lang['strconfdropcolumn'] = 'Ви впевнені, що бажаєте видалити атрибут "%s" таблиці "%s"?'; + $lang['strcolumndropped'] = 'Атрибут видалено.'; + $lang['strcolumndroppedbad'] = 'Видалення атрибута перервано.'; + $lang['straddcolumn'] = 'Додати атрибут'; + $lang['strcolumnadded'] = 'Атрибут додано.'; + $lang['strcolumnaddedbad'] = 'Додавання атрибута перервано.'; + $lang['strdataonly'] = 'Тільки дані'; + $lang['strcascade'] = 'Каскадом'; + $lang['strtablealtered'] = 'Таблицю змінено.'; + $lang['strtablealteredbad'] = 'Зміну таблиці перервано.'; + $lang['strdataonly'] = 'Лише дані'; + $lang['strstructureonly'] = 'Лише структуру'; + $lang['strstructureanddata'] = 'Структуру і дані'; + $lang['strtabbed'] = 'Через табуляцію'; + $lang['strauto'] = 'Авто'; + + // Users + $lang['struser'] = 'Користувач'; + $lang['strusers'] = 'Користувачі'; + $lang['strusername'] = 'Ім"я користувача'; + $lang['strpassword'] = 'Пароль'; + $lang['strsuper'] = 'Суперкористувач?'; + $lang['strcreatedb'] = 'Створити базу даних?'; + $lang['strexpires'] = 'Термін дії'; + $lang['strsessiondefaults'] = 'Опції сеансу за замовчуванням'; + $lang['strnousers'] = 'Немає таких користувачів.'; + $lang['struserupdated'] = 'Користувача оновлено.'; + $lang['struserupdatedbad'] = 'Оновлення користувача перервано.'; + $lang['strshowallusers'] = 'Показати всіх користувачів'; + $lang['strcreateuser'] = 'Створити користувача'; + $lang['struserneedsname'] = 'Ви повинні ввести ім"я користувача.'; + $lang['strusercreated'] = 'Користувача створено.'; + $lang['strusercreatedbad'] = 'Створення користувача перервано.'; + $lang['strconfdropuser'] = 'Ви впевнені, що бажаєте видалити користувача "%s"?'; + $lang['struserdropped'] = 'Користувача видалено.'; + $lang['struserdroppedbad'] = 'Видалення користувача перервано.'; + $lang['straccount'] = 'Обліковий запис'; + $lang['strchangepassword'] = 'Змінити пароль'; + $lang['strpasswordchanged'] = 'Пароль змінено.'; + $lang['strpasswordchangedbad'] = 'Зміну пароля перервано.'; + $lang['strpasswordshort'] = 'Пароль закороткий.'; + $lang['strpasswordconfirm'] = 'Пароль не відповідає підтвержденню.'; + + // Groups + $lang['strgroup'] = 'Група'; + $lang['strgroups'] = 'Групи'; + $lang['strnogroup'] = 'Групу не виявлено.'; + $lang['strnogroups'] = 'Жодної групи не виявлено.'; + $lang['strcreategroup'] = 'Створити групу'; + $lang['strshowallgroups'] = 'Показати всі групи'; + $lang['strgroupneedsname'] = 'Вам необхідно вказати назву групи.'; + $lang['strgroupcreated'] = 'Групу створено.'; + $lang['strgroupcreatedbad'] = 'Створення групи перервано.'; + $lang['strconfdropgroup'] = 'Ви впевненні, що бажаєте видалити групу "%s"?'; + $lang['strgroupdropped'] = 'Групу видалено.'; + $lang['strgroupdroppedbad'] = 'Видалення групи перервано.'; + $lang['strmembers'] = 'Учасників'; + $lang['straddmember'] = 'Додати учасника'; + $lang['strmemberadded'] = 'Учасника додано.'; + $lang['strmemberaddedbad'] = 'Додавання учасника перервано.'; + $lang['strdropmember'] = 'Видалити учасника'; + $lang['strconfdropmember'] = 'Ви впевненні, що бажаєте видалити учасника "%s" із групи "%s"?'; + $lang['strmemberdropped'] = 'Учасника видалено.'; + $lang['strmemberdroppedbad'] = 'Видалення учасника перервано.'; + + // Privileges + $lang['strprivilege'] = 'Привілей'; + $lang['strprivileges'] = 'Привілеї'; + $lang['strnoprivileges'] = 'Об"єкт не володіє привілеями.'; + $lang['strgrant'] = 'Підсилити'; + $lang['strrevoke'] = 'Послабити'; + $lang['strgranted'] = 'Привілеї змінено.'; + $lang['strgrantfailed'] = 'Зміну привілеїв перервано.'; + $lang['strgrantbad'] = 'Вам необхідно вказати щонайменше одного користувача чи групу і щонайменше один привілей.'; + $lang['stralterprivs'] = 'Змінити привілеї'; + $lang['strgrantor'] = 'Донор'; + $lang['strasterisk'] = '*'; + + // Databases + $lang['strdatabase'] = 'База даних'; + $lang['strdatabases'] = 'Бази даних'; + $lang['strshowalldatabases'] = 'Показати всі бази даних'; + $lang['strnodatabase'] = 'Базу даних не виявлено.'; + $lang['strnodatabases'] = 'Жодної бази даних не виявлено.'; + $lang['strcreatedatabase'] = 'Створити базу даних'; + $lang['strdatabasename'] = 'Ім"я бази даних'; + $lang['strdatabaseneedsname'] = 'Вам необхідно присвоїти ім"я Вашій базі даних.'; + $lang['strdatabasecreated'] = 'Базу даних створено.'; + $lang['strdatabasecreatedbad'] = 'Створення бази даних перервано.'; + $lang['strconfdropdatabase'] = 'Ви впевненні, що бажаєте видалити базу даних "%s"?'; + $lang['strdatabasedropped'] = ' Базу даних видалено.'; + $lang['strdatabasedroppedbad'] = 'Видалення бази даних перервано.'; + $lang['strentersql'] = 'Введіть SQL-запит:'; + $lang['strsqlexecuted'] = 'SQL-запит виконано.'; + $lang['strvacuumgood'] = 'Операцію перебудови завершено.'; + $lang['strvacuumbad'] = 'Операцію перебудови перервано.'; + $lang['stranalyzegood'] = ' Операцію аналізу завершено.'; + $lang['stranalyzebad'] = ' Операцію аналізу завершено.'; + $lang['strreindexgood'] = 'Переіндексацію завершено.'; + $lang['strreindexbad'] = 'Переіндексацію перервано.'; + $lang['strfull'] = 'Повністю'; + $lang['strfreeze'] = 'Заморозити'; + $lang['strforce'] = 'Примусово'; + + // Views + $lang['strview'] = 'Показ'; + $lang['strviews'] = 'Покази'; + $lang['strshowallviews'] = 'Представити всі покази'; + $lang['strnoview'] = 'Показу не виявлено.'; + $lang['strnoviews'] = 'Жодного показу не виявлено.'; + $lang['strcreateview'] = 'Створити показ'; + $lang['strviewname'] = 'Ім"я показу'; + $lang['strviewneedsname'] = 'Вам необхідно вказати ім"я показу.'; + $lang['strviewneedsdef'] = 'Вам необхідно визначити атрибуты показу.'; + $lang['strviewneedsfields'] = 'Вам необхідно визначити атрибуты для вибірки в ваш показ.'; + $lang['strviewcreated'] = 'Показ створено.'; + $lang['strviewcreatedbad'] = 'Створення показу перервано.'; + $lang['strconfdropview'] = 'Ви впевнені, що бажаєте видалити показ "%s"?'; + $lang['strviewdropped'] = 'Показ видалено.'; + $lang['strviewdroppedbad'] = 'Видалення показу перервано.'; + $lang['strviewupdated'] = 'Показ оновлено.'; + $lang['strviewupdatedbad'] = 'Оновлення показу перервано.'; + $lang['strviewlink'] = 'Пов"язані ключі'; + $lang['strviewconditions'] = 'Додаткові умови'; + $lang['strcreateviewwiz'] = 'Створити показ, скориставшись майстром'; + + // Sequences + $lang['strsequence'] = 'Послідовність'; + $lang['strsequences'] = ' Послідовності'; + $lang['strshowallsequences'] = 'Показати всі послідовності'; + $lang['strnosequence'] = 'Послідовність не виявлено.'; + $lang['strnosequences'] = 'Жодної послідовності не виявлено.'; + $lang['strcreatesequence'] = 'Створити послідовність'; + $lang['strlastvalue'] = 'Останнє значення'; + $lang['strincrementby'] = 'Збільшення на'; + $lang['strstartvalue'] = 'Початкове значення'; + $lang['strmaxvalue'] = 'Макс. значення'; + $lang['strminvalue'] = 'Мін. значення'; + $lang['strcachevalue'] = 'Розмір кеша'; + $lang['strlogcount'] = 'Log Count'; + $lang['striscycled'] = 'Зациклити?'; + $lang['strsequenceneedsname'] = 'Вам необхідно вказати ім"я послідовності.'; + $lang['strsequencecreated'] = 'Послідовність створено.'; + $lang['strsequencecreatedbad'] = 'Створення послідовності перервано.'; + $lang['strconfdropsequence'] = 'Ви впевнені, що бажаєте видалити послідовність "%s"?'; + $lang['strsequencedropped'] = 'Послідовність видалено.'; + $lang['strsequencedroppedbad'] = 'Видалення послідовності перервано.'; + $lang['strsequencereset'] = 'Послідовність скинуто.'; + $lang['strsequenceresetbad'] = 'Скинення послідовності перервано.'; + + // Indexes + $lang['strindex'] = 'Індекс'; + $lang['strindexes'] = 'Індекси'; + $lang['strindexname'] = 'Ім"я індекса'; + $lang['strshowallindexes'] = 'Показати всі індекси'; + $lang['strnoindex'] = 'Індекс не виявлено.'; + $lang['strnoindexes'] = 'Жодного індекса не знайдено.'; + $lang['strcreateindex'] = 'Створити індекс'; + $lang['strtabname'] = 'Ім"я таблиці'; + $lang['strcolumnname'] = 'Ім"я атрибута'; + $lang['strindexneedsname'] = 'Вам необхідно вказати ім"я індекса'; + $lang['strindexneedscols'] = 'Вам необхідно вказати можливу кількість атрибутів.'; + $lang['strindexcreated'] = 'Індекс створено.'; + $lang['strindexcreatedbad'] = 'Створення індекса перервано.'; + $lang['strconfdropindex'] = 'Ви впевнені, що бажаєте видалити індекс "%s"?'; + $lang['strindexdropped'] = 'Індекс видалено.'; + $lang['strindexdroppedbad'] = 'Видалення індекса перервано.'; + $lang['strkeyname'] = 'Ім"я ключа'; + $lang['struniquekey'] = 'Унікальний ключ'; + $lang['strprimarykey'] = 'Первинний ключ'; + $lang['strindextype'] = 'Вид індекса'; + $lang['strindexname'] = 'Ім"я індекса'; + $lang['strtablecolumnlist'] = 'Атрибутів в таблиці'; + $lang['strindexcolumnlist'] = 'Атрибутів в індексі'; + $lang['strconfcluster'] = 'Ви впевнені, що бажаєте кластеризувати "%s"?'; + $lang['strclusteredgood'] = 'Кластеризацію завершено.'; + $lang['strclusteredbad'] = 'Кластеризацію перервано.'; + + // Rules + $lang['strrules'] = 'Правила'; + $lang['strrule'] = 'Правило'; + $lang['strshowallrules'] = 'Показати всі правила'; + $lang['strnorule'] = 'Правило не виявлено.'; + $lang['strnorules'] = 'Жодного правила не виявлено.'; + $lang['strcreaterule'] = 'Створити правило'; + $lang['strrulename'] = 'Ім"я правила'; + $lang['strruleneedsname'] = 'Вам необхідно вказати ім"я правила.'; + $lang['strrulecreated'] = 'Правило створено.'; + $lang['strrulecreatedbad'] = 'Створення правила перервано.'; + $lang['strconfdroprule'] = 'Ви впевнені, що бажаєте видалити правило "%s" з "%s"?'; + $lang['strruledropped'] = 'Правило видалено.'; + $lang['strruledroppedbad'] = 'Видалення правила перервано.'; + + // Constraints + $lang['strconstraints'] = 'Обмеження'; + $lang['strshowallconstraints'] = 'Показати всі обмеження'; + $lang['strnoconstraints'] = 'Жодного обмеження не виявлено.'; + $lang['strcreateconstraint'] = 'Створити обмеження'; + $lang['strconstraintcreated'] = 'Обмеження створено.'; + $lang['strconstraintcreatedbad'] = 'Створення обмеження перервано.'; + $lang['strconfdropconstraint'] = 'Ви впевнені, що бажаєте видалити обмеження "%s" з "%s"?'; + $lang['strconstraintdropped'] = 'Обмеження видалено.'; + $lang['strconstraintdroppedbad'] = 'Видалення обмеження перервано.'; + $lang['straddcheck'] = 'Додати перевірку'; + $lang['strcheckneedsdefinition'] = 'Обмеження перевірки потребує визначення.'; + $lang['strcheckadded'] = 'Обмеження перевірки додано.'; + $lang['strcheckaddedbad'] = 'Додавання обмеження перевірки перервано.'; + $lang['straddpk'] = 'Додати первинний ключ'; + $lang['strpkneedscols'] = 'Первинний ключ повинен містити хочя б один атрибут.'; + $lang['strpkadded'] = 'Первинний ключ додано.'; + $lang['strpkaddedbad'] = 'Додавання первинного ключа перервано.'; + $lang['stradduniq'] = 'Додати унікальний ключ'; + $lang['struniqneedscols'] = 'Унікальний ключ повинен містити хоча б один атрибут.'; + $lang['struniqadded'] = 'Унікальний ключ додано.'; + $lang['struniqaddedbad'] = 'Додавання унікального ключа перервано.'; + $lang['straddfk'] = 'Додати зовнішній ключ'; + $lang['strfkneedscols'] = 'Зовнішній ключ повинен містити хоча б один атрибут.'; + $lang['strfkneedstarget'] = 'Зовнішньому ключеві необхідно вказати цільову таблицю.'; + $lang['strfkadded'] = 'Зовнішній ключ додано.'; + $lang['strfkaddedbad'] = 'Додавання зовнішнього ключа перервано.'; + $lang['strfktarget'] = 'Цільова таблиця'; + $lang['strfkcolumnlist'] = 'Атрибуты в ключі'; + $lang['strondelete'] = 'ON DELETE'; + $lang['stronupdate'] = 'ON UPDATE'; + + // Functions + $lang['strfunction'] = 'Функція'; + $lang['strfunctions'] = ' Функції'; + $lang['strshowallfunctions'] = 'Показати всі функції'; + $lang['strnofunction'] = 'Функцію не виявлено.'; + $lang['strnofunctions'] = 'Жодної функції не виявлено.'; + $lang['strcreatefunction'] = 'Створити функцію'; + $lang['strfunctionname'] = 'Ім"я функції'; + $lang['strreturns'] = 'Результат, що повертає'; + $lang['strarguments'] = 'Аргументи'; + $lang['strproglanguage'] = 'Мова програмування'; + $lang['strproglanguage'] = 'Мова'; + $lang['strfunctionneedsname'] = 'Вам необхідно вказати ім"я функції.'; + $lang['strfunctionneedsdef'] = 'Вам необхідно визначити функцію.'; + $lang['strfunctioncreated'] = 'Функцію створено.'; + $lang['strfunctioncreatedbad'] = 'Створення функції перервано.'; + $lang['strconfdropfunction'] = 'Ви впевнені, що бажаєте видалити функцію "%s"?'; + $lang['strfunctiondropped'] = 'Функцію видалено.'; + $lang['strfunctiondroppedbad'] = 'Видалення функції перервано.'; + $lang['strfunctionupdated'] = 'Функцію оновлено.'; + $lang['strfunctionupdatedbad'] = 'Оновлення функції перервано.'; + + // Triggers + $lang['strtrigger'] = 'Трігер'; + $lang['strtriggers'] = ' Трігери'; + $lang['strshowalltriggers'] = 'Показати всі трігери'; + $lang['strnotrigger'] = 'Трігер не виявлено.'; + $lang['strnotriggers'] = 'Жодного трігера не виявлено.'; + $lang['strcreatetrigger'] = 'Створити трігер'; + $lang['strtriggerneedsname'] = 'Вам необхідно вказать ім"я трігера.'; + $lang['strtriggerneedsfunc'] = 'Вам необхідно визначити функцію трігера.'; + $lang['strtriggercreated'] = 'Трігер створено.'; + $lang['strtriggercreatedbad'] = 'Створення трігера перервано.'; + $lang['strconfdroptrigger'] = 'Ви впевнені, що бажаєтее видалити трігер "%s" на "%s"?'; + $lang['strtriggerdropped'] = 'Трігер видалено.'; + $lang['strtriggerdroppedbad'] = 'Видалення трігера перервано.'; + $lang['strtriggeraltered'] = 'Трігер змінено.'; + $lang['strtriggeralteredbad'] = 'Зміну трігера перервано.'; + + // Types + $lang['strtype'] = 'Тип даних'; + $lang['strtypes'] = 'Типи даних'; + $lang['strshowalltypes'] = 'Показати всі типи даних'; + $lang['strnotype'] = 'Тип даних не виявлено.'; + $lang['strnotypes'] = 'Жодного типу даних не виявлено.'; + $lang['strcreatetype'] = 'Створити тип даних'; + $lang['strtypename'] = 'Ім"я типу даних'; + $lang['strinputfn'] = 'Функція вводу'; + $lang['stroutputfn'] = 'Функція виводу'; + $lang['strpassbyval'] = 'Передати за значенням?'; + $lang['stralignment'] = 'Вирівнювання'; + $lang['strelement'] = 'Елемент'; + $lang['strdelimiter'] = 'Роздільник'; + $lang['strstorage'] = 'Зберігання'; + $lang['strtypeneedsname'] = 'Вам необхідно вказати ім"я типу даних.'; + $lang['strtypeneedslen'] = 'Вам необхідно вказати розмір для типу даних.'; + $lang['strtypecreated'] = 'Тип даних створено.'; + $lang['strtypecreatedbad'] = 'Створення типу даних перервано.'; + $lang['strconfdroptype'] = 'Ви впевнені, що бажаєте видалити тип даних "%s"?'; + $lang['strtypedropped'] = 'Тип даних видалено.'; + $lang['strtypedroppedbad'] = 'Видалення типу даних перервано.'; + + // Schemas + $lang['strschema'] = 'Схема'; + $lang['strschemas'] = 'Схеми'; + $lang['strshowallschemas'] = 'Показати всі схеми'; + $lang['strnoschema'] = 'Схему не виявлено.'; + $lang['strnoschemas'] = 'Жодної схеми не виявлено.'; + $lang['strcreateschema'] = 'Створити схему'; + $lang['strschemaname'] = 'Ім"я схеми'; + $lang['strschemaneedsname'] = 'Вам необхідно вказати ім"я схеми.'; + $lang['strschemacreated'] = 'Схему створено.'; + $lang['strschemacreatedbad'] = 'Створення схеми перервано.'; + $lang['strconfdropschema'] = 'Ви впевнені, що бажаєте видалити схему "%s"?'; + $lang['strschemadropped'] = 'Схему видалено.'; + $lang['strschemadroppedbad'] = 'Видалення схеми перервано.'; + $lang['strschemaaltered'] = 'Схему оновлено.'; + $lang['strschemaalteredbad'] = 'Оновлення схеми перервано.'; + + // Reports + + // Domains + $lang['strdomain'] = 'Домен'; + $lang['strdomains'] = 'Домени'; + $lang['strshowalldomains'] = 'Показати всі домени'; + $lang['strnodomains'] = 'Жодного домена не виявлено.'; + $lang['strcreatedomain'] = 'Створити домен'; + $lang['strdomaindropped'] = 'Домен видалено.'; + $lang['strdomaindroppedbad'] = 'Видалення домена перервано.'; + $lang['strconfdropdomain'] = 'Ви впевнені, що бажаєте видалити домен "%s"?'; + $lang['strdomainneedsname'] = 'Вам необхідно вказати ім"я домена.'; + $lang['strdomaincreated'] = 'Домен створено.'; + $lang['strdomaincreatedbad'] = 'Створення домена перервано.'; + $lang['strdomainaltered'] = 'Домен змінено.'; + $lang['strdomainalteredbad'] = 'Зміну домена перервано.'; + + // Operators + $lang['stroperator'] = 'Оператор'; + $lang['stroperators'] = 'Оператори'; + $lang['strshowalloperators'] = 'Показати всі оператори'; + $lang['strnooperator'] = 'Оператор не виявлено.'; + $lang['strnooperators'] = 'Операторів не виявлено.'; + $lang['strcreateoperator'] = 'Створити оператор'; + $lang['strleftarg'] = 'Тип лівого аргумента'; + $lang['strrightarg'] = 'Тип правого аргумента'; + $lang['strcommutator'] = 'Перетворення'; + $lang['strnegator'] = 'Заперечення'; + $lang['strrestrict'] = 'Послаблення'; + $lang['strjoin'] = 'Об"єднання'; + $lang['strhashes'] = 'Хешування'; + $lang['strmerges'] = 'Об"єднання'; + $lang['strleftsort'] = 'Сортування за лівим'; + $lang['strrightsort'] = 'Сортування за правим'; + $lang['strlessthan'] = 'Менше'; + $lang['strgreaterthan'] = 'Більше'; + $lang['stroperatorneedsname'] = 'Вам необхідно вказати назву оператора.'; + $lang['stroperatorcreated'] = 'Оператор створено'; + $lang['stroperatorcreatedbad'] = 'Створення оператора перервано.'; + $lang['strconfdropoperator'] = 'Ви впевнені, що бажаєтее видалити оператор "%s"?'; + $lang['stroperatordropped'] = 'Оператор видалено.'; + $lang['stroperatordroppedbad'] = 'Видалення оператора перервано.'; + + // Casts + $lang['strcasts'] = 'Взірці'; + $lang['strnocasts'] = 'Взірців не виявлено.'; + $lang['strsourcetype'] = 'Тип джерела'; + $lang['strtargettype'] = 'Тип приймача'; + $lang['strimplicit'] = 'Неявний'; + $lang['strinassignment'] = 'В призначенні'; + $lang['strbinarycompat'] = '(двійково сумісний)'; + + // Conversions + $lang['strconversions'] = 'Перетворення'; + $lang['strnoconversions'] = 'Перетворень не виявлено.'; + $lang['strsourceencoding'] = 'Кодування джерела'; + $lang['strtargetencoding'] = 'Кодування приймача'; + + // Languages + $lang['strlanguages'] = 'Мови'; + $lang['strnolanguages'] = 'Мов не виявлено.'; + $lang['strtrusted'] = 'Перевірено'; + + // Info + $lang['strnoinfo'] = 'Немає доступної інформації.'; + $lang['strreferringtables'] = 'Таблиці, що посилаються'; + $lang['strparenttables'] = 'Батьківські таблиці'; + $lang['strchildtables'] = 'Дочірні таблиці'; + + // Aggregates + $lang['straggregates'] = 'Агрегатні вирази'; + $lang['strnoaggregates'] = 'Агрегатних виразів не виявлено.'; + $lang['stralltypes'] = '(Всі типи)'; + + // Operator Classes + $lang['stropclasses'] = 'Класи операторів'; + $lang['strnoopclasses'] = 'Класів операторів не виявлено.'; + $lang['straccessmethod'] = 'Метод доступа'; + + // Stats and performance + $lang['strrowperf'] = 'Показ запису'; + $lang['strioperf'] = 'Показ вводу/виводу'; + $lang['stridxrowperf'] = 'Показ індекса запису'; + $lang['stridxioperf'] = 'Показ індекса вводу/виводу'; + $lang['strpercent'] = '%'; + $lang['strsequential'] = 'Послідовний'; + $lang['strscan'] = 'Сканувати'; + $lang['strread'] = 'Читати'; + $lang['strfetch'] = 'Витягнути'; + $lang['strheap'] = 'Сміття'; + $lang['strtoast'] = 'TOAST'; + $lang['strtoastindex'] = 'TOAST індекс'; + $lang['strcache'] = 'Кеш'; + $lang['strdisk'] = 'Диск'; + $lang['strrows2'] = 'Записи'; + + // Miscellaneous + $lang['strtopbar'] = '%s виконується на %s:%s -- Ви зареєструвались як "%s"'; + $lang['strtimefmt'] = ' j-m-Y g:i'; + $lang['strhelp'] = 'Допомога'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/languages.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/languages.php new file mode 100644 index 00000000..b337638b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/languages.php @@ -0,0 +1,79 @@ +<?php + + /** + * Manage languages in a database + * + * $Id: languages.php,v 1.13 2007/08/31 18:30:11 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Show default list of languages in the database + */ + function doDefault($msg = '') { + global $data, $misc, $database; + global $lang; + + $misc->printTrail('database'); + $misc->printTabs('database','languages'); + $misc->printMsg($msg); + + $languages = $data->getLanguages(); + + $columns = array( + 'language' => array( + 'title' => $lang['strname'], + 'field' => field('lanname'), + ), + 'trusted' => array( + 'title' => $lang['strtrusted'], + 'field' => field('lanpltrusted'), + 'type' => 'yesno', + ), + 'function' => array( + 'title' => $lang['strfunction'], + 'field' => field('lanplcallf'), + ), + ); + + $actions = array(); + + $misc->printTable($languages, $columns, $actions, 'languages-languages', $lang['strnolanguages']); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $languages = $data->getLanguages(); + + $attrs = array( + 'text' => field('lanname'), + 'icon' => 'Language' + ); + + $misc->printTree($languages, $attrs, 'languages'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strlanguages']); + $misc->printBody(); + + switch ($action) { + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-csvlib.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-csvlib.inc.php new file mode 100644 index 00000000..1c0d0818 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-csvlib.inc.php @@ -0,0 +1,318 @@ +<?php + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +global $ADODB_INCLUDED_CSV; +$ADODB_INCLUDED_CSV = 1; + +/* + + V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. See License.txt. + Set tabs to 4 for best viewing. + + Latest version is available at http://adodb.sourceforge.net + + Library for CSV serialization. This is used by the csv/proxy driver and is the + CacheExecute() serialization format. + + ==== NOTE ==== + Format documented at http://php.weblogs.com/ADODB_CSV + ============== +*/ + + /** + * convert a recordset into special format + * + * @param rs the recordset + * + * @return the CSV formated data + */ + function _rs2serialize(&$rs,$conn=false,$sql='') + { + $max = ($rs) ? $rs->FieldCount() : 0; + + if ($sql) $sql = urlencode($sql); + // metadata setup + + if ($max <= 0 || $rs->dataProvider == 'empty') { // is insert/update/delete + if (is_object($conn)) { + $sql .= ','.$conn->Affected_Rows(); + $sql .= ','.$conn->Insert_ID(); + } else + $sql .= ',,'; + + $text = "====-1,0,$sql\n"; + return $text; + } + $tt = ($rs->timeCreated) ? $rs->timeCreated : time(); + + ## changed format from ====0 to ====1 + $line = "====1,$tt,$sql\n"; + + if ($rs->databaseType == 'array') { + $rows = $rs->_array; + } else { + $rows = array(); + while (!$rs->EOF) { + $rows[] = $rs->fields; + $rs->MoveNext(); + } + } + + for($i=0; $i < $max; $i++) { + $o = $rs->FetchField($i); + $flds[] = $o; + } + + $savefetch = isset($rs->adodbFetchMode) ? $rs->adodbFetchMode : $rs->fetchMode; + $class = $rs->connection->arrayClass; + $rs2 = new $class(); + $rs2->timeCreated = $rs->timeCreated; # memcache fix + $rs2->sql = $rs->sql; + $rs2->oldProvider = $rs->dataProvider; + $rs2->InitArrayFields($rows,$flds); + $rs2->fetchMode = $savefetch; + return $line.serialize($rs2); + } + + +/** +* Open CSV file and convert it into Data. +* +* @param url file/ftp/http url +* @param err returns the error message +* @param timeout dispose if recordset has been alive for $timeout secs +* +* @return recordset, or false if error occured. If no +* error occurred in sql INSERT/UPDATE/DELETE, +* empty recordset is returned +*/ + function csv2rs($url,&$err,$timeout=0, $rsclass='ADORecordSet_array') + { + $false = false; + $err = false; + $fp = @fopen($url,'rb'); + if (!$fp) { + $err = $url.' file/URL not found'; + return $false; + } + @flock($fp, LOCK_SH); + $arr = array(); + $ttl = 0; + + if ($meta = fgetcsv($fp, 32000, ",")) { + // check if error message + if (strncmp($meta[0],'****',4) === 0) { + $err = trim(substr($meta[0],4,1024)); + fclose($fp); + return $false; + } + // check for meta data + // $meta[0] is -1 means return an empty recordset + // $meta[1] contains a time + + if (strncmp($meta[0], '====',4) === 0) { + + if ($meta[0] == "====-1") { + if (sizeof($meta) < 5) { + $err = "Corrupt first line for format -1"; + fclose($fp); + return $false; + } + fclose($fp); + + if ($timeout > 0) { + $err = " Illegal Timeout $timeout "; + return $false; + } + + $rs = new $rsclass($val=true); + $rs->fields = array(); + $rs->timeCreated = $meta[1]; + $rs->EOF = true; + $rs->_numOfFields = 0; + $rs->sql = urldecode($meta[2]); + $rs->affectedrows = (integer)$meta[3]; + $rs->insertid = $meta[4]; + return $rs; + } + # Under high volume loads, we want only 1 thread/process to _write_file + # so that we don't have 50 processes queueing to write the same data. + # We use probabilistic timeout, ahead of time. + # + # -4 sec before timeout, give processes 1/32 chance of timing out + # -2 sec before timeout, give processes 1/16 chance of timing out + # -1 sec after timeout give processes 1/4 chance of timing out + # +0 sec after timeout, give processes 100% chance of timing out + if (sizeof($meta) > 1) { + if($timeout >0){ + $tdiff = (integer)( $meta[1]+$timeout - time()); + if ($tdiff <= 2) { + switch($tdiff) { + case 4: + case 3: + if ((rand() & 31) == 0) { + fclose($fp); + $err = "Timeout 3"; + return $false; + } + break; + case 2: + if ((rand() & 15) == 0) { + fclose($fp); + $err = "Timeout 2"; + return $false; + } + break; + case 1: + if ((rand() & 3) == 0) { + fclose($fp); + $err = "Timeout 1"; + return $false; + } + break; + default: + fclose($fp); + $err = "Timeout 0"; + return $false; + } // switch + + } // if check flush cache + }// (timeout>0) + $ttl = $meta[1]; + } + //================================================ + // new cache format - use serialize extensively... + if ($meta[0] === '====1') { + // slurp in the data + $MAXSIZE = 128000; + + $text = fread($fp,$MAXSIZE); + if (strlen($text)) { + while ($txt = fread($fp,$MAXSIZE)) { + $text .= $txt; + } + } + fclose($fp); + $rs = unserialize($text); + if (is_object($rs)) $rs->timeCreated = $ttl; + else { + $err = "Unable to unserialize recordset"; + //echo htmlspecialchars($text),' !--END--!<p>'; + } + return $rs; + } + + $meta = false; + $meta = fgetcsv($fp, 32000, ","); + if (!$meta) { + fclose($fp); + $err = "Unexpected EOF 1"; + return $false; + } + } + + // Get Column definitions + $flds = array(); + foreach($meta as $o) { + $o2 = explode(':',$o); + if (sizeof($o2)!=3) { + $arr[] = $meta; + $flds = false; + break; + } + $fld = new ADOFieldObject(); + $fld->name = urldecode($o2[0]); + $fld->type = $o2[1]; + $fld->max_length = $o2[2]; + $flds[] = $fld; + } + } else { + fclose($fp); + $err = "Recordset had unexpected EOF 2"; + return $false; + } + + // slurp in the data + $MAXSIZE = 128000; + + $text = ''; + while ($txt = fread($fp,$MAXSIZE)) { + $text .= $txt; + } + + fclose($fp); + @$arr = unserialize($text); + //var_dump($arr); + if (!is_array($arr)) { + $err = "Recordset had unexpected EOF (in serialized recordset)"; + if (get_magic_quotes_runtime()) $err .= ". Magic Quotes Runtime should be disabled!"; + return $false; + } + $rs = new $rsclass(); + $rs->timeCreated = $ttl; + $rs->InitArrayFields($arr,$flds); + return $rs; + } + + + /** + * Save a file $filename and its $contents (normally for caching) with file locking + * Returns true if ok, false if fopen/fwrite error, 0 if rename error (eg. file is locked) + */ + function adodb_write_file($filename, $contents,$debug=false) + { + # http://www.php.net/bugs.php?id=9203 Bug that flock fails on Windows + # So to simulate locking, we assume that rename is an atomic operation. + # First we delete $filename, then we create a $tempfile write to it and + # rename to the desired $filename. If the rename works, then we successfully + # modified the file exclusively. + # What a stupid need - having to simulate locking. + # Risks: + # 1. $tempfile name is not unique -- very very low + # 2. unlink($filename) fails -- ok, rename will fail + # 3. adodb reads stale file because unlink fails -- ok, $rs timeout occurs + # 4. another process creates $filename between unlink() and rename() -- ok, rename() fails and cache updated + if (strncmp(PHP_OS,'WIN',3) === 0) { + // skip the decimal place + $mtime = substr(str_replace(' ','_',microtime()),2); + // getmypid() actually returns 0 on Win98 - never mind! + $tmpname = $filename.uniqid($mtime).getmypid(); + if (!($fd = @fopen($tmpname,'w'))) return false; + if (fwrite($fd,$contents)) $ok = true; + else $ok = false; + fclose($fd); + + if ($ok) { + @chmod($tmpname,0644); + // the tricky moment + @unlink($filename); + if (!@rename($tmpname,$filename)) { + unlink($tmpname); + $ok = 0; + } + if (!$ok) { + if ($debug) ADOConnection::outp( " Rename $tmpname ".($ok? 'ok' : 'failed')); + } + } + return $ok; + } + if (!($fd = @fopen($filename, 'a'))) return false; + if (flock($fd, LOCK_EX) && ftruncate($fd, 0)) { + if (fwrite( $fd, $contents )) $ok = true; + else $ok = false; + fclose($fd); + @chmod($filename,0644); + }else { + fclose($fd); + if ($debug)ADOConnection::outp( " Failed acquiring lock for $filename<br>\n"); + $ok = false; + } + + return $ok; + } +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-datadict.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-datadict.inc.php new file mode 100644 index 00000000..69060c5c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-datadict.inc.php @@ -0,0 +1,1032 @@ +<?php + +/** + V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. + + Set tabs to 4 for best viewing. + + DOCUMENTATION: + + See adodb/tests/test-datadict.php for docs and examples. +*/ + +/* + Test script for parser +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +function Lens_ParseTest() +{ +$str = "`zcol ACOL` NUMBER(32,2) DEFAULT 'The \"cow\" (and Jim''s dog) jumps over the moon' PRIMARY, INTI INT AUTO DEFAULT 0, zcol2\"afs ds"; +print "<p>$str</p>"; +$a= Lens_ParseArgs($str); +print "<pre>"; +print_r($a); +print "</pre>"; +} + + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { + return preg_match('/^[a-z0-9]*$/i', $text); + } +} + +//Lens_ParseTest(); + +/** + Parse arguments, treat "text" (text) and 'text' as quotation marks. + To escape, use "" or '' or )) + + Will read in "abc def" sans quotes, as: abc def + Same with 'abc def'. + However if `abc def`, then will read in as `abc def` + + @param endstmtchar Character that indicates end of statement + @param tokenchars Include the following characters in tokens apart from A-Z and 0-9 + @returns 2 dimensional array containing parsed tokens. +*/ +function Lens_ParseArgs($args,$endstmtchar=',',$tokenchars='_.-') +{ + $pos = 0; + $intoken = false; + $stmtno = 0; + $endquote = false; + $tokens = array(); + $tokens[$stmtno] = array(); + $max = strlen($args); + $quoted = false; + $tokarr = array(); + + while ($pos < $max) { + $ch = substr($args,$pos,1); + switch($ch) { + case ' ': + case "\t": + case "\n": + case "\r": + if (!$quoted) { + if ($intoken) { + $intoken = false; + $tokens[$stmtno][] = implode('',$tokarr); + } + break; + } + + $tokarr[] = $ch; + break; + + case '`': + if ($intoken) $tokarr[] = $ch; + case '(': + case ')': + case '"': + case "'": + + if ($intoken) { + if (empty($endquote)) { + $tokens[$stmtno][] = implode('',$tokarr); + if ($ch == '(') $endquote = ')'; + else $endquote = $ch; + $quoted = true; + $intoken = true; + $tokarr = array(); + } else if ($endquote == $ch) { + $ch2 = substr($args,$pos+1,1); + if ($ch2 == $endquote) { + $pos += 1; + $tokarr[] = $ch2; + } else { + $quoted = false; + $intoken = false; + $tokens[$stmtno][] = implode('',$tokarr); + $endquote = ''; + } + } else + $tokarr[] = $ch; + + }else { + + if ($ch == '(') $endquote = ')'; + else $endquote = $ch; + $quoted = true; + $intoken = true; + $tokarr = array(); + if ($ch == '`') $tokarr[] = '`'; + } + break; + + default: + + if (!$intoken) { + if ($ch == $endstmtchar) { + $stmtno += 1; + $tokens[$stmtno] = array(); + break; + } + + $intoken = true; + $quoted = false; + $endquote = false; + $tokarr = array(); + + } + + if ($quoted) $tokarr[] = $ch; + else if (ctype_alnum($ch) || strpos($tokenchars,$ch) !== false) $tokarr[] = $ch; + else { + if ($ch == $endstmtchar) { + $tokens[$stmtno][] = implode('',$tokarr); + $stmtno += 1; + $tokens[$stmtno] = array(); + $intoken = false; + $tokarr = array(); + break; + } + $tokens[$stmtno][] = implode('',$tokarr); + $tokens[$stmtno][] = $ch; + $intoken = false; + } + } + $pos += 1; + } + if ($intoken) $tokens[$stmtno][] = implode('',$tokarr); + + return $tokens; +} + + +class ADODB_DataDict { + var $connection; + var $debug = false; + var $dropTable = 'DROP TABLE %s'; + var $renameTable = 'RENAME TABLE %s TO %s'; + var $dropIndex = 'DROP INDEX %s'; + var $addCol = ' ADD'; + var $alterCol = ' ALTER COLUMN'; + var $dropCol = ' DROP COLUMN'; + var $renameColumn = 'ALTER TABLE %s RENAME COLUMN %s TO %s'; // table, old-column, new-column, column-definitions (not used by default) + var $nameRegex = '\w'; + var $nameRegexBrackets = 'a-zA-Z0-9_\(\)'; + var $schema = false; + var $serverInfo = array(); + var $autoIncrement = false; + var $dataProvider; + var $invalidResizeTypes4 = array('CLOB','BLOB','TEXT','DATE','TIME'); // for changetablesql + var $blobSize = 100; /// any varchar/char field this size or greater is treated as a blob + /// in other words, we use a text area for editting. + + function GetCommentSQL($table,$col) + { + return false; + } + + function SetCommentSQL($table,$col,$cmt) + { + return false; + } + + function MetaTables() + { + if (!$this->connection->IsConnected()) return array(); + return $this->connection->MetaTables(); + } + + function MetaColumns($tab, $upper=true, $schema=false) + { + if (!$this->connection->IsConnected()) return array(); + return $this->connection->MetaColumns($this->TableName($tab), $upper, $schema); + } + + function MetaPrimaryKeys($tab,$owner=false,$intkey=false) + { + if (!$this->connection->IsConnected()) return array(); + return $this->connection->MetaPrimaryKeys($this->TableName($tab), $owner, $intkey); + } + + function MetaIndexes($table, $primary = false, $owner = false) + { + if (!$this->connection->IsConnected()) return array(); + return $this->connection->MetaIndexes($this->TableName($table), $primary, $owner); + } + + function MetaType($t,$len=-1,$fieldobj=false) + { + static $typeMap = array( + 'VARCHAR' => 'C', + 'VARCHAR2' => 'C', + 'CHAR' => 'C', + 'C' => 'C', + 'STRING' => 'C', + 'NCHAR' => 'C', + 'NVARCHAR' => 'C', + 'VARYING' => 'C', + 'BPCHAR' => 'C', + 'CHARACTER' => 'C', + 'INTERVAL' => 'C', # Postgres + 'MACADDR' => 'C', # postgres + 'VAR_STRING' => 'C', # mysql + ## + 'LONGCHAR' => 'X', + 'TEXT' => 'X', + 'NTEXT' => 'X', + 'M' => 'X', + 'X' => 'X', + 'CLOB' => 'X', + 'NCLOB' => 'X', + 'LVARCHAR' => 'X', + ## + 'BLOB' => 'B', + 'IMAGE' => 'B', + 'BINARY' => 'B', + 'VARBINARY' => 'B', + 'LONGBINARY' => 'B', + 'B' => 'B', + ## + 'YEAR' => 'D', // mysql + 'DATE' => 'D', + 'D' => 'D', + ## + 'UNIQUEIDENTIFIER' => 'C', # MS SQL Server + ## + 'TIME' => 'T', + 'TIMESTAMP' => 'T', + 'DATETIME' => 'T', + 'TIMESTAMPTZ' => 'T', + 'SMALLDATETIME' => 'T', + 'T' => 'T', + 'TIMESTAMP WITHOUT TIME ZONE' => 'T', // postgresql + ## + 'BOOL' => 'L', + 'BOOLEAN' => 'L', + 'BIT' => 'L', + 'L' => 'L', + ## + 'COUNTER' => 'R', + 'R' => 'R', + 'SERIAL' => 'R', // ifx + 'INT IDENTITY' => 'R', + ## + 'INT' => 'I', + 'INT2' => 'I', + 'INT4' => 'I', + 'INT8' => 'I', + 'INTEGER' => 'I', + 'INTEGER UNSIGNED' => 'I', + 'SHORT' => 'I', + 'TINYINT' => 'I', + 'SMALLINT' => 'I', + 'I' => 'I', + ## + 'LONG' => 'N', // interbase is numeric, oci8 is blob + 'BIGINT' => 'N', // this is bigger than PHP 32-bit integers + 'DECIMAL' => 'N', + 'DEC' => 'N', + 'REAL' => 'N', + 'DOUBLE' => 'N', + 'DOUBLE PRECISION' => 'N', + 'SMALLFLOAT' => 'N', + 'FLOAT' => 'N', + 'NUMBER' => 'N', + 'NUM' => 'N', + 'NUMERIC' => 'N', + 'MONEY' => 'N', + + ## informix 9.2 + 'SQLINT' => 'I', + 'SQLSERIAL' => 'I', + 'SQLSMINT' => 'I', + 'SQLSMFLOAT' => 'N', + 'SQLFLOAT' => 'N', + 'SQLMONEY' => 'N', + 'SQLDECIMAL' => 'N', + 'SQLDATE' => 'D', + 'SQLVCHAR' => 'C', + 'SQLCHAR' => 'C', + 'SQLDTIME' => 'T', + 'SQLINTERVAL' => 'N', + 'SQLBYTES' => 'B', + 'SQLTEXT' => 'X', + ## informix 10 + "SQLINT8" => 'I8', + "SQLSERIAL8" => 'I8', + "SQLNCHAR" => 'C', + "SQLNVCHAR" => 'C', + "SQLLVARCHAR" => 'X', + "SQLBOOL" => 'L' + ); + + if (!$this->connection->IsConnected()) { + $t = strtoupper($t); + if (isset($typeMap[$t])) return $typeMap[$t]; + return 'N'; + } + return $this->connection->MetaType($t,$len,$fieldobj); + } + + function NameQuote($name = NULL,$allowBrackets=false) + { + if (!is_string($name)) { + return FALSE; + } + + $name = trim($name); + + if ( !is_object($this->connection) ) { + return $name; + } + + $quote = $this->connection->nameQuote; + + // if name is of the form `name`, quote it + if ( preg_match('/^`(.+)`$/', $name, $matches) ) { + return $quote . $matches[1] . $quote; + } + + // if name contains special characters, quote it + $regex = ($allowBrackets) ? $this->nameRegexBrackets : $this->nameRegex; + + if ( !preg_match('/^[' . $regex . ']+$/', $name) ) { + return $quote . $name . $quote; + } + + return $name; + } + + function TableName($name) + { + if ( $this->schema ) { + return $this->NameQuote($this->schema) .'.'. $this->NameQuote($name); + } + return $this->NameQuote($name); + } + + // Executes the sql array returned by GetTableSQL and GetIndexSQL + function ExecuteSQLArray($sql, $continueOnError = true) + { + $rez = 2; + $conn = $this->connection; + $saved = $conn->debug; + foreach($sql as $line) { + + if ($this->debug) $conn->debug = true; + $ok = $conn->Execute($line); + $conn->debug = $saved; + if (!$ok) { + if ($this->debug) ADOConnection::outp($conn->ErrorMsg()); + if (!$continueOnError) return 0; + $rez = 1; + } + } + return $rez; + } + + /** + Returns the actual type given a character code. + + C: varchar + X: CLOB (character large object) or largest varchar size if CLOB is not supported + C2: Multibyte varchar + X2: Multibyte CLOB + + B: BLOB (binary large object) + + D: Date + T: Date-time + L: Integer field suitable for storing booleans (0 or 1) + I: Integer + F: Floating point number + N: Numeric or decimal number + */ + + function ActualType($meta) + { + return $meta; + } + + function CreateDatabase($dbname,$options=false) + { + $options = $this->_Options($options); + $sql = array(); + + $s = 'CREATE DATABASE ' . $this->NameQuote($dbname); + if (isset($options[$this->upperName])) + $s .= ' '.$options[$this->upperName]; + + $sql[] = $s; + return $sql; + } + + /* + Generates the SQL to create index. Returns an array of sql strings. + */ + function CreateIndexSQL($idxname, $tabname, $flds, $idxoptions = false) + { + if (!is_array($flds)) { + $flds = explode(',',$flds); + } + + foreach($flds as $key => $fld) { + # some indexes can use partial fields, eg. index first 32 chars of "name" with NAME(32) + $flds[$key] = $this->NameQuote($fld,$allowBrackets=true); + } + + return $this->_IndexSQL($this->NameQuote($idxname), $this->TableName($tabname), $flds, $this->_Options($idxoptions)); + } + + function DropIndexSQL ($idxname, $tabname = NULL) + { + return array(sprintf($this->dropIndex, $this->NameQuote($idxname), $this->TableName($tabname))); + } + + function SetSchema($schema) + { + $this->schema = $schema; + } + + function AddColumnSQL($tabname, $flds) + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + $alter = 'ALTER TABLE ' . $tabname . $this->addCol . ' '; + foreach($lines as $v) { + $sql[] = $alter . $v; + } + if (is_array($idxs)) { + foreach($idxs as $idx => $idxdef) { + $sql_idxs = $this->CreateIndexSql($idx, $tabname, $idxdef['cols'], $idxdef['opts']); + $sql = array_merge($sql, $sql_idxs); + } + } + return $sql; + } + + /** + * Change the definition of one column + * + * As some DBM's can't do that on there own, you need to supply the complete defintion of the new table, + * to allow, recreating the table and copying the content over to the new table + * @param string $tabname table-name + * @param string $flds column-name and type for the changed column + * @param string $tableflds='' complete defintion of the new table, eg. for postgres, default '' + * @param array/string $tableoptions='' options for the new table see CreateTableSQL, default '' + * @return array with SQL strings + */ + function AlterColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + $tabname = $this->TableName ($tabname); + $sql = array(); + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + $alter = 'ALTER TABLE ' . $tabname . $this->alterCol . ' '; + foreach($lines as $v) { + $sql[] = $alter . $v; + } + if (is_array($idxs)) { + foreach($idxs as $idx => $idxdef) { + $sql_idxs = $this->CreateIndexSql($idx, $tabname, $idxdef['cols'], $idxdef['opts']); + $sql = array_merge($sql, $sql_idxs); + } + + } + return $sql; + } + + /** + * Rename one column + * + * Some DBM's can only do this together with changeing the type of the column (even if that stays the same, eg. mysql) + * @param string $tabname table-name + * @param string $oldcolumn column-name to be renamed + * @param string $newcolumn new column-name + * @param string $flds='' complete column-defintion-string like for AddColumnSQL, only used by mysql atm., default='' + * @return array with SQL strings + */ + function RenameColumnSQL($tabname,$oldcolumn,$newcolumn,$flds='') + { + $tabname = $this->TableName ($tabname); + if ($flds) { + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + list(,$first) = each($lines); + list(,$column_def) = preg_split("/[\t ]+/",$first,2); + } + return array(sprintf($this->renameColumn,$tabname,$this->NameQuote($oldcolumn),$this->NameQuote($newcolumn),$column_def)); + } + + /** + * Drop one column + * + * Some DBM's can't do that on there own, you need to supply the complete defintion of the new table, + * to allow, recreating the table and copying the content over to the new table + * @param string $tabname table-name + * @param string $flds column-name and type for the changed column + * @param string $tableflds='' complete defintion of the new table, eg. for postgres, default '' + * @param array/string $tableoptions='' options for the new table see CreateTableSQL, default '' + * @return array with SQL strings + */ + function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='') + { + $tabname = $this->TableName ($tabname); + if (!is_array($flds)) $flds = explode(',',$flds); + $sql = array(); + $alter = 'ALTER TABLE ' . $tabname . $this->dropCol . ' '; + foreach($flds as $v) { + $sql[] = $alter . $this->NameQuote($v); + } + return $sql; + } + + function DropTableSQL($tabname) + { + return array (sprintf($this->dropTable, $this->TableName($tabname))); + } + + function RenameTableSQL($tabname,$newname) + { + return array (sprintf($this->renameTable, $this->TableName($tabname),$this->TableName($newname))); + } + + /** + Generate the SQL to create table. Returns an array of sql strings. + */ + function CreateTableSQL($tabname, $flds, $tableoptions=array()) + { + list($lines,$pkey,$idxs) = $this->_GenFields($flds, true); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + + $taboptions = $this->_Options($tableoptions); + $tabname = $this->TableName ($tabname); + $sql = $this->_TableSQL($tabname,$lines,$pkey,$taboptions); + + // ggiunta - 2006/10/12 - KLUDGE: + // if we are on autoincrement, and table options includes REPLACE, the + // autoincrement sequence has already been dropped on table creation sql, so + // we avoid passing REPLACE to trigger creation code. This prevents + // creating sql that double-drops the sequence + if ($this->autoIncrement && isset($taboptions['REPLACE'])) + unset($taboptions['REPLACE']); + $tsql = $this->_Triggers($tabname,$taboptions); + foreach($tsql as $s) $sql[] = $s; + + if (is_array($idxs)) { + foreach($idxs as $idx => $idxdef) { + $sql_idxs = $this->CreateIndexSql($idx, $tabname, $idxdef['cols'], $idxdef['opts']); + $sql = array_merge($sql, $sql_idxs); + } + } + + return $sql; + } + + + + function _GenFields($flds,$widespacing=false) + { + if (is_string($flds)) { + $padding = ' '; + $txt = $flds.$padding; + $flds = array(); + $flds0 = Lens_ParseArgs($txt,','); + $hasparam = false; + foreach($flds0 as $f0) { + $f1 = array(); + foreach($f0 as $token) { + switch (strtoupper($token)) { + case 'INDEX': + $f1['INDEX'] = ''; + // fall through intentionally + case 'CONSTRAINT': + case 'DEFAULT': + $hasparam = $token; + break; + default: + if ($hasparam) $f1[$hasparam] = $token; + else $f1[] = $token; + $hasparam = false; + break; + } + } + // 'index' token without a name means single column index: name it after column + if (array_key_exists('INDEX', $f1) && $f1['INDEX'] == '') { + $f1['INDEX'] = isset($f0['NAME']) ? $f0['NAME'] : $f0[0]; + // check if column name used to create an index name was quoted + if (($f1['INDEX'][0] == '"' || $f1['INDEX'][0] == "'" || $f1['INDEX'][0] == "`") && + ($f1['INDEX'][0] == substr($f1['INDEX'], -1))) { + $f1['INDEX'] = $f1['INDEX'][0].'idx_'.substr($f1['INDEX'], 1, -1).$f1['INDEX'][0]; + } + else + $f1['INDEX'] = 'idx_'.$f1['INDEX']; + } + // reset it, so we don't get next field 1st token as INDEX... + $hasparam = false; + + $flds[] = $f1; + + } + } + $this->autoIncrement = false; + $lines = array(); + $pkey = array(); + $idxs = array(); + foreach($flds as $fld) { + $fld = _array_change_key_case($fld); + + $fname = false; + $fdefault = false; + $fautoinc = false; + $ftype = false; + $fsize = false; + $fprec = false; + $fprimary = false; + $fnoquote = false; + $fdefts = false; + $fdefdate = false; + $fconstraint = false; + $fnotnull = false; + $funsigned = false; + $findex = ''; + $funiqueindex = false; + + //----------------- + // Parse attributes + foreach($fld as $attr => $v) { + if ($attr == 2 && is_numeric($v)) $attr = 'SIZE'; + else if (is_numeric($attr) && $attr > 1 && !is_numeric($v)) $attr = strtoupper($v); + + switch($attr) { + case '0': + case 'NAME': $fname = $v; break; + case '1': + case 'TYPE': $ty = $v; $ftype = $this->ActualType(strtoupper($v)); break; + + case 'SIZE': + $dotat = strpos($v,'.'); if ($dotat === false) $dotat = strpos($v,','); + if ($dotat === false) $fsize = $v; + else { + $fsize = substr($v,0,$dotat); + $fprec = substr($v,$dotat+1); + } + break; + case 'UNSIGNED': $funsigned = true; break; + case 'AUTOINCREMENT': + case 'AUTO': $fautoinc = true; $fnotnull = true; break; + case 'KEY': + // a primary key col can be non unique in itself (if key spans many cols...) + case 'PRIMARY': $fprimary = $v; $fnotnull = true; /*$funiqueindex = true;*/ break; + case 'DEF': + case 'DEFAULT': $fdefault = $v; break; + case 'NOTNULL': $fnotnull = $v; break; + case 'NOQUOTE': $fnoquote = $v; break; + case 'DEFDATE': $fdefdate = $v; break; + case 'DEFTIMESTAMP': $fdefts = $v; break; + case 'CONSTRAINT': $fconstraint = $v; break; + // let INDEX keyword create a 'very standard' index on column + case 'INDEX': $findex = $v; break; + case 'UNIQUE': $funiqueindex = true; break; + } //switch + } // foreach $fld + + //-------------------- + // VALIDATE FIELD INFO + if (!strlen($fname)) { + if ($this->debug) ADOConnection::outp("Undefined NAME"); + return false; + } + + $fid = strtoupper(preg_replace('/^`(.+)`$/', '$1', $fname)); + $fname = $this->NameQuote($fname); + + if (!strlen($ftype)) { + if ($this->debug) ADOConnection::outp("Undefined TYPE for field '$fname'"); + return false; + } else { + $ftype = strtoupper($ftype); + } + + $ftype = $this->_GetSize($ftype, $ty, $fsize, $fprec); + + if ($ty == 'X' || $ty == 'X2' || $ty == 'B') $fnotnull = false; // some blob types do not accept nulls + + if ($fprimary) $pkey[] = $fname; + + // some databases do not allow blobs to have defaults + if ($ty == 'X') $fdefault = false; + + // build list of indexes + if ($findex != '') { + if (array_key_exists($findex, $idxs)) { + $idxs[$findex]['cols'][] = ($fname); + if (in_array('UNIQUE', $idxs[$findex]['opts']) != $funiqueindex) { + if ($this->debug) ADOConnection::outp("Index $findex defined once UNIQUE and once not"); + } + if ($funiqueindex && !in_array('UNIQUE', $idxs[$findex]['opts'])) + $idxs[$findex]['opts'][] = 'UNIQUE'; + } + else + { + $idxs[$findex] = array(); + $idxs[$findex]['cols'] = array($fname); + if ($funiqueindex) + $idxs[$findex]['opts'] = array('UNIQUE'); + else + $idxs[$findex]['opts'] = array(); + } + } + + //-------------------- + // CONSTRUCT FIELD SQL + if ($fdefts) { + if (substr($this->connection->databaseType,0,5) == 'mysql') { + $ftype = 'TIMESTAMP'; + } else { + $fdefault = $this->connection->sysTimeStamp; + } + } else if ($fdefdate) { + if (substr($this->connection->databaseType,0,5) == 'mysql') { + $ftype = 'TIMESTAMP'; + } else { + $fdefault = $this->connection->sysDate; + } + } else if ($fdefault !== false && !$fnoquote) { + if ($ty == 'C' or $ty == 'X' or + ( substr($fdefault,0,1) != "'" && !is_numeric($fdefault))) { + + if (($ty == 'D' || $ty == 'T') && strtolower($fdefault) != 'null') { + // convert default date into database-aware code + if ($ty == 'T') + { + $fdefault = $this->connection->DBTimeStamp($fdefault); + } + else + { + $fdefault = $this->connection->DBDate($fdefault); + } + } + else + if (strlen($fdefault) != 1 && substr($fdefault,0,1) == ' ' && substr($fdefault,strlen($fdefault)-1) == ' ') + $fdefault = trim($fdefault); + else if (strtolower($fdefault) != 'null') + $fdefault = $this->connection->qstr($fdefault); + } + } + $suffix = $this->_CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned); + + // add index creation + if ($widespacing) $fname = str_pad($fname,24); + + // check for field names appearing twice + if (array_key_exists($fid, $lines)) { + ADOConnection::outp("Field '$fname' defined twice"); + } + + $lines[$fid] = $fname.' '.$ftype.$suffix; + + if ($fautoinc) $this->autoIncrement = true; + } // foreach $flds + + return array($lines,$pkey,$idxs); + } + + /** + GENERATE THE SIZE PART OF THE DATATYPE + $ftype is the actual type + $ty is the type defined originally in the DDL + */ + function _GetSize($ftype, $ty, $fsize, $fprec) + { + if (strlen($fsize) && $ty != 'X' && $ty != 'B' && strpos($ftype,'(') === false) { + $ftype .= "(".$fsize; + if (strlen($fprec)) $ftype .= ",".$fprec; + $ftype .= ')'; + } + return $ftype; + } + + + // return string must begin with space + function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned) + { + $suffix = ''; + if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault"; + if ($fnotnull) $suffix .= ' NOT NULL'; + if ($fconstraint) $suffix .= ' '.$fconstraint; + return $suffix; + } + + function _IndexSQL($idxname, $tabname, $flds, $idxoptions) + { + $sql = array(); + + if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) { + $sql[] = sprintf ($this->dropIndex, $idxname); + if ( isset($idxoptions['DROP']) ) + return $sql; + } + + if ( empty ($flds) ) { + return $sql; + } + + $unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : ''; + + $s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' '; + + if ( isset($idxoptions[$this->upperName]) ) + $s .= $idxoptions[$this->upperName]; + + if ( is_array($flds) ) + $flds = implode(', ',$flds); + $s .= '(' . $flds . ')'; + $sql[] = $s; + + return $sql; + } + + function _DropAutoIncrement($tabname) + { + return false; + } + + function _TableSQL($tabname,$lines,$pkey,$tableoptions) + { + $sql = array(); + + if (isset($tableoptions['REPLACE']) || isset ($tableoptions['DROP'])) { + $sql[] = sprintf($this->dropTable,$tabname); + if ($this->autoIncrement) { + $sInc = $this->_DropAutoIncrement($tabname); + if ($sInc) $sql[] = $sInc; + } + if ( isset ($tableoptions['DROP']) ) { + return $sql; + } + } + $s = "CREATE TABLE $tabname (\n"; + $s .= implode(",\n", $lines); + if (sizeof($pkey)>0) { + $s .= ",\n PRIMARY KEY ("; + $s .= implode(", ",$pkey).")"; + } + if (isset($tableoptions['CONSTRAINTS'])) + $s .= "\n".$tableoptions['CONSTRAINTS']; + + if (isset($tableoptions[$this->upperName.'_CONSTRAINTS'])) + $s .= "\n".$tableoptions[$this->upperName.'_CONSTRAINTS']; + + $s .= "\n)"; + if (isset($tableoptions[$this->upperName])) $s .= $tableoptions[$this->upperName]; + $sql[] = $s; + + return $sql; + } + + /** + GENERATE TRIGGERS IF NEEDED + used when table has auto-incrementing field that is emulated using triggers + */ + function _Triggers($tabname,$taboptions) + { + return array(); + } + + /** + Sanitize options, so that array elements with no keys are promoted to keys + */ + function _Options($opts) + { + if (!is_array($opts)) return array(); + $newopts = array(); + foreach($opts as $k => $v) { + if (is_numeric($k)) $newopts[strtoupper($v)] = $v; + else $newopts[strtoupper($k)] = $v; + } + return $newopts; + } + + + function _getSizePrec($size) + { + $fsize = false; + $fprec = false; + $dotat = strpos($size,'.'); + if ($dotat === false) $dotat = strpos($size,','); + if ($dotat === false) $fsize = $size; + else { + $fsize = substr($size,0,$dotat); + $fprec = substr($size,$dotat+1); + } + return array($fsize, $fprec); + } + + /** + "Florian Buzin [ easywe ]" <florian.buzin#easywe.de> + + This function changes/adds new fields to your table. You don't + have to know if the col is new or not. It will check on its own. + */ + function ChangeTableSQL($tablename, $flds, $tableoptions = false, $dropOldFlds=false) + { + global $ADODB_FETCH_MODE; + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + if ($this->connection->fetchMode !== false) $savem = $this->connection->SetFetchMode(false); + + // check table exists + $save_handler = $this->connection->raiseErrorFn; + $this->connection->raiseErrorFn = ''; + $cols = $this->MetaColumns($tablename); + $this->connection->raiseErrorFn = $save_handler; + + if (isset($savem)) $this->connection->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ( empty($cols)) { + return $this->CreateTableSQL($tablename, $flds, $tableoptions); + } + + if (is_array($flds)) { + // Cycle through the update fields, comparing + // existing fields to fields to update. + // if the Metatype and size is exactly the + // same, ignore - by Mark Newham + $holdflds = array(); + foreach($flds as $k=>$v) { + if ( isset($cols[$k]) && is_object($cols[$k]) ) { + // If already not allowing nulls, then don't change + $obj = $cols[$k]; + if (isset($obj->not_null) && $obj->not_null) + $v = str_replace('NOT NULL','',$v); + if (isset($obj->auto_increment) && $obj->auto_increment && empty($v['AUTOINCREMENT'])) + $v = str_replace('AUTOINCREMENT','',$v); + + $c = $cols[$k]; + $ml = $c->max_length; + $mt = $this->MetaType($c->type,$ml); + + if (isset($c->scale)) $sc = $c->scale; + else $sc = 99; // always force change if scale not known. + + if ($sc == -1) $sc = false; + list($fsize, $fprec) = $this->_getSizePrec($v['SIZE']); + + if ($ml == -1) $ml = ''; + if ($mt == 'X') $ml = $v['SIZE']; + if (($mt != $v['TYPE']) || ($ml != $fsize || $sc != $fprec) || (isset($v['AUTOINCREMENT']) && $v['AUTOINCREMENT'] != $obj->auto_increment)) { + $holdflds[$k] = $v; + } + } else { + $holdflds[$k] = $v; + } + } + $flds = $holdflds; + } + + + // already exists, alter table instead + list($lines,$pkey,$idxs) = $this->_GenFields($flds); + // genfields can return FALSE at times + if ($lines == null) $lines = array(); + $alter = 'ALTER TABLE ' . $this->TableName($tablename); + $sql = array(); + + foreach ( $lines as $id => $v ) { + if ( isset($cols[$id]) && is_object($cols[$id]) ) { + + $flds = Lens_ParseArgs($v,','); + + // We are trying to change the size of the field, if not allowed, simply ignore the request. + // $flds[1] holds the type, $flds[2] holds the size -postnuke addition + if ($flds && in_array(strtoupper(substr($flds[0][1],0,4)),$this->invalidResizeTypes4) + && (isset($flds[0][2]) && is_numeric($flds[0][2]))) { + if ($this->debug) ADOConnection::outp(sprintf("<h3>%s cannot be changed to %s currently</h3>", $flds[0][0], $flds[0][1])); + #echo "<h3>$this->alterCol cannot be changed to $flds currently</h3>"; + continue; + } + $sql[] = $alter . $this->alterCol . ' ' . $v; + } else { + $sql[] = $alter . $this->addCol . ' ' . $v; + } + } + + if ($dropOldFlds) { + foreach ( $cols as $id => $v ) + if ( !isset($lines[$id]) ) + $sql[] = $alter . $this->dropCol . ' ' . $v->name; + } + return $sql; + } +} // class +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-error.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-error.inc.php new file mode 100644 index 00000000..6ec614d2 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-error.inc.php @@ -0,0 +1,258 @@ +<?php +/** + * @version V5.06 16 Oct 2008 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + * Released under both BSD license and Lesser GPL library license. + * Whenever there is any discrepancy between the two licenses, + * the BSD license will take precedence. + * + * Set tabs to 4 for best viewing. + * + * The following code is adapted from the PEAR DB error handling code. + * Portions (c)1997-2002 The PHP Group. + */ + + +if (!defined("DB_ERROR")) define("DB_ERROR",-1); + +if (!defined("DB_ERROR_SYNTAX")) { + define("DB_ERROR_SYNTAX", -2); + define("DB_ERROR_CONSTRAINT", -3); + define("DB_ERROR_NOT_FOUND", -4); + define("DB_ERROR_ALREADY_EXISTS", -5); + define("DB_ERROR_UNSUPPORTED", -6); + define("DB_ERROR_MISMATCH", -7); + define("DB_ERROR_INVALID", -8); + define("DB_ERROR_NOT_CAPABLE", -9); + define("DB_ERROR_TRUNCATED", -10); + define("DB_ERROR_INVALID_NUMBER", -11); + define("DB_ERROR_INVALID_DATE", -12); + define("DB_ERROR_DIVZERO", -13); + define("DB_ERROR_NODBSELECTED", -14); + define("DB_ERROR_CANNOT_CREATE", -15); + define("DB_ERROR_CANNOT_DELETE", -16); + define("DB_ERROR_CANNOT_DROP", -17); + define("DB_ERROR_NOSUCHTABLE", -18); + define("DB_ERROR_NOSUCHFIELD", -19); + define("DB_ERROR_NEED_MORE_DATA", -20); + define("DB_ERROR_NOT_LOCKED", -21); + define("DB_ERROR_VALUE_COUNT_ON_ROW", -22); + define("DB_ERROR_INVALID_DSN", -23); + define("DB_ERROR_CONNECT_FAILED", -24); + define("DB_ERROR_EXTENSION_NOT_FOUND",-25); + define("DB_ERROR_NOSUCHDB", -25); + define("DB_ERROR_ACCESS_VIOLATION", -26); +} + +function adodb_errormsg($value) +{ +global $ADODB_LANG,$ADODB_LANG_ARRAY; + + if (empty($ADODB_LANG)) $ADODB_LANG = 'en'; + if (isset($ADODB_LANG_ARRAY['LANG']) && $ADODB_LANG_ARRAY['LANG'] == $ADODB_LANG) ; + else { + include_once(ADODB_DIR."/lang/adodb-$ADODB_LANG.inc.php"); + } + return isset($ADODB_LANG_ARRAY[$value]) ? $ADODB_LANG_ARRAY[$value] : $ADODB_LANG_ARRAY[DB_ERROR]; +} + +function adodb_error($provider,$dbType,$errno) +{ + //var_dump($errno); + if (is_numeric($errno) && $errno == 0) return 0; + switch($provider) { + case 'mysql': $map = adodb_error_mysql(); break; + + case 'oracle': + case 'oci8': $map = adodb_error_oci8(); break; + + case 'ibase': $map = adodb_error_ibase(); break; + + case 'odbc': $map = adodb_error_odbc(); break; + + case 'mssql': + case 'sybase': $map = adodb_error_mssql(); break; + + case 'informix': $map = adodb_error_ifx(); break; + + case 'postgres': return adodb_error_pg($errno); break; + + case 'sqlite': return $map = adodb_error_sqlite(); break; + default: + return DB_ERROR; + } + //print_r($map); + //var_dump($errno); + if (isset($map[$errno])) return $map[$errno]; + return DB_ERROR; +} + +//************************************************************************************** + +function adodb_error_pg($errormsg) +{ + if (is_numeric($errormsg)) return (integer) $errormsg; + static $error_regexps = array( + '/(Table does not exist\.|Relation [\"\'].*[\"\'] does not exist|sequence does not exist|class ".+" not found)$/i' => DB_ERROR_NOSUCHTABLE, + '/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*/i' => DB_ERROR_ALREADY_EXISTS, + '/divide by zero$/i' => DB_ERROR_DIVZERO, + '/pg_atoi: error in .*: can\'t parse /i' => DB_ERROR_INVALID_NUMBER, + '/ttribute [\"\'].*[\"\'] not found|Relation [\"\'].*[\"\'] does not have attribute [\"\'].*[\"\']/i' => DB_ERROR_NOSUCHFIELD, + '/parser: parse error at or near \"/i' => DB_ERROR_SYNTAX, + '/referential integrity violation/i' => DB_ERROR_CONSTRAINT, + '/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*|duplicate key.*violates unique constraint/i' + => DB_ERROR_ALREADY_EXISTS + ); + reset($error_regexps); + while (list($regexp,$code) = each($error_regexps)) { + if (preg_match($regexp, $errormsg)) { + return $code; + } + } + // Fall back to DB_ERROR if there was no mapping. + return DB_ERROR; +} + +function adodb_error_odbc() +{ +static $MAP = array( + '01004' => DB_ERROR_TRUNCATED, + '07001' => DB_ERROR_MISMATCH, + '21S01' => DB_ERROR_MISMATCH, + '21S02' => DB_ERROR_MISMATCH, + '22003' => DB_ERROR_INVALID_NUMBER, + '22008' => DB_ERROR_INVALID_DATE, + '22012' => DB_ERROR_DIVZERO, + '23000' => DB_ERROR_CONSTRAINT, + '24000' => DB_ERROR_INVALID, + '34000' => DB_ERROR_INVALID, + '37000' => DB_ERROR_SYNTAX, + '42000' => DB_ERROR_SYNTAX, + 'IM001' => DB_ERROR_UNSUPPORTED, + 'S0000' => DB_ERROR_NOSUCHTABLE, + 'S0001' => DB_ERROR_NOT_FOUND, + 'S0002' => DB_ERROR_NOSUCHTABLE, + 'S0011' => DB_ERROR_ALREADY_EXISTS, + 'S0012' => DB_ERROR_NOT_FOUND, + 'S0021' => DB_ERROR_ALREADY_EXISTS, + 'S0022' => DB_ERROR_NOT_FOUND, + 'S1000' => DB_ERROR_NOSUCHTABLE, + 'S1009' => DB_ERROR_INVALID, + 'S1090' => DB_ERROR_INVALID, + 'S1C00' => DB_ERROR_NOT_CAPABLE + ); + return $MAP; +} + +function adodb_error_ibase() +{ +static $MAP = array( + -104 => DB_ERROR_SYNTAX, + -150 => DB_ERROR_ACCESS_VIOLATION, + -151 => DB_ERROR_ACCESS_VIOLATION, + -155 => DB_ERROR_NOSUCHTABLE, + -157 => DB_ERROR_NOSUCHFIELD, + -158 => DB_ERROR_VALUE_COUNT_ON_ROW, + -170 => DB_ERROR_MISMATCH, + -171 => DB_ERROR_MISMATCH, + -172 => DB_ERROR_INVALID, + -204 => DB_ERROR_INVALID, + -205 => DB_ERROR_NOSUCHFIELD, + -206 => DB_ERROR_NOSUCHFIELD, + -208 => DB_ERROR_INVALID, + -219 => DB_ERROR_NOSUCHTABLE, + -297 => DB_ERROR_CONSTRAINT, + -530 => DB_ERROR_CONSTRAINT, + -803 => DB_ERROR_CONSTRAINT, + -551 => DB_ERROR_ACCESS_VIOLATION, + -552 => DB_ERROR_ACCESS_VIOLATION, + -922 => DB_ERROR_NOSUCHDB, + -923 => DB_ERROR_CONNECT_FAILED, + -924 => DB_ERROR_CONNECT_FAILED + ); + + return $MAP; +} + +function adodb_error_ifx() +{ +static $MAP = array( + '-201' => DB_ERROR_SYNTAX, + '-206' => DB_ERROR_NOSUCHTABLE, + '-217' => DB_ERROR_NOSUCHFIELD, + '-329' => DB_ERROR_NODBSELECTED, + '-1204' => DB_ERROR_INVALID_DATE, + '-1205' => DB_ERROR_INVALID_DATE, + '-1206' => DB_ERROR_INVALID_DATE, + '-1209' => DB_ERROR_INVALID_DATE, + '-1210' => DB_ERROR_INVALID_DATE, + '-1212' => DB_ERROR_INVALID_DATE + ); + + return $MAP; +} + +function adodb_error_oci8() +{ +static $MAP = array( + 1 => DB_ERROR_ALREADY_EXISTS, + 900 => DB_ERROR_SYNTAX, + 904 => DB_ERROR_NOSUCHFIELD, + 923 => DB_ERROR_SYNTAX, + 942 => DB_ERROR_NOSUCHTABLE, + 955 => DB_ERROR_ALREADY_EXISTS, + 1476 => DB_ERROR_DIVZERO, + 1722 => DB_ERROR_INVALID_NUMBER, + 2289 => DB_ERROR_NOSUCHTABLE, + 2291 => DB_ERROR_CONSTRAINT, + 2449 => DB_ERROR_CONSTRAINT + ); + + return $MAP; +} + +function adodb_error_mssql() +{ +static $MAP = array( + 208 => DB_ERROR_NOSUCHTABLE, + 2601 => DB_ERROR_ALREADY_EXISTS + ); + + return $MAP; +} + +function adodb_error_sqlite() +{ +static $MAP = array( + 1 => DB_ERROR_SYNTAX + ); + + return $MAP; +} + +function adodb_error_mysql() +{ +static $MAP = array( + 1004 => DB_ERROR_CANNOT_CREATE, + 1005 => DB_ERROR_CANNOT_CREATE, + 1006 => DB_ERROR_CANNOT_CREATE, + 1007 => DB_ERROR_ALREADY_EXISTS, + 1008 => DB_ERROR_CANNOT_DROP, + 1045 => DB_ERROR_ACCESS_VIOLATION, + 1046 => DB_ERROR_NODBSELECTED, + 1049 => DB_ERROR_NOSUCHDB, + 1050 => DB_ERROR_ALREADY_EXISTS, + 1051 => DB_ERROR_NOSUCHTABLE, + 1054 => DB_ERROR_NOSUCHFIELD, + 1062 => DB_ERROR_ALREADY_EXISTS, + 1064 => DB_ERROR_SYNTAX, + 1100 => DB_ERROR_NOT_LOCKED, + 1136 => DB_ERROR_VALUE_COUNT_ON_ROW, + 1146 => DB_ERROR_NOSUCHTABLE, + 1048 => DB_ERROR_CONSTRAINT, + 2002 => DB_ERROR_CONNECT_FAILED, + 2005 => DB_ERROR_CONNECT_FAILED + ); + + return $MAP; +} +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-iterator.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-iterator.inc.php new file mode 100644 index 00000000..e8b5e57b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-iterator.inc.php @@ -0,0 +1,30 @@ +<?php + +/* + V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. + + Set tabs to 4. + + Declares the ADODB Base Class for PHP5 "ADODB_BASE_RS", and supports iteration with + the ADODB_Iterator class. + + $rs = $db->Execute("select * from adoxyz"); + foreach($rs as $k => $v) { + echo $k; print_r($v); echo "<br>"; + } + + + Iterator code based on http://cvs.php.net/cvs.php/php-src/ext/spl/examples/cachingiterator.inc?login=2 + + + Moved to adodb.inc.php to improve performance. + */ + + + + + +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-lib.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-lib.inc.php new file mode 100644 index 00000000..6b2e8910 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-lib.inc.php @@ -0,0 +1,1197 @@ +<?php + + + + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +global $ADODB_INCLUDED_LIB; +$ADODB_INCLUDED_LIB = 1; + +/* + @version V5.06 16 Oct 2008 (c) 2000-2010 John Lim (jlim\@natsoft.com.my). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. See License.txt. + Set tabs to 4 for best viewing. + + Less commonly used functions are placed here to reduce size of adodb.inc.php. +*/ + +function adodb_strip_order_by($sql) +{ + $rez = preg_match('/(\sORDER\s+BY\s[^)]*)/is',$sql,$arr); + if ($arr) + if (strpos($arr[0],'(') !== false) { + $at = strpos($sql,$arr[0]); + $cntin = 0; + for ($i=$at, $max=strlen($sql); $i < $max; $i++) { + $ch = $sql[$i]; + if ($ch == '(') { + $cntin += 1; + } elseif($ch == ')') { + $cntin -= 1; + if ($cntin < 0) { + break; + } + } + } + $sql = substr($sql,0,$at).substr($sql,$i); + } else + $sql = str_replace($arr[0], '', $sql); + return $sql; + } + +if (false) { + $sql = 'select * from (select a from b order by a(b),b(c) desc)'; + $sql = '(select * from abc order by 1)'; + die(adodb_strip_order_by($sql)); +} + +function adodb_probetypes(&$array,&$types,$probe=8) +{ +// probe and guess the type + $types = array(); + if ($probe > sizeof($array)) $max = sizeof($array); + else $max = $probe; + + + for ($j=0;$j < $max; $j++) { + $row = $array[$j]; + if (!$row) break; + $i = -1; + foreach($row as $v) { + $i += 1; + + if (isset($types[$i]) && $types[$i]=='C') continue; + + //print " ($i ".$types[$i]. "$v) "; + $v = trim($v); + + if (!preg_match('/^[+-]{0,1}[0-9\.]+$/',$v)) { + $types[$i] = 'C'; // once C, always C + + continue; + } + if ($j == 0) { + // If empty string, we presume is character + // test for integer for 1st row only + // after that it is up to testing other rows to prove + // that it is not an integer + if (strlen($v) == 0) $types[$i] = 'C'; + if (strpos($v,'.') !== false) $types[$i] = 'N'; + else $types[$i] = 'I'; + continue; + } + + if (strpos($v,'.') !== false) $types[$i] = 'N'; + + } + } + +} + +function adodb_transpose(&$arr, &$newarr, &$hdr, &$fobjs) +{ + $oldX = sizeof(reset($arr)); + $oldY = sizeof($arr); + + if ($hdr) { + $startx = 1; + $hdr = array('Fields'); + for ($y = 0; $y < $oldY; $y++) { + $hdr[] = $arr[$y][0]; + } + } else + $startx = 0; + + for ($x = $startx; $x < $oldX; $x++) { + if ($fobjs) { + $o = $fobjs[$x]; + $newarr[] = array($o->name); + } else + $newarr[] = array(); + + for ($y = 0; $y < $oldY; $y++) { + $newarr[$x-$startx][] = $arr[$y][$x]; + } + } +} + +// Force key to upper. +// See also http://www.php.net/manual/en/function.array-change-key-case.php +function _array_change_key_case($an_array) +{ + if (is_array($an_array)) { + $new_array = array(); + foreach($an_array as $key=>$value) + $new_array[strtoupper($key)] = $value; + + return $new_array; + } + + return $an_array; +} + +function _adodb_replace(&$zthis, $table, $fieldArray, $keyCol, $autoQuote, $has_autoinc) +{ + if (count($fieldArray) == 0) return 0; + $first = true; + $uSet = ''; + + if (!is_array($keyCol)) { + $keyCol = array($keyCol); + } + foreach($fieldArray as $k => $v) { + if ($v === null) { + $v = 'NULL'; + $fieldArray[$k] = $v; + } else if ($autoQuote && /*!is_numeric($v) /*and strncmp($v,"'",1) !== 0 -- sql injection risk*/ strcasecmp($v,$zthis->null2null)!=0) { + $v = $zthis->qstr($v); + $fieldArray[$k] = $v; + } + if (in_array($k,$keyCol)) continue; // skip UPDATE if is key + + if ($first) { + $first = false; + $uSet = "$k=$v"; + } else + $uSet .= ",$k=$v"; + } + + $where = false; + foreach ($keyCol as $v) { + if (isset($fieldArray[$v])) { + if ($where) $where .= ' and '.$v.'='.$fieldArray[$v]; + else $where = $v.'='.$fieldArray[$v]; + } + } + + if ($uSet && $where) { + $update = "UPDATE $table SET $uSet WHERE $where"; + + $rs = $zthis->Execute($update); + + + if ($rs) { + if ($zthis->poorAffectedRows) { + /* + The Select count(*) wipes out any errors that the update would have returned. + http://phplens.com/lens/lensforum/msgs.php?id=5696 + */ + if ($zthis->ErrorNo()<>0) return 0; + + # affected_rows == 0 if update field values identical to old values + # for mysql - which is silly. + + $cnt = $zthis->GetOne("select count(*) from $table where $where"); + if ($cnt > 0) return 1; // record already exists + } else { + if (($zthis->Affected_Rows()>0)) return 1; + } + } else + return 0; + } + + // print "<p>Error=".$this->ErrorNo().'<p>'; + $first = true; + foreach($fieldArray as $k => $v) { + if ($has_autoinc && in_array($k,$keyCol)) continue; // skip autoinc col + + if ($first) { + $first = false; + $iCols = "$k"; + $iVals = "$v"; + } else { + $iCols .= ",$k"; + $iVals .= ",$v"; + } + } + $insert = "INSERT INTO $table ($iCols) VALUES ($iVals)"; + $rs = $zthis->Execute($insert); + return ($rs) ? 2 : 0; +} + +// Requires $ADODB_FETCH_MODE = ADODB_FETCH_NUM +function _adodb_getmenu(&$zthis, $name,$defstr='',$blank1stItem=true,$multiple=false, + $size=0, $selectAttr='',$compareFields0=true) +{ + $hasvalue = false; + + if ($multiple or is_array($defstr)) { + if ($size==0) $size=5; + $attr = ' multiple size="'.$size.'"'; + if (!strpos($name,'[]')) $name .= '[]'; + } else if ($size) $attr = ' size="'.$size.'"'; + else $attr =''; + + $s = '<select name="'.$name.'"'.$attr.' '.$selectAttr.'>'; + if ($blank1stItem) + if (is_string($blank1stItem)) { + $barr = explode(':',$blank1stItem); + if (sizeof($barr) == 1) $barr[] = ''; + $s .= "\n<option value=\"".$barr[0]."\">".$barr[1]."</option>"; + } else $s .= "\n<option></option>"; + + if ($zthis->FieldCount() > 1) $hasvalue=true; + else $compareFields0 = true; + + $value = ''; + $optgroup = null; + $firstgroup = true; + $fieldsize = $zthis->FieldCount(); + while(!$zthis->EOF) { + $zval = rtrim(reset($zthis->fields)); + + if ($blank1stItem && $zval=="") { + $zthis->MoveNext(); + continue; + } + + if ($fieldsize > 1) { + if (isset($zthis->fields[1])) + $zval2 = rtrim($zthis->fields[1]); + else + $zval2 = rtrim(next($zthis->fields)); + } + $selected = ($compareFields0) ? $zval : $zval2; + + $group = ''; + if ($fieldsize > 2) { + $group = rtrim($zthis->fields[2]); + } +/* + if ($optgroup != $group) { + $optgroup = $group; + if ($firstgroup) { + $firstgroup = false; + $s .="\n<optgroup label='". htmlspecialchars($group) ."'>"; + } else { + $s .="\n</optgroup>"; + $s .="\n<optgroup label='". htmlspecialchars($group) ."'>"; + } + } +*/ + if ($hasvalue) + $value = " value='".htmlspecialchars($zval2)."'"; + + if (is_array($defstr)) { + + if (in_array($selected,$defstr)) + $s .= "\n<option selected='selected'$value>".htmlspecialchars($zval).'</option>'; + else + $s .= "\n<option".$value.'>'.htmlspecialchars($zval).'</option>'; + } + else { + if (strcasecmp($selected,$defstr)==0) + $s .= "\n<option selected='selected'$value>".htmlspecialchars($zval).'</option>'; + else + $s .= "\n<option".$value.'>'.htmlspecialchars($zval).'</option>'; + } + $zthis->MoveNext(); + } // while + + // closing last optgroup + if($optgroup != null) { + $s .= "\n</optgroup>"; + } + return $s ."\n</select>\n"; +} + +// Requires $ADODB_FETCH_MODE = ADODB_FETCH_NUM +function _adodb_getmenu_gp(&$zthis, $name,$defstr='',$blank1stItem=true,$multiple=false, + $size=0, $selectAttr='',$compareFields0=true) +{ + $hasvalue = false; + + if ($multiple or is_array($defstr)) { + if ($size==0) $size=5; + $attr = ' multiple size="'.$size.'"'; + if (!strpos($name,'[]')) $name .= '[]'; + } else if ($size) $attr = ' size="'.$size.'"'; + else $attr =''; + + $s = '<select name="'.$name.'"'.$attr.' '.$selectAttr.'>'; + if ($blank1stItem) + if (is_string($blank1stItem)) { + $barr = explode(':',$blank1stItem); + if (sizeof($barr) == 1) $barr[] = ''; + $s .= "\n<option value=\"".$barr[0]."\">".$barr[1]."</option>"; + } else $s .= "\n<option></option>"; + + if ($zthis->FieldCount() > 1) $hasvalue=true; + else $compareFields0 = true; + + $value = ''; + $optgroup = null; + $firstgroup = true; + $fieldsize = sizeof($zthis->fields); + while(!$zthis->EOF) { + $zval = rtrim(reset($zthis->fields)); + + if ($blank1stItem && $zval=="") { + $zthis->MoveNext(); + continue; + } + + if ($fieldsize > 1) { + if (isset($zthis->fields[1])) + $zval2 = rtrim($zthis->fields[1]); + else + $zval2 = rtrim(next($zthis->fields)); + } + $selected = ($compareFields0) ? $zval : $zval2; + + $group = ''; + if (isset($zthis->fields[2])) { + $group = rtrim($zthis->fields[2]); + } + + if ($optgroup != $group) { + $optgroup = $group; + if ($firstgroup) { + $firstgroup = false; + $s .="\n<optgroup label='". htmlspecialchars($group) ."'>"; + } else { + $s .="\n</optgroup>"; + $s .="\n<optgroup label='". htmlspecialchars($group) ."'>"; + } + } + + if ($hasvalue) + $value = " value='".htmlspecialchars($zval2)."'"; + + if (is_array($defstr)) { + + if (in_array($selected,$defstr)) + $s .= "\n<option selected='selected'$value>".htmlspecialchars($zval).'</option>'; + else + $s .= "\n<option".$value.'>'.htmlspecialchars($zval).'</option>'; + } + else { + if (strcasecmp($selected,$defstr)==0) + $s .= "\n<option selected='selected'$value>".htmlspecialchars($zval).'</option>'; + else + $s .= "\n<option".$value.'>'.htmlspecialchars($zval).'</option>'; + } + $zthis->MoveNext(); + } // while + + // closing last optgroup + if($optgroup != null) { + $s .= "\n</optgroup>"; + } + return $s ."\n</select>\n"; +} + + +/* + Count the number of records this sql statement will return by using + query rewriting heuristics... + + Does not work with UNIONs, except with postgresql and oracle. + + Usage: + + $conn->Connect(...); + $cnt = _adodb_getcount($conn, $sql); + +*/ +function _adodb_getcount(&$zthis, $sql,$inputarr=false,$secs2cache=0) +{ + $qryRecs = 0; + + if (!empty($zthis->_nestedSQL) || preg_match("/^\s*SELECT\s+DISTINCT/is", $sql) || + preg_match('/\s+GROUP\s+BY\s+/is',$sql) || + preg_match('/\s+UNION\s+/is',$sql)) { + + $rewritesql = adodb_strip_order_by($sql); + + // ok, has SELECT DISTINCT or GROUP BY so see if we can use a table alias + // but this is only supported by oracle and postgresql... + if ($zthis->dataProvider == 'oci8') { + // Allow Oracle hints to be used for query optimization, Chris Wrye + if (preg_match('#/\\*+.*?\\*\\/#', $sql, $hint)) { + $rewritesql = "SELECT ".$hint[0]." COUNT(*) FROM (".$rewritesql.")"; + } else + $rewritesql = "SELECT COUNT(*) FROM (".$rewritesql.")"; + + } else if (strncmp($zthis->databaseType,'postgres',8) == 0 || strncmp($zthis->databaseType,'mysql',5) == 0) { + $rewritesql = "SELECT COUNT(*) FROM ($rewritesql) _ADODB_ALIAS_"; + } else { + $rewritesql = "SELECT COUNT(*) FROM ($rewritesql)"; + } + } else { + // now replace SELECT ... FROM with SELECT COUNT(*) FROM + $rewritesql = preg_replace( + '/^\s*SELECT\s.*\s+FROM\s/Uis','SELECT COUNT(*) FROM ',$sql); + // fix by alexander zhukov, alex#unipack.ru, because count(*) and 'order by' fails + // with mssql, access and postgresql. Also a good speedup optimization - skips sorting! + // also see http://phplens.com/lens/lensforum/msgs.php?id=12752 + $rewritesql = adodb_strip_order_by($rewritesql); + } + + if (isset($rewritesql) && $rewritesql != $sql) { + if (preg_match('/\sLIMIT\s+[0-9]+/i',$sql,$limitarr)) $rewritesql .= $limitarr[0]; + + if ($secs2cache) { + // we only use half the time of secs2cache because the count can quickly + // become inaccurate if new records are added + $qryRecs = $zthis->CacheGetOne($secs2cache/2,$rewritesql,$inputarr); + + } else { + $qryRecs = $zthis->GetOne($rewritesql,$inputarr); + } + if ($qryRecs !== false) return $qryRecs; + } + //-------------------------------------------- + // query rewrite failed - so try slower way... + + + // strip off unneeded ORDER BY if no UNION + if (preg_match('/\s*UNION\s*/is', $sql)) $rewritesql = $sql; + else $rewritesql = $rewritesql = adodb_strip_order_by($sql); + + if (preg_match('/\sLIMIT\s+[0-9]+/i',$sql,$limitarr)) $rewritesql .= $limitarr[0]; + + if ($secs2cache) { + $rstest = $zthis->CacheExecute($secs2cache,$rewritesql,$inputarr); + if (!$rstest) $rstest = $zthis->CacheExecute($secs2cache,$sql,$inputarr); + } else { + $rstest = $zthis->Execute($rewritesql,$inputarr); + if (!$rstest) $rstest = $zthis->Execute($sql,$inputarr); + } + if ($rstest) { + $qryRecs = $rstest->RecordCount(); + if ($qryRecs == -1) { + global $ADODB_EXTENSION; + // some databases will return -1 on MoveLast() - change to MoveNext() + if ($ADODB_EXTENSION) { + while(!$rstest->EOF) { + adodb_movenext($rstest); + } + } else { + while(!$rstest->EOF) { + $rstest->MoveNext(); + } + } + $qryRecs = $rstest->_currentRow; + } + $rstest->Close(); + if ($qryRecs == -1) return 0; + } + return $qryRecs; +} + +/* + Code originally from "Cornel G" <conyg@fx.ro> + + This code might not work with SQL that has UNION in it + + Also if you are using CachePageExecute(), there is a strong possibility that + data will get out of synch. use CachePageExecute() only with tables that + rarely change. +*/ +function _adodb_pageexecute_all_rows(&$zthis, $sql, $nrows, $page, + $inputarr=false, $secs2cache=0) +{ + $atfirstpage = false; + $atlastpage = false; + $lastpageno=1; + + // If an invalid nrows is supplied, + // we assume a default value of 10 rows per page + if (!isset($nrows) || $nrows <= 0) $nrows = 10; + + $qryRecs = false; //count records for no offset + + $qryRecs = _adodb_getcount($zthis,$sql,$inputarr,$secs2cache); + $lastpageno = (int) ceil($qryRecs / $nrows); + $zthis->_maxRecordCount = $qryRecs; + + + + // ***** Here we check whether $page is the last page or + // whether we are trying to retrieve + // a page number greater than the last page number. + if ($page >= $lastpageno) { + $page = $lastpageno; + $atlastpage = true; + } + + // If page number <= 1, then we are at the first page + if (empty($page) || $page <= 1) { + $page = 1; + $atfirstpage = true; + } + + // We get the data we want + $offset = $nrows * ($page-1); + if ($secs2cache > 0) + $rsreturn = $zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $offset, $inputarr); + else + $rsreturn = $zthis->SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache); + + + // Before returning the RecordSet, we set the pagination properties we need + if ($rsreturn) { + $rsreturn->_maxRecordCount = $qryRecs; + $rsreturn->rowsPerPage = $nrows; + $rsreturn->AbsolutePage($page); + $rsreturn->AtFirstPage($atfirstpage); + $rsreturn->AtLastPage($atlastpage); + $rsreturn->LastPageNo($lastpageno); + } + return $rsreturn; +} + +// Iv�n Oliva version +function _adodb_pageexecute_no_last_page(&$zthis, $sql, $nrows, $page, $inputarr=false, $secs2cache=0) +{ + + $atfirstpage = false; + $atlastpage = false; + + if (!isset($page) || $page <= 1) { // If page number <= 1, then we are at the first page + $page = 1; + $atfirstpage = true; + } + if ($nrows <= 0) $nrows = 10; // If an invalid nrows is supplied, we assume a default value of 10 rows per page + + // ***** Here we check whether $page is the last page or whether we are trying to retrieve a page number greater than + // the last page number. + $pagecounter = $page + 1; + $pagecounteroffset = ($pagecounter * $nrows) - $nrows; + if ($secs2cache>0) $rstest = $zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $pagecounteroffset, $inputarr); + else $rstest = $zthis->SelectLimit($sql, $nrows, $pagecounteroffset, $inputarr, $secs2cache); + if ($rstest) { + while ($rstest && $rstest->EOF && $pagecounter>0) { + $atlastpage = true; + $pagecounter--; + $pagecounteroffset = $nrows * ($pagecounter - 1); + $rstest->Close(); + if ($secs2cache>0) $rstest = $zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $pagecounteroffset, $inputarr); + else $rstest = $zthis->SelectLimit($sql, $nrows, $pagecounteroffset, $inputarr, $secs2cache); + } + if ($rstest) $rstest->Close(); + } + if ($atlastpage) { // If we are at the last page or beyond it, we are going to retrieve it + $page = $pagecounter; + if ($page == 1) $atfirstpage = true; // We have to do this again in case the last page is the same as the first + //... page, that is, the recordset has only 1 page. + } + + // We get the data we want + $offset = $nrows * ($page-1); + if ($secs2cache > 0) $rsreturn = $zthis->CacheSelectLimit($secs2cache, $sql, $nrows, $offset, $inputarr); + else $rsreturn = $zthis->SelectLimit($sql, $nrows, $offset, $inputarr, $secs2cache); + + // Before returning the RecordSet, we set the pagination properties we need + if ($rsreturn) { + $rsreturn->rowsPerPage = $nrows; + $rsreturn->AbsolutePage($page); + $rsreturn->AtFirstPage($atfirstpage); + $rsreturn->AtLastPage($atlastpage); + } + return $rsreturn; +} + +function _adodb_getupdatesql(&$zthis,&$rs, $arrFields,$forceUpdate=false,$magicq=false,$force=2) +{ + global $ADODB_QUOTE_FIELDNAMES; + + if (!$rs) { + printf(ADODB_BAD_RS,'GetUpdateSQL'); + return false; + } + + $fieldUpdatedCount = 0; + $arrFields = _array_change_key_case($arrFields); + + $hasnumeric = isset($rs->fields[0]); + $setFields = ''; + + // Loop through all of the fields in the recordset + for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) { + // Get the field from the recordset + $field = $rs->FetchField($i); + + // If the recordset field is one + // of the fields passed in then process. + $upperfname = strtoupper($field->name); + if (adodb_key_exists($upperfname,$arrFields,$force)) { + + // If the existing field value in the recordset + // is different from the value passed in then + // go ahead and append the field name and new value to + // the update query. + + if ($hasnumeric) $val = $rs->fields[$i]; + else if (isset($rs->fields[$upperfname])) $val = $rs->fields[$upperfname]; + else if (isset($rs->fields[$field->name])) $val = $rs->fields[$field->name]; + else if (isset($rs->fields[strtolower($upperfname)])) $val = $rs->fields[strtolower($upperfname)]; + else $val = ''; + + + if ($forceUpdate || strcmp($val, $arrFields[$upperfname])) { + // Set the counter for the number of fields that will be updated. + $fieldUpdatedCount++; + + // Based on the datatype of the field + // Format the value properly for the database + $type = $rs->MetaType($field->type); + + + if ($type == 'null') { + $type = 'C'; + } + + if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES)) + $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote; + else + $fnameq = $upperfname; + + + // is_null requires php 4.0.4 + //********************************************************// + if (is_null($arrFields[$upperfname]) + || (empty($arrFields[$upperfname]) && strlen($arrFields[$upperfname]) == 0) + || $arrFields[$upperfname] === $zthis->null2null + ) + { + switch ($force) { + + //case 0: + // //Ignore empty values. This is allready handled in "adodb_key_exists" function. + //break; + + case 1: + //Set null + $setFields .= $field->name . " = null, "; + break; + + case 2: + //Set empty + $arrFields[$upperfname] = ""; + $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq,$arrFields, $magicq); + break; + default: + case 3: + //Set the value that was given in array, so you can give both null and empty values + if (is_null($arrFields[$upperfname]) || $arrFields[$upperfname] === $zthis->null2null) { + $setFields .= $field->name . " = null, "; + } else { + $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq,$arrFields, $magicq); + } + break; + } + //********************************************************// + } else { + //we do this so each driver can customize the sql for + //DB specific column types. + //Oracle needs BLOB types to be handled with a returning clause + //postgres has special needs as well + $setFields .= _adodb_column_sql($zthis, 'U', $type, $upperfname, $fnameq, + $arrFields, $magicq); + } + } + } + } + + // If there were any modified fields then build the rest of the update query. + if ($fieldUpdatedCount > 0 || $forceUpdate) { + // Get the table name from the existing query. + if (!empty($rs->tableName)) $tableName = $rs->tableName; + else { + preg_match("/FROM\s+".ADODB_TABLE_REGEX."/is", $rs->sql, $tableName); + $tableName = $tableName[1]; + } + // Get the full where clause excluding the word "WHERE" from + // the existing query. + preg_match('/\sWHERE\s(.*)/is', $rs->sql, $whereClause); + + $discard = false; + // not a good hack, improvements? + if ($whereClause) { + #var_dump($whereClause); + if (preg_match('/\s(ORDER\s.*)/is', $whereClause[1], $discard)); + else if (preg_match('/\s(LIMIT\s.*)/is', $whereClause[1], $discard)); + else if (preg_match('/\s(FOR UPDATE.*)/is', $whereClause[1], $discard)); + else preg_match('/\s.*(\) WHERE .*)/is', $whereClause[1], $discard); # see http://sourceforge.net/tracker/index.php?func=detail&aid=1379638&group_id=42718&atid=433976 + } else + $whereClause = array(false,false); + + if ($discard) + $whereClause[1] = substr($whereClause[1], 0, strlen($whereClause[1]) - strlen($discard[1])); + + $sql = 'UPDATE '.$tableName.' SET '.substr($setFields, 0, -2); + if (strlen($whereClause[1]) > 0) + $sql .= ' WHERE '.$whereClause[1]; + + return $sql; + + } else { + return false; + } +} + +function adodb_key_exists($key, &$arr,$force=2) +{ + if ($force<=0) { + // the following is the old behaviour where null or empty fields are ignored + return (!empty($arr[$key])) || (isset($arr[$key]) && strlen($arr[$key])>0); + } + + if (isset($arr[$key])) return true; + ## null check below + if (ADODB_PHPVER >= 0x4010) return array_key_exists($key,$arr); + return false; +} + +/** + * There is a special case of this function for the oci8 driver. + * The proper way to handle an insert w/ a blob in oracle requires + * a returning clause with bind variables and a descriptor blob. + * + * + */ +function _adodb_getinsertsql(&$zthis,&$rs,$arrFields,$magicq=false,$force=2) +{ +static $cacheRS = false; +static $cacheSig = 0; +static $cacheCols; + global $ADODB_QUOTE_FIELDNAMES; + + $tableName = ''; + $values = ''; + $fields = ''; + $recordSet = null; + $arrFields = _array_change_key_case($arrFields); + $fieldInsertedCount = 0; + + if (is_string($rs)) { + //ok we have a table name + //try and get the column info ourself. + $tableName = $rs; + + //we need an object for the recordSet + //because we have to call MetaType. + //php can't do a $rsclass::MetaType() + $rsclass = $zthis->rsPrefix.$zthis->databaseType; + $recordSet = new $rsclass(-1,$zthis->fetchMode); + $recordSet->connection = $zthis; + + if (is_string($cacheRS) && $cacheRS == $rs) { + $columns = $cacheCols; + } else { + $columns = $zthis->MetaColumns( $tableName ); + $cacheRS = $tableName; + $cacheCols = $columns; + } + } else if (is_subclass_of($rs, 'adorecordset')) { + if (isset($rs->insertSig) && is_integer($cacheRS) && $cacheRS == $rs->insertSig) { + $columns = $cacheCols; + } else { + for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) + $columns[] = $rs->FetchField($i); + $cacheRS = $cacheSig; + $cacheCols = $columns; + $rs->insertSig = $cacheSig++; + } + $recordSet = $rs; + + } else { + printf(ADODB_BAD_RS,'GetInsertSQL'); + return false; + } + + // Loop through all of the fields in the recordset + foreach( $columns as $field ) { + $upperfname = strtoupper($field->name); + if (adodb_key_exists($upperfname,$arrFields,$force)) { + $bad = false; + if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES)) + $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote; + else + $fnameq = $upperfname; + + $type = $recordSet->MetaType($field->type); + + /********************************************************/ + if (is_null($arrFields[$upperfname]) + || (empty($arrFields[$upperfname]) && strlen($arrFields[$upperfname]) == 0) + || $arrFields[$upperfname] === $zthis->null2null + ) + { + switch ($force) { + + case 0: // we must always set null if missing + $bad = true; + break; + + case 1: + $values .= "null, "; + break; + + case 2: + //Set empty + $arrFields[$upperfname] = ""; + $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq,$arrFields, $magicq); + break; + + default: + case 3: + //Set the value that was given in array, so you can give both null and empty values + if (is_null($arrFields[$upperfname]) || $arrFields[$upperfname] === $zthis->null2null) { + $values .= "null, "; + } else { + $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq, $arrFields, $magicq); + } + break; + } // switch + + /*********************************************************/ + } else { + //we do this so each driver can customize the sql for + //DB specific column types. + //Oracle needs BLOB types to be handled with a returning clause + //postgres has special needs as well + $values .= _adodb_column_sql($zthis, 'I', $type, $upperfname, $fnameq, + $arrFields, $magicq); + } + + if ($bad) continue; + // Set the counter for the number of fields that will be inserted. + $fieldInsertedCount++; + + + // Get the name of the fields to insert + $fields .= $fnameq . ", "; + } + } + + + // If there were any inserted fields then build the rest of the insert query. + if ($fieldInsertedCount <= 0) return false; + + // Get the table name from the existing query. + if (!$tableName) { + if (!empty($rs->tableName)) $tableName = $rs->tableName; + else if (preg_match("/FROM\s+".ADODB_TABLE_REGEX."/is", $rs->sql, $tableName)) + $tableName = $tableName[1]; + else + return false; + } + + // Strip off the comma and space on the end of both the fields + // and their values. + $fields = substr($fields, 0, -2); + $values = substr($values, 0, -2); + + // Append the fields and their values to the insert query. + return 'INSERT INTO '.$tableName.' ( '.$fields.' ) VALUES ( '.$values.' )'; +} + + +/** + * This private method is used to help construct + * the update/sql which is generated by GetInsertSQL and GetUpdateSQL. + * It handles the string construction of 1 column -> sql string based on + * the column type. We want to do 'safe' handling of BLOBs + * + * @param string the type of sql we are trying to create + * 'I' or 'U'. + * @param string column data type from the db::MetaType() method + * @param string the column name + * @param array the column value + * + * @return string + * + */ +function _adodb_column_sql_oci8(&$zthis,$action, $type, $fname, $fnameq, $arrFields, $magicq) +{ + $sql = ''; + + // Based on the datatype of the field + // Format the value properly for the database + switch($type) { + case 'B': + //in order to handle Blobs correctly, we need + //to do some magic for Oracle + + //we need to create a new descriptor to handle + //this properly + if (!empty($zthis->hasReturningInto)) { + if ($action == 'I') { + $sql = 'empty_blob(), '; + } else { + $sql = $fnameq. '=empty_blob(), '; + } + //add the variable to the returning clause array + //so the user can build this later in + //case they want to add more to it + $zthis->_returningArray[$fname] = ':xx'.$fname.'xx'; + } else if (empty($arrFields[$fname])){ + if ($action == 'I') { + $sql = 'empty_blob(), '; + } else { + $sql = $fnameq. '=empty_blob(), '; + } + } else { + //this is to maintain compatibility + //with older adodb versions. + $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); + } + break; + + case "X": + //we need to do some more magic here for long variables + //to handle these correctly in oracle. + + //create a safe bind var name + //to avoid conflicts w/ dupes. + if (!empty($zthis->hasReturningInto)) { + if ($action == 'I') { + $sql = ':xx'.$fname.'xx, '; + } else { + $sql = $fnameq.'=:xx'.$fname.'xx, '; + } + //add the variable to the returning clause array + //so the user can build this later in + //case they want to add more to it + $zthis->_returningArray[$fname] = ':xx'.$fname.'xx'; + } else { + //this is to maintain compatibility + //with older adodb versions. + $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); + } + break; + + default: + $sql = _adodb_column_sql($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq,false); + break; + } + + return $sql; +} + +function _adodb_column_sql(&$zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq, $recurse=true) +{ + + if ($recurse) { + switch($zthis->dataProvider) { + case 'postgres': + if ($type == 'L') $type = 'C'; + break; + case 'oci8': + return _adodb_column_sql_oci8($zthis, $action, $type, $fname, $fnameq, $arrFields, $magicq); + + } + } + + switch($type) { + case "C": + case "X": + case 'B': + $val = $zthis->qstr($arrFields[$fname],$magicq); + break; + + case "D": + $val = $zthis->DBDate($arrFields[$fname]); + break; + + case "T": + $val = $zthis->DBTimeStamp($arrFields[$fname]); + break; + + case "N": + $val = $arrFields[$fname]; + if (!is_numeric($val)) $val = str_replace(',', '.', (float)$val); + break; + + case "I": + case "R": + $val = $arrFields[$fname]; + if (!is_numeric($val)) $val = (integer) $val; + break; + + default: + $val = str_replace(array("'"," ","("),"",$arrFields[$fname]); // basic sql injection defence + if (empty($val)) $val = '0'; + break; + } + + if ($action == 'I') return $val . ", "; + + + return $fnameq . "=" . $val . ", "; + +} + + + +function _adodb_debug_execute(&$zthis, $sql, $inputarr) +{ + $ss = ''; + if ($inputarr) { + foreach($inputarr as $kk=>$vv) { + if (is_string($vv) && strlen($vv)>64) $vv = substr($vv,0,64).'...'; + if (is_null($vv)) $ss .= "($kk=>null) "; + else $ss .= "($kk=>'$vv') "; + } + $ss = "[ $ss ]"; + } + $sqlTxt = is_array($sql) ? $sql[0] : $sql; + /*str_replace(', ','##1#__^LF',is_array($sql) ? $sql[0] : $sql); + $sqlTxt = str_replace(',',', ',$sqlTxt); + $sqlTxt = str_replace('##1#__^LF', ', ' ,$sqlTxt); + */ + // check if running from browser or command-line + $inBrowser = isset($_SERVER['HTTP_USER_AGENT']); + + $dbt = $zthis->databaseType; + if (isset($zthis->dsnType)) $dbt .= '-'.$zthis->dsnType; + if ($inBrowser) { + if ($ss) { + $ss = '<code>'.htmlspecialchars($ss).'</code>'; + } + if ($zthis->debug === -1) + ADOConnection::outp( "<br>\n($dbt): ".htmlspecialchars($sqlTxt)." $ss\n<br>\n",false); + else if ($zthis->debug !== -99) + ADOConnection::outp( "<hr>\n($dbt): ".htmlspecialchars($sqlTxt)." $ss\n<hr>\n",false); + } else { + $ss = "\n ".$ss; + if ($zthis->debug !== -99) + ADOConnection::outp("-----<hr>\n($dbt): ".$sqlTxt." $ss\n-----<hr>\n",false); + } + + $qID = $zthis->_query($sql,$inputarr); + + /* + Alexios Fakios notes that ErrorMsg() must be called before ErrorNo() for mssql + because ErrorNo() calls Execute('SELECT @ERROR'), causing recursion + */ + if ($zthis->databaseType == 'mssql') { + // ErrorNo is a slow function call in mssql, and not reliable in PHP 4.0.6 + + if($emsg = $zthis->ErrorMsg()) { + if ($err = $zthis->ErrorNo()) { + if ($zthis->debug === -99) + ADOConnection::outp( "<hr>\n($dbt): ".htmlspecialchars($sqlTxt)." $ss\n<hr>\n",false); + + ADOConnection::outp($err.': '.$emsg); + } + } + } else if (!$qID) { + + if ($zthis->debug === -99) + if ($inBrowser) ADOConnection::outp( "<hr>\n($dbt): ".htmlspecialchars($sqlTxt)." $ss\n<hr>\n",false); + else ADOConnection::outp("-----<hr>\n($dbt): ".$sqlTxt."$ss\n-----<hr>\n",false); + + ADOConnection::outp($zthis->ErrorNo() .': '. $zthis->ErrorMsg()); + } + + if ($zthis->debug === 99) _adodb_backtrace(true,9999,2); + return $qID; +} + +# pretty print the debug_backtrace function +function _adodb_backtrace($printOrArr=true,$levels=9999,$skippy=0,$ishtml=null) +{ + if (!function_exists('debug_backtrace')) return ''; + + if ($ishtml === null) $html = (isset($_SERVER['HTTP_USER_AGENT'])); + else $html = $ishtml; + + $fmt = ($html) ? "</font><font color=#808080 size=-1> %% line %4d, file: <a href=\"file:/%s\">%s</a></font>" : "%% line %4d, file: %s"; + + $MAXSTRLEN = 128; + + $s = ($html) ? '<pre align=left>' : ''; + + if (is_array($printOrArr)) $traceArr = $printOrArr; + else $traceArr = debug_backtrace(); + array_shift($traceArr); + array_shift($traceArr); + $tabs = sizeof($traceArr)-2; + + foreach ($traceArr as $arr) { + if ($skippy) {$skippy -= 1; continue;} + $levels -= 1; + if ($levels < 0) break; + + $args = array(); + for ($i=0; $i < $tabs; $i++) $s .= ($html) ? ' ' : "\t"; + $tabs -= 1; + if ($html) $s .= '<font face="Courier New,Courier">'; + if (isset($arr['class'])) $s .= $arr['class'].'.'; + if (isset($arr['args'])) + foreach($arr['args'] as $v) { + if (is_null($v)) $args[] = 'null'; + else if (is_array($v)) $args[] = 'Array['.sizeof($v).']'; + else if (is_object($v)) $args[] = 'Object:'.get_class($v); + else if (is_bool($v)) $args[] = $v ? 'true' : 'false'; + else { + $v = (string) @$v; + $str = htmlspecialchars(str_replace(array("\r","\n"),' ',substr($v,0,$MAXSTRLEN))); + if (strlen($v) > $MAXSTRLEN) $str .= '...'; + $args[] = $str; + } + } + $s .= $arr['function'].'('.implode(', ',$args).')'; + + + $s .= @sprintf($fmt, $arr['line'],$arr['file'],basename($arr['file'])); + + $s .= "\n"; + } + if ($html) $s .= '</pre>'; + if ($printOrArr) print $s; + + return $s; +} +/* +function _adodb_find_from($sql) +{ + + $sql = str_replace(array("\n","\r"), ' ', $sql); + $charCount = strlen($sql); + + $inString = false; + $quote = ''; + $parentheseCount = 0; + $prevChars = ''; + $nextChars = ''; + + + for($i = 0; $i < $charCount; $i++) { + + $char = substr($sql,$i,1); + $prevChars = substr($sql,0,$i); + $nextChars = substr($sql,$i+1); + + if((($char == "'" || $char == '"' || $char == '`') && substr($prevChars,-1,1) != '\\') && $inString === false) { + $quote = $char; + $inString = true; + } + + elseif((($char == "'" || $char == '"' || $char == '`') && substr($prevChars,-1,1) != '\\') && $inString === true && $quote == $char) { + $quote = ""; + $inString = false; + } + + elseif($char == "(" && $inString === false) + $parentheseCount++; + + elseif($char == ")" && $inString === false && $parentheseCount > 0) + $parentheseCount--; + + elseif($parentheseCount <= 0 && $inString === false && $char == " " && strtoupper(substr($prevChars,-5,5)) == " FROM") + return $i; + + } +} +*/ + +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-time.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-time.inc.php new file mode 100644 index 00000000..51bcf195 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb-time.inc.php @@ -0,0 +1,1432 @@ +<?php +/** +ADOdb Date Library, part of the ADOdb abstraction library +Download: http://phplens.com/phpeverywhere/ + +PHP native date functions use integer timestamps for computations. +Because of this, dates are restricted to the years 1901-2038 on Unix +and 1970-2038 on Windows due to integer overflow for dates beyond +those years. This library overcomes these limitations by replacing the +native function's signed integers (normally 32-bits) with PHP floating +point numbers (normally 64-bits). + +Dates from 100 A.D. to 3000 A.D. and later +have been tested. The minimum is 100 A.D. as <100 will invoke the +2 => 4 digit year conversion. The maximum is billions of years in the +future, but this is a theoretical limit as the computation of that year +would take too long with the current implementation of adodb_mktime(). + +This library replaces native functions as follows: + +<pre> + getdate() with adodb_getdate() + date() with adodb_date() + gmdate() with adodb_gmdate() + mktime() with adodb_mktime() + gmmktime() with adodb_gmmktime() + strftime() with adodb_strftime() + strftime() with adodb_gmstrftime() +</pre> + +The parameters are identical, except that adodb_date() accepts a subset +of date()'s field formats. Mktime() will convert from local time to GMT, +and date() will convert from GMT to local time, but daylight savings is +not handled currently. + +This library is independant of the rest of ADOdb, and can be used +as standalone code. + +PERFORMANCE + +For high speed, this library uses the native date functions where +possible, and only switches to PHP code when the dates fall outside +the 32-bit signed integer range. + +GREGORIAN CORRECTION + +Pope Gregory shortened October of A.D. 1582 by ten days. Thursday, +October 4, 1582 (Julian) was followed immediately by Friday, October 15, +1582 (Gregorian). + +Since 0.06, we handle this correctly, so: + +adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582) + == 24 * 3600 (1 day) + +============================================================================= + +COPYRIGHT + +(c) 2003-2005 John Lim and released under BSD-style license except for code by +jackbbs, which includes adodb_mktime, adodb_get_gmt_diff, adodb_is_leap_year +and originally found at http://www.php.net/manual/en/function.mktime.php + +============================================================================= + +BUG REPORTS + +These should be posted to the ADOdb forums at + + http://phplens.com/lens/lensforum/topics.php?id=4 + +============================================================================= + +FUNCTION DESCRIPTIONS + + +** FUNCTION adodb_getdate($date=false) + +Returns an array containing date information, as getdate(), but supports +dates greater than 1901 to 2038. The local date/time format is derived from a +heuristic the first time adodb_getdate is called. + + +** FUNCTION adodb_date($fmt, $timestamp = false) + +Convert a timestamp to a formatted local date. If $timestamp is not defined, the +current timestamp is used. Unlike the function date(), it supports dates +outside the 1901 to 2038 range. + +The format fields that adodb_date supports: + +<pre> + a - "am" or "pm" + A - "AM" or "PM" + d - day of the month, 2 digits with leading zeros; i.e. "01" to "31" + D - day of the week, textual, 3 letters; e.g. "Fri" + F - month, textual, long; e.g. "January" + g - hour, 12-hour format without leading zeros; i.e. "1" to "12" + G - hour, 24-hour format without leading zeros; i.e. "0" to "23" + h - hour, 12-hour format; i.e. "01" to "12" + H - hour, 24-hour format; i.e. "00" to "23" + i - minutes; i.e. "00" to "59" + j - day of the month without leading zeros; i.e. "1" to "31" + l (lowercase 'L') - day of the week, textual, long; e.g. "Friday" + L - boolean for whether it is a leap year; i.e. "0" or "1" + m - month; i.e. "01" to "12" + M - month, textual, 3 letters; e.g. "Jan" + n - month without leading zeros; i.e. "1" to "12" + O - Difference to Greenwich time in hours; e.g. "+0200" + Q - Quarter, as in 1, 2, 3, 4 + r - RFC 2822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200" + s - seconds; i.e. "00" to "59" + S - English ordinal suffix for the day of the month, 2 characters; + i.e. "st", "nd", "rd" or "th" + t - number of days in the given month; i.e. "28" to "31" + T - Timezone setting of this machine; e.g. "EST" or "MDT" + U - seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) + w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday) + Y - year, 4 digits; e.g. "1999" + y - year, 2 digits; e.g. "99" + z - day of the year; i.e. "0" to "365" + Z - timezone offset in seconds (i.e. "-43200" to "43200"). + The offset for timezones west of UTC is always negative, + and for those east of UTC is always positive. +</pre> + +Unsupported: +<pre> + B - Swatch Internet time + I (capital i) - "1" if Daylight Savings Time, "0" otherwise. + W - ISO-8601 week number of year, weeks starting on Monday + +</pre> + + +** FUNCTION adodb_date2($fmt, $isoDateString = false) +Same as adodb_date, but 2nd parameter accepts iso date, eg. + + adodb_date2('d-M-Y H:i','2003-12-25 13:01:34'); + + +** FUNCTION adodb_gmdate($fmt, $timestamp = false) + +Convert a timestamp to a formatted GMT date. If $timestamp is not defined, the +current timestamp is used. Unlike the function date(), it supports dates +outside the 1901 to 2038 range. + + +** FUNCTION adodb_mktime($hr, $min, $sec[, $month, $day, $year]) + +Converts a local date to a unix timestamp. Unlike the function mktime(), it supports +dates outside the 1901 to 2038 range. All parameters are optional. + + +** FUNCTION adodb_gmmktime($hr, $min, $sec [, $month, $day, $year]) + +Converts a gmt date to a unix timestamp. Unlike the function gmmktime(), it supports +dates outside the 1901 to 2038 range. Differs from gmmktime() in that all parameters +are currently compulsory. + +** FUNCTION adodb_gmstrftime($fmt, $timestamp = false) +Convert a timestamp to a formatted GMT date. + +** FUNCTION adodb_strftime($fmt, $timestamp = false) + +Convert a timestamp to a formatted local date. Internally converts $fmt into +adodb_date format, then echo result. + +For best results, you can define the local date format yourself. Define a global +variable $ADODB_DATE_LOCALE which is an array, 1st element is date format using +adodb_date syntax, and 2nd element is the time format, also in adodb_date syntax. + + eg. $ADODB_DATE_LOCALE = array('d/m/Y','H:i:s'); + + Supported format codes: + +<pre> + %a - abbreviated weekday name according to the current locale + %A - full weekday name according to the current locale + %b - abbreviated month name according to the current locale + %B - full month name according to the current locale + %c - preferred date and time representation for the current locale + %d - day of the month as a decimal number (range 01 to 31) + %D - same as %m/%d/%y + %e - day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31') + %h - same as %b + %H - hour as a decimal number using a 24-hour clock (range 00 to 23) + %I - hour as a decimal number using a 12-hour clock (range 01 to 12) + %m - month as a decimal number (range 01 to 12) + %M - minute as a decimal number + %n - newline character + %p - either `am' or `pm' according to the given time value, or the corresponding strings for the current locale + %r - time in a.m. and p.m. notation + %R - time in 24 hour notation + %S - second as a decimal number + %t - tab character + %T - current time, equal to %H:%M:%S + %x - preferred date representation for the current locale without the time + %X - preferred time representation for the current locale without the date + %y - year as a decimal number without a century (range 00 to 99) + %Y - year as a decimal number including the century + %Z - time zone or name or abbreviation + %% - a literal `%' character +</pre> + + Unsupported codes: +<pre> + %C - century number (the year divided by 100 and truncated to an integer, range 00 to 99) + %g - like %G, but without the century. + %G - The 4-digit year corresponding to the ISO week number (see %V). + This has the same format and value as %Y, except that if the ISO week number belongs + to the previous or next year, that year is used instead. + %j - day of the year as a decimal number (range 001 to 366) + %u - weekday as a decimal number [1,7], with 1 representing Monday + %U - week number of the current year as a decimal number, starting + with the first Sunday as the first day of the first week + %V - The ISO 8601:1988 week number of the current year as a decimal number, + range 01 to 53, where week 1 is the first week that has at least 4 days in the + current year, and with Monday as the first day of the week. (Use %G or %g for + the year component that corresponds to the week number for the specified timestamp.) + %w - day of the week as a decimal, Sunday being 0 + %W - week number of the current year as a decimal number, starting with the + first Monday as the first day of the first week +</pre> + +============================================================================= + +NOTES + +Useful url for generating test timestamps: + http://www.4webhelp.net/us/timestamp.php + +Possible future optimizations include + +a. Using an algorithm similar to Plauger's in "The Standard C Library" +(page 428, xttotm.c _Ttotm() function). Plauger's algorithm will not +work outside 32-bit signed range, so i decided not to implement it. + +b. Implement daylight savings, which looks awfully complicated, see + http://webexhibits.org/daylightsaving/ + + +CHANGELOG + +- 11 Feb 2008 0.33 +* Bug in 0.32 fix for hour handling. Fixed. + +- 1 Feb 2008 0.32 +* Now adodb_mktime(0,0,0,12+$m,20,2040) works properly. + +- 10 Jan 2008 0.31 +* Now adodb_mktime(0,0,0,24,1,2037) works correctly. + +- 15 July 2007 0.30 +Added PHP 5.2.0 compatability fixes. + * gmtime behaviour for 1970 has changed. We use the actual date if it is between 1970 to 2038 to get the + * timezone, otherwise we use the current year as the baseline to retrieve the timezone. + * Also the timezone's in php 5.2.* support historical data better, eg. if timezone today was +8, but + in 1970 it was +7:30, then php 5.2 return +7:30, while this library will use +8. + * + +- 19 March 2006 0.24 +Changed strftime() locale detection, because some locales prepend the day of week to the date when %c is used. + +- 10 Feb 2006 0.23 +PHP5 compat: when we detect PHP5, the RFC2822 format for gmt 0000hrs is changed from -0000 to +0000. + In PHP4, we will still use -0000 for 100% compat with PHP4. + +- 08 Sept 2005 0.22 +In adodb_date2(), $is_gmt not supported properly. Fixed. + +- 18 July 2005 0.21 +In PHP 4.3.11, the 'r' format has changed. Leading 0 in day is added. Changed for compat. +Added support for negative months in adodb_mktime(). + +- 24 Feb 2005 0.20 +Added limited strftime/gmstrftime support. x10 improvement in performance of adodb_date(). + +- 21 Dec 2004 0.17 +In adodb_getdate(), the timestamp was accidentally converted to gmt when $is_gmt is false. +Also adodb_mktime(0,0,0) did not work properly. Both fixed thx Mauro. + +- 17 Nov 2004 0.16 +Removed intval typecast in adodb_mktime() for secs, allowing: + adodb_mktime(0,0,0 + 2236672153,1,1,1934); +Suggested by Ryan. + +- 18 July 2004 0.15 +All params in adodb_mktime were formerly compulsory. Now only the hour, min, secs is compulsory. +This brings it more in line with mktime (still not identical). + +- 23 June 2004 0.14 + +Allow you to define your own daylights savings function, adodb_daylight_sv. +If the function is defined (somewhere in an include), then you can correct for daylights savings. + +In this example, we apply daylights savings in June or July, adding one hour. This is extremely +unrealistic as it does not take into account time-zone, geographic location, current year. + +function adodb_daylight_sv(&$arr, $is_gmt) +{ + if ($is_gmt) return; + $m = $arr['mon']; + if ($m == 6 || $m == 7) $arr['hours'] += 1; +} + +This is only called by adodb_date() and not by adodb_mktime(). + +The format of $arr is +Array ( + [seconds] => 0 + [minutes] => 0 + [hours] => 0 + [mday] => 1 # day of month, eg 1st day of the month + [mon] => 2 # month (eg. Feb) + [year] => 2102 + [yday] => 31 # days in current year + [leap] => # true if leap year + [ndays] => 28 # no of days in current month + ) + + +- 28 Apr 2004 0.13 +Fixed adodb_date to properly support $is_gmt. Thx to Dimitar Angelov. + +- 20 Mar 2004 0.12 +Fixed month calculation error in adodb_date. 2102-June-01 appeared as 2102-May-32. + +- 26 Oct 2003 0.11 +Because of daylight savings problems (some systems apply daylight savings to +January!!!), changed adodb_get_gmt_diff() to ignore daylight savings. + +- 9 Aug 2003 0.10 +Fixed bug with dates after 2038. +See http://phplens.com/lens/lensforum/msgs.php?id=6980 + +- 1 July 2003 0.09 +Added support for Q (Quarter). +Added adodb_date2(), which accepts ISO date in 2nd param + +- 3 March 2003 0.08 +Added support for 'S' adodb_date() format char. Added constant ADODB_ALLOW_NEGATIVE_TS +if you want PHP to handle negative timestamps between 1901 to 1969. + +- 27 Feb 2003 0.07 +All negative numbers handled by adodb now because of RH 7.3+ problems. +See http://bugs.php.net/bug.php?id=20048&edit=2 + +- 4 Feb 2003 0.06 +Fixed a typo, 1852 changed to 1582! This means that pre-1852 dates +are now correctly handled. + +- 29 Jan 2003 0.05 + +Leap year checking differs under Julian calendar (pre 1582). Also +leap year code optimized by checking for most common case first. + +We also handle month overflow correctly in mktime (eg month set to 13). + +Day overflow for less than one month's days is supported. + +- 28 Jan 2003 0.04 + +Gregorian correction handled. In PHP5, we might throw an error if +mktime uses invalid dates around 5-14 Oct 1582. Released with ADOdb 3.10. +Added limbo 5-14 Oct 1582 check, when we set to 15 Oct 1582. + +- 27 Jan 2003 0.03 + +Fixed some more month problems due to gmt issues. Added constant ADODB_DATE_VERSION. +Fixed calculation of days since start of year for <1970. + +- 27 Jan 2003 0.02 + +Changed _adodb_getdate() to inline leap year checking for better performance. +Fixed problem with time-zones west of GMT +0000. + +- 24 Jan 2003 0.01 + +First implementation. +*/ + + +/* Initialization */ + +/* + Version Number +*/ +define('ADODB_DATE_VERSION',0.33); + +$ADODB_DATETIME_CLASS = (PHP_VERSION >= 5.2); + +/* + This code was originally for windows. But apparently this problem happens + also with Linux, RH 7.3 and later! + + glibc-2.2.5-34 and greater has been changed to return -1 for dates < + 1970. This used to work. The problem exists with RedHat 7.3 and 8.0 + echo (mktime(0, 0, 0, 1, 1, 1960)); // prints -1 + + References: + http://bugs.php.net/bug.php?id=20048&edit=2 + http://lists.debian.org/debian-glibc/2002/debian-glibc-200205/msg00010.html +*/ + +if (!defined('ADODB_ALLOW_NEGATIVE_TS')) define('ADODB_NO_NEGATIVE_TS',1); + +function adodb_date_test_date($y1,$m,$d=13) +{ + $h = round(rand()% 24); + $t = adodb_mktime($h,0,0,$m,$d,$y1); + $rez = adodb_date('Y-n-j H:i:s',$t); + if ($h == 0) $h = '00'; + else if ($h < 10) $h = '0'.$h; + if ("$y1-$m-$d $h:00:00" != $rez) { + print "<b>$y1 error, expected=$y1-$m-$d $h:00:00, adodb=$rez</b><br>"; + return false; + } + return true; +} + +function adodb_date_test_strftime($fmt) +{ + $s1 = strftime($fmt); + $s2 = adodb_strftime($fmt); + + if ($s1 == $s2) return true; + + echo "error for $fmt, strftime=$s1, adodb=$s2<br>"; + return false; +} + +/** + Test Suite +*/ +function adodb_date_test() +{ + + for ($m=-24; $m<=24; $m++) + echo "$m :",adodb_date('d-m-Y',adodb_mktime(0,0,0,1+$m,20,2040)),"<br>"; + + // cytopia edit + error_reporting(E_ERROR | E_WARNING | E_PARSE); + //error_reporting(E_ALL & ~E_DEPRECATED); + //error_reporting(E_ALL); + print "<h4>Testing adodb_date and adodb_mktime. version=".ADODB_DATE_VERSION.' PHP='.PHP_VERSION."</h4>"; + @set_time_limit(0); + $fail = false; + + // This flag disables calling of PHP native functions, so we can properly test the code + if (!defined('ADODB_TEST_DATES')) define('ADODB_TEST_DATES',1); + + $t = time(); + + + $fmt = 'Y-m-d H:i:s'; + echo '<pre>'; + echo 'adodb: ',adodb_date($fmt,$t),'<br>'; + echo 'php : ',date($fmt,$t),'<br>'; + echo '</pre>'; + + adodb_date_test_strftime('%Y %m %x %X'); + adodb_date_test_strftime("%A %d %B %Y"); + adodb_date_test_strftime("%H %M S"); + + $t = adodb_mktime(0,0,0); + if (!(adodb_date('Y-m-d') == date('Y-m-d'))) print 'Error in '.adodb_mktime(0,0,0).'<br>'; + + $t = adodb_mktime(0,0,0,6,1,2102); + if (!(adodb_date('Y-m-d',$t) == '2102-06-01')) print 'Error in '.adodb_date('Y-m-d',$t).'<br>'; + + $t = adodb_mktime(0,0,0,2,1,2102); + if (!(adodb_date('Y-m-d',$t) == '2102-02-01')) print 'Error in '.adodb_date('Y-m-d',$t).'<br>'; + + + print "<p>Testing gregorian <=> julian conversion<p>"; + $t = adodb_mktime(0,0,0,10,11,1492); + //http://www.holidayorigins.com/html/columbus_day.html - Friday check + if (!(adodb_date('D Y-m-d',$t) == 'Fri 1492-10-11')) print 'Error in Columbus landing<br>'; + + $t = adodb_mktime(0,0,0,2,29,1500); + if (!(adodb_date('Y-m-d',$t) == '1500-02-29')) print 'Error in julian leap years<br>'; + + $t = adodb_mktime(0,0,0,2,29,1700); + if (!(adodb_date('Y-m-d',$t) == '1700-03-01')) print 'Error in gregorian leap years<br>'; + + print adodb_mktime(0,0,0,10,4,1582).' '; + print adodb_mktime(0,0,0,10,15,1582); + $diff = (adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582)); + if ($diff != 3600*24) print " <b>Error in gregorian correction = ".($diff/3600/24)." days </b><br>"; + + print " 15 Oct 1582, Fri=".(adodb_dow(1582,10,15) == 5 ? 'Fri' : '<b>Error</b>')."<br>"; + print " 4 Oct 1582, Thu=".(adodb_dow(1582,10,4) == 4 ? 'Thu' : '<b>Error</b>')."<br>"; + + print "<p>Testing overflow<p>"; + + $t = adodb_mktime(0,0,0,3,33,1965); + if (!(adodb_date('Y-m-d',$t) == '1965-04-02')) print 'Error in day overflow 1 <br>'; + $t = adodb_mktime(0,0,0,4,33,1971); + if (!(adodb_date('Y-m-d',$t) == '1971-05-03')) print 'Error in day overflow 2 <br>'; + $t = adodb_mktime(0,0,0,1,60,1965); + if (!(adodb_date('Y-m-d',$t) == '1965-03-01')) print 'Error in day overflow 3 '.adodb_date('Y-m-d',$t).' <br>'; + $t = adodb_mktime(0,0,0,12,32,1965); + if (!(adodb_date('Y-m-d',$t) == '1966-01-01')) print 'Error in day overflow 4 '.adodb_date('Y-m-d',$t).' <br>'; + $t = adodb_mktime(0,0,0,12,63,1965); + if (!(adodb_date('Y-m-d',$t) == '1966-02-01')) print 'Error in day overflow 5 '.adodb_date('Y-m-d',$t).' <br>'; + $t = adodb_mktime(0,0,0,13,3,1965); + if (!(adodb_date('Y-m-d',$t) == '1966-01-03')) print 'Error in mth overflow 1 <br>'; + + print "Testing 2-digit => 4-digit year conversion<p>"; + if (adodb_year_digit_check(00) != 2000) print "Err 2-digit 2000<br>"; + if (adodb_year_digit_check(10) != 2010) print "Err 2-digit 2010<br>"; + if (adodb_year_digit_check(20) != 2020) print "Err 2-digit 2020<br>"; + if (adodb_year_digit_check(30) != 2030) print "Err 2-digit 2030<br>"; + if (adodb_year_digit_check(40) != 1940) print "Err 2-digit 1940<br>"; + if (adodb_year_digit_check(50) != 1950) print "Err 2-digit 1950<br>"; + if (adodb_year_digit_check(90) != 1990) print "Err 2-digit 1990<br>"; + + // Test string formating + print "<p>Testing date formating</p>"; + + $fmt = '\d\a\t\e T Y-m-d H:i:s a A d D F g G h H i j l L m M n O \R\F\C2822 r s t U w y Y z Z 2003'; + $s1 = date($fmt,0); + $s2 = adodb_date($fmt,0); + if ($s1 != $s2) { + print " date() 0 failed<br>$s1<br>$s2<br>"; + } + flush(); + for ($i=100; --$i > 0; ) { + + $ts = 3600.0*((rand()%60000)+(rand()%60000))+(rand()%60000); + $s1 = date($fmt,$ts); + $s2 = adodb_date($fmt,$ts); + //print "$s1 <br>$s2 <p>"; + $pos = strcmp($s1,$s2); + + if (($s1) != ($s2)) { + for ($j=0,$k=strlen($s1); $j < $k; $j++) { + if ($s1[$j] != $s2[$j]) { + print substr($s1,$j).' '; + break; + } + } + print "<b>Error date(): $ts<br><pre> + \"$s1\" (date len=".strlen($s1).") + \"$s2\" (adodb_date len=".strlen($s2).")</b></pre><br>"; + $fail = true; + } + + $a1 = getdate($ts); + $a2 = adodb_getdate($ts); + $rez = array_diff($a1,$a2); + if (sizeof($rez)>0) { + print "<b>Error getdate() $ts</b><br>"; + print_r($a1); + print "<br>"; + print_r($a2); + print "<p>"; + $fail = true; + } + } + + // Test generation of dates outside 1901-2038 + print "<p>Testing random dates between 100 and 4000</p>"; + adodb_date_test_date(100,1); + for ($i=100; --$i >= 0;) { + $y1 = 100+rand(0,1970-100); + $m = rand(1,12); + adodb_date_test_date($y1,$m); + + $y1 = 3000-rand(0,3000-1970); + adodb_date_test_date($y1,$m); + } + print '<p>'; + $start = 1960+rand(0,10); + $yrs = 12; + $i = 365.25*86400*($start-1970); + $offset = 36000+rand(10000,60000); + $max = 365*$yrs*86400; + $lastyear = 0; + + // we generate a timestamp, convert it to a date, and convert it back to a timestamp + // and check if the roundtrip broke the original timestamp value. + print "Testing $start to ".($start+$yrs).", or $max seconds, offset=$offset: "; + $cnt = 0; + for ($max += $i; $i < $max; $i += $offset) { + $ret = adodb_date('m,d,Y,H,i,s',$i); + $arr = explode(',',$ret); + if ($lastyear != $arr[2]) { + $lastyear = $arr[2]; + print " $lastyear "; + flush(); + } + $newi = adodb_mktime($arr[3],$arr[4],$arr[5],$arr[0],$arr[1],$arr[2]); + if ($i != $newi) { + print "Error at $i, adodb_mktime returned $newi ($ret)"; + $fail = true; + break; + } + $cnt += 1; + } + echo "Tested $cnt dates<br>"; + if (!$fail) print "<p>Passed !</p>"; + else print "<p><b>Failed</b> :-(</p>"; +} + +/** + Returns day of week, 0 = Sunday,... 6=Saturday. + Algorithm from PEAR::Date_Calc +*/ +function adodb_dow($year, $month, $day) +{ +/* +Pope Gregory removed 10 days - October 5 to October 14 - from the year 1582 and +proclaimed that from that time onwards 3 days would be dropped from the calendar +every 400 years. + +Thursday, October 4, 1582 (Julian) was followed immediately by Friday, October 15, 1582 (Gregorian). +*/ + if ($year <= 1582) { + if ($year < 1582 || + ($year == 1582 && ($month < 10 || ($month == 10 && $day < 15)))) $greg_correction = 3; + else + $greg_correction = 0; + } else + $greg_correction = 0; + + if($month > 2) + $month -= 2; + else { + $month += 10; + $year--; + } + + $day = floor((13 * $month - 1) / 5) + + $day + ($year % 100) + + floor(($year % 100) / 4) + + floor(($year / 100) / 4) - 2 * + floor($year / 100) + 77 + $greg_correction; + + return $day - 7 * floor($day / 7); +} + + +/** + Checks for leap year, returns true if it is. No 2-digit year check. Also + handles julian calendar correctly. +*/ +function _adodb_is_leap_year($year) +{ + if ($year % 4 != 0) return false; + + if ($year % 400 == 0) { + return true; + // if gregorian calendar (>1582), century not-divisible by 400 is not leap + } else if ($year > 1582 && $year % 100 == 0 ) { + return false; + } + + return true; +} + + +/** + checks for leap year, returns true if it is. Has 2-digit year check +*/ +function adodb_is_leap_year($year) +{ + return _adodb_is_leap_year(adodb_year_digit_check($year)); +} + +/** + Fix 2-digit years. Works for any century. + Assumes that if 2-digit is more than 30 years in future, then previous century. +*/ +function adodb_year_digit_check($y) +{ + if ($y < 100) { + + $yr = (integer) date("Y"); + $century = (integer) ($yr /100); + + if ($yr%100 > 50) { + $c1 = $century + 1; + $c0 = $century; + } else { + $c1 = $century; + $c0 = $century - 1; + } + $c1 *= 100; + // if 2-digit year is less than 30 years in future, set it to this century + // otherwise if more than 30 years in future, then we set 2-digit year to the prev century. + if (($y + $c1) < $yr+30) $y = $y + $c1; + else $y = $y + $c0*100; + } + return $y; +} + +function adodb_get_gmt_diff_ts($ts) +{ + if (0 <= $ts && $ts <= 0x7FFFFFFF) { // check if number in 32-bit signed range) { + $arr = getdate($ts); + $y = $arr['year']; + $m = $arr['mon']; + $d = $arr['mday']; + return adodb_get_gmt_diff($y,$m,$d); + } else { + return adodb_get_gmt_diff(false,false,false); + } + +} + +/** + get local time zone offset from GMT. Does not handle historical timezones before 1970. +*/ +function adodb_get_gmt_diff($y,$m,$d) +{ +static $TZ,$tzo; +global $ADODB_DATETIME_CLASS; + + if (!defined('ADODB_TEST_DATES')) $y = false; + else if ($y < 1970 || $y >= 2038) $y = false; + + if ($ADODB_DATETIME_CLASS && $y !== false) { + $dt = new DateTime(); + $dt->setISODate($y,$m,$d); + if (empty($tzo)) { + $tzo = new DateTimeZone(date_default_timezone_get()); + # $tzt = timezone_transitions_get( $tzo ); + } + return -$tzo->getOffset($dt); + } else { + if (isset($TZ)) return $TZ; + $y = date('Y'); + $TZ = mktime(0,0,0,12,2,$y,0) - gmmktime(0,0,0,12,2,$y,0); + } + + return $TZ; +} + +/** + Returns an array with date info. +*/ +function adodb_getdate($d=false,$fast=false) +{ + if ($d === false) return getdate(); + if (!defined('ADODB_TEST_DATES')) { + if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range + if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer + return @getdate($d); + } + } + return _adodb_getdate($d); +} + +/* +// generate $YRS table for _adodb_getdate() +function adodb_date_gentable($out=true) +{ + + for ($i=1970; $i >= 1600; $i-=10) { + $s = adodb_gmmktime(0,0,0,1,1,$i); + echo "$i => $s,<br>"; + } +} +adodb_date_gentable(); + +for ($i=1970; $i > 1500; $i--) { + +echo "<hr />$i "; + adodb_date_test_date($i,1,1); +} + +*/ + + +$_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); +$_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); + +function adodb_validdate($y,$m,$d) +{ +global $_month_table_normal,$_month_table_leaf; + + if (_adodb_is_leap_year($y)) $marr = $_month_table_leaf; + else $marr = $_month_table_normal; + + if ($m > 12 || $m < 1) return false; + + if ($d > 31 || $d < 1) return false; + + if ($marr[$m] < $d) return false; + + if ($y < 1000 && $y > 3000) return false; + + return true; +} + +/** + Low-level function that returns the getdate() array. We have a special + $fast flag, which if set to true, will return fewer array values, + and is much faster as it does not calculate dow, etc. +*/ +function _adodb_getdate($origd=false,$fast=false,$is_gmt=false) +{ +static $YRS; +global $_month_table_normal,$_month_table_leaf; + + $d = $origd - ($is_gmt ? 0 : adodb_get_gmt_diff_ts($origd)); + $_day_power = 86400; + $_hour_power = 3600; + $_min_power = 60; + + if ($d < -12219321600) $d -= 86400*10; // if 15 Oct 1582 or earlier, gregorian correction + + $_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); + $_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); + + $d366 = $_day_power * 366; + $d365 = $_day_power * 365; + + if ($d < 0) { + + if (empty($YRS)) $YRS = array( + 1970 => 0, + 1960 => -315619200, + 1950 => -631152000, + 1940 => -946771200, + 1930 => -1262304000, + 1920 => -1577923200, + 1910 => -1893456000, + 1900 => -2208988800, + 1890 => -2524521600, + 1880 => -2840140800, + 1870 => -3155673600, + 1860 => -3471292800, + 1850 => -3786825600, + 1840 => -4102444800, + 1830 => -4417977600, + 1820 => -4733596800, + 1810 => -5049129600, + 1800 => -5364662400, + 1790 => -5680195200, + 1780 => -5995814400, + 1770 => -6311347200, + 1760 => -6626966400, + 1750 => -6942499200, + 1740 => -7258118400, + 1730 => -7573651200, + 1720 => -7889270400, + 1710 => -8204803200, + 1700 => -8520336000, + 1690 => -8835868800, + 1680 => -9151488000, + 1670 => -9467020800, + 1660 => -9782640000, + 1650 => -10098172800, + 1640 => -10413792000, + 1630 => -10729324800, + 1620 => -11044944000, + 1610 => -11360476800, + 1600 => -11676096000); + + if ($is_gmt) $origd = $d; + // The valid range of a 32bit signed timestamp is typically from + // Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT + // + + # old algorithm iterates through all years. new algorithm does it in + # 10 year blocks + + /* + # old algo + for ($a = 1970 ; --$a >= 0;) { + $lastd = $d; + + if ($leaf = _adodb_is_leap_year($a)) $d += $d366; + else $d += $d365; + + if ($d >= 0) { + $year = $a; + break; + } + } + */ + + $lastsecs = 0; + $lastyear = 1970; + foreach($YRS as $year => $secs) { + if ($d >= $secs) { + $a = $lastyear; + break; + } + $lastsecs = $secs; + $lastyear = $year; + } + + $d -= $lastsecs; + if (!isset($a)) $a = $lastyear; + + //echo ' yr=',$a,' ', $d,'.'; + + for (; --$a >= 0;) { + $lastd = $d; + + if ($leaf = _adodb_is_leap_year($a)) $d += $d366; + else $d += $d365; + + if ($d >= 0) { + $year = $a; + break; + } + } + /**/ + + $secsInYear = 86400 * ($leaf ? 366 : 365) + $lastd; + + $d = $lastd; + $mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal; + for ($a = 13 ; --$a > 0;) { + $lastd = $d; + $d += $mtab[$a] * $_day_power; + if ($d >= 0) { + $month = $a; + $ndays = $mtab[$a]; + break; + } + } + + $d = $lastd; + $day = $ndays + ceil(($d+1) / ($_day_power)); + + $d += ($ndays - $day+1)* $_day_power; + $hour = floor($d/$_hour_power); + + } else { + for ($a = 1970 ;; $a++) { + $lastd = $d; + + if ($leaf = _adodb_is_leap_year($a)) $d -= $d366; + else $d -= $d365; + if ($d < 0) { + $year = $a; + break; + } + } + $secsInYear = $lastd; + $d = $lastd; + $mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal; + for ($a = 1 ; $a <= 12; $a++) { + $lastd = $d; + $d -= $mtab[$a] * $_day_power; + if ($d < 0) { + $month = $a; + $ndays = $mtab[$a]; + break; + } + } + $d = $lastd; + $day = ceil(($d+1) / $_day_power); + $d = $d - ($day-1) * $_day_power; + $hour = floor($d /$_hour_power); + } + + $d -= $hour * $_hour_power; + $min = floor($d/$_min_power); + $secs = $d - $min * $_min_power; + if ($fast) { + return array( + 'seconds' => $secs, + 'minutes' => $min, + 'hours' => $hour, + 'mday' => $day, + 'mon' => $month, + 'year' => $year, + 'yday' => floor($secsInYear/$_day_power), + 'leap' => $leaf, + 'ndays' => $ndays + ); + } + + + $dow = adodb_dow($year,$month,$day); + + return array( + 'seconds' => $secs, + 'minutes' => $min, + 'hours' => $hour, + 'mday' => $day, + 'wday' => $dow, + 'mon' => $month, + 'year' => $year, + 'yday' => floor($secsInYear/$_day_power), + 'weekday' => gmdate('l',$_day_power*(3+$dow)), + 'month' => gmdate('F',mktime(0,0,0,$month,2,1971)), + 0 => $origd + ); +} +/* + if ($isphp5) + $dates .= sprintf('%s%04d',($gmt<=0)?'+':'-',abs($gmt)/36); + else + $dates .= sprintf('%s%04d',($gmt<0)?'+':'-',abs($gmt)/36); + break;*/ +function adodb_tz_offset($gmt,$isphp5) +{ + $zhrs = abs($gmt)/3600; + $hrs = floor($zhrs); + if ($isphp5) + return sprintf('%s%02d%02d',($gmt<=0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); + else + return sprintf('%s%02d%02d',($gmt<0)?'+':'-',floor($zhrs),($zhrs-$hrs)*60); +} + + +function adodb_gmdate($fmt,$d=false) +{ + return adodb_date($fmt,$d,true); +} + +// accepts unix timestamp and iso date format in $d +function adodb_date2($fmt, $d=false, $is_gmt=false) +{ + if ($d !== false) { + if (!preg_match( + "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ -]?(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", + ($d), $rr)) return adodb_date($fmt,false,$is_gmt); + + if ($rr[1] <= 100 && $rr[2]<= 1) return adodb_date($fmt,false,$is_gmt); + + // h-m-s-MM-DD-YY + if (!isset($rr[5])) $d = adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1],false,$is_gmt); + else $d = @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1],false,$is_gmt); + } + + return adodb_date($fmt,$d,$is_gmt); +} + + +/** + Return formatted date based on timestamp $d +*/ +function adodb_date($fmt,$d=false,$is_gmt=false) +{ +static $daylight; +global $ADODB_DATETIME_CLASS; + + if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt); + if (!defined('ADODB_TEST_DATES')) { + if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range + if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer + return ($is_gmt)? @gmdate($fmt,$d): @date($fmt,$d); + + } + } + $_day_power = 86400; + + $arr = _adodb_getdate($d,true,$is_gmt); + + if (!isset($daylight)) $daylight = function_exists('adodb_daylight_sv'); + if ($daylight) adodb_daylight_sv($arr, $is_gmt); + + $year = $arr['year']; + $month = $arr['mon']; + $day = $arr['mday']; + $hour = $arr['hours']; + $min = $arr['minutes']; + $secs = $arr['seconds']; + + $max = strlen($fmt); + $dates = ''; + + $isphp5 = PHP_VERSION >= 5; + + /* + at this point, we have the following integer vars to manipulate: + $year, $month, $day, $hour, $min, $secs + */ + for ($i=0; $i < $max; $i++) { + switch($fmt[$i]) { + case 'e': + $dates .= date('e'); + break; + case 'T': + if ($ADODB_DATETIME_CLASS) { + $dt = new DateTime(); + $dt->SetDate($year,$month,$day); + $dates .= $dt->Format('T'); + } else + $dates .= date('T'); + break; + // YEAR + case 'L': $dates .= $arr['leap'] ? '1' : '0'; break; + case 'r': // Thu, 21 Dec 2000 16:01:07 +0200 + + // 4.3.11 uses '04 Jun 2004' + // 4.3.8 uses ' 4 Jun 2004' + $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))).', ' + . ($day<10?'0'.$day:$day) . ' '.date('M',mktime(0,0,0,$month,2,1971)).' '.$year.' '; + + if ($hour < 10) $dates .= '0'.$hour; else $dates .= $hour; + + if ($min < 10) $dates .= ':0'.$min; else $dates .= ':'.$min; + + if ($secs < 10) $dates .= ':0'.$secs; else $dates .= ':'.$secs; + + $gmt = adodb_get_gmt_diff($year,$month,$day); + + $dates .= ' '.adodb_tz_offset($gmt,$isphp5); + break; + + case 'Y': $dates .= $year; break; + case 'y': $dates .= substr($year,strlen($year)-2,2); break; + // MONTH + case 'm': if ($month<10) $dates .= '0'.$month; else $dates .= $month; break; + case 'Q': $dates .= ($month+3)>>2; break; + case 'n': $dates .= $month; break; + case 'M': $dates .= date('M',mktime(0,0,0,$month,2,1971)); break; + case 'F': $dates .= date('F',mktime(0,0,0,$month,2,1971)); break; + // DAY + case 't': $dates .= $arr['ndays']; break; + case 'z': $dates .= $arr['yday']; break; + case 'w': $dates .= adodb_dow($year,$month,$day); break; + case 'l': $dates .= gmdate('l',$_day_power*(3+adodb_dow($year,$month,$day))); break; + case 'D': $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))); break; + case 'j': $dates .= $day; break; + case 'd': if ($day<10) $dates .= '0'.$day; else $dates .= $day; break; + case 'S': + $d10 = $day % 10; + if ($d10 == 1) $dates .= 'st'; + else if ($d10 == 2 && $day != 12) $dates .= 'nd'; + else if ($d10 == 3) $dates .= 'rd'; + else $dates .= 'th'; + break; + + // HOUR + case 'Z': + $dates .= ($is_gmt) ? 0 : -adodb_get_gmt_diff($year,$month,$day); break; + case 'O': + $gmt = ($is_gmt) ? 0 : adodb_get_gmt_diff($year,$month,$day); + + $dates .= adodb_tz_offset($gmt,$isphp5); + break; + + case 'H': + if ($hour < 10) $dates .= '0'.$hour; + else $dates .= $hour; + break; + case 'h': + if ($hour > 12) $hh = $hour - 12; + else { + if ($hour == 0) $hh = '12'; + else $hh = $hour; + } + + if ($hh < 10) $dates .= '0'.$hh; + else $dates .= $hh; + break; + + case 'G': + $dates .= $hour; + break; + + case 'g': + if ($hour > 12) $hh = $hour - 12; + else { + if ($hour == 0) $hh = '12'; + else $hh = $hour; + } + $dates .= $hh; + break; + // MINUTES + case 'i': if ($min < 10) $dates .= '0'.$min; else $dates .= $min; break; + // SECONDS + case 'U': $dates .= $d; break; + case 's': if ($secs < 10) $dates .= '0'.$secs; else $dates .= $secs; break; + // AM/PM + // Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM + case 'a': + if ($hour>=12) $dates .= 'pm'; + else $dates .= 'am'; + break; + case 'A': + if ($hour>=12) $dates .= 'PM'; + else $dates .= 'AM'; + break; + default: + $dates .= $fmt[$i]; break; + // ESCAPE + case "\\": + $i++; + if ($i < $max) $dates .= $fmt[$i]; + break; + } + } + return $dates; +} + +/** + Returns a timestamp given a GMT/UTC time. + Note that $is_dst is not implemented and is ignored. +*/ +function adodb_gmmktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false) +{ + return adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst,true); +} + +/** + Return a timestamp given a local time. Originally by jackbbs. + Note that $is_dst is not implemented and is ignored. + + Not a very fast algorithm - O(n) operation. Could be optimized to O(1). +*/ +function adodb_mktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false,$is_gmt=false) +{ + if (!defined('ADODB_TEST_DATES')) { + + if ($mon === false) { + return $is_gmt? @gmmktime($hr,$min,$sec): @mktime($hr,$min,$sec); + } + + // for windows, we don't check 1970 because with timezone differences, + // 1 Jan 1970 could generate negative timestamp, which is illegal + $usephpfns = (1970 < $year && $year < 2038 + || !defined('ADODB_NO_NEGATIVE_TS') && (1901 < $year && $year < 2038) + ); + + + if ($usephpfns && ($year + $mon/12+$day/365.25+$hr/(24*365.25) >= 2038)) $usephpfns = false; + + if ($usephpfns) { + return $is_gmt ? + @gmmktime($hr,$min,$sec,$mon,$day,$year): + @mktime($hr,$min,$sec,$mon,$day,$year); + } + } + + $gmt_different = ($is_gmt) ? 0 : adodb_get_gmt_diff($year,$mon,$day); + + /* + # disabled because some people place large values in $sec. + # however we need it for $mon because we use an array... + $hr = intval($hr); + $min = intval($min); + $sec = intval($sec); + */ + $mon = intval($mon); + $day = intval($day); + $year = intval($year); + + + $year = adodb_year_digit_check($year); + + if ($mon > 12) { + $y = floor(($mon-1)/ 12); + $year += $y; + $mon -= $y*12; + } else if ($mon < 1) { + $y = ceil((1-$mon) / 12); + $year -= $y; + $mon += $y*12; + } + + $_day_power = 86400; + $_hour_power = 3600; + $_min_power = 60; + + $_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31); + $_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31); + + $_total_date = 0; + if ($year >= 1970) { + for ($a = 1970 ; $a <= $year; $a++) { + $leaf = _adodb_is_leap_year($a); + if ($leaf == true) { + $loop_table = $_month_table_leaf; + $_add_date = 366; + } else { + $loop_table = $_month_table_normal; + $_add_date = 365; + } + if ($a < $year) { + $_total_date += $_add_date; + } else { + for($b=1;$b<$mon;$b++) { + $_total_date += $loop_table[$b]; + } + } + } + $_total_date +=$day-1; + $ret = $_total_date * $_day_power + $hr * $_hour_power + $min * $_min_power + $sec + $gmt_different; + + } else { + for ($a = 1969 ; $a >= $year; $a--) { + $leaf = _adodb_is_leap_year($a); + if ($leaf == true) { + $loop_table = $_month_table_leaf; + $_add_date = 366; + } else { + $loop_table = $_month_table_normal; + $_add_date = 365; + } + if ($a > $year) { $_total_date += $_add_date; + } else { + for($b=12;$b>$mon;$b--) { + $_total_date += $loop_table[$b]; + } + } + } + $_total_date += $loop_table[$mon] - $day; + + $_day_time = $hr * $_hour_power + $min * $_min_power + $sec; + $_day_time = $_day_power - $_day_time; + $ret = -( $_total_date * $_day_power + $_day_time - $gmt_different); + if ($ret < -12220185600) $ret += 10*86400; // if earlier than 5 Oct 1582 - gregorian correction + else if ($ret < -12219321600) $ret = -12219321600; // if in limbo, reset to 15 Oct 1582. + } + //print " dmy=$day/$mon/$year $hr:$min:$sec => " .$ret; + return $ret; +} + +function adodb_gmstrftime($fmt, $ts=false) +{ + return adodb_strftime($fmt,$ts,true); +} + +// hack - convert to adodb_date +function adodb_strftime($fmt, $ts=false,$is_gmt=false) +{ +global $ADODB_DATE_LOCALE; + + if (!defined('ADODB_TEST_DATES')) { + if ((abs($ts) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range + if (!defined('ADODB_NO_NEGATIVE_TS') || $ts >= 0) // if windows, must be +ve integer + return ($is_gmt)? @gmstrftime($fmt,$ts): @strftime($fmt,$ts); + + } + } + + if (empty($ADODB_DATE_LOCALE)) { + /* + $tstr = strtoupper(gmstrftime('%c',31366800)); // 30 Dec 1970, 1 am + $sep = substr($tstr,2,1); + $hasAM = strrpos($tstr,'M') !== false; + */ + # see http://phplens.com/lens/lensforum/msgs.php?id=14865 for reasoning, and changelog for version 0.24 + $dstr = gmstrftime('%x',31366800); // 30 Dec 1970, 1 am + $sep = substr($dstr,2,1); + $tstr = strtoupper(gmstrftime('%X',31366800)); // 30 Dec 1970, 1 am + $hasAM = strrpos($tstr,'M') !== false; + + $ADODB_DATE_LOCALE = array(); + $ADODB_DATE_LOCALE[] = strncmp($tstr,'30',2) == 0 ? 'd'.$sep.'m'.$sep.'y' : 'm'.$sep.'d'.$sep.'y'; + $ADODB_DATE_LOCALE[] = ($hasAM) ? 'h:i:s a' : 'H:i:s'; + + } + $inpct = false; + $fmtdate = ''; + for ($i=0,$max = strlen($fmt); $i < $max; $i++) { + $ch = $fmt[$i]; + if ($ch == '%') { + if ($inpct) { + $fmtdate .= '%'; + $inpct = false; + } else + $inpct = true; + } else if ($inpct) { + + $inpct = false; + switch($ch) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'E': + case 'O': + /* ignore format modifiers */ + $inpct = true; + break; + + case 'a': $fmtdate .= 'D'; break; + case 'A': $fmtdate .= 'l'; break; + case 'h': + case 'b': $fmtdate .= 'M'; break; + case 'B': $fmtdate .= 'F'; break; + case 'c': $fmtdate .= $ADODB_DATE_LOCALE[0].$ADODB_DATE_LOCALE[1]; break; + case 'C': $fmtdate .= '\C?'; break; // century + case 'd': $fmtdate .= 'd'; break; + case 'D': $fmtdate .= 'm/d/y'; break; + case 'e': $fmtdate .= 'j'; break; + case 'g': $fmtdate .= '\g?'; break; //? + case 'G': $fmtdate .= '\G?'; break; //? + case 'H': $fmtdate .= 'H'; break; + case 'I': $fmtdate .= 'h'; break; + case 'j': $fmtdate .= '?z'; $parsej = true; break; // wrong as j=1-based, z=0-basd + case 'm': $fmtdate .= 'm'; break; + case 'M': $fmtdate .= 'i'; break; + case 'n': $fmtdate .= "\n"; break; + case 'p': $fmtdate .= 'a'; break; + case 'r': $fmtdate .= 'h:i:s a'; break; + case 'R': $fmtdate .= 'H:i:s'; break; + case 'S': $fmtdate .= 's'; break; + case 't': $fmtdate .= "\t"; break; + case 'T': $fmtdate .= 'H:i:s'; break; + case 'u': $fmtdate .= '?u'; $parseu = true; break; // wrong strftime=1-based, date=0-based + case 'U': $fmtdate .= '?U'; $parseU = true; break;// wrong strftime=1-based, date=0-based + case 'x': $fmtdate .= $ADODB_DATE_LOCALE[0]; break; + case 'X': $fmtdate .= $ADODB_DATE_LOCALE[1]; break; + case 'w': $fmtdate .= '?w'; $parseu = true; break; // wrong strftime=1-based, date=0-based + case 'W': $fmtdate .= '?W'; $parseU = true; break;// wrong strftime=1-based, date=0-based + case 'y': $fmtdate .= 'y'; break; + case 'Y': $fmtdate .= 'Y'; break; + case 'Z': $fmtdate .= 'T'; break; + } + } else if (('A' <= ($ch) && ($ch) <= 'Z' ) || ('a' <= ($ch) && ($ch) <= 'z' )) + $fmtdate .= "\\".$ch; + else + $fmtdate .= $ch; + } + //echo "fmt=",$fmtdate,"<br>"; + if ($ts === false) $ts = time(); + $ret = adodb_date($fmtdate, $ts, $is_gmt); + return $ret; +} + + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb.inc.php new file mode 100644 index 00000000..0187f55c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/adodb.inc.php @@ -0,0 +1,4416 @@ +<?php +/* + * Set tabs to 4 for best viewing. + * + * Latest version is available at http://adodb.sourceforge.net + * + * This is the main include file for ADOdb. + * Database specific drivers are stored in the adodb/drivers/adodb-*.inc.php + * + * The ADOdb files are formatted so that doxygen can be used to generate documentation. + * Doxygen is a documentation generation tool and can be downloaded from http://doxygen.org/ + */ + +/** + \mainpage + + @version V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + + Released under both BSD license and Lesser GPL library license. You can choose which license + you prefer. + + PHP's database access functions are not standardised. This creates a need for a database + class library to hide the differences between the different database API's (encapsulate + the differences) so we can easily switch databases. + + We currently support MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, DB2, + Informix, PostgreSQL, FrontBase, Interbase (Firebird and Borland variants), Foxpro, Access, + ADO, SAP DB, SQLite and ODBC. We have had successful reports of connecting to Progress and + other databases via ODBC. + + Latest Download at http://adodb.sourceforge.net/ + + */ + + if (!defined('_ADODB_LAYER')) { + define('_ADODB_LAYER',1); + + //============================================================================================== + // CONSTANT DEFINITIONS + //============================================================================================== + + + /** + * Set ADODB_DIR to the directory where this file resides... + * This constant was formerly called $ADODB_RootPath + */ + if (!defined('ADODB_DIR')) define('ADODB_DIR',dirname(__FILE__)); + + //============================================================================================== + // GLOBAL VARIABLES + //============================================================================================== + + GLOBAL + $ADODB_vers, // database version + $ADODB_COUNTRECS, // count number of records returned - slows down query + $ADODB_CACHE_DIR, // directory to cache recordsets + $ADODB_CACHE, + $ADODB_CACHE_CLASS, + $ADODB_EXTENSION, // ADODB extension installed + $ADODB_COMPAT_FETCH, // If $ADODB_COUNTRECS and this is true, $rs->fields is available on EOF + $ADODB_FETCH_MODE, // DEFAULT, NUM, ASSOC or BOTH. Default follows native driver default... + $ADODB_GETONE_EOF, + $ADODB_QUOTE_FIELDNAMES; // Allows you to force quotes (backticks) around field names in queries generated by getinsertsql and getupdatesql. + + //============================================================================================== + // GLOBAL SETUP + //============================================================================================== + + $ADODB_EXTENSION = defined('ADODB_EXTENSION'); + + //********************************************************// + /* + Controls $ADODB_FORCE_TYPE mode. Default is ADODB_FORCE_VALUE (3). + Used in GetUpdateSql and GetInsertSql functions. Thx to Niko, nuko#mbnet.fi + + 0 = ignore empty fields. All empty fields in array are ignored. + 1 = force null. All empty, php null and string 'null' fields are changed to sql NULL values. + 2 = force empty. All empty, php null and string 'null' fields are changed to sql empty '' or 0 values. + 3 = force value. Value is left as it is. Php null and string 'null' are set to sql NULL values and empty fields '' are set to empty '' sql values. + */ + define('ADODB_FORCE_IGNORE',0); + define('ADODB_FORCE_NULL',1); + define('ADODB_FORCE_EMPTY',2); + define('ADODB_FORCE_VALUE',3); + //********************************************************// + + + if (!$ADODB_EXTENSION || ADODB_EXTENSION < 4.0) { + + define('ADODB_BAD_RS','<p>Bad $rs in %s. Connection or SQL invalid. Try using $connection->debug=true;</p>'); + + // allow [ ] @ ` " and . in table names + define('ADODB_TABLE_REGEX','([]0-9a-z_\:\"\`\.\@\[-]*)'); + + // prefetching used by oracle + if (!defined('ADODB_PREFETCH_ROWS')) define('ADODB_PREFETCH_ROWS',10); + + + /* + Controls ADODB_FETCH_ASSOC field-name case. Default is 2, use native case-names. + This currently works only with mssql, odbc, oci8po and ibase derived drivers. + + 0 = assoc lowercase field names. $rs->fields['orderid'] + 1 = assoc uppercase field names. $rs->fields['ORDERID'] + 2 = use native-case field names. $rs->fields['OrderID'] + */ + + define('ADODB_FETCH_DEFAULT',0); + define('ADODB_FETCH_NUM',1); + define('ADODB_FETCH_ASSOC',2); + define('ADODB_FETCH_BOTH',3); + + if (!defined('TIMESTAMP_FIRST_YEAR')) define('TIMESTAMP_FIRST_YEAR',100); + + // PHP's version scheme makes converting to numbers difficult - workaround + $_adodb_ver = (float) PHP_VERSION; + if ($_adodb_ver >= 5.2) { + define('ADODB_PHPVER',0x5200); + } else if ($_adodb_ver >= 5.0) { + define('ADODB_PHPVER',0x5000); + } else + die("PHP5 or later required. You are running ".PHP_VERSION); + } + + + //if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE',2); + + + /** + Accepts $src and $dest arrays, replacing string $data + */ + function ADODB_str_replace($src, $dest, $data) + { + if (ADODB_PHPVER >= 0x4050) return str_replace($src,$dest,$data); + + $s = reset($src); + $d = reset($dest); + while ($s !== false) { + $data = str_replace($s,$d,$data); + $s = next($src); + $d = next($dest); + } + return $data; + } + + function ADODB_Setup() + { + GLOBAL + $ADODB_vers, // database version + $ADODB_COUNTRECS, // count number of records returned - slows down query + $ADODB_CACHE_DIR, // directory to cache recordsets + $ADODB_FETCH_MODE, + $ADODB_CACHE, + $ADODB_CACHE_CLASS, + $ADODB_FORCE_TYPE, + $ADODB_GETONE_EOF, + $ADODB_QUOTE_FIELDNAMES; + + if (empty($ADODB_CACHE_CLASS)) $ADODB_CACHE_CLASS = 'ADODB_Cache_File' ; + $ADODB_FETCH_MODE = ADODB_FETCH_DEFAULT; + $ADODB_FORCE_TYPE = ADODB_FORCE_VALUE; + $ADODB_GETONE_EOF = null; + + if (!isset($ADODB_CACHE_DIR)) { + $ADODB_CACHE_DIR = '/tmp'; //(isset($_ENV['TMP'])) ? $_ENV['TMP'] : '/tmp'; + } else { + // do not accept url based paths, eg. http:/ or ftp:/ + if (strpos($ADODB_CACHE_DIR,'://') !== false) + die("Illegal path http:// or ftp://"); + } + + + // Initialize random number generator for randomizing cache flushes + // -- note Since PHP 4.2.0, the seed becomes optional and defaults to a random value if omitted. + srand(((double)microtime())*1000000); + + /** + * ADODB version as a string. + */ + $ADODB_vers = 'V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. Released BSD & LGPL.'; + + /** + * Determines whether recordset->RecordCount() is used. + * Set to false for highest performance -- RecordCount() will always return -1 then + * for databases that provide "virtual" recordcounts... + */ + if (!isset($ADODB_COUNTRECS)) $ADODB_COUNTRECS = true; + } + + + //============================================================================================== + // CHANGE NOTHING BELOW UNLESS YOU ARE DESIGNING ADODB + //============================================================================================== + + ADODB_Setup(); + + //============================================================================================== + // CLASS ADOFieldObject + //============================================================================================== + /** + * Helper class for FetchFields -- holds info on a column + */ + class ADOFieldObject { + var $name = ''; + var $max_length=0; + var $type=""; +/* + // additional fields by dannym... (danny_milo@yahoo.com) + var $not_null = false; + // actually, this has already been built-in in the postgres, fbsql AND mysql module? ^-^ + // so we can as well make not_null standard (leaving it at "false" does not harm anyways) + + var $has_default = false; // this one I have done only in mysql and postgres for now ... + // others to come (dannym) + var $default_value; // default, if any, and supported. Check has_default first. +*/ + } + + // for transaction handling + + function ADODB_TransMonitor($dbms, $fn, $errno, $errmsg, $p1, $p2, &$thisConnection) + { + //print "Errorno ($fn errno=$errno m=$errmsg) "; + $thisConnection->_transOK = false; + if ($thisConnection->_oldRaiseFn) { + $fn = $thisConnection->_oldRaiseFn; + $fn($dbms, $fn, $errno, $errmsg, $p1, $p2,$thisConnection); + } + } + + //------------------ + // class for caching + class ADODB_Cache_File { + + var $createdir = true; // requires creation of temp dirs + + function ADODB_Cache_File() + { + global $ADODB_INCLUDED_CSV; + if (empty($ADODB_INCLUDED_CSV)) include_once(ADODB_DIR.'/adodb-csvlib.inc.php'); + } + + // write serialised recordset to cache item/file + function writecache($filename, $contents, $debug, $secs2cache) + { + return adodb_write_file($filename, $contents,$debug); + } + + // load serialised recordset and unserialise it + function &readcache($filename, &$err, $secs2cache, $rsClass) + { + $rs = csv2rs($filename,$err,$secs2cache,$rsClass); + return $rs; + } + + // flush all items in cache + function flushall($debug=false) + { + global $ADODB_CACHE_DIR; + + $rez = false; + + if (strlen($ADODB_CACHE_DIR) > 1) { + $rez = $this->_dirFlush($ADODB_CACHE_DIR); + if ($debug) ADOConnection::outp( "flushall: $dir<br><pre>\n". $rez."</pre>"); + } + return $rez; + } + + // flush one file in cache + function flushcache($f, $debug=false) + { + if (!@unlink($f)) { + if ($debug) ADOConnection::outp( "flushcache: failed for $f"); + } + } + + function getdirname($hash) + { + global $ADODB_CACHE_DIR; + if (!isset($this->notSafeMode)) $this->notSafeMode = !ini_get('safe_mode'); + return ($this->notSafeMode) ? $ADODB_CACHE_DIR.'/'.substr($hash,0,2) : $ADODB_CACHE_DIR; + } + + // create temp directories + function createdir($hash, $debug) + { + $dir = $this->getdirname($hash); + if ($this->notSafeMode && !file_exists($dir)) { + $oldu = umask(0); + if (!@mkdir($dir,0771)) if(!is_dir($dir) && $debug) ADOConnection::outp("Cannot create $dir"); + umask($oldu); + } + + return $dir; + } + + /** + * Private function to erase all of the files and subdirectories in a directory. + * + * Just specify the directory, and tell it if you want to delete the directory or just clear it out. + * Note: $kill_top_level is used internally in the function to flush subdirectories. + */ + function _dirFlush($dir, $kill_top_level = false) + { + if(!$dh = @opendir($dir)) return; + + while (($obj = readdir($dh))) { + if($obj=='.' || $obj=='..') continue; + $f = $dir.'/'.$obj; + + if (strpos($obj,'.cache')) @unlink($f); + if (is_dir($f)) $this->_dirFlush($f, true); + } + if ($kill_top_level === true) @rmdir($dir); + return true; + } + } + + //============================================================================================== + // CLASS ADOConnection + //============================================================================================== + + /** + * Connection object. For connecting to databases, and executing queries. + */ + class ADOConnection { + // + // PUBLIC VARS + // + var $dataProvider = 'native'; + var $databaseType = ''; /// RDBMS currently in use, eg. odbc, mysql, mssql + var $database = ''; /// Name of database to be used. + var $host = ''; /// The hostname of the database server + var $user = ''; /// The username which is used to connect to the database server. + var $password = ''; /// Password for the username. For security, we no longer store it. + var $debug = false; /// if set to true will output sql statements + var $maxblobsize = 262144; /// maximum size of blobs or large text fields (262144 = 256K)-- some db's die otherwise like foxpro + var $concat_operator = '+'; /// default concat operator -- change to || for Oracle/Interbase + var $substr = 'substr'; /// substring operator + var $length = 'length'; /// string length ofperator + var $random = 'rand()'; /// random function + var $upperCase = 'upper'; /// uppercase function + var $fmtDate = "'Y-m-d'"; /// used by DBDate() as the default date format used by the database + var $fmtTimeStamp = "'Y-m-d, h:i:s A'"; /// used by DBTimeStamp as the default timestamp fmt. + var $true = '1'; /// string that represents TRUE for a database + var $false = '0'; /// string that represents FALSE for a database + var $replaceQuote = "\\'"; /// string to use to replace quotes + var $nameQuote = '"'; /// string to use to quote identifiers and names + var $charSet=false; /// character set to use - only for interbase, postgres and oci8 + var $metaDatabasesSQL = ''; + var $metaTablesSQL = ''; + var $uniqueOrderBy = false; /// All order by columns have to be unique + var $emptyDate = ' '; + var $emptyTimeStamp = ' '; + var $lastInsID = false; + //-- + var $hasInsertID = false; /// supports autoincrement ID? + var $hasAffectedRows = false; /// supports affected rows for update/delete? + var $hasTop = false; /// support mssql/access SELECT TOP 10 * FROM TABLE + var $hasLimit = false; /// support pgsql/mysql SELECT * FROM TABLE LIMIT 10 + var $readOnly = false; /// this is a readonly database - used by phpLens + var $hasMoveFirst = false; /// has ability to run MoveFirst(), scrolling backwards + var $hasGenID = false; /// can generate sequences using GenID(); + var $hasTransactions = true; /// has transactions + //-- + var $genID = 0; /// sequence id used by GenID(); + var $raiseErrorFn = false; /// error function to call + var $isoDates = false; /// accepts dates in ISO format + var $cacheSecs = 3600; /// cache for 1 hour + + // memcache + var $memCache = false; /// should we use memCache instead of caching in files + var $memCacheHost; /// memCache host + var $memCachePort = 11211; /// memCache port + var $memCacheCompress = false; /// Use 'true' to store the item compressed (uses zlib) + + var $sysDate = false; /// name of function that returns the current date + var $sysTimeStamp = false; /// name of function that returns the current timestamp + var $sysUTimeStamp = false; // name of function that returns the current timestamp accurate to the microsecond or nearest fraction + var $arrayClass = 'ADORecordSet_array'; /// name of class used to generate array recordsets, which are pre-downloaded recordsets + + var $noNullStrings = false; /// oracle specific stuff - if true ensures that '' is converted to ' ' + var $numCacheHits = 0; + var $numCacheMisses = 0; + var $pageExecuteCountRows = true; + var $uniqueSort = false; /// indicates that all fields in order by must be unique + var $leftOuter = false; /// operator to use for left outer join in WHERE clause + var $rightOuter = false; /// operator to use for right outer join in WHERE clause + var $ansiOuter = false; /// whether ansi outer join syntax supported + var $autoRollback = false; // autoRollback on PConnect(). + var $poorAffectedRows = false; // affectedRows not working or unreliable + + var $fnExecute = false; + var $fnCacheExecute = false; + var $blobEncodeType = false; // false=not required, 'I'=encode to integer, 'C'=encode to char + var $rsPrefix = "ADORecordSet_"; + + var $autoCommit = true; /// do not modify this yourself - actually private + var $transOff = 0; /// temporarily disable transactions + var $transCnt = 0; /// count of nested transactions + + var $fetchMode=false; + + var $null2null = 'null'; // in autoexecute/getinsertsql/getupdatesql, this value will be converted to a null + var $bulkBind = false; // enable 2D Execute array + // + // PRIVATE VARS + // + var $_oldRaiseFn = false; + var $_transOK = null; + var $_connectionID = false; /// The returned link identifier whenever a successful database connection is made. + var $_errorMsg = false; /// A variable which was used to keep the returned last error message. The value will + /// then returned by the errorMsg() function + var $_errorCode = false; /// Last error code, not guaranteed to be used - only by oci8 + var $_queryID = false; /// This variable keeps the last created result link identifier + + var $_isPersistentConnection = false; /// A boolean variable to state whether its a persistent connection or normal connection. */ + var $_bindInputArray = false; /// set to true if ADOConnection.Execute() permits binding of array parameters. + var $_evalAll = false; + var $_affected = false; + var $_logsql = false; + var $_transmode = ''; // transaction mode + + + + /** + * Constructor + */ + function ADOConnection() + { + die('Virtual Class -- cannot instantiate'); + } + + static function Version() + { + global $ADODB_vers; + + $ok = preg_match( '/^[Vv]([0-9\.]+)/', $ADODB_vers, $matches ); + if (!$ok) return (float) substr($ADODB_vers,1); + else return $matches[1]; + } + + /** + Get server version info... + + @returns An array with 2 elements: $arr['string'] is the description string, + and $arr[version] is the version (also a string). + */ + function ServerInfo() + { + return array('description' => '', 'version' => ''); + } + + function IsConnected() + { + return !empty($this->_connectionID); + } + + function _findvers($str) + { + if (preg_match('/([0-9]+\.([0-9\.])+)/',$str, $arr)) return $arr[1]; + else return ''; + } + + /** + * All error messages go through this bottleneck function. + * You can define your own handler by defining the function name in ADODB_OUTP. + */ + static function outp($msg,$newline=true) + { + global $ADODB_FLUSH,$ADODB_OUTP; + + if (defined('ADODB_OUTP')) { + $fn = ADODB_OUTP; + $fn($msg,$newline); + return; + } else if (isset($ADODB_OUTP)) { + $fn = $ADODB_OUTP; + $fn($msg,$newline); + return; + } + + if ($newline) $msg .= "<br>\n"; + + if (isset($_SERVER['HTTP_USER_AGENT']) || !$newline) echo $msg; + else echo strip_tags($msg); + + + if (!empty($ADODB_FLUSH) && ob_get_length() !== false) flush(); // do not flush if output buffering enabled - useless - thx to Jesse Mullan + + } + + function Time() + { + $rs = $this->_Execute("select $this->sysTimeStamp"); + if ($rs && !$rs->EOF) return $this->UnixTimeStamp(reset($rs->fields)); + + return false; + } + + /** + * Connect to database + * + * @param [argHostname] Host to connect to + * @param [argUsername] Userid to login + * @param [argPassword] Associated password + * @param [argDatabaseName] database + * @param [forceNew] force new connection + * + * @return true or false + */ + function Connect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "", $forceNew = false) + { + if ($argHostname != "") $this->host = $argHostname; + if ($argUsername != "") $this->user = $argUsername; + if ($argPassword != "") $this->password = 'not stored'; // not stored for security reasons + if ($argDatabaseName != "") $this->database = $argDatabaseName; + + $this->_isPersistentConnection = false; + + if ($forceNew) { + if ($rez=$this->_nconnect($this->host, $this->user, $argPassword, $this->database)) return true; + } else { + if ($rez=$this->_connect($this->host, $this->user, $argPassword, $this->database)) return true; + } + if (isset($rez)) { + $err = $this->ErrorMsg(); + if (empty($err)) $err = "Connection error to server '$argHostname' with user '$argUsername'"; + $ret = false; + } else { + $err = "Missing extension for ".$this->dataProvider; + $ret = 0; + } + if ($fn = $this->raiseErrorFn) + $fn($this->databaseType,'CONNECT',$this->ErrorNo(),$err,$this->host,$this->database,$this); + + + $this->_connectionID = false; + if ($this->debug) ADOConnection::outp( $this->host.': '.$err); + return $ret; + } + + function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName) + { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName); + } + + + /** + * Always force a new connection to database - currently only works with oracle + * + * @param [argHostname] Host to connect to + * @param [argUsername] Userid to login + * @param [argPassword] Associated password + * @param [argDatabaseName] database + * + * @return true or false + */ + function NConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") + { + return $this->Connect($argHostname, $argUsername, $argPassword, $argDatabaseName, true); + } + + /** + * Establish persistent connect to database + * + * @param [argHostname] Host to connect to + * @param [argUsername] Userid to login + * @param [argPassword] Associated password + * @param [argDatabaseName] database + * + * @return return true or false + */ + function PConnect($argHostname = "", $argUsername = "", $argPassword = "", $argDatabaseName = "") + { + + if (defined('ADODB_NEVER_PERSIST')) + return $this->Connect($argHostname,$argUsername,$argPassword,$argDatabaseName); + + if ($argHostname != "") $this->host = $argHostname; + if ($argUsername != "") $this->user = $argUsername; + if ($argPassword != "") $this->password = 'not stored'; + if ($argDatabaseName != "") $this->database = $argDatabaseName; + + $this->_isPersistentConnection = true; + + if ($rez = $this->_pconnect($this->host, $this->user, $argPassword, $this->database)) return true; + if (isset($rez)) { + $err = $this->ErrorMsg(); + if (empty($err)) $err = "Connection error to server '$argHostname' with user '$argUsername'"; + $ret = false; + } else { + $err = "Missing extension for ".$this->dataProvider; + $ret = 0; + } + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'PCONNECT',$this->ErrorNo(),$err,$this->host,$this->database,$this); + } + + $this->_connectionID = false; + if ($this->debug) ADOConnection::outp( $this->host.': '.$err); + return $ret; + } + + function outp_throw($msg,$src='WARN',$sql='') + { + if (defined('ADODB_ERROR_HANDLER') && ADODB_ERROR_HANDLER == 'adodb_throw') { + adodb_throw($this->databaseType,$src,-9999,$msg,$sql,false,$this); + return; + } + ADOConnection::outp($msg); + } + + // create cache class. Code is backward compat with old memcache implementation + function _CreateCache() + { + global $ADODB_CACHE, $ADODB_CACHE_CLASS; + + if ($this->memCache) { + global $ADODB_INCLUDED_MEMCACHE; + + if (empty($ADODB_INCLUDED_MEMCACHE)) include(ADODB_DIR.'/adodb-memcache.lib.inc.php'); + $ADODB_CACHE = new ADODB_Cache_MemCache($this); + } else + $ADODB_CACHE = new $ADODB_CACHE_CLASS($this); + + } + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + if (!$col) $col = $this->sysDate; + return $col; // child class implement + } + + /** + * Should prepare the sql statement and return the stmt resource. + * For databases that do not support this, we return the $sql. To ensure + * compatibility with databases that do not support prepare: + * + * $stmt = $db->Prepare("insert into table (id, name) values (?,?)"); + * $db->Execute($stmt,array(1,'Jill')) or die('insert failed'); + * $db->Execute($stmt,array(2,'Joe')) or die('insert failed'); + * + * @param sql SQL to send to database + * + * @return return FALSE, or the prepared statement, or the original sql if + * if the database does not support prepare. + * + */ + function Prepare($sql) + { + return $sql; + } + + /** + * Some databases, eg. mssql require a different function for preparing + * stored procedures. So we cannot use Prepare(). + * + * Should prepare the stored procedure and return the stmt resource. + * For databases that do not support this, we return the $sql. To ensure + * compatibility with databases that do not support prepare: + * + * @param sql SQL to send to database + * + * @return return FALSE, or the prepared statement, or the original sql if + * if the database does not support prepare. + * + */ + function PrepareSP($sql,$param=true) + { + return $this->Prepare($sql,$param); + } + + /** + * PEAR DB Compat + */ + function Quote($s) + { + return $this->qstr($s,false); + } + + /** + Requested by "Karsten Dambekalns" <k.dambekalns@fishfarm.de> + */ + function QMagic($s) + { + return $this->qstr($s,get_magic_quotes_gpc()); + } + + function q(&$s) + { + #if (!empty($this->qNull)) if ($s == 'null') return $s; + $s = $this->qstr($s,false); + } + + /** + * PEAR DB Compat - do not use internally. + */ + function ErrorNative() + { + return $this->ErrorNo(); + } + + + /** + * PEAR DB Compat - do not use internally. + */ + function nextId($seq_name) + { + return $this->GenID($seq_name); + } + + /** + * Lock a row, will escalate and lock the table if row locking not supported + * will normally free the lock at the end of the transaction + * + * @param $table name of table to lock + * @param $where where clause to use, eg: "WHERE row=12". If left empty, will escalate to table lock + */ + function RowLock($table,$where,$col='1 as adodbignore') + { + return false; + } + + function CommitLock($table) + { + return $this->CommitTrans(); + } + + function RollbackLock($table) + { + return $this->RollbackTrans(); + } + + /** + * PEAR DB Compat - do not use internally. + * + * The fetch modes for NUMERIC and ASSOC for PEAR DB and ADODB are identical + * for easy porting :-) + * + * @param mode The fetchmode ADODB_FETCH_ASSOC or ADODB_FETCH_NUM + * @returns The previous fetch mode + */ + function SetFetchMode($mode) + { + $old = $this->fetchMode; + $this->fetchMode = $mode; + + if ($old === false) { + global $ADODB_FETCH_MODE; + return $ADODB_FETCH_MODE; + } + return $old; + } + + + /** + * PEAR DB Compat - do not use internally. + */ + function Query($sql, $inputarr=false) + { + $rs = $this->Execute($sql, $inputarr); + if (!$rs && defined('ADODB_PEAR')) return ADODB_PEAR_Error(); + return $rs; + } + + + /** + * PEAR DB Compat - do not use internally + */ + function LimitQuery($sql, $offset, $count, $params=false) + { + $rs = $this->SelectLimit($sql, $count, $offset, $params); + if (!$rs && defined('ADODB_PEAR')) return ADODB_PEAR_Error(); + return $rs; + } + + + /** + * PEAR DB Compat - do not use internally + */ + function Disconnect() + { + return $this->Close(); + } + + /* + Returns placeholder for parameter, eg. + $DB->Param('a') + + will return ':a' for Oracle, and '?' for most other databases... + + For databases that require positioned params, eg $1, $2, $3 for postgresql, + pass in Param(false) before setting the first parameter. + */ + function Param($name,$type='C') + { + return '?'; + } + + /* + InParameter and OutParameter are self-documenting versions of Parameter(). + */ + function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) + { + return $this->Parameter($stmt,$var,$name,false,$maxLen,$type); + } + + /* + */ + function OutParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false) + { + return $this->Parameter($stmt,$var,$name,true,$maxLen,$type); + + } + + + /* + Usage in oracle + $stmt = $db->Prepare('select * from table where id =:myid and group=:group'); + $db->Parameter($stmt,$id,'myid'); + $db->Parameter($stmt,$group,'group',64); + $db->Execute(); + + @param $stmt Statement returned by Prepare() or PrepareSP(). + @param $var PHP variable to bind to + @param $name Name of stored procedure variable name to bind to. + @param [$isOutput] Indicates direction of parameter 0/false=IN 1=OUT 2= IN/OUT. This is ignored in oci8. + @param [$maxLen] Holds an maximum length of the variable. + @param [$type] The data type of $var. Legal values depend on driver. + + */ + function Parameter(&$stmt,&$var,$name,$isOutput=false,$maxLen=4000,$type=false) + { + return false; + } + + + function IgnoreErrors($saveErrs=false) + { + if (!$saveErrs) { + $saveErrs = array($this->raiseErrorFn,$this->_transOK); + $this->raiseErrorFn = false; + return $saveErrs; + } else { + $this->raiseErrorFn = $saveErrs[0]; + $this->_transOK = $saveErrs[1]; + } + } + + /** + Improved method of initiating a transaction. Used together with CompleteTrans(). + Advantages include: + + a. StartTrans/CompleteTrans is nestable, unlike BeginTrans/CommitTrans/RollbackTrans. + Only the outermost block is treated as a transaction.<br> + b. CompleteTrans auto-detects SQL errors, and will rollback on errors, commit otherwise.<br> + c. All BeginTrans/CommitTrans/RollbackTrans inside a StartTrans/CompleteTrans block + are disabled, making it backward compatible. + */ + function StartTrans($errfn = 'ADODB_TransMonitor') + { + if ($this->transOff > 0) { + $this->transOff += 1; + return true; + } + + $this->_oldRaiseFn = $this->raiseErrorFn; + $this->raiseErrorFn = $errfn; + $this->_transOK = true; + + if ($this->debug && $this->transCnt > 0) ADOConnection::outp("Bad Transaction: StartTrans called within BeginTrans"); + $ok = $this->BeginTrans(); + $this->transOff = 1; + return $ok; + } + + + /** + Used together with StartTrans() to end a transaction. Monitors connection + for sql errors, and will commit or rollback as appropriate. + + @autoComplete if true, monitor sql errors and commit and rollback as appropriate, + and if set to false force rollback even if no SQL error detected. + @returns true on commit, false on rollback. + */ + function CompleteTrans($autoComplete = true) + { + if ($this->transOff > 1) { + $this->transOff -= 1; + return true; + } + $this->raiseErrorFn = $this->_oldRaiseFn; + + $this->transOff = 0; + if ($this->_transOK && $autoComplete) { + if (!$this->CommitTrans()) { + $this->_transOK = false; + if ($this->debug) ADOConnection::outp("Smart Commit failed"); + } else + if ($this->debug) ADOConnection::outp("Smart Commit occurred"); + } else { + $this->_transOK = false; + $this->RollbackTrans(); + if ($this->debug) ADOCOnnection::outp("Smart Rollback occurred"); + } + + return $this->_transOK; + } + + /* + At the end of a StartTrans/CompleteTrans block, perform a rollback. + */ + function FailTrans() + { + if ($this->debug) + if ($this->transOff == 0) { + ADOConnection::outp("FailTrans outside StartTrans/CompleteTrans"); + } else { + ADOConnection::outp("FailTrans was called"); + adodb_backtrace(); + } + $this->_transOK = false; + } + + /** + Check if transaction has failed, only for Smart Transactions. + */ + function HasFailedTrans() + { + if ($this->transOff > 0) return $this->_transOK == false; + return false; + } + + /** + * Execute SQL + * + * @param sql SQL statement to execute, or possibly an array holding prepared statement ($sql[0] will hold sql text) + * @param [inputarr] holds the input data to bind to. Null elements will be set to null. + * @return RecordSet or false + */ + function Execute($sql,$inputarr=false) + { + if ($this->fnExecute) { + $fn = $this->fnExecute; + $ret = $fn($this,$sql,$inputarr); + if (isset($ret)) return $ret; + } + if ($inputarr) { + if (!is_array($inputarr)) $inputarr = array($inputarr); + + $element0 = reset($inputarr); + # is_object check because oci8 descriptors can be passed in + $array_2d = $this->bulkBind && is_array($element0) && !is_object(reset($element0)); + //remove extra memory copy of input -mikefedyk + unset($element0); + + if (!is_array($sql) && !$this->_bindInputArray) { + $sqlarr = explode('?',$sql); + $nparams = sizeof($sqlarr)-1; + if (!$array_2d) $inputarr = array($inputarr); + foreach($inputarr as $arr) { + $sql = ''; $i = 0; + //Use each() instead of foreach to reduce memory usage -mikefedyk + while(list(, $v) = each($arr)) { + $sql .= $sqlarr[$i]; + // from Ron Baldwin <ron.baldwin#sourceprose.com> + // Only quote string types + $typ = gettype($v); + if ($typ == 'string') + //New memory copy of input created here -mikefedyk + $sql .= $this->qstr($v); + else if ($typ == 'double') + $sql .= str_replace(',','.',$v); // locales fix so 1.1 does not get converted to 1,1 + else if ($typ == 'boolean') + $sql .= $v ? $this->true : $this->false; + else if ($typ == 'object') { + if (method_exists($v, '__toString')) $sql .= $this->qstr($v->__toString()); + else $sql .= $this->qstr((string) $v); + } else if ($v === null) + $sql .= 'NULL'; + else + $sql .= $v; + $i += 1; + + if ($i == $nparams) break; + } // while + if (isset($sqlarr[$i])) { + $sql .= $sqlarr[$i]; + if ($i+1 != sizeof($sqlarr)) $this->outp_throw( "Input Array does not match ?: ".htmlspecialchars($sql),'Execute'); + } else if ($i != sizeof($sqlarr)) + $this->outp_throw( "Input array does not match ?: ".htmlspecialchars($sql),'Execute'); + + $ret = $this->_Execute($sql); + if (!$ret) return $ret; + } + } else { + if ($array_2d) { + if (is_string($sql)) + $stmt = $this->Prepare($sql); + else + $stmt = $sql; + + foreach($inputarr as $arr) { + $ret = $this->_Execute($stmt,$arr); + if (!$ret) return $ret; + } + } else { + $ret = $this->_Execute($sql,$inputarr); + } + } + } else { + $ret = $this->_Execute($sql,false); + } + + return $ret; + } + + + function _Execute($sql,$inputarr=false) + { + if ($this->debug) { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + $this->_queryID = _adodb_debug_execute($this, $sql,$inputarr); + } else { + $this->_queryID = @$this->_query($sql,$inputarr); + } + + /************************ + // OK, query executed + *************************/ + + if ($this->_queryID === false) { // error handling if query fails + if ($this->debug == 99) adodb_backtrace(true,5); + $fn = $this->raiseErrorFn; + if ($fn) { + $fn($this->databaseType,'EXECUTE',$this->ErrorNo(),$this->ErrorMsg(),$sql,$inputarr,$this); + } + $false = false; + return $false; + } + + if ($this->_queryID === true) { // return simplified recordset for inserts/updates/deletes with lower overhead + $rsclass = $this->rsPrefix.'empty'; + $rs = (class_exists($rsclass)) ? new $rsclass(): new ADORecordSet_empty(); + + return $rs; + } + + // return real recordset from select statement + $rsclass = $this->rsPrefix.$this->databaseType; + $rs = new $rsclass($this->_queryID,$this->fetchMode); + $rs->connection = $this; // Pablo suggestion + $rs->Init(); + if (is_array($sql)) $rs->sql = $sql[0]; + else $rs->sql = $sql; + if ($rs->_numOfRows <= 0) { + global $ADODB_COUNTRECS; + if ($ADODB_COUNTRECS) { + if (!$rs->EOF) { + $rs = $this->_rs2rs($rs,-1,-1,!is_array($sql)); + $rs->_queryID = $this->_queryID; + } else + $rs->_numOfRows = 0; + } + } + return $rs; + } + + function CreateSequence($seqname='adodbseq',$startID=1) + { + if (empty($this->_genSeqSQL)) return false; + return $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID)); + } + + function DropSequence($seqname='adodbseq') + { + if (empty($this->_dropSeqSQL)) return false; + return $this->Execute(sprintf($this->_dropSeqSQL,$seqname)); + } + + /** + * Generates a sequence id and stores it in $this->genID; + * GenID is only available if $this->hasGenID = true; + * + * @param seqname name of sequence to use + * @param startID if sequence does not exist, start at this ID + * @return 0 if not supported, otherwise a sequence id + */ + function GenID($seqname='adodbseq',$startID=1) + { + if (!$this->hasGenID) { + return 0; // formerly returns false pre 1.60 + } + + $getnext = sprintf($this->_genIDSQL,$seqname); + + $holdtransOK = $this->_transOK; + + $save_handler = $this->raiseErrorFn; + $this->raiseErrorFn = ''; + @($rs = $this->Execute($getnext)); + $this->raiseErrorFn = $save_handler; + + if (!$rs) { + $this->_transOK = $holdtransOK; //if the status was ok before reset + $createseq = $this->Execute(sprintf($this->_genSeqSQL,$seqname,$startID)); + $rs = $this->Execute($getnext); + } + if ($rs && !$rs->EOF) $this->genID = reset($rs->fields); + else $this->genID = 0; // false + + if ($rs) $rs->Close(); + + return $this->genID; + } + + /** + * @param $table string name of the table, not needed by all databases (eg. mysql), default '' + * @param $column string name of the column, not needed by all databases (eg. mysql), default '' + * @return the last inserted ID. Not all databases support this. + */ + function Insert_ID($table='',$column='') + { + if ($this->_logsql && $this->lastInsID) return $this->lastInsID; + if ($this->hasInsertID) return $this->_insertid($table,$column); + if ($this->debug) { + ADOConnection::outp( '<p>Insert_ID error</p>'); + adodb_backtrace(); + } + return false; + } + + + /** + * Portable Insert ID. Pablo Roca <pabloroca#mvps.org> + * + * @return the last inserted ID. All databases support this. But aware possible + * problems in multiuser environments. Heavy test this before deploying. + */ + function PO_Insert_ID($table="", $id="") + { + if ($this->hasInsertID){ + return $this->Insert_ID($table,$id); + } else { + return $this->GetOne("SELECT MAX($id) FROM $table"); + } + } + + /** + * @return # rows affected by UPDATE/DELETE + */ + function Affected_Rows() + { + if ($this->hasAffectedRows) { + if ($this->fnExecute === 'adodb_log_sql') { + if ($this->_logsql && $this->_affected !== false) return $this->_affected; + } + $val = $this->_affectedrows(); + return ($val < 0) ? false : $val; + } + + if ($this->debug) ADOConnection::outp( '<p>Affected_Rows error</p>',false); + return false; + } + + + /** + * @return the last error message + */ + function ErrorMsg() + { + if ($this->_errorMsg) return '!! '.strtoupper($this->dataProvider.' '.$this->databaseType).': '.$this->_errorMsg; + else return ''; + } + + + /** + * @return the last error number. Normally 0 means no error. + */ + function ErrorNo() + { + return ($this->_errorMsg) ? -1 : 0; + } + + function MetaError($err=false) + { + include_once(ADODB_DIR."/adodb-error.inc.php"); + if ($err === false) $err = $this->ErrorNo(); + return adodb_error($this->dataProvider,$this->databaseType,$err); + } + + function MetaErrorMsg($errno) + { + include_once(ADODB_DIR."/adodb-error.inc.php"); + return adodb_errormsg($errno); + } + + /** + * @returns an array with the primary key columns in it. + */ + function MetaPrimaryKeys($table, $owner=false) + { + // owner not used in base class - see oci8 + $p = array(); + $objs = $this->MetaColumns($table); + if ($objs) { + foreach($objs as $v) { + if (!empty($v->primary_key)) + $p[] = $v->name; + } + } + if (sizeof($p)) return $p; + if (function_exists('ADODB_VIEW_PRIMARYKEYS')) + return ADODB_VIEW_PRIMARYKEYS($this->databaseType, $this->database, $table, $owner); + return false; + } + + /** + * @returns assoc array where keys are tables, and values are foreign keys + */ + function MetaForeignKeys($table, $owner=false, $upper=false) + { + return false; + } + /** + * Choose a database to connect to. Many databases do not support this. + * + * @param dbName is the name of the database to select + * @return true or false + */ + function SelectDB($dbName) + {return false;} + + + /** + * Will select, getting rows from $offset (1-based), for $nrows. + * This simulates the MySQL "select * from table limit $offset,$nrows" , and + * the PostgreSQL "select * from table limit $nrows offset $offset". Note that + * MySQL and PostgreSQL parameter ordering is the opposite of the other. + * eg. + * SelectLimit('select * from table',3); will return rows 1 to 3 (1-based) + * SelectLimit('select * from table',3,2); will return rows 3 to 5 (1-based) + * + * Uses SELECT TOP for Microsoft databases (when $this->hasTop is set) + * BUG: Currently SelectLimit fails with $sql with LIMIT or TOP clause already set + * + * @param sql + * @param [offset] is the row to start calculations from (1-based) + * @param [nrows] is the number of rows to get + * @param [inputarr] array of bind variables + * @param [secs2cache] is a private parameter only used by jlim + * @return the recordset ($rs->databaseType == 'array') + */ + function SelectLimit($sql,$nrows=-1,$offset=-1, $inputarr=false,$secs2cache=0) + { + if ($this->hasTop && $nrows > 0) { + // suggested by Reinhard Balling. Access requires top after distinct + // Informix requires first before distinct - F Riosa + $ismssql = (strpos($this->databaseType,'mssql') !== false); + if ($ismssql) $isaccess = false; + else $isaccess = (strpos($this->databaseType,'access') !== false); + + if ($offset <= 0) { + + // access includes ties in result + if ($isaccess) { + $sql = preg_replace( + '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.((integer)$nrows).' ',$sql); + + if ($secs2cache != 0) { + $ret = $this->CacheExecute($secs2cache, $sql,$inputarr); + } else { + $ret = $this->Execute($sql,$inputarr); + } + return $ret; // PHP5 fix + } else if ($ismssql){ + $sql = preg_replace( + '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.((integer)$nrows).' ',$sql); + } else { + $sql = preg_replace( + '/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.((integer)$nrows).' ',$sql); + } + } else { + $nn = $nrows + $offset; + if ($isaccess || $ismssql) { + $sql = preg_replace( + '/(^\s*select\s+(distinctrow|distinct)?)/i','\\1 '.$this->hasTop.' '.$nn.' ',$sql); + } else { + $sql = preg_replace( + '/(^\s*select\s)/i','\\1 '.$this->hasTop.' '.$nn.' ',$sql); + } + } + } + + // if $offset>0, we want to skip rows, and $ADODB_COUNTRECS is set, we buffer rows + // 0 to offset-1 which will be discarded anyway. So we disable $ADODB_COUNTRECS. + global $ADODB_COUNTRECS; + + $savec = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + + + if ($secs2cache != 0) $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); + else $rs = $this->Execute($sql,$inputarr); + + $ADODB_COUNTRECS = $savec; + if ($rs && !$rs->EOF) { + $rs = $this->_rs2rs($rs,$nrows,$offset); + } + //print_r($rs); + return $rs; + } + + /** + * Create serializable recordset. Breaks rs link to connection. + * + * @param rs the recordset to serialize + */ + function SerializableRS(&$rs) + { + $rs2 = $this->_rs2rs($rs); + $ignore = false; + $rs2->connection = $ignore; + + return $rs2; + } + + /** + * Convert database recordset to an array recordset + * input recordset's cursor should be at beginning, and + * old $rs will be closed. + * + * @param rs the recordset to copy + * @param [nrows] number of rows to retrieve (optional) + * @param [offset] offset by number of rows (optional) + * @return the new recordset + */ + function &_rs2rs(&$rs,$nrows=-1,$offset=-1,$close=true) + { + if (! $rs) { + $false = false; + return $false; + } + $dbtype = $rs->databaseType; + if (!$dbtype) { + $rs = $rs; // required to prevent crashing in 4.2.1, but does not happen in 4.3.1 -- why ? + return $rs; + } + if (($dbtype == 'array' || $dbtype == 'csv') && $nrows == -1 && $offset == -1) { + $rs->MoveFirst(); + $rs = $rs; // required to prevent crashing in 4.2.1, but does not happen in 4.3.1-- why ? + return $rs; + } + $flds = array(); + for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) { + $flds[] = $rs->FetchField($i); + } + + $arr = $rs->GetArrayLimit($nrows,$offset); + //print_r($arr); + if ($close) $rs->Close(); + + $arrayClass = $this->arrayClass; + + $rs2 = new $arrayClass(); + $rs2->connection = $this; + $rs2->sql = $rs->sql; + $rs2->dataProvider = $this->dataProvider; + $rs2->InitArrayFields($arr,$flds); + $rs2->fetchMode = isset($rs->adodbFetchMode) ? $rs->adodbFetchMode : $rs->fetchMode; + return $rs2; + } + + /* + * Return all rows. Compat with PEAR DB + */ + function GetAll($sql, $inputarr=false) + { + $arr = $this->GetArray($sql,$inputarr); + return $arr; + } + + function GetAssoc($sql, $inputarr=false,$force_array = false, $first2cols = false) + { + $rs = $this->Execute($sql, $inputarr); + if (!$rs) { + $false = false; + return $false; + } + $arr = $rs->GetAssoc($force_array,$first2cols); + return $arr; + } + + function CacheGetAssoc($secs2cache, $sql=false, $inputarr=false,$force_array = false, $first2cols = false) + { + if (!is_numeric($secs2cache)) { + $first2cols = $force_array; + $force_array = $inputarr; + } + $rs = $this->CacheExecute($secs2cache, $sql, $inputarr); + if (!$rs) { + $false = false; + return $false; + } + $arr = $rs->GetAssoc($force_array,$first2cols); + return $arr; + } + + /** + * Return first element of first row of sql statement. Recordset is disposed + * for you. + * + * @param sql SQL statement + * @param [inputarr] input bind array + */ + function GetOne($sql,$inputarr=false) + { + global $ADODB_COUNTRECS,$ADODB_GETONE_EOF; + $crecs = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + + $ret = false; + $rs = $this->Execute($sql,$inputarr); + if ($rs) { + if ($rs->EOF) $ret = $ADODB_GETONE_EOF; + else $ret = reset($rs->fields); + + $rs->Close(); + } + $ADODB_COUNTRECS = $crecs; + return $ret; + } + + // $where should include 'WHERE fld=value' + function GetMedian($table, $field,$where = '') + { + $total = $this->GetOne("select count(*) from $table $where"); + if (!$total) return false; + + $midrow = (integer) ($total/2); + $rs = $this->SelectLimit("select $field from $table $where order by 1",1,$midrow); + if ($rs && !$rs->EOF) return reset($rs->fields); + return false; + } + + + function CacheGetOne($secs2cache,$sql=false,$inputarr=false) + { + global $ADODB_GETONE_EOF; + $ret = false; + $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); + if ($rs) { + if ($rs->EOF) $ret = $ADODB_GETONE_EOF; + else $ret = reset($rs->fields); + $rs->Close(); + } + + return $ret; + } + + function GetCol($sql, $inputarr = false, $trim = false) + { + + $rs = $this->Execute($sql, $inputarr); + if ($rs) { + $rv = array(); + if ($trim) { + while (!$rs->EOF) { + $rv[] = trim(reset($rs->fields)); + $rs->MoveNext(); + } + } else { + while (!$rs->EOF) { + $rv[] = reset($rs->fields); + $rs->MoveNext(); + } + } + $rs->Close(); + } else + $rv = false; + return $rv; + } + + function CacheGetCol($secs, $sql = false, $inputarr = false,$trim=false) + { + $rs = $this->CacheExecute($secs, $sql, $inputarr); + if ($rs) { + $rv = array(); + if ($trim) { + while (!$rs->EOF) { + $rv[] = trim(reset($rs->fields)); + $rs->MoveNext(); + } + } else { + while (!$rs->EOF) { + $rv[] = reset($rs->fields); + $rs->MoveNext(); + } + } + $rs->Close(); + } else + $rv = false; + + return $rv; + } + + function Transpose(&$rs,$addfieldnames=true) + { + $rs2 = $this->_rs2rs($rs); + $false = false; + if (!$rs2) return $false; + + $rs2->_transpose($addfieldnames); + return $rs2; + } + + /* + Calculate the offset of a date for a particular database and generate + appropriate SQL. Useful for calculating future/past dates and storing + in a database. + + If dayFraction=1.5 means 1.5 days from now, 1.0/24 for 1 hour. + */ + function OffsetDate($dayFraction,$date=false) + { + if (!$date) $date = $this->sysDate; + return '('.$date.'+'.$dayFraction.')'; + } + + + /** + * + * @param sql SQL statement + * @param [inputarr] input bind array + */ + function GetArray($sql,$inputarr=false) + { + global $ADODB_COUNTRECS; + + $savec = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + $rs = $this->Execute($sql,$inputarr); + $ADODB_COUNTRECS = $savec; + if (!$rs) + if (defined('ADODB_PEAR')) { + $cls = ADODB_PEAR_Error(); + return $cls; + } else { + $false = false; + return $false; + } + $arr = $rs->GetArray(); + $rs->Close(); + return $arr; + } + + function CacheGetAll($secs2cache,$sql=false,$inputarr=false) + { + $arr = $this->CacheGetArray($secs2cache,$sql,$inputarr); + return $arr; + } + + function CacheGetArray($secs2cache,$sql=false,$inputarr=false) + { + global $ADODB_COUNTRECS; + + $savec = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); + $ADODB_COUNTRECS = $savec; + + if (!$rs) + if (defined('ADODB_PEAR')) { + $cls = ADODB_PEAR_Error(); + return $cls; + } else { + $false = false; + return $false; + } + $arr = $rs->GetArray(); + $rs->Close(); + return $arr; + } + + function GetRandRow($sql, $arr= false) + { + $rezarr = $this->GetAll($sql, $arr); + $sz = sizeof($rezarr); + return $rezarr[abs(rand()) % $sz]; + } + + /** + * Return one row of sql statement. Recordset is disposed for you. + * + * @param sql SQL statement + * @param [inputarr] input bind array + */ + function GetRow($sql,$inputarr=false) + { + global $ADODB_COUNTRECS; + $crecs = $ADODB_COUNTRECS; + $ADODB_COUNTRECS = false; + + $rs = $this->Execute($sql,$inputarr); + + $ADODB_COUNTRECS = $crecs; + if ($rs) { + if (!$rs->EOF) $arr = $rs->fields; + else $arr = array(); + $rs->Close(); + return $arr; + } + + $false = false; + return $false; + } + + function CacheGetRow($secs2cache,$sql=false,$inputarr=false) + { + $rs = $this->CacheExecute($secs2cache,$sql,$inputarr); + if ($rs) { + if (!$rs->EOF) $arr = $rs->fields; + else $arr = array(); + + $rs->Close(); + return $arr; + } + $false = false; + return $false; + } + + /** + * Insert or replace a single record. Note: this is not the same as MySQL's replace. + * ADOdb's Replace() uses update-insert semantics, not insert-delete-duplicates of MySQL. + * Also note that no table locking is done currently, so it is possible that the + * record be inserted twice by two programs... + * + * $this->Replace('products', array('prodname' =>"'Nails'","price" => 3.99), 'prodname'); + * + * $table table name + * $fieldArray associative array of data (you must quote strings yourself). + * $keyCol the primary key field name or if compound key, array of field names + * autoQuote set to true to use a hueristic to quote strings. Works with nulls and numbers + * but does not work with dates nor SQL functions. + * has_autoinc the primary key is an auto-inc field, so skip in insert. + * + * Currently blob replace not supported + * + * returns 0 = fail, 1 = update, 2 = insert + */ + + function Replace($table, $fieldArray, $keyCol, $autoQuote=false, $has_autoinc=false) + { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + + return _adodb_replace($this, $table, $fieldArray, $keyCol, $autoQuote, $has_autoinc); + } + + + /** + * Will select, getting rows from $offset (1-based), for $nrows. + * This simulates the MySQL "select * from table limit $offset,$nrows" , and + * the PostgreSQL "select * from table limit $nrows offset $offset". Note that + * MySQL and PostgreSQL parameter ordering is the opposite of the other. + * eg. + * CacheSelectLimit(15,'select * from table',3); will return rows 1 to 3 (1-based) + * CacheSelectLimit(15,'select * from table',3,2); will return rows 3 to 5 (1-based) + * + * BUG: Currently CacheSelectLimit fails with $sql with LIMIT or TOP clause already set + * + * @param [secs2cache] seconds to cache data, set to 0 to force query. This is optional + * @param sql + * @param [offset] is the row to start calculations from (1-based) + * @param [nrows] is the number of rows to get + * @param [inputarr] array of bind variables + * @return the recordset ($rs->databaseType == 'array') + */ + function CacheSelectLimit($secs2cache,$sql,$nrows=-1,$offset=-1,$inputarr=false) + { + if (!is_numeric($secs2cache)) { + if ($sql === false) $sql = -1; + if ($offset == -1) $offset = false; + // sql, nrows, offset,inputarr + $rs = $this->SelectLimit($secs2cache,$sql,$nrows,$offset,$this->cacheSecs); + } else { + if ($sql === false) $this->outp_throw("Warning: \$sql missing from CacheSelectLimit()",'CacheSelectLimit'); + $rs = $this->SelectLimit($sql,$nrows,$offset,$inputarr,$secs2cache); + } + return $rs; + } + + + /** + * Flush cached recordsets that match a particular $sql statement. + * If $sql == false, then we purge all files in the cache. + */ + + /** + * Flush cached recordsets that match a particular $sql statement. + * If $sql == false, then we purge all files in the cache. + */ + function CacheFlush($sql=false,$inputarr=false) + { + global $ADODB_CACHE_DIR, $ADODB_CACHE; + + if (empty($ADODB_CACHE)) return false; + + if (!$sql) { + $ADODB_CACHE->flushall($this->debug); + return; + } + + $f = $this->_gencachename($sql.serialize($inputarr),false); + return $ADODB_CACHE->flushcache($f, $this->debug); + } + + + /** + * Private function to generate filename for caching. + * Filename is generated based on: + * + * - sql statement + * - database type (oci8, ibase, ifx, etc) + * - database name + * - userid + * - setFetchMode (adodb 4.23) + * + * When not in safe mode, we create 256 sub-directories in the cache directory ($ADODB_CACHE_DIR). + * Assuming that we can have 50,000 files per directory with good performance, + * then we can scale to 12.8 million unique cached recordsets. Wow! + */ + function _gencachename($sql,$createdir) + { + global $ADODB_CACHE, $ADODB_CACHE_DIR; + + if ($this->fetchMode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } else { + $mode = $this->fetchMode; + } + $m = md5($sql.$this->databaseType.$this->database.$this->user.$mode); + if (!$ADODB_CACHE->createdir) return $m; + if (!$createdir) $dir = $ADODB_CACHE->getdirname($m); + else $dir = $ADODB_CACHE->createdir($m, $this->debug); + + return $dir.'/adodb_'.$m.'.cache'; + } + + + /** + * Execute SQL, caching recordsets. + * + * @param [secs2cache] seconds to cache data, set to 0 to force query. + * This is an optional parameter. + * @param sql SQL statement to execute + * @param [inputarr] holds the input data to bind to + * @return RecordSet or false + */ + function CacheExecute($secs2cache,$sql=false,$inputarr=false) + { + global $ADODB_CACHE; + + if (empty($ADODB_CACHE)) $this->_CreateCache(); + + if (!is_numeric($secs2cache)) { + $inputarr = $sql; + $sql = $secs2cache; + $secs2cache = $this->cacheSecs; + } + + if (is_array($sql)) { + $sqlparam = $sql; + $sql = $sql[0]; + } else + $sqlparam = $sql; + + + $md5file = $this->_gencachename($sql.serialize($inputarr),true); + $err = ''; + + if ($secs2cache > 0){ + $rs = $ADODB_CACHE->readcache($md5file,$err,$secs2cache,$this->arrayClass); + $this->numCacheHits += 1; + } else { + $err='Timeout 1'; + $rs = false; + $this->numCacheMisses += 1; + } + + if (!$rs) { + // no cached rs found + if ($this->debug) { + if (get_magic_quotes_runtime() && !$this->memCache) { + ADOConnection::outp("Please disable magic_quotes_runtime - it corrupts cache files :("); + } + if ($this->debug !== -1) ADOConnection::outp( " $md5file cache failure: $err (see sql below)"); + } + + $rs = $this->Execute($sqlparam,$inputarr); + + if ($rs) { + + $eof = $rs->EOF; + $rs = $this->_rs2rs($rs); // read entire recordset into memory immediately + $rs->timeCreated = time(); // used by caching + $txt = _rs2serialize($rs,false,$sql); // serialize + + $ok = $ADODB_CACHE->writecache($md5file,$txt,$this->debug, $secs2cache); + if (!$ok) { + if ($ok === false) { + $em = 'Cache write error'; + $en = -32000; + + if ($fn = $this->raiseErrorFn) { + $fn($this->databaseType,'CacheExecute', $en, $em, $md5file,$sql,$this); + } + } else { + $em = 'Cache file locked warning'; + $en = -32001; + // do not call error handling for just a warning + } + + if ($this->debug) ADOConnection::outp( " ".$em); + } + if ($rs->EOF && !$eof) { + $rs->MoveFirst(); + //$rs = csv2rs($md5file,$err); + $rs->connection = $this; // Pablo suggestion + } + + } else if (!$this->memCache) + $ADODB_CACHE->flushcache($md5file); + } else { + $this->_errorMsg = ''; + $this->_errorCode = 0; + + if ($this->fnCacheExecute) { + $fn = $this->fnCacheExecute; + $fn($this, $secs2cache, $sql, $inputarr); + } + // ok, set cached object found + $rs->connection = $this; // Pablo suggestion + if ($this->debug){ + if ($this->debug == 99) adodb_backtrace(); + $inBrowser = isset($_SERVER['HTTP_USER_AGENT']); + $ttl = $rs->timeCreated + $secs2cache - time(); + $s = is_array($sql) ? $sql[0] : $sql; + if ($inBrowser) $s = '<i>'.htmlspecialchars($s).'</i>'; + + ADOConnection::outp( " $md5file reloaded, ttl=$ttl [ $s ]"); + } + } + return $rs; + } + + + /* + Similar to PEAR DB's autoExecute(), except that + $mode can be 'INSERT' or 'UPDATE' or DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE + If $mode == 'UPDATE', then $where is compulsory as a safety measure. + + $forceUpdate means that even if the data has not changed, perform update. + */ + function AutoExecute($table, $fields_values, $mode = 'INSERT', $where = FALSE, $forceUpdate=true, $magicq=false) + { + $false = false; + $sql = 'SELECT * FROM '.$table; + if ($where!==FALSE) $sql .= ' WHERE '.$where; + else if ($mode == 'UPDATE' || $mode == 2 /* DB_AUTOQUERY_UPDATE */) { + $this->outp_throw('AutoExecute: Illegal mode=UPDATE with empty WHERE clause','AutoExecute'); + return $false; + } + + $rs = $this->SelectLimit($sql,1); + if (!$rs) return $false; // table does not exist + $rs->tableName = $table; + $rs->sql = $sql; + + switch((string) $mode) { + case 'UPDATE': + case '2': + $sql = $this->GetUpdateSQL($rs, $fields_values, $forceUpdate, $magicq); + break; + case 'INSERT': + case '1': + $sql = $this->GetInsertSQL($rs, $fields_values, $magicq); + break; + default: + $this->outp_throw("AutoExecute: Unknown mode=$mode",'AutoExecute'); + return $false; + } + $ret = false; + if ($sql) $ret = $this->Execute($sql); + if ($ret) $ret = true; + return $ret; + } + + + /** + * Generates an Update Query based on an existing recordset. + * $arrFields is an associative array of fields with the value + * that should be assigned. + * + * Note: This function should only be used on a recordset + * that is run against a single table and sql should only + * be a simple select stmt with no groupby/orderby/limit + * + * "Jonathan Younger" <jyounger@unilab.com> + */ + function GetUpdateSQL(&$rs, $arrFields,$forceUpdate=false,$magicq=false,$force=null) + { + global $ADODB_INCLUDED_LIB; + + //********************************************************// + //This is here to maintain compatibility + //with older adodb versions. Sets force type to force nulls if $forcenulls is set. + if (!isset($force)) { + global $ADODB_FORCE_TYPE; + $force = $ADODB_FORCE_TYPE; + } + //********************************************************// + + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + return _adodb_getupdatesql($this,$rs,$arrFields,$forceUpdate,$magicq,$force); + } + + /** + * Generates an Insert Query based on an existing recordset. + * $arrFields is an associative array of fields with the value + * that should be assigned. + * + * Note: This function should only be used on a recordset + * that is run against a single table. + */ + function GetInsertSQL(&$rs, $arrFields,$magicq=false,$force=null) + { + global $ADODB_INCLUDED_LIB; + if (!isset($force)) { + global $ADODB_FORCE_TYPE; + $force = $ADODB_FORCE_TYPE; + + } + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + return _adodb_getinsertsql($this,$rs,$arrFields,$magicq,$force); + } + + + /** + * Update a blob column, given a where clause. There are more sophisticated + * blob handling functions that we could have implemented, but all require + * a very complex API. Instead we have chosen something that is extremely + * simple to understand and use. + * + * Note: $blobtype supports 'BLOB' and 'CLOB', default is BLOB of course. + * + * Usage to update a $blobvalue which has a primary key blob_id=1 into a + * field blobtable.blobcolumn: + * + * UpdateBlob('blobtable', 'blobcolumn', $blobvalue, 'blob_id=1'); + * + * Insert example: + * + * $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + * $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1'); + */ + + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + return $this->Execute("UPDATE $table SET $column=? WHERE $where",array($val)) != false; + } + + /** + * Usage: + * UpdateBlob('TABLE', 'COLUMN', '/path/to/file', 'ID=1'); + * + * $blobtype supports 'BLOB' and 'CLOB' + * + * $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)'); + * $conn->UpdateBlob('blobtable','blobcol',$blobpath,'id=1'); + */ + function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') + { + $fd = fopen($path,'rb'); + if ($fd === false) return false; + $val = fread($fd,filesize($path)); + fclose($fd); + return $this->UpdateBlob($table,$column,$val,$where,$blobtype); + } + + function BlobDecode($blob) + { + return $blob; + } + + function BlobEncode($blob) + { + return $blob; + } + + function SetCharSet($charset) + { + return false; + } + + function IfNull( $field, $ifNull ) + { + return " CASE WHEN $field is null THEN $ifNull ELSE $field END "; + } + + function LogSQL($enable=true) + { + include_once(ADODB_DIR.'/adodb-perf.inc.php'); + + if ($enable) $this->fnExecute = 'adodb_log_sql'; + else $this->fnExecute = false; + + $old = $this->_logsql; + $this->_logsql = $enable; + if ($enable && !$old) $this->_affected = false; + return $old; + } + + function GetCharSet() + { + return false; + } + + /** + * Usage: + * UpdateClob('TABLE', 'COLUMN', $var, 'ID=1', 'CLOB'); + * + * $conn->Execute('INSERT INTO clobtable (id, clobcol) VALUES (1, null)'); + * $conn->UpdateClob('clobtable','clobcol',$clob,'id=1'); + */ + function UpdateClob($table,$column,$val,$where) + { + return $this->UpdateBlob($table,$column,$val,$where,'CLOB'); + } + + // not the fastest implementation - quick and dirty - jlim + // for best performance, use the actual $rs->MetaType(). + function MetaType($t,$len=-1,$fieldobj=false) + { + + if (empty($this->_metars)) { + $rsclass = $this->rsPrefix.$this->databaseType; + $this->_metars = new $rsclass(false,$this->fetchMode); + $this->_metars->connection = $this; + } + return $this->_metars->MetaType($t,$len,$fieldobj); + } + + + /** + * Change the SQL connection locale to a specified locale. + * This is used to get the date formats written depending on the client locale. + */ + function SetDateLocale($locale = 'En') + { + $this->locale = $locale; + switch (strtoupper($locale)) + { + case 'EN': + $this->fmtDate="'Y-m-d'"; + $this->fmtTimeStamp = "'Y-m-d H:i:s'"; + break; + + case 'US': + $this->fmtDate = "'m-d-Y'"; + $this->fmtTimeStamp = "'m-d-Y H:i:s'"; + break; + + case 'PT_BR': + case 'NL': + case 'FR': + case 'RO': + case 'IT': + $this->fmtDate="'d-m-Y'"; + $this->fmtTimeStamp = "'d-m-Y H:i:s'"; + break; + + case 'GE': + $this->fmtDate="'d.m.Y'"; + $this->fmtTimeStamp = "'d.m.Y H:i:s'"; + break; + + default: + $this->fmtDate="'Y-m-d'"; + $this->fmtTimeStamp = "'Y-m-d H:i:s'"; + break; + } + } + + /** + * GetActiveRecordsClass Performs an 'ALL' query + * + * @param mixed $class This string represents the class of the current active record + * @param mixed $table Table used by the active record object + * @param mixed $whereOrderBy Where, order, by clauses + * @param mixed $bindarr + * @param mixed $primkeyArr + * @param array $extra Query extras: limit, offset... + * @param mixed $relations Associative array: table's foreign name, "hasMany", "belongsTo" + * @access public + * @return void + */ + function GetActiveRecordsClass( + $class, $table,$whereOrderBy=false,$bindarr=false, $primkeyArr=false, + $extra=array(), + $relations=array()) + { + global $_ADODB_ACTIVE_DBS; + ## reduce overhead of adodb.inc.php -- moved to adodb-active-record.inc.php + ## if adodb-active-recordx is loaded -- should be no issue as they will probably use Find() + if (!isset($_ADODB_ACTIVE_DBS))include_once(ADODB_DIR.'/adodb-active-record.inc.php'); + return adodb_GetActiveRecordsClass($this, $class, $table, $whereOrderBy, $bindarr, $primkeyArr, $extra, $relations); + } + + function GetActiveRecords($table,$where=false,$bindarr=false,$primkeyArr=false) + { + $arr = $this->GetActiveRecordsClass('ADODB_Active_Record', $table, $where, $bindarr, $primkeyArr); + return $arr; + } + + /** + * Close Connection + */ + function Close() + { + $rez = $this->_close(); + $this->_connectionID = false; + return $rez; + } + + /** + * Begin a Transaction. Must be followed by CommitTrans() or RollbackTrans(). + * + * @return true if succeeded or false if database does not support transactions + */ + function BeginTrans() + { + if ($this->debug) ADOConnection::outp("BeginTrans: Transactions not supported for this driver"); + return false; + } + + /* set transaction mode */ + function SetTransactionMode( $transaction_mode ) + { + $transaction_mode = $this->MetaTransaction($transaction_mode, $this->dataProvider); + $this->_transmode = $transaction_mode; + } +/* +http://msdn2.microsoft.com/en-US/ms173763.aspx +http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-isolation.html +http://www.postgresql.org/docs/8.1/interactive/sql-set-transaction.html +http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_10005.htm +*/ + function MetaTransaction($mode,$db) + { + $mode = strtoupper($mode); + $mode = str_replace('ISOLATION LEVEL ','',$mode); + + switch($mode) { + + case 'READ UNCOMMITTED': + switch($db) { + case 'oci8': + case 'oracle': + return 'ISOLATION LEVEL READ COMMITTED'; + default: + return 'ISOLATION LEVEL READ UNCOMMITTED'; + } + break; + + case 'READ COMMITTED': + return 'ISOLATION LEVEL READ COMMITTED'; + break; + + case 'REPEATABLE READ': + switch($db) { + case 'oci8': + case 'oracle': + return 'ISOLATION LEVEL SERIALIZABLE'; + default: + return 'ISOLATION LEVEL REPEATABLE READ'; + } + break; + + case 'SERIALIZABLE': + return 'ISOLATION LEVEL SERIALIZABLE'; + break; + + default: + return $mode; + } + } + + /** + * If database does not support transactions, always return true as data always commited + * + * @param $ok set to false to rollback transaction, true to commit + * + * @return true/false. + */ + function CommitTrans($ok=true) + { return true;} + + + /** + * If database does not support transactions, rollbacks always fail, so return false + * + * @return true/false. + */ + function RollbackTrans() + { return false;} + + + /** + * return the databases that the driver can connect to. + * Some databases will return an empty array. + * + * @return an array of database names. + */ + function MetaDatabases() + { + global $ADODB_FETCH_MODE; + + if ($this->metaDatabasesSQL) { + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + + $arr = $this->GetCol($this->metaDatabasesSQL); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + return $arr; + } + + return false; + } + + + /** + * @param ttype can either be 'VIEW' or 'TABLE' or false. + * If false, both views and tables are returned. + * "VIEW" returns only views + * "TABLE" returns only tables + * @param showSchema returns the schema/user with the table name, eg. USER.TABLE + * @param mask is the input mask - only supported by oci8 and postgresql + * + * @return array of tables for current database. + */ + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + global $ADODB_FETCH_MODE; + + + $false = false; + if ($mask) { + return $false; + } + if ($this->metaTablesSQL) { + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + + $rs = $this->Execute($this->metaTablesSQL); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ($rs === false) return $false; + $arr = $rs->GetArray(); + $arr2 = array(); + + if ($hast = ($ttype && isset($arr[0][1]))) { + $showt = strncmp($ttype,'T',1); + } + + for ($i=0; $i < sizeof($arr); $i++) { + if ($hast) { + if ($showt == 0) { + if (strncmp($arr[$i][1],'T',1) == 0) $arr2[] = trim($arr[$i][0]); + } else { + if (strncmp($arr[$i][1],'V',1) == 0) $arr2[] = trim($arr[$i][0]); + } + } else + $arr2[] = trim($arr[$i][0]); + } + $rs->Close(); + return $arr2; + } + return $false; + } + + + function _findschema(&$table,&$schema) + { + if (!$schema && ($at = strpos($table,'.')) !== false) { + $schema = substr($table,0,$at); + $table = substr($table,$at+1); + } + } + + /** + * List columns in a database as an array of ADOFieldObjects. + * See top of file for definition of object. + * + * @param $table table name to query + * @param $normalize makes table name case-insensitive (required by some databases) + * @schema is optional database schema to use - not supported by all databases. + * + * @return array of ADOFieldObjects for current table. + */ + function MetaColumns($table,$normalize=true) + { + global $ADODB_FETCH_MODE; + + $false = false; + + if (!empty($this->metaColumnsSQL)) { + + $schema = false; + $this->_findschema($table,$schema); + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + $rs = $this->Execute(sprintf($this->metaColumnsSQL,($normalize)?strtoupper($table):$table)); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + if ($rs === false || $rs->EOF) return $false; + + $retarr = array(); + while (!$rs->EOF) { //print_r($rs->fields); + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + if (isset($rs->fields[3]) && $rs->fields[3]) { + if ($rs->fields[3]>0) $fld->max_length = $rs->fields[3]; + $fld->scale = $rs->fields[4]; + if ($fld->scale>0) $fld->max_length += 1; + } else + $fld->max_length = $rs->fields[2]; + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; + else $retarr[strtoupper($fld->name)] = $fld; + $rs->MoveNext(); + } + $rs->Close(); + return $retarr; + } + return $false; + } + + /** + * List indexes on a table as an array. + * @param table table name to query + * @param primary true to only show primary keys. Not actually used for most databases + * + * @return array of indexes on current table. Each element represents an index, and is itself an associative array. + + Array ( + [name_of_index] => Array + ( + [unique] => true or false + [columns] => Array + ( + [0] => firstname + [1] => lastname + ) + ) + */ + function MetaIndexes($table, $primary = false, $owner = false) + { + $false = false; + return $false; + } + + /** + * List columns names in a table as an array. + * @param table table name to query + * + * @return array of column names for current table. + */ + function MetaColumnNames($table, $numIndexes=false,$useattnum=false /* only for postgres */) + { + $objarr = $this->MetaColumns($table); + if (!is_array($objarr)) { + $false = false; + return $false; + } + $arr = array(); + if ($numIndexes) { + $i = 0; + if ($useattnum) { + foreach($objarr as $v) + $arr[$v->attnum] = $v->name; + + } else + foreach($objarr as $v) $arr[$i++] = $v->name; + } else + foreach($objarr as $v) $arr[strtoupper($v->name)] = $v->name; + + return $arr; + } + + /** + * Different SQL databases used different methods to combine strings together. + * This function provides a wrapper. + * + * param s variable number of string parameters + * + * Usage: $db->Concat($str1,$str2); + * + * @return concatenated string + */ + function Concat() + { + $arr = func_get_args(); + return implode($this->concat_operator, $arr); + } + + + /** + * Converts a date "d" to a string that the database can understand. + * + * @param d a date in Unix date time format. + * + * @return date string in database date format + */ + function DBDate($d, $isfld=false) + { + if (empty($d) && $d !== 0) return 'null'; + if ($isfld) return $d; + + if (is_object($d)) return $d->format($this->fmtDate); + + + if (is_string($d) && !is_numeric($d)) { + if ($d === 'null' || strncmp($d,"'",1) === 0) return $d; + if ($this->isoDates) return "'$d'"; + $d = ADOConnection::UnixDate($d); + } + + return adodb_date($this->fmtDate,$d); + } + + function BindDate($d) + { + $d = $this->DBDate($d); + if (strncmp($d,"'",1)) return $d; + + return substr($d,1,strlen($d)-2); + } + + function BindTimeStamp($d) + { + $d = $this->DBTimeStamp($d); + if (strncmp($d,"'",1)) return $d; + + return substr($d,1,strlen($d)-2); + } + + + /** + * Converts a timestamp "ts" to a string that the database can understand. + * + * @param ts a timestamp in Unix date time format. + * + * @return timestamp string in database timestamp format + */ + function DBTimeStamp($ts,$isfld=false) + { + if (empty($ts) && $ts !== 0) return 'null'; + if ($isfld) return $ts; + if (is_object($ts)) return $ts->format($this->fmtTimeStamp); + + # strlen(14) allows YYYYMMDDHHMMSS format + if (!is_string($ts) || (is_numeric($ts) && strlen($ts)<14)) + return adodb_date($this->fmtTimeStamp,$ts); + + if ($ts === 'null') return $ts; + if ($this->isoDates && strlen($ts) !== 14) return "'$ts'"; + + $ts = ADOConnection::UnixTimeStamp($ts); + return adodb_date($this->fmtTimeStamp,$ts); + } + + /** + * Also in ADORecordSet. + * @param $v is a date string in YYYY-MM-DD format + * + * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format + */ + static function UnixDate($v) + { + if (is_object($v)) { + // odbtp support + //( [year] => 2004 [month] => 9 [day] => 4 [hour] => 12 [minute] => 44 [second] => 8 [fraction] => 0 ) + return adodb_mktime($v->hour,$v->minute,$v->second,$v->month,$v->day, $v->year); + } + + if (is_numeric($v) && strlen($v) !== 8) return $v; + if (!preg_match( "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})|", + ($v), $rr)) return false; + + if ($rr[1] <= TIMESTAMP_FIRST_YEAR) return 0; + // h-m-s-MM-DD-YY + return @adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]); + } + + + /** + * Also in ADORecordSet. + * @param $v is a timestamp string in YYYY-MM-DD HH-NN-SS format + * + * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format + */ + static function UnixTimeStamp($v) + { + if (is_object($v)) { + // odbtp support + //( [year] => 2004 [month] => 9 [day] => 4 [hour] => 12 [minute] => 44 [second] => 8 [fraction] => 0 ) + return adodb_mktime($v->hour,$v->minute,$v->second,$v->month,$v->day, $v->year); + } + + if (!preg_match( + "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ ,-]*(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", + ($v), $rr)) return false; + + if ($rr[1] <= TIMESTAMP_FIRST_YEAR && $rr[2]<= 1) return 0; + + // h-m-s-MM-DD-YY + if (!isset($rr[5])) return adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]); + return @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1]); + } + + /** + * Also in ADORecordSet. + * + * Format database date based on user defined format. + * + * @param v is the character date in YYYY-MM-DD format, returned by database + * @param fmt is the format to apply to it, using date() + * + * @return a date formated as user desires + */ + + function UserDate($v,$fmt='Y-m-d',$gmt=false) + { + $tt = $this->UnixDate($v); + + // $tt == -1 if pre TIMESTAMP_FIRST_YEAR + if (($tt === false || $tt == -1) && $v != false) return $v; + else if ($tt == 0) return $this->emptyDate; + else if ($tt == -1) { // pre-TIMESTAMP_FIRST_YEAR + } + + return ($gmt) ? adodb_gmdate($fmt,$tt) : adodb_date($fmt,$tt); + + } + + /** + * + * @param v is the character timestamp in YYYY-MM-DD hh:mm:ss format + * @param fmt is the format to apply to it, using date() + * + * @return a timestamp formated as user desires + */ + function UserTimeStamp($v,$fmt='Y-m-d H:i:s',$gmt=false) + { + if (!isset($v)) return $this->emptyTimeStamp; + # strlen(14) allows YYYYMMDDHHMMSS format + if (is_numeric($v) && strlen($v)<14) return ($gmt) ? adodb_gmdate($fmt,$v) : adodb_date($fmt,$v); + $tt = $this->UnixTimeStamp($v); + // $tt == -1 if pre TIMESTAMP_FIRST_YEAR + if (($tt === false || $tt == -1) && $v != false) return $v; + if ($tt == 0) return $this->emptyTimeStamp; + return ($gmt) ? adodb_gmdate($fmt,$tt) : adodb_date($fmt,$tt); + } + + function escape($s,$magic_quotes=false) + { + return $this->addq($s,$magic_quotes); + } + + /** + * Quotes a string, without prefixing nor appending quotes. + */ + function addq($s,$magic_quotes=false) + { + if (!$magic_quotes) { + + if ($this->replaceQuote[0] == '\\'){ + // only since php 4.0.5 + $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); + //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s)); + } + return str_replace("'",$this->replaceQuote,$s); + } + + // undo magic quotes for " + $s = str_replace('\\"','"',$s); + + if ($this->replaceQuote == "\\'" || ini_get('magic_quotes_sybase')) // ' already quoted, no need to change anything + return $s; + else {// change \' to '' for sybase/mssql + $s = str_replace('\\\\','\\',$s); + return str_replace("\\'",$this->replaceQuote,$s); + } + } + + /** + * Correctly quotes a string so that all strings are escaped. We prefix and append + * to the string single-quotes. + * An example is $db->qstr("Don't bother",magic_quotes_runtime()); + * + * @param s the string to quote + * @param [magic_quotes] if $s is GET/POST var, set to get_magic_quotes_gpc(). + * This undoes the stupidity of magic quotes for GPC. + * + * @return quoted string to be sent back to database + */ + function qstr($s,$magic_quotes=false) + { + if (!$magic_quotes) { + + if ($this->replaceQuote[0] == '\\'){ + // only since php 4.0.5 + $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\0"),$s); + //$s = str_replace("\0","\\\0", str_replace('\\','\\\\',$s)); + } + return "'".str_replace("'",$this->replaceQuote,$s)."'"; + } + + // undo magic quotes for " + $s = str_replace('\\"','"',$s); + + if ($this->replaceQuote == "\\'" || ini_get('magic_quotes_sybase')) // ' already quoted, no need to change anything + return "'$s'"; + else {// change \' to '' for sybase/mssql + $s = str_replace('\\\\','\\',$s); + return "'".str_replace("\\'",$this->replaceQuote,$s)."'"; + } + } + + + /** + * Will select the supplied $page number from a recordset, given that it is paginated in pages of + * $nrows rows per page. It also saves two boolean values saying if the given page is the first + * and/or last one of the recordset. Added by Iv�n Oliva to provide recordset pagination. + * + * See readme.htm#ex8 for an example of usage. + * + * @param sql + * @param nrows is the number of rows per page to get + * @param page is the page number to get (1-based) + * @param [inputarr] array of bind variables + * @param [secs2cache] is a private parameter only used by jlim + * @return the recordset ($rs->databaseType == 'array') + * + * NOTE: phpLens uses a different algorithm and does not use PageExecute(). + * + */ + function PageExecute($sql, $nrows, $page, $inputarr=false, $secs2cache=0) + { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + if ($this->pageExecuteCountRows) $rs = _adodb_pageexecute_all_rows($this, $sql, $nrows, $page, $inputarr, $secs2cache); + else $rs = _adodb_pageexecute_no_last_page($this, $sql, $nrows, $page, $inputarr, $secs2cache); + return $rs; + } + + + /** + * Will select the supplied $page number from a recordset, given that it is paginated in pages of + * $nrows rows per page. It also saves two boolean values saying if the given page is the first + * and/or last one of the recordset. Added by Iv�n Oliva to provide recordset pagination. + * + * @param secs2cache seconds to cache data, set to 0 to force query + * @param sql + * @param nrows is the number of rows per page to get + * @param page is the page number to get (1-based) + * @param [inputarr] array of bind variables + * @return the recordset ($rs->databaseType == 'array') + */ + function CachePageExecute($secs2cache, $sql, $nrows, $page,$inputarr=false) + { + /*switch($this->dataProvider) { + case 'postgres': + case 'mysql': + break; + default: $secs2cache = 0; break; + }*/ + $rs = $this->PageExecute($sql,$nrows,$page,$inputarr,$secs2cache); + return $rs; + } + +} // end class ADOConnection + + + + //============================================================================================== + // CLASS ADOFetchObj + //============================================================================================== + + /** + * Internal placeholder for record objects. Used by ADORecordSet->FetchObj(). + */ + class ADOFetchObj { + }; + + //============================================================================================== + // CLASS ADORecordSet_empty + //============================================================================================== + + class ADODB_Iterator_empty implements Iterator { + + private $rs; + + function __construct($rs) + { + $this->rs = $rs; + } + function rewind() + { + } + + function valid() + { + return !$this->rs->EOF; + } + + function key() + { + return false; + } + + function current() + { + return false; + } + + function next() + { + } + + function __call($func, $params) + { + return call_user_func_array(array($this->rs, $func), $params); + } + + function hasMore() + { + return false; + } + + } + + + /** + * Lightweight recordset when there are no records to be returned + */ + class ADORecordSet_empty implements IteratorAggregate + { + var $dataProvider = 'empty'; + var $databaseType = false; + var $EOF = true; + var $_numOfRows = 0; + var $fields = false; + var $connection = false; + function RowCount() {return 0;} + function RecordCount() {return 0;} + function PO_RecordCount(){return 0;} + function Close(){return true;} + function FetchRow() {return false;} + function FieldCount(){ return 0;} + function Init() {} + function getIterator() {return new ADODB_Iterator_empty($this);} + } + + //============================================================================================== + // DATE AND TIME FUNCTIONS + //============================================================================================== + if (!defined('ADODB_DATE_VERSION')) include(ADODB_DIR.'/adodb-time.inc.php'); + + //============================================================================================== + // CLASS ADORecordSet + //============================================================================================== + + class ADODB_Iterator implements Iterator { + + private $rs; + + function __construct($rs) + { + $this->rs = $rs; + } + function rewind() + { + $this->rs->MoveFirst(); + } + + function valid() + { + return !$this->rs->EOF; + } + + function key() + { + return $this->rs->_currentRow; + } + + function current() + { + return $this->rs->fields; + } + + function next() + { + $this->rs->MoveNext(); + } + + function __call($func, $params) + { + return call_user_func_array(array($this->rs, $func), $params); + } + + + function hasMore() + { + return !$this->rs->EOF; + } + + } + + + + /** + * RecordSet class that represents the dataset returned by the database. + * To keep memory overhead low, this class holds only the current row in memory. + * No prefetching of data is done, so the RecordCount() can return -1 ( which + * means recordcount not known). + */ + class ADORecordSet implements IteratorAggregate { + /* + * public variables + */ + var $dataProvider = "native"; + var $fields = false; /// holds the current row data + var $blobSize = 100; /// any varchar/char field this size or greater is treated as a blob + /// in other words, we use a text area for editing. + var $canSeek = false; /// indicates that seek is supported + var $sql; /// sql text + var $EOF = false; /// Indicates that the current record position is after the last record in a Recordset object. + + var $emptyTimeStamp = ' '; /// what to display when $time==0 + var $emptyDate = ' '; /// what to display when $time==0 + var $debug = false; + var $timeCreated=0; /// datetime in Unix format rs created -- for cached recordsets + + var $bind = false; /// used by Fields() to hold array - should be private? + var $fetchMode; /// default fetch mode + var $connection = false; /// the parent connection + /* + * private variables + */ + var $_numOfRows = -1; /** number of rows, or -1 */ + var $_numOfFields = -1; /** number of fields in recordset */ + var $_queryID = -1; /** This variable keeps the result link identifier. */ + var $_currentRow = -1; /** This variable keeps the current row in the Recordset. */ + var $_closed = false; /** has recordset been closed */ + var $_inited = false; /** Init() should only be called once */ + var $_obj; /** Used by FetchObj */ + var $_names; /** Used by FetchObj */ + + var $_currentPage = -1; /** Added by Iv�n Oliva to implement recordset pagination */ + var $_atFirstPage = false; /** Added by Iv�n Oliva to implement recordset pagination */ + var $_atLastPage = false; /** Added by Iv�n Oliva to implement recordset pagination */ + var $_lastPageNo = -1; + var $_maxRecordCount = 0; + var $datetime = false; + + /** + * Constructor + * + * @param queryID this is the queryID returned by ADOConnection->_query() + * + */ + function ADORecordSet($queryID) + { + $this->_queryID = $queryID; + } + + function getIterator() + { + return new ADODB_Iterator($this); + } + + /* this is experimental - i don't really know what to return... */ + function __toString() + { + include_once(ADODB_DIR.'/toexport.inc.php'); + return _adodb_export($this,',',',',false,true); + } + + + function Init() + { + if ($this->_inited) return; + $this->_inited = true; + if ($this->_queryID) @$this->_initrs(); + else { + $this->_numOfRows = 0; + $this->_numOfFields = 0; + } + if ($this->_numOfRows != 0 && $this->_numOfFields && $this->_currentRow == -1) { + + $this->_currentRow = 0; + if ($this->EOF = ($this->_fetch() === false)) { + $this->_numOfRows = 0; // _numOfRows could be -1 + } + } else { + $this->EOF = true; + } + } + + + /** + * Generate a SELECT tag string from a recordset, and return the string. + * If the recordset has 2 cols, we treat the 1st col as the containing + * the text to display to the user, and 2nd col as the return value. Default + * strings are compared with the FIRST column. + * + * @param name name of SELECT tag + * @param [defstr] the value to hilite. Use an array for multiple hilites for listbox. + * @param [blank1stItem] true to leave the 1st item in list empty + * @param [multiple] true for listbox, false for popup + * @param [size] #rows to show for listbox. not used by popup + * @param [selectAttr] additional attributes to defined for SELECT tag. + * useful for holding javascript onChange='...' handlers. + & @param [compareFields0] when we have 2 cols in recordset, we compare the defstr with + * column 0 (1st col) if this is true. This is not documented. + * + * @return HTML + * + * changes by glen.davies@cce.ac.nz to support multiple hilited items + */ + function GetMenu($name,$defstr='',$blank1stItem=true,$multiple=false, + $size=0, $selectAttr='',$compareFields0=true) + { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + return _adodb_getmenu($this, $name,$defstr,$blank1stItem,$multiple, + $size, $selectAttr,$compareFields0); + } + + + + /** + * Generate a SELECT tag string from a recordset, and return the string. + * If the recordset has 2 cols, we treat the 1st col as the containing + * the text to display to the user, and 2nd col as the return value. Default + * strings are compared with the SECOND column. + * + */ + function GetMenu2($name,$defstr='',$blank1stItem=true,$multiple=false,$size=0, $selectAttr='') + { + return $this->GetMenu($name,$defstr,$blank1stItem,$multiple, + $size, $selectAttr,false); + } + + /* + Grouped Menu + */ + function GetMenu3($name,$defstr='',$blank1stItem=true,$multiple=false, + $size=0, $selectAttr='') + { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + return _adodb_getmenu_gp($this, $name,$defstr,$blank1stItem,$multiple, + $size, $selectAttr,false); + } + + /** + * return recordset as a 2-dimensional array. + * + * @param [nRows] is the number of rows to return. -1 means every row. + * + * @return an array indexed by the rows (0-based) from the recordset + */ + function GetArray($nRows = -1) + { + global $ADODB_EXTENSION; if ($ADODB_EXTENSION) { + $results = adodb_getall($this,$nRows); + return $results; + } + $results = array(); + $cnt = 0; + while (!$this->EOF && $nRows != $cnt) { + $results[] = $this->fields; + $this->MoveNext(); + $cnt++; + } + return $results; + } + + function GetAll($nRows = -1) + { + $arr = $this->GetArray($nRows); + return $arr; + } + + /* + * Some databases allow multiple recordsets to be returned. This function + * will return true if there is a next recordset, or false if no more. + */ + function NextRecordSet() + { + return false; + } + + /** + * return recordset as a 2-dimensional array. + * Helper function for ADOConnection->SelectLimit() + * + * @param offset is the row to start calculations from (1-based) + * @param [nrows] is the number of rows to return + * + * @return an array indexed by the rows (0-based) from the recordset + */ + function GetArrayLimit($nrows,$offset=-1) + { + if ($offset <= 0) { + $arr = $this->GetArray($nrows); + return $arr; + } + + $this->Move($offset); + + $results = array(); + $cnt = 0; + while (!$this->EOF && $nrows != $cnt) { + $results[$cnt++] = $this->fields; + $this->MoveNext(); + } + + return $results; + } + + + /** + * Synonym for GetArray() for compatibility with ADO. + * + * @param [nRows] is the number of rows to return. -1 means every row. + * + * @return an array indexed by the rows (0-based) from the recordset + */ + function GetRows($nRows = -1) + { + $arr = $this->GetArray($nRows); + return $arr; + } + + /** + * return whole recordset as a 2-dimensional associative array if there are more than 2 columns. + * The first column is treated as the key and is not included in the array. + * If there is only 2 columns, it will return a 1 dimensional array of key-value pairs unless + * $force_array == true. + * + * @param [force_array] has only meaning if we have 2 data columns. If false, a 1 dimensional + * array is returned, otherwise a 2 dimensional array is returned. If this sounds confusing, + * read the source. + * + * @param [first2cols] means if there are more than 2 cols, ignore the remaining cols and + * instead of returning array[col0] => array(remaining cols), return array[col0] => col1 + * + * @return an associative array indexed by the first column of the array, + * or false if the data has less than 2 cols. + */ + function GetAssoc($force_array = false, $first2cols = false) + { + global $ADODB_EXTENSION; + + $cols = $this->_numOfFields; + if ($cols < 2) { + $false = false; + return $false; + } + $numIndex = isset($this->fields[0]); + $results = array(); + + if (!$first2cols && ($cols > 2 || $force_array)) { + if ($ADODB_EXTENSION) { + if ($numIndex) { + while (!$this->EOF) { + $results[trim($this->fields[0])] = array_slice($this->fields, 1); + adodb_movenext($this); + } + } else { + while (!$this->EOF) { + // Fix for array_slice re-numbering numeric associative keys + $keys = array_slice(array_keys($this->fields), 1); + $sliced_array = array(); + + foreach($keys as $key) { + $sliced_array[$key] = $this->fields[$key]; + } + + $results[trim(reset($this->fields))] = $sliced_array; + adodb_movenext($this); + } + } + } else { + if ($numIndex) { + while (!$this->EOF) { + $results[trim($this->fields[0])] = array_slice($this->fields, 1); + $this->MoveNext(); + } + } else { + while (!$this->EOF) { + // Fix for array_slice re-numbering numeric associative keys + $keys = array_slice(array_keys($this->fields), 1); + $sliced_array = array(); + + foreach($keys as $key) { + $sliced_array[$key] = $this->fields[$key]; + } + + $results[trim(reset($this->fields))] = $sliced_array; + $this->MoveNext(); + } + } + } + } else { + if ($ADODB_EXTENSION) { + // return scalar values + if ($numIndex) { + while (!$this->EOF) { + // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string + $results[trim(($this->fields[0]))] = $this->fields[1]; + adodb_movenext($this); + } + } else { + while (!$this->EOF) { + // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string + $v1 = trim(reset($this->fields)); + $v2 = ''.next($this->fields); + $results[$v1] = $v2; + adodb_movenext($this); + } + } + } else { + if ($numIndex) { + while (!$this->EOF) { + // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string + $results[trim(($this->fields[0]))] = $this->fields[1]; + $this->MoveNext(); + } + } else { + while (!$this->EOF) { + // some bug in mssql PHP 4.02 -- doesn't handle references properly so we FORCE creating a new string + $v1 = trim(reset($this->fields)); + $v2 = ''.next($this->fields); + $results[$v1] = $v2; + $this->MoveNext(); + } + } + } + } + + $ref = $results; # workaround accelerator incompat with PHP 4.4 :( + return $ref; + } + + + /** + * + * @param v is the character timestamp in YYYY-MM-DD hh:mm:ss format + * @param fmt is the format to apply to it, using date() + * + * @return a timestamp formated as user desires + */ + function UserTimeStamp($v,$fmt='Y-m-d H:i:s') + { + if (is_numeric($v) && strlen($v)<14) return adodb_date($fmt,$v); + $tt = $this->UnixTimeStamp($v); + // $tt == -1 if pre TIMESTAMP_FIRST_YEAR + if (($tt === false || $tt == -1) && $v != false) return $v; + if ($tt === 0) return $this->emptyTimeStamp; + return adodb_date($fmt,$tt); + } + + + /** + * @param v is the character date in YYYY-MM-DD format, returned by database + * @param fmt is the format to apply to it, using date() + * + * @return a date formated as user desires + */ + function UserDate($v,$fmt='Y-m-d') + { + $tt = $this->UnixDate($v); + // $tt == -1 if pre TIMESTAMP_FIRST_YEAR + if (($tt === false || $tt == -1) && $v != false) return $v; + else if ($tt == 0) return $this->emptyDate; + else if ($tt == -1) { // pre-TIMESTAMP_FIRST_YEAR + } + return adodb_date($fmt,$tt); + } + + + /** + * @param $v is a date string in YYYY-MM-DD format + * + * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format + */ + static function UnixDate($v) + { + return ADOConnection::UnixDate($v); + } + + + /** + * @param $v is a timestamp string in YYYY-MM-DD HH-NN-SS format + * + * @return date in unix timestamp format, or 0 if before TIMESTAMP_FIRST_YEAR, or false if invalid date format + */ + static function UnixTimeStamp($v) + { + return ADOConnection::UnixTimeStamp($v); + } + + + /** + * PEAR DB Compat - do not use internally + */ + function Free() + { + return $this->Close(); + } + + + /** + * PEAR DB compat, number of rows + */ + function NumRows() + { + return $this->_numOfRows; + } + + + /** + * PEAR DB compat, number of cols + */ + function NumCols() + { + return $this->_numOfFields; + } + + /** + * Fetch a row, returning false if no more rows. + * This is PEAR DB compat mode. + * + * @return false or array containing the current record + */ + function FetchRow() + { + if ($this->EOF) { + $false = false; + return $false; + } + $arr = $this->fields; + $this->_currentRow++; + if (!$this->_fetch()) $this->EOF = true; + return $arr; + } + + + /** + * Fetch a row, returning PEAR_Error if no more rows. + * This is PEAR DB compat mode. + * + * @return DB_OK or error object + */ + function FetchInto(&$arr) + { + if ($this->EOF) return (defined('PEAR_ERROR_RETURN')) ? new PEAR_Error('EOF',-1): false; + $arr = $this->fields; + $this->MoveNext(); + return 1; // DB_OK + } + + + /** + * Move to the first row in the recordset. Many databases do NOT support this. + * + * @return true or false + */ + function MoveFirst() + { + if ($this->_currentRow == 0) return true; + return $this->Move(0); + } + + + /** + * Move to the last row in the recordset. + * + * @return true or false + */ + function MoveLast() + { + if ($this->_numOfRows >= 0) return $this->Move($this->_numOfRows-1); + if ($this->EOF) return false; + while (!$this->EOF) { + $f = $this->fields; + $this->MoveNext(); + } + $this->fields = $f; + $this->EOF = false; + return true; + } + + + /** + * Move to next record in the recordset. + * + * @return true if there still rows available, or false if there are no more rows (EOF). + */ + function MoveNext() + { + if (!$this->EOF) { + $this->_currentRow++; + if ($this->_fetch()) return true; + } + $this->EOF = true; + /* -- tested error handling when scrolling cursor -- seems useless. + $conn = $this->connection; + if ($conn && $conn->raiseErrorFn && ($errno = $conn->ErrorNo())) { + $fn = $conn->raiseErrorFn; + $fn($conn->databaseType,'MOVENEXT',$errno,$conn->ErrorMsg().' ('.$this->sql.')',$conn->host,$conn->database); + } + */ + return false; + } + + + /** + * Random access to a specific row in the recordset. Some databases do not support + * access to previous rows in the databases (no scrolling backwards). + * + * @param rowNumber is the row to move to (0-based) + * + * @return true if there still rows available, or false if there are no more rows (EOF). + */ + function Move($rowNumber = 0) + { + $this->EOF = false; + if ($rowNumber == $this->_currentRow) return true; + if ($rowNumber >= $this->_numOfRows) + if ($this->_numOfRows != -1) $rowNumber = $this->_numOfRows-2; + + if ($this->canSeek) { + + if ($this->_seek($rowNumber)) { + $this->_currentRow = $rowNumber; + if ($this->_fetch()) { + return true; + } + } else { + $this->EOF = true; + return false; + } + } else { + if ($rowNumber < $this->_currentRow) return false; + global $ADODB_EXTENSION; + if ($ADODB_EXTENSION) { + while (!$this->EOF && $this->_currentRow < $rowNumber) { + adodb_movenext($this); + } + } else { + + while (! $this->EOF && $this->_currentRow < $rowNumber) { + $this->_currentRow++; + + if (!$this->_fetch()) $this->EOF = true; + } + } + return !($this->EOF); + } + + $this->fields = false; + $this->EOF = true; + return false; + } + + + /** + * Get the value of a field in the current row by column name. + * Will not work if ADODB_FETCH_MODE is set to ADODB_FETCH_NUM. + * + * @param colname is the field to access + * + * @return the value of $colname column + */ + function Fields($colname) + { + return $this->fields[$colname]; + } + + function GetAssocKeys($upper=true) + { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + if ($upper === 2) $this->bind[$o->name] = $i; + else $this->bind[($upper) ? strtoupper($o->name) : strtolower($o->name)] = $i; + } + } + + /** + * Use associative array to get fields array for databases that do not support + * associative arrays. Submitted by Paolo S. Asioli paolo.asioli#libero.it + * + * If you don't want uppercase cols, set $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC + * before you execute your SQL statement, and access $rs->fields['col'] directly. + * + * $upper 0 = lowercase, 1 = uppercase, 2 = whatever is returned by FetchField + */ + function GetRowAssoc($upper=1) + { + $record = array(); + // if (!$this->fields) return $record; + + if (!$this->bind) { + $this->GetAssocKeys($upper); + } + + foreach($this->bind as $k => $v) { + $record[$k] = $this->fields[$v]; + } + + return $record; + } + + + /** + * Clean up recordset + * + * @return true or false + */ + function Close() + { + // free connection object - this seems to globally free the object + // and not merely the reference, so don't do this... + // $this->connection = false; + if (!$this->_closed) { + $this->_closed = true; + return $this->_close(); + } else + return true; + } + + /** + * synonyms RecordCount and RowCount + * + * @return the number of rows or -1 if this is not supported + */ + function RecordCount() {return $this->_numOfRows;} + + + /* + * If we are using PageExecute(), this will return the maximum possible rows + * that can be returned when paging a recordset. + */ + function MaxRecordCount() + { + return ($this->_maxRecordCount) ? $this->_maxRecordCount : $this->RecordCount(); + } + + /** + * synonyms RecordCount and RowCount + * + * @return the number of rows or -1 if this is not supported + */ + function RowCount() {return $this->_numOfRows;} + + + /** + * Portable RecordCount. Pablo Roca <pabloroca@mvps.org> + * + * @return the number of records from a previous SELECT. All databases support this. + * + * But aware possible problems in multiuser environments. For better speed the table + * must be indexed by the condition. Heavy test this before deploying. + */ + function PO_RecordCount($table="", $condition="") { + + $lnumrows = $this->_numOfRows; + // the database doesn't support native recordcount, so we do a workaround + if ($lnumrows == -1 && $this->connection) { + IF ($table) { + if ($condition) $condition = " WHERE " . $condition; + $resultrows = $this->connection->Execute("SELECT COUNT(*) FROM $table $condition"); + if ($resultrows) $lnumrows = reset($resultrows->fields); + } + } + return $lnumrows; + } + + + /** + * @return the current row in the recordset. If at EOF, will return the last row. 0-based. + */ + function CurrentRow() {return $this->_currentRow;} + + /** + * synonym for CurrentRow -- for ADO compat + * + * @return the current row in the recordset. If at EOF, will return the last row. 0-based. + */ + function AbsolutePosition() {return $this->_currentRow;} + + /** + * @return the number of columns in the recordset. Some databases will set this to 0 + * if no records are returned, others will return the number of columns in the query. + */ + function FieldCount() {return $this->_numOfFields;} + + + /** + * Get the ADOFieldObject of a specific column. + * + * @param fieldoffset is the column position to access(0-based). + * + * @return the ADOFieldObject for that column, or false. + */ + function FetchField($fieldoffset = -1) + { + // must be defined by child class + + $false = false; + return $false; + } + + /** + * Get the ADOFieldObjects of all columns in an array. + * + */ + function FieldTypesArray() + { + $arr = array(); + for ($i=0, $max=$this->_numOfFields; $i < $max; $i++) + $arr[] = $this->FetchField($i); + return $arr; + } + + /** + * Return the fields array of the current row as an object for convenience. + * The default case is lowercase field names. + * + * @return the object with the properties set to the fields of the current row + */ + function FetchObj() + { + $o = $this->FetchObject(false); + return $o; + } + + /** + * Return the fields array of the current row as an object for convenience. + * The default case is uppercase. + * + * @param $isupper to set the object property names to uppercase + * + * @return the object with the properties set to the fields of the current row + */ + function FetchObject($isupper=true) + { + if (empty($this->_obj)) { + $this->_obj = new ADOFetchObj(); + $this->_names = array(); + for ($i=0; $i <$this->_numOfFields; $i++) { + $f = $this->FetchField($i); + $this->_names[] = $f->name; + } + } + $i = 0; + if (PHP_VERSION >= 5) $o = clone($this->_obj); + else $o = $this->_obj; + + for ($i=0; $i <$this->_numOfFields; $i++) { + $name = $this->_names[$i]; + if ($isupper) $n = strtoupper($name); + else $n = $name; + + $o->$n = $this->Fields($name); + } + return $o; + } + + /** + * Return the fields array of the current row as an object for convenience. + * The default is lower-case field names. + * + * @return the object with the properties set to the fields of the current row, + * or false if EOF + * + * Fixed bug reported by tim@orotech.net + */ + function FetchNextObj() + { + $o = $this->FetchNextObject(false); + return $o; + } + + + /** + * Return the fields array of the current row as an object for convenience. + * The default is upper case field names. + * + * @param $isupper to set the object property names to uppercase + * + * @return the object with the properties set to the fields of the current row, + * or false if EOF + * + * Fixed bug reported by tim@orotech.net + */ + function FetchNextObject($isupper=true) + { + $o = false; + if ($this->_numOfRows != 0 && !$this->EOF) { + $o = $this->FetchObject($isupper); + $this->_currentRow++; + if ($this->_fetch()) return $o; + } + $this->EOF = true; + return $o; + } + + /** + * Get the metatype of the column. This is used for formatting. This is because + * many databases use different names for the same type, so we transform the original + * type to our standardised version which uses 1 character codes: + * + * @param t is the type passed in. Normally is ADOFieldObject->type. + * @param len is the maximum length of that field. This is because we treat character + * fields bigger than a certain size as a 'B' (blob). + * @param fieldobj is the field object returned by the database driver. Can hold + * additional info (eg. primary_key for mysql). + * + * @return the general type of the data: + * C for character < 250 chars + * X for teXt (>= 250 chars) + * B for Binary + * N for numeric or floating point + * D for date + * T for timestamp + * L for logical/Boolean + * I for integer + * R for autoincrement counter/integer + * + * + */ + function MetaType($t,$len=-1,$fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + // changed in 2.32 to hashing instead of switch stmt for speed... + static $typeMap = array( + 'VARCHAR' => 'C', + 'VARCHAR2' => 'C', + 'CHAR' => 'C', + 'C' => 'C', + 'STRING' => 'C', + 'NCHAR' => 'C', + 'NVARCHAR' => 'C', + 'VARYING' => 'C', + 'BPCHAR' => 'C', + 'CHARACTER' => 'C', + 'INTERVAL' => 'C', # Postgres + 'MACADDR' => 'C', # postgres + 'VAR_STRING' => 'C', # mysql + ## + 'LONGCHAR' => 'X', + 'TEXT' => 'X', + 'NTEXT' => 'X', + 'M' => 'X', + 'X' => 'X', + 'CLOB' => 'X', + 'NCLOB' => 'X', + 'LVARCHAR' => 'X', + ## + 'BLOB' => 'B', + 'IMAGE' => 'B', + 'BINARY' => 'B', + 'VARBINARY' => 'B', + 'LONGBINARY' => 'B', + 'B' => 'B', + ## + 'YEAR' => 'D', // mysql + 'DATE' => 'D', + 'D' => 'D', + ## + 'UNIQUEIDENTIFIER' => 'C', # MS SQL Server + ## + 'SMALLDATETIME' => 'T', + 'TIME' => 'T', + 'TIMESTAMP' => 'T', + 'DATETIME' => 'T', + 'TIMESTAMPTZ' => 'T', + 'T' => 'T', + 'TIMESTAMP WITHOUT TIME ZONE' => 'T', // postgresql + ## + 'BOOL' => 'L', + 'BOOLEAN' => 'L', + 'BIT' => 'L', + 'L' => 'L', + ## + 'COUNTER' => 'R', + 'R' => 'R', + 'SERIAL' => 'R', // ifx + 'INT IDENTITY' => 'R', + ## + 'INT' => 'I', + 'INT2' => 'I', + 'INT4' => 'I', + 'INT8' => 'I', + 'INTEGER' => 'I', + 'INTEGER UNSIGNED' => 'I', + 'SHORT' => 'I', + 'TINYINT' => 'I', + 'SMALLINT' => 'I', + 'I' => 'I', + ## + 'LONG' => 'N', // interbase is numeric, oci8 is blob + 'BIGINT' => 'N', // this is bigger than PHP 32-bit integers + 'DECIMAL' => 'N', + 'DEC' => 'N', + 'REAL' => 'N', + 'DOUBLE' => 'N', + 'DOUBLE PRECISION' => 'N', + 'SMALLFLOAT' => 'N', + 'FLOAT' => 'N', + 'NUMBER' => 'N', + 'NUM' => 'N', + 'NUMERIC' => 'N', + 'MONEY' => 'N', + + ## informix 9.2 + 'SQLINT' => 'I', + 'SQLSERIAL' => 'I', + 'SQLSMINT' => 'I', + 'SQLSMFLOAT' => 'N', + 'SQLFLOAT' => 'N', + 'SQLMONEY' => 'N', + 'SQLDECIMAL' => 'N', + 'SQLDATE' => 'D', + 'SQLVCHAR' => 'C', + 'SQLCHAR' => 'C', + 'SQLDTIME' => 'T', + 'SQLINTERVAL' => 'N', + 'SQLBYTES' => 'B', + 'SQLTEXT' => 'X', + ## informix 10 + "SQLINT8" => 'I8', + "SQLSERIAL8" => 'I8', + "SQLNCHAR" => 'C', + "SQLNVCHAR" => 'C', + "SQLLVARCHAR" => 'X', + "SQLBOOL" => 'L' + ); + + $tmap = false; + $t = strtoupper($t); + $tmap = (isset($typeMap[$t])) ? $typeMap[$t] : 'N'; + switch ($tmap) { + case 'C': + + // is the char field is too long, return as text field... + if ($this->blobSize >= 0) { + if ($len > $this->blobSize) return 'X'; + } else if ($len > 250) { + return 'X'; + } + return 'C'; + + case 'I': + if (!empty($fieldobj->primary_key)) return 'R'; + return 'I'; + + case false: + return 'N'; + + case 'B': + if (isset($fieldobj->binary)) + return ($fieldobj->binary) ? 'B' : 'X'; + return 'B'; + + case 'D': + if (!empty($this->connection) && !empty($this->connection->datetime)) return 'T'; + return 'D'; + + default: + if ($t == 'LONG' && $this->dataProvider == 'oci8') return 'B'; + return $tmap; + } + } + + + function _close() {} + + /** + * set/returns the current recordset page when paginating + */ + function AbsolutePage($page=-1) + { + if ($page != -1) $this->_currentPage = $page; + return $this->_currentPage; + } + + /** + * set/returns the status of the atFirstPage flag when paginating + */ + function AtFirstPage($status=false) + { + if ($status != false) $this->_atFirstPage = $status; + return $this->_atFirstPage; + } + + function LastPageNo($page = false) + { + if ($page != false) $this->_lastPageNo = $page; + return $this->_lastPageNo; + } + + /** + * set/returns the status of the atLastPage flag when paginating + */ + function AtLastPage($status=false) + { + if ($status != false) $this->_atLastPage = $status; + return $this->_atLastPage; + } + +} // end class ADORecordSet + + //============================================================================================== + // CLASS ADORecordSet_array + //============================================================================================== + + /** + * This class encapsulates the concept of a recordset created in memory + * as an array. This is useful for the creation of cached recordsets. + * + * Note that the constructor is different from the standard ADORecordSet + */ + + class ADORecordSet_array extends ADORecordSet + { + var $databaseType = 'array'; + + var $_array; // holds the 2-dimensional data array + var $_types; // the array of types of each column (C B I L M) + var $_colnames; // names of each column in array + var $_skiprow1; // skip 1st row because it holds column names + var $_fieldobjects; // holds array of field objects + var $canSeek = true; + var $affectedrows = false; + var $insertid = false; + var $sql = ''; + var $compat = false; + /** + * Constructor + * + */ + function ADORecordSet_array($fakeid=1) + { + global $ADODB_FETCH_MODE,$ADODB_COMPAT_FETCH; + + // fetch() on EOF does not delete $this->fields + $this->compat = !empty($ADODB_COMPAT_FETCH); + $this->ADORecordSet($fakeid); // fake queryID + $this->fetchMode = $ADODB_FETCH_MODE; + } + + function _transpose($addfieldnames=true) + { + global $ADODB_INCLUDED_LIB; + + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + $hdr = true; + + $fobjs = $addfieldnames ? $this->_fieldobjects : false; + adodb_transpose($this->_array, $newarr, $hdr, $fobjs); + //adodb_pr($newarr); + + $this->_skiprow1 = false; + $this->_array = $newarr; + $this->_colnames = $hdr; + + adodb_probetypes($newarr,$this->_types); + + $this->_fieldobjects = array(); + + foreach($hdr as $k => $name) { + $f = new ADOFieldObject(); + $f->name = $name; + $f->type = $this->_types[$k]; + $f->max_length = -1; + $this->_fieldobjects[] = $f; + } + $this->fields = reset($this->_array); + + $this->_initrs(); + + } + + /** + * Setup the array. + * + * @param array is a 2-dimensional array holding the data. + * The first row should hold the column names + * unless paramter $colnames is used. + * @param typearr holds an array of types. These are the same types + * used in MetaTypes (C,B,L,I,N). + * @param [colnames] array of column names. If set, then the first row of + * $array should not hold the column names. + */ + function InitArray($array,$typearr,$colnames=false) + { + $this->_array = $array; + $this->_types = $typearr; + if ($colnames) { + $this->_skiprow1 = false; + $this->_colnames = $colnames; + } else { + $this->_skiprow1 = true; + $this->_colnames = $array[0]; + } + $this->Init(); + } + /** + * Setup the Array and datatype file objects + * + * @param array is a 2-dimensional array holding the data. + * The first row should hold the column names + * unless paramter $colnames is used. + * @param fieldarr holds an array of ADOFieldObject's. + */ + function InitArrayFields(&$array,&$fieldarr) + { + $this->_array = $array; + $this->_skiprow1= false; + if ($fieldarr) { + $this->_fieldobjects = $fieldarr; + } + $this->Init(); + } + + function GetArray($nRows=-1) + { + if ($nRows == -1 && $this->_currentRow <= 0 && !$this->_skiprow1) { + return $this->_array; + } else { + $arr = ADORecordSet::GetArray($nRows); + return $arr; + } + } + + function _initrs() + { + $this->_numOfRows = sizeof($this->_array); + if ($this->_skiprow1) $this->_numOfRows -= 1; + + $this->_numOfFields =(isset($this->_fieldobjects)) ? + sizeof($this->_fieldobjects):sizeof($this->_types); + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + $mode = isset($this->adodbFetchMode) ? $this->adodbFetchMode : $this->fetchMode; + + if ($mode & ADODB_FETCH_ASSOC) { + if (!isset($this->fields[$colname]) && !is_null($this->fields[$colname])) $colname = strtolower($colname); + return $this->fields[$colname]; + } + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + function FetchField($fieldOffset = -1) + { + if (isset($this->_fieldobjects)) { + return $this->_fieldobjects[$fieldOffset]; + } + $o = new ADOFieldObject(); + $o->name = $this->_colnames[$fieldOffset]; + $o->type = $this->_types[$fieldOffset]; + $o->max_length = -1; // length not known + + return $o; + } + + function _seek($row) + { + if (sizeof($this->_array) && 0 <= $row && $row < $this->_numOfRows) { + $this->_currentRow = $row; + if ($this->_skiprow1) $row += 1; + $this->fields = $this->_array[$row]; + return true; + } + return false; + } + + function MoveNext() + { + if (!$this->EOF) { + $this->_currentRow++; + + $pos = $this->_currentRow; + + if ($this->_numOfRows <= $pos) { + if (!$this->compat) $this->fields = false; + } else { + if ($this->_skiprow1) $pos += 1; + $this->fields = $this->_array[$pos]; + return true; + } + $this->EOF = true; + } + + return false; + } + + function _fetch() + { + $pos = $this->_currentRow; + + if ($this->_numOfRows <= $pos) { + if (!$this->compat) $this->fields = false; + return false; + } + if ($this->_skiprow1) $pos += 1; + $this->fields = $this->_array[$pos]; + return true; + } + + function _close() + { + return true; + } + + } // ADORecordSet_array + + //============================================================================================== + // HELPER FUNCTIONS + //============================================================================================== + + /** + * Synonym for ADOLoadCode. Private function. Do not use. + * + * @deprecated + */ + function ADOLoadDB($dbType) + { + return ADOLoadCode($dbType); + } + + /** + * Load the code for a specific database driver. Private function. Do not use. + */ + function ADOLoadCode($dbType) + { + global $ADODB_LASTDB; + + if (!$dbType) return false; + $db = strtolower($dbType); + switch ($db) { + case 'ado': + if (PHP_VERSION >= 5) $db = 'ado5'; + $class = 'ado'; + break; + case 'ifx': + case 'maxsql': $class = $db = 'mysqlt'; break; + case 'postgres': + case 'postgres8': + case 'pgsql': $class = $db = 'postgres7'; break; + default: + $class = $db; break; + } + + $file = ADODB_DIR."/drivers/adodb-".$db.".inc.php"; + @include_once($file); + $ADODB_LASTDB = $class; + if (class_exists("ADODB_" . $class)) return $class; + + //ADOConnection::outp(adodb_pr(get_declared_classes(),true)); + if (!file_exists($file)) ADOConnection::outp("Missing file: $file"); + else ADOConnection::outp("Syntax error in file: $file"); + return false; + } + + /** + * synonym for ADONewConnection for people like me who cannot remember the correct name + */ + function NewADOConnection($db='') + { + $tmp = ADONewConnection($db); + return $tmp; + } + + /** + * Instantiate a new Connection class for a specific database driver. + * + * @param [db] is the database Connection object to create. If undefined, + * use the last database driver that was loaded by ADOLoadCode(). + * + * @return the freshly created instance of the Connection class. + */ + function ADONewConnection($db='') + { + GLOBAL $ADODB_NEWCONNECTION, $ADODB_LASTDB; + + if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE',2); + $errorfn = (defined('ADODB_ERROR_HANDLER')) ? ADODB_ERROR_HANDLER : false; + $false = false; + if (($at = strpos($db,'://')) !== FALSE) { + $origdsn = $db; + $fakedsn = 'fake'.substr($origdsn,$at); + if (($at2 = strpos($origdsn,'@/')) !== FALSE) { + // special handling of oracle, which might not have host + $fakedsn = str_replace('@/','@adodb-fakehost/',$fakedsn); + } + + if ((strpos($origdsn, 'sqlite')) !== FALSE) { + // special handling for SQLite, it only might have the path to the database file. + // If you try to connect to a SQLite database using a dsn like 'sqlite:///path/to/database', the 'parse_url' php function + // will throw you an exception with a message such as "unable to parse url" + list($scheme, $path) = explode('://', $origdsn); + $dsna['scheme'] = $scheme; + if ($qmark = strpos($path,'?')) { + $dsn['query'] = substr($path,$qmark+1); + $path = substr($path,0,$qmark); + } + $dsna['path'] = '/' . urlencode($path); + } else + $dsna = @parse_url($fakedsn); + + if (!$dsna) { + return $false; + } + $dsna['scheme'] = substr($origdsn,0,$at); + if ($at2 !== FALSE) { + $dsna['host'] = ''; + } + + if (strncmp($origdsn,'pdo',3) == 0) { + $sch = explode('_',$dsna['scheme']); + if (sizeof($sch)>1) { + + $dsna['host'] = isset($dsna['host']) ? rawurldecode($dsna['host']) : ''; + if ($sch[1] == 'sqlite') + $dsna['host'] = rawurlencode($sch[1].':'.rawurldecode($dsna['host'])); + else + $dsna['host'] = rawurlencode($sch[1].':host='.rawurldecode($dsna['host'])); + $dsna['scheme'] = 'pdo'; + } + } + + $db = @$dsna['scheme']; + if (!$db) return $false; + $dsna['host'] = isset($dsna['host']) ? rawurldecode($dsna['host']) : ''; + $dsna['user'] = isset($dsna['user']) ? rawurldecode($dsna['user']) : ''; + $dsna['pass'] = isset($dsna['pass']) ? rawurldecode($dsna['pass']) : ''; + $dsna['path'] = isset($dsna['path']) ? rawurldecode(substr($dsna['path'],1)) : ''; # strip off initial / + + if (isset($dsna['query'])) { + $opt1 = explode('&',$dsna['query']); + foreach($opt1 as $k => $v) { + $arr = explode('=',$v); + $opt[$arr[0]] = isset($arr[1]) ? rawurldecode($arr[1]) : 1; + } + } else $opt = array(); + } + /* + * phptype: Database backend used in PHP (mysql, odbc etc.) + * dbsyntax: Database used with regards to SQL syntax etc. + * protocol: Communication protocol to use (tcp, unix etc.) + * hostspec: Host specification (hostname[:port]) + * database: Database to use on the DBMS server + * username: User name for login + * password: Password for login + */ + if (!empty($ADODB_NEWCONNECTION)) { + $obj = $ADODB_NEWCONNECTION($db); + + } + + if(empty($obj)) { + + if (!isset($ADODB_LASTDB)) $ADODB_LASTDB = ''; + if (empty($db)) $db = $ADODB_LASTDB; + + if ($db != $ADODB_LASTDB) $db = ADOLoadCode($db); + + if (!$db) { + if (isset($origdsn)) $db = $origdsn; + if ($errorfn) { + // raise an error + $ignore = false; + $errorfn('ADONewConnection', 'ADONewConnection', -998, + "could not load the database driver for '$db'", + $db,false,$ignore); + } else + ADOConnection::outp( "<p>ADONewConnection: Unable to load database driver '$db'</p>",false); + + return $false; + } + + $cls = 'ADODB_'.$db; + if (!class_exists($cls)) { + adodb_backtrace(); + return $false; + } + + $obj = new $cls(); + } + + # constructor should not fail + if ($obj) { + if ($errorfn) $obj->raiseErrorFn = $errorfn; + if (isset($dsna)) { + if (isset($dsna['port'])) $obj->port = $dsna['port']; + foreach($opt as $k => $v) { + switch(strtolower($k)) { + case 'new': + $nconnect = true; $persist = true; break; + case 'persist': + case 'persistent': $persist = $v; break; + case 'debug': $obj->debug = (integer) $v; break; + #ibase + case 'role': $obj->role = $v; break; + case 'dialect': $obj->dialect = (integer) $v; break; + case 'charset': $obj->charset = $v; $obj->charSet=$v; break; + case 'buffers': $obj->buffers = $v; break; + case 'fetchmode': $obj->SetFetchMode($v); break; + #ado + case 'charpage': $obj->charPage = $v; break; + #mysql, mysqli + case 'clientflags': $obj->clientFlags = $v; break; + #mysql, mysqli, postgres + case 'port': $obj->port = $v; break; + #mysqli + case 'socket': $obj->socket = $v; break; + #oci8 + case 'nls_date_format': $obj->NLS_DATE_FORMAT = $v; break; + case 'cachesecs': $obj->cacheSecs = $v; break; + case 'memcache': + $varr = explode(':',$v); + $vlen = sizeof($varr); + if ($vlen == 0) break; + $obj->memCache = true; + $obj->memCacheHost = explode(',',$varr[0]); + if ($vlen == 1) break; + $obj->memCachePort = $varr[1]; + if ($vlen == 2) break; + $obj->memCacheCompress = $varr[2] ? true : false; + break; + } + } + if (empty($persist)) + $ok = $obj->Connect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']); + else if (empty($nconnect)) + $ok = $obj->PConnect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']); + else + $ok = $obj->NConnect($dsna['host'], $dsna['user'], $dsna['pass'], $dsna['path']); + + if (!$ok) return $false; + } + } + return $obj; + } + + + + // $perf == true means called by NewPerfMonitor(), otherwise for data dictionary + function _adodb_getdriver($provider,$drivername,$perf=false) + { + switch ($provider) { + case 'odbtp': if (strncmp('odbtp_',$drivername,6)==0) return substr($drivername,6); + case 'odbc' : if (strncmp('odbc_',$drivername,5)==0) return substr($drivername,5); + case 'ado' : if (strncmp('ado_',$drivername,4)==0) return substr($drivername,4); + case 'native': break; + default: + return $provider; + } + + switch($drivername) { + case 'mysqlt': + case 'mysqli': + $drivername='mysql'; + break; + case 'postgres7': + case 'postgres8': + $drivername = 'postgres'; + break; + case 'firebird15': $drivername = 'firebird'; break; + case 'oracle': $drivername = 'oci8'; break; + case 'access': if ($perf) $drivername = ''; break; + case 'db2' : break; + case 'sapdb' : break; + default: + $drivername = 'generic'; + break; + } + return $drivername; + } + + function NewPerfMonitor(&$conn) + { + $false = false; + $drivername = _adodb_getdriver($conn->dataProvider,$conn->databaseType,true); + if (!$drivername || $drivername == 'generic') return $false; + include_once(ADODB_DIR.'/adodb-perf.inc.php'); + @include_once(ADODB_DIR."/perf/perf-$drivername.inc.php"); + $class = "Perf_$drivername"; + if (!class_exists($class)) return $false; + $perf = new $class($conn); + + return $perf; + } + + function NewDataDictionary(&$conn,$drivername=false) + { + $false = false; + if (!$drivername) $drivername = _adodb_getdriver($conn->dataProvider,$conn->databaseType); + + include_once(ADODB_DIR.'/adodb-lib.inc.php'); + include_once(ADODB_DIR.'/adodb-datadict.inc.php'); + $path = ADODB_DIR."/datadict/datadict-$drivername.inc.php"; + + if (!file_exists($path)) { + ADOConnection::outp("Dictionary driver '$path' not available"); + return $false; + } + include_once($path); + $class = "ADODB2_$drivername"; + $dict = new $class(); + $dict->dataProvider = $conn->dataProvider; + $dict->connection = $conn; + $dict->upperName = strtoupper($drivername); + $dict->quote = $conn->nameQuote; + if (!empty($conn->_connectionID)) + $dict->serverInfo = $conn->ServerInfo(); + + return $dict; + } + + + + /* + Perform a print_r, with pre tags for better formatting. + */ + function adodb_pr($var,$as_string=false) + { + if ($as_string) ob_start(); + + if (isset($_SERVER['HTTP_USER_AGENT'])) { + echo " <pre>\n";print_r($var);echo "</pre>\n"; + } else + print_r($var); + + if ($as_string) { + $s = ob_get_contents(); + ob_end_clean(); + return $s; + } + } + + /* + Perform a stack-crawl and pretty print it. + + @param printOrArr Pass in a boolean to indicate print, or an $exception->trace array (assumes that print is true then). + @param levels Number of levels to display + */ + function adodb_backtrace($printOrArr=true,$levels=9999,$ishtml=null) + { + global $ADODB_INCLUDED_LIB; + if (empty($ADODB_INCLUDED_LIB)) include(ADODB_DIR.'/adodb-lib.inc.php'); + return _adodb_backtrace($printOrArr,$levels,0,$ishtml); + } + + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres.inc.php new file mode 100644 index 00000000..6f580ff6 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres.inc.php @@ -0,0 +1,14 @@ +<?php +/* + V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. + Set tabs to 4. + + NOTE: Since 3.31, this file is no longer used, and the "postgres" driver is + remapped to "postgres7". Maintaining multiple postgres drivers is no easy + job, so hopefully this will ensure greater consistency and fewer bugs. +*/ + +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres64.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres64.inc.php new file mode 100644 index 00000000..6846303a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres64.inc.php @@ -0,0 +1,1074 @@ +<?php +/* + V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. + Set tabs to 8. + + Original version derived from Alberto Cerezal (acerezalp@dbnet.es) - DBNet Informatica & Comunicaciones. + 08 Nov 2000 jlim - Minor corrections, removing mysql stuff + 09 Nov 2000 jlim - added insertid support suggested by "Christopher Kings-Lynne" <chriskl@familyhealth.com.au> + jlim - changed concat operator to || and data types to MetaType to match documented pgsql types + see http://www.postgresql.org/devel-corner/docs/postgres/datatype.htm + 22 Nov 2000 jlim - added changes to FetchField() and MetaTables() contributed by "raser" <raser@mail.zen.com.tw> + 27 Nov 2000 jlim - added changes to _connect/_pconnect from ideas by "Lennie" <leen@wirehub.nl> + 15 Dec 2000 jlim - added changes suggested by Additional code changes by "Eric G. Werk" egw@netguide.dk. + 31 Jan 2002 jlim - finally installed postgresql. testing + 01 Mar 2001 jlim - Freek Dijkstra changes, also support for text type + + See http://www.varlena.com/varlena/GeneralBits/47.php + + -- What indexes are on my table? + select * from pg_indexes where tablename = 'tablename'; + + -- What triggers are on my table? + select c.relname as "Table", t.tgname as "Trigger Name", + t.tgconstrname as "Constraint Name", t.tgenabled as "Enabled", + t.tgisconstraint as "Is Constraint", cc.relname as "Referenced Table", + p.proname as "Function Name" + from pg_trigger t, pg_class c, pg_class cc, pg_proc p + where t.tgfoid = p.oid and t.tgrelid = c.oid + and t.tgconstrrelid = cc.oid + and c.relname = 'tablename'; + + -- What constraints are on my table? + select r.relname as "Table", c.conname as "Constraint Name", + contype as "Constraint Type", conkey as "Key Columns", + confkey as "Foreign Columns", consrc as "Source" + from pg_class r, pg_constraint c + where r.oid = c.conrelid + and relname = 'tablename'; + +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +function adodb_addslashes($s) +{ + $len = strlen($s); + if ($len == 0) return "''"; + if (strncmp($s,"'",1) === 0 && substr($s,$len-1) == "'") return $s; // already quoted + + return "'".addslashes($s)."'"; +} + +class ADODB_postgres64 extends ADOConnection{ + var $databaseType = 'postgres64'; + var $dataProvider = 'postgres'; + var $hasInsertID = true; + var $_resultid = false; + var $concat_operator='||'; + var $metaDatabasesSQL = "select datname from pg_database where datname not in ('template0','template1') order by 1"; + var $metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' + and tablename not in ('sql_features', 'sql_implementation_info', 'sql_languages', + 'sql_packages', 'sql_sizing', 'sql_sizing_profiles') + union + select viewname,'V' from pg_views where viewname not like 'pg\_%'"; + //"select tablename from pg_tables where tablename not like 'pg_%' order by 1"; + var $isoDates = true; // accepts dates in ISO format + var $sysDate = "CURRENT_DATE"; + var $sysTimeStamp = "CURRENT_TIMESTAMP"; + var $blobEncodeType = 'C'; + var $metaColumnsSQL = "SELECT a.attname,t.typname,a.attlen,a.atttypmod,a.attnotnull,a.atthasdef,a.attnum + FROM pg_class c, pg_attribute a,pg_type t + WHERE relkind in ('r','v') AND (c.relname='%s' or c.relname = lower('%s')) and a.attname not like '....%%' +AND a.attnum > 0 AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum"; + + // used when schema defined + var $metaColumnsSQL1 = "SELECT a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum +FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n +WHERE relkind in ('r','v') AND (c.relname='%s' or c.relname = lower('%s')) + and c.relnamespace=n.oid and n.nspname='%s' + and a.attname not like '....%%' AND a.attnum > 0 + AND a.atttypid = t.oid AND a.attrelid = c.oid ORDER BY a.attnum"; + + // get primary key etc -- from Freek Dijkstra + var $metaKeySQL = "SELECT ic.relname AS index_name, a.attname AS column_name,i.indisunique AS unique_key, i.indisprimary AS primary_key + FROM pg_class bc, pg_class ic, pg_index i, pg_attribute a WHERE bc.oid = i.indrelid AND ic.oid = i.indexrelid AND (i.indkey[0] = a.attnum OR i.indkey[1] = a.attnum OR i.indkey[2] = a.attnum OR i.indkey[3] = a.attnum OR i.indkey[4] = a.attnum OR i.indkey[5] = a.attnum OR i.indkey[6] = a.attnum OR i.indkey[7] = a.attnum) AND a.attrelid = bc.oid AND bc.relname = '%s'"; + + var $hasAffectedRows = true; + var $hasLimit = false; // set to true for pgsql 7 only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10 + // below suggested by Freek Dijkstra + var $true = 'TRUE'; // string that represents TRUE for a database + var $false = 'FALSE'; // string that represents FALSE for a database + var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database + var $fmtTimeStamp = "'Y-m-d H:i:s'"; // used by DBTimeStamp as the default timestamp fmt. + var $hasMoveFirst = true; + var $hasGenID = true; + var $_genIDSQL = "SELECT NEXTVAL('%s')"; + var $_genSeqSQL = "CREATE SEQUENCE %s START %s"; + var $_dropSeqSQL = "DROP SEQUENCE %s"; + var $metaDefaultsSQL = "SELECT d.adnum as num, d.adsrc as def from pg_attrdef d, pg_class c where d.adrelid=c.oid and c.relname='%s' order by d.adnum"; + var $random = 'random()'; /// random function + var $autoRollback = true; // apparently pgsql does not autorollback properly before php 4.3.4 + // http://bugs.php.net/bug.php?id=25404 + + var $uniqueIisR = true; + var $_bindInputArray = false; // requires postgresql 7.3+ and ability to modify database + var $disableBlobs = false; // set to true to disable blob checking, resulting in 2-5% improvement in performance. + + // The last (fmtTimeStamp is not entirely correct: + // PostgreSQL also has support for time zones, + // and writes these time in this format: "2001-03-01 18:59:26+02". + // There is no code for the "+02" time zone information, so I just left that out. + // I'm not familiar enough with both ADODB as well as Postgres + // to know what the concequences are. The other values are correct (wheren't in 0.94) + // -- Freek Dijkstra + + function ADODB_postgres64() + { + // changes the metaColumnsSQL, adds columns: attnum[6] + } + + function ServerInfo() + { + if (isset($this->version)) return $this->version; + + $arr['description'] = $this->GetOne("select version()"); + $arr['version'] = ADOConnection::_findvers($arr['description']); + $this->version = $arr; + return $arr; + } + + function IfNull( $field, $ifNull ) + { + return " coalesce($field, $ifNull) "; + } + + // get the last id - never tested + function pg_insert_id($tablename,$fieldname) + { + $result=pg_exec($this->_connectionID, "SELECT last_value FROM ${tablename}_${fieldname}_seq"); + if ($result) { + $arr = @pg_fetch_row($result,0); + pg_freeresult($result); + if (isset($arr[0])) return $arr[0]; + } + return false; + } + +/* Warning from http://www.php.net/manual/function.pg-getlastoid.php: +Using a OID as a unique identifier is not generally wise. +Unless you are very careful, you might end up with a tuple having +a different OID if a database must be reloaded. */ + function _insertid($table,$column) + { + if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false; + $oid = pg_getlastoid($this->_resultid); + // to really return the id, we need the table and column-name, else we can only return the oid != id + return empty($table) || empty($column) ? $oid : $this->GetOne("SELECT $column FROM $table WHERE oid=".(int)$oid); + } + +// I get this error with PHP before 4.0.6 - jlim +// Warning: This compilation does not support pg_cmdtuples() in adodb-postgres.inc.php on line 44 + function _affectedrows() + { + if (!is_resource($this->_resultid) || get_resource_type($this->_resultid) !== 'pgsql result') return false; + return pg_cmdtuples($this->_resultid); + } + + + // returns true/false + function BeginTrans() + { + if ($this->transOff) return true; + $this->transCnt += 1; + return @pg_Exec($this->_connectionID, "begin ".$this->_transmode); + } + + function RowLock($tables,$where,$col='1 as adodbignore') + { + if (!$this->transCnt) $this->BeginTrans(); + return $this->GetOne("select $col from $tables where $where for update"); + } + + // returns true/false. + function CommitTrans($ok=true) + { + if ($this->transOff) return true; + if (!$ok) return $this->RollbackTrans(); + + $this->transCnt -= 1; + return @pg_Exec($this->_connectionID, "commit"); + } + + // returns true/false + function RollbackTrans() + { + if ($this->transOff) return true; + $this->transCnt -= 1; + return @pg_Exec($this->_connectionID, "rollback"); + } + + function MetaTables($ttype=false,$showSchema=false,$mask=false) + { + $info = $this->ServerInfo(); + if ($info['version'] >= 7.3) { + $this->metaTablesSQL = "select tablename,'T' from pg_tables where tablename not like 'pg\_%' + and schemaname not in ( 'pg_catalog','information_schema') + union + select viewname,'V' from pg_views where viewname not like 'pg\_%' and schemaname not in ( 'pg_catalog','information_schema') "; + } + if ($mask) { + $save = $this->metaTablesSQL; + $mask = $this->qstr(strtolower($mask)); + if ($info['version']>=7.3) + $this->metaTablesSQL = " +select tablename,'T' from pg_tables where tablename like $mask and schemaname not in ( 'pg_catalog','information_schema') + union +select viewname,'V' from pg_views where viewname like $mask and schemaname not in ( 'pg_catalog','information_schema') "; + else + $this->metaTablesSQL = " +select tablename,'T' from pg_tables where tablename like $mask + union +select viewname,'V' from pg_views where viewname like $mask"; + } + $ret = ADOConnection::MetaTables($ttype,$showSchema); + + if ($mask) { + $this->metaTablesSQL = $save; + } + return $ret; + } + + + // if magic quotes disabled, use pg_escape_string() + function qstr($s,$magic_quotes=false) + { + if (is_bool($s)) return $s ? 'true' : 'false'; + + if (!$magic_quotes) { + if (ADODB_PHPVER >= 0x5200) { + return "'".pg_escape_string($this->_connectionID,$s)."'"; + } + if (ADODB_PHPVER >= 0x4200) { + return "'".pg_escape_string($s)."'"; + } + if ($this->replaceQuote[0] == '\\'){ + $s = adodb_str_replace(array('\\',"\0"),array('\\\\',"\\\\000"),$s); + } + return "'".str_replace("'",$this->replaceQuote,$s)."'"; + } + + // undo magic quotes for " + $s = str_replace('\\"','"',$s); + return "'$s'"; + } + + + + // Format date column in sql string given an input format that understands Y M D + function SQLDate($fmt, $col=false) + { + if (!$col) $col = $this->sysTimeStamp; + $s = 'TO_CHAR('.$col.",'"; + + $len = strlen($fmt); + for ($i=0; $i < $len; $i++) { + $ch = $fmt[$i]; + switch($ch) { + case 'Y': + case 'y': + $s .= 'YYYY'; + break; + case 'Q': + case 'q': + $s .= 'Q'; + break; + + case 'M': + $s .= 'Mon'; + break; + + case 'm': + $s .= 'MM'; + break; + case 'D': + case 'd': + $s .= 'DD'; + break; + + case 'H': + $s.= 'HH24'; + break; + + case 'h': + $s .= 'HH'; + break; + + case 'i': + $s .= 'MI'; + break; + + case 's': + $s .= 'SS'; + break; + + case 'a': + case 'A': + $s .= 'AM'; + break; + + case 'w': + $s .= 'D'; + break; + + case 'l': + $s .= 'DAY'; + break; + + case 'W': + $s .= 'WW'; + break; + + default: + // handle escape characters... + if ($ch == '\\') { + $i++; + $ch = substr($fmt,$i,1); + } + if (strpos('-/.:;, ',$ch) !== false) $s .= $ch; + else $s .= '"'.$ch.'"'; + + } + } + return $s. "')"; + } + + + + /* + * Load a Large Object from a file + * - the procedure stores the object id in the table and imports the object using + * postgres proprietary blob handling routines + * + * contributed by Mattia Rossi mattia@technologist.com + * modified for safe mode by juraj chlebec + */ + function UpdateBlobFile($table,$column,$path,$where,$blobtype='BLOB') + { + pg_exec ($this->_connectionID, "begin"); + + $fd = fopen($path,'r'); + $contents = fread($fd,filesize($path)); + fclose($fd); + + $oid = pg_lo_create($this->_connectionID); + $handle = pg_lo_open($this->_connectionID, $oid, 'w'); + pg_lo_write($handle, $contents); + pg_lo_close($handle); + + // $oid = pg_lo_import ($path); + pg_exec($this->_connectionID, "commit"); + $rs = ADOConnection::UpdateBlob($table,$column,$oid,$where,$blobtype); + $rez = !empty($rs); + return $rez; + } + + /* + * Deletes/Unlinks a Blob from the database, otherwise it + * will be left behind + * + * Returns TRUE on success or FALSE on failure. + * + * contributed by Todd Rogers todd#windfox.net + */ + function BlobDelete( $blob ) + { + pg_exec ($this->_connectionID, "begin"); + $result = @pg_lo_unlink($blob); + pg_exec ($this->_connectionID, "commit"); + return( $result ); + } + + /* + Hueristic - not guaranteed to work. + */ + function GuessOID($oid) + { + if (strlen($oid)>16) return false; + return is_numeric($oid); + } + + /* + * If an OID is detected, then we use pg_lo_* to open the oid file and read the + * real blob from the db using the oid supplied as a parameter. If you are storing + * blobs using bytea, we autodetect and process it so this function is not needed. + * + * contributed by Mattia Rossi mattia@technologist.com + * + * see http://www.postgresql.org/idocs/index.php?largeobjects.html + * + * Since adodb 4.54, this returns the blob, instead of sending it to stdout. Also + * added maxsize parameter, which defaults to $db->maxblobsize if not defined. + */ + function BlobDecode($blob,$maxsize=false,$hastrans=true) + { + if (!$this->GuessOID($blob)) return $blob; + + if ($hastrans) @pg_exec($this->_connectionID,"begin"); + $fd = @pg_lo_open($this->_connectionID,$blob,"r"); + if ($fd === false) { + if ($hastrans) @pg_exec($this->_connectionID,"commit"); + return $blob; + } + if (!$maxsize) $maxsize = $this->maxblobsize; + $realblob = @pg_loread($fd,$maxsize); + @pg_loclose($fd); + if ($hastrans) @pg_exec($this->_connectionID,"commit"); + return $realblob; + } + + /* + See http://www.postgresql.org/idocs/index.php?datatype-binary.html + + NOTE: SQL string literals (input strings) must be preceded with two backslashes + due to the fact that they must pass through two parsers in the PostgreSQL + backend. + */ + function BlobEncode($blob) + { + if (ADODB_PHPVER >= 0x5200) return pg_escape_bytea($this->_connectionID, $blob); + if (ADODB_PHPVER >= 0x4200) return pg_escape_bytea($blob); + + /*92=backslash, 0=null, 39=single-quote*/ + $badch = array(chr(92),chr(0),chr(39)); # \ null ' + $fixch = array('\\\\134','\\\\000','\\\\047'); + return adodb_str_replace($badch,$fixch,$blob); + + // note that there is a pg_escape_bytea function only for php 4.2.0 or later + } + + // assumes bytea for blob, and varchar for clob + function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB') + { + + if ($blobtype == 'CLOB') { + return $this->Execute("UPDATE $table SET $column=" . $this->qstr($val) . " WHERE $where"); + } + // do not use bind params which uses qstr(), as blobencode() already quotes data + return $this->Execute("UPDATE $table SET $column='".$this->BlobEncode($val)."'::bytea WHERE $where"); + } + + function OffsetDate($dayFraction,$date=false) + { + if (!$date) $date = $this->sysDate; + else if (strncmp($date,"'",1) == 0) { + $len = strlen($date); + if (10 <= $len && $len <= 12) $date = 'date '.$date; + else $date = 'timestamp '.$date; + } + + + return "($date+interval'".($dayFraction * 1440)." minutes')"; + #return "($date+interval'$dayFraction days')"; + } + + + // for schema support, pass in the $table param "$schema.$tabname". + // converts field names to lowercase, $upper is ignored + // see http://phplens.com/lens/lensforum/msgs.php?id=14018 for more info + function MetaColumns($table,$normalize=true) + { + global $ADODB_FETCH_MODE; + + $schema = false; + $false = false; + $this->_findschema($table,$schema); + + if ($normalize) $table = strtolower($table); + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== false) $savem = $this->SetFetchMode(false); + + if ($schema) $rs = $this->Execute(sprintf($this->metaColumnsSQL1,$table,$table,$schema)); + else $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table,$table)); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ($rs === false) { + return $false; + } + if (!empty($this->metaKeySQL)) { + // If we want the primary keys, we have to issue a separate query + // Of course, a modified version of the metaColumnsSQL query using a + // LEFT JOIN would have been much more elegant, but postgres does + // not support OUTER JOINS. So here is the clumsy way. + + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + + $rskey = $this->Execute(sprintf($this->metaKeySQL,($table))); + // fetch all result in once for performance. + $keys = $rskey->GetArray(); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + $rskey->Close(); + unset($rskey); + } + + $rsdefa = array(); + if (!empty($this->metaDefaultsSQL)) { + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $sql = sprintf($this->metaDefaultsSQL, ($table)); + $rsdef = $this->Execute($sql); + if (isset($savem)) $this->SetFetchMode($savem); + $ADODB_FETCH_MODE = $save; + + if ($rsdef) { + while (!$rsdef->EOF) { + $num = $rsdef->fields['num']; + $s = $rsdef->fields['def']; + if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */ + $s = substr($s, 1); + $s = substr($s, 0, strlen($s) - 1); + } + + $rsdefa[$num] = $s; + $rsdef->MoveNext(); + } + } else { + ADOConnection::outp( "==> SQL => " . $sql); + } + unset($rsdef); + } + + $retarr = array(); + while (!$rs->EOF) { + $fld = new ADOFieldObject(); + $fld->name = $rs->fields[0]; + $fld->type = $rs->fields[1]; + $fld->max_length = $rs->fields[2]; + $fld->attnum = $rs->fields[6]; + + if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4; + if ($fld->max_length <= 0) $fld->max_length = -1; + if ($fld->type == 'numeric') { + $fld->scale = $fld->max_length & 0xFFFF; + $fld->max_length >>= 16; + } + // dannym + // 5 hasdefault; 6 num-of-column + $fld->has_default = ($rs->fields[5] == 't'); + if ($fld->has_default) { + $fld->default_value = $rsdefa[$rs->fields[6]]; + } + + //Freek + $fld->not_null = $rs->fields[4] == 't'; + + + // Freek + if (is_array($keys)) { + foreach($keys as $key) { + if ($fld->name == $key['column_name'] AND $key['primary_key'] == 't') + $fld->primary_key = true; + if ($fld->name == $key['column_name'] AND $key['unique_key'] == 't') + $fld->unique = true; // What name is more compatible? + } + } + + if ($ADODB_FETCH_MODE == ADODB_FETCH_NUM) $retarr[] = $fld; + else $retarr[($normalize) ? strtoupper($fld->name) : $fld->name] = $fld; + + $rs->MoveNext(); + } + $rs->Close(); + if (empty($retarr)) + return $false; + else + return $retarr; + + } + + function MetaIndexes ($table, $primary = FALSE, $owner = false) + { + global $ADODB_FETCH_MODE; + + $schema = false; + $this->_findschema($table,$schema); + + if ($schema) { // requires pgsql 7.3+ - pg_namespace used. + $sql = ' +SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns" +FROM pg_catalog.pg_class c +JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid +JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid + ,pg_namespace n +WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\')) and c.relnamespace=c2.relnamespace and c.relnamespace=n.oid and n.nspname=\'%s\''; + } else { + $sql = ' +SELECT c.relname as "Name", i.indisunique as "Unique", i.indkey as "Columns" +FROM pg_catalog.pg_class c +JOIN pg_catalog.pg_index i ON i.indexrelid=c.oid +JOIN pg_catalog.pg_class c2 ON c2.oid=i.indrelid +WHERE (c2.relname=\'%s\' or c2.relname=lower(\'%s\'))'; + } + + if ($primary == FALSE) { + $sql .= ' AND i.indisprimary=false;'; + } + + $save = $ADODB_FETCH_MODE; + $ADODB_FETCH_MODE = ADODB_FETCH_NUM; + if ($this->fetchMode !== FALSE) { + $savem = $this->SetFetchMode(FALSE); + } + + $rs = $this->Execute(sprintf($sql,$table,$table,$schema)); + if (isset($savem)) { + $this->SetFetchMode($savem); + } + $ADODB_FETCH_MODE = $save; + + if (!is_object($rs)) { + $false = false; + return $false; + } + + $col_names = $this->MetaColumnNames($table,true,true); + //3rd param is use attnum, + // see http://sourceforge.net/tracker/index.php?func=detail&aid=1451245&group_id=42718&atid=433976 + $indexes = array(); + while ($row = $rs->FetchRow()) { + $columns = array(); + foreach (explode(' ', $row[2]) as $col) { + $columns[] = $col_names[$col]; + } + + $indexes[$row[0]] = array( + 'unique' => ($row[1] == 't'), + 'columns' => $columns + ); + } + return $indexes; + } + + // returns true or false + // + // examples: + // $db->Connect("host=host1 user=user1 password=secret port=4341"); + // $db->Connect('host1','user1','secret'); + function _connect($str,$user='',$pwd='',$db='',$ctype=0) + { + + if (!function_exists('pg_connect')) return null; + + $this->_errorMsg = false; + + if ($user || $pwd || $db) { + $user = adodb_addslashes($user); + $pwd = adodb_addslashes($pwd); + if (strlen($db) == 0) $db = 'template1'; + $db = adodb_addslashes($db); + if ($str) { + $host = explode(":", $str); + if ($host[0]) $str = "host=".adodb_addslashes($host[0]); + else $str = ''; + if (isset($host[1])) $str .= " port=$host[1]"; + else if (!empty($this->port)) $str .= " port=".$this->port; + } + if ($user) $str .= " user=".$user; + if ($pwd) $str .= " password=".$pwd; + if ($db) $str .= " dbname=".$db; + } + + //if ($user) $linea = "user=$user host=$linea password=$pwd dbname=$db port=5432"; + + if ($ctype === 1) { // persistent + $this->_connectionID = pg_pconnect($str); + } else { + if ($ctype === -1) { // nconnect, we trick pgsql ext by changing the connection str + static $ncnt; + + if (empty($ncnt)) $ncnt = 1; + else $ncnt += 1; + + $str .= str_repeat(' ',$ncnt); + } + $this->_connectionID = @pg_connect($str); + } + if ($this->_connectionID === false) return false; + $this->Execute("set datestyle='ISO'"); + + $info = $this->ServerInfo(); + $this->pgVersion = (float) substr($info['version'],0,3); + if ($this->pgVersion >= 7.1) { // good till version 999 + $this->_nestedSQL = true; + } + return true; + } + + function _nconnect($argHostname, $argUsername, $argPassword, $argDatabaseName) + { + return $this->_connect($argHostname, $argUsername, $argPassword, $argDatabaseName,-1); + } + + // returns true or false + // + // examples: + // $db->PConnect("host=host1 user=user1 password=secret port=4341"); + // $db->PConnect('host1','user1','secret'); + function _pconnect($str,$user='',$pwd='',$db='') + { + return $this->_connect($str,$user,$pwd,$db,1); + } + + + // returns queryID or false + function _query($sql,$inputarr=false) + { + $this->_errorMsg = false; + if ($inputarr) { + /* + It appears that PREPARE/EXECUTE is slower for many queries. + + For query executed 1000 times: + "select id,firstname,lastname from adoxyz + where firstname not like ? and lastname not like ? and id = ?" + + with plan = 1.51861286163 secs + no plan = 1.26903700829 secs + + + + */ + $plan = 'P'.md5($sql); + + $execp = ''; + foreach($inputarr as $v) { + if ($execp) $execp .= ','; + if (is_string($v)) { + if (strncmp($v,"'",1) !== 0) $execp .= $this->qstr($v); + } else { + $execp .= $v; + } + } + + if ($execp) $exsql = "EXECUTE $plan ($execp)"; + else $exsql = "EXECUTE $plan"; + + + $rez = @pg_exec($this->_connectionID,$exsql); + if (!$rez) { + # Perhaps plan does not exist? Prepare/compile plan. + $params = ''; + foreach($inputarr as $v) { + if ($params) $params .= ','; + if (is_string($v)) { + $params .= 'VARCHAR'; + } else if (is_integer($v)) { + $params .= 'INTEGER'; + } else { + $params .= "REAL"; + } + } + $sqlarr = explode('?',$sql); + //print_r($sqlarr); + $sql = ''; + $i = 1; + foreach($sqlarr as $v) { + $sql .= $v.' $'.$i; + $i++; + } + $s = "PREPARE $plan ($params) AS ".substr($sql,0,strlen($sql)-2); + //adodb_pr($s); + $rez = pg_exec($this->_connectionID,$s); + //echo $this->ErrorMsg(); + } + if ($rez) + $rez = pg_exec($this->_connectionID,$exsql); + } else { + //adodb_backtrace(); + $rez = pg_exec($this->_connectionID,$sql); + } + // check if no data returned, then no need to create real recordset + if ($rez && pg_numfields($rez) <= 0) { + if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') { + pg_freeresult($this->_resultid); + } + $this->_resultid = $rez; + return true; + } + + return $rez; + } + + function _errconnect() + { + if (defined('DB_ERROR_CONNECT_FAILED')) return DB_ERROR_CONNECT_FAILED; + else return 'Database connection failed'; + } + + /* Returns: the last error message from previous database operation */ + function ErrorMsg() + { + if ($this->_errorMsg !== false) return $this->_errorMsg; + if (ADODB_PHPVER >= 0x4300) { + if (!empty($this->_resultid)) { + $this->_errorMsg = @pg_result_error($this->_resultid); + if ($this->_errorMsg) return $this->_errorMsg; + } + + if (!empty($this->_connectionID)) { + $this->_errorMsg = @pg_last_error($this->_connectionID); + } else $this->_errorMsg = $this->_errconnect(); + } else { + if (empty($this->_connectionID)) $this->_errconnect(); + else $this->_errorMsg = @pg_errormessage($this->_connectionID); + } + return $this->_errorMsg; + } + + function ErrorNo() + { + $e = $this->ErrorMsg(); + if (strlen($e)) { + return ADOConnection::MetaError($e); + } + return 0; + } + + // returns true or false + function _close() + { + if ($this->transCnt) $this->RollbackTrans(); + if ($this->_resultid) { + @pg_freeresult($this->_resultid); + $this->_resultid = false; + } + @pg_close($this->_connectionID); + $this->_connectionID = false; + return true; + } + + + /* + * Maximum size of C field + */ + function CharMax() + { + return 1000000000; // should be 1 Gb? + } + + /* + * Maximum size of X field + */ + function TextMax() + { + return 1000000000; // should be 1 Gb? + } + + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_postgres64 extends ADORecordSet{ + var $_blobArr; + var $databaseType = "postgres64"; + var $canSeek = true; + function ADORecordSet_postgres64($queryID,$mode=false) + { + if ($mode === false) { + global $ADODB_FETCH_MODE; + $mode = $ADODB_FETCH_MODE; + } + switch ($mode) + { + case ADODB_FETCH_NUM: $this->fetchMode = PGSQL_NUM; break; + case ADODB_FETCH_ASSOC:$this->fetchMode = PGSQL_ASSOC; break; + + case ADODB_FETCH_DEFAULT: + case ADODB_FETCH_BOTH: + default: $this->fetchMode = PGSQL_BOTH; break; + } + $this->adodbFetchMode = $mode; + $this->ADORecordSet($queryID); + } + + function GetRowAssoc($upper=true) + { + if ($this->fetchMode == PGSQL_ASSOC && !$upper) return $this->fields; + $row = ADORecordSet::GetRowAssoc($upper); + return $row; + } + + function _initrs() + { + global $ADODB_COUNTRECS; + $qid = $this->_queryID; + $this->_numOfRows = ($ADODB_COUNTRECS)? @pg_numrows($qid):-1; + $this->_numOfFields = @pg_numfields($qid); + + // cache types for blob decode check + // apparently pg_fieldtype actually performs an sql query on the database to get the type. + if (empty($this->connection->noBlobs)) + for ($i=0, $max = $this->_numOfFields; $i < $max; $i++) { + if (pg_fieldtype($qid,$i) == 'bytea') { + $this->_blobArr[$i] = pg_fieldname($qid,$i); + } + } + } + + /* Use associative array to get fields array */ + function Fields($colname) + { + if ($this->fetchMode != PGSQL_NUM) return @$this->fields[$colname]; + + if (!$this->bind) { + $this->bind = array(); + for ($i=0; $i < $this->_numOfFields; $i++) { + $o = $this->FetchField($i); + $this->bind[strtoupper($o->name)] = $i; + } + } + return $this->fields[$this->bind[strtoupper($colname)]]; + } + + function FetchField($off = 0) + { + // offsets begin at 0 + + $o= new ADOFieldObject(); + $o->name = @pg_fieldname($this->_queryID,$off); + $o->type = @pg_fieldtype($this->_queryID,$off); + $o->max_length = @pg_fieldsize($this->_queryID,$off); + return $o; + } + + function _seek($row) + { + return @pg_fetch_row($this->_queryID,$row); + } + + function _decode($blob) + { + if ($blob === NULL) return NULL; + eval('$realblob="'.adodb_str_replace(array('"','$'),array('\"','\$'),$blob).'";'); + return $realblob; + } + + function _fixblobs() + { + + return; # bypass adodb's bytea handling, so we can handle it ourselves within PHP + + if ($this->fetchMode == PGSQL_NUM || $this->fetchMode == PGSQL_BOTH) { + foreach($this->_blobArr as $k => $v) { + $this->fields[$k] = ADORecordSet_postgres64::_decode($this->fields[$k]); + } + } + if ($this->fetchMode == PGSQL_ASSOC || $this->fetchMode == PGSQL_BOTH) { + foreach($this->_blobArr as $k => $v) { + $this->fields[$v] = ADORecordSet_postgres64::_decode($this->fields[$v]); + } + } + } + + // 10% speedup to move MoveNext to child class + function MoveNext() + { + if (!$this->EOF) { + $this->_currentRow++; + if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + if (is_array($this->fields) && $this->fields) { + if (isset($this->_blobArr)) $this->_fixblobs(); + return true; + } + } + $this->fields = false; + $this->EOF = true; + } + return false; + } + + function _fetch() + { + + if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) + return false; + + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + + if ($this->fields && isset($this->_blobArr)) $this->_fixblobs(); + + return (is_array($this->fields)); + } + + function _close() + { + return @pg_freeresult($this->_queryID); + } + + function MetaType($t,$len=-1,$fieldobj=false) + { + if (is_object($t)) { + $fieldobj = $t; + $t = $fieldobj->type; + $len = $fieldobj->max_length; + } + switch (strtoupper($t)) { + case 'MONEY': // stupid, postgres expects money to be a string + case 'INTERVAL': + case 'CHAR': + case 'CHARACTER': + case 'VARCHAR': + case 'NAME': + case 'BPCHAR': + case '_VARCHAR': + case 'INET': + case 'MACADDR': + if ($len <= $this->blobSize) return 'C'; + + case 'TEXT': + return 'X'; + + case 'IMAGE': // user defined type + case 'BLOB': // user defined type + case 'BIT': // This is a bit string, not a single bit, so don't return 'L' + case 'VARBIT': + case 'BYTEA': + return 'B'; + + case 'BOOL': + case 'BOOLEAN': + return 'L'; + + case 'DATE': + return 'D'; + + + case 'TIMESTAMP WITHOUT TIME ZONE': + case 'TIME': + case 'DATETIME': + case 'TIMESTAMP': + case 'TIMESTAMPTZ': + return 'T'; + + case 'SMALLINT': + case 'BIGINT': + case 'INTEGER': + case 'INT8': + case 'INT4': + case 'INT2': + if (isset($fieldobj) && + empty($fieldobj->primary_key) && (!$this->connection->uniqueIisR || empty($fieldobj->unique))) return 'I'; + + case 'OID': + case 'SERIAL': + return 'R'; + + default: + return 'N'; + } + } + +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres7.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres7.inc.php new file mode 100644 index 00000000..eecfdc37 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres7.inc.php @@ -0,0 +1,313 @@ +<?php +/* + V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. + Set tabs to 4. + + Postgres7 support. + 28 Feb 2001: Currently indicate that we support LIMIT + 01 Dec 2001: dannym added support for default values +*/ + +// security - hide paths +if (!defined('ADODB_DIR')) die(); + +include_once(ADODB_DIR."/drivers/adodb-postgres64.inc.php"); + +class ADODB_postgres7 extends ADODB_postgres64 { + var $databaseType = 'postgres7'; + var $hasLimit = true; // set to true for pgsql 6.5+ only. support pgsql/mysql SELECT * FROM TABLE LIMIT 10 + var $ansiOuter = true; + var $charSet = true; //set to true for Postgres 7 and above - PG client supports encodings + + function ADODB_postgres7() + { + $this->ADODB_postgres64(); + if (ADODB_ASSOC_CASE !== 2) { + $this->rsPrefix .= 'assoc_'; + } + $this->_bindInputArray = PHP_VERSION >= 5.1; + } + + + // the following should be compat with postgresql 7.2, + // which makes obsolete the LIMIT limit,offset syntax + function SelectLimit($sql,$nrows=-1,$offset=-1,$inputarr=false,$secs2cache=0) + { + $offsetStr = ($offset >= 0) ? " OFFSET ".((integer)$offset) : ''; + $limitStr = ($nrows >= 0) ? " LIMIT ".((integer)$nrows) : ''; + if ($secs2cache) + $rs = $this->CacheExecute($secs2cache,$sql."$limitStr$offsetStr",$inputarr); + else + $rs = $this->Execute($sql."$limitStr$offsetStr",$inputarr); + + return $rs; + } + /* + function Prepare($sql) + { + $info = $this->ServerInfo(); + if ($info['version']>=7.3) { + return array($sql,false); + } + return $sql; + } + */ + + /* + I discovered that the MetaForeignKeys method no longer worked for Postgres 8.3. + I went ahead and modified it to work for both 8.2 and 8.3. + Please feel free to include this change in your next release of adodb. + William Kolodny [William.Kolodny#gt-t.net] + */ + function MetaForeignKeys($table, $owner=false, $upper=false) + { + $sql=" + SELECT fum.ftblname AS lookup_table, split_part(fum.rf, ')'::text, 1) AS lookup_field, + fum.ltable AS dep_table, split_part(fum.lf, ')'::text, 1) AS dep_field + FROM ( + SELECT fee.ltable, fee.ftblname, fee.consrc, split_part(fee.consrc,'('::text, 2) AS lf, + split_part(fee.consrc, '('::text, 3) AS rf + FROM ( + SELECT foo.relname AS ltable, foo.ftblname, + pg_get_constraintdef(foo.oid) AS consrc + FROM ( + SELECT c.oid, c.conname AS name, t.relname, ft.relname AS ftblname + FROM pg_constraint c + JOIN pg_class t ON (t.oid = c.conrelid) + JOIN pg_class ft ON (ft.oid = c.confrelid) + JOIN pg_namespace nft ON (nft.oid = ft.relnamespace) + LEFT JOIN pg_description ds ON (ds.objoid = c.oid) + JOIN pg_namespace n ON (n.oid = t.relnamespace) + WHERE c.contype = 'f'::\"char\" + ORDER BY t.relname, n.nspname, c.conname, c.oid + ) foo + ) fee) fum + WHERE fum.ltable='".strtolower($table)."' + ORDER BY fum.ftblname, fum.ltable, split_part(fum.lf, ')'::text, 1) + "; + $rs = $this->Execute($sql); + + if (!$rs || $rs->EOF) return false; + + $a = array(); + while (!$rs->EOF) { + if ($upper) { + $a[strtoupper($rs->Fields('lookup_table'))][] = strtoupper(str_replace('"','',$rs->Fields('dep_field').'='.$rs->Fields('lookup_field'))); + } else { + $a[$rs->Fields('lookup_table')][] = str_replace('"','',$rs->Fields('dep_field').'='.$rs->Fields('lookup_field')); + } + $rs->MoveNext(); + } + + return $a; + + } + + // from Edward Jaramilla, improved version - works on pg 7.4 + function _old_MetaForeignKeys($table, $owner=false, $upper=false) + { + $sql = 'SELECT t.tgargs as args + FROM + pg_trigger t,pg_class c,pg_proc p + WHERE + t.tgenabled AND + t.tgrelid = c.oid AND + t.tgfoid = p.oid AND + p.proname = \'RI_FKey_check_ins\' AND + c.relname = \''.strtolower($table).'\' + ORDER BY + t.tgrelid'; + + $rs = $this->Execute($sql); + + if (!$rs || $rs->EOF) return false; + + $arr = $rs->GetArray(); + $a = array(); + foreach($arr as $v) { + $data = explode(chr(0), $v['args']); + $size = count($data)-1; //-1 because the last node is empty + for($i = 4; $i < $size; $i++) { + if ($upper) + $a[strtoupper($data[2])][] = strtoupper($data[$i].'='.$data[++$i]); + else + $a[$data[2]][] = $data[$i].'='.$data[++$i]; + } + } + return $a; + } + + function _query($sql,$inputarr=false) + { + if (! $this->_bindInputArray) { + // We don't have native support for parameterized queries, so let's emulate it at the parent + return ADODB_postgres64::_query($sql, $inputarr); + } + $this->_errorMsg = false; + // -- added Cristiano da Cunha Duarte + if ($inputarr) { + $sqlarr = explode('?',trim($sql)); + $sql = ''; + $i = 1; + $last = sizeof($sqlarr)-1; + foreach($sqlarr as $v) { + if ($last < $i) $sql .= $v; + else $sql .= $v.' $'.$i; + $i++; + } + + $rez = pg_query_params($this->_connectionID,$sql, $inputarr); + } else { + $rez = pg_query($this->_connectionID,$sql); + } + // check if no data returned, then no need to create real recordset + if ($rez && pg_numfields($rez) <= 0) { + if (is_resource($this->_resultid) && get_resource_type($this->_resultid) === 'pgsql result') { + pg_freeresult($this->_resultid); + } + $this->_resultid = $rez; + return true; + } + return $rez; + } + + // this is a set of functions for managing client encoding - very important if the encodings + // of your database and your output target (i.e. HTML) don't match + //for instance, you may have UNICODE database and server it on-site as WIN1251 etc. + // GetCharSet - get the name of the character set the client is using now + // the functions should work with Postgres 7.0 and above, the set of charsets supported + // depends on compile flags of postgres distribution - if no charsets were compiled into the server + // it will return 'SQL_ANSI' always + function GetCharSet() + { + //we will use ADO's builtin property charSet + $this->charSet = @pg_client_encoding($this->_connectionID); + if (!$this->charSet) { + return false; + } else { + return $this->charSet; + } + } + + // SetCharSet - switch the client encoding + function SetCharSet($charset_name) + { + $this->GetCharSet(); + if ($this->charSet !== $charset_name) { + $if = pg_set_client_encoding($this->_connectionID, $charset_name); + if ($if == "0" & $this->GetCharSet() == $charset_name) { + return true; + } else return false; + } else return true; + } + +} + +/*-------------------------------------------------------------------------------------- + Class Name: Recordset +--------------------------------------------------------------------------------------*/ + +class ADORecordSet_postgres7 extends ADORecordSet_postgres64{ + + var $databaseType = "postgres7"; + + + function ADORecordSet_postgres7($queryID,$mode=false) + { + $this->ADORecordSet_postgres64($queryID,$mode); + } + + // 10% speedup to move MoveNext to child class + function MoveNext() + { + if (!$this->EOF) { + $this->_currentRow++; + if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + + if (is_array($this->fields)) { + if ($this->fields && isset($this->_blobArr)) $this->_fixblobs(); + return true; + } + } + $this->fields = false; + $this->EOF = true; + } + return false; + } + +} + +class ADORecordSet_assoc_postgres7 extends ADORecordSet_postgres64{ + + var $databaseType = "postgres7"; + + + function ADORecordSet_assoc_postgres7($queryID,$mode=false) + { + $this->ADORecordSet_postgres64($queryID,$mode); + } + + function _fetch() + { + if ($this->_currentRow >= $this->_numOfRows && $this->_numOfRows >= 0) + return false; + + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + + if ($this->fields) { + if (isset($this->_blobArr)) $this->_fixblobs(); + $this->_updatefields(); + } + + return (is_array($this->fields)); + } + + // Create associative array + function _updatefields() + { + if (ADODB_ASSOC_CASE == 2) return; // native + + $arr = array(); + $lowercase = (ADODB_ASSOC_CASE == 0); + + foreach($this->fields as $k => $v) { + if (is_integer($k)) $arr[$k] = $v; + else { + if ($lowercase) + $arr[strtolower($k)] = $v; + else + $arr[strtoupper($k)] = $v; + } + } + $this->fields = $arr; + } + + function MoveNext() + { + if (!$this->EOF) { + $this->_currentRow++; + if ($this->_numOfRows < 0 || $this->_numOfRows > $this->_currentRow) { + $this->fields = @pg_fetch_array($this->_queryID,$this->_currentRow,$this->fetchMode); + + if (is_array($this->fields)) { + if ($this->fields) { + if (isset($this->_blobArr)) $this->_fixblobs(); + + $this->_updatefields(); + } + return true; + } + } + + + $this->fields = false; + $this->EOF = true; + } + return false; + } +} +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres8.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres8.inc.php new file mode 100644 index 00000000..3134e3c3 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/drivers/adodb-postgres8.inc.php @@ -0,0 +1,12 @@ +<?php +/* + V5.11 5 May 2010 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. + Set tabs to 4. + + NOTE: The "postgres8" driver is remapped to "postgres7". +*/ + +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ar.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ar.inc.php new file mode 100644 index 00000000..4b750952 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ar.inc.php @@ -0,0 +1,33 @@ +<?php +// by "El-Shamaa, Khaled" <k.el-shamaa#cgiar.org> +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'ar', + DB_ERROR => '��� ��� ����', + DB_ERROR_ALREADY_EXISTS => '����� �����', + DB_ERROR_CANNOT_CREATE => '�� ���� �����', + DB_ERROR_CANNOT_DELETE => '�� ���� ���', + DB_ERROR_CANNOT_DROP => '�� ���� ���', + DB_ERROR_CONSTRAINT => '����� ����� ������', + DB_ERROR_DIVZERO => '����� ������� ��� ���', + DB_ERROR_INVALID => '��� ����', + DB_ERROR_INVALID_DATE => '���� ��� �� ����� ��� �����', + DB_ERROR_INVALID_NUMBER => '���� ��� ��� �����', + DB_ERROR_MISMATCH => '��� ������', + DB_ERROR_NODBSELECTED => '�� ��� ������ ����� �������� ���', + DB_ERROR_NOSUCHFIELD => '��� ����� ��� ���� �����', + DB_ERROR_NOSUCHTABLE => '��� ����� ���� ���� �����', + DB_ERROR_NOT_CAPABLE => '����� �������� ������� ��� ��� �����', + DB_ERROR_NOT_FOUND => '�� ��� ������', + DB_ERROR_NOT_LOCKED => '��� �����', + DB_ERROR_SYNTAX => '��� �� ������', + DB_ERROR_UNSUPPORTED => '��� �����', + DB_ERROR_VALUE_COUNT_ON_ROW => '��� ����� �� �����', + DB_ERROR_INVALID_DSN => 'DSN ��� ����', + DB_ERROR_CONNECT_FAILED => '��� ����� �������', + 0 => '��� ����� �����', // DB_OK + DB_ERROR_NEED_MORE_DATA => '�������� ������� ��� �����', + DB_ERROR_EXTENSION_NOT_FOUND=> '�� ��� ����� ������� ��������', + DB_ERROR_NOSUCHDB => '��� ����� ����� ������ ���� �����', + DB_ERROR_ACCESS_VIOLATION => '������� ��� �����' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-bg.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-bg.inc.php new file mode 100644 index 00000000..ee307c13 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-bg.inc.php @@ -0,0 +1,37 @@ +<?php +/* + Bulgarian language, v1.0, 25.03.2004, encoding by Windows-1251 charset + contributed by Valentin Sheiretsky <valio#valio.eu.org> +*/ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'bg', + DB_ERROR => '���������� ������', + DB_ERROR_ALREADY_EXISTS => '���� ����������', + DB_ERROR_CANNOT_CREATE => '�� ���� �� ���� ���������', + DB_ERROR_CANNOT_DELETE => '�� ���� �� ���� �������', + DB_ERROR_CANNOT_DROP => '�� ���� �� ���� ���������', + DB_ERROR_CONSTRAINT => '�������� �������', + DB_ERROR_DIVZERO => '������� �� ����', + DB_ERROR_INVALID => '����������', + DB_ERROR_INVALID_DATE => '���������� ���� ��� ���', + DB_ERROR_INVALID_NUMBER => '��������� �����', + DB_ERROR_MISMATCH => '�������� ��������', + DB_ERROR_NODBSELECTED => '�� � ������� ���� �����', + DB_ERROR_NOSUCHFIELD => '�������������� ����', + DB_ERROR_NOSUCHTABLE => '�������������� �������', + DB_ERROR_NOT_CAPABLE => 'DB backend not capable', + DB_ERROR_NOT_FOUND => '�� � ��������', + DB_ERROR_NOT_LOCKED => '�� � ���������', + DB_ERROR_SYNTAX => '������ ���������', + DB_ERROR_UNSUPPORTED => '�� �� ��������', + DB_ERROR_VALUE_COUNT_ON_ROW => '���������� ���� ������ � ����', + DB_ERROR_INVALID_DSN => '��������� DSN', + DB_ERROR_CONNECT_FAILED => '�������� �� ���� �� ���� �����������', + 0 => '���� ������', // DB_OK + DB_ERROR_NEED_MORE_DATA => '�������������� ����� �� ������������', + DB_ERROR_EXTENSION_NOT_FOUND=> '������������ �� � ��������', + DB_ERROR_NOSUCHDB => '�������������� ���� �����', + DB_ERROR_ACCESS_VIOLATION => '������ ���������� �����' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-bgutf8.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-bgutf8.inc.php new file mode 100644 index 00000000..5281ed53 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-bgutf8.inc.php @@ -0,0 +1,37 @@ +<?php +/* + Bulgarian language, v1.0, 25.03.2004, encoding by UTF-8 charset + contributed by Valentin Sheiretsky <valio#valio.eu.org> +*/ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'bgutf8', + DB_ERROR => 'неизвестна грешка', + DB_ERROR_ALREADY_EXISTS => 'вече съществува', + DB_ERROR_CANNOT_CREATE => 'не може да бъде създадена', + DB_ERROR_CANNOT_DELETE => 'не може да бъде изтрита', + DB_ERROR_CANNOT_DROP => 'не може да бъде унищожена', + DB_ERROR_CONSTRAINT => 'нарушено условие', + DB_ERROR_DIVZERO => 'деление на нула', + DB_ERROR_INVALID => 'неправилно', + DB_ERROR_INVALID_DATE => 'некоректна дата или час', + DB_ERROR_INVALID_NUMBER => 'невалиден номер', + DB_ERROR_MISMATCH => 'погрешна употреба', + DB_ERROR_NODBSELECTED => 'не е избрана база данни', + DB_ERROR_NOSUCHFIELD => 'несъществуващо поле', + DB_ERROR_NOSUCHTABLE => 'несъществуваща таблица', + DB_ERROR_NOT_CAPABLE => 'DB backend not capable', + DB_ERROR_NOT_FOUND => 'не е намерена', + DB_ERROR_NOT_LOCKED => 'не е заключена', + DB_ERROR_SYNTAX => 'грешен синтаксис', + DB_ERROR_UNSUPPORTED => 'не се поддържа', + DB_ERROR_VALUE_COUNT_ON_ROW => 'некоректен брой колони в реда', + DB_ERROR_INVALID_DSN => 'невалиден DSN', + DB_ERROR_CONNECT_FAILED => 'връзката не може да бъде осъществена', + 0 => 'няма грешки', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'предоставените данни са недостатъчни', + DB_ERROR_EXTENSION_NOT_FOUND=> 'разширението не е намерено', + DB_ERROR_NOSUCHDB => 'несъществуваща база данни', + DB_ERROR_ACCESS_VIOLATION => 'нямате достатъчно права' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ca.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ca.inc.php new file mode 100644 index 00000000..3640ebd0 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ca.inc.php @@ -0,0 +1,34 @@ +<?php +// Catalan language +// contributed by "Josep Lladonosa" jlladono#pie.xtec.es +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'ca', + DB_ERROR => 'error desconegut', + DB_ERROR_ALREADY_EXISTS => 'ja existeix', + DB_ERROR_CANNOT_CREATE => 'no es pot crear', + DB_ERROR_CANNOT_DELETE => 'no es pot esborrar', + DB_ERROR_CANNOT_DROP => 'no es pot eliminar', + DB_ERROR_CONSTRAINT => 'violaci� de constraint', + DB_ERROR_DIVZERO => 'divisi� per zero', + DB_ERROR_INVALID => 'no �s v�lid', + DB_ERROR_INVALID_DATE => 'la data o l\'hora no s�n v�lides', + DB_ERROR_INVALID_NUMBER => 'el nombre no �s v�lid', + DB_ERROR_MISMATCH => 'no hi ha coincid�ncia', + DB_ERROR_NODBSELECTED => 'cap base de dades seleccionada', + DB_ERROR_NOSUCHFIELD => 'camp inexistent', + DB_ERROR_NOSUCHTABLE => 'taula inexistent', + DB_ERROR_NOT_CAPABLE => 'l\'execuci� secund�ria de DB no pot', + DB_ERROR_NOT_FOUND => 'no trobat', + DB_ERROR_NOT_LOCKED => 'no blocat', + DB_ERROR_SYNTAX => 'error de sintaxi', + DB_ERROR_UNSUPPORTED => 'no suportat', + DB_ERROR_VALUE_COUNT_ON_ROW => 'el nombre de columnes no coincideix amb el nombre de valors en la fila', + DB_ERROR_INVALID_DSN => 'el DSN no �s v�lid', + DB_ERROR_CONNECT_FAILED => 'connexi� fallida', + 0 => 'cap error', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'les dades subministrades s�n insuficients', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extensi� no trobada', + DB_ERROR_NOSUCHDB => 'base de dades inexistent', + DB_ERROR_ACCESS_VIOLATION => 'permisos insuficients' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-cn.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-cn.inc.php new file mode 100644 index 00000000..eb8c7de5 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-cn.inc.php @@ -0,0 +1,35 @@ +<?php +// Chinese language file contributed by "Cuiyan (cysoft)" cysoft#php.net. +// Encode by GB2312 +// Simplified Chinese +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'cn', + DB_ERROR => 'δ֪����', + DB_ERROR_ALREADY_EXISTS => '�Ѿ�����', + DB_ERROR_CANNOT_CREATE => '���ܴ���', + DB_ERROR_CANNOT_DELETE => '����ɾ��', + DB_ERROR_CANNOT_DROP => '���ܶ���', + DB_ERROR_CONSTRAINT => 'Լ������', + DB_ERROR_DIVZERO => '��0��', + DB_ERROR_INVALID => '��Ч', + DB_ERROR_INVALID_DATE => '��Ч�����ڻ���ʱ��', + DB_ERROR_INVALID_NUMBER => '��Ч������', + DB_ERROR_MISMATCH => '��ƥ��', + DB_ERROR_NODBSELECTED => 'û�����ݿⱻѡ��', + DB_ERROR_NOSUCHFIELD => 'û����Ӧ���ֶ�', + DB_ERROR_NOSUCHTABLE => 'û����Ӧ�ı�', + DB_ERROR_NOT_CAPABLE => '���ݿ��̨������', + DB_ERROR_NOT_FOUND => 'û�з���', + DB_ERROR_NOT_LOCKED => 'û�б�����', + DB_ERROR_SYNTAX => '�����', + DB_ERROR_UNSUPPORTED => '��֧��', + DB_ERROR_VALUE_COUNT_ON_ROW => '�������ۼ�ֵ', + DB_ERROR_INVALID_DSN => '��Ч������Դ (DSN)', + DB_ERROR_CONNECT_FAILED => '����ʧ��', + 0 => 'û�д���', // DB_OK + DB_ERROR_NEED_MORE_DATA => '�ṩ�����ݲ��ܷ���Ҫ��', + DB_ERROR_EXTENSION_NOT_FOUND=> '��չû�б�����', + DB_ERROR_NOSUCHDB => 'û����Ӧ�����ݿ�', + DB_ERROR_ACCESS_VIOLATION => 'û�к��ʵ�Ȩ��' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-cz.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-cz.inc.php new file mode 100644 index 00000000..2424c244 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-cz.inc.php @@ -0,0 +1,40 @@ +<?php + +# Czech language, encoding by ISO 8859-2 charset (Iso Latin-2) +# For convert to MS Windows use shell command: +# iconv -f ISO_8859-2 -t CP1250 < adodb-cz.inc.php +# For convert to ASCII use shell command: +# unaccent ISO_8859-2 < adodb-cz.inc.php +# v1.0, 19.06.2003 Kamil Jakubovic <jake@host.sk> + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'cz', + DB_ERROR => 'nezn�m� chyba', + DB_ERROR_ALREADY_EXISTS => 'ji? existuje', + DB_ERROR_CANNOT_CREATE => 'nelze vytvo?it', + DB_ERROR_CANNOT_DELETE => 'nelze smazat', + DB_ERROR_CANNOT_DROP => 'nelze odstranit', + DB_ERROR_CONSTRAINT => 'poru?en� omezuj�c� podm�nky', + DB_ERROR_DIVZERO => 'd?len� nulou', + DB_ERROR_INVALID => 'neplatn�', + DB_ERROR_INVALID_DATE => 'neplatn� datum nebo ?as', + DB_ERROR_INVALID_NUMBER => 'neplatn� ?�slo', + DB_ERROR_MISMATCH => 'nesouhlas�', + DB_ERROR_NODBSELECTED => '?�dn� datab�ze nen� vybr�na', + DB_ERROR_NOSUCHFIELD => 'pole nenalezeno', + DB_ERROR_NOSUCHTABLE => 'tabulka nenalezena', + DB_ERROR_NOT_CAPABLE => 'nepodporov�no', + DB_ERROR_NOT_FOUND => 'nenalezeno', + DB_ERROR_NOT_LOCKED => 'nezam?eno', + DB_ERROR_SYNTAX => 'syntaktick� chyba', + DB_ERROR_UNSUPPORTED => 'nepodporov�no', + DB_ERROR_VALUE_COUNT_ON_ROW => '', + DB_ERROR_INVALID_DSN => 'neplatn� DSN', + DB_ERROR_CONNECT_FAILED => 'p?ipojen� selhalo', + 0 => 'bez chyb', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'm�lo zdrojov�ch dat', + DB_ERROR_EXTENSION_NOT_FOUND=> 'roz?�?en� nenalezeno', + DB_ERROR_NOSUCHDB => 'datab�ze neexistuje', + DB_ERROR_ACCESS_VIOLATION => 'nedostate?n� pr�va' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-da.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-da.inc.php new file mode 100644 index 00000000..ca0e72d6 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-da.inc.php @@ -0,0 +1,33 @@ +<?php +// Arne Eckmann bananstat#users.sourceforge.net +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'da', + DB_ERROR => 'ukendt fejl', + DB_ERROR_ALREADY_EXISTS => 'eksisterer allerede', + DB_ERROR_CANNOT_CREATE => 'kan ikke oprette', + DB_ERROR_CANNOT_DELETE => 'kan ikke slette', + DB_ERROR_CANNOT_DROP => 'kan ikke droppe', + DB_ERROR_CONSTRAINT => 'begrænsning krænket', + DB_ERROR_DIVZERO => 'division med nul', + DB_ERROR_INVALID => 'ugyldig', + DB_ERROR_INVALID_DATE => 'ugyldig dato eller klokkeslet', + DB_ERROR_INVALID_NUMBER => 'ugyldigt tal', + DB_ERROR_MISMATCH => 'mismatch', + DB_ERROR_NODBSELECTED => 'ingen database valgt', + DB_ERROR_NOSUCHFIELD => 'felt findes ikke', + DB_ERROR_NOSUCHTABLE => 'tabel findes ikke', + DB_ERROR_NOT_CAPABLE => 'DB backend opgav', + DB_ERROR_NOT_FOUND => 'ikke fundet', + DB_ERROR_NOT_LOCKED => 'ikke låst', + DB_ERROR_SYNTAX => 'syntaksfejl', + DB_ERROR_UNSUPPORTED => 'ikke understøttet', + DB_ERROR_VALUE_COUNT_ON_ROW => 'resulterende antal felter svarer ikke til forespørgslens antal felter', + DB_ERROR_INVALID_DSN => 'ugyldig DSN', + DB_ERROR_CONNECT_FAILED => 'tilslutning mislykkedes', + 0 => 'ingen fejl', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'utilstrækkelige data angivet', + DB_ERROR_EXTENSION_NOT_FOUND=> 'udvidelse ikke fundet', + DB_ERROR_NOSUCHDB => 'database ikke fundet', + DB_ERROR_ACCESS_VIOLATION => 'utilstrækkelige rettigheder' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-de.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-de.inc.php new file mode 100644 index 00000000..244cb2f6 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-de.inc.php @@ -0,0 +1,33 @@ +<?php +// contributed by "Heinz Hombergs" <opn@hhombergs.de> +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'de', + DB_ERROR => 'Unbekannter Fehler', + DB_ERROR_ALREADY_EXISTS => 'existiert bereits', + DB_ERROR_CANNOT_CREATE => 'kann nicht erstellen', + DB_ERROR_CANNOT_DELETE => 'kann nicht löschen', + DB_ERROR_CANNOT_DROP => 'Tabelle oder Index konnte nicht gelöscht werden', + DB_ERROR_CONSTRAINT => 'Constraint Verletzung', + DB_ERROR_DIVZERO => 'Division durch Null', + DB_ERROR_INVALID => 'ung¨ltig', + DB_ERROR_INVALID_DATE => 'ung¨ltiges Datum oder Zeit', + DB_ERROR_INVALID_NUMBER => 'ung¨ltige Zahl', + DB_ERROR_MISMATCH => 'Unverträglichkeit', + DB_ERROR_NODBSELECTED => 'keine Dantebank ausgewählt', + DB_ERROR_NOSUCHFIELD => 'Feld nicht vorhanden', + DB_ERROR_NOSUCHTABLE => 'Tabelle nicht vorhanden', + DB_ERROR_NOT_CAPABLE => 'Funktion nicht installiert', + DB_ERROR_NOT_FOUND => 'nicht gefunden', + DB_ERROR_NOT_LOCKED => 'nicht gesperrt', + DB_ERROR_SYNTAX => 'Syntaxfehler', + DB_ERROR_UNSUPPORTED => 'nicht Unterst¨tzt', + DB_ERROR_VALUE_COUNT_ON_ROW => 'Anzahl der zur¨ckgelieferten Felder entspricht nicht der Anzahl der Felder in der Abfrage', + DB_ERROR_INVALID_DSN => 'ung¨ltiger DSN', + DB_ERROR_CONNECT_FAILED => 'Verbindung konnte nicht hergestellt werden', + 0 => 'kein Fehler', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'Nicht gen¨gend Daten geliefert', + DB_ERROR_EXTENSION_NOT_FOUND=> 'erweiterung nicht gefunden', + DB_ERROR_NOSUCHDB => 'keine Datenbank', + DB_ERROR_ACCESS_VIOLATION => 'ungen¨gende Rechte' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-en.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-en.inc.php new file mode 100644 index 00000000..6895995e --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-en.inc.php @@ -0,0 +1,33 @@ +<?php + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'en', + DB_ERROR => 'unknown error', + DB_ERROR_ALREADY_EXISTS => 'already exists', + DB_ERROR_CANNOT_CREATE => 'can not create', + DB_ERROR_CANNOT_DELETE => 'can not delete', + DB_ERROR_CANNOT_DROP => 'can not drop', + DB_ERROR_CONSTRAINT => 'constraint violation', + DB_ERROR_DIVZERO => 'division by zero', + DB_ERROR_INVALID => 'invalid', + DB_ERROR_INVALID_DATE => 'invalid date or time', + DB_ERROR_INVALID_NUMBER => 'invalid number', + DB_ERROR_MISMATCH => 'mismatch', + DB_ERROR_NODBSELECTED => 'no database selected', + DB_ERROR_NOSUCHFIELD => 'no such field', + DB_ERROR_NOSUCHTABLE => 'no such table', + DB_ERROR_NOT_CAPABLE => 'DB backend not capable', + DB_ERROR_NOT_FOUND => 'not found', + DB_ERROR_NOT_LOCKED => 'not locked', + DB_ERROR_SYNTAX => 'syntax error', + DB_ERROR_UNSUPPORTED => 'not supported', + DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row', + DB_ERROR_INVALID_DSN => 'invalid DSN', + DB_ERROR_CONNECT_FAILED => 'connect failed', + 0 => 'no error', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'insufficient data supplied', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extension not found', + DB_ERROR_NOSUCHDB => 'no such database', + DB_ERROR_ACCESS_VIOLATION => 'insufficient permissions' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-es.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-es.inc.php new file mode 100644 index 00000000..1e0afbb4 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-es.inc.php @@ -0,0 +1,33 @@ +<?php +// contributed by "Horacio Degiorgi" <horaciod@codigophp.com> +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'es', + DB_ERROR => 'error desconocido', + DB_ERROR_ALREADY_EXISTS => 'ya existe', + DB_ERROR_CANNOT_CREATE => 'imposible crear', + DB_ERROR_CANNOT_DELETE => 'imposible borrar', + DB_ERROR_CANNOT_DROP => 'imposible hacer drop', + DB_ERROR_CONSTRAINT => 'violacion de constraint', + DB_ERROR_DIVZERO => 'division por cero', + DB_ERROR_INVALID => 'invalido', + DB_ERROR_INVALID_DATE => 'fecha u hora invalida', + DB_ERROR_INVALID_NUMBER => 'numero invalido', + DB_ERROR_MISMATCH => 'error', + DB_ERROR_NODBSELECTED => 'no hay base de datos seleccionada', + DB_ERROR_NOSUCHFIELD => 'campo invalido', + DB_ERROR_NOSUCHTABLE => 'tabla no existe', + DB_ERROR_NOT_CAPABLE => 'capacidad invalida para esta DB', + DB_ERROR_NOT_FOUND => 'no encontrado', + DB_ERROR_NOT_LOCKED => 'no bloqueado', + DB_ERROR_SYNTAX => 'error de sintaxis', + DB_ERROR_UNSUPPORTED => 'no soportado', + DB_ERROR_VALUE_COUNT_ON_ROW => 'la cantidad de columnas no corresponden a la cantidad de valores', + DB_ERROR_INVALID_DSN => 'DSN invalido', + DB_ERROR_CONNECT_FAILED => 'fallo la conexion', + 0 => 'sin error', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'insuficientes datos', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extension no encontrada', + DB_ERROR_NOSUCHDB => 'base de datos no encontrada', + DB_ERROR_ACCESS_VIOLATION => 'permisos insuficientes' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-esperanto.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-esperanto.inc.php new file mode 100644 index 00000000..16ca00e2 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-esperanto.inc.php @@ -0,0 +1,35 @@ +<?php +// Vivu Esperanto cxiam! +// Traduko fare de Antono Vasiljev (anders[#]brainactive.org) + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'eo', + DB_ERROR => 'nekonata eraro', + DB_ERROR_ALREADY_EXISTS => 'jam ekzistas', + DB_ERROR_CANNOT_CREATE => 'maleblas krei', + DB_ERROR_CANNOT_DELETE => 'maleblas elimini', + DB_ERROR_CANNOT_DROP => 'maleblas elimini (drop)', + DB_ERROR_CONSTRAINT => 'rompo de kondicxoj de provo', + DB_ERROR_DIVZERO => 'divido per 0 (nul)', + DB_ERROR_INVALID => 'malregule', + DB_ERROR_INVALID_DATE => 'malregula dato kaj tempo', + DB_ERROR_INVALID_NUMBER => 'malregula nombro', + DB_ERROR_MISMATCH => 'eraro', + DB_ERROR_NODBSELECTED => 'datumbazo ne elektita', + DB_ERROR_NOSUCHFIELD => 'ne ekzistas kampo', + DB_ERROR_NOSUCHTABLE => 'ne ekzistas tabelo', + DB_ERROR_NOT_CAPABLE => 'DBMS ne povas', + DB_ERROR_NOT_FOUND => 'ne trovita', + DB_ERROR_NOT_LOCKED => 'ne blokita', + DB_ERROR_SYNTAX => 'sintaksa eraro', + DB_ERROR_UNSUPPORTED => 'ne apogata', + DB_ERROR_VALUE_COUNT_ON_ROW => 'nombrilo de valoroj en linio', + DB_ERROR_INVALID_DSN => 'malregula DSN-o', + DB_ERROR_CONNECT_FAILED => 'konekto malsukcesa', + 0 => 'cxio bone', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'ne suficxe da datumo', + DB_ERROR_EXTENSION_NOT_FOUND=> 'etendo ne trovita', + DB_ERROR_NOSUCHDB => 'datumbazo ne ekzistas', + DB_ERROR_ACCESS_VIOLATION => 'ne suficxe da rajto por atingo' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-fa.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-fa.inc.php new file mode 100644 index 00000000..55943135 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-fa.inc.php @@ -0,0 +1,35 @@ +<?php + +/* Farsi - by "Peyman Hooshmandi Raad" <phooshmand#gmail.com> */ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'fa', + DB_ERROR => 'خطای ناشناخته', + DB_ERROR_ALREADY_EXISTS => 'وجود دارد', + DB_ERROR_CANNOT_CREATE => 'امکان create وجود ندارد', + DB_ERROR_CANNOT_DELETE => 'امکان حذف وجود ندارد', + DB_ERROR_CANNOT_DROP => 'امکان drop وجود ندارد', + DB_ERROR_CONSTRAINT => 'نقض شرط', + DB_ERROR_DIVZERO => 'تقسیم بر صفر', + DB_ERROR_INVALID => 'نامعتبر', + DB_ERROR_INVALID_DATE => 'زمان یا تاریخ نامعتبر', + DB_ERROR_INVALID_NUMBER => 'عدد نامعتبر', + DB_ERROR_MISMATCH => 'عدم مطابقت', + DB_ERROR_NODBSELECTED => 'بانک اطلاعاتی انتخاب نشده است', + DB_ERROR_NOSUCHFIELD => 'چنین ستونی وجود ندارد', + DB_ERROR_NOSUCHTABLE => 'چنین جدولی وجود ندارد', + DB_ERROR_NOT_CAPABLE => 'backend بانک اطلاعاتی قادر نیست', + DB_ERROR_NOT_FOUND => 'پیدا نشد', + DB_ERROR_NOT_LOCKED => 'قفل نشده', + DB_ERROR_SYNTAX => 'خطای دستوری', + DB_ERROR_UNSUPPORTED => 'پشتیبانی نمی شود', + DB_ERROR_VALUE_COUNT_ON_ROW => 'شمارش مقادیر روی ردیف', + DB_ERROR_INVALID_DSN => 'DSN نامعتبر', + DB_ERROR_CONNECT_FAILED => 'ارتباط برقرار نشد', + 0 => 'بدون خطا', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'داده ناکافی است', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extension پیدا نشد', + DB_ERROR_NOSUCHDB => 'چنین بانک اطلاعاتی وجود ندارد', + DB_ERROR_ACCESS_VIOLATION => 'حق دسترسی ناکافی' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-fr.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-fr.inc.php new file mode 100644 index 00000000..066a2a5e --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-fr.inc.php @@ -0,0 +1,33 @@ +<?php + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'fr', + DB_ERROR => 'erreur inconnue', + DB_ERROR_ALREADY_EXISTS => 'existe déjà', + DB_ERROR_CANNOT_CREATE => 'crétion impossible', + DB_ERROR_CANNOT_DELETE => 'effacement impossible', + DB_ERROR_CANNOT_DROP => 'suppression impossible', + DB_ERROR_CONSTRAINT => 'violation de contrainte', + DB_ERROR_DIVZERO => 'division par zéro', + DB_ERROR_INVALID => 'invalide', + DB_ERROR_INVALID_DATE => 'date ou heure invalide', + DB_ERROR_INVALID_NUMBER => 'nombre invalide', + DB_ERROR_MISMATCH => 'erreur de concordance', + DB_ERROR_NODBSELECTED => 'pas de base de donnéessélectionnée', + DB_ERROR_NOSUCHFIELD => 'nom de colonne invalide', + DB_ERROR_NOSUCHTABLE => 'table ou vue inexistante', + DB_ERROR_NOT_CAPABLE => 'fonction optionnelle non installée', + DB_ERROR_NOT_FOUND => 'pas trouvé', + DB_ERROR_NOT_LOCKED => 'non verrouillé', + DB_ERROR_SYNTAX => 'erreur de syntaxe', + DB_ERROR_UNSUPPORTED => 'non supporté', + DB_ERROR_VALUE_COUNT_ON_ROW => 'valeur insérée trop grande pour colonne', + DB_ERROR_INVALID_DSN => 'DSN invalide', + DB_ERROR_CONNECT_FAILED => 'échec à la connexion', + 0 => "pas d'erreur", // DB_OK + DB_ERROR_NEED_MORE_DATA => 'données fournies insuffisantes', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extension non trouvée', + DB_ERROR_NOSUCHDB => 'base de données inconnue', + DB_ERROR_ACCESS_VIOLATION => 'droits insuffisants' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-hu.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-hu.inc.php new file mode 100644 index 00000000..d6f0ef82 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-hu.inc.php @@ -0,0 +1,34 @@ +<?php +# Hungarian language, encoding by ISO 8859-2 charset (Iso Latin-2) +# Hal�szv�ri G�bor <g.halaszvari#portmax.hu> +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'hu', + DB_ERROR => 'ismeretlen hiba', + DB_ERROR_ALREADY_EXISTS => 'm�r l�tezik', + DB_ERROR_CANNOT_CREATE => 'nem siker�lt l�trehozni', + DB_ERROR_CANNOT_DELETE => 'nem siker�lt t�r�lni', + DB_ERROR_CANNOT_DROP => 'nem siker�lt eldobni', + DB_ERROR_CONSTRAINT => 'szab�lyok megszeg�se', + DB_ERROR_DIVZERO => 'oszt�s null�val', + DB_ERROR_INVALID => '�rv�nytelen', + DB_ERROR_INVALID_DATE => '�rv�nytelen d�tum vagy id�', + DB_ERROR_INVALID_NUMBER => '�rv�nytelen sz�m', + DB_ERROR_MISMATCH => 'nem megfelel�', + DB_ERROR_NODBSELECTED => 'nincs kiv�lasztott adatb�zis', + DB_ERROR_NOSUCHFIELD => 'nincs ilyen mez�', + DB_ERROR_NOSUCHTABLE => 'nincs ilyen t�bla', + DB_ERROR_NOT_CAPABLE => 'DB backend nem t�mogatja', + DB_ERROR_NOT_FOUND => 'nem tal�lhat�', + DB_ERROR_NOT_LOCKED => 'nincs lez�rva', + DB_ERROR_SYNTAX => 'szintaktikai hiba', + DB_ERROR_UNSUPPORTED => 'nem t�mogatott', + DB_ERROR_VALUE_COUNT_ON_ROW => 'soron v�gzett �rt�k sz�ml�l�s', + DB_ERROR_INVALID_DSN => 'hib�s DSN', + DB_ERROR_CONNECT_FAILED => 'sikertelen csatlakoz�s', + 0 => 'nincs hiba', // DB_OK + DB_ERROR_NEED_MORE_DATA => 't�l kev�s az adat', + DB_ERROR_EXTENSION_NOT_FOUND=> 'b�v�tm�ny nem tal�lhat�', + DB_ERROR_NOSUCHDB => 'nincs ilyen adatb�zis', + DB_ERROR_ACCESS_VIOLATION => 'nincs jogosults�g' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-it.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-it.inc.php new file mode 100644 index 00000000..20c5b93b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-it.inc.php @@ -0,0 +1,34 @@ +<?php +// Italian language file contributed by Tiraboschi Massimiliano aka TiMax +// www.maxdev.com timax@maxdev.com +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'it', + DB_ERROR => 'errore sconosciuto', + DB_ERROR_ALREADY_EXISTS => 'esiste già', + DB_ERROR_CANNOT_CREATE => 'non posso creare', + DB_ERROR_CANNOT_DELETE => 'non posso cancellare', + DB_ERROR_CANNOT_DROP => 'non posso eliminare', + DB_ERROR_CONSTRAINT => 'violazione constraint', + DB_ERROR_DIVZERO => 'divisione per zero', + DB_ERROR_INVALID => 'non valido', + DB_ERROR_INVALID_DATE => 'data od ora non valida', + DB_ERROR_INVALID_NUMBER => 'numero non valido', + DB_ERROR_MISMATCH => 'diversi', + DB_ERROR_NODBSELECTED => 'nessun database selezionato', + DB_ERROR_NOSUCHFIELD => 'nessun campo trovato', + DB_ERROR_NOSUCHTABLE => 'nessuna tabella trovata', + DB_ERROR_NOT_CAPABLE => 'DB backend non abilitato', + DB_ERROR_NOT_FOUND => 'non trovato', + DB_ERROR_NOT_LOCKED => 'non bloccato', + DB_ERROR_SYNTAX => 'errore di sintassi', + DB_ERROR_UNSUPPORTED => 'non supportato', + DB_ERROR_VALUE_COUNT_ON_ROW => 'valore inserito troppo grande per una colonna', + DB_ERROR_INVALID_DSN => 'DSN non valido', + DB_ERROR_CONNECT_FAILED => 'connessione fallita', + 0 => 'nessun errore', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'dati inseriti insufficienti', + DB_ERROR_EXTENSION_NOT_FOUND=> 'estensione non trovata', + DB_ERROR_NOSUCHDB => 'database non trovato', + DB_ERROR_ACCESS_VIOLATION => 'permessi insufficienti' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-nl.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-nl.inc.php new file mode 100644 index 00000000..abe77b52 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-nl.inc.php @@ -0,0 +1,33 @@ +<?php +// Translated by Pim Koeman (pim#wittenborg-university.com) +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'nl', + DB_ERROR => 'onbekende fout', + DB_ERROR_ALREADY_EXISTS => 'bestaat al', + DB_ERROR_CANNOT_CREATE => 'kan niet aanmaken', + DB_ERROR_CANNOT_DELETE => 'kan niet wissen', + DB_ERROR_CANNOT_DROP => 'kan niet verwijderen', + DB_ERROR_CONSTRAINT => 'constraint overtreding', + DB_ERROR_DIVZERO => 'poging tot delen door nul', + DB_ERROR_INVALID => 'ongeldig', + DB_ERROR_INVALID_DATE => 'ongeldige datum of tijd', + DB_ERROR_INVALID_NUMBER => 'ongeldig nummer', + DB_ERROR_MISMATCH => 'is incorrect', + DB_ERROR_NODBSELECTED => 'geen database geselecteerd', + DB_ERROR_NOSUCHFIELD => 'onbekend veld', + DB_ERROR_NOSUCHTABLE => 'onbekende tabel', + DB_ERROR_NOT_CAPABLE => 'database systeem is niet tot uitvoer in staat', + DB_ERROR_NOT_FOUND => 'niet gevonden', + DB_ERROR_NOT_LOCKED => 'niet vergrendeld', + DB_ERROR_SYNTAX => 'syntaxis fout', + DB_ERROR_UNSUPPORTED => 'niet ondersteund', + DB_ERROR_VALUE_COUNT_ON_ROW => 'waarde telling op rij', + DB_ERROR_INVALID_DSN => 'ongeldige DSN', + DB_ERROR_CONNECT_FAILED => 'connectie mislukt', + 0 => 'geen fout', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'onvoldoende data gegeven', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extensie niet gevonden', + DB_ERROR_NOSUCHDB => 'onbekende database', + DB_ERROR_ACCESS_VIOLATION => 'onvoldoende rechten' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-pl.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-pl.inc.php new file mode 100644 index 00000000..9d9e3906 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-pl.inc.php @@ -0,0 +1,35 @@ +<?php + +// Contributed by Grzegorz Pacan <gp#dione.cc> + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'pl', + DB_ERROR => 'niezidentyfikowany b��d', + DB_ERROR_ALREADY_EXISTS => 'ju� istniej�', + DB_ERROR_CANNOT_CREATE => 'nie mo�na stworzy�', + DB_ERROR_CANNOT_DELETE => 'nie mo�na usun��', + DB_ERROR_CANNOT_DROP => 'nie mo�na porzuci�', + DB_ERROR_CONSTRAINT => 'pogwa�cenie uprawnie�', + DB_ERROR_DIVZERO => 'dzielenie przez zero', + DB_ERROR_INVALID => 'b��dny', + DB_ERROR_INVALID_DATE => 'b��dna godzina lub data', + DB_ERROR_INVALID_NUMBER => 'b��dny numer', + DB_ERROR_MISMATCH => 'niedopasowanie', + DB_ERROR_NODBSELECTED => 'baza danych nie zosta�a wybrana', + DB_ERROR_NOSUCHFIELD => 'nie znaleziono pola', + DB_ERROR_NOSUCHTABLE => 'nie znaleziono tabeli', + DB_ERROR_NOT_CAPABLE => 'nie zdolny', + DB_ERROR_NOT_FOUND => 'nie znaleziono', + DB_ERROR_NOT_LOCKED => 'nie zakmni�ty', + DB_ERROR_SYNTAX => 'b��d sk�adni', + DB_ERROR_UNSUPPORTED => 'nie obs�uguje', + DB_ERROR_VALUE_COUNT_ON_ROW => 'warto�� liczona w szeregu', + DB_ERROR_INVALID_DSN => 'b��dny DSN', + DB_ERROR_CONNECT_FAILED => 'po��czenie nie zosta�o zrealizowane', + 0 => 'brak b��d�w', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'niedostateczna ilo�� informacji', + DB_ERROR_EXTENSION_NOT_FOUND=> 'nie znaleziono rozszerzenia', + DB_ERROR_NOSUCHDB => 'nie znaleziono bazy', + DB_ERROR_ACCESS_VIOLATION => 'niedostateczne uprawnienia' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-pt-br.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-pt-br.inc.php new file mode 100644 index 00000000..cd28f7e5 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-pt-br.inc.php @@ -0,0 +1,35 @@ +<?php +// contributed by "Levi Fukumori" levi _AT_ fukumori _DOT_ com _DOT_ br +// portugese (brazilian) +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'pt-br', + DB_ERROR => 'erro desconhecido', + DB_ERROR_ALREADY_EXISTS => 'j� existe', + DB_ERROR_CANNOT_CREATE => 'imposs�vel criar', + DB_ERROR_CANNOT_DELETE => 'imposs�vel exclu�r', + DB_ERROR_CANNOT_DROP => 'imposs�vel remover', + DB_ERROR_CONSTRAINT => 'viola��o do confinamente', + DB_ERROR_DIVZERO => 'divis�o por zero', + DB_ERROR_INVALID => 'inv�lido', + DB_ERROR_INVALID_DATE => 'data ou hora inv�lida', + DB_ERROR_INVALID_NUMBER => 'n�mero inv�lido', + DB_ERROR_MISMATCH => 'erro', + DB_ERROR_NODBSELECTED => 'nenhum banco de dados selecionado', + DB_ERROR_NOSUCHFIELD => 'campo inv�lido', + DB_ERROR_NOSUCHTABLE => 'tabela inexistente', + DB_ERROR_NOT_CAPABLE => 'capacidade inv�lida para este BD', + DB_ERROR_NOT_FOUND => 'n�o encontrado', + DB_ERROR_NOT_LOCKED => 'n�o bloqueado', + DB_ERROR_SYNTAX => 'erro de sintaxe', + DB_ERROR_UNSUPPORTED => +'n�o suportado', + DB_ERROR_VALUE_COUNT_ON_ROW => 'a quantidade de colunas n�o corresponde ao de valores', + DB_ERROR_INVALID_DSN => 'DSN inv�lido', + DB_ERROR_CONNECT_FAILED => 'falha na conex�o', + 0 => 'sem erro', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'dados insuficientes', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extens�o n�o encontrada', + DB_ERROR_NOSUCHDB => 'banco de dados n�o encontrado', + DB_ERROR_ACCESS_VIOLATION => 'permiss�o insuficiente' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ro.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ro.inc.php new file mode 100644 index 00000000..bcd7d132 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ro.inc.php @@ -0,0 +1,35 @@ +<?php + +/* Romanian - by "bogdan stefan" <sbogdan#rsb.ro> */ + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'ro', + DB_ERROR => 'eroare necunoscuta', + DB_ERROR_ALREADY_EXISTS => 'deja exista', + DB_ERROR_CANNOT_CREATE => 'nu se poate creea', + DB_ERROR_CANNOT_DELETE => 'nu se poate sterge', + DB_ERROR_CANNOT_DROP => 'nu se poate executa drop', + DB_ERROR_CONSTRAINT => 'violare de constrain', + DB_ERROR_DIVZERO => 'se divide la zero', + DB_ERROR_INVALID => 'invalid', + DB_ERROR_INVALID_DATE => 'data sau timp invalide', + DB_ERROR_INVALID_NUMBER => 'numar invalid', + DB_ERROR_MISMATCH => 'nepotrivire-mismatch', + DB_ERROR_NODBSELECTED => 'nu exista baza de date selectata', + DB_ERROR_NOSUCHFIELD => 'camp inexistent', + DB_ERROR_NOSUCHTABLE => 'tabela inexistenta', + DB_ERROR_NOT_CAPABLE => 'functie optionala neinstalata', + DB_ERROR_NOT_FOUND => 'negasit', + DB_ERROR_NOT_LOCKED => 'neblocat', + DB_ERROR_SYNTAX => 'eroare de sintaxa', + DB_ERROR_UNSUPPORTED => 'nu e suportat', + DB_ERROR_VALUE_COUNT_ON_ROW => 'valoare prea mare pentru coloana', + DB_ERROR_INVALID_DSN => 'DSN invalid', + DB_ERROR_CONNECT_FAILED => 'conectare esuata', + 0 => 'fara eroare', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'data introduse insuficiente', + DB_ERROR_EXTENSION_NOT_FOUND=> 'extensie negasita', + DB_ERROR_NOSUCHDB => 'nu exista baza de date', + DB_ERROR_ACCESS_VIOLATION => 'permisiuni insuficiente' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ru1251.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ru1251.inc.php new file mode 100644 index 00000000..3a20538a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-ru1251.inc.php @@ -0,0 +1,35 @@ +<?php + +// Russian language file contributed by "Cyrill Malevanov" cyrill#malevanov.spb.ru. + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'ru1251', + DB_ERROR => '����������� ������', + DB_ERROR_ALREADY_EXISTS => '��� ����������', + DB_ERROR_CANNOT_CREATE => '���������� �������', + DB_ERROR_CANNOT_DELETE => '���������� �������', + DB_ERROR_CANNOT_DROP => '���������� ������� (drop)', + DB_ERROR_CONSTRAINT => '��������� ������� ��������', + DB_ERROR_DIVZERO => '������� �� 0', + DB_ERROR_INVALID => '�����������', + DB_ERROR_INVALID_DATE => '������������ ���� ��� �����', + DB_ERROR_INVALID_NUMBER => '������������ �����', + DB_ERROR_MISMATCH => '������', + DB_ERROR_NODBSELECTED => '�� �� �������', + DB_ERROR_NOSUCHFIELD => '�� ���������� ����', + DB_ERROR_NOSUCHTABLE => '�� ���������� �������', + DB_ERROR_NOT_CAPABLE => '���� �� � ���������', + DB_ERROR_NOT_FOUND => '�� �������', + DB_ERROR_NOT_LOCKED => '�� �������������', + DB_ERROR_SYNTAX => '�������������� ������', + DB_ERROR_UNSUPPORTED => '�� ��������������', + DB_ERROR_VALUE_COUNT_ON_ROW => '������� �������� � ������', + DB_ERROR_INVALID_DSN => '������������ DSN', + DB_ERROR_CONNECT_FAILED => '���������� ���������', + 0 => '��� ������', // DB_OK + DB_ERROR_NEED_MORE_DATA => '������������� ������������ ������', + DB_ERROR_EXTENSION_NOT_FOUND=> '���������� �� �������', + DB_ERROR_NOSUCHDB => '�� ���������� ��', + DB_ERROR_ACCESS_VIOLATION => '������������ ���� �������' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-sv.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-sv.inc.php new file mode 100644 index 00000000..a9fd6981 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-sv.inc.php @@ -0,0 +1,33 @@ +<?php +// Christian Tiberg" christian@commsoft.nu +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'en', + DB_ERROR => 'Ok�nt fel', + DB_ERROR_ALREADY_EXISTS => 'finns redan', + DB_ERROR_CANNOT_CREATE => 'kan inte skapa', + DB_ERROR_CANNOT_DELETE => 'kan inte ta bort', + DB_ERROR_CANNOT_DROP => 'kan inte sl�ppa', + DB_ERROR_CONSTRAINT => 'begr�nsning kr�nkt', + DB_ERROR_DIVZERO => 'division med noll', + DB_ERROR_INVALID => 'ogiltig', + DB_ERROR_INVALID_DATE => 'ogiltigt datum eller tid', + DB_ERROR_INVALID_NUMBER => 'ogiltigt tal', + DB_ERROR_MISMATCH => 'felaktig matchning', + DB_ERROR_NODBSELECTED => 'ingen databas vald', + DB_ERROR_NOSUCHFIELD => 'inget s�dant f�lt', + DB_ERROR_NOSUCHTABLE => 'ingen s�dan tabell', + DB_ERROR_NOT_CAPABLE => 'DB backend klarar det inte', + DB_ERROR_NOT_FOUND => 'finns inte', + DB_ERROR_NOT_LOCKED => 'inte l�st', + DB_ERROR_SYNTAX => 'syntaxfel', + DB_ERROR_UNSUPPORTED => 'st�ds ej', + DB_ERROR_VALUE_COUNT_ON_ROW => 'v�rde r�knat p� rad', + DB_ERROR_INVALID_DSN => 'ogiltig DSN', + DB_ERROR_CONNECT_FAILED => 'anslutning misslyckades', + 0 => 'inget fel', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'otillr�ckligt med data angivet', + DB_ERROR_EXTENSION_NOT_FOUND=> 'ut�kning hittades ej', + DB_ERROR_NOSUCHDB => 'ingen s�dan databas', + DB_ERROR_ACCESS_VIOLATION => 'otillr�ckliga r�ttigheter' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-uk1251.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-uk1251.inc.php new file mode 100644 index 00000000..675016d1 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb-uk1251.inc.php @@ -0,0 +1,35 @@ +<?php + +// Ukrainian language file contributed by Alex Rootoff rootoff{AT}pisem.net. + +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'uk1251', + DB_ERROR => '������� �������', + DB_ERROR_ALREADY_EXISTS => '��� ����', + DB_ERROR_CANNOT_CREATE => '��������� ��������', + DB_ERROR_CANNOT_DELETE => '��������� ��������', + DB_ERROR_CANNOT_DROP => '��������� ������� (drop)', + DB_ERROR_CONSTRAINT => '��������� ���� ��������', + DB_ERROR_DIVZERO => '������ �� 0', + DB_ERROR_INVALID => '�����������', + DB_ERROR_INVALID_DATE => '����������� ���� �� ���', + DB_ERROR_INVALID_NUMBER => '����������� �����', + DB_ERROR_MISMATCH => '�������', + DB_ERROR_NODBSELECTED => '�� ������� ��', + DB_ERROR_NOSUCHFIELD => '�� ���� ����', + DB_ERROR_NOSUCHTABLE => '�� ���� �������', + DB_ERROR_NOT_CAPABLE => '���� �� � �����', + DB_ERROR_NOT_FOUND => '�� ��������', + DB_ERROR_NOT_LOCKED => '�� �����������', + DB_ERROR_SYNTAX => '����������� �������', + DB_ERROR_UNSUPPORTED => '�� �����������', + DB_ERROR_VALUE_COUNT_ON_ROW => '�������� ������� � ������', + DB_ERROR_INVALID_DSN => '����������� DSN', + DB_ERROR_CONNECT_FAILED => '�\'������� ��������', + 0 => '��� ������', // DB_OK + DB_ERROR_NEED_MORE_DATA => '������ ����������� �����', + DB_ERROR_EXTENSION_NOT_FOUND=> '���������� �� ��������', + DB_ERROR_NOSUCHDB => '�� ���� ��', + DB_ERROR_ACCESS_VIOLATION => '����������� ���� �������' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb_th.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb_th.inc.php new file mode 100644 index 00000000..3fdd9970 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/lang/adodb_th.inc.php @@ -0,0 +1,33 @@ +<?php +// by Trirat Petchsingh <rosskouk#gmail.com> +$ADODB_LANG_ARRAY = array ( + 'LANG' => 'th', + DB_ERROR => 'error ไม่รู้สาเหตุ', + DB_ERROR_ALREADY_EXISTS => 'มี�?ล้ว', + DB_ERROR_CANNOT_CREATE => 'สร้างไม่ได้', + DB_ERROR_CANNOT_DELETE => 'ลบไม่ได้', + DB_ERROR_CANNOT_DROP => 'drop ไม่ได้', + DB_ERROR_CONSTRAINT => 'constraint violation', + DB_ERROR_DIVZERO => 'หา�?ด้วยสู�?', + DB_ERROR_INVALID => 'ไม่ valid', + DB_ERROR_INVALID_DATE => 'วันที่ เวลา ไม่ valid', + DB_ERROR_INVALID_NUMBER => 'เลขไม่ valid', + DB_ERROR_MISMATCH => 'mismatch', + DB_ERROR_NODBSELECTED => 'ไม่ได้เลือ�?�?านข้อมูล', + DB_ERROR_NOSUCHFIELD => 'ไม่มีฟีลด์นี้', + DB_ERROR_NOSUCHTABLE => 'ไม่มีตารางนี้', + DB_ERROR_NOT_CAPABLE => 'DB backend not capable', + DB_ERROR_NOT_FOUND => 'ไม่พบ', + DB_ERROR_NOT_LOCKED => 'ไม่ได้ล๊อ�?', + DB_ERROR_SYNTAX => 'ผิด syntax', + DB_ERROR_UNSUPPORTED => 'ไม่ support', + DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row', + DB_ERROR_INVALID_DSN => 'invalid DSN', + DB_ERROR_CONNECT_FAILED => 'ไม่สามารถ connect', + 0 => 'no error', // DB_OK + DB_ERROR_NEED_MORE_DATA => 'ข้อมูลไม่เพียงพอ', + DB_ERROR_EXTENSION_NOT_FOUND=> 'ไม่พบ extension', + DB_ERROR_NOSUCHDB => 'ไม่มีข้อมูลนี้', + DB_ERROR_ACCESS_VIOLATION => 'permissions ไม่พอ' +); +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/license.txt b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/license.txt new file mode 100755 index 00000000..2353871c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/license.txt @@ -0,0 +1,182 @@ +ADOdb is dual licensed using BSD and LGPL. + +In plain English, you do not need to distribute your application in source code form, nor do you need to distribute ADOdb source code, provided you follow the rest of terms of the BSD license. + +For more info about ADOdb, visit http://adodb.sourceforge.net/ + +BSD Style-License +================= + +Copyright (c) 2000, 2001, 2002, 2003, 2004 John Lim +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list +of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list +of conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. + +Neither the name of the John Lim nor the names of its contributors may be used to +endorse or promote products derived from this software without specific prior written +permission. + +DISCLAIMER: +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +JOHN LIM OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +========================================================== +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + +Preamble +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. + +We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. + +The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. + + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". + +A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + +a) The modified work must itself be a software library. +b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. +c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. +d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. +(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. + +However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + + +a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) +b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. +c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. +d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. +e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. +For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: + + +a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. +b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. +8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/readme.txt b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/readme.txt new file mode 100755 index 00000000..97bdd9ea --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/readme.txt @@ -0,0 +1,62 @@ +>> ADODB Library for PHP4 + +(c) 2000-2004 John Lim (jlim@natsoft.com.my) + +Released under both BSD and GNU Lesser GPL library license. +This means you can use it in proprietary products. + + +>> Introduction + +PHP's database access functions are not standardised. This creates a +need for a database class library to hide the differences between the +different databases (encapsulate the differences) so we can easily +switch databases. + +We currently support MySQL, Interbase, Sybase, PostgreSQL, Oracle, +Microsoft SQL server, Foxpro ODBC, Access ODBC, Informix, DB2, +Sybase SQL Anywhere, generic ODBC and Microsoft's ADO. + +We hope more people will contribute drivers to support other databases. + + +>> Documentation and Examples + +Refer to the adodb/docs directory for full documentation and examples. +There is also a tutorial tute.htm that contrasts ADODB code with +mysql code. + + +>>> Files +Adodb.inc.php is the main file. You need to include only this file. + +Adodb-*.inc.php are the database specific driver code. + +Test.php contains a list of test commands to exercise the class library. + +Adodb-session.php is the PHP4 session handling code. + +Testdatabases.inc.php contains the list of databases to apply the tests on. + +Benchmark.php is a simple benchmark to test the throughput of a simple SELECT +statement for databases described in testdatabases.inc.php. The benchmark +tables are created in test.php. + +readme.htm is the main documentation. + +tute.htm is the tutorial. + + +>> More Info + +For more information, including installation see readme.htm +or visit + http://adodb.sourceforge.net/ + + +>> Feature Requests and Bug Reports + +Email to jlim@natsoft.com.my + + + \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/toexport.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/toexport.inc.php new file mode 100644 index 00000000..6975b51a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/toexport.inc.php @@ -0,0 +1,134 @@ +<?php + +/** + * @version V4.93 10 Oct 2006 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + * Released under both BSD license and Lesser GPL library license. + * Whenever there is any discrepancy between the two licenses, + * the BSD license will take precedence. + * + * Code to export recordsets in several formats: + * + * AS VARIABLE + * $s = rs2csv($rs); # comma-separated values + * $s = rs2tab($rs); # tab delimited + * + * TO A FILE + * $f = fopen($path,'w'); + * rs2csvfile($rs,$f); + * fclose($f); + * + * TO STDOUT + * rs2csvout($rs); + */ + +// returns a recordset as a csv string +function rs2csv(&$rs,$addtitles=true) +{ + return _adodb_export($rs,',',',',false,$addtitles); +} + +// writes recordset to csv file +function rs2csvfile(&$rs,$fp,$addtitles=true) +{ + _adodb_export($rs,',',',',$fp,$addtitles); +} + +// write recordset as csv string to stdout +function rs2csvout(&$rs,$addtitles=true) +{ + $fp = fopen('php://stdout','wb'); + _adodb_export($rs,',',',',true,$addtitles); + fclose($fp); +} + +function rs2tab(&$rs,$addtitles=true) +{ + return _adodb_export($rs,"\t",',',false,$addtitles); +} + +// to file pointer +function rs2tabfile(&$rs,$fp,$addtitles=true) +{ + _adodb_export($rs,"\t",',',$fp,$addtitles); +} + +// to stdout +function rs2tabout(&$rs,$addtitles=true) +{ + $fp = fopen('php://stdout','wb'); + _adodb_export($rs,"\t",' ',true,$addtitles); + if ($fp) fclose($fp); +} + +function _adodb_export(&$rs,$sep,$sepreplace,$fp=false,$addtitles=true,$quote = '"',$escquote = '"',$replaceNewLine = ' ') +{ + if (!$rs) return ''; + //---------- + // CONSTANTS + $NEWLINE = "\r\n"; + $BUFLINES = 100; + $escquotequote = $escquote.$quote; + $s = ''; + + if ($addtitles) { + $fieldTypes = $rs->FieldTypesArray(); + reset($fieldTypes); + $i = 0; + while(list(,$o) = each($fieldTypes)) { + + $v = ($o) ? $o->name : 'Field'.($i++); + if ($escquote) $v = str_replace($quote,$escquotequote,$v); + $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v)))); + $elements[] = $v; + + } + $s .= implode($sep, $elements).$NEWLINE; + } + $hasNumIndex = isset($rs->fields[0]); + + $line = 0; + $max = $rs->FieldCount(); + + while (!$rs->EOF) { + $elements = array(); + $i = 0; + + if ($hasNumIndex) { + for ($j=0; $j < $max; $j++) { + $v = $rs->fields[$j]; + if (!is_object($v)) $v = trim($v); + else $v = 'Object'; + if ($escquote) $v = str_replace($quote,$escquotequote,$v); + $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v)))); + + if (strpos($v,$sep) !== false || strpos($v,$quote) !== false) $elements[] = "$quote$v$quote"; + else $elements[] = $v; + } + } else { // ASSOCIATIVE ARRAY + foreach($rs->fields as $v) { + if ($escquote) $v = str_replace($quote,$escquotequote,trim($v)); + $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v)))); + + if (strpos($v,$sep) !== false || strpos($v,$quote) !== false) $elements[] = "$quote$v$quote"; + else $elements[] = $v; + } + } + $s .= implode($sep, $elements).$NEWLINE; + $rs->MoveNext(); + $line += 1; + if ($fp && ($line % $BUFLINES) == 0) { + if ($fp === true) echo $s; + else fwrite($fp,$s); + $s = ''; + } + } + + if ($fp) { + if ($fp === true) echo $s; + else fwrite($fp,$s); + $s = ''; + } + + return $s; +} +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/tohtml.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/tohtml.inc.php new file mode 100644 index 00000000..76245661 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/adodb/tohtml.inc.php @@ -0,0 +1,201 @@ +<?php +/* + V4.93 10 Oct 2006 (c) 2000-2010 John Lim (jlim#natsoft.com). All rights reserved. + Released under both BSD license and Lesser GPL library license. + Whenever there is any discrepancy between the two licenses, + the BSD license will take precedence. + + Some pretty-printing by Chris Oxenreider <oxenreid@state.net> +*/ + +// specific code for tohtml +GLOBAL $gSQLMaxRows,$gSQLBlockRows,$ADODB_ROUND; + +$ADODB_ROUND=4; // rounding +$gSQLMaxRows = 1000; // max no of rows to download +$gSQLBlockRows=20; // max no of rows per table block + +// RecordSet to HTML Table +//------------------------------------------------------------ +// Convert a recordset to a html table. Multiple tables are generated +// if the number of rows is > $gSQLBlockRows. This is because +// web browsers normally require the whole table to be downloaded +// before it can be rendered, so we break the output into several +// smaller faster rendering tables. +// +// $rs: the recordset +// $ztabhtml: the table tag attributes (optional) +// $zheaderarray: contains the replacement strings for the headers (optional) +// +// USAGE: +// include('adodb.inc.php'); +// $db = ADONewConnection('mysql'); +// $db->Connect('mysql','userid','password','database'); +// $rs = $db->Execute('select col1,col2,col3 from table'); +// rs2html($rs, 'BORDER=2', array('Title1', 'Title2', 'Title3')); +// $rs->Close(); +// +// RETURNS: number of rows displayed + + +function rs2html(&$rs,$ztabhtml=false,$zheaderarray=false,$htmlspecialchars=true,$echo = true) +{ +$s ='';$rows=0;$docnt = false; +GLOBAL $gSQLMaxRows,$gSQLBlockRows,$ADODB_ROUND; + + if (!$rs) { + printf(ADODB_BAD_RS,'rs2html'); + return false; + } + + if (! $ztabhtml) $ztabhtml = "BORDER='1' WIDTH='98%'"; + //else $docnt = true; + $typearr = array(); + $ncols = $rs->FieldCount(); + $hdr = "<TABLE COLS=$ncols $ztabhtml><tr>\n\n"; + for ($i=0; $i < $ncols; $i++) { + $field = $rs->FetchField($i); + if ($field) { + if ($zheaderarray) $fname = $zheaderarray[$i]; + else $fname = htmlspecialchars($field->name); + $typearr[$i] = $rs->MetaType($field->type,$field->max_length); + //print " $field->name $field->type $typearr[$i] "; + } else { + $fname = 'Field '.($i+1); + $typearr[$i] = 'C'; + } + if (strlen($fname)==0) $fname = ' '; + $hdr .= "<TH>$fname</TH>"; + } + $hdr .= "\n</tr>"; + if ($echo) print $hdr."\n\n"; + else $html = $hdr; + + // smart algorithm - handles ADODB_FETCH_MODE's correctly by probing... + $numoffset = isset($rs->fields[0]) ||isset($rs->fields[1]) || isset($rs->fields[2]); + while (!$rs->EOF) { + + $s .= "<TR valign=top>\n"; + + for ($i=0; $i < $ncols; $i++) { + if ($i===0) $v=($numoffset) ? $rs->fields[0] : reset($rs->fields); + else $v = ($numoffset) ? $rs->fields[$i] : next($rs->fields); + + $type = $typearr[$i]; + switch($type) { + case 'D': + if (strpos($v,':') !== false); + else { + if (empty($v)) { + $s .= "<TD> </TD>\n"; + } else { + $s .= " <TD>".$rs->UserDate($v,"D d, M Y") ."</TD>\n"; + } + break; + } + case 'T': + if (empty($v)) $s .= "<TD> </TD>\n"; + else $s .= " <TD>".$rs->UserTimeStamp($v,"D d, M Y, H:i:s") ."</TD>\n"; + break; + + case 'N': + if (abs(abs($v) - round($v,0)) < 0.00000001) + $v = round($v); + else + $v = round($v,$ADODB_ROUND); + case 'I': + $vv = stripslashes((trim($v))); + if (strlen($vv) == 0) $vv .= ' '; + $s .= " <TD align=right>".$vv ."</TD>\n"; + + break; + /* + case 'B': + if (substr($v,8,2)=="BM" ) $v = substr($v,8); + $mtime = substr(str_replace(' ','_',microtime()),2); + $tmpname = "tmp/".uniqid($mtime).getmypid(); + $fd = @fopen($tmpname,'a'); + @ftruncate($fd,0); + @fwrite($fd,$v); + @fclose($fd); + if (!function_exists ("mime_content_type")) { + function mime_content_type ($file) { + return exec("file -bi ".escapeshellarg($file)); + } + } + $t = mime_content_type($tmpname); + $s .= (substr($t,0,5)=="image") ? " <td><img src='$tmpname' alt='$t'></td>\\n" : " <td><a + href='$tmpname'>$t</a></td>\\n"; + break; + */ + + default: + if ($htmlspecialchars) $v = htmlspecialchars(trim($v)); + $v = trim($v); + if (strlen($v) == 0) $v = ' '; + $s .= " <TD>". str_replace("\n",'<br>',stripslashes($v)) ."</TD>\n"; + + } + } // for + $s .= "</TR>\n\n"; + + $rows += 1; + if ($rows >= $gSQLMaxRows) { + $rows = "<p>Truncated at $gSQLMaxRows</p>"; + break; + } // switch + + $rs->MoveNext(); + + // additional EOF check to prevent a widow header + if (!$rs->EOF && $rows % $gSQLBlockRows == 0) { + + //if (connection_aborted()) break;// not needed as PHP aborts script, unlike ASP + if ($echo) print $s . "</TABLE>\n\n"; + else $html .= $s ."</TABLE>\n\n"; + $s = $hdr; + } + } // while + + if ($echo) print $s."</TABLE>\n\n"; + else $html .= $s."</TABLE>\n\n"; + + if ($docnt) if ($echo) print "<H2>".$rows." Rows</H2>"; + + return ($echo) ? $rows : $html; + } + +// pass in 2 dimensional array +function arr2html(&$arr,$ztabhtml='',$zheaderarray='') +{ + if (!$ztabhtml) $ztabhtml = 'BORDER=1'; + + $s = "<TABLE $ztabhtml>";//';print_r($arr); + + if ($zheaderarray) { + $s .= '<TR>'; + for ($i=0; $i<sizeof($zheaderarray); $i++) { + $s .= " <TH>{$zheaderarray[$i]}</TH>\n"; + } + $s .= "\n</TR>"; + } + + for ($i=0; $i<sizeof($arr); $i++) { + $s .= '<TR>'; + $a = $arr[$i]; + if (is_array($a)) + for ($j=0; $j<sizeof($a); $j++) { + $val = $a[$j]; + if (empty($val)) $val = ' '; + $s .= " <TD>$val</TD>\n"; + } + else if ($a) { + $s .= ' <TD>'.$a."</TD>\n"; + } else $s .= " <TD> </TD>\n"; + $s .= "\n</TR>\n"; + } + $s .= '</TABLE>'; + print $s; +} + +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/decorator.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/decorator.inc.php new file mode 100644 index 00000000..c31e6181 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/decorator.inc.php @@ -0,0 +1,215 @@ +<?php +// $Id: decorator.inc.php,v 1.8 2007/04/05 11:09:38 mr-russ Exp $ + +// This group of functions and classes provides support for +// resolving values in a lazy manner (ie, as and when required) +// using the Decorator pattern. + +###TODO: Better documentation!!! + +// Construction functions: + +function field($fieldName, $default = null) { + return new FieldDecorator($fieldName, $default); +} + +function merge(/* ... */) { + return new ArrayMergeDecorator(func_get_args()); +} + +function concat(/* ... */) { + return new ConcatDecorator(func_get_args()); +} + +function callback($callback, $params = null) { + return new CallbackDecorator($callback, $params); +} + +function ifempty($value, $empty, $full = null) { + return new IfEmptyDecorator($value, $empty, $full); +} + +function url($base, $vars = null /* ... */) { + // If more than one array of vars is given, + // use an ArrayMergeDecorator to have them merged + // at value evaluation time. + if (func_num_args() > 2) { + $v = func_get_args(); + array_shift($v); + return new UrlDecorator($base, new ArrayMergeDecorator($v)); + } + return new UrlDecorator($base, $vars); +} + +function replace($str, $params) { + return new replaceDecorator($str, $params); +} + +// Resolving functions: + +function value(&$var, &$fields, $esc = null) { + if (is_a($var, 'Decorator')) { + $val = $var->value($fields); + } else { + $val =& $var; + } + + if (is_string($val)) { + switch($esc) { + case 'xml': + return strtr($val, array( + '&' => '&', + "'" => ''', '"' => '"', + '<' => '<', '>' => '>' + )); + case 'html': + return htmlentities($val, ENT_COMPAT, 'UTF-8'); + case 'url': + return urlencode($val); + } + } + return $val; +} + +function value_xml(&$var, &$fields) { + return value($var, $fields, 'xml'); +} + +function value_xml_attr($attr, &$var, &$fields) { + $val = value($var, $fields, 'xml'); + if (!empty($val)) + return " {$attr}=\"{$val}\""; + else + return ''; +} + +function value_url(&$var, &$fields) { + return value($var, $fields, 'url'); +} + +// Underlying classes: + +class Decorator +{ + function Decorator($value) { + $this->v = $value; + } + + function value($fields) { + return $this->v; + } +} + +class FieldDecorator extends Decorator +{ + function FieldDecorator($fieldName, $default = null) { + $this->f = $fieldName; + if ($default !== null) $this->d = $default; + } + + function value($fields) { + return isset($fields[$this->f]) ? value($fields[$this->f], $fields) : (isset($this->d) ? $this->d : null); + } +} + +class ArrayMergeDecorator extends Decorator +{ + function ArrayMergeDecorator($arrays) { + $this->m = $arrays; + } + + function value($fields) { + $accum = array(); + foreach($this->m as $var) { + $accum = array_merge($accum, value($var, $fields)); + } + return $accum; + } +} + +class ConcatDecorator extends Decorator +{ + function ConcatDecorator($values) { + $this->c = $values; + } + + function value($fields) { + $accum = ''; + foreach($this->c as $var) { + $accum .= value($var, $fields); + } + return trim($accum); + } +} + +class CallbackDecorator extends Decorator +{ + function CallbackDecorator($callback, $param = null) { + $this->fn = $callback; + $this->p = $param; + } + + function value($fields) { + return call_user_func($this->fn, $fields, $this->p); + } +} + +class IfEmptyDecorator extends Decorator +{ + function IfEmptyDecorator($value, $empty, $full = null) { + $this->v = $value; + $this->e = $empty; + if ($full !== null) $this->f = $full; + } + + function value($fields) { + $val = value($this->v, $fields); + if (empty($val)) + return value($this->e, $fields); + else + return isset($this->f) ? value($this->f, $fields) : $val; + } +} + +class UrlDecorator extends Decorator +{ + function UrlDecorator($base, $queryVars = null) { + $this->b = $base; + if ($queryVars !== null) + $this->q = $queryVars; + } + + function value($fields) { + $url = value($this->b, $fields); + + if ($url === false) return ''; + + if (!empty($this->q)) { + $queryVars = value($this->q, $fields); + + $sep = '?'; + foreach ($queryVars as $var => $value) { + $url .= $sep . value_url($var, $fields) . '=' . value_url($value, $fields); + $sep = '&'; + } + } + return $url; + } +} + +class replaceDecorator extends Decorator +{ + function replaceDecorator($str, $params) { + $this->s = $str; + $this->p = $params; + } + + function value($fields) { + $str = $this->s; + foreach ($this->p as $k => $v) { + $str = str_replace($k, value($v, $fields), $str); + } + return $str; + } +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/errorhandler.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/errorhandler.inc.php new file mode 100644 index 00000000..11e93b2b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/errorhandler.inc.php @@ -0,0 +1,78 @@ +<?php + +/** + * Overrides default ADODB error handler to provide nicer error handling. + * + * $Id: errorhandler.inc.php,v 1.20 2005/11/13 08:39:49 chriskl Exp $ + */ + +if (! defined('ADODB_ERROR_HANDLER')) + define('ADODB_ERROR_HANDLER','Error_Handler'); + +/** + * Default Error Handler. This will be called with the following params + * + * @param $dbms the RDBMS you are connecting to + * @param $fn the name of the calling function (in uppercase) + * @param $errno the native error number from the database + * @param $errmsg the native error msg from the database + * @param $p1 $fn specific parameter - see below + * @param $P2 $fn specific parameter - see below + */ +function Error_Handler($dbms, $fn, $errno, $errmsg, $p1=false, $p2=false) +{ + global $lang, $conf; + global $misc, $appName, $appVersion, $appLangFiles; + + switch($fn) { + case 'EXECUTE': + $sql = $p1; + $inputparams = $p2; + + $s = "<p><b>{$lang['strsqlerror']}</b><br />" . $misc->printVal($errmsg,'errormsg') . "</p> + <p><b>{$lang['strinstatement']}</b><br />" . $misc->printVal($sql) . "</p> + "; + echo "<table class=\"error\" cellpadding=\"5\"><tr><td>{$s}</td></tr></table><br />\n"; + + break; + + case 'PCONNECT': + case 'CONNECT': + $_failed = true; + global $_reload_browser; + $_reload_browser = true; + unset($_SESSION['sharedUsername']); + unset($_SESSION['sharedPassword']); + unset($_SESSION['webdbLogin'][$_REQUEST['server']]); + $msg = $lang['strloginfailed']; + include('./login.php'); + exit; + break; + default: + $s = "$dbms error: [$errno: $errmsg] in $fn($p1, $p2)\n"; + echo "<table class=\"error\" cellpadding=\"5\"><tr><td>{$s}</td></tr></table><br />\n"; + break; + } + /* + * Log connection error somewhere + * 0 message is sent to PHP's system logger, using the Operating System's system + * logging mechanism or a file, depending on what the error_log configuration + * directive is set to. + * 1 message is sent by email to the address in the destination parameter. + * This is the only message type where the fourth parameter, extra_headers is used. + * This message type uses the same internal function as mail() does. + * 2 message is sent through the PHP debugging connection. + * This option is only available if remote debugging has been enabled. + * In this case, the destination parameter specifies the host name or IP address + * and optionally, port number, of the socket receiving the debug information. + * 3 message is appended to the file destination + */ + if (defined('ADODB_ERROR_LOG_TYPE')) { + $t = date('Y-m-d H:i:s'); + if (defined('ADODB_ERROR_LOG_DEST')) + error_log("($t) $s", ADODB_ERROR_LOG_TYPE, ADODB_ERROR_LOG_DEST); + else + error_log("($t) $s", ADODB_ERROR_LOG_TYPE); + } +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/highlight.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/highlight.php new file mode 100644 index 00000000..74b93e30 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/highlight.php @@ -0,0 +1,1114 @@ +<?php +/* This software is licensed through a BSD-style License. + * http://www.opensource.org/licenses/bsd-license.php + +Copyright (c) 2003, 2004, Jacob D. Cohen +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +Neither the name of Jacob D. Cohen nor the names of his contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*/ + +function keyword_replace($keywords, $text, $ncs = false) +{ + $cm = ($ncs)? "i" : ""; + foreach ($keywords as $keyword) + { + $search[] = "/(\\b$keyword\\b)/" . $cm; + $replace[] = '<span class="keyword">\\0</span>'; + } + + $search[] = "/(\\bclass\s)/"; + $replace[] = '<span class="keyword">\\0</span>'; + + return preg_replace($search, $replace, $text); +} + + +function preproc_replace($preproc, $text) +{ + foreach ($preproc as $proc) + { + $search[] = "/(\\s*#\s*$proc\\b)/"; + $replace[] = '<span class="keyword">\\0</span>'; + } + + return preg_replace($search, $replace, $text); +} + + +function sch_syntax_helper($text) +{ + return $text; +} + + +function syntax_highlight_helper($text, $language) +{ + $preproc = array(); + $preproc["C++"] = array( + "if", "ifdef", "ifndef", "elif", "else", + "endif", "include", "define", "undef", "line", + "error", "pragma"); + $preproc["C89"] = & $preproc["C++"]; + $preproc["C"] = & $preproc["C89"]; + + $keywords = array( + "C++" => array( + "asm", "auto", "bool", "break", "case", + "catch", "char", /*class*/ "const", "const_cast", + "continue", "default", "delete", "do", "double", + "dynamic_cast", "else", "enum", "explicit", "export", + "extern", "false", "float", "for", "friend", + "goto", "if", "inline", "int", "long", + "mutable", "namespace", "new", "operator", "private", + "protected", "public", "register", "reinterpret_cast", "return", + "short", "signed", "sizeof", "static", "static_cast", + "struct", "switch", "template", "this", "throw", + "true", "try", "typedef", "typeid", "typename", + "union", "unsigned", "using", "virtual", "void", + "volatile", "wchar_t", "while"), + + "C89" => array( + "auto", "break", "case", "char", "const", + "continue", "default", "do", "double", "else", + "enum", "extern", "float", "for", "goto", + "if", "int", "long", "register", "return", + "short", "signed", "sizeof", "static", "struct", + "switch", "typedef", "union", "unsigned", "void", + "volatile", "while"), + + "C" => array( + "auto", "break", "case", "char", "const", + "continue", "default", "do", "double", "else", + "enum", "extern", "float", "for", "goto", + "if", "int", "long", "register", "return", + "short", "signed", "sizeof", "static", "struct", + "switch", "typedef", "union", "unsigned", "void", + "volatile", "while", "__restrict","_Bool"), + + "PHP" => array( + "and", "or", "xor", "__FILE__", "__LINE__", + "array", "as", "break", "case", "cfunction", + /*class*/ "const", "continue", "declare", "default", + "die", "do", "echo", "else", "elseif", + "empty", "enddeclare", "endfor", "endforeach", "endif", + "endswitch", "endwhile", "eval", "exit", "extends", + "for", "foreach", "function", "global", "if", + "include", "include_once", "isset", "list", "new", + "old_function", "print", "require", "require_once", "return", + "static", "switch", "unset", "use", "var", + "while", "__FUNCTION__", "__CLASS__"), + + "Perl" => array( + "-A", "-B", "-C", "-M", "-O", + "-R", "-S", "-T", "-W", "-X", + "-b", "-c", "-d", "-e", "-f", + "-g", "-k", "-l", "-o", "-p", + "-r", "-s", "-t", "-u", "-w", + "-x", "-z", "ARGV", "DATA", "ENV", + "SIG", "STDERR", "STDIN", "STDOUT", "atan2", + "bind", "binmode", "bless", "caller", "chdir", + "chmod", "chomp", "chop", "chown", "chr", + "chroot", "close", "closedir", "cmp", "connect", + "continue", "cos", "crypt", "dbmclose", "dbmopen", + "defined", "delete", "die", "do", "dump", + "each", "else", "elsif", "endgrent", "endhostent", + "endnetent", "endprotent", "endpwent", "endservent", "eof", + "eq", "eval", "exec", "exists", "exit", + "exp", "fcntl", "fileno", "flock", "for", + "foreach", "fork", "format", "formline", "ge", + "getc", "getgrent", "getgrid", "getgrnam", "gethostbyaddr", + "gethostbyname","gethostent", "getlogin", "getnetbyaddr", "getnetbyname", + "getnetent", "getpeername", "getpgrp", "getppid", "getpriority", + "getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam", + "getpwuid", "getservbyname","getservbyport","getservent","getsockname", + "getsockopt", "glob", "gmtime", "goto", "grep", + /*gt*/ "hex", "if", "import", "index", + "int", "ioctl", "join", "keys", "kill", + "last", "lc", "lcfirst", "le", "length", + "link", "listen", "local", "localtime", "log", + "lstat", /*lt*/ "m", "map", "mkdir", + "msgctl", "msgget", "msgrcv", "msgsnd", "my", + "ne", "next", "no", "oct", "open", + "opendir", "ord", "pack", "package", "pipe", + "pop", "pos", "print", "printf", "push", + "q", "qq", "quotemeta","qw", "qx", + "rand", "read", "readdir", "readlink", "recv", + "redo", "ref", "refname", "require", "reset", + "return", "reverse", "rewinddir","rindex", "rmdir", + "s", "scalar", "seek", "seekdir", "select", + "semctl", "semget", "semop", "send", "setgrent", + "sethostent", "setnetent", "setpgrp", "setpriority", "setprotoent", + "setpwent", "setservent", "setsockopt","shift", "shmctl", + "shmget", "shmread", "shmwrite", "shutdown", "sin", + "sleep", "socket", "socketpair","sort", "splice", + "split", "sprintf", "sqrt", "srand", "stat", + "study", "sub", "substr", "symlink", "syscall", + "sysopen", "sysread", "system", "syswrite", "tell", + "telldir", "tie", "tied", "time", "times", + "tr", "truncate", "uc", "ucfirst", "umask", + "undef", "unless", "unlink", "unpack", "unshift", + "untie", "until", "use", "utime", "values", + "vec", "wait", "waitpid", "wantarray", "warn", + "while", "write", "y", "or", "and", + "not"), + + "Java" => array( + "abstract", "boolean", "break", "byte", "case", + "catch", "char", /*class*/ "const", "continue", + "default", "do", "double", "else", "extends", + "final", "finally", "float", "for", "goto", + "if", "implements", "import", "instanceof", "int", + "interface", "long", "native", "new", "package", + "private", "protected", "public", "return", "short", + "static", "strictfp", "super", "switch", "synchronized", + "this", "throw", "throws", "transient", "try", + "void", "volatile", "while"), + + "VB" => array( + "AddressOf", "Alias", "And", "Any", "As", + "Binary", "Boolean", "ByRef", "Byte", "ByVal", + "Call", "Case", "CBool", "CByte", "CCur", + "CDate", "CDbl", "CInt", "CLng", "Close", + "Const", "CSng", "CStr", "Currency", "CVar", + "CVErr", "Date", "Debug", "Declare", "DefBool", + "DefByte", "DefCur", "DefDate", "DefDbl", "DefInt", + "DefLng", "DefObj", "DefSng", "DefStr", "DefVar", + "Dim", "Do", "Double", "Each", "Else", + "End", "Enum", "Eqv", "Erase", "Error", + "Event", "Exit", "For", "Friend", "Function", + "Get", "Get", "Global", "GoSub", "GoTo", + "If", "Imp", "Implements","In", "Input", + "Integer", "Is", "LBound", "Len", "Let", + "Lib", "Like", "Line", "Lock", "Long", + "Loop", "LSet", "Mod", "Name", "Next", + "Not", "Nothing", "Null", "Object", "On", + "Open", "Option Base 1","Option Compare Binary", + "Option Compare Database", "Option Compare Text", "Option Explicit", + "Option Private Module", "Optional", "Or", "Output", + "ParamArray", "Preserve", "Print", "Private", "Property", + "Public", "Put", "RaiseEvent","Random", "Read", + "ReDim", "Resume", "Return", "RSet", "Seek", + "Select", "Set", "Single", "Spc", "Static", + "Step", "Stop", "String", "Sub", "Tab", + "Then", "To", "Type", "UBound", "Unlock", + "Variant", "Wend", "While", "With", "WithEvents", + "Write", "Xor"), + + "C#" => array( + "abstract", "as", "base", "bool", "break", + "byte", "case", "catch", "char", "checked", + /*class*/ "const", "continue", "decimal", "default", + "delegate", "do", "double", "else", "enum", + "event", "explicit", "extern", "false", "finally", + "fixed", "float", "for", "foreach", "goto", + "if", "implicit", "in", "int", "interface", + "internal", "is", "lock", "long", "namespace", + "new", "null", "object", "operator", "out", + "override", "params", "private", "protected", "public", + "readonly", "ref", "return", "sbyte", "sealed", + "short", "sizeof", "stackalloc","static", "string", + "struct", "switch", "this", "throw", "true", + "try", "typeof", "uint", "ulong", "unchecked", + "unsafe", "ushort", "using", "virtual", "volatile", + "void", "while"), + + "Ruby" => array( + "alias", "and", "begin", "break", "case", + /*class*/ "def", "defined", "do", "else", + "elsif", "end", "ensure", "false", "for", + "if", "in", "module", "next", "module", + "next", "nil", "not", "or", "redo", + "rescue", "retry", "return", "self", "super", + "then", "true", "undef", "unless", "until", + "when", "while", "yield"), + + "Python" => array( + "and", "assert", "break", /*"class",*/ "continue", + "def", "del", "elif", "else", "except", + "exec", "finally", "for", "from", "global", + "if", "import", "in", "is", "lambda", + "not", "or", "pass", "print", "raise", + "return", "try", "while", "yield"), + + "Pascal" => array( + "Absolute", "Abstract", "All", "And", "And_then", + "Array", "Asm", "Begin", "Bindable", "Case", + /*"Class",*/ "Const", "Constructor","Destructor", "Div", + "Do", "Downto", "Else", "End", "Export", + "File", "For", "Function", "Goto", "If", + "Import", "Implementation","Inherited","In", "Inline", + "Interface", "Is", "Label", "Mod", "Module", + "Nil", "Not", "Object", "Of", "Only", + "Operator", "Or", "Or_else", "Otherwise", "Packed", + "Pow", "Procedure", "Program", "Property", "Protected", + "Qualified", "Record", "Repeat", "Restricted", "Set", + "Shl", "Shr", "Then", "To", "Type", + "Unit", "Until", "Uses", "Value", "Var", + "View", "Virtual", "While", "With", "Xor"), + + "mIRC" => array( + ), + + "PL/I" => array( + "A", "ABS", "ACOS", "%ACTIVATE", "ACTUALCOUNT", + "ADD", "ADDR", "ADDREL", "ALIGNED", "ALLOCATE", + "ALLOC", "ALLOCATION", "ALLOCN", "ANY", "ANYCONDITION", + "APPEND", "AREA", "ASIN", "ATAN", "ATAND", + "ATANH", "AUTOMATIC", "AUTO", "B", "B1", + "B2", "B3", "B4", "BACKUP_DATE", "BASED", + "BATCH", "BEGIN", "BINARY", "BIN", "BIT", + "BLOCK_BOUNDARY_FORMAT", "BLOCK_IO", "BLOCK_SIZE", "BOOL", + "BUCKET_SIZE", "BUILTIN", "BY", "BYTE", "BYTESIZE", + "CALL", "CANCEL_CONTROL_O", "CARRIAGE_RETURN_FORMAT", + "CEIL", "CHAR", "CHARACTER", "CLOSE", "COLLATE", "COLUMN", + "CONDITION", "CONTIGUOUS", "CONTIGUOUS_BEST_TRY", "CONTROLLED", + "CONVERSION", "COPY", "COS", "COSD", "COSH", + "CREATION_DATE", "CURRENT_POSITION", "DATE", + "DATETIME", "%DEACTIVATE", "DECIMAL", "DEC", "%DECLARE", + "%DCL", "DECLARE", "DCL", "DECODE", "DEFAULT_FILE_NAME", + "DEFERRED_WRITE", "DEFINED", "DEF", "DELETE", + "DESCRIPTOR", "%DICTIONARY", "DIMENSION","DIM", "DIRECT", + "DISPLAY", "DIVIDE", "%DO", "DO", "E", + "EDIT", "%ELSE", "ELSE", "EMPTY", "ENCODE", + "%END", "END", "ENDFILE", "ENDPAGE", "ENTRY", + "ENVIRONMENT", "ENV", "%ERROR", "ERROR", "EVERY", + "EXP", "EXPIRATION_DATE", "EXTEND", "EXTENSION_SIZE", + "EXTERNAL", "EXT", "F", "FAST_DELETE", "%FATAL", + "FILE", "FILE_ID", "FILE_ID_TO", "FILE_SIZE", + "FINISH", "FIXED", "FIXEDOVERFLOW", "FOFL", + "FIXED_CONTROL_FROM", "FIXED_CONTROL_SIZE", "FIXED_CONTROL_SIZE_TO", + "FIXED_CONTROL_TO", "FIXED_LENGTH_RECORDS", "FLOAT", + "FLOOR", "FLUSH", "FORMAT", "FREE", "FROM", + "GET", "GLOBALDEF", "GLOBALREF", "%GOTO", + "GOTO", "GO", "TO", "GROUP_PROTETION", "HBOUND", + "HIGH", "INDENT", "%IF", "IF", "IGNORE_LINE_MARKS", + "IN", "%INCLUDE", "INDEX", "INDEXED", "INDEX_NUMBER", + "%INFORM", "INFORM", "INITIAL", "INIT", "INITIAL_FILL", + "INPUT", "INT", "INTERNAL", "INTO", "KEY", + "KEYED", "KEYFROM", "KEYTO", "LABEL", "LBOUND", + "LEAVE", "LENGTH", "LIKE", "LINE", "LINENO", + "LINESIZE", "%LIST", "LIST", "LOCK_ON_READ", "LOCK_ON_WRITE", + "LOG", "LOG10", "LOG2", "LOW", "LTRIM", + "MAIN", "MANUAL_UNLOCKING", "MATCH_GREATER", + "MATCH_GREATER_EQUAL", "MATCH_NEXT", "MATCH_NEXT_EQUAL", + "MAX", "MAXIMUM_RECORD_NUMBER", "MAXIMUM_RECORD_SIZE", + "MAXLENGTH", "MEMBER", "MIN", "MOD", "MULTIBLOCK_COUNT", + "MULTIBUFFER_COUNT", "MULTIPLY", "NEXT_VOLUME", "%NOLIST", + "NOLOCK", "NONEXISTENT_RECORD", "NONRECURSIVE", "NONVARYING", + "NONVAR", "NORESCAN", "NO_ECHO", "NO_FILTER", "NO_SHARE", + "NULL", "OFFSET", "ON", "ONARGSLIST", "ONCHAR", + "ONCODE", "ONFILE", "ONKEY", "ONSOURCE", "OPEN", + "OPTIONAL", "OPTIONS", "OTHERWISE","OTHER", "OUTPUT", + "OVERFLOW", "OFL", "OWNER_GROUP", "OWNER_ID", + "OWNER_MEMBER", "OWNER_PROTECTION", "P", "%PAGE", + "PAGE", "PAGENO", "PAGESIZE", "PARAMETER", "PARM", + "PICTURE", "PIC", "POINTER", "PTR", "POSINT", + "POSITION", "POS", "PRECISION","PREC", "PRESENT", + "PRINT", "PRINTER_FORMAT", "%PROCEDURE", "%PROC", + "PROCEDURE", "PROC", "PROD", "PROMPT", "PURGE_TYPE_AHEAD", + "PUT", "R", "RANK", "READ", "READONLY", + "READ_AHEAD", "READ_CHECK", "READ_REGARDLESS", "RECORD", + "RECORD_ID", "RECORD_ID_ACCESS", "RECORD_ID_TO", "RECURSIVE", + "REFER", "REFERENCE", "RELEASE", "REPEAT", "%REPLACE", + "RESCAN", "RESIGNAL", "RETRIEVAL_POINTERS", "%RETURN", + "RETURN", "RETURNS", "REVERSE", "REVERT", "REVISION_DATE", + "REWIND", "REWIND_ON_CLOSE", "REWIND_ON_OPEN", + "REWRITE", "ROUND", "RTRIM", "%SBTTL", "SCALARVARYING", + "SEARCH", "SELECT", "SEQUENTIAL", "SEQL", + "SET", "SHARED_READ", "SHARED_WRITE", "SIGN", + "SIGNAL", "SIN", "SIND", "SINH", "SIZE", + "SKIP", "SNAP", "SOME", "SPACEBLOCK", "SPOOL", + "SQRT", "STATEMENT", "STATIC", "STOP", "STORAGE", + "STREAM", "STRING", "STRINGRANGE", "STRG", + "STRUCTURE", "SUBSCRIPTRANGE", "SUBRG", "SUBSTR", + "SUBTRACT", "SUM", "SUPERCEDE","SYSIN", "SYSPRINT", + "SYSTEM", "SYSTEM_PROTECTION", "TAB", "TAN", + "TAND", "TANH", "TEMPORARY","%THEN", "THEN", + "TIME", "TIMEOUT_PERIOD", "%TITLE", "TITLE", + "TO", "TRANSLATE", "TRIM", "TRUNC", "TRUNCATE", + "UNALIGNED", "UNAL", "UNDEFINED","UNDF", "UNDERFLOW", + "UFL", "UNION", "UNSPEC", "UNTIL", "UPDATE", + "USER_OPEN", "VALID", "VALUE", "VAL", "VARIABLE", + "VARIANT", "VARYING", "VAR", "VAXCONDITION", "VERIFY", + "WAIT_FOR_RECORD", "%WARN", "WARN", "WHEN", + "WHILE", "WORLD_PROTECTION", "WRITE", "WRITE_BEHIND", + "WRITE_CHECK", "X", "ZERODIVIDE"), + + "SQL" => array( + "abort", "abs", "absolute", "access", + "action", "ada", "add", "admin", + "after", "aggregate", "alias", "all", + "allocate", "alter", "analyse", "analyze", + "and", "any", "are", "array", + "as", "asc", "asensitive", "assertion", + "assignment", "asymmetric", "at", "atomic", + "authorization", "avg", "backward", "before", + "begin", "between", "bigint", "binary", + "bit", "bitvar", "bit_length", "blob", + "boolean", "both", "breadth", "by", + "c", "cache", "call", "called", + "cardinality", "cascade", "cascaded", "case", + "cast", "catalog", "catalog_name", "chain", + "char", "character", "characteristics", "character_length", + "character_set_catalog", "character_set_name", "character_set_schema", "char_length", + "check", "checked", "checkpoint", /* "class", */ + "class_origin", "clob", "close", "cluster", + "coalesce", "cobol", "collate", "collation", + "collation_catalog", "collation_name", "collation_schema", "column", + "column_name", "command_function", "command_function_code", "comment", + "commit", "committed", "completion", "condition_number", + "connect", "connection", "connection_name", "constraint", + "constraints", "constraint_catalog", "constraint_name", "constraint_schema", + "constructor", "contains", "continue", "conversion", + "convert", "copy", "corresponding", "count", + "create", "createdb", "createuser", "cross", + "cube", "current", "current_date", "current_path", + "current_role", "current_time", "current_timestamp", "current_user", + "cursor", "cursor_name", "cycle", "data", + "database", "date", "datetime_interval_code", "datetime_interval_precision", + "day", "deallocate", "dec", "decimal", + "declare", "default", "defaults", "deferrable", + "deferred", "defined", "definer", "delete", + "delimiter", "delimiters", "depth", "deref", + "desc", "describe", "descriptor", "destroy", + "destructor", "deterministic", "diagnostics", "dictionary", + "disconnect", "dispatch", "distinct", "do", + "domain", "double", "drop", "dynamic", + "dynamic_function", "dynamic_function_code", "each", "else", + "encoding", "encrypted", "end", "end-exec", + "equals", "escape", "every", "except", + "exception", "excluding", "exclusive", "exec", + "execute", "existing", "exists", "explain", + "external", "extract", "false", "fetch", + "final", "first", "float", "for", + "force", "foreign", "fortran", "forward", + "found", "free", "freeze", "from", + "full", "function", "g", "general", + "generated", "get", "global", "go", + "goto", "grant", "granted", "group", + "grouping", "handler", "having", "hierarchy", + "hold", "host", "hour", "identity", + "ignore", "ilike", "immediate", "immutable", + "implementation", "implicit", "in", "including", + "increment", "index", "indicator", "infix", + "inherits", "initialize", "initially", "inner", + "inout", "input", "insensitive", "insert", + "instance", "instantiable", "instead", "int", + "integer", "intersect", "interval", "into", + "invoker", "is", "isnull", "isolation", + "iterate", "join", "k", "key", + "key_member", "key_type", "lancompiler", "language", + "large", "last", "lateral", "leading", + "left", "length", "less", "level", + "like", "limit", "listen", "load", + "local", "localtime", "localtimestamp", "location", + "locator", "lock", "lower", "m", + "map", "match", "max", "maxvalue", + "message_length", "message_octet_length", "message_text", "method", + "min", "minute", "minvalue", "mod", + "mode", "modifies", "modify", "module", + "month", "more", "move", "mumps", + "name", "names", "national", "natural", + "nchar", "nclob", "new", "next", + "no", "nocreatedb", "nocreateuser", "none", + "not", "nothing", "notify", "notnull", + "null", "nullable", "nullif", "number", + "numeric", "object", "octet_length", "of", + "off", "offset", "oids", "old", + "on", "only", "open", "operation", + "operator", "option", "options", "or", + "order", "ordinality", "out", "outer", + "output", "overlaps", "overlay", "overriding", + "owner", "pad", "parameter", "parameters", + "parameter_mode", "parameter_name", "parameter_ordinal_position", "parameter_specific_catalog", + "parameter_specific_name", "parameter_specific_schema", "partial", "pascal", + "password", "path", "pendant", "placing", + "pli", "position", "postfix", "precision", + "prefix", "preorder", "prepare", "preserve", + "primary", "prior", "privileges", "procedural", + "procedure", "public", "read", "reads", + "real", "recheck", "recursive", "ref", + "references", "referencing", "reindex", "relative", + "rename", "repeatable", "replace", "reset", + "restart", "restrict", "result", "return", + "returned_length", "returned_octet_length", "returned_sqlstate", "returns", + "revoke", "right", "role", "rollback", + "rollup", "routine", "routine_catalog", "routine_name", + "routine_schema", "row", "rows", "row_count", + "rule", "savepoint", "scale", "schema", + "schema_name", "scope", "scroll", "search", + "second", "section", "security", "select", + "self", "sensitive", "sequence", "serializable", + "server_name", "session", "session_user", "set", + "setof", "sets", "share", "show", + "similar", "simple", "size", "smallint", + "some", "source", "space", "specific", + "specifictype", "specific_name", "sql", "sqlcode", + "sqlerror", "sqlexception", "sqlstate", "sqlwarning", + "stable", "start", "state", "statement", + "static", "statistics", "stdin", "stdout", + "storage", "strict", "structure", "style", + "subclass_origin", "sublist", "substring", "sum", + "symmetric", "sysid", "system", "system_user", + "table", "table_name", "temp", "template", + "temporary", "terminate", "text", "than", "then", + "time", "timestamp", "timezone_hour", "timezone_minute", + "to", "toast", "trailing", "transaction", + "transactions_committed", "transactions_rolled_back", "transaction_active", "transform", + "transforms", "translate", "translation", "treat", + "trigger", "trigger_catalog", "trigger_name", "trigger_schema", + "trim", "true", "truncate", "trusted", + "type", "uncommitted", "under", "unencrypted", + "union", "unique", "unknown", "unlisten", + "unnamed", "unnest", "until", "update", + "upper", "usage", "user", "user_defined_type_catalog", + "user_defined_type_name", "user_defined_type_schema", "using", "vacuum", + "valid", "validator", "value", "values", + "varchar", "variable", "varying", "verbose", + "version", "view", "volatile", "when", + "whenever", "where", "with", "without", + "work", "write", "year", "zone") + + ); + + $case_insensitive = array( + "VB" => true, + "Pascal" => true, + "PL/I" => true, + "SQL" => true + ); + $ncs = false; + if (array_key_exists($language, $case_insensitive)) + $ncs = true; + + $text = (array_key_exists($language, $preproc))? + preproc_replace($preproc[$language], $text) : + $text; + $text = (array_key_exists($language, $keywords))? + keyword_replace($keywords[$language], $text, $ncs) : + $text; + + return $text; +} + + +function rtrim1($span, $lang, $ch) +{ + return syntax_highlight_helper(substr($span, 0, -1), $lang); +} + + +function rtrim1_htmlesc($span, $lang, $ch) +{ + return htmlspecialchars(substr($span, 0, -1)); +} + + +function sch_rtrim1($span, $lang, $ch) +{ + return sch_syntax_helper(substr($span, 0, -1)); +} + + +function rtrim2($span, $lang, $ch) +{ + return substr($span, 0, -2); +} + + +function syn_proc($span, $lang, $ch) +{ + return syntax_highlight_helper($span, $lang); +} + +function dash_putback($span, $lang, $ch) +{ + return syntax_highlight_helper('-' . $span, $lang); +} + +function slash_putback($span, $lang, $ch) +{ + return syntax_highlight_helper('/' . $span, $lang); +} + +function slash_putback_rtrim1($span, $lang, $ch) +{ + return rtrim1('/' . $span, $lang, $ch); +} + +function lparen_putback($span, $lang, $ch) +{ + return syntax_highlight_helper('(' . $span, $lang); +} + +function lparen_putback_rtrim1($span, $lang, $ch) +{ + return rtrim1('(' . $span, $lang, $ch); +} + +function prepend_xml_opentag($span, $lang, $ch) +{ + return '<span class="xml_tag"><' . $span; +} + +function proc_void($span, $lang, $ch) +{ + return $span; +} + + +/** + * Syntax highlight function + * Does the bulk of the syntax highlighting by lexing the input + * string, then calling the helper function to highlight keywords. + */ +function syntax_highlight($text, $language) +{ + if ($language == "Plain Text") return $text; + + define("normal_text", 1, true); + define("dq_literal", 2, true); + define("dq_escape", 3, true); + define("sq_literal", 4, true); + define("sq_escape", 5, true); + define("slash_begin", 6, true); + define("star_comment", 7, true); + define("star_end", 8, true); + define("line_comment", 9, true); + define("html_entity", 10, true); + define("lc_escape", 11, true); + define("block_comment",12, true); + define("paren_begin", 13, true); + define("dash_begin", 14, true); + define("bt_literal", 15, true); + define("bt_escape", 16, true); + define("xml_tag_begin",17, true); + define("xml_tag", 18, true); + define("xml_pi", 19, true); + define("sch_normal", 20, true); + define("sch_stresc", 21, true); + define("sch_idexpr", 22, true); + define("sch_numlit", 23, true); + define("sch_chrlit", 24, true); + define("sch_strlit", 25, true); + + $initial_state["Scheme"] = sch_normal; + + $sch[sch_normal][0] = sch_normal; + $sch[sch_normal]['"'] = sch_strlit; + $sch[sch_normal]["#"] = sch_chrlit; + $sch[sch_normal]["0"] = sch_numlit; + $sch[sch_normal]["1"] = sch_numlit; + $sch[sch_normal]["2"] = sch_numlit; + $sch[sch_normal]["3"] = sch_numlit; + $sch[sch_normal]["4"] = sch_numlit; + $sch[sch_normal]["5"] = sch_numlit; + $sch[sch_normal]["6"] = sch_numlit; + $sch[sch_normal]["7"] = sch_numlit; + $sch[sch_normal]["8"] = sch_numlit; + $sch[sch_normal]["9"] = sch_numlit; + + $sch[sch_strlit]['"'] = sch_normal; + $sch[sch_strlit]["\n"] = sch_normal; + $sch[sch_strlit]["\\"] = sch_stresc; + $sch[sch_strlit][0] = sch_strlit; + + $sch[sch_chrlit][" "] = sch_normal; + $sch[sch_chrlit]["\t"] = sch_normal; + $sch[sch_chrlit]["\n"] = sch_normal; + $sch[sch_chrlit]["\r"] = sch_normal; + $sch[sch_chrlit][0] = sch_chrlit; + + $sch[sch_numlit][" "] = sch_normal; + $sch[sch_numlit]["\t"] = sch_normal; + $sch[sch_numlit]["\n"] = sch_normal; + $sch[sch_numlit]["\r"] = sch_normal; + $sch[sch_numlit][0] = sch_numlit; + + // + // State transitions for C + // + $c89[normal_text]["\""] = dq_literal; + $c89[normal_text]["'"] = sq_literal; + $c89[normal_text]["/"] = slash_begin; + $c89[normal_text][0] = normal_text; + + $c89[dq_literal]["\""] = normal_text; + $c89[dq_literal]["\n"] = normal_text; + $c89[dq_literal]["\\"] = dq_escape; + $c89[dq_literal][0] = dq_literal; + + $c89[dq_escape][0] = dq_literal; + + $c89[sq_literal]["'"] = normal_text; + $c89[sq_literal]["\n"] = normal_text; + $c89[sq_literal]["\\"] = sq_escape; + $c89[sq_literal][0] = sq_literal; + + $c89[sq_escape][0] = sq_literal; + + $c89[slash_begin]["*"] = star_comment; + $c89[slash_begin][0] = normal_text; + + $c89[star_comment]["*"] = star_end; + $c89[star_comment][0] = star_comment; + + $c89[star_end]["/"] = normal_text; + $c89[star_end]["*"] = star_end; + $c89[star_end][0] = star_comment; + + // + // State transitions for C++ + // Inherit transitions from C, and add line comment support + // + $cpp = $c89; + $cpp[slash_begin]["/"] = line_comment; + $cpp[line_comment]["\n"] = normal_text; + $cpp[line_comment]["\\"] = lc_escape; + $cpp[line_comment][0] = line_comment; + + $cpp[lc_escape]["\r"] = lc_escape; + $cpp[lc_escape][0] = line_comment; + + // + // State transitions for C99. + // C99 supports line comments like C++ + // + $c99 = $cpp; + + // State transitions for PL/I + // Kinda like C + $pli = $c89; + + // + // State transitions for PHP + // Inherit transitions from C++, and add perl-style line comment support + $php = $cpp; + $php[normal_text]["#"] = line_comment; + $php[sq_literal]["\n"] = sq_literal; + $php[dq_literal]["\n"] = dq_literal; + + // + // State transitions for Perl + $perl[normal_text]["#"] = line_comment; + $perl[normal_text]["\""] = dq_literal; + $perl[normal_text]["'"] = sq_literal; + $perl[normal_text][0] = normal_text; + + $perl[dq_literal]["\""] = normal_text; + $perl[dq_literal]["\\"] = dq_escape; + $perl[dq_literal][0] = dq_literal; + + $perl[dq_escape][0] = dq_literal; + + $perl[sq_literal]["'"] = normal_text; + $perl[sq_literal]["\\"] = sq_escape; + $perl[sq_literal][0] = sq_literal; + + $perl[sq_escape][0] = sq_literal; + + $perl[line_comment]["\n"] = normal_text; + $perl[line_comment][0] = line_comment; + + $mirc[normal_text]["\""] = dq_literal; + $mirc[normal_text][";"] = line_comment; + $mirc[normal_text][0] = normal_text; + + $mirc[dq_literal]["\""] = normal_text; + $mirc[dq_literal]["\\"] = dq_escape; + $mirc[dq_literal][0] = dq_literal; + + $mirc[dq_escape][0] = dq_literal; + + $mirc[line_comment]["\n"] = normal_text; + $mirc[line_comment][0] = line_comment; + + $ruby = $perl; + + $python = $perl; + + $java = $cpp; + + $vb = $perl; + $vb[normal_text]["#"] = normal_text; + $vb[normal_text]["'"] = line_comment; + + $cs = $java; + + $pascal = $c89; + $pascal[normal_text]["("] = paren_begin; + $pascal[normal_text]["/"] = slash_begin; + $pascal[normal_text]["{"] = block_comment; + + $pascal[paren_begin]["*"] = star_comment; + $pascal[paren_begin]["'"] = sq_literal; + $pascal[paren_begin]['"'] = dq_literal; + $pascal[paren_begin][0] = normal_text; + + $pascal[slash_begin]["'"] = sq_literal; + $pascal[slash_begin]['"'] = dq_literal; + $pascal[slash_begin]['/'] = line_comment; + $pascal[slash_begin][0] = normal_text; + + $pascal[star_comment]["*"] = star_end; + $pascal[star_comment][0] = star_comment; + + $pascal[block_comment]["}"] = normal_text; + $pascal[block_comment][0] = block_comment; + + $pascal[line_comment]["\n"] = normal_text; + $pascal[line_comment][0] = line_comment; + + $pascal[star_end][")"] = normal_text; + $pascal[star_end]["*"] = star_end; + $pascal[star_end][0] = star_comment; + + $sql[normal_text]['"'] = dq_literal; + $sql[normal_text]["'"] = sq_literal; + $sql[normal_text]['`'] = bt_literal; + $sql[normal_text]['-'] = dash_begin; + $sql[normal_text][0] = normal_text; + + $sql[dq_literal]['"'] = normal_text; + $sql[dq_literal]['\\'] = dq_escape; + $sql[dq_literal][0] = dq_literal; + + $sql[sq_literal]["'"] = normal_text; + $sql[sq_literal]['\\'] = sq_escape; + $sql[sq_literal][0] = sq_literal; + + $sql[bt_literal]['`'] = normal_text; + $sql[bt_literal]['\\'] = bt_escape; + $sql[bt_literal][0] = bt_literal; + + $sql[dq_escape][0] = dq_literal; + $sql[sq_escape][0] = sq_literal; + $sql[bt_escape][0] = bt_literal; + + $sql[dash_begin]["-"] = line_comment; + $sql[dash_begin][0] = normal_text; + + $sql[line_comment]["\n"] = normal_text; + $sql[line_comment]["\\"] = lc_escape; + $sql[line_comment][0] = line_comment; + + $sql[lc_escape]["\r"] = lc_escape; + $sql[lc_escape][0] = line_comment; + + $xml[normal_text]["<"] = xml_tag_begin; + $xml[normal_text]["&"] = html_entity; + $xml[normal_text][0] = normal_text; + $xml[html_entity][";"] = normal_text; + $xml[html_entity]["<"] = xml_tag_begin; + $xml[html_entity][0] = html_entity; + $xml[xml_tag_begin]["?"] = xml_pi; + $xml[xml_tag_begin]["!"] = line_comment; + $xml[xml_tag_begin][0] = xml_tag; + $xml[xml_tag][">"] = normal_text; + $xml[xml_tag]["\""] = dq_literal; + $xml[xml_tag]["'"] = sq_literal; + $xml[xml_tag][0] = xml_tag; + $xml[xml_pi][">"] = normal_text; + $xml[xml_pi][0] = xml_tag; + $xml[line_comment][">"] = normal_text; + $xml[line_comment][0] = line_comment; + $xml[dq_literal]["\""] = xml_tag; + $xml[dq_literal]["&"] = dq_escape; + $xml[dq_literal][0] = dq_literal; + $xml[sq_literal]["'"] = xml_tag; + $xml[sq_literal]["&"] = sq_escape; + $xml[sq_literal][0] = sq_literal; + $xml[dq_escape][";"] = dq_literal; + $xml[dq_escape][0] = dq_escape; + + // + // Main state transition table + // + $states = array( + "C89" => $c89, + "C" => $c99, + "C++" => $cpp, + "PHP" => $php, + "Perl" => $perl, + "Java" => $java, + "VB" => $vb, + "C#" => $cs, + "Ruby" => $ruby, + "Python" => $python, + "Pascal" => $pascal, + "mIRC" => $mirc, + "PL/I" => $pli, + "SQL" => $sql, + "XML" => $xml, + "Scheme" => $sch + ); + + + // + // Process functions + // + $process["C89"][normal_text][sq_literal] = "rtrim1"; + $process["C89"][normal_text][dq_literal] = "rtrim1"; + $process["C89"][normal_text][slash_begin] = "rtrim1"; + $process["C89"][normal_text][0] = "syn_proc"; + + $process["C89"][slash_begin][star_comment] = "rtrim1"; + $process["C89"][slash_begin][0] = "slash_putback"; + + $process["Scheme"][sch_normal][sch_strlit] = "sch_rtrim1"; + $process["Scheme"][sch_normal][sch_chrlit] = "sch_rtrim1"; + $process["Scheme"][sch_normal][sch_numlit] = "sch_rtrim1"; + + $process["SQL"][normal_text][sq_literal] = "rtrim1"; + $process["SQL"][normal_text][dq_literal] = "rtrim1"; + $process["SQL"][normal_text][bt_literal] = "rtrim1"; + $process["SQL"][normal_text][dash_begin] = "rtrim1"; + $process["SQL"][normal_text][0] = "syn_proc"; + + $process["SQL"][dash_begin][line_comment] = "rtrim1"; + $process["SQL"][dash_begin][0] = "dash_putback"; + + $process["PL/I"] = $process["C89"]; + + $process["C++"] = $process["C89"]; + $process["C++"][slash_begin][line_comment] = "rtrim1"; + + $process["C"] = $process["C++"]; + + $process["PHP"] = $process["C++"]; + $process["PHP"][normal_text][line_comment] = "rtrim1"; + + $process["Perl"][normal_text][sq_literal] = "rtrim1"; + $process["Perl"][normal_text][dq_literal] = "rtrim1"; + $process["Perl"][normal_text][line_comment] = "rtrim1"; + $process["Perl"][normal_text][0] = "syn_proc"; + + $process["Ruby"] = $process["Perl"]; + $process["Python"] = $process["Perl"]; + + $process["mIRC"][normal_text][dq_literal] = "rtrim1"; + $process["mIRC"][normal_text][line_comment] = "rtrim1"; + $process["mIRC"][normal_text][0] = "syn_proc"; + + $process["VB"] = $process["Perl"]; + + $process["Java"] = $process["C++"]; + + $process["C#"] = $process["Java"]; + + $process["Pascal"] = $process["C++"]; + $process["Pascal"][normal_text][line_comment] = "rtrim1"; + $process["Pascal"][normal_text][block_comment] = "rtrim1"; + $process["Pascal"][normal_text][paren_begin] = "rtrim1"; + $process["Pascal"][slash_begin][sq_literal] = "slash_putback_rtrim1"; + $process["Pascal"][slash_begin][dq_literal] = "slash_putback_rtrim1"; + $process["Pascal"][slash_begin][0] = "slash_putback"; + $process["Pascal"][paren_begin][sq_literal] = "lparen_putback_rtrim1"; + $process["Pascal"][paren_begin][dq_literal] = "lparen_putback_rtrim1"; + $process["Pascal"][paren_begin][star_comment] = "rtrim1"; + $process["Pascal"][paren_begin][0] = "lparen_putback"; + + $process["XML"][normal_text][xml_tag_begin] = "rtrim1"; + $process["XML"][normal_text][html_entity] = "rtrim1"; + $process["XML"][html_entity][xml_tag_begin] = "rtrim1"; + $process["XML"][html_entity][0] = "proc_void"; + $process["XML"][xml_tag_begin][xml_tag] = "prepend_xml_opentag"; + $process["XML"][xml_tag_begin][xml_pi] = "rtrim1"; + $process["XML"][xml_tag_begin][line_comment] = "rtrim1"; + $process["XML"][line_comment][normal_text] = "rtrim1_htmlesc"; + $process["XML"][xml_tag][normal_text] = "rtrim1"; + $process["XML"][xml_tag][dq_literal] = "rtrim1"; + $process["XML"][dq_literal][xml_tag] = "rtrim1"; + $process["XML"][dq_literal][dq_escape] = "rtrim1"; + + $process_end["C89"] = "syntax_highlight_helper"; + $process_end["C++"] = $process_end["C89"]; + $process_end["C"] = $process_end["C89"]; + $process_end["PHP"] = $process_end["C89"]; + $process_end["Perl"] = $process_end["C89"]; + $process_end["Java"] = $process_end["C89"]; + $process_end["VB"] = $process_end["C89"]; + $process_end["C#"] = $process_end["C89"]; + $process_end["Ruby"] = $process_end["C89"]; + $process_end["Python"] = $process_end["C89"]; + $process_end["Pascal"] = $process_end["C89"]; + $process_end["mIRC"] = $process_end["C89"]; + $process_end["PL/I"] = $process_end["C89"]; + $process_end["SQL"] = $process_end["C89"]; + $process_end["Scheme"] = "sch_syntax_helper"; + + + $edges["C89"][normal_text .",". dq_literal] = '<span class="literal">"'; + $edges["C89"][normal_text .",". sq_literal] = '<span class="literal">\''; + $edges["C89"][slash_begin .",". star_comment] = '<span class="comment">/*'; + $edges["C89"][dq_literal .",". normal_text] = '</span>'; + $edges["C89"][sq_literal .",". normal_text] = '</span>'; + $edges["C89"][star_end .",". normal_text] = '</span>'; + + $edges["Scheme"][sch_normal .",". sch_strlit] = '<span class="sch_str">"'; + $edges["Scheme"][sch_normal .",". sch_numlit] = '<span class="sch_num">'; + $edges["Scheme"][sch_normal .",". sch_chrlit] = '<span class="sch_chr">#'; + $edges["Scheme"][sch_strlit .",". sch_normal] = '</span>'; + $edges["Scheme"][sch_numlit .",". sch_normal] = '</span>'; + $edges["Scheme"][sch_chrlit .",". sch_normal] = '</span>'; + + $edges["SQL"][normal_text .",". dq_literal] = '<span class="literal">"'; + $edges["SQL"][normal_text .",". sq_literal] = '<span class="literal">\''; + $edges["SQL"][dash_begin .",". line_comment] = '<span class="comment">--'; + $edges["SQL"][normal_text .",". bt_literal] = '`'; + $edges["SQL"][dq_literal .",". normal_text] = '</span>'; + $edges["SQL"][sq_literal .",". normal_text] = '</span>'; + $edges["SQL"][line_comment .",". normal_text] = '</span>'; + + $edges["PL/I"] = $edges["C89"]; + + $edges["C++"] = $edges["C89"]; + $edges["C++"][slash_begin .",". line_comment] = '<span class="comment">//'; + $edges["C++"][line_comment .",". normal_text] = '</span>'; + + $edges["C"] = $edges["C++"]; + + $edges["PHP"] = $edges["C++"]; + $edges["PHP"][normal_text .",". line_comment] = '<span class="comment">#'; + + $edges["Perl"][normal_text .",". dq_literal] = '<span class="literal">"'; + $edges["Perl"][normal_text .",". sq_literal] = '<span class="literal">\''; + $edges["Perl"][dq_literal .",". normal_text] = '</span>'; + $edges["Perl"][sq_literal .",". normal_text] = '</span>'; + $edges["Perl"][normal_text .",". line_comment] = '<span class="comment">#'; + $edges["Perl"][line_comment .",". normal_text] = '</span>'; + + $edges["Ruby"] = $edges["Perl"]; + + $edges["Python"] = $edges["Perl"]; + + $edges["mIRC"][normal_text .",". dq_literal] = '<span class="literal">"'; + $edges["mIRC"][normal_text .",". line_comment] = '<span class="comment">;'; + $edges["mIRC"][dq_literal .",". normal_text] = '</span>'; + $edges["mIRC"][line_comment .",". normal_text] = '</span>'; + + $edges["VB"] = $edges["Perl"]; + $edges["VB"][normal_text .",". line_comment] = '<span class="comment">\''; + + $edges["Java"] = $edges["C++"]; + + $edges["C#"] = $edges["Java"]; + + $edges["Pascal"] = $edges["C89"]; + $edges["Pascal"][paren_begin .",". star_comment] = '<span class="comment">(*'; + $edges["Pascal"][paren_begin .",". dq_literal] = '<span class="literal">"'; + $edges["Pascal"][paren_begin .",". sq_literal] = '<span class="literal">\''; + $edges["Pascal"][slash_begin .",". dq_literal] = '<span class="literal">"'; + $edges["Pascal"][slash_begin .",". sq_literal] = '<span class="literal">\''; + $edges["Pascal"][slash_begin .",". line_comment] = '<span class="comment">//'; + $edges["Pascal"][normal_text . "," . block_comment] = '<span class="comment">{'; + $edges["Pascal"][line_comment . "," . normal_text] = '</span>'; + $edges["Pascal"][block_comment . "," . normal_text] = '</span>'; + + $edges["XML"][normal_text . "," . html_entity] = '<span class="html_entity">&'; + $edges["XML"][html_entity . "," . normal_text] = '</span>'; + $edges["XML"][html_entity . "," . xml_tag_begin] = '</span>'; + $edges["XML"][xml_tag . "," . normal_text] = '></span>'; + $edges["XML"][xml_tag_begin . "," . xml_pi] = '<span class="xml_pi"><?'; + $edges["XML"][xml_tag_begin . "," . line_comment] = '<span class="comment"><!'; + $edges["XML"][line_comment . "," . normal_text] = '></span>'; + $edges["XML"][xml_tag .",". dq_literal] = '<span class="literal">"'; + $edges["XML"][dq_literal . "," . xml_tag] = '"</span>'; + $edges["XML"][dq_literal . "," . dq_escape] = '<span class="html_entity">&'; + $edges["XML"][dq_escape . "," . dq_literal] = '</span>'; + $edges["XML"][xml_tag .",". sq_literal] = '<span class="literal">\''; + $edges["XML"][sq_literal . "," . xml_tag] = '\'</span>'; + $edges["XML"][sq_literal . "," . sq_escape] = '<span class="html_entity">&'; + $edges["XML"][sq_escape . "," . sq_literal] = '</span>'; + + // + // The State Machine + // + if (array_key_exists($language, $initial_state)) + $state = $initial_state[$language]; + else + $state = normal_text; + $output = ""; + $span = ""; + while (strlen($text) > 0) + { + $ch = substr($text, 0, 1); + $text = substr($text, 1); + + $oldstate = $state; + $state = (array_key_exists($ch, $states[$language][$state]))? + $states[$language][$state][$ch] : + $states[$language][$state][0]; + + $span .= $ch; + + if ($oldstate != $state) + { + if (array_key_exists($language, $process) && + array_key_exists($oldstate, $process[$language])) + { + if (array_key_exists($state, $process[$language][$oldstate])) + { + $pf = $process[$language][$oldstate][$state]; + $output .= $pf($span, $language, $ch); + } + else + { + $pf = $process[$language][$oldstate][0]; + $output .= $pf($span, $language, $ch); + } + } + else + { + $output .= $span; + } + + if (array_key_exists($language, $edges) && + array_key_exists("$oldstate,$state", $edges[$language])) + $output .= $edges[$language]["$oldstate,$state"]; + + $span = ""; + } + } + + if (array_key_exists($language, $process_end) && $state == normal_text) + $output .= $process_end[$language]($span, $language); + else + $output .= $span; + + if ($state != normal_text) + { + if (array_key_exists($language, $edges) && + array_key_exists("$state," . normal_text, $edges[$language])) + $output .= $edges[$language]["$state," . normal_text]; + } + + return $output; +} + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/js/jquery.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/js/jquery.js new file mode 100644 index 00000000..e7f2a292 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/js/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v@1.8.1 jquery.com | jquery.org/license */ +(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.1",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":a.toString().replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||f.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return typeof a=="object"?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length||!d)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||++p.uuid:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")===0&&(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)~f.indexOf(" "+b[g]+" ")||(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>-1)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,""+d),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,k,l,m,n=(p._data(this,"events")||{})[c.type]||[],o=n.delegateCount,q=[].slice.call(arguments),r=!c.exclusive&&!c.namespace,s=p.event.special[c.type]||{},t=[];q[0]=c,c.delegateTarget=this;if(s.preDispatch&&s.preDispatch.call(this,c)===!1)return;if(o&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<o;d++)k=n[d],l=k.selector,h[l]===b&&(h[l]=p(l,this).index(f)>=0),h[l]&&j.push(k);j.length&&t.push({elem:f,matches:j})}n.length>o&&t.push({elem:this,matches:n.slice(o)});for(d=0;d<t.length&&!c.isPropagationStopped();d++){i=t[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){k=i.matches[e];if(r||!c.namespace&&!k.namespace||c.namespace_re&&c.namespace_re.test(k.namespace))c.data=k.data,c.handleObj=k,g=((p.event.special[k.origType]||{}).handle||k.handler).apply(i.elem,q),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return s.postDispatch&&s.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function $(a,b,c,d){c=c||[],b=b||q;var e,f,g,j,k=b.nodeType;if(k!==1&&k!==9)return[];if(!a||typeof a!="string")return c;g=h(b);if(!g&&!d)if(e=L.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&i(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return u.apply(c,t.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&X&&b.getElementsByClassName)return u.apply(c,t.call(b.getElementsByClassName(j),0)),c}return bk(a,b,c,d,g)}function _(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function ba(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bb(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bc(a,b,c,d){var e,g,h,i,j,k,l,m,n,p,r=!c&&b!==q,s=(r?"<s>":"")+a.replace(H,"$1<s>"),u=y[o][s];if(u)return d?0:t.call(u,0);j=a,k=[],m=0,n=f.preFilter,p=f.filter;while(j){if(!e||(g=I.exec(j)))g&&(j=j.slice(g[0].length),h.selector=l),k.push(h=[]),l="",r&&(j=" "+j);e=!1;if(g=J.exec(j))l+=g[0],j=j.slice(g[0].length),e=h.push({part:g.pop().replace(H," "),string:g[0],captures:g});for(i in p)(g=S[i].exec(j))&&(!n[i]||(g=n[i](g,b,c)))&&(l+=g[0],j=j.slice(g[0].length),e=h.push({part:i,string:g.shift(),captures:g}));if(!e)break}return l&&(h.selector=l),d?j.length:j?$.error(a):t.call(y(s,k),0)}function bd(a,b,e,f){var g=b.dir,h=s++;return a||(a=function(a){return a===e}),b.first?function(b){while(b=b[g])if(b.nodeType===1)return a(b)&&b}:f?function(b){while(b=b[g])if(b.nodeType===1&&a(b))return b}:function(b){var e,f=h+"."+c,i=f+"."+d;while(b=b[g])if(b.nodeType===1){if((e=b[o])===i)return b.sizset;if(typeof e=="string"&&e.indexOf(f)===0){if(b.sizset)return b}else{b[o]=i;if(a(b))return b.sizset=!0,b;b.sizset=!1}}}}function be(a,b){return a?function(c){var d=b(c);return d&&a(d===!0?c:d)}:b}function bf(a,b,c){var d,e,g=0;for(;d=a[g];g++)f.relative[d.part]?e=bd(e,f.relative[d.part],b,c):e=be(e,f.filter[d.part].apply(null,d.captures.concat(b,c)));return e}function bg(a){return function(b){var c,d=0;for(;c=a[d];d++)if(c(b))return!0;return!1}}function bh(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)$(a,b[e],c,d)}function bi(a,b,c,d,e,g){var h,i=f.setFilters[b.toLowerCase()];return i||$.error(b),(a||!(h=e))&&bh(a||"*",d,h=[],e),h.length>0?i(h,c,g):[]}function bj(a,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s=0,t=a.length,v=S.POS,w=new RegExp("^"+v.source+"(?!"+A+")","i"),x=function(){var a=1,c=arguments.length-2;for(;a<c;a++)arguments[a]===b&&(n[a]=b)};for(;s<t;s++){f=a[s],g="",m=e;for(h=0,i=f.length;h<i;h++){j=f[h],k=j.string;if(j.part==="PSEUDO"){v.exec(""),l=0;while(n=v.exec(k)){o=!0,p=v.lastIndex=n.index+n[0].length;if(p>l){g+=k.slice(l,n.index),l=p,q=[c],J.test(g)&&(m&&(q=m),m=e);if(r=O.test(g))g=g.slice(0,-5).replace(J,"$&*"),l++;n.length>1&&n[0].replace(w,x),m=bi(g,n[1],n[2],q,m,r)}g=""}}o||(g+=k),o=!1}g?J.test(g)?bh(g,m||[c],d,e):$(g,c,d,e?e.concat(m):m):u.apply(d,m)}return t===1?d:$.uniqueSort(d)}function bk(a,b,e,g,h){a=a.replace(H,"$1");var i,k,l,m,n,o,p,q,r,s,v=bc(a,b,h),w=b.nodeType;if(S.POS.test(a))return bj(v,b,e,g);if(g)i=t.call(g,0);else if(v.length===1){if((o=t.call(v[0],0)).length>2&&(p=o[0]).part==="ID"&&w===9&&!h&&f.relative[o[1].part]){b=f.find.ID(p.captures[0].replace(R,""),b,h)[0];if(!b)return e;a=a.slice(o.shift().string.length)}r=(v=N.exec(o[0].string))&&!v.index&&b.parentNode||b,q="";for(n=o.length-1;n>=0;n--){p=o[n],s=p.part,q=p.string+q;if(f.relative[s])break;if(f.order.test(s)){i=f.find[s](p.captures[0].replace(R,""),r,h);if(i==null)continue;a=a.slice(0,a.length-q.length)+q.replace(S[s],""),a||u.apply(e,t.call(i,0));break}}}if(a){k=j(a,b,h),c=k.dirruns++,i==null&&(i=f.find.TAG("*",N.test(a)&&b.parentNode||b));for(n=0;m=i[n];n++)d=k.runs++,k(m)&&e.push(m)}return e}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=a.document,r=q.documentElement,s=0,t=[].slice,u=[].push,v=function(a,b){return a[o]=b||!0,a},w=function(){var a={},b=[];return v(function(c,d){return b.push(c)>f.cacheLength&&delete a[b.shift()],a[c]=d},a)},x=w(),y=w(),z=w(),A="[\\x20\\t\\r\\n\\f]",B="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",C=B.replace("w","w#"),D="([*^$|!~]?=)",E="\\["+A+"*("+B+")"+A+"*(?:"+D+A+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+C+")|)|)"+A+"*\\]",F=":("+B+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+E+")|[^:]|\\\\.)*|.*))\\)|)",G=":(nth|eq|gt|lt|first|last|even|odd)(?:\\(((?:-\\d)?\\d*)\\)|)(?=[^-]|$)",H=new RegExp("^"+A+"+|((?:^|[^\\\\])(?:\\\\.)*)"+A+"+$","g"),I=new RegExp("^"+A+"*,"+A+"*"),J=new RegExp("^"+A+"*([\\x20\\t\\r\\n\\f>+~])"+A+"*"),K=new RegExp(F),L=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,M=/^:not/,N=/[\x20\t\r\n\f]*[+~]/,O=/:not\($/,P=/h\d/i,Q=/input|select|textarea|button/i,R=/\\(?!\\)/g,S={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),NAME:new RegExp("^\\[name=['\"]?("+B+")['\"]?\\]"),TAG:new RegExp("^("+B.replace("w","w*")+")"),ATTR:new RegExp("^"+E),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+A+"*(even|odd|(([+-]|)(\\d*)n|)"+A+"*(?:([+-]|)"+A+"*(\\d+)|))"+A+"*\\)|)","i"),POS:new RegExp(G,"ig"),needsContext:new RegExp("^"+A+"*[>+~]|"+G,"i")},T=function(a){var b=q.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},U=T(function(a){return a.appendChild(q.createComment("")),!a.getElementsByTagName("*").length}),V=T(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),W=T(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),X=T(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),Y=T(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",r.insertBefore(a,r.firstChild);var b=q.getElementsByName&&q.getElementsByName(o).length===2+q.getElementsByName(o+0).length;return e=!q.getElementById(o),r.removeChild(a),b});try{t.call(r.childNodes,0)[0].nodeType}catch(Z){t=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}$.matches=function(a,b){return $(a,null,null,b)},$.matchesSelector=function(a,b){return $(b,null,null,[a]).length>0},g=$.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=g(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=g(b);return c},h=$.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},i=$.contains=r.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:r.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},$.attr=function(a,b){var c,d=h(a);return d||(b=b.toLowerCase()),f.attrHandle[b]?f.attrHandle[b](a):W||d?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},f=$.selectors={cacheLength:50,createPseudo:v,match:S,order:new RegExp("ID|TAG"+(Y?"|NAME":"")+(X?"|CLASS":"")),attrHandle:V?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:e?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:U?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(R,""),a[3]=(a[4]||a[5]||"").replace(R,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||$.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&$.error(a[0]),a},PSEUDO:function(a,b,c){var d,e;if(S.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(d=a[4])K.test(d)&&(e=bc(d,b,c,!0))&&(e=d.indexOf(")",d.length-e)-d.length)&&(d=d.slice(0,e),a[0]=a[0].slice(0,e)),a[2]=d;return a.slice(0,3)}},filter:{ID:e?function(a){return a=a.replace(R,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(R,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(R,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=x[o][a];return b||(b=x(a,new RegExp("(^|"+A+")"+a+"("+A+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return b?function(d){var e=$.attr(d,a),f=e+"";if(e==null)return b==="!=";switch(b){case"=":return f===c;case"!=":return f!==c;case"^=":return c&&f.indexOf(c)===0;case"*=":return c&&f.indexOf(c)>-1;case"$=":return c&&f.substr(f.length-c.length)===c;case"~=":return(" "+f+" ").indexOf(c)>-1;case"|=":return f===c||f.substr(0,c.length+1)===c+"-"}}:function(b){return $.attr(b,a)!=null}},CHILD:function(a,b,c,d){if(a==="nth"){var e=s++;return function(a){var b,f,g=0,h=a;if(c===1&&d===0)return!0;b=a.parentNode;if(b&&(b[o]!==e||!a.sizset)){for(h=b.firstChild;h;h=h.nextSibling)if(h.nodeType===1){h.sizset=++g;if(h===a)break}b[o]=e}return f=a.sizset-d,c===0?f===0:f%c===0&&f/c>=0}}return function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b,c,d){var e,g=f.pseudos[a]||f.pseudos[a.toLowerCase()];return g||$.error("unsupported pseudo: "+a),g[o]?g(b,c,d):g.length>1?(e=[a,a,"",b],function(a){return g(a,0,e)}):g}},pseudos:{not:v(function(a,b,c){var d=j(a.replace(H,"$1"),b,c);return function(a){return!d(a)}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!f.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},contains:v(function(a){return function(b){return(b.textContent||b.innerText||g(b)).indexOf(a)>-1}}),has:v(function(a){return function(b){return $(a,b).length>0}}),header:function(a){return P.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:_("radio"),checkbox:_("checkbox"),file:_("file"),password:_("password"),image:_("image"),submit:ba("submit"),reset:ba("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return Q.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b,c){return c?a.slice(1):[a[0]]},last:function(a,b,c){var d=a.pop();return c?a:[d]},even:function(a,b,c){var d=[],e=c?1:0,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},odd:function(a,b,c){var d=[],e=c?0:1,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},lt:function(a,b,c){return c?a.slice(+b):a.slice(0,+b)},gt:function(a,b,c){return c?a.slice(0,+b+1):a.slice(+b+1)},eq:function(a,b,c){var d=a.splice(+b,1);return c?a:d}}},k=r.compareDocumentPosition?function(a,b){return a===b?(l=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return l=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bb(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bb(e[j],f[j]);return j===c?bb(a,f[j],-1):bb(e[j],b,1)},[0,0].sort(k),m=!l,$.uniqueSort=function(a){var b,c=1;l=m,a.sort(k);if(l)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},$.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},j=$.compile=function(a,b,c){var d,e,f,g=z[o][a];if(g&&g.context===b)return g;d=bc(a,b,c);for(e=0,f=d.length;e<f;e++)d[e]=bf(d[e],b,c);return g=z(a,bg(d)),g.context=b,g.runs=g.dirruns=0,g},q.querySelectorAll&&function(){var a,b=bk,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[],f=[":active"],g=r.matchesSelector||r.mozMatchesSelector||r.webkitMatchesSelector||r.oMatchesSelector||r.msMatchesSelector;T(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+A+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),T(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+A+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bk=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return u.apply(f,t.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j,k,l,m=d.getAttribute("id"),n=m||o,p=N.test(a)&&d.parentNode||d;m?n=n.replace(c,"\\$&"):d.setAttribute("id",n),j=bc(a,d,h),n="[id='"+n+"']";for(k=0,l=j.length;k<l;k++)j[k]=n+j[k].selector;try{return u.apply(f,t.call(p.querySelectorAll(j.join(",")),0)),f}catch(i){}finally{m||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push(S.PSEUDO.source,S.POS.source,"!=")}catch(c){}}),f=new RegExp(f.join("|")),$.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!h(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=g.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return $(c,null,null,[b]).length>0})}(),f.setFilters.nth=f.setFilters.eq,f.filters=f.pseudos,$.attr=p.attr,p.find=$,p.expr=$.selectors,p.expr[":"]=p.expr.pseudos,p.unique=$.uniqueSort,p.text=$.getText,p.isXMLDoc=$.isXML,p.contains=$.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{cj=f.href}catch(cy){cj=e.createElement("a"),cj.href="",cj=cj.href}ck=ct.exec(cj.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:cj,isLocal:cn.test(ck[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=""+(c||y),k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,ck[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]==ck[1]&&i[2]==ck[2]&&(i[3]||(i[1]==="http:"?80:443))==(ck[3]||(ck[1]==="http:"?80:443)))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e,f=this.createTween(a,b),g=cQ.exec(b),h=f.cur(),i=+h||0,j=1;if(g){c=+g[2],d=g[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&i){i=p.css(f.elem,a,!0)||c||1;do e=j=j||".5",i=i/j,p.style(f.elem,a,i+d),j=f.cur()/h;while(j!==1&&j!==e)}f.unit=d,f.start=i,f.end=g[1]?i+(g[1]+1)*c:c}return f}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j,k,l,m=this[0],n=m&&m.ownerDocument;if(!n)return;return(e=n.body)===m?p.offset.bodyOffset(m):(d=n.documentElement,p.contains(d,m)?(c=m.getBoundingClientRect(),f=da(n),g=d.clientTop||e.clientTop||0,h=d.clientLeft||e.clientLeft||0,i=f.pageYOffset||d.scrollTop,j=f.pageXOffset||d.scrollLeft,k=c.top+i-g,l=c.left+j-h,{top:k,left:l}):{top:0,left:0})},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/lib.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/lib.inc.php new file mode 100644 index 00000000..88c32004 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/libraries/lib.inc.php @@ -0,0 +1,271 @@ +<?php + + /** + * Function library read in upon startup + * + * $Id: lib.inc.php,v 1.123 2008/04/06 01:10:35 xzilla Exp $ + */ + + include_once('./libraries/decorator.inc.php'); + include_once('./lang/translations.php'); + + // cytopia edit + error_reporting(E_ERROR | E_WARNING | E_PARSE); + //error_reporting(E_ALL & ~E_DEPRECATED); + // Set error reporting level to max + //error_reporting(E_ALL); + + // Application name + $appName = 'phpPgAdmin'; + + // Application version + $appVersion = '5.6'; + + // PostgreSQL and PHP minimum version + $postgresqlMinVer = '7.4'; + $phpMinVer = '5.0'; + + // Check the version of PHP + if (version_compare(phpversion(), $phpMinVer, '<')) + exit(sprintf('Version of PHP not supported. Please upgrade to version %s or later.', $phpMinVer)); + + // Check to see if the configuration file exists, if not, explain + if (file_exists('conf/config.inc.php')) { + $conf = array(); + include('./conf/config.inc.php'); + } + else { + echo 'Configuration error: Copy conf/config.inc.php-dist to conf/config.inc.php and edit appropriately.'; + exit; + } + + // Configuration file version. If this is greater than that in config.inc.php, then + // the app will refuse to run. This and $conf['version'] should be incremented whenever + // backwards incompatible changes are made to config.inc.php-dist. + $conf['base_version'] = 16; + + // Always include english.php, since it's the master language file + if (!isset($conf['default_lang'])) $conf['default_lang'] = 'english'; + $lang = array(); + require_once('./lang/english.php'); + + // Create Misc class references + require_once('./classes/Misc.php'); + $misc = new Misc(); + + // Start session (if not auto-started) + if (!ini_get('session.auto_start')) { + session_name('PPA_ID'); + session_start(); + } + + // Do basic PHP configuration checks + if (ini_get('magic_quotes_gpc')) { + $misc->stripVar($_GET); + $misc->stripVar($_POST); + $misc->stripVar($_COOKIE); + $misc->stripVar($_REQUEST); + } + + // This has to be deferred until after stripVar above + $misc->setHREF(); + $misc->setForm(); + + // Enforce PHP environment + ini_set('magic_quotes_runtime', 0); + ini_set('magic_quotes_sybase', 0); + ini_set('arg_separator.output', '&'); + + // If login action is set, then set session variables + if (isset($_POST['loginServer']) && isset($_POST['loginUsername']) && + isset($_POST['loginPassword_'.md5($_POST['loginServer'])])) { + + $_server_info = $misc->getServerInfo($_POST['loginServer']); + + $_server_info['username'] = $_POST['loginUsername']; + $_server_info['password'] = $_POST['loginPassword_'.md5($_POST['loginServer'])]; + + $misc->setServerInfo(null, $_server_info, $_POST['loginServer']); + + // Check for shared credentials + if (isset($_POST['loginShared'])) { + $_SESSION['sharedUsername'] = $_POST['loginUsername']; + $_SESSION['sharedPassword'] = $_POST['loginPassword_'.md5($_POST['loginServer'])]; + } + + $_reload_browser = true; + } + + /* select the theme */ + unset($_theme); + if (!isset($conf['theme'])) + $conf['theme'] = 'default'; + + // 1. Check for the theme from a request var + if (isset($_REQUEST['theme']) && is_file("./themes/{$_REQUEST['theme']}/global.css")) { + /* save the selected theme in cookie for a year */ + setcookie('ppaTheme', $_REQUEST['theme'], time()+31536000); + $_theme = $_SESSION['ppaTheme'] = $conf['theme'] = $_REQUEST['theme']; + } + + // 2. Check for theme session var + if (!isset($_theme) && isset($_SESSION['ppaTheme']) && is_file("./themes/{$_SESSION['ppaTheme']}/global.css")) { + $conf['theme'] = $_SESSION['ppaTheme']; + } + + // 3. Check for theme in cookie var + if (!isset($_theme) && isset($_COOKIE['ppaTheme']) && is_file("./themes/{$_COOKIE['ppaTheme']}/global.css")) { + $conf['theme'] = $_COOKIE['ppaTheme']; + } + + // 4. Check for theme by server/db/user + $info = $misc->getServerInfo(); + + if (!is_null($info)) { + $_theme = ''; + + if ( (isset($info['theme']['default'])) + and is_file("./themes/{$info['theme']['default']}/global.css") + ) + $_theme = $info['theme']['default']; + + if ( isset($_REQUEST['database']) + and isset($info['theme']['db'][$_REQUEST['database']]) + and is_file("./themes/{$info['theme']['db'][$_REQUEST['database']]}/global.css") + ) + $_theme = $info['theme']['db'][$_REQUEST['database']]; + + if ( isset($info['username']) + and isset($info['theme']['user'][$info['username']]) + and is_file("./themes/{$info['theme']['user'][$info['username']]}/global.css") + ) + $_theme = $info['theme']['user'][$info['username']]; + + if ($_theme !== '') { + setcookie('ppaTheme', $_theme, time()+31536000); + $conf['theme'] = $_theme; + } + } + + // Determine language file to import: + unset($_language); + + // 1. Check for the language from a request var + if (isset($_REQUEST['language']) && isset($appLangFiles[$_REQUEST['language']])) { + /* save the selected language in cookie for a year */ + setcookie('webdbLanguage', $_REQUEST['language'], time()+31536000); + $_language = $_REQUEST['language']; + } + + // 2. Check for language session var + if (!isset($_language) && isset($_SESSION['webdbLanguage']) && isset($appLangFiles[$_SESSION['webdbLanguage']])) { + $_language = $_SESSION['webdbLanguage']; + } + + // 3. Check for language in cookie var + if (!isset($_language) && isset($_COOKIE['webdbLanguage']) && isset($appLangFiles[$_COOKIE['webdbLanguage']])) { + $_language = $_COOKIE['webdbLanguage']; + } + + // 4. Check for acceptable languages in HTTP_ACCEPT_LANGUAGE var + if (!isset($_language) && $conf['default_lang'] == 'auto' && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + // extract acceptable language tags + // (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4) + preg_match_all('/\s*([a-z]{1,8}(?:-[a-z]{1,8})*)(?:;q=([01](?:.[0-9]{0,3})?))?\s*(?:,|$)/', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']), $_m, PREG_SET_ORDER); + foreach($_m as $_l) { // $_l[1] = language tag, [2] = quality + if (!isset($_l[2])) $_l[2] = 1; // Default quality to 1 + if ($_l[2] > 0 && $_l[2] <= 1 && isset($availableLanguages[$_l[1]])) { + // Build up array of (quality => language_file) + $_acceptLang[$_l[2]] = $availableLanguages[$_l[1]]; + } + } + unset($_m); + unset($_l); + if (isset($_acceptLang)) { + // Sort acceptable languages by quality + krsort($_acceptLang, SORT_NUMERIC); + $_language = reset($_acceptLang); + unset($_acceptLang); + } + } + + // 5. Otherwise resort to the default set in the config file + if (!isset($_language) && $conf['default_lang'] != 'auto' && isset($appLangFiles[$conf['default_lang']])) { + $_language = $conf['default_lang']; + } + + // 6. Otherwise, default to english. + if (!isset($_language)) + $_language = 'english'; + + + // Import the language file + if (isset($_language)) { + include("./lang/{$_language}.php"); + $_SESSION['webdbLanguage'] = $_language; + } + + // Check for config file version mismatch + if (!isset($conf['version']) || $conf['base_version'] > $conf['version']) { + echo $lang['strbadconfig']; + exit; + } + + // Check database support is properly compiled in + if (!function_exists('pg_connect')) { + echo $lang['strnotloaded']; + exit; + } + + // Manage the plugins + require_once('./classes/PluginManager.php'); + + // Create data accessor object, if necessary + if (!isset($_no_db_connection)) { + if (!isset($_REQUEST['server'])) { + echo $lang['strnoserversupplied']; + exit; + } + $_server_info = $misc->getServerInfo(); + + /* starting with PostgreSQL 9.0, we can set the application name */ + if(isset($_server_info['pgVersion']) && $_server_info['pgVersion'] >= 9) + putenv("PGAPPNAME={$appName}_{$appVersion}"); + + // Redirect to the login form if not logged in + if (!isset($_server_info['username'])) { + include('./login.php'); + exit; + } + + // Connect to the current database, or if one is not specified + // then connect to the default database. + if (isset($_REQUEST['database'])) + $_curr_db = $_REQUEST['database']; + else + $_curr_db = $_server_info['defaultdb']; + + include_once('./classes/database/Connection.php'); + + // Connect to database and set the global $data variable + $data = $misc->getDatabaseAccessor($_curr_db); + + // If schema is defined and database supports schemas, then set the + // schema explicitly. + if (isset($_REQUEST['database']) && isset($_REQUEST['schema'])) { + $status = $data->setSchema($_REQUEST['schema']); + if ($status != 0) { + echo $lang['strbadschema']; + exit; + } + } + } + + if (!function_exists("htmlspecialchars_decode")) { + function htmlspecialchars_decode($string, $quote_style = ENT_COMPAT) { + return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style))); + } + } + + $plugin_manager = new PluginManager($_language); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/links.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/links.js new file mode 100644 index 00000000..adedec47 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/links.js @@ -0,0 +1,16 @@ +/** + * Function for updating browser frame and topbar frame so that sqledit window + * pops up with properly selected database. + * + * $Id: links.js,v 1.4 2004/07/13 15:24:41 jollytoad Exp $ + */ +function updateLinks(getVars) { + var topbarLink = 'topbar.php' + getVars; + var browserLink = 'browser.php' + getVars; + var detailLink = 'redirect.php' + getVars + 'section=database'; + + parent.frames.topbar.location = topbarLink; + parent.frames.detail.location = detailLink; + parent.frames.browser.location = browserLink; +} + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/login.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/login.php new file mode 100644 index 00000000..6fa92567 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/login.php @@ -0,0 +1,70 @@ +<?php + + /** + * Login screen + * + * $Id: login.php,v 1.38 2007/09/04 19:39:48 ioguix Exp $ + */ + global $conf, $plugin_manager; + + // This needs to be an include once to prevent lib.inc.php infinite recursive includes. + // Check to see if the configuration file exists, if not, explain + require_once('./libraries/lib.inc.php'); + + if (!isset($plugin_manager)) + $plugin_manager = new PluginManager($_SESSION['webdbLanguage']); + + $misc->printHeader($lang['strlogin']); + $misc->printBody(); + $misc->printTrail('root'); + + $server_info = $misc->getServerInfo($_REQUEST['server']); + + $misc->printTitle(sprintf($lang['strlogintitle'], $server_info['desc'])); + + if (isset($msg)) $misc->printMsg($msg); + + $md5_server = md5($_REQUEST['server']); +?> + +<form id="login_form" action="redirect.php" method="post" name="login_form"> +<?php + if (!empty($_POST)) $vars =& $_POST; + else $vars =& $_GET; + // Pass request vars through form (is this a security risk???) + foreach ($vars as $key => $val) { + if (substr($key,0,5) == 'login') continue; + echo "<input type=\"hidden\" name=\"", htmlspecialchars($key), "\" value=\"", htmlspecialchars($val), "\" />\n"; + } +?> + <input type="hidden" name="loginServer" value="<?php echo htmlspecialchars($_REQUEST['server']); ?>" /> + <table class="navbar" border="0" cellpadding="5" cellspacing="3"> + <tr> + <td><?php echo $lang['strusername']; ?></td> + <td><input type="text" name="loginUsername" value="<?php if (isset($_POST['loginUsername'])) echo htmlspecialchars($_POST['loginUsername']); ?>" size="24" /></td> + </tr> + <tr> + <td><?php echo $lang['strpassword']; ?></td> + <td><input id="loginPassword" type="password" name="loginPassword_<?php echo $md5_server; ?>" size="24" /></td> + </tr> + </table> +<?php if (sizeof($conf['servers']) > 1) : ?> + <p><input type="checkbox" id="loginShared" name="loginShared" <?php echo isset($_POST['loginShared']) ? 'checked="checked"' : '' ?> /><label for="loginShared"><?php echo $lang['strtrycred'] ?></label></p> +<?php endif; ?> + <p><input type="submit" name="loginSubmit" value="<?php echo $lang['strlogin']; ?>" /></p> +</form> + +<script type="text/javascript"> + var uname = document.login_form.loginUsername; + var pword = document.login_form.loginPassword_<?php echo $md5_server; ?>; + if (uname.value == "") { + uname.focus(); + } else { + pword.focus(); + } +</script> + +<?php + // Output footer + $misc->printFooter(); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/logout.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/logout.php new file mode 100644 index 00000000..faed8dc8 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/logout.php @@ -0,0 +1,18 @@ +<?php + +/** + * Logs a user out of the app + * + * $Id: logout.php,v 1.3 2003/09/10 01:55:52 chriskl Exp $ + */ + +if (!ini_get('session.auto_start')) { + session_name('PPA_ID'); + session_start(); +} +unset($_SESSION); +session_destroy(); + +header('Location: index.php'); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/multiactionform.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/multiactionform.js new file mode 100644 index 00000000..1950608a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/multiactionform.js @@ -0,0 +1,9 @@ +function checkAll(bool) { + + var inputs = document.getElementById('multi_form').getElementsByTagName('input'); + + for (var i=0; i<inputs.length; i++) { + if (inputs[i].type == 'checkbox') + inputs[i].checked = bool; + } +} diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/opclasses.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/opclasses.php new file mode 100644 index 00000000..f0e399f2 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/opclasses.php @@ -0,0 +1,91 @@ +<?php + + /** + * Manage opclasss in a database + * + * $Id: opclasses.php,v 1.10 2007/08/31 18:30:11 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Show default list of opclasss in the database + */ + function doDefault($msg = '') { + global $data, $conf, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','opclasses'); + $misc->printMsg($msg); + + $opclasses = $data->getOpClasses(); + + $columns = array( + 'accessmethod' => array( + 'title' => $lang['straccessmethod'], + 'field' => field('amname'), + ), + 'opclass' => array( + 'title' => $lang['strname'], + 'field' => field('opcname'), + ), + 'type' => array( + 'title' => $lang['strtype'], + 'field' => field('opcintype'), + ), + 'default' => array( + 'title' => $lang['strdefault'], + 'field' => field('opcdefault'), + 'type' => 'yesno', + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('opccomment'), + ), + ); + + $actions = array(); + + $misc->printTable($opclasses, $columns, $actions, 'opclasses-opclasses', $lang['strnoopclasses']); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $opclasses = $data->getOpClasses(); + + // OpClass prototype: "op_class/access_method" + $proto = concat(field('opcname'),'/',field('amname')); + + $attrs = array( + 'text' => $proto, + 'icon' => 'OperatorClass', + 'toolTip'=> field('opccomment'), + ); + + $misc->printTree($opclasses, $attrs, 'opclasses'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['stropclasses']); + $misc->printBody(); + + switch ($action) { + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/operators.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/operators.php new file mode 100644 index 00000000..354afa6a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/operators.php @@ -0,0 +1,246 @@ +<?php + + /** + * Manage operators in a database + * + * $Id: operators.php,v 1.29 2007/08/31 18:30:11 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Show read only properties for an operator + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('operator'); + $misc->printTitle($lang['strproperties'],'pg.operator'); + $misc->printMsg($msg); + + $oprdata = $data->getOperator($_REQUEST['operator_oid']); + $oprdata->fields['oprcanhash'] = $data->phpBool($oprdata->fields['oprcanhash']); + + if ($oprdata->recordCount() > 0) { + echo "<table>\n"; + echo "<tr><th class=\"data left\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprname']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strleftarg']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprleftname']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strrightarg']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprrightname']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strcommutator']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprcom']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strnegator']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprnegate']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strjoin']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprjoin']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strhashes']}</th>\n"; + echo "<td class=\"data1\">", ($oprdata->fields['oprcanhash']) ? $lang['stryes'] : $lang['strno'], "</td></tr>\n"; + + /* these field only exists in 8.2 and before in pg_catalog */ + if (isset($oprdata->fields['oprlsortop'])) { + echo "<tr><th class=\"data left\">{$lang['strmerges']}</th>\n"; + echo "<td class=\"data1\">", ($oprdata->fields['oprlsortop'] !== '0' && $oprdata->fields['oprrsortop'] !== '0') ? $lang['stryes'] : $lang['strno'], "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strrestrict']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprrest']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strleftsort']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprlsortop']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strrightsort']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprrsortop']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strlessthan']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprltcmpop']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strgreaterthan']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($oprdata->fields['oprgtcmpop']), "</td></tr>\n"; + } + else { + echo "<tr><th class=\"data left\">{$lang['strmerges']}</th>\n"; + echo "<td class=\"data1\">", $data->phpBool($oprdata->fields['oprcanmerge']) ? $lang['stryes'] : $lang['strno'], "</td></tr>\n"; + } + echo "</table>\n"; + + $misc->printNavLinks(array ( + 'showall' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'operators.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strshowalloperators'] + )), 'operators-properties', get_defined_vars() + ); + } + else + doDefault($lang['strinvalidparam']); + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('operator'); + $misc->printTitle($lang['strdrop'], 'pg.operator.drop'); + + echo "<p>", sprintf($lang['strconfdropoperator'], $misc->printVal($_REQUEST['operator'])), "</p>\n"; + + echo "<form action=\"operators.php\" method=\"post\">\n"; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"operator\" value=\"", htmlspecialchars($_REQUEST['operator']), "\" />\n"; + echo "<input type=\"hidden\" name=\"operator_oid\" value=\"", htmlspecialchars($_REQUEST['operator_oid']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + $status = $data->dropOperator($_POST['operator_oid'], isset($_POST['cascade'])); + if ($status == 0) + doDefault($lang['stroperatordropped']); + else + doDefault($lang['stroperatordroppedbad']); + } + + } + + /** + * Show default list of operators in the database + */ + function doDefault($msg = '') { + global $data, $conf, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','operators'); + $misc->printMsg($msg); + + $operators = $data->getOperators(); + + $columns = array( + 'operator' => array( + 'title' => $lang['stroperator'], + 'field' => field('oprname'), + 'url' => "operators.php?action=properties&{$misc->href}&", + 'vars' => array('operator' => 'oprname', 'operator_oid' => 'oid'), + ), + 'leftarg' => array( + 'title' => $lang['strleftarg'], + 'field' => field('oprleftname'), + ), + 'rightarg' => array( + 'title' => $lang['strrightarg'], + 'field' => field('oprrightname'), + ), + 'returns' => array( + 'title' => $lang['strreturns'], + 'field' => field('resultname'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('oprcomment'), + ), + ); + + $actions = array( + 'drop' => array( + // 'title' => $lang['strdrop'], + // 'url' => "operators.php?action=confirm_drop&{$misc->href}&", + // 'vars' => array('operator' => 'oprname', 'operator_oid' => 'oid'), + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'operators.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'operator' => field('oprname'), + 'operator_oid' => field('oid') + ) + ) + ) + ) + ); + + $misc->printTable($operators, $columns, $actions, 'operators-operators', $lang['strnooperators']); + +// TODO operators.php action=create $lang['strcreateoperator'] + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $operators = $data->getOperators(); + + // Operator prototype: "type operator type" + $proto = concat(field('oprleftname'), ' ', field('oprname'), ' ', field('oprrightname')); + + $reqvars = $misc->getRequestVars('operator'); + + $attrs = array( + 'text' => $proto, + 'icon' => 'Operator', + 'toolTip'=> field('oprcomment'), + 'action' => url('operators.php', + $reqvars, + array( + 'action' => 'properties', + 'operator' => $proto, + 'operator_oid' => field('oid') + ) + ) + ); + + $misc->printTree($operators, $attrs, 'operators'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['stroperators']); + $misc->printBody(); + + switch ($action) { + case 'save_create': + if (isset($_POST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_POST['cancel'])) doDefault(); + else doDrop(false); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'properties': + doProperties(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugin.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugin.php new file mode 100644 index 00000000..0b3e5921 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugin.php @@ -0,0 +1,5 @@ +<?php +require_once('./libraries/lib.inc.php'); + +$plugin_manager->do_action($_REQUEST['plugin'], $_REQUEST['action']); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/GuiControl/conf/config.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/GuiControl/conf/config.inc.php new file mode 100644 index 00000000..0e6b7ac2 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/GuiControl/conf/config.inc.php @@ -0,0 +1,484 @@ +<?php + +$plugin_conf = array( + + /** + * Top Links + **/ + 'top_links' => array ( + // 'sql' => true, + // 'history' => true, + // 'find' => true, + // 'logout' => true, + ), + + /** + * Tabs Links + **/ + 'tab_links' => array ( + 'root' => array ( + // 'intro' => true, + // 'servers' => true, + ), + 'server' => array ( + // 'databases' => true, + // 'roles' => true, /* postgresql 8.1+ */ + // 'users' => true, /* postgresql <8.1 */ + // 'groups' => true, + // 'account' => true, + // 'tablespaces' => true, + // 'export' => true, + // 'reports' => true, + ), + 'database' => array ( + // 'schemas' => true, + // 'sql' => true, + // 'find' => true, + // 'variables' => true, + // 'processes' => true, + // 'locks' => true, + // 'admin' => true, + // 'privileges' => true, + // 'languages' => true, + // 'casts' => true, + // 'export' => true, + ), + 'schema' => array( + // 'tables' => true, + // 'views' => true, + // 'sequences' => true, + // 'functions' => true, + // 'fulltext' => true, + // 'domains' => true, + // 'aggregates' => true, + // 'types' => true, + // 'operators' => true, + // 'opclasses' => true, + // 'conversions' => true, + // 'privileges' => true, + // 'export' => true, + ), + 'table' => array( + // 'columns' => true, + // 'indexes' => true, + // 'constraints' => true, + // 'triggers' => true, + // 'rules' => true, + // 'admin' => true, + // 'info' => true, + // 'privileges' => true, + // 'import' => true, + // 'export' => true, + ), + 'view' => array ( + // 'columns' => true, + // 'definition' => true, + // 'rules' => true, + // 'privileges' => true, + // 'export' => true, + ), + 'function' => array( + // 'definition' => true, + // 'privileges' => true, + ), + 'aggregate' => array( + // 'definition' => true, + ), + 'role' => array( + // 'definition' => true, + ), + 'popup' => array( + // 'sql' => true, + // 'find' => true, + ), + 'column' => array( + // 'properties' => true, + // 'privileges' => true, + ), + 'fulltext' => array( + // 'ftsconfigs' => true, + // 'ftsdicts' => true, + // 'ftsparsers' => true, + ), + ), + + /** + * Trail Links + **/ + // 'trail_links' => true, /* enable/disable the whole trail */ + + /** + * Navigation Links + **/ + 'navlinks' => array( + 'aggregates-properties' => array( + // 'showall' => true, + // 'alter' => true, + // 'drop' => true, + ), + 'aggregates-aggregates' => array( + // 'create' => true, + ), + 'all_db-databases' => array( + // 'create' => true, + ), + 'colproperties-colproperties' => array( + // 'browse' => true, + // 'alter' => true, + // 'drop' => true, + ), + 'constraints-constraints' => array( + // 'addcheck' => true, + // 'adduniq' => true, + // 'addpk' => true, + // 'addfk' => true, + ), + 'display-browse' => array( + // 'back' => true, + // 'edit' => true, + // 'collapse' => true, + // 'createreport' => true, + // 'createview' => true, + // 'download' => true, + // 'insert' => true, + // 'refresh' => true, + ), + 'domains-properties' => array( + // 'drop' => true, + // 'addcheck' => true, + // 'alter' => true, + ), + 'domains-domains' => array( + // 'create' => true, + ), + 'fulltext-fulltext' => array( + // 'createconf' => true, + ), + 'fulltext-viewdicts' => array( + // 'createdict' => true, + ), + 'fulltext-viewconfig' => array( + // 'addmapping' => true, + ), + 'functions-properties' => array( + // 'showall' => true, + // 'alter' => true, + // 'drop' => true, + ), + 'functions-functions' => array( + // 'createpl' => true, + // 'createinternal' => true, + // 'createc' => true, + ), + 'groups-groups' => array( + // 'create' => true, + ), + 'groups-properties' => array( + // 'showall' => true, + ), + 'history-history' => array( + // 'refresh' => true, + // 'download' => true, + // 'clear' => true, + ), + 'indexes-indexes' => array( + // 'create' => true, + ), + 'operators-properties' => array( + // 'showall' => true, + ), + 'privileges-privileges' => array( + // 'grant' => true, + // 'revoke' => true, + // 'showalltables' => true, + // 'showallcolumns' => true, + // 'showallviews' => true, + // 'showalldatabases' => true, + // 'showallschemas' => true, + // 'showallfunctions' => true, + // 'showallsequences' => true, + // 'showalltablespaces' => true, + ), + 'reports-properties' => array( + // 'showall' => true, + // 'alter' => true, + // 'exec' => true, + ), + 'reports-reports' => array( + // 'create' => true, + ), + 'roles-account' => array( + // 'changepassword' => true, + ), + 'roles-properties' => array( + // 'showall' => true, + // 'alter' => true, + // 'drop' => true, + ), + 'roles-roles' => array( + // 'create' => true, + ), + 'rules-rules' => array( + // 'create' => true, + ), + 'schemas-schemas' => array( + // 'create' => true, + ), + 'sequences-properties' => array( + // 'alter' => true, + // 'nextval' => true, + // 'restart' => true, + // 'reset' => true, + ), + 'sequences-sequences' => array( + // 'create' => true, + ), + 'servers-servers' => array( + // 'showall' => true, + /*we cannot filter the group names in navlinks presently*/ + ), + 'sql-form' => array( + // 'back' => true, + // 'alter' => true, + // 'createreport' => true, + // 'createview' => true, + // 'download' => true, + ), + 'tables-tables' => array( + // 'create' => true, + // 'createlike' => true, + ), + 'tablespaces-tablespaces' => array( + // 'create' => true, + ), + 'tblproperties-tblproperties' => array( + // 'browse' => true, + // 'select' => true, + // 'insert' => true, + 'empty' => true, + // 'drop' => true, + // 'addcolumn' => true, + // 'alter' => true, + ), + 'triggers-triggers' => array( + // 'create' => true, + ), + 'types-properties' => array( + // 'showall' => true, + ), + 'types-types' => array( + // 'create' => true, + // 'createcomp' => true, + // 'createenum' => true, + ), + 'users-account' => array( + // 'changepassword' => true, + ), + 'users-users' => array( + // 'create' => true, + ), + 'viewproperties-definition' => array( + // 'alter' => true, + ), + 'viewproperties-viewproperties' => array( + // 'browse' => true, + // 'select' => true, + // 'drop' => true, + // 'alter' => true, + ), + 'views-views' => array( + // 'create' => true, + // 'createwiz' => true, + ), + ), + + /** + * action links + **/ + + 'actionbuttons' => array( + 'admin-admin' => array( + // 'edit' => true, + // 'delete' => true, + ), + 'aggregates-aggregates' => array( + // 'alter' => true, + // 'drop' => true, + ), + 'all_db-databases' => array( + // 'drop' => true, + // 'privileges' => true, + // 'alter' => true, + ), + 'casts-casts' => array( + // none + ), + 'colproperties-colproperties' => array( + // none + ), + 'constraints-constraints' => array( + // 'drop' => true, + ), + 'conversions-conversions' => array( + // none + ), + 'database-variables' => array( + // none + ), + 'database-processes-preparedxacts' => array( + // none + ), + 'database-processes' => array( + // 'cancel' => true, + // 'kill' => true, + ), + 'database-locks' => array( + // none + ), + 'display-browse' => array( + // TODO + // 'edit' => true, + // 'delete' => true, + ), + 'domains-properties' => array( + // 'drop' => true, + ), + 'domains-domains' => array( + // 'alter' => true, + // 'drop' => true, + ), + 'fulltext-fulltext' => array( + // 'drop' => true, + // 'alter' => true, + ), + 'fulltext-viewparsers' => array( + // none + ), + 'fulltext-viewdicts' => array( + // 'drop' => true, + // 'alter' => true, + ), + 'fulltext-viewconfig' => array( + // 'multiactions' => true, + // 'drop' => true, + // 'alter' => true, + ), + 'functions-functions' => array( + // 'multiactions' => true, + // 'alter' => true, + // 'drop' => true, + // 'privileges' => true, + ), + 'groups-members' => array( + // 'drop' => true, + ), + 'groups-properties' => array( + // 'drop' => true, + ), + 'history-history' => array( + // 'run' => true, + // 'remove' => true, + ), + 'indexes-indexes' => array( + // 'cluster' => true, + // 'reindex' => true, + // 'drop' => true, + ), + 'info-referrers' => array( + // 'properties' => true, + ), + 'info-parents' => array( + // 'properties' => true, + ), + 'info-children' => array( + // 'properties' => true, + ), + 'languages-languages' => array( + // none + ), + 'opclasses-opclasses' => array( + // none + ), + 'operators-operators' => array( + // 'drop' => true, + ), + 'reports-reports' => array( + // 'run' => true, + // 'edit' => true, + // 'drop' => true, + ), + 'roles-roles' => array( + // 'alter' => true, + // 'drop' => true, + ), + 'rules-rules' => array( + // 'drop' => true, + ), + 'schemas-schemas' => array( + // 'multiactions' => true, + // 'drop' => true, + // 'privileges' => true, + // 'alter' => true, + ), + 'sequences-sequences' => array( + // 'multiactions' => true, + // 'drop' => true, + // 'privileges' => true, + // 'alter' => true, + ), + 'servers-servers' => array( + // 'logout' => true, + ), + 'tables-tables' => array( + // 'multiactions' => true, + // 'browse' => true, + // 'select' => true, + // 'insert' => true, + // 'empty' => true, + // 'alter' => true, + // 'drop' => true, + // 'vacuum' => true, + // 'analyze' => true, + // 'reindex' => true, + ), + 'tablespaces-tablespaces' => array( + // 'drop' => true, + // 'privileges' => true, + // 'alter' => true, + ), + 'tblproperties-tblproperties' => array( + // 'browse' => true, + // 'alter' => true, + // 'privileges' => true, + // 'drop' => true, + ), + 'triggers-triggers' => array( + // 'alter' => true, + // 'drop' => true, + // 'enable' => true, + // 'disable' => true, + ), + 'types-properties' => array( + // none + ), + 'types-types' => array( + // 'drop' => true, + ), + 'users-users' => array( + // 'alter' => true, + // 'drop' => true, + ), + 'viewproperties-viewproperties' => array( + // 'alter' => true, + ), + 'views-views' => array( + //'multiactions' => true, + // 'browse' => true, + // 'select' => true, + //'alter' => true, + //'drop' => true, + ), + ), +); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/GuiControl/plugin.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/GuiControl/plugin.php new file mode 100644 index 00000000..44669362 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/GuiControl/plugin.php @@ -0,0 +1,145 @@ +<?php +require_once('classes/Plugin.php'); + +class GuiControl extends Plugin { + + /** + * Attributes + */ + protected $name = 'GuiControl'; + protected $lang; + protected $conf; + + /** + * Constructor + * Call parent constructor, passing the language that will be used. + * @param $language Current phpPgAdmin language. If it was not found in the plugin, English will be used. + */ + function __construct($language) { + parent::__construct($language); + } + + /** + * This method returns the functions that will hook in the phpPgAdmin core. + * To do include a function just put in the $hooks array the follwing code: + * 'hook' => array('function1', 'function2'). + * + * Example: + * $hooks = array( + * 'toplinks' => array('add_plugin_toplinks'), + * 'tabs' => array('add_tab_entry'), + * 'action_buttons' => array('add_more_an_entry') + * ); + * + * @return $hooks + */ + function get_hooks() { + $hooks = array( + 'toplinks' => array('filer_toplinks'), + 'tabs' => array('filter_tabs'), + 'trail' => array('filter_trail'), + 'navlinks' => array('filter_navlinks'), + 'actionbuttons' => array('filter_actionbuttons'), + 'tree' => array('filter_tree') + ); + return $hooks; + } + + /** + * This method returns the functions that will be used as actions. + * To do include a function that will be used as action, just put in the $actions array the follwing code: + * + * $actions = array( + * 'show_page', + * 'show_error', + * ); + * + * @return $actions + */ + function get_actions() { + $actions = array( + 'filer_toplinks', + 'filter_tabs', + 'filter_trail', + 'filter_navlinks', + 'filter_actionbuttons', + 'filter_tree', + ); + return $actions; + } + + function filer_toplinks(&$f_params) { + if (!isset($this->conf['top_links'])) + return; + + $top_links = &$f_params['toplinks']; + + foreach ($this->conf['top_links'] as $link => $enabled) + if (isset ($top_links[$link]) + && ($enabled === false) + ) + unset($top_links[$link]); + + return; + } + + function filter_tabs(&$f_params) { + $section = $f_params['section']; + $tabs = &$f_params['tabs']; + + if (!isset($this->conf['tab_links'][$section])) + return; + + foreach ($this->conf['tab_links'][$section] as $link => $enabled) + if (isset ($tabs[$link]) + && ($enabled === false) + ) + unset($tabs[$link]); + return; + } + + function filter_trail(&$f_params) { + if (!isset($this->conf['trail_links'])) + return; + + if ($this->conf['trail_links'] === false) + $f_params['trail'] = array(); + + return; + } + + function filter_navlinks(&$f_params) { + $place = $f_params['place']; + $navlinks = &$f_params['navlinks']; + + if (! isset($this->conf['navlinks'][$place])) + return; + + foreach ($this->conf['navlinks'][$place] as $link => $enabled) + if (isset ($navlinks[$link]) + && ($enabled === false) + ) + unset($navlinks[$link]); + return; + } + + function filter_actionbuttons(&$f_params) { + $place = $f_params['place']; + $actions = &$f_params['actionbuttons']; + + if (! isset($this->conf['actionbuttons'][$place])) + return; + + foreach ($this->conf['actionbuttons'][$place] as $link => $enabled) + if (isset ($actions[$link]) + && ($enabled === false) + ) + unset($actions[$link]); + return; + } + + function filter_tree() { + return; + } +} +?> \ No newline at end of file diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/INSTALL b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/INSTALL new file mode 100644 index 00000000..263f308b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/INSTALL @@ -0,0 +1,13 @@ +phpPgAdmin Report Plugin Installation Guide +------------------------------------------- +1. Report Plugin activation + + Open conf/config.inc.php and add the 'Report' value in the $conf['plugins'] array: + + $conf['plugins'] = array('Report'); + +2. Set up the reports database. + + If you want to enable reports (which are a useful feature) then go to + the 'sql' subdirectory and view the SQL script for your database. It + will contain instructions on how to set up the reports database. diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/README b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/README new file mode 100644 index 00000000..071c199a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/README @@ -0,0 +1,24 @@ +About the phpPgAdmin Report Plugin +---------------------------------- + +The Report plugin is the old report feature of phpPgAdmins removed in +version 5.1 and refactored as a plugin. + +It enables you to create and save ad-hoc SQL queries as reports which +can be easily be executed from within phpPgAdmin. + +To save reports, this plugin requires the creation of a dedicated +database containing a single table; see the INSTALL file and the +sql/reports.sql file for details. + +Following installation, an icon for the Report plugin will appear +on the main overview page for each connected server. This provides +an overview of all reports saved for the entire server, and enables +executionm, editing and deletion of reports, as well as creation of +new reports from scratch. + +New reports can also be created while browsing table and view data, +a "create report" link is provided at the bottom of each data page +which pre-populates the report with the SQL used to generate the +data. + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/classes/Reports.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/classes/Reports.php new file mode 100644 index 00000000..19327b48 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/classes/Reports.php @@ -0,0 +1,128 @@ +<?php + /** + * Class to manage reports. Note how this class is designed to use + * the functions provided by the database driver exclusively, and hence + * will work with any database without modification. + * + * $Id: Reports.php,v 1.18 2007/04/16 11:02:35 mr-russ Exp $ + */ + + class Reports { + + // A database driver + var $driver; + var $conf; + + /* Constructor */ + function __construct(&$conf, &$status) { + global $misc, $data; + + $this->conf = $conf; + + // Check to see if the reports database exists + $rs = $data->getDatabase($this->conf['reports_db']); + if ($rs->recordCount() != 1) $status = -1; + else { + // Create a new database access object. + $this->driver = $misc->getDatabaseAccessor($this->conf['reports_db']); + // Reports database should have been created in public schema + $this->driver->setSchema($this->conf['reports_schema']); + $status = 0; + } + } + + /** + * Finds all reports + * @return A recordset + */ + function getReports() { + global $misc; + // Filter for owned reports if necessary + if ($this->conf['owned_reports_only']) { + $server_info = $misc->getServerInfo(); + $filter['created_by'] = $server_info['username']; + $ops = array('created_by' => '='); + } + else $filter = $ops = array(); + + $sql = $this->driver->getSelectSQL($this->conf['reports_table'], + array('report_id', 'report_name', 'db_name', 'date_created', 'created_by', 'descr', 'report_sql', 'paginate'), + $filter, $ops, array('db_name' => 'asc', 'report_name' => 'asc')); + + return $this->driver->selectSet($sql); + } + + /** + * Finds a particular report + * @param $report_id The ID of the report to find + * @return A recordset + */ + function getReport($report_id) { + $sql = $this->driver->getSelectSQL($this->conf['reports_table'], + array('report_id', 'report_name', 'db_name', 'date_created', 'created_by', 'descr', 'report_sql', 'paginate'), + array('report_id' => $report_id), array('report_id' => '='), array()); + + return $this->driver->selectSet($sql); + } + + /** + * Creates a report + * @param $report_name The name of the report + * @param $db_name The name of the database + * @param $descr The comment on the report + * @param $report_sql The SQL for the report + * @param $paginate The report should be paginated + * @return 0 success + */ + function createReport($report_name, $db_name, $descr, $report_sql, $paginate) { + global $misc; + $server_info = $misc->getServerInfo(); + $temp = array( + 'report_name' => $report_name, + 'db_name' => $db_name, + 'created_by' => $server_info['username'], + 'report_sql' => $report_sql, + 'paginate' => $paginate ? 'true' : 'false', + ); + if ($descr != '') $temp['descr'] = $descr; + + return $this->driver->insert($this->conf['reports_table'], $temp); + } + + /** + * Alters a report + * @param $report_id The ID of the report + * @param $report_name The name of the report + * @param $db_name The name of the database + * @param $descr The comment on the report + * @param $report_sql The SQL for the report + * @param $paginate The report should be paginated + * @return 0 success + */ + function alterReport($report_id, $report_name, $db_name, $descr, $report_sql, $paginate) { + global $misc; + $server_info = $misc->getServerInfo(); + $temp = array( + 'report_name' => $report_name, + 'db_name' => $db_name, + 'created_by' => $server_info['username'], + 'report_sql' => $report_sql, + 'paginate' => $paginate ? 'true' : 'false', + 'descr' => $descr + ); + + return $this->driver->update($this->conf['reports_table'], $temp, + array('report_id' => $report_id)); + } + + /** + * Drops a report + * @param $report_id The ID of the report to drop + * @return 0 success + */ + function dropReport($report_id) { + return $this->driver->delete($this->conf['reports_table'], array('report_id' => $report_id)); + } + + } +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/conf/config.inc.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/conf/config.inc.php new file mode 100644 index 00000000..c036544e --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/conf/config.inc.php @@ -0,0 +1,12 @@ +<?php + /* Database and table for reports */ + $plugin_conf['reports_db'] = 'phppgadmin'; + $plugin_conf['reports_schema'] = 'public'; + $plugin_conf['reports_table'] = 'ppa_reports'; + + /* Only show owned reports? + * Note: This does not prevent people from accessing other reports by + * other means. + */ + $plugin_conf['owned_reports_only'] = false; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/images/Report.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/images/Report.png new file mode 100644 index 00000000..f9158b9a Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/images/Report.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/images/Reports.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/images/Reports.png new file mode 100644 index 00000000..4a403e07 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/images/Reports.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/afrikaans.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/afrikaans.php new file mode 100644 index 00000000..fa2e30ff --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/afrikaans.php @@ -0,0 +1,23 @@ +<?php + /** + * Afrikaans Language file. + */ + + // Basic strings + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Jy het nie die verslae-databasis geskep nie. Lees asb. die INSTALL-lêer vir instruksies.'; + + // Reports + $plugin_lang['strreport'] = 'Verslag'; + $plugin_lang['strreports'] = 'Verslae'; + $plugin_lang['strshowallreports'] = 'Wys alle verslae'; + $plugin_lang['strnoreports'] = 'Geen verslae gevind.'; + $plugin_lang['strcreatereport'] = 'Skep verslag'; + $plugin_lang['strreportdropped'] = 'Verslag is verwyder.'; + $plugin_lang['strreportdroppedbad'] = 'Verwydering van verslag het misluk.'; + $plugin_lang['strconfdropreport'] = 'Is jy seker dat jy die verslag "%s" wil verwyder?'; + $plugin_lang['strreportneedsname'] = 'Jy moet \'n naam gee vir die verslag.'; + $plugin_lang['strreportneedsdef'] = 'Jy moet SQL-kode skryf vir die verslag.'; + $plugin_lang['strreportcreated'] = 'Verslag is geskep.'; + $plugin_lang['strreportcreatedbad'] = 'Die verslag kon nie geskep word nie.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/arabic.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/arabic.php new file mode 100644 index 00000000..32a34c31 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/arabic.php @@ -0,0 +1,23 @@ +<?php + /** + * Arabic language file. + */ + + // Basic strings + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'لم تقم بإنشاء قاعدة بيانات التقارير reports database. إقرأ التعليمات في المف INSTALL.'; + + // Reports + $plugin_lang['strreport'] = 'تقرير Report'; + $plugin_lang['strreports'] = 'تقارير Reports'; + $plugin_lang['strshowallreports'] = 'عرض جميع التقارير'; + $plugin_lang['strnoreports'] = 'لم توجد تقارير.'; + $plugin_lang['strcreatereport'] = 'إنشاء تقرير جديد'; + $plugin_lang['strreportdropped'] = 'تم حذف التقرير.'; + $plugin_lang['strreportdroppedbad'] = 'فشلت عملية حذف التقرير.'; + $plugin_lang['strconfdropreport'] = 'هل أنت متأكد تريد حذف التقرير "%s"؟'; + $plugin_lang['strreportneedsname'] = 'يجب إعطاء اسم للتقرير.'; + $plugin_lang['strreportneedsdef'] = 'يجب كتابة عبارة SQL للتقرير.'; + $plugin_lang['strreportcreated'] = 'تم حفظ التقرير.'; + $plugin_lang['strreportcreatedbad'] = 'لم يتم حفظ التقرير، لقد فشلت عملية الحفظ.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/catalan.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/catalan.php new file mode 100644 index 00000000..0f5c82c3 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/catalan.php @@ -0,0 +1,23 @@ +<?php + /** + * Catalan language file. + */ + + // Basic strings + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'La base de dades dels reports no està creada. Llegeixi el fitxer INSTALL per fer-ho.'; + + // Reports + $plugin_lang['strreport'] = 'Report'; + $plugin_lang['strreports'] = 'Reports'; + $plugin_lang['strshowallreports'] = 'Mostra tots els reports'; + $plugin_lang['strnoreports'] = 'No s\'han trobat reports'; + $plugin_lang['strcreatereport'] = 'Crea un report'; + $plugin_lang['strreportdropped'] = 'Report eliminat.'; + $plugin_lang['strreportdroppedbad'] = 'No s\'ha pogut eliminar el report.'; + $plugin_lang['strconfdropreport'] = 'Està segur de voler eliminar el report "%s"?'; + $plugin_lang['strreportneedsname'] = 'Ha de donar un nom al report.'; + $plugin_lang['strreportneedsdef'] = 'Ha de donar un SQL al report.'; + $plugin_lang['strreportcreated'] = 'Report desat.'; + $plugin_lang['strreportcreatedbad'] = 'No s\'ha pogut desar el report.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-sim.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-sim.php new file mode 100644 index 00000000..aedf4d13 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-sim.php @@ -0,0 +1,22 @@ +<?php + + /** + * @maintainer He Wei Ping [laser@zhengmai.com.cn] + */ + + // Basic strings + $plugin_lang['strplugindescription'] = 'Report plugin'; + + //Reports + $plugin_lang['strreport'] = '报表'; + $plugin_lang['strreports'] = '报表'; + $plugin_lang['strshowallreports'] = '显示所有报表'; + $plugin_lang['strnoreports'] = '查无此报表'; + $plugin_lang['strcreatereport'] = '创建报表'; + $plugin_lang['strreportdropped'] = '创建报表完成.'; + $plugin_lang['strreportdroppedbad'] = '删除报表失败'; + $plugin_lang['strconfdropreport'] = '您确定要删除报表"%s"么?'; + $plugin_lang['strreportneedsname'] = '你必须给您的报表命名'; + $plugin_lang['strreportcreated'] = '储存报表完成'; + $plugin_lang['strreportcreatedbad'] = '储存报表失败'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-tr.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-tr.php new file mode 100644 index 00000000..d5bfbc14 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-tr.php @@ -0,0 +1,23 @@ +<?php + /** + * Chinese language file. + */ + + // Basic strings + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = '您尚未建新報表資料庫,請參閱INSTALL檔說明。'; + + // Reports + $plugin_lang['strreport'] = '報表'; + $plugin_lang['strreports'] = '報表'; + $plugin_lang['strshowallreports'] = '顯示所有的報表'; + $plugin_lang['strnoreports'] = '找不到此報表。'; + $plugin_lang['strcreatereport'] = '建立新報表'; + $plugin_lang['strreportdropped'] = '成功刪除報表。'; + $plugin_lang['strreportdroppedbad'] = '刪除報表作業失敗。'; + $plugin_lang['strconfdropreport'] = '您確定要刪除報表 "%s"?'; + $plugin_lang['strreportneedsname'] = '您需為您的報表命名。'; + $plugin_lang['strreportneedsdef'] = '您需給您的報表 SQL。'; + $plugin_lang['strreportcreated'] = '成功儲存報表。'; + $plugin_lang['strreportcreatedbad'] = '無法儲存報表。'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-utf8-zh_CN.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-utf8-zh_CN.php new file mode 100644 index 00000000..834a93b8 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-utf8-zh_CN.php @@ -0,0 +1,23 @@ +<?php + /** + * Chinese language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = '你不能创建报告数据库。 请参阅INSTALL文件。'; + + // Reports + $plugin_lang['strreport'] = '报表'; + $plugin_lang['strreports'] = '报表'; + $plugin_lang['strshowallreports'] = '显示所有报表'; + $plugin_lang['strnoreports'] = '查无报表。'; + $plugin_lang['strcreatereport'] = '创建报表'; + $plugin_lang['strreportdropped'] = '报表已删除。'; + $plugin_lang['strreportdroppedbad'] = '报表删除失败。'; + $plugin_lang['strconfdropreport'] = '确定要删除报表"%s"吗?'; + $plugin_lang['strreportneedsname'] = '必须指定报表名称。'; + $plugin_lang['strreportneedsdef'] = '必须给报表指定SQL。'; + $plugin_lang['strreportcreated'] = '报表已保存。'; + $plugin_lang['strreportcreatedbad'] = '报表保存失败。'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-utf8-zh_TW.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-utf8-zh_TW.php new file mode 100644 index 00000000..907b2342 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/chinese-utf8-zh_TW.php @@ -0,0 +1,23 @@ +<?php + /** + * Chinese zh_TW translation file for phpPgAdmin. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = '您尚未建立報表資料庫。請參閱指導 INSTALL 檔說明。'; + + // Reports + $plugin_lang['strreport'] = '報表'; + $plugin_lang['strreports'] = '報表'; + $plugin_lang['strshowallreports'] = '顯示全部報表'; + $plugin_lang['strnoreports'] = '找不到任何報表。'; + $plugin_lang['strcreatereport'] = '建立報表'; + $plugin_lang['strreportdropped'] = '報表已移除。'; + $plugin_lang['strreportdroppedbad'] = '報表移除已失敗。'; + $plugin_lang['strconfdropreport'] = '您確定您要移除這個報表 "%s" 嗎?'; + $plugin_lang['strreportneedsname'] = '您必需為您的報表給一個名稱。'; + $plugin_lang['strreportneedsdef'] = '您必需為您的報表給 SQL。'; + $plugin_lang['strreportcreated'] = '報表已儲存。'; + $plugin_lang['strreportcreatedbad'] = '報表儲存已失敗。'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/czech.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/czech.php new file mode 100644 index 00000000..ff6f539c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/czech.php @@ -0,0 +1,23 @@ +<?php + /** + * Czech language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Nemáte vytvořenou databázi výstupních sestav. Přečtěte si soubor INSTALL s instrukcemi.'; + + // Reports + $plugin_lang['strreport'] = 'Výstupní sestava'; + $plugin_lang['strreports'] = 'Výstupní sestavy'; + $plugin_lang['strshowallreports'] = 'Zobrazit všechny výstupní sestavy'; + $plugin_lang['strnoreports'] = 'Nebyly nalezeny žádné výstupní sestava.'; + $plugin_lang['strcreatereport'] = 'Vytvořit výstupní sestavu'; + $plugin_lang['strreportdropped'] = 'Výstupní sestava byla odstraněna.'; + $plugin_lang['strreportdroppedbad'] = 'Nezdařilo se odstranit výstupní sestavu.'; + $plugin_lang['strconfdropreport'] = 'Opravdu chcete odstranit výstupní sestavu „%s“?'; + $plugin_lang['strreportneedsname'] = 'Musíte zadat název pro výstupní sestavu.'; + $plugin_lang['strreportneedsdef'] = 'Musíte zadat dotaz SQL pro výstupní sestavu.'; + $plugin_lang['strreportcreated'] = 'Výstupní sestava byla uložena.'; + $plugin_lang['strreportcreatedbad'] = 'Nezdařilo se uložit výstupní sestavu.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/danish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/danish.php new file mode 100644 index 00000000..7d5df866 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/danish.php @@ -0,0 +1,25 @@ +<?php + /** + * Danish language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Du har ikke oprettet nogen rapportdatabase. For instruktioner læs filen INSTALL.'; + + // Reports + $plugin_lang['strreport'] = 'Rapport'; + $plugin_lang['strreports'] = 'Rapporter'; + $plugin_lang['strshowallreports'] = 'Vis alle rapporter'; + $plugin_lang['strtopbar'] = '%s kører på %s:%s -- Du er logged ind som bruger "%s"'; + $plugin_lang['strtimefmt'] = 'jS M, Y g:iA'; + $plugin_lang['strnoreports'] = 'Ingen rapporter fundet.'; + $plugin_lang['strcreatereport'] = 'Opret rapport'; + $plugin_lang['strreportdropped'] = 'Rapport fjernet.'; + $plugin_lang['strreportcreated'] = 'Rapport oprettet.'; + $plugin_lang['strreportneedsname'] = 'Rapport skal have et navn.'; + $plugin_lang['strreportcreatedbad'] = 'Det lykkedes ikke at oprette rapport.'; + $plugin_lang['strreportdroppedbad'] = 'Det lykkedes ikke at fjerne rapport.'; + $plugin_lang['strconfdropreport'] = 'Er du sikker på, at du vil fjerne rapporten "%s"?'; + $plugin_lang['strreportneedsdef'] = 'Du skal angive en SQL-forespørgsel.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/dutch.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/dutch.php new file mode 100644 index 00000000..aa541fbc --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/dutch.php @@ -0,0 +1,21 @@ +<?php + /** + * Dutch Language file. + */ + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + + //Reports + $plugin_lang['strreport'] = 'Rapport'; + $plugin_lang['strreports'] = 'Rapporten'; + $plugin_lang['strshowallreports'] = 'Toon alle rapporten'; + $plugin_lang['strnoreports'] = 'Geen rapporten gevonden.'; + $plugin_lang['strcreatereport'] = 'Maak rapport aan'; + $plugin_lang['strreportdropped'] = 'Rapport verwijderd.'; + $plugin_lang['strreportdroppedbad'] = 'Verwijdering van rapport mislukt.'; + $plugin_lang['strconfdropreport'] = 'Weet u zeker dat u het rapport "%s" wilt verwijderen?'; + $plugin_lang['strreportneedsname'] = 'U dient een naam op te geven voor het rapport.'; + $plugin_lang['strreportneedsdef'] = 'U dient SQL op te geven voor het rapport.'; + $plugin_lang['strreportcreated'] = 'Rapport bewaard.'; + $plugin_lang['strreportcreatedbad'] = 'Bewaren van het rapport mislukt.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/english.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/english.php new file mode 100644 index 00000000..ce6e6f77 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/english.php @@ -0,0 +1,24 @@ +<?php + /** + * English language file for phpPgAdmin. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'You have not created the reports database. Read the INSTALL file for directions.'; + + // Reports + $plugin_lang['strreport'] = 'Report'; + $plugin_lang['strreports'] = 'Reports'; + $plugin_lang['strshowallreports'] = 'Show all reports'; + $plugin_lang['strnoreports'] = 'No reports found.'; + $plugin_lang['strcreatereport'] = 'Create report'; + $plugin_lang['streditreport'] = 'Edit report'; + $plugin_lang['strreportdropped'] = 'Report dropped.'; + $plugin_lang['strreportdroppedbad'] = 'Report drop failed.'; + $plugin_lang['strconfdropreport'] = 'Are you sure you want to drop the report "%s"?'; + $plugin_lang['strreportneedsname'] = 'You must give a name for your report.'; + $plugin_lang['strreportneedsdef'] = 'You must give SQL for your report.'; + $plugin_lang['strreportcreated'] = 'Report saved.'; + $plugin_lang['strreportcreatedbad'] = 'Failed to save report.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/french.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/french.php new file mode 100644 index 00000000..ac1f5fdb --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/french.php @@ -0,0 +1,24 @@ +<?php + /** + * French Language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Vous n\'avez pas créé la base de données reports. Lisez le fichier INSTALL pour en savoir plus.'; + + // Reports + $plugin_lang['strreport'] = 'Rapport'; + $plugin_lang['strreports'] = 'Rapports'; + $plugin_lang['strshowallreports'] = 'Voir tous les rapports'; + $plugin_lang['strnoreports'] = 'Aucun rapport trouvé.'; + $plugin_lang['strcreatereport'] = 'Créer un rapport'; + $plugin_lang['streditreport'] = 'Éditer un rapport'; + $plugin_lang['strreportdropped'] = 'Rapport supprimé.'; + $plugin_lang['strreportdroppedbad'] = 'Échec lors de la suppression du rapport.'; + $plugin_lang['strconfdropreport'] = 'Êtes-vous sûr de vouloir supprimer le rapport « %s » ?'; + $plugin_lang['strreportneedsname'] = 'Vous devez indiquer un nom pour votre rapport.'; + $plugin_lang['strreportneedsdef'] = 'Vous devez fournir une requête SQL pour votre rapport.'; + $plugin_lang['strreportcreated'] = 'Rapport sauvegardé.'; + $plugin_lang['strreportcreatedbad'] = 'Échec lors de la sauvegarde du rapport.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/galician.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/galician.php new file mode 100644 index 00000000..87da669b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/galician.php @@ -0,0 +1,23 @@ +<?php + /** + * Galician language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Non creou a base de datos de informes. Lea o ficheiro »INSTALL» (en inglés) para máis información.'; + + // Reports + $plugin_lang['strreport'] = 'Informe'; + $plugin_lang['strreports'] = 'Informes'; + $plugin_lang['strshowallreports'] = 'Listar todos os informes'; + $plugin_lang['strnoreports'] = 'Non se atopou informe algún.'; + $plugin_lang['strcreatereport'] = 'Crear un informe'; + $plugin_lang['strreportdropped'] = 'Eliminouse o informe.'; + $plugin_lang['strreportdroppedbad'] = 'Non se conseguiu eliminar o informe.'; + $plugin_lang['strconfdropreport'] = 'Está seguro de que quere eliminar o informe «%s»?'; + $plugin_lang['strreportneedsname'] = 'Debe fornecer un nome para o informe.'; + $plugin_lang['strreportneedsdef'] = 'Debe fornecer un código SQL para o informe.'; + $plugin_lang['strreportcreated'] = 'Gardouse o informe.'; + $plugin_lang['strreportcreatedbad'] = 'Non se conseguiu gardar o informe.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/german.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/german.php new file mode 100644 index 00000000..5f5cec5a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/german.php @@ -0,0 +1,23 @@ +<?php + /** + * German language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Sie haben die Berichtsdatenbank nicht angelegt. In der Datei INSTALL finden Sie Anweisungen dafür.'; + + // Reports + $plugin_lang['strreport'] = 'Bericht'; + $plugin_lang['strreports'] = 'Berichte'; + $plugin_lang['strshowallreports'] = 'Alle Berichte anzeigen'; + $plugin_lang['strnoreports'] = 'Keine Berichte gefunden.'; + $plugin_lang['strcreatereport'] = 'Bericht erstellen.'; + $plugin_lang['strreportdropped'] = 'Bericht gelöscht.'; + $plugin_lang['strreportdroppedbad'] = 'Löschen des Berichtes fehlgeschlagen.'; + $plugin_lang['strconfdropreport'] = 'Sind Sie sicher, dass Sie den Bericht "%s" löschen wollen?'; + $plugin_lang['strreportneedsname'] = 'Sie müssen für den Bericht einen Namen angeben.'; + $plugin_lang['strreportneedsdef'] = 'Sie müssen eine SQL-Abfrage für den Bericht eingeben.'; + $plugin_lang['strreportcreated'] = 'Bericht gespeichert.'; + $plugin_lang['strreportcreatedbad'] = 'Speichern des Berichtes fehlgeschlagen.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/greek.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/greek.php new file mode 100644 index 00000000..78bde375 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/greek.php @@ -0,0 +1,24 @@ +<?php + /** + * Greek language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Η βάση αναφορών δεν έχει δημιουργηθεί. Διαβάστε το αρχείο INSTALL για οδηγίες.'; + + // Reports + $plugin_lang['strreport'] = 'Αναφορά'; + $plugin_lang['strreports'] = 'Αναφορές'; + $plugin_lang['strshowallreports'] = 'Εμφάνιση όλων των αναφορών'; + $plugin_lang['strnoreports'] = 'Δε βρέθηκαν αναφορές.'; + $plugin_lang['strcreatereport'] = 'Δημιουργία αναφοράς'; + $plugin_lang['strreportdropped'] = 'Η αναφορά διαγράφηκε.'; + $plugin_lang['strreportdroppedbad'] = 'Η διαγραφή της αναφοράς απέτυχε.'; + $plugin_lang['strconfdropreport'] = 'Να διαγραφεί η αναφορά "%s"?'; + $plugin_lang['strreportneedsname'] = 'Πρέπει να δώσετε όνομα στην αναφορά.'; + $plugin_lang['strreportneedsdef'] = 'Πρέπει να δώσετε SQL για την αναφορά.'; + $plugin_lang['strreportcreated'] = 'Η αναφορά αποθηκεύτηκε.'; + $plugin_lang['strreportcreatedbad'] = 'Η αποθήκευση της αναφοράς απέτυχε.'; + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/hebrew.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/hebrew.php new file mode 100644 index 00000000..d369f066 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/hebrew.php @@ -0,0 +1,23 @@ +<?php + /** + * Hebrew language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'לא יצרתה בסיס נתונים בישביל הדוחות. אנא קרא את קובץ ה INSTALL בישביל הדרכה.'; + + // Reports + $plugin_lang['strreport'] = 'דוח'; + $plugin_lang['strreports'] = 'דוחות'; + $plugin_lang['strshowallreports'] = 'הראה את כל הדוחות'; + $plugin_lang['strnoreports'] = 'לא נמצאו דוחות.'; + $plugin_lang['strcreatereport'] = 'צור דוח'; + $plugin_lang['strreportdropped'] = 'דוח נמחק.'; + $plugin_lang['strreportdroppedbad'] = 'מחיקת דוח נכשלה'; + $plugin_lang['strconfdropreport'] = 'האם אתה בטוח שברצונך למחוק את הדוח "%s"l?'; + $plugin_lang['strreportneedsname'] = 'אתה חייב לציין שם לדוח.'; + $plugin_lang['strreportneedsdef'] = 'אתה חייב לתת SQL לדוח.'; + $plugin_lang['strreportcreated'] = 'דוח נשמר.'; + $plugin_lang['strreportcreatedbad'] = 'שמירת דוח נכשלה.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/hungarian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/hungarian.php new file mode 100644 index 00000000..bb94af95 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/hungarian.php @@ -0,0 +1,23 @@ +<?php + /** + * Hungarian language file for phpPgAdmin. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Ön még nem teremtette meg a jelentések adatbázisát. Olvassa el az INSTALL fájlt további útmutatásért!'; + + // Reports + $plugin_lang['strreport'] = 'Jelentés'; + $plugin_lang['strreports'] = 'Jelentések'; + $plugin_lang['strshowallreports'] = 'Minden jelentést megjelenít'; + $plugin_lang['strnoreports'] = 'Nincsenek jelentések.'; + $plugin_lang['strcreatereport'] = 'Jelentést teremt'; + $plugin_lang['strreportdropped'] = 'A jelentés törölve.'; + $plugin_lang['strreportdroppedbad'] = 'Nem sikerült törölni a jelentést.'; + $plugin_lang['strconfdropreport'] = 'Biztosan törölni kívánja „%s” jelentést?'; + $plugin_lang['strreportneedsname'] = 'Meg kell adni a jelentésnevet.'; + $plugin_lang['strreportneedsdef'] = 'SQL kifejezést kell hozzáadni a jelentéshez.'; + $plugin_lang['strreportcreated'] = 'A jelentés megteremtve.'; + $plugin_lang['strreportcreatedbad'] = 'Nem sikerült megteremteni a jelentést.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/italian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/italian.php new file mode 100644 index 00000000..17716eaa --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/italian.php @@ -0,0 +1,23 @@ +<?php + /** + * Italian language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Non è stato creato il database dei report. Leggere il file INSTALL per istruzioni.'; + + // Reports - Rapporti + $plugin_lang['strreport'] = 'Rapporto'; + $plugin_lang['strreports'] = 'Rapporti'; + $plugin_lang['strshowallreports'] = 'Mostra tutti i rapporti'; + $plugin_lang['strnoreports'] = 'Nessun rapporto trovato.'; + $plugin_lang['strcreatereport'] = 'Crea rapporto'; + $plugin_lang['strreportdropped'] = 'Rapporto eliminato.'; + $plugin_lang['strreportdroppedbad'] = 'Eliminazione del rapporto fallita.'; + $plugin_lang['strconfdropreport'] = 'Eliminare il rapporto "%s"?'; + $plugin_lang['strreportneedsname'] = 'È necessario specificare un nome per il rapporto.'; + $plugin_lang['strreportneedsdef'] = 'È necessario inserire il codice SQL per il rapporto.'; + $plugin_lang['strreportcreated'] = 'Rapporto salvato'; + $plugin_lang['strreportcreatedbad'] = 'Salvataggio del rapporto fallito.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/japanese.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/japanese.php new file mode 100644 index 00000000..ec0dad25 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/japanese.php @@ -0,0 +1,23 @@ +<?php + /** + * Japanese language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'レポートデータベースが作成されていません。ディレクトリにある INSTALL ファイルを読んでください。'; + + // Reports + $plugin_lang['strreport'] = 'レポート'; + $plugin_lang['strreports'] = 'レポート'; + $plugin_lang['strshowallreports'] = 'すべてのレポートを表示する'; + $plugin_lang['strnoreports'] = 'レポートが見つかりません。'; + $plugin_lang['strcreatereport'] = 'レポートを作成する'; + $plugin_lang['strreportdropped'] = 'レポートを破棄しました。'; + $plugin_lang['strreportdroppedbad'] = 'レポートの破棄に失敗しました。'; + $plugin_lang['strconfdropreport'] = '本当にレポート「%s」を破棄しますか?'; + $plugin_lang['strreportneedsname'] = 'レポート名を指定する必要があります。'; + $plugin_lang['strreportneedsdef'] = 'レポート用のSQLを指定する必要があります。'; + $plugin_lang['strreportcreated'] = 'レポートの保存をしました。'; + $plugin_lang['strreportcreatedbad'] = 'レポートの保存に失敗しました。'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/lithuanian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/lithuanian.php new file mode 100644 index 00000000..2f4ddd5e --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/lithuanian.php @@ -0,0 +1,23 @@ +<?php + /** + * Lithuanian language file. + */ + + // Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Jūs nesate sukūrę ataskaitų duomenų bazės. Instrukcijas skaitykite INSTALL faile.'; + + // Reports + $plugin_lang['strreport'] = 'Ataskaita'; + $plugin_lang['strreports'] = 'Ataskaitos'; + $plugin_lang['strshowallreports'] = 'Rodyti visas ataskaitas'; + $plugin_lang['strnoreports'] = 'Ataskaitų nerasta.'; + $plugin_lang['strcreatereport'] = 'Kurti ataskaitą'; + $plugin_lang['strreportdropped'] = 'Ataskaita pašalinta.'; + $plugin_lang['strreportdroppedbad'] = 'Nepavyko pašalinti ataskaitos.'; + $plugin_lang['strconfdropreport'] = 'Ar tikrai norite šalinti ataskaitą "%s"?'; + $plugin_lang['strreportneedsname'] = 'Turite suteikti ataskaitai pavadinimą.'; + $plugin_lang['strreportneedsdef'] = 'Turite pateikti ataskaitos SQL apibrėžtį.'; + $plugin_lang['strreportcreated'] = 'Ataskaita įrašyta.'; + $plugin_lang['strreportcreatedbad'] = 'Nepavyko įrašyti ataskaitos.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/mongol.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/mongol.php new file mode 100644 index 00000000..0b171dcd --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/mongol.php @@ -0,0 +1,22 @@ +<?php + /** + * Mongolian language filen. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + + // Reports + $plugin_lang['strreport'] = 'ядоХд'; + $plugin_lang['strreports'] = 'ядоХдй'; + $plugin_lang['strshowallreports'] = '№ЯЫСкСди згХ ЯдоХдй'; + $plugin_lang['strnoreports'] = 'ядоХдЯз ЮХд.'; + $plugin_lang['strcreatereport'] = 'ѓЯкФСди ЯдоХд'; + $plugin_lang['strreportdropped'] = 'ядоХд еЮЩодЯжХЮ.'; + $plugin_lang['strreportdroppedbad'] = 'ѕЮЩодЯжХЮЩХ ЯдоХдС авХвзСЮЯ.'; + $plugin_lang['strconfdropreport'] = 'їй езХвХЮй, одЯ ШЯдЩдХ еЮЩодЯжЩди ЯдоХд "%s"?'; + $plugin_lang['strreportneedsname'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди ЩЭб ЯдоХдС.'; + $plugin_lang['strreportneedsdef'] = 'їСЭ ЮХЯТШЯФЩЭЯ еЫСкСди SQL-кСавЯг ФЬб їСлХЧЯ ЯдоХдС.'; + $plugin_lang['strreportcreated'] = 'ядоХд гЯШвСЮХЮ.'; + $plugin_lang['strreportcreatedbad'] = 'ѓЯШвСЮХЮЩХ ЯдоХдС авХвзСЮЯ.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/polish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/polish.php new file mode 100644 index 00000000..ed5e0475 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/polish.php @@ -0,0 +1,23 @@ +<?php + /** + * Polish language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Nie utworzyłeś bazy raportów. Instrukcję znajdziesz w pliku INSTALL.'; + + // Reports + $plugin_lang['strreport'] = 'Raport'; + $plugin_lang['strreports'] = 'Raporty'; + $plugin_lang['strshowallreports'] = 'Pokaż wszystkie raporty'; + $plugin_lang['strnoreports'] = 'Nie znaleziono raportów.'; + $plugin_lang['strcreatereport'] = 'Utwórz raport'; + $plugin_lang['strreportdropped'] = 'Raport został usunięty.'; + $plugin_lang['strreportdroppedbad'] = 'Próba usunięcia raportu się nie powiodła.'; + $plugin_lang['strconfdropreport'] = 'Czy na pewno chcesz usunąć raport "%s"?'; + $plugin_lang['strreportneedsname'] = 'Musisz nazwać raport.'; + $plugin_lang['strreportneedsdef'] = 'Musisz podać zapytanie SQL definiujące raport.'; + $plugin_lang['strreportcreated'] = 'Raport został utworzony.'; + $plugin_lang['strreportcreatedbad'] = 'Próba utworzenia raportu się nie powiodła.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/portuguese-br.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/portuguese-br.php new file mode 100644 index 00000000..d686d23e --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/portuguese-br.php @@ -0,0 +1,23 @@ +<?php + /** + * Brazilian Portuguese language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Plugin de relatório'; + $plugin_lang['strnoreportsdb'] = 'Você não criou a base de dados para relatórios. Leia o arquivo INSTALL para resolução.'; + + // Reports + $plugin_lang['strreport'] = 'Relatório'; + $plugin_lang['strreports'] = 'Relatórios'; + $plugin_lang['strshowallreports'] = 'Exibir todos os relatórios'; + $plugin_lang['strnoreports'] = 'Nenhum relatório encontrado.'; + $plugin_lang['strcreatereport'] = 'Criar relatório'; + $plugin_lang['strreportdropped'] = 'Relatório deletado.'; + $plugin_lang['strreportdroppedbad'] = 'Falha ao deletar o relatório.'; + $plugin_lang['strconfdropreport'] = 'Você têm certeza que deseja deletar o relatório "%s"?'; + $plugin_lang['strreportneedsname'] = 'Você deve informar um nome para o seu relatório.'; + $plugin_lang['strreportneedsdef'] = 'Você deve informar o SQL para o seu relatório.'; + $plugin_lang['strreportcreated'] = 'Relatório salvo.'; + $plugin_lang['strreportcreatedbad'] = 'Falha ao salvar o relatório.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/portuguese-pt.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/portuguese-pt.php new file mode 100644 index 00000000..769a2c0a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/portuguese-pt.php @@ -0,0 +1,23 @@ +<?php +/** +* Portuguese language file. +*/ + + // Basic strings + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Não criou uma base de dados de relatório. Leia o ficheiro INSTALL para mais informações.'; + + // Reports + $plugin_lang['strreport'] = 'Relatório'; + $plugin_lang['strreports'] = 'Relatórios'; + $plugin_lang['strshowallreports'] = 'Exibir todos os relatórios'; + $plugin_lang['strnoreports'] = 'Relatório não encontrado.'; + $plugin_lang['strcreatereport'] = 'Criar relatório'; + $plugin_lang['strreportdropped'] = 'Relatório eliminado.'; + $plugin_lang['strreportdroppedbad'] = 'Falha ao eliminar o relatório.'; + $plugin_lang['strconfdropreport'] = 'Tem certeza que quer eliminar o relatório "%s"?'; + $plugin_lang['strreportneedsname'] = 'Dê um nome ao seu relatório.'; + $plugin_lang['strreportneedsdef'] = 'Adicione a instrução SQL ao seu relatório.'; + $plugin_lang['strreportcreated'] = 'Relatório salvo.'; + $plugin_lang['strreportcreatedbad'] = 'Falha ao salvar o relatório.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/romanian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/romanian.php new file mode 100644 index 00000000..c4ad1599 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/romanian.php @@ -0,0 +1,23 @@ +<?php + /** + * Romanian language file. + */ + + //Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Nu aţi creat baza de date pentru rapoarte. Citiţi fişierul INSTALL pentru instrucţiuni.'; + + // Reports + $plugin_lang['strreport'] = 'Raport'; + $plugin_lang['strreports'] = 'Rapoarte'; + $plugin_lang['strshowallreports'] = 'Afişare toate rapoartele'; + $plugin_lang['strnoreports'] = 'Nici un raport găsit.'; + $plugin_lang['strcreatereport'] = 'Creare raport'; + $plugin_lang['strreportdropped'] = 'Report dropped.'; + $plugin_lang['strreportdroppedbad'] = 'Ştergere raport eşuată.'; + $plugin_lang['strconfdropreport'] = 'Sigur ştergeţi raportul "%s"?'; + $plugin_lang['strreportneedsname'] = 'Specificaţi un nume pentru raport.'; + $plugin_lang['strreportneedsdef'] = 'Specificaţi o instrucţiune SQL pentru raport.'; + $plugin_lang['strreportcreated'] = 'Raport salvat.'; + $plugin_lang['strreportcreatedbad'] = 'Salvare raport eşuată.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/russian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/russian.php new file mode 100644 index 00000000..2082be2a --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/russian.php @@ -0,0 +1,23 @@ +<?php + /** + * Russian UTF-8 language file. + */ + + // Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Вы не создали базу данных отчетов. Читайте разъяснения в файле INSTALL.'; + + // Reports + $plugin_lang['strreport'] = 'Отчет'; + $plugin_lang['strreports'] = 'Отчеты'; + $plugin_lang['strshowallreports'] = 'Показать все отчеты'; + $plugin_lang['strnoreports'] = 'Отчетов нет.'; + $plugin_lang['strcreatereport'] = 'Создать отчет'; + $plugin_lang['strreportdropped'] = 'Отчет уничтожен.'; + $plugin_lang['strreportdroppedbad'] = 'Уничтожение отчета прервано.'; + $plugin_lang['strconfdropreport'] = 'Вы уверены, что хотите уничтожить отчет "%s"?'; + $plugin_lang['strreportneedsname'] = 'Вам необходимо указать имя отчета.'; + $plugin_lang['strreportneedsdef'] = 'Вам необходимо указать SQL-запрос для Вашего отчета.'; + $plugin_lang['strreportcreated'] = 'Отчет сохранен.'; + $plugin_lang['strreportcreatedbad'] = 'Сохранение отчета прервано.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/slovak.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/slovak.php new file mode 100644 index 00000000..fa55a36b --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/slovak.php @@ -0,0 +1,23 @@ +<?php + /** + * Slovenska lokalizacia phpPgAdmin-u. + */ + + // Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Nebola vytvorené report databáza. Prečítaj si INSTALL súbor s pokynmi.'; + + // Reports + $plugin_lang['strreport'] = 'Report'; + $plugin_lang['strreports'] = 'Reporty'; + $plugin_lang['strshowallreports'] = 'Zobraziť Všetky Reporty'; + $plugin_lang['strnoreports'] = 'Nenájdené žiadne reporty.'; + $plugin_lang['strcreatereport'] = 'Vytvoriť Report'; + $plugin_lang['strreportdropped'] = 'Report zmazaný.'; + $plugin_lang['strreportdroppedbad'] = 'Report nebol zmazaný.'; + $plugin_lang['strconfdropreport'] = 'Naozaj chceš zmazať report "%s"?'; + $plugin_lang['strreportneedsname'] = 'Musíš zadať názov pre tvoj report.'; + $plugin_lang['strreportneedsdef'] = 'Musíš zadať SQL dotaz pre tvoj report.'; + $plugin_lang['strreportcreated'] = 'Report uložený.'; + $plugin_lang['strreportcreatedbad'] = 'Report nebol uložený.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/spanish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/spanish.php new file mode 100644 index 00000000..7499d2f0 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/spanish.php @@ -0,0 +1,23 @@ +<?php + /** + * Spanish language file. + */ + + // Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Aún no se ha creado la base de datos para los reportes. Lea las instrucciones del archivo INSTALL.'; + + // Reports + $plugin_lang['strreport'] = 'Reporte'; + $plugin_lang['strreports'] = 'Reportes'; + $plugin_lang['strshowallreports'] = 'Mostrar todos los reportes'; + $plugin_lang['strnoreports'] = 'No se encontró el reporte.'; + $plugin_lang['strcreatereport'] = 'Crear Reporte'; + $plugin_lang['strreportdropped'] = 'Reporte eliminado.'; + $plugin_lang['strreportdroppedbad'] = 'Falló al eliminar el Reporte.'; + $plugin_lang['strconfdropreport'] = '¿Estás seguro que quiere eliminar el reporte "%s"?'; + $plugin_lang['strreportneedsname'] = 'Debe especificar un nombre para el reporte.'; + $plugin_lang['strreportneedsdef'] = 'Debe especificar un SQL para el reporte.'; + $plugin_lang['strreportcreated'] = 'Reporte guardado.'; + $plugin_lang['strreportcreatedbad'] = 'Falló al guardar el reporte.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/swedish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/swedish.php new file mode 100644 index 00000000..8936ea6c --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/swedish.php @@ -0,0 +1,25 @@ +<?php + /** + * Swedish language file. + */ + + // Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Du har inte skapat någon rapportdatabas. Läs filen INSTALL för instruktioner.'; + + // Reports + $plugin_lang['strreport'] = 'Rapport'; + $plugin_lang['strreports'] = 'Rapporter'; + $plugin_lang['strshowallreports'] = 'Visa alla rapporter'; + $plugin_lang['strtopbar'] = '%s körs på %s:%s -- Du är inloggad som användare "%s"'; + $plugin_lang['strtimefmt'] = 'jS M, Y g:iA'; + $plugin_lang['strnoreports'] = 'Hittade inga rapporter.'; + $plugin_lang['strcreatereport'] = 'Skapa rapport'; + $plugin_lang['strreportdropped'] = 'Rapport skapad.'; + $plugin_lang['strreportcreated'] = 'Rapport sparad.'; + $plugin_lang['strreportneedsname'] = 'Du måste namnge din rapport.'; + $plugin_lang['strreportcreatedbad'] = 'Misslyckades att spara rapport.'; + $plugin_lang['strreportdroppedbad'] = 'Misslyckades att skapa rapport.'; + $plugin_lang['strconfdropreport'] = 'Är du säker på att du vill radera rapporten "%s"?'; + $plugin_lang['strreportneedsdef'] = 'Du måste ange din SQL-fråga.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/turkish.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/turkish.php new file mode 100644 index 00000000..278bd9fa --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/turkish.php @@ -0,0 +1,23 @@ +<?php + /** + * Turkish language file. + */ + + // Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'reports veritabanı yaratışmamış. Yönergeler için lütfen INSTALL dosyasını okuyunuz.'; + + // Reports + $plugin_lang['strreport'] = 'Rapor'; + $plugin_lang['strreports'] = 'Raporlar'; + $plugin_lang['strshowallreports'] = 'Tüm raporları göster'; + $plugin_lang['strnoreports'] = 'Hiçbir rapor bulunamadı'; + $plugin_lang['strcreatereport'] = 'Rapor yaratıldı.'; + $plugin_lang['strreportdropped'] = 'Rapor silindi'; + $plugin_lang['strreportdroppedbad'] = 'Rapor silme işi başarısız oldu.'; + $plugin_lang['strconfdropreport'] = '"%s" raporunu silmek istediğinize emin misiniz?'; + $plugin_lang['strreportneedsname'] = 'Raporunuza bir ad vermelisiniz.'; + $plugin_lang['strreportneedsdef'] = 'Raporunuz için SQL sorguları yazmalısınız.'; + $plugin_lang['strreportcreated'] = 'Rapor kaydedildi.'; + $plugin_lang['strreportcreatedbad'] = 'Rapor kaydetme başarısız oldu.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/ukrainian.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/ukrainian.php new file mode 100644 index 00000000..16060472 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/lang/ukrainian.php @@ -0,0 +1,23 @@ +<?php + /** + * Ukrainian KOI8-U language file. + */ + + // Basic + $plugin_lang['strplugindescription'] = 'Report plugin'; + $plugin_lang['strnoreportsdb'] = 'Ви не створили базу даних зв╕т╕в. Читайте пояснення в файл╕ INSTALL.'; + + // Reports + $plugin_lang['strreport'] = 'Зв╕т'; + $plugin_lang['strreports'] = 'Зв╕ти'; + $plugin_lang['strshowallreports'] = 'Показати вс╕ зв╕ти'; + $plugin_lang['strnoreports'] = 'Зв╕т╕в нема╓.'; + $plugin_lang['strcreatereport'] = 'Створити зв╕т'; + $plugin_lang['strreportdropped'] = 'Зв╕т видалено.'; + $plugin_lang['strreportdroppedbad'] = 'Видалення зв╕та перервано.'; + $plugin_lang['strconfdropreport'] = 'Ви впевнен╕, що бажа╓тее видалити зв╕т "%s"?'; + $plugin_lang['strreportneedsname'] = 'Вам необх╕дно вказати ╕м"я зв╕ту.'; + $plugin_lang['strreportneedsdef'] = 'Вам необх╕дно вказати SQL-запит для Вашого зв╕ту.'; + $plugin_lang['strreportcreated'] = 'Зв╕т збережено.'; + $plugin_lang['strreportcreatedbad'] = 'Збереження зв╕ту перервано.'; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/plugin.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/plugin.php new file mode 100644 index 00000000..b37d8161 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/plugin.php @@ -0,0 +1,807 @@ +<?php +require_once('./classes/Plugin.php'); +require_once('./plugins/Report/classes/Reports.php'); + +class Report extends Plugin { + + /** + * Attributes + */ + protected $name = 'Report'; + protected $lang; + protected $conf = array(); + protected $_reportsdb = null; + + /** + * Constructor + * Call parent constructor, passing the language that will be used. + * @param $language Current phpPgAdmin language. If it was not found in the plugin, English will be used. + */ + function __construct($language) { + + /* loads $this->lang and $this->conf */ + parent::__construct($language); + + /* default values */ + if (! isset($this->conf['reports_db'])) { + $this->conf['reports_db'] = 'phppgadmin'; + } + if (! isset($this->conf['reports_schema'])) { + $this->conf['reports_schema'] = 'public'; + } + if (! isset($this->conf['reports_table'])) { + $this->conf['reports_table'] = 'ppa_reports'; + } + if (! isset($this->conf['owned_reports_only'])) { + $this->conf['owned_reports_only'] = false; + } + } + + function get_reportsdb() { + if ($this->_reportsdb === null) { + $status = 0; + $this->_reportsdb = new Reports($this->conf, $status); + + if ($status !== 0) { + global $misc; + $misc->printHeader($this->lang['strreports']); + $misc->printBody(); + $misc->printTrail('server'); + $misc->printTabs('server','reports'); + $misc->printMsg($this->lang['strnoreportsdb']); + $misc->printFooter(); + exit; + } + } + + return $this->_reportsdb; + } + + /** + * This method returns the functions that will hook in the phpPgAdmin core. + * To do include a function just put in the $hooks array the follwing code: + * 'hook' => array('function1', 'function2'). + * + * Example: + * $hooks = array( + * 'toplinks' => array('add_plugin_toplinks'), + * 'tabs' => array('add_tab_entry'), + * 'action_buttons' => array('add_more_an_entry') + * ); + * + * @return $hooks + */ + function get_hooks() { + $hooks = array( + 'tabs' => array('add_plugin_tabs'), + 'trail' => array('add_plugin_trail'), + 'navlinks' => array('plugin_navlinks') + ); + return $hooks; + } + + /** + * This method returns the functions that will be used as actions. + * To do include a function that will be used as action, just put in the $actions array the follwing code: + * + * $actions = array( + * 'show_page', + * 'show_error', + * ); + * + * @return $actions + */ + function get_actions() { + $actions = array( + 'save_edit', + 'edit', + 'properties', + 'save_create', + 'create', + 'drop', + 'confirm_drop', + 'execute', + 'default_action' + ); + return $actions; + } + + /** + * Add plugin in the tabs + * @param $plugin_functions_parameters + */ + function add_plugin_tabs(&$plugin_functions_parameters) { + global $misc; + + $tabs = &$plugin_functions_parameters['tabs']; + + if ($plugin_functions_parameters['section'] == 'server') { + $tabs['report_plugin'] = array ( + 'title' => $this->lang['strplugindescription'], + 'url' => 'plugin.php', + 'urlvars' => array( + 'subject' => 'server', + 'action' => 'default_action', + 'plugin' => $this->name + ), + 'hide' => false, + 'icon' => $this->icon('Report') + ); + } + + if ($plugin_functions_parameters['section'] == 'report') { + $tabs['report_plugin'] = array ( + 'title' => $this->lang['strplugindescription'], + 'url' => 'plugin.php', + 'urlvars' => array( + 'subject' => 'server', + 'action' => 'default_action', + 'plugin' => $this->name + ), + 'hide' => false, + 'icon' => $this->icon('Report') + ); + } + } + + /** + * Add plugin in the trail + * @param $plugin_functions_parameters + */ + function add_plugin_trail(&$plugin_functions_parameters) { + global $misc; + $trail = &$plugin_functions_parameters['trail']; + $done = false; + $subject = ''; + if (isset($_REQUEST['subject'])) { + $subject = $_REQUEST['subject']; + } + + $action = ''; + if (isset($_REQUEST['action'])) { + $action = $_REQUEST['action']; + } + + if (isset($_REQUEST['plugin']) and $_REQUEST['plugin'] == 'Report') { + $url = array ( + 'url' => 'plugin.php', + 'urlvars' => array ( + 'plugin' => $this->name, + 'action' => 'default_action' + ) + ); + $trail['report_plugin'] = array ( + 'title' => $this->lang['strreport'], + 'text' => $this->lang['strreport'], + 'url' => $misc->getActionUrl($url, $_REQUEST, null, false), + 'icon' => $this->icon('Reports') + ); + } + + if (isset($_REQUEST['plugin']) + and $_REQUEST['plugin'] == 'Report' + and $action != 'default_action' + and in_array($action, $this->get_actions()) + ) { + + $url = array ( + 'url' => 'plugin.php', + 'urlvars' => array ( + 'plugin' => $this->name, + 'action' => 'properties', + 'report_id' => field('report_id'), + ) + ); + + if (isset($_REQUEST['report'])) + $url['urlvars']['report'] = field('report'); + + $trail['report_plugin_name'] = array ( + 'title' => $this->lang['strreport'], + 'text' => $this->lang['strreport'], + 'url' => $misc->getActionUrl($url, $_REQUEST, null, false), + 'icon' => $this->icon('Report') + ); + + if (isset($_REQUEST['report'])) + $trail['report_plugin_name']['text'] = $_REQUEST['report']; + + } + } + + /** + * Add plugin in the navlinks + * @param $plugin_functions_parameters + */ + function plugin_navlinks(&$params) { + global $misc, $lang; + + if ( + ($params['place'] == 'sql-form' + or $params['place'] == 'display-browse') + and ( isset($params['env']['rs']) + and is_object($params['env']['rs']) + and $params['env']['rs']->recordCount() > 0)) + { + if ( ! (isset($_REQUEST['plugin']) + and $_REQUEST['plugin'] == $this->name) + ) { + /* ResultSet doesn't come from a plugin: + * show a create report link. */ + $params['navlinks']['report_link'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array ( + 'plugin' => $this->name, + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + ) + ) + ), + 'content' => $this->lang['strcreatereport'] + ); + + if (isset($_REQUEST['paginate'])) + $params['navlinks']['report_link']['attr']['href']['urlvars']['paginate'] + = $_REQUEST['paginate']; + + if (!empty($_SESSION['sqlquery'])) { + $params['navlinks']['report_link']['attr']['href']['urlvars']['fromsql'] + = 1; + } + else { + if (isset($_REQUEST['subject']) + and isset($_REQUEST[$_REQUEST['subject']])) + { + $params['navlinks']['report_link']['attr']['href']['urlvars']['subject'] + = $_REQUEST['subject']; + $params['navlinks']['report_link']['attr']['href']['urlvars'][$_REQUEST['subject']] + = $_REQUEST[$_REQUEST['subject']]; + + $params['navlinks']['report_link']['attr']['href']['urlvars']['sortkey'] + = isset($_REQUEST['sortkey']) ? $_REQUEST['sortkey'] : ''; + + $params['navlinks']['report_link']['attr']['href']['urlvars']['sortdir'] + = isset($_REQUEST['sortdir']) ? $_REQUEST['sortdir'] : ''; + } + else { + unset($params['navlinks']['report_link']); + } + } + } + else { + /* ResultSet comes from a plugin: + * show a edit report link. */ + $params['navlinks']['report_link'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array ( + 'plugin' => $this->name, + 'action' => 'edit', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'report_id' => $_REQUEST['report_id'] + ) + ) + ), + 'content' => $this->lang['streditreport'] + ); + + /* edit collapse link to add report related vars */ + $params['navlinks']['collapse']['attr']['href']['urlvars'] + ['plugin'] = $this->name; + $params['navlinks']['collapse']['attr']['href']['urlvars'] + ['report_id'] = $_REQUEST['report_id']; + $params['navlinks']['collapse']['attr']['href']['urlvars'] + ['report'] = $_REQUEST['report']; + + /* edit refresh link to add report related vars */ + $params['navlinks']['refresh']['attr']['href']['urlvars'] + ['plugin'] = $this->name; + $params['navlinks']['refresh']['attr']['href']['urlvars'] + ['report_id'] = $_REQUEST['report_id']; + $params['navlinks']['refresh']['attr']['href']['urlvars'] + ['report'] = $_REQUEST['report']; + + if (isset($_REQUEST['action'])) { + $params['navlinks']['collapse']['attr']['href']['urlvars'] + ['action'] = $_REQUEST['action']; + + $params['navlinks']['refresh']['attr']['href']['urlvars'] + ['action'] = $_REQUEST['action']; + } + } + + if (isset($_REQUEST['schema'])) + $params['navlinks']['report_link']['attr']['href']['urlvars']['schema'] + = $_REQUEST['schema']; + } + } + + function get_subject_params() { + $vars = array(); + + if (! isset($_REQUEST['action'])) + return $vars; + + $action = $_REQUEST['action']; + + switch ($action) { + case 'execute': + $vars = array( + 'report_id' => $_REQUEST['report_id'], + 'report' => $_REQUEST['report'], + 'action' => 'properties' /*defaults to properties*/ + ); + if (isset($_REQUEST['back'])) + $vars['action'] = $_REQUEST['back']; + break; + } + + return $vars; + } + + function edit($msg = '') { + global $data, $misc, $lang; + + $reportsdb = $this->get_reportsdb(); + + $misc->printHeader($this->lang['strreports']); + $misc->printBody(); + $misc->printTrail('server'); + $misc->printTabs('server', 'report_plugin'); + $misc->printMsg($msg); + + // If it's a first, load then get the data from the database + $report = $reportsdb->getReport($_REQUEST['report_id']); + + if ($_REQUEST['action'] == 'edit') { + $_POST['report_name'] = $report->fields['report_name']; + $_POST['db_name'] = $report->fields['db_name']; + $_POST['descr'] = $report->fields['descr']; + $_POST['report_sql'] = $report->fields['report_sql']; + if ($report->fields['paginate'] == 't') { + $_POST['paginate'] = true; + } + } + + // Get a list of available databases + $databases = $data->getDatabases(); + + $_REQUEST['report'] = $report->fields['report_name']; + + echo "<form action=\"plugin.php?plugin={$this->name}\" method=\"post\">\n"; + echo $misc->form; + echo "<table style=\"width: 100%\">\n"; + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\"><input name=\"report_name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['report_name']), "\" /></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strdatabase']}</th>\n"; + echo "<td class=\"data1\"><select name=\"db_name\">\n"; + while (!$databases->EOF) { + $dbname = $databases->fields['datname']; + echo "<option value=\"", htmlspecialchars($dbname), "\"", + ($dbname == $_POST['db_name']) ? ' selected="selected"' : '', ">", + htmlspecialchars($dbname), "</option>\n"; + $databases->moveNext(); + } + echo "</select></td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "<td class=\"data1\"><textarea style=\"width:100%;\" rows=\"5\" cols=\"50\" name=\"descr\">", + htmlspecialchars($_POST['descr']), "</textarea></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strsql']}</th>\n"; + echo "<td class=\"data1\"><textarea style=\"width:100%;\" rows=\"15\" cols=\"50\" name=\"report_sql\">", + htmlspecialchars($_POST['report_sql']), "</textarea></td></tr>\n"; + echo "</table>\n"; + echo "<label for=\"paginate\"><input type=\"checkbox\" id=\"paginate\" name=\"paginate\"", (isset($_POST['paginate']) ? ' checked="checked"' : ''), " /> {$lang['strpaginate']}</label>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_edit\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strsave']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "<input type=\"hidden\" name=\"report_id\" value=\"{$report->fields['report_id']}\" />\n"; + echo "</form>\n"; + $misc->printFooter(); + } + + /** + * Saves changes to a report + */ + function save_edit() { + $reportsdb = $this->get_reportsdb(); + + if (isset($_REQUEST['cancel'])) { + $this->default_action(); + exit; + } + + if (!isset($_POST['report_name'])) $_POST['report_name'] = ''; + if (!isset($_POST['db_name'])) $_POST['db_name'] = ''; + if (!isset($_POST['descr'])) $_POST['descr'] = ''; + if (!isset($_POST['report_sql'])) $_POST['report_sql'] = ''; + + // Check that they've given a name and a definition + if ($_POST['report_name'] == '') { + $this->edit($this->lang['strreportneedsname']); + } elseif ($_POST['report_sql'] == '') { + $this->edit($this->lang['strreportneedsdef']); + } else { + $status = $reportsdb->alterReport($_POST['report_id'], $_POST['report_name'], $_POST['db_name'], + $_POST['descr'], $_POST['report_sql'], isset($_POST['paginate'])); + if ($status == 0) + $this->default_action($this->lang['strreportcreated']); + else + $this->edit($this->lang['strreportcreatedbad']); + } + } + + /** + * Display read-only properties of a report + */ + function properties($msg = '') { + global $data, $reportsdb, $misc; + global $lang; + + $reportsdb = $this->get_reportsdb(); + + $misc->printHeader($this->lang['strreports']); + $misc->printBody(); + $misc->printTrail('server'); + $misc->printTabs('server', 'report_plugin'); + $misc->printMsg($msg); + + $report = $reportsdb->getReport($_REQUEST['report_id']); + + $_REQUEST['report'] = $report->fields['report_name']; + + if ($report->recordCount() == 1) { + echo "<table>\n"; + echo "<tr><th class=\"data left\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($report->fields['report_name']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strdatabase']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($report->fields['db_name']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($report->fields['descr']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strpaginate']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($report->fields['paginate'], 'yesno', array('align' => 'left')), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strsql']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($report->fields['report_sql']), "</td></tr>\n"; + echo "</table>\n"; + } + else echo "<p>{$lang['strinvalidparam']}</p>\n"; + + $urlvars = array ( + 'plugin' => $this->name, + 'server' => $_REQUEST['server'] + ); + if (isset($_REQUEST['schema'])) $urlvars['schema'] = $_REQUEST['schema']; + if (isset($_REQUEST['schema'])) $urlvars['database'] = $_REQUEST['schema']; + + $navlinks = array ( + 'showall' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array_merge($urlvars, array('action' => 'default_action')) + ) + ), + 'content' => $this->lang['strshowallreports'] + ), + 'edit' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array_merge($urlvars, array( + 'action' => 'edit', + 'report_id' => $report->fields['report_id']) + ) + ) + ), + 'content' => $lang['stredit'] + ), + 'execute' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array_merge($urlvars, array( + 'action' => 'execute', + 'report' => $report->fields['report_name'], + 'database' => $report->fields['db_name'], + 'report_id' => $report->fields['report_id'], + 'paginate' => $report->fields['paginate'], + 'nohistory' => 't', + 'return' => 'plugin', + 'back' => 'properties' + )) + ) + ), + 'content' => $lang['strexecute'] + ) + ); + $misc->printNavLinks($navlinks, 'reports-properties'); + } + + /** + * Displays a screen where they can enter a new report + */ + function create($msg = '') { + global $data, $reportsdb, $misc; + global $lang; + + $misc->printHeader($this->lang['strreports']); + $misc->printBody(); + $misc->printTrail('server'); + $misc->printTabs('server', 'report_plugin'); + $misc->printMsg($msg); + + if (!isset($_REQUEST['report_name'])) $_REQUEST['report_name'] = ''; + if (!isset($_REQUEST['db_name'])) $_REQUEST['db_name'] = ''; + if (!isset($_REQUEST['descr'])) $_REQUEST['descr'] = ''; + if (!isset($_REQUEST['report_sql'])) { + // Set the query from session if linked from a user query result + if (isset($_REQUEST['fromsql']) and $_REQUEST['fromsql'] == 1 ) { + $_REQUEST['report_sql'] = $_SESSION['sqlquery']; + } + else { + $_REQUEST['sortkey'] = isset($_REQUEST['sortkey']) ? $_REQUEST['sortkey'] : ''; + if (preg_match('/^[0-9]+$/', $_REQUEST['sortkey']) && $_REQUEST['sortkey'] > 0) $orderby = array($_REQUEST['sortkey'] => $_REQUEST['sortdir']); + else $orderby = array(); + + $subject = isset($_REQUEST['subject']) && isset($_REQUEST[$_REQUEST['subject']]) + ? $_REQUEST[$_REQUEST['subject']] + : ''; + + $_REQUEST['report_sql'] = $data->getSelectSQL($subject, array(), array(), array(), $orderby); + } + } + + if (isset($_REQUEST['database'])) { + $_REQUEST['db_name'] = $_REQUEST['database']; + unset($_REQUEST['database']); + $misc->setForm(); + } + + $databases = $data->getDatabases(); + + echo "<form action=\"plugin.php?plugin={$this->name}\" method=\"post\">\n"; + echo $misc->form; + echo "<table style=\"width: 100%\">\n"; + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\"><input name=\"report_name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['report_name']), "\" /></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strdatabase']}</th>\n"; + echo "<td class=\"data1\"><select name=\"db_name\">\n"; + while (!$databases->EOF) { + $dbname = $databases->fields['datname']; + echo "<option value=\"", htmlspecialchars($dbname), "\"", + ($dbname == $_REQUEST['db_name']) ? ' selected="selected"' : '', ">", + htmlspecialchars($dbname), "</option>\n"; + $databases->moveNext(); + } + echo "</select></td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "<td class=\"data1\"><textarea style=\"width:100%;\" rows=\"5\" cols=\"50\" name=\"descr\">", + htmlspecialchars($_REQUEST['descr']), "</textarea></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strsql']}</th>\n"; + echo "<td class=\"data1\"><textarea style=\"width:100%;\" rows=\"15\" cols=\"50\" name=\"report_sql\">", + htmlspecialchars($_REQUEST['report_sql']), "</textarea></td></tr>\n"; + echo "</table>\n"; + echo "<label for=\"paginate\"><input type=\"checkbox\" id=\"paginate\" name=\"paginate\"", (isset($_REQUEST['paginate']) ? ' checked="checked"' : ''), " /> {$lang['strpaginate']}</label>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strsave']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + $misc->printFooter(); + } + + /** + * Actually creates the new report in the database + */ + function save_create() { + if (isset($_REQUEST['cancel'])) { + $this->default_action(); + exit; + } + + $reportsdb = $this->get_reportsdb(); + + if (!isset($_POST['report_name'])) $_POST['report_name'] = ''; + if (!isset($_POST['db_name'])) $_POST['db_name'] = ''; + if (!isset($_POST['descr'])) $_POST['descr'] = ''; + if (!isset($_POST['report_sql'])) $_POST['report_sql'] = ''; + + // Check that they've given a name and a definition + if ($_POST['report_name'] == '') $this->create($this->lang['strreportneedsname']); + elseif ($_POST['report_sql'] == '') $this->create($this->lang['strreportneedsdef']); + else { + $status = $reportsdb->createReport($_POST['report_name'], $_POST['db_name'], + $_POST['descr'], $_POST['report_sql'], isset($_POST['paginate'])); + if ($status == 0) + $this->default_action($this->lang['strreportcreated']); + else + $this->create($this->lang['strreportcreatedbad']); + } + } + + /** + * Show confirmation of drop and perform actual drop + */ + function drop() { + global $reportsdb, $misc; + global $lang; + + $confirm = false; + if (isset($_REQUEST['confirm'])) $confirm = true; + + $reportsdb = $this->get_reportsdb(); + + $misc->printHeader($this->lang['strreports']); + $misc->printBody(); + + if (isset($_REQUEST['cancel'])) { + $this->default_action(); + exit; + } + + if ($confirm) { + // Fetch report from the database + $report = $reportsdb->getReport($_REQUEST['report_id']); + + $_REQUEST['report'] = $report->fields['report_name']; + $misc->printTrail('report'); + $misc->printTitle($lang['strdrop']); + + echo "<p>", sprintf($this->lang['strconfdropreport'], $misc->printVal($report->fields['report_name'])), "</p>\n"; + + echo "<form action=\"plugin.php?plugin={$this->name}\" method=\"post\">\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"report_id\" value=\"", htmlspecialchars($_REQUEST['report_id']), "\" />\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } else { + $status = $reportsdb->dropReport($_POST['report_id']); + if ($status == 0) + $this->default_action($this->lang['strreportdropped']); + else + $this->default_action($this->lang['strreportdroppedbad']); + } + + $misc->printFooter(); + } + + function execute() { + global $misc, $data; + + $reportsdb = $this->get_reportsdb(); + + $report = $reportsdb->getReport($_REQUEST['report_id']); + + $_POST['query'] = $report->fields['report_sql']; + + include('./sql.php'); + } + + /** + * Show default list of reports in the database + */ + function default_action($msg = '') { + global $data, $misc, $lang; + + $reportsdb = $this->get_reportsdb(); + + $misc->printHeader($this->lang['strreports']); + $misc->printBody(); + $misc->printTrail('server'); + $misc->printTabs('server', 'report_plugin'); + $misc->printMsg($msg); + + $reports = $reportsdb->getReports(); + + $columns = array( + 'report' => array( + 'title' => $this->lang['strreport'], + 'field' => field('report_name'), + 'url' => "plugin.php?plugin={$this->name}&action=properties&{$misc->href}&", + 'vars' => array( + 'report_id' => 'report_id', + 'report' => 'report_name' + ), + ), + 'database' => array( + 'title' => $lang['strdatabase'], + 'field' => field('db_name'), + ), + 'created' => array( + 'title' => $lang['strcreated'], + 'field' => field('date_created'), + ), + 'paginate' => array( + 'title' => $lang['strpaginate'], + 'field' => field('paginate'), + 'type' => 'yesno', + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('descr'), + ), + ); + + //$return_url = urlencode("plugin.php?plugin={$this->name}&{$misc->href}"); + $urlvars = $misc->getRequestVars(); + + $actions = array( + 'run' => array ( + 'content' => $lang['strexecute'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array_merge($urlvars, array ( + 'plugin' => $this->name, + 'action' => 'execute', + 'report' => field('report_name'), + 'database' => field('db_name'), + 'report_id' => field('report_id'), + 'paginate' => field('paginate'), + 'nohistory' => 't', + 'return' => 'plugin', + 'back' => 'default_action' + )) + ) + ) + ), + 'edit' => array ( + 'content' => $lang['stredit'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array_merge($urlvars, array ( + 'plugin' => $this->name, + 'action' => 'edit', + 'report_id' => field('report_id'), + )) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array_merge($urlvars, array ( + 'plugin' => $this->name, + 'action' => 'drop', + 'confirm' => 'true', + 'report_id' => field('report_id'), + )) + ) + ) + ), + ); + + $misc->printTable($reports, $columns, $actions, 'reports-reports', $this->lang['strnoreports']); + + $navlinks = array ( + array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'plugin.php', + 'urlvars' => array ( + 'plugin' => $this->name, + 'server' => field('server'), + 'action' => 'create') + ) + ), + 'content' => $this->lang['strcreatereport'] + ) + ); + $misc->printNavLinks($navlinks, 'reports-reports'); + $misc->printFooter(); + } +} +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/sql/reports-pgsql.sql b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/sql/reports-pgsql.sql new file mode 100644 index 00000000..1272a762 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/plugins/Report/sql/reports-pgsql.sql @@ -0,0 +1,27 @@ +-- SQL script to create reports database for PostgreSQL +-- +-- To run, type: psql template1 < reports-pgsql.sql +-- +-- $Id: reports-pgsql.sql,v 1.4 2007/04/16 11:02:36 mr-russ Exp $ + +CREATE DATABASE phppgadmin; + +\connect phppgadmin + +CREATE TABLE ppa_reports ( + report_id SERIAL, + report_name varchar(255) NOT NULL, + db_name varchar(255) NOT NULL, + date_created date DEFAULT NOW() NOT NULL, + created_by varchar(255) NOT NULL, + descr text, + report_sql text NOT NULL, + paginate boolean NOT NULL, + PRIMARY KEY (report_id) +); + +-- Allow everyone to do everything with reports. This may +-- or may not be what you want. +GRANT SELECT,INSERT,UPDATE,DELETE ON ppa_reports TO PUBLIC; +GRANT SELECT,UPDATE ON ppa_reports_report_id_seq TO PUBLIC; + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/privileges.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/privileges.php new file mode 100644 index 00000000..ea7b7f95 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/privileges.php @@ -0,0 +1,354 @@ +<?php + + /** + * Manage privileges in a database + * + * $Id: privileges.php,v 1.45 2007/09/13 13:41:01 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Grant permissions on an object to a user + * @param $confirm To show entry screen + * @param $mode 'grant' or 'revoke' + * @param $msg (optional) A message to show + */ + function doAlter($confirm, $mode, $msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_REQUEST['username'])) $_REQUEST['username'] = array(); + if (!isset($_REQUEST['groupname'])) $_REQUEST['groupname'] = array(); + if (!isset($_REQUEST['privilege'])) $_REQUEST['privilege'] = array(); + + if ($confirm) { + // Get users from the database + $users = $data->getUsers(); + // Get groups from the database + $groups = $data->getGroups(); + + $misc->printTrail($_REQUEST['subject']); + + switch ($mode) { + case 'grant': + $misc->printTitle($lang['strgrant'],'pg.privilege.grant'); + break; + case 'revoke': + $misc->printTitle($lang['strrevoke'],'pg.privilege.revoke'); + break; + } + $misc->printMsg($msg); + + echo "<form action=\"privileges.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data left\">{$lang['strusers']}</th>\n"; + echo "<td class=\"data1\"><select name=\"username[]\" multiple=\"multiple\" size=\"", min(6, $users->recordCount()), "\">\n"; + while (!$users->EOF) { + $uname = htmlspecialchars($users->fields['usename']); + echo "<option value=\"{$uname}\"", + in_array($users->fields['usename'], $_REQUEST['username']) ? ' selected="selected"' : '', ">{$uname}</option>\n"; + $users->moveNext(); + } + echo "</select></td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strgroups']}</th>\n"; + echo "<td class=\"data1\">\n"; + echo "<input type=\"checkbox\" id=\"public\" name=\"public\"", (isset($_REQUEST['public']) ? ' checked="checked"' : ''), " /><label for=\"public\">PUBLIC</label>\n"; + // Only show groups if there are groups! + if ($groups->recordCount() > 0) { + echo "<br /><select name=\"groupname[]\" multiple=\"multiple\" size=\"", min(6, $groups->recordCount()), "\">\n"; + while (!$groups->EOF) { + $gname = htmlspecialchars($groups->fields['groname']); + echo "<option value=\"{$gname}\"", + in_array($groups->fields['groname'], $_REQUEST['groupname']) ? ' selected="selected"' : '', ">{$gname}</option>\n"; + $groups->moveNext(); + } + echo "</select>\n"; + } + echo "</td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strprivileges']}</th>\n"; + echo "<td class=\"data1\">\n"; + foreach ($data->privlist[$_REQUEST['subject']] as $v) { + $v = htmlspecialchars($v); + echo "<input type=\"checkbox\" id=\"privilege[$v]\" name=\"privilege[$v]\"", + isset($_REQUEST['privilege'][$v]) ? ' checked="checked"' : '', " /><label for=\"privilege[$v]\">{$v}</label><br />\n"; + } + echo "</td></tr>\n"; + // Grant option + if ($data->hasGrantOption()) { + echo "<tr><th class=\"data left\">{$lang['stroptions']}</th>\n"; + echo "<td class=\"data1\">\n"; + if ($mode == 'grant') { + echo "<input type=\"checkbox\" id=\"grantoption\" name=\"grantoption\"", + isset($_REQUEST['grantoption']) ? ' checked="checked"' : '', " /><label for=\"grantoption\">GRANT OPTION</label>\n"; + } + elseif ($mode == 'revoke') { + echo "<input type=\"checkbox\" id=\"grantoption\" name=\"grantoption\"", + isset($_REQUEST['grantoption']) ? ' checked="checked"' : '', " /><label for=\"grantoption\">GRANT OPTION FOR</label><br />\n"; + echo "<input type=\"checkbox\" id=\"cascade\" name=\"cascade\"", + isset($_REQUEST['cascade']) ? ' checked="checked"' : '', " /><label for=\"cascade\">CASCADE</label><br />\n"; + } + echo "</td></tr>\n"; + } + echo "</table>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"save\" />\n"; + echo "<input type=\"hidden\" name=\"mode\" value=\"", htmlspecialchars($mode), "\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"", htmlspecialchars($_REQUEST['subject']), "\" />\n"; + if (isset($_REQUEST[$_REQUEST['subject'].'_oid'])) + echo "<input type=\"hidden\" name=\"", htmlspecialchars($_REQUEST['subject'].'_oid'), + "\" value=\"", htmlspecialchars($_REQUEST[$_REQUEST['subject'].'_oid']), "\" />\n"; + echo "<input type=\"hidden\" name=\"", htmlspecialchars($_REQUEST['subject']), + "\" value=\"", htmlspecialchars($_REQUEST[$_REQUEST['subject']]), "\" />\n"; + if ($_REQUEST['subject'] == 'column') + echo "<input type=\"hidden\" name=\"table\" value=\"", + htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo $misc->form; + if ($mode == 'grant') + echo "<input type=\"submit\" name=\"grant\" value=\"{$lang['strgrant']}\" />\n"; + elseif ($mode == 'revoke') + echo "<input type=\"submit\" name=\"revoke\" value=\"{$lang['strrevoke']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>"; + echo "</form>\n"; + } + else { + // Determine whether object should be ref'd by name or oid. + if (isset($_REQUEST[$_REQUEST['subject'].'_oid'])) + $object = $_REQUEST[$_REQUEST['subject'].'_oid']; + else + $object = $_REQUEST[$_REQUEST['subject']]; + + if (isset($_REQUEST['table'])) $table = $_REQUEST['table']; + else $table = null; + $status = $data->setPrivileges(($mode == 'grant') ? 'GRANT' : 'REVOKE', $_REQUEST['subject'], $object, + isset($_REQUEST['public']), $_REQUEST['username'], $_REQUEST['groupname'], array_keys($_REQUEST['privilege']), + isset($_REQUEST['grantoption']), isset($_REQUEST['cascade']), $table); + + if ($status == 0) + doDefault($lang['strgranted']); + elseif ($status == -3 || $status == -4) + doAlter(true, $_REQUEST['mode'], $lang['strgrantbad']); + else + doAlter(true, $_REQUEST['mode'], $lang['strgrantfailed']); + } + } + + /** + * Show permissions on a database, namespace, relation, language or function + */ + function doDefault($msg = '') { + global $data, $misc, $database; + global $lang; + + $misc->printTrail($_REQUEST['subject']); + + # @@@FIXME: This switch is just a temporary solution, + # need a better way, maybe every type of object should + # have a tab bar??? + switch ($_REQUEST['subject']) { + case 'server': + case 'database': + case 'schema': + case 'table': + case 'column': + case 'view': + $misc->printTabs($_REQUEST['subject'], 'privileges'); + break; + default: + $misc->printTitle($lang['strprivileges'], 'pg.privilege'); + } + $misc->printMsg($msg); + + // Determine whether object should be ref'd by name or oid. + if (isset($_REQUEST[$_REQUEST['subject'].'_oid'])) + $object = $_REQUEST[$_REQUEST['subject'].'_oid']; + else + $object = $_REQUEST[$_REQUEST['subject']]; + + // Get the privileges on the object, given its type + if ($_REQUEST['subject'] == 'column') + $privileges = $data->getPrivileges($object, 'column', $_REQUEST['table']); + else + $privileges = $data->getPrivileges($object, $_REQUEST['subject']); + + if (sizeof($privileges) > 0) { + echo "<table>\n"; + if ($data->hasRoles()) + echo "<tr><th class=\"data\">{$lang['strrole']}</th>"; + else + echo "<tr><th class=\"data\">{$lang['strtype']}</th><th class=\"data\">{$lang['struser']}/{$lang['strgroup']}</th>"; + + foreach ($data->privlist[$_REQUEST['subject']] as $v2) { + // Skip over ALL PRIVILEGES + if ($v2 == 'ALL PRIVILEGES') continue; + echo "<th class=\"data\">{$v2}</th>\n"; + } + if ($data->hasGrantOption()) { + echo "<th class=\"data\">{$lang['strgrantor']}</th>"; + } + echo "</tr>\n"; + + // Loop over privileges, outputting them + $i = 0; + foreach ($privileges as $v) { + $id = (($i % 2) == 0 ? '1' : '2'); + echo "<tr class=\"data{$id}\">\n"; + if (!$data->hasRoles()) + echo "<td>", $misc->printVal($v[0]), "</td>\n"; + echo "<td>", $misc->printVal($v[1]), "</td>\n"; + foreach ($data->privlist[$_REQUEST['subject']] as $v2) { + // Skip over ALL PRIVILEGES + if ($v2 == 'ALL PRIVILEGES') continue; + echo "<td>"; + if (in_array($v2, $v[2])) + echo $lang['stryes']; + else + echo $lang['strno']; + // If we have grant option for this, end mark + if ($data->hasGrantOption() && in_array($v2, $v[4])) echo $lang['strasterisk']; + echo "</td>\n"; + } + if ($data->hasGrantOption()) { + echo "<td>", $misc->printVal($v[3]), "</td>\n"; + } + echo "</tr>\n"; + $i++; + } + + echo "</table>"; + } + else { + echo "<p>{$lang['strnoprivileges']}</p>\n"; + } + + // Links for granting to a user or group + switch ($_REQUEST['subject']) { + case 'table': + case 'view': + case 'sequence': + case 'function': + case 'tablespace': + $alllabel = "showall{$_REQUEST['subject']}s"; + $allurl = "{$_REQUEST['subject']}s.php"; + $alltxt = $lang["strshowall{$_REQUEST['subject']}s"]; + break; + case 'schema': + $alllabel = "showallschemas"; + $allurl = "schemas.php"; + $alltxt = $lang["strshowallschemas"]; + break; + case 'database': + $alllabel = "showalldatabases"; + $allurl = 'all_db.php'; + $alltxt = $lang['strshowalldatabases']; + break; + } + + $subject = $_REQUEST['subject']; + $object = $_REQUEST[$_REQUEST['subject']]; + + if ($_REQUEST['subject'] == 'function') { + $objectoid = $_REQUEST[$_REQUEST['subject'].'_oid']; + $urlvars = array ( + 'action' => 'alter', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + $subject => $object, + "{$subject}_oid" => $objectoid, + 'subject'=> $subject + ); + } + else if ($_REQUEST['subject'] == 'column') { + $urlvars = array ( + 'action' => 'alter', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + $subject => $object, + 'subject'=> $subject + ); + + if (isset($_REQUEST['table'])) + $urlvars['table'] = $_REQUEST['table']; + else + $urlvars['view'] = $_REQUEST['view']; + } + else { + $urlvars = array ( + 'action' => 'alter', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + $subject => $object, + 'subject'=> $subject + ); + if (isset($_REQUEST['schema'])) { + $urlvars['schema'] = $_REQUEST['schema']; + } + } + + $navlinks = array ( + 'grant' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'privileges.php', + 'urlvars' => array_merge($urlvars, array('mode' => 'grant')) + ) + ), + 'content' => $lang['strgrant'] + ), + 'revoke' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'privileges.php', + 'urlvars' => array_merge($urlvars, array('mode' => 'revoke')) + ) + ), + 'content' => $lang['strrevoke'] + ) + ); + + if (isset($allurl)) { + $navlinks[$alllabel] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => $allurl, + 'urlvars' => array ( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'] + ) + ) + ), + 'content' => $alltxt + ); + if (isset($_REQUEST['schema'])) { + $navlinks[$alllabel]['attr']['href']['urlvars']['schema'] = $_REQUEST['schema']; + } + } + + $misc->printNavLinks($navlinks, 'privileges-privileges', get_defined_vars()); + } + + $misc->printHeader($lang['strprivileges']); + $misc->printBody(); + + switch ($action) { + case 'save': + if (isset($_REQUEST['cancel'])) doDefault(); + else doAlter(false, $_REQUEST['mode']); + break; + case 'alter': + doAlter(true, $_REQUEST['mode']); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/redirect.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/redirect.php new file mode 100644 index 00000000..f31aa086 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/redirect.php @@ -0,0 +1,29 @@ +<?php + $subject = isset($_REQUEST['subject']) ? $_REQUEST['subject'] : 'root'; + + if ($subject == 'root') + $_no_db_connection = true; + + include_once('./libraries/lib.inc.php'); + + $url = $misc->getLastTabURL($subject); + + // Load query vars into superglobal arrays + if (isset($url['urlvars'])) { + $urlvars = array(); + + foreach($url['urlvars'] as $k => $urlvar) { + $urlvars[$k] = value($urlvar, $_REQUEST); + } + + /* parse_str function is affected by magic_quotes_gpc */ + if (ini_get('magic_quotes_gpc')) { + $misc->stripVar($urlvars); + } + + $_REQUEST = array_merge($_REQUEST, $urlvars); + $_GET = array_merge($_GET, $urlvars); + } + + require $url['url']; +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/robots.txt b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/robots.txt new file mode 100644 index 00000000..223518bb --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/robots.txt @@ -0,0 +1,8 @@ +# Prevent web robots from indexing your phpPgAdmin installation +# See: http://www.searchengineworld.com/robots/robots_tutorial.htm +# +# $Id: robots.txt,v 1.1 2003/09/01 03:02:17 chriskl Exp $ + +User-agent: * +Disallow: / + diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/roles.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/roles.php new file mode 100644 index 00000000..b4444cfa --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/roles.php @@ -0,0 +1,743 @@ +<?php + + /** + * Manage roles in a database cluster + * + * $Id: roles.php,v 1.13 2008/03/21 15:32:57 xzilla Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Displays a screen for create a new role + */ + function doCreate($msg = '') { + global $data, $misc, $username; + global $lang; + + if (!isset($_POST['formRolename'])) $_POST['formRolename'] = ''; + if (!isset($_POST['formPassword'])) $_POST['formPassword'] = ''; + if (!isset($_POST['formConfirm'])) $_POST['formConfirm'] = ''; + if (!isset($_POST['formConnLimit'])) $_POST['formConnLimit'] = ''; + if (!isset($_POST['formExpires'])) $_POST['formExpires'] = ''; + if (!isset($_POST['memberof'])) $_POST['memberof'] = array(); + if (!isset($_POST['members'])) $_POST['members'] = array(); + if (!isset($_POST['adminmembers'])) $_POST['adminmembers'] = array(); + + $misc->printTrail('role'); + $misc->printTitle($lang['strcreaterole'],'pg.role.create'); + $misc->printMsg($msg); + + echo "<form action=\"roles.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\" style=\"width: 130px\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"15\" maxlength=\"{$data->_maxNameLen}\" name=\"formRolename\" value=\"", htmlspecialchars($_POST['formRolename']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strpassword']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"15\" type=\"password\" name=\"formPassword\" value=\"", htmlspecialchars($_POST['formPassword']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strconfirm']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"15\" type=\"password\" name=\"formConfirm\" value=\"", htmlspecialchars($_POST['formConfirm']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formSuper\">{$lang['strsuper']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formSuper\" name=\"formSuper\"", + (isset($_POST['formSuper'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formCreateDB\">{$lang['strcreatedb']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formCreateDB\" name=\"formCreateDB\"", + (isset($_POST['formCreateDB'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formCreateRole\">{$lang['strcancreaterole']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formCreateRole\" name=\"formCreateRole\"", + (isset($_POST['formCreateRole'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formInherits\">{$lang['strinheritsprivs']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formInherits\" name=\"formInherits\"", + (isset($_POST['formInherits'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formCanLogin\">{$lang['strcanlogin']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formCanLogin\" name=\"formCanLogin\"", + (isset($_POST['formCanLogin'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strconnlimit']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"4\" name=\"formConnLimit\" value=\"", htmlspecialchars($_POST['formConnLimit']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strexpires']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"23\" name=\"formExpires\" value=\"", htmlspecialchars($_POST['formExpires']), "\" /></td>\n\t</tr>\n"; + + $roles = $data->getRoles(); + if ($roles->recordCount() > 0) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strmemberof']}</th>\n"; + echo "\t\t<td class=\"data\">\n"; + echo "\t\t\t<select name=\"memberof[]\" multiple=\"multiple\" size=\"", min(20, $roles->recordCount()), "\">\n"; + while (!$roles->EOF) { + $rolename = $roles->fields['rolname']; + echo "\t\t\t\t<option value=\"{$rolename}\"", + (in_array($rolename, $_POST['memberof']) ? ' selected="selected"' : ''), ">", $misc->printVal($rolename), "</option>\n"; + $roles->moveNext(); + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + + $roles->moveFirst(); + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strmembers']}</th>\n"; + echo "\t\t<td class=\"data\">\n"; + echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", min(20, $roles->recordCount()), "\">\n"; + while (!$roles->EOF) { + $rolename = $roles->fields['rolname']; + echo "\t\t\t\t<option value=\"{$rolename}\"", + (in_array($rolename, $_POST['members']) ? ' selected="selected"' : ''), ">", $misc->printVal($rolename), "</option>\n"; + $roles->moveNext(); + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + + $roles->moveFirst(); + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['stradminmembers']}</th>\n"; + echo "\t\t<td class=\"data\">\n"; + echo "\t\t\t<select name=\"adminmembers[]\" multiple=\"multiple\" size=\"", min(20, $roles->recordCount()), "\">\n"; + while (!$roles->EOF) { + $rolename = $roles->fields['rolname']; + echo "\t\t\t\t<option value=\"{$rolename}\"", + (in_array($rolename, $_POST['adminmembers']) ? ' selected="selected"' : ''), ">", $misc->printVal($rolename), "</option>\n"; + $roles->moveNext(); + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + } + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"create\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new role in the database + */ + function doSaveCreate() { + global $data, $lang; + + if(!isset($_POST['memberof'])) $_POST['memberof'] = array(); + if(!isset($_POST['members'])) $_POST['members'] = array(); + if(!isset($_POST['adminmembers'])) $_POST['adminmembers'] = array(); + + // Check data + if ($_POST['formRolename'] == '') + doCreate($lang['strroleneedsname']); + else if ($_POST['formPassword'] != $_POST['formConfirm']) + doCreate($lang['strpasswordconfirm']); + else { + $status = $data->createRole($_POST['formRolename'], $_POST['formPassword'], isset($_POST['formSuper']), + isset($_POST['formCreateDB']), isset($_POST['formCreateRole']), isset($_POST['formInherits']), + isset($_POST['formCanLogin']), $_POST['formConnLimit'], $_POST['formExpires'], $_POST['memberof'], $_POST['members'], + $_POST['adminmembers']); + if ($status == 0) + doDefault($lang['strrolecreated']); + else + doCreate($lang['strrolecreatedbad']); + } + } + + /** + * Function to allow alter a role + */ + function doAlter($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('role'); + $misc->printTitle($lang['stralter'],'pg.role.alter'); + $misc->printMsg($msg); + + $roledata = $data->getRole($_REQUEST['rolename']); + + if ($roledata->recordCount() > 0) { + $server_info = $misc->getServerInfo(); + $canRename = $data->hasUserRename() && ($_REQUEST['rolename'] != $server_info['username']); + $roledata->fields['rolsuper'] = $data->phpBool($roledata->fields['rolsuper']); + $roledata->fields['rolcreatedb'] = $data->phpBool($roledata->fields['rolcreatedb']); + $roledata->fields['rolcreaterole'] = $data->phpBool($roledata->fields['rolcreaterole']); + $roledata->fields['rolinherit'] = $data->phpBool($roledata->fields['rolinherit']); + $roledata->fields['rolcanlogin'] = $data->phpBool($roledata->fields['rolcanlogin']); + + if (!isset($_POST['formExpires'])){ + if ($canRename) $_POST['formNewRoleName'] = $roledata->fields['rolname']; + if ($roledata->fields['rolsuper']) $_POST['formSuper'] = ''; + if ($roledata->fields['rolcreatedb']) $_POST['formCreateDB'] = ''; + if ($roledata->fields['rolcreaterole']) $_POST['formCreateRole'] = ''; + if ($roledata->fields['rolinherit']) $_POST['formInherits'] = ''; + if ($roledata->fields['rolcanlogin']) $_POST['formCanLogin'] = ''; + $_POST['formConnLimit'] = $roledata->fields['rolconnlimit'] == '-1' ? '' : $roledata->fields['rolconnlimit']; + $_POST['formExpires'] = $roledata->fields['rolvaliduntil'] == 'infinity' ? '' : $roledata->fields['rolvaliduntil']; + $_POST['formPassword'] = ''; + } + + echo "<form action=\"roles.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\" style=\"width: 130px\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\">", ($canRename ? "<input name=\"formNewRoleName\" size=\"15\" maxlength=\"{$data->_maxNameLen}\" value=\"" . htmlspecialchars($_POST['formNewRoleName']) . "\" />" : $misc->printVal($roledata->fields['rolname'])), "</td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strpassword']}</th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"password\" size=\"15\" name=\"formPassword\" value=\"", htmlspecialchars($_POST['formPassword']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strconfirm']}</th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"password\" size=\"15\" name=\"formConfirm\" value=\"\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formSuper\">{$lang['strsuper']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formSuper\" name=\"formSuper\"", + (isset($_POST['formSuper'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formCreateDB\">{$lang['strcreatedb']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formCreateDB\" name=\"formCreateDB\"", + (isset($_POST['formCreateDB'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formCreateRole\">{$lang['strcancreaterole']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formCreateRole\" name=\"formCreateRole\"", + (isset($_POST['formCreateRole'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formInherits\">{$lang['strinheritsprivs']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formInherits\" name=\"formInherits\"", + (isset($_POST['formInherits'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formCanLogin\">{$lang['strcanlogin']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formCanLogin\" name=\"formCanLogin\"", + (isset($_POST['formCanLogin'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strconnlimit']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"4\" name=\"formConnLimit\" value=\"", htmlspecialchars($_POST['formConnLimit']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strexpires']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"23\" name=\"formExpires\" value=\"", htmlspecialchars($_POST['formExpires']), "\" /></td>\n\t</tr>\n"; + + if (!isset($_POST['memberof'])) + { + $memberof = $data->getMemberOf($_REQUEST['rolename']); + if ($memberof->recordCount() > 0) { + $i = 0; + while (!$memberof->EOF) { + $_POST['memberof'][$i++] = $memberof->fields['rolname']; + $memberof->moveNext(); + } + } + else + $_POST['memberof'] = array(); + $memberofold = implode(',', $_POST['memberof']); + } + if (!isset($_POST['members'])) + { + $members = $data->getMembers($_REQUEST['rolename']); + if ($members->recordCount() > 0) { + $i = 0; + while (!$members->EOF) { + $_POST['members'][$i++] = $members->fields['rolname']; + $members->moveNext(); + } + } + else + $_POST['members'] = array(); + $membersold = implode(',', $_POST['members']); + } + if (!isset($_POST['adminmembers'])) + { + $adminmembers = $data->getMembers($_REQUEST['rolename'], 't'); + if ($adminmembers->recordCount() > 0) { + $i = 0; + while (!$adminmembers->EOF) { + $_POST['adminmembers'][$i++] = $adminmembers->fields['rolname']; + $adminmembers->moveNext(); + } + } + else + $_POST['adminmembers'] = array(); + $adminmembersold = implode(',', $_POST['adminmembers']); + } + + $roles = $data->getRoles($_REQUEST['rolename']); + if ($roles->recordCount() > 0) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strmemberof']}</th>\n"; + echo "\t\t<td class=\"data\">\n"; + echo "\t\t\t<select name=\"memberof[]\" multiple=\"multiple\" size=\"", min(20, $roles->recordCount()), "\">\n"; + while (!$roles->EOF) { + $rolename = $roles->fields['rolname']; + echo "\t\t\t\t<option value=\"{$rolename}\"", + (in_array($rolename, $_POST['memberof']) ? ' selected="selected"' : ''), ">", $misc->printVal($rolename), "</option>\n"; + $roles->moveNext(); + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + + $roles->moveFirst(); + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strmembers']}</th>\n"; + echo "\t\t<td class=\"data\">\n"; + echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", min(20, $roles->recordCount()), "\">\n"; + while (!$roles->EOF) { + $rolename = $roles->fields['rolname']; + echo "\t\t\t\t<option value=\"{$rolename}\"", + (in_array($rolename, $_POST['members']) ? ' selected="selected"' : ''), ">", $misc->printVal($rolename), "</option>\n"; + $roles->moveNext(); + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + + $roles->moveFirst(); + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['stradminmembers']}</th>\n"; + echo "\t\t<td class=\"data\">\n"; + echo "\t\t\t<select name=\"adminmembers[]\" multiple=\"multiple\" size=\"", min(20, $roles->recordCount()), "\">\n"; + while (!$roles->EOF) { + $rolename = $roles->fields['rolname']; + echo "\t\t\t\t<option value=\"{$rolename}\"", + (in_array($rolename, $_POST['adminmembers']) ? ' selected="selected"' : ''), ">", $misc->printVal($rolename), "</option>\n"; + $roles->moveNext(); + } + echo "\t\t\t</select>\n"; + echo "\t\t</td>\n\t</tr>\n"; + } + echo "</table>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_alter\" />\n"; + echo "<input type=\"hidden\" name=\"rolename\" value=\"", htmlspecialchars($_REQUEST['rolename']), "\" />\n"; + echo "<input type=\"hidden\" name=\"memberofold\" value=\"", isset($_POST['memberofold']) ? $_POST['memberofold'] : htmlspecialchars($memberofold), "\" />\n"; + echo "<input type=\"hidden\" name=\"membersold\" value=\"", isset($_POST['membersold']) ? $_POST['membersold'] : htmlspecialchars($membersold), "\" />\n"; + echo "<input type=\"hidden\" name=\"adminmembersold\" value=\"", isset($_POST['adminmembersold']) ? $_POST['adminmembersold'] : htmlspecialchars($adminmembersold), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Function to save after editing a role + */ + function doSaveAlter() { + global $data, $lang; + + if(!isset($_POST['memberof'])) $_POST['memberof'] = array(); + if(!isset($_POST['members'])) $_POST['members'] = array(); + if(!isset($_POST['adminmembers'])) $_POST['adminmembers'] = array(); + + // Check name and password + if (isset($_POST['formNewRoleName']) && $_POST['formNewRoleName'] == '') + doAlter($lang['strroleneedsname']); + else if ($_POST['formPassword'] != $_POST['formConfirm']) + doAlter($lang['strpasswordconfirm']); + else { + if (isset($_POST['formNewRoleName'])) $status = $data->setRenameRole($_POST['rolename'], $_POST['formPassword'], isset($_POST['formSuper']), isset($_POST['formCreateDB']), isset($_POST['formCreateRole']), isset($_POST['formInherits']), isset($_POST['formCanLogin']), $_POST['formConnLimit'], $_POST['formExpires'], $_POST['memberof'], $_POST['members'], $_POST['adminmembers'], $_POST['memberofold'], $_POST['membersold'], $_POST['adminmembersold'], $_POST['formNewRoleName']); + else $status = $data->setRole($_POST['rolename'], $_POST['formPassword'], isset($_POST['formSuper']), isset($_POST['formCreateDB']), isset($_POST['formCreateRole']), isset($_POST['formInherits']), isset($_POST['formCanLogin']), $_POST['formConnLimit'], $_POST['formExpires'], $_POST['memberof'], $_POST['members'], $_POST['adminmembers'], $_POST['memberofold'], $_POST['membersold'], $_POST['adminmembersold']); + if ($status == 0) + doDefault($lang['strrolealtered']); + else + doAlter($lang['strrolealteredbad']); + } + } + + /** + * Show confirmation of drop a role and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('role'); + $misc->printTitle($lang['strdroprole'],'pg.role.drop'); + + echo "<p>", sprintf($lang['strconfdroprole'], $misc->printVal($_REQUEST['rolename'])), "</p>\n"; + + echo "<form action=\"roles.php\" method=\"post\">\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"rolename\" value=\"", htmlspecialchars($_REQUEST['rolename']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + $status = $data->dropRole($_REQUEST['rolename']); + if ($status == 0) + doDefault($lang['strroledropped']); + else + doDefault($lang['strroledroppedbad']); + } + } + + /** + * Show the properties of a role + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('role'); + $misc->printTitle($lang['strproperties'],'pg.role'); + $misc->printMsg($msg); + + $roledata = $data->getRole($_REQUEST['rolename']); + if($roledata->recordCount() > 0 ) { + $roledata->fields['rolsuper'] = $data->phpBool($roledata->fields['rolsuper']); + $roledata->fields['rolcreatedb'] = $data->phpBool($roledata->fields['rolcreatedb']); + $roledata->fields['rolcreaterole'] = $data->phpBool($roledata->fields['rolcreaterole']); + $roledata->fields['rolinherit'] = $data->phpBool($roledata->fields['rolinherit']); + $roledata->fields['rolcanlogin'] = $data->phpBool($roledata->fields['rolcanlogin']); + + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data\" style=\"width: 130px\">Description</th>\n"; + echo "\t\t<th class=\"data\" style=\"width: 120\">Value</th>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<td class=\"data1\">{$lang['strname']}</td>\n"; + echo "\t\t<td class=\"data1\">", htmlspecialchars($_REQUEST['rolename']), "</td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<td class=\"data2\">{$lang['strsuper']}</td>\n"; + echo "\t\t<td class=\"data2\">", (($roledata->fields['rolsuper']) ? $lang['stryes'] : $lang['strno']), "</td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<td class=\"data1\">{$lang['strcreatedb']}</td>\n"; + echo "\t\t<td class=\"data1\">", (($roledata->fields['rolcreatedb']) ? $lang['stryes'] : $lang['strno']), "</td>\n"; + echo "\t<tr>\n\t\t<td class=\"data2\">{$lang['strcancreaterole']}</td>\n"; + echo "\t\t<td class=\"data2\">", (($roledata->fields['rolcreaterole']) ? $lang['stryes'] : $lang['strno']), "</td>\n"; + echo "\t<tr>\n\t\t<td class=\"data1\">{$lang['strinheritsprivs']}</td>\n"; + echo "\t\t<td class=\"data1\">", (($roledata->fields['rolinherit']) ? $lang['stryes'] : $lang['strno']), "</td>\n"; + echo "\t<tr>\n\t\t<td class=\"data2\">{$lang['strcanlogin']}</td>\n"; + echo "\t\t<td class=\"data2\">", (($roledata->fields['rolcanlogin']) ? $lang['stryes'] : $lang['strno']), "</td>\n"; + echo "\t<tr>\n\t\t<td class=\"data1\">{$lang['strconnlimit']}</td>\n"; + echo "\t\t<td class=\"data1\">", ($roledata->fields['rolconnlimit'] == '-1' ? $lang['strnolimit'] : $misc->printVal($roledata->fields['rolconnlimit'])), "</td>\n"; + echo "\t<tr>\n\t\t<td class=\"data2\">{$lang['strexpires']}</td>\n"; + echo "\t\t<td class=\"data2\">", ($roledata->fields['rolvaliduntil'] == 'infinity' || is_null($roledata->fields['rolvaliduntil']) ? $lang['strnever'] : $misc->printVal($roledata->fields['rolvaliduntil'])), "</td>\n"; + echo "\t<tr>\n\t\t<td class=\"data1\">{$lang['strsessiondefaults']}</td>\n"; + echo "\t\t<td class=\"data1\">", $misc->printVal($roledata->fields['rolconfig']), "</td>\n"; + echo "\t<tr>\n\t\t<td class=\"data2\">{$lang['strmemberof']}</td>\n"; + echo "\t\t<td class=\"data2\">"; + $memberof = $data->getMemberOf($_REQUEST['rolename']); + if ($memberof->recordCount() > 0) { + while (!$memberof->EOF) { + echo $misc->printVal($memberof->fields['rolname']), "<br />\n"; + $memberof->moveNext(); + } + } + echo "</td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<td class=\"data1\">{$lang['strmembers']}</td>\n"; + echo "\t\t<td class=\"data1\">"; + $members = $data->getMembers($_REQUEST['rolename']); + if ($members->recordCount() > 0) { + while (!$members->EOF) { + echo $misc->printVal($members->fields['rolname']), "<br />\n"; + $members->moveNext(); + } + } + echo "</td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<td class=\"data2\">{$lang['stradminmembers']}</td>\n"; + echo "\t\t<td class=\"data2\">"; + $adminmembers = $data->getMembers($_REQUEST['rolename'], 't'); + if ($adminmembers->recordCount() > 0) { + while (!$adminmembers->EOF) { + echo $misc->printVal($adminmembers->fields['rolname']), "<br />\n"; + $adminmembers->moveNext(); + } + } + echo "</td>\n\t</tr>\n"; + echo "</table>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + + $navlinks = array ( + 'showall' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'roles.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strshowallroles'] + ), + 'alter' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'roles.php', + 'urlvars' => array ( + 'action' => 'alter', + 'server' => $_REQUEST['server'], + 'rolename' => $_REQUEST['rolename'] + ) + ) + ), + 'content' => $lang['stralter'] + ), + 'drop' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'roles.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'server' => $_REQUEST['server'], + 'rolename' => $_REQUEST['rolename'] + ) + ) + ), + 'content' => $lang['strdrop'] + ) + ); + + $misc->printNavLinks($navlinks, 'roles-properties', get_defined_vars()); + } + + /** + * If a role is not a superuser role, then we have an 'account management' + * page for change his password, etc. We don't prevent them from + * messing with the URL to gain access to other role admin stuff, because + * the PostgreSQL permissions will prevent them changing anything anyway. + */ + function doAccount($msg = '') { + global $data, $misc; + global $lang; + + $server_info = $misc->getServerInfo(); + + $roledata = $data->getRole($server_info['username']); + $_REQUEST['rolename'] = $server_info['username']; + + $misc->printTrail('role'); + $misc->printTabs('server','account'); + $misc->printMsg($msg); + + if ($roledata->recordCount() > 0) { + $roledata->fields['rolsuper'] = $data->phpBool($roledata->fields['rolsuper']); + $roledata->fields['rolcreatedb'] = $data->phpBool($roledata->fields['rolcreatedb']); + $roledata->fields['rolcreaterole'] = $data->phpBool($roledata->fields['rolcreaterole']); + $roledata->fields['rolinherit'] = $data->phpBool($roledata->fields['rolinherit']); + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data\">{$lang['strname']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strsuper']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strcreatedb']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strcancreaterole']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strinheritsprivs']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strconnlimit']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strexpires']}</th>\n"; + echo "\t\t<th class=\"data\">{$lang['strsessiondefaults']}</th>\n"; + echo "\t</tr>\n"; + echo "\t<tr>\n\t\t<td class=\"data1\">", $misc->printVal($roledata->fields['rolname']), "</td>\n"; + echo "\t\t<td class=\"data1\">", $misc->printVal($roledata->fields['rolsuper'], 'yesno'), "</td>\n"; + echo "\t\t<td class=\"data1\">", $misc->printVal($roledata->fields['rolcreatedb'], 'yesno'), "</td>\n"; + echo "\t\t<td class=\"data1\">", $misc->printVal($roledata->fields['rolcreaterole'], 'yesno'), "</td>\n"; + echo "\t\t<td class=\"data1\">", $misc->printVal($roledata->fields['rolinherit'], 'yesno'), "</td>\n"; + echo "\t\t<td class=\"data1\">", ($roledata->fields['rolconnlimit'] == '-1' ? $lang['strnolimit'] : $misc->printVal($roledata->fields['rolconnlimit'])), "</td>\n"; + echo "\t\t<td class=\"data1\">", ($roledata->fields['rolvaliduntil'] == 'infinity' || is_null($roledata->fields['rolvaliduntil']) ? $lang['strnever'] : $misc->printVal($roledata->fields['rolvaliduntil'])), "</td>\n"; + echo "\t\t<td class=\"data1\">", $misc->printVal($roledata->fields['rolconfig']), "</td>\n"; + echo "\t</tr>\n</table>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + + $misc->printNavLinks(array ('changepassword' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'roles.php', + 'urlvars' => array ( + 'action' => 'confchangepassword', + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strchangepassword'] + )), 'roles-account', get_defined_vars()); + } + + /** + * Show confirmation of change password and actually change password + */ + function doChangePassword($confirm, $msg = '') { + global $data, $misc; + global $lang, $conf; + + $server_info = $misc->getServerInfo(); + + if ($confirm) { + $_REQUEST['rolename'] = $server_info['username']; + $misc->printTrail('role'); + $misc->printTitle($lang['strchangepassword'],'pg.role.alter'); + $misc->printMsg($msg); + + if (!isset($_POST['password'])) $_POST['password'] = ''; + if (!isset($_POST['confirm'])) $_POST['confirm'] = ''; + + echo "<form action=\"roles.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strpassword']}</th>\n"; + echo "\t\t<td><input type=\"password\" name=\"password\" size=\"32\" value=\"", + htmlspecialchars($_POST['password']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strconfirm']}</th>\n"; + echo "\t\t<td><input type=\"password\" name=\"confirm\" size=\"32\" value=\"\" /></td>\n\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"changepassword\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"ok\" value=\"{$lang['strok']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</p></form>\n"; + } + else { + // Check that password is minimum length + if (strlen($_POST['password']) < $conf['min_password_length']) + doChangePassword(true, $lang['strpasswordshort']); + // Check that password matches confirmation password + elseif ($_POST['password'] != $_POST['confirm']) + doChangePassword(true, $lang['strpasswordconfirm']); + else { + $status = $data->changePassword($server_info['username'], $_POST['password']); + if ($status == 0) + doAccount($lang['strpasswordchanged']); + else + doAccount($lang['strpasswordchangedbad']); + } + } + } + + + /** + * Show default list of roles in the database + */ + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + function renderRoleConnLimit($val) { + global $lang; + return $val == '-1' ? $lang['strnolimit'] : htmlspecialchars($val); + } + + function renderRoleExpires($val) { + global $lang; + return $val == 'infinity' ? $lang['strnever'] : htmlspecialchars($val); + } + + $misc->printTrail('server'); + $misc->printTabs('server','roles'); + $misc->printMsg($msg); + + $roles = $data->getRoles(); + + $columns = array( + 'role' => array( + 'title' => $lang['strrole'], + 'field' => field('rolname'), + 'url' => "redirect.php?subject=role&action=properties&{$misc->href}&", + 'vars' => array('rolename' => 'rolname'), + ), + 'superuser' => array( + 'title' => $lang['strsuper'], + 'field' => field('rolsuper'), + 'type' => 'yesno', + ), + 'createdb' => array( + 'title' => $lang['strcreatedb'], + 'field' => field('rolcreatedb'), + 'type' => 'yesno', + ), + 'createrole' => array( + 'title' => $lang['strcancreaterole'], + 'field' => field('rolcreaterole'), + 'type' => 'yesno', + ), + 'inherits' => array( + 'title' => $lang['strinheritsprivs'], + 'field' => field('rolinherit'), + 'type' => 'yesno', + ), + 'canloging' => array( + 'title' => $lang['strcanlogin'], + 'field' => field('rolcanlogin'), + 'type' => 'yesno', + ), + 'connlimit' => array( + 'title' => $lang['strconnlimit'], + 'field' => field('rolconnlimit'), + 'type' => 'callback', + 'params'=> array('function' => 'renderRoleConnLimit') + ), + 'expires' => array( + 'title' => $lang['strexpires'], + 'field' => field('rolvaliduntil'), + 'type' => 'callback', + 'params'=> array('function' => 'renderRoleExpires', 'null' => $lang['strnever']), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + ); + + $actions = array( + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'roles.php', + 'urlvars' => array ( + 'action' => 'alter', + 'rolename' => field('rolname') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'roles.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'rolename' => field('rolname') + ) + ) + ) + ), + ); + + $misc->printTable($roles, $columns, $actions, 'roles-roles', $lang['strnoroles']); + + $navlinks = array ( + 'create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'roles.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strcreaterole'] + ) + ); + $misc->printNavLinks($navlinks, 'roles-roles', get_defined_vars()); + } + + $misc->printHeader($lang['strroles']); + $misc->printBody(); + + switch ($action) { + case 'create': + doCreate(); + break; + case 'save_create': + if (isset($_POST['create'])) doSaveCreate(); + else doDefault(); + break; + case 'alter': + doAlter(); + break; + case 'save_alter': + if (isset($_POST['alter'])) doSaveAlter(); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'properties': + doProperties(); + break; + case 'confchangepassword': + doChangePassword(true); + break; + case 'changepassword': + if (isset($_REQUEST['ok'])) doChangePassword(false); + else doAccount(); + break; + case 'account': + doAccount(); + break; + default: + doDefault(); + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/rules.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/rules.php new file mode 100644 index 00000000..3ea50c90 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/rules.php @@ -0,0 +1,232 @@ +<?php + + /** + * List rules on a table OR view + * + * $Id: rules.php,v 1.33 2007/08/31 18:30:11 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * Confirm and then actually create a rule + */ + function createRule($confirm, $msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['name'])) $_POST['name'] = ''; + if (!isset($_POST['event'])) $_POST['event'] = ''; + if (!isset($_POST['where'])) $_POST['where'] = ''; + if (!isset($_POST['type'])) $_POST['type'] = 'SOMETHING'; + if (!isset($_POST['raction'])) $_POST['raction'] = ''; + + if ($confirm) { + $misc->printTrail($_REQUEST['subject']); + $misc->printTitle($lang['strcreaterule'],'pg.rule.create'); + $misc->printMsg($msg); + + echo "<form action=\"rules.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\"><input name=\"name\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" /></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strevent']}</th>\n"; + echo "<td class=\"data1\"><select name=\"event\">\n"; + foreach ($data->rule_events as $v) { + echo "<option value=\"{$v}\"", ($v == $_POST['event']) ? ' selected="selected"' : '', + ">{$v}</option>\n"; + } + echo "</select></td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strwhere']}</th>\n"; + echo "<td class=\"data1\"><input name=\"where\" size=\"32\" value=\"", + htmlspecialchars($_POST['where']), "\" /></td></tr>\n"; + echo "<tr><th class=\"data left\"><label for=\"instead\">{$lang['strinstead']}</label></th>\n"; + echo "<td class=\"data1\">"; + echo "<input type=\"checkbox\" id=\"instead\" name=\"instead\" ", (isset($_POST['instead'])) ? ' checked="checked"' : '', " />\n"; + echo "</td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['straction']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<input type=\"radio\" id=\"type1\" name=\"type\" value=\"NOTHING\"", ($_POST['type'] == 'NOTHING') ? ' checked="checked"' : '', " /> <label for=\"type1\">NOTHING</label><br />\n"; + echo "<input type=\"radio\" name=\"type\" value=\"SOMETHING\"", ($_POST['type'] == 'SOMETHING') ? ' checked="checked"' : '', " />\n"; + echo "(<input name=\"raction\" size=\"32\" value=\"", + htmlspecialchars($_POST['raction']), "\" />)</td></tr>\n"; + echo "</table>\n"; + + echo "<input type=\"hidden\" name=\"action\" value=\"save_create_rule\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"", htmlspecialchars($_REQUEST['subject']), "\" />\n"; + echo "<input type=\"hidden\" name=\"", htmlspecialchars($_REQUEST['subject']), + "\" value=\"", htmlspecialchars($_REQUEST[$_REQUEST['subject']]), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"submit\" name=\"ok\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + + } + else { + if (trim($_POST['name']) == '') + createRule(true, $lang['strruleneedsname']); + else { + $status = $data->createRule($_POST['name'], + $_POST['event'], $_POST[$_POST['subject']], $_POST['where'], + isset($_POST['instead']), $_POST['type'], $_POST['raction']); + if ($status == 0) + doDefault($lang['strrulecreated']); + else + createRule(true, $lang['strrulecreatedbad']); + } + } + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail($_REQUEST['subject']); + $misc->printTitle($lang['strdrop'],'pg.rule.drop'); + + echo "<p>", sprintf($lang['strconfdroprule'], $misc->printVal($_REQUEST['rule']), + $misc->printVal($_REQUEST[$_REQUEST['reltype']])), "</p>\n"; + + echo "<form action=\"rules.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"", htmlspecialchars($_REQUEST['reltype']), "\" />\n"; + echo "<input type=\"hidden\" name=\"", htmlspecialchars($_REQUEST['reltype']), + "\" value=\"", htmlspecialchars($_REQUEST[$_REQUEST['reltype']]), "\" />\n"; + echo "<input type=\"hidden\" name=\"rule\" value=\"", htmlspecialchars($_REQUEST['rule']), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; + echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->dropRule($_POST['rule'], $_POST[$_POST['subject']], isset($_POST['cascade'])); + if ($status == 0) + doDefault($lang['strruledropped']); + else + doDefault($lang['strruledroppedbad']); + } + + } + + /** + * List all the rules on the table + */ + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail($_REQUEST['subject']); + $misc->printTabs($_REQUEST['subject'], 'rules'); + $misc->printMsg($msg); + + $rules = $data->getRules($_REQUEST[$_REQUEST['subject']]); + + $columns = array( + 'rule' => array( + 'title' => $lang['strname'], + 'field' => field('rulename'), + ), + 'definition' => array( + 'title' => $lang['strdefinition'], + 'field' => field('definition'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + ); + + $subject = urlencode($_REQUEST['subject']); + $object = urlencode($_REQUEST[$_REQUEST['subject']]); + + $actions = array( + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'rules.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'reltype' => $subject, + $subject => $object, + 'subject' => 'rule', + 'rule' => field('rulename') + ) + ) + ) + ), + ); + + $misc->printTable($rules, $columns, $actions, 'rules-rules', $lang['strnorules']); + + $misc->printNavLinks(array ('create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'rules.php', + 'urlvars' => array ( + 'action' => 'create_rule', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + $subject => $object, + 'subject' => $subject + ) + ) + ), + 'content' => $lang['strcreaterule'] + )), 'rules-rules', get_defined_vars()); + } + + function doTree() { + global $misc, $data; + + $rules = $data->getRules($_REQUEST[$_REQUEST['subject']]); + + $reqvars = $misc->getRequestVars($_REQUEST['subject']); + + $attrs = array( + 'text' => field('rulename'), + 'icon' => 'Rule', + ); + + $misc->printTree($rules, $attrs, 'rules'); + exit; + } + + if ($action == 'tree') doTree(); + + // Different header if we're view rules or table rules + $misc->printHeader($_REQUEST[$_REQUEST['subject']] . ' - ' . $lang['strrules']); + $misc->printBody(); + + switch ($action) { + case 'create_rule': + createRule(true); + break; + case 'save_create_rule': + if (isset($_POST['cancel'])) doDefault(); + else createRule(false); + break; + case 'drop': + if (isset($_POST['yes'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/schemas.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/schemas.php new file mode 100644 index 00000000..a5ac8381 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/schemas.php @@ -0,0 +1,480 @@ +<?php + + /** + * Manage schemas in a database + * + * $Id: schemas.php,v 1.22 2007/12/15 22:57:43 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Show default list of schemas in the database + */ + function doDefault($msg = '') { + global $data, $misc, $conf; + global $lang; + + $misc->printTrail('database'); + $misc->printTabs('database','schemas'); + $misc->printMsg($msg); + + // Check that the DB actually supports schemas + $schemas = $data->getSchemas(); + + $columns = array( + 'schema' => array( + 'title' => $lang['strschema'], + 'field' => field('nspname'), + 'url' => "redirect.php?subject=schema&{$misc->href}&", + 'vars' => array('schema' => 'nspname'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('nspowner'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('nspcomment'), + ), + ); + + $actions = array( + 'multiactions' => array( + 'keycols' => array('nsp' => 'nspname'), + 'url' => 'schemas.php', + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'schemas.php', + 'urlvars' => array ( + 'action' => 'drop', + 'nsp' => field('nspname') + ) + ) + ), + 'multiaction' => 'drop', + ), + 'privileges' => array( + 'content' => $lang['strprivileges'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'privileges.php', + 'urlvars' => array ( + 'subject' => 'schema', + 'schema' => field('nspname') + ) + ) + ) + ), + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'schemas.php', + 'urlvars' => array ( + 'action' => 'alter', + 'schema' => field('nspname') + ) + ) + ) + ) + ); + + if (!$data->hasAlterSchema()) unset($actions['alter']); + + $misc->printTable($schemas, $columns, $actions, 'schemas-schemas', $lang['strnoschemas']); + + $misc->printNavLinks(array ('create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'schemas.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'] + ) + ) + ), + 'content' => $lang['strcreateschema'] + )), 'schemas-schemas', get_defined_vars()); + } + + /** + * Displays a screen where they can enter a new schema + */ + function doCreate($msg = '') { + global $data, $misc; + global $lang; + + $server_info = $misc->getServerInfo(); + + if (!isset($_POST['formName'])) $_POST['formName'] = ''; + if (!isset($_POST['formAuth'])) $_POST['formAuth'] = $server_info['username']; + if (!isset($_POST['formSpc'])) $_POST['formSpc'] = ''; + if (!isset($_POST['formComment'])) $_POST['formComment'] = ''; + + // Fetch all users from the database + $users = $data->getUsers(); + + $misc->printTrail('database'); + $misc->printTitle($lang['strcreateschema'],'pg.schema.create'); + $misc->printMsg($msg); + + echo "<form action=\"schemas.php\" method=\"post\">\n"; + echo "<table style=\"width: 100%\">\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\"><input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formName']), "\" /></td>\n\t</tr>\n"; + // Owner + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"formAuth\">\n"; + while (!$users->EOF) { + $uname = htmlspecialchars($users->fields['usename']); + echo "\t\t\t\t<option value=\"{$uname}\"", + ($uname == $_POST['formAuth']) ? ' selected="selected"' : '', ">{$uname}</option>\n"; + $users->moveNext(); + } + echo "\t\t\t</select>\n\t\t</td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea name=\"formComment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_POST['formComment']), "</textarea></td>\n\t</tr>\n"; + + echo "</table>\n"; + echo "<p>\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"create\" />\n"; + echo "<input type=\"hidden\" name=\"database\" value=\"", htmlspecialchars($_REQUEST['database']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"create\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new schema in the database + */ + function doSaveCreate() { + global $data, $lang, $_reload_browser; + + // Check that they've given a name + if ($_POST['formName'] == '') doCreate($lang['strschemaneedsname']); + else { + $status = $data->createSchema($_POST['formName'], $_POST['formAuth'], $_POST['formComment']); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strschemacreated']); + } + else + doCreate($lang['strschemacreatedbad']); + } + } + + /** + * Display a form to permit editing schema properies. + * TODO: permit changing owner + */ + function doAlter($msg = '') { + global $data, $misc, $lang; + + $misc->printTrail('schema'); + $misc->printTitle($lang['stralter'],'pg.schema.alter'); + $misc->printMsg($msg); + + $schema = $data->getSchemaByName($_REQUEST['schema']); + if ($schema->recordCount() > 0) { + if (!isset($_POST['comment'])) $_POST['comment'] = $schema->fields['nspcomment']; + if (!isset($_POST['schema'])) $_POST['schema'] = $_REQUEST['schema']; + if (!isset($_POST['name'])) $_POST['name'] = $_REQUEST['schema']; + if (!isset($_POST['owner'])) $_POST['owner'] = $schema->fields['ownername']; + + echo "<form action=\"schemas.php\" method=\"post\">\n"; + echo "<table>\n"; + + echo "\t<tr>\n"; + echo "\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\">"; + echo "\t\t\t<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" />\n"; + echo "\t\t</td>\n"; + echo "\t</tr>\n"; + + if ($data->hasAlterSchemaOwner()) { + $users = $data->getUsers(); + echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "<td class=\"data2\"><select name=\"owner\">"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $_POST['owner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "</select></td></tr>\n"; + } + else + echo "<input name=\"owner\" value=\"{$_POST['owner']}\" type=\"hidden\" />"; + + echo "\t<tr>\n"; + echo "\t\t<th class=\"data\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea cols=\"32\" rows=\"3\" name=\"comment\">", htmlspecialchars($_POST['comment']), "</textarea></td>\n"; + echo "\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"alter\" />\n"; + echo "<input type=\"hidden\" name=\"schema\" value=\"", htmlspecialchars($_POST['schema']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } else { + echo "<p>{$lang['strnodata']}</p>\n"; + } + } + + /** + * Save the form submission containing changes to a schema + */ + function doSaveAlter($msg = '') { + global $data, $misc, $lang, $_reload_browser; + + $status = $data->updateSchema($_POST['schema'], $_POST['comment'], $_POST['name'], $_POST['owner']); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strschemaaltered']); + } + else + doAlter($lang['strschemaalteredbad']); + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang, $_reload_browser; + + if (empty($_REQUEST['nsp']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifyschematodrop']); + exit(); + } + + if ($confirm) { + $misc->printTrail('schema'); + $misc->printTitle($lang['strdrop'],'pg.schema.drop'); + + echo "<form action=\"schemas.php\" method=\"post\">\n"; + //If multi drop + if (isset($_REQUEST['ma'])) { + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo '<p>', sprintf($lang['strconfdropschema'], $misc->printVal($a['nsp'])), "</p>\n"; + echo '<input type="hidden" name="nsp[]" value="', htmlspecialchars($a['nsp']), "\" />\n"; + } + } + else { + echo "<p>", sprintf($lang['strconfdropschema'], $misc->printVal($_REQUEST['nsp'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"nsp\" value=\"", htmlspecialchars($_REQUEST['nsp']), "\" />\n"; + } + + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"database\" value=\"", htmlspecialchars($_REQUEST['database']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + if (is_array($_POST['nsp'])) { + $msg = ''; + $status = $data->beginTransaction(); + if ($status == 0) { + foreach($_POST['nsp'] as $s) { + $status = $data->dropSchema($s, isset($_POST['cascade'])); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($s, ENT_QUOTES, 'UTF-8'), $lang['strschemadropped']); + else { + $data->endTransaction(); + doDefault(sprintf('%s%s: %s<br />', $msg, htmlentities($s, ENT_QUOTES, 'UTF-8'), $lang['strschemadroppedbad'])); + return; + } + } + } + if($data->endTransaction() == 0) { + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else doDefault($lang['strschemadroppedbad']); + } + else{ + $status = $data->dropSchema($_POST['nsp'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strschemadropped']); + } + else + doDefault($lang['strschemadroppedbad']); + } + } + } + + /** + * Displays options for database download + */ + function doExport($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','export'); + $misc->printMsg($msg); + + echo "<form action=\"dbexport.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strformat']}</th><th class=\"data\" colspan=\"2\">{$lang['stroptions']}</th></tr>\n"; + // Data only + echo "<tr><th class=\"data left\" rowspan=\"2\">"; + echo "<input type=\"radio\" id=\"what1\" name=\"what\" value=\"dataonly\" checked=\"checked\" /><label for=\"what1\">{$lang['strdataonly']}</label></th>\n"; + echo "<td>{$lang['strformat']}</td>\n"; + echo "<td><select name=\"d_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "<tr><td><label for=\"d_oids\">{$lang['stroids']}</label></td><td><input type=\"checkbox\" id=\"d_oids\" name=\"d_oids\" /></td>\n</tr>\n"; + // Structure only + echo "<tr><th class=\"data left\"><input type=\"radio\" id=\"what2\" name=\"what\" value=\"structureonly\" /><label for=\"what2\">{$lang['strstructureonly']}</label></th>\n"; + echo "<td><label for=\"s_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"s_clean\" name=\"s_clean\" /></td>\n</tr>\n"; + // Structure and data + echo "<tr><th class=\"data left\" rowspan=\"3\">"; + echo "<input type=\"radio\" id=\"what3\" name=\"what\" value=\"structureanddata\" /><label for=\"what3\">{$lang['strstructureanddata']}</label></th>\n"; + echo "<td>{$lang['strformat']}</td>\n"; + echo "<td><select name=\"sd_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "<tr><td><label for=\"sd_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"sd_clean\" name=\"sd_clean\" /></td>\n</tr>\n"; + echo "<tr><td><label for=\"sd_oids\">{$lang['stroids']}</label></td><td><input type=\"checkbox\" id=\"sd_oids\" name=\"sd_oids\" /></td>\n</tr>\n"; + echo "</table>\n"; + + echo "<h3>{$lang['stroptions']}</h3>\n"; + echo "<p><input type=\"radio\" id=\"output1\" name=\"output\" value=\"show\" checked=\"checked\" /><label for=\"output1\">{$lang['strshow']}</label>\n"; + echo "<br/><input type=\"radio\" id=\"output2\" name=\"output\" value=\"download\" /><label for=\"output2\">{$lang['strdownload']}</label>\n"; + // MSIE cannot download gzip in SSL mode - it's just broken + if (!(strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') && isset($_SERVER['HTTPS']))) { + echo "<br /><input type=\"radio\" id=\"output3\" name=\"output\" value=\"gzipped\" /><label for=\"output3\">{$lang['strdownloadgzipped']}</label>\n"; + } + echo "</p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"export\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"schema\" />\n"; + echo "<input type=\"hidden\" name=\"database\" value=\"", htmlspecialchars($_REQUEST['database']), "\" />\n"; + echo "<input type=\"hidden\" name=\"schema\" value=\"", htmlspecialchars($_REQUEST['schema']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strexport']}\" /></p>\n"; + echo "</form>\n"; + } + + + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data, $lang; + + $schemas = $data->getSchemas(); + + $reqvars = $misc->getRequestVars('schema'); + + $attrs = array( + 'text' => field('nspname'), + 'icon' => 'Schema', + 'toolTip'=> field('nspcomment'), + 'action' => url('redirect.php', + $reqvars, + array( + 'subject' => 'schema', + 'schema' => field('nspname') + ) + ), + 'branch' => url('schemas.php', + $reqvars, + array( + 'action' => 'subtree', + 'schema' => field('nspname') + ) + ), + ); + + $misc->printTree($schemas, $attrs, 'schemas'); + + exit; + } + + function doSubTree() { + global $misc, $data, $lang; + + $tabs = $misc->getNavTabs('schema'); + + $items = $misc->adjustTabsForTree($tabs); + + $reqvars = $misc->getRequestVars('schema'); + + $attrs = array( + 'text' => field('title'), + 'icon' => field('icon'), + 'action' => url(field('url'), + $reqvars, + field('urlvars', array()) + ), + 'branch' => url(field('url'), + $reqvars, + field('urlvars'), + array('action' => 'tree') + ) + ); + + $misc->printTree($items, $attrs, 'schema'); + exit; + } + + if ($action == 'tree') doTree(); + if ($action == 'subtree') doSubTree(); + + $misc->printHeader($lang['strschemas']); + $misc->printBody(); + + if (isset($_POST['cancel'])) $action = ''; + + switch ($action) { + case 'create': + if (isset($_POST['create'])) doSaveCreate(); + else doCreate(); + break; + case 'alter': + if (isset($_POST['alter'])) doSaveAlter(); + else doAlter(); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDrop(true); + break; + case 'export': + doExport(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sequences.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sequences.php new file mode 100644 index 00000000..a51878c0 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sequences.php @@ -0,0 +1,728 @@ +<?php + + /** + * Manage sequences in a database + * + * $Id: sequences.php,v 1.49 2007/12/15 22:21:54 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Display list of all sequences in the database/schema + */ + function doDefault($msg = '') { + global $data, $conf, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema', 'sequences'); + $misc->printMsg($msg); + + // Get all sequences + $sequences = $data->getSequences(); + + $columns = array( + 'sequence' => array( + 'title' => $lang['strsequence'], + 'field' => field('seqname'), + 'url' => "sequences.php?action=properties&{$misc->href}&", + 'vars' => array('sequence' => 'seqname'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('seqowner'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('seqcomment'), + ), + ); + + $actions = array( + 'multiactions' => array( + 'keycols' => array('sequence' => 'seqname'), + 'url' => 'sequences.php', + ), + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'action' => 'confirm_alter', + 'subject' => 'sequence', + 'sequence' => field('seqname') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'sequence' => field('seqname') + ) + ) + ), + 'multiaction' => 'confirm_drop', + ), + 'privileges' => array( + 'content' => $lang['strprivileges'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'privileges.php', + 'urlvars' => array ( + 'subject' => 'sequence', + 'sequence' => field('seqname') + ) + ) + ) + ), + ); + + $misc->printTable($sequences, $columns, $actions, 'sequences-sequences', $lang['strnosequences']); + + $misc->printNavLinks(array ('create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreatesequence'] + )), 'sequences-sequences', get_defined_vars()); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $sequences = $data->getSequences(); + + $reqvars = $misc->getRequestVars('sequence'); + + $attrs = array( + 'text' => field('seqname'), + 'icon' => 'Sequence', + 'toolTip'=> field('seqcomment'), + 'action' => url('sequences.php', + $reqvars, + array ( + 'action' => 'properties', + 'sequence' => field('seqname') + ) + ) + ); + + $misc->printTree($sequences, $attrs, 'sequences'); + exit; + } + + /** + * Display the properties of a sequence + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('sequence'); + $misc->printTitle($lang['strproperties'],'pg.sequence'); + $misc->printMsg($msg); + + // Fetch the sequence information + $sequence = $data->getSequence($_REQUEST['sequence']); + + if (is_object($sequence) && $sequence->recordCount() > 0) { + $sequence->fields['is_cycled'] = $data->phpBool($sequence->fields['is_cycled']); + $sequence->fields['is_called'] = $data->phpBool($sequence->fields['is_called']); + + // Show comment if any + if ($sequence->fields['seqcomment'] !== null) + echo "<p class=\"comment\">", $misc->printVal($sequence->fields['seqcomment']), "</p>\n"; + + echo "<table border=\"0\">"; + echo "<tr><th class=\"data\">{$lang['strname']}</th>"; + if ($data->hasAlterSequenceStart()) { + echo "<th class=\"data\">{$lang['strstartvalue']}</th>"; + } + echo "<th class=\"data\">{$lang['strlastvalue']}</th>"; + echo "<th class=\"data\">{$lang['strincrementby']}</th>"; + echo "<th class=\"data\">{$lang['strmaxvalue']}</th>"; + echo "<th class=\"data\">{$lang['strminvalue']}</th>"; + echo "<th class=\"data\">{$lang['strcachevalue']}</th>"; + echo "<th class=\"data\">{$lang['strlogcount']}</th>"; + echo "<th class=\"data\">{$lang['strcancycle']}</th>"; + echo "<th class=\"data\">{$lang['striscalled']}</th></tr>"; + echo "<tr>"; + echo "<td class=\"data1\">", $misc->printVal($sequence->fields['seqname']), "</td>"; + if ($data->hasAlterSequenceStart()) { + echo "<td class=\"data1\">", $misc->printVal($sequence->fields['start_value']), "</td>"; + } + echo "<td class=\"data1\">", $misc->printVal($sequence->fields['last_value']), "</td>"; + echo "<td class=\"data1\">", $misc->printVal($sequence->fields['increment_by']), "</td>"; + echo "<td class=\"data1\">", $misc->printVal($sequence->fields['max_value']), "</td>"; + echo "<td class=\"data1\">", $misc->printVal($sequence->fields['min_value']), "</td>"; + echo "<td class=\"data1\">", $misc->printVal($sequence->fields['cache_value']), "</td>"; + echo "<td class=\"data1\">", $misc->printVal($sequence->fields['log_cnt']), "</td>"; + echo "<td class=\"data1\">", ($sequence->fields['is_cycled'] ? $lang['stryes'] : $lang['strno']), "</td>"; + echo "<td class=\"data1\">", ($sequence->fields['is_called'] ? $lang['stryes'] : $lang['strno']), "</td>"; + echo "</tr>"; + echo "</table>"; + + $navlinks = array ( + 'alter' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'action' => 'confirm_alter', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'sequence' => $sequence->fields['seqname'] + ) + ) + ), + 'content' => $lang['stralter'] + ), + 'setval' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'action' => 'confirm_setval', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'sequence' => $sequence->fields['seqname'] + ) + ) + ), + 'content' => $lang['strsetval'] + ), + 'nextval' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'action' => 'nextval', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'sequence' => $sequence->fields['seqname'] + ) + ) + ), + 'content' => $lang['strnextval'] + ), + 'restart' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'action' => 'restart', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'sequence' => $sequence->fields['seqname'] + ) + ) + ), + 'content' => $lang['strrestart'] + ), + 'reset' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'action' => 'reset', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'sequence' => $sequence->fields['seqname'] + ) + ) + ), + 'content' => $lang['strreset'] + ), + 'showall' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'sequences.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strshowallsequences'] + ) + ); + + if (! $data->hasAlterSequenceStart()) + unset($navlinks['restart']); + + $misc->printNavLinks($navlinks, 'sequences-properties', get_defined_vars()); + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Drop a sequence + */ + function doDrop($confirm, $msg = '') { + global $data, $misc; + global $lang; + + if (empty($_REQUEST['sequence']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifysequencetodrop']); + exit(); + } + + if ($confirm) { + $misc->printTrail('sequence'); + $misc->printTitle($lang['strdrop'],'pg.sequence.drop'); + $misc->printMsg($msg); + + echo "<form action=\"sequences.php\" method=\"post\">\n"; + + //If multi drop + if (isset($_REQUEST['ma'])) { + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfdropsequence'], $misc->printVal($a['sequence'])), "</p>\n"; + printf('<input type="hidden" name="sequence[]" value="%s" />', htmlspecialchars($a['sequence'])); + } + } else { + echo "<p>", sprintf($lang['strconfdropsequence'], $misc->printVal($_REQUEST['sequence'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"sequence\" value=\"", htmlspecialchars($_REQUEST['sequence']), "\" />\n"; + } + + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + if (is_array($_POST['sequence'])) { + $msg = ''; + $status = $data->beginTransaction(); + if ($status == 0) { + foreach($_POST['sequence'] as $s) { + $status = $data->dropSequence($s, isset($_POST['cascade'])); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($s, ENT_QUOTES, 'UTF-8'), $lang['strsequencedropped']); + else { + $data->endTransaction(); + doDefault(sprintf('%s%s: %s<br />', $msg, htmlentities($s, ENT_QUOTES, 'UTF-8'), $lang['strsequencedroppedbad'])); + return; + } + } + } + if($data->endTransaction() == 0) { + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else doDefault($lang['strsequencedroppedbad']); + } + else{ + $status = $data->dropSequence($_POST['sequence'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strsequencedropped']); + } + else + doDrop(true, $lang['strsequencedroppedbad']); + } + } + } + + /** + * Displays a screen where they can enter a new sequence + */ + function doCreateSequence($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['formSequenceName'])) $_POST['formSequenceName'] = ''; + if (!isset($_POST['formIncrement'])) $_POST['formIncrement'] = ''; + if (!isset($_POST['formMinValue'])) $_POST['formMinValue'] = ''; + if (!isset($_POST['formMaxValue'])) $_POST['formMaxValue'] = ''; + if (!isset($_POST['formStartValue'])) $_POST['formStartValue'] = ''; + if (!isset($_POST['formCacheValue'])) $_POST['formCacheValue'] = ''; + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreatesequence'],'pg.sequence.create'); + $misc->printMsg($msg); + + echo "<form action=\"sequences.php\" method=\"post\">\n"; + echo "<table>\n"; + + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formSequenceName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['formSequenceName']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strincrementby']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formIncrement\" size=\"5\" value=\"", + htmlspecialchars($_POST['formIncrement']), "\" /> </td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strminvalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formMinValue\" size=\"5\" value=\"", + htmlspecialchars($_POST['formMinValue']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strmaxvalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formMaxValue\" size=\"5\" value=\"", + htmlspecialchars($_POST['formMaxValue']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strstartvalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formStartValue\" size=\"5\" value=\"", + htmlspecialchars($_POST['formStartValue']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strcachevalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formCacheValue\" size=\"5\" value=\"", + htmlspecialchars($_POST['formCacheValue']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\"><label for=\"formCycledValue\">{$lang['strcancycle']}</label></th>\n"; + echo "<td class=\"data1\"><input type=\"checkbox\" id=\"formCycledValue\" name=\"formCycledValue\" ", + (isset($_POST['formCycledValue']) ? ' checked="checked"' : ''), " /></td></tr>\n"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create_sequence\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"create\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new sequence in the database + */ + function doSaveCreateSequence() { + global $data; + global $lang; + + // Check that they've given a name and at least one column + if ($_POST['formSequenceName'] == '') doCreateSequence($lang['strsequenceneedsname']); + else { + $status = $data->createSequence($_POST['formSequenceName'], + $_POST['formIncrement'], $_POST['formMinValue'], + $_POST['formMaxValue'], $_POST['formStartValue'], + $_POST['formCacheValue'], isset($_POST['formCycledValue'])); + if ($status == 0) { + doDefault($lang['strsequencecreated']); + } else { + doCreateSequence($lang['strsequencecreatedbad']); + } + } + } + + /** + * Restarts a sequence + */ + function doRestart() { + global $data; + global $lang; + + $status = $data->restartSequence($_REQUEST['sequence']); + if ($status == 0) + doProperties($lang['strsequencerestart']); + else + doProperties($lang['strsequencerestartbad']); + } + + /** + * Resets a sequence + */ + function doReset() { + global $data; + global $lang; + + $status = $data->resetSequence($_REQUEST['sequence']); + if ($status == 0) + doProperties($lang['strsequencereset']); + else + doProperties($lang['strsequenceresetbad']); + } + + /** + * Set Nextval of a sequence + */ + function doNextval() { + global $data; + global $lang; + + $status = $data->nextvalSequence($_REQUEST['sequence']); + if ($status == 0) + doProperties($lang['strsequencenextval']); + else + doProperties($lang['strsequencenextvalbad']); + } + + /** + * Function to save after 'setval'ing a sequence + */ + function doSaveSetval() { + global $data, $lang, $_reload_browser; + + $status = $data->setvalSequence($_POST['sequence'], $_POST['nextvalue']); + if ($status == 0) + doProperties($lang['strsequencesetval']); + else + doProperties($lang['strsequencesetvalbad']); + } + + /** + * Function to allow 'setval'ing of a sequence + */ + function doSetval($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('sequence'); + $misc->printTitle($lang['strsetval'], 'pg.sequence'); + $misc->printMsg($msg); + + // Fetch the sequence information + $sequence = $data->getSequence($_REQUEST['sequence']); + + if (is_object($sequence) && $sequence->recordCount() > 0) { + echo "<form action=\"sequences.php\" method=\"post\">\n"; + echo "<table border=\"0\">"; + echo "<tr><th class=\"data left required\">{$lang['strlastvalue']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<input name=\"nextvalue\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + $misc->printVal($sequence->fields['last_value']), "\" /></td></tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"setval\" />\n"; + echo "<input type=\"hidden\" name=\"sequence\" value=\"", htmlspecialchars($_REQUEST['sequence']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"setval\" value=\"{$lang['strsetval']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Function to save after altering a sequence + */ + function doSaveAlter() { + global $data, $lang, $_reload_browser, $misc; + + + if (!isset($_POST['owner'])) $_POST['owner'] = null; + if (!isset($_POST['newschema'])) $_POST['newschema'] = null; + if (!isset($_POST['formIncrement'])) $_POST['formIncrement'] = null; + if (!isset($_POST['formMinValue'])) $_POST['formMinValue'] = null; + if (!isset($_POST['formMaxValue'])) $_POST['formMaxValue'] = null; + if (!isset($_POST['formStartValue'])) $_POST['formStartValue'] = null; + if (!isset($_POST['formRestartValue'])) $_POST['formRestartValue'] = null; + if (!isset($_POST['formCacheValue'])) $_POST['formCacheValue'] = null; + if (!isset($_POST['formCycledValue'])) $_POST['formCycledValue'] = null; + + $status = $data->alterSequence($_POST['sequence'], $_POST['name'], $_POST['comment'], $_POST['owner'], + $_POST['newschema'], $_POST['formIncrement'], $_POST['formMinValue'], $_POST['formMaxValue'], + $_POST['formRestartValue'], $_POST['formCacheValue'], isset($_POST['formCycledValue']), $_POST['formStartValue']); + + if ($status == 0) { + if ($_POST['sequence'] != $_POST['name']) { + // Jump them to the new view name + $_REQUEST['sequence'] = $_POST['name']; + // Force a browser reload + $_reload_browser = true; + } + if (!empty($_POST['newschema']) && ($_POST['newschema'] != $data->_schema)) { + // Jump them to the new sequence schema + $misc->setCurrentSchema($_POST['newschema']); + $_reload_browser = true; + } + doProperties($lang['strsequencealtered']); + } + else + doProperties($lang['strsequencealteredbad']); + } + + /** + * Function to allow altering of a sequence + */ + function doAlter($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('sequence'); + $misc->printTitle($lang['stralter'], 'pg.sequence.alter'); + $misc->printMsg($msg); + + // Fetch the sequence information + $sequence = $data->getSequence($_REQUEST['sequence']); + + if (is_object($sequence) && $sequence->recordCount() > 0) { + if (!isset($_POST['name'])) $_POST['name'] = $_REQUEST['sequence']; + if (!isset($_POST['comment'])) $_POST['comment'] = $sequence->fields['seqcomment']; + if (!isset($_POST['owner'])) $_POST['owner'] = $sequence->fields['seqowner']; + if (!isset($_POST['newschema'])) $_POST['newschema'] = $sequence->fields['nspname']; + + // Handle Checkbox Value + $sequence->fields['is_cycled'] = $data->phpBool($sequence->fields['is_cycled']); + if ($sequence->fields['is_cycled']) $_POST['formCycledValue'] = 'on'; + + echo "<form action=\"sequences.php\" method=\"post\">\n"; + echo "<table>\n"; + + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" /></td></tr>\n"; + + if ($data->isSuperUser()) { + // Fetch all users + $users = $data->getUsers(); + + echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "<td class=\"data1\"><select name=\"owner\">"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $_POST['owner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "</select></td></tr>\n"; + } + + if ($data->hasAlterSequenceSchema()) { + $schemas = $data->getSchemas(); + echo "<tr><th class=\"data left required\">{$lang['strschema']}</th>\n"; + echo "<td class=\"data1\"><select name=\"newschema\">"; + while (!$schemas->EOF) { + $schema = $schemas->fields['nspname']; + echo "<option value=\"", htmlspecialchars($schema), "\"", + ($schema == $_POST['newschema']) ? ' selected="selected"' : '', ">", htmlspecialchars($schema), "</option>\n"; + $schemas->moveNext(); + } + echo "</select></td></tr>\n"; + } + + echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<textarea rows=\"3\" cols=\"32\" name=\"comment\">", + htmlspecialchars($_POST['comment']), "</textarea></td></tr>\n"; + + if ($data->hasAlterSequenceStart()) { + echo "<tr><th class=\"data left\">{$lang['strstartvalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formStartValue\" size=\"5\" value=\"", + htmlspecialchars($sequence->fields['start_value']), "\" /></td></tr>\n"; + } + + echo "<tr><th class=\"data left\">{$lang['strrestartvalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formRestartValue\" size=\"5\" value=\"", + htmlspecialchars($sequence->fields['last_value']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strincrementby']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formIncrement\" size=\"5\" value=\"", + htmlspecialchars($sequence->fields['increment_by']), "\" /> </td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strmaxvalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formMaxValue\" size=\"5\" value=\"", + htmlspecialchars($sequence->fields['max_value']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strminvalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formMinValue\" size=\"5\" value=\"", + htmlspecialchars($sequence->fields['min_value']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\">{$lang['strcachevalue']}</th>\n"; + echo "<td class=\"data1\"><input name=\"formCacheValue\" size=\"5\" value=\"", + htmlspecialchars($sequence->fields['cache_value']), "\" /></td></tr>\n"; + + echo "<tr><th class=\"data left\"><label for=\"formCycledValue\">{$lang['strcancycle']}</label></th>\n"; + echo "<td class=\"data1\"><input type=\"checkbox\" id=\"formCycledValue\" name=\"formCycledValue\" ", + ( isset($_POST['formCycledValue']) ? ' checked="checked"' : ''), " /></td></tr>\n"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"alter\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"sequence\" value=\"", htmlspecialchars($_REQUEST['sequence']), "\" />\n"; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + if ($action == 'tree') doTree(); + + // Print header + $misc->printHeader($lang['strsequences']); + $misc->printBody(); + + switch($action) { + case 'create': + doCreateSequence(); + break; + case 'save_create_sequence': + if (isset($_POST['create'])) doSaveCreateSequence(); + else doDefault(); + break; + case 'properties': + doProperties(); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'restart': + doRestart(); + break; + case 'reset': + doReset(); + break; + case 'nextval': + doNextval(); + break; + case 'setval': + if (isset($_POST['setval'])) doSaveSetval(); + else doDefault(); + break; + case 'confirm_setval': + doSetval(); + break; + case 'alter': + if (isset($_POST['alter'])) doSaveAlter(); + else doDefault(); + break; + case 'confirm_alter': + doAlter(); + break; + default: + doDefault(); + break; + } + + // Print footer + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/servers.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/servers.php new file mode 100644 index 00000000..a33687f6 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/servers.php @@ -0,0 +1,175 @@ +<?php + + /** + * Manage servers + * + * $Id: servers.php,v 1.12 2008/02/18 22:20:26 ioguix Exp $ + */ + + // Include application functions + $_no_db_connection = true; + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + function doLogout() { + global $misc, $lang, $_reload_browser, $plugin_manager; + + $plugin_manager->do_hook('logout', $_REQUEST['logoutServer']); + + $server_info = $misc->getServerInfo($_REQUEST['logoutServer']); + $misc->setServerInfo(null, null, $_REQUEST['logoutServer']); + + unset($_SESSION['sharedUsername'], $_SESSION['sharedPassword']); + + doDefault(sprintf($lang['strlogoutmsg'], $server_info['desc'])); + + $_reload_browser = true; + } + + function doDefault($msg = '') { + global $conf, $misc; + global $lang; + + $misc->printTabs('root','servers'); + $misc->printMsg($msg); + $group = isset($_GET['group']) ? $_GET['group'] : false; + + $groups = $misc->getServersGroups(true,$group); + + $columns = array( + 'group' => array( + 'title' => $lang['strgroup'], + 'field' => field('desc'), + 'url' => 'servers.php?', + 'vars' => array('group' => 'id'), + ), + ); + $actions = array(); + + if (($group !== false) and (isset($conf['srv_groups'][$group])) and ($groups->recordCount()>0)) { + $misc->printTitle(sprintf($lang['strgroupgroups'],htmlentities($conf['srv_groups'][$group]['desc'], ENT_QUOTES, 'UTF-8'))); + } + + $misc->printTable($groups, $columns, $actions,'servers-servers'); + + $servers = $misc->getServers(true, $group); + + function svPre(&$rowdata, $actions) { + $actions['logout']['disable'] = empty($rowdata->fields['username']); + return $actions; + } + + $columns = array( + 'server' => array( + 'title' => $lang['strserver'], + 'field' => field('desc'), + 'url' => "redirect.php?subject=server&", + 'vars' => array('server' => 'id'), + ), + 'host' => array( + 'title' => $lang['strhost'], + 'field' => field('host'), + ), + 'port' => array( + 'title' => $lang['strport'], + 'field' => field('port'), + ), + 'username' => array( + 'title' => $lang['strusername'], + 'field' => field('username'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + ); + + $actions = array( + 'logout' => array( + 'content' => $lang['strlogout'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'servers.php', + 'urlvars' => array ( + 'action' => 'logout', + 'logoutServer' => field('id') + ) + ) + ) + ), + ); + + if (($group !== false) and isset($conf['srv_groups'][$group])) { + $misc->printTitle(sprintf($lang['strgroupservers'],htmlentities($conf['srv_groups'][$group]['desc'], ENT_QUOTES, 'UTF-8'))); + $actions['logout']['attr']['href']['urlvars']['group'] = $group; + } + + $misc->printTable($servers, $columns, $actions, 'servers-servers', $lang['strnoobjects'], 'svPre'); + } + + function doTree() { + global $misc, $conf; + + $nodes = array(); + $group_id = isset($_GET['group']) ? $_GET['group'] : false; + + /* root with srv_groups */ + if (isset($conf['srv_groups']) and count($conf['srv_groups']) > 0 + and $group_id === false) + { + $nodes = $misc->getServersGroups(true); + } + /* group subtree */ + else if (isset($conf['srv_groups']) and $group_id !== false) { + if ($group_id !== 'all') + $nodes = $misc->getServersGroups(false, $group_id); + $nodes = array_merge($nodes, $misc->getServers(false, $group_id)); + include_once('./classes/ArrayRecordSet.php'); + $nodes = new ArrayRecordSet($nodes); + } + /* no srv_group */ + else { + $nodes = $misc->getServers(true, false); + } + + $reqvars = $misc->getRequestVars('server'); + + $attrs = array( + 'text' => field('desc'), + + // Show different icons for logged in/out + 'icon' => field('icon'), + + 'toolTip'=> field('id'), + + 'action' => field('action'), + + // Only create a branch url if the user has + // logged into the server. + 'branch' => field('branch'), + ); + + $misc->printTree($nodes, $attrs, 'servers'); + exit; + } + + + if ($action == 'tree') + doTree(); + + $misc->printHeader($lang['strservers']); + $misc->printBody(); + $misc->printTrail('root'); + + switch ($action) { + case 'logout': + doLogout(); + break; + default: + doDefault($msg); + break; + } + + $misc->printFooter(); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sql.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sql.php new file mode 100644 index 00000000..b2ad46de --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sql.php @@ -0,0 +1,263 @@ +<?php + + /** + * Process an arbitrary SQL query - tricky! The main problem is that + * unless we implement a full SQL parser, there's no way of knowing + * how many SQL statements have been strung together with semi-colons + * @param $_SESSION['sqlquery'] The SQL query string to execute + * + * $Id: sql.php,v 1.43 2008/01/10 20:19:27 xzilla Exp $ + */ + + global $lang; + + // Prevent timeouts on large exports (non-safe mode only) + if (!ini_get('safe_mode')) set_time_limit(0); + + // Include application functions + include_once('./libraries/lib.inc.php'); + + /** + * This is a callback function to display the result of each separate query + * @param ADORecordSet $rs The recordset returned by the script execetor + */ + function sqlCallback($query, $rs, $lineno) { + global $data, $misc, $lang, $_connection; + // Check if $rs is false, if so then there was a fatal error + if ($rs === false) { + echo htmlspecialchars($_FILES['script']['name']), ':', $lineno, ': ', nl2br(htmlspecialchars($_connection->getLastError())), "<br/>\n"; + } + else { + // Print query results + switch (pg_result_status($rs)) { + case PGSQL_TUPLES_OK: + // If rows returned, then display the results + $num_fields = pg_numfields($rs); + echo "<p><table>\n<tr>"; + for ($k = 0; $k < $num_fields; $k++) { + echo "<th class=\"data\">", $misc->printVal(pg_fieldname($rs, $k)), "</th>"; + } + + $i = 0; + $row = pg_fetch_row($rs); + while ($row !== false) { + $id = (($i % 2) == 0 ? '1' : '2'); + echo "<tr class=\"data{$id}\">\n"; + foreach ($row as $k => $v) { + echo "<td style=\"white-space:nowrap;\">", $misc->printVal($v, pg_fieldtype($rs, $k), array('null' => true)), "</td>"; + } + echo "</tr>\n"; + $row = pg_fetch_row($rs); + $i++; + }; + echo "</table><br/>\n"; + echo $i, " {$lang['strrows']}</p>\n"; + break; + case PGSQL_COMMAND_OK: + // If we have the command completion tag + if (version_compare(phpversion(), '4.3', '>=')) { + echo htmlspecialchars(pg_result_status($rs, PGSQL_STATUS_STRING)), "<br/>\n"; + } + // Otherwise if any rows have been affected + elseif ($data->conn->Affected_Rows() > 0) { + echo $data->conn->Affected_Rows(), " {$lang['strrowsaff']}<br/>\n"; + } + // Otherwise output nothing... + break; + case PGSQL_EMPTY_QUERY: + break; + default: + break; + } + } + } + + // We need to store the query in a session for editing purposes + // We avoid GPC vars to avoid truncating long queries + if (isset($_REQUEST['subject']) && $_REQUEST['subject'] == 'history') { + // Or maybe we came from the history popup + $_SESSION['sqlquery'] = $_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']][$_GET['queryid']]['query']; + } + elseif (isset($_POST['query'])) { + // Or maybe we came from an sql form + $_SESSION['sqlquery'] = $_POST['query']; + } + else { + echo "could not find the query!!"; + } + + // Pagination maybe set by a get link that has it as FALSE, + // if that's the case, unset the variable. + + if (isset($_REQUEST['paginate']) && $_REQUEST['paginate'] == 'f') { + unset($_REQUEST['paginate']); + unset($_POST['paginate']); + unset($_GET['paginate']); + } + // Check to see if pagination has been specified. In that case, send to display + // script for pagination + /* if a file is given or the request is an explain, do not paginate */ + if (isset($_REQUEST['paginate']) && !(isset($_FILES['script']) && $_FILES['script']['size'] > 0) + && (preg_match('/^\s*explain/i', $_SESSION['sqlquery']) == 0)) { + include('./display.php'); + exit; + } + + $subject = isset($_REQUEST['subject'])? $_REQUEST['subject'] : ''; + $misc->printHeader($lang['strqueryresults']); + $misc->printBody(); + $misc->printTrail('database'); + $misc->printTitle($lang['strqueryresults']); + + // Set the schema search path + if (isset($_REQUEST['search_path'])) { + if ($data->setSearchPath(array_map('trim',explode(',',$_REQUEST['search_path']))) != 0) { + $misc->printFooter(); + exit; + } + } + + // May as well try to time the query + if (function_exists('microtime')) { + list($usec, $sec) = explode(' ', microtime()); + $start_time = ((float)$usec + (float)$sec); + } + else $start_time = null; + // Execute the query. If it's a script upload, special handling is necessary + if (isset($_FILES['script']) && $_FILES['script']['size'] > 0) + $data->executeScript('script', 'sqlCallback'); + else { + // Set fetch mode to NUM so that duplicate field names are properly returned + $data->conn->setFetchMode(ADODB_FETCH_NUM); + $rs = $data->conn->Execute($_SESSION['sqlquery']); + + // $rs will only be an object if there is no error + if (is_object($rs)) { + // Request was run, saving it in history + if(!isset($_REQUEST['nohistory'])) + $misc->saveScriptHistory($_SESSION['sqlquery']); + + // Now, depending on what happened do various things + + // First, if rows returned, then display the results + if ($rs->recordCount() > 0) { + echo "<table>\n<tr>"; + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($k); + echo "<th class=\"data\">", $misc->printVal($finfo->name), "</th>"; + } + echo "</tr>\n"; + $i = 0; + while (!$rs->EOF) { + $id = (($i % 2) == 0 ? '1' : '2'); + echo "<tr class=\"data{$id}\">\n"; + foreach ($rs->fields as $k => $v) { + $finfo = $rs->fetchField($k); + echo "<td style=\"white-space:nowrap;\">", $misc->printVal($v, $finfo->type, array('null' => true)), "</td>"; + } + echo "</tr>\n"; + $rs->moveNext(); + $i++; + } + echo "</table>\n"; + echo "<p>", $rs->recordCount(), " {$lang['strrows']}</p>\n"; + } + // Otherwise if any rows have been affected + elseif ($data->conn->Affected_Rows() > 0) { + echo "<p>", $data->conn->Affected_Rows(), " {$lang['strrowsaff']}</p>\n"; + } + // Otherwise nodata to print + else echo '<p>', $lang['strnodata'], "</p>\n"; + } + } + + // May as well try to time the query + if ($start_time !== null) { + list($usec, $sec) = explode(' ', microtime()); + $end_time = ((float)$usec + (float)$sec); + // Get duration in milliseconds, round to 3dp's + $duration = number_format(($end_time - $start_time) * 1000, 3); + } + else $duration = null; + + // Reload the browser as we may have made schema changes + $_reload_browser = true; + + // Display duration if we know it + if ($duration !== null) { + echo "<p>", sprintf($lang['strruntime'], $duration), "</p>\n"; + } + + echo "<p>{$lang['strsqlexecuted']}</p>\n"; + + $navlinks = array(); + $fields = array( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + ); + + if(isset($_REQUEST['schema'])) + $fields['schema'] = $_REQUEST['schema']; + + // Return + if (isset($_REQUEST['return'])) { + $urlvars = $misc->getSubjectParams($_REQUEST['return']); + $navlinks['back'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => $urlvars['url'], + 'urlvars' => $urlvars['params'] + ) + ), + 'content' => $lang['strback'] + ); + } + + // Edit + $navlinks['alter'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'database.php', + 'urlvars' => array_merge($fields, array ( + 'action' => 'sql', + )) + ) + ), + 'content' => $lang['streditsql'] + ); + + // Create view and download + if (isset($_SESSION['sqlquery']) && isset($rs) && is_object($rs) && $rs->recordCount() > 0) { + // Report views don't set a schema, so we need to disable create view in that case + if (isset($_REQUEST['schema'])) { + $navlinks['createview'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'views.php', + 'urlvars' => array_merge($fields, array ( + 'action' => 'create' + )) + ) + ), + 'content' => $lang['strcreateview'] + ); + } + + if (isset($_REQUEST['search_path'])) + $fields['search_path'] = $_REQUEST['search_path']; + + $navlinks['download'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'dataexport.php', + 'urlvars' => $fields + ) + ), + 'content' => $lang['strdownload'] + ); + } + + $misc->printNavLinks($navlinks, 'sql-form', get_defined_vars()); + + $misc->printFooter(); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sqledit.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sqledit.php new file mode 100644 index 00000000..124371d2 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/sqledit.php @@ -0,0 +1,156 @@ +<?php + + /** + * Alternative SQL editing window + * + * $Id: sqledit.php,v 1.40 2008/01/10 19:37:07 xzilla Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Private function to display server and list of databases + */ + function _printConnection() { + global $data, $action, $misc; + + // The javascript action on the select box reloads the + // popup whenever the server or database is changed. + // This ensures that the correct page encoding is used. + $onchange = "onchange=\"location.href='sqledit.php?action=" . + urlencode($action) . "&server=' + encodeURI(server.options[server.selectedIndex].value) + '&database=' + encodeURI(database.options[database.selectedIndex].value) + "; + + // The exact URL to reload to is different between SQL and Find mode, however. + if ($action == 'find') { + $onchange .= "'&term=' + encodeURI(term.value) + '&filter=' + encodeURI(filter.value) + '&'\""; + } else { + $onchange .= "'&query=' + encodeURI(query.value) + '&search_path=' + encodeURI(search_path.value) + (paginate.checked ? '&paginate=on' : '') + '&'\""; + } + + $misc->printConnection($onchange); + } + + /** + * Searches for a named database object + */ + function doFind() { + global $data, $misc; + global $lang, $conf; + + if (!isset($_REQUEST['term'])) $_REQUEST['term'] = ''; + if (!isset($_REQUEST['filter'])) $_REQUEST['filter'] = ''; + + $misc->printHeader($lang['strfind']); + + // Bring to the front always + echo "<body onload=\"window.focus();\">\n"; + + $misc->printTabs($misc->getNavTabs('popup'), 'find'); + + echo "<form action=\"database.php\" method=\"post\" target=\"detail\">\n"; + _printConnection(); + echo "<p><input name=\"term\" value=\"", htmlspecialchars($_REQUEST['term']), + "\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" />\n"; + + // Output list of filters. This is complex due to all the 'has' and 'conf' feature possibilities + echo "<select name=\"filter\">\n"; + echo "\t<option value=\"\"", ($_REQUEST['filter'] == '') ? ' selected="selected"' : '', ">{$lang['strallobjects']}</option>\n"; + echo "\t<option value=\"SCHEMA\"", ($_REQUEST['filter'] == 'SCHEMA') ? ' selected="selected"' : '', ">{$lang['strschemas']}</option>\n"; + echo "\t<option value=\"TABLE\"", ($_REQUEST['filter'] == 'TABLE') ? ' selected="selected"' : '', ">{$lang['strtables']}</option>\n"; + echo "\t<option value=\"VIEW\"", ($_REQUEST['filter'] == 'VIEW') ? ' selected="selected"' : '', ">{$lang['strviews']}</option>\n"; + echo "\t<option value=\"SEQUENCE\"", ($_REQUEST['filter'] == 'SEQUENCE') ? ' selected="selected"' : '', ">{$lang['strsequences']}</option>\n"; + echo "\t<option value=\"COLUMN\"", ($_REQUEST['filter'] == 'COLUMN') ? ' selected="selected"' : '', ">{$lang['strcolumns']}</option>\n"; + echo "\t<option value=\"RULE\"", ($_REQUEST['filter'] == 'RULE') ? ' selected="selected"' : '', ">{$lang['strrules']}</option>\n"; + echo "\t<option value=\"INDEX\"", ($_REQUEST['filter'] == 'INDEX') ? ' selected="selected"' : '', ">{$lang['strindexes']}</option>\n"; + echo "\t<option value=\"TRIGGER\"", ($_REQUEST['filter'] == 'TRIGGER') ? ' selected="selected"' : '', ">{$lang['strtriggers']}</option>\n"; + echo "\t<option value=\"CONSTRAINT\"", ($_REQUEST['filter'] == 'CONSTRAINT') ? ' selected="selected"' : '', ">{$lang['strconstraints']}</option>\n"; + echo "\t<option value=\"FUNCTION\"", ($_REQUEST['filter'] == 'FUNCTION') ? ' selected="selected"' : '', ">{$lang['strfunctions']}</option>\n"; + echo "\t<option value=\"DOMAIN\"", ($_REQUEST['filter'] == 'DOMAIN') ? ' selected="selected"' : '', ">{$lang['strdomains']}</option>\n"; + if ($conf['show_advanced']) { + echo "\t<option value=\"AGGREGATE\"", ($_REQUEST['filter'] == 'AGGREGATE') ? ' selected="selected"' : '', ">{$lang['straggregates']}</option>\n"; + echo "\t<option value=\"TYPE\"", ($_REQUEST['filter'] == 'TYPE') ? ' selected="selected"' : '', ">{$lang['strtypes']}</option>\n"; + echo "\t<option value=\"OPERATOR\"", ($_REQUEST['filter'] == 'OPERATOR') ? ' selected="selected"' : '', ">{$lang['stroperators']}</option>\n"; + echo "\t<option value=\"OPCLASS\"", ($_REQUEST['filter'] == 'OPCLASS') ? ' selected="selected"' : '', ">{$lang['stropclasses']}</option>\n"; + echo "\t<option value=\"CONVERSION\"", ($_REQUEST['filter'] == 'CONVERSION') ? ' selected="selected"' : '', ">{$lang['strconversions']}</option>\n"; + echo "\t<option value=\"LANGUAGE\"", ($_REQUEST['filter'] == 'LANGUAGE') ? ' selected="selected"' : '', ">{$lang['strlanguages']}</option>\n"; + } + echo "</select>\n"; + + echo "<input type=\"submit\" value=\"{$lang['strfind']}\" />\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"find\" /></p>\n"; + echo "</form>\n"; + + // Default focus + $misc->setFocus('forms[0].term'); + } + + /** + * Allow execution of arbitrary SQL statements on a database + */ + function doDefault() { + global $data, $misc; + global $lang; + + if (!isset($_SESSION['sqlquery'])) $_SESSION['sqlquery'] = ''; + + $misc->printHeader($lang['strsql']); + + // Bring to the front always + echo "<body onload=\"window.focus();\">\n"; + + $misc->printTabs($misc->getNavTabs('popup'), 'sql'); + + echo "<form action=\"sql.php\" method=\"post\" enctype=\"multipart/form-data\" target=\"detail\">\n"; + _printConnection(); + echo "\n"; + if (!isset($_REQUEST['search_path'])) + $_REQUEST['search_path'] = implode(',',$data->getSearchPath()); + + echo "<p><label>"; + $misc->printHelp($lang['strsearchpath'], 'pg.schema.search_path'); + echo ": <input type=\"text\" name=\"search_path\" size=\"50\" value=\"", + htmlspecialchars($_REQUEST['search_path']), "\" /></label></p>\n"; + + echo "<textarea style=\"width:98%;\" rows=\"10\" cols=\"50\" name=\"query\">", + htmlspecialchars($_SESSION['sqlquery']), "</textarea>\n"; + + // Check that file uploads are enabled + if (ini_get('file_uploads')) { + // Don't show upload option if max size of uploads is zero + $max_size = $misc->inisizeToBytes(ini_get('upload_max_filesize')); + if (is_double($max_size) && $max_size > 0) { + echo "<p><input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"{$max_size}\" />\n"; + echo "<label for=\"script\">{$lang['struploadscript']}</label> <input id=\"script\" name=\"script\" type=\"file\" /></p>\n"; + } + } + + echo "<p><label for=\"paginate\"><input type=\"checkbox\" id=\"paginate\" name=\"paginate\"", (isset($_REQUEST['paginate']) ? ' checked="checked"' : ''), " /> {$lang['strpaginate']}</label></p>\n"; + + echo "<p><input type=\"submit\" name=\"execute\" accesskey=\"r\" value=\"{$lang['strexecute']}\" />\n"; + echo "<input type=\"reset\" accesskey=\"q\" value=\"{$lang['strreset']}\" /></p>\n"; + echo "</form>\n"; + + // Default focus + $misc->setFocus('forms[0].query'); + } + + switch ($action) { + case 'find': + doFind(); + break; + case 'sql': + default: + doDefault(); + break; + } + + // Set the name of the window + $misc->setWindowName('sqledit'); + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tables.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tables.js new file mode 100644 index 00000000..a805a8b4 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tables.js @@ -0,0 +1,18 @@ +var predefined_lengths = null; +var sizesLength = false; + +function checkLengths(sValue,idx) { + if(predefined_lengths) { + if(sizesLength==false) { + sizesLength = predefined_lengths.length; + } + for(var i=0;i<sizesLength;i++) { + if(sValue.toString().toUpperCase()==predefined_lengths[i].toString().toUpperCase()) { + document.getElementById("lengths"+idx).value=''; + document.getElementById("lengths"+idx).disabled='on'; + return; + } + } + document.getElementById("lengths"+idx).disabled=''; + } +} diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tables.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tables.php new file mode 100644 index 00000000..c92225cf --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tables.php @@ -0,0 +1,1052 @@ +<?php + + /** + * List tables in a database + * + * $Id: tables.php,v 1.112 2008/06/16 22:38:46 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * Displays a screen where they can enter a new table + */ + function doCreate($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_REQUEST['stage'])) { + $_REQUEST['stage'] = 1; + $default_with_oids = $data->getDefaultWithOid(); + if ($default_with_oids == 'off') $_REQUEST['withoutoids'] = 'on'; + } + + if (!isset($_REQUEST['name'])) $_REQUEST['name'] = ''; + if (!isset($_REQUEST['fields'])) $_REQUEST['fields'] = ''; + if (!isset($_REQUEST['tblcomment'])) $_REQUEST['tblcomment'] = ''; + if (!isset($_REQUEST['spcname'])) $_REQUEST['spcname'] = ''; + + switch ($_REQUEST['stage']) { + case 1: + // Fetch all tablespaces from the database + if ($data->hasTablespaces()) $tablespaces = $data->getTablespaces(); + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreatetable'], 'pg.table.create'); + $misc->printMsg($msg); + + echo "<form action=\"tables.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['name']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strnumcols']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"fields\" size=\"5\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['fields']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['stroptions']}</th>\n"; + echo "\t\t<td class=\"data\"><label for=\"withoutoids\"><input type=\"checkbox\" id=\"withoutoids\" name=\"withoutoids\"", isset($_REQUEST['withoutoids']) ? ' checked="checked"' : '', " />WITHOUT OIDS</label></td>\n\t</tr>\n"; + + // Tablespace (if there are any) + if ($data->hasTablespaces() && $tablespaces->recordCount() > 0) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strtablespace']}</th>\n"; + echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"spcname\">\n"; + // Always offer the default (empty) option + echo "\t\t\t\t<option value=\"\"", + ($_REQUEST['spcname'] == '') ? ' selected="selected"' : '', "></option>\n"; + // Display all other tablespaces + while (!$tablespaces->EOF) { + $spcname = htmlspecialchars($tablespaces->fields['spcname']); + echo "\t\t\t\t<option value=\"{$spcname}\"", + ($tablespaces->fields['spcname'] == $_REQUEST['spcname']) ? ' selected="selected"' : '', ">{$spcname}</option>\n"; + $tablespaces->moveNext(); + } + echo "\t\t\t</select>\n\t\t</td>\n\t</tr>\n"; + } + + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td><textarea name=\"tblcomment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_REQUEST['tblcomment']), "</textarea></td>\n\t</tr>\n"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"create\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strnext']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + break; + case 2: + global $lang; + + // Check inputs + $fields = trim($_REQUEST['fields']); + if (trim($_REQUEST['name']) == '') { + $_REQUEST['stage'] = 1; + doCreate($lang['strtableneedsname']); + return; + } + elseif ($fields == '' || !is_numeric($fields) || $fields != (int)$fields || $fields < 1) { + $_REQUEST['stage'] = 1; + doCreate($lang['strtableneedscols']); + return; + } + + $types = $data->getTypes(true, false, true); + $types_for_js = array(); + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreatetable'], 'pg.table.create'); + $misc->printMsg($msg); + + echo "<script src=\"tables.js\" type=\"text/javascript\"></script>"; + echo "<form action=\"tables.php\" method=\"post\">\n"; + + // Output table header + echo "<table>\n"; + echo "\t<tr><th colspan=\"2\" class=\"data required\">{$lang['strcolumn']}</th><th colspan=\"2\" class=\"data required\">{$lang['strtype']}</th>"; + echo "<th class=\"data\">{$lang['strlength']}</th><th class=\"data\">{$lang['strnotnull']}</th>"; + echo "<th class=\"data\">{$lang['struniquekey']}</th><th class=\"data\">{$lang['strprimarykey']}</th>"; + echo "<th class=\"data\">{$lang['strdefault']}</th><th class=\"data\">{$lang['strcomment']}</th></tr>\n"; + + for ($i = 0; $i < $_REQUEST['fields']; $i++) { + if (!isset($_REQUEST['field'][$i])) $_REQUEST['field'][$i] = ''; + if (!isset($_REQUEST['length'][$i])) $_REQUEST['length'][$i] = ''; + if (!isset($_REQUEST['default'][$i])) $_REQUEST['default'][$i] = ''; + if (!isset($_REQUEST['colcomment'][$i])) $_REQUEST['colcomment'][$i] = ''; + + echo "\t<tr>\n\t\t<td>", $i + 1, ". </td>\n"; + echo "\t\t<td><input name=\"field[{$i}]\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['field'][$i]), "\" /></td>\n"; + echo "\t\t<td>\n\t\t\t<select name=\"type[{$i}]\" id=\"types{$i}\" onchange=\"checkLengths(this.options[this.selectedIndex].value,{$i});\">\n"; + // Output any "magic" types + foreach ($data->extraTypes as $v) { + $types_for_js[strtolower($v)] = 1; + echo "\t\t\t\t<option value=\"", htmlspecialchars($v), "\"", + (isset($_REQUEST['type'][$i]) && $v == $_REQUEST['type'][$i]) ? ' selected="selected"' : '', ">", + $misc->printVal($v), "</option>\n"; + } + $types->moveFirst(); + while (!$types->EOF) { + $typname = $types->fields['typname']; + $types_for_js[$typname] = 1; + echo "\t\t\t\t<option value=\"", htmlspecialchars($typname), "\"", + (isset($_REQUEST['type'][$i]) && $typname == $_REQUEST['type'][$i]) ? ' selected="selected"' : '', ">", + $misc->printVal($typname), "</option>\n"; + $types->moveNext(); + } + echo "\t\t\t</select>\n\t\t\n"; + if($i==0) { // only define js types array once + $predefined_size_types = array_intersect($data->predefined_size_types,array_keys($types_for_js)); + $escaped_predef_types = array(); // the JS escaped array elements + foreach($predefined_size_types as $value) { + $escaped_predef_types[] = "'{$value}'"; + } + echo "<script type=\"text/javascript\">predefined_lengths = new Array(". implode(",",$escaped_predef_types) .");</script>\n\t</td>"; + } + + // Output array type selector + echo "\t\t<td>\n\t\t\t<select name=\"array[{$i}]\">\n"; + echo "\t\t\t\t<option value=\"\"", (isset($_REQUEST['array'][$i]) && $_REQUEST['array'][$i] == '') ? ' selected="selected"' : '', "></option>\n"; + echo "\t\t\t\t<option value=\"[]\"", (isset($_REQUEST['array'][$i]) && $_REQUEST['array'][$i] == '[]') ? ' selected="selected"' : '', ">[ ]</option>\n"; + echo "\t\t\t</select>\n\t\t</td>\n"; + + echo "\t\t<td><input name=\"length[{$i}]\" id=\"lengths{$i}\" size=\"10\" value=\"", + htmlspecialchars($_REQUEST['length'][$i]), "\" /></td>\n"; + echo "\t\t<td><input type=\"checkbox\" name=\"notnull[{$i}]\"", (isset($_REQUEST['notnull'][$i])) ? ' checked="checked"' : '', " /></td>\n"; + echo "\t\t<td style=\"text-align: center\"><input type=\"checkbox\" name=\"uniquekey[{$i}]\"" + .(isset($_REQUEST['uniquekey'][$i]) ? ' checked="checked"' :'')." /></td>\n"; + echo "\t\t<td style=\"text-align: center\"><input type=\"checkbox\" name=\"primarykey[{$i}]\" " + .(isset($_REQUEST['primarykey'][$i]) ? ' checked="checked"' : '') + ." /></td>\n"; + echo "\t\t<td><input name=\"default[{$i}]\" size=\"20\" value=\"", + htmlspecialchars($_REQUEST['default'][$i]), "\" /></td>\n"; + echo "\t\t<td><input name=\"colcomment[{$i}]\" size=\"40\" value=\"", + htmlspecialchars($_REQUEST['colcomment'][$i]), "\" /> + <script type=\"text/javascript\">checkLengths(document.getElementById('types{$i}').value,{$i});</script> + </td>\n\t</tr>\n"; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"create\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"3\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"name\" value=\"", htmlspecialchars($_REQUEST['name']), "\" />\n"; + echo "<input type=\"hidden\" name=\"fields\" value=\"", htmlspecialchars($_REQUEST['fields']), "\" />\n"; + if (isset($_REQUEST['withoutoids'])) { + echo "<input type=\"hidden\" name=\"withoutoids\" value=\"true\" />\n"; + } + echo "<input type=\"hidden\" name=\"tblcomment\" value=\"", htmlspecialchars($_REQUEST['tblcomment']), "\" />\n"; + if (isset($_REQUEST['spcname'])) { + echo "<input type=\"hidden\" name=\"spcname\" value=\"", htmlspecialchars($_REQUEST['spcname']), "\" />\n"; + } + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + + break; + case 3: + global $data, $lang, $_reload_browser; + + if (!isset($_REQUEST['notnull'])) $_REQUEST['notnull'] = array(); + if (!isset($_REQUEST['uniquekey'])) $_REQUEST['uniquekey'] = array(); + if (!isset($_REQUEST['primarykey'])) $_REQUEST['primarykey'] = array(); + if (!isset($_REQUEST['length'])) $_REQUEST['length'] = array(); + // Default tablespace to null if it isn't set + if (!isset($_REQUEST['spcname'])) $_REQUEST['spcname'] = null; + + // Check inputs + $fields = trim($_REQUEST['fields']); + if (trim($_REQUEST['name']) == '') { + $_REQUEST['stage'] = 1; + doCreate($lang['strtableneedsname']); + return; + } + elseif ($fields == '' || !is_numeric($fields) || $fields != (int)$fields || $fields <= 0) { + $_REQUEST['stage'] = 1; + doCreate($lang['strtableneedscols']); + return; + } + + $status = $data->createTable($_REQUEST['name'], $_REQUEST['fields'], $_REQUEST['field'], + $_REQUEST['type'], $_REQUEST['array'], $_REQUEST['length'], $_REQUEST['notnull'], $_REQUEST['default'], + isset($_REQUEST['withoutoids']), $_REQUEST['colcomment'], $_REQUEST['tblcomment'], $_REQUEST['spcname'], + $_REQUEST['uniquekey'], $_REQUEST['primarykey']); + + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strtablecreated']); + } + elseif ($status == -1) { + $_REQUEST['stage'] = 2; + doCreate($lang['strtableneedsfield']); + return; + } + else { + $_REQUEST['stage'] = 2; + doCreate($lang['strtablecreatedbad']); + return; + } + break; + default: + echo "<p>{$lang['strinvalidparam']}</p>\n"; + } + } + + /** + * Dsiplay a screen where user can create a table from an existing one. + * We don't have to check if pg supports schema cause create table like + * is available under pg 7.4+ which has schema. + */ + function doCreateLike($confirm, $msg = '') { + global $data, $misc, $lang; + + if (!$confirm) { + + include_once('./classes/Gui.php'); + + if (!isset($_REQUEST['name'])) $_REQUEST['name'] = ''; + if (!isset($_REQUEST['like'])) $_REQUEST['like'] = ''; + if (!isset($_REQUEST['tablespace'])) $_REQUEST['tablespace'] = ''; + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreatetable'], 'pg.table.create'); + $misc->printMsg($msg); + + $tbltmp = $data->getTables(true); + $tbltmp = $tbltmp->getArray(); + + $tables = array(); + $tblsel = ''; + foreach ($tbltmp as $a) { + $data->fieldClean($a['nspname']); + $data->fieldClean($a['relname']); + $tables["\"{$a['nspname']}\".\"{$a['relname']}\""] = serialize(array('schema' => $a['nspname'], 'table' => $a['relname'])); + if ($_REQUEST['like'] == $tables["\"{$a['nspname']}\".\"{$a['relname']}\""]) + $tblsel = htmlspecialchars($tables["\"{$a['nspname']}\".\"{$a['relname']}\""]); + } + + unset($tbltmp); + + echo "<form action=\"tables.php\" method=\"post\">\n"; + echo "<table>\n\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", htmlspecialchars($_REQUEST['name']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strcreatetablelikeparent']}</th>\n"; + echo "\t\t<td class=\"data\">"; + echo GUI::printCombo($tables, 'like', true, $tblsel, false); + echo "</td>\n\t</tr>\n"; + if ($data->hasTablespaces()) { + $tblsp_ = $data->getTablespaces(); + if ($tblsp_->recordCount() > 0) { + $tblsp_ = $tblsp_->getArray(); + $tblsp = array(); + foreach($tblsp_ as $a) $tblsp[$a['spcname']] = $a['spcname']; + + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strtablespace']}</th>\n"; + echo "\t\t<td class=\"data\">"; + echo GUI::printCombo($tblsp, 'tablespace', true, $_REQUEST['tablespace'], false); + echo "</td>\n\t</tr>\n"; + } + } + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['stroptions']}</th>\n\t\t<td class=\"data\">"; + echo "<label for=\"withdefaults\"><input type=\"checkbox\" id=\"withdefaults\" name=\"withdefaults\"", + isset($_REQUEST['withdefaults']) ? ' checked="checked"' : '', + "/>{$lang['strcreatelikewithdefaults']}</label>"; + if ($data->hasCreateTableLikeWithConstraints()) { + echo "<br /><label for=\"withconstraints\"><input type=\"checkbox\" id=\"withconstraints\" name=\"withconstraints\"", + isset($_REQUEST['withconstraints']) ? ' checked="checked"' : '', + "/>{$lang['strcreatelikewithconstraints']}</label>"; + } + if ($data->hasCreateTableLikeWithIndexes()) { + echo "<br /><label for=\"withindexes\"><input type=\"checkbox\" id=\"withindexes\" name=\"withindexes\"", + isset($_REQUEST['withindexes']) ? ' checked="checked"' : '', + "/>{$lang['strcreatelikewithindexes']}</label>"; + } + echo "</td>\n\t</tr>\n"; + echo "</table>"; + + echo "<input type=\"hidden\" name=\"action\" value=\"confcreatelike\" />\n"; + echo $misc->form; + echo "<p><input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + global $_reload_browser; + + if (trim($_REQUEST['name']) == '') { + doCreateLike(false, $lang['strtableneedsname']); + return; + } + if (trim($_REQUEST['like']) == '') { + doCreateLike(false, $lang['strtablelikeneedslike']); + return; + } + + if (!isset($_REQUEST['tablespace'])) $_REQUEST['tablespace'] = ''; + + $status = $data->createTableLike($_REQUEST['name'], unserialize($_REQUEST['like']), isset($_REQUEST['withdefaults']), + isset($_REQUEST['withconstraints']), isset($_REQUEST['withindexes']), $_REQUEST['tablespace']); + + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strtablecreated']); + } + else { + doCreateLike(false, $lang['strtablecreatedbad']); + return; + } + } + } + + /** + * Ask for select parameters and perform select + */ + function doSelectRows($confirm, $msg = '') { + global $data, $misc, $_no_output; + global $lang; + + if ($confirm) { + $misc->printTrail('table'); + $misc->printTabs('table','select'); + $misc->printMsg($msg); + + $attrs = $data->getTableAttributes($_REQUEST['table']); + + echo "<form action=\"tables.php\" method=\"post\" id=\"selectform\">\n"; + if ($attrs->recordCount() > 0) { + // JavaScript for select all feature + echo "<script type=\"text/javascript\">\n"; + echo "//<![CDATA[\n"; + echo " function selectAll() {\n"; + echo " for (var i=0; i<document.getElementById('selectform').elements.length; i++) {\n"; + echo " var e = document.getElementById('selectform').elements[i];\n"; + echo " if (e.name.indexOf('show') == 0) e.checked = document.getElementById('selectform').selectall.checked;\n"; + echo " }\n"; + echo " }\n"; + echo "//]]>\n"; + echo "</script>\n"; + + echo "<table>\n"; + + // Output table header + echo "<tr><th class=\"data\">{$lang['strshow']}</th><th class=\"data\">{$lang['strcolumn']}</th>"; + echo "<th class=\"data\">{$lang['strtype']}</th><th class=\"data\">{$lang['stroperator']}</th>"; + echo "<th class=\"data\">{$lang['strvalue']}</th></tr>"; + + $i = 0; + while (!$attrs->EOF) { + $attrs->fields['attnotnull'] = $data->phpBool($attrs->fields['attnotnull']); + // Set up default value if there isn't one already + if (!isset($_REQUEST['values'][$attrs->fields['attname']])) + $_REQUEST['values'][$attrs->fields['attname']] = null; + if (!isset($_REQUEST['ops'][$attrs->fields['attname']])) + $_REQUEST['ops'][$attrs->fields['attname']] = null; + // Continue drawing row + $id = (($i % 2) == 0 ? '1' : '2'); + echo "<tr class=\"data{$id}\">\n"; + echo "<td style=\"white-space:nowrap;\">"; + echo "<input type=\"checkbox\" name=\"show[", htmlspecialchars($attrs->fields['attname']), "]\"", + isset($_REQUEST['show'][$attrs->fields['attname']]) ? ' checked="checked"' : '', " /></td>"; + echo "<td style=\"white-space:nowrap;\">", $misc->printVal($attrs->fields['attname']), "</td>"; + echo "<td style=\"white-space:nowrap;\">", $misc->printVal($data->formatType($attrs->fields['type'], $attrs->fields['atttypmod'])), "</td>"; + echo "<td style=\"white-space:nowrap;\">"; + echo "<select name=\"ops[{$attrs->fields['attname']}]\">\n"; + foreach (array_keys($data->selectOps) as $v) { + echo "<option value=\"", htmlspecialchars($v), "\"", ($v == $_REQUEST['ops'][$attrs->fields['attname']]) ? ' selected="selected"' : '', + ">", htmlspecialchars($v), "</option>\n"; + } + echo "</select>\n</td>\n"; + echo "<td style=\"white-space:nowrap;\">", $data->printField("values[{$attrs->fields['attname']}]", + $_REQUEST['values'][$attrs->fields['attname']], $attrs->fields['type']), "</td>"; + echo "</tr>\n"; + $i++; + $attrs->moveNext(); + } + // Select all checkbox + echo "<tr><td colspan=\"5\"><input type=\"checkbox\" id=\"selectall\" name=\"selectall\" accesskey=\"a\" onclick=\"javascript:selectAll()\" /><label for=\"selectall\">{$lang['strselectallfields']}</label></td>"; + echo "</tr></table>\n"; + } + else echo "<p>{$lang['strinvalidparam']}</p>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"selectrows\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"table\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"select\" accesskey=\"r\" value=\"{$lang['strselect']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + if (!isset($_POST['show'])) $_POST['show'] = array(); + if (!isset($_POST['values'])) $_POST['values'] = array(); + if (!isset($_POST['nulls'])) $_POST['nulls'] = array(); + + // Verify that they haven't supplied a value for unary operators + foreach ($_POST['ops'] as $k => $v) { + if ($data->selectOps[$v] == 'p' && $_POST['values'][$k] != '') { + doSelectRows(true, $lang['strselectunary']); + return; + } + } + + if (sizeof($_POST['show']) == 0) + doSelectRows(true, $lang['strselectneedscol']); + else { + // Generate query SQL + $query = $data->getSelectSQL($_REQUEST['table'], array_keys($_POST['show']), + $_POST['values'], $_POST['ops']); + $_REQUEST['query'] = $query; + $_REQUEST['return'] = 'selectrows'; + + $_no_output = true; + include('./display.php'); + exit; + } + } + } + + /** + * Ask for insert parameters and then actually insert row + */ + function doInsertRow($confirm, $msg = '') { + global $data, $misc, $conf; + global $lang; + + if ($confirm) { + $misc->printTrail('table'); + $misc->printTabs('table','insert'); + + $misc->printMsg($msg); + + $attrs = $data->getTableAttributes($_REQUEST['table']); + + if (($conf['autocomplete'] != 'disable')) { + $fksprops = $misc->getAutocompleteFKProperties($_REQUEST['table']); + if ($fksprops !== false) + echo $fksprops['code']; + } + else $fksprops = false; + + echo "<form action=\"tables.php\" method=\"post\" id=\"ac_form\">\n"; + if ($attrs->recordCount() > 0) { + echo "<table>\n"; + + // Output table header + echo "<tr><th class=\"data\">{$lang['strcolumn']}</th><th class=\"data\">{$lang['strtype']}</th>"; + echo "<th class=\"data\">{$lang['strformat']}</th>"; + echo "<th class=\"data\">{$lang['strnull']}</th><th class=\"data\">{$lang['strvalue']}</th></tr>"; + + $i = 0; + $fields = array(); + while (!$attrs->EOF) { + $fields[$attrs->fields['attnum']] = $attrs->fields['attname']; + $attrs->fields['attnotnull'] = $data->phpBool($attrs->fields['attnotnull']); + // Set up default value if there isn't one already + if (!isset($_REQUEST['values'][$attrs->fields['attnum']])) + $_REQUEST['values'][$attrs->fields['attnum']] = $attrs->fields['adsrc']; + // Default format to 'VALUE' if there is no default, + // otherwise default to 'EXPRESSION' + if (!isset($_REQUEST['format'][$attrs->fields['attnum']])) + $_REQUEST['format'][$attrs->fields['attnum']] = ($attrs->fields['adsrc'] === null) ? 'VALUE' : 'EXPRESSION'; + // Continue drawing row + $id = (($i % 2) == 0 ? '1' : '2'); + echo "<tr class=\"data{$id}\">\n"; + echo "<td style=\"white-space:nowrap;\">", $misc->printVal($attrs->fields['attname']), "</td>"; + echo "<td style=\"white-space:nowrap;\">\n"; + echo $misc->printVal($data->formatType($attrs->fields['type'], $attrs->fields['atttypmod'])); + echo "<input type=\"hidden\" name=\"types[{$attrs->fields['attnum']}]\" value=\"", + htmlspecialchars($attrs->fields['type']), "\" /></td>"; + echo "<td style=\"white-space:nowrap;\">\n"; + echo "<select name=\"format[{$attrs->fields['attnum']}]\">\n"; + echo "<option value=\"VALUE\"", ($_REQUEST['format'][$attrs->fields['attnum']] == 'VALUE') ? ' selected="selected"' : '', ">{$lang['strvalue']}</option>\n"; + echo "<option value=\"EXPRESSION\"", ($_REQUEST['format'][$attrs->fields['attnum']] == 'EXPRESSION') ? ' selected="selected"' : '', ">{$lang['strexpression']}</option>\n"; + echo "</select>\n</td>\n"; + echo "<td style=\"white-space:nowrap;\">"; + // Output null box if the column allows nulls (doesn't look at CHECKs or ASSERTIONS) + if (!$attrs->fields['attnotnull']) { + echo "<label><span><input type=\"checkbox\" name=\"nulls[{$attrs->fields['attnum']}]\"", + isset($_REQUEST['nulls'][$attrs->fields['attnum']]) ? ' checked="checked"' : '', " /></span></label></td>"; + } + else { + echo " </td>"; + } + echo "<td id=\"row_att_{$attrs->fields['attnum']}\" style=\"white-space:nowrap;\">"; + if (($fksprops !== false) && isset($fksprops['byfield'][$attrs->fields['attnum']])) { + echo $data->printField("values[{$attrs->fields['attnum']}]", $_REQUEST['values'][$attrs->fields['attnum']], 'fktype'/*force FK*/, + array( + 'id' => "attr_{$attrs->fields['attnum']}", + 'autocomplete' => 'off' + ) + ); + } + else { + echo $data->printField("values[{$attrs->fields['attnum']}]", $_REQUEST['values'][$attrs->fields['attnum']], $attrs->fields['type']); + } + echo "</td>\n"; + echo "</tr>\n"; + $i++; + $attrs->moveNext(); + } + echo "</table>\n"; + + if (!isset($_SESSION['counter'])) { $_SESSION['counter'] = 0; } + + echo "<input type=\"hidden\" name=\"action\" value=\"insertrow\" />\n"; + echo "<input type=\"hidden\" name=\"fields\" value=\"", htmlentities(serialize($fields), ENT_QUOTES, 'UTF-8') ,"\" />\n"; + echo "<input type=\"hidden\" name=\"protection_counter\" value=\"".$_SESSION['counter']."\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<p><input type=\"submit\" name=\"insert\" value=\"{$lang['strinsert']}\" />\n"; + echo "<input type=\"submit\" name=\"insertandrepeat\" accesskey=\"r\" value=\"{$lang['strinsertandrepeat']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + + if($fksprops !== false) { + if ($conf['autocomplete'] != 'default off') + echo "<input type=\"checkbox\" id=\"no_ac\" value=\"1\" checked=\"checked\" /><label for=\"no_ac\">{$lang['strac']}</label>\n"; + else + echo "<input type=\"checkbox\" id=\"no_ac\" value=\"0\" /><label for=\"no_ac\">{$lang['strac']}</label>\n"; + } + echo "</p>\n"; + } + else { + echo "<p>{$lang['strnofieldsforinsert']}</p>\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + } + echo $misc->form; + echo "</form>\n"; + } + else { + if (!isset($_POST['values'])) $_POST['values'] = array(); + if (!isset($_POST['nulls'])) $_POST['nulls'] = array(); + $_POST['fields'] = unserialize(htmlspecialchars_decode($_POST['fields'], ENT_QUOTES)); + + if ($_SESSION['counter']++ == $_POST['protection_counter']) { + $status = $data->insertRow($_POST['table'], $_POST['fields'], $_POST['values'], + $_POST['nulls'], $_POST['format'], $_POST['types']); + if ($status == 0) { + if (isset($_POST['insert'])) + doDefault($lang['strrowinserted']); + else { + $_REQUEST['values'] = array(); + $_REQUEST['nulls'] = array(); + doInsertRow(true, $lang['strrowinserted']); + } + } + else + doInsertRow(true, $lang['strrowinsertedbad']); + } else + doInsertRow(true, $lang['strrowduplicate']); + } + + } + + /** + * Show confirmation of empty and perform actual empty + */ + function doEmpty($confirm) { + global $data, $misc; + global $lang; + + if (empty($_REQUEST['table']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifytabletoempty']); + exit(); + } + + if ($confirm) { + if (isset($_REQUEST['ma'])) { + $misc->printTrail('schema'); + $misc->printTitle($lang['strempty'],'pg.table.empty'); + + echo "<form action=\"tables.php\" method=\"post\">\n"; + foreach ($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfemptytable'], $misc->printVal($a['table'])), "</p>\n"; + printf('<input type="hidden" name="table[]" value="%s" />', htmlspecialchars($a['table'])); + } + } // END mutli empty + else { + $misc->printTrail('table'); + $misc->printTitle($lang['strempty'],'pg.table.empty'); + + echo "<p>", sprintf($lang['strconfemptytable'], $misc->printVal($_REQUEST['table'])), "</p>\n"; + + echo "<form action=\"tables.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + } // END not mutli empty + + echo "<input type=\"hidden\" name=\"action\" value=\"empty\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"empty\" value=\"{$lang['strempty']}\" /> <input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } // END if confirm + else { // Do Empty + if (is_array($_REQUEST['table'])) { + $msg=''; + foreach($_REQUEST['table'] as $t) { + $status = $data->emptyTable($t); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($t, ENT_QUOTES, 'UTF-8'), $lang['strtableemptied']); + else { + doDefault(sprintf('%s%s: %s<br />', $msg, htmlentities($t, ENT_QUOTES, 'UTF-8'), $lang['strtableemptiedbad'])); + return; + } + } + doDefault($msg); + } // END mutli empty + else { + $status = $data->emptyTable($_POST['table']); + if ($status == 0) + doDefault($lang['strtableemptied']); + else + doDefault($lang['strtableemptiedbad']); + } // END not mutli empty + } // END do Empty + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang, $_reload_browser; + + if (empty($_REQUEST['table']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifytabletodrop']); + exit(); + } + + if ($confirm) { + //If multi drop + if (isset($_REQUEST['ma'])) { + + $misc->printTrail('schema'); + $misc->printTitle($lang['strdrop'], 'pg.table.drop'); + + echo "<form action=\"tables.php\" method=\"post\">\n"; + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfdroptable'], $misc->printVal($a['table'])), "</p>\n"; + printf('<input type="hidden" name="table[]" value="%s" />', htmlspecialchars($a['table'])); + } + } else { + + $misc->printTrail('table'); + $misc->printTitle($lang['strdrop'], 'pg.table.drop'); + + echo "<p>", sprintf($lang['strconfdroptable'], $misc->printVal($_REQUEST['table'])), "</p>\n"; + + echo "<form action=\"tables.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + }// END if multi drop + + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } // END confirm + else { + //If multi drop + if (is_array($_REQUEST['table'])) { + $msg = ''; + $status = $data->beginTransaction(); + if ($status == 0) { + foreach($_REQUEST['table'] as $t) { + $status = $data->dropTable($t, isset($_POST['cascade'])); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($t, ENT_QUOTES, 'UTF-8'), $lang['strtabledropped']); + else { + $data->endTransaction(); + doDefault(sprintf('%s%s: %s<br />', $msg, htmlentities($t, ENT_QUOTES, 'UTF-8'), $lang['strtabledroppedbad'])); + return; + } + } + } + if($data->endTransaction() == 0) { + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else doDefault($lang['strtabledroppedbad']); + } else { + $status = $data->dropTable($_POST['table'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strtabledropped']); + } + else + doDefault($lang['strtabledroppedbad']); + } + } // END DROP + }// END Function + + /** + * Show default list of tables in the database + */ + function doDefault($msg = '') { + global $data, $conf, $misc, $data; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','tables'); + $misc->printMsg($msg); + + $tables = $data->getTables(); + + $columns = array( + 'table' => array( + 'title' => $lang['strtable'], + 'field' => field('relname'), + 'url' => "redirect.php?subject=table&{$misc->href}&", + 'vars' => array('table' => 'relname'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('relowner'), + ), + 'tablespace' => array( + 'title' => $lang['strtablespace'], + 'field' => field('tablespace') + ), + 'tuples' => array( + 'title' => $lang['strestimatedrowcount'], + 'field' => field('reltuples'), + 'type' => 'numeric' + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('relcomment'), + ), + ); + + $actions = array( + 'multiactions' => array( + 'keycols' => array('table' => 'relname'), + 'url' => 'tables.php', + 'default' => 'analyze', + ), + 'browse' => array( + 'content' => $lang['strbrowse'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array ( + 'subject' => 'table', + 'return' => 'table', + 'table' => field('relname') + ) + ) + ) + ), + 'select' => array( + 'content' => $lang['strselect'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confselectrows', + 'table' => field('relname') + ) + ) + ) + ), + 'insert' => array( + 'content' => $lang['strinsert'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confinsertrow', + 'table' => field('relname') + ) + ) + ) + ), + 'empty' => array( + 'multiaction' => 'confirm_empty', + 'content' => $lang['strempty'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confirm_empty', + 'table' => field('relname') + ) + ) + ) + ), + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tblproperties.php', + 'urlvars' => array ( + 'action' => 'confirm_alter', + 'table' => field('relname') + ) + ) + ) + ), + 'drop' => array( + 'multiaction' => 'confirm_drop', + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'table' => field('relname') + ) + ) + ) + ), + 'vacuum' => array( + 'multiaction' => 'confirm_vacuum', + 'content' => $lang['strvacuum'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confirm_vacuum', + 'table' => field('relname') + ) + ) + ) + ), + 'analyze' => array( + 'multiaction' => 'confirm_analyze', + 'content' => $lang['stranalyze'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confirm_analyze', + 'table' => field('relname') + ) + ) + ) + ), + 'reindex' => array( + 'multiaction' => 'confirm_reindex', + 'content' => $lang['strreindex'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confirm_reindex', + 'table' => field('relname') + ) + ) + ) + ) + //'cluster' TODO ? + ); + + if (!$data->hasTablespaces()) unset($columns['tablespace']); + + $misc->printTable($tables, $columns, $actions, 'tables-tables', $lang['strnotables']); + + $navlinks = array ( + 'create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreatetable'] + ) + ); + + if (($tables->recordCount() > 0) && $data->hasCreateTableLike()) { + $navlinks['createlike'] = array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'createlike', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreatetablelike'] + ); + } + $misc->printNavLinks($navlinks, 'tables-tables', get_defined_vars()); + } + + require('./admin.php'); + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $tables = $data->getTables(); + + $reqvars = $misc->getRequestVars('table'); + + $attrs = array( + 'text' => field('relname'), + 'icon' => 'Table', + 'iconAction' => url('display.php', + $reqvars, + array('table' => field('relname')) + ), + 'toolTip'=> field('relcomment'), + 'action' => url('redirect.php', + $reqvars, + array('table' => field('relname')) + ), + 'branch' => url('tables.php', + $reqvars, + array ( + 'action' => 'subtree', + 'table' => field('relname') + ) + ) + ); + + $misc->printTree($tables, $attrs, 'tables'); + exit; + } + + function doSubTree() { + global $misc, $data; + + $tabs = $misc->getNavTabs('table'); + $items = $misc->adjustTabsForTree($tabs); + $reqvars = $misc->getRequestVars('table'); + + $attrs = array( + 'text' => field('title'), + 'icon' => field('icon'), + 'action' => url( + field('url'), + $reqvars, + field('urlvars'), + array('table' => $_REQUEST['table']) + ), + 'branch' => ifempty( + field('branch'), '', url( + field('url'), + $reqvars, + array( + 'action' => 'tree', + 'table' => $_REQUEST['table'] + ) + ) + ), + ); + + $misc->printTree($items, $attrs, 'table'); + exit; + } + + if ($action == 'tree') doTree(); + if ($action == 'subtree') dosubTree(); + + $misc->printHeader($lang['strtables']); + $misc->printBody(); + + switch ($action) { + case 'create': + if (isset($_POST['cancel'])) doDefault(); + else doCreate(); + break; + case 'createlike': + doCreateLike(false); + break; + case 'confcreatelike': + if (isset($_POST['cancel'])) doDefault(); + else doCreateLike(true); + break; + case 'selectrows': + if (!isset($_POST['cancel'])) doSelectRows(false); + else doDefault(); + break; + case 'confselectrows': + doSelectRows(true); + break; + case 'insertrow': + if (!isset($_POST['cancel'])) doInsertRow(false); + else doDefault(); + break; + case 'confinsertrow': + doInsertRow(true); + break; + case 'empty': + if (isset($_POST['empty'])) doEmpty(false); + else doDefault(); + break; + case 'confirm_empty': + doEmpty(true); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + default: + if (adminActions($action, 'table') === false) doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tablespaces.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tablespaces.php new file mode 100644 index 00000000..3c6f8beb --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tablespaces.php @@ -0,0 +1,326 @@ +<?php + + /** + * Manage tablespaces in a database cluster + * + * $Id: tablespaces.php,v 1.16 2007/08/31 18:30:11 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Function to allow altering of a tablespace + */ + function doAlter($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('tablespace'); + $misc->printTitle($lang['stralter'],'pg.tablespace.alter'); + $misc->printMsg($msg); + + // Fetch tablespace info + $tablespace = $data->getTablespace($_REQUEST['tablespace']); + // Fetch all users + $users = $data->getUsers(); + + if ($tablespace->recordCount() > 0) { + + if (!isset($_POST['name'])) $_POST['name'] = $tablespace->fields['spcname']; + if (!isset($_POST['owner'])) $_POST['owner'] = $tablespace->fields['spcowner']; + if (!isset($_POST['comment'])) { + $_POST['comment'] = ($data->hasSharedComments()) ? $tablespace->fields['spccomment'] : ''; + } + + echo "<form action=\"tablespaces.php\" method=\"post\">\n"; + echo $misc->form; + echo "<table>\n"; + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" /></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "<td class=\"data1\"><select name=\"owner\">"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $_POST['owner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "</select></td></tr>\n"; + if ($data->hasSharedComments()){ + echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<textarea rows=\"3\" cols=\"32\" name=\"comment\">", + htmlspecialchars($_POST['comment']), "</textarea></td></tr>\n"; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_edit\" />\n"; + echo "<input type=\"hidden\" name=\"tablespace\" value=\"", htmlspecialchars($_REQUEST['tablespace']), "\" />\n"; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Function to save after altering a tablespace + */ + function doSaveAlter() { + global $data, $lang; + + // Check data + if (trim($_POST['name']) == '') + doAlter($lang['strtablespaceneedsname']); + else { + $status = $data->alterTablespace($_POST['tablespace'], $_POST['name'], $_POST['owner'], $_POST['comment']); + if ($status == 0) { + // If tablespace has been renamed, need to change to the new name + if ($_POST['tablespace'] != $_POST['name']) { + // Jump them to the new table name + $_REQUEST['tablespace'] = $_POST['name']; + } + doDefault($lang['strtablespacealtered']); + } + else + doAlter($lang['strtablespacealteredbad']); + } + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('tablespace'); + $misc->printTitle($lang['strdrop'],'pg.tablespace.drop'); + + echo "<p>", sprintf($lang['strconfdroptablespace'], $misc->printVal($_REQUEST['tablespace'])), "</p>\n"; + + echo "<form action=\"tablespaces.php\" method=\"post\">\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"tablespace\" value=\"", htmlspecialchars($_REQUEST['tablespace']), "\" />\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->droptablespace($_REQUEST['tablespace']); + if ($status == 0) + doDefault($lang['strtablespacedropped']); + else + doDefault($lang['strtablespacedroppedbad']); + } + } + + /** + * Displays a screen where they can enter a new tablespace + */ + function doCreate($msg = '') { + global $data, $misc, $spcname; + global $lang; + + $server_info = $misc->getServerInfo(); + + if (!isset($_POST['formSpcname'])) $_POST['formSpcname'] = ''; + if (!isset($_POST['formOwner'])) $_POST['formOwner'] = $server_info['username']; + if (!isset($_POST['formLoc'])) $_POST['formLoc'] = ''; + if (!isset($_POST['formComment'])) $_POST['formComment'] = ''; + + // Fetch all users + $users = $data->getUsers(); + + $misc->printTrail('server'); + $misc->printTitle($lang['strcreatetablespace'],'pg.tablespace.create'); + $misc->printMsg($msg); + + echo "<form action=\"tablespaces.php\" method=\"post\">\n"; + echo $misc->form; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"32\" name=\"formSpcname\" maxlength=\"{$data->_maxNameLen}\" value=\"", htmlspecialchars($_POST['formSpcname']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "\t\t<td class=\"data1\"><select name=\"formOwner\">\n"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "\t\t\t<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $_POST['formOwner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "\t\t</select></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strlocation']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"32\" name=\"formLoc\" value=\"", htmlspecialchars($_POST['formLoc']), "\" /></td>\n\t</tr>\n"; + // Comments (if available) + if ($data->hasSharedComments()) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td><textarea name=\"formComment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_POST['formComment']), "</textarea></td>\n\t</tr>\n"; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new tablespace in the cluster + */ + function doSaveCreate() { + global $data; + global $lang; + + // Check data + if (trim($_POST['formSpcname']) == '') + doCreate($lang['strtablespaceneedsname']); + elseif (trim($_POST['formLoc']) == '') + doCreate($lang['strtablespaceneedsloc']); + else { + // Default comment to blank if it isn't set + if (!isset($_POST['formComment'])) $_POST['formComment'] = null; + + $status = $data->createTablespace($_POST['formSpcname'], $_POST['formOwner'], $_POST['formLoc'], $_POST['formComment']); + if ($status == 0) + doDefault($lang['strtablespacecreated']); + else + doCreate($lang['strtablespacecreatedbad']); + } + } + + /** + * Show default list of tablespaces in the cluster + */ + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('server'); + $misc->printTabs('server','tablespaces'); + $misc->printMsg($msg); + + $tablespaces = $data->getTablespaces(); + + $columns = array( + 'database' => array( + 'title' => $lang['strname'], + 'field' => field('spcname') + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('spcowner') + ), + 'location' => array( + 'title' => $lang['strlocation'], + 'field' => field('spclocation') + ), + 'actions' => array( + 'title' => $lang['stractions'] + ) + ); + + if ($data->hasSharedComments()) { + $columns['comment'] = array( + 'title' => $lang['strcomment'], + 'field' => field('spccomment'), + ); + } + + + + $actions = array( + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tablespaces.php', + 'urlvars' => array ( + 'action' => 'edit', + 'tablespace' => field('spcname') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tablespaces.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'tablespace' => field('spcname') + ) + ) + ) + ), + 'privileges' => array( + 'content' => $lang['strprivileges'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'privileges.php', + 'urlvars' => array ( + 'subject' => 'tablespace', + 'tablespace' => field('spcname') + ) + ) + ) + ) + ); + + $misc->printTable($tablespaces, $columns, $actions, 'tablespaces-tablespaces', $lang['strnotablespaces']); + + $misc->printNavLinks(array ('create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tablespaces.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strcreatetablespace'] + )), 'tablespaces-tablespaces', get_defined_vars()); + } + + $misc->printHeader($lang['strtablespaces']); + $misc->printBody(); + + switch ($action) { + case 'save_create': + if (isset($_REQUEST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_REQUEST['cancel'])) doDefault(); + else doDrop(false); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'save_edit': + if (isset($_REQUEST['cancel'])) doDefault(); + else doSaveAlter(); + break; + case 'edit': + doAlter(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tblproperties.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tblproperties.php new file mode 100644 index 00000000..f73ce8b6 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/tblproperties.php @@ -0,0 +1,782 @@ +<?php + + /** + * List tables in a database + * + * $Id: tblproperties.php,v 1.92 2008/01/19 13:46:15 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * Function to save after altering a table + */ + function doSaveAlter() { + global $data, $lang, $_reload_browser, $misc; + + // For databases that don't allow owner change + if (!isset($_POST['owner'])) $_POST['owner'] = ''; + // Default tablespace to null if it isn't set + if (!isset($_POST['tablespace'])) $_POST['tablespace'] = null; + if (!isset($_POST['newschema'])) $_POST['newschema'] = null; + + $status = $data->alterTable($_POST['table'], $_POST['name'], $_POST['owner'], $_POST['newschema'], $_POST['comment'], $_POST['tablespace']); + if ($status == 0) { + // If table has been renamed, need to change to the new name and + // reload the browser frame. + if ($_POST['table'] != $_POST['name']) { + // Jump them to the new table name + $_REQUEST['table'] = $_POST['name']; + // Force a browser reload + $_reload_browser = true; + } + // If schema has changed, need to change to the new schema and reload the browser + if (!empty($_POST['newschema']) && ($_POST['newschema'] != $data->_schema)) { + // Jump them to the new sequence schema + $misc->setCurrentSchema($_POST['newschema']); + $_reload_browser = true; + } + doDefault($lang['strtablealtered']); + } + else + doAlter($lang['strtablealteredbad']); + } + + /** + * Function to allow altering of a table + */ + function doAlter($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('table'); + $misc->printTitle($lang['stralter'], 'pg.table.alter'); + $misc->printMsg($msg); + + // Fetch table info + $table = $data->getTable($_REQUEST['table']); + // Fetch all users + $users = $data->getUsers(); + // Fetch all tablespaces from the database + if ($data->hasTablespaces()) $tablespaces = $data->getTablespaces(true); + + if ($table->recordCount() > 0) { + + if (!isset($_POST['name'])) $_POST['name'] = $table->fields['relname']; + if (!isset($_POST['owner'])) $_POST['owner'] = $table->fields['relowner']; + if (!isset($_POST['newschema'])) $_POST['newschema'] = $table->fields['nspname']; + if (!isset($_POST['comment'])) $_POST['comment'] = $table->fields['relcomment']; + if ($data->hasTablespaces() && !isset($_POST['tablespace'])) $_POST['tablespace'] = $table->fields['tablespace']; + + echo "<form action=\"tblproperties.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name'], ENT_QUOTES), "\" /></td></tr>\n"; + + if ($data->isSuperUser()) { + echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "<td class=\"data1\"><select name=\"owner\">"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $_POST['owner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "</select></td></tr>\n"; + } + + if ($data->hasAlterTableSchema()) { + $schemas = $data->getSchemas(); + echo "<tr><th class=\"data left required\">{$lang['strschema']}</th>\n"; + echo "<td class=\"data1\"><select name=\"newschema\">"; + while (!$schemas->EOF) { + $schema = $schemas->fields['nspname']; + echo "<option value=\"", htmlspecialchars($schema), "\"", + ($schema == $_POST['newschema']) ? ' selected="selected"' : '', ">", htmlspecialchars($schema), "</option>\n"; + $schemas->moveNext(); + } + echo "</select></td></tr>\n"; + } + + // Tablespace (if there are any) + if ($data->hasTablespaces() && $tablespaces->recordCount() > 0) { + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strtablespace']}</th>\n"; + echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"tablespace\">\n"; + // Always offer the default (empty) option + echo "\t\t\t\t<option value=\"\"", + ($_POST['tablespace'] == '') ? ' selected="selected"' : '', "></option>\n"; + // Display all other tablespaces + while (!$tablespaces->EOF) { + $spcname = htmlspecialchars($tablespaces->fields['spcname']); + echo "\t\t\t\t<option value=\"{$spcname}\"", + ($spcname == $_POST['tablespace']) ? ' selected="selected"' : '', ">{$spcname}</option>\n"; + $tablespaces->moveNext(); + } + echo "\t\t\t</select>\n\t\t</td>\n\t</tr>\n"; + } + + echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<textarea rows=\"3\" cols=\"32\" name=\"comment\">", + htmlspecialchars($_POST['comment']), "</textarea></td></tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"alter\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + function doExport($msg = '') { + global $data, $misc; + global $lang; + + // Determine whether or not the table has an object ID + $hasID = $data->hasObjectID($_REQUEST['table']); + + $misc->printTrail('table'); + $misc->printTabs('table','export'); + $misc->printMsg($msg); + + echo "<form action=\"dataexport.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strformat']}</th><th class=\"data\" colspan=\"2\">{$lang['stroptions']}</th></tr>\n"; + // Data only + echo "<tr><th class=\"data left\" rowspan=\"", ($hasID) ? 2 : 1, "\">"; + echo "<input type=\"radio\" id=\"what1\" name=\"what\" value=\"dataonly\" checked=\"checked\" /><label for=\"what1\">{$lang['strdataonly']}</label></th>\n"; + echo "<td>{$lang['strformat']}</td>\n"; + echo "<td><select name=\"d_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "<option value=\"csv\">CSV</option>\n"; + echo "<option value=\"tab\">{$lang['strtabbed']}</option>\n"; + echo "<option value=\"html\">XHTML</option>\n"; + echo "<option value=\"xml\">XML</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + if ($hasID) { + echo "<tr><td><label for=\"d_oids\">{$lang['stroids']}</td><td><input type=\"checkbox\" id=\"d_oids\" name=\"d_oids\" /></td>\n</tr>\n"; + } + // Structure only + echo "<tr><th class=\"data left\"><input type=\"radio\" id=\"what2\" name=\"what\" value=\"structureonly\" /><label for=\"what2\">{$lang['strstructureonly']}</label></th>\n"; + echo "<td><label for=\"s_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"s_clean\" name=\"s_clean\" /></td>\n</tr>\n"; + // Structure and data + echo "<tr><th class=\"data left\" rowspan=\"", ($hasID) ? 3 : 2, "\">"; + echo "<input type=\"radio\" id=\"what3\" name=\"what\" value=\"structureanddata\" /><label for=\"what3\">{$lang['strstructureanddata']}</label></th>\n"; + echo "<td>{$lang['strformat']}</td>\n"; + echo "<td><select name=\"sd_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "<tr><td><label for=\"sd_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"sd_clean\" name=\"sd_clean\" /></td>\n</tr>\n"; + if ($hasID) { + echo "<tr><td><label for=\"sd_oids\">{$lang['stroids']}</label></td><td><input type=\"checkbox\" id=\"sd_oids\" name=\"sd_oids\" /></td>\n</tr>\n"; + } + echo "</table>\n"; + + echo "<h3>{$lang['stroptions']}</h3>\n"; + echo "<p><input type=\"radio\" id=\"output1\" name=\"output\" value=\"show\" checked=\"checked\" /><label for=\"output1\">{$lang['strshow']}</label>\n"; + echo "<br/><input type=\"radio\" id=\"output2\" name=\"output\" value=\"download\" /><label for=\"output2\">{$lang['strdownload']}</label></p>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"export\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"subject\" value=\"table\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strexport']}\" /></p>\n"; + echo "</form>\n"; + } + + function doImport($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('table'); + $misc->printTabs('table','import'); + $misc->printMsg($msg); + + // Check that file uploads are enabled + if (ini_get('file_uploads')) { + // Don't show upload option if max size of uploads is zero + $max_size = $misc->inisizeToBytes(ini_get('upload_max_filesize')); + if (is_double($max_size) && $max_size > 0) { + echo "<form action=\"dataimport.php\" method=\"post\" enctype=\"multipart/form-data\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strformat']}</th>\n"; + echo "\t\t<td><select name=\"format\">\n"; + echo "\t\t\t<option value=\"auto\">{$lang['strauto']}</option>\n"; + echo "\t\t\t<option value=\"csv\">CSV</option>\n"; + echo "\t\t\t<option value=\"tab\">{$lang['strtabbed']}</option>\n"; + if (function_exists('xml_parser_create')) { + echo "\t\t\t<option value=\"xml\">XML</option>\n"; + } + echo "\t\t</select></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strallowednulls']}</th>\n"; + echo "\t\t<td><label><input type=\"checkbox\" name=\"allowednulls[0]\" value=\"\\N\" checked=\"checked\" />{$lang['strbackslashn']}</label><br />\n"; + echo "\t\t<label><input type=\"checkbox\" name=\"allowednulls[1]\" value=\"NULL\" />NULL</label><br />\n"; + echo "\t\t<label><input type=\"checkbox\" name=\"allowednulls[2]\" value=\"\" />{$lang['stremptystring'] }</label></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strfile']}</th>\n"; + echo "\t\t<td><input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"{$max_size}\" />"; + echo "<input type=\"file\" name=\"source\" /></td>\n\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"import\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strimport']}\" /></p>\n"; + echo "</form>\n"; + } + } + else echo "<p>{$lang['strnouploads']}</p>\n"; + } + + /** + * Displays a screen where they can add a column + */ + function doAddColumn($msg = '') { + global $data, $misc, $_reload_browser; + global $lang; + + if (!isset($_REQUEST['stage'])) $_REQUEST['stage'] = 1; + + switch ($_REQUEST['stage']) { + case 1: + // Set variable defaults + if (!isset($_POST['field'])) $_POST['field'] = ''; + if (!isset($_POST['type'])) $_POST['type'] = ''; + if (!isset($_POST['array'])) $_POST['array'] = ''; + if (!isset($_POST['length'])) $_POST['length'] = ''; + if (!isset($_POST['default'])) $_POST['default'] = ''; + if (!isset($_POST['comment'])) $_POST['comment'] = ''; + + // Fetch all available types + $types = $data->getTypes(true, false, true); + $types_for_js = array(); + + $misc->printTrail('table'); + $misc->printTitle($lang['straddcolumn'], 'pg.column.add'); + $misc->printMsg($msg); + + echo "<script src=\"tables.js\" type=\"text/javascript\"></script>"; + echo "<form action=\"tblproperties.php\" method=\"post\">\n"; + + // Output table header + echo "<table>\n"; + echo "<tr><th class=\"data required\">{$lang['strname']}</th>\n<th colspan=\"2\" class=\"data required\">{$lang['strtype']}</th>\n"; + echo "<th class=\"data\">{$lang['strlength']}</th>\n"; + if ($data->hasCreateFieldWithConstraints()) + echo "<th class=\"data\">{$lang['strnotnull']}</th>\n<th class=\"data\">{$lang['strdefault']}</th>\n"; + echo "<th class=\"data\">{$lang['strcomment']}</th></tr>\n"; + + echo "<tr><td><input name=\"field\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['field']), "\" /></td>\n"; + echo "<td><select name=\"type\" id=\"type\" onchange=\"checkLengths(document.getElementById('type').value,'');\">\n"; + // Output any "magic" types. This came in with the alter column type so we'll check that + if ($data->hasMagicTypes()) { + foreach ($data->extraTypes as $v) { + $types_for_js[] = strtolower($v); + echo "\t<option value=\"", htmlspecialchars($v), "\"", + ($v == $_POST['type']) ? ' selected="selected"' : '', ">", + $misc->printVal($v), "</option>\n"; + } + } + while (!$types->EOF) { + $typname = $types->fields['typname']; + $types_for_js[] = $typname; + echo "\t<option value=\"", htmlspecialchars($typname), "\"", ($typname == $_POST['type']) ? ' selected="selected"' : '', ">", + $misc->printVal($typname), "</option>\n"; + $types->moveNext(); + } + echo "</select></td>\n"; + + // Output array type selector + echo "<td><select name=\"array\">\n"; + echo "\t<option value=\"\"", ($_POST['array'] == '') ? ' selected="selected"' : '', "></option>\n"; + echo "\t<option value=\"[]\"", ($_POST['array'] == '[]') ? ' selected="selected"' : '', ">[ ]</option>\n"; + echo "</select></td>\n"; + $predefined_size_types = array_intersect($data->predefined_size_types, $types_for_js); + $escaped_predef_types = array(); // the JS escaped array elements + foreach($predefined_size_types as $value) { + $escaped_predef_types[] = "'{$value}'"; + } + + echo "<td><input name=\"length\" id=\"lengths\" size=\"8\" value=\"", + htmlspecialchars($_POST['length']), "\" /></td>\n"; + // Support for adding column with not null and default + if ($data->hasCreateFieldWithConstraints()) { + echo "<td><input type=\"checkbox\" name=\"notnull\"", + (isset($_REQUEST['notnull'])) ? ' checked="checked"' : '', " /></td>\n"; + echo "<td><input name=\"default\" size=\"20\" value=\"", + htmlspecialchars($_POST['default']), "\" /></td>\n"; + } + echo "<td><input name=\"comment\" size=\"40\" value=\"", + htmlspecialchars($_POST['comment']), "\" /></td></tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"add_column\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + if (!$data->hasCreateFieldWithConstraints()) { + echo "<input type=\"hidden\" name=\"default\" value=\"\" />\n"; + } + echo "<input type=\"submit\" value=\"{$lang['stradd']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + echo "<script type=\"text/javascript\">predefined_lengths = new Array(". implode(",",$escaped_predef_types) .");checkLengths(document.getElementById('type').value,'');</script>\n"; + break; + case 2: + // Check inputs + if (trim($_POST['field']) == '') { + $_REQUEST['stage'] = 1; + doAddColumn($lang['strcolneedsname']); + return; + } + if (!isset($_POST['length'])) $_POST['length'] = ''; + $status = $data->addColumn($_POST['table'], $_POST['field'], + $_POST['type'], $_POST['array'] != '', $_POST['length'], isset($_POST['notnull']), + $_POST['default'], $_POST['comment']); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strcolumnadded']); + } + else { + $_REQUEST['stage'] = 1; + doAddColumn($lang['strcolumnaddedbad']); + return; + } + break; + default: + echo "<p>{$lang['strinvalidparam']}</p>\n"; + } + } + + /** + * Show confirmation of drop column and perform actual drop + */ + function doDrop($confirm) { + global $data, $database, $misc, $_reload_browser; + global $lang; + + if ($confirm) { + $misc->printTrail('column'); + $misc->printTitle($lang['strdrop'], 'pg.column.drop'); + + echo "<p>", sprintf($lang['strconfdropcolumn'], $misc->printVal($_REQUEST['column']), + $misc->printVal($_REQUEST['table'])), "</p>\n"; + + + echo "<form action=\"tblproperties.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"column\" value=\"", htmlspecialchars($_REQUEST['column']), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\"> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->dropColumn($_POST['table'], $_POST['column'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strcolumndropped']); + } + else + doDefault($lang['strcolumndroppedbad']); + } + + } + + function doTree() { + global $misc, $data; + + $columns = $data->getTableAttributes($_REQUEST['table']); + $reqvars = $misc->getRequestVars('column'); + + $attrs = array ( + 'text' => field('attname'), + 'action' => url('colproperties.php', + $reqvars, + array( + 'table' => $_REQUEST['table'], + 'column' => field('attname') + ) + ), + 'icon' => 'Column', + 'iconAction' => url('display.php', + $reqvars, + array( + 'table' => $_REQUEST['table'], + 'column' => field('attname'), + 'query' => replace( + 'SELECT "%column%", count(*) AS "count" FROM "%table%" GROUP BY "%column%" ORDER BY "%column%"', + array ( + '%column%' => field('attname'), + '%table%' => $_REQUEST['table'] + ) + ) + ) + ), + 'toolTip'=> field('comment') + ); + + $misc->printTree($columns, $attrs, 'tblcolumns'); + + exit; + } + + if ($action == 'tree') doTree(); + + /** + * Show default list of columns in the table + */ + function doDefault($msg = '') { + global $data, $conf, $misc; + global $lang; + + function attPre(&$rowdata, $actions) { + global $data; + $rowdata->fields['+type'] = $data->formatType($rowdata->fields['type'], $rowdata->fields['atttypmod']); + $attname = $rowdata->fields['attname']; + $table = $_REQUEST['table']; + $data->fieldClean($attname); + $data->fieldClean($table); + + $actions['browse']['attr']['href']['urlvars']['query'] = "SELECT \"{$attname}\", count(*) AS \"count\" + FROM \"{$table}\" GROUP BY \"{$attname}\" ORDER BY \"{$attname}\""; + + return $actions; + } + + $misc->printTrail('table'); + $misc->printTabs('table','columns'); + $misc->printMsg($msg); + + // Get table + $tdata = $data->getTable($_REQUEST['table']); + // Get columns + $attrs = $data->getTableAttributes($_REQUEST['table']); + // Get constraints keys + $ck = $data->getConstraintsWithFields($_REQUEST['table']); + + // Show comment if any + if ($tdata->fields['relcomment'] !== null) + echo '<p class="comment">', $misc->printVal($tdata->fields['relcomment']), "</p>\n"; + + $columns = array( + 'column' => array( + 'title' => $lang['strcolumn'], + 'field' => field('attname'), + 'url' => "colproperties.php?subject=column&{$misc->href}&table=".urlencode($_REQUEST['table'])."&", + 'vars' => array('column' => 'attname'), + ), + 'type' => array( + 'title' => $lang['strtype'], + 'field' => field('+type'), + ), + 'notnull' => array( + 'title' => $lang['strnotnull'], + 'field' => field('attnotnull'), + 'type' => 'bool', + 'params'=> array('true' => 'NOT NULL', 'false' => ''), + ), + 'default' => array( + 'title' => $lang['strdefault'], + 'field' => field('adsrc'), + ), + 'keyprop' => array( + 'title' => $lang['strconstraints'], + 'class' => 'constraint_cell', + 'field' => field('attname'), + 'type' => 'callback', + 'params'=> array( + 'function' => 'cstrRender', + 'keys' => $ck->getArray() + ) + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('comment') + ), + ); + + function cstrRender($s, $p) { + global $misc, $data; + + $str =''; + foreach ($p['keys'] as $k => $c) { + + if (is_null($p['keys'][$k]['consrc'])) { + $atts = $data->getAttributeNames($_REQUEST['table'], explode(' ', $p['keys'][$k]['indkey'])); + $c['consrc'] = ($c['contype'] == 'u' ? "UNIQUE (" : "PRIMARY KEY (") . join(',', $atts) . ')'; + } + + if ($c['p_field'] == $s) + switch ($c['contype']) { + case 'p': + $str .= '<a href="constraints.php?'. $misc->href ."&table=". urlencode($c['p_table']) ."&schema=". urlencode($c['p_schema']) ."\"><img src=\"". + $misc->icon('PrimaryKey') .'" alt="[pk]" title="'. htmlentities($c['consrc'], ENT_QUOTES, 'UTF-8') .'" /></a>'; + break; + case 'f': + $str .= '<a href="tblproperties.php?'. $misc->href ."&table=". urlencode($c['f_table']) ."&schema=". urlencode($c['f_schema']) ."\"><img src=\"". + $misc->icon('ForeignKey') .'" alt="[fk]" title="'. htmlentities($c['consrc'], ENT_QUOTES, 'UTF-8') .'" /></a>'; + break; + case 'u': + $str .= '<a href="constraints.php?'. $misc->href ."&table=". urlencode($c['p_table']) ."&schema=". urlencode($c['p_schema']) ."\"><img src=\"". + $misc->icon('UniqueConstraint') .'" alt="[uniq]" title="'. htmlentities($c['consrc'], ENT_QUOTES, 'UTF-8') .'" /></a>'; + break; + case 'c': + $str .= '<a href="constraints.php?'. $misc->href ."&table=". urlencode($c['p_table']) ."&schema=". urlencode($c['p_schema']) ."\"><img src=\"". + $misc->icon('CheckConstraint') .'" alt="[check]" title="'. htmlentities($c['consrc'], ENT_QUOTES, 'UTF-8') .'" /></a>'; + } + } + + return $str; + } + + $actions = array( + 'browse' => array( + 'title' => $lang['strbrowse'], + 'url' => "display.php?{$misc->href}&subject=column&return=table&table=".urlencode($_REQUEST['table']).'&', + 'vars' => array('column' => 'attname'), + ), + 'alter' => array( + 'title' => $lang['stralter'], + 'url' => "colproperties.php?action=properties&{$misc->href}&table=".urlencode($_REQUEST['table'])."&", + 'vars' => array('column' => 'attname'), + ), + 'privileges' => array( + 'title' => $lang['strprivileges'], + 'url' => "privileges.php?subject=column&{$misc->href}&table=".urlencode($_REQUEST['table'])."&", + 'vars' => array('column' => 'attname'), + ), + 'drop' => array( + 'title' => $lang['strdrop'], + 'url' => "tblproperties.php?action=confirm_drop&{$misc->href}&table=".urlencode($_REQUEST['table'])."&", + 'vars' => array('column' => 'attname'), + ), + ); + + $actions = array( + 'browse' => array( + 'content' => $lang['strbrowse'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array ( + 'table' => $_REQUEST['table'], + 'subject' => 'column', + 'return' => 'table', + 'column' => field('attname') + ) + ) + ) + ), + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'colproperties.php', + 'urlvars' => array ( + 'subject' => 'column', + 'action' => 'properties', + 'table' => $_REQUEST['table'], + 'column' => field('attname') + ) + ) + ) + ), + 'privileges' => array( + 'content' => $lang['strprivileges'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'privileges.php', + 'urlvars' => array ( + 'subject' => 'column', + 'table' => $_REQUEST['table'], + 'column' => field('attname') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'tblproperties.php', + 'urlvars' => array ( + 'subject' => 'column', + 'action' => 'confirm_drop', + 'table' => $_REQUEST['table'], + 'column' => field('attname') + ) + ) + ) + ), + ); + + $misc->printTable($attrs, $columns, $actions, 'tblproperties-tblproperties', null, 'attPre'); + + $navlinks = array ( + 'browse' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'], + 'subject' => 'table', + 'return' => 'table' + ) + ) + ), + 'content' => $lang['strbrowse'] + ), + 'select' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confselectrows', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['strselect'] + ), + 'insert' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confinsertrow', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['strinsert'] + ), + 'empty' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confirm_empty', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['strempty'] + ), + 'drop' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tables.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'], + ) + ) + ), + 'content' => $lang['strdrop'] + ), + 'addcolumn' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tblproperties.php', + 'urlvars' => array ( + 'action' => 'add_column', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['straddcolumn'] + ), + 'alter' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'tblproperties.php', + 'urlvars' => array ( + 'action' => 'confirm_alter', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['stralter'] + ) + ); + $misc->printNavLinks($navlinks, + 'tblproperties-tblproperties' + , get_defined_vars() + ); + + } + + $misc->printHeader($lang['strtables'] . ' - ' . $_REQUEST['table']); + $misc->printBody(); + + switch ($action) { + case 'alter': + if (isset($_POST['alter'])) doSaveAlter(); + else doDefault(); + break; + case 'confirm_alter': + doAlter(); + break; + case 'import': + doImport(); + break; + case 'export': + doExport(); + break; + case 'add_column': + if (isset($_POST['cancel'])) doDefault(); + else doAddColumn(); + break; + case 'properties': + if (isset($_POST['cancel'])) doDefault(); + else doProperties(); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/bootstrap/global.css b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/bootstrap/global.css new file mode 100644 index 00000000..ab8c7613 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/bootstrap/global.css @@ -0,0 +1,321 @@ +@import url(../global.css); +@import url(//maxcdn.bootstrapcdn.com/bootstrap/3.2.2/css/bootstrap.min.css); +/** + * Default style sheet + */ +frame {border-right: 1px solid #CCC;} +.label { + color:#336699 !important; + font-size: 12px; +} + +/** ELEMENTS */ +body { + background-color: #FFFFFF; + margin: 4px; + padding: 0px; +} + +body.browser { + background-color: #FFFFFF !important; + font-size: 12px !important; /*1em;*/ + border-right: 1px #c0c0c0; +} +body.bottombar { + background-color: #f9f9f9; + margin: 0px; + padding: 0px; + /*font-size: smaller; /*1em;*/ + text-align: left; +} +h2 { + color: #336699 !important + + font-weight: bold; + border: 2px solid #DFFBFD; + background-color: #FDFDFD; + padding: 2px 1em; + margin: 0 0 1ex 0; +} +h3 { + color: #336699 !important; + font-size: small; + + font-weight: bold; +} +table.error {background-color: #F9FFFF} +table.error td {background-color: #F9FFFF} +table.navbar {background-color: #F9FFFF} +table.navbar td { + height: 25px; + color: #000000; + background-color: #FDFDFD; + text-align: center; + + font-size: smaller; /* 0.9em */ + font-weight: bold; +} +table.navbar td.active {background-color: #F9FFFF} +th.data { + color: #000000; + background-color: #F9FFFF; + font-size: smaller; /* 0.9em */ + padding:3px; +} +th.data a:active, th.data a:link, th.data a:visited, th.data a:hover { + font-weight: bold; +} +td.dat { + color: #ff0; + text-align: center; +} +th.required {text-decoration: underline} +td.topbar { + background-color: #f9f9f9; + margin: 0px 0px; + padding: 0px; + + font-size: smaller; /*0.8em;*/ + text-align: left; +} + +td.data1 { + padding:2px; +} + +ul.toplink,ul.navlink { + list-style: none; + margin:0;padding:0; +} +ul.navlink{margin:20px 0} +ul.toplink li, ul.navlink li { + display:inline; + border-left:1px solid #000000; + margin:0;padding: 0 2px 0 5px; +} +ul.toplink li:first-child, ul.navlink li:first-child { + border: none; + padding-left:0; +} +tr.data1, tr.data2, tr.data3 { + color: #000000; + + font-size: smaller; /*0.8em;*/ +} + +tr.data1 td, tr.data2 td, tr.data3 td { + padding:2px 4px; + border: 1px solid #EEE; +} + +tr.data1 td.opbutton1, tr.data2 td.opbutton2, tr.data3 td.opbutton3 { + padding:2px 4px; + border: 0 none; + white-space: nowrap; + border-radius:2px; +} + +tr.data1 td.opbutton1 a, tr.data2 td.opbutton2 a, tr.data3 td.opbutton3 a { +-webkit-background-clip: border-box; +-webkit-background-origin: padding-box; +-webkit-background-size: auto; +-webkit-user-select: none; +background-attachment: scroll; +background-clip: border-box; +background-color: rgb(66, 139, 202); +background-image: none; +background-origin: padding-box; +background-size: auto; +border: 1px solid #999; +border-radius:3px; + +cursor: pointer; +display: inline-block; +font-size: 11px; +font-weight: normal; +height: 22px; +line-height: 18px; +margin-bottom: 0px; +padding-bottom: 1px; +padding-left: 5px; +padding-right: 5px; +padding-top: 1px; +text-align: center; +text-decoration: none; +vertical-align: middle; +white-space: nowrap; +color:#fff !important; +} + + +tr.data1:hover, tr.data2:hover, tr.data3:hover { + background-color: #DDD; +} +.row1, .data1 { + background-color: #FFF; + text-align: left; +} +.row2, .data2 { + background-color: #F9FFFF; + text-align: left; +} +.row3, .data3 {background-color: #FDFDFD} +td.opbutton1 { + color: #000000; + border-top: 1px solid #FFFFFF; + border-right: 1px solid #706D41; + border-bottom: 1px solid #706D41; + border-left: 1px solid #FFFFFF; + cursor: pointer; + + font-size: smaller; /*0.8em;*/ + padding-left: 6px; + padding-right: 6px; + text-align: center; +} +td.opbutton2 { + color: #000000; + border-top: 1px solid #FFFFFF; + border-right: 1px solid #706D41; + border-bottom: 1px solid #706D41; + border-left: 1px solid #FFFFFF; + cursor: pointer; + + font-size: smaller; /*0.8em;*/ + padding-left: 6px; + padding-right: 6px; + text-align: center; +} +.topbar {border: 2px solid #f9f9f9} +.topbar, .topbar * { + background-color: #f9f9f9; +} +.topbar .platform, .topbar .host, .topbar .username { + font-weight: bold; +} +.topbar, .trail { + margin-bottom: 2px; +} +.topbar, .trail, .tab { + padding: 2px 1ex; + /*font-size: smaller;*/ +} +.trail, .tab { + border: 2px solid #DFFBFD; + background-color: #FDFDFD; +} +.trail .crumb {background-color: #FDFDFD} +.crumb, .tab { + vertical-align: top; +} +.crumb .icon { + vertical-align: middle; + margin: 0 2px; +} +table.tabs { + width: 100%; + border-collapse: collapse; + margin-bottom: 1ex; +} +.tab {text-align: center} +.tabs .active {background-color: #F9FFFF} +.tab .icon {display: block} +a:active { + color: #989973; + + font-weight: normal; + text-decoration: underline; +} +a,a:link { + color: #336699; + + text-decoration: none; +} +a:visited { + color: #336699; + + text-decoration: none; +} +a:hover { + color: #cc0000; + + text-decoration: none; +} +a.navlink:link, a.toplink:link, ul.navlink li a, ul.toplink li a { + color: #336699; + + font-weight: bold; + text-decoration: none; +} +a.navlink:visited, a.toplink:visited, ul.navlink li a:visited, ul.toplink li a:visited { + color: #336699; + + font-weight: bold; + text-decoration: none; +} +a.navlink:hover, a.toplink:hover, ul.navlink li a:hover, ul.toplink li a:hover { + color: #cc0000; + + font-weight: bold; + text-decoration: none; +} +a.navlink:active, a.toplink:active, ul.navlink li a:active, ul.toplink li a:active { + color: #cc0000; + + font-weight: bold; + text-decoration: none; +} +.active a {font-weight: bold} +a.help { + color: #E68800; + font-size: smaller; + vertical-align: super; + text-decoration: none; +} +pre {font-size: 110%} +pre.data { + + font-size: 100%; +} +pre.error { + font-family: "Lucida Console", "Courier New", "DejaVu Sans Mono", monospace; + font-size: 120%; +} +.intro li {font-weight: bold} +.ac_field {border:1px solid #D9D95F} +.bottom_link { + background: #eee; + border-top: 1px dotted #999; + border-left: 1px dotted #999; + font-size: smaller; +} + +/** FK browsing **/ +div#root > div.fk { + border: 1px solid #000; +} +div.fk { + background: #fff; + border-left: 1px solid #000; + padding: 5px; +} +div.logo { + background-color: #f9f9f9; + margin: 0px; + padding: 0px; + + background-size: 99% 90%; + font-size: smaller; /* 1em; */ + border: none; + margin-bottom: 2px; + background-image: url('../../images/themes/bootstrap/title.png'); + background-repeat: none; + height: 50px; +} +div.logo a { + display: block; + height: 100%; + color: transparent; +} + +.opbutton2, .opbutton1 {width:50px;} diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/bootstrap/title.png b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/bootstrap/title.png new file mode 100644 index 00000000..44f5c7a1 Binary files /dev/null and b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/bootstrap/title.png differ diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/cappuccino/global.css b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/cappuccino/global.css new file mode 100644 index 00000000..5d1a3aa7 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/cappuccino/global.css @@ -0,0 +1,197 @@ +@import url(../global.css); +/** + * cappuccino style sheet + */ +/* ELEMENTS */ +body { + background-color: #ded9c9; + margin: 0; + padding: 0; + font-family: arial; + font-size: 0.9em; /*0.8em;*/ +} +body > * { margin-left: 20px } +body.browser { + background-color: #363330; + font-size: 0.9em; + border-right: 1px dashed #887f5c; + color: #fff; +} +body.browser > * { margin: 0 } +body.browser div.webfx-tree-row:hover { background: #524a42} +h1 {font-size: 1.5em} +h2 { + color: #fff; + font-size: 1em; + font-weight: bold; + border: 2px solid #363330; + background-color: #363330; + padding: 2px 1em; + margin-top: 2em; + margin-bottom: 2em; +} +h3 { + color: #111; + font-weight: bold; +} +table { + border: 0; + border-collapse: collapse; +} +td, th { + padding: 1px 8px; +} +a { + color: #2d547b; + text-decoration: none; +} +a:hover { + color: #cc0000; + text-decoration: underline; +} +input[type=checkbox], input[type=password], input[type=text], input[type=radio] { + background: #ded4b3; + border: 1px solid #887f5c; +} +input[type=submit], input[type=reset], input[type=button], select { + background: #c4ba95 url('../../images/themes/cappuccino/inputbckg.png') repeat-x top left; + border: 1px solid #887f5c; +} +table.error { + background-color: #dec9d0; + border: 2px solid #de7c9c; + margin: auto; +} +th.data { + color: #fff; + background-color: #363330; + border: 1px dotted #887f5c; + font-size: 0.9em; + padding: 3px 7px; +} +th.required {text-decoration: underline} +.topbar, .trail { + color: #fff; + background-color: #363330; + margin: 0; + padding: 0; + text-align: left; +} +.topbar a, .trail a, body.browser a, th.data a { + color: #a8aac2; +} +.topbar .platform, .topbar .host, .topbar .username { + font-weight: bold; +} +.topbar, .trail, .tab { + padding: 2px 1ex; +} +.trail td {padding: 2px} +.crumb .icon {margin-right: 5px} +table.tabs { + width: 100%; + border-collapse: collapse; + margin: 20px 0 40px 0; +} +.tab { + text-align: center; + vertical-align: top; + font-size: 0.8em; + border: 1px solid #887f5c; + background-color: #c8c0a2; + padding: 2px 10px; + white-space: nowrap; +} +.tab:hover {background-color: #b7af8d} +.tabs .active { + border-bottom: none; + background-color: #ded9c9; +} +.tab .icon { + display: block; +} +.active a {font-weight: bold} +a:hover {text-decoration: underline} +ul.toplink, ul.navlink { + list-style: none; + margin:0;padding:0; +} +ul.navlink{margin:20px 0 20px 20px} +ul.toplink li, ul.navlink li { + display:inline; + border-left:1px solid #000000; + margin:0;padding: 0 2px 0 5px; +} +ul.toplink li:first-child, ul.navlink li:first-child { + border: none; + padding-left:0; +} +tr.data1, tr.data2, tr.data3 { + color: #000000; + font-size: 0.8em; + border: 1px dotted #887f5c; +} +tr.data1:hover, tr.data2:hover, tr.data3:hover { + background-color: #c8c0a2; +} +.row1, .data1 { + background-color: #d8d2b9; + text-align: left; +} +.row2, .data2 { + background-color: #ded9c9; + text-align: left; +} +.row3, .data3 {background-color: #d4c8a1} +td.opbutton1, td.opbutton2 { + color: #000000; + cursor: pointer; + padding: 2px 6px; + text-align: center; + border: 1px dotted #887f5c; +} +td.opbutton1:hover, td.opbutton2:hover { + background-color: #b7af8d; +} +a.help { + color: #A46600; + vertical-align: super; + text-decoration: none; + font-size: 0.8em; +} +pre {font-size: 110%} +pre.data {font-size: 100%} +pre.error {font-size: 120%} + +.intro li {font-weight: bold} +.ac_field { + border:1px solid #363330; + background: url('../../images/themes/cappuccino/openListe.png') no-repeat right; + padding-right: 20px; +} +.bottom_link { + background: #b7af8d; + border-top: 1px dotted #887f5c; + border-left: 1px dotted #887f5c; +} + +/** FK browsing **/ +div.fk { + background: #fff; + border-left: 1px dotted #000; + padding: 5px; +} +div.logo { + margin: 0px; + padding: 0px; + border: none; + margin-bottom: 15px; + background-image: url('../../images/themes/cappuccino/title.png'); + background-repeat: no-repeat; + height: 50px; +} +div.logo a { + display: block; + height: 100%; + color: transparent; +} diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/default/global.css b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/default/global.css new file mode 100644 index 00000000..c28cd9f6 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/default/global.css @@ -0,0 +1,266 @@ +@import url(../global.css); +/** + * Default style sheet + */ + +/** ELEMENTS */ +body { + background-color: #FFFFFF; + margin: 4px; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + padding: 0px; + font-size: smaller; /*0.8em;*/ +} +body.browser { + background-color: #efefef; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /*1em;*/ + border-right: 1px dashed #c0c0c0; +} +body.bottombar { + background-color: #CECF9C; + margin: 0px; + padding: 0px; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /*1em;*/ + text-align: left; +} +h2 { + color: #666633; + font-size: medium; /*1.3em;*/ + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-weight: bold; + border: 2px solid #E6E6CC; + background-color: #F3F3E9; + padding: 2px 1em; + margin: 0 0 1ex 0; +} +h3 { + color: #666633; + font-size: small; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-weight: bold; +} +table.error {background-color: #E6E6CC} +table.error td {background-color: #E6E6CC} +table.navbar {background-color: #E6E6CC} +table.navbar td { + height: 25px; + color: #000000; + background-color: #F3F3E9; + text-align: center; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /* 0.9em */ + font-weight: bold; +} +table.navbar td.active {background-color: #E6E6CC} +th.data { + color: #000000; + background-color: #E6E6CC; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /* 0.9em */ +} +th.data a:active, th.data a:link, th.data a:visited, th.data a:hover { + font-weight: bold; +} +td.dat { + color: #ff0; + text-align: center; +} +th.required {text-decoration: underline} +td.topbar { + background-color: #CECF9C; + margin: 0px 0px; + padding: 0px; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /*0.8em;*/ + text-align: left; +} +ul.toplink,ul.navlink { + list-style: none; + margin:0;padding:0; +} +ul.navlink{margin:20px 0} +ul.toplink li, ul.navlink li { + display:inline; + border-left:1px solid #000000; + margin:0;padding: 0 2px 0 5px; +} +ul.toplink li:first-child, ul.navlink li:first-child { + border: none; + padding-left:0; +} +tr.data1, tr.data2, tr.data3 { + color: #000000; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /*0.8em;*/ +} +tr.data1:hover, tr.data2:hover, tr.data3:hover { + background-color: #DDD; +} +.row1, .data1 { + background-color: #F3F3E9; + text-align: left; +} +.row2, .data2 { + background-color: #E6E6CC; + text-align: left; +} +.row3, .data3 {background-color: #F3F3E9} +td.opbutton1 { + color: #000000; + border-top: 1px solid #FFFFFF; + border-right: 1px solid #706D41; + border-bottom: 1px solid #706D41; + border-left: 1px solid #FFFFFF; + cursor: pointer; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /*0.8em;*/ + padding-left: 6px; + padding-right: 6px; + text-align: center; +} +td.opbutton2 { + color: #000000; + border-top: 1px solid #FFFFFF; + border-right: 1px solid #706D41; + border-bottom: 1px solid #706D41; + border-left: 1px solid #FFFFFF; + cursor: pointer; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /*0.8em;*/ + padding-left: 6px; + padding-right: 6px; + text-align: center; +} +.topbar {border: 2px solid #CECF9C} +.topbar, .topbar * { + background-color: #CECF9C; +} +.topbar .platform, .topbar .host, .topbar .username { + font-weight: bold; +} +.topbar, .trail { + margin-bottom: 2px; +} +.topbar, .trail, .tab { + padding: 2px 1ex; + font-size: smaller; +} +.trail, .tab { + border: 2px solid #E6E6CC; + background-color: #F3F3E9; +} +.trail .crumb {background-color: #F3F3E9} +.crumb, .tab { + vertical-align: top; +} +.crumb .icon { + vertical-align: middle; + margin: 0 2px; +} +table.tabs { + width: 100%; + border-collapse: collapse; + margin-bottom: 1ex; +} +.tab {text-align: center} +.tabs .active {background-color: #E6E6CC} +.tab .icon {display: block} +a:active { + color: #989973; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-weight: normal; + text-decoration: underline; +} +a,a:link { + color: #336699; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + text-decoration: none; +} +a:visited { + color: #336699; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + text-decoration: none; +} +a:hover { + color: #cc0000; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + text-decoration: none; +} +a.navlink:link, a.toplink:link, ul.navlink li a, ul.toplink li a { + color: #336699; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-weight: bold; + text-decoration: none; +} +a.navlink:visited, a.toplink:visited, ul.navlink li a:visited, ul.toplink li a:visited { + color: #336699; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-weight: bold; + text-decoration: none; +} +a.navlink:hover, a.toplink:hover, ul.navlink li a:hover, ul.toplink li a:hover { + color: #cc0000; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-weight: bold; + text-decoration: none; +} +a.navlink:active, a.toplink:active, ul.navlink li a:active, ul.toplink li a:active { + color: #cc0000; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-weight: bold; + text-decoration: none; +} +.active a {font-weight: bold} +a.help { + color: #E68800; + font-size: smaller; + vertical-align: super; + text-decoration: none; +} +pre {font-size: 110%} +pre.data { + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: 100%; +} +pre.error { + font-family: "Lucida Console", "Courier New", "DejaVu Sans Mono", monospace; + font-size: 120%; +} +.intro li {font-weight: bold} +.ac_field {border:1px solid #D9D95F} +.bottom_link { + background: #eee; + border-top: 1px dotted #999; + border-left: 1px dotted #999; + font-size: smaller; +} + +/** FK browsing **/ +div#root > div.fk { + border: 1px solid #000; +} +div.fk { + background: #fff; + border-left: 1px solid #000; + padding: 5px; +} +div.logo { + background-color: #CECF9C; + margin: 0px; + padding: 0px; + font-family: arial, tahoma, verdana, helvetica, sans-serif, serif; + font-size: smaller; /* 1em; */ + border: none; + border-bottom: 2px solid #000000; + margin-bottom: 2px; + background-image: url('../../images/themes/default/title.png'); + background-repeat: no-repeat; + height: 50px; +} +div.logo a { + display: block; + height: 100%; + color: transparent; +} diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/global.css b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/global.css new file mode 100644 index 00000000..6e62f0f5 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/global.css @@ -0,0 +1,111 @@ +/** + * This is hte mandatory CSS file to include on top of every CSS theme file + **/ + +img { border: none; } +p.message {color: blue} +p.comment {font-style: italic} +.left{text-align: left} +.pre {white-space: pre} + +.arg_icon { + padding-right:5pt; + padding-left:5pt; +} + +/** Browser Tree using XLoadTree 2 **/ +body.browser { + height: 100%; + margin: 0px; + padding: 0px; + text-align: left; +} +.refreshTree { + float:right; + text-align:right; + padding: 0 3px; +} +.webfx-tree-row {white-space: nowrap} +.webfx-tree-children { + background-repeat: repeat-y; + background-position-y: 1px !important; /* IE only */ +} +.webfx-tree-row img {vertical-align: middle} +.webfx-tree-item-label {margin-left: 0.5ex} +.webfx-tree-icon {margin-left: 1px} +.webfx-tree-hide-root {display: none} + +/** auto-complete on insert **/ +#fkbg { + display:none; + position:fixed; + top:0;left:0; + width:100%; + height:100%; + z-index:10; +} +#fklist { + display:none; + position:absolute; + background:#fff; + border:1px solid #000; + overflow:auto; + z-index:15; +} +#fklist table { + border-collapse:collapse; + border: 1px solid #aaa; +} +#fklist th {border: 1px solid #aaa} +#fklist td, +#fklist th { + padding: 3px 10px; + border-right: 1px solid #aaa; + font-size: 12px; +} +#fklist td a { + display:block; + color:#000; +} +#fklist td a.fkval, p.errmsg { + color:red; +} +.ac_values {width:100%} + +/** bottom link back to top **/ +.bottom_link { + position: fixed; + bottom: 0; + right: 0; + margin: 0; + padding: 4px; + background: #eee; + border-top: 1px dotted #999; + border-left: 1px dotted #999; + font-size: smaller; +} + +/** FK browsing **/ +div#root { + position: absolute; +} +div.fk { + margin-left: 20px; +} +div#fkcontainer { + margin: 0; + position: relative; + width: 100%; + background: none; + border:0px; +} +div.fk_value { + display:inline-block; +} +.highlight { + background-color: #FFFF00; +} +/** Syntax highlighting **/ +.comment {color: #008080} +.keyword {color: #FF8000} +.literal {color: #808080} diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/gotar/global.css b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/gotar/global.css new file mode 100644 index 00000000..5b693189 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/gotar/global.css @@ -0,0 +1,262 @@ +@import url(../global.css); +/** + * Default style sheet + */ + +/** ELEMENTS */ + +body { + background-color: #336; + margin: 0px; + padding: 0px; + font-size: smaller; /*0.8em;*/ + font-family: sans-serif; + color: #fff; +} +p { + color: #fff; +} +p.comment, td.comment_cell { + color: #aff; +} +table { + border:1px gray solid; +} +body.browser { + background-color: #447; + color:#4bf; + font-size: smaller; /*1em;*/ + border-right: 1px dashed #c0c0c0; +} +body.browser a { + color:#fff; +} +body.browser a:hover { + color:#cde; +} +body.browser div.webfx-tree-row:hover { background:#88d } +h2 { + color: #fff; + font-size: medium; /*1.3em;*/ + font-weight: bold; + border: 0; + background-color: #558; + padding: 0; + margin: 0; + text-align:center; +} +h3 { + color: #eee; + font-size: small; + font-weight: bold; +} +table.error {background-color: #f00} +table.error td {background-color: #f84} +th.data { + color: #ada; + background-color: #241; + font-size: smaller; /* 0.9em */ +} +th.data a:active, th.data a:link, th.data a:visited, th.data a:hover { + font-weight: bold; + display:block; +} +td.dat { + color: #ff0; + text-align: center; +} +th.required {text-decoration: underline} +ul.toplink,ul.navlink { + list-style: none; + margin:0;padding:0; +} +ul.navlink{margin:20px 0} +ul.toplink li, ul.navlink li { + display:inline; + border-left:1px solid #eee; + margin:0;padding: 0 2px 0 5px; +} +ul.toplink li:first-child, ul.navlink li:first-child { + border: none; + padding-left:0; +} +tr.data1, tr.data2, tr.data3 { + color: #eed; + font-family: sans-serif; + font-size: smaller; /*0.8em;*/ +} +tr.data1:hover, tr.data2:hover, tr.data3:hover { + background-color: #39663e; +} +.row1, .data1 { + background-color: #2b482e; + text-align: left; +} +input, textarea, select { + border:1px #200 solid; + background:#ddf; +} +input, textarea, select { + color:#210; +} +td label { + display:table; + text-align:center; + height:100%; + width:100%; + border-collapse: collapse; +} +td label span { + display:table-cell; + vertical-align:middle; +} +.data1 select, .data2 select { + font-weight:bold; +} +p input:focus, .data input:focus, .data1 input:focus, .data2 input:focus, textarea:focus, .data1 select, .data2 select { +/* background:#bbf; */ + background:#eef; + color:#000; +} +.row2, .data2 { + background-color: #1a3f1e; + text-align: left; +} +td.opbutton1 { + border: 1px solid #484; + font-size: smaller; /*0.8em;*/ + text-align: center; +} +td.opbutton2 { + border: 1px solid #484; + font-size: smaller; /*0.8em;*/ + text-align: center; +} +td.opbutton1 a, td.opbutton2 a { + padding-left:6px; + padding-right:6px; +} +.topbar { border: 0 } +.topbar, .topbar *, .trail, .tab, .crumb { + border: 0; + background: #336; +} +.topbar .platform, .topbar .host, .topbar .username { + font-weight: bold; +} +.topbar, .trail, .tab { + padding: 2px 1ex; + font-size: smaller; + color: #ddf; +} +.crumb, .tab { + vertical-align: top; +} +.crumb .icon { + vertical-align: middle; + margin: 0; +} +table.tabs { + width: 100%; + border-collapse: collapse; + margin-bottom: 1ex; +} +.tab {text-align: center} +.tabs .active {background-color: #449} +.tab .icon {display: block} +tr,td { height:100% } +td:not(.constraint_cell) a:not(.help), th a { display:inline-block; height:100% } /* vertical-align:middle doesn't work for block elements, CSS sux */ +td.crumb a, td.tab a { width:90% } +tr.data1 a, tr.data2 a { width:100% } +td.opbutton1 a, td.opbutton2 a { width:inherit } +td a.help { display:inline; position:absolute; width:10px; } +a.pagenav { display:inline-block; min-width:15px; } +a.toplink { display:inline } +a:active { + color: #989973; + font-weight: normal; + text-decoration: underline; +} +a,a:link { + color: #afa; + text-decoration: none; +} +a:visited { + color: #df8; + text-decoration: none; +} +a:hover { + color: #f88; + text-decoration: none; +} +a:active { + color: #c00; +} +a.navlink:link, a.toplink:link, ul.navlink li a, ul.toplink li a { + color: #afa; + font-weight: bold; + text-decoration: none; +} +a.navlink:visited, a.toplink:visited, ul.navlink li a:visited, ul.toplink li a:visited { + color: #df8; + font-weight: bold; + text-decoration: none; +} +a.navlink:hover, a.toplink:hover, ul.navlink li a:hover, ul.toplink li a:hover { + color: red; + font-weight: bold; + text-decoration: none; +} +a.navlink:active, a.toplink:active, ul.navlink li a:active, ul.toplink li a:active { + color: #c00; + font-weight: bold; + text-decoration: none; +} +.active a {font-weight: bold} +a.help { + color: #E68800; + font-size: smaller; + vertical-align: super; + text-decoration: none; +} +pre {font-size: 110%} +pre.data { + font-size: 100%; +} +.error p { + color:#822; + background:#fc8; +} +pre.error { + color: #000; + font-family: monospace; + font-size: 120%; +} +.intro li {font-weight: bold} +.ac_field {border:1px solid #D9D95F} +.bottom_link { + color: #004 !important; + background: #eee; + border-top: 1px dotted #999; + border-left: 1px dotted #999; + font-size: smaller; +} + +a.bottom_link:hover { background:#68f } + +/** FK browsing **/ +div#root > div.fk { + border: 1px solid #000; +} +div.fk { + /*background: #84c;*/ + background: rgba(128,32,64,0.6); + border-left: 1px solid #000; + padding: 5px 0 5px 0; +} +div.logo { display:none } +div.logo a { + display: block; + height: 100%; + color: transparent: +} diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/themes.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/themes.php new file mode 100644 index 00000000..f9edb666 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/themes/themes.php @@ -0,0 +1,16 @@ +<?php + /** + * Available Themes for phpPgAdmin + * + * $Id: + */ + + // List of themes + + $appThemes = array( + 'default' => 'Default', + 'cappuccino' => 'Cappuccino', + 'gotar' => 'Blue/Green', + 'bootstrap' => 'Bootstrap3' + ); +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/triggers.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/triggers.php new file mode 100644 index 00000000..339e4ae4 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/triggers.php @@ -0,0 +1,448 @@ +<?php + + /** + * List triggers on a table + * + * $Id: triggers.php,v 1.37 2007/09/19 14:42:12 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + include_once('./classes/class.select.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * Function to save after altering a trigger + */ + function doSaveAlter() { + global $data, $lang; + + $status = $data->alterTrigger($_POST['table'], $_POST['trigger'], $_POST['name']); + if ($status == 0) + doDefault($lang['strtriggeraltered']); + else + doAlter($lang['strtriggeralteredbad']); + } + + /** + * Function to allow altering of a trigger + */ + function doAlter($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('trigger'); + $misc->printTitle($lang['stralter'],'pg.trigger.alter'); + $misc->printMsg($msg); + + $triggerdata = $data->getTrigger($_REQUEST['table'], $_REQUEST['trigger']); + + if ($triggerdata->recordCount() > 0) { + + if (!isset($_POST['name'])) $_POST['name'] = $triggerdata->fields['tgname']; + + echo "<form action=\"triggers.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" />\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"alter\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['strok']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('trigger'); + $misc->printTitle($lang['strdrop'],'pg.trigger.drop'); + + echo "<p>", sprintf($lang['strconfdroptrigger'], $misc->printVal($_REQUEST['trigger']), + $misc->printVal($_REQUEST['table'])), "</p>\n"; + + echo "<form action=\"triggers.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; + echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->dropTrigger($_POST['trigger'], $_POST['table'], isset($_POST['cascade'])); + if ($status == 0) + doDefault($lang['strtriggerdropped']); + else + doDefault($lang['strtriggerdroppedbad']); + } + + } + + /** + * Show confirmation of enable trigger and perform enabling the trigger + */ + function doEnable($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('trigger'); + $misc->printTitle($lang['strenable'],'pg.table.alter'); + + echo "<p>", sprintf($lang['strconfenabletrigger'], $misc->printVal($_REQUEST['trigger']), + $misc->printVal($_REQUEST['table'])), "</p>\n"; + + echo "<form action=\"triggers.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"enable\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; + echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->enableTrigger($_POST['trigger'], $_POST['table']); + if ($status == 0) + doDefault($lang['strtriggerenabled']); + else + doDefault($lang['strtriggerenabledbad']); + } + + } + + /** + * Show confirmation of disable trigger and perform disabling the trigger + */ + function doDisable($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('trigger'); + $misc->printTitle($lang['strdisable'],'pg.table.alter'); + + echo "<p>", sprintf($lang['strconfdisabletrigger'], $misc->printVal($_REQUEST['trigger']), + $misc->printVal($_REQUEST['table'])), "</p>\n"; + + echo "<form action=\"triggers.php\" method=\"post\">\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"disable\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; + echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; + echo "</form>\n"; + } + else { + $status = $data->disableTrigger($_POST['trigger'], $_POST['table']); + if ($status == 0) + doDefault($lang['strtriggerdisabled']); + else + doDefault($lang['strtriggerdisabledbad']); + } + + } + + /** + * Let them create s.th. + */ + function doCreate($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('table'); + $misc->printTitle($lang['strcreatetrigger'],'pg.trigger.create'); + $misc->printMsg($msg); + + // Get all the functions that can be used in triggers + $funcs = $data->getTriggerFunctions(); + if ($funcs->recordCount() == 0) { + doDefault($lang['strnofunctions']); + return; + } + + /* Populate functions */ + $sel0 = new XHTML_Select('formFunction'); + while (!$funcs->EOF) { + $sel0->add(new XHTML_Option($funcs->fields['proname'])); + $funcs->moveNext(); + } + + /* Populate times */ + $sel1 = new XHTML_Select('formExecTime'); + $sel1->set_data($data->triggerExecTimes); + + /* Populate events */ + $sel2 = new XHTML_Select('formEvent'); + $sel2->set_data($data->triggerEvents); + + /* Populate occurences */ + $sel3 = new XHTML_Select('formFrequency'); + $sel3->set_data($data->triggerFrequency); + + echo "<form action=\"triggers.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr>\n"; + echo " <th class=\"data\">{$lang['strname']}</th>\n"; + echo " <th class=\"data\">{$lang['strwhen']}</th>\n"; + echo "</tr>\n"; + echo "<tr>\n"; + echo " <td class=\"data1\"> <input type=\"text\" name=\"formTriggerName\" size=\"32\" /></td>\n"; + echo " <td class=\"data1\"> ", $sel1->fetch(), "</td>\n"; + echo "</tr>\n"; + echo "<tr>\n"; + echo " <th class=\"data\">{$lang['strevent']}</th>\n"; + echo " <th class=\"data\">{$lang['strforeach']}</th>\n"; + echo "</tr>\n"; + echo "<tr>\n"; + echo " <td class=\"data1\"> ", $sel2->fetch(), "</td>\n"; + echo " <td class=\"data1\"> ", $sel3->fetch(), "</td>\n"; + echo "</tr>\n"; + echo "<tr><th class=\"data\"> {$lang['strfunction']}</th>\n"; + echo "<th class=\"data\"> {$lang['strarguments']}</th></tr>\n"; + echo "<tr><td class=\"data1\">", $sel0->fetch(), "</td>\n"; + echo "<td class=\"data1\">(<input type=\"text\" name=\"formTriggerArgs\" size=\"32\" />)</td>\n"; + echo "</tr></table>\n"; + echo "<p><input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; + echo $misc->form; + echo "</form>\n"; + } + + /** + * Actually creates the new trigger in the database + */ + function doSaveCreate() { + global $data; + global $lang; + + // Check that they've given a name and a definition + + if ($_POST['formFunction'] == '') + doCreate($lang['strtriggerneedsfunc']); + elseif ($_POST['formTriggerName'] == '') + doCreate($lang['strtriggerneedsname']); + elseif ($_POST['formEvent'] == '') + doCreate(); + else { + $status = $data->createTrigger($_POST['formTriggerName'], $_POST['table'], + $_POST['formFunction'], $_POST['formExecTime'], $_POST['formEvent'], + $_POST['formFrequency'], $_POST['formTriggerArgs']); + if ($status == 0) + doDefault($lang['strtriggercreated']); + else + doCreate($lang['strtriggercreatedbad']); + } + } + + /** + * List all the triggers on the table + */ + function doDefault($msg = '') { + global $data, $misc, $database; + global $lang; + + function tgPre(&$rowdata,$actions) { + global $data; + // toggle enable/disable trigger per trigger + if( ! $data->phpBool( $rowdata->fields["tgenabled"] ) ) { + unset( $actions['disable'] ); + } + else{ + unset( $actions['enable'] ); + } + + return $actions; + } + + $misc->printTrail('table'); + $misc->printTabs('table','triggers'); + $misc->printMsg($msg); + + $triggers = $data->getTriggers($_REQUEST['table']); + + $columns = array( + 'trigger' => array( + 'title' => $lang['strname'], + 'field' => field('tgname'), + ), + 'definition' => array( + 'title' => $lang['strdefinition'], + 'field' => field('tgdef'), + ), + 'function' => array( + 'title' => $lang['strfunction'], + 'field' => field('proproto'), + 'url' => "functions.php?action=properties&server={$_REQUEST['server']}&database={$_REQUEST['database']}&", + 'vars' => array( + 'schema' => 'pronamespace', + 'function' => 'proproto', + 'function_oid' => 'prooid', + ), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + ); + + $actions = array( + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'triggers.php', + 'urlvars' => array ( + 'action' => 'confirm_alter', + 'table' => $_REQUEST['table'], + 'trigger' => field('tgname') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'triggers.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'table' => $_REQUEST['table'], + 'trigger' => field('tgname') + ) + ) + ) + ), + ); + if($data->hasDisableTriggers()) { + $actions['enable'] = array( + 'content' => $lang['strenable'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'triggers.php', + 'urlvars' => array ( + 'action' => 'confirm_enable', + 'table' => $_REQUEST['table'], + 'trigger' => field('tgname') + ) + ) + ) + ); + $actions['disable'] = array( + 'content' => $lang['strdisable'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'triggers.php', + 'urlvars' => array ( + 'action' => 'confirm_disable', + 'table' => $_REQUEST['table'], + 'trigger' => field('tgname') + ) + ) + ) + ); + } + + $misc->printTable($triggers, $columns, $actions, 'triggers-triggers', $lang['strnotriggers'], 'tgPre'); + + $misc->printNavLinks(array ('create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'triggers.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'table' => $_REQUEST['table'] + ) + ) + ), + 'content' => $lang['strcreatetrigger'] + )), 'triggers-triggers', get_defined_vars()); + } + + function doTree() { + + global $misc, $data; + + $triggers = $data->getTriggers($_REQUEST['table']); + + $reqvars = $misc->getRequestVars('table'); + + $attrs = array( + 'text' => field('tgname'), + 'icon' => 'Trigger', + ); + + $misc->printTree($triggers, $attrs, 'triggers'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strtables'] . ' - ' . $_REQUEST['table'] . ' - ' . $lang['strtriggers']); + $misc->printBody(); + + switch ($action) { + case 'alter': + if (isset($_POST['alter'])) doSaveAlter(); + else doDefault(); + break; + case 'confirm_alter': + doAlter(); + break; + case 'confirm_enable': + doEnable(true); + break; + case 'confirm_disable': + doDisable(true); + break; + case 'save_create': + if (isset($_POST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_POST['yes'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'enable': + if (isset($_POST['yes'])) doEnable(false); + else doDefault(); + break; + case 'disable': + if (isset($_POST['yes'])) doDisable(false); + else doDefault(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/types.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/types.php new file mode 100644 index 00000000..a3ca1a34 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/types.php @@ -0,0 +1,714 @@ +<?php + + /** + * Manage types in a database + * + * $Id: types.php,v 1.42 2007/11/30 15:25:23 soranzo Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Show read only properties for a type + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + // Get type (using base name) + $typedata = $data->getType($_REQUEST['type']); + + $misc->printTrail('type'); + $misc->printTitle($lang['strproperties'], 'pg.type'); + $misc->printMsg($msg); + + function attPre(&$rowdata) { + global $data; + $rowdata->fields['+type'] = $data->formatType($rowdata->fields['type'], $rowdata->fields['atttypmod']); + } + + if ($typedata->recordCount() > 0) { + $vals = false; + switch ($typedata->fields['typtype']) { + case 'c': + $attrs = $data->getTableAttributes($_REQUEST['type']); + + $columns = array( + 'field' => array( + 'title' => $lang['strfield'], + 'field' => field('attname'), + ), + 'type' => array( + 'title' => $lang['strtype'], + 'field' => field('+type'), + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('comment'), + ) + ); + + $actions = array(); + + $misc->printTable($attrs, $columns, $actions, 'types-properties', null, 'attPre'); + + break; + case 'e': + $vals = $data->getEnumValues($typedata->fields['typname']); + default: + $byval = $data->phpBool($typedata->fields['typbyval']); + echo "<table>\n"; + echo "<tr><th class=\"data left\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typname']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strinputfn']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typin']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['stroutputfn']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typout']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strlength']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typlen']), "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strpassbyval']}</th>\n"; + echo "<td class=\"data1\">", ($byval) ? $lang['stryes'] : $lang['strno'], "</td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['stralignment']}</th>\n"; + echo "<td class=\"data1\">", $misc->printVal($typedata->fields['typalign']), "</td></tr>\n"; + if ($data->hasEnumTypes() && $vals) { + $vals = $vals->getArray(); + $nbVals = count($vals); + echo "<tr>\n\t<th class=\"data left\" rowspan=\"$nbVals\">{$lang['strenumvalues']}</th>\n"; + echo "<td class=\"data2\">{$vals[0]['enumval']}</td></tr>\n"; + for ($i=1; $i < $nbVals; $i++) + echo "<td class=\"data", 2-($i%2), "\">{$vals[$i]['enumval']}</td></tr>\n"; + } + echo "</table>\n"; + } + + $misc->printNavLinks(array ('showall' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'types.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + ) + ) + ), + 'content' => $lang['strshowalltypes'] + )), 'types-properties', get_defined_vars()); + } else + doDefault($lang['strinvalidparam']); + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('type'); + $misc->printTitle($lang['strdrop'], 'pg.type.drop'); + + echo "<p>", sprintf($lang['strconfdroptype'], $misc->printVal($_REQUEST['type'])), "</p>\n"; + + echo "<form action=\"types.php\" method=\"post\">\n"; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"type\" value=\"", htmlspecialchars($_REQUEST['type']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + $status = $data->dropType($_POST['type'], isset($_POST['cascade'])); + if ($status == 0) + doDefault($lang['strtypedropped']); + else + doDefault($lang['strtypedroppedbad']); + } + + } + + /** + * Displays a screen where they can enter a new composite type + */ + function doCreateComposite($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_REQUEST['stage'])) $_REQUEST['stage'] = 1; + if (!isset($_REQUEST['name'])) $_REQUEST['name'] = ''; + if (!isset($_REQUEST['fields'])) $_REQUEST['fields'] = ''; + if (!isset($_REQUEST['typcomment'])) $_REQUEST['typcomment'] = ''; + + switch ($_REQUEST['stage']) { + case 1: + $misc->printTrail('type'); + $misc->printTitle($lang['strcreatecomptype'], 'pg.type.create'); + $misc->printMsg($msg); + + echo "<form action=\"types.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['name']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strnumfields']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"fields\" size=\"5\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['fields']), "\" /></td>\n\t</tr>\n"; + + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td><textarea name=\"typcomment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_REQUEST['typcomment']), "</textarea></td>\n\t</tr>\n"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"create_comp\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strnext']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + break; + case 2: + global $lang; + + // Check inputs + $fields = trim($_REQUEST['fields']); + if (trim($_REQUEST['name']) == '') { + $_REQUEST['stage'] = 1; + doCreateComposite($lang['strtypeneedsname']); + return; + } + elseif ($fields == '' || !is_numeric($fields) || $fields != (int)$fields || $fields < 1) { + $_REQUEST['stage'] = 1; + doCreateComposite($lang['strtypeneedscols']); + return; + } + + $types = $data->getTypes(true, false, true); + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreatecomptype'], 'pg.type.create'); + $misc->printMsg($msg); + + echo "<form action=\"types.php\" method=\"post\">\n"; + + // Output table header + echo "<table>\n"; + echo "\t<tr><th colspan=\"2\" class=\"data required\">{$lang['strfield']}</th><th colspan=\"2\" class=\"data required\">{$lang['strtype']}</th>"; + echo"<th class=\"data\">{$lang['strlength']}</th><th class=\"data\">{$lang['strcomment']}</th></tr>\n"; + + for ($i = 0; $i < $_REQUEST['fields']; $i++) { + if (!isset($_REQUEST['field'][$i])) $_REQUEST['field'][$i] = ''; + if (!isset($_REQUEST['length'][$i])) $_REQUEST['length'][$i] = ''; + if (!isset($_REQUEST['colcomment'][$i])) $_REQUEST['colcomment'][$i] = ''; + + echo "\t<tr>\n\t\t<td>", $i + 1, ". </td>\n"; + echo "\t\t<td><input name=\"field[{$i}]\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['field'][$i]), "\" /></td>\n"; + echo "\t\t<td>\n\t\t\t<select name=\"type[{$i}]\">\n"; + $types->moveFirst(); + while (!$types->EOF) { + $typname = $types->fields['typname']; + echo "\t\t\t\t<option value=\"", htmlspecialchars($typname), "\"", + (isset($_REQUEST['type'][$i]) && $typname == $_REQUEST['type'][$i]) ? ' selected="selected"' : '', ">", + $misc->printVal($typname), "</option>\n"; + $types->moveNext(); + } + echo "\t\t\t</select>\n\t\t</td>\n"; + + // Output array type selector + echo "\t\t<td>\n\t\t\t<select name=\"array[{$i}]\">\n"; + echo "\t\t\t\t<option value=\"\"", (isset($_REQUEST['array'][$i]) && $_REQUEST['array'][$i] == '') ? ' selected="selected"' : '', "></option>\n"; + echo "\t\t\t\t<option value=\"[]\"", (isset($_REQUEST['array'][$i]) && $_REQUEST['array'][$i] == '[]') ? ' selected="selected"' : '', ">[ ]</option>\n"; + echo "\t\t\t</select>\n\t\t</td>\n"; + + echo "\t\t<td><input name=\"length[{$i}]\" size=\"10\" value=\"", + htmlspecialchars($_REQUEST['length'][$i]), "\" /></td>\n"; + echo "\t\t<td><input name=\"colcomment[{$i}]\" size=\"40\" value=\"", + htmlspecialchars($_REQUEST['colcomment'][$i]), "\" /></td>\n\t</tr>\n"; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"create_comp\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"3\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"name\" value=\"", htmlspecialchars($_REQUEST['name']), "\" />\n"; + echo "<input type=\"hidden\" name=\"fields\" value=\"", htmlspecialchars($_REQUEST['fields']), "\" />\n"; + echo "<input type=\"hidden\" name=\"typcomment\" value=\"", htmlspecialchars($_REQUEST['typcomment']), "\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + + break; + case 3: + global $data, $lang; + + // Check inputs + $fields = trim($_REQUEST['fields']); + if (trim($_REQUEST['name']) == '') { + $_REQUEST['stage'] = 1; + doCreateComposite($lang['strtypeneedsname']); + return; + } + elseif ($fields == '' || !is_numeric($fields) || $fields != (int)$fields || $fields <= 0) { + $_REQUEST['stage'] = 1; + doCreateComposite($lang['strtypeneedscols']); + return; + } + + $status = $data->createCompositeType($_REQUEST['name'], $_REQUEST['fields'], $_REQUEST['field'], + $_REQUEST['type'], $_REQUEST['array'], $_REQUEST['length'], $_REQUEST['colcomment'], + $_REQUEST['typcomment']); + + if ($status == 0) + doDefault($lang['strtypecreated']); + elseif ($status == -1) { + $_REQUEST['stage'] = 2; + doCreateComposite($lang['strtypeneedsfield']); + return; + } + else { + $_REQUEST['stage'] = 2; + doCreateComposite($lang['strtypecreatedbad']); + return; + } + break; + default: + echo "<p>{$lang['strinvalidparam']}</p>\n"; + } + } + + /** + * Displays a screen where they can enter a new enum type + */ + function doCreateEnum($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_REQUEST['stage'])) $_REQUEST['stage'] = 1; + if (!isset($_REQUEST['name'])) $_REQUEST['name'] = ''; + if (!isset($_REQUEST['values'])) $_REQUEST['values'] = ''; + if (!isset($_REQUEST['typcomment'])) $_REQUEST['typcomment'] = ''; + + switch ($_REQUEST['stage']) { + case 1: + $misc->printTrail('type'); + $misc->printTitle($lang['strcreateenumtype'], 'pg.type.create'); + $misc->printMsg($msg); + + echo "<form action=\"types.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['name']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strnumvalues']}</th>\n"; + echo "\t\t<td class=\"data\"><input name=\"values\" size=\"5\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['values']), "\" /></td>\n\t</tr>\n"; + + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td><textarea name=\"typcomment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_REQUEST['typcomment']), "</textarea></td>\n\t</tr>\n"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"create_enum\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strnext']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + break; + case 2: + global $lang; + + // Check inputs + $values = trim($_REQUEST['values']); + if (trim($_REQUEST['name']) == '') { + $_REQUEST['stage'] = 1; + doCreateEnum($lang['strtypeneedsname']); + return; + } + elseif ($values == '' || !is_numeric($values) || $values != (int)$values || $values < 1) { + $_REQUEST['stage'] = 1; + doCreateEnum($lang['strtypeneedsvals']); + return; + } + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreateenumtype'], 'pg.type.create'); + $misc->printMsg($msg); + + echo "<form action=\"types.php\" method=\"post\">\n"; + + // Output table header + echo "<table>\n"; + echo "\t<tr><th colspan=\"2\" class=\"data required\">{$lang['strvalue']}</th></tr>\n"; + + for ($i = 0; $i < $_REQUEST['values']; $i++) { + if (!isset($_REQUEST['value'][$i])) $_REQUEST['value'][$i] = ''; + + echo "\t<tr>\n\t\t<td>", $i + 1, ". </td>\n"; + echo "\t\t<td><input name=\"value[{$i}]\" size=\"16\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['value'][$i]), "\" /></td>\n\t</tr>\n"; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"create_enum\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"3\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"name\" value=\"", htmlspecialchars($_REQUEST['name']), "\" />\n"; + echo "<input type=\"hidden\" name=\"values\" value=\"", htmlspecialchars($_REQUEST['values']), "\" />\n"; + echo "<input type=\"hidden\" name=\"typcomment\" value=\"", htmlspecialchars($_REQUEST['typcomment']), "\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + + break; + case 3: + global $data, $lang; + + // Check inputs + $values = trim($_REQUEST['values']); + if (trim($_REQUEST['name']) == '') { + $_REQUEST['stage'] = 1; + doCreateEnum($lang['strtypeneedsname']); + return; + } + elseif ($values == '' || !is_numeric($values) || $values != (int)$values || $values <= 0) { + $_REQUEST['stage'] = 1; + doCreateEnum($lang['strtypeneedsvals']); + return; + } + + $status = $data->createEnumType($_REQUEST['name'], $_REQUEST['value'], $_REQUEST['typcomment']); + + if ($status == 0) + doDefault($lang['strtypecreated']); + elseif ($status == -1) { + $_REQUEST['stage'] = 2; + doCreateEnum($lang['strtypeneedsvalue']); + return; + } + else { + $_REQUEST['stage'] = 2; + doCreateEnum($lang['strtypecreatedbad']); + return; + } + break; + default: + echo "<p>{$lang['strinvalidparam']}</p>\n"; + } + } + + /** + * Displays a screen where they can enter a new type + */ + function doCreate($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_POST['typname'])) $_POST['typname'] = ''; + if (!isset($_POST['typin'])) $_POST['typin'] = ''; + if (!isset($_POST['typout'])) $_POST['typout'] = ''; + if (!isset($_POST['typlen'])) $_POST['typlen'] = ''; + if (!isset($_POST['typdef'])) $_POST['typdef'] = ''; + if (!isset($_POST['typelem'])) $_POST['typelem'] = ''; + if (!isset($_POST['typdelim'])) $_POST['typdelim'] = ''; + if (!isset($_POST['typalign'])) $_POST['typalign'] = $data->typAlignDef; + if (!isset($_POST['typstorage'])) $_POST['typstorage'] = $data->typStorageDef; + + // Retrieve all functions and types in the database + $funcs = $data->getFunctions(true); + $types = $data->getTypes(true); + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreatetype'], 'pg.type.create'); + $misc->printMsg($msg); + + echo "<form action=\"types.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\"><input name=\"typname\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['typname']), "\" /></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['strinputfn']}</th>\n"; + echo "<td class=\"data1\"><select name=\"typin\">"; + while (!$funcs->EOF) { + $proname = htmlspecialchars($funcs->fields['proname']); + echo "<option value=\"{$proname}\"", + ($proname == $_POST['typin']) ? ' selected="selected"' : '', ">{$proname}</option>\n"; + $funcs->moveNext(); + } + echo "</select></td></tr>\n"; + echo "<tr><th class=\"data left required\">{$lang['stroutputfn']}</th>\n"; + echo "<td class=\"data1\"><select name=\"typout\">"; + $funcs->moveFirst(); + while (!$funcs->EOF) { + $proname = htmlspecialchars($funcs->fields['proname']); + echo "<option value=\"{$proname}\"", + ($proname == $_POST['typout']) ? ' selected="selected"' : '', ">{$proname}</option>\n"; + $funcs->moveNext(); + } + echo "</select></td></tr>\n"; + echo "<tr><th class=\"data left" . (version_compare($data->major_version, '7.4', '<') ? ' required' : '') . "\">{$lang['strlength']}</th>\n"; + echo "<td class=\"data1\"><input name=\"typlen\" size=\"8\" value=\"", + htmlspecialchars($_POST['typlen']), "\" /></td></tr>"; + echo "<tr><th class=\"data left\">{$lang['strdefault']}</th>\n"; + echo "<td class=\"data1\"><input name=\"typdef\" size=\"8\" value=\"", + htmlspecialchars($_POST['typdef']), "\" /></td></tr>"; + echo "<tr><th class=\"data left\">{$lang['strelement']}</th>\n"; + echo "<td class=\"data1\"><select name=\"typelem\">"; + echo "<option value=\"\"></option>\n"; + while (!$types->EOF) { + $currname = htmlspecialchars($types->fields['typname']); + echo "<option value=\"{$currname}\"", + ($currname == $_POST['typelem']) ? ' selected="selected"' : '', ">{$currname}</option>\n"; + $types->moveNext(); + } + echo "</select></td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strdelimiter']}</th>\n"; + echo "<td class=\"data1\"><input name=\"typdelim\" size=\"1\" maxlength=\"1\" value=\"", + htmlspecialchars($_POST['typdelim']), "\" /></td></tr>"; + echo "<tr><th class=\"data left\"><label for=\"typbyval\">{$lang['strpassbyval']}</label></th>\n"; + echo "<td class=\"data1\"><input type=\"checkbox\" id=\"typbyval\" name=\"typbyval\"", + isset($_POST['typbyval']) ? ' checked="checked"' : '', " /></td></tr>"; + echo "<tr><th class=\"data left\">{$lang['stralignment']}</th>\n"; + echo "<td class=\"data1\"><select name=\"typalign\">"; + foreach ($data->typAligns as $v) { + echo "<option value=\"{$v}\"", + ($v == $_POST['typalign']) ? ' selected="selected"' : '', ">{$v}</option>\n"; + } + echo "</select></td></tr>\n"; + echo "<tr><th class=\"data left\">{$lang['strstorage']}</th>\n"; + echo "<td class=\"data1\"><select name=\"typstorage\">"; + foreach ($data->typStorages as $v) { + echo "<option value=\"{$v}\"", + ($v == $_POST['typstorage']) ? ' selected="selected"' : '', ">{$v}</option>\n"; + } + echo "</select></td></tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new type in the database + */ + function doSaveCreate() { + global $data; + global $lang; + + // Check that they've given a name and a length. + // Note: We're assuming they've given in and out functions here + // which might be unwise... + if ($_POST['typname'] == '') doCreate($lang['strtypeneedsname']); + elseif ($_POST['typlen'] == '') doCreate($lang['strtypeneedslen']); + else { + $status = $data->createType( + $_POST['typname'], + $_POST['typin'], + $_POST['typout'], + $_POST['typlen'], + $_POST['typdef'], + $_POST['typelem'], + $_POST['typdelim'], + isset($_POST['typbyval']), + $_POST['typalign'], + $_POST['typstorage'] + ); + if ($status == 0) + doDefault($lang['strtypecreated']); + else + doCreate($lang['strtypecreatedbad']); + } + } + + /** + * Show default list of types in the database + */ + function doDefault($msg = '') { + global $data, $conf, $misc; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','types'); + $misc->printMsg($msg); + + $types = $data->getTypes(); + + $columns = array( + 'type' => array( + 'title' => $lang['strtype'], + 'field' => field('typname'), + 'url' => "types.php?action=properties&{$misc->href}&", + 'vars' => array('type' => 'basename'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('typowner'), + ), + 'flavour' => array( + 'title' => $lang['strflavor'], + 'field' => field('typtype'), + 'type' => 'verbatim', + 'params'=> array( + 'map' => array( + 'b' => $lang['strbasetype'], + 'c' => $lang['strcompositetype'], + 'd' => $lang['strdomain'], + 'p' => $lang['strpseudotype'], + 'e' => $lang['strenum'], + ), + 'align' => 'center', + ), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('typcomment'), + ), + ); + + if (!isset($types->fields['typtype'])) unset($columns['flavour']); + + $actions = array( + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'types.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'type' => field('basename') + ) + ) + ) + ), + ); + + $misc->printTable($types, $columns, $actions, 'types-types', $lang['strnotypes']); + + $navlinks = array ( + 'create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'types.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreatetype'] + ), + 'createcomp' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'types.php', + 'urlvars' => array ( + 'action' => 'create_comp', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreatecomptype'] + ), + 'createenum' => array ( + 'attr'=> array ( + 'href' => array( + 'url' => 'types.php', + 'urlvars' => array ( + 'action' => 'create_enum', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreateenumtype'] + ) + ); + + if (! $data->hasEnumTypes()) { + unset($navlinks['enum']); + } + + $misc->printNavLinks($navlinks, 'types-types', get_defined_vars()); + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $types = $data->getTypes(); + + $reqvars = $misc->getRequestVars('type'); + + $attrs = array( + 'text' => field('typname'), + 'icon' => 'Type', + 'toolTip'=> field('typcomment'), + 'action' => url('types.php', + $reqvars, + array( + 'action' => 'properties', + 'type' => field('basename') + ) + ) + ); + + $misc->printTree($types, $attrs, 'types'); + exit; + } + + if ($action == 'tree') doTree(); + + $misc->printHeader($lang['strtypes']); + $misc->printBody(); + + switch ($action) { + case 'create_comp': + if (isset($_POST['cancel'])) doDefault(); + else doCreateComposite(); + break; + case 'create_enum': + if (isset($_POST['cancel'])) doDefault(); + else doCreateEnum(); + break; + case 'save_create': + if (isset($_POST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_POST['cancel'])) doDefault(); + else doDrop(false); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'properties': + doProperties(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/users.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/users.php new file mode 100644 index 00000000..11775ea5 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/users.php @@ -0,0 +1,415 @@ +<?php + + /** + * Manage users in a database cluster + * + * $Id: users.php,v 1.40 2008/02/25 17:20:44 xzilla Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * If a user is not a superuser, then we have an 'account management' page + * where they can change their password, etc. We don't prevent them from + * messing with the URL to gain access to other user admin stuff, because + * the PostgreSQL permissions will prevent them changing anything anyway. + */ + function doAccount($msg = '') { + global $data, $misc; + global $lang; + + $server_info = $misc->getServerInfo(); + + $userdata = $data->getUser($server_info['username']); + $_REQUEST['user'] = $server_info['username']; + + $misc->printTrail('user'); + $misc->printTabs('server','account'); + $misc->printMsg($msg); + + if ($userdata->recordCount() > 0) { + $userdata->fields['usesuper'] = $data->phpBool($userdata->fields['usesuper']); + $userdata->fields['usecreatedb'] = $data->phpBool($userdata->fields['usecreatedb']); + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strusername']}</th><th class=\"data\">{$lang['strsuper']}</th><th class=\"data\">{$lang['strcreatedb']}</th><th class=\"data\">{$lang['strexpires']}</th>"; + echo "<th class=\"data\">{$lang['strsessiondefaults']}</th>"; + echo "</tr>\n"; + echo "<tr>\n\t<td class=\"data1\">", $misc->printVal($userdata->fields['usename']), "</td>\n"; + echo "\t<td class=\"data1\">", $misc->printVal($userdata->fields['usesuper'], 'yesno'), "</td>\n"; + echo "\t<td class=\"data1\">", $misc->printVal($userdata->fields['usecreatedb'], 'yesno'), "</td>\n"; + echo "\t<td class=\"data1\">", ($userdata->fields['useexpires'] == 'infinity' || is_null($userdata->fields['useexpires']) ? $lang['strnever'] : $misc->printVal($userdata->fields['useexpires'])), "</td>\n"; + echo "\t<td class=\"data1\">", $misc->printVal($userdata->fields['useconfig']), "</td>\n"; + echo "</tr>\n</table>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + + $misc->printNavLinks(array ('changepassword' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'users.php', + 'urlvars' => array ( + 'action' => 'confchangepassword', + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strchangepassword'] + )), 'users-account', get_defined_vars()); + } + + /** + * Show confirmation of change password and actually change password + */ + function doChangePassword($confirm, $msg = '') { + global $data, $misc; + global $lang, $conf; + + $server_info = $misc->getServerInfo(); + + if ($confirm) { + $_REQUEST['user'] = $server_info['username']; + $misc->printTrail('user'); + $misc->printTitle($lang['strchangepassword'],'pg.user.alter'); + $misc->printMsg($msg); + + if (!isset($_POST['password'])) $_POST['password'] = ''; + if (!isset($_POST['confirm'])) $_POST['confirm'] = ''; + + echo "<form action=\"users.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strpassword']}</th>\n"; + echo "\t\t<td><input type=\"password\" name=\"password\" size=\"32\" value=\"", + htmlspecialchars($_POST['password']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strconfirm']}</th>\n"; + echo "\t\t<td><input type=\"password\" name=\"confirm\" size=\"32\" value=\"\" /></td>\n\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"changepassword\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"ok\" value=\"{$lang['strok']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</p></form>\n"; + } + else { + // Check that password is minimum length + if (strlen($_POST['password']) < $conf['min_password_length']) + doChangePassword(true, $lang['strpasswordshort']); + // Check that password matches confirmation password + elseif ($_POST['password'] != $_POST['confirm']) + doChangePassword(true, $lang['strpasswordconfirm']); + else { + $status = $data->changePassword($server_info['username'], + $_POST['password']); + if ($status == 0) + doAccount($lang['strpasswordchanged']); + else + doAccount($lang['strpasswordchangedbad']); + } + } + } + + /** + * Function to allow editing of a user + */ + function doEdit($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('user'); + $misc->printTitle($lang['stralter'],'pg.user.alter'); + $misc->printMsg($msg); + + $userdata = $data->getUser($_REQUEST['username']); + + if ($userdata->recordCount() > 0) { + $server_info = $misc->getServerInfo(); + $canRename = $data->hasUserRename() && ($_REQUEST['username'] != $server_info['username']); + $userdata->fields['usesuper'] = $data->phpBool($userdata->fields['usesuper']); + $userdata->fields['usecreatedb'] = $data->phpBool($userdata->fields['usecreatedb']); + + if (!isset($_POST['formExpires'])){ + if ($canRename) $_POST['newname'] = $userdata->fields['usename']; + if ($userdata->fields['usesuper']) $_POST['formSuper'] = ''; + if ($userdata->fields['usecreatedb']) $_POST['formCreateDB'] = ''; + $_POST['formExpires'] = $userdata->fields['useexpires'] == 'infinity' ? '' : $userdata->fields['useexpires']; + $_POST['formPassword'] = ''; + } + + echo "<form action=\"users.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strusername']}</th>\n"; + echo "\t\t<td class=\"data1\">", ($canRename ? "<input name=\"newname\" size=\"15\" maxlength=\"{$data->_maxNameLen}\" value=\"" . htmlspecialchars($_POST['newname']) . "\" />" : $misc->printVal($userdata->fields['usename'])), "</td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formSuper\">{$lang['strsuper']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formSuper\" name=\"formSuper\"", + (isset($_POST['formSuper'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formCreateDB\">{$lang['strcreatedb']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formCreateDB\" name=\"formCreateDB\"", + (isset($_POST['formCreateDB'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strexpires']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"16\" name=\"formExpires\" value=\"", htmlspecialchars($_POST['formExpires']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strpassword']}</th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"password\" size=\"16\" name=\"formPassword\" value=\"", htmlspecialchars($_POST['formPassword']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strconfirm']}</th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"password\" size=\"16\" name=\"formConfirm\" value=\"\" /></td>\n\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_edit\" />\n"; + echo "<input type=\"hidden\" name=\"username\" value=\"", htmlspecialchars($_REQUEST['username']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Function to save after editing a user + */ + function doSaveEdit() { + global $data, $lang; + + // Check name and password + if (isset($_POST['newname']) && $_POST['newname'] == '') + doEdit($lang['struserneedsname']); + else if ($_POST['formPassword'] != $_POST['formConfirm']) + doEdit($lang['strpasswordconfirm']); + else { + if (isset($_POST['newname'])) $status = $data->setRenameUser($_POST['username'], $_POST['formPassword'], isset($_POST['formCreateDB']), isset($_POST['formSuper']), $_POST['formExpires'], $_POST['newname']); + else $status = $data->setUser($_POST['username'], $_POST['formPassword'], isset($_POST['formCreateDB']), isset($_POST['formSuper']), $_POST['formExpires']); + if ($status == 0) + doDefault($lang['struserupdated']); + else + doEdit($lang['struserupdatedbad']); + } + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang; + + if ($confirm) { + $misc->printTrail('user'); + $misc->printTitle($lang['strdrop'],'pg.user.drop'); + + echo "<p>", sprintf($lang['strconfdropuser'], $misc->printVal($_REQUEST['username'])), "</p>\n"; + + echo "<form action=\"users.php\" method=\"post\">\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + echo "<input type=\"hidden\" name=\"username\" value=\"", htmlspecialchars($_REQUEST['username']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + $status = $data->dropUser($_REQUEST['username']); + if ($status == 0) + doDefault($lang['struserdropped']); + else + doDefault($lang['struserdroppedbad']); + } + } + + /** + * Displays a screen where they can enter a new user + */ + function doCreate($msg = '') { + global $data, $misc, $username; + global $lang; + + if (!isset($_POST['formUsername'])) $_POST['formUsername'] = ''; + if (!isset($_POST['formPassword'])) $_POST['formPassword'] = ''; + if (!isset($_POST['formConfirm'])) $_POST['formConfirm'] = ''; + if (!isset($_POST['formExpires'])) $_POST['formExpires'] = ''; + + $misc->printTrail('server'); + $misc->printTitle($lang['strcreateuser'],'pg.user.create'); + $misc->printMsg($msg); + + echo "<form action=\"users.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strusername']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"15\" maxlength=\"{$data->_maxNameLen}\" name=\"formUsername\" value=\"", htmlspecialchars($_POST['formUsername']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strpassword']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"15\" type=\"password\" name=\"formPassword\" value=\"", htmlspecialchars($_POST['formPassword']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strconfirm']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"15\" type=\"password\" name=\"formConfirm\" value=\"", htmlspecialchars($_POST['formConfirm']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formSuper\">{$lang['strsuper']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formSuper\" name=\"formSuper\"", + (isset($_POST['formSuper'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\"><label for=\"formCreateDB\">{$lang['strcreatedb']}</label></th>\n"; + echo "\t\t<td class=\"data1\"><input type=\"checkbox\" id=\"formCreateDB\" name=\"formCreateDB\"", + (isset($_POST['formCreateDB'])) ? ' checked="checked"' : '', " /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strexpires']}</th>\n"; + echo "\t\t<td class=\"data1\"><input size=\"30\" name=\"formExpires\" value=\"", htmlspecialchars($_POST['formExpires']), "\" /></td>\n\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"create\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new user in the database + */ + function doSaveCreate() { + global $data; + global $lang; + + // Check data + if ($_POST['formUsername'] == '') + doCreate($lang['struserneedsname']); + else if ($_POST['formPassword'] != $_POST['formConfirm']) + doCreate($lang['strpasswordconfirm']); + else { + $status = $data->createUser($_POST['formUsername'], $_POST['formPassword'], + isset($_POST['formCreateDB']), isset($_POST['formSuper']), $_POST['formExpires'], array()); + if ($status == 0) + doDefault($lang['strusercreated']); + else + doCreate($lang['strusercreatedbad']); + } + } + + /** + * Show default list of users in the database + */ + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + function renderUseExpires($val) { + global $lang; + return $val == 'infinity' ? $lang['strnever'] : htmlspecialchars($val); + } + + $misc->printTrail('server'); + $misc->printTabs('server','users'); + $misc->printMsg($msg); + + $users = $data->getUsers(); + + $columns = array( + 'user' => array( + 'title' => $lang['strusername'], + 'field' => field('usename'), + ), + 'superuser' => array( + 'title' => $lang['strsuper'], + 'field' => field('usesuper'), + 'type' => 'yesno', + ), + 'createdb' => array( + 'title' => $lang['strcreatedb'], + 'field' => field('usecreatedb'), + 'type' => 'yesno', + ), + 'expires' => array( + 'title' => $lang['strexpires'], + 'field' => field('useexpires'), + 'type' => 'callback', + 'params'=> array('function' => 'renderUseExpires', 'null' => $lang['strnever']), + ), + 'defaults' => array( + 'title' => $lang['strsessiondefaults'], + 'field' => field('useconfig'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + ); + + $actions = array( + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'users.php', + 'urlvars' => array ( + 'action' => 'edit', + 'username' => field('usename') + ) + ) + ) + ), + 'drop' => array( + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'users.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'username' => field('usename') + ) + ) + ) + ), + ); + + $misc->printTable($users, $columns, $actions, 'users-users', $lang['strnousers']); + + $misc->printNavLinks(array ('create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'users.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'] + ) + ) + ), + 'content' => $lang['strcreateuser'] + )), 'users-users', get_defined_vars()); + + } + + $misc->printHeader($lang['strusers']); + $misc->printBody(); + + switch ($action) { + case 'changepassword': + if (isset($_REQUEST['ok'])) doChangePassword(false); + else doAccount(); + break; + case 'confchangepassword': + doChangePassword(true); + break; + case 'account': + doAccount(); + break; + case 'save_create': + if (isset($_REQUEST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_REQUEST['cancel'])) doDefault(); + else doDrop(false); + break; + case 'confirm_drop': + doDrop(true); + break; + case 'save_edit': + if (isset($_REQUEST['cancel'])) doDefault(); + else doSaveEdit(); + break; + case 'edit': + doEdit(); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/viewproperties.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/viewproperties.php new file mode 100644 index 00000000..950789b5 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/viewproperties.php @@ -0,0 +1,564 @@ +<?php + + /** + * List views in a database + * + * $Id: viewproperties.php,v 1.34 2007/12/11 14:17:17 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + + /** + * Function to save after editing a view + */ + function doSaveEdit() { + global $data, $lang; + + $status = $data->setView($_POST['view'], $_POST['formDefinition'], $_POST['formComment']); + if ($status == 0) + doDefinition($lang['strviewupdated']); + else + doEdit($lang['strviewupdatedbad']); + } + + /** + * Function to allow editing of a view + */ + function doEdit($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('view'); + $misc->printTitle($lang['stredit'],'pg.view.alter'); + $misc->printMsg($msg); + + $viewdata = $data->getView($_REQUEST['view']); + + if ($viewdata->recordCount() > 0) { + + if (!isset($_POST['formDefinition'])) { + $_POST['formDefinition'] = $viewdata->fields['vwdefinition']; + $_POST['formComment'] = $viewdata->fields['relcomment']; + } + + echo "<form action=\"viewproperties.php\" method=\"post\">\n"; + echo "<table style=\"width: 100%\">\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strdefinition']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea style=\"width: 100%;\" rows=\"20\" cols=\"50\" name=\"formDefinition\">", + htmlspecialchars($_POST['formDefinition']), "</textarea></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea rows=\"3\" cols=\"32\" name=\"formComment\">", + htmlspecialchars($_POST['formComment']), "</textarea></td>\n\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_edit\" />\n"; + echo "<input type=\"hidden\" name=\"view\" value=\"", htmlspecialchars($_REQUEST['view']), "\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + + /** + * Allow the dumping of the data "in" a view + * NOTE:: PostgreSQL doesn't currently support dumping the data in a view + * so I have disabled the data related parts for now. In the future + * we should allow it conditionally if it becomes supported. This is + * a SMOP since it is based on pg_dump version not backend version. + */ + function doExport($msg = '') { + global $data, $misc; + global $lang; + + $misc->printTrail('view'); + $misc->printTabs('view','export'); + $misc->printMsg($msg); + + echo "<form action=\"dataexport.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strformat']}</th><th class=\"data\" colspan=\"2\">{$lang['stroptions']}</th></tr>\n"; + // Data only + echo "<!--\n"; + echo "<tr><th class=\"data left\">"; + echo "<input type=\"radio\" id=\"what1\" name=\"what\" value=\"dataonly\" /><label for=\"what1\">{$lang['strdataonly']}</label></th>\n"; + echo "<td>{$lang['strformat']}</td>\n"; + echo "<td><select name=\"d_format\" >\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "<option value=\"csv\">CSV</option>\n"; + echo "<option value=\"tab\">{$lang['strtabbed']}</option>\n"; + echo "<option value=\"html\">XHTML</option>\n"; + echo "<option value=\"xml\">XML</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "-->\n"; + + // Structure only + echo "<tr><th class=\"data left\"><input type=\"radio\" id=\"what2\" name=\"what\" value=\"structureonly\" checked=\"checked\" /><label for=\"what2\">{$lang['strstructureonly']}</label></th>\n"; + echo "<td><label for=\"s_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"s_clean\" name=\"s_clean\" /></td>\n</tr>\n"; + // Structure and data + echo "<!--\n"; + echo "<tr><th class=\"data left\" rowspan=\"2\">"; + echo "<input type=\"radio\" id=\"what3\" name=\"what\" value=\"structureanddata\" /><label for=\"what3\">{$lang['strstructureanddata']}</label></th>\n"; + echo "<td>{$lang['strformat']}</td>\n"; + echo "<td><select name=\"sd_format\">\n"; + echo "<option value=\"copy\">COPY</option>\n"; + echo "<option value=\"sql\">SQL</option>\n"; + echo "</select>\n</td>\n</tr>\n"; + echo "<td><label for=\"sd_clean\">{$lang['strdrop']}</label></td><td><input type=\"checkbox\" id=\"sd_clean\" name=\"sd_clean\" /></td>\n</tr>\n"; + echo "-->\n"; + echo "</table>\n"; + + echo "<h3>{$lang['stroptions']}</h3>\n"; + echo "<p><input type=\"radio\" id=\"output1\" name=\"output\" value=\"show\" checked=\"checked\" /><label for=\"output1\">{$lang['strshow']}</label>\n"; + echo "<br/><input type=\"radio\" id=\"output2\" name=\"output\" value=\"download\" /><label for=\"output2\">{$lang['strdownload']}</label></p>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"export\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"subject\" value=\"view\" />\n"; + echo "<input type=\"hidden\" name=\"view\" value=\"", htmlspecialchars($_REQUEST['view']), "\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['strexport']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Show definition for a view + */ + function doDefinition($msg = '') { + global $data, $misc; + global $lang; + + // Get view + $vdata = $data->getView($_REQUEST['view']); + + $misc->printTrail('view'); + $misc->printTabs('view','definition'); + $misc->printMsg($msg); + + if ($vdata->recordCount() > 0) { + // Show comment if any + if ($vdata->fields['relcomment'] !== null) + echo "<p class=\"comment\">", $misc->printVal($vdata->fields['relcomment']), "</p>\n"; + + echo "<table style=\"width: 100%\">\n"; + echo "<tr><th class=\"data\">{$lang['strdefinition']}</th></tr>\n"; + echo "<tr><td class=\"data1\">", $misc->printVal($vdata->fields['vwdefinition']), "</td></tr>\n"; + echo "</table>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + + $misc->printNavLinks(array ( 'alter' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'viewproperties.php', + 'urlvars' => array ( + 'action' => 'edit', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'view' => $_REQUEST['view'] + ) + ) + ), + 'content' => $lang['stralter'] + )), 'viewproperties-definition', get_defined_vars()); + } + + /** + * Displays a screen where they can alter a column in a view + */ + function doProperties($msg = '') { + global $data, $misc; + global $lang; + + if (!isset($_REQUEST['stage'])) $_REQUEST['stage'] = 1; + + switch ($_REQUEST['stage']) { + case 1: + global $lang; + + $misc->printTrail('column'); + $misc->printTitle($lang['stralter'],'pg.column.alter'); + $misc->printMsg($msg); + + echo "<form action=\"viewproperties.php\" method=\"post\">\n"; + + // Output view header + echo "<table>\n"; + echo "<tr><th class=\"data required\">{$lang['strname']}</th><th class=\"data required\">{$lang['strtype']}</th>"; + echo "<th class=\"data\">{$lang['strdefault']}</th><th class=\"data\">{$lang['strcomment']}</th></tr>"; + + $column = $data->getTableAttributes($_REQUEST['view'], $_REQUEST['column']); + + if (!isset($_REQUEST['default'])) { + $_REQUEST['field'] = $column->fields['attname']; + $_REQUEST['default'] = $_REQUEST['olddefault'] = $column->fields['adsrc']; + $_REQUEST['comment'] = $column->fields['comment']; + } + + echo "<tr><td><input name=\"field\" size=\"32\" value=\"", + htmlspecialchars($_REQUEST['field']), "\" /></td>"; + + echo "<td>", $misc->printVal($data->formatType($column->fields['type'], $column->fields['atttypmod'])), "</td>"; + echo "<td><input name=\"default\" size=\"20\" value=\"", + htmlspecialchars($_REQUEST['default']), "\" /></td>"; + echo "<td><input name=\"comment\" size=\"32\" value=\"", + htmlspecialchars($_REQUEST['comment']), "\" /></td>"; + + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"properties\" />\n"; + echo "<input type=\"hidden\" name=\"stage\" value=\"2\" />\n"; + echo $misc->form; + echo "<input type=\"hidden\" name=\"view\" value=\"", htmlspecialchars($_REQUEST['view']), "\" />\n"; + echo "<input type=\"hidden\" name=\"column\" value=\"", htmlspecialchars($_REQUEST['column']), "\" />\n"; + echo "<input type=\"hidden\" name=\"olddefault\" value=\"", htmlspecialchars($_REQUEST['olddefault']), "\" />\n"; + echo "<input type=\"submit\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + + break; + case 2: + global $data, $lang; + + // Check inputs + if (trim($_REQUEST['field']) == '') { + $_REQUEST['stage'] = 1; + doProperties($lang['strcolneedsname']); + return; + } + + // Alter the view column + $status = $data->alterColumn($_REQUEST['view'], $_REQUEST['column'], $_REQUEST['field'], + false, false, $_REQUEST['default'], $_REQUEST['olddefault'], + '', '', '', '', $_REQUEST['comment']); + if ($status == 0) + doDefault($lang['strcolumnaltered']); + else { + $_REQUEST['stage'] = 1; + doProperties($lang['strcolumnalteredbad']); + return; + } + break; + default: + echo "<p>{$lang['strinvalidparam']}</p>\n"; + } + } + + function doAlter($confirm = false, $msg = '') { + if ($confirm) { + global $data, $misc, $lang; + + $misc->printTrail('view'); + $misc->printTitle($lang['stralter'], 'pg.view.alter'); + $misc->printMsg($msg); + + // Fetch view info + $view = $data->getView($_REQUEST['view']); + + if ($view->recordCount() > 0) { + if (!isset($_POST['name'])) $_POST['name'] = $view->fields['relname']; + if (!isset($_POST['owner'])) $_POST['owner'] = $view->fields['relowner']; + if (!isset($_POST['newschema'])) $_POST['newschema'] = $view->fields['nspname']; + if (!isset($_POST['comment'])) $_POST['comment'] = $view->fields['relcomment']; + + echo "<form action=\"viewproperties.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_POST['name']), "\" /></td></tr>\n"; + + if ($data->isSuperUser()) { + + // Fetch all users + $users = $data->getUsers(); + + echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n"; + echo "<td class=\"data1\"><select name=\"owner\">"; + while (!$users->EOF) { + $uname = $users->fields['usename']; + echo "<option value=\"", htmlspecialchars($uname), "\"", + ($uname == $_POST['owner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n"; + $users->moveNext(); + } + echo "</select></td></tr>\n"; + } + + if ($data->hasAlterTableSchema()) { + $schemas = $data->getSchemas(); + echo "<tr><th class=\"data left required\">{$lang['strschema']}</th>\n"; + echo "<td class=\"data1\"><select name=\"newschema\">"; + while (!$schemas->EOF) { + $schema = $schemas->fields['nspname']; + echo "<option value=\"", htmlspecialchars($schema), "\"", + ($schema == $_POST['newschema']) ? ' selected="selected"' : '', ">", htmlspecialchars($schema), "</option>\n"; + $schemas->moveNext(); + } + echo "</select></td></tr>\n"; + } + + echo "<tr><th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "<td class=\"data1\">"; + echo "<textarea rows=\"3\" cols=\"32\" name=\"comment\">", + htmlspecialchars($_POST['comment']), "</textarea></td></tr>\n"; + echo "</table>\n"; + echo "<input type=\"hidden\" name=\"action\" value=\"alter\" />\n"; + echo "<input type=\"hidden\" name=\"view\" value=\"", htmlspecialchars($_REQUEST['view']), "\" />\n"; + echo $misc->form; + echo "<p><input type=\"submit\" name=\"alter\" value=\"{$lang['stralter']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else echo "<p>{$lang['strnodata']}</p>\n"; + } + else{ + global $data, $lang, $_reload_browser, $misc; + + // For databases that don't allow owner change + if (!isset($_POST['owner'])) $_POST['owner'] = ''; + if (!isset($_POST['newschema'])) $_POST['newschema'] = null; + + $status = $data->alterView($_POST['view'], $_POST['name'], $_POST['owner'], $_POST['newschema'], $_POST['comment']); + if ($status == 0) { + // If view has been renamed, need to change to the new name and + // reload the browser frame. + if ($_POST['view'] != $_POST['name']) { + // Jump them to the new view name + $_REQUEST['view'] = $_POST['name']; + // Force a browser reload + $_reload_browser = true; + } + // If schema has changed, need to change to the new schema and reload the browser + if (!empty($_POST['newschema']) && ($_POST['newschema'] != $data->_schema)) { + // Jump them to the new sequence schema + $misc->setCurrentSchema($_POST['newschema']); + $_reload_browser = true; + } + doDefault($lang['strviewaltered']); + } + else doAlter(true, $lang['strviewalteredbad']); + } + } + + function doTree () { + global $misc, $data; + + $reqvars = $misc->getRequestVars('column'); + $columns = $data->getTableAttributes($_REQUEST['view']); + + $attrs = array ( + 'text' => field('attname'), + 'action' => url('colproperties.php', + $reqvars, + array( + 'view' => $_REQUEST['view'], + 'column' => field('attname') + ) + ), + 'icon' => 'Column', + 'iconAction' => url('display.php', + $reqvars, + array( + 'view' => $_REQUEST['view'], + 'column' => field('attname'), + 'query' => replace( + 'SELECT "%column%", count(*) AS "count" FROM %view% GROUP BY "%column%" ORDER BY "%column%"', + array ( + '%column%' => field('attname'), + '%view%' => $_REQUEST['view'] + ) + ) + ) + ), + 'toolTip'=> field('comment') + ); + + $misc->printTree($columns, $attrs, 'viewcolumns'); + + exit; + } + + if ($action == 'tree') doTree(); + + /** + * Show view definition and virtual columns + */ + function doDefault($msg = '') { + global $data, $misc; + global $lang; + + function attPre(&$rowdata) { + global $data; + $rowdata->fields['+type'] = $data->formatType($rowdata->fields['type'], $rowdata->fields['atttypmod']); + } + + $misc->printTrail('view'); + $misc->printTabs('view','columns'); + $misc->printMsg($msg); + + // Get view + $vdata = $data->getView($_REQUEST['view']); + // Get columns (using same method for getting a view) + $attrs = $data->getTableAttributes($_REQUEST['view']); + + // Show comment if any + if ($vdata->fields['relcomment'] !== null) + echo "<p class=\"comment\">", $misc->printVal($vdata->fields['relcomment']), "</p>\n"; + + $columns = array( + 'column' => array( + 'title' => $lang['strcolumn'], + 'field' => field('attname'), + 'url' => "colproperties.php?subject=column&{$misc->href}&view=".urlencode($_REQUEST['view'])."&", + 'vars' => array('column' => 'attname'), + ), + 'type' => array( + 'title' => $lang['strtype'], + 'field' => field('+type'), + ), + 'default' => array( + 'title' => $lang['strdefault'], + 'field' => field('adsrc'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('comment'), + ), + ); + + $actions = array( + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'viewproperties.php', + 'urlvars' => array ( + 'action' => 'properties', + 'view' => $_REQUEST['view'], + 'column' => field('attname') + ) + ) + ) + ), + ); + + $misc->printTable($attrs, $columns, $actions, 'viewproperties-viewproperties', null, 'attPre'); + + echo "<br />\n"; + + $navlinks = array ( + 'browse' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array ( + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'view' => $_REQUEST['view'], + 'subject' => 'view', + 'return' => 'view' + ) + ) + ), + 'content' => $lang['strbrowse'] + ), + 'select' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'views.php', + 'urlvars' => array ( + 'action' => 'confselectrows', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'view' => $_REQUEST['view'] + ) + ) + ), + 'content' => $lang['strselect'] + ), + 'drop' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'views.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'view' => $_REQUEST['view'] + ) + ) + ), + 'content' => $lang['strdrop'] + ), + 'alter' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'viewproperties.php', + 'urlvars' => array ( + 'action' => 'confirm_alter', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'], + 'view' => $_REQUEST['view'] + ) + ) + ), + 'content' => $lang['stralter'] + ) + ); + + $misc->printNavLinks($navlinks, 'viewproperties-viewproperties', get_defined_vars()); + } + + $misc->printHeader($lang['strviews'] . ' - ' . $_REQUEST['view']); + $misc->printBody(); + + switch ($action) { + case 'save_edit': + if (isset($_POST['cancel'])) doDefinition(); + else doSaveEdit(); + break; + case 'edit': + doEdit(); + break; + case 'export': + doExport(); + break; + case 'definition': + doDefinition(); + break; + case 'properties': + if (isset($_POST['cancel'])) doDefault(); + else doProperties(); + break; + case 'alter': + if (isset($_POST['alter'])) doAlter(false); + else doDefault(); + break; + case 'confirm_alter': + doAlter(true); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/views.php b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/views.php new file mode 100644 index 00000000..b60b0947 --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/views.php @@ -0,0 +1,787 @@ +<?php + + /** + * Manage views in a database + * + * $Id: views.php,v 1.75 2007/12/15 22:57:43 ioguix Exp $ + */ + + // Include application functions + include_once('./libraries/lib.inc.php'); + include_once('./classes/Gui.php'); + + $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; + if (!isset($msg)) $msg = ''; + + /** + * Ask for select parameters and perform select + */ + function doSelectRows($confirm, $msg = '') { + global $data, $misc, $_no_output; + global $lang; + + if ($confirm) { + $misc->printTrail('view'); + $misc->printTabs('view','select'); + $misc->printMsg($msg); + + $attrs = $data->getTableAttributes($_REQUEST['view']); + + echo "<form action=\"views.php\" method=\"post\" id=\"selectform\">\n"; + if ($attrs->recordCount() > 0) { + // JavaScript for select all feature + echo "<script type=\"text/javascript\">\n"; + echo "//<![CDATA[\n"; + echo " function selectAll() {\n"; + echo " for (var i=0; i<document.getElementById('selectform').elements.length; i++) {\n"; + echo " var e = document.getElementById('selectform').elements[i];\n"; + echo " if (e.name.indexOf('show') == 0) e.checked = document.getElementById('selectform').selectall.checked;\n"; + echo " }\n"; + echo " }\n"; + echo "//]]>\n"; + echo "</script>\n"; + + echo "<table>\n"; + + // Output table header + echo "<tr><th class=\"data\">{$lang['strshow']}</th><th class=\"data\">{$lang['strcolumn']}</th>"; + echo "<th class=\"data\">{$lang['strtype']}</th><th class=\"data\">{$lang['stroperator']}</th>"; + echo "<th class=\"data\">{$lang['strvalue']}</th></tr>"; + + $i = 0; + while (!$attrs->EOF) { + $attrs->fields['attnotnull'] = $data->phpBool($attrs->fields['attnotnull']); + // Set up default value if there isn't one already + if (!isset($_REQUEST['values'][$attrs->fields['attname']])) + $_REQUEST['values'][$attrs->fields['attname']] = null; + if (!isset($_REQUEST['ops'][$attrs->fields['attname']])) + $_REQUEST['ops'][$attrs->fields['attname']] = null; + // Continue drawing row + $id = (($i % 2) == 0 ? '1' : '2'); + echo "<tr class=\"data{$id}\">\n"; + echo "<td style=\"white-space:nowrap;\">"; + echo "<input type=\"checkbox\" name=\"show[", htmlspecialchars($attrs->fields['attname']), "]\"", + isset($_REQUEST['show'][$attrs->fields['attname']]) ? ' checked="checked"' : '', " /></td>"; + echo "<td style=\"white-space:nowrap;\">", $misc->printVal($attrs->fields['attname']), "</td>"; + echo "<td style=\"white-space:nowrap;\">", $misc->printVal($data->formatType($attrs->fields['type'], $attrs->fields['atttypmod'])), "</td>"; + echo "<td style=\"white-space:nowrap;\">"; + echo "<select name=\"ops[{$attrs->fields['attname']}]\">\n"; + foreach (array_keys($data->selectOps) as $v) { + echo "<option value=\"", htmlspecialchars($v), "\"", ($v == $_REQUEST['ops'][$attrs->fields['attname']]) ? ' selected="selected"' : '', + ">", htmlspecialchars($v), "</option>\n"; + } + echo "</select></td>\n"; + echo "<td style=\"white-space:nowrap;\">", $data->printField("values[{$attrs->fields['attname']}]", + $_REQUEST['values'][$attrs->fields['attname']], $attrs->fields['type']), "</td>"; + echo "</tr>\n"; + $i++; + $attrs->moveNext(); + } + // Select all checkbox + echo "<tr><td colspan=\"5\"><input type=\"checkbox\" id=\"selectall\" name=\"selectall\" accesskey=\"a\" onclick=\"javascript:selectAll()\" /><label for=\"selectall\">{$lang['strselectallfields']}</label></td></tr>"; + echo "</table>\n"; + } + else echo "<p>{$lang['strinvalidparam']}</p>\n"; + + echo "<p><input type=\"hidden\" name=\"action\" value=\"selectrows\" />\n"; + echo "<input type=\"hidden\" name=\"view\" value=\"", htmlspecialchars($_REQUEST['view']), "\" />\n"; + echo "<input type=\"hidden\" name=\"subject\" value=\"view\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" name=\"select\" accesskey=\"r\" value=\"{$lang['strselect']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + else { + if (!isset($_POST['show'])) $_POST['show'] = array(); + if (!isset($_POST['values'])) $_POST['values'] = array(); + if (!isset($_POST['nulls'])) $_POST['nulls'] = array(); + + // Verify that they haven't supplied a value for unary operators + foreach ($_POST['ops'] as $k => $v) { + if ($data->selectOps[$v] == 'p' && $_POST['values'][$k] != '') { + doSelectRows(true, $lang['strselectunary']); + return; + } + } + + if (sizeof($_POST['show']) == 0) + doSelectRows(true, $lang['strselectneedscol']); + else { + // Generate query SQL + $query = $data->getSelectSQL($_REQUEST['view'], array_keys($_POST['show']), + $_POST['values'], $_POST['ops']); + $_REQUEST['query'] = $query; + $_REQUEST['return'] = "schema"; + $_no_output = true; + include('./display.php'); + exit; + } + } + + } + + /** + * Show confirmation of drop and perform actual drop + */ + function doDrop($confirm) { + global $data, $misc; + global $lang, $_reload_browser; + + if (empty($_REQUEST['view']) && empty($_REQUEST['ma'])) { + doDefault($lang['strspecifyviewtodrop']); + exit(); + } + + if ($confirm) { + $misc->printTrail('view'); + $misc->printTitle($lang['strdrop'],'pg.view.drop'); + + echo "<form action=\"views.php\" method=\"post\">\n"; + + //If multi drop + if (isset($_REQUEST['ma'])) { + foreach($_REQUEST['ma'] as $v) { + $a = unserialize(htmlspecialchars_decode($v, ENT_QUOTES)); + echo "<p>", sprintf($lang['strconfdropview'], $misc->printVal($a['view'])), "</p>\n"; + echo '<input type="hidden" name="view[]" value="', htmlspecialchars($a['view']), "\" />\n"; + } + } + else { + echo "<p>", sprintf($lang['strconfdropview'], $misc->printVal($_REQUEST['view'])), "</p>\n"; + echo "<input type=\"hidden\" name=\"view\" value=\"", htmlspecialchars($_REQUEST['view']), "\" />\n"; + } + + echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; + + echo $misc->form; + echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; + echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n"; + echo "</form>\n"; + } + else { + if (is_array($_POST['view'])) { + $msg = ''; + $status = $data->beginTransaction(); + if ($status == 0) { + foreach($_POST['view'] as $s) { + $status = $data->dropView($s, isset($_POST['cascade'])); + if ($status == 0) + $msg.= sprintf('%s: %s<br />', htmlentities($s, ENT_QUOTES, 'UTF-8'), $lang['strviewdropped']); + else { + $data->endTransaction(); + doDefault(sprintf('%s%s: %s<br />', $msg, htmlentities($s, ENT_QUOTES, 'UTF-8'), $lang['strviewdroppedbad'])); + return; + } + } + } + if($data->endTransaction() == 0) { + // Everything went fine, back to the Default page.... + $_reload_browser = true; + doDefault($msg); + } + else doDefault($lang['strviewdroppedbad']); + } + else{ + $status = $data->dropView($_POST['view'], isset($_POST['cascade'])); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strviewdropped']); + } + else + doDefault($lang['strviewdroppedbad']); + } + } + + } + + /** + * Sets up choices for table linkage, and which fields to select for the view we're creating + */ + function doSetParamsCreate($msg = '') { + global $data, $misc; + global $lang; + + // Check that they've chosen tables for the view definition + if (!isset($_POST['formTables']) ) doWizardCreate($lang['strviewneedsdef']); + else { + // Initialise variables + if (!isset($_REQUEST['formView'])) $_REQUEST['formView'] = ''; + if (!isset($_REQUEST['formComment'])) $_REQUEST['formComment'] = ''; + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreateviewwiz'], 'pg.view.create'); + $misc->printMsg($msg); + + $tblCount = sizeof($_POST['formTables']); + //unserialize our schema/table information and store in arrSelTables + for ($i = 0; $i < $tblCount; $i++) { + $arrSelTables[] = unserialize($_POST['formTables'][$i]); + } + + $linkCount = $tblCount; + + //get linking keys + $rsLinkKeys = $data->getLinkingKeys($arrSelTables); + $linkCount = $rsLinkKeys->recordCount() > $tblCount ? $rsLinkKeys->recordCount() : $tblCount; + + $arrFields = array(); //array that will hold all our table/field names + + //if we have schemas we need to specify the correct schema for each table we're retrieiving + //with getTableAttributes + $curSchema = $data->_schema; + for ($i = 0; $i < $tblCount; $i++) { + if ($data->_schema != $arrSelTables[$i]['schemaname']) { + $data->setSchema($arrSelTables[$i]['schemaname']); + } + + $attrs = $data->getTableAttributes($arrSelTables[$i]['tablename']); + while (!$attrs->EOF) { + $arrFields["{$arrSelTables[$i]['schemaname']}.{$arrSelTables[$i]['tablename']}.{$attrs->fields['attname']}"] = serialize(array( + 'schemaname' => $arrSelTables[$i]['schemaname'], + 'tablename' => $arrSelTables[$i]['tablename'], + 'fieldname' => $attrs->fields['attname']) + ); + $attrs->moveNext(); + } + + $data->setSchema($curSchema); + } + asort($arrFields); + + echo "<form action=\"views.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strviewname']}</th></tr>"; + echo "<tr>\n<td class=\"data1\">\n"; + // View name + echo "<input name=\"formView\" value=\"", htmlspecialchars($_REQUEST['formView']), "\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" />\n"; + echo "</td>\n</tr>\n"; + echo "<tr><th class=\"data\">{$lang['strcomment']}</th></tr>"; + echo "<tr>\n<td class=\"data1\">\n"; + // View comments + echo "<textarea name=\"formComment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_REQUEST['formComment']), "</textarea>\n"; + echo "</td>\n</tr>\n"; + echo "</table>\n"; + + // Output selector for fields to be retrieved from view + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strcolumns']}</th></tr>"; + echo "<tr>\n<td class=\"data1\">\n"; + echo GUI::printCombo($arrFields, 'formFields[]', false, '', true); + echo "</td>\n</tr>"; + echo "<tr><td><input type=\"radio\" name=\"dblFldMeth\" id=\"dblFldMeth1\" value=\"rename\" /><label for=\"dblFldMeth1\">{$lang['strrenamedupfields']}</label>"; + echo "<br /><input type=\"radio\" name=\"dblFldMeth\" id=\"dblFldMeth2\" value=\"drop\" /><label for=\"dblFldMeth2\">{$lang['strdropdupfields']}</label>"; + echo "<br /><input type=\"radio\" name=\"dblFldMeth\" id=\"dblFldMeth3\" value=\"\" checked=\"checked\" /><label for=\"dblFldMeth3\">{$lang['strerrordupfields']}</label></td></tr></table><br />"; + + // Output the Linking keys combo boxes + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strviewlink']}</th></tr>"; + $rowClass = 'data1'; + for ($i = 0; $i < $linkCount; $i++) { + // Initialise variables + if (!isset($formLink[$i]['operator'])) $formLink[$i]['operator'] = 'INNER JOIN'; + echo "<tr>\n<td class=\"$rowClass\">\n"; + + if (!$rsLinkKeys->EOF) { + $curLeftLink = htmlspecialchars(serialize(array('schemaname' => $rsLinkKeys->fields['p_schema'], 'tablename' => $rsLinkKeys->fields['p_table'], 'fieldname' => $rsLinkKeys->fields['p_field']) ) ); + $curRightLink = htmlspecialchars(serialize(array('schemaname' => $rsLinkKeys->fields['f_schema'], 'tablename' => $rsLinkKeys->fields['f_table'], 'fieldname' => $rsLinkKeys->fields['f_field']) ) ); + $rsLinkKeys->moveNext(); + } + else { + $curLeftLink = ''; + $curRightLink = ''; + } + + echo GUI::printCombo($arrFields, "formLink[$i][leftlink]", true, $curLeftLink, false ); + echo GUI::printCombo($data->joinOps, "formLink[$i][operator]", true, $formLink[$i]['operator']); + echo GUI::printCombo($arrFields, "formLink[$i][rightlink]", true, $curRightLink, false ); + echo "</td>\n</tr>\n"; + $rowClass = $rowClass == 'data1' ? 'data2' : 'data1'; + } + echo "</table>\n<br />\n"; + + // Build list of available operators (infix only) + $arrOperators = array(); + foreach ($data->selectOps as $k => $v) { + if ($v == 'i') $arrOperators[$k] = $k; + } + + // Output additional conditions, note that this portion of the wizard treats the right hand side as literal values + //(not as database objects) so field names will be treated as strings, use the above linking keys section to perform joins + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strviewconditions']}</th></tr>"; + $rowClass = 'data1'; + for ($i = 0; $i < $linkCount; $i++) { + echo "<tr>\n<td class=\"$rowClass\">\n"; + echo GUI::printCombo($arrFields, "formCondition[$i][field]"); + echo GUI::printCombo($arrOperators, "formCondition[$i][operator]", false, false); + echo "<input type=\"text\" name=\"formCondition[$i][txt]\" />\n"; + echo "</td>\n</tr>\n"; + $rowClass = $rowClass == 'data1' ? 'data2' : 'data1'; + } + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create_wiz\" />\n"; + + foreach ($arrSelTables as $curTable) { + echo "<input type=\"hidden\" name=\"formTables[]\" value=\"" . htmlspecialchars(serialize($curTable) ) . "\" />\n"; + } + + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + } + + /** + * Display a wizard where they can enter a new view + */ + function doWizardCreate($msg = '') { + global $data, $misc; + global $lang; + + $tables = $data->getTables(true); + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreateviewwiz'], 'pg.view.create'); + $misc->printMsg($msg); + + echo "<form action=\"views.php\" method=\"post\">\n"; + echo "<table>\n"; + echo "<tr><th class=\"data\">{$lang['strtables']}</th></tr>"; + echo "<tr>\n<td class=\"data1\">\n"; + + $arrTables = array(); + while (!$tables->EOF) { + $arrTmp = array(); + $arrTmp['schemaname'] = $tables->fields['nspname']; + $arrTmp['tablename'] = $tables->fields['relname']; + $arrTables[$tables->fields['nspname'] . '.' . $tables->fields['relname']] = serialize($arrTmp); + $tables->moveNext(); + } + echo GUI::printCombo($arrTables, 'formTables[]', false, '', true); + + echo "</td>\n</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"set_params_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strnext']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Displays a screen where they can enter a new view + */ + function doCreate($msg = '') { + global $data, $misc, $conf; + global $lang; + + if (!isset($_REQUEST['formView'])) $_REQUEST['formView'] = ''; + if (!isset($_REQUEST['formDefinition'])) { + if (isset($_SESSION['sqlquery'])) + $_REQUEST['formDefinition'] = $_SESSION['sqlquery']; + else $_REQUEST['formDefinition'] = 'SELECT '; + } + if (!isset($_REQUEST['formComment'])) $_REQUEST['formComment'] = ''; + + $misc->printTrail('schema'); + $misc->printTitle($lang['strcreateview'], 'pg.view.create'); + $misc->printMsg($msg); + + echo "<form action=\"views.php\" method=\"post\">\n"; + echo "<table style=\"width: 100%\">\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n"; + echo "\t<td class=\"data1\"><input name=\"formView\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", + htmlspecialchars($_REQUEST['formView']), "\" /></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strdefinition']}</th>\n"; + echo "\t<td class=\"data1\"><textarea style=\"width:100%;\" rows=\"10\" cols=\"50\" name=\"formDefinition\">", + htmlspecialchars($_REQUEST['formDefinition']), "</textarea></td>\n\t</tr>\n"; + echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strcomment']}</th>\n"; + echo "\t\t<td class=\"data1\"><textarea name=\"formComment\" rows=\"3\" cols=\"32\">", + htmlspecialchars($_REQUEST['formComment']), "</textarea></td>\n\t</tr>\n"; + echo "</table>\n"; + echo "<p><input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; + echo $misc->form; + echo "<input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; + echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; + echo "</form>\n"; + } + + /** + * Actually creates the new view in the database + */ + function doSaveCreate() { + global $data, $lang, $_reload_browser; + + // Check that they've given a name and a definition + if ($_POST['formView'] == '') doCreate($lang['strviewneedsname']); + elseif ($_POST['formDefinition'] == '') doCreate($lang['strviewneedsdef']); + else { + $status = $data->createView($_POST['formView'], $_POST['formDefinition'], false, $_POST['formComment']); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strviewcreated']); + } + else + doCreate($lang['strviewcreatedbad']); + } + } + + /** + * Actually creates the new wizard view in the database + */ + function doSaveCreateWiz() { + global $data, $lang, $_reload_browser; + + // Check that they've given a name and fields they want to select + + if (!strlen($_POST['formView']) ) doSetParamsCreate($lang['strviewneedsname']); + else if (!isset($_POST['formFields']) || !count($_POST['formFields']) ) doSetParamsCreate($lang['strviewneedsfields']); + else { + $selFields = ''; + + if (! empty($_POST['dblFldMeth']) ) + $tmpHsh = array(); + + foreach ($_POST['formFields'] as $curField) { + $arrTmp = unserialize($curField); + $data->fieldArrayClean($arrTmp); + if (! empty($_POST['dblFldMeth']) ) { // doublon control + if (empty($tmpHsh[$arrTmp['fieldname']])) { // field does not exist + $selFields .= "\"{$arrTmp['schemaname']}\".\"{$arrTmp['tablename']}\".\"{$arrTmp['fieldname']}\", "; + $tmpHsh[$arrTmp['fieldname']] = 1; + } else if ($_POST['dblFldMeth'] == 'rename') { // field exist and must be renamed + $tmpHsh[$arrTmp['fieldname']]++; + $selFields .= "\"{$arrTmp['schemaname']}\".\"{$arrTmp['tablename']}\".\"{$arrTmp['fieldname']}\" AS \"{$arrTmp['schemaname']}_{$arrTmp['tablename']}_{$arrTmp['fieldname']}{$tmpHsh[$arrTmp['fieldname']]}\", "; + } + /* field already exist, just ignore this one */ + } else { // no doublon control + $selFields .= "\"{$arrTmp['schemaname']}\".\"{$arrTmp['tablename']}\".\"{$arrTmp['fieldname']}\", "; + } + } + + $selFields = substr($selFields, 0, -2); + unset($arrTmp, $tmpHsh); + $linkFields = ''; + + // If we have links, out put the JOIN ... ON statements + if (is_array($_POST['formLink']) ) { + // Filter out invalid/blank entries for our links + $arrLinks = array(); + foreach ($_POST['formLink'] as $curLink) { + if (strlen($curLink['leftlink']) && strlen($curLink['rightlink']) && strlen($curLink['operator'])) { + $arrLinks[] = $curLink; + } + } + // We must perform some magic to make sure that we have a valid join order + $count = sizeof($arrLinks); + $arrJoined = array(); + $arrUsedTbls = array(); + + // If we have at least one join condition, output it + if ($count > 0) { + $j = 0; + while ($j < $count) { + foreach ($arrLinks as $curLink) { + + $arrLeftLink = unserialize($curLink['leftlink']); + $arrRightLink = unserialize($curLink['rightlink']); + $data->fieldArrayClean($arrLeftLink); + $data->fieldArrayClean($arrRightLink); + + $tbl1 = "\"{$arrLeftLink['schemaname']}\".\"{$arrLeftLink['tablename']}\""; + $tbl2 = "\"{$arrRightLink['schemaname']}\".\"{$arrRightLink['tablename']}\""; + + if ( (!in_array($curLink, $arrJoined) && in_array($tbl1, $arrUsedTbls)) || !count($arrJoined) ) { + + // Make sure for multi-column foreign keys that we use a table alias tables joined to more than once + // This can (and should be) more optimized for multi-column foreign keys + $adj_tbl2 = in_array($tbl2, $arrUsedTbls) ? "$tbl2 AS alias_ppa_" . mktime() : $tbl2; + + $linkFields .= strlen($linkFields) ? "{$curLink['operator']} $adj_tbl2 ON (\"{$arrLeftLink['schemaname']}\".\"{$arrLeftLink['tablename']}\".\"{$arrLeftLink['fieldname']}\" = \"{$arrRightLink['schemaname']}\".\"{$arrRightLink['tablename']}\".\"{$arrRightLink['fieldname']}\") " + : "$tbl1 {$curLink['operator']} $adj_tbl2 ON (\"{$arrLeftLink['schemaname']}\".\"{$arrLeftLink['tablename']}\".\"{$arrLeftLink['fieldname']}\" = \"{$arrRightLink['schemaname']}\".\"{$arrRightLink['tablename']}\".\"{$arrRightLink['fieldname']}\") "; + + $arrJoined[] = $curLink; + if (!in_array($tbl1, $arrUsedTbls) ) $arrUsedTbls[] = $tbl1; + if (!in_array($tbl2, $arrUsedTbls) ) $arrUsedTbls[] = $tbl2; + } + } + $j++; + } + } + } + + //if linkfields has no length then either _POST['formLink'] was not set, or there were no join conditions + //just select from all seleted tables - a cartesian join do a + if (!strlen($linkFields) ) { + foreach ($_POST['formTables'] as $curTable) { + $arrTmp = unserialize($curTable); + $data->fieldArrayClean($arrTmp); + $linkFields .= strlen($linkFields) ? ", \"{$arrTmp['schemaname']}\".\"{$arrTmp['tablename']}\"" : "\"{$arrTmp['schemaname']}\".\"{$arrTmp['tablename']}\""; + } + } + + $addConditions = ''; + if (is_array($_POST['formCondition']) ) { + foreach ($_POST['formCondition'] as $curCondition) { + if (strlen($curCondition['field']) && strlen($curCondition['txt']) ) { + $arrTmp = unserialize($curCondition['field']); + $data->fieldArrayClean($arrTmp); + $addConditions .= strlen($addConditions) ? " AND \"{$arrTmp['schemaname']}\".\"{$arrTmp['tablename']}\".\"{$arrTmp['fieldname']}\" {$curCondition['operator']} '{$curCondition['txt']}' " + : " \"{$arrTmp['schemaname']}\".\"{$arrTmp['tablename']}\".\"{$arrTmp['fieldname']}\" {$curCondition['operator']} '{$curCondition['txt']}' "; + } + } + } + + $viewQuery = "SELECT $selFields FROM $linkFields "; + + //add where from additional conditions + if (strlen($addConditions) ) $viewQuery .= ' WHERE ' . $addConditions; + + $status = $data->createView($_POST['formView'], $viewQuery, false, $_POST['formComment']); + if ($status == 0) { + $_reload_browser = true; + doDefault($lang['strviewcreated']); + } + else + doSetParamsCreate($lang['strviewcreatedbad']); + } + } + + /** + * Show default list of views in the database + */ + function doDefault($msg = '') { + global $data, $misc, $conf; + global $lang; + + $misc->printTrail('schema'); + $misc->printTabs('schema','views'); + $misc->printMsg($msg); + + $views = $data->getViews(); + + $columns = array( + 'view' => array( + 'title' => $lang['strview'], + 'field' => field('relname'), + 'url' => "redirect.php?subject=view&{$misc->href}&", + 'vars' => array('view' => 'relname'), + ), + 'owner' => array( + 'title' => $lang['strowner'], + 'field' => field('relowner'), + ), + 'actions' => array( + 'title' => $lang['stractions'], + ), + 'comment' => array( + 'title' => $lang['strcomment'], + 'field' => field('relcomment'), + ), + ); + + $actions = array( + 'multiactions' => array( + 'keycols' => array('view' => 'relname'), + 'url' => 'views.php', + ), + 'browse' => array( + 'content' => $lang['strbrowse'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'display.php', + 'urlvars' => array ( + 'action' => 'confselectrows', + 'subject' => 'view', + 'return' => 'schema', + 'view' => field('relname') + ) + ) + ) + ), + 'select' => array( + 'content' => $lang['strselect'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'views.php', + 'urlvars' => array ( + 'action' => 'confselectrows', + 'view' => field('relname') + ) + ) + ) + ), + +// Insert is possible if the relevant rule for the view has been created. +// 'insert' => array( +// 'title' => $lang['strinsert'], +// 'url' => "views.php?action=confinsertrow&{$misc->href}&", +// 'vars' => array('view' => 'relname'), + // ), + + 'alter' => array( + 'content' => $lang['stralter'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'viewproperties.php', + 'urlvars' => array ( + 'action' => 'confirm_alter', + 'view' => field('relname') + ) + ) + ) + ), + 'drop' => array( + 'multiaction' => 'confirm_drop', + 'content' => $lang['strdrop'], + 'attr'=> array ( + 'href' => array ( + 'url' => 'views.php', + 'urlvars' => array ( + 'action' => 'confirm_drop', + 'view' => field('relname') + ) + ) + ) + ), + ); + + $misc->printTable($views, $columns, $actions, 'views-views', $lang['strnoviews']); + + $navlinks = array ( + 'create' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'views.php', + 'urlvars' => array ( + 'action' => 'create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreateview'] + ), + 'createwiz' => array ( + 'attr'=> array ( + 'href' => array ( + 'url' => 'views.php', + 'urlvars' => array ( + 'action' => 'wiz_create', + 'server' => $_REQUEST['server'], + 'database' => $_REQUEST['database'], + 'schema' => $_REQUEST['schema'] + ) + ) + ), + 'content' => $lang['strcreateviewwiz'] + ) + ); + $misc->printNavLinks($navlinks, 'views-views', get_defined_vars()); + + } + + /** + * Generate XML for the browser tree. + */ + function doTree() { + global $misc, $data; + + $views = $data->getViews(); + + $reqvars = $misc->getRequestVars('view'); + + $attrs = array( + 'text' => field('relname'), + 'icon' => 'View', + 'iconAction' => url('display.php', $reqvars, array('view' => field('relname'))), + 'toolTip'=> field('relcomment'), + 'action' => url('redirect.php', $reqvars, array('view' => field('relname'))), + 'branch' => url('views.php', $reqvars, + array ( + 'action' => 'subtree', + 'view' => field('relname') + ) + ) + ); + + $misc->printTree($views, $attrs, 'views'); + exit; + } + + function doSubTree() { + global $misc, $data; + + $tabs = $misc->getNavTabs('view'); + $items = $misc->adjustTabsForTree($tabs); + $reqvars = $misc->getRequestVars('view'); + + $attrs = array( + 'text' => field('title'), + 'icon' => field('icon'), + 'action' => url(field('url'), $reqvars, field('urlvars'), array('view' => $_REQUEST['view'])), + 'branch' => ifempty( + field('branch'), '', url(field('url'), field('urlvars'), $reqvars, + array( + 'action' => 'tree', + 'view' => $_REQUEST['view'] + ) + ) + ), + ); + + $misc->printTree($items, $attrs, 'view'); + exit; + } + + if ($action == 'tree') doTree(); + if ($action == 'subtree') dosubTree(); + + $misc->printHeader($lang['strviews']); + $misc->printBody(); + + switch ($action) { + case 'selectrows': + if (!isset($_REQUEST['cancel'])) doSelectRows(false); + else doDefault(); + break; + case 'confselectrows': + doSelectRows(true); + break; + case 'save_create_wiz': + if (isset($_REQUEST['cancel'])) doDefault(); + else doSaveCreateWiz(); + break; + case 'wiz_create': + doWizardCreate(); + break; + case 'set_params_create': + if (isset($_POST['cancel'])) doDefault(); + else doSetParamsCreate(); + break; + case 'save_create': + if (isset($_REQUEST['cancel'])) doDefault(); + else doSaveCreate(); + break; + case 'create': + doCreate(); + break; + case 'drop': + if (isset($_POST['drop'])) doDrop(false); + else doDefault(); + break; + case 'confirm_drop': + doDrop(true); + break; + default: + doDefault(); + break; + } + + $misc->printFooter(); + +?> diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/xloadtree/xloadtree2.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/xloadtree/xloadtree2.js new file mode 100644 index 00000000..b36eed7e --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/xloadtree/xloadtree2.js @@ -0,0 +1,507 @@ +/*----------------------------------------------------------------------------\ +| XLoadTree 2 PRE RELEASE | +| | +| This is a pre release and may not be redistributed. | +| Watch http://webfx.eae.net for the final version | +| | +|-----------------------------------------------------------------------------| +| Created by Erik Arvidsson & Emil A Eklund | +| (http://webfx.eae.net/contact.html#erik) | +| (http://webfx.eae.net/contact.html#emil) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------------------------------------------| +| A tree menu system for IE 5.5+, Mozilla 1.4+, Opera 7.5+ | +|-----------------------------------------------------------------------------| +| Copyright (c) 1999 - 2005 Erik Arvidsson & Emil A Eklund | +|-----------------------------------------------------------------------------| +| This software is provided "as is", without warranty of any kind, express or | +| implied, including but not limited to the warranties of merchantability, | +| fitness for a particular purpose and noninfringement. In no event shall the | +| authors or copyright holders be liable for any claim, damages or other | +| liability, whether in an action of contract, tort or otherwise, arising | +| from, out of or in connection with the software or the use or other | +| dealings in the software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| This software is available under the three different licenses mentioned | +| below. To use this software you must chose, and qualify, for one of those. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Non-Commercial License http://webfx.eae.net/license.html | +| Permits anyone the right to use the software in a non-commercial context | +| free of charge. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Commercial license http://webfx.eae.net/commercial.html | +| Permits the license holder the right to use the software in a commercial | +| context. Such license must be specifically obtained, however it's valid for | +| any number of implementations of the licensed software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| GPL - The GNU General Public License http://www.gnu.org/licenses/gpl.txt | +| Permits anyone the right to use and modify the software without limitations | +| as long as proper credits are given and the original and modified source | +| code are included. Requires that the final product, software derivate from | +| the original source or any software utilizing a GPL component, such as | +| this, is also licensed under the GPL license. | +|-----------------------------------------------------------------------------| +| 2004-02-21 | Pre release distributed to a few selected tester | +| 2005-06-06 | Removed dependency on XML Extras | +|-----------------------------------------------------------------------------| +| Dependencies: xtree2.js Supplies the tree control | +|-----------------------------------------------------------------------------| +| Created 2003-??-?? | All changes are in the log above. | Updated 2004-06-06 | +|-----------------------------------------------------------------------------| +| Note local changes have been made to allow Icons to have different links | +| than thier text label counterparts. Thanks to JGuillaume de Rorthais | +\----------------------------------------------------------------------------*/ + +webFXTreeConfig.loadingText = "Loading..."; +webFXTreeConfig.loadingIcon = "images/loading.gif"; +webFXTreeConfig.errorLoadingText = "Error Loading"; +webFXTreeConfig.errorIcon = "images/exclamation.16.png"; +webFXTreeConfig.reloadText = "Click to reload"; + + +function WebFXLoadTree(sText, sXmlSrc, oAction, sBehavior, sIcon, oIconAction, sOpenIcon) { + WebFXTree.call(this, sText, oAction, sBehavior, sIcon, oIconAction, sOpenIcon); + + // setup default property values + this.src = sXmlSrc; + this.loading = !sXmlSrc; + this.loaded = !sXmlSrc; + this.errorText = ""; + + if (this.src) { + /// add loading Item + this._loadingItem = WebFXLoadTree.createLoadingItem(); + this.add(this._loadingItem); + + if (this.getExpanded()) { + WebFXLoadTree.loadXmlDocument(this); + } + } +} + +WebFXLoadTree.createLoadingItem = function () { + return new WebFXTreeItem(webFXTreeConfig.loadingText, null, null, + webFXTreeConfig.loadingIcon); +}; + +_p = WebFXLoadTree.prototype = new WebFXTree; + +_p.setExpanded = function (b) { + WebFXTree.prototype.setExpanded.call(this, b); + + if (this.src && b) { + if (!this.loaded && !this.loading) { + // load + WebFXLoadTree.loadXmlDocument(this); + } + } +}; + +function WebFXLoadTreeItem(sText, sXmlSrc, oAction, eParent, sIcon, oIconAction, sOpenIcon) { + WebFXTreeItem.call(this, sText, oAction, eParent, sIcon, oIconAction, sOpenIcon); + +// setup default property values + this.src = sXmlSrc; + this.loading = !sXmlSrc; + this.loaded = !sXmlSrc; + this.errorText = ""; + + if (this.src) { + /// add loading Item + this._loadingItem = WebFXLoadTree.createLoadingItem(); + this.add(this._loadingItem); + + if (this.getExpanded()) { + WebFXLoadTree.loadXmlDocument(this); + } + } +} + +_p = WebFXLoadTreeItem.prototype = new WebFXTreeItem; + +_p.setExpanded = function (b) { + WebFXTreeItem.prototype.setExpanded.call(this, b); + + if (this.src && b) { + if (!this.loaded && !this.loading) { + // load + WebFXLoadTree.loadXmlDocument(this); + } + } +}; + +// reloads the src file if already loaded +WebFXLoadTree.prototype.reload = +_p.reload = function () { + // if loading do nothing + if (this.loaded) { + var t = this.getTree(); + var expanded = this.getExpanded(); + var sr = t.getSuspendRedraw(); + t.setSuspendRedraw(true); + + // remove + while (this.childNodes.length > 0) { + this.remove(this.childNodes[this.childNodes.length - 1]); + } + + this.loaded = false; + + this._loadingItem = WebFXLoadTree.createLoadingItem(); + this.add(this._loadingItem); + + if (expanded) { + this.setExpanded(true); + } + + t.setSuspendRedraw(sr); + this.update(); + } else if (this.open && !this.loading) { + WebFXLoadTree.loadXmlDocument(this); + } +}; + + + +WebFXLoadTree.prototype.setSrc = +_p.setSrc = function (sSrc) { + var oldSrc = this.src; + if (sSrc == oldSrc) return; + + var expanded = this.getExpanded(); + + // remove all + this._callSuspended(function () { + // remove + while (this.childNodes.length > 0) + this.remove(this.childNodes[this.childNodes.length - 1]); + }); + this.update(); + + this.loaded = false; + this.loading = false; + if (this._loadingItem) { + this._loadingItem.dispose(); + this._loadingItem = null; + } + this.src = sSrc; + + if (sSrc) { + this._loadingItem = WebFXLoadTree.createLoadingItem(); + this.add(this._loadingItem); + } + + this.setExpanded(expanded); +}; + +WebFXLoadTree.prototype.getSrc = +_p.getSrc = function () { + return this.src; +}; + +WebFXLoadTree.prototype.dispose = function () { + WebFXTree.prototype.dispose.call(this); + if (this._xmlHttp) + { + if (this._xmlHttp.dispose) { + this._xmlHttp.dispose(); + } + try { + this._xmlHttp.onreadystatechange = null; + this._xmlHttp.abort(); + } catch (ex) {} + this._xmlHttp = null; + } +}; + +_p.dispose = function () { + WebFXTreeItem.prototype.dispose.call(this); + if (this._xmlHttp) { + if (this._xmlHttp.dispose) { + this._xmlHttp.dispose(); + } + try { + this._xmlHttp.onreadystatechange = null; + this._xmlHttp.abort(); + } catch (ex) {} + this._xmlHttp = null; + } +}; + + +// The path is divided by '/' and the item is identified by the text +WebFXLoadTree.prototype.openPath = +_p.openPath = function (sPath, bSelect, bFocus) { + // remove any old pending paths to open + delete this._pathToOpen; + //delete this._pathToOpenById; + this._selectPathOnLoad = bSelect; + this._focusPathOnLoad = bFocus; + + if (sPath == "") { + if (bSelect) { + this.select(); + } + if (bFocus) { + window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.getId() + "\")", 10); + } + return; + } + + var parts = sPath.split("/"); + var remainingPath = parts.slice(1).join("/"); + + if (sPath.charAt(0) == "/") { + this.getTree().openPath(remainingPath, bSelect, bFocus); + } else { + // open + this.setExpanded(true); + if (this.loaded) { + parts = sPath.split("/"); + var ti = this.findChildByText(parts[0]); + if (!ti) { + throw "Could not find child node with text \"" + parts[0] + "\""; + } + + ti.openPath(remainingPath, bSelect, bFocus); + } else { + this._pathToOpen = sPath; + } + } +}; + + +// Opera has some serious attribute problems. We need to use getAttribute +// for certain attributes +WebFXLoadTree._attrs = ["text", "src", "action", "id", "target"]; + +WebFXLoadTree.createItemFromElement = function (oNode) { + var jsAttrs = {}; + var i, l; + + l = oNode.attributes.length; + for (i = 0; i < l; i++) { + oNode.attributes[i].nodeValue = String(oNode.attributes[i].nodeValue).replace(/&/g, "&"); // replace for Safari fix for DOM Bug + if (oNode.attributes[i] == null) { + continue; + } + jsAttrs[oNode.attributes[i].nodeName] = oNode.attributes[i].nodeValue; + } + + var name, val; + for (i = 0; i < WebFXLoadTree._attrs.length; i++) { + name = WebFXLoadTree._attrs[i]; + value = oNode.getAttribute(name); + if (value) { + jsAttrs[name] = value; + } + } + + var action; + if (jsAttrs.onaction) { + action = new Function(jsAttrs.onaction); + } else if (jsAttrs.action) { + action = jsAttrs.action; + } + var jsNode = new WebFXLoadTreeItem(jsAttrs.html || "", jsAttrs.src, action, + null, jsAttrs.icon, jsAttrs.iconaction, jsAttrs.openicon); + if (jsAttrs.text) { + jsNode.setText(jsAttrs.text); + } + + if (jsAttrs.target) { + jsNode.target = jsAttrs.target; + } + if (jsAttrs.id) { + jsNode.setId(jsAttrs.id); + } + if (jsAttrs.tooltip) { + jsNode.toolTip = jsAttrs.tooltip; + } + if (jsAttrs.expanded) { + jsNode.setExpanded(jsAttrs.expanded != "false"); + } + if (jsAttrs.onload) { + jsNode.onload = new Function(jsAttrs.onload); + } + if (jsAttrs.onerror) { + jsNode.onerror = new Function(jsAttrs.onerror); + } + + jsNode.attributes = jsAttrs; + + // go through childNodes + var cs = oNode.childNodes; + l = cs.length; + for (i = 0; i < l; i++) { + if (cs[i].tagName == "tree") { + jsNode.add(WebFXLoadTree.createItemFromElement(cs[i])); + } + } + + return jsNode; +}; + +WebFXLoadTree.loadXmlDocument = function (jsNode) { + if (jsNode.loading || jsNode.loaded) { + return; + } + jsNode.loading = true; + var id = jsNode.getId(); + jsNode._xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest : new window.ActiveXObject("Microsoft.XmlHttp"); + jsNode._xmlHttp.open("GET", jsNode.src, true); // async + jsNode._xmlHttp.onreadystatechange = new Function("WebFXLoadTree._onload(\"" + id + "\")"); + + // call in new thread to allow ui to update + window.setTimeout("WebFXLoadTree._ontimeout(\"" + id + "\")", 10); +}; + +WebFXLoadTree._onload = function (sId) { + var jsNode = webFXTreeHandler.all[sId]; + if (jsNode._xmlHttp.readyState == 4) { + WebFXLoadTree.documentLoaded(jsNode); + webFXLoadTreeQueue.remove(jsNode); + if (jsNode._xmlHttp.dispose) + jsNode._xmlHttp.dispose(); + jsNode._xmlHttp = null; + } +}; + +WebFXLoadTree._ontimeout = function (sId) { + var jsNode = webFXTreeHandler.all[sId]; + webFXLoadTreeQueue.add(jsNode); +}; + + + +// Inserts an xml document as a subtree to the provided node +WebFXLoadTree.documentLoaded = function (jsNode) { + if (jsNode.loaded) { + return; + } + + jsNode.errorText = ""; + jsNode.loaded = true; + jsNode.loading = false; + + var t = jsNode.getTree(); + var oldSuspend = t.getSuspendRedraw(); + t.setSuspendRedraw(true); + + var doc = jsNode._xmlHttp.responseXML; + + // check that the load of the xml file went well + if(!doc || doc.parserError && doc.parseError.errorCode != 0 || !doc.documentElement) { + if (!doc || doc.parseError.errorCode == 0) { + jsNode.errorText = webFXTreeConfig.errorLoadingText + " " + jsNode.src + " (" + jsNode._xmlHttp.status + ": " + jsNode._xmlHttp.statusText + ")"; + } else { + jsNode.errorText = webFXTreeConfig.errorLoadingText + " " + jsNode.src + " (" + doc.parseError.reason + ")"; + } + } else { + // there is one extra level of tree elements + var root = doc.documentElement; + + // loop through all tree children + var count = 0; + var cs = root.childNodes; + var l = cs.length; + var newNode; + for (var i = 0; i < l; i++) { + if (cs[i].tagName == "tree") { + newNode=WebFXLoadTree.createItemFromElement(cs[i]); + jsNode.add(newNode); + count++; + } + } + + if (count == 1 && newNode.childNodes.length) { + var parent=jsNode.parentNode; + newNode.setExpanded(true); + } + // if no children we got an error + if (count == 0) { + jsNode.errorText = webFXTreeConfig.errorLoadingText + " " + jsNode.src + " (???)"; + } + } + + if (jsNode.errorText != "") { + jsNode._loadingItem.icon = webFXTreeConfig.errorIcon; + jsNode._loadingItem.text = jsNode.errorText; + jsNode._loadingItem.action = WebFXLoadTree._reloadParent; + jsNode._loadingItem.toolTip = webFXTreeConfig.reloadText; + + t.setSuspendRedraw(oldSuspend); + + jsNode._loadingItem.update(); + + if (typeof jsNode.onerror == "function") { + jsNode.onerror(); + } + } else { + // remove dummy + if (jsNode._loadingItem != null) { + jsNode.remove(jsNode._loadingItem); + } + + if (jsNode._pathToOpen) { + jsNode.openPath(jsNode._pathToOpen, jsNode._selectPathOnLoad, jsNode._focusPathOnLoad); + } + + t.setSuspendRedraw(oldSuspend); + jsNode.update(); + if (typeof jsNode.onload == "function") { + jsNode.onload(); + } + } +}; + +WebFXLoadTree._reloadParent = function () { + this.getParent().reload(); +}; + + + + + + + +var webFXLoadTreeQueue = { + _nodes: [], + _ie: /msie/i.test(navigator.userAgent), + _opera: /opera/i.test(navigator.userAgent), + + add: function (jsNode) { + if (this._ie || this._opera) { + this._nodes.push(jsNode); + if (this._nodes.length == 1) { + this._send(); + } + } else { + jsNode._xmlHttp.send(null); + } + }, + + remove: function (jsNode) { + if (this._ie || this._opera) { + arrayHelper.remove(this._nodes, jsNode); + if (this._nodes.length > 0) { + this._send(); + } + } + }, + + // IE only + _send: function () { + var id = this._nodes[0].getId(); + var jsNode = webFXTreeHandler.all[id]; + if (!jsNode) { + return; + } + // if no _xmlHttp then remove it + if (!jsNode._xmlHttp) { + this.remove(jsNode); + } else { + jsNode._xmlHttp.send(null); + } + } +}; diff --git a/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/xloadtree/xtree2.js b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/xloadtree/xtree2.js new file mode 100644 index 00000000..c7feecbc --- /dev/null +++ b/.devilbox/www/htdocs/vendor/phppgadmin-5.6.0/xloadtree/xtree2.js @@ -0,0 +1,1621 @@ +/*----------------------------------------------------------------------------\ +| XTree 2 PRE RELEASE | +| | +| This is a pre release and redistribution is discouraged. | +| Watch http://webfx.eae.net for the final version | +| | +|-----------------------------------------------------------------------------| +| Created by Erik Arvidsson & Emil A Eklund | +| (http://webfx.eae.net/contact.html#erik) | +| (http://webfx.eae.net/contact.html#emil) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------------------------------------------| +| A tree menu system for IE 5.5+, Mozilla 1.4+, Opera 7, KHTML | +|-----------------------------------------------------------------------------| +| Copyright (c) 1999 - 2005 Erik Arvidsson & Emil A Eklund | +|-----------------------------------------------------------------------------| +| This software is provided "as is", without warranty of any kind, express or | +| implied, including but not limited to the warranties of merchantability, | +| fitness for a particular purpose and noninfringement. In no event shall the | +| authors or copyright holders be liable for any claim, damages or other | +| liability, whether in an action of contract, tort or otherwise, arising | +| from, out of or in connection with the software or the use or other | +| dealings in the software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| This software is available under the three different licenses mentioned | +| below. To use this software you must chose, and qualify, for one of those. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Non-Commercial License http://webfx.eae.net/license.html | +| Permits anyone the right to use the software in a non-commercial context | +| free of charge. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Commercial license http://webfx.eae.net/commercial.html | +| Permits the license holder the right to use the software in a commercial | +| context. Such license must be specifically obtained, however it's valid for | +| any number of implementations of the licensed software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| GPL - The GNU General Public License http://www.gnu.org/licenses/gpl.txt | +| Permits anyone the right to use and modify the software without limitations | +| as long as proper credits are given and the original and modified source | +| code are included. Requires that the final product, software derivate from | +| the original source or any software utilizing a GPL component, such as | +| this, is also licensed under the GPL license. | +|-----------------------------------------------------------------------------| +| 2004-02-21 | Pre release distributed to a few selected tester | +| 2005-06-06 | Added single tab index to improve keyboard navigation | +|-----------------------------------------------------------------------------| +| Dependencies: xtree2.css Used to define the look and feel | +|-----------------------------------------------------------------------------| +| Created 2003-??-?? | All changes are in the log above. | Updated 2004-06-06 | +\----------------------------------------------------------------------------*/ + + +// +// WebFXTreePersisitance +function WebFXTreePersistence() {} +var _p = WebFXTreePersistence.prototype; +_p.getExpanded = function (oNode) { return false; }; +_p.setExpanded = function (oNode, bOpen) {}; + + + +// Cookie handling +function WebFXCookie() {} + +_p = WebFXCookie.prototype; + +_p.setCookie = function (sName, sValue, nDays) { + var expires = ""; + if (typeof nDays == "number") { + var d = new Date(); + d.setTime(d.getTime() + nDays * 24 * 60 * 60 * 1000); + expires = "; expires=" + d.toGMTString(); + } + + document.cookie = sName + "=" + escape(sValue) + expires + "; path=/"; +}; + +_p.getCookie = function (sName) { + var re = new RegExp("(\;|^)[^;]*(" + sName + ")\=([^;]*)(;|$)"); + var res = re.exec(document.cookie); + return res != null ? unescape(res[3]) : null; +}; + +_p.removeCookie = function (name) { + this.setCookie(name, "", -1); +}; + + +// +// persistence using cookies +// +// This is uses one cookie with the ids of the expanded nodes separated using '+' +// +function WebFXTreeCookiePersistence() { + this._openedMap = {}; + this._cookies = new WebFXCookie; + var s = this._cookies.getCookie(this.cookieName); + if (s) { + var a = s.split("+"); + for (var i = a.length - 1; i >= 0; i--) + this._openedMap[a[i]] = true; + } +} + +_p = WebFXTreeCookiePersistence.prototype = new WebFXTreePersistence; + +_p.cookieName = "webfx-tree-cookie-persistence" + +_p.getExpanded = function (oNode) { + return oNode.id in this._openedMap; +}; + +_p.setExpanded = function (oNode, bOpen) { + var old = this.getExpanded(oNode); + if (old != bOpen) { + if (bOpen) { + this._openedMap[oNode.id] = true; + } else { + delete this._openedMap[oNode.id]; + } + + var res = []; + var i = 0; + for (var id in this._openedMap) + res[i++] = id; + this._cookies.setCookie(this.cookieName, res.join("+")); + } +}; + + + +// this object provides a few useful methods when working with arrays +var arrayHelper = { + indexOf: function (a, o) { + for (var i = 0; i < a.length; i++) { + if (a[i] == o) { + return i; + } + } + return -1; + }, + + insertBefore: function (a, o, o2) { + var i = this.indexOf(a, o2); + if (i == -1) { + a.push(o); + } else { + a.splice(i, 0, o); + } + }, + + remove: function (a, o) { + var i = this.indexOf(a, o); + if (i != -1) { + a.splice(i, 1); + } + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// WebFX Tree Config object // +/////////////////////////////////////////////////////////////////////////////// +var webFXTreeConfig = { + rootIcon : "images/folder.png", + openRootIcon : "images/openfolder.png", + folderIcon : "images/folder.png", + openFolderIcon : "images/openfolder.png", + fileIcon : "images/file.png", + iIcon : "images/I.png", + lIcon : "images/L.png", + lMinusIcon : "images/Lminus.png", + lPlusIcon : "images/Lplus.png", + tIcon : "images/T.png", + tMinusIcon : "images/Tminus.png", + tPlusIcon : "images/Tplus.png", + plusIcon : "images/plus.png", + minusIcon : "images/minus.png", + blankIcon : "images/blank.png", + defaultText : "Tree Item", + defaultAction : null, + defaultBehavior : "classic", + usePersistence : true +}; + +/////////////////////////////////////////////////////////////////////////////// +// WebFX Tree Handler object // +/////////////////////////////////////////////////////////////////////////////// + +var webFXTreeHandler = { + ie: /msie/i.test(navigator.userAgent), + opera: /opera/i.test(navigator.userAgent), + idCounter: 0, + idPrefix: "wfxt-", + getUniqueId: function () { + return this.idPrefix + this.idCounter++; + }, + all: {}, + getNodeById: function (sId) { + return all[sId]; + }, + addNode: function (oNode) { + this.all[oNode.id] = oNode; + }, + removeNode: function (oNode) { + delete this.all[oNode.id]; + }, + + handleEvent: function (e) { + var el = e.target || e.srcElement; + while (el != null && !this.all[el.id]) { + el = el.parentNode; + } + + if (el == null) { + return false; + } + var node = this.all[el.id]; + if (typeof node["_on" + e.type] == "function") { + return node["_on" + e.type](e); + } + return false; + }, + + dispose: function () { + if (this.disposed) return; + for (var id in this.all) { + this.all[id].dispose(); + } + this.disposed = true; + }, + + htmlToText: function (s) { + return String(s).replace(/\s+|<([^>])+>|&|<|>|"| /gi, this._htmlToText); + }, + + _htmlToText: function (s) { + switch (s) { + case "&": + return "&"; + case "<": + return "<"; + case ">": + return ">"; + case """: + return "\""; + case " ": + return String.fromCharCode(160); + default: + if (/\s+/.test(s)) { + return " "; + } + if (/^<BR/gi.test(s)) { + return "\n"; + } + return ""; + } + }, + + textToHtml: function (s) { + return String(s).replace(/&|<|>|\n|\"|\u00A0/g, this._textToHtml); + }, + + _textToHtml: function (s) { + switch (s) { + case "&": + return "&"; + case "<": + return "<"; + case ">": + return ">"; + case "\n": + return "<BR>"; + case "\"": + return """; // so we can use this in attributes + default: + return " "; + } + }, + + persistenceManager: new WebFXTreeCookiePersistence() +}; + + +/////////////////////////////////////////////////////////////////////////////// +// WebFXTreeAbstractNode +/////////////////////////////////////////////////////////////////////////////// + +function WebFXTreeAbstractNode(sText, oAction, oIconAction) { + this.childNodes = []; + if (sText) this.text = sText; + if (oAction) this.action = oAction; + if (oIconAction) this.iconAction = oIconAction; + this.id = webFXTreeHandler.getUniqueId(); + if (webFXTreeConfig.usePersistence) { + this.open = webFXTreeHandler.persistenceManager.getExpanded(this); + } + webFXTreeHandler.addNode(this); +} + + +_p = WebFXTreeAbstractNode.prototype; +_p._selected = false; +_p.indentWidth = 19; +_p.open = false; +_p.text = webFXTreeConfig.defaultText; +_p.action = null; +_p.iconAcion = null; +_p.target = null; +_p.toolTip = null; +_p._focused = false; + +/* begin tree model */ + +_p.add = function (oChild, oBefore) { + var oldLast; + var emptyBefore = this.childNodes.length == 0; + var p = oChild.parentNode; + + if (oBefore == null) { // append + if (p != null) + p.remove(oChild); + oldLast = this.getLastChild(); + this.childNodes.push(oChild); + } else { // insertBefore + if (oBefore.parentNode != this) { + throw new Error("Can only add nodes before siblings"); + } + if (p != null) { + p.remove(oChild); + } + + arrayHelper.insertBefore(this.childNodes, oChild, oBefore); + } + + if (oBefore) { + if (oBefore == this.firstChild) { + this.firstChild = oChild; + } + oChild.previousSibling = oBefore.previousSibling; + oBefore.previousSibling = oChild; + oChild.nextSibling = oBefore; + } else { + if (!this.firstChild) { + this.firstChild = oChild; + } + if (this.lastChild) { + this.lastChild.nextSibling = oChild; + } + oChild.previousSibling = this.lastChild; + this.lastChild = oChild; + } + + oChild.parentNode = this; + var t = this.getTree(); + if (t) { + oChild.tree = t; + } + var d = this.getDepth(); + if (d != null) { + oChild.depth = d + 1; + } + + if (this.getCreated() && !t.getSuspendRedraw()) { + var el = this.getChildrenElement(); + var newEl = oChild.create(); + var refEl = oBefore ? oBefore.getElement() : null; + el.insertBefore(newEl, refEl); + + if (oldLast) { + oldLast.updateExpandIcon(); + } + if (emptyBefore) { + this.setExpanded(this.getExpanded()); + // if we are using classic expand will not update icon + if (t && t.getBehavior() != "classic") + this.updateIcon(); + } + } + + return oChild; +}; + + + +_p.remove = function (oChild) { + // backwards compatible. If no argument remove the node + if (arguments.length == 0) { + if (this.parentNode) { + return this.parentNode.remove(this); + } + return null; + } + + // if we remove selected or tree with the selected we should select this + var t = this.getTree(); + var si = t ? t.getSelected() : null; + if (si == oChild || oChild.contains(si)) { + if (si.getFocused()) { + this.select(); + window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10); + } else { + this.select(); + } + } + + if (oChild.parentNode != this) { + throw new Error("Can only remove children"); + } + arrayHelper.remove(this.childNodes, oChild); + + if (this.lastChild == oChild) { + this.lastChild = oChild.previousSibling; + } + if (this.firstChild == oChild) { + this.firstChild = oChild.nextSibling; + } + if (oChild.previousSibling) { + oChild.previousSibling.nextSibling = oChild.nextSibling; + } + if (oChild.nextSibling) { + oChild.nextSibling.previousSibling = oChild.previousSibling; + } + + var wasLast = oChild.isLastSibling(); + + oChild.parentNode = null; + oChild.tree = null; + oChild.depth = null; + + if (t && this.getCreated() && !t.getSuspendRedraw()) { + var el = this.getChildrenElement(); + var childEl = oChild.getElement(); + el.removeChild(childEl); + if (wasLast) { + var newLast = this.getLastChild(); + if (newLast) { + newLast.updateExpandIcon(); + } + } + if (!this.hasChildren()) { + el.style.display = "none"; + this.updateExpandIcon(); + this.updateIcon(); + } + } + + return oChild; +}; + +WebFXTreeAbstractNode._onTimeoutFocus = function (sId) { + var jsNode = webFXTreeHandler.all[sId]; + jsNode.focus(); +}; + +_p.getId = function () { + return this.id; +}; + +_p.getTree = function () { + throw new Error("getTree called on Abstract Node"); +}; + +_p.getDepth = function () { + throw new Error("getDepth called on Abstract Node"); +}; + +_p.getCreated = function () { + var t = this.getTree(); + return t && t.rendered; +}; + +_p.getParent = function () { + return this.parentNode; +}; + +_p.contains = function (oDescendant) { + if (oDescendant == null) return false; + if (oDescendant == this) return true; + var p = oDescendant.parentNode; + return this.contains(p); +}; + +_p.getChildren = _p.getChildNodes = function () { + return this.childNodes; +}; + +_p.getFirstChild = function () { + return this.childNodes[0]; +}; + +_p.getLastChild = function () { + return this.childNodes[this.childNodes.length - 1]; +}; + +_p.getPreviousSibling = function () { + return this.previousSibling; + //var p = this.parentNode; + //if (p == null) return null; + //var cs = p.childNodes; + //return cs[arrayHelper.indexOf(cs, this) - 1] +}; + +_p.getNextSibling = function () { + return this.nextSibling; + //var p = this.parentNode; + //if (p == null) return null; + //var cs = p.childNodes; + //return cs[arrayHelper.indexOf(cs, this) + 1] +}; + +_p.hasChildren = function () { + return this.childNodes.length > 0; +}; + +_p.isLastSibling = function () { + return this.nextSibling == null; + //return this.parentNode && this == this.parentNode.getLastChild(); +}; + +_p.findChildByText = function (s, n) { + if (!n) { + n = 0; + } + var isRe = s instanceof RegExp; + for (var i = 0; i < this.childNodes.length; i++) { + if (isRe && s.test(this.childNodes[i].getText()) || + this.childNodes[i].getText() == s) { + if (n == 0) { + return this.childNodes[i]; + } + n--; + } + } + return null; +}; + +_p.findNodeByText = function (s, n) { + if (!n) { + n = 0; + } + var isRe = s instanceof RegExp; + if (isRe && s.test(this.getText()) || this.getText() == s) { + if (n == 0) { + return this.childNodes[i]; + } + n--; + } + + var res; + for (var i = 0; i < this.childNodes.length; i++) { + res = this.childNodes[i].findNodeByText(s, n); + if (res) { + return res; + } + } + return null; +}; + +/* end tree model */ + +_p.setId = function (sId) { + var el = this.getElement(); + webFXTreeHandler.removeNode(this); + this.id = sId; + if (el) { + el.id = sId; + } + webFXTreeHandler.addNode(this); +}; + +_p.isSelected = function () { + return this._selected; +}; + +_p.select = function () { + this._setSelected(true); +}; + +_p.deselect = function () { + this._setSelected(false); +}; + +_p._setSelected = function (b) { + var t = this.getTree(); + if (!t) return; + if (this._selected != b) { + this._selected = b; + + var wasFocused = false; // used to keep focus state + var si = t.getSelected(); + if (b && si != null && si != this) { + var oldFireChange = t._fireChange; + wasFocused = si._focused; + t._fireChange = false; + si._setSelected(false); + t._fireChange = oldFireChange; + } + + var el = this.getRowElement(); + if (el) { + el.className = this.getRowClassName(); + } + if (b) { + this._setTabIndex(t.tabIndex); + t._selectedItem = this; + t._fireOnChange(); + t.setSelected(this); + if (wasFocused) { + this.focus(); + } + } else { + this._setTabIndex(-1); + } + + if (t.getBehavior() != "classic") { + this.updateIcon(); + } + } +}; + + +_p.getExpanded = function () { + return this.open; +}; + +_p.setExpanded = function (b) { + var ce; + this.open = b; + var t = this.getTree(); + if (this.hasChildren()) { + var si = t ? t.getSelected() : null; + if (!b && this.contains(si)) { + this.select(); + } + + var el = this.getElement(); + if (el) { + ce = this.getChildrenElement(); + if (ce) { + ce.style.display = b ? "block" : "none"; + } + var eie = this.getExpandIconElement(); + if (eie) { + eie.src = this.getExpandIconSrc(); + } + } + + if (webFXTreeConfig.usePersistence) { + webFXTreeHandler.persistenceManager.setExpanded(this, b); + } + } else { + ce = this.getChildrenElement(); + if (ce) + ce.style.display = "none"; + } + if (t && t.getBehavior() == "classic") { + this.updateIcon(); + } +}; + +_p.toggle = function () { + this.setExpanded(!this.getExpanded()); +}; + +_p.expand = function () { + this.setExpanded(true); +}; + +_p.collapse = function () { + this.setExpanded(false); +}; + +_p.collapseChildren = function () { + var cs = this.childNodes; + for (var i = 0; i < cs.length; i++) { + cs[i].collapseAll(); + } +}; + +_p.collapseAll = function () { + this.collapseChildren(); + this.collapse(); +}; + +_p.expandChildren = function () { + var cs = this.childNodes; + for (var i = 0; i < cs.length; i++) { + cs[i].expandAll(); + } +}; + +_p.expandAll = function () { + this.expandChildren(); + this.expand(); +}; + +_p.reveal = function () { + var p = this.getParent(); + if (p) { + p.setExpanded(true); + p.reveal(); + } +}; + +_p.openPath = function (sPath, bSelect, bFocus) { + if (sPath == "") { + if (bSelect) { + this.select(); + } + if (bFocus) { + window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10); + } + return; + } + + var parts = sPath.split("/"); + var remainingPath = parts.slice(1).join("/"); + var t = this.getTree(); + if (sPath.charAt(0) == "/") { + if (t) { + t.openPath(remainingPath, bSelect, bFocus); + } else { + throw "Invalid path"; + } + } else { + // open + this.setExpanded(true); + parts = sPath.split("/"); + var ti = this.findChildByText(parts[0]); + if (!ti) { + throw "Could not find child node with text \"" + parts[0] + "\""; + } + ti.openPath(remainingPath, bSelect, bFocus); + } +}; + +_p.focus = function () { + var el = this.getLabelElement(); + if (el) { + el.focus(); + } +}; + +_p.getFocused = function () { + return this._focused; +}; + +_p._setTabIndex = function (i) { + var a = this.getLabelElement(); + if (a) { + a.setAttribute("tabindex", i); + } +}; + + +// HTML generation + +_p.toHtml = function () { + var sb = []; + var cs = this.childNodes; + var l = cs.length; + for (var y = 0; y < l; y++) { + sb[y] = cs[y].toHtml(); + } + + var t = this.getTree(); + var hideLines = !t.getShowLines() || t == this.parentNode && !t.getShowRootLines(); + + var childrenHtml = "<div class=\"webfx-tree-children" + + (hideLines ? "-nolines" : "") + "\" style=\"" + + this.getLineStyle() + + (this.getExpanded() && this.hasChildren() ? "" : "display:none;") + + "\">" + + sb.join("") + + "</div>"; + + return "<div class=\"webfx-tree-item\" id=\"" + + this.id + "\"" + this.getEventHandlersHtml() + ">" + + this.getRowHtml() + + childrenHtml + + "</div>"; +}; + +_p.getRowHtml = function () { + var t = this.getTree(); + return "<div class=\"" + this.getRowClassName() + "\" style=\"padding-left:" + + Math.max(0, (this.getDepth() - 1) * this.indentWidth) + "px\">" + + this.getExpandIconHtml() + + //"<span class=\"webfx-tree-icon-and-label\">" + + this.getIconHtml() + + this.getLabelHtml() + + //"</span>" + + "</div>"; +}; + +_p.getRowClassName = function () { + return "webfx-tree-row" + (this.isSelected() ? " selected" : "") + + (this.action ? "" : " no-action"); +}; + +_p.getLabelHtml = function () { + var toolTip = this.getToolTip(); + var target = this.getTarget(); + var link = this._getHref(); + + if (link == '#') { + return "<span class=\"webfx-tree-item-label\" tabindex=\"-1\"" + + (toolTip ? " title=\"" + webFXTreeHandler.textToHtml(toolTip) + "\"" : "") + + " onfocus=\"webFXTreeHandler.handleEvent(event)\"" + + " onblur=\"webFXTreeHandler.handleEvent(event)\">" + + this.getHtml() + "</span>"; + } + + return "<a href=\"" + webFXTreeHandler.textToHtml(link) + + "\" class=\"webfx-tree-item-label\" tabindex=\"-1\"" + + (toolTip ? " title=\"" + webFXTreeHandler.textToHtml(toolTip) + "\"" : "") + + (target ? " target=\"" + target + "\"" : "") + + " onfocus=\"webFXTreeHandler.handleEvent(event)\"" + + " onblur=\"webFXTreeHandler.handleEvent(event)\">" + + this.getHtml() + "</a>"; +}; + +_p._getHref = function () { + if (typeof this.action == "string") + return this.action; + else + return "#"; +}; + +_p._getIconHref = function () { + if (typeof this.iconAction == "string") + return this.iconAction; + else + return this._getHref(); +} + +_p.getEventHandlersHtml = function () { + return ""; +}; + +_p.getIconHtml = function () { + // here we are not using textToHtml since the file names rarerly contains + // HTML... + var link = this._getIconHref(); + if (link == '#') + return "<img class=\"webfx-tree-icon\" src=\"" + this.getIconSrc() + "\"> "; + + return "<a href=\"" + webFXTreeHandler.textToHtml(link) + + "\"><img class=\"webfx-tree-icon\" src=\"" + this.getIconSrc() + "\"></a>"; +}; + +_p.getIconSrc = function () { + throw new Error("getIconSrc called on Abstract Node"); +}; + +_p.getExpandIconHtml = function () { + // here we are not using textToHtml since the file names rarerly contains + // HTML... + return "<img class=\"webfx-tree-expand-icon\" src=\"" + + this.getExpandIconSrc() + "\">"; +}; + + +_p.getExpandIconSrc = function () { + var src; + var t = this.getTree(); + var hideLines = !t.getShowLines() || t == this.parentNode && !t.getShowRootLines(); + + if (this.hasChildren()) { + var bits = 0; + /* + Bitmap used to determine which icon to use + 1 Plus + 2 Minus + 4 T Line + 8 L Line + */ + + if (t && t.getShowExpandIcons()) { + if (this.getExpanded()) { + bits = 2; + } else { + bits = 1; + } + } + + if (t && !hideLines) { + if (this.isLastSibling()) { + bits += 4; + } else { + bits += 8; + } + } + + switch (bits) { + case 1: + return webFXTreeConfig.plusIcon; + case 2: + return webFXTreeConfig.minusIcon; + case 4: + return webFXTreeConfig.lIcon; + case 5: + return webFXTreeConfig.lPlusIcon; + case 6: + return webFXTreeConfig.lMinusIcon; + case 8: + return webFXTreeConfig.tIcon; + case 9: + return webFXTreeConfig.tPlusIcon; + case 10: + return webFXTreeConfig.tMinusIcon; + default: // 0 + return webFXTreeConfig.blankIcon; + } + } else { + if (t && hideLines) { + return webFXTreeConfig.blankIcon; + } else if (this.isLastSibling()) { + return webFXTreeConfig.lIcon; + } else { + return webFXTreeConfig.tIcon; + } + } +}; + +_p.getLineStyle = function () { + return "background-position:" + this.getLineStyle2() + ";"; +}; + +_p.getLineStyle2 = function () { + return (this.isLastSibling() ? "-100" : (this.getDepth() - 1) * this.indentWidth) + "px 0"; +}; + +// End HTML generation + +// DOM +// this returns the div for the tree node +_p.getElement = function () { + return document.getElementById(this.id); +}; + +// the row is the div that is used to draw the node without the children +_p.getRowElement = function () { + var el = this.getElement(); + if (!el) return null; + return el.firstChild; +}; + +// plus/minus image +_p.getExpandIconElement = function () { + var el = this.getRowElement(); + if (!el) return null; + return el.firstChild; +}; + +_p.getIconElement = function () { + var el = this.getRowElement(); + if (!el) return null; + return el.childNodes[1]; +}; + +// anchor element +_p.getLabelElement = function () { + var el = this.getRowElement(); + if (!el) return null; + return el.lastChild; +}; + +// the div containing the children +_p.getChildrenElement = function () { + var el = this.getElement(); + if (!el) return null; + return el.lastChild; +}; + + +// IE uses about:blank if not attached to document and this can cause Win2k3 +// to fail +if (webFXTreeHandler.ie) { + _p.create = function () { + var dummy = document.createElement("div"); + dummy.style.display = "none"; + document.body.appendChild(dummy); + dummy.innerHTML = this.toHtml(); + var res = dummy.removeChild(dummy.firstChild); + document.body.removeChild(dummy); + return res; + }; +} else { + _p.create = function () { + var dummy = document.createElement("div"); + dummy.innerHTML = this.toHtml(); + return dummy.removeChild(dummy.firstChild); + }; +} + +// Getters and setters for some common fields + +_p.setIcon = function (s) { + this.icon = s; + if (this.getCreated()) { + this.updateIcon(); + } +}; + +_p.getIcon = function () { + return this.icon; +}; + +_p.setOpenIcon = function (s) { + this.openIcon = s; + if (this.getCreated()) { + this.updateIcon(); + } +}; + +_p.getOpenIcon = function () { + return this.openIcon; +}; + +_p.setText = function (s) { + this.setHtml(webFXTreeHandler.textToHtml(s)); +}; + +_p.getText = function () { + return webFXTreeHandler.htmlToText(this.getHtml()); +}; + +_p.setHtml = function (s) { + this.text = s; + var el = this.getLabelElement(); + if (el) { + el.innerHTML = s; + } +}; + +_p.getHtml = function () { + return this.text; +}; + +_p.setTarget = function (s) { + this.target = s; +}; + +_p.getTarget = function () { + return this.target; +}; + +_p.setToolTip = function (s) { + this.toolTip = s; + var el = this.getLabelElement(); + if (el) { + el.title = s; + } +}; + +_p.getToolTip = function () { + return this.toolTip; +}; + +_p.setAction = function (oAction) { + this.action = oAction; + var el = this.getLabelElement(); + if (el) { + el.href = this._getHref(); + } + el = this.getRowElement(); + if (el) { + el.className = this.getRowClassName(); + } +}; + +_p.getAction = function () { + return this.action; +}; + +_p.setIconAction = function (oAction) { + this.iconAction = oAction; + var el = this.getIconElement(); + if (el) { + el.href = this._getIconHref(); + } +} + +_p.getIconAction = function () { + if (this.iconAction) + return this.iconAction; + return _p.getAction(); +}; + +// update methods + +_p.update = function () { + var t = this.getTree(); + if (t.suspendRedraw) return; + var el = this.getElement(); + if (!el || !el.parentNode) return; + var newEl = this.create(); + el.parentNode.replaceChild(newEl, el); + this._setTabIndex(this.tabIndex); // in case root had the tab index + var si = t.getSelected(); + if (si && si.getFocused()) { + si.focus(); + } +}; + +_p.updateExpandIcon = function () { + var t = this.getTree(); + if (t.suspendRedraw) return; + var img = this.getExpandIconElement(); + img.src = this.getExpandIconSrc(); + var cel = this.getChildrenElement(); + cel.style.backgroundPosition = this.getLineStyle2(); +}; + +_p.updateIcon = function () { + var t = this.getTree(); + if (t.suspendRedraw) return; + var img = this.getIconElement(); + img.src = this.getIconSrc(); +}; + +// End DOM + +_p._callSuspended = function (f) { + var t = this.getTree(); + var sr = t.getSuspendRedraw(); + t.setSuspendRedraw(true); + f.call(this); + t.setSuspendRedraw(sr); +}; + +// Event handlers + +_p._onmousedown = function (e) { + var el = e.target || e.srcElement; + // expand icon + if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) { + this.toggle(); + if (webFXTreeHandler.ie) { + window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10); + } + return false; + } + + this.select(); + if (/*!/webfx-tree-item-label/.test(el.className) && */!webFXTreeHandler.opera) { // opera cancels the click if focus is called + + // in case we are not clicking on the label + if (webFXTreeHandler.ie) { + window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10); + } else { + this.focus(); + } + } + var rowEl = this.getRowElement(); + if (rowEl) { + rowEl.className = this.getRowClassName(); + } + + return false; +}; + +_p._onclick = function (e) { + var el = e.target || e.srcElement; + // expand icon + if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) { + return false; + } + + var doAction = null; + if (/webfx-tree-icon/.test(el.className) && this.iconAction) { + doAction = this.iconAction; + } else { + doAction = this.action; + } + + if (typeof doAction == "function") { + doAction(); + } else if (doAction != null) { + window.open(doAction, this.target || "_self"); + } + return false; +}; + + +_p._ondblclick = function (e) { + var el = e.target || e.srcElement; + // expand icon + if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) { + return; + } + + this.toggle(); +}; + +_p._onfocus = function (e) { + this.select(); + this._focused = true; +}; + +_p._onblur = function (e) { + this._focused = false; +}; + +_p._onkeydown = function (e) { + var n; + var rv = true; + switch (e.keyCode) { + case 39: // RIGHT + if (e.altKey) { + rv = true; + break; + } + if (this.hasChildren()) { + if (!this.getExpanded()) { + this.setExpanded(true); + } else { + this.getFirstChild().focus(); + } + } + rv = false; + break; + case 37: // LEFT + if (e.altKey) { + rv = true; + break; + } + if (this.hasChildren() && this.getExpanded()) { + this.setExpanded(false); + } else { + var p = this.getParent(); + var t = this.getTree(); + // don't go to root if hidden + if (p && (t.showRootNode || p != t)) { + p.focus(); + } + } + rv = false; + break; + + case 40: // DOWN + n = this.getNextShownNode(); + if (n) { + n.focus(); + } + rv = false; + break; + case 38: // UP + n = this.getPreviousShownNode() + if (n) { + n.focus(); + } + rv = false; + break; + } + + if (!rv && e.preventDefault) { + e.preventDefault(); + } + e.returnValue = rv; + return rv; +}; + +_p._onkeypress = function (e) { + if (!e.altKey && e.keyCode >= 37 && e.keyCode <= 40) { + if (e.preventDefault) { + e.preventDefault(); + } + e.returnValue = false; + return false; + } +}; + +// End event handlers + +_p.dispose = function () { + if (this.disposed) return; + for (var i = this.childNodes.length - 1; i >= 0; i--) { + this.childNodes[i].dispose(); + } + this.tree = null; + this.parentNode = null; + this.childNodes = null; + this.disposed = true; +}; + +// Some methods that are usable when navigating the tree using the arrows +_p.getLastShownDescendant = function () { + if (!this.getExpanded() || !this.hasChildren()) { + return this; + } + // we know there is at least 1 child + return this.getLastChild().getLastShownDescendant(); +}; + +_p.getNextShownNode = function () { + if (this.hasChildren() && this.getExpanded()) { + return this.getFirstChild(); + } else { + var p = this; + var next; + while (p != null) { + next = p.getNextSibling(); + if (next != null) { + return next; + } + p = p.getParent(); + } + return null; + } +}; + +_p.getPreviousShownNode = function () { + var ps = this.getPreviousSibling(); + if (ps != null) { + return ps.getLastShownDescendant(); + } + var p = this.getParent(); + var t = this.getTree(); + if (!t.showRootNode && p == t) { + return null; + } + return p; +}; + + + + + + + +/////////////////////////////////////////////////////////////////////////////// +// WebFXTree +/////////////////////////////////////////////////////////////////////////////// + +function WebFXTree(sText, oAction, sBehavior, sIcon, oIconAction, sOpenIcon) { + WebFXTreeAbstractNode.call(this, sText, oAction, oIconAction); + if (sIcon) this.icon = sIcon; + if (sOpenIcon) this.openIcon = sOpenIcon; + if (sBehavior) this.behavior = sBehavior; +} + +_p = WebFXTree.prototype = new WebFXTreeAbstractNode; +_p.indentWidth = 19; +_p.open = true; +_p._selectedItem = null; +_p._fireChange = true; +_p.rendered = false; +_p.suspendRedraw = false; +_p.showLines = true; +_p.showExpandIcons = true; +_p.showRootNode = true; +_p.showRootLines = true; + +_p.getTree = function () { + return this; +}; + +_p.getDepth = function () { + return 0; +}; + +_p.getCreated = function () { + return this.rendered; +}; + + +/* end tree model */ + +_p.getExpanded = function () { + return !this.showRootNode || WebFXTreeAbstractNode.prototype.getExpanded.call(this); +}; + +_p.setExpanded = function (b) { + if (!this.showRootNode) { + this.open = b; + } else { + WebFXTreeAbstractNode.prototype.setExpanded.call(this, b); + } +}; + +_p.getExpandIconHtml = function () { + return ""; +}; + +// we don't have an expand icon here +_p.getIconElement = function () { + var el = this.getRowElement(); + if (!el) return null; + return el.firstChild; +}; + +// no expand icon for root element +_p.getExpandIconElement = function (oDoc) { + return null; +}; + +_p.updateExpandIcon = function () { + // no expand icon +}; + +_p.getRowClassName = function () { + return WebFXTreeAbstractNode.prototype.getRowClassName.call(this) + + (this.showRootNode ? "" : " webfx-tree-hide-root"); +}; + + +// if classic then the openIcon is used for expanded, otherwise openIcon is used +// for selected + +_p.getIconSrc = function () { + var behavior = this.getTree() ? this.getTree().getBehavior() : webFXTreeConfig.defaultBehavior; + var open = behavior == "classic" && this.getExpanded() || + behavior != "classic" && this.isSelected(); + if (open && this.openIcon) { + return this.openIcon; + } + if (!open && this.icon) { + return this.icon; + } + // fall back on default icons + return open ? webFXTreeConfig.openRootIcon : webFXTreeConfig.rootIcon; +}; + +_p.getEventHandlersHtml = function () { + return " onclick=\"return webFXTreeHandler.handleEvent(event)\" " + + "onmousedown=\"return webFXTreeHandler.handleEvent(event)\" " + + "ondblclick=\"return webFXTreeHandler.handleEvent(event)\" " + + "onkeydown=\"return webFXTreeHandler.handleEvent(event)\" " + + "onkeypress=\"return webFXTreeHandler.handleEvent(event)\""; +}; + +_p.setSelected = function (o) { + if (this._selectedItem != o && o) { + o._setSelected(true); + } +}; + +_p._fireOnChange = function () { + if (this._fireChange && typeof this.onchange == "function") { + this.onchange(); + } +}; + +_p.getSelected = function () { + return this._selectedItem; +}; + +_p.tabIndex = ""; + +_p.setTabIndex = function (i) { + var n = this._selectedItem || (this.showRootNode ? this : this.firstChild); + this.tabIndex = i; + if (n) { + n._setTabIndex(i); + } +}; + +_p.getTabIndex = function () { + return this.tabIndex; +}; + +_p.setBehavior = function (s) { + this.behavior = s; +}; + +_p.getBehavior = function () { + return this.behavior || webFXTreeConfig.defaultBehavior; +}; + +_p.setShowLines = function (b) { + if (this.showLines != b) { + this.showLines = b; + if (this.rendered) { + this.update(); + } + } +}; + +_p.getShowLines = function () { + return this.showLines; +}; + +_p.setShowRootLines = function (b) { + if (this.showRootLines != b) { + this.showRootLines = b; + if (this.rendered) { + this.update(); + } + } +}; + +_p.getShowRootLines = function () { + return this.showRootLines; +}; + +_p.setShowExpandIcons = function (b) { + if (this.showExpandIcons != b) { + this.showExpandIcons = b; + if (this.rendered) { + this.getTree().update(); + } + } +}; + +_p.getShowExpandIcons = function () { + return this.showExpandIcons; +}; + +_p.setShowRootNode = function (b) { + if (this.showRootNode != b) { + this.showRootNode = b; + if (this.rendered) { + this.getTree().update(); + } + } +}; + +_p.getShowRoootNode = function () { + return this.showRootNode; +}; + +_p.onchange = function () {}; + +_p.create = function () { + var el = WebFXTreeAbstractNode.prototype.create.call(this); + this.setTabIndex(this.tabIndex); + this.rendered = true; + return el; +}; + +_p.write = function () { + document.write(this.toHtml()); + this.setTabIndex(this.tabIndex); + this.rendered = true; +}; + +_p.setSuspendRedraw = function (b) { + this.suspendRedraw = b; +}; + +_p.getSuspendRedraw = function () { + return this.suspendRedraw; +}; + + + +/////////////////////////////////////////////////////////////////////////////// +// WebFXTreeItem +/////////////////////////////////////////////////////////////////////////////// + +function WebFXTreeItem(sText, oAction, eParent, sIcon, oIconAction, sOpenIcon) { + WebFXTreeAbstractNode.call(this, sText, oAction, oIconAction); + if (sIcon) this.icon = sIcon; + if (sOpenIcon) this.openIcon = sOpenIcon; + if (eParent) eParent.add(this); +} + +_p = WebFXTreeItem.prototype = new WebFXTreeAbstractNode; +_p.tree = null; + +/* tree model */ + +_p.getDepth = function () { + if (this.depth != null) { + return this.depth; + } + if (this.parentNode) { + var pd = this.parentNode.getDepth(); + return this.depth = (pd != null ? pd + 1 : null); + } + return null; +}; + +_p.getTree = function () { + if (this.tree) { + return this.tree; + } + if (this.parentNode) { + return this.tree = this.parentNode.getTree(); + } + return null; +}; + +_p.getCreated = function () { + var t = this.getTree(); + return t && t.getCreated(); +}; + +// if classic then the openIcon is used for expanded, otherwise openIcon is used +// for selected +_p.getIconSrc = function () { + var behavior = this.getTree() ? this.getTree().getBehavior() : webFXTreeConfig.defaultBehavior; + var open = behavior == "classic" && this.getExpanded() || + behavior != "classic" && this.isSelected(); + if (open && this.openIcon) { + return this.openIcon; + } + if (!open && this.icon) { + return this.icon; + } + + // fall back on default icons + if (this.hasChildren()) { + return open ? webFXTreeConfig.openFolderIcon : webFXTreeConfig.folderIcon; + } + return webFXTreeConfig.fileIcon; +}; + +/* end tree model */ + + + + +if (window.attachEvent) { + window.attachEvent("onunload", function () { + for (var id in webFXTreeHandler.all) + webFXTreeHandler.all[id].dispose(); + }); +} diff --git a/.devilbox/www/include/lib/Html.php b/.devilbox/www/include/lib/Html.php index 4ac93ce1..87ef2c39 100644 --- a/.devilbox/www/include/lib/Html.php +++ b/.devilbox/www/include/lib/Html.php @@ -94,6 +94,11 @@ class Html 'path' => '__PHPMYADMIN__', 'target' => '_blank' ), + array( + 'name' => 'phpPgAdmin', + 'path' => '__PHPPGADMIN__', + 'target' => '_blank' + ), array( 'name' => 'PHPRedMin', 'path' => '/vendor/phpredmin/public/index.php', @@ -385,6 +390,9 @@ HTML; if ($el['path'] == '__PHPMYADMIN__') { $el['path'] = (version_compare(loadClass('Php')->getVersion(), '5.5', '<')) ? '/vendor/phpmyadmin-4.0/index.php' : '/vendor/phpmyadmin-4.8.4/index.php'; } + if ($el['path'] == '__PHPPGADMIN__') { + $el['path'] = (version_compare(loadClass('Php')->getVersion(), '5.2', '<')) ? '/vendor/phpmyadmin-4.0/' : '/vendor/phppgadmin-5.6.0/'; + } if ($el['path'] == '__ADMINER__') { $el['path'] = (version_compare(loadClass('Php')->getVersion(), '5.4', '<')) ? '/vendor/adminer-4.6.3-en.php' : '/vendor/adminer-4.7.0-en.php'; } diff --git a/.gitignore b/.gitignore index 2d84d7da..28d1ce20 100644 --- a/.gitignore +++ b/.gitignore @@ -83,6 +83,7 @@ /cfg/php-fpm-7.4/*.conf # Ignore custom PHP-FPM startup scripts +/autostart/*.sh /cfg/php-startup-5.2/*.sh /cfg/php-startup-5.3/*.sh /cfg/php-startup-5.4/*.sh @@ -117,6 +118,15 @@ /docs/linkcheck *.rst.todo +# Ignore vhost-gen files in test dir (copied on the fly) +/.tests/vhost-tests/my-vhost/.devilbox/apache22.yml +/.tests/vhost-tests/my-vhost/.devilbox/apache24.yml +/.tests/vhost-tests/my-vhost/.devilbox/nginx.yml + +/.tests/vhost-tests/my-rhost/.devilbox/apache22.yml +/.tests/vhost-tests/my-rhost/.devilbox/apache24.yml +/.tests/vhost-tests/my-rhost/.devilbox/nginx.yml + # Keep folders !.keepme diff --git a/.tests/Makefile b/.tests/Makefile index f6a5aad4..875e68e8 100644 --- a/.tests/Makefile +++ b/.tests/Makefile @@ -4,6 +4,7 @@ SHELL := /bin/bash +.PHONY: update-readme # ------------------------------------------------------------------------------------------------- # Variables @@ -18,8 +19,10 @@ DEVILBOX_NAME = $(shell cd $(DEVILBOX_PATH); basename $$(pwd)) DOCKER_NETWORK = $(shell docker network ls --filter name='$(DEVILBOX_NAME)' --quiet) # Devilbox test settings -PROJECT = vhost-tests -VHOST = $(PROJECT).loc +PROJECTV = my-vhost +PROJECTR = my-rhost +VHOST = $(PROJECTV).loc +RHOST = $(PROJECTR).loc # ------------------------------------------------------------------------------------------------- @@ -28,7 +31,8 @@ VHOST = $(PROJECT).loc update-readme: cat "../README.md" \ | perl -00 -pe "s/<!-- modules -->.*<!-- \/modules -->/<!-- modules -->\n$$(./get-modules.sh)\n<!-- \/modules -->/s" \ - > "../README.md" + > "../README.md.tmp" + yes | mv -f "../README.md.tmp" "../README.md" # ------------------------------------------------------------------------------------------------- # Testing Targets @@ -46,11 +50,19 @@ init: @# Ensure .env file exists install -m 0644 $(DEVILBOX_PATH)/env-example $(DEVILBOX_PATH)/.env + @# Ensure project vhost-gen files exist (vhost) + install -m 0644 $(DEVILBOX_PATH)/cfg/vhost-gen/apache22.yml-example-vhost $(CURRENT_PATH)/vhost-tests/$(PROJECTV)/.devilbox/apache22.yml + install -m 0644 $(DEVILBOX_PATH)/cfg/vhost-gen/apache24.yml-example-vhost $(CURRENT_PATH)/vhost-tests/$(PROJECTV)/.devilbox/apache24.yml + install -m 0644 $(DEVILBOX_PATH)/cfg/vhost-gen/nginx.yml-example-vhost $(CURRENT_PATH)/vhost-tests/$(PROJECTV)/.devilbox/nginx.yml + @# Ensure project vhost-gen files exist (rhost) + install -m 0644 $(DEVILBOX_PATH)/cfg/vhost-gen/apache22.yml-example-rproxy $(CURRENT_PATH)/vhost-tests/$(PROJECTR)/.devilbox/apache22.yml + install -m 0644 $(DEVILBOX_PATH)/cfg/vhost-gen/apache24.yml-example-rproxy $(CURRENT_PATH)/vhost-tests/$(PROJECTR)/.devilbox/apache24.yml + install -m 0644 $(DEVILBOX_PATH)/cfg/vhost-gen/nginx.yml-example-rproxy $(CURRENT_PATH)/vhost-tests/$(PROJECTR)/.devilbox/nginx.yml @# Set bind port echo "HOST_PORT_BIND=53" >> $(DEVILBOX_PATH)/.env @# Set data dir sed -i'' 's/^HOST_PATH_HTTPD_DATADIR=/#HOST_PATH_HTTPD_DATADIR=/g' $(DEVILBOX_PATH)/.env - echo "HOST_PATH_HTTPD_DATADIR=.tests" >> $(DEVILBOX_PATH)/.env + echo "HOST_PATH_HTTPD_DATADIR=.tests/vhost-tests" >> $(DEVILBOX_PATH)/.env @# Set uid/gid sed -i'' 's/^NEW_UID=.*/NEW_UID=$(MY_UID)/g' $(DEVILBOX_PATH)/.env sed -i'' 's/^NEW_GID=.*/NEW_GID=$(MY_GID)/g' $(DEVILBOX_PATH)/.env @@ -144,31 +156,7 @@ info: ### ### Run tests ### -test: test-vhost test-intra test-startup - - -test-intra: - @echo "####################################################################################################" - @echo "# RUNNING TESTS: INTRANET" - @echo "####################################################################################################" - @echo - - @# Gather files to test - $(eval SH_FILES := $(notdir $(wildcard $(CURRENT_PATH)/intra-tests/*.sh))) - - @$(foreach file,\ - $(SH_FILES), \ - echo "# ----------------------------------------------------------------------------------------"; \ - echo "# [intra] $(file)"; \ - echo "# ----------------------------------------------------------------------------------------"; \ - cd $(CURRENT_PATH) && $(MAKE) _clean-round >/dev/null; \ - if ! $(CURRENT_PATH)/intra-tests/$(file); then \ - cd $(CURRENT_PATH) && $(MAKE) _logs; \ - exit 1; \ - fi; \ - echo; \ - ) - @echo +test: test-vhost test-rhost test-intra test-startup test-vhost: @@ -181,7 +169,7 @@ test-vhost: $(eval HTTPD_SERVER := $(shell grep -E '^HTTPD_SERVER' $(DEVILBOX_PATH)/.env | sed 's/.*=//g')) @# Gather files to test - $(eval PHP_FILES := $(notdir $(wildcard $(CURRENT_PATH)/$(PROJECT)/htdocs/*.php))) + $(eval PHP_FILES := $(notdir $(wildcard $(CURRENT_PATH)/vhost-tests/$(PROJECTV)/htdocs/*.php))) @echo "# ----------------------------------------------------------------------------------------" @echo "# [vhost] Test curl HTTP from Docker host" @@ -229,7 +217,8 @@ test-vhost: $(PHP_FILES), \ printf "[TEST] docker-compose exec php curl -sS http://$(VHOST)/$(file)"; \ cd $(CURRENT_PATH) && $(MAKE) _clean-round >/dev/null; \ - if ! cd $(DEVILBOX_PATH) && docker-compose exec php curl -sS http://$(VHOST)/$(file) | grep -qE '^OK$$'; then \ + cd $(DEVILBOX_PATH); \ + if ! docker-compose exec php curl -sS http://$(VHOST)/$(file) | grep -qE '^OK$$'; then \ printf "\r[FAIL] docker-compose exec php curl -sS http://$(VHOST)/$(file)\n"; \ cd $(DEVILBOX_PATH) && docker-compose exec php curl -sS http://$(VHOST)/$(file); \ cd $(DEVILBOX_PATH) && docker-compose exec php curl -sS -I http://$(VHOST)/$(file); \ @@ -248,7 +237,8 @@ test-vhost: $(PHP_FILES), \ printf "[TEST] docker-compose exec php curl -sS https://$(VHOST)/$(file)"; \ cd $(CURRENT_PATH) && $(MAKE) _clean-round >/dev/null; \ - if ! cd $(DEVILBOX_PATH) && docker-compose exec php curl -sS https://$(VHOST)/$(file) | grep -qE '^OK$$'; then \ + cd $(DEVILBOX_PATH); \ + if ! docker-compose exec php curl -sS https://$(VHOST)/$(file) | grep -qE '^OK$$'; then \ printf "\r[FAIL] docker-compose exec php curl -sS https://$(VHOST)/$(file)\n"; \ cd $(DEVILBOX_PATH) && docker-compose exec php curl -sS https://$(VHOST)/$(file); \ cd $(DEVILBOX_PATH) && docker-compose exec php curl -sS -I https://$(VHOST)/$(file); \ @@ -265,28 +255,93 @@ test-vhost: @echo "# ----------------------------------------------------------------------------------------" @$(foreach file,\ $(PHP_FILES), \ - printf "[TEST] docker-compose exec php php /shared/httpd/$(PROJECT)/htdocs/$(file)"; \ + printf "[TEST] docker-compose exec php php /shared/httpd/$(PROJECTV)/htdocs/$(file)"; \ cd $(CURRENT_PATH) && $(MAKE) _clean-round >/dev/null; \ - if ! cd $(DEVILBOX_PATH) && docker-compose exec php php /shared/httpd/$(PROJECT)/htdocs/$(file) | grep -q '^OK$$'; then \ - printf "\r[TEST] docker-compose exec php php /shared/httpd/$(PROJECT)/htdocs/$(file)\n"; \ - cd $(DEVILBOX_PATH) && docker-composeexec php php /shared/httpd/$(PROJECT)/htdocs/$(file); \ + cd $(DEVILBOX_PATH); \ + if ! docker-compose exec php php /shared/httpd/$(PROJECTV)/htdocs/$(file) | grep -q '^OK$$'; then \ + printf "\r[TEST] docker-compose exec php php /shared/httpd/$(PROJECTV)/htdocs/$(file)\n"; \ + cd $(DEVILBOX_PATH) && docker-composeexec php php /shared/httpd/$(PROJECTV)/htdocs/$(file); \ cd $(CURRENT_PATH) && $(MAKE) _logs; \ exit 1; \ else \ - printf "\r[OK] docker-compose exec php php /shared/httpd/$(PROJECT)/htdocs/$(file)\n"; \ + printf "\r[OK] docker-compose exec php php /shared/httpd/$(PROJECTV)/htdocs/$(file)\n"; \ fi; \ ) @echo +test-rhost: + @echo "####################################################################################################" + @echo "# RUNNING TESTS: RHOST" + @echo "####################################################################################################" + @echo + + @# Gather files to test + $(eval SH_FILES := $(notdir $(wildcard $(CURRENT_PATH)/vhost-tests/$(PROJECTR)/tests/*.sh))) + + @echo "# ----------------------------------------------------------------------------------------" + @echo "# [rhost] Startup" + @echo "# ----------------------------------------------------------------------------------------" + @$(CURRENT_PATH)/vhost-tests/$(PROJECTR)/start-pm.sh + + @$(foreach file,\ + $(SH_FILES), \ + echo; \ + echo "# ----------------------------------------------------------------------------------------"; \ + echo "# [rhost] $(file)"; \ + echo "# ----------------------------------------------------------------------------------------"; \ + cd $(CURRENT_PATH) && $(MAKE) _clean-round >/dev/null; \ + if ! $(CURRENT_PATH)/vhost-tests/$(PROJECTR)/tests/$(file); then \ + cd $(CURRENT_PATH) && $(MAKE) _logs; \ + exit 1; \ + fi \ + ) + @echo + + +test-intra: + @echo "####################################################################################################" + @echo "# RUNNING TESTS: INTRANET" + @echo "####################################################################################################" + @echo + + @# Gather files to test + $(eval SH_FILES := $(notdir $(wildcard $(CURRENT_PATH)/intra-tests/*.sh))) + + @$(foreach file,\ + $(SH_FILES), \ + echo "# ----------------------------------------------------------------------------------------"; \ + echo "# [intra] $(file)"; \ + echo "# ----------------------------------------------------------------------------------------"; \ + cd $(CURRENT_PATH) && $(MAKE) _clean-round >/dev/null; \ + if ! $(CURRENT_PATH)/intra-tests/$(file); then \ + cd $(CURRENT_PATH) && $(MAKE) _logs; \ + exit 1; \ + fi; \ + echo; \ + ) + @echo + + test-startup: @echo "####################################################################################################" @echo "# RUNNING TESTS: STARTUP" @echo "####################################################################################################" @echo - @if ! $(CURRENT_PATH)startup-tests/startup.sh; then \ - exit 1; \ - fi + + @# Gather files to test + $(eval SH_FILES := $(notdir $(wildcard $(CURRENT_PATH)/startup-tests/*.sh))) + + @$(foreach file,\ + $(SH_FILES), \ + cd $(CURRENT_PATH) && $(MAKE) _clean-round >/dev/null; \ + if ! $(CURRENT_PATH)/startup-tests/$(file); then \ + cd $(CURRENT_PATH) && $(MAKE) _logs; \ + exit 1; \ + fi; \ + echo; \ + ) + @echo # ------------------------------------------------------------------------------------------------- @@ -308,10 +363,10 @@ _clean-round: @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/defaultlocalhost_ssl-access.log >/dev/null 2>&1 || true @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/defaultlocalhost_ssl-error.log >/dev/null 2>&1 || true - @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/$(PROJECT)-access.log >/dev/null 2>&1 || true - @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/$(PROJECT)-error.log >/dev/null 2>&1 || true - @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/$(PROJECT)_ssl-access.log >/dev/null 2>&1 || true - @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/$(PROJECT)_ssl-error.log >/dev/null 2>&1 || true + @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/$(PROJECTV)-access.log >/dev/null 2>&1 || true + @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/$(PROJECTV)-error.log >/dev/null 2>&1 || true + @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/$(PROJECTV)_ssl-access.log >/dev/null 2>&1 || true + @#cd $(DEVILBOX_PATH) && docker-compose exec httpd dd if=/dev/null of=/var/log/$(HTTPD_SERVER)/$(PROJECTV)_ssl-error.log >/dev/null 2>&1 || true _logs: @@ -413,27 +468,51 @@ _logs: @echo @echo "# ----------------------------------------------------------------------------------------" - @echo "# [HTTPD] $(PROJECT)-access.log" + @echo "# [HTTPD] $(PROJECTV)-access.log" @echo "# ----------------------------------------------------------------------------------------" - cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECT)-access.log || true + cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECTV)-access.log || true @echo @echo "# ----------------------------------------------------------------------------------------" - @echo "# [HTTPD] $(PROJECT)-error.log" + @echo "# [HTTPD] $(PROJECTV)-error.log" @echo "# ----------------------------------------------------------------------------------------" - cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECT)-error.log || true + cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECTV)-error.log || true @echo @echo "# ----------------------------------------------------------------------------------------" - @echo "# [HTTPD] $(PROJECT)_ssl-access.log" + @echo "# [HTTPD] $(PROJECTV)_ssl-access.log" @echo "# ----------------------------------------------------------------------------------------" - cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECT)_ssl-access.log || true + cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECTV)_ssl-access.log || true @echo @echo "# ----------------------------------------------------------------------------------------" - @echo "# [HTTPD] $(PROJECT)_ssl-error.log" + @echo "# [HTTPD] $(PROJECTV)_ssl-error.log" @echo "# ----------------------------------------------------------------------------------------" - cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECT)_ssl-error.log || true + cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECTV)_ssl-error.log || true + @echo + + @echo "# ----------------------------------------------------------------------------------------" + @echo "# [HTTPD] $(PROJECTR)-access.log" + @echo "# ----------------------------------------------------------------------------------------" + cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECTR)-access.log || true + @echo + + @echo "# ----------------------------------------------------------------------------------------" + @echo "# [HTTPD] $(PROJECTR)-error.log" + @echo "# ----------------------------------------------------------------------------------------" + cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECTR)-error.log || true + @echo + + @echo "# ----------------------------------------------------------------------------------------" + @echo "# [HTTPD] $(PROJECTR)_ssl-access.log" + @echo "# ----------------------------------------------------------------------------------------" + cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECTR)_ssl-access.log || true + @echo + + @echo "# ----------------------------------------------------------------------------------------" + @echo "# [HTTPD] $(PROJECTR)_ssl-error.log" + @echo "# ----------------------------------------------------------------------------------------" + cd $(DEVILBOX_PATH) && docker-compose exec httpd cat /var/log/$(HTTPD_SERVER)/$(PROJECTR)_ssl-error.log || true @echo diff --git a/.tests/get-modules.sh b/.tests/get-modules.sh index db207f23..20ee705b 100755 --- a/.tests/get-modules.sh +++ b/.tests/get-modules.sh @@ -4,19 +4,20 @@ SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" COMPOSEPATH="${SCRIPTPATH}/.." PHP_TAG="$( grep 'devilbox/php' "${COMPOSEPATH}/docker-compose.yml" | sed 's/^.*-work-//g' )" + ### -### Get PHP modules (5 rounds) +### Get PHP core modules (5 rounds) ### -if ! PHP52="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP52_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP52="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP52_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP52="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP52_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP52="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP52_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP52="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP52_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 5.2" exit 1 fi @@ -24,15 +25,15 @@ if ! PHP52="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP53="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP53_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP53="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP53_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP53="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP53_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP53="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP53_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP53="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP53_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 5.3" exit 1 fi @@ -40,15 +41,15 @@ if ! PHP53="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP54="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP54_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP54="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP54_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP54="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP54_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP54="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP54_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP54="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP54_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 5.4" exit 1 fi @@ -56,15 +57,15 @@ if ! PHP54="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP55="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP55_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP55="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP55_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP55="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP55_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP55="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP55_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP55="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP55_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 5.5" exit 1 fi @@ -72,15 +73,15 @@ if ! PHP55="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP56="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP56_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP56="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP56_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP56="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP56_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP56="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP56_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP56="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP56_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 5.6" exit 1 fi @@ -88,15 +89,15 @@ if ! PHP56="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP70="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP70_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP70="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP70_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP70="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP70_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP70="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP70_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP70="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP70_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 7.0" exit 1 fi @@ -104,15 +105,15 @@ if ! PHP70="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP71="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP71_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP71="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP71_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP71="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP71_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP71="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP71_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP71="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP71_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 7.1" exit 1 fi @@ -120,15 +121,15 @@ if ! PHP71="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP72="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP72_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP72="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP72_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP72="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP72_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP72="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP72_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP72="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP72_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 7.2" exit 1 fi @@ -136,15 +137,15 @@ if ! PHP72="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP73="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP73_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP73="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP73_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP73="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP73_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP73="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP73_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP73="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP73_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 7.3" exit 1 fi @@ -152,15 +153,15 @@ if ! PHP73="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi fi -if ! PHP74="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then +if ! PHP74_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP74="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP74_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP74="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP74_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP74="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP74_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then sleep 5; - if ! PHP74="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + if ! PHP74_BASE="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-base' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then >&2 echo "Failed to retrieve modules for PHP 7.4" exit 1 fi @@ -169,64 +170,341 @@ if ! PHP74="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-f fi fi -ALL="$( echo "${PHP52}, ${PHP53}, ${PHP54}, ${PHP55}, ${PHP56}, ${PHP70}, ${PHP71}, ${PHP72}, ${PHP73}, ${PHP74}" | sed 's/,/\n/g' | sed -e 's/^\s*//g' -e 's/\s*$//g' | sort -u )" +### +### Get PHP mods modules (5 rounds) +### -Y="✓" +if ! PHP52_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP52_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP52_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP52_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP52_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '52-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 5.2" + exit 1 + fi + fi + fi + fi +fi +if ! PHP53_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP53_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP53_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP53_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP53_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '53-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 5.3" + exit 1 + fi + fi + fi + fi +fi +if ! PHP54_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP54_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP54_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP54_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP54_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '54-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 5.4" + exit 1 + fi + fi + fi + fi +fi +if ! PHP55_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP55_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP55_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP55_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP55_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '55-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 5.5" + exit 1 + fi + fi + fi + fi +fi +if ! PHP56_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP56_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP56_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP56_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP56_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '56-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 5.6" + exit 1 + fi + fi + fi + fi +fi +if ! PHP70_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP70_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP70_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP70_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP70_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '70-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 7.0" + exit 1 + fi + fi + fi + fi +fi +if ! PHP71_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP71_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP71_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP71_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP71_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '71-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 7.1" + exit 1 + fi + fi + fi + fi +fi +if ! PHP72_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP72_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP72_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP72_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP72_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '72-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 7.2" + exit 1 + fi + fi + fi + fi +fi +if ! PHP73_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP73_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP73_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP73_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP73_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '73-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 7.3" + exit 1 + fi + fi + fi + fi +fi +if ! PHP74_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP74_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP74_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP74_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + sleep 5; + if ! PHP74_MODS="$( curl -sS https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md | tac | tac | grep -E '74-mods' | sed -e 's/.*">//g' -e 's/<.*//g' )"; then + >&2 echo "Failed to retrieve modules for PHP 7.4" + exit 1 + fi + fi + fi + fi +fi + + +### +### Todo: add ioncube +### +MODS="$( echo "${PHP52_MODS}, ${PHP53_MODS}, ${PHP54_MODS}, ${PHP55_MODS}, ${PHP56_MODS}, ${PHP70_MODS}, ${PHP71_MODS}, ${PHP72_MODS}, ${PHP73_MODS}, ${PHP74_MODS}" | sed 's/,/\n/g' | sed -e 's/^\s*//g' -e 's/\s*$//g' | sort -u )" + + +### +### Get disabled modules +### +DISABLED=",ioncube,$( grep -E '^PHP_MODULES_DISABLE=' "${SCRIPTPATH}/../env-example" | sed 's/.*=//g' )," +#echo $DISABLED +B="✔" # Enabled base modules (cannot be disabled) +E="🗸" # Enabled mods modules (can be disabled) +D="d" # Disabled modules (can be enabled) +U=" " # Unavailable echo "| Modules | PHP 5.2 | PHP 5.3 | PHP 5.4 | PHP 5.5 | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 |" echo "|----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|" -echo "${ALL}" | while read line; do +echo "${MODS}" | while read line; do printf "| %-15s%s" "${line}" "|" - if echo ",${PHP52}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + # ---------- PHP 5.2 ----------# + if echo ",${PHP52_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP52_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP53}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 5.3 ----------# + if echo ",${PHP53_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP53_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP54}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 5.4 ----------# + if echo ",${PHP54_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP54_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP55}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 5.5 ----------# + if echo ",${PHP55_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP55_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP56}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 5.6 ----------# + if echo ",${PHP56_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP56_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP70}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 7.0 ----------# + if echo ",${PHP70_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP70_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP71}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 7.1 ----------# + if echo ",${PHP71_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP71_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP72}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 7.2 ----------# + if echo ",${PHP72_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP72_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP73}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 7.3 ----------# + if echo ",${PHP73_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP73_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi - if echo ",${PHP74}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then - printf " %s |" "${Y}" + + # ---------- PHP 7.4 ----------# + if echo ",${PHP74_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + if echo "${DISABLED}" | grep -Eq ",${line},"; then + printf " %s |" "${D}" # Currently disabled + else + if echo ",${PHP74_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then + printf " %s |" "${B}" # Enabled, but cannot be disabled + else + printf " %s |" "${E}" # Enabled, can be disabled + fi + fi else - printf " |" + printf " %s |" "${U}" # Not available fi printf "\n" diff --git a/.tests/intra-tests/vendor-phppgadmin.sh b/.tests/intra-tests/vendor-phppgadmin.sh new file mode 100755 index 00000000..1aef6e3a --- /dev/null +++ b/.tests/intra-tests/vendor-phppgadmin.sh @@ -0,0 +1,215 @@ +#!/usr/bin/env bash + +set -e +set -u +set -o pipefail + + +# There's currently an Issue with PHP 7.3, Xdebug and phpMyAdmin. It just segfaults, +# so I will remove it from the checks. +DISABLED_VERSIONS=("") + +# +# NOTE: Parsing curl to tac to circumnvent "failed writing body" +# https://stackoverflow.com/questions/16703647/why-curl-return-and-error-23-failed-writing-body +# + + +### +### Get current PHP version +### + +printf "[TEST] Get PHP version" +# 1st Try +if ! PHP_VERSION="$( curl -sS localhost/index.php | tac | tac | grep -Eo 'PHP.*?\([.0-9]+' | grep -Eo '\([.0-9]+' | grep -Eo '[0-9]+\.[0-9]+' )"; then + # 2nd Try + sleep 1 + if ! PHP_VERSION="$( curl -sS localhost/index.php | tac | tac | grep -Eo 'PHP.*?\([.0-9]+' | grep -Eo '\([.0-9]+' | grep -Eo '[0-9]+\.[0-9]+' )"; then + # 3rd Try + sleep 1 + if ! PHP_VERSION="$( curl -sS localhost/index.php | tac | tac | grep -Eo 'PHP.*?\([.0-9]+' | grep -Eo '\([.0-9]+' | grep -Eo '[0-9]+\.[0-9]+' )"; then + printf "\r[FAIL] Get PHP version\n" + curl -sS localhost/index.php | tac | tac | grep -Eo 'PHP.*?\([.0-9]+' || true + exit 1 + else + printf "\r[OK] Get PHP version (3 rounds): %s\n" "${PHP_VERSION}" + fi + else + printf "\r[OK] Get PHP version (2 rounds): %s\n" "${PHP_VERSION}" + fi +else + printf "\r[OK] Get PHP version (1 round): %s\n" "${PHP_VERSION}" +fi + + +### +### Ensure only to check against desired versions +### + +if [[ ${DISABLED_VERSIONS[*]} =~ ${PHP_VERSION} ]]; then + printf "[SKIP] Skipping all checks for PHP ${PHP_VERSION}\n" + exit 0 +fi + + +### +### Retrieve URL for current PHP version. +### Older PHP versions are presented a link with a different version due to compatibility. +### + +printf "[TEST] Retrieve phpPgAdmin URL" +# 1st Try +if ! URL="$( curl -sS localhost/index.php | grep -Eo "/vendor/phppgadmin-[.0-9]+/" )"; then + # 2nd Try + sleep 1 + if ! URL="$( curl -sS localhost/index.php | grep -Eo "/vendor/phppgadmin-[.0-9]+/" )"; then + # 3rd Try + sleep 1 + if ! URL="$( curl -sS localhost/index.php | grep -Eo "/vendor/phppgadmin-[.0-9]+/" )"; then + printf "\r[FAILED] Retrieve phpMyAdmin URL\n" + curl -sS localhost/index.php | grep -Eo "/vendor/phppgadmin-[.0-9]+/" || true + exit 1 + else + printf "\r[OK] Retrieve phpPgAdmin URL (3 rounds): ${URL}\n" + fi + else + printf "\r[OK] Retrieve phpPgAdmin URL (2 rounds): ${URL}\n" + fi +else + printf "\r[OK] Retrieve phpPgAdmin URL (1 round): ${URL}\n" +fi + + +### +### Ensure given phpPgAdmin version works +### + +printf "[TEST] Fetch ${URL}intro.php" +# 1st Try +if ! curl -sS localhost${URL}intro.php | tac | tac | grep -Eiq "welcome to phpPgAdmin"; then + # 2nd Try + sleep 1 + if ! curl -sS localhost${URL}intro.php | tac | tac | grep -Eiq "welcome to phpPgAdmin"; then + # 3rd Try + sleep 1 + if ! curl -sS localhost${URL}intro.php | tac | tac | grep -Eiq "welcome to phpPgAdmin"; then + printf "\r[FAIL] Fetch ${URL}intro.php\n" + curl -sS localhost/${URL}intro.php || true + curl -sSI localhost/${URL}intro.php || true + exit 1 + else + printf "\r[OK] Fetch ${URL}intro.php (3 rounds)\n" + fi + else + printf "\r[OK] Fetch ${URL}intro.php (2 rounds)\n" + fi +else + printf "\r[OK] Fetch ${URL}intro.php (1 round)\n" +fi + + +### +### Login (get token URL) +### +# 1st Try +printf "[TEST] Retrieve phpPgAdmin token page" +if ! TOKEN_URL="$( curl -sS -c cookie.txt localhost${URL}servers.php | tac | tac | grep -Eo "\"redirect\.php\?subject=server.+\"" )"; then + # 2nd Try + sleep 1 + if ! TOKEN_URL="$( curl -sS -c cookie.txt localhost${URL}servers.php | tac | tac | grep -Eo "\"redirect\.php\?subject=server.+\"" )"; then + # 3rd Try + sleep 1 + if ! TOKEN_URL="$( curl -sS -c cookie.txt localhost${URL}servers.php | tac | tac | grep -Eo "\"redirect\.php\?subject=server.+\"" )"; then + printf "\r[FAIL] Retrieve phpPgAdmin login page\n" + curl -sS localhost/${URL}servers.php || true + curl -sSI localhost/${URL}servers.php || true + rm -f cookie.txt + exit 1 + else + TOKEN_URL="$( echo "${TOKEN_URL}" | sed 's/"//g' )" + TOKEN_URL="$( echo "${TOKEN_URL}" | sed 's/&/\&/g' )" + printf "\r[OK] Retrieve phpPgAdmin token page (3 rounds): ${TOKEN_URL}\n" + fi + else + TOKEN_URL="$( echo "${TOKEN_URL}" | sed 's/"//g' )" + TOKEN_URL="$( echo "${TOKEN_URL}" | sed 's/&/\&/g' )" + printf "\r[OK] Retrieve phpPgAdmin login token (2 rounds): ${TOKEN_URL}\n" + fi +else + TOKEN_URL="$( echo "${TOKEN_URL}" | sed 's/"//g' )" + TOKEN_URL="$( echo "${TOKEN_URL}" | sed 's/&/\&/g' )" + printf "\r[OK] Retrieve phpPgAdmin token page (1 round): ${TOKEN_URL}\n" +fi + + +### +### Login (get Login Token) +### +TOKEN= +printf "[TEST] Retrieve phpPgAdmin login token" +# 1st Try +if ! TOKEN="$( curl -sS -c cookie.txt -b cookie.txt "localhost${URL}${TOKEN_URL}" | tac | tac | grep -Eo "loginPassword_[a-zA-Z0-9]+" )"; then + # 2nd Try + sleep 1 + if ! TOKEN="$( curl -sS -c cookie.txt -b cookie.txt "localhost${URL}${TOKEN_URL}" | tac | tac | grep -Eo "loginPassword_[a-zA-Z0-9]+" )"; then + # 3rd Try + sleep 1 + if ! TOKEN="$( curl -sS -c cookie.txt -b cookie.txt "localhost${URL}${TOKEN_URL}" | tac | tac | grep -Eo "loginPassword_[a-zA-Z0-9]+" )"; then + printf "\r[FAIL] Retrieve phpPgAdmin login token\n" + curl -sS "${TOKEN_URL_URL}" || true + curl -sSI "${TOKEN_URL_URL}" || true + rm -f cookie.txt + exit 1 + else + TOKEN="$( echo "${TOKEN}" | head -1 )" + printf "\r[OK] Retrieve phpPgAdmin login token (3 rounds): ${TOKEN}\n" + fi + else + TOKEN="$( echo "${TOKEN}" | head -1 )" + printf "\r[OK] Retrieve phpPgAdmin login token (2 rounds): ${TOKEN}\n" + fi +else + TOKEN="$( echo "${TOKEN}" | head -1 )" + printf "\r[OK] Retrieve phpPgAdmin login token (1 round): ${TOKEN}\n" +fi + + +### +### Login +### + +printf "[TEST] Submit phpPgAdmin POST login" +# 1st Try +if ! curl -sS -c cookie.txt -b cookie.txt \ + -d "subject=server&server=pgsql%3A5432%3Aallow&loginServer=pgsql%3A5432%3Aallow&loginUsername=postgres&${TOKEN}=&loginSubmit=Login" \ + localhost${URL}redirect.php 2>/dev/null | grep -q "Create database"; then + # 2nd Try + sleep 1 + if ! curl -sS -c cookie.txt -b cookie.txt \ + -d "subject=server&server=pgsql%3A5432%3Aallow&loginServer=pgsql%3A5432%3Aallow&loginUsername=postgres&${TOKEN}=&loginSubmit=Login" \ + localhost${URL}redirect.php 2>/dev/null | grep -q "Create database"; then + # 3rd Try + sleep 1 + if ! curl -sS -c cookie.txt -b cookie.txt \ + -d "subject=server&server=pgsql%3A5432%3Aallow&loginServer=pgsql%3A5432%3Aallow&loginUsername=postgres&${TOKEN}=&loginSubmit=Login" \ + localhost${URL}redirect.php 2>/dev/null | grep -q "Create database"; then + printf "\r[FAIL] Submit phpPgAdmin POST login\n" + curl -sS -c cookie.txt -b cookie.txt \ + -d "subject=server&server=pgsql%3A5432%3Aallow&loginServer=pgsql%3A5432%3Aallow&loginUsername=postgres&${TOKEN}=&loginSubmit=Login" \ + localhost${URL}redirect.php || true + curl -sSI -c cookie.txt -b cookie.txt \ + -d "subject=server&server=pgsql%3A5432%3Aallow&loginServer=pgsql%3A5432%3Aallow&loginUsername=postgres&${TOKEN}=&loginSubmit=Login" \ + localhost${URL}redirect.php || true + rm -f cookie.txt || true + exit 1 + else + printf "\r[OK] Submit phpPgAdmin POST login (3 rounds)\n" + fi + else + printf "\r[OK] Submit phpPgAdmin POST login (2 rounds)\n" + fi +else + printf "\r[OK] Submit phpPgAdmin POST login (1 round)\n" +fi + +rm -f cookie.txt || true diff --git a/.tests/intra-tests/vhosts.sh b/.tests/intra-tests/vhosts.sh index b07c4199..836b74e2 100755 --- a/.tests/intra-tests/vhosts.sh +++ b/.tests/intra-tests/vhosts.sh @@ -11,7 +11,7 @@ set -o pipefail # -VHOST="${1:-vhost-tests}" +VHOST="${1:-my-vhost}" VHOST_GEN_URL="/info_vhostgen.php?name=${VHOST}" VHOST_URL="/vhost.d/${VHOST}.conf" diff --git a/.tests/startup-tests/startup.sh b/.tests/startup-tests/startup.1.sh similarity index 94% rename from .tests/startup-tests/startup.sh rename to .tests/startup-tests/startup.1.sh index 7802fc0b..39be298c 100755 --- a/.tests/startup-tests/startup.sh +++ b/.tests/startup-tests/startup.1.sh @@ -9,7 +9,7 @@ COMPOSEPATH="${SCRIPTPATH}/../../" CONTAINER="$( cd "${COMPOSEPATH}" && docker-compose ps -q php )" #FILES="$()" -cd "${COMPOSEPATH}" && docker-compose exec -T php bash -c "find /startup.d/*.sh-example -type f -print0 2>/dev/null" \ +cd "${COMPOSEPATH}" && docker-compose exec -T php bash -c "find /startup.1.d/*.sh-example -type f -print0 2>/dev/null" \ | xargs -0 -n 1 echo \ | while read f; do diff --git a/.tests/startup-tests/startup.2.sh b/.tests/startup-tests/startup.2.sh new file mode 100755 index 00000000..7a67b581 --- /dev/null +++ b/.tests/startup-tests/startup.2.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +set -e +set -u +set -o pipefail + +SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" +COMPOSEPATH="${SCRIPTPATH}/../../" +CONTAINER="$( cd "${COMPOSEPATH}" && docker-compose ps -q php )" + +#FILES="$()" +cd "${COMPOSEPATH}" && docker-compose exec -T php bash -c "find /startup.2.d/*.sh-example -type f -print0 2>/dev/null" \ + | xargs -0 -n 1 echo \ + | while read f; do + + echo "# ----------------------------------------------------------------------------------------" + echo "# [TEST] ${f}" + echo "# ----------------------------------------------------------------------------------------" + if ! docker exec -t ${CONTAINER} bash "${f}" | grep -q "No projects defined"; then + sleep 5 + if ! docker exec -t ${CONTAINER} bash "${f}" | grep -q "No projects defined"; then + sleep 5 + if ! docker exec -t ${CONTAINER} bash "${f}" | grep -q "No projects defined"; then + sleep 5 + if ! docker exec -t ${CONTAINER} bash "${f}" | grep -q "No projects defined"; then + sleep 5 + if ! docker exec -t ${CONTAINER} bash "${f}" | grep -q "No projects defined"; then + docker exec -t ${CONTAINER} bash "${f}" || true + echo "[FAIl] ${f}" + exit 1 + fi + fi + fi + fi + fi + echo "[OK] ${f}" +done diff --git a/.tests/vhost-tests/my-rhost/.devilbox/.keepme b/.tests/vhost-tests/my-rhost/.devilbox/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/.tests/vhost-tests/my-rhost/htdocs b/.tests/vhost-tests/my-rhost/htdocs new file mode 120000 index 00000000..bc42fd64 --- /dev/null +++ b/.tests/vhost-tests/my-rhost/htdocs @@ -0,0 +1 @@ +js \ No newline at end of file diff --git a/.tests/vhost-tests/my-rhost/js/index.js b/.tests/vhost-tests/my-rhost/js/index.js new file mode 100644 index 00000000..3daea455 --- /dev/null +++ b/.tests/vhost-tests/my-rhost/js/index.js @@ -0,0 +1,11 @@ +// Load the http module to create an http server. +var http = require('http'); + +// Configure our HTTP server to respond with Hello World to all requests. +var server = http.createServer(function (request, response) { + response.writeHead(200, {"Content-Type": "text/plain"}); + response.end("Hello World\n"); +}); + +// Listen on port 8000, IP defaults to 127.0.0.1 +server.listen(8000); diff --git a/.tests/vhost-tests/my-rhost/start-pm.sh b/.tests/vhost-tests/my-rhost/start-pm.sh new file mode 100755 index 00000000..8ec6cc5a --- /dev/null +++ b/.tests/vhost-tests/my-rhost/start-pm.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +set -e +set -u + +SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" +COMPOSEPATH="${SCRIPTPATH}/../../../" +cd "${COMPOSEPATH}" + +NODE_PATH="/shared/httpd/my-rhost/js" +NODE_FILE="index.js" + +if ! docker-compose exec php test -d "${NODE_PATH}"; then + >&2 echo "[Warning], skipping startup, directory does not exist in container: ${NODE_PATH}" + exit 1 +fi + +if ! docker-compose exec php test -f "${NODE_PATH}/${NODE_FILE}"; then + >&2 echo "[Warning], skipping startup, file does not exist in container: ${NODE_PATH}/${NODE_FILE}" + exit 1 +fi + + +# Check if at least one pm2 process is already running +if docker-compose exec --user devilbox php bash -c "cd /shared/httpd/my-rhost/js; pm2 show 0 >/dev/null"; then + >&2 echo "[Warning], pm2 process already running" +else + echo "su -c \"cd ${NODE_PATH}; pm2 start ${NODE_FILE}\" -l devilbox" + docker-compose exec --user devilbox php bash -c "cd /shared/httpd/my-rhost/js; pm2 start ${NODE_FILE}" +fi diff --git a/.tests/vhost-tests/my-rhost/tests/test-url.sh b/.tests/vhost-tests/my-rhost/tests/test-url.sh new file mode 100755 index 00000000..ae5ec760 --- /dev/null +++ b/.tests/vhost-tests/my-rhost/tests/test-url.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +set -e +set -u + +SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" +COMPOSEPATH="${SCRIPTPATH}/../../../../" +cd "${COMPOSEPATH}" + + +printf "[TEST] http://my-rhost.loc" +# 1st round +if ! docker-compose exec --user devilbox php curl http://my-rhost.loc | grep "Hello World"; then + sleep 1; + # 2nd round + if ! docker-compose exec --user devilbox php curl http://my-rhost.loc | grep "Hello World"; then + sleep 1; + # 3rd round + if ! docker-compose exec --user devilbox php curl http://my-rhost.loc | grep "Hello World"; then + printf "\r[FAIL] http://my-rhost.loc\n" + cd "${COMPOSEPATH}" && docker-compose exec --user devilbox php curl http://my-rhost.loc + exit 1 + else + printf "\r[OK] http://my-rhost.loc (3 rounds)\n" + fi + else + printf "\r[OK] http://my-rhost.loc (2 rounds)\n" + fi +else + printf "\r[OK] http://my-rhost.loc (1 round)\n" +fi + + +printf "[TEST] https://my-rhost.loc" +# 1st round +if ! docker-compose exec --user devilbox php curl https://my-rhost.loc | grep "Hello World"; then + sleep 1; + # 2nd round + if ! docker-compose exec --user devilbox php curl https://my-rhost.loc | grep "Hello World"; then + sleep 1; + # 3rd round + if ! docker-compose exec --user devilbox php curl https://my-rhost.loc | grep "Hello World"; then + printf "\r[FAIL] https://my-rhost.loc\n" + cd "${COMPOSEPATH}" && docker-compose exec --user devilbox php curl https://my-rhost.loc + exit 1 + else + printf "\r[OK] https://my-rhost.loc (3 rounds)\n" + fi + else + printf "\r[OK] https://my-rhost.loc (2 rounds)\n" + fi +else + printf "\r[OK] https://my-rhost.loc (1 round)\n" +fi diff --git a/.tests/vhost-tests/my-vhost/.devilbox/.keepme b/.tests/vhost-tests/my-vhost/.devilbox/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/.tests/vhost-tests/README.md b/.tests/vhost-tests/my-vhost/README.md similarity index 100% rename from .tests/vhost-tests/README.md rename to .tests/vhost-tests/my-vhost/README.md diff --git a/.tests/vhost-tests/htdocs/intranet-mail.php b/.tests/vhost-tests/my-vhost/htdocs/intranet-mail.php similarity index 100% rename from .tests/vhost-tests/htdocs/intranet-mail.php rename to .tests/vhost-tests/my-vhost/htdocs/intranet-mail.php diff --git a/.tests/vhost-tests/htdocs/memcached.php b/.tests/vhost-tests/my-vhost/htdocs/memcached.php similarity index 100% rename from .tests/vhost-tests/htdocs/memcached.php rename to .tests/vhost-tests/my-vhost/htdocs/memcached.php diff --git a/.tests/vhost-tests/htdocs/mongodb.php b/.tests/vhost-tests/my-vhost/htdocs/mongodb.php similarity index 100% rename from .tests/vhost-tests/htdocs/mongodb.php rename to .tests/vhost-tests/my-vhost/htdocs/mongodb.php diff --git a/.tests/vhost-tests/htdocs/mysql.php b/.tests/vhost-tests/my-vhost/htdocs/mysql.php similarity index 100% rename from .tests/vhost-tests/htdocs/mysql.php rename to .tests/vhost-tests/my-vhost/htdocs/mysql.php diff --git a/.tests/vhost-tests/htdocs/postgres.php b/.tests/vhost-tests/my-vhost/htdocs/postgres.php similarity index 100% rename from .tests/vhost-tests/htdocs/postgres.php rename to .tests/vhost-tests/my-vhost/htdocs/postgres.php diff --git a/.tests/vhost-tests/htdocs/redis.php b/.tests/vhost-tests/my-vhost/htdocs/redis.php similarity index 100% rename from .tests/vhost-tests/htdocs/redis.php rename to .tests/vhost-tests/my-vhost/htdocs/redis.php diff --git a/README.md b/README.md index 894099c0..9e32ef0e 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,12 @@ <img width="200" style="width:200px;" src="docs/_includes/figures/https/https-ssl-address-bar.png" /><br/> <small><sub>Support for <a href="https://devilbox.readthedocs.io/en/latest/intermediate/setup-valid-https.html">valid https</a> out of the box.</sub></small> -The Devilbox is a modern and highly customisable **dockerized PHP stack** supporting full **LAMP** and **MEAN** and running on all major platforms. The main goal is to easily switch and combine any version required for local development. It supports an **unlimited number of projects** for which **vhosts**, **SSL certificates** and **DNS records** are created automatically. Email catch-all and popular development tools will be at your service as well. Configuration is not necessary, as everything is already pre-setup. +The Devilbox is a modern and highly customisable **dockerized PHP stack** supporting full **LAMP** +and **MEAN** and running on all major platforms. The main goal is to easily switch and combine +any version required for local development. It supports an **unlimited number of projects** for +which **vhosts**, **SSL certificates** and **DNS records** are created automatically. +**Reverse proxies** per project are supported to ensure listening server such as NodeJS can also be reached. +Email catch-all and popular development tools will be at your service as well. Configuration is not necessary, as everything is already pre-setup. Furthermore, the Devilbox provides an **identical** and **reproducible development environment** for different host operating systems. @@ -410,6 +415,10 @@ The Devilbox has everything setup for you. The only thing you will have to insta <td>:star: Custom vhosts</td> <td>You can overwrite and customise the default applied vhost configuration for every single vhost.</td> </tr> + <tr> + <td>:star: Reverse proxy</td> + <td>Have your NodeJS application served with a nice domain name and valid HTTPS.</td> + </tr> <tr> <td>:star: Custom domains</td> <td>Choose whatever development domain you desire: <code>*.loc</code>, <code>*.local</code>, <code>*.dev</code> or use real domains as well: <code>*.example.com</code></td> @@ -418,6 +427,10 @@ The Devilbox has everything setup for you. The only thing you will have to insta <td>:star: Auto DNS</td> <td>An integrated BIND server is able to create DNS entries automatically for your chosen domains.</td> </tr> + <tr> + <td>:star: Auto start scripts</td> + <td>Custom startup scripts can be provided for all PHP container equally and also differently per PHP version to install custom software or automatically startup up your required tools.</td> + </tr> <tr> <td>:star: Custom PHP config</td> <td>Overwrite any setting for PHP.</td> @@ -460,6 +473,7 @@ The following batteries are available in the Devilbox intranet by default: <tr> <td><a href="https://www.adminer.org"><img width="64" style="width:64px;" src="https://raw.githubusercontent.com/cytopia/icons/master/128x128/adminer.png" alt="Adminer" /></a></td> <td><a href="https://www.phpmyadmin.net"><img width="64" style="width:64px;" src="https://raw.githubusercontent.com/cytopia/icons/master/128x128/phpmyadmin.png" alt="phpMyAdmin" /></a></td> + <td><a href="http://phppgadmin.sourceforge.net"><img width="64" style="width:64px;" src="https://raw.githubusercontent.com/cytopia/icons/master/128x128/phppgadmin.png" alt="phpPgAdmin" /></a></td> <td><a href="https://github.com/sasanrose/phpredmin"><img width="64" style="width:64px;" src="https://raw.githubusercontent.com/cytopia/icons/master/128x128/phpredmin.png" alt="phpRedMin" /></a></td> <td><a href="https://github.com/PeeHaa/OpCacheGUI"><img width="64" style="width:64px;" src="https://raw.githubusercontent.com/cytopia/icons/master/128x128/opcachegui.png" alt="OpCacheGUI" /></a></td> <td><img width="64" style="width:64px;" src="https://raw.githubusercontent.com/cytopia/icons/master/128x128/email.png" alt="Mail viewer" /></td> @@ -467,6 +481,7 @@ The following batteries are available in the Devilbox intranet by default: <tr> <td><a href="https://www.adminer.org">Adminer</a></td> <td><a href="https://www.phpmyadmin.net">phpMyAdmin</a></td> + <td><a href="http://phppgadmin.sourceforge.net">phpPgAdmin</a></td> <td><a href="https://github.com/sasanrose/phpredmin">phpRedMin</a></td> <td><a href="https://github.com/PeeHaa/OpCacheGUI">OpCache GUI</a></td> <td>Mail viewer</td> @@ -531,6 +546,10 @@ The following tools will assist you on creating new projects easily as well as h <td>:wrench: <a href="https://github.com/squizlabs/PHP_CodeSniffer">php code beautifier</a></td> <td><code>phpcbf</code> is a command line tool that automatically correct coding standard violations.</td> </tr> + <tr> + <td>:wrench: <a href="https://github.com/Unitech/pm2">pm2</a></td> + <td><code>pm2</code> is Node.js Production Process Manager with a built-in Load Balancer.</td> + </tr> <tr> <td>:wrench: <a href="https://github.com/brigade/scss-lint/">scss-lint</a></td> <td><code>scss-lint</code> is a css/scss linter.</td> @@ -580,102 +599,111 @@ Well-known and popular tools will be at your service as well: The Devilbox is a development stack, so it is made sure that a lot of PHP modules are available out of the box in order to work with many different frameworks. +> * Core enabled (cannot be disabled): **✔** +> * Enabled (can be disabled): 🗸 +> * Available, but disabled (can be enabled): **d** + <!-- modules --> | Modules | PHP 5.2 | PHP 5.3 | PHP 5.4 | PHP 5.5 | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | |----------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------| -| amqp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | -| apc | | ✓ | ✓ | ✓ | ✓ | | | | | | -| apcu | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | -| bcmath | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| bz2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| calendar | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Core | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| ctype | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| curl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| date | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| dba | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| dom | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| enchant | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| ereg | | ✓ | ✓ | ✓ | ✓ | | | | | | -| exif | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| fileinfo | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| filter | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| ftp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| gd | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| gettext | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| gmp | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| hash | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| iconv | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| igbinary | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| imagick | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | -| imap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| interbase | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| intl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| json | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| ldap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| libxml | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| mbstring | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| mcrypt | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | -| memcache | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | -| memcached | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| mhash | | | | | ✓ | | | | | | -| mongo | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | -| mongodb | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| msgpack | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | -| mysql | ✓ | ✓ | ✓ | ✓ | ✓ | | | | | | -| mysqli | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| mysqlnd | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| openssl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| pcntl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| pcre | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| PDO | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| pdo_dblib | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| PDO_Firebird | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| pdo_mysql | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| pdo_pgsql | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| pdo_sqlite | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| pdo_sqlsrv | | | | | | ✓ | ✓ | ✓ | ✓ | | -| pgsql | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| phalcon | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | | -| Phar | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| posix | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| pspell | ✓ | ✓ | ✓ | ✓ | ✓ | | | | ✓ | ✓ | -| rdkafka | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| readline | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| recode | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| redis | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Reflection | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| session | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| shmop | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| SimpleXML | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| snmp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| soap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| sockets | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| sodium | | | | | | | | ✓ | ✓ | ✓ | -| SPL | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| SQLite | ✓ | ✓ | | | | | | | | | -| sqlite3 | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| sqlsrv | | | | | | ✓ | ✓ | ✓ | ✓ | | -| standard | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| swoole | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| sysvmsg | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| sysvsem | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| sysvshm | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| tidy | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| tokenizer | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| uploadprogress | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| wddx | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| xdebug | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | -| xml | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| xmlreader | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| xmlrpc | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| xmlwriter | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| xsl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Zend OPcache | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| zip | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| zlib | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| amqp | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | +| apc | | 🗸 | 🗸 | 🗸 | 🗸 | | | | | | +| apcu | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | +| bcmath | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| bz2 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| calendar | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| Core | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| ctype | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| curl | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| date | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| dba | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| dom | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| enchant | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| ereg | | ✔ | ✔ | ✔ | ✔ | | | | | | +| exif | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| fileinfo | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| filter | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| ftp | 🗸 | 🗸 | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| gd | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| gettext | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| gmp | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| hash | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| iconv | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| igbinary | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| imagick | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | +| imap | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| interbase | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| intl | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| ioncube | d | d | d | d | d | d | d | d | | | +| json | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| ldap | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| libxml | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| mbstring | ✔ | 🗸 | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| mcrypt | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | +| memcache | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | +| memcached | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| mhash | | | | | ✔ | | | | | | +| mongo | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | | | | +| mongodb | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| msgpack | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | +| mysql | ✔ | ✔ | 🗸 | 🗸 | 🗸 | | | | | | +| mysqli | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| mysqlnd | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| openssl | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| pcntl | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| pcre | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| PDO | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| pdo_dblib | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| PDO_Firebird | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| pdo_mysql | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| pdo_pgsql | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| pdo_sqlite | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| pdo_sqlsrv | | | | | | d | d | d | d | | +| pgsql | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| phalcon | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | +| Phar | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| posix | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| pspell | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| rdkafka | | d | d | d | d | d | d | d | d | d | +| readline | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| recode | 🗸 | ✔ | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| redis | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| Reflection | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| session | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| shmop | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| SimpleXML | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| snmp | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| soap | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| sockets | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| sodium | | | | | | | | ✔ | ✔ | ✔ | +| SPL | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| SQLite | ✔ | ✔ | | | | | | | | | +| sqlite3 | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| sqlsrv | | | | | | d | d | d | d | | +| standard | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| swoole | | d | d | d | d | d | d | d | d | d | +| sysvmsg | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| sysvsem | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| sysvshm | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| tidy | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| tokenizer | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| uploadprogress | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| wddx | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| xdebug | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | +| xml | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| xmlreader | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| xmlrpc | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| xmlwriter | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| xsl | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| Zend OPcache | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| zip | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | +| zlib | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | <!-- /modules --> +> * Core enabled (cannot be disabled): **✔** +> * Enabled (can be disabled): 🗸 +> * Available, but disabled (can be enabled): **d** + PHP modules can be enabled or disabled on demand to reflect the state of your target environment. > **Documentation:** @@ -724,6 +752,20 @@ As far as tested there are no limitations and you can use any Framework or CMS j > [Setup Yii](https://devilbox.readthedocs.io/en/latest/examples/setup-yii.html) | > [Setup Zend](https://devilbox.readthedocs.io/en/latest/examples/setup-zend.html) +#### Supported reverse proxied applications + +As far as tested there are no limitations and you can use any application that creates an open port. +These ports will be reverse proxied by the web server and even allow you to use valid HTTPS for them. +By the built-in autostart feature of the Devilbox you can ensure that your application automatically +starts up as soon as you run `docker-compose up`. + +<a target="_blank" title="NodeJS" href="https://nodejs.org"><img width="64" style="width:64px;" src="docs/img/logo_tools/nodejs.png" alt="Devilbox"/></a> +<a target="_blank" title="Sphinx" href="https://www.sphinx-doc.org/en/stable/"><img width="64" style="width:64px;" src="docs/img/logo_tools/sphinx.png" alt="Devilbox"/></a> + +> **Documentation:**<br/> +> [Setup reverse proxy NodeJs](https://devilbox.readthedocs.io/en/latest/examples/setup-reverse-proxy-nodejs.html) | +> [Setup reverse proxy Sphinx documentation](https://devilbox.readthedocs.io/en/latest/examples/setup-reverse-proxy-sphinx-docs.html) + ## Intranet overview The Devilbox comes with a pre-configured intranet on `http://localhost` and `https://localhost`. This can be explicitly disabled or password-protected. The intranet will not only show you, the chosen configuration, but also validate the status of the current configuration, such as if **DNS records** exists (on host and container), are directories properly set-up. Additionally it provides external tools to let you interact with databases and emails. @@ -734,6 +776,7 @@ The Devilbox comes with a pre-configured intranet on `http://localhost` and `htt * **Info pages** (Httpd, MySQL, PgSQL, Redis, Memcache, ...) * **[Adminer](https://www.adminer.org)** * **[phpMyAdmin](https://www.phpmyadmin.net)** +* **[phpPgAdmin](http://phppgadmin.sourceforge.net)** * **[phpRedMin](https://github.com/sasanrose/phpredmin)** * **[OpcacheGUI](https://github.com/PeeHaa/OpCacheGUI)** diff --git a/autostart/README.md b/autostart/README.md new file mode 100644 index 00000000..3e37fc0f --- /dev/null +++ b/autostart/README.md @@ -0,0 +1,29 @@ +# Custom startup scripts (global) + +Any script inside this directory ending by `.sh` will be executed during the PHP container startup. +This is useful to apply your custom settings such as installing software that usually requires +the user to accept a license or similar. + +A few examples are given that do not end by `.sh` which won't be run. If you want to use the +provided examples, copy them to a file ending by `.sh` + + +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands for all PHP versions. If you want to selectively run commands +for a specific version, go to `cfg/php-startup-X.Y/`. + + +## Important + +All provided scripts will be executed with **root** permissions. diff --git a/autostart/run-node-js-projects.sh-example b/autostart/run-node-js-projects.sh-example new file mode 100755 index 00000000..a77207ec --- /dev/null +++ b/autostart/run-node-js-projects.sh-example @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# +# This is a generic example to startup your NodeJS projects with +# pm2 (https://github.com/Unitech/pm2) +# +# Important: As everything is run by the root user, you must explicitly direct the +# commands to the devilbox user. +# + + + +# Add the full paths of your Nodejs projects startup files into this array +# Each project separated by a newline and enclosed in double quotes. (No commas!) +# Paths are internal paths inside the PHP container. +NODE_PROJECTS=( + #"/shared/httpd/my-rhost/js/index.js" + #"/shared/httpd/my-node-hello-world/name/run.js" + #"/shared/httpd/another-node-project/javascript/run.js" +) + + +# Check if any projects have been defined +if [ ${#NODE_PROJECTS[@]} -eq 0 ]; then + echo "No projects defined. Exiting." + exit 0 +fi + + +# This loops over the paths, separates base directory and filename and will run it in the background +# as the user devilbox. There shouldn't be any need to change anything here. +for item in ${NODE_PROJECTS[*]}; do + NODE_PATH="$( dirname "${item}" )" + NODE_FILE="$( basename "${item}" )" + + if [ ! -d "${NODE_PATH}" ]; then + >&2 echo "[Warning], skipping startup, directory does not exist: ${NODE_PATH}" + continue; + fi + if [ ! -f "${NODE_PATH}/${NODE_FILE}" ]; then + >&2 echo "[Warning], skipping startup, file does not exist: ${NODE_PATH}/${NODE_FILE}" + continue; + fi + + echo "su -c \"cd ${NODE_PATH}; pm2 start ${NODE_FILE}\" -l devilbox" + su -c "cd ${NODE_PATH}; pm2 start ${NODE_FILE}" -l devilbox +done diff --git a/cfg/php-startup-5.2/README.md b/cfg/php-startup-5.2/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-5.2/README.md +++ b/cfg/php-startup-5.2/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-5.3/README.md b/cfg/php-startup-5.3/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-5.3/README.md +++ b/cfg/php-startup-5.3/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-5.4/README.md b/cfg/php-startup-5.4/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-5.4/README.md +++ b/cfg/php-startup-5.4/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-5.5/README.md b/cfg/php-startup-5.5/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-5.5/README.md +++ b/cfg/php-startup-5.5/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-5.6/README.md b/cfg/php-startup-5.6/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-5.6/README.md +++ b/cfg/php-startup-5.6/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-7.0/README.md b/cfg/php-startup-7.0/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-7.0/README.md +++ b/cfg/php-startup-7.0/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-7.1/README.md b/cfg/php-startup-7.1/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-7.1/README.md +++ b/cfg/php-startup-7.1/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-7.2/README.md b/cfg/php-startup-7.2/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-7.2/README.md +++ b/cfg/php-startup-7.2/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-7.3/README.md b/cfg/php-startup-7.3/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-7.3/README.md +++ b/cfg/php-startup-7.3/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/php-startup-7.4/README.md b/cfg/php-startup-7.4/README.md index d75100ab..e212252e 100644 --- a/cfg/php-startup-7.4/README.md +++ b/cfg/php-startup-7.4/README.md @@ -1,4 +1,4 @@ -# Custom startup scripts +# Custom startup scripts (per PHP version) Any script inside this directory ending by `.sh` will be executed during the PHP container startup. This is useful to apply your custom settings such as installing software that usually requires @@ -8,6 +8,22 @@ A few examples are given that do not end by `.sh` which won't be run. If you wan provided examples, copy them to a file ending by `.sh` +## Info + +If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2). +Ensure you do this as user `devilbox`, as by default everything is run by root. + +```bash +su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox +``` + + +## Note + +This directory will startup commands only for a specific PHP version. If you want to run commands +for all versions , go to `autostart/` in the root of the Devilbox git directory. + + ## Important All provided scripts will be executed with **root** permissions. diff --git a/cfg/vhost-gen/README.md b/cfg/vhost-gen/README.md index c12340f4..d47fe99d 100644 --- a/cfg/vhost-gen/README.md +++ b/cfg/vhost-gen/README.md @@ -4,11 +4,29 @@ Enabling templates in this directory will change the webserver vhost configurati In order for template files to be picked up by the web server they must have the correct name. -Copy the example templates to a new file with the correct name. +Copy the example templates to a new file with the correct name either in this directory which +will then apply those settings for all vhosts or into the corresponding project directory to +only make the settings for a specific project. -| Web server | Example template | Template name | -|----------------|-------------------------|----------------| -| Apache 2.2 | `apache22.yml-example` | `apache22.yml` | -| Apache 2.4 | `apache24.yml-example` | `apache24.yml` | -| Nginx stable | `nginx.yml-example` | `nginx.yml` | -| Nginx mainline | `nginx.yml-example` | `nginx.yml` | + +## Normal virtual hosts + +| Web server | Example template | Template name | +|----------------|--------------------------------|----------------| +| Apache 2.2 | `apache22.yml-example-vhost` | `apache22.yml` | +| Apache 2.4 | `apache24.yml-example-vhost` | `apache24.yml` | +| Nginx stable | `nginx.yml-example-vhost` | `nginx.yml` | +| Nginx mainline | `nginx.yml-example-vhost` | `nginx.yml` | + + +## Reverse proxy virtual hosts + +**Do not apply the `*-rproxy` templates globally (in this directory), or everything will stop +working. Use them only for per project settings!** + +| Web server | Example template | Template name | +|----------------|--------------------------------|----------------| +| Apache 2.2 | `apache22.yml-example-rproxy` | `apache22.yml` | +| Apache 2.4 | `apache24.yml-example-rproxy` | `apache24.yml` | +| Nginx stable | `nginx.yml-example-rproxy` | `nginx.yml` | +| Nginx mainline | `nginx.yml-example-rproxy` | `nginx.yml` | diff --git a/cfg/vhost-gen/apache22.yml-example b/cfg/vhost-gen/apache22.yml-example-rproxy similarity index 69% rename from cfg/vhost-gen/apache22.yml-example rename to cfg/vhost-gen/apache22.yml-example-rproxy index 158de62e..f2d4f018 100644 --- a/cfg/vhost-gen/apache22.yml-example +++ b/cfg/vhost-gen/apache22.yml-example-rproxy @@ -1,13 +1,12 @@ --- -# Apache 2.2 vHost Template defintion for vhost-gen.py +# Apache 2.2 Reverse Proxy Template defintion for vhost-gen.py # # The 'feature' section contains optional features that can be enabled via # conf.yml and will then be replaced into the main vhost ('structure' section) # into their corresponding position: # # __XDOMAIN_REQ__ -# __PHP_FPM__ # __ALIASES__ # __DENIES__ # __STATUS__ @@ -16,9 +15,6 @@ # and will then be replaced in their corresponding feature section # before being replaced into the vhost section (if enabled): # -# PHP-FPM: -# __PHP_ADDR__ -# __PHP_PORT__ # XDomain: # __REGEX__ # Alias: @@ -36,8 +32,6 @@ # __INDEX__ # __ACCESS_LOG__ # __ERROR_LOG__ -# __PHP_ADDR__ -# __PHP_PORT__ # @@ -51,11 +45,14 @@ vhost: | CustomLog "__ACCESS_LOG__" combined ErrorLog "__ERROR_LOG__" + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://php:8000/ + ProxyPassReverse / http://php:8000/ + __REDIRECT__ __SSL__ - __VHOST_DOCROOT__ - __VHOST_RPROXY__ - __PHP_FPM__ __ALIASES__ __DENIES__ __SERVER_STATUS__ @@ -67,37 +64,8 @@ vhost: | ### vHost Type (normal or reverse proxy) ### vhost_type: - # Normal vHost (-p) - docroot: | - # Define the vhost to serve files - DocumentRoot "__DOCUMENT_ROOT__" - <Directory "__DOCUMENT_ROOT__"> - DirectoryIndex __INDEX__ - - AllowOverride All - Options All - - RewriteEngine on - RewriteBase / - - Order allow,deny - Allow from all - </Directory> - - # Reverse Proxy (-r) - rproxy: | - # Define the vhost to reverse proxy - ProxyRequests off - ProxyPass __LOCATION__ __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ - ProxyHTMLURLMap __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ __LOCATION__ - <location __LOCATION__> - ProxyPassReverse / - SetOutputFilter proxy-html - ProxyHTMLURLMap / __LOCATION__ - ProxyHTMLURLMap __LOCATION__ __LOCATION__ - RequestHeader unset Accept-Encoding - </location> - + docroot: "" + rproxy: "" ### ### Optional features to be enabled in vHost @@ -117,10 +85,8 @@ features: redirect: | RedirectMatch (.*) https://__VHOST_NAME__:__SSL_PORT__$1 - # PHP-FPM will not be applied to a reverse proxy! - php_fpm: | - # PHP-FPM Definition - ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://__PHP_ADDR__:__PHP_PORT____DOCUMENT_ROOT__/$1 timeout=__PHP_TIMEOUT__ + # PHP-FPM left empty, as we are an reverse proxy configuration + php_fpm: "" alias: | # Alias Definition diff --git a/.tests/vhost-tests/.devilbox/apache22.yml b/cfg/vhost-gen/apache22.yml-example-vhost similarity index 89% rename from .tests/vhost-tests/.devilbox/apache22.yml rename to cfg/vhost-gen/apache22.yml-example-vhost index 158de62e..9a571c5e 100644 --- a/.tests/vhost-tests/.devilbox/apache22.yml +++ b/cfg/vhost-gen/apache22.yml-example-vhost @@ -87,16 +87,10 @@ vhost_type: # Reverse Proxy (-r) rproxy: | # Define the vhost to reverse proxy - ProxyRequests off - ProxyPass __LOCATION__ __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ - ProxyHTMLURLMap __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ __LOCATION__ - <location __LOCATION__> - ProxyPassReverse / - SetOutputFilter proxy-html - ProxyHTMLURLMap / __LOCATION__ - ProxyHTMLURLMap __LOCATION__ __LOCATION__ - RequestHeader unset Accept-Encoding - </location> + ProxyRequests On + ProxyPreserveHost On + ProxyPass __LOCATION__ __PROXY_PROTO__://__PROXY_ADDR__:__PROXY_PORT____LOCATION__ + ProxyPassReverse __LOCATION__ __PROXY_PROTO__://__PROXY_ADDR__:__PROXY_PORT____LOCATION__ ### diff --git a/.tests/vhost-tests/.devilbox/apache24.yml b/cfg/vhost-gen/apache24.yml-example-rproxy similarity index 59% rename from .tests/vhost-tests/.devilbox/apache24.yml rename to cfg/vhost-gen/apache24.yml-example-rproxy index 8703d096..c5170b0a 100644 --- a/.tests/vhost-tests/.devilbox/apache24.yml +++ b/cfg/vhost-gen/apache24.yml-example-rproxy @@ -1,13 +1,12 @@ --- -# Apache 2.4 vHost Template defintion for vhost-gen.py +# Apache 2.4 Reverse Proxy Template defintion for vhost-gen.py # # The 'feature' section contains optional features that can be enabled via # conf.yml and will then be replaced into the main vhost ('structure' section) # into their corresponding position: # # __XDOMAIN_REQ__ -# __PHP_FPM__ # __ALIASES__ # __DENIES__ # __STATUS__ @@ -16,9 +15,6 @@ # and will then be replaced in their corresponding feature section # before being replaced into the vhost section (if enabled): # -# PHP-FPM: -# __PHP_ADDR__ -# __PHP_PORT__ # XDomain: # __REGEX__ # Alias: @@ -36,8 +32,6 @@ # __INDEX__ # __ACCESS_LOG__ # __ERROR_LOG__ -# __PHP_ADDR__ -# __PHP_PORT__ # @@ -51,11 +45,14 @@ vhost: | CustomLog "__ACCESS_LOG__" combined ErrorLog "__ERROR_LOG__" + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://php:8000/ + ProxyPassReverse / http://php:8000/ + __REDIRECT__ __SSL__ - __VHOST_DOCROOT__ - __VHOST_RPROXY__ - __PHP_FPM__ __ALIASES__ __DENIES__ __SERVER_STATUS__ @@ -67,38 +64,8 @@ vhost: | ### vHost Type (normal or reverse proxy) ### vhost_type: - # Normal vHost (-p) - docroot: | - # Define the vhost to serve files - DocumentRoot "__DOCUMENT_ROOT__" - <Directory "__DOCUMENT_ROOT__"> - DirectoryIndex __INDEX__ - - AllowOverride All - Options All - - RewriteEngine on - RewriteBase / - - Order allow,deny - Allow from all - Require all granted - </Directory> - - # Reverse Proxy (-r) - rproxy: | - # Define the vhost to reverse proxy - ProxyRequests off - ProxyPass __LOCATION__ __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ - ProxyHTMLURLMap __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ __LOCATION__ - <location __LOCATION__> - ProxyPassReverse / - SetOutputFilter proxy-html - ProxyHTMLURLMap / __LOCATION__ - ProxyHTMLURLMap __LOCATION__ __LOCATION__ - RequestHeader unset Accept-Encoding - </location> - + docroot: "" + rproxy: "" ### ### Optional features to be enabled in vHost @@ -118,29 +85,8 @@ features: redirect: | RedirectMatch (.*) https://__VHOST_NAME__:__SSL_PORT__$1 - # PHP-FPM will not be applied to a reverse proxy! - php_fpm: | - # In case for PHP-FPM 5.2 compatibility use 'GENERIC' instead of 'FPM' - # https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html#proxyfcgibackendtype - ProxyFCGIBackendType FPM - - # PHP-FPM Definition - <FilesMatch \.php$> - Require all granted - SetHandler proxy:fcgi://__PHP_ADDR__:__PHP_PORT__ - </FilesMatch> - - <Proxy "fcgi://__PHP_ADDR__:__PHP_PORT__/"> - ProxySet timeout=__PHP_TIMEOUT__ - ProxySet connectiontimeout=__PHP_TIMEOUT__ - </Proxy> - - # If the php file doesn't exist, disable the proxy handler. - # This will allow .htaccess rewrite rules to work and - # the client will see the default 404 page of Apache - RewriteCond %{REQUEST_FILENAME} \.php$ - RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f - RewriteRule (.*) - [H=text/html] + # PHP-FPM left empty, as we are an reverse proxy configuration + php_fpm: "" alias: | # Alias Definition diff --git a/cfg/vhost-gen/apache24.yml-example b/cfg/vhost-gen/apache24.yml-example-vhost similarity index 91% rename from cfg/vhost-gen/apache24.yml-example rename to cfg/vhost-gen/apache24.yml-example-vhost index 8703d096..ca8a036f 100644 --- a/cfg/vhost-gen/apache24.yml-example +++ b/cfg/vhost-gen/apache24.yml-example-vhost @@ -88,16 +88,10 @@ vhost_type: # Reverse Proxy (-r) rproxy: | # Define the vhost to reverse proxy - ProxyRequests off - ProxyPass __LOCATION__ __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ - ProxyHTMLURLMap __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ __LOCATION__ - <location __LOCATION__> - ProxyPassReverse / - SetOutputFilter proxy-html - ProxyHTMLURLMap / __LOCATION__ - ProxyHTMLURLMap __LOCATION__ __LOCATION__ - RequestHeader unset Accept-Encoding - </location> + ProxyRequests On + ProxyPreserveHost On + ProxyPass __LOCATION__ __PROXY_PROTO__://__PROXY_ADDR__:__PROXY_PORT____LOCATION__ + ProxyPassReverse __LOCATION__ __PROXY_PROTO__://__PROXY_ADDR__:__PROXY_PORT____LOCATION__ ### diff --git a/cfg/vhost-gen/nginx.yml-example b/cfg/vhost-gen/nginx.yml-example-rproxy similarity index 69% rename from cfg/vhost-gen/nginx.yml-example rename to cfg/vhost-gen/nginx.yml-example-rproxy index 44c4c09f..26729ab4 100644 --- a/cfg/vhost-gen/nginx.yml-example +++ b/cfg/vhost-gen/nginx.yml-example-rproxy @@ -1,13 +1,12 @@ --- -# Nginx vHost Template defintion for vhost-gen.py +# Nginx Reverse Proxy Template defintion for vhost-gen.py # # The 'feature' section contains optional features that can be enabled via # conf.yml and will then be replaced into the main vhost ('structure' section) # into their corresponding position: # # __XDOMAIN_REQ__ -# __PHP_FPM__ # __ALIASES__ # __DENIES__ # __STATUS__ @@ -16,9 +15,6 @@ # and will then be replaced in their corresponding feature section # before being replaced into the vhost section (if enabled): # -# PHP-FPM: -# __PHP_ADDR__ -# __PHP_PORT__ # XDomain: # __REGEX__ # Alias: @@ -36,8 +32,6 @@ # __INDEX__ # __ACCESS_LOG__ # __ERROR_LOG__ -# __PHP_ADDR__ -# __PHP_PORT__ # @@ -52,11 +46,15 @@ vhost: | access_log "__ACCESS_LOG__" combined; error_log "__ERROR_LOG__" warn; + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://php:8000; + } + __REDIRECT__ __SSL__ - __VHOST_DOCROOT__ - __VHOST_RPROXY__ - __PHP_FPM__ __ALIASES__ __DENIES__ __SERVER_STATUS__ @@ -64,26 +62,12 @@ vhost: | __CUSTOM__ } - ### ### vHost Type (normal or reverse proxy) ### vhost_type: - # Normal vHost (-p) - docroot: | - # Define the vhost to serve files - root "__DOCUMENT_ROOT__"; - index __INDEX__; - - # Reverse Proxy (-r) - rproxy: | - # Define the vhost to reverse proxy - location __LOCATION__ { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_pass __PROXY_PROTO__://__PROXY_ADDR__:__PROXY_PORT__; - } - + docroot: "" + rproxy: "" ### ### Optional features to be enabled in vHost @@ -102,28 +86,8 @@ features: redirect: | return 301 https://__VHOST_NAME__:__SSL_PORT__$request_uri; - # PHP-FPM will not be applied to a reverse proxy! - php_fpm: | - # PHP-FPM Definition - location / { - try_files $uri $uri/ /index.php$is_args$args; - } - location ~ \.php?$ { - try_files $uri = 404; - include fastcgi_params; - - # https://stackoverflow.com/questions/1733306/nginx-errors-readv-and-recv-failed/51457613#51457613 - fastcgi_keep_conn off; - - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_split_path_info ^(.+\.php)(.*)$; - - fastcgi_pass __PHP_ADDR__:__PHP_PORT__; - fastcgi_read_timeout __PHP_TIMEOUT__; - - fastcgi_index index.php; - fastcgi_intercept_errors on; - } + # PHP-FPM left empty, as we are an reverse proxy configuration + php_fpm: "" alias: | # Alias Definition diff --git a/.tests/vhost-tests/.devilbox/nginx.yml b/cfg/vhost-gen/nginx.yml-example-vhost similarity index 100% rename from .tests/vhost-tests/.devilbox/nginx.yml rename to cfg/vhost-gen/nginx.yml-example-vhost diff --git a/docker-compose.yml b/docker-compose.yml index a4635bc6..7a235566 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,6 +35,7 @@ services: # ------------------------------------------------------------ bind: image: cytopia/bind:0.15 + hostname: bind restart: always ports: # [local-machine:]local-port:docker-port @@ -85,17 +86,17 @@ services: docker.for.lin.host.internal: 172.16.238.1 docker.for.lin.localhost: 172.16.238.1 - hostname: bind networks: app_net: ipv4_address: 172.16.238.100 # ------------------------------------------------------------ - # PHP / HHVM + # PHP # ------------------------------------------------------------ php: - image: devilbox/php-fpm:${PHP_SERVER}-work-0.61 + image: devilbox/php-fpm:${PHP_SERVER}-work-0.64 + hostname: php ## ## All .env variables @@ -156,7 +157,6 @@ services: docker.for.lin.host.internal: 172.16.238.1 docker.for.lin.localhost: 172.16.238.1 - hostname: php networks: app_net: ipv4_address: 172.16.238.10 @@ -193,7 +193,8 @@ services: - ${DEVILBOX_PATH}/mod/php-fpm-${PHP_SERVER}:/usr/lib64/php/custom-modules:ro${MOUNT_OPTIONS} # Mount devilbox user-defined PHP-FPM startup *.sh scripts - - ${DEVILBOX_PATH}/cfg/php-startup-${PHP_SERVER}:/startup.d:rw${MOUNT_OPTIONS} + - ${DEVILBOX_PATH}/cfg/php-startup-${PHP_SERVER}:/startup.1.d:rw${MOUNT_OPTIONS} + - ${DEVILBOX_PATH}/autostart:/startup.2.d:rw${MOUNT_OPTIONS} # Mount devilbox user-defined bash config - ${DEVILBOX_PATH}/bash:/etc/bashrc-devilbox.d:rw${MOUNT_OPTIONS} @@ -209,7 +210,8 @@ services: # Web Server # ------------------------------------------------------------ httpd: - image: devilbox/${HTTPD_SERVER}:0.24 + image: devilbox/${HTTPD_SERVER}:0.25 + hostname: httpd environment: @@ -266,7 +268,6 @@ services: - "${LOCAL_LISTEN_ADDR}${HOST_PORT_HTTPD}:80" - "${LOCAL_LISTEN_ADDR}${HOST_PORT_HTTPD_SSL}:443" - hostname: httpd networks: app_net: ipv4_address: 172.16.238.11 @@ -303,6 +304,7 @@ services: # ------------------------------------------------------------ mysql: image: cytopia/${MYSQL_SERVER}:latest + hostname: mysql environment: @@ -335,7 +337,6 @@ services: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_MYSQL}:3306" - hostname: mysql networks: app_net: ipv4_address: 172.16.238.12 @@ -368,6 +369,7 @@ services: # ------------------------------------------------------------ pgsql: image: postgres:${PGSQL_SERVER} + hostname: pgsql environment: @@ -379,7 +381,6 @@ services: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_PGSQL}:5432" - hostname: pgsql networks: app_net: ipv4_address: 172.16.238.13 @@ -405,6 +406,7 @@ services: # ------------------------------------------------------------ redis: image: redis:${REDIS_SERVER} + hostname: redis # Apply custom arguments to redis startup command: redis-server ${REDIS_ARGS:- } @@ -415,7 +417,6 @@ services: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_REDIS}:6379" - hostname: redis networks: app_net: ipv4_address: 172.16.238.14 @@ -438,12 +439,12 @@ services: # ------------------------------------------------------------ memcd: image: memcached:${MEMCD_SERVER} + hostname: memcd ports: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_MEMCD}:11211" - hostname: memcd networks: app_net: ipv4_address: 172.16.238.15 @@ -466,12 +467,12 @@ services: # ------------------------------------------------------------ mongo: image: mongo:${MONGO_SERVER} + hostname: mongo ports: # [local-machine:]local-port:docker-port - "${LOCAL_LISTEN_ADDR}${HOST_PORT_MONGO}:27017" - hostname: mongo networks: app_net: ipv4_address: 172.16.238.16 diff --git a/docs/_includes/links/blogs.rst b/docs/_includes/links/blogs.rst index f708a97b..a9b22388 100644 --- a/docs/_includes/links/blogs.rst +++ b/docs/_includes/links/blogs.rst @@ -21,3 +21,15 @@ <a target="_blank" href="https://docs.joomla.org/GSOC_2017"> Google Summer of Code 2017 <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" /> </a> + +.. |ext_lnk_blog_drupalcamp_ghent_2018_slides| raw:: html + + <a target="_blank" href="https://docs.google.com/presentation/d/1MvSwPlFL3TozWBtwpfNUTKVOvTbYzRY6GBQ9v2VS_GA/edit#slide=id.g45ef3f2bc6_2_54"> + Drupalcamp Ghent 2018: Slides <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" /> + </a> + +.. |ext_lnk_blog_drupalcamp_ghent_2018_presentation| raw:: html + + <a target="_blank" href="https://www.youtube.com/watch?v=88Sr0aNvVm0"> + Drupalcamp Ghent 2018: Presentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" /> + </a> diff --git a/docs/_includes/links/tools.rst b/docs/_includes/links/tools.rst index 85d3da96..971341d9 100644 --- a/docs/_includes/links/tools.rst +++ b/docs/_includes/links/tools.rst @@ -189,6 +189,12 @@ Photon CMS cli <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" /> </a> +.. |ext_lnk_tool_pm2| raw:: html + + <a target="_blank" href="https://github.com/Unitech/pm2"> + pm2 <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" /> + </a> + .. |ext_lnk_tool_sass| raw:: html <a target="_blank" href="https://sass-lang.com"> @@ -267,6 +273,12 @@ phpMyAdmin <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" /> </a> +.. |ext_lnk_tool_phppgadmin| raw:: html + + <a target="_blank" href="http://phppgadmin.sourceforge.net/doku.php"> + phpPgAdmin <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" /> + </a> + .. |ext_lnk_tool_phpredmin| raw:: html <a target="_blank" href="https://github.com/sasanrose/phpredmin"> diff --git a/docs/autostart/autostarting-nodejs-apps.rst b/docs/autostart/autostarting-nodejs-apps.rst new file mode 100644 index 00000000..d2f5b078 --- /dev/null +++ b/docs/autostart/autostarting-nodejs-apps.rst @@ -0,0 +1,99 @@ +.. include:: /_includes/all.rst + +.. _autostarting_nodejs_apps: + +************************ +Autostarting NodeJS Apps +************************ + + +You can have all of your NodeJS applications spin up automtically as soon as you ``docker-compose up``. +This can be achieved by makeing use of |ext_lnk_tool_pm2| (Node.js Process Manager) and the +autostart feature. + +.. seealso:: + **Read more about how to add scripts for autostart commands:** + + * :ref:`custom_scripts_per_php_version` (individually for different PHP versions) + * :ref:`custom_scripts_globally` (equal for all PHP versions) + + +**Table of Contents** + +.. contents:: :local: + + +Self-built +========== + +Simply add a script ending by ``.sh`` to the ``autostart/`` directory that will accomplish this. +The following example will make use of |ext_lnk_tool_pm2| to spin up your NodeJS application. + +Assumption +---------- + +* Path to your NodeJS project (within the Docker container): ``/shared/httpd/my-node/src`` +* Name of the JS file to startup: ``index.js`` + +The script +---------- + +Add the following script to ``autostart/`` + +.. code-block:: bash + :caption: autostart/myscript.sh + + su -c "cd /shared/httpd/my-node/src; pm2 start index.js" -l devilbox + +* The whole command is wrapped into ``su`` to ensure the application will be started as the user ``devilbox``. +* ``cd`` tells it to you enter the directory where ``index.js`` can be found +* And finally |ext_lnk_tool_pm2| will take care about starting up your javascript file. + +Once the Devilbox is running, you can enter the PHP container and verify with ``pm2 list`` that +everything is running as expected. + + +Pre-built +========= + +Instead of writing multiple scripts for multiple applications, you can also make use of the +pre-shipped script that allows you to start unlimitted NodeJS applications via |ext_lnk_tool_pm2|. + +The following script is provided in ``autostart/run-node-js-projects.sh-example`` and needs to be +copied to a file ending by ``.sh`` + +.. code-block:: bash + + host> cd /path/to/devilbox + host> cd autostart + host> cp run-node-js-projects.sh-example run-node-js-projects.sh + + +In that newly created file, you can simply add the full paths (path inside the Docker containre) +of your Javascript files that need to be started. There is already one example which is not +commented. Change this to your path and add as many lines as you have projects to startup. + +.. literalinclude:: ../../autostart/run-node-js-projects.sh + :caption: autostart/run-node-js-projects.sh + :language: bash + :emphasize-lines: 16 + + +Reverse proxy NodeJS +==================== + +If you also want to know how to reverse proxy your NodeJS service and have it available via the web +server including HTTPS support have a look at the following links: + +.. seealso:: + + * :ref:`reverse_proxy_with_https` + * :ref:`example_setup_reverse_proxy_nodejs` + + +Imagine you have started an application within the PHP container that creates a listening port +(e.g.: NodeJS). This will now only listen on the PHP container and you would have to adjust +the docker-compose.yml definition in order to have that port available outside to your host OS. + +Alternatively, there is a simple way to reverse proxy it to the already running web server and even +make use of the already available HTTPS feature. diff --git a/docs/autostart/custom-scripts-globally.rst b/docs/autostart/custom-scripts-globally.rst new file mode 100644 index 00000000..e0b31d68 --- /dev/null +++ b/docs/autostart/custom-scripts-globally.rst @@ -0,0 +1,98 @@ +.. _custom_scripts_globally: + +*********************** +Custom scripts globally +*********************** + +You can provide custom startup commands via bash scripts that are executed by all PHP container. +This may be useful to specify additional software to install or additional settings to apply during +the initial startup. + + +.. seealso:: + * :ref:`custom_scripts_per_php_version` (individually for different PHP versions) + * :ref:`autostarting_nodejs_apps` + + +.. note:: + Global scripts are always executed **after** per PHP version scripts. + + +**Table of Contents** + +.. contents:: :local: + + +General +======= + +You can add shell scripts that are executed for all PHP container equally. + +.. important:: + Provided scripts must end by the file extension ``.sh`` and should be executable. + Anything not ending by ``.sh`` will be ignored. + +.. important:: + Provided scripts will be executed by the ``root`` user within the PHP container. + + +Where +----- + +Startup scripts can be added to ``autostart/``. + +.. code-block:: bash + :emphasize-lines: 3 + + host> ls -l path/to/devilbox/ + + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 autostart/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 backups/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 bash/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 ca/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 cfg/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 compose/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 data/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 docs/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 mail/ + drwxr-xr-x 2 cytopia cytopia 4096 Mar 5 21:53 mod/ + + +Custom scripts are added by placing a file into ``autostart/``. The file must end by ``.sh`` in +order to be executed by the PHP container. + +When +---- + +The scripts will be executed by the PHP container during initial startup. Whenever you change your +scripts, ensure to restart the Devilbox. + +How +--- + +The scripts will always be executed inside the PHP container (Debian Linux) and will be run with +``root`` privileges. It is however possible to drop privileges within the script to have them +executed as a normal user. + + +Examples +======== + +Running commands as devilbox user +--------------------------------- + +As mentioned above, all scripts are run by the ``root`` user. +If you do need something to be executed as the normal user: ``devilbox``, you can simply ``su`` +inside the shell script. + +The following example will install ``grunt`` and start a NodeJS application as the devilbox user +for whatever PHP container has been started. + +.. code-block:: bash + :caption: autostart/myscript.sh + + # Install grunt as devilbox user + su -c "npm install grunt" -l devilbox + + # Start a NodeJS application with pm2 as devilbox user + su -c "cd /shared/httpd/my-node/src/; pm2 start index.js" -l devilbox diff --git a/docs/advanced/custom-startup-commands.rst b/docs/autostart/custom-scripts-per-php-version.rst similarity index 61% rename from docs/advanced/custom-startup-commands.rst rename to docs/autostart/custom-scripts-per-php-version.rst index 89cd52c8..1849b6f3 100644 --- a/docs/advanced/custom-startup-commands.rst +++ b/docs/autostart/custom-scripts-per-php-version.rst @@ -1,13 +1,23 @@ -.. _custom_startup_commands: +.. _custom_scripts_per_php_version: -*********************** -Custom startup commands -*********************** +****************************** +Custom scripts per PHP version +****************************** -You can provide custom startup commands via bash scripts to each of the PHP container. +You can provide custom startup commands via bash scripts to each of the PHP container individually. This may be useful to specify additional software to install or additional settings to apply during the initial startup. + +.. seealso:: + * :ref:`custom_scripts_globally` (equal for all PHP versions) + * :ref:`autostarting_nodejs_apps` + + +.. note:: + Per PHP version scripts are always executed **before** global scripts. + + **Table of Contents** .. contents:: :local: @@ -16,9 +26,15 @@ the initial startup. General ======= -You can add custom ``bash`` scripts for each PHP version separately. Provided scripts must end -by the file extension ``.sh`` and should be executable. Anything not ending by ``.sh`` will be -ignored. +You can add custom shell scripts for each PHP version separately. + +.. important:: + Provided scripts must end by the file extension ``.sh`` and should be executable. + Anything not ending by ``.sh`` will be ignored. + +.. important:: + Provided scripts will be executed by the ``root`` user within the PHP container. + Where ----- @@ -59,15 +75,13 @@ How --- The scripts will always be executed inside the PHP container (Debian Linux) and will be run with -``root`` privileges. +``root`` privileges. It is however possible to drop privileges within the script to have them +executed as a normal user. Examples ======== -The following examples should already exist as example files within ``cfg/php-startup-X.Y``, but -will covered here as well to show some real world examples of what can be done with startup scripts. - Installing Microsoft ODBC driver -------------------------------- @@ -94,7 +108,7 @@ Paste the following into ``ms-obbc.sh`` and **ensure to accept the EULA** by cha ``ACCEPT_EULA=N`` to ``ACCEPT_EULA=Y``. .. code-block:: bash - :caption: ms-odbc.sh + :caption: cfg/php-startup-7.1/install-ms-odbc.sh :emphasize-lines: 18 !/bin/bash @@ -158,64 +172,21 @@ Paste the following into ``ms-obbc.sh`` and **ensure to accept the EULA** by cha The script will not work, if you have not accepted the EULA. -Installing Oracle oci8 and pdo_oci PHP modules ----------------------------------------------- +Running commands as devilbox user +--------------------------------- -This example will install Oracle instaclient as well as PHP modules ``pdo_oci`` and ``oci8`` in -order to use PHP to connect to Oracle. This startup script will only be provided to PHP 7.2 +As mentioned above, all scripts are run by the ``root`` user. +If you do need something to be executed as the normal user: ``devilbox``, you can simply ``su`` +inside the shell script. +The following example will install ``grunt`` and start a NodeJS application as the devilbox user +for the PHP 7.1 Docker container only. .. code-block:: bash + :caption: cfg/php-startup-7.1/myscript.sh - # Navigate to starup dir of PHP 7.2 - host> cd path/to/devilbox/cfg/php-startup-7.2 + # Install grunt as devilbox user + su -c "npm install grunt" -l devilbox - # Create an .sh file - host> touch oracle.sh - - # Open the file in your favourite editor - host> vi oracle.sh - - -Paste the following into ``oracle.sh``: - -.. code-block:: bash - :caption: oracle.sh - - #!/bin/bash - # - # https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ - # - - # Install 'alien' to install rpm packages - apt-get update -q - DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests alien - - # Instantclient (basic lite) - curl -o /tmp/oracle-instantclient18.3-basiclite-18.3.0.0.0-2.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient18.3-basiclite-18.3.0.0.0-2.x86_64.rpm - - # Instantclient (devel) - curl -o /tmp/oracle-instantclient18.3-devel-18.3.0.0.0-2.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient18.3-devel-18.3.0.0.0-2.x86_64.rpm - - # Install RPMs - alien -i /tmp/oracle-instantclient18.3-basiclite-18.3.0.0.0-2.x86_64.rpm - alien -i /tmp/oracle-instantclient18.3-devel-18.3.0.0.0-2.x86_64.rpm - - # Rempve RPMs - rm -f /tmp/oracle-instantclient18.3-basiclite-18.3.0.0.0-2.x86_64.rpm - rm -f /tmp/oracle-instantclient18.3-devel-18.3.0.0.0-2.x86_64.rpm - - # Necessary symlinks - ln -s /usr/lib/oracle/18.3/client64/lib/libmql1.so /usr/lib/ - ln -s /usr/lib/oracle/18.3/client64/lib/libipc1.so /usr/lib/ - ln -s /usr/lib/oracle/18.3/client64/lib/libnnz18.so /usr/lib/ - ln -s /usr/lib/oracle/18.3/client64/lib/libons.so /usr/lib/ - ln -s /usr/lib/oracle/18.3/client64/lib/libclntshcore.so.18.1 /usr/lib/ - - # Build and install PHP extension oci8 - docker-php-ext-configure oci8 --with-oci8=instantclient - docker-php-ext-install oci8 - - # Build and install PHP extension pdo_oci - docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/usr,18.3 - docker-php-ext-install pdo_oci + # Start a NodeJS application with pm2 as devilbox user + su -c "cd /shared/httpd/my-node/src/; pm2 start index.js" -l devilbox diff --git a/docs/examples/setup-phalcon.rst b/docs/examples/setup-phalcon.rst index 39319ee2..900aaa0e 100644 --- a/docs/examples/setup-phalcon.rst +++ b/docs/examples/setup-phalcon.rst @@ -170,7 +170,7 @@ By default routes will not work if using Nginx. To fix this, you will need to cr In your project folder, you will need to create a folder called .devilbox unless you changed `HTTPD_TEMPLATE_DIR` in your .env -Copy the default nginx config from ./cfg/vhost-gen/nginx.yml-example to ./data/www/my-project/.devilbox/nginx.yml +Copy the default nginx config from ./cfg/vhost-gen/nginx.yml-example-vhost to ./data/www/my-project/.devilbox/nginx.yml Carefully edit the nginx.yml file and change: diff --git a/docs/examples/setup-reverse-proxy-nodejs.rst b/docs/examples/setup-reverse-proxy-nodejs.rst new file mode 100644 index 00000000..dd9cf3b0 --- /dev/null +++ b/docs/examples/setup-reverse-proxy-nodejs.rst @@ -0,0 +1,440 @@ +.. include:: /_includes/all.rst + +.. _example_setup_reverse_proxy_nodejs: + +************************** +Setup reverse proxy NodeJS +************************** + +This example will walk you through creating a NodeJS hello world application, which is started +automatically on ``docker-compose up`` via |ext_lnk_tool_pm2|, will be proxied to the web server and can be reached via valid HTTPS. + + +.. note:: + It is also possible to attach a leight-weight NodeJS container to the Devilbox instead of running + this in the PHP container. See here for details: :ref:`reverse_proxy_with_custom_docker` + + +**Table of Contents** + +.. contents:: :local: + +Overview +======== + +The following configuration will be used: + ++--------------+--------------------------+-------------+------------+---------------------------------------------+ +| Project name | VirtualHost directory | Database | TLD_SUFFIX | Project URL | ++==============+==========================+=============+============+=============================================+ +| my-node | /shared/httpd/my-node | - | loc | http://my-node.loc |br| https://my-node.loc | ++--------------+--------------------------+-------------+------------+---------------------------------------------+ + +Additionally we will set the listening port of the NodeJS appliation to ``4000`` inside the PHP container. + +We also want NodeJS running regardless of which PHP container will bestarted (global autostart). + +.. note:: + * Inside the Devilbox PHP container, projects are always in ``/shared/httpd/``. + * On your host operating system, projects are by default in ``./data/www/`` inside the + Devilbox git directory. This path can be changed via :ref:`env_httpd_datadir`. + +Walk through +============ + +It will be ready in nine simple steps: + +1. Enter the PHP container +2. Create a new VirtualHost directory +3. Create NodeJS hello world application +4. Create *virtual* docroot directory +5. Add reverse proxy vhost-gen config files +6. Create autostart script +7. Setup DNS record +8. Restart the Devilbox +9. Visit http://my-node.loc in your browser + + +1. Enter the PHP container +-------------------------- + +All work will be done inside the PHP container as it provides you with all required command line +tools. + +Navigate to the Devilbox git directory and execute ``shell.sh`` (or ``shell.bat`` on Windows) to +enter the running PHP container. + +.. code-block:: bash + + host> ./shell.sh + +.. seealso:: + * :ref:`enter_the_php_container` + * :ref:`work_inside_the_php_container` + * :ref:`available_tools` + + +2. Create new vhost directory +----------------------------- + +The vhost directory defines the name under which your project will be available. |br| +( ``<vhost dir>.TLD_SUFFIX`` will be the final URL ). + +.. code-block:: bash + + devilbox@php-7.0.20 in /shared/httpd $ mkdir my-node + +.. seealso:: :ref:`env_tld_suffix` + + +3. Create NodeJS application +---------------------------- + +.. code-block:: bash + + # Navigate to your project directory + devilbox@php-7.0.20 in /shared/httpd $ cd my-node + + # Create a directory which will hold the source code + devilbox@php-7.0.20 in /shared/httpd/my-node $ mkdir src + + # Create the index.js file with your favourite editor + devilbox@php-7.0.20 in /shared/httpd/my-node/src $ vi index.js + +.. code-block:: javascript + :caption: index.js + + // Load the http module to create an http server. + var http = require('http'); + + // Configure our HTTP server to respond with Hello World to all requests. + var server = http.createServer(function (request, response) { + response.writeHead(200, {"Content-Type": "text/plain"}); + response.end("Hello World\n"); + }); + + // Listen on port 3000 + server.listen(3000); + +4. Create *virtual* docroot directory +------------------------------------- + +Every project for the Devilbox requires a ``htdocs`` directory present inside the project dir. +For a reverse proxy this is not of any use, but rather only for the Intranet vhost page to stop +complaining about the missing ``htdocs`` directory. So that's why this is only a *virtual* directory +which will not hold any data. + +.. code-block:: bash + + # Navigate to your project directory + devilbox@php-7.0.20 in /shared/httpd $ cd my-node + + # Create the docroot directory + devilbox@php-7.0.20 in /shared/httpd/my-node $ mkdir htdocs + +.. seealso:: :ref:`env_httpd_docroot_dir` + + +5. Add reverse proxy vhost-gen config files +------------------------------------------- + +5.1 Create vhost-gen template directory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Before we can copy the vhost-gen templates, we must create the ``.devilbox`` template directory +inside the project directory. + +.. code-block:: bash + + # Navigate to your project directory + devilbox@php-7.0.20 in /shared/httpd $ cd my-node + + # Create the .devilbox template directory + devilbox@php-7.0.20 in /shared/httpd/my-node $ mkdir .devilbox + + +.. seealso:: :ref:`env_httpd_template_dir` + +5.2 Copy vhost-gen templates +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Now we can copy and adjust the vhost-gen reverse proxy files for Apache 2.2, Apache 2.4 and Nginx. + + +The reverse vhost-gen templates are available in ``cfg/vhost-gen``: + +.. code-block:: bash + :emphasize-lines: 4,6,8 + + host> tree -L 1 cfg/vhost-gen/ + + cfg/vhost-gen/ + ├── apache22.yml-example-rproxy + ├── apache22.yml-example-vhost + ├── apache24.yml-example-rproxy + ├── apache24.yml-example-vhost + ├── nginx.yml-example-rproxy + ├── nginx.yml-example-vhost + └── README.md + + 0 directories, 7 files + +For this example we will copy all ``*-example-rproxy`` files into ``/shared/httpd/my-node/.devilbox`` +to ensure this will work with all web servers. + +.. code-block:: bash + + host> cd /path/to/devilbox + host> cp cfg/vhost-gen/apache22.yml-example-rproxy data/www/my-node/.devilbox/apache22.yml + host> cp cfg/vhost-gen/apache24.yml-example-rproxy data/www/my-node/.devilbox/apache24.yml + host> cp cfg/vhost-gen/nginx.yml-example-rproxy data/www/my-node/.devilbox/nginx.yml + + +5.3 Adjust ports +^^^^^^^^^^^^^^^^ + +By default, all vhost-gen templates will forward requests to port ``8000`` into the PHP container. +Our current example however uses port ``4000``, so we must change that accordingly for all three +templates. + +5.3.1 Adjust Apache 2.2 template +"""""""""""""""""""""""""""""""" + +Open the ``apache22.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-node/.devilbox/apache22.yml + + +Find the two lines with ``ProxyPass`` and ``ProxyPassReverse`` and change the port from ``8000`` +to ``4000`` + +.. code-block:: yaml + :caption: data/www/my-node/.devilbox/apache22.yml + :emphasize-lines: 16,17 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + <VirtualHost __DEFAULT_VHOST__:__PORT__> + ServerName __VHOST_NAME__ + + CustomLog "__ACCESS_LOG__" combined + ErrorLog "__ERROR_LOG__" + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://php:4000/ + ProxyPassReverse / http://php:4000/ + + # ... more lines below ... # + +5.3.2 Adjust Apache 2.4 template +"""""""""""""""""""""""""""""""" + +Open the ``apache24.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-node/.devilbox/apache24.yml + + +Find the two lines with ``ProxyPass`` and ``ProxyPassReverse`` and change the port from ``8000`` +to ``4000`` + +.. code-block:: yaml + :caption: data/www/my-node/.devilbox/apache24.yml + :emphasize-lines: 16,17 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + <VirtualHost __DEFAULT_VHOST__:__PORT__> + ServerName __VHOST_NAME__ + + CustomLog "__ACCESS_LOG__" combined + ErrorLog "__ERROR_LOG__" + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://php:4000/ + ProxyPassReverse / http://php:4000/ + + # ... more lines below ... # + +5.3.3 Adjust Nginx template +""""""""""""""""""""""""""" + +Open the ``nginx.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-node/.devilbox/nginx.yml + + +Find the lines with ``proxy_pass`` and change the port from ``8000`` to ``4000`` + +.. code-block:: yaml + :caption: data/www/my-node/.devilbox/nginx.yml + :emphasize-lines: 18 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + server { + listen __PORT____DEFAULT_VHOST__; + server_name __VHOST_NAME__; + + access_log "__ACCESS_LOG__" combined; + error_log "__ERROR_LOG__" warn; + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://php:4000; + } + + # ... more lines below ... # + +6. Create autostart script +-------------------------- + +For NodeJS applications, the Devilbox already bundles an autostart template which you can use +and simply just add the path of your NodeJS application. This template does nothing by default +as its file name does not end by ``.sh``. So let's have a look at the template from ``autostart/run-node-js-projects.sh-example``. +The location where you will have to add your path is highlighted: + +.. literalinclude:: ../../autostart/run-node-js-projects.sh-example + :caption: autostart/run-node-js-projects.sh-example + :language: bash + :emphasize-lines: 15 + + +So in order to proceed copy this file inside the ``autostart/`` directory of the Devilbox git directory +to a new file ending by ``.sh`` + +.. code-block:: bash + + host> cd /path/to/devilbox + + # Navigate to the autostart directory + host> cd autostart + + # Copy the template + host> cp run-node-js-projects.sh-example run-node-js-projects.sh + + # Adjust the template and add your path: + host> vi run-node-js-projects.sh + + +.. code-block:: bash + :caption: autostart/run-node-js-projects.sh + :emphasize-lines: 7 + + # ... more lines above ... # + + # Add the full paths of your Nodejs projects startup files into this array + # Each project separated by a newline and enclosed in double quotes. (No commas!) + # Paths are internal paths inside the PHP container. + NODE_PROJECTS=( + "/shared/httpd/my-node/js/index.js" + ) + + # ... more lines below ... # + +.. seealso:: + + * :ref:`custom_scripts_per_php_version` (individually for different PHP versions) + * :ref:`custom_scripts_globally` (equal for all PHP versions) + * :ref:`autostarting_nodejs_apps` + +7. DNS record +------------- + +If you **have** Auto DNS configured already, you can skip this section, because DNS entries will +be available automatically by the bundled DNS server. + +If you **don't have** Auto DNS configured, you will need to add the following line to your +host operating systems ``/etc/hosts`` file (or ``C:\Windows\System32\drivers\etc`` on Windows): + +.. code-block:: bash + :caption: /etc/hosts + + 127.0.0.1 my-node.loc + +.. seealso:: + + * :ref:`howto_add_project_hosts_entry_on_mac` + * :ref:`howto_add_project_hosts_entry_on_win` + * :ref:`setup_auto_dns` + + +8. Restart the Devilbox +----------------------- + +Now for those changes to take affect, you will have to restart the Devilbox. + +.. code-block:: bash + + host> cd /path/to/devilbox + + # Stop the Devilbox + host> docker-compose down + host> docker-compose rm -f + + # Start the Devilbox + host> docker-compose up -d php httpd bind + + +9. Open your browser +-------------------- + +All set now, you can visit http://my-node.loc or https://my-node.loc in your browser. +The NodeJS application has been started up automatically and the reverse proxy will direct all +requests to it. + +.. seealso:: :ref:`setup_valid_https` + + + +Managing NodeJS +=============== + +If you have never worked with |ext_lnk_tool_pm2|, I suggest to visit their website and get familiar +with the available commands. A quick guide is below: + + + +.. code-block:: bash + + # Navigate to Devilbox git directory + host> cd /path/to/devilbox + + # Enter the PHP container + host> ./shell.sh + + # List your running NodeJS apps + devilbox@php-7.0.20 in /shared/httpd $ pm2 list + + ┌──────────┬────┬─────────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┬──────────┐ + │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │ + ├──────────┼────┼─────────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┼──────────┤ + │ index │ 0 │ N/A │ fork │ 1906 │ online │ 0 │ 42h │ 0% │ 39.7 MB │ devilbox │ disabled │ + └──────────┴────┴─────────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┴──────────┘ + diff --git a/docs/examples/setup-reverse-proxy-sphinx-docs.rst b/docs/examples/setup-reverse-proxy-sphinx-docs.rst new file mode 100644 index 00000000..4e1ce124 --- /dev/null +++ b/docs/examples/setup-reverse-proxy-sphinx-docs.rst @@ -0,0 +1,428 @@ +.. include:: /_includes/all.rst + +.. _example_setup_reverse_proxy_sphinx_docs: + +******************************* +Setup reverse proxy Sphinx docs +******************************* + +This example will walk you through creating a Sphinx documentation, which is started +automatically on ``docker-compose up``, will be proxied to the web server and can be reached via valid HTTPS. + +.. note:: + It is also possible to attach a leight-weight Python container to the Devilbox instead of running + this in the PHP container. See here for details: :ref:`reverse_proxy_with_custom_docker` + + +**Table of Contents** + +.. contents:: :local: + +Overview +======== + +The following configuration will be used: + ++--------------+--------------------------+-------------+------------+-------------------------------------------------+ +| Project name | VirtualHost directory | Database | TLD_SUFFIX | Project URL | ++==============+==========================+=============+============+=================================================+ +| my-sphinx | /shared/httpd/my-sphinx | - | loc | http://my-sphinx.loc |br| https://my-sphinx.loc | ++--------------+--------------------------+-------------+------------+-------------------------------------------------+ + +Additionally we will set the listening port of the Sphinx appliation to ``4000`` inside the PHP container. + +We also want Sphinx running and autostarted only in the PHP 7.2 container (local autostart) and +have all its required Python packages installed during ``docker-compose up``. + +.. note:: + * Inside the Devilbox PHP container, projects are always in ``/shared/httpd/``. + * On your host operating system, projects are by default in ``./data/www/`` inside the + Devilbox git directory. This path can be changed via :ref:`env_httpd_datadir`. + +Walk through +============ + +It will be ready in nine simple steps: + +1. Enter the PHP container +2. Create a new VirtualHost directory +3. Create basic Sphinx project +4. Create *virtual* docroot directory +5. Add reverse proxy vhost-gen config files +6. Create autostart script +7. Setup DNS record +8. Restart the Devilbox +9. Visit http://my-sphinx.loc in your browser + +1. Enter the PHP container +-------------------------- + +All work will be done inside the PHP container as it provides you with all required command line +tools. + +Navigate to the Devilbox git directory and execute ``shell.sh`` (or ``shell.bat`` on Windows) to +enter the running PHP container. + +.. code-block:: bash + + host> ./shell.sh + +.. seealso:: + * :ref:`enter_the_php_container` + * :ref:`work_inside_the_php_container` + * :ref:`available_tools` + + +2. Create new vhost directory +----------------------------- + +The vhost directory defines the name under which your project will be available. |br| +( ``<vhost dir>.TLD_SUFFIX`` will be the final URL ). + +.. code-block:: bash + + devilbox@php-7.0.20 in /shared/httpd $ mkdir my-sphinx + +.. seealso:: :ref:`env_tld_suffix` + + +3. Create basic Sphinx project +------------------------------ + +.. code-block:: bash + + # Navigate to your project directory + devilbox@php-7.0.20 in /shared/httpd $ cd my-sphinx + + # Create a directory which will hold the documentation source code + devilbox@php-7.0.20 in /shared/httpd/my-sphinx $ mkdir doc + + +Create a basic Sphinx configuration file: + +.. code-block:: python + :caption: /shared/httpd/my-sphinx/doc/conf.py + + source_suffix = '.rst' + master_doc = 'index' + html_theme = 'default' + + exclude_patterns = [ + u'_build/*' + ] + +Create the table of contents file: + +.. code-block:: rst + :caption: /shared/httpd/my-sphinx/doc/index.rst + + .. :hidden: + + ******* + My Docs + ******* + + Description + + .. toctree:: + :maxdepth: 2 + + page1 + +Create the first page ``page1``: + +.. code-block:: rst + :caption: /shared/httpd/my-sphinx/doc/page1.rst + + ****** + Page 1 + ****** + + Hello world + + +4. Create *virtual* docroot directory +------------------------------------- + +Every project for the Devilbox requires a ``htdocs`` directory present inside the project dir. +For a reverse proxy this is not of any use, but rather only for the Intranet vhost page to stop +complaining about the missing ``htdocs`` directory. So that's why this is only a *virtual* directory +which will not hold any data. + +.. code-block:: bash + + # Navigate to your project directory + devilbox@php-7.0.20 in /shared/httpd $ cd my-sphinx + + # Create the docroot directory + devilbox@php-7.0.20 in /shared/httpd/my-sphinx $ mkdir htdocs + +.. seealso:: :ref:`env_httpd_docroot_dir` + + +5. Add reverse proxy vhost-gen config files +------------------------------------------- + +5.1 Create vhost-gen template directory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Before we can copy the vhost-gen templates, we must create the ``.devilbox`` template directory +inside the project directory. + +.. code-block:: bash + + # Navigate to your project directory + devilbox@php-7.0.20 in /shared/httpd $ cd my-sphinx + + # Create the .devilbox template directory + devilbox@php-7.0.20 in /shared/httpd/my-sphinx $ mkdir .devilbox + + +.. seealso:: :ref:`env_httpd_template_dir` + +5.2 Copy vhost-gen templates +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Now we can copy and adjust the vhost-gen reverse proxy files for Apache 2.2, Apache 2.4 and Nginx. + + +The reverse vhost-gen templates are available in ``cfg/vhost-gen``: + +.. code-block:: bash + :emphasize-lines: 4,6,8 + + host> tree -L 1 cfg/vhost-gen/ + + cfg/vhost-gen/ + ├── apache22.yml-example-rproxy + ├── apache22.yml-example-vhost + ├── apache24.yml-example-rproxy + ├── apache24.yml-example-vhost + ├── nginx.yml-example-rproxy + ├── nginx.yml-example-vhost + └── README.md + + 0 directories, 7 files + +For this example we will copy all ``*-example-rproxy`` files into ``/shared/httpd/my-sphinx/.devilbox`` +to ensure this will work with all web servers. + +.. code-block:: bash + + host> cd /path/to/devilbox + host> cp cfg/vhost-gen/apache22.yml-example-rproxy data/www/my-sphinx/.devilbox/apache22.yml + host> cp cfg/vhost-gen/apache24.yml-example-rproxy data/www/my-sphinx/.devilbox/apache24.yml + host> cp cfg/vhost-gen/nginx.yml-example-rproxy data/www/my-sphinx/.devilbox/nginx.yml + + +5.3 Adjust ports +^^^^^^^^^^^^^^^^ + +By default, all vhost-gen templates will forward requests to port ``8000`` into the PHP container. +Our current example however uses port ``4000``, so we must change that accordingly for all three +templates. + +5.3.1 Adjust Apache 2.2 template +"""""""""""""""""""""""""""""""" + +Open the ``apache22.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-sphinx/.devilbox/apache22.yml + + +Find the two lines with ``ProxyPass`` and ``ProxyPassReverse`` and change the port from ``8000`` +to ``4000`` + +.. code-block:: yaml + :caption: data/www/my-sphinx/.devilbox/apache22.yml + :emphasize-lines: 16,17 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + <VirtualHost __DEFAULT_VHOST__:__PORT__> + ServerName __VHOST_NAME__ + + CustomLog "__ACCESS_LOG__" combined + ErrorLog "__ERROR_LOG__" + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://php:4000/ + ProxyPassReverse / http://php:4000/ + + # ... more lines below ... # + +5.3.2 Adjust Apache 2.4 template +"""""""""""""""""""""""""""""""" + +Open the ``apache24.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-sphinx/.devilbox/apache24.yml + + +Find the two lines with ``ProxyPass`` and ``ProxyPassReverse`` and change the port from ``8000`` +to ``4000`` + +.. code-block:: yaml + :caption: data/www/my-sphinx/.devilbox/apache24.yml + :emphasize-lines: 16,17 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + <VirtualHost __DEFAULT_VHOST__:__PORT__> + ServerName __VHOST_NAME__ + + CustomLog "__ACCESS_LOG__" combined + ErrorLog "__ERROR_LOG__" + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://php:4000/ + ProxyPassReverse / http://php:4000/ + + # ... more lines below ... # + +5.3.3 Adjust Nginx template +""""""""""""""""""""""""""" + +Open the ``nginx.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-sphinx/.devilbox/nginx.yml + + +Find the lines with ``proxy_pass`` and change the port from ``8000`` to ``4000`` + +.. code-block:: yaml + :caption: data/www/my-sphinx/.devilbox/nginx.yml + :emphasize-lines: 18 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + server { + listen __PORT____DEFAULT_VHOST__; + server_name __VHOST_NAME__; + + access_log "__ACCESS_LOG__" combined; + error_log "__ERROR_LOG__" warn; + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://php:4000; + } + + # ... more lines below ... # + + +6. Create autostart script +-------------------------- + +Remember, we only wanted to have our Sphinx application run on the PHP 7.2 container, so we will create +a autostart script only for that container. + +Navigate to ``cfg/php-startup-7.2/`` in the Devilbox git directory and create a new shell script +ending by ``.sh`` + + +.. code-block:: bash + + # Navigate to the Devilbox git directory + host> cd /path/to/devilbox + + # Nagivate to startup directory for PHP 7.2 and create the script + host> cd cfg/php-startup-7.2/ + host> vi my-sphinx.sh + + +.. code-block:: bash + :caption: cfg/php-startup-7.2/my-sphinx.sh + + #!/usr/bin/env bash + + # Install required Python modules as root user + pip install sphinx sphinx-autobuild + + # Autostart Sphinx by devilbox user on Port 4000 and sent it to backgroun with '&' + sh -c "cd /shared/httpd/my-sphinx; sphinx-autobuild . _build/html -p 4000 -H 0.0.0.0" -l devilbox & + + +.. seealso:: + + * :ref:`custom_scripts_per_php_version` (individually for different PHP versions) + * :ref:`custom_scripts_globally` (equal for all PHP versions) + * :ref:`autostarting_nodejs_apps` + + +7. DNS record +------------- + +If you **have** Auto DNS configured already, you can skip this section, because DNS entries will +be available automatically by the bundled DNS server. + +If you **don't have** Auto DNS configured, you will need to add the following line to your +host operating systems ``/etc/hosts`` file (or ``C:\Windows\System32\drivers\etc`` on Windows): + +.. code-block:: bash + :caption: /etc/hosts + + 127.0.0.1 my-node.loc + +.. seealso:: + + * :ref:`howto_add_project_hosts_entry_on_mac` + * :ref:`howto_add_project_hosts_entry_on_win` + * :ref:`setup_auto_dns` + + +8. Restart the Devilbox +----------------------- + +Now for those changes to take affect, you will have to restart the Devilbox. + +.. code-block:: bash + + host> cd /path/to/devilbox + + # Stop the Devilbox + host> docker-compose down + host> docker-compose rm -f + + # Start the Devilbox + host> docker-compose up -d php httpd bind + + +9. Open your browser +-------------------- + +All set now, you can visit http://my-sphinx.loc or https://my-sphinx.loc in your browser. +The Sphinx application has been started up automatically and the reverse proxy will direct all +requests to it. + +.. seealso:: :ref:`setup_valid_https` + + + diff --git a/docs/features.rst b/docs/features.rst index a648c2db..58cd76cc 100644 --- a/docs/features.rst +++ b/docs/features.rst @@ -107,8 +107,9 @@ port exposures, hostnames and any errors including how they can be resolved. Third-party tools ^^^^^^^^^^^^^^^^^ -Mandatory web projects are also shipped: |ext_lnk_tool_phpmyadmin|, |ext_lnk_tool_adminer| and -|ext_lnk_tool_opcachegui| as well as a web GUI to view all sent emails. +Mandatory web projects are also shipped: |ext_lnk_tool_phpmyadmin|, |ext_lnk_tool_phppgadmin|, +|ext_lnk_tool_phpredmin|, |ext_lnk_tool_adminer| and |ext_lnk_tool_opcachegui| as well as a web GUI +to view all sent emails. Dockerized diff --git a/docs/getting-started/devilbox-intranet.rst b/docs/getting-started/devilbox-intranet.rst index 1de0d375..3ebc8e37 100644 --- a/docs/getting-started/devilbox-intranet.rst +++ b/docs/getting-started/devilbox-intranet.rst @@ -95,6 +95,13 @@ columns, relations, indexes, users, permissions, etc) can be performed via the u while you still have the ability to directly execute any SQL statement. +phpPgAdmin +---------- + +|ext_lnk_tool_phppgadmin| is a web-based administration tool for PostgreSQL. It is perfect for +PostgreSQL DBAs, newbies, and hosting services. + + phpRedMin ---------- diff --git a/docs/getting-started/directory-overview.rst b/docs/getting-started/directory-overview.rst index 37968251..998eb3d3 100644 --- a/docs/getting-started/directory-overview.rst +++ b/docs/getting-started/directory-overview.rst @@ -35,6 +35,8 @@ You can verifiy that the path is actually ``./data/www/`` by checking your ``.en HOST_PATH_HTTPD_DATADIR=./data/www +.. _getting_started_directory_overview_project_directory: + Project directory ================= diff --git a/docs/img/logo_tools/sphinx.png b/docs/img/logo_tools/sphinx.png new file mode 100644 index 00000000..e0f63e60 Binary files /dev/null and b/docs/img/logo_tools/sphinx.png differ diff --git a/docs/index.rst b/docs/index.rst index d5f3e1c3..ca6b9a5e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -70,7 +70,6 @@ host is ready to be served with your custom domain. :maxdepth: 2 :numbered: - advanced/custom-startup-commands advanced/customize-php-globally advanced/customize-webserver-globally advanced/connect-to-host-os @@ -81,6 +80,15 @@ host is ready to be served with your custom domain. advanced/overwrite-existing-docker-image +.. toctree:: + :caption: Autostart commands + :maxdepth: 2 + + autostart/custom-scripts-per-php-version + autostart/custom-scripts-globally + autostart/autostarting-nodejs-apps + + .. toctree:: :caption: vhost-gen :maxdepth: 2 @@ -88,8 +96,18 @@ host is ready to be served with your custom domain. vhost-gen/virtual-host-templates vhost-gen/customize-all-virtual-hosts-globally vhost-gen/customize-specific-virtual-host + vhost-gen/virtual-host-vs-reverse-proxy vhost-gen/example-add-subdomains + +.. toctree:: + :caption: reverse-proxy + :maxdepth: 2 + + reverse-proxy/reverse-proxy-with-https + reverse-proxy/reverse-proxy-for-custom-docker + + .. toctree:: :caption: Enable custom container :maxdepth: 2 @@ -164,6 +182,13 @@ host is ready to be served with your custom domain. examples/setup-zend examples/setup-other-frameworks +.. toctree:: + :maxdepth: 2 + :caption: Examples - reverse proxy + + examples/setup-reverse-proxy-nodejs + examples/setup-reverse-proxy-sphinx-docs + .. toctree:: :caption: Readings diff --git a/docs/maintenance/backup-and-restore-pgsql.rst b/docs/maintenance/backup-and-restore-pgsql.rst index d16f22c2..a7dba475 100644 --- a/docs/maintenance/backup-and-restore-pgsql.rst +++ b/docs/maintenance/backup-and-restore-pgsql.rst @@ -40,6 +40,14 @@ To backup a database named ``my_db_name`` follow the below listed example: # Run pg_dump devilbox@php-7.1.6 in /shared/httpd $ pg_dump -h pgsql -U postgres -W my_db_name > /shared/backups/pgsql/my_db_name.sql + +phpPgAdmin +---------- + +If you do not like to use the command line for backups, you can use |ext_lnk_tool_phppgadmin|. +It comes bundled with the devilbox intranet. + + Adminer ------- @@ -100,6 +108,14 @@ Here are a few examples for different file types: devilbox@php-7.1.6 in /shared/httpd $ tar xzOf /shared/backups/pgsql/my_db_name.sql.tar.gz | psql -h pgsql -U postgres -W my_db_name +phpPgAdmin +---------- + +|ext_lnk_tool_phppgadmin| supports importing many different formats out-of-the-box. +Simply select the compressed or uncompressed file and press ``Go`` in the import section of +the web interface. + + Adminer ------- diff --git a/docs/readings/available-tools.rst b/docs/readings/available-tools.rst index 175fd734..685b3d16 100644 --- a/docs/readings/available-tools.rst +++ b/docs/readings/available-tools.rst @@ -74,6 +74,8 @@ The PHP container is your workhorse and these are your tools: +----------------------+---------------------------------------+ | ``photon`` | |ext_lnk_tool_photon| | +----------------------+---------------------------------------+ +| ``pm2`` | |ext_lnk_tool_pm2| | ++----------------------+---------------------------------------+ | ``redis*`` | Various Redis client tools | +----------------------+---------------------------------------+ | ``sass`` | |ext_lnk_tool_sass| | diff --git a/docs/reverse-proxy/reverse-proxy-for-custom-docker.rst b/docs/reverse-proxy/reverse-proxy-for-custom-docker.rst new file mode 100644 index 00000000..5897fd3e --- /dev/null +++ b/docs/reverse-proxy/reverse-proxy-for-custom-docker.rst @@ -0,0 +1,263 @@ +.. include:: /_includes/all.rst + +.. _reverse_proxy_with_custom_docker: + +******************************* +Reverse Proxy for custom Docker +******************************* + + +Imagine you have added a custom service container to the Devilbox which has a project that +is available via http on a very specific port in that container. + +You do not want to expose this port to the host system, but rather want to make it available +via the bundled web server and also be able to see it on the Devilbox intranet vhost section. + +Additionally you want the project to make use of the same DNS naming scheme and also have HTTPS +for it. + +You can easily achieve this by setting up a reverse proxy for it. + + +.. seealso:: :ref:`add_your_own_docker_image` + + +**Table of Contents** + +.. contents:: :local: + + +Walkthrough +=========== + +Assumption +---------- + +Let's imagine you have added a custom Python Docker image to the Devilbox which starts up a Django +application listening on port ``3000``. + +* :ref:`env_TLD_SUFFIX`: ``loc`` +* Desired DNS name: ``my-pthon.loc`` +* :ref:`env_httpd_datadir` on the host: ``./data/www`` +* :ref:`env_httpd_template_dir`: ``.devilbox`` +* Listening port: ``3000`` +* Listening host: ``python`` (hostname of the Python container) + + +Create *virtual* directory +-------------------------- + +In order to create a reverse proxy for that custom container, you must add a *virtual* project +directory without any data in it. This directory is purely for the purpose of determining the +DNS name and for having the vhost-gen configuration in. + +Navigate to the :ref:`env_httpd_datadir` directory and create your project + +.. code-block:: bash + + host> cd /path/to/devilbox + host> cd /path/to/devilbox/data/www + + # Create the project directory + host> mkdir my-python + + # Create the htdocs directory (to have a valid project for the Intranet page) + host> mkdir my-python/htdocs + + + # Create the vhost-gen directory (to be apply to apply custom templates) + host> mkdir my-python/.devilbox + +This part is now sufficient to have the project visible on the Devilbox intranet. + + +Copy vhost-gen templates +------------------------ + +The reverse vhost-gen templates are available in ``cfg/vhost-gen``: + +.. code-block:: bash + :emphasize-lines: 4,6,8 + + host> tree -L 1 cfg/vhost-gen/ + + cfg/vhost-gen/ + ├── apache22.yml-example-rproxy + ├── apache22.yml-example-vhost + ├── apache24.yml-example-rproxy + ├── apache24.yml-example-vhost + ├── nginx.yml-example-rproxy + ├── nginx.yml-example-vhost + └── README.md + + 0 directories, 7 files + +For this example we will copy all ``*-example-rproxy`` files into ``/shared/httpd/my-python/.devilbox`` +to ensure this will work with all web servers. + +.. code-block:: bash + + host> cd /path/to/devilbox + host> cp cfg/vhost-gen/apache22.yml-example-rproxy data/www/my-python/.devilbox/apache22.yml + host> cp cfg/vhost-gen/apache24.yml-example-rproxy data/www/my-python/.devilbox/apache24.yml + host> cp cfg/vhost-gen/nginx.yml-example-rproxy data/www/my-python/.devilbox/nginx.yml + + +Adjust port +----------- + +By default, all vhost-gen templates will forward requests to port ``8000`` into the PHP container. +Our current example however uses port ``3000`` and host ``python``, so we must change that accordingly for all three +templates. + +Adjust Apache 2.2 template +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Open the ``apache22.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-python/.devilbox/apache22.yml + +Find the two lines with ``ProxyPass`` and ``ProxyPassReverse`` and change the port from ``8000`` +to ``3000`` and host ``php`` to ``python``: + +.. code-block:: yaml + :caption: data/www/my-python/.devilbox/apache22.yml + :emphasize-lines: 16,17 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + <VirtualHost __DEFAULT_VHOST__:__PORT__> + ServerName __VHOST_NAME__ + + CustomLog "__ACCESS_LOG__" combined + ErrorLog "__ERROR_LOG__" + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://python:3000/ + ProxyPassReverse / http://python:3000/ + + # ... more lines below ... # + +Adjust Apache 2.4 template +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Open the ``apache24.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-python/.devilbox/apache24.yml + +Find the two lines with ``ProxyPass`` and ``ProxyPassReverse`` and change the port from ``8000`` +to ``3000`` and host ``php`` to ``python``: + +.. code-block:: yaml + :caption: data/www/my-python/.devilbox/apache24.yml + :emphasize-lines: 16,17 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + <VirtualHost __DEFAULT_VHOST__:__PORT__> + ServerName __VHOST_NAME__ + + CustomLog "__ACCESS_LOG__" combined + ErrorLog "__ERROR_LOG__" + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://python:3000/ + ProxyPassReverse / http://python:3000/ + + # ... more lines below ... # + +Adjust Nginx template +^^^^^^^^^^^^^^^^^^^^^ + +Open the ``nginx.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-python/.devilbox/nginx.yml + +Find the line with ``proxy_pass`` and change the port from ``8000`` +to ``3000`` and host ``php`` to ``python``: + +.. code-block:: yaml + :caption: data/www/my-python/.devilbox/nginx.yml + :emphasize-lines: 18 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + server { + listen __PORT____DEFAULT_VHOST__; + server_name __VHOST_NAME__; + + access_log "__ACCESS_LOG__" combined; + error_log "__ERROR_LOG__" warn; + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://python:3000; + } + + # ... more lines below ... # + + + +Restart the Devilbox +-------------------- + +Now for the changes to take affect, simply restart the Devilbox (or start if not yet running): + + +.. code-block:: bash + + host> cd /path/to/devilbox + + # Stop the Devilbox + host> docker-compose stop + host> docker-compose rm -f + + # Start the Devilbox (Your Python container and the PHP and HTTPD container only) + host> docker-compose up -d php httpd bind python + + +Visit your project +------------------ + +That's it, your service application will now be available via: + +* http://my-python.loc + +It will also be available on HTTPS. This is by default and automatically: + +* https://my-python.loc + +.. seealso:: :ref:`setup_valid_https` + + +And is even shown as a project in the Devilbox intranet: + +* http://localhost/vhosts.php +* https://localhost/vhosts.php diff --git a/docs/reverse-proxy/reverse-proxy-with-https.rst b/docs/reverse-proxy/reverse-proxy-with-https.rst new file mode 100644 index 00000000..008d8688 --- /dev/null +++ b/docs/reverse-proxy/reverse-proxy-with-https.rst @@ -0,0 +1,250 @@ +.. include:: /_includes/all.rst + +.. _reverse_proxy_with_https: + +************************ +Reverse Proxy with HTTPS +************************ + +Imagine you have started an application within the PHP container that creates a listening port +(e.g.: NodeJS). This will now only listen on the PHP container and you would have to adjust +the docker-compose.yml definition in order to have that port available outside to your host OS. + +Alternatively, there is a simple way to reverse proxy it to the already running web server and even +make use of the available HTTPS feature. + +.. seealso:: + **Read more about how to autostart applications:** + + * :ref:`custom_scripts_per_php_version` (individually for different PHP versions) + * :ref:`custom_scripts_globally` (equal for all PHP versions) + + +**Table of Contents** + +.. contents:: :local: + + +Walkthrough +=========== + +Assumption +---------- + +Let's imagine you have started an application in the PHP container with the following settings: + +* :ref:`env_TLD_SUFFIX`: ``loc`` +* :ref:`getting_started_directory_overview_project_directory` inside PHP container: ``/shared/httpd/my-app`` +* :ref:`env_httpd_datadir` on the host: ``./data/www`` +* :ref:`env_httpd_template_dir`: ``.devilbox`` +* Listening port: ``8081`` +* Listening host: ``php`` (any of the PHP container) +* Resulting vhost name: ``my-app.loc`` + + +Copy vhost-gen templates +------------------------ + +The reverse vhost-gen templates are available in ``cfg/vhost-gen``: + +.. code-block:: bash + :emphasize-lines: 4,6,8 + + host> tree -L 1 cfg/vhost-gen/ + + cfg/vhost-gen/ + ├── apache22.yml-example-rproxy + ├── apache22.yml-example-vhost + ├── apache24.yml-example-rproxy + ├── apache24.yml-example-vhost + ├── nginx.yml-example-rproxy + ├── nginx.yml-example-vhost + └── README.md + + 0 directories, 7 files + +For this example we will copy all ``*-example-rproxy`` files into ``/shared/httpd/my-app/.devilbox`` +to ensure this will work with all web servers. + +.. code-block:: bash + + host> cd /path/to/devilbox + host> cp cfg/vhost-gen/apache22.yml-example-rproxy data/www/my-app/.devilbox/apache22.yml + host> cp cfg/vhost-gen/apache24.yml-example-rproxy data/www/my-app/.devilbox/apache24.yml + host> cp cfg/vhost-gen/nginx.yml-example-rproxy data/www/my-app/.devilbox/nginx.yml + + +Adjust port +----------- + +By default, all vhost-gen templates will forward requests to port ``8000`` into the PHP container. +Our current example however uses port ``8081``, so we must change that accordingly for all three +templates. + +Adjust Apache 2.2 template +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Open the ``apache22.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-app/.devilbox/apache22.yml + + +Find the two lines with ``ProxyPass`` and ``ProxyPassReverse`` and change the port from ``8000`` +to ``8081`` + +.. code-block:: yaml + :caption: data/www/my-app/.devilbox/apache22.yml + :emphasize-lines: 16,17 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + <VirtualHost __DEFAULT_VHOST__:__PORT__> + ServerName __VHOST_NAME__ + + CustomLog "__ACCESS_LOG__" combined + ErrorLog "__ERROR_LOG__" + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://php:8081/ + ProxyPassReverse / http://php:8081/ + + # ... more lines below ... # + +Adjust Apache 2.4 template +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Open the ``apache24.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-app/.devilbox/apache24.yml + + +Find the two lines with ``ProxyPass`` and ``ProxyPassReverse`` and change the port from ``8000`` +to ``8081`` + +.. code-block:: yaml + :caption: data/www/my-app/.devilbox/apache24.yml + :emphasize-lines: 16,17 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + <VirtualHost __DEFAULT_VHOST__:__PORT__> + ServerName __VHOST_NAME__ + + CustomLog "__ACCESS_LOG__" combined + ErrorLog "__ERROR_LOG__" + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + ProxyRequests On + ProxyPreserveHost On + ProxyPass / http://php:8081/ + ProxyPassReverse / http://php:8081/ + + # ... more lines below ... # + +Adjust Nginx template +^^^^^^^^^^^^^^^^^^^^^ + +Open the ``nginx.yml`` vhost-gen template in your project: + +.. code-block:: bash + + host> cd /path/to/devilbox + host> vi data/www/my-app/.devilbox/nginx.yml + + +Find the lines with ``proxy_pass`` and change the port from ``8000`` to ``8081`` + +.. code-block:: yaml + :caption: data/www/my-app/.devilbox/nginx.yml + :emphasize-lines: 18 + + # ... more lines above ... # + + ### + ### Basic vHost skeleton + ### + vhost: | + server { + listen __PORT____DEFAULT_VHOST__; + server_name __VHOST_NAME__; + + access_log "__ACCESS_LOG__" combined; + error_log "__ERROR_LOG__" warn; + + # Reverse Proxy definition (Ensure to adjust the port, currently '8000') + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://php:8081; + } + + # ... more lines below ... # + + + +Restart the Devilbox +-------------------- + +Now for the changes to take affect, simply restart the Devilbox (or start if not yet running): + + +.. code-block:: bash + + host> cd /path/to/devilbox + + # Stop the Devilbox + host> docker-compose stop + host> docker-compose rm -f + + # Start the Devilbox (PHP and HTTPD container only) + host> docker-compose up -d php httpd bind + + +Start your application +---------------------- + +Enter the PHP container and start your application which creates the listening port in port ``8081``. + + +.. seealso:: + This can also be automated to happen automatically during ``docker-compose up`` via: + + * :ref:`custom_scripts_per_php_version` (individually for different PHP versions) + * :ref:`custom_scripts_globally` (equal for all PHP versions) + * Example: :ref:`autostarting_nodejs_apps` + + +Visit your project +------------------ + +That's it, your service application will now be available via: + +* http://my-app.loc + +It will also be available on HTTPS. This is by default and automatically: + +* https://my-app.loc + +.. seealso:: :ref:`setup_valid_https` + + +And is even shown as a project in the Devilbox intranet: + +* http://localhost/vhosts.php +* https://localhost/vhosts.php diff --git a/docs/support/blogs-videos-and-use-cases.rst b/docs/support/blogs-videos-and-use-cases.rst index 46f660f4..498b6dbd 100644 --- a/docs/support/blogs-videos-and-use-cases.rst +++ b/docs/support/blogs-videos-and-use-cases.rst @@ -6,6 +6,11 @@ Blogs, Videos and Use-cases *************************** +**Table of Contents** + +.. contents:: :local: + + Official videos =============== @@ -16,6 +21,18 @@ even if the intranet UI has changed a bit. .. include:: /_includes/figures/blogs/youtube-email-catch-all.rst +Conferences +=========== + +DrupalCamp Ghent 2018 +--------------------- + +Simple local development with Devilbox: + +* |ext_lnk_blog_drupalcamp_ghent_2018_presentation| +* |ext_lnk_blog_drupalcamp_ghent_2018_slides| + + Blog posts ========== diff --git a/docs/vhost-gen/customize-all-virtual-hosts-globally.rst b/docs/vhost-gen/customize-all-virtual-hosts-globally.rst index ed86ca88..8fe5298d 100644 --- a/docs/vhost-gen/customize-all-virtual-hosts-globally.rst +++ b/docs/vhost-gen/customize-all-virtual-hosts-globally.rst @@ -31,17 +31,21 @@ if you have already a specific vhost template for a project in place. In order for template files to be picked up by the web server they must be copied to their correct filename. -+----------------+--------------------------+------------------+ -| Web server | Example template | Template name | -+================+==========================+==================+ -| Apache 2.2 | ``apache22.yml-example`` | ``apache22.yml`` | -+----------------+--------------------------+------------------+ -| Apache 2.4 | ``apache24.yml-example`` | ``apache24.yml`` | -+----------------+--------------------------+------------------+ -| Nginx stable | ``nginx.yml-example`` | ``nginx.yml`` | -+----------------+--------------------------+------------------+ -| Nginx mainline | ``nginx.yml-example`` | ``nginx.yml`` | -+----------------+--------------------------+------------------+ ++----------------+--------------------------------+------------------+ +| Web server | Example template | Template name | ++================+================================+==================+ +| Apache 2.2 | ``apache22.yml-example-vhost`` | ``apache22.yml`` | ++----------------+--------------------------------+------------------+ +| Apache 2.4 | ``apache24.yml-example-vhost`` | ``apache24.yml`` | ++----------------+--------------------------------+------------------+ +| Nginx stable | ``nginx.yml-example-vhost`` | ``nginx.yml`` | ++----------------+--------------------------------+------------------+ +| Nginx mainline | ``nginx.yml-example-vhost`` | ``nginx.yml`` | ++----------------+--------------------------------+------------------+ + +.. important:: + Do not use ``*.yml-example-rproxy`` templates for global configuration. These are only + intended to be used on a per project base. .. note:: If you simply copy the files to their corresponding template file name, nothing will change @@ -52,7 +56,7 @@ Apache 2.2 ---------- 1. Navigate to ``cfg/vhost-gen/`` inside the Devilbox directory -2. Copy ``apache22.yml-example`` to ``apache22.yml`` and restart the Devilbox +2. Copy ``apache22.yml-example-vhost`` to ``apache22.yml`` and restart the Devilbox 3. Whenever you adjust ``apache22.yml``, you need to restart the Devilbox @@ -60,7 +64,7 @@ Apache 2.4 ---------- 1. Navigate to ``cfg/vhost-gen/`` inside the Devilbox directory -2. Copy ``apache24.yml-example`` to ``apache24.yml`` and restart the Devilbox +2. Copy ``apache24.yml-example-vhost`` to ``apache24.yml`` and restart the Devilbox 3. Whenever you adjust ``apache24.yml``, you need to restart the Devilbox @@ -68,6 +72,5 @@ Nginx stable and Nginx mainline ------------------------------- 1. Navigate to ``cfg/vhost-gen/`` inside the Devilbox directory -2. Copy ``nginx.yml-example`` to ``nginx.yml`` and restart the Devilbox +2. Copy ``nginx.yml-example-vhost`` to ``nginx.yml`` and restart the Devilbox 3. Whenever you adjust ``nginx.yml``, you need to restart the Devilbox - diff --git a/docs/vhost-gen/virtual-host-templates.rst b/docs/vhost-gen/virtual-host-templates.rst index 54b24f99..1c626e4e 100644 --- a/docs/vhost-gen/virtual-host-templates.rst +++ b/docs/vhost-gen/virtual-host-templates.rst @@ -30,25 +30,57 @@ Template files -------------- By default, vhost-gen templates are located within the Devilbox root directory under ``cfg/vhost-gen/``. -The templates file names are suffixed with ``-example`` and are absolutely identical to what is +The templates file names are suffixed with ``-example-<type>`` and are absolutely identical to what is shipped inside each Devilbox web server Docker container. -.. code-block:: bash - - host> tree -L 1 cfg/vhost-gen/ - - cfg/vhost-gen/ - ├── apache22.yml-example - ├── apache24.yml-example - ├── nginx.yml-example - └── README.md - - 0 directories, 4 files - .. note:: Also note that nginx stable and nginx mainline share the same template as their configuration syntax is identical. +Normal virtual host +^^^^^^^^^^^^^^^^^^^ + +All template files ending by ``-example-vhost`` can be used to customize a normal file serving +virtual host. + +.. code-block:: bash + :emphasize-lines: 5,7,9 + + host> tree -L 1 cfg/vhost-gen/ + + cfg/vhost-gen/ + ├── apache22.yml-example-rproxy + ├── apache22.yml-example-vhost + ├── apache24.yml-example-rproxy + ├── apache24.yml-example-vhost + ├── nginx.yml-example-rproxy + ├── nginx.yml-example-vhost + └── README.md + + 0 directories, 7 files + +Reverse proxy +^^^^^^^^^^^^^ + +All template files ending by ``-example-rproxy`` can be used to create a reverse proxy for your +project. + +.. code-block:: bash + :emphasize-lines: 4,6,8 + + host> tree -L 1 cfg/vhost-gen/ + + cfg/vhost-gen/ + ├── apache22.yml-example-rproxy + ├── apache22.yml-example-vhost + ├── apache24.yml-example-rproxy + ├── apache24.yml-example-vhost + ├── nginx.yml-example-rproxy + ├── nginx.yml-example-vhost + └── README.md + + 0 directories, 7 files + Template sections ----------------- @@ -69,29 +101,71 @@ All vhost-gen templates consist of three sections: .. |features| replace:: The feature section contains many sub-sections that are replaced into the ``vhost`` |br| section before final rendering. -Templates -========= +Virtual host Templates +====================== + +These templates can be used to alter the behaviour of the vhost on a per project base or globally. Apache 2.2 template ------------------- -.. literalinclude:: ../../cfg/vhost-gen/apache22.yml-example - :caption: apache22.yml +.. literalinclude:: ../../cfg/vhost-gen/apache22.yml-example-vhost + :caption: apache22.yml-example-vhost :language: yaml Apache 2.4 template ------------------- -.. literalinclude:: ../../cfg/vhost-gen/apache24.yml-example - :caption: apache24.yml +.. literalinclude:: ../../cfg/vhost-gen/apache24.yml-example-vhost + :caption: apache24.yml-example-vhost :language: yaml Nginx template -------------- -.. literalinclude:: ../../cfg/vhost-gen/nginx.yml-example - :caption: nginx.yml +.. literalinclude:: ../../cfg/vhost-gen/nginx.yml-example-vhost + :caption: nginx.yml-example-vhost :language: yaml + +Reverse proxy Templates +======================= + +These templates can be used to change a normal vhost into a reverse proxy project. This might be +useful if you use NodeJs applications for example. + +.. important:: Do not apply those templates globally. They are intended to be used on a per project base. + +.. note:: + In order to use the Reverse Proxy templates you will only need to adjust the listening port, + everything else will work as already defined. So you simply need to copy those files into + your project directory. Lines that need to be changed are marked below. The currently set default + listening port is ``8000``. + +Apache 2.2 template +------------------- + +.. literalinclude:: ../../cfg/vhost-gen/apache22.yml-example-rproxy + :caption: apache22.yml-example-rproxy + :language: yaml + :emphasize-lines: 51,52 + + +Apache 2.4 template +------------------- + +.. literalinclude:: ../../cfg/vhost-gen/apache24.yml-example-rproxy + :caption: apache24.yml-example-rproxy + :language: yaml + :emphasize-lines: 51,52 + + +Nginx template +-------------- + +.. literalinclude:: ../../cfg/vhost-gen/nginx.yml-example-rproxy + :caption: nginx.yml-example-rproxy + :language: yaml + :emphasize-lines: 53 diff --git a/docs/vhost-gen/virtual-host-vs-reverse-proxy.rst b/docs/vhost-gen/virtual-host-vs-reverse-proxy.rst new file mode 100644 index 00000000..96d3724f --- /dev/null +++ b/docs/vhost-gen/virtual-host-vs-reverse-proxy.rst @@ -0,0 +1,61 @@ +.. _vhost_gen_virtual_host_vs_reverse_proxy: + +***************************** +Virtual host vs Reverse Proxy +***************************** + +.. note:: + Ensure you have read :ref:`vhost_gen_virtual_host_templates` + + +**Table of Contents** + +.. contents:: :local: + + +Motivation +========== + +By default, all virtual hosts will simply serve files located in your document root directory within +your project directory. Sometimes however your *project* is already its own server that will serve +requests through a listening network port. (e.g. a running NodeJS application). +This listening port will however only be available inside the PHP container (or any other container) +you have added to the Devilbox and the webserver is not aware of this. + +For this kind of project you will want to create a reverse proxy which simply forwards the requests +incoming to the webserver to your application (either to the PHP container to a specific port or +to any other container you have attached). + + +Benefits +======== + +By using the already available web server to reverse proxy requests to your service you will be +able to have all the current features for you application such as: + +* Have it displayed in the intranet page +* Have standardized domain names +* Have valid HTTPS + + +Creating a reverse proxy +======================== + +Creating a reverse proxy is as simply as copying the ``vhost-gen`` templates to your project +directory. + +In order to make your life simple there are a few generic docs that get you started and let you +know more about the theory behind it: + +.. seealso:: + + * :ref:`reverse_proxy_with_https` + * :ref:`reverse_proxy_with_custom_docker` + +If this is too generic you can also have a look at two specific examples to setup fully automated +Reverse Proxies including autostarting your application on ``docker-compose up``. + +.. seealso:: + + * :ref:`example_setup_reverse_proxy_nodejs` + * :ref:`example_setup_reverse_proxy_sphinx_docs`