Compare commits
No commits in common. "main" and "v4.7.7" have entirely different histories.
135 changed files with 1367 additions and 6379 deletions
2
.github/FUNDING.yml
vendored
Normal file
2
.github/FUNDING.yml
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
patreon: jakubvrana
|
||||
custom: ["https://sourceforge.net/p/adminer/donate/"]
|
67
.github/workflows/codeql-analysis.yml
vendored
67
.github/workflows/codeql-analysis.yml
vendored
|
@ -1,67 +0,0 @@
|
|||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '20 16 * * 0'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
22
.github/workflows/github-pages.yml
vendored
22
.github/workflows/github-pages.yml
vendored
|
@ -1,22 +0,0 @@
|
|||
name: publish docs
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: deploy
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout main
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: main
|
||||
|
||||
- name: deploy docs
|
||||
uses: mhausenblas/mkdocs-deploy-gh-pages@master
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CUSTOM_DOMAIN: docs.adminerevo.org
|
||||
EXTRA_PACKAGES: build-base
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,4 +2,3 @@
|
|||
/adminer*.php
|
||||
/editor*.php
|
||||
/vendor/
|
||||
/.idea
|
||||
|
|
10
.gitmodules
vendored
10
.gitmodules
vendored
|
@ -1,12 +1,6 @@
|
|||
[submodule "jush"]
|
||||
path = externals/jush
|
||||
url = https://github.com/vrana/jush
|
||||
url = git://github.com/vrana/jush
|
||||
[submodule "JsShrink"]
|
||||
path = externals/JsShrink
|
||||
url = https://github.com/vrana/JsShrink
|
||||
[submodule "designs/hydra"]
|
||||
path = designs/hydra
|
||||
url = https://github.com/Niyko/Hydra-Dark-Theme-for-Adminer
|
||||
[submodule "designs/pepa-linha-dark"]
|
||||
path = designs/pepa-linha-dark
|
||||
url = https://github.com/pepa-linha/Adminer-Design-Dark
|
||||
url = git://github.com/vrana/JsShrink
|
||||
|
|
|
@ -4,6 +4,4 @@ php:
|
|||
- 7.1
|
||||
- 7.2
|
||||
- 7.3
|
||||
- 7.4
|
||||
- 8.0
|
||||
script: git diff --name-only $TRAVIS_COMMIT_RANGE | grep '\.php$' | xargs -n1 -P8 php -l | grep -v 'No syntax errors'; test $? -eq 1
|
||||
|
|
1
LICENSE
1
LICENSE
|
@ -1 +0,0 @@
|
|||
Apache-2.0 OR GPL-2.0-only
|
|
@ -1,202 +0,0 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -1,339 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, 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 or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
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 give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
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 Program or any portion
|
||||
of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
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 Program, 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 Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) 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; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, 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 executable. However, as a
|
||||
special exception, the source code 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.
|
||||
|
||||
If distribution of executable or 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 counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program 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.
|
||||
|
||||
5. 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 Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program 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 to
|
||||
this License.
|
||||
|
||||
7. 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 Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program 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 Program.
|
||||
|
||||
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.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program 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.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the 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 Program
|
||||
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 Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, 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
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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 for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
39
Makefile
39
Makefile
|
@ -1,39 +0,0 @@
|
|||
ROOT_DIRECTORY = $(shell dirname "$(realpath $(lastword $(MAKEFILE_LIST)))")
|
||||
PHP := $(shell which php)
|
||||
PORT := 8000
|
||||
|
||||
|
||||
.DEFAULT_GOAL := default
|
||||
|
||||
|
||||
.PHONY: default
|
||||
default: compile
|
||||
|
||||
.PHONY: compile
|
||||
compile:
|
||||
$(PHP) $(ROOT_DIRECTORY)/compile.php
|
||||
|
||||
.PHONY: server
|
||||
server:
|
||||
php \
|
||||
--server 127.0.0.1:$(PORT) \
|
||||
--docroot $(ROOT_DIRECTORY)
|
||||
|
||||
.PHONY: initialize
|
||||
initialize:
|
||||
git \
|
||||
-C $(ROOT_DIRECTORY) \
|
||||
submodule \
|
||||
update \
|
||||
--init \
|
||||
--recursive
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm \
|
||||
--recursive \
|
||||
--force \
|
||||
$(ROOT_DIRECTORY)/adminer.php
|
||||
|
||||
.PHONY: clean.all
|
||||
clean.all: clean
|
134
PLUGINS.md
134
PLUGINS.md
|
@ -1,134 +0,0 @@
|
|||
# Plugins
|
||||
|
||||
AdminerEvo and AdminerEvo Editor can be extended by plugins. [To use a plugin](#to-use-a-plugin)
|
||||
|
||||
| Name / link | Description |
|
||||
| --- | --- |
|
||||
| [plugin](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/plugin.php) | Required to run any plugin |
|
||||
| [database-hide](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/database-hide.php) | Hide some databases from the interface - just to improve design, not a security plugin |
|
||||
| [designs](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/designs.php) | Allow switching designs |
|
||||
| [dump-alter](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/dump-alter.php) | Exports one database (e.g. `development`) so that it can be synced with other database (e.g. `production`) |
|
||||
| [dump-bz2](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/dump-bz2.php) | Dump to Bzip2 format |
|
||||
| [dump-date](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/dump-date.php) | Include current date and time in export filename |
|
||||
| [dump-json](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/dump-json.php) | Dump to JSON format |
|
||||
| [dump-xml](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/dump-xml.php) | Dump to XML format in structure `<database name="><table name="><column name=">` value |
|
||||
| [dump-zip](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/dump-zip.php) | Dump to ZIP format |
|
||||
| [edit-calendar](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/edit-calendar.php) | Display [jQuery UI](http://jqueryui.com/) [Timepicker](http://trentrichardson.com/examples/timepicker/) for each date and datetime field |
|
||||
| [edit-foreign](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/edit-foreign.php) | Select foreign key in edit form |
|
||||
| [edit-textarea](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/edit-textarea.php) | Use `<textarea>` for `char` and `varchar` |
|
||||
| [enum-option](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/enum-option.php) | Use `<select><option>` for `enum` edit instead of `<input type="radio">` |
|
||||
| [enum-types](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/enum-types.php) | Use `<select><option>` for `enum` edit instead of regular input text on enum type in PostgreSQL |
|
||||
| [file-upload](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/file-upload.php) | Edit fields ending with _path by `<input type="file">` and link to the uploaded files from select |
|
||||
| [foreign-system](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/foreign-system.php) | Link system tables (in `mysql` and `information_schema` databases) by foreign keys |
|
||||
| [frames](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/frames.php) | Allow using Adminer inside a frame |
|
||||
| [json-column](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/json-column.php) | Display JSON values as table in edit |
|
||||
| [login-otp](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/login-otp.php) | Require One Time Password at login |
|
||||
| [login-servers](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/login-servers.php) | Display constant list of servers in login form |
|
||||
| [login-password-less](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/login-password-less.php) | Enable login without password ([example](https://github.com/adminerevo/adminerevo/blob/main/adminer/sqlite.php)) |
|
||||
| [login-ssl](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/login-ssl.php) | Connect to MySQL using SSL |
|
||||
| [login-table](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/login-table.php) | Authenticate a user from the login table |
|
||||
| [master-slave](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/master-slave.php) | Execute writes on master and reads on slave |
|
||||
| [pretty-json-column](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/pretty-json-column.php) | Pretty print JSON values in edit |
|
||||
| [slugify](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/slugify.php) | Prefill field containing `_slug` with slugified value of a previous field (JavaScript) |
|
||||
| [sql-log](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/sql-log.php) | Log all queries to SQL file |
|
||||
| [struct-comments](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/struct-comments.php) | Show comments of sql structure in more places (mainly where you edit things) |
|
||||
| [tables-filter](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/tables-filter.php) | Filter names in tables list |
|
||||
| [tinymce](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/tinymce.php) | Edit all fields containing `_html` by HTML editor [TinyMCE](http://tinymce.moxiecode.com/) and display the HTML in select |
|
||||
| [translation](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/translation.php) | Translate all table and field comments, enum and set values from the translation table (automatically inserts new translations) |
|
||||
| [version-noverify](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/version-noverify.php) | Disable version checker |
|
||||
| [wymeditor](https://raw.githubusercontent.com/adminerevo/adminerevo/master/plugins/wymeditor.php) | Edit all fields containing `_html` by HTML editor [WYMeditor](http://www.wymeditor.org/) and display the HTML in select |
|
||||
|
||||
## User contributed plugins
|
||||
|
||||
| Name / link | Author | Description |
|
||||
| --- | --- | --- |
|
||||
| [allowed-prefixes](https://github.com/LinkedList/Adminer-Allowed-Prefixes) | Martin Macko | Show only tables with user set prefixes |
|
||||
| [checkbox-select](https://bitbucket.org/beholder/adminer-checkboxselect/src) | Alexander Shabunevich | Check multiple checkboxes at once by Shift+click. |
|
||||
| [colorfields](https://github.com/smuuf/adminer-colorfields) | Prema van Smuuf | |
|
||||
| [convention-foreign-keys](https://gist.github.com/raw/821510/convention-foreign-keys.php) | Ivan Nečas | Links for foreign keys by convention `user_id => users.id` |
|
||||
| [convention-foreign-keys](https://raw.github.com/Michal-Mikolas/Adminer-Editor-package/master/plugins/ConventionsForeignKeys.php) | Michal Mikoláš | Links for foreign keys by convention `user_id => users.id` |
|
||||
| [AdminerCopy](https://github.com/adilyildiz/AdminerCopy) | Adil Yildiz | |
|
||||
| [Camera Upload](https://github.com/margenn/adminer-camera-upload-plugin) | Marcelo Gennari | |
|
||||
| [cellformula](https://gist.github.com/redfish-d86e/bd6e1bb86424bec46c1289a997cfe972) | Tommy Tan | |
|
||||
| [CustomizeThemeBasedOnServer](https://github.com/mmokross/AdminerCustomizeThemeBasedOnServer) | Michael Mokroß | |
|
||||
| [Disable tables](https://github.com/icyz/adminer/blob/master/plugins/disable-tables.php) | Andrea Mariani | |
|
||||
| [DisplayForeignKeyName](https://gist.github.com/anonymous/13b657087cf55323150c#file-display-foreign-key-name-php) | Bruno Vibert | |
|
||||
| [DumpMarkdownDict](https://github.com/sc419/AdminerDumpMarkdownDict) | | |
|
||||
| [dump-markdown](https://github.com/fthiella/adminer-plugin-dump-markdown) | Federico Thiella | |
|
||||
| [dump-xml-dataset](https://github.com/Gobie/adminer-plugins) | Michal Brašna | Dump to XML format specifically PHPUnit's XML DataSet structure |
|
||||
| [FasterTablesFilter](https://github.com/LinkedList/FasterTablesFilter) | Martin Macko | |
|
||||
| [favorites tables](https://openuserjs.org/scripts/knedle/Adminer_-_favorites_tables) | Ladislav Ševcůj | |
|
||||
| [FillLoginForm](https://github.com/arxeiss/Adminer-FillLoginForm) | Pavel Kutáč | |
|
||||
| [fk-disable](https://github.com/icyz/adminer/blob/master/plugins/fk-disable.php) | Andrea Mariani | |
|
||||
| [floatThead](https://github.com/stano/adminer-floatThead) | Stano Paška | Floating table header plugin |
|
||||
| [folder-import](https://gist.github.com/joshcangit/ad28f82baf1c9c2fab22dd9e8f39f799) | Joshua | |
|
||||
| [ForeignKeys](https://github.com/mhucik/AdminerForeignKeysPlugin) | Marek Hučík | |
|
||||
| [hidePgSchemas](https://github.com/raitocz/hidePgSchemas) | Martin Jagr | Hide schemas with `pg_` prefix |
|
||||
| [HideTables](https://github.com/arxeiss/Adminer-HideTables) | Pavel Kutáč | |
|
||||
| [HideableColumns](https://github.com/derStephan/AdminerPlugins/blob/master/hideableColumns.php) | Stephan | |
|
||||
| [input-uuid-generator](https://github.com/arxeiss/adminer-input-uuid-generator) | Pavel Kutáč | |
|
||||
| [ispconfig](https://github.com/natanfelles/adminer-ispconfig) | Natan Felles | Authenticate and auto-check host by ISPConfig Remote API |
|
||||
| [JsonVarDumper](https://gist.github.com/marcbln/22dd713966cbda67af2e6bfc465a5c46) | Marc Christenfeldt | |
|
||||
| [login-servers-enhanced](https://github.com/crazy-max/login-servers-enhanced) | CrazyMax | Fork of the official login-servers Adminer plugin with enhancements |
|
||||
| [nette-user-login](https://gist.github.com/3423745) | Mikuláš Dítě | |
|
||||
| [one-click-login](https://github.com/giofreitas/one-click-login) | Sérgio Freitas | |
|
||||
| [PHP Export](https://github.com/gremki/AdminerPHPExport) | Adrian Andreescu | |
|
||||
| [PHP Serialized Data](https://gist.github.com/donwilson/0bc0ec7c3701fb20747777a1a7b4cab4) | Don Wilson | |
|
||||
| [readable-dates](https://gist.github.com/scr4bble/9ee4a9f1405ffc1465f59e03768e2768) | Dora Bulkins | Replaces UNIX timestamps with human-readable dates in your local format |
|
||||
| [resize](https://github.com/TiagoGilMarques/adminer.resize) | Tiago Gil Marques | Left column (tables) resizer (allow you to resize left table column) |
|
||||
| [restore-menu-scroll](https://gist.github.com/NoxArt/8085521) | Jiří Petruželka | Remembers and restores scollbar position of side menu |
|
||||
| [SchemaDefaultToPublic](https://github.com/MartinZubek/adminer-schema-default-to-public) | Martin Zubek | |
|
||||
| [SearchAutocomplete](https://github.com/derStephan/AdminerPlugins/blob/master/searchAutocomplete.php) | Stephan | |
|
||||
| [SQLite3 without password](https://github.com/FrancoisCapon/LoginToASqlite3DatabaseWithoutCredentialsWithAdminer) | François Capon | |
|
||||
| [StickyColumns](https://github.com/derStephan/AdminerPlugins/blob/master/stickyColumns.php) | Stephan | |
|
||||
| [suggest-tablefields](https://github.com/icyz/adminer/blob/master/plugins/suggest-tablefields.php) | Andrea Mariani | |
|
||||
| [table-filter](https://github.com/zhgabor/adminer-table-filter) | Gábor Zabojszky-Horvath | Quickly filtering tables, works only with custom themes where table list is floated |
|
||||
| [table-header-scroll](https://github.com/jnvsor/adminer-table-header-scroll/) | Jonathan Vollebregt | Makes the table header scroll with the viewport |
|
||||
| [tablesCollapse](https://github.com/TiagoGilMarques/adminer.tablesCollapse) | Tiago Gil Marques | Left column tables collapse (allows you to collapse tables, and translations tables with some sufix patterns, like phpmyadmin) |
|
||||
| [tables_fuzzy_search](https://github.com/brunetton/adminer-tables_fuzzy_search) | Bruno Duyé | Fuzzy search (filter) in tables list |
|
||||
| [tables-history](https://gist.github.com/aoloe/303f314aec36851d4c88) | Ale Rimoldi | |
|
||||
| [tree-view](https://github.com/PetroKostyuk/adminer-tree-view) | Petro Kostyuk | |
|
||||
| [login-serversjson-previewsimple-menucollations](https://github.com/pematon/adminer-plugins) | Pematon | |
|
||||
| [Adminer Bootstrap-Like Design](https://github.com/natanfelles/adminer-bootstrap-like) | Natan Felles | |
|
||||
| [Theme for Adminer](https://github.com/pematon/adminer-theme) | Pematon | Responsive touch-friendly theme |
|
||||
| [Theme Switcher](https://github.com/felladrin/adminer-theme-switcher) | Victor Nogueira | |
|
||||
|
||||
## To use a plugin
|
||||
|
||||
Create a PHP file specifying which plugins do you want to use:
|
||||
```php
|
||||
<?php
|
||||
function adminer_object() {
|
||||
// required to run any plugin
|
||||
include_once "./plugins/plugin.php";
|
||||
|
||||
// autoloader
|
||||
foreach (glob("plugins/*.php") as $filename) {
|
||||
include_once "./$filename";
|
||||
}
|
||||
|
||||
// enable extra drivers just by including them
|
||||
//~ include "./plugins/drivers/simpledb.php";
|
||||
|
||||
$plugins = array(
|
||||
// specify enabled plugins here
|
||||
new AdminerDumpXml(),
|
||||
new AdminerTinymce(),
|
||||
new AdminerFileUpload("data/"),
|
||||
new AdminerSlugify(),
|
||||
new AdminerTranslation(),
|
||||
new AdminerForeignSystem(),
|
||||
);
|
||||
|
||||
/* It is possible to combine customization and plugins:
|
||||
class AdminerCustomization extends AdminerPlugin {
|
||||
}
|
||||
return new AdminerCustomization($plugins);
|
||||
*/
|
||||
|
||||
return new AdminerPlugin($plugins);
|
||||
}
|
||||
|
||||
// include original Adminer or Adminer Editor
|
||||
include "./adminer.php";
|
||||
```
|
49
README.md
49
README.md
|
@ -1,49 +0,0 @@
|
|||
# AdminerEvo
|
||||
|
||||
**Adminer** - Database management in a single PHP file
|
||||
**Adminer Editor** - Data manipulation for end-users
|
||||
|
||||
## A bit of history
|
||||
|
||||
The original Adminer was created and maintained by Jakub Vrána in the [vrana/adminer](https://github.com/vrana/adminer) repository.
|
||||
Not being maintained for more than two years and being a daily user of Adminer, I've tried to get in touch with the original developer to propose my help to continue the project, but without success, I got no answer.
|
||||
I have then started to search if someone would be interested in continuing the project with me and found someone who seemed to have the same interest and view on the future of this project.
|
||||
I am now starting to take over the project under a slightly different name and will try to keep compatibility with all current database engines but also to give Adminer a new features, layout, etc.
|
||||
|
||||
## Before participating
|
||||
|
||||
Before you start developing around AdminerEvo, please carefully read the roadmap, the status of open issues, and even get in touch with us.
|
||||
It would be sad spending time/energy on development of a feature which would not be accepted into the main project.
|
||||
|
||||
## License
|
||||
|
||||
This work is dual-licensed under Apache 2.0 and GPL 2.0.
|
||||
You can choose between either one of them if you use this work.
|
||||
|
||||
`SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-only`
|
||||
|
||||
## Information from the original developer
|
||||
|
||||
|||
|
||||
|---|---|
|
||||
|Supports|MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Elasticsearch, MongoDB, SimpleDB (plugin), Firebird (plugin), ClickHouse (plugin)|
|
||||
|Requirements|PHP 5+|
|
||||
|Licence|Apache License 2.0 or GPL 2|
|
||||
|
||||
|
||||
|
||||
|File|Purpose|
|
||||
|---|---|
|
||||
|`adminer/index.php`|Run development version of Adminer|
|
||||
|`editor/index.php`|Run development version of Adminer Editor|
|
||||
|`editor/example.php`|Example customization|
|
||||
|`plugins/readme.txt`|Plugins for Adminer and Adminer Editor|
|
||||
|`adminer/plugin.php`|Plugin demo|
|
||||
|`adminer/sqlite.php`|Development version of Adminer with SQLite allowed|
|
||||
|`editor/sqlite.php`|Development version of Editor with SQLite allowed|
|
||||
|`adminer/designs.php`|Development version of Adminer with `adminer.css` switcher|
|
||||
|`compile.php`|Create a single file version|
|
||||
|`lang.php`|Update translations|
|
||||
|`tests/katalon.html`|Katalon Automation Recorder test suite|
|
||||
|
||||
If downloaded from Git then run: `git submodule update --init`
|
21
SECURITY.md
21
SECURITY.md
|
@ -1,21 +0,0 @@
|
|||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
The AdminerEvo team only supports the last published version and the
|
||||
last development version (last commit).
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
To report a vulnerability, create a new security advisory
|
||||
[here](https://github.com/adminerevo/adminerevo/security/advisories).
|
||||
|
||||
Security issues are handled with top priority. Should a report go
|
||||
unnoticed for more than a week, please send a message in the original
|
||||
report thread.
|
||||
|
||||
Once acknowledged, a fix should be available and a new version
|
||||
released within a week.
|
||||
|
||||
Security advisories will be made public after a fix and new version
|
||||
have been released, or the advisory has been declined.
|
|
@ -28,13 +28,13 @@ if (!$error && $_POST) {
|
|||
}
|
||||
$call[] = (isset($out[$key]) ? "@" . idf_escape($field["field"]) : $val);
|
||||
}
|
||||
|
||||
|
||||
$query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . table($PROCEDURE) . "(" . implode(", ", $call) . ")";
|
||||
$start = microtime(true);
|
||||
$result = $connection->multi_query($query);
|
||||
$affected = $connection->affected_rows; // getting warnigns overwrites this
|
||||
echo $adminer->selectQuery($query, $start, !$result);
|
||||
|
||||
|
||||
if (!$result) {
|
||||
echo "<p class='error'>" . error() . "\n";
|
||||
} else {
|
||||
|
@ -42,7 +42,7 @@ if (!$error && $_POST) {
|
|||
if (is_object($connection2)) {
|
||||
$connection2->select_db(DB);
|
||||
}
|
||||
|
||||
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
if (is_object($result)) {
|
||||
|
@ -53,7 +53,7 @@ if (!$error && $_POST) {
|
|||
;
|
||||
}
|
||||
} while ($connection->next_result());
|
||||
|
||||
|
||||
if ($out) {
|
||||
select($connection->query("SELECT " . implode(", ", $out)));
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
|||
}
|
||||
$process_field = process_field($field, $type_field);
|
||||
$all_fields[] = array($field["orig"], $process_field, $after);
|
||||
if (!$orig_field || $process_field != process_field($orig_field, $orig_field)) {
|
||||
if ($process_field != process_field($orig_field, $orig_field)) {
|
||||
$fields[] = array($field["orig"], $process_field, $after);
|
||||
if ($field["orig"] != "" || $after) {
|
||||
$use_all_fields = true;
|
||||
|
@ -185,17 +185,11 @@ edit_fields($row["fields"], $collations, "TABLE", $foreign_keys);
|
|||
<p>
|
||||
<?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
||||
<?php echo checkbox("defaults", 1, ($_POST ? $_POST["defaults"] : adminer_setting("defaults")), lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
|
||||
<?php
|
||||
$comments = ($_POST ? $_POST["comments"] : adminer_setting("comments"));
|
||||
echo (support("comment")
|
||||
? checkbox("comments", 1, $comments, lang('Comment'), "editingCommentsClick(this, true);", "jsonly")
|
||||
. ' ' . (preg_match('~\n~', $row["Comment"])
|
||||
? "<textarea name='Comment' rows='2' cols='20'" . ($comments ? "" : " class='hidden'") . ">" . h($row["Comment"]) . "</textarea>"
|
||||
: '<input name="Comment" value="' . h($row["Comment"]) . '" data-maxlength="' . (min_version(5.5) ? 2048 : 60) . '"' . ($comments ? "" : " class='hidden'") . '>'
|
||||
)
|
||||
<?php echo (support("comment")
|
||||
? checkbox("comments", 1, ($_POST ? $_POST["comments"] : adminer_setting("comments")), lang('Comment'), "editingCommentsClick(this, true);", "jsonly")
|
||||
. ' <input name="Comment" value="' . h($row["Comment"]) . '" data-maxlength="' . (min_version(5.5) ? 2048 : 60) . '">'
|
||||
: '')
|
||||
;
|
||||
?>
|
||||
; ?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php } ?>
|
||||
|
|
|
@ -59,13 +59,9 @@ if ($adminer->homepage()) {
|
|||
echo "<input type='search' name='query' value='" . h($_POST["query"]) . "'>";
|
||||
echo script("qsl('input').onkeydown = partialArg(bodyKeydown, 'search');", "");
|
||||
echo " <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
||||
if ($adminer->operator_regexp !== null) {
|
||||
echo "<p><label><input type='checkbox' name='regexp' value='1'" . (empty($_POST['regexp']) ? '' : ' checked') . '>' . lang('as a regular expression') . '</label>';
|
||||
echo doc_link(array('sql' => 'regexp.html', 'pgsql' => 'functions-matching.html#FUNCTIONS-POSIX-REGEXP')) . "</p>\n";
|
||||
}
|
||||
echo "</div></fieldset>\n";
|
||||
if ($_POST["search"] && $_POST["query"] != "") {
|
||||
$_GET["where"][0]["op"] = $adminer->operator_regexp === null || empty($_POST['regexp']) ? "LIKE %%" : $adminer->operator_regexp;
|
||||
$_GET["where"][0]["op"] = "LIKE %%";
|
||||
search_tables();
|
||||
}
|
||||
}
|
||||
|
@ -87,7 +83,7 @@ if ($adminer->homepage()) {
|
|||
|
||||
$tables = 0;
|
||||
foreach ($tables_list as $name => $type) {
|
||||
$view = ($type !== null && !preg_match('~table|sequence~i', $type));
|
||||
$view = ($type !== null && !preg_match('~table~i', $type));
|
||||
$id = h("Table-" . $name);
|
||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "", "", $id);
|
||||
echo '<th>' . (support("table") || support("indexes") ? "<a href='" . h(ME) . "table=" . urlencode($name) . "' title='" . lang('Show structure') . "' id='$id'>" . h($name) . '</a>' : h($name));
|
||||
|
@ -116,7 +112,7 @@ if ($adminer->homepage()) {
|
|||
}
|
||||
|
||||
echo "<tr><td><th>" . lang('%d in total', count($tables_list));
|
||||
echo "<td>" . h($jush == "sql" ? $connection->result("SELECT @@default_storage_engine") : "");
|
||||
echo "<td>" . h($jush == "sql" ? $connection->result("SELECT @@storage_engine") : "");
|
||||
echo "<td>" . h(db_collation(DB, collations()));
|
||||
foreach (array("Data_length", "Index_length", "Data_free") as $key) {
|
||||
echo "<td align='right' id='sum-$key'>";
|
||||
|
@ -155,12 +151,9 @@ if ($adminer->homepage()) {
|
|||
echo "</form>\n";
|
||||
echo script("tableCheck();");
|
||||
}
|
||||
$links = [];
|
||||
$links[] = "<a href='" . h(ME) . "create='>" . lang('Create table') . "</a>";
|
||||
if (support("view")) {
|
||||
$links[] = "<a href='" . h(ME) . "view='>" . lang('Create view') . "</a>";
|
||||
}
|
||||
echo generate_linksbar($links);
|
||||
|
||||
echo '<p class="links"><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
||||
echo (support("view") ? '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n" : "");
|
||||
|
||||
if (support("routine")) {
|
||||
echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n";
|
||||
|
@ -179,12 +172,10 @@ if ($adminer->homepage()) {
|
|||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
$links = [];
|
||||
if (support('procedure')) {
|
||||
$links[] = "<a href='" . h(ME) . "procedure='>" . lang('Create procedure') . "</a>";
|
||||
}
|
||||
$links[] = "<a href='" . h(ME) . "function='>" . lang('Create function') . "</a>";
|
||||
echo generate_linksbar($links);
|
||||
echo '<p class="links">'
|
||||
. (support("procedure") ? '<a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a>' : '')
|
||||
. '<a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n"
|
||||
;
|
||||
}
|
||||
|
||||
if (support("sequence")) {
|
||||
|
@ -199,7 +190,7 @@ if ($adminer->homepage()) {
|
|||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo generate_linksbar(["<a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>"]);
|
||||
echo "<p class='links'><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n";
|
||||
}
|
||||
|
||||
if (support("type")) {
|
||||
|
@ -214,7 +205,7 @@ if ($adminer->homepage()) {
|
|||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo generate_linksbar(["<a href='" . h(ME) . "type='>" . lang('Create type') . "</a>"]);
|
||||
echo "<p class='links'><a href='" . h(ME) . "type='>" . lang('Create type') . "</a>\n";
|
||||
}
|
||||
|
||||
if (support("event")) {
|
||||
|
@ -236,7 +227,7 @@ if ($adminer->homepage()) {
|
|||
echo "<p class='error'><code class='jush-sqlset'>event_scheduler</code>: " . h($event_scheduler) . "\n";
|
||||
}
|
||||
}
|
||||
echo generate_linksbar(["<a href='" . h(ME) . "event='>" . lang('Create event') . "</a>"]);
|
||||
echo '<p class="links"><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n";
|
||||
}
|
||||
|
||||
if ($tables_list) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
add_driver("clickhouse", "ClickHouse (alpha)");
|
||||
$drivers["clickhouse"] = "ClickHouse (alpha)";
|
||||
|
||||
if (isset($_GET["clickhouse"])) {
|
||||
define("DRIVER", "clickhouse");
|
||||
|
@ -8,78 +8,56 @@ if (isset($_GET["clickhouse"])) {
|
|||
var $extension = "JSON", $server_info, $errno, $_result, $error, $_url;
|
||||
var $_db = 'default';
|
||||
|
||||
/**
|
||||
* @param string $db
|
||||
* @param string $query
|
||||
* @return Min_Result|bool
|
||||
*/
|
||||
function rootQuery($db, $query) {
|
||||
@ini_set('track_errors', 1); // @ - may be disabled
|
||||
$file = @file_get_contents("$this->_url/?database=$db", false, stream_context_create(array('http' => array(
|
||||
'method' => 'POST',
|
||||
'content' => $this->isQuerySelectLike($query) ? "$query FORMAT JSONCompact" : $query,
|
||||
'header' => 'Content-type: application/x-www-form-urlencoded',
|
||||
'ignore_errors' => 1,
|
||||
'follow_location' => 0,
|
||||
'max_redirects' => 0,
|
||||
'ignore_errors' => 1, // available since PHP 5.2.10
|
||||
))));
|
||||
|
||||
if ($file === false) {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
return false;
|
||||
$this->error = $php_errormsg;
|
||||
return $file;
|
||||
}
|
||||
|
||||
if (!preg_match('~^HTTP/[0-9.]+ 2~i', $http_response_header[0])) {
|
||||
foreach ($http_response_header as $header) {
|
||||
if (preg_match('~^X-ClickHouse-Exception-Code:~i', $header)) {
|
||||
$this->error = preg_replace('~\(version [^(]+\(.+$~', '', $file);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
$this->error = $file;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->isQuerySelectLike($query) && $file === '') {
|
||||
return true;
|
||||
}
|
||||
|
||||
$return = json_decode($file, true);
|
||||
if ($return === null) {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
return false;
|
||||
}
|
||||
if (!$this->isQuerySelectLike($query) && $file === '') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!isset($return['rows']) || !isset($return['data']) || !isset($return['meta'])) {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
return false;
|
||||
$this->errno = json_last_error();
|
||||
if (function_exists('json_last_error_msg')) {
|
||||
$this->error = json_last_error_msg();
|
||||
} else {
|
||||
$constants = get_defined_constants(true);
|
||||
foreach ($constants['json'] as $name => $value) {
|
||||
if ($value == $this->errno && preg_match('~^JSON_ERROR_~', $name)) {
|
||||
$this->error = $name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new Min_Result($return['rows'], $return['data'], $return['meta']);
|
||||
return new Min_Result($return);
|
||||
}
|
||||
|
||||
function isQuerySelectLike($query) {
|
||||
return (bool) preg_match('~^(select|show)~i', $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $query
|
||||
* @return bool|Min_Result
|
||||
*/
|
||||
function query($query) {
|
||||
return $this->rootQuery($this->_db, $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $server
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool
|
||||
*/
|
||||
function connect($server, $username, $password) {
|
||||
$this->_url = build_http_url($server, $username, $password, "localhost", 8123);
|
||||
|
||||
preg_match('~^(https?://)?(.*)~', $server, $match);
|
||||
$this->_url = ($match[1] ? $match[1] : "http://") . "$username:$password@$match[2]";
|
||||
$return = $this->query('SELECT 1');
|
||||
return (bool) $return;
|
||||
}
|
||||
|
@ -114,17 +92,11 @@ if (isset($_GET["clickhouse"])) {
|
|||
class Min_Result {
|
||||
var $num_rows, $_rows, $columns, $meta, $_offset = 0;
|
||||
|
||||
/**
|
||||
* @param int $rows
|
||||
* @param array[] $data
|
||||
* @param array[] $meta
|
||||
*/
|
||||
function __construct($rows, array $data, array $meta) {
|
||||
$this->num_rows = $rows;
|
||||
$this->_rows = $data;
|
||||
$this->meta = $meta;
|
||||
$this->columns = array_column($meta, 'name');
|
||||
|
||||
function __construct($result) {
|
||||
$this->num_rows = $result['rows'];
|
||||
$this->_rows = $result['data'];
|
||||
$this->meta = $result['meta'];
|
||||
$this->columns = array_column($this->meta, 'name');
|
||||
reset($this->_rows);
|
||||
}
|
||||
|
||||
|
@ -334,7 +306,7 @@ if (isset($_GET["clickhouse"])) {
|
|||
function fields($table) {
|
||||
$return = array();
|
||||
$result = get_rows("SELECT name, type, default_expression FROM system.columns WHERE " . idf_escape('table') . " = " . q($table));
|
||||
foreach ($result as $row) {
|
||||
foreach($result as $row) {
|
||||
$type = trim($row['type']);
|
||||
$nullable = strpos($type, 'Nullable(') === 0;
|
||||
$return[trim($row['name'])] = array(
|
||||
|
@ -400,27 +372,21 @@ if (isset($_GET["clickhouse"])) {
|
|||
return preg_match("~^(columns|sql|status|table|drop_col)$~", $feature);
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! arrays
|
||||
lang('Numbers') => array("Int8" => 3, "Int16" => 5, "Int32" => 10, "Int64" => 19, "UInt8" => 3, "UInt16" => 5, "UInt32" => 10, "UInt64" => 20, "Float32" => 7, "Float64" => 16, 'Decimal' => 38, 'Decimal32' => 9, 'Decimal64' => 18, 'Decimal128' => 38),
|
||||
lang('Date and time') => array("Date" => 13, "DateTime" => 20),
|
||||
lang('Strings') => array("String" => 0),
|
||||
lang('Binary') => array("FixedString" => 0),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'jush' => "clickhouse",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"),
|
||||
'functions' => array(),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(),
|
||||
);
|
||||
$jush = "clickhouse";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! arrays
|
||||
lang('Numbers') => array("Int8" => 3, "Int16" => 5, "Int32" => 10, "Int64" => 19, "UInt8" => 3, "UInt16" => 5, "UInt32" => 10, "UInt64" => 20, "Float32" => 7, "Float64" => 16, 'Decimal' => 38, 'Decimal32' => 9, 'Decimal64' => 18, 'Decimal128' => 38),
|
||||
lang('Date and time') => array("Date" => 13, "DateTime" => 20),
|
||||
lang('Strings') => array("String" => 0),
|
||||
lang('Binary') => array("FixedString" => 0),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL");
|
||||
$functions = array();
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array();
|
||||
}
|
|
@ -2,83 +2,71 @@
|
|||
$drivers["elastic"] = "Elasticsearch (beta)";
|
||||
|
||||
if (isset($_GET["elastic"])) {
|
||||
$possible_drivers = array("json + allow_url_fopen");
|
||||
define("DRIVER", "elastic");
|
||||
|
||||
if (function_exists('json_decode') && ini_bool('allow_url_fopen')) {
|
||||
class Min_DB {
|
||||
var $extension = "JSON", $server_info, $errno, $error, $_url, $_db;
|
||||
var $extension = "JSON", $server_info, $errno, $error, $_url;
|
||||
|
||||
/**
|
||||
* @param string $path
|
||||
* @param array|null $content
|
||||
* @param string $method
|
||||
* @return array|false
|
||||
/** Performs query
|
||||
* @param string
|
||||
* @param array
|
||||
* @param string
|
||||
* @return mixed
|
||||
*/
|
||||
function rootQuery($path, array $content = null, $method = 'GET') {
|
||||
function rootQuery($path, $content = array(), $method = 'GET') {
|
||||
@ini_set('track_errors', 1); // @ - may be disabled
|
||||
$file = @file_get_contents("$this->_url/" . ltrim($path, '/'), false, stream_context_create(array('http' => array(
|
||||
'method' => $method,
|
||||
'content' => $content !== null ? json_encode($content) : null,
|
||||
'header' => $content !== null ? 'Content-Type: application/json' : [],
|
||||
'ignore_errors' => 1,
|
||||
'follow_location' => 0,
|
||||
'max_redirects' => 0,
|
||||
'content' => $content === null ? $content : json_encode($content),
|
||||
'header' => 'Content-Type: application/json',
|
||||
'ignore_errors' => 1, // available since PHP 5.2.10
|
||||
))));
|
||||
|
||||
if ($file === false) {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
if (!$file) {
|
||||
$this->error = $php_errormsg;
|
||||
return $file;
|
||||
}
|
||||
if (!preg_match('~^HTTP/[0-9.]+ 2~i', $http_response_header[0])) {
|
||||
$this->error = $file;
|
||||
return false;
|
||||
}
|
||||
|
||||
$return = json_decode($file, true);
|
||||
if ($return === null) {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!preg_match('~^HTTP/[0-9.]+ 2~i', $http_response_header[0])) {
|
||||
if (isset($return['error']['root_cause'][0]['type'])) {
|
||||
$this->error = $return['error']['root_cause'][0]['type'] . ": " . $return['error']['root_cause'][0]['reason'];
|
||||
$this->errno = json_last_error();
|
||||
if (function_exists('json_last_error_msg')) {
|
||||
$this->error = json_last_error_msg();
|
||||
} else {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
$constants = get_defined_constants(true);
|
||||
foreach ($constants['json'] as $name => $value) {
|
||||
if ($value == $this->errno && preg_match('~^JSON_ERROR_~', $name)) {
|
||||
$this->error = $name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Performs query relative to actual selected DB
|
||||
* @param string $path
|
||||
* @param array|null $content
|
||||
* @param string $method
|
||||
* @return array|false
|
||||
* @param string
|
||||
* @param array
|
||||
* @param string
|
||||
* @return mixed
|
||||
*/
|
||||
function query($path, array $content = null, $method = 'GET') {
|
||||
function query($path, $content = array(), $method = 'GET') {
|
||||
return $this->rootQuery(($this->_db != "" ? "$this->_db/" : "/") . ltrim($path, '/'), $content, $method);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $server
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool
|
||||
*/
|
||||
function connect($server, $username, $password) {
|
||||
$this->_url = build_http_url($server, $username, $password, "localhost", 9200);
|
||||
|
||||
preg_match('~^(https?://)?(.*)~', $server, $match);
|
||||
$this->_url = ($match[1] ? $match[1] : "http://") . "$username:$password@$match[2]";
|
||||
$return = $this->query('');
|
||||
if (!$return) {
|
||||
return false;
|
||||
if ($return) {
|
||||
$this->server_info = $return['version']['number'];
|
||||
}
|
||||
|
||||
if (!isset($return['version']['number'])) {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->server_info = $return['version']['number'];
|
||||
return true;
|
||||
return (bool) $return;
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
|
@ -275,7 +263,7 @@ if (isset($_GET["elastic"])) {
|
|||
|
||||
function db_collation($db, $collations) {
|
||||
}
|
||||
|
||||
|
||||
function engines() {
|
||||
return array();
|
||||
}
|
||||
|
@ -296,11 +284,6 @@ if (isset($_GET["elastic"])) {
|
|||
|
||||
function tables_list() {
|
||||
global $connection;
|
||||
|
||||
if (min_version(6)) {
|
||||
return array('_doc' => 'table');
|
||||
}
|
||||
|
||||
$return = $connection->query('_mapping');
|
||||
if ($return) {
|
||||
$return = array_fill_keys(array_keys($return[$connection->_db]["mappings"]), 'table');
|
||||
|
@ -356,35 +339,25 @@ if (isset($_GET["elastic"])) {
|
|||
|
||||
function fields($table) {
|
||||
global $connection;
|
||||
|
||||
$mappings = array();
|
||||
if (min_version(6)) {
|
||||
$result = $connection->query("_mapping");
|
||||
if ($result) {
|
||||
$mappings = $result[$connection->_db]['mappings']['properties'];
|
||||
}
|
||||
} else {
|
||||
$result = $connection->query("$table/_mapping");
|
||||
if ($result) {
|
||||
$mappings = $result[$table]['properties'];
|
||||
if (!$mappings) {
|
||||
$mappings = $result[$connection->_db]['mappings'][$table]['properties'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$result = $connection->query("$table/_mapping");
|
||||
$return = array();
|
||||
if ($mappings) {
|
||||
foreach ($mappings as $name => $field) {
|
||||
$return[$name] = array(
|
||||
"field" => $name,
|
||||
"full_type" => $field["type"],
|
||||
"type" => $field["type"],
|
||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
||||
);
|
||||
if ($field["properties"]) { // only leaf fields can be edited
|
||||
unset($return[$name]["privileges"]["insert"]);
|
||||
unset($return[$name]["privileges"]["update"]);
|
||||
if ($result) {
|
||||
$mappings = $result[$table]['properties'];
|
||||
if (!$mappings) {
|
||||
$mappings = $result[$connection->_db]['mappings'][$table]['properties'];
|
||||
}
|
||||
if ($mappings) {
|
||||
foreach ($mappings as $name => $field) {
|
||||
$return[$name] = array(
|
||||
"field" => $name,
|
||||
"full_type" => $field["type"],
|
||||
"type" => $field["type"],
|
||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
||||
);
|
||||
if ($field["properties"]) { // only leaf fields can be edited
|
||||
unset($return[$name]["privileges"]["insert"]);
|
||||
unset($return[$name]["privileges"]["update"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -473,27 +446,20 @@ if (isset($_GET["elastic"])) {
|
|||
return $connection->last_id;
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array(
|
||||
lang('Numbers') => array("long" => 3, "integer" => 5, "short" => 8, "byte" => 10, "double" => 20, "float" => 66, "half_float" => 12, "scaled_float" => 21),
|
||||
lang('Date and time') => array("date" => 10),
|
||||
lang('Strings') => array("string" => 65535, "text" => 65535),
|
||||
lang('Binary') => array("binary" => 255),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("json + allow_url_fopen"),
|
||||
'jush' => "elastic",
|
||||
'operators' => array("=", "query"),
|
||||
'functions' => array(),
|
||||
'grouping' => array(),
|
||||
'edit_functions' => array(array("json")),
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
);
|
||||
$jush = "elastic";
|
||||
$operators = array("=", "query");
|
||||
$functions = array();
|
||||
$grouping = array();
|
||||
$edit_functions = array(array("json"));
|
||||
$types = array(); ///< @var array ($type => $maximum_unsigned_length, ...)
|
||||
$structured_types = array(); ///< @var array ($description => array($type, ...), ...)
|
||||
foreach (array(
|
||||
lang('Numbers') => array("long" => 3, "integer" => 5, "short" => 8, "byte" => 10, "double" => 20, "float" => 66, "half_float" => 12, "scaled_float" => 21),
|
||||
lang('Date and time') => array("date" => 10),
|
||||
lang('Strings') => array("string" => 65535, "text" => 65535),
|
||||
lang('Binary') => array("binary" => 255),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,9 +3,10 @@
|
|||
* @author Steve Krämer
|
||||
*/
|
||||
|
||||
add_driver('firebird', 'Firebird (alpha)');
|
||||
|
||||
$drivers['firebird'] = 'Firebird (alpha)';
|
||||
|
||||
if (isset($_GET["firebird"])) {
|
||||
$possible_drivers = array("interbase");
|
||||
define("DRIVER", "firebird");
|
||||
|
||||
if (extension_loaded("interbase") ) {
|
||||
|
@ -311,14 +312,9 @@ ORDER BY RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION';
|
|||
return preg_match("~^(columns|sql|status|table)$~", $feature);
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
return array(
|
||||
'possible_drivers' => array("interbase"),
|
||||
'jush' => "firebird",
|
||||
'operators' => array("="),
|
||||
'functions' => array(),
|
||||
'grouping' => array(),
|
||||
'edit_functions' => array(),
|
||||
);
|
||||
}
|
||||
$jush = "firebird";
|
||||
$operators = array("=");
|
||||
$functions = array();
|
||||
$grouping = array();
|
||||
$edit_functions = array();
|
||||
}
|
|
@ -1,7 +1,8 @@
|
|||
<?php
|
||||
$drivers["mongo"] = "MongoDB (alpha)";
|
||||
$drivers["mongo"] = "MongoDB";
|
||||
|
||||
if (isset($_GET["mongo"])) {
|
||||
$possible_drivers = array("mongo", "mongodb");
|
||||
define("DRIVER", "mongo");
|
||||
|
||||
if (class_exists('MongoDB')) {
|
||||
|
@ -9,22 +10,9 @@ if (isset($_GET["mongo"])) {
|
|||
var $extension = "Mongo", $server_info = MongoClient::VERSION, $error, $last_id, $_link, $_db;
|
||||
|
||||
function connect($uri, $options) {
|
||||
try {
|
||||
$this->_link = new MongoClient($uri, $options);
|
||||
if ($options["password"] != "") {
|
||||
$options["password"] = "";
|
||||
try {
|
||||
new MongoClient($uri, $options);
|
||||
$this->error = lang('Database does not support password.');
|
||||
} catch (Exception $e) {
|
||||
// this is what we want
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
}
|
||||
return @new MongoClient($uri, $options);
|
||||
}
|
||||
|
||||
|
||||
function query($query) {
|
||||
return false;
|
||||
}
|
||||
|
@ -42,6 +30,7 @@ if (isset($_GET["mongo"])) {
|
|||
function quote($string) {
|
||||
return $string;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Min_Result {
|
||||
|
@ -55,10 +44,10 @@ if (isset($_GET["mongo"])) {
|
|||
$this->_charset[$key] = 63;
|
||||
}
|
||||
$row[$key] =
|
||||
(is_a($val, 'MongoId') ? "ObjectId(\"$val\")" :
|
||||
(is_a($val, 'MongoId') ? 'ObjectId("' . strval($val) . '")' :
|
||||
(is_a($val, 'MongoDate') ? gmdate("Y-m-d H:i:s", $val->sec) . " GMT" :
|
||||
(is_a($val, 'MongoBinData') ? $val->bin : //! allow downloading
|
||||
(is_a($val, 'MongoRegex') ? "$val" :
|
||||
(is_a($val, 'MongoRegex') ? strval($val) :
|
||||
(is_object($val) ? get_class($val) : // MongoMinKey, MongoMaxKey
|
||||
$val
|
||||
)))));
|
||||
|
@ -109,7 +98,7 @@ if (isset($_GET["mongo"])) {
|
|||
|
||||
class Min_Driver extends Min_SQL {
|
||||
public $primary = "_id";
|
||||
|
||||
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
$select = ($select == array("*")
|
||||
? array()
|
||||
|
@ -127,7 +116,7 @@ if (isset($_GET["mongo"])) {
|
|||
->skip($page * $limit)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function insert($table, $set) {
|
||||
try {
|
||||
$return = $this->_conn->_db->selectCollection($table)->insert($set);
|
||||
|
@ -206,40 +195,17 @@ if (isset($_GET["mongo"])) {
|
|||
}
|
||||
|
||||
$operators = array("=");
|
||||
$operator_regexp = null;
|
||||
|
||||
} elseif (class_exists('MongoDB\Driver\Manager')) {
|
||||
class Min_DB {
|
||||
var $extension = "MongoDB", $server_info = MONGODB_VERSION, $affected_rows, $error, $last_id;
|
||||
var $extension = "MongoDB", $server_info = MONGODB_VERSION, $error, $last_id;
|
||||
/** @var MongoDB\Driver\Manager */
|
||||
var $_link;
|
||||
var $_db, $_db_name;
|
||||
|
||||
function connect($uri, $options) {
|
||||
$class = 'MongoDB\Driver\Manager';
|
||||
$this->_link = new $class($uri, $options);
|
||||
$this->executeCommand('admin', array('ping' => 1));
|
||||
}
|
||||
|
||||
function executeCommand($db, $command) {
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
try {
|
||||
return $this->_link->executeCommand($db, new $class($command));
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
function executeBulkWrite($namespace, $bulk, $counter) {
|
||||
try {
|
||||
$results = $this->_link->executeBulkWrite($namespace, $bulk);
|
||||
$this->affected_rows = $results->$counter();
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
return false;
|
||||
}
|
||||
return new $class($uri, $options);
|
||||
}
|
||||
|
||||
function query($query) {
|
||||
|
@ -254,6 +220,7 @@ if (isset($_GET["mongo"])) {
|
|||
function quote($string) {
|
||||
return $string;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Min_Result {
|
||||
|
@ -267,13 +234,13 @@ if (isset($_GET["mongo"])) {
|
|||
$this->_charset[$key] = 63;
|
||||
}
|
||||
$row[$key] =
|
||||
(is_a($val, 'MongoDB\BSON\ObjectID') ? 'MongoDB\BSON\ObjectID("' . "$val\")" :
|
||||
(is_a($val, 'MongoDB\BSON\UTCDatetime') ? $val->toDateTime()->format('Y-m-d H:i:s') :
|
||||
(is_a($val, 'MongoDB\BSON\Binary') ? $val->getData() : //! allow downloading
|
||||
(is_a($val, 'MongoDB\BSON\Regex') ? "$val" :
|
||||
(is_object($val) || is_array($val) ? json_encode($val, 256) : // 256 = JSON_UNESCAPED_UNICODE
|
||||
$val // MongoMinKey, MongoMaxKey
|
||||
)))));
|
||||
(is_a($val, 'MongoDB\BSON\ObjectID') ? 'MongoDB\BSON\ObjectID("' . strval($val) . '")' :
|
||||
(is_a($val, 'MongoDB\BSON\UTCDatetime') ? $val->toDateTime()->format('Y-m-d H:i:s') :
|
||||
(is_a($val, 'MongoDB\BSON\Binary') ? $val->bin : //! allow downloading
|
||||
(is_a($val, 'MongoDB\BSON\Regex') ? strval($val) :
|
||||
(is_object($val) ? json_encode($val, 256) : // 256 = JSON_UNESCAPED_UNICODE
|
||||
$val // MongoMinKey, MongoMaxKey
|
||||
)))));
|
||||
}
|
||||
$this->_rows[] = $row;
|
||||
foreach ($row as $key => $val) {
|
||||
|
@ -282,7 +249,7 @@ if (isset($_GET["mongo"])) {
|
|||
}
|
||||
}
|
||||
}
|
||||
$this->num_rows = count($this->_rows);
|
||||
$this->num_rows = $result->count;
|
||||
}
|
||||
|
||||
function fetch_assoc() {
|
||||
|
@ -342,12 +309,9 @@ if (isset($_GET["mongo"])) {
|
|||
$limit = min(200, max(1, (int) $limit));
|
||||
$skip = $page * $limit;
|
||||
$class = 'MongoDB\Driver\Query';
|
||||
try {
|
||||
return new Min_Result($connection->_link->executeQuery("$connection->_db_name.$table", new $class($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort))));
|
||||
} catch (Exception $e) {
|
||||
$connection->error = $e->getMessage();
|
||||
return false;
|
||||
}
|
||||
$query = new $class($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort));
|
||||
$results = $connection->_link->executeQuery("$connection->_db_name.$table", $query);
|
||||
return new Min_Result($results);
|
||||
}
|
||||
|
||||
function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
|
||||
|
@ -371,7 +335,9 @@ if (isset($_GET["mongo"])) {
|
|||
$update['$unset'] = $removeFields;
|
||||
}
|
||||
$bulk->update($where, $update, array('upsert' => false));
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getModifiedCount');
|
||||
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||
$connection->affected_rows = $results->getModifiedCount();
|
||||
return true;
|
||||
}
|
||||
|
||||
function delete($table, $queryWhere, $limit = 0) {
|
||||
|
@ -381,7 +347,9 @@ if (isset($_GET["mongo"])) {
|
|||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
$bulk->delete($where, array('limit' => $limit));
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getDeletedCount');
|
||||
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||
$connection->affected_rows = $results->getDeletedCount();
|
||||
return true;
|
||||
}
|
||||
|
||||
function insert($table, $set) {
|
||||
|
@ -389,18 +357,24 @@ if (isset($_GET["mongo"])) {
|
|||
$db = $connection->_db_name;
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
if ($set['_id'] == '') {
|
||||
if (isset($set['_id']) && empty($set['_id'])) {
|
||||
unset($set['_id']);
|
||||
}
|
||||
$bulk->insert($set);
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getInsertedCount');
|
||||
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||
$connection->affected_rows = $results->getInsertedCount();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function get_databases($flush) {
|
||||
/** @var Min_DB */
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($connection->executeCommand('admin', array('listDatabases' => 1)) as $dbs) {
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$command = new $class(array('listDatabases' => 1));
|
||||
$results = $connection->_link->executeCommand('admin', $command);
|
||||
foreach ($results as $dbs) {
|
||||
foreach ($dbs->databases as $db) {
|
||||
$return[] = $db->name;
|
||||
}
|
||||
|
@ -415,8 +389,11 @@ if (isset($_GET["mongo"])) {
|
|||
|
||||
function tables_list() {
|
||||
global $connection;
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$command = new $class(array('listCollections' => 1));
|
||||
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||
$collections = array();
|
||||
foreach ($connection->executeCommand($connection->_db_name, array('listCollections' => 1)) as $result) {
|
||||
foreach ($results as $result) {
|
||||
$collections[$result->name] = 'table';
|
||||
}
|
||||
return $collections;
|
||||
|
@ -429,7 +406,10 @@ if (isset($_GET["mongo"])) {
|
|||
function indexes($table, $connection2 = null) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($connection->executeCommand($connection->_db_name, array('listIndexes' => $table)) as $index) {
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$command = new $class(array('listIndexes' => $table));
|
||||
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||
foreach ($results as $index) {
|
||||
$descs = array();
|
||||
$columns = array();
|
||||
foreach (get_object_vars($index->key) as $column => $type) {
|
||||
|
@ -447,26 +427,24 @@ if (isset($_GET["mongo"])) {
|
|||
}
|
||||
|
||||
function fields($table) {
|
||||
global $driver;
|
||||
$fields = fields_from_edit();
|
||||
if (!$fields) {
|
||||
if (!count($fields)) {
|
||||
global $driver;
|
||||
$result = $driver->select($table, array("*"), null, null, array(), 10);
|
||||
if ($result) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
foreach ($row as $key => $val) {
|
||||
$row[$key] = null;
|
||||
$fields[$key] = array(
|
||||
"field" => $key,
|
||||
"type" => "string",
|
||||
"null" => ($key != $driver->primary),
|
||||
"auto_increment" => ($key == $driver->primary),
|
||||
"privileges" => array(
|
||||
"insert" => 1,
|
||||
"select" => 1,
|
||||
"update" => 1,
|
||||
),
|
||||
);
|
||||
}
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
foreach ($row as $key => $val) {
|
||||
$row[$key] = null;
|
||||
$fields[$key] = array(
|
||||
"field" => $key,
|
||||
"type" => "string",
|
||||
"null" => ($key != $driver->primary),
|
||||
"auto_increment" => ($key == $driver->primary),
|
||||
"privileges" => array(
|
||||
"insert" => 1,
|
||||
"select" => 1,
|
||||
"update" => 1,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -476,12 +454,16 @@ if (isset($_GET["mongo"])) {
|
|||
function found_rows($table_status, $where) {
|
||||
global $connection;
|
||||
$where = where_to_query($where);
|
||||
$toArray = $connection->executeCommand($connection->_db_name, array('count' => $table_status['Name'], 'query' => $where))->toArray();
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
$command = new $class(array('count' => $table_status['Name'], 'query' => $where));
|
||||
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||
$toArray = $results->toArray();
|
||||
return $toArray[0]->n;
|
||||
}
|
||||
|
||||
function sql_query_where_parser($queryWhere) {
|
||||
$queryWhere = preg_replace('~^\sWHERE \(?\(?(.+?)\)?\)?$~', '\1', $queryWhere);
|
||||
$queryWhere = trim(preg_replace('/WHERE[\s]?[(]?\(?/', '', $queryWhere));
|
||||
$queryWhere = preg_replace('/\)\)\)$/', ')', $queryWhere);
|
||||
$wheres = explode(' AND ', $queryWhere);
|
||||
$wheresOr = explode(') OR (', $queryWhere);
|
||||
$where = array();
|
||||
|
@ -503,8 +485,10 @@ if (isset($_GET["mongo"])) {
|
|||
if (is_array($where)) {
|
||||
foreach ($where as $expression) {
|
||||
list($col, $op, $val) = explode(" ", $expression, 3);
|
||||
if ($col == "_id" && preg_match('~^(MongoDB\\\\BSON\\\\ObjectID)\("(.+)"\)$~', $val, $match)) {
|
||||
list(, $class, $val) = $match;
|
||||
if ($col == "_id") {
|
||||
$val = str_replace('MongoDB\BSON\ObjectID("', "", $val);
|
||||
$val = str_replace('")', "", $val);
|
||||
$class = 'MongoDB\BSON\ObjectID';
|
||||
$val = new $class($val);
|
||||
}
|
||||
if (!in_array($op, $adminer->operators)) {
|
||||
|
@ -576,8 +560,6 @@ if (isset($_GET["mongo"])) {
|
|||
"(date)>=",
|
||||
"(date)<=",
|
||||
);
|
||||
|
||||
$operator_regexp = 'regex';
|
||||
}
|
||||
|
||||
function table($idf) {
|
||||
|
@ -639,11 +621,21 @@ if (isset($_GET["mongo"])) {
|
|||
if (($auth_source = getenv("MONGO_AUTH_SOURCE"))) {
|
||||
$options["authSource"] = $auth_source;
|
||||
}
|
||||
$connection->connect("mongodb://$server", $options);
|
||||
if ($connection->error) {
|
||||
return $connection->error;
|
||||
try {
|
||||
$connection->_link = $connection->connect("mongodb://$server", $options);
|
||||
if ($password != "") {
|
||||
$options["password"] = "";
|
||||
try {
|
||||
$connection->connect("mongodb://$server", $options);
|
||||
return lang('Database does not support password.');
|
||||
} catch (Exception $ex) {
|
||||
// this is what we want
|
||||
}
|
||||
}
|
||||
return $connection;
|
||||
} catch (Exception $ex) {
|
||||
return $ex->getMessage();
|
||||
}
|
||||
return $connection;
|
||||
}
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
|
@ -733,16 +725,8 @@ if (isset($_GET["mongo"])) {
|
|||
return true;
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
global $operators, $operator_regexp;
|
||||
return array(
|
||||
'possible_drivers' => array("mongo", "mongodb"),
|
||||
'jush' => "mongo",
|
||||
'operators' => $operators,
|
||||
'operator_regexp' => $operator_regexp,
|
||||
'functions' => array(),
|
||||
'grouping' => array(),
|
||||
'edit_functions' => array(array("json")),
|
||||
);
|
||||
}
|
||||
$jush = "mongo";
|
||||
$functions = array();
|
||||
$grouping = array();
|
||||
$edit_functions = array(array("json"));
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
$drivers["mssql"] = "MS SQL (beta)";
|
||||
|
||||
if (isset($_GET["mssql"])) {
|
||||
$possible_drivers = array("SQLSRV", "MSSQL", "PDO_DBLIB");
|
||||
define("DRIVER", "mssql");
|
||||
if (extension_loaded("sqlsrv")) {
|
||||
class Min_DB {
|
||||
|
@ -367,7 +368,7 @@ if (isset($_GET["mssql"])) {
|
|||
}
|
||||
|
||||
function fields($table) {
|
||||
$comments = get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', " . q(get_schema()) . ", 'table', " . q($table) . ", 'column', NULL)");
|
||||
$comments = get_key_vals("SELECT objname, cast(value as varchar) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', " . q(get_schema()) . ", 'table', " . q($table) . ", 'column', NULL)");
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default]
|
||||
FROM sys.all_columns c
|
||||
|
@ -494,8 +495,8 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||
}
|
||||
foreach ($comments as $key => $val) {
|
||||
$comment = substr($val, 9); // 9 - strlen(" COMMENT ")
|
||||
queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
queries("EXEC sp_addextendedproperty @name = N'MS_Description', @value = " . $comment . ", @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
queries("EXEC sp_addextendedproperty @name = N'MS_Description', @value = " . $comment . ", @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -645,35 +646,28 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
|||
return preg_match('~^(comment|columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! use sys.types
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "int" => 10, "bigint" => 20, "bit" => 1, "decimal" => 0, "real" => 12, "float" => 53, "smallmoney" => 10, "money" => 20),
|
||||
lang('Date and time') => array("date" => 10, "smalldatetime" => 19, "datetime" => 19, "datetime2" => 19, "time" => 8, "datetimeoffset" => 10),
|
||||
lang('Strings') => array("char" => 8000, "varchar" => 8000, "text" => 2147483647, "nchar" => 4000, "nvarchar" => 4000, "ntext" => 1073741823),
|
||||
lang('Binary') => array("binary" => 8000, "varbinary" => 8000, "image" => 2147483647),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("SQLSRV", "MSSQL", "PDO_DBLIB"),
|
||||
'jush' => "mssql",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"),
|
||||
'functions' => array("distinct", "len", "lower", "round", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array(
|
||||
"date|time" => "getdate",
|
||||
), array(
|
||||
"int|decimal|real|float|money|datetime" => "+/-",
|
||||
"char|text" => "+",
|
||||
)
|
||||
),
|
||||
);
|
||||
$jush = "mssql";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! use sys.types
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "int" => 10, "bigint" => 20, "bit" => 1, "decimal" => 0, "real" => 12, "float" => 53, "smallmoney" => 10, "money" => 20),
|
||||
lang('Date and time') => array("date" => 10, "smalldatetime" => 19, "datetime" => 19, "datetime2" => 19, "time" => 8, "datetimeoffset" => 10),
|
||||
lang('Strings') => array("char" => 8000, "varchar" => 8000, "text" => 2147483647, "nchar" => 4000, "nvarchar" => 4000, "ntext" => 1073741823),
|
||||
lang('Binary') => array("binary" => 8000, "varbinary" => 8000, "image" => 2147483647),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL");
|
||||
$functions = array("len", "lower", "round", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array(
|
||||
"date|time" => "getdate",
|
||||
), array(
|
||||
"int|decimal|real|float|money|datetime" => "+/-",
|
||||
"char|text" => "+",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
$drivers = array("server" => "MySQL") + $drivers;
|
||||
|
||||
if (!defined("DRIVER")) {
|
||||
$possible_drivers = array("MySQLi", "MySQL", "PDO_MySQL");
|
||||
define("DRIVER", "server"); // server - backwards compatibility
|
||||
// MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable
|
||||
if (extension_loaded("mysqli")) {
|
||||
|
@ -50,7 +51,7 @@ if (!defined("DRIVER")) {
|
|||
$row = $result->fetch_array();
|
||||
return $row[$field];
|
||||
}
|
||||
|
||||
|
||||
function quote($string) {
|
||||
return "'" . $this->escape_string($string) . "'";
|
||||
}
|
||||
|
@ -266,7 +267,7 @@ if (!defined("DRIVER")) {
|
|||
}
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
$this->pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, !$unbuffered);
|
||||
$this->setAttribute(1000, !$unbuffered); // 1000 - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
|
||||
return parent::query($query, $unbuffered);
|
||||
}
|
||||
}
|
||||
|
@ -305,7 +306,7 @@ if (!defined("DRIVER")) {
|
|||
}
|
||||
return queries($prefix . implode(",\n", $values) . $suffix);
|
||||
}
|
||||
|
||||
|
||||
function slowQuery($query, $timeout) {
|
||||
if (min_version('5.7.8', '10.1.2')) {
|
||||
if (preg_match('~MariaDB~', $this->_conn->server_info)) {
|
||||
|
@ -322,7 +323,7 @@ if (!defined("DRIVER")) {
|
|||
: $idf
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function warnings() {
|
||||
$result = $this->_conn->query("SHOW WARNINGS");
|
||||
if ($result && $result->num_rows) {
|
||||
|
@ -546,7 +547,7 @@ if (!defined("DRIVER")) {
|
|||
"type" => $match[1],
|
||||
"length" => $match[2],
|
||||
"unsigned" => ltrim($match[3] . $match[4]),
|
||||
"default" => ($row["Default"] != "" || preg_match("~char|set~", $match[1]) ? (preg_match('~text~', $match[1]) ? stripslashes(preg_replace("~^'(.*)'\$~", '\1', $row["Default"])) : $row["Default"]) : null),
|
||||
"default" => ($row["Default"] != "" || preg_match("~char|set~", $match[1]) ? $row["Default"] : null),
|
||||
"null" => ($row["Null"] == "YES"),
|
||||
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
||||
"on_update" => (preg_match('~^on update (.+)~i', $row["Extra"], $match) ? $match[1] : ""), //! available since MySQL 5.1.23
|
||||
|
@ -678,17 +679,17 @@ if (!defined("DRIVER")) {
|
|||
function rename_database($name, $collation) {
|
||||
$return = false;
|
||||
if (create_database($name, $collation)) {
|
||||
$tables = array();
|
||||
$views = array();
|
||||
//! move triggers
|
||||
$rename = array();
|
||||
foreach (tables_list() as $table => $type) {
|
||||
if ($type == 'VIEW') {
|
||||
$views[] = $table;
|
||||
} else {
|
||||
$tables[] = $table;
|
||||
}
|
||||
$rename[] = table($table) . " TO " . idf_escape($name) . "." . table($table);
|
||||
}
|
||||
$return = (!$tables && !$views) || move_tables($tables, $views, $name);
|
||||
drop_databases($return ? array(DB) : array());
|
||||
$return = (!$rename || queries("RENAME TABLE " . implode(", ", $rename)));
|
||||
if ($return) {
|
||||
queries("DROP DATABASE " . idf_escape(DB));
|
||||
}
|
||||
restart_session();
|
||||
set_session("dbs", null);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@ -797,27 +798,12 @@ if (!defined("DRIVER")) {
|
|||
* @return bool
|
||||
*/
|
||||
function move_tables($tables, $views, $target) {
|
||||
global $connection;
|
||||
$rename = array();
|
||||
foreach ($tables as $table) {
|
||||
foreach (array_merge($tables, $views) as $table) { // views will report SQL error
|
||||
$rename[] = table($table) . " TO " . idf_escape($target) . "." . table($table);
|
||||
}
|
||||
if (!$rename || queries("RENAME TABLE " . implode(", ", $rename))) {
|
||||
$definitions = array();
|
||||
foreach ($views as $table) {
|
||||
$definitions[table($table)] = view($table);
|
||||
}
|
||||
$connection->select_db($target);
|
||||
$db = idf_escape(DB);
|
||||
foreach ($definitions as $name => $view) {
|
||||
if (!queries("CREATE VIEW $name AS " . str_replace(" $db.", " ", $view["select"])) || !queries("DROP VIEW $db.$name")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return queries("RENAME TABLE " . implode(", ", $rename));
|
||||
//! move triggers
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Copy tables to other schema
|
||||
|
@ -964,7 +950,7 @@ if (!defined("DRIVER")) {
|
|||
* @return Min_Result
|
||||
*/
|
||||
function explain($connection, $query) {
|
||||
return $connection->query("EXPLAIN " . (min_version(5.1) && !min_version(5.7) ? "PARTITIONS " : "") . $query);
|
||||
return $connection->query("EXPLAIN " . (min_version(5.1) ? "PARTITIONS " : "") . $query);
|
||||
}
|
||||
|
||||
/** Get approximate number of rows
|
||||
|
@ -1092,15 +1078,14 @@ if (!defined("DRIVER")) {
|
|||
* @return string
|
||||
*/
|
||||
function unconvert_field($field, $return) {
|
||||
if (preg_match("~binary~", $field["type"] ?? null)) {
|
||||
if (preg_match("~binary~", $field["type"])) {
|
||||
$return = "UNHEX($return)";
|
||||
}
|
||||
if (isset($field["type"]) && $field["type"] == "bit") {
|
||||
if ($field["type"] == "bit") {
|
||||
$return = "CONV($return, 2, 10) + 0";
|
||||
}
|
||||
if (preg_match("~geometry|point|linestring|polygon~", $field["type"] ?? null)) {
|
||||
$prefix = (min_version(8) ? "ST_" : "");
|
||||
$return = $prefix . "GeomFromText($return, $prefix" . "SRID($field[field]))";
|
||||
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
||||
$return = (min_version(8) ? "ST_" : "") . "GeomFromText($return, SRID($field[field]))";
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@ -1113,68 +1098,47 @@ if (!defined("DRIVER")) {
|
|||
return !preg_match("~scheme|sequence|type|view_trigger|materializedview" . (min_version(8) ? "" : "|descidx" . (min_version(5.1) ? "" : "|event|partitioning" . (min_version(5) ? "" : "|routine|trigger|view"))) . "~", $feature);
|
||||
}
|
||||
|
||||
/** Kill a process
|
||||
* @param int
|
||||
* @return bool
|
||||
*/
|
||||
function kill_process($val) {
|
||||
return queries("KILL " . number($val));
|
||||
}
|
||||
|
||||
/** Return query to get connection ID
|
||||
* @return string
|
||||
*/
|
||||
function connection_id(){
|
||||
return "SELECT CONNECTION_ID()";
|
||||
}
|
||||
|
||||
/** Get maximum number of connections
|
||||
* @return int
|
||||
*/
|
||||
function max_connections() {
|
||||
global $connection;
|
||||
return $connection->result("SELECT @@max_connections");
|
||||
}
|
||||
|
||||
/** Get driver config
|
||||
* @return array array('possible_drivers' => , 'jush' => , 'types' => , 'structured_types' => , 'unsigned' => , 'operators' => , 'functions' => , 'grouping' => , 'edit_functions' => )
|
||||
*/
|
||||
function driver_config() {
|
||||
$types = array(); ///< @var array ($type => $maximum_unsigned_length, ...)
|
||||
$structured_types = array(); ///< @var array ($description => array($type, ...), ...)
|
||||
foreach (array(
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20, "decimal" => 66, "float" => 12, "double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4),
|
||||
lang('Strings') => array("char" => 255, "varchar" => 65535, "tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295),
|
||||
lang('Lists') => array("enum" => 65535, "set" => 64),
|
||||
lang('Binary') => array("bit" => 20, "binary" => 255, "varbinary" => 65535, "tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295),
|
||||
lang('Geometry') => array("geometry" => 0, "point" => 0, "linestring" => 0, "polygon" => 0, "multipoint" => 0, "multilinestring" => 0, "multipolygon" => 0, "geometrycollection" => 0),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("MySQLi", "MySQL", "PDO_MySQL"),
|
||||
'jush' => "sql", ///< @var string JUSH identifier
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array("unsigned", "zerofill", "unsigned zerofill"), ///< @var array number variants
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "FIND_IN_SET", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL"), ///< @var array operators used in select
|
||||
'functions' => array("char_length", "date", "distinct", "from_unixtime", "unix_timestamp", "lower", "round", "floor", "ceil", "sec_to_time", "time_to_sec", "upper"), ///< @var array functions used in select
|
||||
'operator_regexp' => 'REGEXP',
|
||||
'grouping' => array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"), ///< @var array grouping functions used in select
|
||||
'edit_functions' => array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only
|
||||
array(
|
||||
"char" => "md5/sha1/password/encrypt/uuid",
|
||||
"binary" => "md5/sha1",
|
||||
"date|time" => "now",
|
||||
), array(
|
||||
number_type() => "+/-",
|
||||
"date" => "+ interval/- interval",
|
||||
"time" => "addtime/subtime",
|
||||
"char|text" => "concat",
|
||||
)
|
||||
),
|
||||
);
|
||||
$jush = "sql"; ///< @var string JUSH identifier
|
||||
$types = array(); ///< @var array ($type => $maximum_unsigned_length, ...)
|
||||
$structured_types = array(); ///< @var array ($description => array($type, ...), ...)
|
||||
foreach (array(
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20, "decimal" => 66, "float" => 12, "double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4),
|
||||
lang('Strings') => array("char" => 255, "varchar" => 65535, "tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295),
|
||||
lang('Lists') => array("enum" => 65535, "set" => 64),
|
||||
lang('Binary') => array("bit" => 20, "binary" => 255, "varbinary" => 65535, "tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295),
|
||||
lang('Geometry') => array("geometry" => 0, "point" => 0, "linestring" => 0, "polygon" => 0, "multipoint" => 0, "multilinestring" => 0, "multipolygon" => 0, "geometrycollection" => 0),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
$unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "FIND_IN_SET", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL"); ///< @var array operators used in select
|
||||
$functions = array("char_length", "date", "from_unixtime", "lower", "round", "floor", "ceil", "sec_to_time", "time_to_sec", "upper"); ///< @var array functions used in select
|
||||
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select
|
||||
$edit_functions = array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only
|
||||
array(
|
||||
"char" => "md5/sha1/password/encrypt/uuid",
|
||||
"binary" => "md5/sha1",
|
||||
"date|time" => "now",
|
||||
), array(
|
||||
number_type() => "+/-",
|
||||
"date" => "+ interval/- interval",
|
||||
"time" => "addtime/subtime",
|
||||
"char|text" => "concat",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
$drivers["oracle"] = "Oracle (beta)";
|
||||
|
||||
if (isset($_GET["oracle"])) {
|
||||
$possible_drivers = array("OCI8", "PDO_OCI");
|
||||
define("DRIVER", "oracle");
|
||||
if (extension_loaded("oci8")) {
|
||||
class Min_DB {
|
||||
var $extension = "oci8", $_link, $_result, $server_info, $affected_rows, $errno, $error;
|
||||
var $_current_db;
|
||||
|
||||
function _error($errno, $error) {
|
||||
if (ini_bool("html_errors")) {
|
||||
|
@ -32,7 +32,6 @@ if (isset($_GET["oracle"])) {
|
|||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_current_db = $database;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -53,7 +52,6 @@ if (isset($_GET["oracle"])) {
|
|||
return new Min_Result($result);
|
||||
}
|
||||
$this->affected_rows = oci_num_rows($result);
|
||||
oci_free_statement($result);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@ -121,7 +119,6 @@ if (isset($_GET["oracle"])) {
|
|||
} elseif (extension_loaded("pdo_oci")) {
|
||||
class Min_DB extends Min_PDO {
|
||||
var $extension = "PDO_OCI";
|
||||
var $_current_db;
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
$this->dsn("oci:dbname=//$server;charset=AL32UTF8", $username, $password);
|
||||
|
@ -129,7 +126,6 @@ if (isset($_GET["oracle"])) {
|
|||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_current_db = $database;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -146,25 +142,6 @@ if (isset($_GET["oracle"])) {
|
|||
return true; // automatic start
|
||||
}
|
||||
|
||||
function insertUpdate($table, $rows, $primary) {
|
||||
global $connection;
|
||||
foreach ($rows as $set) {
|
||||
$update = array();
|
||||
$where = array();
|
||||
foreach ($set as $key => $val) {
|
||||
$update[] = "$key = $val";
|
||||
if (isset($primary[idf_unescape($key)])) {
|
||||
$where[] = "$key = $val";
|
||||
}
|
||||
}
|
||||
if (!(($where && queries("UPDATE " . table($table) . " SET " . implode(", ", $update) . " WHERE " . implode(" AND ", $where)) && $connection->affected_rows)
|
||||
|| queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ")")
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -188,7 +165,7 @@ if (isset($_GET["oracle"])) {
|
|||
}
|
||||
|
||||
function get_databases() {
|
||||
return get_vals("SELECT tablespace_name FROM user_tablespaces ORDER BY 1");
|
||||
return get_vals("SELECT tablespace_name FROM user_tablespaces");
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
|
@ -216,51 +193,22 @@ if (isset($_GET["oracle"])) {
|
|||
return $connection->result("SELECT USER FROM DUAL");
|
||||
}
|
||||
|
||||
function get_current_db() {
|
||||
global $connection;
|
||||
$db = $connection->_current_db ? $connection->_current_db : DB;
|
||||
unset($connection->_current_db);
|
||||
return $db;
|
||||
}
|
||||
|
||||
function where_owner($prefix, $owner = "owner") {
|
||||
if (!$_GET["ns"]) {
|
||||
return '';
|
||||
}
|
||||
return "$prefix$owner = sys_context('USERENV', 'CURRENT_SCHEMA')";
|
||||
}
|
||||
|
||||
function views_table($columns) {
|
||||
$owner = where_owner('');
|
||||
return "(SELECT $columns FROM all_views WHERE " . ($owner ? $owner : "rownum < 0") . ")";
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
$view = views_table("view_name");
|
||||
$owner = where_owner(" AND ");
|
||||
return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "$owner
|
||||
UNION SELECT view_name, 'view' FROM $view
|
||||
return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "
|
||||
UNION SELECT view_name, 'view' FROM user_views
|
||||
ORDER BY 1"
|
||||
); //! views don't have schema
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($databases as $db) {
|
||||
$return[$db] = $connection->result("SELECT COUNT(*) FROM all_tables WHERE tablespace_name = " . q($db));
|
||||
}
|
||||
return $return;
|
||||
return array();
|
||||
}
|
||||
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
$search = q($name);
|
||||
$db = get_current_db();
|
||||
$view = views_table("view_name");
|
||||
$owner = where_owner(" AND ");
|
||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q($db) . $owner . ($name != "" ? " AND table_name = $search" : "") . "
|
||||
UNION SELECT view_name, 'view', 0, 0 FROM $view" . ($name != "" ? " WHERE view_name = $search" : "") . "
|
||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q(DB) . ($name != "" ? " AND table_name = $search" : "") . "
|
||||
UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE view_name = $search" : "") . "
|
||||
ORDER BY 1"
|
||||
) as $row) {
|
||||
if ($name != "") {
|
||||
|
@ -281,12 +229,11 @@ ORDER BY 1"
|
|||
|
||||
function fields($table) {
|
||||
$return = array();
|
||||
$owner = where_owner(" AND ");
|
||||
foreach (get_rows("SELECT * FROM all_tab_columns WHERE table_name = " . q($table) . "$owner ORDER BY column_id") as $row) {
|
||||
foreach (get_rows("SELECT * FROM all_tab_columns WHERE table_name = " . q($table) . " ORDER BY column_id") as $row) {
|
||||
$type = $row["DATA_TYPE"];
|
||||
$length = "$row[DATA_PRECISION],$row[DATA_SCALE]";
|
||||
if ($length == ",") {
|
||||
$length = $row["CHAR_COL_DECL_LENGTH"];
|
||||
$length = $row["DATA_LENGTH"];
|
||||
} //! int
|
||||
$return[$row["COLUMN_NAME"]] = array(
|
||||
"field" => $row["COLUMN_NAME"],
|
||||
|
@ -307,27 +254,22 @@ ORDER BY 1"
|
|||
|
||||
function indexes($table, $connection2 = null) {
|
||||
$return = array();
|
||||
$owner = where_owner(" AND ", "aic.table_owner");
|
||||
foreach (get_rows("SELECT aic.*, ac.constraint_type, atc.data_default
|
||||
FROM all_ind_columns aic
|
||||
LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
|
||||
LEFT JOIN all_tab_cols atc ON aic.column_name = atc.column_name AND aic.table_name = atc.table_name AND aic.index_owner = atc.owner
|
||||
WHERE aic.table_name = " . q($table) . "$owner
|
||||
ORDER BY ac.constraint_type, aic.column_position", $connection2) as $row) {
|
||||
foreach (get_rows("SELECT uic.*, uc.constraint_type
|
||||
FROM user_ind_columns uic
|
||||
LEFT JOIN user_constraints uc ON uic.index_name = uc.constraint_name AND uic.table_name = uc.table_name
|
||||
WHERE uic.table_name = " . q($table) . "
|
||||
ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
$index_name = $row["INDEX_NAME"];
|
||||
$column_name = $row["DATA_DEFAULT"];
|
||||
$column_name = ($column_name ? trim($column_name, '"') : $row["COLUMN_NAME"]); // trim - possibly wrapped in quotes but never contains quotes inside
|
||||
$return[$index_name]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
||||
$return[$index_name]["columns"][] = $column_name;
|
||||
$return[$index_name]["columns"][] = $row["COLUMN_NAME"];
|
||||
$return[$index_name]["lengths"][] = ($row["CHAR_LENGTH"] && $row["CHAR_LENGTH"] != $row["COLUMN_LENGTH"] ? $row["CHAR_LENGTH"] : null);
|
||||
$return[$index_name]["descs"][] = ($row["DESCEND"] && $row["DESCEND"] == "DESC" ? '1' : null);
|
||||
$return[$index_name]["descs"][] = ($row["DESCEND"] ? '1' : null);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function view($name) {
|
||||
$view = views_table("view_name, text");
|
||||
$rows = get_rows('SELECT text "select" FROM ' . $view . ' WHERE view_name = ' . q($name));
|
||||
$rows = get_rows('SELECT text "select" FROM user_views WHERE view_name = ' . q($name));
|
||||
return reset($rows);
|
||||
}
|
||||
|
||||
|
@ -352,25 +294,13 @@ ORDER BY ac.constraint_type, aic.column_position", $connection2) as $row) {
|
|||
function found_rows($table_status, $where) {
|
||||
}
|
||||
|
||||
function auto_increment() {
|
||||
return "";
|
||||
}
|
||||
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
$alter = $drop = array();
|
||||
$orig_fields = ($table ? fields($table) : array());
|
||||
foreach ($fields as $field) {
|
||||
$val = $field[1];
|
||||
if ($val && $field[0] != "" && idf_escape($field[0]) != $val[0]) {
|
||||
queries("ALTER TABLE " . table($table) . " RENAME COLUMN " . idf_escape($field[0]) . " TO $val[0]");
|
||||
}
|
||||
$orig_field = $orig_fields[$field[0]];
|
||||
if ($val && $orig_field) {
|
||||
$old = process_field($orig_field, $orig_field);
|
||||
if ($val[2] == $old[2]) {
|
||||
$val[2] = "";
|
||||
}
|
||||
}
|
||||
if ($val) {
|
||||
$alter[] = ($table != "" ? ($field[0] != "" ? "MODIFY (" : "ADD (") : " ") . implode($val) . ($table != "" ? ")" : ""); //! error with name change only
|
||||
} else {
|
||||
|
@ -386,35 +316,6 @@ ORDER BY ac.constraint_type, aic.column_position", $connection2) as $row) {
|
|||
;
|
||||
}
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
$drop = array();
|
||||
$queries = array();
|
||||
foreach ($alter as $val) {
|
||||
if ($val[0] != "INDEX") {
|
||||
//! descending UNIQUE indexes results in syntax error
|
||||
$val[2] = preg_replace('~ DESC$~', '', $val[2]);
|
||||
$create = ($val[2] == "DROP"
|
||||
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
||||
: "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . "(" . implode(", ", $val[2]) . ")"
|
||||
);
|
||||
array_unshift($queries, "ALTER TABLE " . table($table) . $create);
|
||||
} elseif ($val[2] == "DROP") {
|
||||
$drop[] = idf_escape($val[1]);
|
||||
} else {
|
||||
$queries[] = "CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " (" . implode(", ", $val[2]) . ")";
|
||||
}
|
||||
}
|
||||
if ($drop) {
|
||||
array_unshift($queries, "DROP INDEX " . implode(", ", $drop));
|
||||
}
|
||||
foreach ($queries as $query) {
|
||||
if (!queries($query)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
$return = array();
|
||||
$query = "SELECT c_list.CONSTRAINT_NAME as NAME,
|
||||
|
@ -458,8 +359,7 @@ AND c_src.TABLE_NAME = " . q($table);
|
|||
}
|
||||
|
||||
function schemas() {
|
||||
$return = get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX')) ORDER BY 1");
|
||||
return ($return ? $return : get_vals("SELECT DISTINCT owner FROM all_tables WHERE tablespace_name = " . q(DB) . " ORDER BY 1"));
|
||||
return get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX'))");
|
||||
}
|
||||
|
||||
function get_schema() {
|
||||
|
@ -501,40 +401,33 @@ ORDER BY PROCESS
|
|||
}
|
||||
|
||||
function support($feature) {
|
||||
return preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view)$~', $feature); //!
|
||||
return preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view|view_trigger)$~', $feature); //!
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array(
|
||||
lang('Numbers') => array("number" => 38, "binary_float" => 12, "binary_double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "timestamp" => 29, "interval year" => 12, "interval day" => 28), //! year(), day() to second()
|
||||
lang('Strings') => array("char" => 2000, "varchar2" => 4000, "nchar" => 2000, "nvarchar2" => 4000, "clob" => 4294967295, "nclob" => 4294967295),
|
||||
lang('Binary') => array("raw" => 2000, "long raw" => 2147483648, "blob" => 4294967295, "bfile" => 4294967296),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("OCI8", "PDO_OCI"),
|
||||
'jush' => "oracle",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL"),
|
||||
'functions' => array("distinct", "length", "lower", "round", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array( //! no parentheses
|
||||
"date" => "current_date",
|
||||
"timestamp" => "current_timestamp",
|
||||
), array(
|
||||
"number|float|double" => "+/-",
|
||||
"date|timestamp" => "+ interval/- interval",
|
||||
"char|clob" => "||",
|
||||
)
|
||||
),
|
||||
);
|
||||
$jush = "oracle";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array(
|
||||
lang('Numbers') => array("number" => 38, "binary_float" => 12, "binary_double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "timestamp" => 29, "interval year" => 12, "interval day" => 28), //! year(), day() to second()
|
||||
lang('Strings') => array("char" => 2000, "varchar2" => 4000, "nchar" => 2000, "nvarchar2" => 4000, "clob" => 4294967295, "nclob" => 4294967295),
|
||||
lang('Binary') => array("raw" => 2000, "long raw" => 2147483648, "blob" => 4294967295, "bfile" => 4294967296),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL");
|
||||
$functions = array("length", "lower", "round", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array( //! no parentheses
|
||||
"date" => "current_date",
|
||||
"timestamp" => "current_timestamp",
|
||||
), array(
|
||||
"number|float|double" => "+/-",
|
||||
"date|timestamp" => "+ interval/- interval",
|
||||
"char|clob" => "||",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
$drivers["pgsql"] = "PostgreSQL";
|
||||
|
||||
if (isset($_GET["pgsql"])) {
|
||||
$possible_drivers = array("PgSQL", "PDO_PgSQL");
|
||||
define("DRIVER", "pgsql");
|
||||
if (extension_loaded("pgsql")) {
|
||||
class Min_DB {
|
||||
|
@ -40,7 +41,7 @@ if (isset($_GET["pgsql"])) {
|
|||
}
|
||||
|
||||
function value($val, $field) {
|
||||
return ($field["type"] == "bytea" && $val !== null ? pg_unescape_bytea($val) : $val);
|
||||
return ($field["type"] == "bytea" ? pg_unescape_bytea($val) : $val);
|
||||
}
|
||||
|
||||
function quoteBinary($string) {
|
||||
|
@ -149,7 +150,8 @@ if (isset($_GET["pgsql"])) {
|
|||
function connect($server, $username, $password) {
|
||||
global $adminer;
|
||||
$db = $adminer->database();
|
||||
$this->dsn("pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' client_encoding=utf8 dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", $username, $password); //! client_encoding is supported since 9.1 but we can't yet use min_version here
|
||||
$string = "pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' options='-c client_encoding=utf8'";
|
||||
$this->dsn("$string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", $username, $password);
|
||||
//! connect without DB in case of an error
|
||||
return true;
|
||||
}
|
||||
|
@ -284,13 +286,13 @@ if (isset($_GET["pgsql"])) {
|
|||
function limit1($table, $query, $where, $separator = "\n") {
|
||||
return (preg_match('~^INTO~', $query)
|
||||
? limit($query, $where, 1, 0, $separator)
|
||||
: " $query" . (is_view(table_status1($table)) ? $where : $separator . "WHERE ctid = (SELECT ctid FROM " . table($table) . $where . $separator . "LIMIT 1)")
|
||||
: " $query" . (is_view(table_status1($table)) ? $where : " WHERE ctid = (SELECT ctid FROM " . table($table) . $where . $separator . "LIMIT 1)")
|
||||
);
|
||||
}
|
||||
|
||||
function db_collation($db, $collations) {
|
||||
global $connection;
|
||||
return $connection->result("SELECT datcollate FROM pg_database WHERE datname = " . q($db));
|
||||
return $connection->result("SHOW LC_COLLATE"); //! respect $db
|
||||
}
|
||||
|
||||
function engines() {
|
||||
|
@ -304,7 +306,7 @@ if (isset($_GET["pgsql"])) {
|
|||
|
||||
function tables_list() {
|
||||
$query = "SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";
|
||||
if (support('materializedview')) { // ' - support("materializedview") could be removed by compile.php
|
||||
if (support('materializedview')) {
|
||||
$query .= "
|
||||
UNION ALL
|
||||
SELECT matviewname, 'MATERIALIZED VIEW'
|
||||
|
@ -325,7 +327,7 @@ ORDER BY 1";
|
|||
foreach (get_rows("SELECT c.relname AS \"Name\", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'm' THEN 'materialized view' ELSE 'view' END AS \"Engine\", pg_relation_size(c.oid) AS \"Data_length\", pg_total_relation_size(c.oid) - pg_relation_size(c.oid) AS \"Index_length\", obj_description(c.oid, 'pg_class') AS \"Comment\", " . (min_version(12) ? "''" : "CASE WHEN c.relhasoids THEN 'oid' ELSE '' END") . " AS \"Oid\", c.reltuples as \"Rows\", n.nspname
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON(n.nspname = current_schema() AND n.oid = c.relnamespace)
|
||||
WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
||||
WHERE relkind IN ('r', 'm', 'v', 'f')
|
||||
" . ($name != "" ? "AND relname = " . q($name) : "ORDER BY relname")
|
||||
) as $row) { //! Index_length, Auto_increment
|
||||
$return[$row["Name"]] = $row;
|
||||
|
@ -348,7 +350,9 @@ WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
|||
'timestamp with time zone' => 'timestamptz',
|
||||
);
|
||||
|
||||
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment" . (min_version(10) ? ", a.attidentity" : "") . "
|
||||
$identity_column = min_version(10) ? "(a.attidentity = 'd')::int" : '0';
|
||||
|
||||
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment, $identity_column AS identity
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON c.relnamespace = n.oid
|
||||
JOIN pg_attribute a ON c.oid = a.attrelid
|
||||
|
@ -371,14 +375,14 @@ ORDER BY a.attnum"
|
|||
$row["type"] = $type;
|
||||
$row["full_type"] = $row["type"] . $length . $addon . $array;
|
||||
}
|
||||
if (in_array($row['attidentity'], array('a', 'd'))) {
|
||||
$row['default'] = 'GENERATED ' . ($row['attidentity'] == 'd' ? 'BY DEFAULT' : 'ALWAYS') . ' AS IDENTITY';
|
||||
if ($row['identity']) {
|
||||
$row['default'] = 'GENERATED BY DEFAULT AS IDENTITY';
|
||||
}
|
||||
$row["null"] = !$row["attnotnull"];
|
||||
$row["auto_increment"] = $row['attidentity'] || preg_match('~^nextval\(~i', $row["default"]);
|
||||
$row["auto_increment"] = $row['identity'] || preg_match('~^nextval\(~i', $row["default"]);
|
||||
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
|
||||
if (preg_match('~(.+)::[^,)]+(.*)~', $row["default"], $match)) {
|
||||
$row["default"] = ($match[1] == "NULL" ? null : idf_unescape($match[1]) . $match[2]);
|
||||
if (preg_match('~(.+)::[^)]+(.*)~', $row["default"], $match)) {
|
||||
$row["default"] = ($match[1] == "NULL" ? null : (($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2]));
|
||||
}
|
||||
$return[$row["field"]] = $row;
|
||||
}
|
||||
|
@ -393,7 +397,7 @@ ORDER BY a.attnum"
|
|||
$return = array();
|
||||
$table_oid = $connection2->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($table));
|
||||
$columns = get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0", $connection2);
|
||||
foreach (get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, (indpred IS NOT NULL)::int as indispartial FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) {
|
||||
foreach (get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption , (indpred IS NOT NULL)::int as indispartial FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) {
|
||||
$relname = $row["relname"];
|
||||
$return[$relname]["type"] = ($row["indispartial"] ? "INDEX" : ($row["indisprimary"] ? "PRIMARY" : ($row["indisunique"] ? "UNIQUE" : "INDEX")));
|
||||
$return[$relname]["columns"] = array();
|
||||
|
@ -418,12 +422,12 @@ WHERE conrelid = (SELECT pc.oid FROM pg_class AS pc INNER JOIN pg_namespace AS p
|
|||
AND contype = 'f'::char
|
||||
ORDER BY conkey, conname") as $row) {
|
||||
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
||||
$row['source'] = array_map('idf_unescape', array_map('trim', explode(',', $match[1])));
|
||||
$row['source'] = array_map('trim', explode(',', $match[1]));
|
||||
if (preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~', $match[2], $match2)) {
|
||||
$row['ns'] = idf_unescape($match2[2]);
|
||||
$row['table'] = idf_unescape($match2[4]);
|
||||
$row['ns'] = str_replace('""', '"', preg_replace('~^"(.+)"$~', '\1', $match2[2]));
|
||||
$row['table'] = str_replace('""', '"', preg_replace('~^"(.+)"$~', '\1', $match2[4]));
|
||||
}
|
||||
$row['target'] = array_map('idf_unescape', array_map('trim', explode(',', $match[3])));
|
||||
$row['target'] = array_map('trim', explode(',', $match[3]));
|
||||
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||
$row['on_update'] = (preg_match("~ON UPDATE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||
$return[$row['conname']] = $row;
|
||||
|
@ -432,26 +436,9 @@ ORDER BY conkey, conname") as $row) {
|
|||
return $return;
|
||||
}
|
||||
|
||||
function constraints($table) {
|
||||
global $on_actions;
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT conname, consrc
|
||||
FROM pg_catalog.pg_constraint
|
||||
INNER JOIN pg_catalog.pg_namespace ON pg_constraint.connamespace = pg_namespace.oid
|
||||
INNER JOIN pg_catalog.pg_class ON pg_constraint.conrelid = pg_class.oid AND pg_constraint.connamespace = pg_class.relnamespace
|
||||
WHERE pg_constraint.contype = 'c'
|
||||
AND conrelid != 0 -- handle only CONSTRAINTs here, not TYPES
|
||||
AND nspname = current_schema()
|
||||
AND relname = " . q($table) . "
|
||||
ORDER BY connamespace, conname") as $row) {
|
||||
$return[$row['conname']] = $row['consrc'];
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function view($name) {
|
||||
global $connection;
|
||||
return array("select" => trim($connection->result("SELECT pg_get_viewdef(" . $connection->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($name)) . ")")));
|
||||
return array("select" => trim($connection->result("SELECT pg_get_viewdef(" . $connection->result("SELECT oid FROM pg_class WHERE relname = " . q($name)) . ")")));
|
||||
}
|
||||
|
||||
function collations() {
|
||||
|
@ -505,14 +492,11 @@ ORDER BY connamespace, conname") as $row) {
|
|||
} else {
|
||||
$val5 = $val[5];
|
||||
unset($val[5]);
|
||||
if (isset($val[6]) && $field[0] == "") { // auto_increment
|
||||
$val[1] = ($val[1] == "bigint" ? " big" : " ") . "serial";
|
||||
}
|
||||
if ($field[0] == "") {
|
||||
if (isset($val[6])) { // auto_increment
|
||||
$val[1] = ($val[1] == " bigint" ? " big" : ($val[1] == " smallint" ? " small" : " ")) . "serial";
|
||||
}
|
||||
$alter[] = ($table != "" ? "ADD " : " ") . implode($val);
|
||||
if (isset($val[6])) {
|
||||
$alter[] = ($table != "" ? "ADD" : " ") . " PRIMARY KEY ($val[0])";
|
||||
}
|
||||
} else {
|
||||
if ($column != $val[0]) {
|
||||
$queries[] = "ALTER TABLE " . table($name) . " RENAME $column TO $val[0]";
|
||||
|
@ -534,7 +518,7 @@ ORDER BY connamespace, conname") as $row) {
|
|||
} elseif ($alter) {
|
||||
array_unshift($queries, "ALTER TABLE " . table($table) . "\n" . implode(",\n", $alter));
|
||||
}
|
||||
if ($comment !== null) {
|
||||
if ($table != "" || $comment != "") {
|
||||
$queries[] = "COMMENT ON TABLE " . table($name) . " IS " . q($comment);
|
||||
}
|
||||
if ($auto_increment != "") {
|
||||
|
@ -608,34 +592,21 @@ ORDER BY connamespace, conname") as $row) {
|
|||
return true;
|
||||
}
|
||||
|
||||
function trigger($name, $table) {
|
||||
function trigger($name, $table = null) {
|
||||
if ($name == "") {
|
||||
return array("Statement" => "EXECUTE PROCEDURE ()");
|
||||
}
|
||||
$columns = array();
|
||||
$where = "WHERE trigger_schema = current_schema() AND event_object_table = " . q($table) . " AND trigger_name = " . q($name);
|
||||
foreach (get_rows("SELECT * FROM information_schema.triggered_update_columns $where") as $row) {
|
||||
$columns[] = $row["event_object_column"];
|
||||
if ($table === null) {
|
||||
$table = $_GET['trigger'];
|
||||
}
|
||||
$return = array();
|
||||
foreach (get_rows('SELECT trigger_name AS "Trigger", action_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement" FROM information_schema.triggers ' . "$where ORDER BY event_manipulation DESC") as $row) {
|
||||
if ($columns && $row["Event"] == "UPDATE") {
|
||||
$row["Event"] .= " OF";
|
||||
}
|
||||
$row["Of"] = implode(", ", $columns);
|
||||
if ($return) {
|
||||
$row["Event"] .= " OR $return[Event]";
|
||||
}
|
||||
$return = $row;
|
||||
}
|
||||
return $return;
|
||||
$rows = get_rows('SELECT t.trigger_name AS "Trigger", t.action_timing AS "Timing", (SELECT STRING_AGG(event_manipulation, \' OR \') FROM information_schema.triggers WHERE event_object_table = t.event_object_table AND trigger_name = t.trigger_name ) AS "Events", t.event_manipulation AS "Event", \'FOR EACH \' || t.action_orientation AS "Type", t.action_statement AS "Statement" FROM information_schema.triggers t WHERE t.event_object_table = ' . q($table) . ' AND t.trigger_name = ' . q($name));
|
||||
return reset($rows);
|
||||
}
|
||||
|
||||
function triggers($table) {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = " . q($table)) as $row) {
|
||||
$trigger = trigger($row["trigger_name"], $table);
|
||||
$return[$trigger["Trigger"]] = array($trigger["Timing"], $trigger["Event"]);
|
||||
foreach (get_rows("SELECT * FROM information_schema.triggers WHERE event_object_table = " . q($table)) as $row) {
|
||||
$return[$row["trigger_name"]] = array($row["action_timing"], $row["event_manipulation"]);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@ -643,7 +614,7 @@ ORDER BY connamespace, conname") as $row) {
|
|||
function trigger_options() {
|
||||
return array(
|
||||
"Timing" => array("BEFORE", "AFTER"),
|
||||
"Event" => array("INSERT", "UPDATE", "UPDATE OF", "DELETE", "INSERT OR UPDATE", "INSERT OR UPDATE OF", "DELETE OR INSERT", "DELETE OR UPDATE", "DELETE OR UPDATE OF", "DELETE OR INSERT OR UPDATE", "DELETE OR INSERT OR UPDATE OF"),
|
||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
||||
"Type" => array("FOR EACH ROW", "FOR EACH STATEMENT"),
|
||||
);
|
||||
}
|
||||
|
@ -733,23 +704,6 @@ AND typelem = 0"
|
|||
return $return;
|
||||
}
|
||||
|
||||
// create_sql() produces CREATE TABLE without FK CONSTRAINTs
|
||||
// foreign_keys_sql() produces all FK CONSTRAINTs as ALTER TABLE ... ADD CONSTRAINT
|
||||
// so that all FKs can be added after all tables have been created, avoiding any need to reorder CREATE TABLE statements in order of their FK dependencies
|
||||
function foreign_keys_sql($table) {
|
||||
$return = "";
|
||||
|
||||
$status = table_status($table);
|
||||
$fkeys = foreign_keys($table);
|
||||
ksort($fkeys);
|
||||
|
||||
foreach ($fkeys as $fkey_name => $fkey) {
|
||||
$return .= "ALTER TABLE ONLY " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " ADD CONSTRAINT " . idf_escape($fkey_name) . " $fkey[definition] " . ($fkey['deferrable'] ? 'DEFERRABLE' : 'NOT DEFERRABLE') . ";\n";
|
||||
}
|
||||
|
||||
return ($return ? "$return\n" : $return);
|
||||
}
|
||||
|
||||
function create_sql($table, $auto_increment, $style) {
|
||||
global $connection;
|
||||
$return = '';
|
||||
|
@ -764,7 +718,8 @@ AND typelem = 0"
|
|||
$fields = fields($table);
|
||||
$indexes = indexes($table);
|
||||
ksort($indexes);
|
||||
$constraints = constraints($table);
|
||||
$fkeys = foreign_keys($table);
|
||||
ksort($fkeys);
|
||||
|
||||
if (!$status || empty($fields)) {
|
||||
return false;
|
||||
|
@ -787,7 +742,7 @@ AND typelem = 0"
|
|||
: "SELECT * FROM $sequence_name"
|
||||
));
|
||||
$sequences[] = ($style == "DROP+CREATE" ? "DROP SEQUENCE IF EXISTS $sequence_name;\n" : "")
|
||||
. "CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value]" . ($auto_increment && $sq['last_value'] ? " START $sq[last_value]" : "") . " CACHE $sq[cache_value];";
|
||||
. "CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value] START " . ($auto_increment ? $sq['last_value'] : 1) . " CACHE $sq[cache_value];";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -804,8 +759,9 @@ AND typelem = 0"
|
|||
}
|
||||
}
|
||||
|
||||
foreach ($constraints as $conname => $consrc) {
|
||||
$return_parts[] = "CONSTRAINT " . idf_escape($conname) . " CHECK $consrc";
|
||||
// foreign keys
|
||||
foreach ($fkeys as $fkey_name => $fkey) {
|
||||
$return_parts[] = "CONSTRAINT " . idf_escape($fkey_name) . " $fkey[definition] " . ($fkey['deferrable'] ? 'DEFERRABLE' : 'NOT DEFERRABLE');
|
||||
}
|
||||
|
||||
$return .= implode(",\n ", $return_parts) . "\n) WITH (oids = " . ($status['Oid'] ? 'true' : 'false') . ");";
|
||||
|
@ -844,7 +800,7 @@ AND typelem = 0"
|
|||
$return = "";
|
||||
foreach (triggers($table) as $trg_id => $trg) {
|
||||
$trigger = trigger($trg_id, $status['Name']);
|
||||
$return .= "\nCREATE TRIGGER " . idf_escape($trigger['Trigger']) . " $trigger[Timing] $trigger[Event] ON " . idf_escape($status["nspname"]) . "." . idf_escape($status['Name']) . " $trigger[Type] $trigger[Statement];;\n";
|
||||
$return .= "\nCREATE TRIGGER " . idf_escape($trigger['Trigger']) . " $trigger[Timing] $trigger[Events] ON " . idf_escape($status["nspname"]) . "." . idf_escape($status['Name']) . " $trigger[Type] $trigger[Statement];;\n";
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@ -889,40 +845,32 @@ AND typelem = 0"
|
|||
return $connection->result("SHOW max_connections");
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! arrays
|
||||
lang('Numbers') => array("smallint" => 5, "integer" => 10, "bigint" => 19, "boolean" => 1, "numeric" => 0, "real" => 7, "double precision" => 16, "money" => 20),
|
||||
lang('Date and time') => array("date" => 13, "time" => 17, "timestamp" => 20, "timestamptz" => 21, "interval" => 0),
|
||||
lang('Strings') => array("character" => 0, "character varying" => 0, "text" => 0, "tsquery" => 0, "tsvector" => 0, "uuid" => 0, "xml" => 0),
|
||||
lang('Binary') => array("bit" => 0, "bit varying" => 0, "bytea" => 0),
|
||||
lang('Network') => array("cidr" => 43, "inet" => 43, "macaddr" => 17, "txid_snapshot" => 0),
|
||||
lang('Geometry') => array("box" => 0, "circle" => 0, "line" => 0, "lseg" => 0, "path" => 0, "point" => 0, "polygon" => 0),
|
||||
) as $key => $val) { //! can be retrieved from pg_type
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("PgSQL", "PDO_PgSQL"),
|
||||
'jush' => "pgsql",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "~", "~*", "!~", "!~*", "LIKE", "LIKE %%", "ILIKE", "ILIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"), // no "SQL" to avoid CSRF
|
||||
'operator_regexp' => '~*',
|
||||
'functions' => array("char_length", "distinct", "lower", "round", "to_hex", "to_timestamp", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array(
|
||||
"char" => "md5",
|
||||
"date|time" => "now",
|
||||
), array(
|
||||
number_type() => "+/-",
|
||||
"date|time" => "+ interval/- interval", //! escape
|
||||
"char|text" => "||",
|
||||
)
|
||||
),
|
||||
);
|
||||
$jush = "pgsql";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! arrays
|
||||
lang('Numbers') => array("smallint" => 5, "integer" => 10, "bigint" => 19, "boolean" => 1, "numeric" => 0, "real" => 7, "double precision" => 16, "money" => 20),
|
||||
lang('Date and time') => array("date" => 13, "time" => 17, "timestamp" => 20, "timestamptz" => 21, "interval" => 0),
|
||||
lang('Strings') => array("character" => 0, "character varying" => 0, "text" => 0, "tsquery" => 0, "tsvector" => 0, "uuid" => 0, "xml" => 0),
|
||||
lang('Binary') => array("bit" => 0, "bit varying" => 0, "bytea" => 0),
|
||||
lang('Network') => array("cidr" => 43, "inet" => 43, "macaddr" => 17, "txid_snapshot" => 0),
|
||||
lang('Geometry') => array("box" => 0, "circle" => 0, "line" => 0, "lseg" => 0, "path" => 0, "point" => 0, "polygon" => 0),
|
||||
) as $key => $val) { //! can be retrieved from pg_type
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "ILIKE", "ILIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // no "SQL" to avoid CSRF
|
||||
$functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array(
|
||||
"char" => "md5",
|
||||
"date|time" => "now",
|
||||
), array(
|
||||
number_type() => "+/-",
|
||||
"date|time" => "+ interval/- interval", //! escape
|
||||
"char|text" => "||",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,54 +1,19 @@
|
|||
<?php
|
||||
add_driver("simpledb", "SimpleDB");
|
||||
$drivers["simpledb"] = "SimpleDB";
|
||||
|
||||
if (isset($_GET["simpledb"])) {
|
||||
$possible_drivers = array("SimpleXML + allow_url_fopen");
|
||||
define("DRIVER", "simpledb");
|
||||
|
||||
if (class_exists('SimpleXMLElement') && ini_bool('allow_url_fopen')) {
|
||||
class Min_DB {
|
||||
var $extension = "SimpleXML", $server_info = '2009-04-15', $error, $timeout, $next, $affected_rows, $_url, $_result;
|
||||
|
||||
/**
|
||||
* @param string $server
|
||||
* @param string $password
|
||||
* @return bool
|
||||
*/
|
||||
function connect($server, $password) {
|
||||
if ($server == '' || $password == '') {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
return false;
|
||||
}
|
||||
|
||||
$parts = parse_url($server);
|
||||
|
||||
if (!$parts || !isset($parts['host']) || !preg_match('~^sdb\.([a-z0-9-]+\.)?amazonaws\.com$~i', $parts['host']) ||
|
||||
isset($parts['port'])
|
||||
) {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->_url = build_http_url($server, '', '', '');
|
||||
|
||||
return (bool) $this->workaroundLoginRequest('ListDomains', ['MaxNumberOfDomains' => 1]);
|
||||
}
|
||||
|
||||
// FIXME: This is so wrong :-( Move sdb_request to Min_DB!
|
||||
private function workaroundLoginRequest($action, $params = array()) {
|
||||
global $connection;
|
||||
|
||||
$connection = $this;
|
||||
$result = sdb_request($action, $params);
|
||||
$connection = null;
|
||||
|
||||
return $result;
|
||||
}
|
||||
var $extension = "SimpleXML", $server_info = '2009-04-15', $error, $timeout, $next, $affected_rows, $_result;
|
||||
|
||||
function select_db($database) {
|
||||
return ($database == "domain");
|
||||
}
|
||||
|
||||
function query($query) {
|
||||
function query($query, $unbuffered = false) {
|
||||
$params = array('SelectExpression' => $query, 'ConsistentRead' => 'true');
|
||||
if ($this->next) {
|
||||
$params['NextToken'] = $this->next;
|
||||
|
@ -284,15 +249,11 @@ if (isset($_GET["simpledb"])) {
|
|||
|
||||
function connect() {
|
||||
global $adminer;
|
||||
|
||||
$connection = new Min_DB;
|
||||
|
||||
list($server, , $password) = $adminer->credentials();
|
||||
if ($connection->connect($server, $password)) {
|
||||
return $connection;
|
||||
list(, , $password) = $adminer->credentials();
|
||||
if ($password != "") {
|
||||
return lang('Database does not support password.');
|
||||
}
|
||||
|
||||
return $connection->error;
|
||||
return new Min_DB;
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
|
@ -462,16 +423,13 @@ if (isset($_GET["simpledb"])) {
|
|||
$query = str_replace('%7E', '~', substr($query, 1));
|
||||
$query .= "&Signature=" . urlencode(base64_encode(hmac('sha1', "POST\n" . preg_replace('~^https?://~', '', $host) . "\n/\n$query", $secret, true)));
|
||||
@ini_set('track_errors', 1); // @ - may be disabled
|
||||
|
||||
$file = @file_get_contents($connection->_url, false, stream_context_create(array('http' => array(
|
||||
$file = @file_get_contents((preg_match('~^https?://~', $host) ? $host : "http://$host"), false, stream_context_create(array('http' => array(
|
||||
'method' => 'POST', // may not fit in URL with GET
|
||||
'content' => $query,
|
||||
'ignore_errors' => 1,
|
||||
'follow_location' => 0,
|
||||
'max_redirects' => 0,
|
||||
'ignore_errors' => 1, // available since PHP 5.2.10
|
||||
))));
|
||||
if (!$file) {
|
||||
$connection->error = error_get_last()['message'];
|
||||
$connection->error = $php_errormsg;
|
||||
return false;
|
||||
}
|
||||
libxml_use_internal_errors(true);
|
||||
|
@ -518,14 +476,9 @@ if (isset($_GET["simpledb"])) {
|
|||
return $return;
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
return array(
|
||||
'possible_drivers' => array("SimpleXML + allow_url_fopen"),
|
||||
'jush' => "simpledb",
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "IS NOT NULL"),
|
||||
'functions' => array(),
|
||||
'grouping' => array("count"),
|
||||
'edit_functions' => array(array("json")),
|
||||
);
|
||||
}
|
||||
$jush = "simpledb";
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "IS NOT NULL");
|
||||
$functions = array();
|
||||
$grouping = array("count");
|
||||
$edit_functions = array(array("json"));
|
||||
}
|
|
@ -3,6 +3,7 @@ $drivers["sqlite"] = "SQLite 3";
|
|||
$drivers["sqlite2"] = "SQLite 2";
|
||||
|
||||
if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
$possible_drivers = array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite");
|
||||
define("DRIVER", (isset($_GET["sqlite"]) ? "sqlite" : "sqlite2"));
|
||||
if (class_exists(isset($_GET["sqlite"]) ? "SQLite3" : "SQLiteDatabase")) {
|
||||
if (isset($_GET["sqlite"])) {
|
||||
|
@ -140,7 +141,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||
}
|
||||
$return = array();
|
||||
foreach ($row as $key => $val) {
|
||||
$return[idf_unescape($key)] = $val;
|
||||
$return[($key[0] == '"' ? idf_unescape($key) : $key)] = $val;
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@ -190,7 +191,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(preg_match("~(^[/\\\\]|:)~", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||
parent::__construct($filename);
|
||||
$this->query("PRAGMA foreign_keys = 1");
|
||||
$this->query("PRAGMA busy_timeout = 500");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -676,7 +676,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||
return array(
|
||||
"Timing" => strtoupper($match[1]),
|
||||
"Event" => strtoupper($match[2]) . ($of ? " OF" : ""),
|
||||
"Of" => idf_unescape($of),
|
||||
"Of" => ($of[0] == '`' || $of[0] == '"' ? idf_unescape($of) : $of),
|
||||
"Trigger" => $name,
|
||||
"Statement" => $match[4],
|
||||
);
|
||||
|
@ -784,26 +784,20 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||
return preg_match('~^(columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~', $feature);
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
||||
return array(
|
||||
'possible_drivers' => array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite"),
|
||||
'jush' => "sqlite",
|
||||
'types' => $types,
|
||||
'structured_types' => array_keys($types),
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"), // REGEXP can be user defined function
|
||||
'functions' => array("distinct", "hex", "length", "lower", "round", "unixepoch", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array(
|
||||
// "text" => "date('now')/time('now')/datetime('now')",
|
||||
), array(
|
||||
"integer|real|numeric" => "+/-",
|
||||
// "text" => "date/time/datetime",
|
||||
"text" => "||",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
$jush = "sqlite";
|
||||
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
||||
$structured_types = array_keys($types);
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"); // REGEXP can be user defined function
|
||||
$functions = array("hex", "length", "lower", "round", "unixepoch", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array(
|
||||
// "text" => "date('now')/time('now')/datetime('now')",
|
||||
), array(
|
||||
"integer|real|numeric" => "+/-",
|
||||
// "text" => "date/time/datetime",
|
||||
"text" => "||",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ if ($_POST && !$error) {
|
|||
$is_sql = preg_match('~sql~', $_POST["format"]);
|
||||
|
||||
if ($is_sql) {
|
||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " " . str_replace("\n", " ", $connection->server_info) . " dump\n\n";
|
||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump\n\n";
|
||||
if ($jush == "sql") {
|
||||
echo "SET NAMES utf8;
|
||||
SET time_zone = '+00:00';
|
||||
|
@ -22,8 +22,7 @@ SET foreign_key_checks = 0;
|
|||
" . ($_POST["data_style"] ? "SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
" : "") . "
|
||||
";
|
||||
$connection->query("SET time_zone = '+00:00'");
|
||||
$connection->query("SET sql_mode = ''");
|
||||
$connection->query("SET time_zone = '+00:00';");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -106,16 +105,6 @@ SET foreign_key_checks = 0;
|
|||
}
|
||||
}
|
||||
|
||||
// add FKs after creating tables (except in MySQL which uses SET FOREIGN_KEY_CHECKS=0)
|
||||
if (function_exists('foreign_keys_sql')) {
|
||||
foreach (table_status('', true) as $name => $table_status) {
|
||||
$table = (DB == "" || in_array($name, (array) $_POST["tables"]));
|
||||
if ($table && !is_view($table_status)) {
|
||||
echo foreign_keys_sql($name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($views as $view) {
|
||||
$adminer->dumpTable($view, $_POST["table_style"], 1);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ if ($_POST && !$error) {
|
|||
: "AT " . q($row["STARTS"])
|
||||
) . " ON COMPLETION" . ($row["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE"
|
||||
;
|
||||
|
||||
|
||||
queries_redirect(substr(ME, 0, -1), ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')), queries(($EVENT != ""
|
||||
? "ALTER EVENT " . idf_escape($EVENT) . $schedule
|
||||
. ($EVENT != $row["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($row["EVENT_NAME"]) : "")
|
||||
|
|
|
@ -6,7 +6,7 @@ $row = $_POST;
|
|||
if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-js"]) {
|
||||
$message = ($_POST["drop"] ? lang('Foreign key has been dropped.') : ($name != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')));
|
||||
$location = ME . "table=" . urlencode($TABLE);
|
||||
|
||||
|
||||
if (!$_POST["drop"]) {
|
||||
$row["source"] = array_filter($row["source"], 'strlen');
|
||||
ksort($row["source"]); // enforce input order
|
||||
|
@ -16,7 +16,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-
|
|||
}
|
||||
$row["target"] = $target;
|
||||
}
|
||||
|
||||
|
||||
if ($jush == "sqlite") {
|
||||
queries_redirect($location, $message, recreate_table($TABLE, $TABLE, array(), array(), array(" $name" => ($_POST["drop"] ? "" : " " . format_foreign_key($row)))));
|
||||
} else {
|
||||
|
@ -60,7 +60,7 @@ if ($row["ns"] != "") {
|
|||
set_schema($row["ns"]);
|
||||
}
|
||||
$referencable = array_keys(array_filter(table_status('', true), 'fk_support'));
|
||||
$target = array_keys(fields(in_array($row["table"], $referencable) ? $row["table"] : reset($referencable)));
|
||||
$target = ($TABLE === $row["table"] ? $source : array_keys(fields(in_array($row["table"], $referencable) ? $row["table"] : reset($referencable))));
|
||||
$onchange = "this.form['change-js'].value = '1'; this.form.submit();";
|
||||
echo "<p>" . lang('Target table') . ": " . html_select("table", $referencable, $row["table"], $onchange) . "\n";
|
||||
if ($jush == "pgsql") {
|
||||
|
@ -84,7 +84,7 @@ $j = 0;
|
|||
foreach ($row["source"] as $key => $val) {
|
||||
echo "<tr>";
|
||||
echo "<td>" . html_select("source[" . (+$key) . "]", array(-1 => "") + $source, $val, ($j == count($row["source"]) - 1 ? "foreignAddRow.call(this);" : 1), "label-source");
|
||||
echo "<td>" . html_select("target[" . (+$key) . "]", $target, isset($row["target"][$key]) ? $row["target"][$key] : null, 1, "label-target");
|
||||
echo "<td>" . html_select("target[" . (+$key) . "]", $target, $row["target"][$key], 1, "label-target");
|
||||
$j++;
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -9,7 +9,7 @@ class Adminer {
|
|||
* @return string HTML code
|
||||
*/
|
||||
function name() {
|
||||
return "<a href='https://www.adminerevo.org/'" . target_blank() . " id='h1'>AdminerEvo</a>";
|
||||
return "<a href='https://www.adminer.org/'" . target_blank() . " id='h1'>Adminer</a>";
|
||||
}
|
||||
|
||||
/** Connection parameters
|
||||
|
@ -39,7 +39,7 @@ class Adminer {
|
|||
function bruteForceKey() {
|
||||
return $_SERVER["REMOTE_ADDR"];
|
||||
}
|
||||
|
||||
|
||||
/** Get server name displayed in breadcrumbs
|
||||
* @param string
|
||||
* @return string HTML code or null
|
||||
|
@ -128,7 +128,7 @@ class Adminer {
|
|||
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
||||
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
}
|
||||
|
||||
|
||||
/** Get login form field
|
||||
* @param string
|
||||
* @param string HTML
|
||||
|
@ -176,26 +176,24 @@ class Adminer {
|
|||
function selectLinks($tableStatus, $set = "") {
|
||||
global $jush, $driver;
|
||||
echo '<p class="links">';
|
||||
$actions = array("select" => lang('Select data'));
|
||||
$links = array("select" => lang('Select data'));
|
||||
if (support("table") || support("indexes")) {
|
||||
$actions["table"] = lang('Show structure');
|
||||
$links["table"] = lang('Show structure');
|
||||
}
|
||||
if (support("table")) {
|
||||
if (is_view($tableStatus)) {
|
||||
$actions["view"] = lang('Alter view');
|
||||
$links["view"] = lang('Alter view');
|
||||
} else {
|
||||
$actions["create"] = lang('Alter table');
|
||||
$links["create"] = lang('Alter table');
|
||||
}
|
||||
}
|
||||
if ($set !== null) {
|
||||
$actions["edit"] = lang('New item');
|
||||
$links["edit"] = lang('New item');
|
||||
}
|
||||
$name = $tableStatus["Name"];
|
||||
$links = [];
|
||||
foreach ($actions as $key => $val) {
|
||||
$links[] = "<a href='" . h(ME) . "$key=" . urlencode($name) . ($key == "edit" ? $set : "") . "'" . bold(isset($_GET[$key])) . ">$val</a>";
|
||||
foreach ($links as $key => $val) {
|
||||
echo " <a href='" . h(ME) . "$key=" . urlencode($name) . ($key == "edit" ? $set : "") . "'" . bold(isset($_GET[$key])) . ">$val</a>";
|
||||
}
|
||||
echo generate_linksbar($links);
|
||||
echo doc_link(array($jush => $driver->tableHelp($name)), "?");
|
||||
echo "\n";
|
||||
}
|
||||
|
@ -233,18 +231,17 @@ class Adminer {
|
|||
*/
|
||||
function selectQuery($query, $start, $failed = false) {
|
||||
global $jush, $driver;
|
||||
$return = "</p>\n"; // required for IE9 inline edit
|
||||
if (!$failed && ($warnings = $driver->warnings())) {
|
||||
$id = "warnings";
|
||||
$return = ", <a href='#$id'>" . lang('Warnings') . "</a>" . script("qsl('a').onclick = partial(toggle, '$id');", "")
|
||||
. "<div id='$id' class='hidden'>\n$warnings</div>\n"
|
||||
. "$return<div id='$id' class='hidden'>\n$warnings</div>\n"
|
||||
;
|
||||
}
|
||||
$links = [
|
||||
(support("sql") ? "<a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>" : ""),
|
||||
"<a href='#' class='copy-to-clipboard'>" . lang('Copy to clipboard') . "</a>",
|
||||
];
|
||||
return "<code class='jush-$jush copy-to-clipboard'>" . h(str_replace("\n", " ", $query)) . "</code> <span class='time'>(" . format_time($start) . ")</span>"
|
||||
. generate_linksbar($links);
|
||||
return "<p><code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> <span class='time'>(" . format_time($start) . ")</span>"
|
||||
. (support("sql") ? " <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>" : "")
|
||||
. $return
|
||||
;
|
||||
}
|
||||
|
||||
/** Query printed in SQL command before execution
|
||||
|
@ -289,11 +286,11 @@ class Adminer {
|
|||
* @return string
|
||||
*/
|
||||
function selectVal($val, $link, $field, $original) {
|
||||
$return = ($val === null ? "<i>NULL</i>" : (preg_match("~char|binary|boolean~", $field["type"] ?? null) && !preg_match("~var~", $field["type"] ?? null) ? "<code>$val</code>" : $val));
|
||||
if (preg_match('~blob|bytea|raw|file~', $field["type"] ?? null) && !is_utf8($val)) {
|
||||
$return = ($val === null ? "<i>NULL</i>" : (preg_match("~char|binary|boolean~", $field["type"]) && !preg_match("~var~", $field["type"]) ? "<code>$val</code>" : $val));
|
||||
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && !is_utf8($val)) {
|
||||
$return = "<i>" . lang('%d byte(s)', strlen($original)) . "</i>";
|
||||
}
|
||||
if (preg_match('~json~', $field["type"] ?? null)) {
|
||||
if (preg_match('~json~', $field["type"])) {
|
||||
$return = "<code class='jush-js'>$return</code>";
|
||||
}
|
||||
return ($link ? "<a href='" . h($link) . "'" . (is_url($link) ? target_blank() : "") . ">$return</a>" : $return);
|
||||
|
@ -360,21 +357,18 @@ class Adminer {
|
|||
$i = 0;
|
||||
$select[""] = array();
|
||||
foreach ($select as $key => $val) {
|
||||
$val = $_GET["columns"][$key] ?? null;
|
||||
$val = $_GET["columns"][$key];
|
||||
$column = select_input(
|
||||
" name='columns[$i][col]'",
|
||||
$columns,
|
||||
$val["col"] ?? null,
|
||||
$val["col"],
|
||||
($key !== "" ? "selectFieldChange" : "selectAddRow")
|
||||
);
|
||||
echo "<div>" . ($functions || $grouping ? "<select name='columns[$i][fun]'>"
|
||||
. optionlist(array(-1 => "") + array_filter(array(lang('Functions') => $functions, lang('Aggregation') => $grouping)), $val["fun"] ?? null) . "</select>"
|
||||
. optionlist(array(-1 => "") + array_filter(array(lang('Functions') => $functions, lang('Aggregation') => $grouping)), $val["fun"]) . "</select>"
|
||||
. on_help("getTarget(event).value && getTarget(event).value.replace(/ |\$/, '(') + ')'", 1)
|
||||
. script("qsl('select').onchange = function () { helpClose();" . ($key !== "" ? "" : " qsl('select, input', this.parentNode).onchange();") . " };", "")
|
||||
. "($column)" : $column)
|
||||
. " <input type='image' src='../adminer/static/cross.gif' class='jsonly icon' title='", h(lang('Remove')), "' alt='x'>"
|
||||
. script('qsl(".icon").onclick = selectRemoveRow;', "")
|
||||
. "</div>\n";
|
||||
. "($column)" : $column) . "</div>\n";
|
||||
$i++;
|
||||
}
|
||||
echo "</div></fieldset>\n";
|
||||
|
@ -410,8 +404,6 @@ class Adminer {
|
|||
echo html_select("where[$i][op]", $this->operators, $val["op"], $change_next);
|
||||
echo "<input type='search' name='where[$i][val]' value='" . h($val["val"]) . "'>";
|
||||
echo script("mixin(qsl('input'), {oninput: function () { $change_next }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});", "");
|
||||
echo "<input type='image' src='../adminer/static/cross.gif' class='jsonly icon' title='", h(lang('Remove')), "' alt='x'>";
|
||||
echo script('qsl(".icon").onclick = selectRemoveRow;', "");
|
||||
echo "</div>\n";
|
||||
}
|
||||
}
|
||||
|
@ -430,18 +422,12 @@ class Adminer {
|
|||
foreach ((array) $_GET["order"] as $key => $val) {
|
||||
if ($val != "") {
|
||||
echo "<div>" . select_input(" name='order[$i]'", $columns, $val, "selectFieldChange");
|
||||
echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending'));
|
||||
echo " <input type='image' src='../adminer/static/cross.gif' class='jsonly icon' title='", h(lang('Remove')), "' alt='x'>";
|
||||
echo script('qsl(".icon").onclick = selectRemoveRow;', "");
|
||||
echo "</div>\n";
|
||||
echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending')) . "</div>\n";
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
echo "<div>" . select_input(" name='order[$i]'", $columns, "", "selectAddRow");
|
||||
echo checkbox("desc[$i]", 1, false, lang('descending'));
|
||||
echo " <input type='image' src='../adminer/static/cross.gif' class='jsonly icon' title='", h(lang('Remove')), "' alt='x'>";
|
||||
echo script('qsl(".icon").onclick = selectRemoveRow;', "");
|
||||
echo "</div>\n";
|
||||
echo checkbox("desc[$i]", 1, false, lang('descending')) . "</div>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
|
@ -577,7 +563,6 @@ class Adminer {
|
|||
foreach ($fields as $name => $field) {
|
||||
if ((preg_match('~^[-\d.' . (preg_match('~IN$~', $val["op"]) ? ',' : '') . ']+$~', $val["val"]) || !preg_match('~' . number_type() . '|bit~', $field["type"]))
|
||||
&& (!preg_match("~[\x80-\xFF]~", $val["val"]) || preg_match('~char|text|enum|set~', $field["type"]))
|
||||
&& (!preg_match('~date|timestamp~', $field["type"]) || preg_match('~^\d+-\d+-\d+~', $val["val"]))
|
||||
) {
|
||||
$cols[] = $prefix . $driver->convertSearch(idf_escape($name), $val, $field) . $cond;
|
||||
}
|
||||
|
@ -652,7 +637,7 @@ class Adminer {
|
|||
global $jush, $driver;
|
||||
restart_session();
|
||||
$history = &get_session("queries");
|
||||
if (isset($history[$_GET["db"]]) === false) {
|
||||
if (!$history[$_GET["db"]]) {
|
||||
$history[$_GET["db"]] = array();
|
||||
}
|
||||
if (strlen($query) > 1e6) {
|
||||
|
@ -660,34 +645,19 @@ class Adminer {
|
|||
}
|
||||
$history[$_GET["db"]][] = array($query, time(), $time); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
||||
$sql_id = "sql-" . count($history[$_GET["db"]]);
|
||||
$return = "<a href='#$sql_id' class='toggle'>" . lang('SQL command') . "</a> <a href='#' class='copy-to-clipboard icon expand' data-expand-id='$sql_id'></a>\n";
|
||||
$return = "<a href='#$sql_id' class='toggle'>" . lang('SQL command') . "</a>\n";
|
||||
if (!$failed && ($warnings = $driver->warnings())) {
|
||||
$id = "warnings-" . count($history[$_GET["db"]]);
|
||||
$return = "<a href='#$id' class='toggle'>" . lang('Warnings') . "</a>, $return<div id='$id' class='hidden'>\n$warnings</div>\n";
|
||||
}
|
||||
$links = [];
|
||||
if (support("sql")) {
|
||||
$links[] = '<a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a>';
|
||||
$links[] = '<a href="#" class="copy-to-clipboard">' . lang('Copy to clipboard') . '</a>';
|
||||
}
|
||||
return " <span class='time'>" . @date("H:i:s") . "</span>" // @ - time zone may be not set
|
||||
. " $return<div id='$sql_id' class='hidden'><pre><code class='jush-$jush copy-to-clipboard'>" . shorten_utf8($query, 1000) . "</code></pre>"
|
||||
. " $return<div id='$sql_id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . "</code></pre>"
|
||||
. ($time ? " <span class='time'>($time)</span>" : '')
|
||||
. generate_linksbar($links)
|
||||
. (support("sql") ? '<p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a>' : '')
|
||||
. '</div>'
|
||||
;
|
||||
}
|
||||
|
||||
/** Print before edit form
|
||||
* @param string
|
||||
* @param array
|
||||
* @param mixed
|
||||
* @param bool
|
||||
* @return null
|
||||
*/
|
||||
function editRowPrint($table, $fields, $row, $update) {
|
||||
}
|
||||
|
||||
/** Functions displayed in edit form
|
||||
* @param array single field from fields()
|
||||
* @return array
|
||||
|
@ -695,20 +665,19 @@ class Adminer {
|
|||
function editFunctions($field) {
|
||||
global $edit_functions;
|
||||
$return = ($field["null"] ? "NULL/" : "");
|
||||
$update = isset($_GET["select"]) || where($_GET);
|
||||
foreach ($edit_functions as $key => $functions) {
|
||||
if (!$key || (!isset($_GET["call"]) && $update)) { // relative functions
|
||||
if (!$key || (!isset($_GET["call"]) && (isset($_GET["select"]) || where($_GET)))) { // relative functions
|
||||
foreach ($functions as $pattern => $val) {
|
||||
if (!$pattern || preg_match("~$pattern~", $field["type"])) {
|
||||
$return .= "/$val";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($key && !preg_match('~set|blob|bytea|raw|file|bool~', $field["type"])) {
|
||||
$return .= "/SQL";
|
||||
if ($key && !preg_match('~set|blob|bytea|raw|file~', $field["type"])) {
|
||||
$return .= "/SQL";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($field["auto_increment"] && !$update) {
|
||||
if ($field["auto_increment"] && !isset($_GET["select"]) && !where($_GET)) {
|
||||
$return = lang('Auto Increment');
|
||||
}
|
||||
return explode("/", $return);
|
||||
|
@ -723,30 +692,10 @@ class Adminer {
|
|||
*/
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
if ($field["type"] == "enum") {
|
||||
$options = array();
|
||||
$selected = $value;
|
||||
if (isset($_GET["select"])) {
|
||||
$options[-1] = lang('original');
|
||||
if ($selected === null) {
|
||||
$selected = -1;
|
||||
}
|
||||
}
|
||||
if ($field["null"]) {
|
||||
$options[""] = "NULL";
|
||||
if ($value === null && !isset($_GET["select"])) {
|
||||
$selected = "";
|
||||
}
|
||||
}
|
||||
$options[0] = lang('empty');
|
||||
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
||||
foreach ($matches[1] as $i => $val) {
|
||||
$val = stripcslashes(str_replace("''", "'", $val));
|
||||
$options[$i + 1] = $val;
|
||||
if ($value === $val) {
|
||||
$selected = $i + 1;
|
||||
}
|
||||
}
|
||||
return "<select$attrs>" . optionlist($options, (string) $selected, 1) . "</select>"; // 1 - use keys
|
||||
return (isset($_GET["select"]) ? "<label><input type='radio'$attrs value='-1' checked><i>" . lang('original') . "</i></label> " : "")
|
||||
. ($field["null"] ? "<label><input type='radio'$attrs value=''" . ($value !== null || isset($_GET["select"]) ? "" : " checked") . "><i>NULL</i></label> " : "")
|
||||
. enum_input("radio", $attrs, $field, $value, 0) // 0 - empty
|
||||
;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
@ -870,7 +819,6 @@ class Adminer {
|
|||
$insert = "";
|
||||
$buffer = "";
|
||||
$keys = array();
|
||||
$generatedKeys = array();
|
||||
$suffix = "";
|
||||
$fetch_function = ($table != '' ? 'fetch_assoc' : 'fetch_row');
|
||||
while ($row = $result->$fetch_function()) {
|
||||
|
@ -878,10 +826,6 @@ class Adminer {
|
|||
$values = array();
|
||||
foreach ($row as $val) {
|
||||
$field = $result->fetch_field();
|
||||
if (!empty($fields[$field->name]['generated'])) {
|
||||
$generatedKeys[$field->name] = true;
|
||||
continue;
|
||||
}
|
||||
$keys[] = $field->name;
|
||||
$key = idf_escape($field->name);
|
||||
$values[] = "$key = VALUES($key)";
|
||||
|
@ -899,10 +843,6 @@ class Adminer {
|
|||
$insert = "INSERT INTO " . table($table) . " (" . implode(", ", array_map('idf_escape', $keys)) . ") VALUES";
|
||||
}
|
||||
foreach ($row as $key => $val) {
|
||||
if (isset($generatedKeys[$key])) {
|
||||
unset($row[$key]);
|
||||
continue;
|
||||
}
|
||||
$field = $fields[$key];
|
||||
$row[$key] = ($val !== null
|
||||
? unconvert_field($field, preg_match(number_type(), $field["type"]) && !preg_match('~\[~', $field["full_type"]) && is_numeric($val) ? $val : q(($val === false ? 0 : $val)))
|
||||
|
@ -967,20 +907,10 @@ class Adminer {
|
|||
* @return bool whether to print default homepage
|
||||
*/
|
||||
function homepage() {
|
||||
$links = [];
|
||||
if ($_GET["ns"] == "" && support("database")) {
|
||||
$links[] = '<a href="' . h(ME) . 'database=">' . lang('Alter database') . '</a>';
|
||||
}
|
||||
if (support("scheme")) {
|
||||
$links[] = "<a href='" . h(ME) . "scheme='>" . ($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema')) . "</a>";
|
||||
}
|
||||
if ($_GET["ns"] !== "") {
|
||||
$links[] = '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . '</a>';
|
||||
}
|
||||
if (support("privileges")) {
|
||||
$links[] = "<a href='" . h(ME) . "privileges='>" . lang('Privileges') . "</a>";
|
||||
}
|
||||
echo generate_linksbar($links);
|
||||
echo '<p class="links">' . ($_GET["ns"] == "" && support("database") ? '<a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n" : "");
|
||||
echo (support("scheme") ? "<a href='" . h(ME) . "scheme='>" . ($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema')) . "</a>\n" : "");
|
||||
echo ($_GET["ns"] !== "" ? '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n" : "");
|
||||
echo (support("privileges") ? "<a href='" . h(ME) . "privileges='>" . lang('Privileges') . "</a>\n" : "");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -993,7 +923,7 @@ class Adminer {
|
|||
?>
|
||||
<h1>
|
||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
||||
<a href="https://download.adminerevo.org/latest/adminer/"<?php echo target_blank(); ?> id="version" title="<?php echo lang('A newer version of AdminerEvo is available, download it now!'); ?>"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||
<a href="https://www.adminer.org/#download"<?php echo target_blank(); ?> id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||
</h1>
|
||||
<?php
|
||||
if ($missing == "auth") {
|
||||
|
@ -1014,7 +944,6 @@ class Adminer {
|
|||
echo "<ul id='logins'>\n$output</ul>\n" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
|
||||
}
|
||||
} else {
|
||||
$tables = array();
|
||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
||||
$connection->select_db(DB);
|
||||
$tables = table_status('', true);
|
||||
|
@ -1045,20 +974,14 @@ bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\d\.?\d).*~s', '
|
|||
<?php
|
||||
}
|
||||
$this->databasesPrint($missing);
|
||||
$links = [];
|
||||
if (DB == "" || !$missing) {
|
||||
if (support("sql")) {
|
||||
$links[] = "<a href='" . h(ME) . "sql='" . bold(isset($_GET["sql"]) && !isset($_GET["import"])) . ">" . lang('SQL command') . "</a>";
|
||||
$links[] = "<a href='" . h(ME) . "import='" . bold(isset($_GET["import"])) . ">" . lang('Import') . "</a>";
|
||||
}
|
||||
echo "<p class='links'>" . (support("sql") ? "<a href='" . h(ME) . "sql='" . bold(isset($_GET["sql"]) && !isset($_GET["import"])) . ">" . lang('SQL command') . "</a>\n<a href='" . h(ME) . "import='" . bold(isset($_GET["import"])) . ">" . lang('Import') . "</a>\n" : "") . "";
|
||||
if (support("dump")) {
|
||||
$links[] = "<a href='" . h(ME) . "dump=" . urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]) . "' id='dump'" . bold(isset($_GET["dump"])) . ">" . lang('Export') . "</a>";
|
||||
echo "<a href='" . h(ME) . "dump=" . urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]) . "' id='dump'" . bold(isset($_GET["dump"])) . ">" . lang('Export') . "</a>\n";
|
||||
}
|
||||
}
|
||||
echo generate_linksbar($links);
|
||||
|
||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
||||
echo generate_linksbar(['<a href="' . h(ME) . 'create="' . bold($_GET["create"] === "") . ">" . lang('Create table') . "</a>"]);
|
||||
echo '<a href="' . h(ME) . 'create="' . bold($_GET["create"] === "") . ">" . lang('Create table') . "</a>\n";
|
||||
if (!$tables) {
|
||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
||||
} else {
|
||||
|
@ -1075,38 +998,35 @@ bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\d\.?\d).*~s', '
|
|||
function databasesPrint($missing) {
|
||||
global $adminer, $connection;
|
||||
$databases = $this->databases();
|
||||
if (DB && $databases && !in_array(DB, $databases)) {
|
||||
if ($databases && !in_array(DB, $databases)) {
|
||||
array_unshift($databases, DB);
|
||||
}
|
||||
?>
|
||||
<form action="">
|
||||
<p id="dbs">
|
||||
<?php
|
||||
echo "<table id='dbs'><tr><td width=1>";
|
||||
hidden_fields_get();
|
||||
$db_events = script("mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});");
|
||||
echo "<label title='" . lang('database') . "' for='menu_db'>" . lang('DB') . "</label>:</td><td>" . ($databases
|
||||
? "<select name='db' id='menu_db'>" . optionlist(array("" => "") + $databases, DB) . "</select>$db_events"
|
||||
: "<input name='db' id='menu_db' value='" . h(DB) . "' autocapitalize='off'>\n"
|
||||
echo "<span title='" . lang('database') . "'>" . lang('DB') . "</span>: " . ($databases
|
||||
? "<select name='db'>" . optionlist(array("" => "") + $databases, DB) . "</select>$db_events"
|
||||
: "<input name='db' value='" . h(DB) . "' autocapitalize='off'>\n"
|
||||
);
|
||||
echo "</td></tr>";
|
||||
if (support("scheme")) {
|
||||
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||
echo "<tr><td><label for='menu_ns'>" . lang('Schema') . ":</label></td>";
|
||||
echo "<td><select name='ns' id='menu_ns'>" . optionlist(array("" => "") + $adminer->schemas(), $_GET["ns"]) . "</select>$db_events";
|
||||
echo "<input type='submit' value='" . lang('Use') . "'" . ($databases ? " class='hidden'" : "") . ">\n";
|
||||
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||
if (support("scheme")) {
|
||||
echo "<br>" . lang('Schema') . ": <select name='ns'>" . optionlist(array("" => "") + $adminer->schemas(), $_GET["ns"]) . "</select>$db_events";
|
||||
if ($_GET["ns"] != "") {
|
||||
set_schema($_GET["ns"]);
|
||||
}
|
||||
echo "</td></tr>";
|
||||
}
|
||||
}
|
||||
echo "<tr" . ($databases ? " class='hidden'" : "") . "><td colspan=2><input type='submit' value='" . lang('Use') . "'></td></tr>\n";
|
||||
echo "</table>";
|
||||
foreach (array("import", "sql", "schema", "dump", "privileges") as $val) {
|
||||
if (isset($_GET[$val])) {
|
||||
echo "<input type='hidden' name='$val' value=''>";
|
||||
break;
|
||||
}
|
||||
}
|
||||
echo "</p></form>\n";
|
||||
}
|
||||
|
||||
/** Prints table list in menu
|
||||
|
@ -1118,13 +1038,10 @@ bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\d\.?\d).*~s', '
|
|||
foreach ($tables as $table => $status) {
|
||||
$name = $this->tableName($status);
|
||||
if ($name != "") {
|
||||
echo '<li><a href="' . h(ME) . 'select=' . urlencode($table) . '"'
|
||||
. bold($_GET["select"] == $table || $_GET["edit"] == $table, "select")
|
||||
. " title='" . lang('Select data') . "'>" . lang('select') . "</a> "
|
||||
;
|
||||
echo '<li><a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table || $_GET["edit"] == $table, "select") . ">" . lang('select') . "</a> ";
|
||||
echo (support("table") || support("indexes")
|
||||
? '<a href="' . h(ME) . 'table=' . urlencode($table) . '"'
|
||||
. bold(in_array($table, array($_GET["table"], $_GET["create"], $_GET["indexes"], $_GET["foreign"], $_GET["trigger"], $_GET["select"])), (is_view($status) ? "view" : "structure"))
|
||||
. bold(in_array($table, array($_GET["table"], $_GET["create"], $_GET["indexes"], $_GET["foreign"], $_GET["trigger"])), (is_view($status) ? "view" : "structure"))
|
||||
. " title='" . lang('Show structure') . "'>$name</a>"
|
||||
: "<span>$name</span>"
|
||||
) . "\n";
|
||||
|
@ -1134,4 +1051,8 @@ bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\d\.?\d).*~s', '
|
|||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
||||
if ($adminer->operators === null) {
|
||||
$adminer->operators = $operators;
|
||||
}
|
||||
|
|
|
@ -15,58 +15,6 @@ if ($_COOKIE["adminer_permanent"]) {
|
|||
}
|
||||
}
|
||||
|
||||
function validate_server_input() {
|
||||
if (SERVER == "") {
|
||||
return;
|
||||
}
|
||||
|
||||
$parts = parse_url(SERVER);
|
||||
if (!$parts) {
|
||||
auth_error(lang('Invalid server or credentials.'));
|
||||
}
|
||||
|
||||
// Check proper URL parts.
|
||||
if (isset($parts['user']) || isset($parts['pass']) || isset($parts['query']) || isset($parts['fragment'])) {
|
||||
auth_error(lang('Invalid server or credentials.'));
|
||||
}
|
||||
|
||||
// Allow only HTTP/S scheme.
|
||||
if (isset($parts['scheme']) && !preg_match('~^(https?)$~i', $parts['scheme'])) {
|
||||
auth_error(lang('Invalid server or credentials.'));
|
||||
}
|
||||
|
||||
// Allow only host without a path. Note that "localhost" is parsed as path.
|
||||
$host = (isset($parts['host']) ? $parts['host'] : '') . (isset($parts['path']) ? $parts['path'] : '');
|
||||
if (strpos(rtrim($host, '/'), '/') !== false) {
|
||||
auth_error(lang('Invalid server or credentials.'));
|
||||
}
|
||||
|
||||
// Check privileged ports.
|
||||
if (isset($parts['port']) && ($parts['port'] < 1024 || $parts['port'] > 65535)) {
|
||||
auth_error(lang('Connecting to privileged ports is not allowed.'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $server
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @param string $defaultServer
|
||||
* @param int|null $defaultPort
|
||||
* @return string
|
||||
*/
|
||||
function build_http_url($server, $username, $password, $defaultServer, $defaultPort = null) {
|
||||
if (!preg_match('~^(https?://)?([^:]*)(:\d+)?$~', rtrim($server, '/'), $matches)) {
|
||||
$this->error = lang('Invalid server or credentials.');
|
||||
return false;
|
||||
}
|
||||
|
||||
return ($matches[1] ?: "http://") .
|
||||
($username !== "" || $password !== "" ? "$username:$password@" : "") .
|
||||
($matches[2] !== "" ? $matches[2] : $defaultServer) .
|
||||
(isset($matches[3]) ? $matches[3] : ($defaultPort ? ":$defaultPort" : ""));
|
||||
}
|
||||
|
||||
function add_invalid_login() {
|
||||
global $adminer;
|
||||
$fp = file_open_lock(get_temp_dir() . "/adminer.invalid");
|
||||
|
@ -93,10 +41,7 @@ function add_invalid_login() {
|
|||
function check_invalid_login() {
|
||||
global $adminer;
|
||||
$invalids = unserialize(@file_get_contents(get_temp_dir() . "/adminer.invalid")); // @ - may not exist
|
||||
$invalid = ($invalids ? $invalids[$adminer->bruteForceKey()] : array());
|
||||
if ($invalid === null) {
|
||||
return;
|
||||
}
|
||||
$invalid = $invalids[$adminer->bruteForceKey()];
|
||||
$next_attempt = ($invalid[1] > 29 ? $invalid[0] - time() : 0); // allow 30 invalid attempts
|
||||
if ($next_attempt > 0) { //! do the same with permanent login
|
||||
auth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)));
|
||||
|
@ -107,7 +52,7 @@ $auth = $_POST["auth"];
|
|||
if ($auth) {
|
||||
session_regenerate_id(); // defense against session fixation
|
||||
$vendor = $auth["driver"];
|
||||
$server = trim($auth["server"]);
|
||||
$server = $auth["server"];
|
||||
$username = $auth["username"];
|
||||
$password = (string) $auth["password"];
|
||||
$db = $auth["db"];
|
||||
|
@ -127,14 +72,20 @@ if ($auth) {
|
|||
) {
|
||||
redirect(auth_url($vendor, $server, $username, $db));
|
||||
}
|
||||
|
||||
} elseif ($_POST["logout"] && (!$has_token || verify_token())) {
|
||||
foreach (array("pwds", "db", "dbs", "queries") as $key) {
|
||||
set_session($key, null);
|
||||
|
||||
} elseif ($_POST["logout"]) {
|
||||
if ($has_token && !verify_token()) {
|
||||
page_header(lang('Logout'), lang('Invalid CSRF token. Send the form again.'));
|
||||
page_footer("db");
|
||||
exit;
|
||||
} else {
|
||||
foreach (array("pwds", "db", "dbs", "queries") as $key) {
|
||||
set_session($key, null);
|
||||
}
|
||||
unset_permanent();
|
||||
redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.') . ' ' . lang('Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.'));
|
||||
}
|
||||
unset_permanent();
|
||||
redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.'));
|
||||
|
||||
|
||||
} elseif ($permanent && !$_SESSION["pwds"]) {
|
||||
session_regenerate_id();
|
||||
$private = $adminer->permanentLogin();
|
||||
|
@ -174,7 +125,7 @@ function auth_error($error) {
|
|||
$password = get_password();
|
||||
if ($password !== null) {
|
||||
if ($password === false) {
|
||||
$error .= ($error ? '<br>' : '') . lang('Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.', target_blank(), '<code>permanentLogin()</code>');
|
||||
$error .= '<br>' . lang('Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.', target_blank(), '<code>permanentLogin()</code>');
|
||||
}
|
||||
set_password(DRIVER, SERVER, $_GET["username"], null);
|
||||
}
|
||||
|
@ -210,25 +161,21 @@ if (isset($_GET["username"]) && !class_exists("Min_DB")) {
|
|||
stop_session(true);
|
||||
|
||||
if (isset($_GET["username"]) && is_string(get_password())) {
|
||||
validate_server_input();
|
||||
list($host, $port) = explode(":", SERVER, 2);
|
||||
if (is_numeric($port) && ($port < 1024 || $port > 65535)) {
|
||||
auth_error(lang('Connecting to privileged ports is not allowed.'));
|
||||
}
|
||||
check_invalid_login();
|
||||
|
||||
$connection = connect();
|
||||
$driver = new Min_Driver($connection);
|
||||
}
|
||||
|
||||
$login = null;
|
||||
if (!is_object($connection) || ($login = $adminer->login($_GET["username"], get_password())) !== true) {
|
||||
$error = (is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid server or credentials.')));
|
||||
$error = (is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid credentials.')));
|
||||
auth_error($error . (preg_match('~^ | $~', get_password()) ? '<br>' . lang('There is a space in the input password which might be the cause.') : ''));
|
||||
}
|
||||
|
||||
if ($_POST["logout"] && $has_token && !verify_token()) {
|
||||
page_header(lang('Logout'), lang('Invalid CSRF token. Send the form again.'));
|
||||
page_footer("db");
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($auth && $_POST["token"]) {
|
||||
$_POST["token"] = $token; // reset token after explicit login
|
||||
}
|
||||
|
@ -252,7 +199,7 @@ if ($_POST) {
|
|||
: lang('Invalid CSRF token. Send the form again.') . ' ' . lang('If you did not send this request from Adminer then close this page.')
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
} elseif ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
// posted form with no data means that post_max_size exceeded because Adminer always sends token at least
|
||||
$error = lang('Too big POST data. Reduce the data or increase the %s configuration directive.', "'post_max_size'");
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
<?php
|
||||
function adminer_errors($errno, $errstr) {
|
||||
return !!preg_match('~^(Trying to access array offset on( value of type)? null|Undefined array key)~', $errstr);
|
||||
}
|
||||
|
||||
error_reporting(6135); // errors and warnings
|
||||
set_error_handler('adminer_errors', E_WARNING);
|
||||
|
||||
include "../adminer/include/coverage.inc.php";
|
||||
|
||||
|
@ -33,7 +28,7 @@ if (isset($_GET["file"])) {
|
|||
if ($_GET["script"] == "version") {
|
||||
$fp = file_open_lock(get_temp_dir() . "/adminer.version");
|
||||
if ($fp) {
|
||||
file_write_unlock($fp, serialize(array("version" => $_POST["version"])));
|
||||
file_write_unlock($fp, serialize(array("signature" => $_POST["signature"], "version" => $_POST["version"])));
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
@ -65,7 +60,7 @@ if (!defined("SID")) {
|
|||
|
||||
// disable magic quotes to be able to use database escaping function
|
||||
remove_slashes(array(&$_GET, &$_POST, &$_COOKIE), $filter);
|
||||
if (function_exists("get_magic_quotes_runtime") && get_magic_quotes_runtime()) {
|
||||
if (get_magic_quotes_runtime()) {
|
||||
set_magic_quotes_runtime(false);
|
||||
}
|
||||
@set_time_limit(0); // @ - can be disabled
|
||||
|
@ -80,31 +75,16 @@ include "../adminer/drivers/sqlite.inc.php";
|
|||
include "../adminer/drivers/pgsql.inc.php";
|
||||
include "../adminer/drivers/oracle.inc.php";
|
||||
include "../adminer/drivers/mssql.inc.php";
|
||||
include "../adminer/drivers/firebird.inc.php";
|
||||
include "../adminer/drivers/simpledb.inc.php";
|
||||
include "../adminer/drivers/mongo.inc.php";
|
||||
include "../adminer/drivers/elastic.inc.php";
|
||||
include "./include/adminer.inc.php";
|
||||
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
||||
include "../adminer/drivers/clickhouse.inc.php";
|
||||
include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
|
||||
|
||||
$config = driver_config();
|
||||
$possible_drivers = $config['possible_drivers'];
|
||||
$jush = $config['jush'];
|
||||
$types = $config['types'];
|
||||
$structured_types = $config['structured_types'];
|
||||
$unsigned = $config['unsigned'];
|
||||
$operators = $config['operators'];
|
||||
$operator_regexp = isset($config['operator_regexp']) && in_array($config['operator_regexp'], $operators) ? $config['operator_regexp'] : null;
|
||||
$functions = $config['functions'];
|
||||
$grouping = $config['grouping'];
|
||||
$edit_functions = $config['edit_functions'];
|
||||
if ($adminer->operators === null) {
|
||||
$adminer->operators = $operators;
|
||||
$adminer->operator_regexp = $operator_regexp;
|
||||
}
|
||||
|
||||
define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost
|
||||
define("DB", $_GET["db"]); // for the sake of speed and size
|
||||
define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?'
|
||||
define("ME", str_replace(":", "%3a", preg_replace('~\?.*~', '', relative_uri())) . '?'
|
||||
. (sid() ? SID . '&' : '')
|
||||
. (SERVER !== null ? DRIVER . "=" . urlencode(SERVER) . '&' : '')
|
||||
. (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '')
|
||||
|
@ -112,6 +92,7 @@ define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?'
|
|||
);
|
||||
|
||||
include "../adminer/include/version.inc.php";
|
||||
include "./include/adminer.inc.php";
|
||||
include "../adminer/include/design.inc.php";
|
||||
include "../adminer/include/xxtea.inc.php";
|
||||
include "../adminer/include/auth.inc.php";
|
||||
|
|
|
@ -8,22 +8,20 @@ function connect_error() {
|
|||
if ($_POST["db"] && !$error) {
|
||||
queries_redirect(substr(ME, 0, -1), lang('Databases have been dropped.'), drop_databases($_POST["db"]));
|
||||
}
|
||||
|
||||
|
||||
page_header(lang('Select database'), $error, false);
|
||||
$actions = [
|
||||
echo "<p class='links'>\n";
|
||||
foreach (array(
|
||||
'database' => lang('Create database'),
|
||||
'privileges' => lang('Privileges'),
|
||||
'processlist' => lang('Process list'),
|
||||
'variables' => lang('Variables'),
|
||||
'status' => lang('Status'),
|
||||
];
|
||||
$links = [];
|
||||
foreach ($actions as $key => $val) {
|
||||
) as $key => $val) {
|
||||
if (support($key)) {
|
||||
$links[] = "<a href='" . h(ME) . "$key='>$val</a>";
|
||||
echo "<a href='" . h(ME) . "$key='>$val</a>\n";
|
||||
}
|
||||
}
|
||||
echo generate_linksbar($links);
|
||||
echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>" . h($connection->server_info) . "</b>", "<b>$connection->extension</b>") . "\n";
|
||||
echo "<p>" . lang('Logged as: %s', "<b>" . h(logged_user()) . "</b>") . "\n";
|
||||
$databases = $adminer->databases();
|
||||
|
@ -41,9 +39,9 @@ function connect_error() {
|
|||
. "<td>" . lang('Size') . " - <a href='" . h(ME) . "dbsize=1'>" . lang('Compute') . "</a>" . script("qsl('a').onclick = partial(ajaxSetHtml, '" . js_escape(ME) . "script=connect');", "")
|
||||
. "</thead>\n"
|
||||
;
|
||||
|
||||
|
||||
$databases = ($_GET["dbsize"] ? count_tables($databases) : array_flip($databases));
|
||||
|
||||
|
||||
foreach ($databases as $db => $tables) {
|
||||
$root = h(ME) . "db=" . urlencode($db);
|
||||
$id = h("Db-" . $db);
|
||||
|
@ -55,7 +53,7 @@ function connect_error() {
|
|||
echo "<td align='right' id='size-" . h($db) . "'>" . ($_GET["dbsize"] ? db_size($db) : "?");
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
|
||||
echo "</table>\n";
|
||||
echo (support("database")
|
||||
? "<div class='footer'><div>\n"
|
||||
|
@ -71,7 +69,7 @@ function connect_error() {
|
|||
echo script("tableCheck();");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
page_footer("db");
|
||||
}
|
||||
|
||||
|
@ -91,16 +89,14 @@ if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET
|
|||
exit;
|
||||
}
|
||||
|
||||
if (support("scheme")) {
|
||||
if (DB != "" && $_GET["ns"] !== "") {
|
||||
if (!isset($_GET["ns"])) {
|
||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||
}
|
||||
if (!set_schema($_GET["ns"])) {
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
||||
page_footer("ns");
|
||||
exit;
|
||||
}
|
||||
if (support("scheme") && DB != "" && $_GET["ns"] !== "") {
|
||||
if (!isset($_GET["ns"])) {
|
||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||
}
|
||||
if (!set_schema($_GET["ns"])) {
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
||||
page_footer("ns");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,12 +32,24 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
|||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<body class="<?php echo lang('ltr'); ?> nojs <?php echo $GLOBALS['project']; ?>">
|
||||
<body class="<?php echo lang('ltr'); ?> nojs">
|
||||
<?php
|
||||
$filename = get_temp_dir() . "/adminer.version";
|
||||
if (!$_COOKIE["adminer_version"] && file_exists($filename) && filemtime($filename) + 86400 > time()) { // 86400 - 1 day in seconds
|
||||
if (!$_COOKIE["adminer_version"] && function_exists('openssl_verify') && file_exists($filename) && filemtime($filename) + 86400 > time()) { // 86400 - 1 day in seconds
|
||||
$version = unserialize(file_get_contents($filename));
|
||||
$_COOKIE["adminer_version"] = $version["version"]; // doesn't need to send to the browser
|
||||
$public = "-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7/+Z70djoK
|
||||
RlHIZFZPO0uYRezq90+7Amk+FDNd7KkL5eDve+vHRJBLAszF/7XKXe11xwliIsFs
|
||||
DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8
|
||||
h7FIx3jEaw5ckVPVTeo5JRm/1DZzJxjyDenXvBQ/6o9DgZKeNDgxwKzH+sw9/YCO
|
||||
jHnq1cFpOIISzARlrHMa/43YfeNRAm/tsBXjSxembBPo7aQZLAWHmaj5+K19H10B
|
||||
nCpz9Y++cipkVEiKRGih4ZEvjoFysEOdRLj6WiD/uUNky4xGeA6LaJqh5XpkFkcQ
|
||||
fQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
";
|
||||
if (openssl_verify($version["version"], base64_decode($version["signature"]), $public) == 1) {
|
||||
$_COOKIE["adminer_version"] = $version["version"]; // doesn't need to send to the browser
|
||||
}
|
||||
}
|
||||
?>
|
||||
<script<?php echo nonce(); ?>>
|
||||
|
@ -63,7 +75,7 @@ var thousandsSeparator = '<?php echo js_escape(lang(',')); ?>';
|
|||
if ($breadcrumb === false) {
|
||||
echo "$server\n";
|
||||
} else {
|
||||
echo "<a href='" . h($link) . "' accesskey='1' title='Alt+Shift+1'>$server</a> » ";
|
||||
echo "<a href='" . ($link ? h($link) : ".") . "' accesskey='1' title='Alt+Shift+1'>$server</a> » ";
|
||||
if ($_GET["ns"] != "" || (DB != "" && is_array($breadcrumb))) {
|
||||
echo '<a href="' . h($link . "&db=" . urlencode(DB) . (support("scheme") ? "&ns=" : "")) . '">' . h(DB) . '</a> » ';
|
||||
}
|
||||
|
@ -121,8 +133,8 @@ function csp() {
|
|||
return array(
|
||||
array(
|
||||
"script-src" => "'self' 'unsafe-inline' 'nonce-" . get_nonce() . "' 'strict-dynamic'", // 'self' is a fallback for browsers not supporting 'strict-dynamic', 'unsafe-inline' is a fallback for browsers not supporting 'nonce-'
|
||||
"connect-src" => "'self' https://api.github.com/repos/adminerevo/adminerevo/releases/latest",
|
||||
"frame-src" => "'self'",
|
||||
"connect-src" => "'self'",
|
||||
"frame-src" => "https://www.adminer.org",
|
||||
"object-src" => "'none'",
|
||||
"base-uri" => "'none'",
|
||||
"form-action" => "'self'",
|
||||
|
@ -147,11 +159,8 @@ function get_nonce() {
|
|||
*/
|
||||
function page_messages($error) {
|
||||
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
||||
$messages = [];
|
||||
if (isset($_SESSION["messages"][$uri])) {
|
||||
$messages = $_SESSION["messages"][$uri];
|
||||
}
|
||||
if (count($messages) > 0) {
|
||||
$messages = $_SESSION["messages"][$uri];
|
||||
if ($messages) {
|
||||
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $messages) . "</div>" . script("messagesPrint();");
|
||||
unset($_SESSION["messages"][$uri]);
|
||||
}
|
||||
|
@ -183,6 +192,4 @@ function page_footer($missing = "") {
|
|||
</div>
|
||||
<?php
|
||||
echo script("setupSubmitHighlight(document);");
|
||||
echo script("setupCopyToClipboard(document);");
|
||||
echo "</body>\n</html>";
|
||||
}
|
||||
|
|
|
@ -1,35 +1,15 @@
|
|||
<?php
|
||||
$drivers = array();
|
||||
|
||||
/** Add a driver
|
||||
* @param string
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function add_driver($id, $name) {
|
||||
global $drivers;
|
||||
$drivers[$id] = $name;
|
||||
}
|
||||
|
||||
/** Get driver name
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function get_driver($id) {
|
||||
global $drivers;
|
||||
return $drivers[$id];
|
||||
}
|
||||
|
||||
/*abstract*/ class Min_SQL {
|
||||
var $_conn;
|
||||
|
||||
|
||||
/** Create object for performing database operations
|
||||
* @param Min_DB
|
||||
*/
|
||||
function __construct($connection) {
|
||||
$this->_conn = $connection;
|
||||
}
|
||||
|
||||
|
||||
/** Select data from table
|
||||
* @param string
|
||||
* @param array result of $adminer->selectColumnsProcess()[0]
|
||||
|
@ -61,7 +41,7 @@ function get_driver($id) {
|
|||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
/** Delete data from table
|
||||
* @param string
|
||||
* @param string " WHERE ..."
|
||||
|
@ -72,7 +52,7 @@ function get_driver($id) {
|
|||
$query = "FROM " . table($table);
|
||||
return queries("DELETE" . ($limit ? limit1($table, $query, $queryWhere) : " $query$queryWhere"));
|
||||
}
|
||||
|
||||
|
||||
/** Update data in table
|
||||
* @param string
|
||||
* @param array escaped columns in keys, quoted data in values
|
||||
|
@ -89,7 +69,7 @@ function get_driver($id) {
|
|||
$query = table($table) . " SET$separator" . implode(",$separator", $values);
|
||||
return queries("UPDATE" . ($limit ? limit1($table, $query, $queryWhere, $separator) : " $query$queryWhere"));
|
||||
}
|
||||
|
||||
|
||||
/** Insert data into table
|
||||
* @param string
|
||||
* @param array escaped columns in keys, quoted data in values
|
||||
|
@ -101,7 +81,7 @@ function get_driver($id) {
|
|||
: " DEFAULT VALUES"
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
/** Insert or update data in table
|
||||
* @param string
|
||||
* @param array
|
||||
|
@ -111,28 +91,28 @@ function get_driver($id) {
|
|||
/*abstract*/ function insertUpdate($table, $rows, $primary) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/** Begin transaction
|
||||
* @return bool
|
||||
*/
|
||||
function begin() {
|
||||
return queries("BEGIN");
|
||||
}
|
||||
|
||||
|
||||
/** Commit transaction
|
||||
* @return bool
|
||||
*/
|
||||
function commit() {
|
||||
return queries("COMMIT");
|
||||
}
|
||||
|
||||
|
||||
/** Rollback transaction
|
||||
* @return bool
|
||||
*/
|
||||
function rollback() {
|
||||
return queries("ROLLBACK");
|
||||
}
|
||||
|
||||
|
||||
/** Return query with a timeout
|
||||
* @param string
|
||||
* @param int seconds
|
||||
|
@ -140,7 +120,7 @@ function get_driver($id) {
|
|||
*/
|
||||
function slowQuery($query, $timeout) {
|
||||
}
|
||||
|
||||
|
||||
/** Convert column to be searchable
|
||||
* @param string escaped column name
|
||||
* @param array array("op" => , "val" => )
|
||||
|
@ -170,19 +150,19 @@ function get_driver($id) {
|
|||
function quoteBinary($s) {
|
||||
return q($s);
|
||||
}
|
||||
|
||||
|
||||
/** Get warnings about the last command
|
||||
* @return string HTML
|
||||
*/
|
||||
function warnings() {
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
/** Get help link for table
|
||||
* @param string
|
||||
* @return string relative URL or null
|
||||
*/
|
||||
function tableHelp($name) {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -61,20 +61,6 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
|||
}
|
||||
echo "<tr" . odd() . ">";
|
||||
foreach ($row as $key => $val) {
|
||||
$link = "";
|
||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||
if ($orgtables && $jush == "sql") { // MySQL EXPLAIN
|
||||
$table = $row[array_search("table=", $links)];
|
||||
$link = ME . $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table);
|
||||
} else {
|
||||
$link = ME . "edit=" . urlencode($links[$key]);
|
||||
foreach ($indexes[$links[$key]] as $col => $j) {
|
||||
$link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]);
|
||||
}
|
||||
}
|
||||
} elseif (is_url($val)) {
|
||||
$link = $val;
|
||||
}
|
||||
if ($val === null) {
|
||||
$val = "<i>NULL</i>";
|
||||
} elseif ($blobs[$key] && !is_utf8($val)) {
|
||||
|
@ -85,8 +71,17 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
|||
$val = "<code>$val</code>";
|
||||
}
|
||||
}
|
||||
if ($link) {
|
||||
$val = "<a href='" . h($link) . "'" . (is_url($link) ? target_blank() : '') . ">$val</a>";
|
||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||
if ($orgtables && $jush == "sql") { // MySQL EXPLAIN
|
||||
$table = $row[array_search("table=", $links)];
|
||||
$link = $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table);
|
||||
} else {
|
||||
$link = "edit=" . urlencode($links[$key]);
|
||||
foreach ($indexes[$links[$key]] as $col => $j) {
|
||||
$link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]);
|
||||
}
|
||||
}
|
||||
$val = "<a href='" . h(ME . $link) . "'>$val</a>";
|
||||
}
|
||||
echo "<td>$val";
|
||||
}
|
||||
|
@ -151,7 +146,7 @@ function set_adminer_settings($settings) {
|
|||
*/
|
||||
function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
global $jush;
|
||||
echo "<textarea name='" . h($name) . "' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $val) { // not implode() to save memory
|
||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time, $elapsed)
|
||||
|
@ -208,9 +203,6 @@ function process_length($length) {
|
|||
*/
|
||||
function process_type($field, $collate = "COLLATE") {
|
||||
global $unsigned;
|
||||
if (DRIVER === 'server' && ($field['unsigned'] === 'unsigned' || stripos( (string) $field['type'],'int') !== false) && min_version(8)) {
|
||||
$field["length"] = '';
|
||||
}
|
||||
return " $field[type]"
|
||||
. process_length($field["length"])
|
||||
. (preg_match(number_type(), $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
||||
|
@ -300,7 +292,7 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
|||
foreach ($fields as $i => $field) {
|
||||
$i++;
|
||||
$orig = $field[($_POST ? "orig" : "field")];
|
||||
$display = (isset($_POST["add"][$i-1]) || (isset($field["field"]) && isset($_POST["drop_col"][$i]) === false)) && (support("drop_col") || $orig == "");
|
||||
$display = (isset($_POST["add"][$i-1]) || (isset($field["field"]) && !$_POST["drop_col"][$i])) && (support("drop_col") || $orig == "");
|
||||
?>
|
||||
<tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
|
||||
<?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
|
||||
|
@ -433,7 +425,7 @@ function drop_create($drop, $create, $drop_created, $test, $drop_test, $location
|
|||
*/
|
||||
function create_trigger($on, $row) {
|
||||
global $jush;
|
||||
$timing_event = " $row[Timing] $row[Event]" . (preg_match('~ OF~', $row["Event"]) ? " $row[Of]" : ""); // SQL injection
|
||||
$timing_event = " $row[Timing] $row[Event]" . ($row["Event"] == "UPDATE OF" ? " " . idf_escape($row["Of"]) : "");
|
||||
return "CREATE TRIGGER "
|
||||
. idf_escape($row["Trigger"])
|
||||
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
||||
|
@ -545,7 +537,7 @@ function doc_link($paths, $text = "<sup>?</sup>") {
|
|||
$urls['sql'] = "https://mariadb.com/kb/en/library/";
|
||||
$paths['sql'] = (isset($paths['mariadb']) ? $paths['mariadb'] : str_replace(".html", "/", $paths['sql']));
|
||||
}
|
||||
return ($paths[$jush] ? "<a href='" . h($urls[$jush] . $paths[$jush]) . "'" . target_blank() . ">$text</a>" : "");
|
||||
return ($paths[$jush] ? "<a href='$urls[$jush]$paths[$jush]'" . target_blank() . ">$text</a>" : "");
|
||||
}
|
||||
|
||||
/** Wrap gzencode() for usage in ob_start()
|
||||
|
|
|
@ -29,9 +29,6 @@ function version() {
|
|||
* @return string
|
||||
*/
|
||||
function idf_unescape($idf) {
|
||||
if (!preg_match('~^[`\'"[]~', $idf)) {
|
||||
return $idf;
|
||||
}
|
||||
$last = substr($idf, -1);
|
||||
return str_replace($last . $last, $last, substr($idf, 1, -1));
|
||||
}
|
||||
|
@ -65,7 +62,7 @@ function number_type() {
|
|||
* @return null modified in place
|
||||
*/
|
||||
function remove_slashes($process, $filter = false) {
|
||||
if (function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) {
|
||||
if (get_magic_quotes_gpc()) {
|
||||
while (list($key, $val) = each($process)) {
|
||||
foreach ($val as $k => $v) {
|
||||
unset($process[$key][$k]);
|
||||
|
@ -271,18 +268,6 @@ function print_fieldset($id, $legend, $visible = false) {
|
|||
echo "<div id='fieldset-$id'" . ($visible ? "" : " class='hidden'") . ">\n";
|
||||
}
|
||||
|
||||
function generate_linksbar($links) {
|
||||
$linksbar = "<p class='links'>";
|
||||
foreach ($links as $key => $link) {
|
||||
if ($key !== key(array_keys($links))) {
|
||||
$linksbar .= "<span class='separator'>|</span>";
|
||||
}
|
||||
$linksbar .= $link;
|
||||
}
|
||||
$linksbar .= "</p>";
|
||||
return $linksbar;
|
||||
}
|
||||
|
||||
/** Return class='active' if $bold is true
|
||||
* @param bool
|
||||
* @param string
|
||||
|
@ -499,7 +484,7 @@ function where($where, $fields = array()) {
|
|||
: " = " . unconvert_field($fields[$key], q($val))
|
||||
))
|
||||
; //! enum and set
|
||||
if ($jush == "sql" && preg_match('~char|text~', $fields[$key]["type"] ?? null) && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters
|
||||
if ($jush == "sql" && preg_match('~char|text~', $fields[$key]["type"]) && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters
|
||||
$return[] = "$column = " . q($val) . " COLLATE " . charset($connection) . "_bin";
|
||||
}
|
||||
}
|
||||
|
@ -740,7 +725,7 @@ function format_time($start) {
|
|||
* @return string
|
||||
*/
|
||||
function relative_uri() {
|
||||
return str_replace(":", "%3a", preg_replace('~^[^?]*/([^?]*)~', '\1', $_SERVER["REQUEST_URI"]));
|
||||
return preg_replace('~^[^?]*/([^?]*)~', '\1', $_SERVER["REQUEST_URI"]);
|
||||
}
|
||||
|
||||
/** Remove parameter from query string
|
||||
|
@ -864,18 +849,19 @@ function friendly_url($val) {
|
|||
/** Print hidden fields
|
||||
* @param array
|
||||
* @param array
|
||||
* @param string
|
||||
* @return bool
|
||||
*/
|
||||
function hidden_fields($process, $ignore = array(), $prefix = '') {
|
||||
function hidden_fields($process, $ignore = array()) {
|
||||
$return = false;
|
||||
foreach ($process as $key => $val) {
|
||||
while (list($key, $val) = each($process)) {
|
||||
if (!in_array($key, $ignore)) {
|
||||
if (is_array($val)) {
|
||||
hidden_fields($val, array(), $key);
|
||||
foreach ($val as $k => $v) {
|
||||
$process[$key . "[$k]"] = $v;
|
||||
}
|
||||
} else {
|
||||
$return = true;
|
||||
echo '<input type="hidden" name="' . h($prefix ? $prefix . "[$key]" : $key) . '" value="' . h($val) . '">';
|
||||
echo '<input type="hidden" name="' . h($key) . '" value="' . h($val) . '">';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1031,7 +1017,7 @@ function input($field, $value, $function) {
|
|||
function process_input($field) {
|
||||
global $adminer, $driver;
|
||||
$idf = bracket_escape($field["field"]);
|
||||
$function = $_POST["function"][$idf] ?? null;
|
||||
$function = $_POST["function"][$idf];
|
||||
$value = $_POST["fields"][$idf];
|
||||
if ($field["type"] == "enum") {
|
||||
if ($value == -1) {
|
||||
|
@ -1130,7 +1116,7 @@ function dump_headers($identifier, $multi_table = false) {
|
|||
$return = $adminer->dumpHeaders($identifier, $multi_table);
|
||||
$output = $_POST["output"];
|
||||
if ($output != "text") {
|
||||
header("Content-Disposition: attachment; filename=" . $adminer->dumpFilename($identifier) . ".$return" . ($output != "file" && preg_match('~^[0-9a-z]+$~', $output) ? ".$output" : ""));
|
||||
header("Content-Disposition: attachment; filename=" . $adminer->dumpFilename($identifier) . ".$return" . ($output != "file" && !preg_match('~[^0-9a-z]~', $output) ? ".$output" : ""));
|
||||
}
|
||||
session_write_close();
|
||||
ob_flush();
|
||||
|
@ -1144,7 +1130,7 @@ function dump_headers($identifier, $multi_table = false) {
|
|||
*/
|
||||
function dump_csv($row) {
|
||||
foreach ($row as $key => $val) {
|
||||
if (preg_match('~["\n,;\t]|^0|\.\d*0$~', $val) || $val === "") {
|
||||
if (preg_match("~[\"\n,;\t]~", $val) || $val === "") {
|
||||
$row[$key] = '"' . str_replace('"', '""', $val) . '"';
|
||||
}
|
||||
}
|
||||
|
@ -1285,9 +1271,9 @@ function select_value($val, $link, $field, $text_length) {
|
|||
*/
|
||||
function is_mail($email) {
|
||||
$atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // characters of local-name
|
||||
$domain = '[[:alnum:]](?:[-[:alnum:]]{0,61}[[:alnum:]])'; // one domain component
|
||||
$pattern = "$atom+(?:\\.$atom+)*@(?:$domain?\\.)+$domain";
|
||||
return is_string($email) && preg_match("(^$pattern(?:,\\s*$pattern)*\$)i", $email);
|
||||
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component
|
||||
$pattern = "$atom+(\\.$atom+)*@($domain?\\.)+$domain";
|
||||
return is_string($email) && preg_match("(^$pattern(,\\s*$pattern)*\$)i", $email);
|
||||
}
|
||||
|
||||
/** Check whether the string is URL address
|
||||
|
@ -1295,47 +1281,8 @@ function is_mail($email) {
|
|||
* @return bool
|
||||
*/
|
||||
function is_url($string) {
|
||||
// only recognises punycode IDNs
|
||||
return (bool) preg_match(
|
||||
'~^
|
||||
https?:// # scheme
|
||||
(?:
|
||||
# IPv6 in square brackets
|
||||
\[(?:
|
||||
(?:[[:xdigit:]]{1,4}:){7}[[:xdigit:]]{1,4} | # 1:2:3:4:5:6:7:8
|
||||
(?:[[:xdigit:]]{1,4}:){1,7}: | # 1:: 1:2:3:4:5:6:7::
|
||||
(?:[[:xdigit:]]{1,4}:){1,6}:[[:xdigit:]]{1,4} | # 1::8 1:2:3:4:5:6::8 1:2:3:4:5:6::8
|
||||
(?:[[:xdigit:]]{1,4}:){1,5}(?::[[:xdigit:]]{1,4}){1,2} | # 1::7:8 1:2:3:4:5::7:8 1:2:3:4:5::8
|
||||
(?:[[:xdigit:]]{1,4}:){1,4}(?::[[:xdigit:]]{1,4}){1,3} | # 1::6:7:8 1:2:3:4::6:7:8 1:2:3:4::8
|
||||
(?:[[:xdigit:]]{1,4}:){1,3}(?::[[:xdigit:]]{1,4}){1,4} | # 1::5:6:7:8 1:2:3::5:6:7:8 1:2:3::8
|
||||
(?:[[:xdigit:]]{1,4}:){1,2}(?::[[:xdigit:]]{1,4}){1,5} | # 1::4:5:6:7:8 1:2::4:5:6:7:8 1:2::8
|
||||
[[:xdigit:]]{1,4}:(?::[[:xdigit:]]{1,4}){1,6} | # 1::3:4:5:6:7:8 1::3:4:5:6:7:8 1::8
|
||||
:(?::[[:xdigit:]]{1,4}){1,7} | # ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8
|
||||
fe80:(?::[[:xdigit:]]{0,4}){0,4}%[[:alnum:]]+ | # fe80::7:8%eth0 fe80::7:8%1 (link-local IPv6 addresses with zone index)
|
||||
::(?:ffff(?::0{1,4})?:)?
|
||||
(?:(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])\.){3}
|
||||
(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])
|
||||
(?<!\b0\.0\.0\.0) | # ::255.255.255.255 ::ffff:255.255.255.255 ::ffff:0:255.255.255.255 (IPv4-mapped IPv6 addresses and IPv4-translated addresses)
|
||||
(?:[[:xdigit:]]{1,4}:){1,4}:
|
||||
(?:(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])\.){3}
|
||||
(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])
|
||||
(?<!\b0\.0\.0\.0) # 2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33 (IPv4-Embedded IPv6 Address)
|
||||
)\] |
|
||||
# IPv4
|
||||
(?:(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])\.){3}
|
||||
(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])
|
||||
(?<!\b0\.0\.0\.0) | # 0.0.0.0 excluded for URLs
|
||||
# domain
|
||||
[_[:alnum:]](?:[-_[:alnum:]]{0,61}[_[:alnum:]])?
|
||||
(?:\.[_[:alnum:]](?:[-_[:alnum:]]{0,61}[_[:alnum:]])?)*
|
||||
) # host
|
||||
(?::(?:[1-9]\d{0,3})?\d)? # port
|
||||
(?:/[^\s?\#]*)? # path
|
||||
(?:\?[^\s\#]*)? # query
|
||||
(?:\#\S*)? # fragment
|
||||
$~xi',
|
||||
$string
|
||||
);
|
||||
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component //! IDN
|
||||
return preg_match("~^(https?)://($domain?\\.)+$domain(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i", $string); //! restrict path, query and fragment characters
|
||||
}
|
||||
|
||||
/** Check if field should be shortened
|
||||
|
@ -1343,7 +1290,7 @@ function is_url($string) {
|
|||
* @return bool
|
||||
*/
|
||||
function is_shortable($field) {
|
||||
return preg_match('~char|text|json|lob|geometry|point|linestring|polygon|string|bytea~', $field["type"] ?? null);
|
||||
return preg_match('~char|text|json|lob|geometry|point|linestring|polygon|string|bytea~', $field["type"]);
|
||||
}
|
||||
|
||||
/** Get query to compute number of found rows
|
||||
|
@ -1465,16 +1412,15 @@ function on_help($command, $side = 0) {
|
|||
* @param bool
|
||||
* @return null
|
||||
*/
|
||||
function edit_form($table, $fields, $row, $update) {
|
||||
function edit_form($TABLE, $fields, $row, $update) {
|
||||
global $adminer, $jush, $token, $error;
|
||||
$table_name = $adminer->tableName(table_status1($table, true));
|
||||
$table_name = $adminer->tableName(table_status1($TABLE, true));
|
||||
page_header(
|
||||
($update ? lang('Edit') : lang('Insert')),
|
||||
$error,
|
||||
array("select" => array($table, $table_name)),
|
||||
array("select" => array($TABLE, $table_name)),
|
||||
$table_name
|
||||
);
|
||||
$adminer->editRowPrint($table, $fields, $row, $update);
|
||||
if ($row === false) {
|
||||
echo "<p class='error'>" . lang('No rows.') . "\n";
|
||||
}
|
||||
|
@ -1488,7 +1434,7 @@ function edit_form($table, $fields, $row, $update) {
|
|||
|
||||
foreach ($fields as $name => $field) {
|
||||
echo "<tr><th>" . $adminer->fieldName($field);
|
||||
$default = $_GET["set"][bracket_escape($name)] ?? null;
|
||||
$default = $_GET["set"][bracket_escape($name)];
|
||||
if ($default === null) {
|
||||
$default = $field["default"];
|
||||
if ($field["type"] == "bit" && preg_match("~^b'([01]*)'\$~", $default, $regs)) {
|
||||
|
@ -1498,7 +1444,7 @@ function edit_form($table, $fields, $row, $update) {
|
|||
$value = ($row !== null
|
||||
? ($row[$name] != "" && $jush == "sql" && preg_match("~enum|set~", $field["type"])
|
||||
? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name])
|
||||
: (is_bool($row[$name]) ? +$row[$name] : $row[$name])
|
||||
: $row[$name]
|
||||
)
|
||||
: (!$update && $field["auto_increment"]
|
||||
? ""
|
||||
|
@ -1508,20 +1454,13 @@ function edit_form($table, $fields, $row, $update) {
|
|||
if (!$_POST["save"] && is_string($value)) {
|
||||
$value = $adminer->editVal($value, $field);
|
||||
}
|
||||
$fname = null;
|
||||
if (isset($_POST["function"][$name])) {
|
||||
$fname = (string)$_POST["function"][$name];
|
||||
}
|
||||
$function = ($_POST["save"]
|
||||
? $fname
|
||||
? (string) $_POST["function"][$name]
|
||||
: ($update && preg_match('~^CURRENT_TIMESTAMP~i', $field["on_update"])
|
||||
? "now"
|
||||
: ($value === false ? null : ($value !== null ? '' : 'NULL'))
|
||||
)
|
||||
);
|
||||
if (!$_POST && !$update && $value == $field["default"] && preg_match('~^[\w.]+\(~', $value)) {
|
||||
$function = "SQL";
|
||||
}
|
||||
if (preg_match("~time~", $field["type"]) && preg_match('~^CURRENT_TIMESTAMP~i', $value)) {
|
||||
$value = "";
|
||||
$function = "now";
|
||||
|
|
|
@ -5,7 +5,7 @@ $langs = array(
|
|||
'en' => 'English', // Jakub Vrána - https://www.vrana.cz
|
||||
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
||||
'bg' => 'Български', // Deyan Delchev
|
||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com | Hossain Ahmed Saiman - hossain.ahmed@altscope.com
|
||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
||||
'bs' => 'Bosanski', // Emir Kurtovic
|
||||
'ca' => 'Català', // Joan Llosas
|
||||
'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
|
||||
|
@ -25,8 +25,7 @@ $langs = array(
|
|||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
||||
'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
|
||||
'ko' => '한국어', // dalli - skcha67@gmail.com
|
||||
'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com
|
||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||
'ms' => 'Bahasa Melayu', // Pisyek
|
||||
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||
'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<?php
|
||||
// PDO can be used in several database drivers
|
||||
if (extension_loaded('pdo')) {
|
||||
/*abstract*/ class Min_PDO {
|
||||
var $_result, $server_info, $affected_rows, $errno, $error, $pdo;
|
||||
|
||||
/*abstract*/ class Min_PDO extends PDO {
|
||||
var $_result, $server_info, $affected_rows, $errno, $error;
|
||||
|
||||
function __construct() {
|
||||
global $adminer;
|
||||
$pos = array_search("SQL", $adminer->operators);
|
||||
|
@ -11,29 +11,24 @@ if (extension_loaded('pdo')) {
|
|||
unset($adminer->operators[$pos]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function dsn($dsn, $username, $password, $options = array()) {
|
||||
$options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_SILENT;
|
||||
$options[PDO::ATTR_STATEMENT_CLASS] = array('Min_PDOStatement');
|
||||
try {
|
||||
$this->pdo = new PDO($dsn, $username, $password, $options);
|
||||
parent::__construct($dsn, $username, $password, $options);
|
||||
} catch (Exception $ex) {
|
||||
auth_error(h($ex->getMessage()));
|
||||
}
|
||||
$this->server_info = @$this->pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
|
||||
$this->setAttribute(13, array('Min_PDOStatement')); // 13 - PDO::ATTR_STATEMENT_CLASS
|
||||
$this->server_info = @$this->getAttribute(4); // 4 - PDO::ATTR_SERVER_VERSION
|
||||
}
|
||||
|
||||
|
||||
/*abstract function select_db($database);*/
|
||||
|
||||
function quote($string) {
|
||||
return $this->pdo->quote($string);
|
||||
}
|
||||
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
$result = $this->pdo->query($query);
|
||||
$result = parent::query($query);
|
||||
$this->error = "";
|
||||
if (!$result) {
|
||||
list(, $this->errno, $this->error) = $this->pdo->errorInfo();
|
||||
list(, $this->errno, $this->error) = $this->errorInfo();
|
||||
if (!$this->error) {
|
||||
$this->error = lang('Unknown error.');
|
||||
}
|
||||
|
@ -42,11 +37,11 @@ if (extension_loaded('pdo')) {
|
|||
$this->store_result($result);
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
function multi_query($query) {
|
||||
return $this->_result = $this->query($query);
|
||||
}
|
||||
|
||||
|
||||
function store_result($result = null) {
|
||||
if (!$result) {
|
||||
$result = $this->_result;
|
||||
|
@ -61,7 +56,7 @@ if (extension_loaded('pdo')) {
|
|||
$this->affected_rows = $result->rowCount();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function next_result() {
|
||||
if (!$this->_result) {
|
||||
return false;
|
||||
|
@ -69,7 +64,7 @@ if (extension_loaded('pdo')) {
|
|||
$this->_result->_offset = 0;
|
||||
return @$this->_result->nextRowset(); // @ - PDO_PgSQL doesn't support it
|
||||
}
|
||||
|
||||
|
||||
function result($query, $field = 0) {
|
||||
$result = $this->query($query);
|
||||
if (!$result) {
|
||||
|
@ -79,18 +74,18 @@ if (extension_loaded('pdo')) {
|
|||
return $row[$field];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Min_PDOStatement extends PDOStatement {
|
||||
var $_offset = 0, $num_rows;
|
||||
|
||||
|
||||
function fetch_assoc() {
|
||||
return $this->fetch(PDO::FETCH_ASSOC);
|
||||
return $this->fetch(2); // PDO::FETCH_ASSOC
|
||||
}
|
||||
|
||||
|
||||
function fetch_row() {
|
||||
return $this->fetch(PDO::FETCH_NUM);
|
||||
return $this->fetch(3); // PDO::FETCH_NUM
|
||||
}
|
||||
|
||||
|
||||
function fetch_field() {
|
||||
$row = (object) $this->getColumnMeta($this->_offset++);
|
||||
$row->orgtable = $row->table;
|
||||
|
@ -100,3 +95,5 @@ if (extension_loaded('pdo')) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
$drivers = array();
|
||||
|
|
|
@ -3,20 +3,20 @@
|
|||
class TmpFile {
|
||||
var $handler;
|
||||
var $size;
|
||||
|
||||
|
||||
function __construct() {
|
||||
$this->handler = tmpfile();
|
||||
}
|
||||
|
||||
|
||||
function write($contents) {
|
||||
$this->size += strlen($contents);
|
||||
fwrite($this->handler, $contents);
|
||||
}
|
||||
|
||||
|
||||
function send() {
|
||||
fseek($this->handler, 0);
|
||||
fpassthru($this->handler);
|
||||
fclose($this->handler);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
<?php
|
||||
$VERSION = "4.8.4";
|
||||
$VERSION = "4.7.7";
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
|
||||
$GLOBALS['project'] = basename(dirname(__FILE__));
|
||||
include "./include/bootstrap.inc.php";
|
||||
include "./include/tmpfile.inc.php";
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'تسجيل الدخول',
|
||||
'Logout successful.' => 'تم تسجيل الخروج بنجاح.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'بيانات الدخول غير صالحة.',
|
||||
'Server' => 'الخادم',
|
||||
'Username' => 'اسم المستخدم',
|
||||
'Password' => 'كلمة المرور',
|
||||
|
@ -264,47 +264,4 @@ $translations = array(
|
|||
'Permanent link' => 'رابط دائم',
|
||||
'Edit all' => 'تعديل الكل',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Ctrl+click on a value to modify it.' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Изход',
|
||||
'Logged as: %s' => 'Текущ потребител: %s',
|
||||
'Logout successful.' => 'Излизането е успешно.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Невалидни потребителски данни.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Прекалено много неуспешни опити за вход, опитайте пак след %d минута.', 'Прекалено много неуспешни опити за вход, опитайте пак след %d минути.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Главната парола вече е невалидна. <a href="https://www.adminer.org/en/extension/"%s>Изберете</a> %s метод, за да я направите постоянна.',
|
||||
'Language' => 'Език',
|
||||
|
@ -333,23 +333,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Вида беше пермахнат.',
|
||||
'Type has been created.' => 'Вида беше създаден.',
|
||||
'Alter type' => 'Промяна на вид',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -1,53 +1,53 @@
|
|||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'লগইন',
|
||||
'Logout successful.' => 'সফলভাবে লগআউট হয়েছে।',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Logout successful.' => 'লগআউট সম্পন্ন হয়েছে।',
|
||||
'Invalid credentials.' => 'ভুল পাসওয়ার্ড।',
|
||||
'Server' => 'সার্ভার',
|
||||
'Username' => 'ইউজারের নাম',
|
||||
'Password' => 'পাসওয়ার্ড',
|
||||
'Select database' => 'ডাটাবেজ নির্বাচন করুন',
|
||||
'Invalid database.' => 'অকার্যকর ডাটাবেজ।',
|
||||
'Select database' => 'ডাটাবেজ নির্বাচন করো',
|
||||
'Invalid database.' => 'ভুল ডাটাবেজ।',
|
||||
'Table has been dropped.' => 'টেবিল মুছে ফেলা হয়েছে।',
|
||||
'Table has been altered.' => 'টেবিল পরিবর্তন করা হয়েছে।',
|
||||
'Table has been altered.' => 'টেবিল সম্পাদনা করা হয়েছে।',
|
||||
'Table has been created.' => 'টেবিল তৈরী করা হয়েছে।',
|
||||
'Alter table' => 'টেবিল পরিবর্তন করুন',
|
||||
'Create table' => 'টেবিল তৈরী করুন',
|
||||
'Alter table' => 'টেবিল সম্পাদনা',
|
||||
'Create table' => 'টেবিল তৈরী করো',
|
||||
'Table name' => 'টেবিলের নাম',
|
||||
'engine' => 'ইন্জিন',
|
||||
'collation' => 'সমষ্টি',
|
||||
'collation' => 'কলোকেশন',
|
||||
'Column name' => 'কলামের নাম',
|
||||
'Type' => 'ধরণ',
|
||||
'Type' => 'টাইপ',
|
||||
'Length' => 'দৈর্ঘ্য',
|
||||
'Auto Increment' => 'স্বয়ংক্রিয় বৃদ্ধি',
|
||||
'Options' => 'বিকল্পসমূহ',
|
||||
'Save' => 'সংরক্ষণ করুন',
|
||||
'Options' => 'অপশন',
|
||||
'Save' => 'সংরক্ষণ',
|
||||
'Drop' => 'মুছে ফেলো',
|
||||
'Database has been dropped.' => 'ডাটাবেজ মুছে ফেলা হয়েছে।',
|
||||
'Database has been created.' => 'ডাটাবেজ তৈরী করা হয়েছে।',
|
||||
'Database has been renamed.' => 'ডাটাবেজের নতুন নামকরণ করা হয়েছে।',
|
||||
'Database has been altered.' => 'ডাটাবেজ পরিবর্তন করা হয়েছে।',
|
||||
'Alter database' => 'ডাটাবেজ পরিবর্তন করুন',
|
||||
'Create database' => 'ডাটাবেজ তৈরী করুন',
|
||||
'SQL command' => 'SQL-কমান্ড',
|
||||
'Database has been altered.' => 'ডাটাবেজ সম্পাদনা করা হয়েছে।',
|
||||
'Alter database' => 'ডাটাবেজ সম্পাদনা',
|
||||
'Create database' => 'ডাটাবেজ তৈরী',
|
||||
'SQL command' => 'SQL-কোয়্যারী',
|
||||
'Logout' => 'লগআউট',
|
||||
'database' => 'ডাটাবেজ',
|
||||
'Use' => 'ব্যবহার',
|
||||
'No tables.' => 'কোন টেবিল নাই।',
|
||||
'select' => 'নির্বাচন',
|
||||
'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',
|
||||
'Item has been updated.' => 'বিষয়বস্তু হালনাগাদ করা হয়েছে।',
|
||||
'Item has been updated.' => 'বিষয়বস্তু আপডেট করা হয়েছে।',
|
||||
'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ সংযোজন করা হয়েছে।',
|
||||
'Edit' => 'সম্পাদনা',
|
||||
'Insert' => 'সংযোজন',
|
||||
'Save and insert next' => 'সংরক্ষন ও পরবর্তী সংযোজন করুন',
|
||||
'Delete' => 'মুছে ফেলুন',
|
||||
'Save and insert next' => 'সংরক্ষন ও পরবর্তী সংযোজন',
|
||||
'Delete' => 'মুছে ফেলো',
|
||||
'Database' => 'ডাটাবেজ',
|
||||
'Routines' => 'রুটিনসমূহ',
|
||||
'Indexes have been altered.' => 'সূচীসমূহ সম্পাদনা করা হয়েছে।',
|
||||
'Indexes' => 'সূচীসমূহ',
|
||||
'Alter indexes' => 'সূচীসমূহ পরিবর্তন করুন',
|
||||
'Add next' => 'পরবর্তী সংযোজন করুন',
|
||||
'Alter indexes' => 'সূচীসমূহ সম্পাদনা',
|
||||
'Add next' => 'সংযোজন',
|
||||
'Language' => 'ভাষা',
|
||||
'Select' => 'নির্বাচন',
|
||||
'New item' => 'নতুন বিষয়বস্তু',
|
||||
|
@ -60,90 +60,90 @@ $translations = array(
|
|||
'edit' => 'সম্পাদনা',
|
||||
'Page' => 'পৃষ্ঠা',
|
||||
'Query executed OK, %d row(s) affected.' => array('কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।', 'কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।'),
|
||||
'Error in query' => 'অনুসন্ধানে ভুল আছে।',
|
||||
'Error in query' => 'কোয়্যারীতে ভুল আছে।',
|
||||
'Execute' => 'সম্পাদন করো',
|
||||
'Table' => 'টেবিল',
|
||||
'Foreign keys' => 'ফরেন কী',
|
||||
'Triggers' => 'ট্রিগার',
|
||||
'View' => 'ভিউ',
|
||||
'Unable to select the table' => 'টেবিল নির্বাচন করতে অক্ষম',
|
||||
'Invalid CSRF token. Send the form again.' => 'অবৈধ CSRF টোকেন। ফর্মটি আবার পাঠান।',
|
||||
'Invalid CSRF token. Send the form again.' => 'অবৈধ CSRF টোকেন। ফর্ম আবার পাঠাও।',
|
||||
'Comment' => 'মন্তব্য',
|
||||
'Default values' => 'ডিফল্ট মান',
|
||||
'%d byte(s)' => array('%d বাইট', '%d বাইটসমূহ'),
|
||||
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নেই।',
|
||||
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নাই।',
|
||||
'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।',
|
||||
'File upload' => 'ফাইল আপলোড',
|
||||
'File uploads are disabled.' => 'ফাইল আপলোড নিষ্ক্রিয় করা আছে।',
|
||||
'Routine has been called, %d row(s) affected.' => array('রুটিন কল করা হয়েছে, %d টি সারি(সমূহ) প্রভাবিত হয়েছে।', 'রুটিন কল করা হয়েছে, %d টি সারি(সমূহ) প্রভাবিত হয়েছে।'),
|
||||
'Routine has been called, %d row(s) affected.' => array('রুটিন কল করা হয়েছে, %d টি সারি (সমূহ) প্রভাবিত হয়েছে।', 'রুটিন কল করা হয়েছে, %d টি সারি (সমূহ) প্রভাবিত হয়েছে।'),
|
||||
'Call' => 'কল',
|
||||
'No extension' => 'কোন এক্সটেনশান নাই',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'কোন PHP সমর্থিত এক্সটেনশন (%s) পাওয়া যায় নাই।',
|
||||
'Session support must be enabled.' => 'সেশন সমর্থন সক্রিয় করা আবশ্যক।',
|
||||
'Session expired, please login again.' => 'সেশনের মেয়াদ শেষ হয়েছে, আবার লগইন করুন।',
|
||||
'Session expired, please login again.' => 'সেশানের মেয়াদ শেষ হয়েছে, আবার লগইন করুন।',
|
||||
'Text length' => 'টেক্সট দৈর্ঘ্য',
|
||||
'Foreign key has been dropped.' => 'ফরেন কী মুছে ফেলা হয়েছে।',
|
||||
'Foreign key has been altered.' => 'ফরেন কী পরিবর্তন করা হয়েছে।',
|
||||
'Foreign key has been altered.' => 'ফরেন কী সম্পাদনা করা হয়েছে।',
|
||||
'Foreign key has been created.' => 'ফরেন কী তৈরী করা হয়েছে।',
|
||||
'Foreign key' => 'ফরেন কী ',
|
||||
'Target table' => 'টার্গেট টেবিল',
|
||||
'Change' => 'পরিবর্তন',
|
||||
'Source' => 'উৎস',
|
||||
'Target' => 'লক্ষ্য',
|
||||
'Add column' => 'কলাম সংযোজন করুন',
|
||||
'Alter' => 'পরিবর্তন',
|
||||
'Add foreign key' => 'ফরেন কী সংযোজন করুন',
|
||||
'Add column' => 'কলাম সংযোজন',
|
||||
'Alter' => 'সম্পাদনা',
|
||||
'Add foreign key' => 'ফরেন কী সংযোজন করো',
|
||||
'ON DELETE' => 'অন ডিলিট',
|
||||
'ON UPDATE' => 'অন আপডেট',
|
||||
'Index Type' => 'সূচী-ধরণ',
|
||||
'Column (length)' => 'কলাম (দৈর্ঘ্য)',
|
||||
'View has been dropped.' => 'ভিউ মুছে ফেলা হয়েছে।',
|
||||
'View has been altered.' => 'ভিউ পরিবর্তন করা হয়েছে।',
|
||||
'View has been altered.' => 'ভিউ সম্পাদনা করা হয়েছে।',
|
||||
'View has been created.' => 'ভিউ তৈরী করা হয়েছে।',
|
||||
'Alter view' => 'ভিউ পরিবর্তন করুন',
|
||||
'Create view' => 'ভিউ তৈরী করুন',
|
||||
'Alter view' => 'ভিউ সম্পাদনা করো',
|
||||
'Create view' => 'ভিউ তৈরী করো',
|
||||
'Name' => 'নাম',
|
||||
'Process list' => 'প্রসেস তালিকা',
|
||||
'%d process(es) have been killed.' => array('%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।', '%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।'),
|
||||
'%d process(es) have been killed.' => array('%d টি প্রসেস (সমূহ) বিনষ্ট করা হয়েছে।', '%d টি প্রসেস (সমূহ) বিনষ্ট করা হয়েছে।'),
|
||||
'Kill' => 'বিনষ্ট করো',
|
||||
'Parameter name' => 'প্যারামিটারের নাম',
|
||||
'Database schema' => 'ডাটাবেজ স্কিমা',
|
||||
'Create procedure' => 'কার্যপ্রণালী তৈরী করুন',
|
||||
'Create function' => 'ফাংশন তৈরী করুন',
|
||||
'Create procedure' => 'প্রসিডিওর তৈরী করো',
|
||||
'Create function' => 'ফাংশন তৈরী করো',
|
||||
'Routine has been dropped.' => 'রুটিন মুছে ফেলা হয়েছে।',
|
||||
'Routine has been altered.' => 'রুটিন পরিবর্তন করা হয়েছে।',
|
||||
'Routine has been altered.' => 'রুটিন সম্পাদনা করা হয়েছে।',
|
||||
'Routine has been created.' => 'রুটিন তৈরী করা হয়েছে।',
|
||||
'Alter function' => 'ফাংশন পরিবর্তন করুন',
|
||||
'Alter procedure' => 'কার্যপ্রণালী পরিবর্তন করুন',
|
||||
'Alter function' => 'ফাংশন সম্পাদনা করো',
|
||||
'Alter procedure' => 'প্রসিডিওর সম্পাদনা করো',
|
||||
'Return type' => 'রিটার্ন টাইপ',
|
||||
'Add trigger' => 'ট্রিগার সংযোজন করুন',
|
||||
'Add trigger' => 'ট্রিগার সংযোজন করো',
|
||||
'Trigger has been dropped.' => 'ট্রিগার মুছে ফেলা হয়েছে।',
|
||||
'Trigger has been altered.' => 'ট্রিগার পরিবর্তন করা হয়েছে।',
|
||||
'Trigger has been altered.' => 'ট্রিগার সম্পাদনা করা হয়েছে।',
|
||||
'Trigger has been created.' => 'ট্রিগার তৈরী করা হয়েছে।',
|
||||
'Alter trigger' => 'ট্রিগার পরিবর্তন করুন',
|
||||
'Create trigger' => 'ট্রিগার তৈরী করুন',
|
||||
'Alter trigger' => 'ট্রিগার সম্পাদনা করো',
|
||||
'Create trigger' => 'ট্রিগার তৈরী করো',
|
||||
'Time' => 'সময়',
|
||||
'Event' => 'ইভেন্ট',
|
||||
'%s version: %s through PHP extension %s' => 'ভার্সন %s: %s, %s PHP এক্সটেনশনের মধ্য দিয়ে',
|
||||
'%d row(s)' => array('%d সারি', '%d সারি সমূহ'),
|
||||
'Remove' => 'মুছে ফেলুন',
|
||||
'Are you sure?' => 'আপনি কি নিশ্চিত?',
|
||||
'Remove' => 'অপসারণ',
|
||||
'Are you sure?' => 'তুমি কি নিশ্চিত?',
|
||||
'Privileges' => 'প্রিভিলেজেস',
|
||||
'Create user' => 'ব্যবহারকারি তৈরী করুন',
|
||||
'User has been dropped.' => 'ব্যবহারকারি মুছে ফেলা হয়েছে।',
|
||||
'User has been altered.' => 'ব্যবহারকারি সম্পাদনা করা হয়েছে।',
|
||||
'User has been created.' => 'ব্যবহারকারি তৈরী করা হয়েছে।',
|
||||
'Hashed' => 'হ্যাশড',
|
||||
'Create user' => 'ইউজার তৈরী করো',
|
||||
'User has been dropped.' => 'ইউজার মুছে ফেলা হয়েছে।',
|
||||
'User has been altered.' => 'ইউজার সম্পাদনা করা হয়েছে।',
|
||||
'User has been created.' => 'ইউজার তৈরী করা হয়েছে।',
|
||||
'Hashed' => 'হ্যাসড',
|
||||
'Column' => 'কলাম',
|
||||
'Routine' => 'রুটিন',
|
||||
'Grant' => 'অনুমতি',
|
||||
'Revoke' => 'প্রত্যাহার',
|
||||
'Grant' => 'গ্র্যান্ট',
|
||||
'Revoke' => 'রিভোক',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'খুব বড় POST ডাটা। ডাটা সংক্ষিপ্ত করো অথবা %s কনফিগারেশন নির্দেশ বৃদ্ধি করো',
|
||||
'Logged as: %s' => '%s হিসাবে লগড',
|
||||
'Move up' => 'উপরে স্থানান্তর',
|
||||
'Move down' => 'নীচে স্থানান্তর',
|
||||
'Functions' => 'ফাংশন সমূহ',
|
||||
'Aggregation' => 'সমষ্টি',
|
||||
'Aggregation' => 'মোট পরিমাণ',
|
||||
'Export' => 'এক্সপোর্ট',
|
||||
'Output' => 'আউটপুট',
|
||||
'open' => 'খোলা',
|
||||
|
@ -162,8 +162,8 @@ $translations = array(
|
|||
'Schedule' => 'সময়সূচি',
|
||||
'Start' => 'শুরু',
|
||||
'End' => 'সমাপ্তি',
|
||||
'Status' => 'অবস্থা',
|
||||
'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করুন',
|
||||
'Status' => 'স্ট্যাটাস',
|
||||
'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করো',
|
||||
'Tables and views' => 'টেবিল এবং ভিউ সমূহ',
|
||||
'Data Length' => 'ডাটার দৈর্ঘ্য',
|
||||
'Index Length' => 'ইনডেক্স এর দৈর্ঘ্য',
|
||||
|
@ -175,14 +175,14 @@ $translations = array(
|
|||
'Repair' => 'মেরামত',
|
||||
'Truncate' => 'ছাঁটাই',
|
||||
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
||||
'Rows' => 'সারিসমূহ',
|
||||
'Rows' => 'সারি',
|
||||
',' => ',',
|
||||
'0123456789' => '০১২৩৪৫৬৭৮৯',
|
||||
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করুন',
|
||||
'Move' => 'স্থানান্তর করুন',
|
||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
||||
'Move' => 'স্থানান্তর করো',
|
||||
'Engine' => 'ইঞ্জিন',
|
||||
'Save and continue edit' => 'সংরক্ষণ করুন এবং সম্পাদনা চালিয়ে যান',
|
||||
'Save and continue edit' => 'সংরক্ষণ করো এবং সম্পাদনা চালিয়ে যাও',
|
||||
'original' => 'প্রকৃত',
|
||||
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
||||
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
||||
|
@ -193,10 +193,10 @@ $translations = array(
|
|||
'Partitions' => 'পার্টিশন',
|
||||
'Partition name' => 'পার্টিশনের নাম',
|
||||
'Values' => 'মানসমূহ',
|
||||
'%d row(s) have been imported.' => array('%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।'),
|
||||
'%d row(s) have been imported.' => array('%d টি সারি (সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি (সমূহ) ইমপোর্ট করা হয়েছে।'),
|
||||
'anywhere' => 'যে কোন স্থানে',
|
||||
'Import' => 'ইমপোর্ট',
|
||||
'Stop on error' => 'ত্রুটি পেলে থেমে যান',
|
||||
'Stop on error' => 'ত্রুটি পেলে থেমে যাও',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
||||
|
@ -216,14 +216,14 @@ $translations = array(
|
|||
'E-mail' => 'ই-মেইল',
|
||||
'From' => 'থেকে',
|
||||
'Subject' => 'বিষয়',
|
||||
'Send' => 'পাঠান',
|
||||
'%d e-mail(s) have been sent.' => array('%d ইমেইল(গুলি) পাঠানো হয়েছে।', '%d ইমেইল(গুলি) পাঠানো হয়েছে।'),
|
||||
'Send' => 'পাঠাও',
|
||||
'%d e-mail(s) have been sent.' => array('%d ইমেইল (গুলি) পাঠানো হয়েছে।', '%d ইমেইল (গুলি) পাঠানো হয়েছে।'),
|
||||
'Webserver file %s' => 'ওয়েবসার্ভার ফাইল %s',
|
||||
'File does not exist.' => 'ফাইলটির কোন অস্তিত্ব নেই।',
|
||||
'File does not exist.' => 'ফাইলের কোন অস্তিত্ব নেই।',
|
||||
'%d in total' => 'সর্বমোটঃ %d টি',
|
||||
'Permanent login' => 'স্থায়ী লগইন',
|
||||
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
||||
'Search data in tables' => 'টেবিলে তথ্য খুঁজুন',
|
||||
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
||||
'Schema' => 'স্কিমা',
|
||||
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
||||
'Create schema' => 'স্কিমা তৈরী করো',
|
||||
|
@ -236,75 +236,32 @@ $translations = array(
|
|||
'Sequence has been dropped.' => 'অনুক্রম মুছে ফেলা হয়েছে।',
|
||||
'Sequence has been created.' => 'অনুক্রম তৈরি করা হয়েছে।',
|
||||
'Sequence has been altered.' => 'অনুক্রম সম্পাদনা করা হয়েছে।',
|
||||
'User types' => 'ব্যবহারকারির ধরণ',
|
||||
'Create type' => 'ধরণ তৈরী করুন',
|
||||
'Alter type' => 'ধরণ পরিবর্তন করুন',
|
||||
'Type has been dropped.' => 'ধরণ মুছে ফেলা হয়েছে।',
|
||||
'Type has been created.' => 'ধরণ তৈরি করা হয়েছে।',
|
||||
'Use edit link to modify this value.' => 'এই মানটি পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করুন।',
|
||||
'User types' => 'ইউজারের টাইপ',
|
||||
'Create type' => 'টাইপ তৈরী করো',
|
||||
'Alter type' => 'টাইপ পরিবর্তন করো',
|
||||
'Type has been dropped.' => 'টাইপ মুছে ফেলা হয়েছে।',
|
||||
'Type has been created.' => 'টাইপ তৈরি করা হয়েছে।',
|
||||
'Use edit link to modify this value.' => 'এই মান পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করো।',
|
||||
'last' => 'সর্বশেষ',
|
||||
'From server' => 'সার্ভার থেকে',
|
||||
'System' => 'সিস্টেম',
|
||||
'Select data' => 'তথ্য নির্বাচন করো',
|
||||
'Show structure' => 'গঠন দেখান',
|
||||
'Show structure' => 'গঠন দেখাও',
|
||||
'empty' => 'খালি',
|
||||
'Network' => 'নেটওয়ার্ক',
|
||||
'Geometry' => 'জ্যামিতি',
|
||||
'File exists.' => 'ফাইল রয়েছে।',
|
||||
'Attachments' => 'সংযুক্তিগুলো',
|
||||
'%d query(s) executed OK.' => array('SQL-অনুসন্ধান সফলভাবে সম্পন্ন হয়েছে', '%d SQL-অনুসন্ধানসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
||||
'Show only errors' => 'শুধুমাত্র ত্রুটিগুলো দেখান',
|
||||
'Attachments' => 'সংযুক্তি',
|
||||
'%d query(s) executed OK.' => array('SQL-কোয়্যারী সফলভাবে সম্পন্ন হয়েছে', '%d SQL-কোয়্যারীসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
||||
'Show only errors' => 'শুধুমাত্র ত্রুটি দেখাও',
|
||||
'Refresh' => 'রিফ্রেশ',
|
||||
'Invalid schema.' => 'অবৈধ স্কিমা।',
|
||||
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করুন।',
|
||||
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করো।',
|
||||
'now' => 'এখন',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'টেবিলগুলো কপি করা হয়েছে।',
|
||||
'Tables have been copied.' => 'টেবিল কপি করা হয়েছে।',
|
||||
'Copy' => 'কপি',
|
||||
'Permanent link' => 'স্থায়ী লিংক',
|
||||
'Edit all' => 'সবগুলো সম্পাদনা করুন',
|
||||
'Edit all' => 'সকল সম্পাদনা করো',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Ctrl+click on a value to modify it.' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Odjava',
|
||||
'Logged as: %s' => 'Prijavi se kao: %s',
|
||||
'Logout successful.' => 'Uspešna odjava.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Nevažeće dozvole.',
|
||||
'Language' => 'Jezik',
|
||||
'Invalid CSRF token. Send the form again.' => 'Nevažeći CSRF kod. Proslijedite ponovo formu.',
|
||||
'No extension' => 'Bez dodataka',
|
||||
|
@ -318,38 +318,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Tip je izbrisan.',
|
||||
'Type has been created.' => 'tip je spašen.',
|
||||
'Alter type' => 'Ažuriraj tip',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Inicia la sessió',
|
||||
'Logout successful.' => 'Desconnexió correcta.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Credencials invàlids.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Nom d\'usuari',
|
||||
'Password' => 'Contrasenya',
|
||||
|
@ -35,7 +35,7 @@ $translations = array(
|
|||
'Use' => 'Utilitza',
|
||||
'No tables.' => 'No hi ha cap taula.',
|
||||
'select' => 'registres',
|
||||
'Item has been deleted.' => 'S\'ha suprimit l\'element.',
|
||||
'Item has been deleted.' => 'S\'ha suprmit l\'element.',
|
||||
'Item has been updated.' => 'S\'ha actualitzat l\'element.',
|
||||
'Item%s has been inserted.' => 'S\'ha insertat l\'element%s.',
|
||||
'Edit' => 'Edita',
|
||||
|
@ -44,9 +44,9 @@ $translations = array(
|
|||
'Delete' => 'Suprimeix',
|
||||
'Database' => 'Base de dades',
|
||||
'Routines' => 'Rutines',
|
||||
'Indexes have been altered.' => 'S\'han modificat els índex.',
|
||||
'Indexes have been altered.' => 'S\'han modificat els índexs.',
|
||||
'Indexes' => 'Índexs',
|
||||
'Alter indexes' => 'Modifica els índex',
|
||||
'Alter indexes' => 'Modifica els índexs',
|
||||
'Add next' => 'Afegeix el següent',
|
||||
'Language' => 'Idioma',
|
||||
'Select' => 'Selecciona',
|
||||
|
@ -74,11 +74,11 @@ $translations = array(
|
|||
'No commands to execute.' => 'Cap comanda per executar.',
|
||||
'Unable to upload a file.' => 'Impossible adjuntar el fitxer.',
|
||||
'File upload' => 'Adjunta un fitxer',
|
||||
'File uploads are disabled.' => 'La pujada de fitxers està desactivada.',
|
||||
'File uploads are disabled.' => 'L\'ddjunció de fitxers està desactivada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('S\'ha cridat la rutina, %d registre modificat.', 'S\'ha cridat la rutina, %d registres modificats.'),
|
||||
'Call' => 'Crida',
|
||||
'No extension' => 'Cap extensió',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP suportades (%s) disponible.',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP soporatades (%s) disponible.',
|
||||
'Session support must be enabled.' => 'Cal que estigui permès l\'us de sessions.',
|
||||
'Session expired, please login again.' => 'La sessió ha expirat, torna a iniciar-ne una.',
|
||||
'Text length' => 'Longitud del text',
|
||||
|
@ -86,7 +86,7 @@ $translations = array(
|
|||
'Foreign key has been altered.' => 'S\'ha modificat la clau forana.',
|
||||
'Foreign key has been created.' => 'S\'ha creat la clau forana.',
|
||||
'Foreign key' => 'Clau forana',
|
||||
'Target table' => 'Taula de destinació',
|
||||
'Target table' => 'Taula de destí',
|
||||
'Change' => 'Canvi',
|
||||
'Source' => 'Font',
|
||||
'Target' => 'Destí',
|
||||
|
@ -139,7 +139,7 @@ $translations = array(
|
|||
'Grant' => 'Grant',
|
||||
'Revoke' => 'Revoke',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Les dades POST són massa grans. Redueix les dades o incrementa la directiva de configuració %s.',
|
||||
'Logged as: %s' => 'Connectat com a: %s',
|
||||
'Logged as: %s' => 'Connectat com: %s',
|
||||
'Move up' => 'Mou a dalt',
|
||||
'Move down' => 'Mou a baix',
|
||||
'Functions' => 'Funcions',
|
||||
|
@ -204,7 +204,7 @@ $translations = array(
|
|||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||
'History' => 'Història',
|
||||
'Variables' => 'Variables',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les columnes d\'origen i de destinació han de ser del mateix tipus, la columna de destinació ha d\'estar indexada i les dades referenciades han d\'existir.',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les columnes origen i destí han de ser del mateix tipus, la columna destí ha d\'estar indexada i les dades referenciades han d\'existir.',
|
||||
'E-mail' => 'Correu electrònic',
|
||||
'From' => 'De',
|
||||
'Subject' => 'Assumpte',
|
||||
|
@ -265,46 +265,4 @@ $translations = array(
|
|||
'Permanent link' => 'Enllaç permanent',
|
||||
'Edit all' => 'Edita-ho tot',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,8 @@ $translations = array(
|
|||
'Logout' => 'Odhlásit',
|
||||
'Logged as: %s' => 'Přihlášen jako: %s',
|
||||
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
||||
'Invalid server or credentials.' => 'Neplatný server nebo přihlašovací údaje.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Díky za použití Admineru, <a href="https://www.adminer.org/cs/donation/">přispějte</a> na vývoj.',
|
||||
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
||||
'There is a space in the input password which might be the cause.' => 'Problém může být, že je v zadaném hesle mezera.',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href="https://www.adminer.org/cs/password/"%s>více informací</a>.',
|
||||
'Database does not support password.' => 'Databáze nepodporuje heslo.',
|
||||
|
@ -22,7 +23,7 @@ $translations = array(
|
|||
'No extension' => 'Žádné rozšíření',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
|
||||
'Connecting to privileged ports is not allowed.' => 'Připojování k privilegovaným portům není povoleno.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Zakažte %s nebo povolte rozšíření %s nebo %s.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Zakažte %s nebo povolte extenze %s nebo %s.',
|
||||
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
||||
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Akce bude provedena po úspěšném přihlášení se stejnými přihlašovacími údaji.',
|
||||
|
@ -345,11 +346,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Typ byl odstraněn.',
|
||||
'Type has been created.' => 'Typ byl vytvořen.',
|
||||
'Alter type' => 'Pozměnit typ',
|
||||
|
||||
'as a regular expression' => 'jako regulární výraz',
|
||||
'Copy to clipboard' => 'Kopírovat do schránky',
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => 'Ke stažení je nová verze AdminerEvo!',
|
||||
);
|
||||
|
|
|
@ -9,7 +9,7 @@ $translations = array(
|
|||
'Logout' => 'Log ud',
|
||||
'Logged as: %s' => 'Logget ind som: %s',
|
||||
'Logout successful.' => 'Log af vellykket.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Ugyldige log ind oplysninger.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-kodeordet er udløbet. <a href="https://www.adminer.org/en/extension/"%s>Implementer</a> en metode for %s for at gøre det permanent.',
|
||||
'Language' => 'Sprog',
|
||||
'Invalid CSRF token. Send the form again.' => 'Ugyldigt CSRF-token - Genindsend formen.',
|
||||
|
@ -279,32 +279,4 @@ $translations = array(
|
|||
'Type has been created.' => 'Typen er oprettet.',
|
||||
'Alter type' => 'Ændre type',
|
||||
'Saving' => 'Gemmer',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
$translations = array(
|
||||
'Login' => 'Login',
|
||||
'Logout successful.' => 'Abmeldung erfolgreich.',
|
||||
'Invalid server or credentials.' => 'Ungültige Server oder Anmelde-Informationen.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Danke, dass Sie Adminer genutzt haben. <a href="https://www.adminer.org/de/donation/">Spenden willkommen!</a>',
|
||||
'Invalid credentials.' => 'Ungültige Anmelde-Informationen.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Benutzer',
|
||||
'Password' => 'Passwort',
|
||||
|
@ -279,32 +280,10 @@ $translations = array(
|
|||
'If you did not send this request from Adminer then close this page.' => 'Wenn Sie diese Anfrage nicht von Adminer gesendet haben, schließen Sie diese Seite.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Sie können eine große SQL-Datei per FTP hochladen und dann vom Server importieren.',
|
||||
'You are offline.' => 'Sie sind offline.',
|
||||
'You have no privileges to update this table.' => 'Sie haben keine Rechte, um diese Tabelle zu aktualisieren.',
|
||||
'You have no privileges to update this table.' => 'Sie haben keine Rechte, um diese Tabelle zu aktualisieren.' ,
|
||||
'Saving' => 'Speichere',
|
||||
'yes' => 'ja',
|
||||
'no' => 'nein',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Das Master-Passwort ist abgelaufen. <a href="https://www.adminer.org/de/extension/"%s>Implementieren</a> Sie die %s Methode, um es permanent zu machen.',
|
||||
'%d / ' => '%d / ',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Full table scan' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,13 +10,13 @@ $translations = array(
|
|||
'Logout' => 'Αποσύνδεση',
|
||||
'Logged as: %s' => 'Συνδεθήκατε ως %s',
|
||||
'Logout successful.' => 'Αποσυνδεθήκατε με επιτυχία.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Επανειλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτό.', 'Επανειλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτά.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Έληξε ο Κύριος Κωδικός. <a href="https://www.adminer.org/en/extension/"%s>Ενεργοποιήστε</a> τη μέθοδο %s για να τον κάνετε μόνιμο.',
|
||||
'Invalid credentials.' => 'Εσφαλμένα Διαπιστευτήρια.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Επανηλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτό.', 'Επανηλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτά.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Έλειξε ο Κύριος Κωδικός. <a href="https://www.adminer.org/en/extension/"%s>Ενεργοποιήστε</a> τη μέθοδο %s για να τον κάνετε μόνιμο.',
|
||||
'Language' => 'Γλώσσα',
|
||||
'Invalid CSRF token. Send the form again.' => 'Άκυρο κουπόνι CSRF. Στείλτε τη φόρμα ξανά.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Αν δε στείλατε αυτό το αίτημα από το Adminer, τότε κλείστε αυτή τη σελίδα.',
|
||||
'No extension' => 'Καμία Επέκταση',
|
||||
'No extension' => 'Χωρίς Επεκτάσεις',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Καμία από τις υποστηριζόμενες επεκτάσεις PHP (%s) δεν είναι διαθέσιμη.',
|
||||
'Session support must be enabled.' => 'Πρέπει να είναι ενεργοποιημένη η υποστήριξη συνεδριών.',
|
||||
'Session expired, please login again.' => 'Η συνεδρία έληξε, παρακαλώ συνδεθείτε ξανά.',
|
||||
|
@ -26,7 +26,7 @@ $translations = array(
|
|||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Δικαιώματα',
|
||||
'Privileges' => 'Προνόμια',
|
||||
'Create user' => 'Δημιουργία Χρήστη',
|
||||
'User has been dropped.' => 'Ο Χρήστης διαγράφηκε.',
|
||||
'User has been altered.' => 'Ο Χρήστης τροποποιήθηκε.',
|
||||
|
@ -38,7 +38,7 @@ $translations = array(
|
|||
'Revoke' => 'Ανάκληση',
|
||||
|
||||
'Process list' => 'Λίστα διεργασιών',
|
||||
'%d process(es) have been killed.' => array('Τερματίστηκε %d διεργασία.', 'Τερματίστηκαν %d διεργασίες.'),
|
||||
'%d process(es) have been killed.' => array('Τερματίστηκαν %d διεργασία.', 'Τερματίστηκαν %d διεργασίες.'),
|
||||
'Kill' => 'Τερματισμός',
|
||||
|
||||
'Variables' => 'Μεταβλητές',
|
||||
|
@ -46,8 +46,8 @@ $translations = array(
|
|||
|
||||
'SQL command' => 'Εντολή SQL',
|
||||
'%d query(s) executed OK.' => array('Το ερώτημα %d εκτελέστηκε ΟΚ.', 'Τα ερώτηματα %d εκτελέστηκαν ΟΚ.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκε %d σειρά.', 'Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκαν %d σειρές.'),
|
||||
'No commands to execute.' => 'Δεν υπάρχουν εντολές να εκτελεστούν.',
|
||||
'Query executed OK, %d row(s) affected.' => array('Το ερώτημα εκτελέστηκε ΟΚ, επιρρεάστηκε %d σειρά.', 'Το ερώτημα εκτελέστηκε ΟΚ, επιρρεάστηκαν %d σειρές.'),
|
||||
'No commands to execute.' => 'Δεν υπάρχει εντολή να εκτελεστεί.',
|
||||
'Error in query' => 'Σφάλμα στο ερώτημα',
|
||||
'Execute' => 'Εκτέλεση',
|
||||
'Stop on error' => 'Διακοπή όταν υπάρχει σφάλμα',
|
||||
|
@ -58,16 +58,16 @@ $translations = array(
|
|||
'Clear' => 'Καθαρισμός',
|
||||
'Edit all' => 'Επεξεργασία όλων',
|
||||
|
||||
'File upload' => 'Μεταφόρτωση αρχείου',
|
||||
'File upload' => 'Ανέβασμα αρχείου',
|
||||
'From server' => 'Από διακομιστή',
|
||||
'Webserver file %s' => 'Αρχείο %s από διακομιστή web',
|
||||
'Run file' => 'Εκτέλεση αρχείου',
|
||||
'File does not exist.' => 'Το αρχείο δεν υπάρχει.',
|
||||
'File uploads are disabled.' => 'Έχει απενεργοποιηθεί η μεταφόρτωση αρχείων.',
|
||||
'Unable to upload a file.' => 'Αδυναμία μεταφόρτωσης αρχείου.',
|
||||
'Maximum allowed file size is %sB.' => 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείου είναι %sB.',
|
||||
'File uploads are disabled.' => 'Έχει απενεργοποιηθεί το ανέβασμα αρχείων.',
|
||||
'Unable to upload a file.' => 'Δεν είναι δυνατόν να ανεβεί το αρχείο.',
|
||||
'Maximum allowed file size is %sB.' => 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείο για ανέβασμα είναι %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Πολλά δεδομένα POST. Μείωστε τα περιεχόμενα ή αυξήστε την σχετική ρύθμιση %s.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Μπορείτε να μεταφορτώσετε ένα μεγάλο αρχείο SQL μέσω FTP και να το εισάγετε από το διακομιστή.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Μπορείτε να ανεβάσετε ένα μεγάλο αρχείο SQL μέσω FTP και να το εισάγετε από το διακομιστή.',
|
||||
'You are offline.' => 'Βρίσκεστε εκτός σύνδεσης.',
|
||||
|
||||
'Export' => 'Εξαγωγή',
|
||||
|
@ -82,7 +82,7 @@ $translations = array(
|
|||
'database' => 'β. δεδομένων',
|
||||
'Use' => 'χρήση',
|
||||
'Select database' => 'Επιλέξτε Β.Δ.',
|
||||
'Invalid database.' => 'Λανθασμένη Β.Δ.',
|
||||
'Invalid database.' => 'Άκυρη Β.Δ.',
|
||||
'Database has been dropped.' => 'Η Β.Δ. διαγράφηκε.',
|
||||
'Databases have been dropped.' => 'Οι Β.Δ. διαγράφηκαν.',
|
||||
'Database has been created.' => 'Η Β.Δ. δημιουργήθηκε.',
|
||||
|
@ -111,7 +111,7 @@ $translations = array(
|
|||
'Check' => 'Έλεγχος',
|
||||
'Repair' => 'Επιδιόρθωση',
|
||||
'Truncate' => 'Περικοπή',
|
||||
'Tables have been truncated.' => 'Οι πίνακες περικόπηκαν.',
|
||||
'Tables have been truncated.' => 'Οι πίνακες περικόπτηκαν.',
|
||||
'Move to other database' => 'Μεταφορά σε άλλη Β.Δ.',
|
||||
'Move' => 'Μεταφορά',
|
||||
'Tables have been moved.' => 'Οι πίνακες μεταφέρθηκαν.',
|
||||
|
@ -119,11 +119,11 @@ $translations = array(
|
|||
'Tables have been copied.' => 'Οι πίνακες αντιγράφηκαν.',
|
||||
|
||||
'Routines' => 'Ρουτίνες',
|
||||
'Routine has been called, %d row(s) affected.' => array('Η ρουτίνα εκτελέστηκε, επηρεάστηκε %d σειρά.', 'Η ρουτίνα εκτελέστηκε, επηρεάστηκαν %d σειρές.'),
|
||||
'Routine has been called, %d row(s) affected.' => array('Η ρουτίνα εκτελέστηκε, επιρρεάστηκε %d σειρά.', 'Η ρουτίνα εκτελέστηκε, επιρρεάστηκαν %d σειρές.'),
|
||||
'Call' => 'Εκτέλεση',
|
||||
'Parameter name' => 'Όνομα παραμέτρου',
|
||||
'Create procedure' => 'Δημιουργία διαδικασίας',
|
||||
'Create function' => 'Δημιουργία Συνάρτησης',
|
||||
'Create function' => 'Δημιουργία Λειτουργίας',
|
||||
'Routine has been dropped.' => 'Η ρουτίνα διαγράφηκε.',
|
||||
'Routine has been altered.' => 'Η ρουτίνα τροποποιήθηκε.',
|
||||
'Routine has been created.' => 'Η ρουτίνα δημιουργήθηκε.',
|
||||
|
@ -151,7 +151,7 @@ $translations = array(
|
|||
'Alter table' => 'Τροποποίηση πίνακα',
|
||||
'Create table' => 'Δημιουργία πίνακα',
|
||||
'Table has been dropped.' => 'Ο πίνακας διαγράφηκε.',
|
||||
'Tables have been dropped.' => 'Οι πίνακες διαγράφηκαν.',
|
||||
'Tables have been dropped.' => 'Οι πινακες διαγράφηκαν.',
|
||||
'Tables have been optimized.' => 'Οι πίνακες βελτιστοποιήθηκαν.',
|
||||
'Table has been altered.' => 'Ο πίνακας τροποποιήθηκε.',
|
||||
'Table has been created.' => 'Ο πίνακας δημιουργήθηκε.',
|
||||
|
@ -210,7 +210,7 @@ $translations = array(
|
|||
'Add foreign key' => 'Προσθήκη εξαρτημένου κλειδιού',
|
||||
'ON DELETE' => 'ΚΑΤΑ ΤΗ ΔΙΑΓΡΑΦΗ',
|
||||
'ON UPDATE' => 'ΚΑΤΑ ΤΗΝ ΑΛΛΑΓΗ',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Οι στήλες στην πηγή και το στόχο πρέπει να έχουν τον ίδιο τύπο, πρέπει να υπάρχει δείκτης στη στήλη στόχο και να υπάρχουν εξαρτημένα δεδομένα.',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Οι στήλες στη πηγή και το στόχο πρέπει να έχουν τον ίδιο τύπο, πρέπει να υπάρχει δείκτης στη στήλη στόχο και να υπάρχουν εξαρτημένα δεδομένα.',
|
||||
|
||||
'Triggers' => 'Εναύσματα',
|
||||
'Add trigger' => 'Προσθήκη εναύσματος',
|
||||
|
@ -262,7 +262,7 @@ $translations = array(
|
|||
'Item%s has been inserted.' => 'Η εγγραφή%s εισήχθη.',
|
||||
'Item has been deleted.' => 'Η εγγραφή διαγράφηκε.',
|
||||
'Item has been updated.' => 'Η εγγραφή ενημερώθηκε.',
|
||||
'%d item(s) have been affected.' => array('Επηρεάστηκε %d εγγραφή.', 'Επηρεάστηκαν %d εγγραφές.'),
|
||||
'%d item(s) have been affected.' => array('Επιρρεάστηκε %d εγγραφή.', 'Επιρρεάστηκαν %d εγγραφές.'),
|
||||
'New item' => 'Νέα εγγραφή',
|
||||
'original' => 'πρωτότυπο',
|
||||
// label for value '' in enum data type
|
||||
|
@ -274,7 +274,7 @@ $translations = array(
|
|||
'Save and continue edit' => 'Αποθήκευση και συνέχεια επεξεργασίας',
|
||||
'Save and insert next' => 'Αποθήκευση και εισαγωγή επόμενου',
|
||||
'Selected' => 'Επιλεγμένα',
|
||||
'Clone' => 'Κλωνοποίηση',
|
||||
'Clone' => 'Κλονοποίηση',
|
||||
'Delete' => 'Διαγραφή',
|
||||
'You have no privileges to update this table.' => 'Δεν έχετε δικαίωμα να τροποποιήσετε αυτό τον πίνακα.',
|
||||
|
||||
|
@ -283,7 +283,7 @@ $translations = array(
|
|||
'Subject' => 'Θέμα',
|
||||
'Attachments' => 'Συνημμένα',
|
||||
'Send' => 'Αποστολή',
|
||||
'%d e-mail(s) have been sent.' => array('%d e-mail απεστάλη.', '%d e-mail απεστάλησαν.'),
|
||||
'%d e-mail(s) have been sent.' => array('%d e-mail απεστάλλει.', '%d e-mail απεστάλλησαν.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Αριθμοί',
|
||||
|
@ -333,23 +333,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Ο τύπος διαγράφηκε.',
|
||||
'Type has been created.' => 'Ο τύπος δημιουργήθηκε.',
|
||||
'Alter type' => 'Τροποποίηση τύπου',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Login',
|
||||
'Logout successful.' => 'Sesión finalizada con éxito.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Usuario y/o clave de acceso incorrecta.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuario',
|
||||
'Password' => 'Contraseña',
|
||||
|
@ -265,46 +265,4 @@ $translations = array(
|
|||
'Permanent link' => 'Enlace permanente',
|
||||
'Edit all' => 'Editar todos',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Logi sisse',
|
||||
'Logout successful.' => 'Väljalogimine õnnestus.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Ebakorrektsed andmed.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Kasutajanimi',
|
||||
'Password' => 'Parool',
|
||||
|
@ -265,46 +265,4 @@ $translations = array(
|
|||
'Permanent link' => 'Püsilink',
|
||||
'Edit all' => 'Muuda kõiki',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'خروج',
|
||||
'Logged as: %s' => 'ورود به عنوان: %s',
|
||||
'Logout successful.' => 'با موفقیت خارج شدید.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'اعتبار سنجی نامعتبر.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.', 'ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'رمز اصلی باطل شده است. روش %s را <a href="https://www.adminer.org/en/extension/"%s>پیاده سازی</a> کرده تا آن را دائمی سازید.',
|
||||
'Language' => 'زبان',
|
||||
|
@ -331,25 +331,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'نوع حذف شد.',
|
||||
'Type has been created.' => 'نوع ایجاد شد.',
|
||||
'Alter type' => 'ویرایش نوع',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Kirjaudu ulos',
|
||||
'Logged as: %s' => 'Olet kirjautunut käyttäjänä: %s',
|
||||
'Logout successful.' => 'Uloskirjautuminen onnistui.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Virheelliset kirjautumistiedot.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.', 'Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-salasana ei ole enää voimassa. <a href="https://www.adminer.org/en/extension/"%s>Toteuta</a> %s-metodi sen tekemiseksi pysyväksi.',
|
||||
'Language' => 'Kieli',
|
||||
|
@ -333,6 +333,8 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Tyyppi poistettiin.',
|
||||
'Type has been created.' => 'Tyyppi luotiin.',
|
||||
'Alter type' => 'Muuta tyyppiä',
|
||||
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Kiitos, kun käytät Admineriä, voit <a href="https://www.adminer.org/en/donation/">tehdä lahjoituksen tästä</a>.',
|
||||
'Drop %s?' => 'Poistetaanko %s?',
|
||||
'overwrite' => 'kirjoittaen päälle',
|
||||
'DB' => 'TK',
|
||||
|
@ -345,11 +347,4 @@ $translations = array(
|
|||
'Unknown error.' => 'Tuntematon virhe.',
|
||||
'Database does not support password.' => 'Tietokanta ei tue salasanaa.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Poista käytöstä %s tai ota käyttöön laajennus %s tai %s.',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'Copy to clipboard' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Authentification',
|
||||
'Logout successful.' => 'Au revoir !',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Authentification échouée.',
|
||||
'Server' => 'Serveur',
|
||||
'Username' => 'Utilisateur',
|
||||
'Password' => 'Mot de passe',
|
||||
|
@ -288,23 +288,4 @@ $translations = array(
|
|||
'Default value' => 'Valeur par défaut',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Si vous n\'avez pas envoyé cette requête depuis Adminer, alors fermez cette page.',
|
||||
'You are offline.' => 'Vous êtes hors ligne.',
|
||||
|
||||
'Drop %s?' => 'Supprimer %s?',
|
||||
'as a regular expression' => 'sous forme d\'expression régulière',
|
||||
'overwrite' => 'écraser',
|
||||
'DB' => 'BD',
|
||||
'Copy to clipboard' => 'Copier dans le presse-papiers',
|
||||
'ATTACH queries are not supported.' => 'Requêtes ATTACH ne sont pas supportées.',
|
||||
'Warnings' => 'Avertissements',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ne supporte pas l\'accès aux bases de données sans mot de passe, <a href="https://www.adminer.org/en/password/"%s>plus d\'information</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Cette action sera exécutée après s\'être connecté avec les mêmes données de connexion.',
|
||||
'Connecting to privileged ports is not allowed.' => 'La connexion aux ports privilégiés n\'est pas autorisée.',
|
||||
'There is a space in the input password which might be the cause.' => 'Il y a un espace dans le mot de passe entré qui pourrait en être la cause.',
|
||||
'Unknown error.' => 'Erreur inconnue',
|
||||
'Database does not support password.' => 'La base de données ne support pas les mots de passe',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Désactiver %s ou activer %s or %s extensions.',
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Conectar',
|
||||
'Logout successful.' => 'Pechouse a sesión con éxito.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Credenciais (usuario e/ou contrasinal) inválidos.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuario',
|
||||
'Password' => 'Contrasinal',
|
||||
|
@ -288,23 +288,4 @@ $translations = array(
|
|||
'Saving' => 'Gardando',
|
||||
'yes' => 'si',
|
||||
'no' => 'non',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'התחברות',
|
||||
'Logout successful.' => 'ההתחברות הצליחה',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'פרטי התחברות שגויים',
|
||||
'Server' => 'שרת',
|
||||
'Username' => 'שם משתמש',
|
||||
'Password' => 'סיסמה',
|
||||
|
@ -279,6 +279,7 @@ $translations = array(
|
|||
'Default value' => 'ערך ברירת מחדל',
|
||||
'Full table scan' => 'סריקה טבלה מלאה',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'יותר מידי נסיונות כניסה נכשלו, אנא נסה עוד %d דקות',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'תודה שהשתמש ב-adminer אנא שקול <a href="https://www.adminer.org/en/donation/">לתרום</a>.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'סיסמת המאסטר פגה <a href="https://www.adminer.org/en/extension/"%s>התקן תוסף</a> על מנת להפוך את זה לתמידי',
|
||||
'If you did not send this request from Adminer then close this page.' => 'אם לא אתה שלחת בקשה ל-Adminer הינך יכול לסגור חלון זה',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'ניתן לעלות קבצים ב-FTP ואז למשוך אותם מהשרת',
|
||||
|
@ -289,22 +290,4 @@ $translations = array(
|
|||
'Saving' => 'שומר',
|
||||
'yes' => 'כן',
|
||||
'no' => 'לא',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'Warnings' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Belépés',
|
||||
'Logout successful.' => 'Sikeres kilépés.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Érvénytelen adatok.',
|
||||
'Server' => 'Szerver',
|
||||
'Username' => 'Felhasználó',
|
||||
'Password' => 'Jelszó',
|
||||
|
@ -175,7 +175,7 @@ $translations = array(
|
|||
'Repair' => 'Javít',
|
||||
'Truncate' => 'Felszabadít',
|
||||
'Tables have been truncated.' => 'A tábla felszabadítva.',
|
||||
'Rows' => 'Sorok',
|
||||
'Rows' => 'Oszlop',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Táblák áthelyezve.',
|
||||
|
@ -264,47 +264,4 @@ $translations = array(
|
|||
'Permanent link' => 'Hivatkozás',
|
||||
'Edit all' => 'Összes szerkesztése',
|
||||
'HH:MM:SS' => 'óó:pp:mm',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Ctrl+click on a value to modify it.' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Keluar',
|
||||
'Logged as: %s' => 'Masuk sebagai: %s',
|
||||
'Logout successful.' => 'Berhasil keluar.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Akses tidak sah.',
|
||||
'Language' => 'Bahasa',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF tidak sah. Kirim ulang formulir.',
|
||||
'No extension' => 'Ekstensi tidak ada',
|
||||
|
@ -313,43 +313,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Jenis berhasil dihapus.',
|
||||
'Type has been created.' => 'Jenis berhasil dibuat.',
|
||||
'Alter type' => 'Ubah jenis',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Ctrl+click on a value to modify it.' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Autenticazione',
|
||||
'Logout successful.' => 'Uscita effettuata con successo.',
|
||||
'Invalid server or credentials.' => 'Server o credenziali non valide.',
|
||||
'Invalid credentials.' => 'Credenziali non valide.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Utente',
|
||||
'Password' => 'Password',
|
||||
|
@ -265,46 +265,4 @@ $translations = array(
|
|||
'Permanent link' => 'Link permanente',
|
||||
'Edit all' => 'Modifica tutto',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => 'Scartare %s?',
|
||||
'Tables have been optimized.' => 'Le tabelle sono state ottimizzate',
|
||||
'as a regular expression' => 'come espressione regolare',
|
||||
'Materialized view' => 'Vista materializzata',
|
||||
'Vacuum' => 'Aspira',
|
||||
'Selected' => 'Selezionato',
|
||||
'overwrite' => 'sovrascrivi',
|
||||
'DB' => 'DB',
|
||||
'File must be in UTF-8 encoding.' => 'Il file deve avere codifica UTF-8.',
|
||||
'Modify' => 'Modifica',
|
||||
'Load more data' => 'Carica piú dati',
|
||||
'Loading' => 'Caricamento',
|
||||
'Copy to clipboard' => 'Copiato nella clipboard',
|
||||
'ATTACH queries are not supported.' => 'ATTACH queries non sono supportate.',
|
||||
'Warnings' => 'Attenzione',
|
||||
'%d / ' => array('%d / '),
|
||||
'Limit rows' => 'Limite righe',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer non supporta accesso a databse senza password, <a href="https://www.adminer.org/it/password/"%s>piú informazioni</a>.',
|
||||
'Default value' => 'Valore predefinito',
|
||||
'Full table scan' => 'Analizza intera tabella',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuto.', 'Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuti.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'La password principale é scaduta. <a href="https://www.adminer.org/it/extension/"%s>Implementare</a> %s come metodo per renderla permanente.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'La azione verrá eseguita dopo un login valido con le stesse credenziali.',
|
||||
'Connecting to privileged ports is not allowed.' => 'LA connessione a porte privilegiate non é permessa.',
|
||||
'There is a space in the input password which might be the cause.' => 'Esiste uno spazio nella passoword inserita che potrebbe essere la causa.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Se non hai inviato tu la richiesta tramite Adminer puoi chiudere la pagina.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Puoi caricare un grande file SQL tramite FTP ed impirtarlo dal server.',
|
||||
'Size' => 'Taglia',
|
||||
'Compute' => 'Elabora',
|
||||
'You are offline.' => 'Sei disconnesso.',
|
||||
'You have no privileges to update this table.' => 'Non hai i privilegi per aggiornare questa tabella.',
|
||||
'Saving' => 'Salvataggio',
|
||||
'Unknown error.' => 'Errore sconosciuto',
|
||||
'Database does not support password.' => 'Il database non supporta password.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Disabilita %s o abilita %s oppure %s estensioni.',
|
||||
'yes' => 'si',
|
||||
'no' => 'no',
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'ログイン',
|
||||
'Logout successful.' => 'ログアウト',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => '不正なログイン',
|
||||
'Server' => 'サーバ',
|
||||
'Username' => 'ユーザ名',
|
||||
'Password' => 'パスワード',
|
||||
|
@ -274,37 +274,4 @@ $translations = array(
|
|||
'yes' => 'はい',
|
||||
'no' => 'いいえ',
|
||||
'Default value' => '既定値',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Ctrl+click on a value to modify it.' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'შესვლა',
|
||||
'Logout successful.' => 'გამოხვედით სისტემიდან.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'არასწორი მომხმარებელი ან პაროლი.',
|
||||
'Server' => 'სერვერი',
|
||||
'Username' => 'მომხმარებელი',
|
||||
'Password' => 'პაროლი',
|
||||
|
@ -293,18 +293,11 @@ $translations = array(
|
|||
'Warnings' => 'გაფრთხილება',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'უპაროლო წვდომა ბაზასთან არაა დაშვებული Adminer-ში, მეტი ინფორმაციისთვის ეწვიეთ <a href="https://www.adminer.org/en/password/"%s>ბმულს</a>.',
|
||||
'DB' => 'ბაზა',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'მადლობას გიხდით Adminer-ით სარგებლობისთვის, გადახედეთ ბმულს <a href="https://www.adminer.org/en/donation/">შემოწირულობა</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'მოქმედება შესრულდება იგივე მომხმარებლით წარმატებული ავტორიზაციის შემდეგ.',
|
||||
'Connecting to privileged ports is not allowed.' => 'პრივილეგირებულ პორტთან წვდომა დაუშვებელია.',
|
||||
'There is a space in the input password which might be the cause.' => 'პაროლში არის გამოტოვება, შეიძლება ეს ქმნის პრობლემას.',
|
||||
'Unknown error.' => 'უცნობი შეცდომა.',
|
||||
'Database does not support password.' => 'ბაზაში არაა მხარდაჭერილი პაროლი.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'გათიშეთ %s ან ჩართეთ %s ან %s გაფართოება.',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'Copy to clipboard' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -1,310 +1,267 @@
|
|||
<?php
|
||||
$translations = array(
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
'%.3f s' => '%.3f 초',
|
||||
'%d byte(s)' => '%d 바이트',
|
||||
'%d e-mail(s) have been sent.' => '%d개 메일을 보냈습니다.',
|
||||
'%d in total' => '총 %d개',
|
||||
'%d item(s) have been affected.' => '%d개 항목을 갱신했습니다.',
|
||||
'%d process(es) have been killed.' => '%d개 프로세스를 강제 종료하였습니다.',
|
||||
'%d query(s) executed OK.' => '%d개 쿼리를 잘 실행했습니다.',
|
||||
'%d row(s) have been imported.' => '%d개 행을 가져 왔습니다.',
|
||||
'%d row(s)' => '%d개 행',
|
||||
'%s version: %s through PHP extension %s' => '%s 버전 %s, PHP 확장 %s',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
'Action' => '실행',
|
||||
'Add column' => '열 추가',
|
||||
'Add foreign key' => '외부 키를 추가',
|
||||
'Add next' => '다음 추가',
|
||||
'Add trigger' => '트리거 추가',
|
||||
'Aggregation' => '집합',
|
||||
'Alter database' => '데이터베이스 변경',
|
||||
'Alter event' => '이벤트 변경',
|
||||
'Alter function' => '함수 변경',
|
||||
'Alter indexes' => '색인 변경',
|
||||
'Alter procedure' => '시저 변경',
|
||||
'Alter schema' => '스키마 변경',
|
||||
'Alter sequence' => '순서 변경',
|
||||
'Alter table' => '테이블 변경',
|
||||
'Alter trigger' => '트리거 변경',
|
||||
'Alter type' => '형 변경',
|
||||
'Alter view' => '보기 변경',
|
||||
'Alter' => '변경',
|
||||
'Analyze' => '분석',
|
||||
'anywhere' => '모든',
|
||||
'Are you sure?' => '실행 하시겠습니까?',
|
||||
'At given time' => '지정 시간',
|
||||
'Attachments' => '첨부 파일',
|
||||
'Auto Increment' => '자동 증가',
|
||||
'Binary' => '이진',
|
||||
'Call' => '호출',
|
||||
'Change' => '변경',
|
||||
'Check' => '확인',
|
||||
'Clear' => '삭제',
|
||||
'Clone' => '복제',
|
||||
'collation' => '정렬',
|
||||
'Collation' => '정렬',
|
||||
'Column (length)' => '열 (길이)',
|
||||
'Column name' => '열 이름',
|
||||
'Column' => '열',
|
||||
'Comment' => '주석',
|
||||
'Compute' => '계산하기',
|
||||
'Copy' => '복사',
|
||||
'Create database' => '데이터베이스 만들기',
|
||||
'Create event' => '만들기',
|
||||
'Create function' => '함수 만들기',
|
||||
'Create procedure' => '시저 만들기',
|
||||
'Create schema' => '스키마 추가',
|
||||
'Create sequence' => '시퀀스 만들기',
|
||||
'Create table' => '테이블 만들기',
|
||||
'Create trigger' => '트리거 만들기',
|
||||
'Create type' => '사용자 정의 형식 만들기',
|
||||
'Create user' => '사용자 만들기',
|
||||
'Create view' => '뷰 만들기',
|
||||
'Data Free' => '데이터 여유',
|
||||
'Data Length' => '데이터 길이',
|
||||
'Data' => '데이터',
|
||||
'Database has been altered.' => '데이터베이스를 변경했습니다.',
|
||||
'Database has been created.' => '데이터베이스를 만들었습니다.',
|
||||
'Database has been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Database has been renamed.' => '데이터베이스의 이름을 바꾸었습니다.',
|
||||
'Database schema' => '데이터베이스 구조',
|
||||
'database' => '데이터베이스',
|
||||
'Database' => '데이터베이스',
|
||||
'Databases have been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Date and time' => '시간',
|
||||
'Default values' => '기본값',
|
||||
'Delete' => '삭제',
|
||||
'descending' => '역순',
|
||||
'Drop' => '삭제',
|
||||
'E-mail' => '메일',
|
||||
'Edit all' => '모두 편집',
|
||||
'Edit' => '편집',
|
||||
'edit' => '편집',
|
||||
'Editor' => '에디터',
|
||||
'empty' => '비어있음',
|
||||
'End' => '종료',
|
||||
'engine' => '엔진',
|
||||
'Engine' => '엔진',
|
||||
'Error in query' => '쿼리의 오류',
|
||||
'Event has been altered.' => '변경했습니다.',
|
||||
'Event has been created.' => '만들었습니다.',
|
||||
'Event has been dropped.' => '삭제했습니다.',
|
||||
'Event' => '이벤트',
|
||||
'Events' => '이벤트',
|
||||
'Every' => '매 번',
|
||||
'Execute' => '실행',
|
||||
'Export' => '내보내기',
|
||||
'File does not exist.' => '파일이 존재하지 않습니다.',
|
||||
'File exists.' => '파일이 이미 있습니다.',
|
||||
'File upload' => '파일 올리기',
|
||||
'File uploads are disabled.' => '파일 업로드가 잘못되었습니다.',
|
||||
'Foreign key has been altered.' => '외부 키를 변경했습니다.',
|
||||
'Foreign key has been created.' => '외부 키를 만들었습니다.',
|
||||
'Foreign key has been dropped.' => '외부 키를 제거했습니다.',
|
||||
'Foreign key' => '외부 키',
|
||||
'Foreign keys' => '외부 키',
|
||||
'Format' => '형식',
|
||||
'From server' => '서버에서 실행',
|
||||
'From' => '보낸 사람',
|
||||
'Functions' => '함수',
|
||||
'Geometry' => '기하 형',
|
||||
'Grant' => '권한 부여',
|
||||
'Hashed' => 'Hashed',
|
||||
'HH:MM:SS' => '시:분:초',
|
||||
'History' => '이력',
|
||||
'Import' => '가져 오기',
|
||||
'Index Length' => '색인 길이',
|
||||
'Index Type' => '색인 형',
|
||||
'Indexes have been altered.' => '색인을 변경했습니다.',
|
||||
'Indexes' => '색인',
|
||||
'Insert' => '삽입',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid CSRF token. Send the form again.' => '잘못된 CSRF 토큰입니다. 다시 보내주십시오.',
|
||||
'Invalid database.' => '잘못된 데이터베이스입니다.',
|
||||
'Invalid schema.' => '잘못된 스키마입니다.',
|
||||
'Item has been deleted.' => '항목을 삭제했습니다.',
|
||||
'Item has been updated.' => '항목을 갱신했습니다.',
|
||||
'Item%s has been inserted.' => '%s 항목을 삽입했습니다.',
|
||||
'Kill' => '강제 종료',
|
||||
'Language' => '언어',
|
||||
'last' => '마지막',
|
||||
'Length' => '길이',
|
||||
'Limit rows' => '행 제약',
|
||||
'Limit' => '제약',
|
||||
'Lists' => '목록',
|
||||
'Load more data' => '더 많은 데이터 부르기',
|
||||
'Loading' => '부르는 중',
|
||||
'Logged as: %s' => '다음으로 로그인했습니다: %s',
|
||||
'Login' => '로그인',
|
||||
'Logout successful.' => '로그아웃을 성공했습니다.',
|
||||
'Logout' => '로그아웃',
|
||||
'ltr' => 'ltr',
|
||||
'Maximum allowed file size is %sB.' => '파일의 최대 크기 %sB',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '정의 가능한 최대 필드 수를 초과했습니다. %s(을)를 늘리십시오.',
|
||||
'Modify' => '수정',
|
||||
'Move down' => '아래로',
|
||||
'Move to other database' => '다른 데이터베이스로 이동',
|
||||
'Move up' => '위로',
|
||||
'Move' => '이동',
|
||||
'Name' => '이름',
|
||||
'Network' => '네트워크 형',
|
||||
'New item' => '항목 만들기',
|
||||
'No commands to execute.' => '실행할 수 있는 명령이 없습니다.',
|
||||
'No extension' => '확장이 없습니다.',
|
||||
'No rows.' => '행이 없습니다.',
|
||||
'No tables.' => '테이블이 없습니다.',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'PHP 확장(%s)이 설치되어 있지 않습니다.',
|
||||
'now' => '현재 시간',
|
||||
'Numbers' => '숫자',
|
||||
'On completion preserve' => '완성 후 저장',
|
||||
'ON DELETE' => '지울 때',
|
||||
'ON UPDATE' => '업데이트할 때',
|
||||
'open' => '열',
|
||||
'Optimize' => '최적화',
|
||||
'Options' => '설정',
|
||||
'original' => '원본',
|
||||
'Output' => '출력',
|
||||
'overwrite' => '덮어쓰기',
|
||||
'Page' => '페이지',
|
||||
'Parameter name' => '매개변수 이름',
|
||||
'Partition by' => '파티션',
|
||||
'Partition name' => '파티션 이름',
|
||||
'Partitions' => '파티션',
|
||||
'Password' => '비밀번호',
|
||||
'Permanent link' => '영구적으로 링크',
|
||||
'Permanent login' => '영구적으로 로그인',
|
||||
'Please use one of the extensions %s.' => '확장 %s 중 하나를 사용하십시오.',
|
||||
'Privileges' => '권한',
|
||||
'Process list' => '프로세스 목록',
|
||||
'Query executed OK, %d row(s) affected.' => '쿼리를 잘 실행했습니다. %d행을 변경했습니다.',
|
||||
'Refresh' => '새로 고침',
|
||||
'Relations' => '관계',
|
||||
'Remove' => '제거',
|
||||
'Repair' => '복구',
|
||||
'Return type' => '반환 형식',
|
||||
'Revoke' => '권한 취소',
|
||||
'Routine has been altered.' => '루틴을 변경했습니다.',
|
||||
'Routine has been called, %d row(s) affected.' => '루틴을 호출했습니다. %d 행을 변경했습니다.',
|
||||
'Routine has been created.' => '루틴을 추가했습니다.',
|
||||
'Routine has been dropped.' => '루틴을 제거했습니다.',
|
||||
'Routine' => '루틴',
|
||||
'Routines' => '루틴',
|
||||
'Rows' => '행',
|
||||
'Run file' => '파일을 실행',
|
||||
'Save and continue edit' => '저장하고 계속 편집하기',
|
||||
'Save and insert next' => '저장하고 다음에 추가',
|
||||
'Save' => '저장',
|
||||
'save' => '저장',
|
||||
'Schedule' => '예약',
|
||||
'Schema has been altered.' => '스키마를 변경했습니다.',
|
||||
'Schema has been created.' => '스키마를 추가했습니다.',
|
||||
'Schema has been dropped.' => '스키마를 삭제했습니다.',
|
||||
'Schema' => '스키마',
|
||||
'Search data in tables' => '테이블 내 데이터 검색',
|
||||
'Search' => '검색',
|
||||
'Select data' => '데이터를 선택하십시오.',
|
||||
'Select database' => '데이터베이스를 선택하십시오.',
|
||||
'Select' => '선택',
|
||||
'select' => '선택',
|
||||
'Selected' => '선택됨',
|
||||
'Send' => '보내기',
|
||||
'Sequence has been altered.' => '시퀀스를 변경했습니다.',
|
||||
'Sequence has been created.' => '시퀀스를 추가했습니다.',
|
||||
'Sequence has been dropped.' => '시퀀스를 제거했습니다.',
|
||||
'Sequences' => '시퀀스',
|
||||
'Logout successful.' => '로그아웃',
|
||||
'Invalid credentials.' => '잘못된 로그인',
|
||||
'Server' => '서버',
|
||||
'Session expired, please login again.' => '세션이 만료되었습니다. 다시 로그인하십시오.',
|
||||
'Session support must be enabled.' => '세션 지원을 사용해야만 합니다.',
|
||||
'Show only errors' => '오류 만 표시',
|
||||
'Show structure' => '구조 표시',
|
||||
'Size' => '크기',
|
||||
'Sort' => '정렬',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '원본과 대상 열은 동일한 데이터 형식이어야만 합니다. 목표 열에 색인과 데이터가 존재해야만 합니다.',
|
||||
'Source' => '소스',
|
||||
'SQL command' => 'SQL 명령',
|
||||
'Start' => '시작',
|
||||
'Status' => '상태',
|
||||
'Stop on error' => '오류의 경우 중지',
|
||||
'Strings' => '문자열',
|
||||
'Subject' => '제목',
|
||||
'System' => '데이터베이스 형식',
|
||||
'Username' => '사용자이름',
|
||||
'Password' => '비밀번호',
|
||||
'Select database' => '데이터베이스를 선택하십시오.',
|
||||
'Invalid database.' => '잘못된 데이터베이스입니다.',
|
||||
'Table has been dropped.' => '테이블을 삭제했습니다.',
|
||||
'Table has been altered.' => '테이블을 변경했습니다.',
|
||||
'Table has been created.' => '테이블을 만들었습니다.',
|
||||
'Table has been dropped.' => '테이블을 삭제했습니다.',
|
||||
'Alter table' => '테이블 변경',
|
||||
'Create table' => '테이블 만들기',
|
||||
'Table name' => '테이블 이름',
|
||||
'Table' => '테이블',
|
||||
'Tables and views' => '테이블과 뷰',
|
||||
'Tables have been copied.' => '테이블을 복사했습니다',
|
||||
'Tables have been dropped.' => '테이블을 삭제했습니다.',
|
||||
'Tables have been moved.' => '테이블을 옮겼습니다.',
|
||||
'Tables have been truncated.' => '테이블의 데이터 내용만 지웠습니다.',
|
||||
'Tables' => '테이블',
|
||||
'Target table' => '테이블',
|
||||
'Target' => '타겟',
|
||||
'Text length' => '문자열의 길이',
|
||||
'Time' => '시간',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 데이터가 너무 큽니다. 데이터 크기를 줄이거나 %s 설정을 늘리십시오.',
|
||||
'Trigger has been altered.' => '트리거를 변경했습니다.',
|
||||
'Trigger has been created.' => '트리거를 추가했습니다.',
|
||||
'Trigger has been dropped.' => '트리거를 제거했습니다.',
|
||||
'Triggers' => '트리거',
|
||||
'Truncate' => '데이터 내용만 지우기',
|
||||
'Type has been created.' => '유형을 추가했습니다.',
|
||||
'Type has been dropped.' => '유형을 삭제했습니다.',
|
||||
'engine' => '엔진',
|
||||
'collation' => '정렬',
|
||||
'Column name' => '열 이름',
|
||||
'Type' => '형',
|
||||
'Unable to select the table' => '테이블을 선택할 수 없습니다.',
|
||||
'Unable to upload a file.' => '파일을 업로드 할 수 없습니다.',
|
||||
'Use edit link to modify this value.' => '이 값을 수정하려면 편집 링크를 사용하십시오.',
|
||||
'Length' => '길이',
|
||||
'Auto Increment' => '자동증가',
|
||||
'Options' => '설정',
|
||||
'Save' => '저장',
|
||||
'Drop' => '삭제',
|
||||
'Database has been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Database has been created.' => '데이터베이스를 만들었습니다.',
|
||||
'Database has been renamed.' => '데이터베이스의 이름을 바꾸었습니다.',
|
||||
'Database has been altered.' => '데이터베이스를 변경했습니다.',
|
||||
'Alter database' => '데이터베이스 변경',
|
||||
'Create database' => '데이터베이스 만들기',
|
||||
'SQL command' => 'SQL 명령',
|
||||
'Logout' => '로그아웃',
|
||||
'database' => '데이터베이스',
|
||||
'Use' => '사용',
|
||||
'User has been altered.' => '사용자를 변경했습니다.',
|
||||
'User has been created.' => '사용자를 만들었습니다.',
|
||||
'User has been dropped.' => '사용자를 제거했습니다.',
|
||||
'Username' => '사용자이름',
|
||||
'Vacuum' => '청소',
|
||||
'Values' => '값',
|
||||
'Variables' => '변수',
|
||||
'No tables.' => '테이블이 없습니다.',
|
||||
'select' => '선택',
|
||||
'Item has been deleted.' => '항목을 삭제했습니다.',
|
||||
'Item has been updated.' => '항목을 갱신했습니다.',
|
||||
'Edit' => '편집',
|
||||
'Insert' => '삽입',
|
||||
'Save and insert next' => '저장하고 다음에 추가',
|
||||
'Delete' => '삭제',
|
||||
'Database' => '데이터베이스',
|
||||
'Routines' => '루틴',
|
||||
'Indexes have been altered.' => '인덱스를 변경했습니다.',
|
||||
'Indexes' => '색인',
|
||||
'Alter indexes' => '인덱스 변경',
|
||||
'Add next' => '추가',
|
||||
'Language' => '언어',
|
||||
'Select' => '선택',
|
||||
'New item' => '항목 만들기',
|
||||
'Search' => '검색',
|
||||
'Sort' => '정렬',
|
||||
'descending' => '역순',
|
||||
'Limit' => '제약',
|
||||
'No rows.' => '행이 없습니다.',
|
||||
'Action' => '실행',
|
||||
'edit' => '편집',
|
||||
'Page' => '페이지',
|
||||
'Query executed OK, %d row(s) affected.' => '쿼리를 실행했습니다. %d 행을 변경했습니다.',
|
||||
'Error in query' => '쿼리의 오류',
|
||||
'Execute' => '실행',
|
||||
'Table' => '테이블',
|
||||
'Foreign keys' => '외부 키',
|
||||
'Triggers' => '트리거',
|
||||
'View' => '보기',
|
||||
'Unable to select the table' => '테이블을 선택할 수 없습니다.',
|
||||
'Invalid CSRF token. Send the form again.' => '잘못된 CSRF 토큰. 다시 보내주십시오.',
|
||||
'Comment' => '코멘트',
|
||||
'Default values' => '기본값',
|
||||
'%d byte(s)' => '%d 바이트',
|
||||
'No commands to execute.' => '실행할 수 있는 명령이 없습니다.',
|
||||
'Unable to upload a file.' => '파일을 업로드 할 수 없습니다.',
|
||||
'File upload' => '파일 올리기',
|
||||
'File uploads are disabled.' => '파일 업로드가 잘못되었습니다.',
|
||||
'Routine has been called, %d row(s) affected.' => '루틴을 호출했습니다. %d 행을 변경했습니다.',
|
||||
'Call' => '외침',
|
||||
'No extension' => '확장 기능이 없습니다.',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'PHP 확장 (%s)가 설치되어 있지 않습니다.',
|
||||
'Session support must be enabled.' => '세션을 사용하십시오.',
|
||||
'Session expired, please login again.' => '세션 만료. 다시 로그인하십시오.',
|
||||
'Text length' => '문자열의 길이',
|
||||
'Foreign key has been dropped.' => '외부 키를 제거했습니다.',
|
||||
'Foreign key has been altered.' => '외부 키를 변경했습니다.',
|
||||
'Foreign key has been created.' => '외부 키를 만들었습니다.',
|
||||
'Foreign key' => '외부 키',
|
||||
'Target table' => '테이블',
|
||||
'Change' => '변경',
|
||||
'Source' => '소스',
|
||||
'Target' => '타겟',
|
||||
'Add column' => '열 추가',
|
||||
'Alter' => '변경',
|
||||
'Add foreign key' => '외부 키를 추가',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => '인덱스 형',
|
||||
'Column (length)' => '열 (길이)',
|
||||
'View has been dropped.' => '보기를 삭제했습니다.',
|
||||
'View has been altered.' => '보기를 변경했습니다.',
|
||||
'View has been created.' => '보기를 만들었습니다.',
|
||||
'View has been dropped.' => '보기를 삭제했습니다.',
|
||||
'View' => '보기',
|
||||
'Warnings' => '경고',
|
||||
'Webserver file %s' => '웹서버 파일 %s',
|
||||
'Alter view' => '보기 변경',
|
||||
'Create view' => '뷰 만들기',
|
||||
'Name' => '이름',
|
||||
'Process list' => '프로세스 목록',
|
||||
'%d process(es) have been killed.' => '%d 프로세스를 강제 종료되었습니다.',
|
||||
'Kill' => '강제 종료',
|
||||
'Parameter name' => '참조 여명',
|
||||
'Database schema' => '구조',
|
||||
'Create procedure' => '시저 만들기',
|
||||
'Create function' => '함수 만들기',
|
||||
'Routine has been dropped.' => '루틴 만들기',
|
||||
'Routine has been altered.' => '루틴 변경',
|
||||
'Routine has been created.' => '루틴 만들기',
|
||||
'Alter function' => '함수의 변경',
|
||||
'Alter procedure' => '시저 변경',
|
||||
'Return type' => '반환 형식',
|
||||
'Add trigger' => '트리거 추가',
|
||||
'Trigger has been dropped.' => '트리거를 제거했습니다.',
|
||||
'Trigger has been altered.' => '트리거를 변경했습니다.',
|
||||
'Trigger has been created.' => '트리거를 추가했습니다.',
|
||||
'Alter trigger' => '트리거 변경',
|
||||
'Create trigger' => '트리거 만들기',
|
||||
'Time' => '시간',
|
||||
'Event' => '이벤트',
|
||||
'%s version: %s through PHP extension %s' => '%s 버전 %s, PHP 확장 %s',
|
||||
'%d row(s)' => '%d 행',
|
||||
'Remove' => '제외',
|
||||
'Are you sure?' => '실행 하시겠습니까?',
|
||||
'Privileges' => '권한',
|
||||
'Create user' => '사용자 만들기',
|
||||
'User has been dropped.' => '사용자 삭제',
|
||||
'User has been altered.' => '사용자 변경',
|
||||
'User has been created.' => '사용자 만들기',
|
||||
'Hashed' => 'Hashed',
|
||||
'Column' => '열',
|
||||
'Routine' => '루틴',
|
||||
'Grant' => '권한 부여',
|
||||
'Revoke' => '권한 취소',
|
||||
'Logged as: %s' => '로그 : %s',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 데이터가 너무 큽니다. 데이터 크기를 줄이거나 %s 설정을 늘리십시오.',
|
||||
'Move up' => '상',
|
||||
'Move down' => '아래',
|
||||
'Export' => '내보내기',
|
||||
'Tables' => '테이블',
|
||||
'Data' => '데이터',
|
||||
'Output' => '출력',
|
||||
'open' => '열',
|
||||
'save' => '저장',
|
||||
'Format' => '형식',
|
||||
'Functions' => '함수',
|
||||
'Aggregation' => '집합',
|
||||
'Event has been dropped.' => '삭제했습니다.',
|
||||
'Event has been altered.' => '변경했습니다.',
|
||||
'Event has been created.' => '만들었습니다.',
|
||||
'Alter event' => '변경',
|
||||
'Create event' => '만들기',
|
||||
'Start' => '시작',
|
||||
'End' => '종료',
|
||||
'Every' => '매번',
|
||||
'Status' => '상태',
|
||||
'On completion preserve' => '완성 후 저장',
|
||||
'Events' => '이벤트',
|
||||
'Schedule' => '일정',
|
||||
'At given time' => '지정 시간',
|
||||
'Tables have been truncated.' => '테이블을 truncate했습니다.',
|
||||
'Tables have been moved.' => '테이블을 옮겼습니다.',
|
||||
'Tables and views' => '테이블과 뷰',
|
||||
'Engine' => '엔진',
|
||||
'Collation' => '정렬',
|
||||
'Data Length' => '데이터 길이',
|
||||
'Index Length' => '인덱스 길이',
|
||||
'Data Free' => '여유',
|
||||
'Rows' => '행',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => '분석',
|
||||
'Optimize' => '최적화',
|
||||
'Check' => '확인',
|
||||
'Repair' => '복구',
|
||||
'Truncate' => 'Truncate',
|
||||
'Move to other database' => '다른 데이터베이스로 이동',
|
||||
'Move' => '이동',
|
||||
'Save and continue edit' => '저장하고 계속',
|
||||
'original' => '원래',
|
||||
'%d item(s) have been affected.' => '%d를 갱신했습니다.',
|
||||
'Whole result' => '모든 결과',
|
||||
'yes' => '네',
|
||||
'You are offline.' => '오프라인입니다.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => '큰 SQL 파일은 FTP를 통하여 업로드하여 서버에서 가져올 수 있습니다.',
|
||||
'You have no privileges to update this table.' => '이 테이블을 업데이트할 권한이 없습니다.',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'User types' => null,
|
||||
'DB' => null,
|
||||
'Ctrl+click on a value to modify it.' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'%d / ' => array(),
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
'Tables have been dropped.' => '테이블을 삭제했습니다.',
|
||||
'Clone' => '복제',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '정의 가능한 최대 필드 수를 초과했습니다. %s를 늘리십시오.',
|
||||
'Partition by' => '파티션',
|
||||
'Partitions' => '파티션',
|
||||
'Partition name' => '파티션 이름',
|
||||
'Values' => '값',
|
||||
'%d row(s) have been imported.' => '%d 행을 가져 왔습니다.',
|
||||
'Show structure' => '구조',
|
||||
'anywhere' => '모든',
|
||||
'Import' => '가져 오기',
|
||||
'Stop on error' => '오류의 경우 중지',
|
||||
'Select data' => '데이터',
|
||||
'%.3f s' => '%.3f 초',
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
'History' => '역사',
|
||||
'Variables' => '변수',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '원본 및 대상 열은 동일한 데이터 형식이어야합니다. 목표 컬럼에 인덱스와 데이터가 존재해야합니다.',
|
||||
'Relations' => '관계',
|
||||
'Run file' => '파일을 실행',
|
||||
'Clear' => '삭제',
|
||||
'Maximum allowed file size is %sB.' => '파일의 최대 크기 %sB',
|
||||
'Numbers' => '숫자',
|
||||
'Date and time' => '시간',
|
||||
'Strings' => '문자열',
|
||||
'Binary' => '이진',
|
||||
'Lists' => '목록',
|
||||
'Editor' => '에디터',
|
||||
'E-mail' => '메일',
|
||||
'From' => '보낸 사람',
|
||||
'Subject' => '제목',
|
||||
'Send' => '보내기',
|
||||
'%d e-mail(s) have been sent.' => '%d 메일을 보냈습니다.',
|
||||
'Webserver file %s' => 'Web 서버 파일 %s',
|
||||
'File does not exist.' => '파일이 존재하지 않습니다.',
|
||||
'%d in total' => '총 %d',
|
||||
'Permanent login' => '영구적으로 로그인',
|
||||
'Databases have been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Search data in tables' => '데이터 검색',
|
||||
'Schema' => '스키마',
|
||||
'Alter schema' => '스키마 변경',
|
||||
'Create schema' => '스키마 추가',
|
||||
'Schema has been dropped.' => '스키마를 삭제했습니다.',
|
||||
'Schema has been created.' => '스키마를 추가했습니다.',
|
||||
'Schema has been altered.' => '스키마를 변경했습니다.',
|
||||
'Sequences' => '시퀀스',
|
||||
'Create sequence' => '시퀀스 만들기',
|
||||
'Alter sequence' => '순서 변경',
|
||||
'Sequence has been dropped.' => '시퀀스를 제거했습니다.',
|
||||
'Sequence has been created.' => '시퀀스를 추가했습니다.',
|
||||
'Sequence has been altered.' => '순서를 변경했습니다.',
|
||||
'User types' => '사용자 정의 형',
|
||||
'Create type' => '사용자 정의 형식 만들기',
|
||||
'Alter type' => '사용자 정의 형식 변경',
|
||||
'Type has been dropped.' => '사용자 정의 형식을 삭제했습니다.',
|
||||
'Type has been created.' => '사용자 정의 형식을 추가했습니다.',
|
||||
'Use edit link to modify this value.' => '링크 편집',
|
||||
'last' => '마지막',
|
||||
'From server' => '서버에서 실행',
|
||||
'System' => '데이터베이스 형식',
|
||||
'empty' => '하늘',
|
||||
'Network' => '네트워크 형',
|
||||
'Geometry' => '기하 형',
|
||||
'File exists.' => '파일이 이미 있습니다.',
|
||||
'Attachments' => '첨부 파일',
|
||||
'Item%s has been inserted.' => '%s 항목을 삽입했습니다.',
|
||||
'now' => '현재 시간',
|
||||
'%d query(s) executed OK.' => '%d 쿼리를 실행했습니다.',
|
||||
'Show only errors' => '오류 만 표시',
|
||||
'Refresh' => '새로 고침',
|
||||
'Invalid schema.' => '잘못된 스키마',
|
||||
'Please use one of the extensions %s.' => '하나의 확장 기능을 사용하십시오 %s',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => '테이블을 복사했습니다',
|
||||
'Copy' => '복사',
|
||||
'Permanent link' => '영구 링크',
|
||||
'Edit all' => '모든 편집',
|
||||
'HH:MM:SS' => '시:분:초',
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Atsijungti',
|
||||
'Logged as: %s' => 'Prisijungęs kaip: %s',
|
||||
'Logout successful.' => 'Jūs atsijungėte nuo sistemos.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Neteisingi prisijungimo duomenys.',
|
||||
'Language' => 'Kalba',
|
||||
'Invalid CSRF token. Send the form again.' => 'Neteisingas CSRF tokenas. Bandykite siųsti formos duomenis dar kartą.',
|
||||
'No extension' => 'Nėra plėtiio',
|
||||
|
@ -309,47 +309,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Tipas pašalintas.',
|
||||
'Type has been created.' => 'Tipas sukurtas.',
|
||||
'Alter type' => 'Keisti tipą',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Ctrl+click on a value to modify it.' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -1,311 +0,0 @@
|
|||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Ieiet',
|
||||
'Logout successful.' => 'Jūs veiksmīgi izgājāt no sistēmas.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Server' => 'Serveris',
|
||||
'Username' => 'Lietotājs',
|
||||
'Password' => 'Parole',
|
||||
'Select database' => 'Izvēlēties datubāzi',
|
||||
'Invalid database.' => 'Nederīga datubāze.',
|
||||
'Table has been dropped.' => 'Tabula dzēsta.',
|
||||
'Table has been altered.' => 'Tabula mainīta.',
|
||||
'Table has been created.' => 'Tabula izveidota.',
|
||||
'Alter table' => 'Mainīt tabulu',
|
||||
'Create table' => 'Izveidot tabulu',
|
||||
'Table name' => 'Tabulas nosaukums',
|
||||
'engine' => 'Tabulas tips',
|
||||
'collation' => 'Kolācija',
|
||||
'Column name' => 'Lauka nosaukums',
|
||||
'Type' => 'Tips',
|
||||
'Length' => 'Garums',
|
||||
'Auto Increment' => 'Auto inkrements',
|
||||
'Options' => 'Opcijas',
|
||||
'Save' => 'Saglabāt',
|
||||
'Drop' => 'Dzēst',
|
||||
'Database has been dropped.' => 'Datubāze tika nodzēsta.',
|
||||
'Database has been created.' => 'Datubāze tika izveidota.',
|
||||
'Database has been renamed.' => 'Datubāze tika pārsaukta.',
|
||||
'Database has been altered.' => 'Datubāze tika mainīta.',
|
||||
'Alter database' => 'Mainīt datubāzi',
|
||||
'Create database' => 'Izveidot datubāzi',
|
||||
'SQL command' => 'SQL pieprasījums',
|
||||
'Logout' => 'Iziet',
|
||||
'database' => 'datubāze',
|
||||
'Use' => 'Lietot',
|
||||
'No tables.' => 'Datubāzē nav tabulu.',
|
||||
'select' => 'izvēlēties',
|
||||
'Item has been deleted.' => 'Ieraksts dzests.',
|
||||
'Item has been updated.' => 'Ieraksts atjaunots.',
|
||||
'Item%s has been inserted.' => 'Ieraksti tika ievietoti.',
|
||||
'Edit' => 'Rediģēt',
|
||||
'Insert' => 'Ievietot',
|
||||
'Save and insert next' => 'Saglabāt un ievietot nākamo',
|
||||
'Delete' => 'Dzēst',
|
||||
'Database' => 'Datubāze',
|
||||
'Routines' => 'Procedūras un funkcijas',
|
||||
'Indexes have been altered.' => 'Indeksi mainīti.',
|
||||
'Indexes' => 'Indeksi',
|
||||
'Alter indexes' => 'Izmainīt indeksus',
|
||||
'Add next' => 'Pievienot vēl',
|
||||
'Language' => 'Valoda',
|
||||
'Select' => 'Izvēlēties',
|
||||
'New item' => 'Jauns ieraksts',
|
||||
'Search' => 'Meklēšana',
|
||||
'Sort' => 'Kārtošana',
|
||||
'descending' => 'dilstoši',
|
||||
'Limit' => 'Limits',
|
||||
'No rows.' => 'Nav rindu.',
|
||||
'Action' => 'Darbība',
|
||||
'edit' => 'rediģēt',
|
||||
'Page' => 'Lapa',
|
||||
'Query executed OK, %d row(s) affected.' => array('Pieprasījums pabeigts, izmainīts %d ieraksts.', 'Pieprasījums pabeigts, izmainīti %d ieraksti.', 'Pieprasījums pabeigts, izmainīti %d ieraksti.'),
|
||||
'Error in query' => 'Kļūda pieprasījumā',
|
||||
'Execute' => 'Izpidīt',
|
||||
'Table' => 'Tabula',
|
||||
'Foreign keys' => 'Ārejā atslēgas',
|
||||
'Triggers' => 'Trigeri',
|
||||
'View' => 'Skats',
|
||||
'Unable to select the table' => 'Tabula nav pieejama',
|
||||
'Invalid CSRF token. Send the form again.' => 'Nederīgs CSRF žetons. Nosūtiet formu vēl vienu reizi.',
|
||||
'Comment' => 'Komentārs',
|
||||
'Default values' => 'Noklusētā vērtība',
|
||||
'%d byte(s)' => array('%d baits', '%d baiti', '%d baiti'),
|
||||
'No commands to execute.' => 'Nav izpildāmu komandu.',
|
||||
'Unable to upload a file.' => 'Neizdevās ielādēt failu uz servera.',
|
||||
'File upload' => 'Augšupielāde',
|
||||
'File uploads are disabled.' => 'Augšupielādes aizliegtas.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Procedūra izsaukta, izmainīts %d ieraksts.', 'Procedūra izsaukta, izmainīti %d ieraksti.', 'Procedūra izsaukta, izmainīti %d ieraksti.'),
|
||||
'Call' => 'Izsaukt',
|
||||
'No extension' => 'Nav paplašinājuma',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Neviens PHP no atbalstītajiem paplašinājumiem (%s) nav pieejams.',
|
||||
'Session support must be enabled.' => 'Sesiju atbalstam jābūt ieslēgtam.',
|
||||
'Session expired, please login again.' => 'Sesijas laiks ir beidzies, piesakies no jauna sistēmā.',
|
||||
'Text length' => 'Teksta garums',
|
||||
'Foreign key has been dropped.' => 'Ārejā atslēga dzēsta.',
|
||||
'Foreign key has been altered.' => 'Ārejā atslēga izmainīta.',
|
||||
'Foreign key has been created.' => 'Ārejā atslēga izveidota.',
|
||||
'Foreign key' => 'Ārejā atslēga',
|
||||
'Target table' => 'Mērķa tabula',
|
||||
'Change' => 'Mainīt',
|
||||
'Source' => 'Avots',
|
||||
'Target' => 'Mērķis',
|
||||
'Add column' => 'Pievienot lauku',
|
||||
'Alter' => 'Izmainīt',
|
||||
'Add foreign key' => 'Pievienot ārējo atslēgu',
|
||||
'ON DELETE' => 'Pie dzēšanas',
|
||||
'ON UPDATE' => 'Pie atjaunošanas',
|
||||
'Index Type' => 'Indeksa tips',
|
||||
'Column (length)' => 'Lauks (garums)',
|
||||
'View has been dropped.' => 'Skats dzēsts.',
|
||||
'View has been altered.' => 'Skats izmainīts.',
|
||||
'View has been created.' => 'Skats izveidots.',
|
||||
'Alter view' => 'Izmainīt skatu',
|
||||
'Create view' => 'Izveidot skatu',
|
||||
'Name' => 'Nosaukums',
|
||||
'Process list' => 'Procesu saraksts',
|
||||
'%d process(es) have been killed.' => array('Pabeigts %d process.', 'Pabeigti %d procesi.', 'Pabeigti %d procesi.'),
|
||||
'Kill' => 'Nobeigt',
|
||||
'Parameter name' => 'Parametra nosaukums',
|
||||
'Database schema' => 'Datubāzes shēma',
|
||||
'Create procedure' => 'Izveidot procedūru',
|
||||
'Create function' => 'Izveidot funkciju',
|
||||
'Routine has been dropped.' => 'Procedūru dzēsta.',
|
||||
'Routine has been altered.' => 'Procedūru izmainīta.',
|
||||
'Routine has been created.' => 'Procedūru izveidota.',
|
||||
'Alter function' => 'Mainīt funkciju',
|
||||
'Alter procedure' => 'Mainīt procedūru',
|
||||
'Return type' => 'Atgriezt tips',
|
||||
'Add trigger' => 'Pievienot trigeri',
|
||||
'Trigger has been dropped.' => 'Trigeris dzēsts.',
|
||||
'Trigger has been altered.' => 'Trigeris izmainīts.',
|
||||
'Trigger has been created.' => 'Trigeris izveidots.',
|
||||
'Alter trigger' => 'Izmainīt trigeri',
|
||||
'Create trigger' => 'Izveidot trigeri',
|
||||
'Time' => 'Laiks',
|
||||
'Event' => 'Notikums',
|
||||
'%s version: %s through PHP extension %s' => 'Versija %s: %s ar PHP paplašinājumu %s',
|
||||
'%d row(s)' => array('%d rinda', '%d rindas', '%d rindu'),
|
||||
'Remove' => 'Noņemt',
|
||||
'Are you sure?' => 'Vai Tu esi pārliecināts?',
|
||||
'Privileges' => 'Tiesības',
|
||||
'Create user' => 'Izveidot lietotāju',
|
||||
'User has been dropped.' => 'Lietotājs dzests.',
|
||||
'User has been altered.' => 'Lietotājs izmainīts.',
|
||||
'User has been created.' => 'Lietotājs izveidots.',
|
||||
'Hashed' => 'Sajaukts',
|
||||
'Column' => 'Lauks',
|
||||
'Routine' => 'Procedūra',
|
||||
'Grant' => 'Atļaut',
|
||||
'Revoke' => 'Aizliegt',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST metodes pieprasījums apjoms par lielu. Atsūtiet mazāka apjoma pieprasījumu kā konfigurācijas %s.',
|
||||
'Logged as: %s' => 'Ielogojies kā: %s',
|
||||
'Move up' => 'Pārvietot uz augšu',
|
||||
'Move down' => 'Pārvietot uz leju',
|
||||
'Functions' => 'Funkcijas',
|
||||
'Aggregation' => 'Agregācija',
|
||||
'Export' => 'Eksports',
|
||||
'Output' => 'Izejas dati',
|
||||
'open' => 'atvērt',
|
||||
'save' => 'saglabāt',
|
||||
'Format' => 'Formāts',
|
||||
'Tables' => 'Tabulas',
|
||||
'Data' => 'Dati',
|
||||
'Event has been dropped.' => 'Notikums dzēsts.',
|
||||
'Event has been altered.' => 'Notikums izmainīts.',
|
||||
'Event has been created.' => 'Notikums izveidots.',
|
||||
'Alter event' => 'Izmainīt notikumu',
|
||||
'Create event' => 'Izveidot notikumu',
|
||||
'At given time' => 'Norāditā laikā',
|
||||
'Every' => 'Katru',
|
||||
'Events' => 'Notikumi',
|
||||
'Schedule' => 'Grafiks',
|
||||
'Start' => 'Sākums',
|
||||
'End' => 'Beigas',
|
||||
'Status' => 'Statuss',
|
||||
'On completion preserve' => 'Beigās saglabāt',
|
||||
'Tables and views' => 'Tabulas un skati',
|
||||
'Data Length' => 'Datu apjoms',
|
||||
'Index Length' => 'Indeksu izmērs',
|
||||
'Data Free' => 'Brīvā vieta',
|
||||
'Collation' => 'Kolācija',
|
||||
'Analyze' => 'Analizēt',
|
||||
'Optimize' => 'Optimizēt',
|
||||
'Check' => 'Pārbaudīt',
|
||||
'Repair' => 'Salabot',
|
||||
'Truncate' => 'Iztīrīt',
|
||||
'Tables have been truncated.' => 'Tabulas iztīrītas.',
|
||||
'Rows' => 'Rindas',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Tabulas pārvietotas.',
|
||||
'Move to other database' => 'Pārvietot uz citu datubāzi',
|
||||
'Move' => 'Pārvietot',
|
||||
'Engine' => 'Dzinējs',
|
||||
'Save and continue edit' => 'Saglabāt un turpināt rediģēt',
|
||||
'original' => 'oriģināls',
|
||||
'%d item(s) have been affected.' => array('Izmainīts %d ieraksts.', 'Izmainīti %d ieraksti.', 'Izmainīti %d ieraksti.'),
|
||||
'Whole result' => 'Viss rezultāts',
|
||||
'Tables have been dropped.' => 'Tabulas dzēstas.',
|
||||
'Clone' => 'Klonēt',
|
||||
'Partition by' => 'Sadalīt pēc',
|
||||
'Partitions' => 'Partīcijas',
|
||||
'Partition name' => 'Partīcijas nosaukums',
|
||||
'Values' => 'Vērtības',
|
||||
'%d row(s) have been imported.' => array('Importēta %d rinda.', 'Importētas %d rindas.', 'Importētas %d rindas.'),
|
||||
'Import' => 'Imports',
|
||||
'Stop on error' => 'Astāties kļūdas gadījumā',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Sasniegts maksimālais lauku skaita ierobežojums. Palieliniet %s.',
|
||||
'anywhere' => 'jebkurā vietā',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
'[yyyy]-mm-dd' => 'dd.mm.[gggg]',
|
||||
'History' => 'Vēsture',
|
||||
'Variables' => 'Mainīgie',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Lauku tipiem jābūt vienādiem, rezultējošā laukā jābut indeksa datiem.',
|
||||
'Relations' => 'Relācijas',
|
||||
'Run file' => 'Izpildīt failu',
|
||||
'Clear' => 'Notīrīt',
|
||||
'Maximum allowed file size is %sB.' => 'Faila maksimālais izmērs — %sB.',
|
||||
'Numbers' => 'Skaitļi',
|
||||
'Date and time' => 'Datums un laiks',
|
||||
'Strings' => 'Virknes',
|
||||
'Binary' => 'Binārie',
|
||||
'Lists' => 'Saraksti',
|
||||
'Editor' => 'Redaktors',
|
||||
'E-mail' => 'Epasts',
|
||||
'From' => 'No',
|
||||
'Subject' => 'Tēma',
|
||||
'Send' => 'Sūtīt',
|
||||
'%d e-mail(s) have been sent.' => array('Nosūtīts %d epasts.', 'Nosūtīti %d epasti.', 'Nosūtīti %d epasti.'),
|
||||
'Webserver file %s' => 'Fails %s uz servera',
|
||||
'File does not exist.' => 'Fails neeksistē.',
|
||||
'%d in total' => 'Kopā %d',
|
||||
'Permanent login' => 'Atcerēties mani',
|
||||
'Databases have been dropped.' => 'Datubāzes dzēstas.',
|
||||
'Search data in tables' => 'Meklēt tabulās',
|
||||
'Schema' => 'Shēma',
|
||||
'Alter schema' => 'Izmainīt shēmu',
|
||||
'Create schema' => 'Jauna shēma',
|
||||
'Schema has been dropped.' => 'Shēma dzēsta.',
|
||||
'Schema has been created.' => 'Izveidota jauna shēma.',
|
||||
'Schema has been altered.' => 'Shēma izmainīta.',
|
||||
'Sequences' => 'Virknes',
|
||||
'Create sequence' => 'Izveidot virkni',
|
||||
'Alter sequence' => 'Izmainīt virkni',
|
||||
'Sequence has been dropped.' => 'Virkne dzēsta.',
|
||||
'Sequence has been created.' => 'Izveidota virkne.',
|
||||
'Sequence has been altered.' => 'Virkne izmainīta.',
|
||||
'User types' => 'Lietotāju tipi',
|
||||
'Create type' => 'Izveidot tipu',
|
||||
'Alter type' => 'Izmainīt tipu',
|
||||
'Type has been dropped.' => 'Tips dzēsts.',
|
||||
'Type has been created.' => 'Tips izveidots.',
|
||||
'Ctrl+click on a value to modify it.' => 'Lai izmainītu vērtību, izmanto Ctrl + peles klikšķi.',
|
||||
'Use edit link to modify this value.' => 'Izmainīt vērtību var tikai ar saiti "Izmainīt".',
|
||||
'last' => 'pēdējā',
|
||||
'From server' => 'No servera',
|
||||
'System' => 'Sistēma',
|
||||
'Select data' => 'Izvēlēties datus',
|
||||
'Show structure' => 'Parādīt struktūru',
|
||||
'empty' => 'tukšs',
|
||||
'Network' => 'Tīkls',
|
||||
'Geometry' => 'Ģeometrija',
|
||||
'File exists.' => 'Fails eksistē.',
|
||||
'Attachments' => 'Pielikumi',
|
||||
'%d query(s) executed OK.' => array('%d pieprasījums veiksmīgs.', '%d pieprasījumi veiksmīgi.', '%d pieprasījumi veiksmīgi.'),
|
||||
'Show only errors' => 'Rādīt tikai kļūdas',
|
||||
'Refresh' => 'Atjaunot',
|
||||
'Invalid schema.' => 'Nederīga shēma.',
|
||||
'Please use one of the extensions %s.' => 'Izmainojiet kādu no paplašinājumiem %s.',
|
||||
'now' => 'tagad',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'Tabulas nokopētas.',
|
||||
'Copy' => 'kopēt',
|
||||
'Permanent link' => 'Pastāvīga saite',
|
||||
'Edit all' => 'Rediģēt visus',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Tables have been optimized.' => 'Tabulas optimizētas.',
|
||||
'Materialized view' => 'Matrializēts skats',
|
||||
'Vacuum' => 'Vakums',
|
||||
'Selected' => 'Izvēlētie',
|
||||
'File must be in UTF-8 encoding.' => 'Failam jābūt UTF-8 kodējumam.',
|
||||
'Modify' => 'Izmainīt',
|
||||
'Loading' => 'Ielāde',
|
||||
'Load more data' => 'Ielādēt vēl datus',
|
||||
'ATTACH queries are not supported.' => 'ATTACH-pieprasījumi nav atbalstīti.',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Rindu limits',
|
||||
'Default value' => 'Noklusētā vērtība',
|
||||
'Full table scan' => 'Pilna tabulas analīze',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtes.', 'Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtēm.', 'Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtēm.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-parole nav derīga. <a href="https://www.adminer.org/en/extension/"%s>Implementējiet</a> metodi %s, lai padarīgu šo par ierastu metodi.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Ja nesūtījāt šo pieprasījumu no Adminer, tad aizveriet pārlūka logu.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Varat ielādēt lielu SQL failu uz servera un tad importēt to.',
|
||||
'Size' => 'Izmērs',
|
||||
'Compute' => 'Izskaitļot',
|
||||
'You are offline.' => 'Jūs est bezsasaistē.',
|
||||
'You have no privileges to update this table.' => 'jums nav pieejas labot šo tabulu.',
|
||||
'Saving' => 'Saglabāšana',
|
||||
'yes' => 'Jā',
|
||||
'no' => 'Nē',
|
||||
'Drop %s?' => 'Dzēst %s?',
|
||||
'overwrite' => 'pārrakstīt',
|
||||
'DB' => 'DB',
|
||||
'Warnings' => 'Brīdinājumi',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer neatbalsta pieeju bez paroles, <a href="https://www.adminer.org/en/password/"%s>vairāk informācijas šeit</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Darbība tiks pabeigta pēc derīgas pieteikšanās sistēmā.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Pieeja priviliģētiem portiem nav atļauta.',
|
||||
'There is a space in the input password which might be the cause.' => 'Parole satur atstarpi, kas varētu būt lieka.',
|
||||
'Unknown error.' => 'Nezināma kļūda.',
|
||||
'Database does not support password.' => 'Datubāze neatbalsta paroli.',
|
||||
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
'as a regular expression' => null,
|
||||
'Copy to clipboard' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
|
@ -10,7 +10,8 @@ $translations = array(
|
|||
'Logout' => 'Log keluar',
|
||||
'Logged as: %s' => 'Log masuk sebagai: %s',
|
||||
'Logout successful.' => 'Log keluar berjaya.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href="https://www.adminer.org/en/donation/">menderma</a>.',
|
||||
'Invalid credentials.' => 'Akses tidak sah.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Kata laluan utama telah luput. <a href="https://www.adminer.org/en/extension/"%s>Gunakan</a> cara %s untuk mengekalkannya.',
|
||||
'Language' => 'Bahasa',
|
||||
|
@ -336,20 +337,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Jenis telah dijatuhkan.',
|
||||
'Type has been created.' => 'Jenis telah dibuat.',
|
||||
'Alter type' => 'Ubah jenis',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'Warnings' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Aanmelden',
|
||||
'Logout successful.' => 'Successvol afgemeld.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Login' => 'Inloggen',
|
||||
'Logout successful.' => 'Uitloggen geslaagd.',
|
||||
'Invalid credentials.' => 'Ongeldige logingegevens.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Gebruikersnaam',
|
||||
'Password' => 'Wachtwoord',
|
||||
|
@ -31,7 +31,7 @@ $translations = array(
|
|||
'Alter database' => 'Database aanpassen',
|
||||
'Create database' => 'Database aanmaken',
|
||||
'SQL command' => 'SQL opdracht',
|
||||
'Logout' => 'Afmelden',
|
||||
'Logout' => 'Uitloggen',
|
||||
'database' => 'database',
|
||||
'Use' => 'Gebruik',
|
||||
'No tables.' => 'Geen tabellen.',
|
||||
|
@ -41,7 +41,7 @@ $translations = array(
|
|||
'Item%s has been inserted.' => 'Item%s toegevoegd.',
|
||||
'Edit' => 'Bewerk',
|
||||
'Insert' => 'Toevoegen',
|
||||
'Save and insert next' => 'Opslaan en volgende toevoegen',
|
||||
'Save and insert next' => 'Opslaan, daarna toevoegen',
|
||||
'Delete' => 'Verwijderen',
|
||||
'Database' => 'Database',
|
||||
'Routines' => 'Procedures',
|
||||
|
@ -60,7 +60,7 @@ $translations = array(
|
|||
'Action' => 'Acties',
|
||||
'edit' => 'bewerk',
|
||||
'Page' => 'Pagina',
|
||||
'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij aangepast.', 'Query uitgevoerd, %d rijen aangepast.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij geraakt.', 'Query uitgevoerd, %d rijen beïnvloed.'),
|
||||
'Error in query' => 'Fout in query',
|
||||
'Execute' => 'Uitvoeren',
|
||||
'Table' => 'Tabel',
|
||||
|
@ -81,7 +81,7 @@ $translations = array(
|
|||
'No extension' => 'Geen extensie',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Geen geldige PHP extensies beschikbaar (%s).',
|
||||
'Session support must be enabled.' => 'Sessies moeten geactiveerd zijn.',
|
||||
'Session expired, please login again.' => 'Uw sessie is verlopen. Gelieve opnieuw aan te melden.',
|
||||
'Session expired, please login again.' => 'Uw sessie is verlopen. Gelieve opnieuw in te loggen.',
|
||||
'Text length' => 'Tekst lengte',
|
||||
'Foreign key has been dropped.' => 'Foreign key verwijderd.',
|
||||
'Foreign key has been altered.' => 'Foreign key aangepast.',
|
||||
|
@ -265,46 +265,4 @@ $translations = array(
|
|||
'Permanent link' => 'Permanente link',
|
||||
'Edit all' => 'Alles bewerken',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => 'Verwijder %s?',
|
||||
'Tables have been optimized.' => 'Tabellen zijn geoptimaliseerd.',
|
||||
'as a regular expression' => 'als een regular expression',
|
||||
'Materialized view' => 'Materialized view',
|
||||
'Vacuum' => 'Vacuum',
|
||||
'Selected' => 'Geselecteerd',
|
||||
'overwrite' => 'overschrijven',
|
||||
'DB' => 'DB',
|
||||
'File must be in UTF-8 encoding.' => 'Het bestand moet met UTF-8 encodering zijn opgeslagen.',
|
||||
'Modify' => 'Aanpassen',
|
||||
'Load more data' => 'Meer data inladen',
|
||||
'Loading' => 'Aan het laden',
|
||||
'Copy to clipboard' => 'Kopieer naar het klembord',
|
||||
'ATTACH queries are not supported.' => 'ATTACH queries worden niet ondersteund',
|
||||
'Warnings' => 'Waarschuwingen',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Rijen beperken',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ondersteunt geen toegang tot databases zonder wachtwoord, <a href="https://www.adminer.org/en/password/"%s>meer informatie</a>.',
|
||||
'Default value' => 'Standaardwaarde',
|
||||
'Full table scan' => 'Full table scan',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuut.', 'Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuten.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master wachtwoord verlopen. <a href="https://www.adminer.org/en/extension/"%s>Implementeer</a> de %s methode om het permanent te maken.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Deze actie zal uitgevoerd worden na het succesvol aanmelden met dezelfde gebruikersgegevens',
|
||||
'Connecting to privileged ports is not allowed.' => 'Verbindingen naar geprivilegieerde poorten is niet toegestaan.',
|
||||
'There is a space in the input password which might be the cause.' => 'Er staat een spatie in het wachtwoord, wat misschien de oorzaak is.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Als u deze actie niet via Adminer hebt gedaan, gelieve deze pagina dan te sluiten.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'U kan een groot SQL-bestand uploaden via FTP en het importeren via de server.',
|
||||
'Size' => 'Grootte',
|
||||
'Compute' => 'Bereken',
|
||||
'You are offline.' => 'U bent offline.',
|
||||
'You have no privileges to update this table.' => 'U bent niet gemachtigd om deze tabel aan te passen.',
|
||||
'Saving' => 'Opslaan',
|
||||
'Unknown error.' => 'Onbekende fout',
|
||||
'Database does not support password.' => 'Database ondersteunt het wachtwoord niet.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Schakel %s uit or schakel extensies %s of %s in.',
|
||||
'yes' => 'ja',
|
||||
'no' => 'neen',
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -9,7 +9,7 @@ $translations = array(
|
|||
'Logout' => 'Logg ut',
|
||||
'Logged as: %s' => 'Logget inn som: %s',
|
||||
'Logout successful.' => 'Utlogging vellykket.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Ugylding innloggingsinformasjon.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-passord er utløpt. <a href="https://www.adminer.org/en/extension/"%s>Implementer</a> en metode for %s for å gjøre det permanent.',
|
||||
'Language' => 'Språk',
|
||||
'Invalid CSRF token. Send the form again.' => 'Ugylding CSRF-token - Send inn skjemaet igjen.',
|
||||
|
@ -279,32 +279,4 @@ $translations = array(
|
|||
'Type has been created.' => 'Type er opprettet.',
|
||||
'Alter type' => 'Endre type',
|
||||
'Saving' => 'Lagrer',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,8 @@ $translations = array(
|
|||
'Logout' => 'Wyloguj',
|
||||
'Logged as: %s' => 'Zalogowany jako: %s',
|
||||
'Logout successful.' => 'Wylogowano pomyślnie.',
|
||||
// 'Invalid credentials.' => 'Nieprawidłowy serwer lub dane logowania.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ proszę <a href="https://www.adminer.org/pl/donation/">dotację</a>.',
|
||||
'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="https://www.adminer.org/pl/extension/"%s>Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
|
||||
'Language' => 'Język',
|
||||
|
@ -336,21 +337,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Typ został usunięty.',
|
||||
'Type has been created.' => 'Typ został utworzony.',
|
||||
'Alter type' => 'Zmień typ',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'Warnings' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
'Invalid server or credentials.' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Entrar',
|
||||
'Logout successful.' => 'Saída bem sucedida.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Identificação inválida.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuário',
|
||||
'Password' => 'Senha',
|
||||
|
@ -260,51 +260,4 @@ $translations = array(
|
|||
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
||||
'now' => 'agora',
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been copied.' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'Copy' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Permanent link' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Edit all' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
'HH:MM:SS' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Entrar',
|
||||
'Logout successful.' => 'Sessão terminada com sucesso.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Identificação inválida.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Nome de utilizador',
|
||||
'Password' => 'Senha',
|
||||
|
@ -260,51 +260,4 @@ $translations = array(
|
|||
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
||||
'now' => 'agora',
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been copied.' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'Copy' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Permanent link' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Edit all' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
'HH:MM:SS' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Intră',
|
||||
'Logout successful.' => 'Ați ieșit cu succes.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Numele de utilizator sau parola este greșită.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Nume de utilizator',
|
||||
'Password' => 'Parola',
|
||||
|
@ -265,46 +265,4 @@ $translations = array(
|
|||
'Permanent link' => 'Adresă permanentă',
|
||||
'Edit all' => 'Editează tot',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Войти',
|
||||
'Logout successful.' => 'Вы успешно покинули систему.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Неправильное имя пользователя или пароль.',
|
||||
'Server' => 'Сервер',
|
||||
'Username' => 'Имя пользователя',
|
||||
'Password' => 'Пароль',
|
||||
|
@ -289,20 +289,4 @@ $translations = array(
|
|||
'Saving' => 'Сохранение',
|
||||
'yes' => 'Да',
|
||||
'no' => 'Нет',
|
||||
'Drop %s?' => 'Удалить %s?',
|
||||
'overwrite' => 'перезаписать',
|
||||
'DB' => 'DB',
|
||||
'Warnings' => 'Предупреждения',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer не поддерживает доступ к базе данных без пароля, <a href="https://www.adminer.org/en/password/"%s>больше информации</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Действие будет выполнено после успешного входа в систему с теми же учетными данными.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Подключение к привилегированным портам не допускается.',
|
||||
'There is a space in the input password which might be the cause.' => 'В введеном пароле есть пробел, это может быть причиною.',
|
||||
'Unknown error.' => 'Неизвестная ошибка.',
|
||||
'Database does not support password.' => 'База данных не поддерживает пароль.',
|
||||
|
||||
'as a regular expression' => 'как регулярное выражение',
|
||||
'Copy to clipboard' => 'Скопировать в буфер обмена',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Отключите %s или включите расширения %s или %s.',
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'Prihlásiť sa',
|
||||
'Logout successful.' => 'Odhlásenie prebehlo v poriadku.',
|
||||
'Invalid server or credentials.' => 'Neplatný server alebo prihlasovacie údaje.',
|
||||
'Invalid credentials.' => 'Neplatné prihlasovacie údaje.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Používateľ',
|
||||
'Password' => 'Heslo',
|
||||
|
@ -70,7 +70,7 @@ $translations = array(
|
|||
'Unable to select the table' => 'Tabuľku sa nepodarilo vypísať',
|
||||
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odošlite formulár znova.',
|
||||
'Comment' => 'Komentár',
|
||||
'Default values' => 'Predvolené hodnoty',
|
||||
'Default values' => 'Východzie hodnoty',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtov'),
|
||||
'No commands to execute.' => 'Žiadne príkazy na vykonanie.',
|
||||
'Unable to upload a file.' => 'Súbor sa nepodarilo nahrať.',
|
||||
|
@ -94,8 +94,8 @@ $translations = array(
|
|||
'Add column' => 'Pridať stĺpec',
|
||||
'Alter' => 'Zmeniť',
|
||||
'Add foreign key' => 'Pridať cudzí kľúč',
|
||||
'ON DELETE' => 'Pri zmazaní',
|
||||
'ON UPDATE' => 'Pri aktualizácii',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Typ indexu',
|
||||
'Column (length)' => 'Stĺpec (dĺžka)',
|
||||
'View has been dropped.' => 'Pohľad bol odstránený.',
|
||||
|
@ -265,46 +265,4 @@ $translations = array(
|
|||
'Permanent link' => 'Permanentný odkaz',
|
||||
'Edit all' => 'Upraviť všetko',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => 'Odstrániť %s?',
|
||||
'Tables have been optimized.' => 'Tabuľky boli optimalizované.',
|
||||
'as a regular expression' => 'ako regulárny výraz',
|
||||
'Materialized view' => 'Materializovaný pohľad',
|
||||
'Vacuum' => 'Vyčistiť',
|
||||
'Selected' => 'Označené',
|
||||
'overwrite' => 'prepísať',
|
||||
'DB' => 'DB',
|
||||
'File must be in UTF-8 encoding.' => 'Súbor musí byť v kódovaní UTF-8.',
|
||||
'Modify' => 'Zmeniť',
|
||||
'Load more data' => 'Nahráť ďalšie dáta',
|
||||
'Loading' => 'Nahráva sa',
|
||||
'Copy to clipboard' => 'Kopírovať do schránky',
|
||||
'ATTACH queries are not supported.' => 'Dotazy ATTACH nie sú podporované.',
|
||||
'Warnings' => 'Varovania',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Limit riadkov',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje prístup k databáze bez hesla, <a href="https://www.adminer.org/cs/password/"%s>viac informácií</a>.',
|
||||
'Default value' => 'Predvolená hodnota',
|
||||
'Full table scan' => 'Prechod celej tabuľky',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Príliš veľa pokusov o prihlásenie, skúste to znova za %d minutu.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minuty.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minút.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Platnosť hlavného hesla vypršala. <a href="https://www.adminer.org/cs/extension/"%s>Implementujte</a> metodu %s, aby platilo natrvalo.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Akcia sa vykoná po úspešnom prihlásení s rovnakými prihlasovacími údajmi.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Pripojenie k privilegovaným portom nie je povolené.',
|
||||
'There is a space in the input password which might be the cause.' => 'V zadanom hesle je medzera, ktorá môže byť príčinou.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Pokiaľ ste tento požiadavok neodoslali z Adminera, zatvorte túto stránku.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Veľký SQL soubor môžete nahrať pomocou FTP a importovať ho zo servera.',
|
||||
'Size' => 'Veľkosť',
|
||||
'Compute' => 'Spočítať',
|
||||
'You are offline.' => 'Ste offline.',
|
||||
'You have no privileges to update this table.' => 'Nemáte oprávnenie na aktualizáciu tejto tabuľky.',
|
||||
'Saving' => 'Ukladá sa',
|
||||
'Unknown error.' => 'Neznáma chyba.',
|
||||
'Database does not support password.' => 'Databáza nepodporuje heslo.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Zakážte %s alebo povoľte rozšírenie %s alebo %s.',
|
||||
'yes' => 'áno',
|
||||
'no' => 'nie',
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => 'Stiahnite si novú verziu AdminerEvo!',
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Odjavi se',
|
||||
'Logged as: %s' => 'Prijavljen kot: %s',
|
||||
'Logout successful.' => 'Prijava uspešna.',
|
||||
'Invalid server or credentials.' => 'Neveljaven strežnik ali pravice.',
|
||||
'Invalid credentials.' => 'Neveljavne pravice.',
|
||||
'Language' => 'Jezik',
|
||||
'Invalid CSRF token. Send the form again.' => 'Neveljaven token CSRF. Pošljite formular še enkrat.',
|
||||
'No extension' => 'Brez dodatkov',
|
||||
|
@ -304,49 +304,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Tip je zavržen.',
|
||||
'Type has been created.' => 'Tip je ustvarjen.',
|
||||
'Alter type' => 'Spremeni tip',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Permanent link' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Edit all' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
'HH:MM:SS' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Одјава',
|
||||
'Logged as: %s' => 'Пријави се као: %s',
|
||||
'Logout successful.' => 'Успешна одјава.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Неважеће дозволе.',
|
||||
'Language' => 'Језик',
|
||||
'Invalid CSRF token. Send the form again.' => 'Неважећи CSRF код. Проследите поново форму.',
|
||||
'No extension' => 'Без додатака',
|
||||
|
@ -316,40 +316,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Тип је избрисан.',
|
||||
'Type has been created.' => 'тип је креиран.',
|
||||
'Alter type' => 'Уреди тип',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,10 +10,11 @@ $translations = array(
|
|||
'Logout' => 'Logga ut',
|
||||
'Logged as: %s' => 'Inloggad som: %s',
|
||||
'Logout successful.' => 'Du är nu utloggad.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Tack för att du använder Adminer, vänligen fundera över att <a href="https://www.adminer.org/en/donation/">donera</a>.',
|
||||
'Invalid credentials.' => 'Ogiltiga inloggningsuppgifter.',
|
||||
'There is a space in the input password which might be the cause.' => 'Det finns ett mellanslag i lösenordet, vilket kan vara anledningen.',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer tillåter inte att ansluta till en databas utan lösenord. <a href="https://www.adminer.org/en/password/"%s>Mer information</a>.',
|
||||
'Database does not support password.' => 'Databasen stödjer inte lösenord.',
|
||||
'Database does not support password.' => 'Databasen stöder inte lösenord.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('För många misslyckade inloggningar, försök igen om %d minut.', 'För många misslyckade inloggningar, försök igen om %d minuter.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Huvudlösenordet har löpt ut. <a href="https://www.adminer.org/en/extension/"%s>Implementera</a> %s en metod för att göra det permanent.',
|
||||
'Language' => 'Språk',
|
||||
|
@ -24,7 +25,7 @@ $translations = array(
|
|||
'Connecting to privileged ports is not allowed.' => 'Anslutning till privilegierade portar är inte tillåtet.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Stäng av %s eller sätt på %s eller %s tilläggen.',
|
||||
'Session support must be enabled.' => 'Support för sessioner måste vara på.',
|
||||
'Session expired, please login again.' => 'Session har löpt ut, vänligen logga in igen.',
|
||||
'Session expired, please login again.' => 'Session har löpt ur, vänligen logga in igen.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Åtgärden kommer att utföras efter en lyckad inloggning med samma inloggningsuppgifter.',
|
||||
'%s version: %s through PHP extension %s' => '%s version: %s genom PHP-tillägg %s',
|
||||
'Refresh' => 'Ladda om',
|
||||
|
@ -345,11 +346,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Typ har, typ, tagits bort.',
|
||||
'Type has been created.' => 'Typ har skapats.',
|
||||
'Alter type' => 'Ändra typ',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'Copy to clipboard' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'நுழை',
|
||||
'Logout successful.' => 'வெற்றிகரமாய் வெளியேறியாயிற்று.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'சரியான விபரங்கள் இல்லை.',
|
||||
'Server' => 'வழங்கி (Server)',
|
||||
'Username' => 'பயனாளர் (User)',
|
||||
'Password' => 'கடவுச்சொல்',
|
||||
|
@ -264,47 +264,4 @@ $translations = array(
|
|||
'Permanent link' => 'நிரந்தர இணைப்பு',
|
||||
'Edit all' => 'அனைத்தையும் தொகு',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Ctrl+click on a value to modify it.' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$translations = array(
|
||||
'Login' => 'เข้าสู่ระบบ',
|
||||
'Logout successful.' => 'ออกจากระบบเรียบร้อยแล้ว.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'ข้อมูลไม่ถูกต้อง.',
|
||||
'Server' => 'เซอเวอร์',
|
||||
'Username' => 'ชื่อผู้ใช้งาน',
|
||||
'Password' => 'รหัสผ่าน',
|
||||
|
@ -265,46 +265,4 @@ $translations = array(
|
|||
'Permanent link' => 'ลิงค์ถาวร',
|
||||
'Edit all' => 'แก้ไขทั้งหมด',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'Tables have been optimized.' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'Vacuum' => null,
|
||||
'Selected' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'File must be in UTF-8 encoding.' => null,
|
||||
'Modify' => null,
|
||||
'Load more data' => null,
|
||||
'Loading' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'Full table scan' => null,
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||
'Size' => null,
|
||||
'Compute' => null,
|
||||
'You are offline.' => null,
|
||||
'You have no privileges to update this table.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
'yes' => null,
|
||||
'no' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,8 @@ $translations = array(
|
|||
'Logout' => 'Çıkış',
|
||||
'Logged as: %s' => '%s olarak giriş yapıldı.',
|
||||
'Logout successful.' => 'Oturum başarıyla sonlandı.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href="https://www.adminer.org/en/donation/">bağış yapmayı düşünün</a>.',
|
||||
'Invalid credentials.' => 'Geçersiz kimlik bilgileri.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ana şifrenin süresi doldu. Kalıcı olması için <a href="https://www.adminer.org/en/extension/"%s>%s medodunu</a> kullanın.',
|
||||
'Language' => 'Dil',
|
||||
|
@ -339,17 +340,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Tür silindi.',
|
||||
'Type has been created.' => 'Tür oluşturuldu.',
|
||||
'Alter type' => 'Türü değiştir',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'overwrite' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Вийти',
|
||||
'Logged as: %s' => 'Ви увійшли як: %s',
|
||||
'Logout successful.' => 'Ви вдало вийшли з системи.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Неправильні дані входу.',
|
||||
'Language' => 'Мова',
|
||||
'Invalid CSRF token. Send the form again.' => 'Недійсний CSRF токен. Надішліть форму ще раз.',
|
||||
'No extension' => 'Нема розширень',
|
||||
|
@ -313,43 +313,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Тип було видалено.',
|
||||
'Type has been created.' => 'Тип було створено.',
|
||||
'Alter type' => 'Змінити тип',
|
||||
'Drop %s?' => 'Вилучити %s?',
|
||||
'Materialized view' => 'Матеріалізований вигляд',
|
||||
'Selected' => 'Вибрані',
|
||||
'overwrite' => 'перезаписати',
|
||||
'DB' => 'DB',
|
||||
'File must be in UTF-8 encoding.' => 'Файл повинен бути в кодуванні UTF-8.',
|
||||
'Modify' => 'Змінити',
|
||||
'Load more data' => 'Завантажити ще дані',
|
||||
'Loading' => 'Завантаження',
|
||||
'ATTACH queries are not supported.' => 'ATTACH-запити не підтримуються.',
|
||||
'Warnings' => 'Попередження',
|
||||
'Limit rows' => 'Обмеження рядків',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer не підтримує доступ до бази даних без пароля, <a href="https://www.adminer.org/en/password/"%s>більше інформації</a>.',
|
||||
'Default value' => 'Значення за замовчуванням',
|
||||
'Full table scan' => 'Повне сканування таблиці',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилину.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилини.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилин.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Термін дії майстер пароля минув. <a href="https://www.adminer.org/en/extension/"%s>Реалізуйте</a> метод %s, щоб зробити його постійним.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Дія буде виконуватися після успішного входу в систему з тими ж обліковими даними.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Підключення до привілейованих портів заборонено.',
|
||||
'There is a space in the input password which might be the cause.' => 'У вхідному паролі є пробіл, який може бути причиною.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Якщо ви не посилали цей запит з Adminer, закрийте цю сторінку.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Ви можете завантажити великий файл SQL через FTP та імпортувати його з сервера.',
|
||||
'Size' => 'Розмір',
|
||||
'Compute' => 'Обчислити',
|
||||
'You are offline.' => 'Ви офлайн.',
|
||||
'You have no privileges to update this table.' => 'Ви не маєте привілеїв для оновлення цієї таблиці.',
|
||||
'Saving' => 'Збереження',
|
||||
'Unknown error.' => 'Невідома помилка.',
|
||||
'Database does not support password.' => 'База даних не підтримує пароль.',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'Vacuum' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'%d / ' => array(),
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ $translations = array(
|
|||
'Logout' => 'Thoát',
|
||||
'Logged as: %s' => 'Vào dưới tên: %s',
|
||||
'Logout successful.' => 'Đã thoát xong.',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Invalid credentials.' => 'Tài khoản sai.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'Bạn gõ sai tài khoản quá nhiều lần, hãy thử lại sau %d phút nữa.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Mật khẩu đã hết hạn. <a href="https://www.adminer.org/en/extension/"%s>Thử cách làm</a> để giữ cố định.',
|
||||
'Language' => 'Ngôn ngữ',
|
||||
|
@ -325,30 +325,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Đã xoá kiểu.',
|
||||
'Type has been created.' => 'Đã tạo kiểu.',
|
||||
'Alter type' => 'Sửa kiểu dữ liệu',
|
||||
|
||||
'Drop %s?' => null,
|
||||
'as a regular expression' => null,
|
||||
'Materialized view' => null,
|
||||
'overwrite' => null,
|
||||
'DB' => null,
|
||||
'Copy to clipboard' => null,
|
||||
'ATTACH queries are not supported.' => null,
|
||||
'Warnings' => null,
|
||||
'%d / ' => array(),
|
||||
'Limit rows' => null,
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||
'Default value' => null,
|
||||
'The action will be performed after successful login with the same credentials.' => null,
|
||||
'Connecting to privileged ports is not allowed.' => null,
|
||||
'There is a space in the input password which might be the cause.' => null,
|
||||
'If you did not send this request from Adminer then close this page.' => null,
|
||||
'You are offline.' => null,
|
||||
'Saving' => null,
|
||||
'Unknown error.' => null,
|
||||
'Database does not support password.' => null,
|
||||
'Disable %s or enable %s or %s extensions.' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,8 @@ $translations = array(
|
|||
'Logout' => 'Xx',
|
||||
'Logged as: %s' => 'Xx: %s',
|
||||
'Logout successful.' => 'Xx.',
|
||||
'Invalid server or credentials.' => 'Xx.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Xx <a href="https://www.adminer.org/en/donation/">xx</a>.',
|
||||
'Invalid credentials.' => 'Xx.',
|
||||
'There is a space in the input password which might be the cause.' => 'Xx.',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Xx, <a href="https://www.adminer.org/en/password/"%s>xx</a>.',
|
||||
'Database does not support password.' => 'Xx.',
|
||||
|
@ -345,11 +346,4 @@ $translations = array(
|
|||
'Type has been dropped.' => 'Xx.',
|
||||
'Type has been created.' => 'Xx.',
|
||||
'Alter type' => 'Xx',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'Copy to clipboard' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,8 @@ $translations = array(
|
|||
'Logout' => '登出',
|
||||
'Logged as: %s' => '登錄為: %s',
|
||||
'Logout successful.' => '成功登出。',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感謝使用Adminer,請考慮為我們<a href="https://www.adminer.org/en/donation/">捐款(英文網頁)</a>.',
|
||||
'Invalid credentials.' => '無效的憑證。',
|
||||
'There is a space in the input password which might be the cause.' => '您輸入的密碼中有一個空格,這可能是導致問題的原因。',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer預設不支援訪問沒有密碼的資料庫,<a href="https://www.adminer.org/en/password/"%s>詳情見這裡</a>.',
|
||||
'Database does not support password.' => '資料庫不支援密碼。',
|
||||
|
@ -345,11 +346,4 @@ $translations = array(
|
|||
'Type has been dropped.' => '已刪除類型。',
|
||||
'Type has been created.' => '已建立類型。',
|
||||
'Alter type' => '修改類型',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'Copy to clipboard' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -10,7 +10,8 @@ $translations = array(
|
|||
'Logout' => '登出',
|
||||
'Logged as: %s' => '登录用户:%s',
|
||||
'Logout successful.' => '成功登出。',
|
||||
'Invalid server or credentials.' => null,
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感谢使用Adminer,请考虑为我们<a href="https://www.adminer.org/en/donation/">捐款(英文页面)</a>.',
|
||||
'Invalid credentials.' => '无效凭据。',
|
||||
'There is a space in the input password which might be the cause.' => '您输入的密码中有一个空格,这可能是导致问题的原因。',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer默认不支持访问没有密码的数据库,<a href="https://www.adminer.org/en/password/"%s>详情见这里</a>.',
|
||||
'Database does not support password.' => '数据库不支持密码。',
|
||||
|
@ -345,11 +346,4 @@ $translations = array(
|
|||
'Type has been dropped.' => '已删除类型。',
|
||||
'Type has been created.' => '已创建类型。',
|
||||
'Alter type' => '修改类型',
|
||||
|
||||
'as a regular expression' => null,
|
||||
'Copy to clipboard' => null,
|
||||
|
||||
// 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||
|
||||
'A newer version of AdminerEvo is available, download it now!' => null,
|
||||
);
|
||||
|
|
|
@ -2,15 +2,12 @@
|
|||
function adminer_object() {
|
||||
// required to run any plugin
|
||||
include_once "../plugins/plugin.php";
|
||||
|
||||
|
||||
// autoloader
|
||||
foreach (glob("../plugins/*.php") as $filename) {
|
||||
include_once $filename;
|
||||
}
|
||||
|
||||
// enable extra drivers just by including them
|
||||
//~ include "../plugins/drivers/simpledb.php";
|
||||
|
||||
|
||||
$plugins = array(
|
||||
// specify enabled plugins here
|
||||
new AdminerDatabaseHide(array('information_schema')),
|
||||
|
@ -32,13 +29,13 @@ function adminer_object() {
|
|||
new AdminerTablesFilter,
|
||||
new AdminerEditForeign,
|
||||
);
|
||||
|
||||
|
||||
/* It is possible to combine customization and plugins:
|
||||
class AdminerCustomization extends AdminerPlugin {
|
||||
}
|
||||
return new AdminerCustomization($plugins);
|
||||
*/
|
||||
|
||||
|
||||
return new AdminerPlugin($plugins);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
<?php
|
||||
if (support("kill")) {
|
||||
if ($_POST && !$error) {
|
||||
$killed = 0;
|
||||
foreach ((array) $_POST["kill"] as $val) {
|
||||
if (kill_process($val)) {
|
||||
$killed++;
|
||||
}
|
||||
if (support("kill") && $_POST && !$error) {
|
||||
$killed = 0;
|
||||
foreach ((array) $_POST["kill"] as $val) {
|
||||
if (kill_process($val)) {
|
||||
$killed++;
|
||||
}
|
||||
queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]);
|
||||
}
|
||||
queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]);
|
||||
}
|
||||
|
||||
page_header(lang('Process list'), $error);
|
||||
|
|
|
@ -61,12 +61,12 @@ foreach ($schema as $name => $table) {
|
|||
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;'>";
|
||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a>";
|
||||
echo script("qsl('div').onmousedown = schemaMousedown;");
|
||||
|
||||
|
||||
foreach ($table["fields"] as $field) {
|
||||
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
||||
echo "<br>" . ($field["primary"] ? "<i>$val</i>" : $val);
|
||||
}
|
||||
|
||||
|
||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $ref) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
|
@ -76,7 +76,7 @@ foreach ($schema as $name => $table) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach ((array) $referenced[$name] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $columns) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
|
@ -86,7 +86,7 @@ foreach ($schema as $name => $table) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo "\n</div>\n";
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ if ($_GET["script"] == "db") {
|
|||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||
if ($table_status[$key] != "") {
|
||||
$val = format_number($table_status[$key]);
|
||||
json_row("$key-$name", ($key == "Rows" && $val && $table_status["Engine"] == ($jush == "pgsql" ? "table" : "InnoDB")
|
||||
json_row("$key-$name", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
||||
? "~ $val"
|
||||
: $val
|
||||
));
|
||||
|
|
|
@ -22,7 +22,7 @@ foreach ($fields as $key => $field) {
|
|||
}
|
||||
|
||||
list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes);
|
||||
$is_group = count($group) < count($select) || strstr($select[0], "DISTINCT");
|
||||
$is_group = count($group) < count($select);
|
||||
$where = $adminer->selectSearchProcess($fields, $indexes);
|
||||
$order = $adminer->selectOrderProcess($fields, $indexes);
|
||||
$limit = $adminer->selectLimitProcess();
|
||||
|
@ -243,7 +243,6 @@ if (!$columns && support("table")) {
|
|||
hidden_fields_get();
|
||||
echo (DB != "" ? '<input type="hidden" name="db" value="' . h(DB) . '">' . (isset($_GET["ns"]) ? '<input type="hidden" name="ns" value="' . h($_GET["ns"]) . '">' : "") : ""); // not used in Editor
|
||||
echo '<input type="hidden" name="select" value="' . h($TABLE) . '">';
|
||||
echo '<input type="submit" value="' . h(lang('Select')) . '">'; # hidden default submit so filter remove buttons aren't "clicked" on submission from enter key
|
||||
echo "</div>\n";
|
||||
$adminer->selectColumnsPrint($select, $columns);
|
||||
$adminer->selectSearchPrint($where, $columns, $indexes);
|
||||
|
@ -316,14 +315,14 @@ if (!$columns && support("table")) {
|
|||
echo "<thead><tr>" . (!$group && $select
|
||||
? ""
|
||||
: "<td><input type='checkbox' id='all-page' class='jsonly'>" . script("qs('#all-page').onclick = partial(formCheck, /check/);", "")
|
||||
. " <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "' title='" . lang('Modify') . "' class='edit-all'>" . lang('Modify') . "</a>");
|
||||
. " <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('Modify') . "</a>");
|
||||
$names = array();
|
||||
$functions = array();
|
||||
reset($select);
|
||||
$rank = 1;
|
||||
foreach ($rows[0] as $key => $val) {
|
||||
if (!isset($unselected[$key])) {
|
||||
$val = $_GET["columns"][key($select)] ?? null;
|
||||
$val = $_GET["columns"][key($select)];
|
||||
$field = $fields[$select ? ($val ? $val["col"] : current($select)) : $key];
|
||||
$name = ($field ? $adminer->fieldName($field, $rank) : ($val["fun"] ? "*" : $key));
|
||||
if ($name != "") {
|
||||
|
@ -332,18 +331,18 @@ if (!$columns && support("table")) {
|
|||
$column = idf_escape($key);
|
||||
$href = remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key);
|
||||
$desc = "&desc%5B0%5D=1";
|
||||
echo "<th id='th[" . h(bracket_escape($key)) . "]'>" . script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});", "");
|
||||
echo "<th>" . script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});", "");
|
||||
echo '<a href="' . h($href . ($order[0] == $column || $order[0] == $key || (!$order && $is_group && $group[0] == $column) ? $desc : '')) . '">'; // $order[0] == $key - COUNT(*)
|
||||
echo apply_sql_function($val["fun"] ?? null, $name) . "</a>"; //! columns looking like functions
|
||||
echo apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
|
||||
echo "<span class='column hidden'>";
|
||||
echo "<a href='" . h($href . $desc) . "' title='" . lang('descending') . "' class='text'> ↓</a>";
|
||||
if (isset($val["fun"]) === false) {
|
||||
if (!$val["fun"]) {
|
||||
echo '<a href="#fieldset-search" title="' . lang('Search') . '" class="text jsonly"> =</a>';
|
||||
echo script("qsl('a').onclick = partial(selectSearch, '" . js_escape($key) . "');");
|
||||
}
|
||||
echo "</span>";
|
||||
}
|
||||
$functions[$key] = $val["fun"] ?? null;
|
||||
$functions[$key] = $val["fun"];
|
||||
next($select);
|
||||
}
|
||||
}
|
||||
|
@ -383,11 +382,11 @@ if (!$columns && support("table")) {
|
|||
$key = "MD5(" . ($jush != 'sql' || preg_match("~^utf8~", $fields[$key]["collation"]) ? $key : "CONVERT($key USING " . charset($connection) . ")") . ")";
|
||||
$val = md5($val);
|
||||
}
|
||||
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val === false ? "f" : $val) : "null%5B%5D=" . urlencode($key));
|
||||
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
|
||||
}
|
||||
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>"
|
||||
. checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]))
|
||||
. ($is_group || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "' class='edit' title='" . lang('edit') . "'>" . lang('edit') . "</a>")
|
||||
. ($is_group || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "' class='edit'>" . lang('edit') . "</a>")
|
||||
);
|
||||
|
||||
foreach ($row as $key => $val) {
|
||||
|
@ -399,7 +398,7 @@ if (!$columns && support("table")) {
|
|||
}
|
||||
|
||||
$link = "";
|
||||
if (preg_match('~blob|bytea|raw|file~', $field["type"] ?? null) && $val != "") {
|
||||
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && $val != "") {
|
||||
$link = ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf;
|
||||
}
|
||||
if (!$link && $val !== null) { // link related items
|
||||
|
@ -431,15 +430,12 @@ if (!$columns && support("table")) {
|
|||
$link .= where_link($i++, $k, $v);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$val = select_value($val, $link, $field, $text_length);
|
||||
$id = h("val[$unique_idf][" . bracket_escape($key) . "]");
|
||||
$value = null;
|
||||
if (isset($_POST["val"][$unique_idf][bracket_escape($key)])) {
|
||||
$_POST["val"][$unique_idf][bracket_escape($key)];
|
||||
}
|
||||
$value = $_POST["val"][$unique_idf][bracket_escape($key)];
|
||||
$editable = !is_array($row[$key]) && is_utf8($val) && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
||||
$text = preg_match('~text|lob~', $field["type"] ?? null);
|
||||
$text = preg_match('~text|lob~', $field["type"]);
|
||||
echo "<td id='$id'";
|
||||
if (($_GET["modify"] && $editable) || $value !== null) {
|
||||
$h_value = h($value !== null ? $value : $row[$key]);
|
||||
|
@ -495,7 +491,7 @@ if (!$columns && support("table")) {
|
|||
echo "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo "<div class='footer'><div>\n";
|
||||
if ($rows || $page) {
|
||||
if ($pagination) {
|
||||
|
@ -527,7 +523,7 @@ if (!$columns && support("table")) {
|
|||
}
|
||||
echo "</fieldset>\n";
|
||||
}
|
||||
|
||||
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . lang('Whole result') . "</legend>";
|
||||
$display_rows = ($exact_count ? "" : "~ ") . $found_rows;
|
||||
|
|
|
@ -87,7 +87,7 @@ if (!$error && $_POST) {
|
|||
$query .= fread($fp, 1e5);
|
||||
} else {
|
||||
$offset = $match[0][1] + strlen($s);
|
||||
if (!isset($s[0]) || $s[0] != "\\") {
|
||||
if ($s[0] != "\\") {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -97,8 +97,7 @@ if (!$error && $_POST) {
|
|||
$empty = false;
|
||||
$q = substr($query, 0, $pos);
|
||||
$commands++;
|
||||
$print = "<pre id='sql-$commands'><code class='jush-$jush copy-to-clipboard'>" . $adminer->sqlCommandQuery($q) . "</code></pre>\n";
|
||||
$print .= generate_linksbar(["<a href='#' class='copy-to-clipboard'>" . lang('Copy to clipboard') . "</a>"]);
|
||||
$print = "<pre id='sql-$commands'><code class='jush-$jush'>" . $adminer->sqlCommandQuery($q) . "</code></pre>\n";
|
||||
if ($jush == "sqlite" && preg_match("~^$space*+ATTACH\\b~i", $q, $match)) {
|
||||
// PHP doesn't support setting SQLITE_LIMIT_ATTACHED
|
||||
echo $print;
|
||||
|
@ -223,10 +222,10 @@ if (!isset($_GET["import"])) {
|
|||
}
|
||||
echo "<p>";
|
||||
textarea("query", $q, 20);
|
||||
echo script(($_POST ? "" : "qs('textarea').focus();\n") . "qs('#form').onsubmit = partial(sqlSubmit, qs('#form'), '" . js_escape(remove_from_uri("sql|limit|error_stops|only_errors|history")) . "');");
|
||||
echo script(($_POST ? "" : "qs('textarea').focus();\n") . "qs('#form').onsubmit = partial(sqlSubmit, qs('#form'), '" . remove_from_uri("sql|limit|error_stops|only_errors") . "');");
|
||||
echo "<p>$execute\n";
|
||||
echo lang('Limit rows') . ": <input type='number' name='limit' class='size' value='" . h($_POST ? $_POST["limit"] : $_GET["limit"]) . "'>\n";
|
||||
|
||||
|
||||
} else {
|
||||
echo "<fieldset><legend>" . lang('File upload') . "</legend><div>";
|
||||
$gz = (extension_loaded("zlib") ? "[.gz]" : "");
|
||||
|
@ -245,8 +244,8 @@ if (!isset($_GET["import"])) {
|
|||
echo "<p>";
|
||||
}
|
||||
|
||||
echo checkbox("error_stops", 1, ($_POST ? $_POST["error_stops"] : isset($_GET["import"]) || $_GET["error_stops"]), lang('Stop on error')) . "\n";
|
||||
echo checkbox("only_errors", 1, ($_POST ? $_POST["only_errors"] : isset($_GET["import"]) || $_GET["only_errors"]), lang('Show only errors')) . "\n";
|
||||
echo checkbox("error_stops", 1, ($_POST ? $_POST["error_stops"] : isset($_GET["import"])), lang('Stop on error')) . "\n";
|
||||
echo checkbox("only_errors", 1, ($_POST ? $_POST["only_errors"] : isset($_GET["import"])), lang('Show only errors')) . "\n";
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
|
||||
if (!isset($_GET["import"]) && $history) {
|
||||
|
@ -254,7 +253,7 @@ if (!isset($_GET["import"]) && $history) {
|
|||
for ($val = end($history); $val; $val = prev($history)) { // not array_reverse() to save memory
|
||||
$key = key($history);
|
||||
list($q, $time, $elapsed) = $val;
|
||||
echo '<a href="' . h(ME . "sql=&history=$key") . '" class="edit" title="' . lang('Edit') . '">' . lang('Edit') . "</a>"
|
||||
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a>"
|
||||
. " <span class='time' title='" . @date('Y-m-d', $time) . "'>" . @date("H:i:s", $time) . "</span>" // @ - time zone may be not set
|
||||
. " <code class='jush-$jush'>" . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $q)))), 80, "</code>")
|
||||
. ($elapsed ? " <span class='time'>($elapsed)</span>" : "")
|
||||
|
@ -262,7 +261,7 @@ if (!isset($_GET["import"]) && $history) {
|
|||
;
|
||||
}
|
||||
echo "<input type='submit' name='clear' value='" . lang('Clear') . "'>\n";
|
||||
echo "<a href='" . h(ME . "sql=&history=all") . "' class='edit-all' title='" . lang('Edit all') . "'>" . lang('Edit all') . "</a>\n";
|
||||
echo "<a href='" . h(ME . "sql=&history=all") . "'>" . lang('Edit all') . "</a>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
/** @author Ondrej Valka, http://valka.info */
|
||||
/** Icons by https://tabler-icons.io/ (https://github.com/tabler/tabler-icons) */
|
||||
body { color: rgb(0, 0, 0); background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; width: -moz-fit-content; width: fit-content; }
|
||||
a { color: #0051cc; text-decoration: none; }
|
||||
a:visited { color: #0051cc; }
|
||||
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; width: -moz-fit-content; width: fit-content; }
|
||||
a { color: blue; text-decoration: none; }
|
||||
a:visited { color: navy; }
|
||||
a:link:hover, a:visited:hover { color: red; text-decoration: underline; }
|
||||
a.text:hover { text-decoration: none; }
|
||||
a.jush-help:hover { color: inherit; }
|
||||
h1 { font-size: 150%; margin: 0; padding: .8em 1em; border-bottom: 1px solid #999; font-weight: normal; color: #777; }
|
||||
h1 { font-size: 150%; margin: 0; padding: .8em 1em; border-bottom: 1px solid #999; font-weight: normal; color: #777; background: #eee; }
|
||||
h2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom: 1px solid #000; color: #000; font-weight: normal; background: #ddf; }
|
||||
h3 { font-weight: normal; font-size: 130%; margin: 1em 0 0; }
|
||||
form { margin: 0; }
|
||||
|
@ -16,7 +15,7 @@ td, th { border: 1px solid #999; padding: .2em .3em; }
|
|||
th { background: #eee; text-align: left; }
|
||||
thead th { text-align: center; padding: .2em .5em; }
|
||||
thead td, thead th { background: #ddf; } /* position: sticky; causes Firefox to lose borders */
|
||||
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8em .5em 0 0; border: 1px solid #999; border-radius: 5px; }
|
||||
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8em .5em 0 0; border: 1px solid #999; }
|
||||
p { margin: .8em 20px 0 0; }
|
||||
img { vertical-align: middle; border: 0; }
|
||||
td img { max-width: 200px; max-height: 200px; }
|
||||
|
@ -24,20 +23,13 @@ code { background: #eee; }
|
|||
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
||||
pre { margin: 1em 0 0; }
|
||||
pre, textarea { font: 100%/1.25 monospace; }
|
||||
input, button { vertical-align: middle; border-radius: 5px; padding: 2px; border-width: 1px; }
|
||||
input { vertical-align: middle; }
|
||||
input.default { box-shadow: 1px 1px 1px #777; }
|
||||
input.required { box-shadow: 1px 1px 1px red; }
|
||||
input.maxlength { box-shadow: 1px 1px 1px red; }
|
||||
input.wayoff { left: -1000px; position: absolute; }
|
||||
input[type='submit'] { padding-left: 10px; padding-right: 10px; }
|
||||
select { border-radius: 5px; padding: 2px; vertical-align: middle; }
|
||||
fieldset label input[type='checkbox'] { margin-bottom: 6px; }
|
||||
fieldset a { line-height: 20px; }
|
||||
#fieldset-select .icon, #fieldset-search .icon, #fieldset-sort .icon { cursor: pointer; }
|
||||
#fieldset-select div:last-child > .icon, #fieldset-search div:last-child > .icon, #fieldset-sort div:last-child > .icon { display: none; }
|
||||
span.separator { margin-left: 5px; margin-right: 5px; }
|
||||
.block { display: block; }
|
||||
.version { color: #777; font-size: 50%; }
|
||||
.version { color: #777; font-size: 67%; }
|
||||
.js .hidden, .nojs .jsonly { display: none; }
|
||||
.js .column { position: absolute; background: #ddf; padding: .27em 1ex .3em 0; margin-top: -.27em; }
|
||||
.nowrap td, .nowrap th, td.nowrap, p.nowrap { white-space: pre; }
|
||||
|
@ -61,7 +53,7 @@ span.separator { margin-left: 5px; margin-right: 5px; }
|
|||
.options select { width: 20ex; width: auto\9; }
|
||||
.view { font-style: italic; }
|
||||
.active { font-weight: bold; }
|
||||
.sqlarea { width: 98%; border-radius: 5px; font-size: 110%; }
|
||||
.sqlarea { width: 98%; }
|
||||
.icon { width: 18px; height: 18px; background-color: navy; }
|
||||
.icon:hover { background-color: red; }
|
||||
.size { width: 6ex; }
|
||||
|
@ -69,21 +61,14 @@ span.separator { margin-left: 5px; margin-right: 5px; }
|
|||
.footer { position: sticky; bottom: 0; margin-right: -20px; border-top: 20px solid rgba(255, 255, 255, .7); border-image: linear-gradient(rgba(255, 255, 255, .2), #fff) 100% 0; }
|
||||
.footer > div { background: #fff; padding: 0 0 .5em; }
|
||||
.footer fieldset { margin-top: 0; }
|
||||
.links a { display: inline-block; }
|
||||
.links a { white-space: nowrap; margin-right: 20px; }
|
||||
.logout { margin-top: .5em; position: absolute; top: 0; right: 0; }
|
||||
.loadmore { margin-left: 1ex; }
|
||||
/* .edit used in designs */
|
||||
#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; }
|
||||
#menu h1 { border-top: 1px solid #999; padding-left: 50px; background-repeat: no-repeat; background-position: top 14px left 15px; background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='32' height='32' version='1.1' viewBox='64.7 124.1 80.9 96.4' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m103.41 219.69c-5.8574-2.8071-15.54-10.873-20.554-17.123-8.4331-10.511-13.554-22-16.256-36.469-0.61313-3.2837-0.94886-7.2042-1.3892-16.222-0.49913-10.223-0.51449-13.203-0.06891-13.372 0.21381-0.0812 2.4952-0.48891 5.0697-0.9064 13.6-2.2054 20.623-4.4565 32.562-10.438 2.405-1.2048 2.0374-1.2525 6.2745 0.81404 11.41 5.5651 17.35 7.4133 30.893 9.6133 1.4204 0.23065 3.1637 0.5438 3.8739 0.6957l1.2913 0.27615 0.0503 1.1299c0.18503 4.1624-0.92338 23-1.6052 27.279-3.0098 18.889-11.655 34.733-25.401 46.551-5.2062 4.476-7.3971 6.017-11.166 7.8534-2.1324 1.0391-2.0779 1.0343-3.5755 0.3166zm2.9787-3.3031c6.1816-2.8968 15.622-10.943 20.558-17.522 7.8262-10.432 12.201-20.542 14.378-33.229 0.75313-4.3896 1.7534-20.732 1.5769-25.763l-0.0537-1.5295-1.5334-0.2868c-0.84339-0.1578-2.6956-0.46995-4.116-0.69376-11.476-1.8083-17.455-3.6872-28.486-8.9523-3.9955-1.9071-3.5582-1.8595-5.9706-0.65024-10.907 5.4675-17.902 7.6897-30.755 9.7708-2.4858 0.4025-4.6474 0.77143-4.8036 0.81989-0.32192 0.0998-0.3193 0.30415 0.13497 10.557 0.44397 10.021 0.80438 14.248 1.5136 17.752 4.0571 20.047 12.361 33.554 28.093 45.694 2.0354 1.5708 7.3043 4.6699 7.9393 4.6699 0.0905 0 0.7763-0.2867 1.524-0.63714z' fill='%232d4159' stroke-width='0'/%3E%3Cg fill='none' stroke='%232d4159' stroke-linecap='round'%3E%3Cpath d='m117.12 167.89h10.555' stroke-width='1.5366'/%3E%3Cpath d='m82.309 167.91h15.836' stroke-width='1.5366'/%3E%3Cpath d='m117.21 173.98c3.4115-9e-3 6.822-0.0178 8.5265 2.5195s1.7043 7.6198 1.704 12.701' stroke-linejoin='round' stroke-width='2.0479'/%3E%3C/g%3E%3Ca transform='matrix(1.3101,0,0,1.3101,-32.778,-49.614)' stroke-width='2.2613'%3E%3Cpath d='m102.94 183.03c-3.5765-0.48481-6.4446-3.0846-7.2878-6.6062-0.24955-1.0422-0.24955-15.526 0-16.569 0.78951-3.2971 3.3213-5.7688 6.6636-6.5054 0.90662-0.1998 4.7806-0.1998 5.6872 0 3.3422 0.73656 5.8741 3.2083 6.6636 6.5054 0.24956 1.0422 0.24956 15.526 0 16.569-0.78643 3.2843-3.2115 5.8758-6.5248 6.608-0.62799 0.13877-4.4 0.10692-5.2017-2e-3zm4.8475-1.2499c3.0163-0.68834 5.2113-2.9219 5.7878-5.8896 0.10298-0.53012 0.11102-0.88647 0.11102-4.9205v-4.349h-17.054v4.349c0 4.034 8e-3 4.3904 0.11102 4.9205 0.60507 3.1148 3.0017 5.4265 6.1674 5.9488 0.72013 0.1188 4.2865 0.0756 4.8767-0.0591zm-3.2122-17.428c0-1.1003 0-1.1003-0.1459-1.1668-0.23048-0.10501-0.66958-0.53783-0.80808-0.7965-0.1736-0.32424-0.22738-3.2901-0.0683-3.7689 0.11347-0.34163 0.48553-0.78056 0.79582-0.93886l0.2265-0.11555v-3.2264l-0.77385 0.0317c-3.5466 0.14528-6.388 2.5676-7.058 6.0171-0.0973 0.50068-0.11102 0.84993-0.11102 2.818v2.2465h7.9429zm9.111-1.1462c0-1.9681-0.0138-2.3173-0.11102-2.818-0.6701-3.4496-3.5114-5.8718-7.058-6.0171l-0.77385-0.0317v3.2264l0.2265 0.11555c0.30422 0.1552 0.67838 0.59148 0.79118 0.92253 0.1538 0.45138 0.13354 3.2291-0.0267 3.6574-0.12251 0.32742-0.54083 0.78574-0.84273 0.9233-0.14828 0.0676-0.14828 0.0676-0.14828 1.1678v1.1003h7.9429z' fill='%232d4159' stroke-width='2.2613'/%3E%3C/a%3E%3Cg fill='none' stroke='%232d4159' stroke-linecap='round' stroke-linejoin='round' stroke-width='2.0479'%3E%3Cpath d='m92.778 174.02c-3.4115-9e-3 -6.8219-0.0178-8.5265 2.5195s-1.7043 7.6198-1.704 12.701'/%3E%3Cpath d='m117.22 163.17c3.4115 9e-3 6.822 0.0178 8.5265-2.5195 1.7046-2.5373 1.7043-7.6198 1.704-12.701'/%3E%3Cpath d='m92.793 163.13c-3.4115 9e-3 -6.8219 0.0178-8.5265-2.5195s-1.7043-7.6198-1.704-12.701'/%3E%3C/g%3E%3C/svg%3E%0A"); }
|
||||
#menu p, #logins, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||
#logins li, #tables li { list-style: none; }
|
||||
#tables li a.select { font-size: 0; padding: 12px 8px 5px 8px; background-size: 16px; background-repeat: no-repeat; background-position: 0 0; background-image: url('data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-article" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 4m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z"></path><path d="M7 8h10"></path><path d="M7 12h10"></path><path d="M7 16h10"></path></svg>'); }
|
||||
#table tbody tr td a.edit, #fieldset-history a.edit { font-size: 0; padding: 12px 8px 5px 8px; background-size: 16px; background-repeat: no-repeat; background-position: 0 0; background-image: url('data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-pencil" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4"/><path d="M13.5 6.5l4 4"/></svg>'); }
|
||||
#table thead tr td a.edit-all, #fieldset-history a.edit-all { font-size: 0; padding: 12px 8px 5px 8px; background-size: 16px; background-repeat: no-repeat; background-position: 0 0; background-image: url('data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-edit" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1"></path><path d="M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z"></path><path d="M16 5l3 3"></path></svg>'); }
|
||||
#dbs { font-size: 100%; width: 100%; margin: 0; border-collapse: separate; border-spacing: 1em .8em; }
|
||||
#dbs select { width: 100%; }
|
||||
#dbs td { padding: 0; border: 0 none; }
|
||||
#dbs tr:hover td { background: transparent; }
|
||||
#dbs { overflow: hidden; }
|
||||
#logins, #tables { white-space: nowrap; overflow: auto; }
|
||||
#logins a, #tables a, #tables span { background: #fff; }
|
||||
#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }
|
||||
|
@ -95,19 +80,17 @@ span.separator { margin-left: 5px; margin-right: 5px; }
|
|||
#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; }
|
||||
#schema .references { position: absolute; }
|
||||
#help { position: absolute; border: 1px solid #999; background: #eee; padding: 5px; font-family: monospace; z-index: 1; }
|
||||
a.copy-to-clipboard.icon { font-size: 0; padding: 12px 8px 5px 8px; margin-left: 5px; background-size: 16px; background-repeat: no-repeat; background-position: 0 0; background-color: transparent; background-image: url('data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-clipboard-copy" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M9 5h-2a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h3m9 -9v-5a2 2 0 0 0 -2 -2h-2"></path><path d="M13 17v-1a1 1 0 0 1 1 -1h1m3 0h1a1 1 0 0 1 1 1v1m0 3v1a1 1 0 0 1 -1 1h-1m-3 0h-1a1 1 0 0 1 -1 -1v-1"></path><path d="M9 3m0 2a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-2a2 2 0 0 1 -2 -2z"></path></svg>'); }
|
||||
|
||||
.rtl h2 { margin: 0 -18px 20px 0; }
|
||||
.rtl p, .rtl table, .rtl .error, .rtl .message { margin: 1em 0 0 20px; }
|
||||
.rtl .logout { left: 0; right: auto; }
|
||||
.rtl #menu h1 { padding-left: 1em; padding-right: 50px; background-position: top 14px right 15px; }
|
||||
.rtl #content { margin: 2em 21em 0 0; padding: 10px 0 20px 20px; }
|
||||
.rtl #breadcrumb { left: auto; right: 21em; margin: 0 -18px 0 0; }
|
||||
.rtl .pages { left: auto; right: 21em; }
|
||||
.rtl input.wayoff { left: auto; right: -1000px; }
|
||||
.rtl #lang, .rtl #menu { left: auto; right: 0; }
|
||||
|
||||
@media all and (max-width: 880px) {
|
||||
@media all and (max-device-width: 880px) {
|
||||
.pages { left: auto; }
|
||||
#menu { position: static; width: auto; }
|
||||
#content { margin-left: 10px; }
|
||||
|
|
|
@ -17,14 +17,14 @@ function bodyLoad(version, maria) {
|
|||
for (var i = 1; i < obj.length; i++) {
|
||||
obj[i] = obj[i]
|
||||
.replace(/\.html/, '/')
|
||||
.replace(/-type-syntax/, '-data-types')
|
||||
.replace(/numeric-(data-types)/, '$1-$&')
|
||||
.replace(/(numeric)(-type-overview)/, '$1-data$2')
|
||||
.replace(/#statvar_.*/, '#$$1')
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
obj[key] = (maria ? obj[key].replace(/dev\.mysql\.com\/doc\/mysql\/en\//, 'mariadb.com/kb/en/library/') : obj[key]) // MariaDB
|
||||
obj[key] = obj[key]
|
||||
.replace(/dev\.mysql\.com\/doc\/mysql\/en\//, (maria ? 'mariadb.com/kb/en/library/' : '$&')) // MariaDB
|
||||
.replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
|
||||
.replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
|
||||
;
|
||||
|
@ -658,7 +658,7 @@ function triggerChange(tableRe, table, form) {
|
|||
if (tableRe.test(form['Trigger'].value)) {
|
||||
form['Trigger'].value = table + '_' + (selectValue(form['Timing']).charAt(0) + formEvent.charAt(0)).toLowerCase();
|
||||
}
|
||||
alterClass(form['Of'], 'hidden', !/ OF/.test(formEvent));
|
||||
alterClass(form['Of'], 'hidden', formEvent != 'UPDATE OF');
|
||||
}
|
||||
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 318 B |
|
@ -101,22 +101,27 @@ function cookie(assign, days) {
|
|||
*/
|
||||
function verifyVersion(current, url, token) {
|
||||
cookie('adminer_version=0', 1);
|
||||
ajax('https://api.github.com/repos/adminerevo/adminerevo/releases/latest', function (request) {
|
||||
var data = window.JSON ? JSON.parse(request.responseText) : eval('(' + request.responseText + ')');
|
||||
version = data.tag_name.replace(/[^\d.]/g, '');
|
||||
|
||||
if (version) {
|
||||
cookie('adminer_version=' + version, 1);
|
||||
var data = 'version=' + version;
|
||||
ajax(url + 'script=version', function () {
|
||||
}, data + '&token=' + token);
|
||||
|
||||
if (version != current) {
|
||||
qs('#version').innerText = version;
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.src = 'https://www.adminer.org/version/?current=' + current;
|
||||
iframe.frameBorder = 0;
|
||||
iframe.marginHeight = 0;
|
||||
iframe.scrolling = 'no';
|
||||
iframe.style.width = '7ex';
|
||||
iframe.style.height = '1.25em';
|
||||
if (window.postMessage && window.addEventListener) {
|
||||
iframe.style.display = 'none';
|
||||
addEventListener('message', function (event) {
|
||||
if (event.origin == 'https://www.adminer.org') {
|
||||
var match = /version=(.+)/.exec(event.data);
|
||||
if (match) {
|
||||
cookie('adminer_version=' + match[1], 1);
|
||||
ajax(url + 'script=version', function () {
|
||||
}, event.data + '&token=' + token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}, false);
|
||||
}
|
||||
qs('#version').appendChild(iframe);
|
||||
}
|
||||
|
||||
/** Get value of select
|
||||
|
@ -381,10 +386,6 @@ function selectAddRow() {
|
|||
}
|
||||
var inputs = qsa('input', row);
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
if (inputs[i].type === 'image') {
|
||||
// button
|
||||
continue;
|
||||
}
|
||||
inputs[i].name = inputs[i].name.replace(/[a-z]\[\d+/, '$&1');
|
||||
inputs[i].className = '';
|
||||
if (inputs[i].type == 'checkbox') {
|
||||
|
@ -393,29 +394,9 @@ function selectAddRow() {
|
|||
inputs[i].value = '';
|
||||
}
|
||||
}
|
||||
var buttons = qsa('.icon', row);
|
||||
for (var i=0; i < buttons.length; i++) {
|
||||
buttons[i].onclick = selectRemoveRow;
|
||||
}
|
||||
field.parentNode.parentNode.appendChild(row);
|
||||
}
|
||||
|
||||
/** Remove a row in select fieldset
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function selectRemoveRow() {
|
||||
var button = this;
|
||||
var row = button.parentNode;
|
||||
var nextRow = row;
|
||||
while (nextRow = nextRow.nextSibling) {
|
||||
if (nextRow.tagName === row.tagName) {
|
||||
row.parentNode.removeChild(row);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Prevent onsearch handler on Enter
|
||||
* @param KeyboardEvent
|
||||
* @this HTMLInputElement
|
||||
|
@ -681,7 +662,7 @@ function ajaxForm(form, message, button) {
|
|||
}
|
||||
}
|
||||
data = data.join('&');
|
||||
|
||||
|
||||
var url = form.action;
|
||||
if (!/post/i.test(form.method)) {
|
||||
url = url.replace(/\?.*/, '') + '?' + data;
|
||||
|
@ -880,50 +861,7 @@ function findDefaultSubmit(el) {
|
|||
}
|
||||
}
|
||||
|
||||
/** Initialize the copy to clipboard feature
|
||||
* @param HTMLElement
|
||||
*/
|
||||
function setupCopyToClipboard(document) {
|
||||
var node = document.querySelectorAll("a.copy-to-clipboard");
|
||||
node.forEach(function(element) {
|
||||
element.addEventListener("click", function() {
|
||||
var nodeSql = document.querySelector("code.copy-to-clipboard");
|
||||
if (nodeSql == null || nodeSql == undefined) {
|
||||
nodeSql = document.querySelector("textarea.sqlarea");
|
||||
}
|
||||
if (nodeSql != null && nodeSql != undefined) {
|
||||
if (element.classList.contains('expand')) {
|
||||
document.getElementById(element.getAttribute('data-expand-id')).classList.remove("hidden");
|
||||
}
|
||||
copyToClipboard(nodeSql);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/** Copy element's content in clipboard
|
||||
* @param HTMLElement
|
||||
*/
|
||||
function copyToClipboard(el) {
|
||||
|
||||
var nodeName = el.nodeName.toLowerCase();
|
||||
if (nodeName == 'code') {
|
||||
var range = document.createRange();
|
||||
range.selectNode(el);
|
||||
window.getSelection().removeAllRanges();
|
||||
window.getSelection().addRange(range);
|
||||
document.execCommand("copy");
|
||||
window.getSelection().removeAllRanges();
|
||||
} else if (nodeName == 'textarea') {
|
||||
el.select();
|
||||
if (document.getSelection().toString().length > 1024 * 1024) {
|
||||
alert('Too large for clipboard');
|
||||
} else {
|
||||
document.execCommand("copy");
|
||||
document.getSelection().removeAllRanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Add event listener
|
||||
* @param HTMLElement
|
||||
|
|
|
@ -28,7 +28,7 @@ if (!is_view($table_status)) {
|
|||
}
|
||||
echo '<p class="links"><a href="' . h(ME) . 'indexes=' . urlencode($TABLE) . '">' . lang('Alter indexes') . "</a>\n";
|
||||
}
|
||||
|
||||
|
||||
if (fk_support($table_status)) {
|
||||
echo "<h3 id='foreign-keys'>" . lang('Foreign keys') . "</h3>\n";
|
||||
$foreign_keys = foreign_keys($TABLE);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
$TABLE = $_GET["trigger"];
|
||||
$name = $_GET["name"];
|
||||
$trigger_options = trigger_options();
|
||||
$row = (array) trigger($name, $TABLE) + array("Trigger" => $TABLE . "_bi");
|
||||
$row = (array) trigger($name) + array("Trigger" => $TABLE . "_bi");
|
||||
|
||||
if ($_POST) {
|
||||
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_options["Event"]) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
||||
|
|
175
changes.txt
175
changes.txt
|
@ -1,116 +1,3 @@
|
|||
Adminer 4.8.4 (released 2024-04-07):
|
||||
Removed size for integer on MySQL 8+
|
||||
Replaced deprecated by error_get_last()
|
||||
Allow responsive styles on larger devices (PR #75)
|
||||
Fixed issue with editor tables list
|
||||
Adjusted href of editor title
|
||||
Fixes of warnings on PHP8.3
|
||||
Filter removal buttons on table select pages (PR #77)
|
||||
Skip dump of generated columns (PR #95)
|
||||
Add LICENSE file, clarify dual-licensing (PR #122)
|
||||
Restore latest version check (PR #129)
|
||||
|
||||
Adminer 4.8.3 (released 2023-10-05):
|
||||
Added some translations to russian language (PR #31)
|
||||
Better URL detection (PR #33)
|
||||
Main logo SVG, improved theme compatibility, RTL support (PR #34)
|
||||
Added some translations to czech language (PR #39)
|
||||
Improve tables list rendering (PR #41)
|
||||
Detection of adminer.js (PR #42)
|
||||
Added plugin plugin-login-external (PR #43)
|
||||
Added plugin import-from-dir (PR #44)
|
||||
Fix for plugin AdminerVersionNoverify (PR #45)
|
||||
Fix issue with SELECT DISTINCT
|
||||
Filter tables beautify
|
||||
Added key shortcut Ctrl+Shift+F to focus filter field and disabled enter key
|
||||
Fieldset rounded corners
|
||||
Remove undefined variable removed by #7442183 (for IE9 compatibility) (PR #48)
|
||||
Replaced Edit and Edit all of SQL Command history by icons
|
||||
Replaced icons from PNG to SVG to reduce CSS file size
|
||||
Make sure table is marked active in select mode
|
||||
Use links bar for "Create ..." functions (PR #51)
|
||||
Updates pepe-linha-dark submodule to the lastest commit (PR #54)
|
||||
Fix issue with truncated queries and prevent copying queries > 1Mb to clipboard
|
||||
Added a clipboard icon next to SQL command to expand and copy to clipboard
|
||||
Added plugin documentation (PR #65)
|
||||
Plugin file-upload generate temp filename no extension + prevent file to be located elsewhere then under upload path + files prefix .htfile to increase security (Issue reported by CISA)
|
||||
|
||||
Adminer 4.8.2 (released 2023-07-21):
|
||||
Support multi-line table comments
|
||||
MySQL: Use ST_SRID() instead of SRID() for MySQL 8 (PR #418)
|
||||
PostgreSQL: Don't reset table comments (regression from 4.2.0)
|
||||
PostgreSQL PDO: Allow editing rows identified by boolean column (PR #380)
|
||||
Enable regular expressions when searching data (PR #15)
|
||||
Function to retrieve driver name (PR #14)
|
||||
Add unix_timestamp to functions for mysql (PR #12)
|
||||
Latvian language translation (PR #9)
|
||||
Added function DISTINCT to db supporting it
|
||||
Fixed undefined variable
|
||||
Implemented Copy to clipboard
|
||||
Given a visual identity to AdminerEvo keeping backward compatibility
|
||||
|
||||
Adminer 4.8.1 (released 2021-05-14):
|
||||
Internet Explorer or PDO in Adminer 4.7.8-4.8.0: Fix XSS in doc_link (bug #797)
|
||||
Fix more PHP 8 warnings (bug #781)
|
||||
Avoid PHP warnings with PDO drivers (bug #786, regression from 4.7.8)
|
||||
MySQL: Allow moving views to other DB and renaming DB with views (bug #783)
|
||||
MariaDB: Do not treat sequences as views (PR #416)
|
||||
PostgreSQL: Support UPDATE OF triggers (bug #789)
|
||||
PostgreSQL: Support triggers with more events (OR)
|
||||
PostgreSQL: Fix parsing of foreign keys with non-ASCII column names
|
||||
PostgreSQL < 10 PDO: Avoid displaying GENERATED ALWAYS BY IDENTITY everywhere (bug #785, regression from 4.7.9)
|
||||
SQLite: Fix displayed types (bug #784, regression from 4.8.0)
|
||||
|
||||
Adminer 4.8.0 (released 2021-02-10):
|
||||
Support function default values in insert (bug #713)
|
||||
Allow SQL pseudo-function in insert
|
||||
Skip date columns for non-date values in search anywhere
|
||||
Add DB version to comment in export
|
||||
Support PHP 8 in create table (regression from 4.7.9)
|
||||
MySQL 8: Fix EXPLAIN in SQL command
|
||||
PostgreSQL: Create PRIMARY KEY for auto increment columns
|
||||
PostgreSQL: Avoid exporting empty sequence last value (bug #768)
|
||||
PostgreSQL: Do not show triggers from other schemas (PR #412)
|
||||
PostgreSQL: Fix multi-parameter functions in default values (bug #736)
|
||||
PostgreSQL: Fix displaying NULL bytea fields
|
||||
PostgreSQL PDO: Do not select NULL function for false values in edit
|
||||
Oracle: Alter indexes
|
||||
Oracle: Count tables
|
||||
Oracle: Import from CSV
|
||||
Oracle: Fix column size with string type
|
||||
MongoDB: Handle errors
|
||||
SimpleDB, Firebird, ClickHouse: Move to plugin
|
||||
|
||||
Adminer 4.7.9 (released 2021-02-07):
|
||||
Fix XSS in browsers which don't encode URL parameters (bug #775, regression from 4.7.0)
|
||||
Elasticsearch, ClickHouse: Do not print response if HTTP code is not 200
|
||||
Don't syntax highlight during IME composition (bug #747)
|
||||
Quote values with leading and trailing zeroes in CSV export (bug #777)
|
||||
Link URLs in SQL command (PR #411)
|
||||
Fix displayed foreign key columns from other DB (bug #766)
|
||||
Re-enable PHP warnings (regression from 4.7.8)
|
||||
MySQL: Do not export names in quotes with sql_mode='ANSI_QUOTES' (bug #749)
|
||||
MySQL: Avoid error in PHP 8 when connecting to socket (PR #409)
|
||||
MySQL: Don't quote default value of text fields (bug #779)
|
||||
PostgreSQL: Export all FKs after all CREATE TABLE (PR #351)
|
||||
PostgreSQL: Fix dollar-quoted syntax highlighting (bug #738)
|
||||
PostgreSQL: Do not show view definition from other schema (PR #392)
|
||||
PostgreSQL: Use bigserial for bigint auto increment (bug #765, regression from 3.0.0)
|
||||
PostgreSQL PDO: Support PgBouncer, unsupport PostgreSQL < 9.1 (bug #771)
|
||||
PostgreSQL 10: Support GENERATED ALWAYS BY IDENTITY (PR #386)
|
||||
PostgreSQL 10: Support partitioned tables (PR #396)
|
||||
PostgreSQL 11: Create PRIMARY KEY for auto increment columns
|
||||
SQLite: Set busy_timeout to 500
|
||||
MS SQL: Don't truncate comments to 30 chars (PR #376)
|
||||
Elasticsearch 6: Fix displaying type mapping (PR #402)
|
||||
MongoDB: Fix password-less check in the mongo extension (PR #405)
|
||||
Editor: Cast to string when searching (bug #325)
|
||||
Editor: Avoid trailing dot in export filename
|
||||
|
||||
Adminer 4.7.8 (released 2020-12-06):
|
||||
Support PHP 8
|
||||
Disallow connecting to privileged ports (bug #769)
|
||||
|
||||
Adminer 4.7.7 (released 2020-05-11):
|
||||
Fix open redirect if Adminer is accessible at //adminer.php%2F@
|
||||
|
||||
|
@ -144,7 +31,7 @@ SQLite: Handle error in altering table (bug #697)
|
|||
SQLite: Allow setting auto increment for empty tables
|
||||
SQLite: Preserve auto increment when recreating table
|
||||
MS SQL: Support foreign keys to other DB
|
||||
MongoDB: Allow setting authSource from environment variable
|
||||
MongoDB: Allow setting authSource from environment variable
|
||||
|
||||
Adminer 4.7.2 (released 2019-07-18):
|
||||
Do not attempt logging in without password (bug #676)
|
||||
|
@ -444,7 +331,7 @@ Adminer 3.7.1 (released 2013-06-29):
|
|||
Increase click target for checkboxes
|
||||
Use shadow for highlighting default button
|
||||
Don't use LIMIT 1 if inline updating unique row
|
||||
Don't check previous checkbox on added column in create table (bug #326)
|
||||
Don't check previous checkbox on added column in create table (bug #3614245)
|
||||
Order table list by name
|
||||
Verify UTF-8 encoding of CSV import
|
||||
Notify user about expired master password for permanent login
|
||||
|
@ -455,7 +342,7 @@ Display error on invalid alter table and view pages
|
|||
MySQL: Speed up updating rows without numeric or UTF-8 primary key
|
||||
Non-MySQL: Descending indexes
|
||||
PostgreSQL: Fix detecting oid column in PDO
|
||||
PostgreSQL: Handle timestamp types (bug #324)
|
||||
PostgreSQL: Handle timestamp types (bug #3614086)
|
||||
Add Korean translation
|
||||
|
||||
Adminer 3.7.0 (released 2013-05-19):
|
||||
|
@ -468,9 +355,9 @@ Disable SQL export when applying functions in select
|
|||
Allow using lang() in plugins (customization)
|
||||
Remove bzip2 compression support
|
||||
Constraint memory used in TAR export
|
||||
Allow exporting views dependent on each other (bug #214)
|
||||
Fix resetting search (bug #318)
|
||||
Don't use LIMIT 1 if updating unique row (bug #320)
|
||||
Allow exporting views dependent on each other (bug #3459151)
|
||||
Fix resetting search (bug #3612507)
|
||||
Don't use LIMIT 1 if updating unique row (bug #3613109)
|
||||
Restrict editing rows without unique identifier to search results
|
||||
Display navigation bellow main content on mobile browsers
|
||||
Get number of rows on export page asynchronously
|
||||
|
@ -478,7 +365,7 @@ Respect 'whole result' even if some rows are checked (bug #339 since Adminer 3.7
|
|||
MySQL: Optimize create table page and Editor navigation
|
||||
MySQL: Display bit type as binary number
|
||||
MySQL: Improve export of binary data types
|
||||
MySQL: Fix handling of POINT data type (bug #282)
|
||||
MySQL: Fix handling of POINT data type (bug #3582578)
|
||||
MySQL: Don't export binary and geometry columns twice in select
|
||||
MySQL: Fix EXPLAIN in MySQL < 5.1, bug since Adminer 3.6.4
|
||||
SQLite: Export views
|
||||
|
@ -493,11 +380,11 @@ Recover original view, trigger, routine if creating fails
|
|||
Do not store plain text password to history in creating user
|
||||
Selectable ON UPDATE CURRENT_TIMESTAMP field in create table
|
||||
Open database to a new window after selecting it with Ctrl
|
||||
Clear column name after resetting search (bug #296)
|
||||
Explain partitions in SQL query (bug #294)
|
||||
Allow loading more data with inline edit (bug #299)
|
||||
Stay on the same page after deleting rows (bug #301)
|
||||
Respect checked tables in export filename (bug #133)
|
||||
Clear column name after resetting search (bug #3601200)
|
||||
Explain partitions in SQL query (bug #3600150)
|
||||
Allow loading more data with inline edit (bug #3605531)
|
||||
Stay on the same page after deleting rows (bug #3605845)
|
||||
Respect checked tables in export filename (bug #3245464)
|
||||
Respect PHP configuration max_input_vars
|
||||
Fix unsetting permanent login after logout
|
||||
Disable autocapitalize in identifiers on mobile browsers
|
||||
|
@ -582,11 +469,11 @@ Ukrainian translation
|
|||
Bengali translation
|
||||
|
||||
Adminer 3.3.4 (released 2012-03-07):
|
||||
Foreign keys default actions (bug #188)
|
||||
Foreign keys default actions (bug #3397606)
|
||||
SET DEFAULT foreign key action
|
||||
Fix minor parser bug in SQL command with webserver file
|
||||
Ctrl+click on button opens form to a blank window
|
||||
Trim table and column names (bug #195)
|
||||
Trim table and column names (bug #3405309)
|
||||
Error message with no response from server in AJAX
|
||||
Esc to cancel AJAX request
|
||||
Move AJAX loading indicator to the right
|
||||
|
@ -598,9 +485,9 @@ Ability to disable export (customization)
|
|||
Extensible list of databases (customization)
|
||||
MySQL: set autocommit after connect
|
||||
SQLite, PostgreSQL: vacuum
|
||||
SQLite, PostgreSQL: don't use LIKE for numbers (bug #202)
|
||||
SQLite, PostgreSQL: don't use LIKE for numbers (bug #3420408)
|
||||
PostgreSQL: fix alter foreign key
|
||||
PostgreSQL over PDO: connect if the eponymous database does not exist (bug #185)
|
||||
PostgreSQL over PDO: connect if the eponymous database does not exist (bug #3391619)
|
||||
Boolean search (Editor)
|
||||
Persian translation
|
||||
|
||||
|
@ -628,8 +515,8 @@ Adminer 3.3.0 (released 2011-07-19):
|
|||
Use Esc to disable in-place edit
|
||||
Shortcut for database privileges
|
||||
Editable index names
|
||||
Append new index with auto index selection (bug #138)
|
||||
Preserve original timestamp value in multiple update (bug #158)
|
||||
Append new index with auto index selection (bug #3282127)
|
||||
Preserve original timestamp value in multiple update (bug #3312614)
|
||||
Bit type default value
|
||||
Display foreign key name in tooltip
|
||||
Display default column value in table overview
|
||||
|
@ -643,7 +530,7 @@ Display foreign keys from other schemas (PostgreSQL)
|
|||
Pagination support (Oracle)
|
||||
Autocomplete for big foreign keys (Editor)
|
||||
Display name of the referenced record in PostgreSQL (Editor)
|
||||
Prefer NULL to empty string (Editor, bug #162)
|
||||
Prefer NULL to empty string (Editor, bug #3323800)
|
||||
Display searched columns (Editor)
|
||||
Customizable favicon (customization)
|
||||
Method name can return a link (customization)
|
||||
|
@ -655,8 +542,8 @@ Fix AJAX history after reload
|
|||
|
||||
Adminer 3.2.1 (released 2011-03-23):
|
||||
Ability to save expression in edit
|
||||
Respect default database collation (bug #119)
|
||||
Don't export triggers without table (bug #123)
|
||||
Respect default database collation (bug #3191489)
|
||||
Don't export triggers without table (bug #3193489)
|
||||
Esc to focus next field in Tab textarea
|
||||
Send forms by Ctrl+Enter on <select>
|
||||
Enum editor and textarea Ctrl+Enter working in IE
|
||||
|
@ -679,8 +566,8 @@ Get long texts and slow information by AJAX
|
|||
Most links and forms by AJAX in browsers with support for history.pushState
|
||||
Copy tables
|
||||
Ability to search by expression in select
|
||||
Export SQL command result (bug #99)
|
||||
Focus first field with insert (bug #106)
|
||||
Export SQL command result (bug #3116854)
|
||||
Focus first field with insert (bug #3126501)
|
||||
Permanent link in schema
|
||||
Display total time in show only errors mode in SQL command
|
||||
History: edit all
|
||||
|
@ -693,7 +580,7 @@ Utilize oids in PostgreSQL
|
|||
Homepage customization
|
||||
Use IN for search in numeric fields (Editor)
|
||||
Use password input for _md5 and _sha1 fields (Editor)
|
||||
Work without session.use_cookies (bug #107)
|
||||
Work without session.use_cookies (bug #3138640)
|
||||
Fix saving schema to cookie in Opera
|
||||
Portuguese, Slovenian and Turkish translation
|
||||
|
||||
|
@ -706,10 +593,10 @@ Recognize $$ strings in SQL command (PostgreSQL)
|
|||
Highlight and edit SQL command in processlist
|
||||
Always display all drivers
|
||||
Timestamp at the end of export
|
||||
Link to refresh database cache (bug #96)
|
||||
Link to refresh database cache (bug #3102451)
|
||||
Support for virtual foreign keys
|
||||
Disable XSS "protection" of IE8
|
||||
Immunity against zend.ze1_compatibility_mode (bug #86)
|
||||
Immunity against zend.ze1_compatibility_mode (bug #3089645)
|
||||
Fix last page with empty result set
|
||||
Arabic translation and RTL support
|
||||
Dual licensing: Apache or GPL
|
||||
|
@ -757,7 +644,7 @@ Add Drop button to Alter pages (regression from 2.0.0)
|
|||
Link COUNT(*) result to listing
|
||||
Newlines in select query edit
|
||||
Return to referrer after edit
|
||||
Respect session.auto_start (bug #42)
|
||||
Respect session.auto_start (bug #2967284)
|
||||
|
||||
Adminer 2.3.0 (released 2010-02-26):
|
||||
Support for permanent login (customization required)
|
||||
|
@ -786,7 +673,7 @@ Link URLs in select
|
|||
Display number of manipulated rows in JS confirm
|
||||
Set required memory in SQL command
|
||||
Fix removed default in ALTER
|
||||
Display whitespace in texts (bug #11)
|
||||
Display whitespace in texts (bug #2858042)
|
||||
ClickJacking protection in modern browsers
|
||||
E-mail attachments (Editor)
|
||||
Optional year in date (Editor)
|
||||
|
@ -805,7 +692,7 @@ Use ON DUPLICATE KEY UPDATE for CSV import
|
|||
Print ALTER export instead of executing it
|
||||
Click on row selects it
|
||||
Fix Editor date format
|
||||
Fix long SQL query crash (bug #3)
|
||||
Fix long SQL query crash (bug #2839231)
|
||||
Speed up simple alter table
|
||||
Traditional Chinese translation
|
||||
|
||||
|
@ -861,7 +748,7 @@ Use \n in SQL commands
|
|||
|
||||
phpMinAdmin 1.10.1 (released 2009-05-07):
|
||||
Highlight odd and hover rows
|
||||
Partition editing comfort (bug #12)
|
||||
Partition editing comfort (bug #2783446)
|
||||
Allow full length in limited int
|
||||
|
||||
phpMinAdmin 1.10.0 (released 2009-04-28):
|
||||
|
@ -948,7 +835,7 @@ phpMinAdmin 1.4.0 (released 2007-08-15):
|
|||
Privileges
|
||||
New design
|
||||
Dutch translation
|
||||
Use NULL for auto_increment (bug #1)
|
||||
Use NULL for auto_increment (bug #1768966)
|
||||
Fix dropping procedure parameters
|
||||
|
||||
phpMinAdmin 1.3.2 (released 2007-08-06):
|
||||
|
|
41
compile.php
41
compile.php
|
@ -1,11 +1,6 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
function adminer_errors($errno, $errstr) {
|
||||
return !!preg_match('~^(Trying to access array offset on value of type null|Undefined array key)~', $errstr);
|
||||
}
|
||||
|
||||
error_reporting(6135); // errors and warnings
|
||||
set_error_handler('adminer_errors', E_WARNING);
|
||||
include dirname(__FILE__) . "/adminer/include/version.inc.php";
|
||||
include dirname(__FILE__) . "/externals/JsShrink/jsShrink.php";
|
||||
|
||||
|
@ -41,7 +36,7 @@ function lang_ids($match) {
|
|||
}
|
||||
|
||||
function put_file($match) {
|
||||
global $project, $VERSION, $driver;
|
||||
global $project, $VERSION;
|
||||
if (basename($match[2]) == '$LANG.inc.php') {
|
||||
return $match[0]; // processed later
|
||||
}
|
||||
|
@ -61,11 +56,7 @@ header("Cache-Control: immutable");
|
|||
echo "adminer/file.inc.php: Caching headers placeholder not found\n";
|
||||
}
|
||||
}
|
||||
if ($driver && dirname($match[2]) == "../adminer/drivers") {
|
||||
$return = preg_replace('~^if \(isset\(\$_GET\["' . $driver . '"]\)\) \{(.*)^}~ms', '\1', $return);
|
||||
}
|
||||
if (basename($match[2]) != "lang.inc.php" || !$_SESSION["lang"]) {
|
||||
$return = str_replace('<?php echo $GLOBALS[\'project\']; ?>', $project, $return);
|
||||
if (basename($match[2]) == "lang.inc.php") {
|
||||
$return = str_replace('function lang($idf, $number = null) {', 'function lang($idf, $number = null) {
|
||||
if (is_string($idf)) { // compiled version uses numbers, string comes from a plugin
|
||||
|
@ -109,7 +100,7 @@ function lzw_compress($string) {
|
|||
$word = "";
|
||||
$codes = array();
|
||||
for ($i=0; $i <= strlen($string); $i++) {
|
||||
$x = @$string[$i];
|
||||
$x = $string[$i];
|
||||
if (strlen($x) && isset($dictionary[$word . $x])) {
|
||||
$word .= $x;
|
||||
} elseif ($i) {
|
||||
|
@ -197,7 +188,7 @@ function php_shrink($input) {
|
|||
$short_variables = array();
|
||||
$shortening = true;
|
||||
$tokens = token_get_all($input);
|
||||
|
||||
|
||||
// remove unnecessary { }
|
||||
//! change also `while () { if () {;} }` to `while () if () ;` but be careful about `if () { if () { } } else { }
|
||||
$shorten = 0;
|
||||
|
@ -224,13 +215,13 @@ function php_shrink($input) {
|
|||
}
|
||||
}
|
||||
$tokens = array_values($tokens);
|
||||
|
||||
|
||||
foreach ($tokens as $i => $token) {
|
||||
if ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) {
|
||||
$short_variables[$token[1]]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
arsort($short_variables);
|
||||
$chars = implode(range('a', 'z')) . '_' . implode(range('A', 'Z'));
|
||||
// preserve variable names between versions if possible
|
||||
|
@ -241,8 +232,8 @@ function php_shrink($input) {
|
|||
foreach (array_keys($short_variables) as $number => $key) {
|
||||
$short_variables[$key] = short_identifier($number, $chars); // could use also numbers and \x7f-\xff
|
||||
}
|
||||
|
||||
$set = array_flip(preg_split('//', '!"#$%&\'()*+,-./:;<=>?@[]^`{|}'));
|
||||
|
||||
$set = array_flip(preg_split('//', '!"#$%&\'()*+,-./:;<=>?@[\]^`{|}'));
|
||||
$space = '';
|
||||
$output = '';
|
||||
$in_echo = false;
|
||||
|
@ -251,8 +242,7 @@ function php_shrink($input) {
|
|||
if (!is_array($token)) {
|
||||
$token = array(0, $token);
|
||||
}
|
||||
if (!is_null($tokens[$i+2])
|
||||
&& $tokens[$i+2][0] === T_CLOSE_TAG && $tokens[$i+3][0] === T_INLINE_HTML && $tokens[$i+4][0] === T_OPEN_TAG
|
||||
if ($tokens[$i+2][0] === T_CLOSE_TAG && $tokens[$i+3][0] === T_INLINE_HTML && $tokens[$i+4][0] === T_OPEN_TAG
|
||||
&& strlen(add_apo_slashes($tokens[$i+3][1])) < strlen($tokens[$i+3][1]) + 3
|
||||
) {
|
||||
$tokens[$i+2] = array(T_ECHO, 'echo');
|
||||
|
@ -325,14 +315,6 @@ function compile_file($match) {
|
|||
return '"' . add_quo_slashes($file) . '"';
|
||||
}
|
||||
|
||||
if (!function_exists("each")) {
|
||||
function each(&$arr) {
|
||||
$key = key($arr);
|
||||
next($arr);
|
||||
return $key === null ? false : array($key, $arr[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
function min_version() {
|
||||
return true;
|
||||
}
|
||||
|
@ -341,12 +323,6 @@ function number_type() {
|
|||
return '';
|
||||
}
|
||||
|
||||
function ini_bool($ini) {
|
||||
$val = ini_get($ini);
|
||||
return (preg_match('~^(on|true|yes)$~i', $val) || (int) $val); // boolean values set by php_value are strings
|
||||
}
|
||||
|
||||
|
||||
$project = "adminer";
|
||||
if ($_SERVER["argv"][1] == "editor") {
|
||||
$project = "editor";
|
||||
|
@ -396,7 +372,6 @@ include dirname(__FILE__) . "/adminer/include/driver.inc.php";
|
|||
$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view");
|
||||
$lang_ids = array(); // global variable simplifies usage in a callback function
|
||||
$file = file_get_contents(dirname(__FILE__) . "/$project/index.php");
|
||||
$file = preg_replace('/\\$GLOBALS\\[\'project\'\\][^;]+;\\s+/', '', $file);
|
||||
if ($driver) {
|
||||
$_GET[$driver] = true; // to load the driver
|
||||
include_once dirname(__FILE__) . "/adminer/drivers/$driver.inc.php";
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue