Compare commits

...

501 Commits

Author SHA1 Message Date
139dc7cec7 Merge pull request #237 from cytopia/documentation-dns
Release v0.13.1 (Communicate with external hosts)
2018-04-29 11:41:36 +02:00
5c57f8a1a7 Fix DNS issues with CNAME's 2018-04-28 16:28:13 +02:00
e7206f2e30 Merge pull request #238 from cytopia/fix-bind-version
Fix bind version in intranet
2018-04-28 16:27:36 +02:00
babefe4160 Fix bind version in intranet 2018-04-28 15:21:09 +02:00
8b50316787 Bump version 2018-04-28 15:13:37 +02:00
494cb061c3 Documentation: Communicate with external hosts 2018-04-28 12:17:07 +02:00
3aacd81d26 Be able to communicate with external hosts 2018-04-28 12:15:41 +02:00
e5ec9c5e44 Merge pull request #232 from cytopia/DVL-014-doc-env
Documentation for how to handle multiple env files
2018-04-25 01:03:14 +02:00
14d759d18b Merge pull request #231 from cytopia/DVL-014
Add documentation for #222 #229: Custom docker images
2018-04-25 01:02:35 +02:00
18a07a15f7 Fixes #145: Documentation for how to handle multiple env files 2018-04-25 00:41:13 +02:00
f0834dc9c5 Add documentation for #222 #229: Custom docker images 2018-04-25 00:24:47 +02:00
ba233165ab Merge pull request #229 from pedrosanta/compose-override-gitignore
Ignore 'docker-compose.override.yml'
2018-04-24 20:22:34 +02:00
79d4618345 Add docker compose override file to .gitignore
As documented on https://docs.docker.com/compose/extends it's possible
to use a docker-compose.override.yml file to override/extend
configurations of a docker-compose.yml. As such, this is an excellent
way for one to perform own/local tweaks and overrides without
changing/impacting project files. This adds a line for it on .gitignore.
2018-04-19 12:47:28 +01:00
8c121c5457 Merge pull request #226 from chrizz1001/patch-1
Typo in update doc
2018-04-17 11:27:24 +02:00
7bb469f3c7 Typo in update doc
# Ensure containers are stopped
   host> docker-compose ps
2018-04-17 08:51:13 +02:00
96041807a0 Merge pull request #203 from cytopia/new-php-container
REL-0.13: New PHP Container
2018-04-15 10:43:38 +02:00
068545a2a9 Intranet: Update phpMyAdmin to 4.8 2018-04-14 11:32:33 +02:00
e59bd1098f Intranet: Update Adminer to 4.6.2 2018-04-14 10:57:31 +02:00
88eb3ae68d Intranet: show new PHP mounts 2018-04-14 10:54:09 +02:00
b75e04dcab Documentation: available container 2018-04-14 10:51:53 +02:00
fbb475123f Add more container versions 2018-04-14 10:50:55 +02:00
3cf7321d3b Fix contributors link 2018-04-14 10:46:18 +02:00
7615dfa443 Bump version 2018-04-14 10:46:00 +02:00
2fbdd56a0d Documentation: remove build files 2018-04-14 10:17:59 +02:00
5eee20877a Documentation: Finish feature section 2018-04-14 10:17:58 +02:00
76a825b887 Documentation: Update legacy docs 2018-04-14 10:17:55 +02:00
2b1dc0efc2 Documentation: Xdebug for PHPStorm 2018-04-14 10:17:53 +02:00
a23b23b774 Documentation: Xdebug 2018-04-14 10:17:53 +02:00
8689bc993e Documentation: awesome-ci 2018-04-14 10:17:52 +02:00
9b3e3aa738 Documentation: Xdebug - first draft 2018-04-14 10:17:51 +02:00
e713c72bfa Fix loading times to find available services 2018-04-14 10:17:50 +02:00
b5c3b13dce Make PHP-FPM follow log behaviour from .env 2018-04-14 10:17:50 +02:00
0570e2cdf2 Remove file from git 2018-04-14 10:17:49 +02:00
17fd7108f1 Make PHP-FPM configurable 2018-04-14 10:17:48 +02:00
7b4b2370ff Documentation: #217 add best-practice hostnames for php config 2018-04-14 10:17:47 +02:00
271313c025 Documentation: custom env variables 2018-04-14 10:17:46 +02:00
e09ff53d58 Documentation: best-practice 2018-04-14 10:17:45 +02:00
d6a58ff1ac Documentation: apache.conf 2018-04-14 10:17:45 +02:00
474b8b2121 Documentation: nginx.conf 2018-04-14 10:17:44 +02:00
04812a5131 Documentation: typo fix 2018-04-14 10:17:43 +02:00
86b4247b81 Documentation: #212 MySQL configuration files on Docker Toolbox 2018-04-14 10:17:42 +02:00
63fa5e6811 Add Documentation build badge 2018-04-14 10:17:42 +02:00
d7a2bcb266 Documentation: config files 2018-04-14 10:17:41 +02:00
f5cc9bcee6 Documentation: bashrc.sh 2018-04-14 10:17:40 +02:00
618e485460 Documentation: Configuration files 2018-04-14 10:17:39 +02:00
6424e6e426 Documentation: Backup and Restore MongoDB 2018-04-14 10:17:39 +02:00
cc1ce40858 Documentation: Backup and Restore PostgreSQL 2018-04-14 10:17:38 +02:00
474565a66d Documentation: Backup and Restore PostgreSQL 2018-04-14 10:17:37 +02:00
a6348344f1 Documentation: Backup and Restore MySQL 2018-04-14 10:17:36 +02:00
4012bfd2cf Documentation: hacking 2018-04-14 10:17:36 +02:00
3d4b3e059d Documentation: Backup and Restore MySQL 2018-04-14 10:17:35 +02:00
2a4316079a Documentation: various 2018-04-14 10:17:34 +02:00
b445e9f4e2 Documentation: FAQ 2018-04-14 10:17:33 +02:00
50904504cf Documentation: Troubleshooting 2018-04-14 10:17:32 +02:00
4f8e5ee948 Documentation: artwork 2018-04-14 10:17:31 +02:00
7f9771081a Documentation: Devilbox intranet 2018-04-14 10:17:30 +02:00
64b08f61bf Documentation: Email catch-all 2018-04-14 10:17:30 +02:00
794f037727 Documentation: change images 2018-04-14 10:17:29 +02:00
4502497371 Documentation: Docker logs 2018-04-14 10:17:28 +02:00
7d184a5e55 Documentation: php.ini 2018-04-14 10:17:27 +02:00
08ebab728c Documentation: php.ini 2018-04-14 10:17:27 +02:00
d9bb7419cc Documentation: vhost-gen 2018-04-14 10:17:26 +02:00
099751a8b9 Documentation: Auto-DNS 2018-04-14 10:17:25 +02:00
7d5e4feada Documentation: DNS 2018-04-14 10:17:24 +02:00
33082a98ed Documentation: Auto-DNS 2018-04-14 10:17:24 +02:00
71899930aa Documentation: Examples 2018-04-14 10:17:23 +02:00
f6ac5fc776 Cleanup 2018-04-14 10:17:22 +02:00
a621d4b6f7 documentation: work inside the PHP container 2018-04-14 10:17:21 +02:00
6f79f007de Change container versions 2018-04-14 10:17:21 +02:00
08bc17d186 Warning about use of localhost as TLD 2018-04-14 10:17:20 +02:00
a562c85dac Finalize subdomains 2018-04-14 10:17:19 +02:00
ed2d12dbba Adding vhost-gen templates 2018-04-14 10:17:18 +02:00
2c69626a1d Stashing changes 2018-04-14 10:17:17 +02:00
ea7b2c9499 Minor wording fixes 2018-04-14 10:17:16 +02:00
5f61d9d8e6 Add available tools 2018-04-14 10:17:16 +02:00
83a3829206 How to enter the PHP container 2018-04-14 10:17:15 +02:00
5fec8a7e09 Do not add sphinx builds to git 2018-04-14 10:17:14 +02:00
8bd7dd6157 Finalize env-file documentation 2018-04-14 10:17:13 +02:00
68636deeaf Extend env file documentation 2018-04-14 10:17:13 +02:00
b1f0e12111 Extend env file documentation 2018-04-14 10:17:12 +02:00
c587e97eba Extend env file documentation 2018-04-14 10:17:11 +02:00
9b41a2468c Info about .env file 2018-04-14 10:17:10 +02:00
dc641b9298 Add files to ToC 2018-04-14 10:17:10 +02:00
75236067e5 Fix typos 2018-04-14 10:17:09 +02:00
d56a7db02a Update about section 2018-04-14 10:17:08 +02:00
7de5103fcc Address permission problem 2018-04-14 10:17:07 +02:00
ca002781c2 Add stale files to index 2018-04-14 10:17:06 +02:00
107f689595 Finalize getting-started-guide 2018-04-14 10:17:06 +02:00
5a29be3f92 Extend documentation 2018-04-14 10:17:04 +02:00
2180e8a287 Extend getting started guide 2018-04-14 10:17:03 +02:00
41d22a804d getting started 2018-04-14 10:17:03 +02:00
b5ced99621 Getting started 2018-04-14 10:17:02 +02:00
fc791c497d Setup menu 2018-04-14 10:17:01 +02:00
76936c9afd Add theme options 2018-04-14 10:17:00 +02:00
0f28572ef1 Add imports 2018-04-14 10:16:59 +02:00
a5f7e4885d Add markdown support 2018-04-14 10:16:58 +02:00
10459db183 Update index 2018-04-14 10:16:58 +02:00
77950f77bc conf.py theme 2018-04-14 10:16:57 +02:00
f0192cce73 Build in RST format 2018-04-14 10:16:56 +02:00
e215dd610e Fix extensions 2018-04-14 10:16:55 +02:00
e32fad5185 Fix build error 2018-04-14 10:16:54 +02:00
43235e69ba Fix build error 2018-04-14 10:16:54 +02:00
6fd9ea1b72 Add quickstart 2018-04-14 10:16:53 +02:00
9110dd0f38 Installation subdir 2018-04-14 10:16:52 +02:00
7aecaa22ba Adding index 2018-04-14 10:16:51 +02:00
5c0f778666 Adding configuration file 2018-04-14 10:16:50 +02:00
e1e60c736e Adjust date 2018-04-14 10:16:50 +02:00
e73604dfb5 Fixing #206: change docroot to subdir 2018-04-14 10:16:49 +02:00
5a23138268 Update update-docker.sh 2018-04-14 10:16:48 +02:00
5c89cd2fe4 Update travis tests 2018-04-14 10:16:47 +02:00
ab7e3b7279 Integrate new PHP container 2018-04-14 10:16:46 +02:00
dcad1b2387 Add new PHP container namespace 2018-04-14 10:16:45 +02:00
abb7b8dd5d Merge pull request #204 from kerrizor/patch-1
typo
2018-03-07 21:59:50 +01:00
2465e29628 typo 2018-03-06 16:15:58 -08:00
51e951ef3b Merge pull request #200 from codetriage-readme-bot/codetriage-badge
Add CodeTriage badge to cytopia/devilbox
2018-03-04 13:34:40 +01:00
7f1fc72e3e Merge pull request #201 from pbearne/master
Added shell.bat to box access on windows
2018-03-01 14:55:32 +01:00
d9fe19a8d7 Added window shell.bat instructions 2018-03-01 08:06:00 -05:00
cc73cefd3f Create shell.bat
shell for windows
2018-03-01 08:02:02 -05:00
f3ce95b6b8 Merge pull request #199 from xmarkclx/patch-2
Add Mac Instructions on Making Auto-DNS Work
2018-02-27 22:06:18 +01:00
7b190170c5 Add CodeTriage badge to cytopia/devilbox
Adds a badge showing the number of people helping this repo on CodeTriage.

[![Open Source Helpers](https://www.codetriage.com/cytopia/devilbox/badges/users.svg)](https://www.codetriage.com/cytopia/devilbox)

## What is CodeTriage?

CodeTriage is an Open Source app that is designed to make contributing to Open Source projects easier. It works by sending subscribers a few open issues in their inbox. If subscribers get busy, there is an algorithm that backs off issue load so they do not get overwhelmed

[Read more about the CodeTriage project](https://www.codetriage.com/what).

## Why am I getting this PR?

Your project was picked by the human, @schneems. They selected it from the projects submitted to https://www.codetriage.com and hand edited the PR. How did your project get added to [CodeTriage](https://www.codetriage.com/what)? Roughly about 1 year ago, [cytopia](https://github.com/cytopia) added this project to CodeTriage in order to start contributing.

## What does adding a badge accomplish?

Adding a badge invites people to help contribute to your project. It also lets developers know that others are invested in the longterm success and maintainability of the project.

You can see an example of a CodeTriage badge on these popular OSS READMEs:

- [![Email clients like GMAIL do not render SVG images](https://www.codetriage.com/rails/rails/badges/users.svg)](https://www.codetriage.com/rails/rails) https://github.com/rails/rails
- [![Email clients like GMAIL do not render SVG images](https://www.codetriage.com/crystal-lang/crystal/badges/users.svg)](https://www.codetriage.com/crystal-lang/crystal) https://github.com/crystal-lang/crystal

## Have a question or comment?

While I am a bot, this PR was manually reviewed and monitored by a human - @schneems. My job is writing commit messages and handling PR logistics.

If you have any questions, you can reply back to this PR and they will be answered by @schneems. If you do not want a badge right now, no worries, close the PR, you will not hear from me again.

Thanks for making your project Open Source! Any feedback is greatly appreciated.
2018-02-26 14:08:06 -06:00
c7071e527e Update Configure.md 2018-02-26 17:37:56 +08:00
34e946e50f Merge pull request #185 from cytopia/release-0-12-1
Release v0.12.1
2018-01-31 17:14:08 +01:00
2df763d147 Merge pull request #184 from irhen/fixing-typos
Update Configure.md
2018-01-30 19:29:23 +01:00
e26bae0d83 Bump date and version 2018-01-30 15:36:04 +01:00
6dcde6b1b7 Have Bind bound to a specific tag to make sure it is stable 2018-01-30 15:30:59 +01:00
8726acfb5a Update Configure.md
fix some typos
2018-01-30 17:21:39 +03:00
996874daa1 Merge pull request #181 from mwmllr/DVL-013
DVL-013 removing invalid option from quick start docker-composer remo…
2018-01-28 17:37:26 +01:00
1e001b616a DVL-013 removing invalid option from quick start docker-composer removal in the docs 2018-01-25 21:21:28 +01:00
865860affe Merge pull request #172 from noplanman/patch-1
Copy-Paste fix, typos
2017-12-30 00:06:47 +01:00
2c4fd49478 Copy-Paste fix, typos 2017-12-29 18:53:31 +00:00
909d72dbbe Merge pull request #164 from Cipa/master
body might be in a different spot
2017-12-18 07:52:24 +01:00
382d7001e1 email body detection improvments 2017-12-08 07:17:07 -08:00
514fab16e3 Merge pull request #165 from cytopia/DVL-013-doc-fixes
Dvl 013 doc fixes
2017-12-07 11:47:26 +01:00
d1bbd5d92b DVL-013 Link Date statement in PR template 2017-12-07 09:35:43 +01:00
3f5555ee19 DVL-013 Fix typo in PR template 2017-12-07 09:34:04 +01:00
38460eaa1a DVL-013 Improve docs: work inside the container 2017-12-07 09:32:09 +01:00
033ed60148 DVL-013 #163 Extend Auto-DNS documentation 2017-12-07 09:15:52 +01:00
e0e37bb64d DVL-013 Adjust Pull Request template 2017-12-07 08:42:07 +01:00
1f8390c8a6 DVL-013 Bump date 2017-12-07 08:41:49 +01:00
00c43bf8b7 DVL-013 Show Auto-DNS in documentation ToC 2017-12-07 08:41:33 +01:00
708962647c body be in a diffrent spot
When sending email with codeigniter the body is inside $structure->parts.

I should look into what mail objects variants are out there.
2017-12-06 11:17:05 -08:00
654b6375fb Merge pull request #162 from Cipa/master
mail improvments
2017-12-06 08:22:58 +01:00
f1ed392b94 mail improvments
- html email by default
- Raw source button
- extra from column
2017-12-05 20:04:33 -08:00
2381b5b5fb Merge pull request #156 from alexmanno/correct_typo_in_readme
Correct typo on README.md
2017-11-24 21:41:12 +01:00
4107481747 Correct typo on README.md 2017-11-24 21:28:51 +01:00
3c1cf64b15 Merge pull request #153 from cytopia/DVL-013-http-port
DVL-013 Fix #151 Use correct Httpd port in intranet
2017-11-21 09:02:42 +01:00
5a0b275610 DVL-013 Fix #151 Use correct Httpd port in intranet 2017-11-21 09:01:15 +01:00
930bb1c7fc Merge pull request #141 from cytopia/DVL-013-memcd-fixes
DVL-013 Handle false values retrieved from Memcached
2017-11-07 00:43:32 +01:00
776ec5d517 DVL-013 Handle false values retrieved from Memcached 2017-11-05 19:00:34 +01:00
959aa29f92 Merge pull request #140 from cytopia/DVL-013-intranet-fixes
Dvl 013 intranet fixes
2017-11-04 17:40:40 +01:00
e254d01a65 DVL-013 Fix error handling in logger 2017-11-04 13:42:41 +01:00
aaaab931b7 DVL-013 Sort Feature list 2017-11-04 13:42:15 +01:00
e79eb87cbb Merge pull request #137 from cytopia/DVL-013
WIP: DVL-013 Logos and layout
2017-10-16 17:56:22 +02:00
b42e3eb964 DVL-013 Remove battery logos 2017-10-16 17:53:33 +02:00
23b6ac07be DVL-013 Update dash graphics 2017-10-16 17:47:27 +02:00
051d723d13 DVL-013 Remove unneeded images 2017-10-16 17:12:32 +02:00
ab3df0c5dc DVL-013 Shorten README 2017-10-16 13:56:49 +02:00
aac3da3111 DVL-013 Fix markdown 2017-10-16 11:33:43 +02:00
0f1de08356 DVL-013 Logos and layout 2017-10-16 09:17:27 +02:00
c04fa23578 Merge pull request #130 from cytopia/REL-0.12
Rel 0.12
2017-10-10 15:45:38 +02:00
062aa18730 REL-0.12 Fix bold headline 2017-10-10 09:13:12 +02:00
1fa6bc7008 REL-0.12 Bump version for upcoming release 2017-10-10 08:56:10 +02:00
5fce8da961 REL-0.12 Revert Xdebug port back to 9000 2017-10-08 12:27:31 +02:00
bb2288a461 REL-0.12 Update new versions of available Docker container 2017-10-08 12:17:36 +02:00
f454a032c9 REL-0.12 Doc: How to setup Joomla 2017-10-03 12:45:37 +02:00
cc0c947d6b REL-0.12 Remove fixed note about uid/gid 2017-10-03 11:58:42 +02:00
c87201db13 REL-0.12 Bump version 2017-10-03 11:50:09 +02:00
5bd184c609 REL-0.12 Doc: How to customize the web server configuration 2017-10-03 11:49:16 +02:00
6f00608fba REL-0.12 Doc: #128 How to add custom environment variables 2017-10-03 11:43:57 +02:00
352a8d3b40 REL-0.12 Doc: How to customize per project vhost 2017-10-03 11:38:39 +02:00
2b5336c342 REL-0.12 Doc: How to change the htdocs directory name 2017-10-03 11:28:42 +02:00
54bddc820a REL-0.12 Doc: How to disable the Intranet 2017-10-03 11:07:18 +02:00
8ad5b4ef61 REL-0.12 Default to listen on all Interfaces 2017-10-03 10:32:23 +02:00
5d11a09866 REL-0.12 Fix version getter 2017-10-02 13:00:48 +02:00
3990d2de71 REL-0.12 Speed up frontpage by using Ajax requests 2017-10-02 12:42:29 +02:00
20383fee48 REL-0.12 Update update-docker.sh to use new httpd namespace 2017-10-01 19:16:09 +02:00
fb193aba20 DVL-012 Switch httpd Docker namespace 2017-10-01 18:59:11 +02:00
f5b03f22b7 REL-0.12 Make document root dir dynamic 2017-09-28 16:31:33 +02:00
0cb54d34ef REL-0.12 Remove quotes from variable values 2017-09-28 16:30:51 +02:00
32add6d2a0 REL-0.12 Use custom doc root directory in Intranet 2017-09-28 16:30:00 +02:00
bf0bc75b90 REL-0.12 Evade cross domain requests via POST 2017-09-27 14:42:42 +02:00
d8e60644e8 REL-0.12 Remove deprecates from docker-compose.yml 2017-09-26 19:56:28 +02:00
4ad3596daa REL-0.12 #128 Source environment variables 2017-09-26 19:53:31 +02:00
9752af1363 REL-0.12 Add directories to globally configure web servers 2017-09-26 19:39:38 +02:00
769b34c3e6 REL-0.12 Set correct httpd status page 2017-09-26 17:44:31 +02:00
69bb14288d REL-0.12 Enable devilbox intranet by default 2017-09-26 17:43:41 +02:00
c58b1e3db3 REL-0.12 Add option to disable devilbox Intranet 2017-09-26 16:58:24 +02:00
1ad6de7e4c REL-0.12 Attach new nginx Docker container 2017-09-26 16:51:49 +02:00
cac8a17bb6 Merge pull request #124 from cytopia/DVL-012-adminer
DVL-012 Fix #97: Open Adminer in new window to overcome UI glitches
2017-09-10 11:54:40 +02:00
4bbea8f134 Merge pull request #127 from cytopia/DVL-012-password-protection
DVL-012 Password protect the devilbox intranet
2017-09-10 11:54:16 +02:00
19908307d6 DVL-012 Add documentation for how to password protect 2017-09-09 14:16:04 +02:00
63e1acc02a DVL-012 #121 Password protect the devilbox intranet 2017-09-09 10:40:07 +02:00
dd34e4780e DVL-012 Fix #97: Open Adminer in new window to overcome UI glitches 2017-09-09 08:29:22 +02:00
0c4290b0c4 Merge pull request #115 from cytopia/DVL-012-customise-bash
DVL-012 be able to customize bash config files
2017-08-18 20:23:26 +02:00
87b7219901 DVL-012 Documentation: Customize bash and vim 2017-08-18 09:14:33 +02:00
bbfd938001 Merge pull request #114 from cytopia/DVL-012-requirements
DVL-012 Name correct required Docker version in documentation
2017-08-18 08:40:40 +02:00
e8975ec92c Merge pull request #113 from cytopia/DVL-012-fix-dns-forwarder
DVL-012 #112 Fixes wrong docker-compose var for BIND
2017-08-18 08:39:55 +02:00
bb0a15f4e6 DVL-012 be able to customize bash config files 2017-08-17 21:20:41 +02:00
8f75590e8d DVL-012 Name correct required Docker version in documentation 2017-08-17 08:37:53 +02:00
4cabfeccec DVL-012 #112 Fixes wrong docker-compose var for BIND 2017-08-17 08:30:18 +02:00
5c22c045a1 Merge pull request #111 from cytopia/DVL-012-awesome-ci-fix
DVL-012 Fix ToC on README.md
2017-08-16 23:29:13 +02:00
f5792f1bad DVL-012 Fix ToC on README.md 2017-08-16 20:23:59 +02:00
4181805ff2 Merge pull request #110 from cytopia/DVL-012-awesome-ci
DVL-012 Add documentation for awesome-ci
2017-08-16 20:20:24 +02:00
b6be233241 DVL-012 Fix ToC 2017-08-16 09:21:48 +02:00
b2ebe2df0a DVL-012 Add documentation for awesome-ci 2017-08-16 09:16:58 +02:00
77fb8d50d1 Merge pull request #108 from cytopia/DVL-012-custom-php-modules
DVL-012 #107 Allow to load custom PHP modules
2017-08-16 08:12:03 +02:00
b7fd5a01e1 Merge pull request #100 from cytopia/DVL-012
WIP: DVL-012 Fix #97 Devilbox UI footer overlaps embedded tools
2017-08-13 14:02:11 +02:00
bcfa689fab DVL-012 Documentation: Add ToC for FAQ section 2017-08-13 13:56:37 +02:00
e2c724ce23 DVL-012 Documentation: How to load custom PHP modules 2017-08-13 13:36:24 +02:00
d6bf969212 DVL-012 #107 Allow to load custom PHP modules 2017-08-12 11:05:39 +02:00
9545113e43 DVL-012 Fix #97 Devilbox UI footer overlaps embedded tools 2017-07-22 11:43:07 +02:00
817a942bba Merge pull request #98 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2017-07-22 10:01:41 +02:00
def3636196 Add Gitter badge 2017-07-21 08:49:17 +00:00
1b143eb222 Merge pull request #95 from cytopia/DVL-012
DVL-012 Stop all container during travis checks
2017-07-09 14:33:53 +02:00
2faf541c93 DVL-012 Stop all container during travis checks 2017-07-08 14:16:55 +02:00
358d3e6ca5 Merge pull request #94 from cytopia/DVL-012
DVL-012 #92 Adds documentation for changing data directories
2017-07-05 08:18:24 +02:00
dd750f88ad DVL-012 Add datadir change info in env-example 2017-07-05 08:12:07 +02:00
5a9fce85a2 DVL-012 #92 Adds documentation for changing data directories 2017-07-04 09:00:29 +02:00
df915f8ebb Merge pull request #91 from cytopia/DVL-012
DVL-012 Fix contradictory TLD_SUFFIX documentation to default to *.loc
2017-07-03 20:14:17 +02:00
d9a0083edd Merge pull request #93 from kodemaan/patch-1
Update README.md
2017-07-03 20:00:57 +02:00
742f7decee Update README.md 2017-07-03 11:19:10 -04:00
6a9d248c4a DVL-012 Fix contradictory TLD_SUFFIX documentation to default to *.loc 2017-07-03 08:53:48 +02:00
d4d3e1223d Merge pull request #89 from cytopia/DVL-012
DVL-012 Adding PerconaDB
2017-07-02 10:54:40 +02:00
e560fe5712 DVL-012 Add more info about supported frameworks 2017-07-02 10:52:31 +02:00
0073374d91 DVL-012 Harden composer-download for travis tests 2017-07-02 10:20:54 +02:00
1a3b9e03cf DVL-012 Fix domain mixup in Examples 2017-07-01 21:03:11 +02:00
0b609be2fe DVL-012 Adding PerconaDB 2017-07-01 18:54:09 +02:00
812b0eface Merge pull request #88 from cytopia/DVL-012
DVL-012 Howto setup laravel
2017-07-01 15:59:34 +02:00
4990931c3c DVL-012 Howto setup laravel 2017-07-01 12:40:59 +02:00
fd7a19c9b1 Merge pull request #87 from cytopia/DVL-012
REL-0.12 Making devilbox ready for PHP 7.2
2017-06-27 18:19:49 +02:00
4ea1aa2370 REL-0.12 Making devilbox ready for PHP 7.2 2017-06-27 13:14:02 +02:00
ba498cad2a Merge pull request #86 from cytopia/DVL-012
DVL-012
2017-06-26 13:15:42 +02:00
af5d5bbcba DVL-0.12 Fixing ToC links 2017-06-26 13:05:15 +02:00
f190b64766 DVL-0.12 Binding latest images to docker-compose 2017-06-26 11:19:28 +02:00
8fbc86f410 Merge pull request #85 from cytopia/release-0.11
REL-0.11 Fix ToC indentation
2017-06-25 14:59:55 +02:00
fc9038cd62 REL-0.11 Fix ToC indentation 2017-06-25 14:58:55 +02:00
fbb169c37c Merge pull request #81 from cytopia/release-0.11
Release 0.11
2017-06-25 14:47:26 +02:00
bd150c9606 REL-0.11 Show versions in intranet 2017-06-25 14:44:51 +02:00
72598ad05f REL-0.11 Bump intranet version date 2017-06-25 13:59:34 +02:00
e0b5a8f22a REL-0.11 OS differences 2017-06-25 13:57:29 +02:00
294cb75e4d REL-0.11 Link documentation into main README 2017-06-25 13:46:50 +02:00
5b66c3ef0c REL-0.11 Attaching tagged docker container 2017-06-22 12:31:35 +02:00
025c998350 REL-0.11 Updating intranet release version 2017-06-22 12:16:52 +02:00
f965f7ea44 REL-0.11 Auto-DNS documentation 2017-06-22 12:09:58 +02:00
0430331123 REL-0.11 Switch to new travis environment 2017-06-22 11:34:38 +02:00
66b58e5960 REL-0.11 Configure documentation 2017-06-22 11:32:43 +02:00
89524f5341 REL-0.11 Configuration Documentation 2017-06-21 19:10:26 +02:00
e6a3c531b5 REL-0.11 Documentation about MySQL|MariaDB Configuration 2017-06-21 18:52:37 +02:00
d4c27860f3 REL-0.11 Adding configure documentation 2017-06-21 18:18:43 +02:00
474c198166 REL-0.11 Default PHP/HHVM example ini files 2017-06-21 09:20:19 +02:00
19ce82deb9 REL-0.11 Configure documentation 2017-06-21 09:19:51 +02:00
c25a3bfed9 REL-0.11 Fixing #82 TCP/53 and UDP/53 already taken on OSX/Linux 2017-06-20 21:33:24 +02:00
f2033556e3 REL-0.11 Adding more Framework examples for documentation 2017-06-20 21:31:00 +02:00
947136a383 REL-0.11 Configuration documentation 2017-06-20 12:16:27 +02:00
5bd9d312b2 REL-0.11 Separate MongoDB data dir by versions 2017-06-20 12:16:27 +02:00
bab0c9707f REL-0.11 Framework example documentation 2017-06-20 12:16:27 +02:00
880895e73a REL-0.11 Backup documentation 2017-06-20 12:16:27 +02:00
4d3281cf4b REL-0.11 docker-compose ready for mysqldump-secure 2017-06-20 12:16:27 +02:00
8bcaa75283 REL-0.11 Updating documentation 2017-06-20 12:16:27 +02:00
3bbf6a042d REL-0.11 Ignoring *.swm files 2017-06-20 12:16:27 +02:00
dec304a40b REL-0.11 Updating release info 2017-06-20 12:16:27 +02:00
1c0f7adf13 REL-0.11 Changing default Bind port from 53 to 1053 2017-06-20 12:16:27 +02:00
57d17a5ca8 DVL-016 Usage documentation 2017-06-20 12:16:27 +02:00
f435fac2a0 DVL-016 Usage documentation 2017-06-20 12:16:27 +02:00
1fb4a4a53b DVL-16 Finalized doc structure 2017-06-20 12:16:27 +02:00
221ebcc8ff DVL-016 Info about docker logs 2017-06-20 12:16:27 +02:00
11242dac1f DVL-016 Run the devilbox 2017-06-20 12:16:27 +02:00
6e14f36735 DVL-016 Overview 2017-06-20 12:16:27 +02:00
e2b44d2a55 DVL-016 Hacking the devilbox 2017-06-20 12:16:27 +02:00
476cb55d23 DVL-016 Technical documentation 2017-06-20 12:16:27 +02:00
6f35ce264d DVL-016 Documentation structure 2017-06-20 12:16:27 +02:00
7370a2f52b DVL-016 Documentation FAQ 2017-06-20 12:16:27 +02:00
d70879ea9e DVL-016 Documentation Intro page 2017-06-20 12:16:27 +02:00
a8c1513bb7 DVL-016 clean-up after gh-pages branch 2017-06-20 12:16:27 +02:00
0cb044e39d Merge pull request #80 from ilsenem/feature-nginx-query-string
Fix query string truncation in nginx configuration
2017-06-20 11:48:04 +02:00
22ec70cd72 Fix query string truncation in nginx configuration 2017-06-16 13:16:38 +07:00
b5256e2a2b Merge pull request #72 from cytopia/DVL-015
DVL-015 Extend documentation
2017-05-28 13:44:28 +02:00
6cde13127d DVL-015 Extend documentation 2017-05-28 13:43:41 +02:00
23a5a5f38c Merge pull request #69 from cytopia/DVL-014
DVL-014 Cleaning Jekyll config
2017-05-27 19:00:08 +02:00
b69274649a DVL-014 Cleaning Jekyll config 2017-05-27 18:59:27 +02:00
a33521b8bc Merge pull request #68 from cytopia/DVL-014
DVL-014 Resize logos to appropriate size
2017-05-27 17:51:47 +02:00
76a5765552 DVL-014 Resize logos to appropriate size 2017-05-27 17:50:38 +02:00
024647af46 Merge pull request #67 from cytopia/DVL-014
DVL-014 Add gh-pages
2017-05-27 17:41:22 +02:00
e7d8c9a538 DVL-014 Add gh-pages 2017-05-27 17:39:33 +02:00
f7e633eda7 Create CNAME 2017-05-26 15:45:22 +02:00
2d24f80cb0 Merge pull request #66 from cytopia/DVL-013
DVL-013 Remove git submodule dependencies in phpMyAdmin
2017-05-26 14:22:08 +02:00
075c26e097 DVL-013 Remove git submodule dependencies in phpMyAdmin 2017-05-26 14:18:14 +02:00
da04b3ac06 Set theme jekyll-theme-slate 2017-05-26 14:01:23 +02:00
d09a588359 Merge pull request #62 from cytopia/release-0.10
Release v0.10
2017-05-26 13:53:15 +02:00
fac2025154 REL-0.10 Re-order env-example file 2017-05-26 09:02:16 +02:00
0f2beffdf4 REL-0.10 increment release date 2017-05-26 08:43:24 +02:00
442db787d7 REL-0.9 Bullet proof travis checks 2017-05-26 08:36:16 +02:00
0c5efeca3b REL-0.10 Fix actual version output 2017-05-25 13:41:26 +02:00
e82f1b1266 REL-0.10 Pad actual version display in travis checks 2017-05-25 12:58:15 +02:00
107af77189 REL-0.10 Show docker version during tests 2017-05-25 12:43:50 +02:00
93f03adc58 REL-0.10 Optimize travis checks to be extended in the future 2017-05-25 11:00:36 +02:00
c4b067a10f Rel-0.10 attach tagged bind container 2017-05-25 10:19:42 +02:00
c18c1d66a9 REL-0.10 Adding ability to use custom DNS resolver 2017-05-24 09:31:03 +02:00
5d556fc310 REL-0.10 Cleanup shell scripts 2017-05-24 08:45:53 +02:00
98b0fa8c64 REL-0.10 Clean travis tests 2017-05-24 08:37:37 +02:00
de5c9d6398 REL-0.10 Move doc/ folder to docs/ 2017-05-24 08:05:10 +02:00
3f6d3ee36b REL-0.10 Attach tagged php container 2017-05-24 08:00:53 +02:00
fdfc06d29d REL-0.10 Harden travis checks 2017-05-23 22:56:39 +02:00
38cab08d72 Set theme jekyll-theme-merlot 2017-05-23 13:35:21 +02:00
3dfa4a8cd9 Set theme jekyll-theme-cayman 2017-05-23 13:32:11 +02:00
9c2c91f165 REL-0.10 Improve README 2017-05-23 09:13:40 +02:00
c266e2dcde REL-0.10 Bump release date 2017-05-23 09:01:50 +02:00
17f6d34211 REL-0.10 Updating documentation 2017-05-23 08:47:45 +02:00
234804efe8 REL-0.10 Adding env file for MongoDB 2017-05-22 23:23:05 +02:00
05cdb4c3c1 REL-0.10 Adding MongoDB 2017-05-22 23:20:20 +02:00
0c643f3632 Merge pull request #58 from cytopia/release-0.9
Release 0.9
2017-05-21 22:37:28 +02:00
7330852b6b REL-0.9 Default to uid 1000 2017-05-21 22:09:03 +02:00
89ce45be6c REL-0.9 Attach tagged docker container 2017-05-21 14:14:49 +02:00
aff160a07f REL-0.9 Slight documentation improvements 2017-05-21 13:10:37 +02:00
f587156df1 REL-0.9 Final test with latest containers before tagging 2017-05-21 11:31:08 +02:00
0a44a49647 REL-0.9 Documentation table 2017-05-21 11:29:04 +02:00
7db119748b REL-0.9 Info about PS1 2017-05-20 21:55:22 +02:00
f419a65376 REL-0.9 How to enter the php container 2017-05-20 21:50:38 +02:00
9c689a5e2d REL-0.9 Improve documentation 2017-05-20 21:39:57 +02:00
640dd23f73 REL-0.9 Update README.md 2017-05-20 21:24:04 +02:00
24e2767f33 REL-0.9 Updating documentation 2017-05-20 20:13:14 +02:00
9d185a985b REL-0.9 Using short-hand name for memcached server 2017-05-20 20:12:31 +02:00
02a25ede19 REL-0.9 add new memcached version 2017-05-20 18:24:47 +02:00
44cf550778 REL-0.9 Increase version string 2017-05-20 16:34:07 +02:00
d292ed6be3 REL-0.9 Make travis easier to read 2017-05-20 16:33:06 +02:00
d7289a3f18 REL-0.9 Make PHP-7.0 the default 2017-05-20 16:24:37 +02:00
6d7908099d REL-0.9 Attach new mysql container versions 2017-05-17 15:24:49 +02:00
8052780520 REL-0.9 Get rid of volumes to be more compatible to windows 2017-05-17 13:38:11 +02:00
ae96dafdf5 REL-0.9 Fixing opcache gui jquery lib 2017-05-17 09:59:52 +02:00
ce70d76743 REL-0.9 Fix mysql custom config dir writeability 2017-05-17 09:38:29 +02:00
10aa233cb4 REL-0.9 Fix typo in travis 2017-05-17 09:24:09 +02:00
3d932398aa REL-0.9 Adding missing travis test function 2017-05-17 09:20:50 +02:00
f1b6ffae73 REL-0.9 Fix typo in travis scripts 2017-05-17 09:12:51 +02:00
b74cd69305 REL-0.9 Merge old and new travis checks 2017-05-17 09:05:10 +02:00
967ab54075 REL-0.9 Allow some services to fail in travis 2017-05-17 08:45:31 +02:00
26785ac448 REL-0.9 Re-enable new travis checks 2017-05-17 08:37:36 +02:00
6c59070afb REL-0.9 Webserver configuration fixes 2017-05-16 20:44:59 +02:00
4f03b54463 REL-0.9 Evaluate docker-internal and host DNS problems 2017-05-16 20:44:59 +02:00
b01777e22c REL-0.9 Intranet clean-up 2017-05-16 20:44:59 +02:00
1a6621475a REL-0.9 nginx config clean-up 2017-05-16 20:44:59 +02:00
2973fcacb0 REL-0.9 Indentation fix 2017-05-16 20:44:59 +02:00
f1b88a9c60 REL-0.9 Intranet refactoring 2017-05-16 20:44:59 +02:00
83ab3d8758 REL-0.9 Properly check client-side DNS via ajax CSR calls 2017-05-16 20:44:36 +02:00
d6fd9d1cda REL-0.9 Fix DNS vHost check 2017-05-16 20:44:36 +02:00
21ce41e6f3 REL-0.9 Clean up tests 2017-05-16 20:44:36 +02:00
f8606aaa25 REL-0.9 Fix negative check 2017-05-16 20:44:05 +02:00
67d3f67d6c REL-0.9 Fix error counting 2017-05-16 20:43:52 +02:00
cc8b93606a REL-0.9 Adjust testing for new container 2017-05-16 20:43:52 +02:00
73ab1b679d REL-0.9 Re-add travis functions 2017-05-16 20:43:29 +02:00
cf53e1fb43 REL-0.9 Re-add debug testing fucntion 2017-05-16 20:43:29 +02:00
c3955ea34e REL-0.9 Remove return in DNS check 2017-05-16 20:43:29 +02:00
cce2ed885a REL-0.9 Add css classes for ok/err 2017-05-16 20:43:29 +02:00
43528a6327 REL-0.9 Update travis checks 2017-05-16 20:43:29 +02:00
d8209ef111 REL-0.9 travis with newer docker-compose version 2017-05-16 20:41:04 +02:00
9794cbde3c REL-0.9 travis with newer docker version 2017-05-16 20:40:41 +02:00
ccef616189 REL-0.9 Adding Bind (DNS Server) 2017-05-16 20:40:41 +02:00
baa2da8a3a REL-0.9 Improving documentation 2017-05-16 20:40:41 +02:00
f7893ead14 REL-0.9 Adding information about DNS status 2017-05-16 20:40:41 +02:00
dfa8ff99dc REL-0.9 Check if container are running 2017-05-16 20:40:24 +02:00
d9a255ae6a REL-0.9 Error checking in case some containers are not running 2017-05-16 20:40:24 +02:00
07145d40ba REL-0.9 Restructure navigation 2017-05-16 20:40:24 +02:00
0f0b7b90e5 REL-0.9 Fix navigation 2017-05-16 20:40:02 +02:00
4b0277a30d REL-0.9 Updating Adminer to latest version 2017-05-16 20:40:02 +02:00
2d7e51027b REL-0.9 Fix Redis/Memcached overview 2017-05-16 20:38:44 +02:00
0afeefd964 REL-0.9 Fixes #9 #10 DNS checks and custom domain suffix 2017-05-16 20:38:44 +02:00
54e00598cd REL-0.9 Better mass virtual hosting wildcards 2017-05-16 20:38:15 +02:00
bb0abf4794 REL-0.9 Update documentation 2017-05-16 20:38:15 +02:00
cc6474217b REL-0.9 Update env-example 2017-05-16 20:38:15 +02:00
be55e9a6f4 REL-0.9 Variable interpolation with default values 2017-05-16 20:38:15 +02:00
90a65d8090 REL-0.9 Use hostnames instead of IP addresses 2017-05-16 20:38:15 +02:00
3f7fe50113 REL-0.9 Show version of installed toold 2017-05-16 20:38:15 +02:00
1c7c240874 REL-0.9 Update docker-compose 2017-05-16 20:38:15 +02:00
e1fe843299 REL-0.9 Updating README.md 2017-05-16 20:38:15 +02:00
04c079c625 REL-0.9 Adding docker entering scripts 2017-05-16 20:37:57 +02:00
ff39de09ef REL-0.9 Updating Intranet 2017-05-16 20:37:57 +02:00
a5cf4f9483 REL-0.9 Updating intranet class files 2017-05-16 20:36:59 +02:00
2f57691e58 REL-0.9 Adding separate documentation 2017-05-16 20:36:59 +02:00
e58dee3984 REL-0.9 Adding teather.js 2017-05-16 20:36:59 +02:00
09b935cfdd REL-0.9 Updating jquery 2017-05-16 20:36:59 +02:00
bbf1e3d2c1 REL-0.9 Updating bootstrap 2017-05-16 20:36:59 +02:00
629dbb0e50 DVL-013 Fix #49 Duplication of env variables passed to docker-compose 2017-05-16 20:36:59 +02:00
4c0ec7de3d Merge pull request #59 from cebe/patch-1
Fixed typo in .env file
2017-05-07 23:33:06 +02:00
20816fe831 Fixed typo in .env file
`MySQL` -> `PostgreSQL` in PostgreSQL section.
2017-05-07 23:04:17 +02:00
b20efd0e1a Merge pull request #43 from cytopia/DVL-008
DVL-008 Travis test all server combinations against each other
2017-05-06 14:38:32 +02:00
3d7f3f2c90 Merge pull request #55 from cytopia/DVL-014
DVL-014 Fix #54 - CP "Tools - Adminer" not working
2017-04-28 12:24:02 +02:00
beebb9ee3b DVL-014 Fix #54 - CP "Tools - Adminer" not working 2017-04-28 08:08:52 +02:00
dfa99dc174 Merge pull request #51 from lex111/patch-1
Small improvements in README.md
2017-04-26 20:32:38 +02:00
9e7a3b878b Small improvements in README.md 2017-04-25 21:22:03 +03:00
fea9ed9d31 DVL-008 Add newlines after .env info output 2017-04-23 21:23:13 +02:00
c2d664bcf5 DVL-008 Fix chosen server versions to test against 2017-04-23 21:23:13 +02:00
baac823ce6 DVL-008 Show settings nicely formatted 2017-04-23 21:23:13 +02:00
a6859394bf DVL-008 Show all other env settings 2017-04-23 21:23:13 +02:00
cbd98c1d28 DVL-008 Show current env settings 2017-04-23 21:23:13 +02:00
045b0d4801 DVL-008 Fix argument order 2017-04-23 21:23:13 +02:00
c55c440352 DVL-009 Change wait time from 90s to 30s 2017-04-23 21:23:13 +02:00
d82b4f0c0d DVL-008 Travis test all server combinations against each other 2017-04-23 21:23:13 +02:00
1cb00edd36 Merge pull request #47 from cytopia/DVL-012
DVL-012 Make custom cfg directories be persistent in git
2017-04-23 20:38:01 +02:00
2984ab5ed4 Merge pull request #46 from cytopia/DVL-011
DVL-011 Adding MariaDB 10.3
2017-04-23 20:37:41 +02:00
d094ea6388 Merge pull request #45 from cytopia/DVL-010
DVL-010 Make MySQL|PgSQL data dirs dynamic depending on version
2017-04-23 20:37:30 +02:00
a5a733c352 DVL-012 Make custom cfg directories be persistent in git 2017-04-23 17:34:35 +02:00
06dbf55a27 DVL-011 Adding MariaDB 10.3 2017-04-23 17:10:36 +02:00
54102a8b4c DVL-010 Make MySQL|PgSQL data dirs dynamic depending on version (opt container) 2017-04-23 16:11:24 +02:00
77492635d7 DVL-010 Make MySQL|PgSQL data dirs dynamic depending on version 2017-04-23 16:09:39 +02:00
8346db59a3 Merge pull request #44 from cytopia/DVL-009
DVL-009 Adding Redis docker container
2017-04-23 16:08:30 +02:00
4b1bc40307 DVL-009 Defaulting to Redis 3.2 2017-04-23 14:10:41 +02:00
e39c66cb8b DVL-009 Adding Redis DB page 2017-04-23 14:08:54 +02:00
c644913694 DVL-009 Adding Redis info page 2017-04-23 13:34:14 +02:00
2c8e56dd7a DVL-009 Adding Redis docker container 2017-04-23 13:20:32 +02:00
e344ff2243 Merge pull request #42 from cytopia/DVL-007
DVL-007 Fix gitignore and re-add ignored files
2017-04-22 13:26:49 +02:00
e555a5a90b Merge pull request #40 from cytopia/DVL-006
DVL-006 Adding MySQL 8.0
2017-04-22 12:39:25 +02:00
98e007a308 DVL-007 Fix gitignore and re-add ignored files 2017-04-22 11:58:17 +02:00
7858731dfe DVL-006 Adding devilbox custom mysql configuration 2017-04-21 23:17:59 +02:00
a9dc7c3c54 DVL-006 Info about latest feature 2017-04-21 22:27:37 +02:00
04c82c11c5 DVL-006 Adding MySQL 8.0 2017-04-21 22:25:02 +02:00
8fc5ff8be1 Merge pull request #39 from cytopia/DVL-005
DVL-005 Show log files on error
2017-04-21 22:18:31 +02:00
9b19cc0cf7 DVL-005 changing service combinations 2017-04-21 21:15:31 +02:00
311505beec DVL-005 Wait for url to become available 2017-04-21 19:38:36 +02:00
d8dd1c28d7 DVL-005 Intercept bad error codes during tests 2017-04-21 18:54:29 +02:00
7382aacf2a DVL-005 Use sudo to show logs on error 2017-04-21 11:40:19 +02:00
6eea97f1be DVL-005 Using non-persistent pg connect to prevent HHVM core-dump 2017-04-21 02:37:01 +02:00
8295e1ac18 DVL-005 Show log files on error 2017-04-21 02:07:45 +02:00
260eed9293 Merge pull request #38 from cytopia/DVL-004
DVL-004 use docker-compose updates
2017-04-20 18:55:13 +02:00
60b622c9f0 DVL-004 Revert to docker-compose version 2 2017-04-20 18:07:04 +02:00
f400c5b280 DVL-004 Use named volumes for container-only shared data (like sockets) 2017-04-20 17:47:27 +02:00
edf788f6dd DVL-004 use docker-compose version 2.1 2017-04-20 17:31:52 +02:00
e657e9b7e8 Merge pull request #36 from cytopia/DVL-002
DVL-002 Fix travis builds
2017-04-20 17:29:39 +02:00
81072dbfd7 DVL-002 Add docker-compose dependencies 2017-04-20 16:42:21 +02:00
cb512b4ac4 DVL-002 Prevent HHVM from segfaulting during pg_connect 2017-04-20 15:39:00 +02:00
567ba57a13 DVL-002 alter travis checks 2017-04-20 15:39:00 +02:00
2f96a1a349 Merge pull request #37 from cytopia/DVL-003
DVL-003 phpmyadmin-4.0 for PHP 5.4 and phpmyadmin-4.7 for everything …
2017-04-20 13:22:26 +02:00
5ea5fb9d79 DVL-003 phpmyadmin-4.0 for PHP 5.4 and phpmyadmin-4.7 for everything else 2017-04-20 12:55:30 +02:00
bc62d4e46c Merge pull request #35 from cytopia/DVL-001
DVL-001 Prepare HHVM support
2017-04-20 11:10:16 +02:00
b3aab7ddfc DVL-001 stop unwanted daemons 2017-04-19 20:09:42 +02:00
d396c921d7 DVL-001 Prepare HHVM support 2017-04-19 19:48:44 +02:00
294123505b add host port to intranet link (#34)
* add host port to intranet link

* display port on link
2017-03-25 10:36:39 +01:00
43d60ff90b Use other default stettings which work 2016-12-30 18:38:54 +01:00
8a5ca7bdc7 Merge branch 'hotfix/mysql-stability'
* hotfix/mysql-stability:
  Finer error checks
  Better test display
  Better testing output
  Wait 90 sec before using docker containers
  Better wait command
  Disable mysql socket
2016-12-30 18:37:34 +01:00
7f96c2b0ab Finer error checks 2016-12-28 17:00:21 +01:00
5719a9ec36 Better test display 2016-12-28 16:50:22 +01:00
a1df846526 Better testing output 2016-12-28 16:39:19 +01:00
d27f988107 Wait 90 sec before using docker containers 2016-12-28 16:03:52 +01:00
46c32c1e4c Better wait command 2016-12-27 17:13:27 +01:00
46202ca6dd Disable mysql socket 2016-12-27 16:49:47 +01:00
a0b3f8bfa2 Wait 40sec for containers to come up 2016-12-26 23:13:05 +01:00
3f689ebc75 Test each server version separately 2016-12-26 23:03:46 +01:00
f1097a3c68 Fix param check 2016-12-26 22:17:31 +01:00
28041d72bb Fix startup 2016-12-26 22:14:53 +01:00
3c3ecc5e4c Fix typos 2016-12-26 22:10:00 +01:00
f176f5a134 Split all into single builds 2016-12-26 22:03:21 +01:00
c3a38d3d5f Be more verbose 2016-12-26 21:50:50 +01:00
1502609913 Split builds 2016-12-26 21:44:04 +01:00
376576e495 Add multiple Linux dists 2016-12-26 15:51:27 +01:00
4edf7e24ff Clean .travis file 2016-12-26 15:45:05 +01:00
de3d89a631 Test Linux only 2016-12-26 15:32:35 +01:00
4d2d0eb63e Test Linux only 2016-12-26 15:31:30 +01:00
efe1e7b926 Add 2 OSX versions 2016-12-26 15:21:38 +01:00
bfa7bd4635 Make tests on Linux and OSX 2016-12-26 15:13:46 +01:00
acebbfbc16 Expect 4 OKs 2016-12-26 04:30:12 +01:00
ec860084c5 Fix travis version check 2016-12-26 03:54:59 +01:00
21da3a57ce Test MySQL 2016-12-26 03:35:09 +01:00
5520cade70 Test all PHP versions 2016-12-25 16:30:18 +01:00
95d0f34249 Better headlines 2016-12-25 15:46:02 +01:00
8c5274657b Enable correct version 2016-12-25 15:35:30 +01:00
ee270d70c2 Show sed commands 2016-12-25 15:30:33 +01:00
ea960268e2 Test enabled versions 2016-12-25 15:16:11 +01:00
133680c19c Fix travis sudo rights 2016-12-25 14:58:55 +01:00
a161e536a7 Add extensive travis checks 2016-12-22 20:17:35 +01:00
442a098690 Make host ports configurable via .env file 2016-12-22 20:16:39 +01:00
58cacbe23e Note about git tags and master branch 2016-12-21 15:16:10 +01:00
f829a2ed9d Preparing docker on OSX for d4m-nfs to improve FS performance 2016-12-14 11:15:33 +01:00
2916e6620d Default to store data within this repo 2016-12-02 21:09:58 +01:00
575fa0bf9c #24 make docker-host listening IP configurable via .env 2016-12-02 21:08:27 +01:00
075924fd6f Make mounts read-only where appropriate 2016-12-02 11:19:33 +01:00
d6920f77d3 Fix URL paths in dropdown menu 2016-12-02 11:18:10 +01:00
31efa378a6 Create dirs 2016-11-15 21:42:51 +01:00
92dcc0cec6 Clean up travis file 2016-11-15 21:15:52 +01:00
5a3b90dadd Use diff mysql port 2016-11-15 21:14:47 +01:00
4f451a146a Dont kill pg 2016-11-15 21:06:46 +01:00
efbb7bdfaf Kill system postgresql 2016-11-15 21:02:03 +01:00
befc10bb4a Switch PG port 2016-11-15 21:01:06 +01:00
a6bcf0093d List processes 2016-11-15 20:51:56 +01:00
34652dc563 Restructure travis file 2016-11-15 20:45:57 +01:00
bd05fae22f Fix compose command 2016-11-15 20:42:41 +01:00
6edf4b8a39 Show what is new 2016-11-15 20:27:27 +01:00
f4603911e7 #21 Adding docker-compose up 2016-11-15 20:26:53 +01:00
f49f1a9b22 Integrate PostgreSQL 2016-11-15 19:52:39 +01:00
e3ea211423 Revert dns finder for Linux 2016-11-15 19:52:13 +01:00
8834828a95 Refactor web libraries 2016-11-15 19:39:34 +01:00
086fd5bc50 Restructure web pages 2016-11-15 19:39:11 +01:00
bcfb2f6352 Adding Adminer SQL Manager 2016-11-15 19:38:26 +01:00
cde45407a1 Attaching new release tags 2016-11-06 17:53:04 +01:00
d1c7c27a54 Adding project documentation 2016-11-06 17:49:48 +01:00
b85dda99d9 Bind PHP docker to hotfix release v0.8.1 2016-11-06 17:22:29 +01:00
1cce1c91c1 Use absolute paths to include files 2016-11-06 17:21:59 +01:00
4ba01ebaea If no errors are present, show OK screen 2016-11-06 17:21:26 +01:00
24d3b65ec1 Include files by absolute path 2016-11-06 17:20:51 +01:00
28ec8e7285 Fix deprecation warning for PHP >5.5 2016-11-06 17:20:15 +01:00
98346d6f10 #10 - Make TLD suffix more configurable 2016-11-06 13:57:05 +01:00
e0e9c695b5 How to checkout latest stable release 2016-11-06 13:38:52 +01:00
4c2d5bb480 Refactor PHP code for intranet 2016-11-06 13:36:07 +01:00
2a05d1a0a8 Allow emails to be sorted 2016-11-05 02:57:10 +01:00
5384 changed files with 677794 additions and 485213 deletions

View File

@ -1,3 +0,0 @@
<?php
// Fix DocumentRoot for VirtualDocumentRoot Hosts
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);

View File

@ -1,30 +0,0 @@
#!/usr/bin/env php
<?php
// TODO: logpath could also be passed via CMD argument
// so this script could be more general
$path = '/var/log/apache-2.2';
$fh_timeout = 30; // 30 sek.
$fd = fopen('php://stdin', 'r');
while (!feof($fd)) {
$row = fgets($fd);
list($vhost, $h, $l, $u, $t, $r, $s, $b, $referrer, $ua) = explode(';', $row, 10);
if (!isset(${$vhost})) {
${$vhost} = fopen($path . '/' . $vhost . '_access.log', 'a+');
}
$lastwrite[$vhost] = time();
fputs(${$vhost}, "$h $l $u $t $r $s $b $referrer $ua");
foreach ($lastwrite as $vhost => $time) {
if ((time() - ($time + 30)) >= 0) {
fclose(${$vhost});
unset(${$vhost});
unset($lastwrite[$vhost]);
}
}
}

View File

@ -1,3 +0,0 @@
<?php
// Fix DocumentRoot for VirtualDocumentRoot Hosts
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);

View File

@ -1,30 +0,0 @@
#!/usr/bin/env php
<?php
// TODO: logpath could also be passed via CMD argument
// so this script could be more general
$path = '/var/log/apache-2.4';
$fh_timeout = 30; // 30 sek.
$fd = fopen('php://stdin', 'r');
while (!feof($fd)) {
$row = fgets($fd);
list($vhost, $h, $l, $u, $t, $r, $s, $b, $referrer, $ua) = explode(';', $row, 10);
if (!isset(${$vhost})) {
${$vhost} = fopen($path . '/' . $vhost . '_access.log', 'a+');
}
$lastwrite[$vhost] = time();
fputs(${$vhost}, "$h $l $u $t $r $s $b $referrer $ua");
foreach ($lastwrite as $vhost => $time) {
if ((time() - ($time + 30)) >= 0) {
fclose(${$vhost});
unset(${$vhost});
unset($lastwrite[$vhost]);
}
}
}

View File

@ -1,23 +0,0 @@
CustomLog "/var/log/apache-2.2/access_log" combined
ErrorLog "/var/log/apache-2.2/error_log"
LogLevel warn
AddDefaultCharset UTF-8
# No DNS
HostnameLookups Off
#
Timeout 60
KeepAlive On
KeepAliveTimeout 10
MaxKeepAliveRequests 100
#
#
EnableMMAP Off
EnableSendfile Off
#
#
#
#
XSendFile On
XSendFilePath /shared/httpd

View File

@ -1,6 +0,0 @@
#### PHP-FPM config ####
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/local/bin/php-fcgi
FastCgiExternalServer /usr/local/bin/php-fcgi -host 172.16.238.11:9000 -pass-header Authorization

View File

@ -1,31 +0,0 @@
##
## Default Host for http://localhost
##
NameVirtualHost *:80
<VirtualHost _default_:80>
ServerName localhost
ServerAdmin root@localhost
ErrorLog /var/log/apache-2.2/localhost-error.log
CustomLog /var/log/apache-2.2/localhost-access.log combined
DirectoryIndex index.php index.html
DocumentRoot "/var/www/default/htdocs"
<Directory "/var/www/default/htdocs">
DirectoryIndex index.php index.html
AllowOverride All
Options All
RewriteEngine on
RewriteBase /
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

View File

@ -1,43 +0,0 @@
##
## Default Mass Virtual Host
##
<VirtualHost *:80>
# Get the server name from the Host: header
UseCanonicalName Off
ServerName localhost
ServerAlias *.loc
ServerAdmin root@localhost
# splitlogs.php is a custom script, which will filter the domain
# and create separate logfiles per domain.
LogFormat "%V;%h;%l;%u;%t;\"%r\";%>s;%b;\"%{Referer}i\";\"%{User-agent}i\"" vcommon
CustomLog "|/opt/bin/splitlogs.php" vcommon
ErrorLog /var/log/apache-2.2/other-error.log
DirectoryIndex index.php index.html
# When using VirtualDocumentRoot the PHP Env var DOCUMENT_ROOT
# is not filled, so we need to do that manually with a custom script.
VirtualDocumentRoot /shared/httpd/%-2+/htdocs/
php_admin_value auto_prepend_file /opt/bin/fix-virtual-docroot.php
<Directory "/shared/httpd/*/htdocs/">
DirectoryIndex index.php index.html
AllowOverride All
Options All
RewriteEngine on
RewriteBase /
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

View File

@ -1,23 +0,0 @@
CustomLog "/var/log/apache-2.4/access_log" combined
ErrorLog "/var/log/apache-2.4/error_log"
LogLevel warn
AddDefaultCharset UTF-8
# No DNS
HostnameLookups Off
#
Timeout 60
KeepAlive On
KeepAliveTimeout 10
MaxKeepAliveRequests 100
#
#
EnableMMAP Off
EnableSendfile Off
#
#
#
#
XSendFile On
XSendFilePath /shared/httpd

View File

@ -1,17 +0,0 @@
#### PHP-FPM config ####
# enablereuse
# Defining a worker will improve performance
# And in this case, re-use the worker (dependent on support from the fcgi application)
# If you have enough idle workers, this would only improve the performance marginally
#
# enablereuse requires Apache 2.4.11 or later
#<Proxy "fcgi://172.16.238.11:9000/" enablereuse=on max=10></Proxy>
<FilesMatch "\.php$">
Require all granted
# Pick one of the following approaches
# Use the standard TCP socket
SetHandler "proxy:fcgi://172.16.238.11:9000"
# If your version of httpd is 2.4.9 or newer (or has the back-ported feature), you can use the unix domain socket
#SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/:9000"
</FilesMatch>

View File

@ -1,32 +0,0 @@
##
## Default Host for http://localhost
##
<VirtualHost _default_:80>
ServerName localhost
ServerAdmin root@localhost
ErrorLog /var/log/apache-2.4/localhost-error.log
CustomLog /var/log/apache-2.4/localhost-access.log combined
DirectoryIndex index.php index.html
DocumentRoot "/var/www/default/htdocs"
<Directory "/var/www/default/htdocs">
DirectoryIndex index.php index.html
AllowOverride All
Options All
RewriteEngine on
RewriteBase /
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>

View File

@ -1,44 +0,0 @@
##
## Default Mass Virtual Host
##
<VirtualHost *:80>
# Get the server name from the Host: header
UseCanonicalName Off
ServerName localhost
ServerAlias *.loc
ServerAdmin root@localhost
# splitlogs.php is a custom script, which will filter the domain
# and create separate logfiles per domain.
LogFormat "%V;%h;%l;%u;%t;\"%r\";%>s;%b;\"%{Referer}i\";\"%{User-agent}i\"" vcommon
CustomLog "|/opt/bin/splitlogs.php" vcommon
ErrorLog /var/log/apache-2.4/other-error.log
DirectoryIndex index.php index.html
# When using VirtualDocumentRoot the PHP Env var DOCUMENT_ROOT
# is not filled, so we need to do that manually with a custom script.
VirtualDocumentRoot /shared/httpd/%-2+/htdocs/
php_admin_value auto_prepend_file /opt/bin/fix-virtual-docroot.php
<Directory "/shared/httpd/*/htdocs/">
DirectoryIndex index.php index.html
AllowOverride All
Options All
RewriteEngine on
RewriteBase /
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>

View File

View File

View File

View File

View File

View File

View File

View File

View File

@ -0,0 +1,10 @@
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8

View File

@ -1,11 +0,0 @@
access_log /var/log/nginx-mainline/access.log main;
error_log /var/log/nginx-mainline/error.log warn;
charset utf-8;
send_timeout 60;
keepalive_timeout 10;
sendfile on;
tcp_nopush on;
tcp_nodelay on;

View File

@ -1,56 +0,0 @@
##
## Default Host for http://localhost
##
server {
listen 80 default_server;
server_name _;
# Root directive
root /var/www/default/htdocs;
index index.php;
access_log /var/log/nginx-mainline/localhost-access.log main;
error_log /var/log/nginx-mainline/localhost-error.log warn;
# Front-controller pattern as recommended by the nginx docs
location / {
try_files $uri $uri/ /index.php;
}
# PHP FPM
location ~ \.php?$ {
# PHP.INI:
# ---------------------------
# // Find this:
# cgi.fix_pathinfo=1
# // Replace with:
# cgi.fix_pathinfo=0
try_files $uri = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(.*)$;
#### FPM Server
fastcgi_pass 172.16.238.11:9000;
fastcgi_index index.php;
fastcgi_intercept_errors on;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
# disallow access to git configs path
location ~ /\.git {
deny all;
}
}

View File

@ -1,56 +0,0 @@
##
## Default Mass Virtual Host
##
server {
listen 80;
server_name ~^(?<domain>.+)\.loc$;
# Root directive
root /shared/httpd/$domain/htdocs/;
index index.php;
access_log /var/log/nginx-mainline/$domain-access.log main;
error_log /var/log/nginx-mainline/other-error.log warn;
# Front-controller pattern as recommended by the nginx docs
location / {
try_files $uri $uri/ /index.php;
}
# PHP FPM
location ~ \.php?$ {
# PHP.INI:
# ---------------------------
# // Find this:
# cgi.fix_pathinfo=1
# // Replace with:
# cgi.fix_pathinfo=0
try_files $uri = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(.*)$;
#### SOCKET
fastcgi_pass 172.16.238.11:9000;
fastcgi_index index.php;
fastcgi_intercept_errors on;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
# disallow access to git configs path
location ~ /\.git {
deny all;
}
}

View File

@ -1,11 +0,0 @@
access_log /var/log/nginx-stable/access.log main;
error_log /var/log/nginx-stable/error.log warn;
charset utf-8;
send_timeout 60;
keepalive_timeout 10;
sendfile on;
tcp_nopush on;
tcp_nodelay on;

View File

@ -1,56 +0,0 @@
##
## Default Host for http://localhost
##
server {
listen 80 default_server;
server_name _;
# Root directive
root /var/www/default/htdocs;
index index.php;
access_log /var/log/nginx-stable/localhost-access.log main;
error_log /var/log/nginx-stable/localhost-error.log warn;
# Front-controller pattern as recommended by the nginx docs
location / {
try_files $uri $uri/ /index.php;
}
# PHP FPM
location ~ \.php?$ {
# PHP.INI:
# ---------------------------
# // Find this:
# cgi.fix_pathinfo=1
# // Replace with:
# cgi.fix_pathinfo=0
try_files $uri = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(.*)$;
#### FPM Server
fastcgi_pass 172.16.238.11:9000;
fastcgi_index index.php;
fastcgi_intercept_errors on;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
# disallow access to git configs path
location ~ /\.git {
deny all;
}
}

View File

@ -1,56 +0,0 @@
##
## Default Mass Virtual Host
##
server {
listen 80;
server_name ~^(?<domain>.+)\.loc$;
# Root directive
root /shared/httpd/$domain/htdocs/;
index index.php;
access_log /var/log/nginx-stable/$domain-access.log main;
error_log /var/log/nginx-stable/other-error.log warn;
# Front-controller pattern as recommended by the nginx docs
location / {
try_files $uri $uri/ /index.php;
}
# PHP FPM
location ~ \.php?$ {
# PHP.INI:
# ---------------------------
# // Find this:
# cgi.fix_pathinfo=1
# // Replace with:
# cgi.fix_pathinfo=0
try_files $uri = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(.*)$;
#### SOCKET
fastcgi_pass 172.16.238.11:9000;
fastcgi_index index.php;
fastcgi_intercept_errors on;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
# disallow access to git configs path
location ~ /\.git {
deny all;
}
}

View File

@ -0,0 +1 @@
{"success":"true"}

View File

@ -1,43 +1,151 @@
<?PHP
// Measure time
$TIME_START = microtime(true);
$MY_DIR = dirname(__FILE__);
// Start session
session_start();
// Turn on all PHP errors
error_reporting(-1);
// Translate Docker environmental variables to $ENV
$ENV = array();
exec('env', $output);
foreach ($output as $var) {
$tmp = explode('=', $var);
$ENV[$tmp[0]] = $tmp[1];
}
// Shorten DNS timeouts for gethostbyname in case DNS server is down
putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
$DEVILBOX_VERSION = 'v0.13.1';
$DEVILBOX_DATE = '2018-04-28';
$DEVILBOX_API_PAGE = 'devilbox-api/status.json';
//
// Set Directories
//
$CONF_DIR = dirname(__FILE__);
$LIB_DIR = $CONF_DIR . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR .'lib';
$VEN_DIR = $CONF_DIR . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR .'vendor';
$LOG_DIR = dirname(dirname($CONF_DIR)) . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'devilbox';
//
// Load Base classes
//
require $LIB_DIR . DIRECTORY_SEPARATOR . 'container' . DIRECTORY_SEPARATOR .'BaseClass.php';
require $LIB_DIR . DIRECTORY_SEPARATOR . 'container' . DIRECTORY_SEPARATOR .'BaseInterface.php';
// HTTPD Docker
//
// Set Docker addresses
//
$DNS_HOST_NAME = 'bind';
$PHP_HOST_NAME = 'php';
$HTTPD_HOST_NAME = 'httpd';
$HTTPD_HOST_ADDR = gethostbyname($HTTPD_HOST_NAME);
// PHP Docker
$PHP_HOST_NAME = 'php';
$PHP_HOST_ADDR = gethostbyname($PHP_HOST_NAME);
// MySQL Docker
$MYSQL_HOST_NAME = 'db';
$MYSQL_HOST_ADDR = gethostbyname($MYSQL_HOST_NAME);
$MYSQL_ROOT_PASS = $ENV['MYSQL_ROOT_PASSWORD'];
// MySQL Connection variables
$MY_MYSQL_ERR = NULL;
$MY_MYSQL_LINK = NULL;
// VirtualHost DNS check
// Temporarily disable due to:
// https://github.com/cytopia/devilbox/issues/8
$ENABLE_VHOST_DNS_CHECK = FALSE;
$MYSQL_HOST_NAME = 'mysql';
$PGSQL_HOST_NAME = 'pgsql';
$REDIS_HOST_NAME = 'redis';
$MEMCD_HOST_NAME = 'memcd';
$MONGO_HOST_NAME = 'mongo';
require $MY_DIR . DIRECTORY_SEPARATOR . 'include' . DIRECTORY_SEPARATOR .'functions.php';
//
// Lazy Container Loader
//
function loadFile($class, $base_path) {
static $_LOADED_FILE;
if (isset($CONNECT) && $CONNECT) {
$MY_MYSQL_LINK = my_mysql_connect($MY_MYSQL_ERR);
}
if (isset($_LOADED_FILE[$class])) {
return;
}
require $base_path . DIRECTORY_SEPARATOR . $class . '.php';
$_LOADED_FILE[$class] = true;
return;
}
function loadClass($class) {
static $_LOADED_LIBS;
if (isset($_LOADED_LIBS[$class])) {
return $_LOADED_LIBS[$class];
} else {
$lib_dir = $GLOBALS['LIB_DIR'];
$cnt_dir = $GLOBALS['LIB_DIR'] . DIRECTORY_SEPARATOR . 'container';
switch($class) {
//
// Lib Classes
//
case 'Logger':
loadFile($class, $lib_dir);
$_LOADED_LIBS[$class] = \devilbox\Logger::getInstance();
break;
case 'Html':
loadFile($class, $lib_dir);
$_LOADED_LIBS[$class] = \devilbox\Html::getInstance();
break;
case 'Helper':
loadFile($class, $lib_dir);
$_LOADED_LIBS[$class] = \devilbox\Helper::getInstance();
break;
//
// Docker Container Classes
//
case 'Php':
loadFile($class, $cnt_dir);
$_LOADED_LIBS[$class] = \devilbox\Php::getInstance($GLOBALS['PHP_HOST_NAME']);
break;
case 'Dns':
loadFile($class, $cnt_dir);
$_LOADED_LIBS[$class] = \devilbox\Dns::getInstance($GLOBALS['DNS_HOST_NAME']);
break;
case 'Httpd':
loadFile($class, $cnt_dir);
$_LOADED_LIBS[$class] = \devilbox\Httpd::getInstance($GLOBALS['HTTPD_HOST_NAME']);
break;
case 'Mysql':
loadFile($class, $cnt_dir);
$_LOADED_LIBS[$class] = \devilbox\Mysql::getInstance($GLOBALS['MYSQL_HOST_NAME'], array(
'user' => 'root',
'pass' => loadClass('Helper')->getEnv('MYSQL_ROOT_PASSWORD')
));
break;
case 'Pgsql':
loadFile($class, $cnt_dir);
$_LOADED_LIBS[$class] = \devilbox\Pgsql::getInstance($GLOBALS['PGSQL_HOST_NAME'], array(
'user' => loadClass('Helper')->getEnv('PGSQL_ROOT_USER'),
'pass' => loadClass('Helper')->getEnv('PGSQL_ROOT_PASSWORD'),
'db' => 'postgres'
));
break;
case 'Redis':
loadFile($class, $cnt_dir);
$_LOADED_LIBS[$class] = \devilbox\Redis::getInstance($GLOBALS['REDIS_HOST_NAME']);
break;
case 'Memcd':
loadFile($class, $cnt_dir);
$_LOADED_LIBS[$class] = \devilbox\Memcd::getInstance($GLOBALS['MEMCD_HOST_NAME']);
break;
case 'Mongo':
loadFile($class, $cnt_dir);
$_LOADED_LIBS[$class] = \devilbox\Mongo::getInstance($GLOBALS['MONGO_HOST_NAME']);
break;
// Get optional docker classes
default:
// Redis
exit('Class does not exist: '.$class);
}
return $_LOADED_LIBS[$class];
}
}

View File

@ -0,0 +1,113 @@
<?php
require '../config.php';
if (loadClass('Helper')->isLoggedIn()) {
//
// ?database=
//
if (isset($_GET['database'])) {
// &type=mysql
if (isset($_GET['type']) && $_GET['type'] == 'mysql') {
echo json_encode(array(
'size' => (string)loadClass('Mysql')->getDBSize($_GET['database']),
'table' => (string)loadClass('Mysql')->getTableCount($_GET['database'])
));
// &type=postgres
} else if (isset($_GET['type']) && $_GET['type'] == 'postgres') {
$schema = isset($_GET['schema']) ? $_GET['schema'] : '';
echo json_encode(array(
'size' => (string)loadClass('Pgsql')->getSchemaSize($_GET['database'], $schema),
'table' => (string)loadClass('Pgsql')->getTableCount($_GET['database'], $schema)
));
}
}
//
// ?vhost=
//
else if (isset($_GET['vhost'])) {
echo loadClass('Httpd')->checkVirtualHost($_GET['vhost']);
}
//
// ?software=
//
else if (isset($_GET['software'])) {
$no = '<span class="text-danger">not installed</span>';
$software = array();
if ($_GET['software'] == 'composer') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getComposerVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'drupalc') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getDrupalConsoleVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'drush') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getDrushVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'git') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getGitVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'laravel') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getLaravelVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'mds') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getMdsVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'node') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getNodeVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'npm') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getNpmVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'phalcon') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getPhalconVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'symfony') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getSymfonyVersion()) !== false) ? $version : $no
));
}
else if ($_GET['software'] == 'wpcli') {
echo json_encode(array(
$_GET['software'] => (($version = loadClass('Php')->getWpcliVersion()) !== false) ? $version : $no
));
} else {
echo json_encode(array($_GET['software'] => 'unknown software'));
}
}
//
// WRONG REQUEST
//
else {
loadClass('Helper')->redirect('/');
}
}
//
// Not logged in
//
else {
loadClass('Helper')->redirect('/');
}

View File

@ -1,11 +0,0 @@
<?php
$CONNECT = TRUE;
require '../config.php';
if (isset($_GET['size'])) {
echo getDBSize($_GET['size']);
} elseif (isset($_GET['table'])) {
echo getTableCount($_GET['table']);
} else {
echo '0';
}

View File

@ -1,8 +0,0 @@
<?php
require '../config.php';
if (isset($_GET['valid'])) {
echo checkVirtualHost($_GET['valid']);
} else {
echo '';
}

View File

@ -1,11 +1,64 @@
.meter {
height: 20px; /* Can be anything */
position: relative;
background: #555;
-moz-border-radius: 25px;
-webkit-border-radius: 25px;
border-radius: 25px;
box-shadow: inset 0 -1px 1px rgba(255,255,255,0.3);
}
.meter > span {
display: block;
height: 100%;
border-top-right-radius: 20px;
border-bottom-right-radius: 20px;
border-top-left-radius: 20px;
border-bottom-left-radius: 20px;
background-color: rgb(43,194,83);
background-image: linear-gradient(
center bottom,
rgb(43,194,83) 37%,
rgb(84,240,84) 69%
);
box-shadow:
inset 0 2px 9px rgba(255,255,255,0.3),
inset 0 -2px 6px rgba(0,0,0,0.4);
position: relative;
overflow: hidden;
}
.dash-box {
border: 1px solid #383737;
background-color: #3d3d3d;
color: #999999;
height:100%;
}
.dash-box-head {
background-color: #383737;
color: #999999;
width:100%;
display: inline-block;
padding:10px;
font-weight: bold;
}
.dash-box-body {
padding:10px;
}
.row-margin {
margin-bottom:20px;
}
.col-margin {
margin-bottom:20px;
}
/* Bootstrap overwrites
-------------------------------------------------- */
html, body {
font-size: 14px;
}
td {
word-break: break-word;
font-size: 14px;
}
@ -18,7 +71,7 @@ html {
}
body {
/* Margin bottom by footer height */
margin-bottom: 80px;
margin-bottom: 80px !important;
}
.footer {
position: absolute;
@ -30,57 +83,64 @@ body {
}
/* Generics
-------------------------------------------------- */
.font-small {
font-size: 12px;
}
/* Circle Box
-------------------------------------------------- */
.circles{
margin:0px auto;
margin:0px auto;
}
.circles > div {
overflow:hidden;
float:left;
width:auto;
height:auto;
position: relative;
border-radius:50%;
-moz-border-radius:50%;
-webkit-border-radius:50%;
-khtml-border-radius: 50%;
background:#eee;
overflow:hidden;
float:left;
width:auto;
height:auto;
position: relative;
border-radius:50%;
-moz-border-radius:50%;
-webkit-border-radius:50%;
-khtml-border-radius: 50%;
background:#eee;
}
.circles > div > div {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.circles > div > div > div {
display: table;
width: 100%;
height: 100%;
display: table;
width: 100%;
height: 100%;
}
.circles > div > div > div > div {
display: table-cell;
text-align: center;
vertical-align: middle;
display: table-cell;
text-align: center;
vertical-align: middle;
}
@media (max-width: 320px)
{
.circles > div {padding: 50%;}
.circles > div {padding: 50%;}
}
@media (min-width: 321px) and (max-width: 800px)
{
.circles > div {padding: 50%;}
.circles > div {padding: 50%;}
}
@media (min-width: 801px)
{
.circles > div {padding: 40%;}
.circles > div {padding: 48%;}
}
@ -90,25 +150,85 @@ body {
a.navbar-brand {
background-color: transparent !important;
}
a.navbar-brand img {
margin-right: 10px;
}
a.nav-link {
background-color: transparent !important;
background-color: transparent !important;
}
img.d-inline-block {
float: none;
float: none;
}
nav.navbar {
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
font-size: 1rem;
line-height: 1.5;
color: #373a3c;
background-color: #fff;
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
font-size: 1rem;
line-height: 1.5;
color: #373a3c;
background-color: #fff;
}
/* mailphp;
/* mail.php;
-------------------------------------------------- */
tr.subject {
cursor: pointer;
}
cursor: pointer;
}
td.break-word {
word-break: break-word;
}
/* adminer.php;
-------------------------------------------------- */
#menu {
position: absolute;
margin: 76px 0 0 !important;
}
#breadcrumb {
top: 60px !important;
}
#lang {
top: 53px !important;
}
.pages {
z-index:1000;
}
/* login.php;
-------------------------------------------------- */
/* Extra markup and styles for table-esque vertical and horizontal centering */
.site-wrapper {
display: table;
width: 100%;
height: 100%; /* For at least Firefox */
min-height: 100%;
-webkit-box-shadow: inset 0 0 5rem rgba(0,0,0,.5);
box-shadow: inset 0 0 5rem rgba(0,0,0,.5);
}
.site-wrapper-inner {
display: table-cell;
vertical-align: top;
}
.cover-container {
margin-right: auto;
margin-left: auto;
}
/* Affix and center */
@media (min-width: 40em) {
/* Start the vertical centering */
.site-wrapper-inner {
vertical-align: middle;
}
}
@media (min-width: 62em) {
.masthead,
.mastfoot,
.cover-container {
width: 32rem;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,12 +1,13 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php $FONT_AWESOME = TRUE; require '../include/head.php'; ?>
<?php echo loadClass('Html')->getHead(true); ?>
</head>
<body>
<?php require '../include/navigation.php'; ?>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
@ -18,7 +19,7 @@
<div class="col-md-6">
<h2>Contributors</h2>
<p>The following people have contributed to the <a href="https://github.com/cytopia/devilbox">Devilbox</a>.</p>
<p>The following people have contributed to the <a href="https://github.com/cytopia/devilbox/graphs/contributors">Devilbox</a>.</p>
<table class="table table-striped ">
<thead class="thead-inverse ">
<tr>
@ -56,6 +57,11 @@
</tr>
</thead>
<tbody>
<tr>
<td>Adminer</td>
<td>Apache License 2.0 or GPL 2</td>
<td><i class="fa fa-github-alt" aria-hidden="true"></i> <a href="https://github.com/vrana/adminer">vrana/adminer</a></td>
</tr>
<tr>
<td>Bootstrap</td>
<td>MIT</td>
@ -87,11 +93,8 @@
</div>
</div><!-- /.container -->
<?php require '../include/footer.php'; ?>
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -1,116 +0,0 @@
<?php $CONNECT = TRUE; require '../config.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php require '../include/head.php'; ?>
</head>
<body>
<?php require '../include/navigation.php'; ?>
<div class="container">
<h1>Databases</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<table class="table table-striped ">
<thead class="thead-inverse ">
<tr>
<th>Name</th>
<th>Charset</th>
<th>Collation</th>
<th>Tables</th>
<th>Size</th>
</th>
</thead>
<tbody>
<?php foreach (getDatabases() as $name => $keys): ?>
<tr>
<td><?php echo $name;?></td>
<td><?php echo $keys['charset'];?></td>
<td><?php echo $keys['collation'];?></td>
<td><code><span class="table" id="table-<?php echo $name;?>">&nbsp;&nbsp;&nbsp;&nbsp;</span></code></td>
<td><code><span class="size" id="size-<?php echo $name;?>">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></code></td>
</tr>
<input type="hidden" name="database[]" class="database" value="<?php echo $name;?>" />
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div><!-- /.container -->
<?php require '../include/footer.php'; ?>
<script>
// self executing function here
(function() {
// your page initialization code here
// the DOM will be available here
function updateSizes(database) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
var fill = '';
var res = '';
var len;
var i;
if (this.readyState == 4 && this.status == 200) {
res = (this.responseText) == 0 ? '0sss MB' : this.responseText+' MB';
len = res.length;
if (len < 9) {
for (i=len; i<9; i++) {
fill = '&nbsp;' + fill;
}
}
res = res.replace('sss', '&nbsp;&nbsp;&nbsp;');
res = fill + res;
document.getElementById('size-' + database).innerHTML = res;
}
};
xhttp.open('GET', '_ajax_db.php?size=' + database, true);
xhttp.send();
}
function updateCount(database) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
var fill = '';
var i;
if (this.readyState == 4 && this.status == 200) {
if (this.responseText.length < 4) {
for (i=this.responseText.length; i<4; i++) {
fill = '&nbsp;' + fill;
}
}
document.getElementById('table-' + database).innerHTML = fill + this.responseText;
}
};
xhttp.open('GET', '_ajax_db.php?table=' + database, true);
xhttp.send();
}
var databases = document.getElementsByName('database[]');
var database;
for (i = 0; i < databases.length; i++) {
database = databases[i].value;
updateSizes(database);
updateCount(database);
}
})();
</script>
</body>
</html>

View File

@ -0,0 +1,49 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>Memcached Keys</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Memcd')->isAvailable()): ?>
<p>Memcached container is not running.</p>
<?php else: ?>
<table class="table table-striped ">
<thead class="thead-inverse ">
<tr>
<th>Key</th>
<th>Value</th>
</th>
</thead>
<tbody>
<?php foreach (loadClass('Memcd')->getKeys() as $data): ?>
<tr>
<td><?php print_r($data['key']);?></td>
<td><?php print_r($data['value']);?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,51 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>MongoDB Databases</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Mongo')->isAvailable()): ?>
<p>MongoDB container is not running.</p>
<?php else: ?>
<table class="table table-striped ">
<thead class="thead-inverse ">
<tr>
<th>Name</th>
<th>Size</th>
<th>Empty</th>
</th>
</thead>
<tbody>
<?php foreach (loadClass('Mongo')->getDatabases() as $db): ?>
<tr>
<td><?php echo $db['name'];?></td>
<td><?php echo round($db['size']/(1024*1024), 2);?> MB</td>
<td><?php echo $db['empty'];?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,114 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<?php
// Also required for JS calls (see bottom of this page)
$len_table = 4;
$len_size = 9;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>MySQL Databases</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Mysql')->isAvailable()): ?>
<p>MySQL container is not running.</p>
<?php else: ?>
<table class="table table-striped ">
<thead class="thead-inverse ">
<tr>
<th>Name</th>
<th>Charset</th>
<th>Collation</th>
<th>Tables</th>
<th>Size</th>
</th>
</thead>
<tbody>
<?php foreach (loadClass('Mysql')->getDatabases() as $name => $keys): ?>
<tr>
<td><?php echo $name;?></td>
<td><?php echo $keys['charset'];?></td>
<td><?php echo $keys['collation'];?></td>
<td><code><span class="table" id="table-<?php echo $name;?>"><?php echo str_repeat('&nbsp;', $len_table);?></span></code></td>
<td><code><span class="size" id="size-<?php echo $name;?>"><?php echo str_repeat('&nbsp;', $len_size);?></span></code></td>
</tr>
<input type="hidden" name="database[]" class="database" value="<?php echo $name;?>" />
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
<script>
// self executing function here
(function() {
// your page initialization code here
// the DOM will be available here
function updateData(database) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
var res = null;
var size = 0;
var tables = 0;
var i;
if (this.readyState == 4 && this.status == 200) {
res = JSON.parse(this.response);
// Normalize size output
size = res.size == 0 ? '0sss MB' : res.size + ' MB';
if (size.length < <?php echo $len_size;?>) {
for (i = size.length; i < <?php echo $len_size;?>; ++i) {
size = '&nbsp;' + size;
}
}
size = size.replace('sss', '&nbsp;&nbsp;&nbsp;');
// Normalize tables output
tables = res.table;
if (tables.length < <?php echo $len_table;?>) {
for (i = tables.length; i < <?php echo $len_table;?>; ++i) {
tables = '&nbsp;' + tables;
}
}
document.getElementById('size-' + database).innerHTML = size;
document.getElementById('table-' + database).innerHTML = tables;
}
};
xhttp.open('GET', '_ajax_callback.php?type=mysql&database=' + database, true);
xhttp.send();
}
var databases = document.getElementsByName('database[]');
var database;
for (i = 0; i < databases.length; i++) {
database = databases[i].value;
updateData(database);
}
})();
</script>
</body>
</html>

View File

@ -0,0 +1,126 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<?php
// Also required for JS calls (see bottom of this page)
$len_table = 4;
$len_size = 9;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>PostgreSQL Databases</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Pgsql')->isAvailable()): ?>
<p>PgSQL container is not running.</p>
<?php else: ?>
<table class="table table-striped ">
<thead class="thead-inverse ">
<tr>
<th>Name</th>
<th>Charset</th>
<th>Collation</th>
<th>Tables</th>
<th>Size</th>
</th>
</thead>
<tbody>
<?php foreach (loadClass('Pgsql')->getDatabases() as $name => $database): ?>
<tr class="table-info">
<th>
<?php echo $name;?>
</th>
<td><?php echo $database['charset'];?></td>
<td><?php echo $database['collation'];?></td>
<td colspan="2"></td>
</tr>
<?php foreach ($database['schemas'] as $schema => $data): ?>
<tr>
<td><?php echo $schema;?></td>
<td colspan="2"></td>
<td><code><span class="table" id="table-<?php echo $name.'-'.$schema;?>"><?php echo str_repeat('&nbsp;', $len_table);?></span></code></td>
<td><code><span class="size" id="size-<?php echo $name.'-'.$schema;?>"><?php echo str_repeat('&nbsp;', $len_size);?></span></code></td>
</tr>
<input type="hidden" name="schema[]" data-database="<?php echo $name;?>" class="schema" value="<?php echo $schema;?>" />
<?php endforeach; ?>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
<script>
// self executing function here
(function() {
// your page initialization code here
// the DOM will be available here
function updateData(database, schema) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
var res = null;
var size = 0;
var tables = 0;
var i;
if (this.readyState == 4 && this.status == 200) {
res = JSON.parse(this.response);
// Normalize size output
size = res.size == 0 ? '0sss MB' : res.size + ' MB';
if (size.length < <?php echo $len_size;?>) {
for (i = size.length; i < <?php echo $len_size;?>; ++i) {
size = '&nbsp;' + size;
}
}
size = size.replace('sss', '&nbsp;&nbsp;&nbsp;');
// Normalize tables output
tables = res.table;
if (tables.length < <?php echo $len_table;?>) {
for (i = tables.length; i < <?php echo $len_table;?>; ++i) {
tables = '&nbsp;' + tables;
}
}
document.getElementById('size-' + database + '-' + schema).innerHTML = size;
document.getElementById('table-' + database + '-' + schema).innerHTML = tables;
}
};
xhttp.open('GET', '_ajax_callback.php?type=postgres&database=' + database + '&schema=' + schema, true);
xhttp.send();
}
var schemas = document.getElementsByName('schema[]');
var schema;
var database;
for (i = 0; i < schemas.length; i++) {
schema = schemas[i].value;
database = schemas[i].getAttribute('data-database');
updateData(database, schema);
}
})();
</script>
</body>
</html>

View File

@ -0,0 +1,49 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>Redis Keys</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Redis')->isAvailable()): ?>
<p>Redis container is not running.</p>
<?php else: ?>
<table class="table table-striped ">
<thead class="thead-inverse ">
<tr>
<th>Key</th>
<th>Value</th>
</th>
</thead>
<tbody>
<?php foreach (loadClass('Redis')->getKeys() as $key => $value): ?>
<tr>
<td><?php echo $key;?></td>
<td><?php print_r($value);?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,68 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>Devilbox Debug</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php $errors = loadClass('Logger')->getAll(); ?>
<?php if ($errors === false): ?>
<p>Writing to logfile is not possible. Errors will be sent as mail instead. Check the mail section.</p>
<?php elseif (count($errors) === 0): ?>
<p>No errors detected.</div>
<?php else: ?>
<?php $total = count($errors); ?>
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th>#</th>
<th>date</th>
<th>Errors (<?php echo $total;?>)</th>
</tr>
</thead>
<tbody>
<?php for ($i=($total-1); $i>=0; --$i): ?>
<tr>
<th><?php echo ($i+1);?></th>
<th><code><?php echo $errors[$i]['date'];?></code></th>
<th><code><?php echo $errors[$i]['head'];?></code></th>
<?php if (isset($errors[$i]['body'])): ?>
</tr>
<tr>
<td colspan="3">
<?php
$dump = implode('', $errors[$i]['body']);
//$dump = str_replace("=&gt;</font> \n", '=&gt;</font>', $dump);
?>
<code><?php echo $dump; ?></code>
</td>
</tr>
<?php endif; ?>
</tr>
<?php endfor; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,28 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>Httpd info</h1>
<br/>
<br/>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<iframe style="width:100%; height:100vh; position:relative;" src="/devilbox-httpd-status" frameborder="0" allowfullscreen></iframe>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,52 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>Memcached Info</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Memcd')->isAvailable()): ?>
<p>Memcahed container is not running.</p>
<?php else: ?>
<?php foreach (loadClass('Memcd')->getInfo() as $srv => $data): ?>
<h2><?php echo $srv; ?></h2>
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach ($data as $key => $val): ?>
<tr>
<td><?php echo $key;?></td>
<td class="break-word"><code><?php echo $val;?></code></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,49 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>MongoDB Info</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Mongo')->isAvailable()): ?>
<p>MongoDB container is not running.</p>
<?php else: ?>
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach (loadClass('Mongo')->getInfo() as $key => $val): ?>
<tr>
<td><?php print_r($key);?></td>
<td class="break-word"><pre><?php print_r($val);?></pre></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,56 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>MySQL Info</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Mysql')->isAvailable()): ?>
<p>MySQL container is not running.</p>
<?php else: ?>
<p>For reference see here:</p>
<ul>
<li><a target="_blank" href="https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html">https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html</a></li>
<li><a target="_blank" href="https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html">https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html</a></li>
<li><a target="_blank" href="https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html">https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html</a></li>
</ul>
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach (loadClass('Mysql')->getConfig() as $key => $val): ?>
<tr>
<td><?php echo $key;?></td>
<td class="break-word"><code><?php echo $val;?></code></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,49 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>PostgreSQL Info</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Pgsql')->isAvailable()): ?>
<p>PgSQL container is not running.</p>
<?php else: ?>
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach (loadClass('Pgsql')->getConfig() as $key => $val): ?>
<tr>
<td><?php echo $key;?></td>
<td class="break-word"><code><?php echo $val;?></code></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,27 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<div class="row">
<div class="col-md-12">
<style>
/* prevent hhvm phpinfo() from shrinking the width */
body {width: 100% !important;}
</style>
<?php phpinfo(); ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,49 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>Redis Info</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<?php if (!loadClass('Redis')->isAvailable()): ?>
<p>Redis container is not running.</p>
<?php else: ?>
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th>Variable</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach (loadClass('Redis')->getInfo() as $key => $val): ?>
<tr>
<td><?php echo $key;?></td>
<td class="break-word"><code><?php echo $val;?></code></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,66 @@
<?php require '../config.php'; ?>
<?php
// If login protection is disabled or user has already logged in
if (loadClass('Helper')->isloggedIn()) {
loadClass('Helper')->redirect('/');
}
// Validate $_POST login
$login_error = '';
if (isset($_POST['username']) && isset($_POST['password'])) {
// Auth successful
if (loadClass('Helper')->login($_POST['username'], $_POST['password'])) {
loadClass('Helper')->redirect('/');
}
$login_error = 'Wrong username or password';
}
?>
<!DOCTYPE html>
<html lang="en" style="height: 100%;min-height: 100%;">
<head>
<?php echo loadClass('Html')->getHead(true); ?>
</head>
<body style="height: 100%; min-height: 100%; text-align: center; color: #fff; text-shadow: 0 .05rem .1rem rgba(0,0,0,.5); background: #1f1f1f; margin-bottom:0 !important;">
<div class="site-wrapper">
<div class="site-wrapper-inner">
<div class="cover-container">
<div class="container">
<div class="inner cover">
<img src="/assets/img/banner.png" style="width:60%; padding-bottom:20px;"/>
<h1 class="cover-heading">Devilbox Login</h1>
<div class="text-danger"><?php echo $login_error; ?></div>
<form method="POST">
<div class="form-group row">
<div class="col-sm-12">
<input type="text" class="form-control" id="inputUsername" placeholder="Username" name="username" value="<?php echo isset($_POST['username']) ? $_POST['username'] : ''; ?>">
</div>
</div>
<div class="form-group row">
<div class="col-sm-12">
<input type="password" class="form-control" id="inputPassword" placeholder="Password" name="password">
</div>
</div>
<div class="form-group row">
<div class="col-sm-12">
<button type="submit" class="btn btn-primary">Sign in</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,11 @@
<?php require '../config.php'; ?>
<?php
if (isset($_GET['id'])) {
if ($_GET['id'] == session_id()) {
loadClass('Helper')->logout();
loadClass('Helper')->redirect('/login.php');
}
}
loadClass('Helper')->redirect('/');

View File

@ -1,39 +1,98 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<?php
require '../config.php';
//
// $_POST submit for sending a test email
//
if (isset($_GET['email']) && isset($_GET['subject']) && isset($_GET['message'])) {
$mail = $_GET['email'];
$subj = $_GET['subject'];
$mess = $_GET['message'];
mail($mail, $subj, $mess);
if (! mail($mail, $subj, $mess)) {
loadClass('Logger')->error('Could not send mail to: '.$mail.' | subject: '.$subj);
}
header('Location: /mail.php');
exit();
}
//
// Includes
//
require $VEN_DIR . DIRECTORY_SEPARATOR . 'Mail' . DIRECTORY_SEPARATOR .'Mbox.php';
require $VEN_DIR . DIRECTORY_SEPARATOR . 'Mail' . DIRECTORY_SEPARATOR .'mimeDecode.php';
require $LIB_DIR . DIRECTORY_SEPARATOR . 'Mail.php';
require $LIB_DIR . DIRECTORY_SEPARATOR . 'Sort.php';
//
// Setup Sort/Order
//
// Sort/Order settings
$defaultSort = array('sort' => 'date', 'order' => 'DESC');
$allowedSorts = array('date', 'subject', 'x-original-to', 'from');
$allowedOrders = array('ASC', 'DESC');
$GET_sortKeys = array('sort' => 'sort', 'order' => 'order');
// Get sort/order
$MySort = new \devilbox\Sort($defaultSort, $allowedSorts, $allowedOrders, $GET_sortKeys);
$sort = $MySort->getSort();
$order = $MySort->getOrder();
// Evaluate Sorters/Orderers
$orderDate = '<a href="/mail.php?sort=date&order=ASC"><i class="fa fa-sort" aria-hidden="true"></i></a>';
$orderFrom = '<a href="/mail.php?sort=from&order=ASC"><i class="fa fa-sort" aria-hidden="true"></i></a>';
$orderTo = '<a href="/mail.php?sort=x-original-to&order=ASC"><i class="fa fa-sort" aria-hidden="true"></i></a>';
$orderSubj = '<a href="/mail.php?sort=subject&order=ASC"><i class="fa fa-sort" aria-hidden="true"></i></a>';
if ($sort == 'date') {
if ($order == 'ASC') {
$orderDate = '<a href="/mail.php?sort=date&order=DESC"><i class="fa fa-sort" aria-hidden="true"></i></a> <i class="fa fa-sort-numeric-asc" aria-hidden="true"></i>';
} else {
$orderDate = '<a href="/mail.php?sort=date&order=ASC"><i class="fa fa-sort" aria-hidden="true"></i></a> <i class="fa fa-sort-numeric-desc" aria-hidden="true"></i> ';
}
} else if ($sort == 'subject') {
if ($order == 'ASC') {
$orderSubj = '<a href="/mail.php?sort=subject&order=DESC"><i class="fa fa-sort" aria-hidden="true"></i></a> <i class="fa fa-sort-alpha-asc" aria-hidden="true"></i>';
} else {
$orderSubj = '<a href="/mail.php?sort=subject&order=ASC"><i class="fa fa-sort" aria-hidden="true"></i></a> <i class="fa fa-sort-alpha-desc" aria-hidden="true"></i>';
}
} else if ($sort == 'x-original-to') {
if ($order == 'ASC') {
$orderTo = '<a href="/mail.php?sort=x-original-to&order=DESC"><i class="fa fa-sort" aria-hidden="true"></i></a> <i class="fa fa-sort-alpha-asc" aria-hidden="true"></i>';
} else {
$orderTo = '<a href="/mail.php?sort=x-original-to&order=ASC"><i class="fa fa-sort" aria-hidden="true"></i></a> <i class="fa fa-sort-alpha-desc" aria-hidden="true"></i>';
}
} else if ($sort == 'from') {
if ($order == 'ASC') {
$orderFrom = '<a href="/mail.php?sort=from&order=DESC"><i class="fa fa-sort" aria-hidden="true"></i></a> <i class="fa fa-sort-alpha-asc" aria-hidden="true"></i>';
} else {
$orderFrom = '<a href="/mail.php?sort=from&order=ASC"><i class="fa fa-sort" aria-hidden="true"></i></a> <i class="fa fa-sort-alpha-desc" aria-hidden="true"></i>';
}
}
//
// Mbox Reader
//
$MyMbox = new \devilbox\Mail('/var/mail/devilbox');
require '../include/vendor/Mail/Mbox.php';
require '../include/vendor/Mail/mimeDecode.php';
$params['include_bodies'] = true;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$params['crlf'] = "\r\n";
$mbox = new Mail_Mbox('/var/mail/mailtrap');
// If default sort is on, use NULL, so we do not have to sort the mails after retrieval,
// because they are being read in the default sort/order anyway
$sortOrderArr = $MySort->isDefault($sort, $order) ? null : array($sort => $order);
$messages = $MyMbox->get($sortOrderArr);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php require '../include/head.php'; ?>
<?php echo loadClass('Html')->getHead(true); ?>
</head>
<body>
<?php require '../include/navigation.php'; ?>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>Mail</h1>
<br/>
<br/>
@ -82,52 +141,68 @@ $mbox = new Mail_Mbox('/var/mail/mailtrap');
</div>
<div class="row">
<div class="col-md-12">
<?php $mbox->open(); ?>
<table class="table table-striped table-hover">
<thead class="thead-inverse">
<tr>
<th>#</th>
<th style="word-break: normal;">Date</th>
<th>To</th>
<th>Subject</th>
<th>Date <?php echo $orderDate;?></th>
<th>From <?php echo $orderFrom;?></th>
<th>To <?php echo $orderTo;?></th>
<th>Subject <?php echo $orderSubj;?></th>
</tr>
</thead>
<tbody>
<?php for ($n = ($mbox->size()-1); $n >= 0; $n--): ?>
<?php foreach ($messages as $data): ?>
<?php
$message = $mbox->get($n);
$decode = new Mail_mimeDecode($message, "\r\n");
$structure = $decode->decode($params);
$message = $data['raw'];
$structure = $data['decoded'];
?>
<tr id="<?php echo $n;?>" class="subject">
<td><?php echo $n;?></td>
<tr id="<?php echo $data['num'];?>" class="subject">
<td><?php echo $data['num'];?></td>
<td>
<?php echo date('H:i', strtotime($structure->headers['date']));?><br/>
<small><?php echo date('Y-m-d', strtotime($structure->headers['date']));?></small>
</td>
<td><?php echo htmlentities($structure->headers['from']);?></td>
<td><?php echo $structure->headers['x-original-to'];?></td>
<td><?php echo $structure->headers['subject'];?></td>
</tr>
<tr></tr>
<tr id="mail-<?php echo $n;?>" style="display:none">
<tr id="mail-<?php echo $data['num'];?>" style="display:none">
<td></td>
<td colspan="3">
<pre><?php echo $message;?></pre>
<td colspan="4">
<?php if (isset($structure->body)): ?>
<?php echo $structure->body ?>
<?php elseif(isset($structure->parts[1]->body)): ?>
<?php echo $structure->parts[1]->body ?>
<?php elseif(isset($structure->parts[0]->body)): ?>
<?php echo htmlentities($structure->parts[0]->body) ?>
<?php else: ?>
<?php echo '<div class="alert alert-warning" role="alert">
No valid body found
</div>' ?>
<?php endif; ?>
<hr>
<p><a class="btn btn-primary" data-toggle="collapse" href="#email-<?php echo $data['num'];?>" aria-expanded="false" aria-controls="email-<?php echo $data['num'];?>">Raw source</a></p>
<div class="collapse" id="email-<?php echo $data['num'];?>"><pre><?php echo $message;?></pre></div>
</td>
</tr>
<?php endfor; ?>
<?php endforeach; ?>
</tbody>
</table>
<?php $mbox->close(); ?>
</div>
</div>
</div><!-- /.container -->
<?php require '../include/footer.php'; ?>
<?php echo loadClass('Html')->getFooter(); ?>
<script>
$(function() {
$('.subject').each(function() {

View File

@ -1,51 +0,0 @@
<?php $CONNECT = TRUE; require '../config.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php require '../include/head.php'; ?>
</head>
<body>
<?php require '../include/navigation.php'; ?>
<div class="container">
<h1>MySQL Info</h1>
<br/>
<br/>
<div class="row">
<div class="col-md-12">
<p>For reference see here:</p>
<ul>
<li><a target="_blank" href="https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html">https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html</a></li>
<li><a target="_blank" href="https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html">https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html</a></li>
<li><a target="_blank" href="https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html">https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html</a></li>
</ul>
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th style="word-break: normal;">Variable</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach (getMySQLConfig() as $key => $val): ?>
<tr>
<td style="word-break: normal;"><?php echo $key;?></td>
<td><?php echo $val;?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div><!-- /.container -->
<?php require '../include/footer.php'; ?>
</body>
</html>

View File

@ -1,4 +1,5 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<?php
/**
@ -230,7 +231,7 @@ $opcache = OpCacheService::init($options);
<!doctype html>
<html>
<head>
<?php require '../include/head.php'; ?>
<?php echo loadClass('Html')->getHead(); /* devilbox edit */ ?>
<meta charset="UTF-8"/>
@ -238,7 +239,7 @@ $opcache = OpCacheService::init($options);
<title>OPcache statistics on <?php echo $opcache->getData('version', 'host'); ?></title>
<script src="/vendor/react/react.min.js"></script>
<script src="/vendor/react/react-dom.min.js"></script>
<script src="/vendor/jquery/jquery-2.2.3.min.js"></script>
<script src="/vendor/jquery/jquery-3.2.1.min.js"></script>
<style type="text/css">
body { font-family:sans-serif; font-size:90%; padding: 0; margin: 0 }
nav { padding-top: 20px; }
@ -321,7 +322,7 @@ $opcache = OpCacheService::init($options);
</head>
<body>
<?php require '../include/navigation.php'; ?>
<?php echo loadClass('Html')->getNavbar(); /* devilbox edit */?>
@ -766,6 +767,6 @@ $opcache = OpCacheService::init($options);
var filesObj = ReactDOM.render(React.createElement(Files, null), document.getElementById('filelist'));
ReactDOM.render(React.createElement(Directives, null), document.getElementById('directives'));
</script>
<?php require '../include/footer.php'; ?>
<?php echo loadClass('Html')->getFooter(); /* devilbox edit */?>
</body>
</html>

View File

@ -1,22 +0,0 @@
<?php require '../config.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php require '../include/head.php'; ?>
</head>
<body>
<?php require '../include/navigation.php'; ?>
<div class="container">
<div class="row">
<div class="col-md-12">
<?php phpinfo(); ?>
</div>
</div>
</div><!-- /.container -->
<?php require '../include/footer.php'; ?>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}html{-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#292b2c;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{cursor:help}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle}[role=button]{cursor:pointer}[role=button],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#636c72;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type=search]{-webkit-appearance:none}output{display:inline-block}[hidden]{display:none!important}/*# sourceMappingURL=bootstrap-reboot.min.css.map */

View File

@ -0,0 +1 @@
{"version":3,"sources":["../../scss/_normalize.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss"],"names":[],"mappings":"4EAYA,KACE,YAAA,WACA,YAAA,KACA,qBAAA,KACA,yBAAA,KAUF,KACE,OAAA,EAOF,QAAA,MAAA,OAAA,OAAA,IAAA,QAME,QAAA,MAQF,GACE,UAAA,IACA,OAAA,MAAA,EAWF,WAAA,OAAA,KAGE,QAAA,MAOF,OACE,OAAA,IAAA,KAQF,GACE,mBAAA,YAAA,WAAA,YACA,OAAA,EACA,SAAA,QAQF,IACE,YAAA,UAAA,UACA,UAAA,IAWF,EACE,iBAAA,YACA,6BAAA,QAQF,SAAA,QAEE,cAAA,EAQF,YACE,cAAA,KACA,gBAAA,UACA,gBAAA,UAAA,OAOF,EAAA,OAEE,YAAA,QAOF,EAAA,OAEE,YAAA,OAQF,KAAA,IAAA,KAGE,YAAA,UAAA,UACA,UAAA,IAOF,IACE,WAAA,OAOF,KACE,iBAAA,KACA,MAAA,KAOF,MACE,UAAA,IAQF,IAAA,IAEE,UAAA,IACA,YAAA,EACA,SAAA,SACA,eAAA,SAGF,IACE,OAAA,OAGF,IACE,IAAA,MAUF,MAAA,MAEE,QAAA,aAOF,sBACE,QAAA,KACA,OAAA,EAOF,IACE,aAAA,KAOF,eACE,SAAA,OAWF,OAAA,MAAA,SAAA,OAAA,SAKE,YAAA,WACA,UAAA,KACA,YAAA,KACA,OAAA,EAQF,OAAA,MAEE,SAAA,QAQF,OAAA,OAEE,eAAA,KASF,aAAA,cAAA,OAAA,mBAIE,mBAAA,OAOF,gCAAA,+BAAA,gCAAA,yBAIE,aAAA,KACA,QAAA,EAOF,6BAAA,4BAAA,6BAAA,sBAIE,QAAA,IAAA,OAAA,WAOF,SACE,OAAA,IAAA,MAAA,OACA,OAAA,EAAA,IACA,QAAA,MAAA,OAAA,MAUF,OACE,mBAAA,WAAA,WAAA,WACA,MAAA,QACA,QAAA,MACA,UAAA,KACA,QAAA,EACA,YAAA,OAQF,SACE,QAAA,aACA,eAAA,SAOF,SACE,SAAA,KCrKF,gBAAA,aD+KE,mBAAA,WAAA,WAAA,WACA,QAAA,EC1KF,yCAAA,yCDmLE,OAAA,KC9KF,cDuLE,mBAAA,UACA,eAAA,KCnLF,4CAAA,yCD4LE,mBAAA,KAQF,6BACE,mBAAA,OACA,KAAA,QAWF,QAAA,KAEE,QAAA,MAOF,QACE,QAAA,UAUF,OACE,QAAA,aAOF,SACE,QAAA,KCnNF,SD8NE,QAAA,KEtbF,KACE,mBAAA,WAAA,WAAA,WAGF,EAAA,QAAA,SAGE,mBAAA,QAAA,WAAA,QAoBA,cAAgB,MAAA,aAQlB,KAYE,mBAAA,UAGA,4BAAA,YAGF,KACE,YAAA,cAAA,UAAA,mBAAA,WAAA,OC2K4H,iBD3K5H,MAAA,WACA,UAAA,KACA,YAAA,IACA,YAAA,IAEA,MAAA,QAEA,iBAAA,KD2LF,sBClLE,QAAA,YAYF,GAAI,GAAI,GAAI,GAAI,GAAI,GAClB,WAAA,EACA,cAAA,MAOF,EACE,WAAA,EACA,cAAA,KAIF,0BAAA,YAGE,OAAA,KAGF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QAGF,GAAA,GAAA,GAGE,WAAA,EACA,cAAA,KAGF,MAAA,MAAA,MAAA,MAIE,cAAA,EAGF,GACE,YAAA,IAGF,GACE,cAAA,MACA,YAAA,EAGF,WACE,OAAA,EAAA,EAAA,KAQF,EACE,MAAA,QACA,gBAAA,KEhJE,QAAA,QFmJA,MAAA,QACA,gBAAA,UAUJ,8BACE,MAAA,QACA,gBAAA,KEhKE,oCAAA,oCFmKA,MAAA,QACA,gBAAA,KANJ,oCAUI,QAAA,EASJ,IAEE,WAAA,EAEA,cAAA,KAEA,SAAA,KAQF,OAGE,OAAA,EAAA,EAAA,KAQF,IAGE,eAAA,ODsIF,cCzHE,OAAA,QAcF,cAAA,EAAA,KAAA,OAAA,MAAA,MAAA,OAAA,QAAA,SASE,iBAAA,aAAA,aAAA,aAQF,MAEE,gBAAA,SAEA,iBAAA,YAGF,QACE,YAAA,OACA,eAAA,OACA,MAAA,QACA,WAAA,KACA,aAAA,OAGF,GAEE,WAAA,KAQF,MAEE,QAAA,aACA,cAAA,MAOF,aACE,QAAA,IAAA,OACA,QAAA,IAAA,KAAA,yBAGF,OAAA,MAAA,OAAA,SAME,YAAA,QAGF,8BAAA,2BAMI,OAAA,YAKJ,iBAAA,iBAAA,2BAAA,kBASE,mBAAA,QAGF,SAEE,OAAA,SAGF,SAME,UAAA,EAEA,QAAA,EACA,OAAA,EACA,OAAA,EAGF,OAEE,QAAA,MACA,MAAA,KACA,QAAA,EACA,cAAA,MACA,UAAA,OACA,YAAA,QAGF,mBAKE,mBAAA,KAIF,OACE,QAAA,aDsEF,SC9DE,QAAA"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,471 @@
phpMyAdmin - ChangeLog
======================
4.0.10.20 (2017-03-28)
- issue #12881 Fix database search when locale is not 'en'
- issue [security] Possible to bypass $cfg['Servers'][$i]['AllowNoPassword'], see PMASA-2017-08
4.0.10.19 (2017-01-23)
- issue [security] Multiple vulnerabilities in setup script, see PMASA-2016-44.
- issue [security] Open redirect, see PMASA-2017-1.
- issue [security] php-gettext code execution, see PMASA-2017-2.
- issue [security] DOS vulnerabiltiy in table editing, see PMASA-2017-3.
- issue [security] CSS injection in themes, see PMASA-2017-4.
- issue [security] SSRF in replication, see PMASA-2017-6.
- issue [security] DOS in replication status, see PMASA-2017-7.
4.0.10.18 (2016-11-24)
- issue #12485 Do not show warning about short blowfish_secret if none is set
- issue [security] Open redirection issue, see PMASA-2016-57
- issue [security] Unsafe generation of $cfg['blowfish_secret'], see PMASA-2016-58
- issue [security] phpMyAdmin's phpinfo functionality is removed, see PMASA-2016-59
- issue [security] AllowRoot and allow/deny rule bypass with specially-crafted username, see PMASA-2016-60
- issue [security] Username matching weaknesses with allow/deny rules, see PMASA-2016-61
- issue [security] Full path disclosure (FPD) weaknesses, see PMASA-2016-63
- issue [security] Multiple cross-site scripting (XSS) weaknesses, see PMASA-2016-64
- issue [security] Multiple denial-of-service (DOS) vulnerabilities, see PMASA-2016-65
- issue [security] Possible to bypass white-list protection for URL redirection, see PMASA-2016-66
- issue [security] Multiple SQL injection vulnerabilities, see PMASA-2016-69
- issue [security] Incorrect serialized string parsing, see PMASA-2016-70
- issue [security] CSRF token not stripped from the URL, see PMASA-2016-71
4.0.10.17 (2016-08-16)
- issue [security] Weaknesses with cookie encryption, see PMASA-2016-29
- issue [security] Improve session cookie code for openid.php and signon.php example files
- issue [security] Full path disclosure in openid.php and signon.php example files
- issue [security] Multiple XSS vulnerabilities, see PMASA-2016-30
- issue [security] Unsafe generation of BlowfishSecret (when not supplied by the user)
- issue [security] Referrer leak when phpinfo is enabled
- issue [security] PHP code injection, see PMASA-2016-32
- issue [security] Full path disclosure, see PMASA-2016-33
- issue [security] SQL injection attack, see PMASA-2016-34
- issue [security] Local file exposure through LOAD DATA LOCAL INFILE, see PMASA-2016-35
- issue [security] Local file exposure through symlinks with UploadDir, see PMASA-2016-36
- issue [security] Path traversal with SaveDir and UploadDir, see PMASA-2016-37
- issue [security] Denial-of-service attack through transformation feature, see PMASA-2016-41
- issue [security] SQL injection vulnerability as control user, see PMASA-2016-42
- issue [security] Verify data before unserializing, see PMASA-2016-43
- issue [security] Use HTTPS for wiki links
- issue Remove Swekey support
- issue [security] Denial-of-service attack with $cfg['AllowArbitraryServer'] = true and persistent connections, see PMASA-2016-45
- issue [security] Improve SSL certificate handling
- issue [security] Fix full path disclosure in debugging code
- issue [security] Possible circumvention of IP-based allow/deny rules with IPv6 and proxy server, see PMASA-2016-47
- issue [security] Detect if user is logged in, see PMASA-2016-48
- issue [security] Bypass URL redirection protection, see PMASA-2016-49
- issue [security] Referrer leak, see PMASA-2016-50
- issue [security] Reflected File Download, see PMASA-2016-51
- issue [security] ArbitraryServerRegexp bypass, see PMASA-2016-52
- issue [security] Denial-of-service attack by entering long password, see PMASA-2016-53
- issue [security] Remote code execution vulnerability when running as CGI, see PMASA-2016-54
- issue [security] Denial-of-service attack when PHP uses dbase extension, see PMASA-2016-55
- issue [security] Remove tode execution vulnerability when PHP uses dbase extension, see PMASA-2016-56
- issue [security] Denial-of-service attack by using for loops, see PMASA-2016-46
4.0.10.16 (2016-06-23)
- issue [security] User SQL queries can be revealed through URL GET parameters, see PMASA-2016-14
- issue [security] Limit list of sites which can be passwd through url.php.
- issue [security] BBCode injection in setup script, see PMASA-2016-17
- issue [security] DOS attack vulnerability, see PMASA-2016-22
- issue [security] Multiple full path disclosure vulnerabilities, see PMASA-2016-26
- issue [security] XSS attack when checking database privileges, see PMASA-2016-21
- issue [security] XSS attack when MySQL server is using a specific payload log_bin directive, see PMASA-2016-26
- issue [security] XSS vulnerabilities in Transformation feature, PMASA-2016-28
4.0.10.15 (2016-02-29)
- issue [security] Multiple XSS vulnerabilities, see PMASA-2016-11.
4.0.10.14 (2016-01-29)
- issue #11891 Error with PMA 4.0.10.13 with PHP 5.2
4.0.10.13 (2016-01-28)
- issue [Security] Multiple full path disclosure vulnerabilities, see PMASA-2016-1
- issue [Security] Unsafe generation of CSRF token, see PMASA-2016-2
- issue [Security] Multiple XSS vulnerabilities, see PMASA-2016-3
- issue [Security] Insecure password generation in JavaScript, see PMASA-2016-4
- issue [Security] Unsafe comparison of CSRF token, see PMASA-2016-5
4.0.10.12 (2015-12-25)
- issue [Security] Path disclosure, see PMASA-2015-6
4.0.10.11 (2015-09-23)
- issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system
4.0.10.10 (2015-05-13)
- bug #4899 [security] CSRF vulnerability in setup
- bug #4900 [security] Vulnerability allowing Man-in-the-middle attack
4.0.10.9 (2015-03-04)
- bug [security] Risk of BREACH attack, see PMASA-2015-1
4.0.10.8 (2015-01-07)
- rfe #1588 recursive function too deep - operator change suggestion
- rfe #1589 support early versions of PHP5.2 (register_shutdown_function)
4.0.10.7 (2014-12-03)
- bug #4611 [security] DOS attack with long passwords
4.0.10.6 (2014-11-20)
- bug #4578 [security] XSS vulnerability in table print view
- bug #4579 [security] XSS vulnerability in zoom search page
- bug #4594 [security] Path traversal in file inclusion of GIS factory
- bug #4598 [security] XSS in multi submit
- bug #4597 [security] XSS through pma_fontsize cookie
4.0.10.5 (2014-10-21)
- bug #4562 [security] XSS in debug SQL output
- bug #4563 [security] XSS in monitor query analyzer
4.0.10.4 (2014-10-01)
- bug #4544 [security] XSS vulnerabilities in table search and table structure pages
4.0.10.3 (2014-09-13)
- bug #4530 [security] DOM based XSS that results to a CSRF that creates a
ROOT account in certain conditions
4.0.10.2 (2014-08-17)
- bug #4501 [security] XSS in table browse page
- bug #4502 [security] Self-XSS in enum value editor
- bug #4503 [security] Self-XSSes in monitor
- bug #4504 [security] Self-XSS in query charts
- bug #4517 [security] XSS in relation view
4.0.10.1 (2014-07-17)
- bug #4488 [security] XSS injection due to unescaped table name (triggers)
- bug #4492 [security] XSS in AJAX confirmation messages
4.0.10.0 (2013-12-04)
- bug #4150 Clicking database name in query window opens a new tab
- bug #4141 Wrong page is shown after editing; also, do not show a modal
dialog for multi-row edit
- bug #3939 PHP NavigationTree error when paging through list
- bug #4075 Support A10 Networks load balancer
- bug #4083 row deleting isn't binlogs friendly
- bug #4163 Setup script does not recognize manually-configured server
- bug #4158 Events page says no privileges with ALL PRIVILEGES
4.0.9.0 (2013-11-04)
- bug #4104 Can't edit updatable view when searching
- bug #4108 Missing refresh by deleting databases
- bug #3995 Drizzle server charset notice
- bug #3911 Filtering database names includes empty groupings
- bug #3678 Does not display or manipulate bit(64) fields appropriately
- bug #4129 Unneeded navi panel refresh
- bug #4120 SSL redirects to port 80
- bug #4144 DROP DATABASE displays wrong database name
- bug #4059 Running delete query asks for confirmation but says it was already executed
- bug #4147 Accessibility: Images without Alt nor title attribute
4.0.8.0 (2013-10-06)
- bug #3988 Rename view is not working
- bug #4041 Interaction between linkified fields and grid editing
- bug #3975 Table grouping isn't implemented properly
- bug #4060 Browser tries to remember wrong password when creating new user
- bug #4002 Edit Index on big table doesn't show "Loading" or any message
- bug #4098 Default table tab is ignored
- bug #4099 Server/library difference warning: setting is ignored
- bug #4100 table tree group strategy
- bug #4102 ALTER TABLE ORDER BY and InnoDB
- bug #4103 Tracking report: cannot delete a statement
- bug #3996 Drizzle navigation doesn't expand
- bug #4074 GIS column editor: point not displayed
- bug #4109 Drizzle tables in navigation are shown as views
- bug #4095 NUL symbols added to the end of database dump file
- bug #4105 More disappears in table Structure
- bug #3992 Multi-row edit doesn't clear values when checking NULL
4.0.7.0 (2013-09-23)
- bug #3993 Sorting in database overview with statistics doesn't work
- bug Handle the situation where PHP_SELF is not set
- bug #4080 Overwrite existing file not obeyed
- bug #3929 Database-specific privileges are not copied when cloning user
- bug #3997 Error handling in case MySQL extension is missing
- bug #4089 Moving Columns will alter column definition
- bug #4091 Insert ignore option does not work
- bug #4090 Downloading BLOB downloads page template
- bug #4092 Clicking on table name in view of information_schema redirects to wrong page
- bug #4079 Copy Table Add AUTO_INCREMENT value checkbox not working
- bug #4088 MySQL server version at index.php incorrect w/ controlhost
- bug #4001 Import error: Class 'ImportOds' not found
- bug #3986 Missing DROP VIEW button
4.0.6.0 (2013-09-05)
- bug #4036 Call to undefined function mb_detect_encoding (clarify the doc)
- bug Missing hints when changing a column's structure
- bug #4048 Cannot select foreign value in Search
- bug #4025 gzip export is not actually compressed with mod_deflate
- bug #4054 query analysis doesn't launch in status monitor
+ Add pmahomme icon credits (FamFamFam silk icon set)
- bug #4064 Table structure statistics "Space usage" caption too small for l10n
- bug #4051 Wrong tabindex when inserting rows
- bug #4066 varchar field not truncated in table browse mode
+ rfe #1435 Opening database should expand it in the navigation menu
- (performance) Removed ShowTooltip directive
- bug #4046 Exporting huge Tables causes memory-Problems
4.0.5.0 (2013-08-04)
- bug #3977 Not detected configuration storage
- bug #3970 Pressing enter in the filter field reloads page
- bug #3984 Cannot insert in this table (PHP < 5.4)
- bug #3989 Reloading privileges does not update the interface
- bug #3960 NavigationBarIconic config not honored
- bug #3985 Call to undefined function mb_detect_encoding
- bug #4007 Analyze option not shown for InnoDB tables
- bug #4015 Forcing a storage engine for configuration storage
- bug Incorrect Drizzle 7 detection
- bug #4019 Create database if not exists (export): add an option to the
interface to enable generating CREATE DATABASE and USE (false by default)
- bug #4012 Crash on CSV file import
- bug #4009 Statistic Monitor shows only last 3 digits in graph
- bug #3998 Non-permanent SQL history not working
- bug #3578 Transformations for text/plain on a BLOB column
- [security] Improved protection against cross framing, see PMASA-2013-10
+ Reinstated configuration directive: AllowThirdPartyFraming
4.0.4.2 (2013-07-28)
- [security] fix unescaped parameter, see PMASA-2013-8
- [security] Fix stored XSS in Server status monitor, see PMASA-2013-9
- [security] Fix stored XSS in navigation panel logo link, see PMASA-2013-9
- [security] Fix self-XSS in setup, trusted proxies validation, see PMASA-2013-9
- [security] Fix full path disclosure, see PMASA-2013-12
- [security] Fix control user SQL injection in pmd_pdf.php, see PMASA-2013-15
- [security] Fix control user SQL injection in schema_export.php, see PMASA-2013-15
- [security] Fix self-XSS in schema export, see PMASA-2013-14
- [security] Fix unencoded json object, see PMASA-2013-11
- [security] Fix stored XSS in link transformation plugin, see PMASA-2013-13
4.0.4.1 (2013-06-30)
- [security] Global variables scope injection vulnerability (see PMASA-2013-7)
4.0.4.0 (2013-06-17)
- bug #3959 Using DefaultTabDatabase in NavigationTree for Database Click
- bug #3961 Avoid Suhosin warning when in simulation mode
- bug #3897 Row Statistics and Space usage bugs
- bug #3966 Only display "table has no unique column" message when applicable
- bug #3965 Default language wrong with zh-TW
- bug #3921 Call to undefined function PMA_isSuperuser() if default server is
not set
- bug #3971 Ctrl/shift + click opens links in same window
- bug #3964 Import using https does not work
- bug Missing removeCRLF option in ExportCsv and ExportExcel plugins
- bug #3631 Drop not working Visio schema export.
- bug #3645 Better handling of invalid ODS documents
- bug #3976 Number of pages
- bug #3922 User privileges, database name unescaped
4.0.3.0 (2013-06-05)
- bug #3941 Recent tables list always empty
- bug #3933 Do not translate "Open Document" in export settings
- bug #3927 List of tables is missing after expanding in the navigation frame
- bug #3942 Warnings about reserved word for many non reserved words
- bug #3912 Exporting row selection, resulted by ORDER BY query
- bug #3957 Cookies must be enabled past this point
- bug #3956 "Browse foreign values" search filter / page selector not working
- bug #3579 NOW() function incorrectly selected (partial regression)
- [security] Javascript execution vulnerability in Create view,
reported by Maxim Rupp (see PMASA-2013-6)
4.0.2.0 (2013-05-24)
- bug #3902 Cannot browse when table name contains keyword "call"
+ center loading indicator for navigation refresh, related to bug #3920
- bug #3925 Table sorting in navigation panel is case-sensitive
- bug #3915 Import of CSV file (Replace table data with file) with duplicate values
- bug #3907 undefined variables, function parameter problems
- bug #3898 Structure not refreshed after column drop
- bug #3926 View is not updatable
- bug #3919 PropertiesIconic not honored
- bug #3930 Databases to choose for specific privileges show up escaped
- bug #3910 Export database with empty table as a php array, does not produce valid PHP
- bug #3936 Query profiler chart not loading from SQL Query page
- bug #3946 Missing CSV import option "Do not abort on INSERT error"
- bug #3943 Missing Operations>Table options>AUTO_INCREMENT
- bug Missing CREATE DATABASE statement when exporting at database level
- bug #3924 Show warning when CSV file does not contain data for all columns
- bug #3947 Missing Sql Query after modify structure
- bug #3948 Server export problems
- bug #3917 CountTables directive is deprecated
4.0.1.0 (2013-05-14)
- bug #3879 Import broken for CSV using LOAD DATA
- bug #3889 When login fails and error display is active, login data is displayed
- bug #3890 [import] Web server upload directory import fails
- bug #3891 [import] Server upload folder import file name missing in success message
+ rfe #1421 [auth] Add retry button on connection failure with config auth
- bug #3894 [interface] Provide feedback if no columns selected for multi-submit
- bug #3799 [interface] Incorrect select field change on ctrl key navigation in Firefox
- bug #3885 [browse] display_binary_as_hex option causes unexpected behavior
- bug #3899 Git commit links to Github missing
- bug #3900 CSP WARN in Firefox console
- bug #3901 Setup script warning for config auth (stored login data) shows link BBcode
- bug #3895 [browse] Fixed getting BLOB data
- bug #3905 [export] Custom Exporting exports all databases
- bug #3909 [import] Import of CSV FIle to selected table doesn't work
- bug #3904 Browsing an empty table should not display its Structure
- bug #3908 Calendar widget improperly redirects to home
- bug #3918 Greyed out tabs when there are no rows fixed
- bug #3916 [interface] Missing scrollbar (original theme)
+ [vendor] add tcpdf path to vendor_config.php
- bug fix compat with tcpdf >= 6.0 (tested with 6.0.012)
4.0.0.0 (2013-05-03)
+ Patch #3481047 for rfe #3480477 Insert as new row enhancement
+ Patch #3480999 Activate codemirror in the query window
- Patch #3495284 XML Import - fix message and redirect
+ rfe #3484063 Null checkbox behavior
+ Patch #3497179 Contest-5: Add user: Allow create DB w/same name + grant u_%
+ Patch #3498201 Contest-6: Export all privileges
+ Patch #3502814 for rfe #3187077 Change password buttons should match
+ rfe #3488640 Expand table-group in non-light navigation frame if only one
+ Patch #3509360 Contest-3: Option "Truncate table" before "insert"
+ Patch #3506552 Contest-2: Show index information in the data dictionary
+ Patch #3510656 Contest-1: Ignoring foreign keys while dropping tables
- Bug #3509686 Reverting sort on joined column does not work
+ New transformation: append string
+ rfe #3507804 Session upload progress (PHP 5.4)
+ rfe #3488185 draggable columns vs copy column name
+ Patch #3507001 Contest-4: Textarea for large character columns
+ Removed the PHP version of the ENUM editor
+ Patch #3507111 Display distinct results, linked to corresponding data rows
- bug #3507917 [export] JSON has unescaped values for allegedly numeric columns
+ rfe #3516187 show tables creation, last update, last check timestamps in db_structure
- bug #3059806 Supporting running from CIFS/Samba shares
- bug #3516341 [export] Open Document Text, Word and Texy! Text show table structure twice
- bug [export] Texy! Text: Columns containing Pipe Character don't export properly
+ [export] Show triggers in Open Document Text, Word and Texy! Text
- Patch #3415061 [auth] Login screen appears under the page
+ rfe #3517354 [interface] Allow disabling CodeMirror with $cfg['CodemirrorEnable'] = false
+ rfe #3475567 [interface] New directive $cfg['HideStructureActions']
- bug #3468272 [import] Fixed import of ODS with more paragraphs in a cell
- bug #3510196 [core] Improved redirecting with ForceSSL option
+ rfe #3518852 [edit] edit blob but not other binary, new option $cfg['ProtectBinary'] = 'noblob'
+ Hide language select box if there are no locales installed
+ Removed some directives: verbose_check, SuggestDBName, LightTabs,
VerboseMultiSubmit, ReplaceHelpImg
- Patch #3500882 Fixing checkbox behaviour while editing identical rows
+ rfe #3441722 [interface] Display description of datatypes
+ rfe #3517835 [structure] Move columns easily
+ Ajaxified "Create View" functionality
+ [import] New plugin: import mediawiki
+ New navigation system
+ Discontinued the use of a frame-based layout
+ rfe #3528994 [interface] Allow wrapping possibly long values in replication-status table
+ [interface] Autoselect username input on cookie login page
- bug #3563799 [interface] Grid editing destroying huge amount of data
+ [import] Remove support for the unactive docSQL import format
- bug #3577443 [edit] "Browse foreign values" does not show on ajax edit
+ rfe #3522109 [browse] Grid editing: action to trigger it (or disable)
- bug #3526598 [interface] SQL query not shown when creating table
+ Dropped configuration directive: AllowThirdPartyFraming
+ Dropped configuration directive: LeftFrameLight
+ Dropped configuration directive: DisplayDatabasesList
+ Dropped configuration directives: ShowTooltipAliasDB and ShowTooltipAliasTB
+ Dropped configuration directive: NaviDatabaseNameColor
+ Added configuration directive: MaxNavigationItems
+ Renamed configuration directive: LeftFrameDBTree => NavigationTreeEnableGrouping
+ Renamed configuration directive: LeftFrameDBSeparator => NavigationTreeDbSeparator
+ Renamed configuration directive: LeftFrameTableSeparator => NavigationTreeTableSeparator
+ Renamed configuration directive: LeftFrameTableLevel => NavigationTreeTableLevel
+ Renamed configuration directive: LeftPointerEnable => NavigationTreePointerEnable
+ Renamed configuration directive: LeftDefaultTabTable => NavigationTreeDefaultTabTable
+ Renamed configuration directive: LeftDisplayTableFilterMinimum => NavigationTreeDisplayTableFilterMinimum
+ Renamed configuration directive: LeftDisplayLogo => NavigationDisplayLogo
+ Renamed configuration directive: LeftLogoLink => NavigationLogoLink
+ Renamed configuration directive: LeftLogoLinkWindow => NavigationLogoLinkWindow
+ Renamed configuration directive: LeftDisplayServers => NavigationDisplayServers
+ Renamed configuration directive: LeftRecentTable => NumRecentTables
+ Renamed configuration directive: LeftDisplayDatabaseFilterMinimum => NavigationTreeDisplayDbFilterMinimum
+ Removed the "Mark row on click" feature; must now click the checkbox to mark
+ Removed the "Synchronize" feature
+ Improved layout of server variables page
+ rfe #1052091 [config] Double-underscores in PMA table names
+ Improved the "More" dropdown on the table structure page
+ [interface] Added "scroll to top" link in menubar
+ [designer] Fullscreen mode for the designer
+ Upgraded jquery to v1.8.3 and jquery-ui to v1.9.2
+ Patch #3597529 [status] Add raw value as title on server status page
+ Support MySQL 5.6 partitioning
+ Removed the AjaxEnable directive
+ rfe #3542567 Accept IPv6 ranges and IPv6 CIDR notations in $cfg['Servers'][$i]['AllowDeny']['rules']
- Bug #3576788 Grid editing shows the value before silent truncation
- Upgraded jqPlot to 1.0.4 r1121
- Upgraded to jquery-ui-timepicker-addon 1.1.1
+ rfe #3599046 [interface] Added comments for indexes
- Replaced qtip with jQuery UI tooltip
- Upgraded CodeMirror to 2.37
- bug #2951 [export] Correctly export decimal fields.
- bug #3762 [core] Make Advisor work on Windows withou COM extension.
- bug #3519 [export] Prevent infinite recursion in PDF export.
- bug #3827 Table specific privileges not displayed for db name containing
underscore
- rfe #1386 Add IF NOT EXISTS clause when copying database
- No longer package .travis.yml configuration file when creating a release.
- bug #3830 Can't export custom query because it lowercases table names
- bug #3829 Enabling query profiling crashes javascript based navigation
+ rfe #879 Reserved word warning
+ Remove the database ordering sub-feature of the only_db directive
- bug #3840 When exporting to gzip format, the data is compressed 2 times
+ rfe #1319 Permit to create index when creating foreign key
- bug #3703 Incorrect updating of the list of users
- bug #3853 Blowfish implementation might be broken (replace with phpseclib)
- bug #3865 Using like operator on each backslash needs 4 backslash protection
- bug #3860 Displayed git revision info is not set
- bug #3871 Check referential integrity broken across databases
- bug #3874 [export] No preselected option when exporting table
- bug #3873 Can't copy table to target database if table exists there
- bug #3683 Incorrect listing of records from to count
- bug #3876 [import] PHP 5.2 - unexpected T_PAAMAYIM_NEKUDOTAYIM
- [security] Local file inclusion vulnerability, reported by Janek Vind
(see PMASA-2013-4)
- [security] Global variables overwrite in export.php, reported by Janek Vind
(see PMASA-2013-5)
- bug #3892 [export] SQL Export files are empty
3.5.8.2 (2013-07-28)
- [security] Fix self-XSS in "Showing rows", see PMASA-2013-8
- [security] Fix self-XSS in Display chart, see PMASA-2013-9
- [security] Fix stored XSS in Server status monitor, see PMASA-2013-9
- [security] Fix stored XSS in navigation panel logo link, see PMASA-2013-9
- [security] Fix self-XSS in setup, trusted proxies validation, see PMASA-2013-9
+ [security] JSON content type header for version_check.php, see PMASA-2013-9
+ [security] Backport fix for jQuery issue #9521 from jQuery 1.6.3, see PMASA-2013-9
+ [security] Fix full path disclosure, see PMASA-2013-12
+ [security] Fix control user SQL injection in pmd_pdf.php, see PMASA-2013-15
+ [security] Fix control user SQL injection in schema_export.php, see PMASA-2013-15
- [security] Fix self-XSS in schema export, see PMASA-2013-14
- [security] Fix unencoded json object, see PMASA-2013-11
3.5.8.1 (2013-04-24)
- [security] Remote code execution (preg_replace), reported by Janek Vind
(see PMASA-2013-2)
- [security] Locally Saved SQL Dump File Multiple File Extension Remote Code
Execution, reported by Janek Vind (see PMASA-2013-3)
3.5.8.0 (2013-04-08)
- bug #3828 MariaDB reported as MySQL
- bug #3854 Incorrect header for Safari 6.0
- bug #3705 Attempt to open trigger for edit gives NULL
- Use HTML5 DOCTYPE
- [security] Self-XSS on GIS visualisation page, reported by Janek Vind
- bug #3800 Incorrect keyhandler behaviour #2
3.5.7.0 (2013-02-15)
- bug #3779 [core] Problem with backslash in enum fields
- bug #3816 Missing server_processlist.php
- bug #3821 Safari: white page
- Correct detection of the Chrome browser
3.5.6.0 (2013-01-28)
- bug #3593604 [status] Erroneous advisor rule
- bug #3596070 [status] localStorage broken in server status monitor
- bug #3598736 [routines] Editing a procedure with special characters
- bug #3600322 [core] Visualize GIS data throws Fatal Error
- bug #3599362 [core] Double-escaped error message
- bug #3776 [cookies] Login without auth on second server
--- Older ChangeLogs can be found on our project website ---
https://www.phpmyadmin.net/old-stuff/ChangeLogs/
# vim: et ts=4 sw=4 sts=4
# vim: ft=changelog fenc=utf-8
# vim: fde=getline(v\:lnum-1)=~'^\\s*$'&&getline(v\:lnum)=~'\\S'?'>1'\:1&&v\:lnum>4&&getline(v\:lnum)!~'^#'
# vim: fdn=1 fdm=expr

View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, 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 Library 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 St, 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 Library General
Public License instead of this License.

View File

@ -0,0 +1,84 @@
phpMyAdmin - Readme
===================
Version 4.0.10.20
A set of PHP-scripts to manage MySQL over the web.
https://www.phpmyadmin.net/
Copyright
---------
Copyright (C) 1998-2000
Tobias Ratschiller <tobias_at_ratschiller.com>
Copyright (C) 2001-2014
Marc Delisle <marc_at_infomarc.info>
Olivier Müller <om_at_omnis.ch>
Robin Johnson <robbat2_at_users.sourceforge.net>
Alexander M. Turek <me_at_derrabus.de>
Michal Čihař <michal_at_cihar.com>
Garvin Hicking <me_at_supergarv.de>
Michael Keck <mkkeck_at_users.sourceforge.net>
Sebastian Mendel <cybot_tm_at_users.sourceforge.net>
[check documentation for more details]
License
-------
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License version 2, as published by the
Free Software Foundation.
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, see <http://www.gnu.org/licenses/>.
Requirements
------------
* PHP 5.2 or later
* MySQL 5.0 or later
* a web-browser (doh!)
Summary
-------
phpMyAdmin is intended to handle the administration of MySQL over the web.
For a summary of features, please see the documentation in the doc folder.
Download
--------
You can get the newest version at https://www.phpmyadmin.net/.
More Information
----------------
Please see the documentation in the doc folder.
Support
-------
See reference about support forums under https://www.phpmyadmin.net/
Enjoy!
------
The phpMyAdmin Devel team
PS:
Please, don't send us emails with question like "How do I compile PHP with
MySQL-support". We just don't have the time to be your free help desk.
Please send your questions to the appropriate mailing lists / forums. Before
contacting us, please read the documentation (especially the FAQ part).

View File

@ -0,0 +1 @@
Wed Mar 29 01:02:30 UTC 2017

View File

@ -0,0 +1,347 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* display selection for relational field values
*
* @package PhpMyAdmin
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/transformations.lib.php';
/**
* Sets globals from $_REQUEST
*/
$request_params = array(
'field',
'fieldkey',
'foreign_filter',
'pos',
'rownumber'
);
foreach ($request_params as $one_request_param) {
if (isset($_REQUEST[$one_request_param])) {
$GLOBALS[$one_request_param] = $_REQUEST[$one_request_param];
}
}
PMA_Util::checkParameters(array('db', 'table', 'field'));
$response = PMA_Response::getInstance();
$response->getFooter()->setMinimal();
$header = $response->getHeader();
$header->disableMenu();
$header->setBodyId('body_browse_foreigners');
/**
* Displays the frame
*/
$cfgRelation = PMA_getRelationsParam();
$foreigners = ($cfgRelation['relwork'] ? PMA_getForeigners($db, $table) : false);
$override_total = true;
if (! isset($pos)) {
$pos = 0;
}
$foreign_limit = 'LIMIT ' . $pos . ', ' . $GLOBALS['cfg']['MaxRows'] . ' ';
if (isset($foreign_navig) && $foreign_navig == __('Show all')) {
unset($foreign_limit);
}
$foreignData = PMA_getForeignData(
$foreigners, $field, $override_total,
isset($foreign_filter) ? $foreign_filter : '', $foreign_limit
);
if (isset($rownumber)) {
$rownumber_param = '&amp;rownumber=' . urlencode($rownumber);
} else {
$rownumber_param = '';
}
$gotopage = '';
$showall = '';
if (is_array($foreignData['disp_row'])) {
if ($cfg['ShowAll']
&& ($foreignData['the_total'] > $GLOBALS['cfg']['MaxRows'])
) {
$showall = '<input type="submit" name="foreign_navig" value="'
. __('Show all') . '" />';
}
$session_max_rows = $GLOBALS['cfg']['MaxRows'];
$pageNow = @floor($pos / $session_max_rows) + 1;
$nbTotalPage = @ceil($foreignData['the_total'] / $session_max_rows);
if ($foreignData['the_total'] > $GLOBALS['cfg']['MaxRows']) {
$gotopage = PMA_Util::pageselector(
'pos',
$session_max_rows,
$pageNow,
$nbTotalPage,
200,
5,
5,
20,
10,
__('Page number:')
);
}
}
// When coming from Table/Zoom search
if (isset($_REQUEST['fromsearch'])) {
// In table or zoom search, input fields are named "criteriaValues"
$element_name = " var field = 'criteriaValues';\n";
} else {
// In insert/edit, input fields are named "fields"
$element_name = " var field = 'fields';\n";
}
if (isset($rownumber)) {
$element_name .= " var element_name = field + '[multi_edit]["
. htmlspecialchars($rownumber) . "][' + fieldmd5 + ']';\n"
. " var null_name = field_null + '[multi_edit]["
. htmlspecialchars($rownumber) . "][' + fieldmd5 + ']';\n";
} else {
$element_name .= "var element_name = field + '[]'";
}
$error = PMA_jsFormat(
__(
'The target browser window could not be updated. '
. 'Maybe you have closed the parent window, or '
. 'your browser\'s security settings are '
. 'configured to block cross-window updates.'
)
);
if (! isset($fieldkey) || ! is_numeric($fieldkey)) {
$fieldkey = 0;
}
$code = <<<EOC
self.focus();
function formupdate(fieldmd5, key) {
var \$inline = window.opener.jQuery('.browse_foreign_clicked');
if (\$inline.length != 0) {
\$inline.removeClass('browse_foreign_clicked')
// for grid editing,
// puts new value in the previous element which is
// a span with class curr_value, and trigger .change()
.prev('.curr_value').text(key).change();
// for zoom-search editing, puts new value in the previous
// element which is an input field
\$inline.prev('input[type=text]').val(key);
self.close();
return false;
}
if (opener && opener.document && opener.document.insertForm) {
var field = 'fields';
var field_null = 'fields_null';
$element_name
var element_name_alt = field + '[$fieldkey]';
if (opener.document.insertForm.elements[element_name]) {
// Edit/Insert form
opener.document.insertForm.elements[element_name].value = key;
if (opener.document.insertForm.elements[null_name]) {
opener.document.insertForm.elements[null_name].checked = false;
}
self.close();
return false;
} else if (opener.document.insertForm.elements[element_name_alt]) {
// Search form
opener.document.insertForm.elements[element_name_alt].value = key;
self.close();
return false;
}
}
alert('$error');
}
EOC;
$header->getScripts()->addCode($code);
// HTML output
$output = '<form action="browse_foreigners.php" method="post">'
. '<fieldset>'
. PMA_generate_common_hidden_inputs($db, $table)
. '<input type="hidden" name="field" value="' . htmlspecialchars($field) . '" />'
. '<input type="hidden" name="fieldkey" value="'
. (isset($fieldkey) ? htmlspecialchars($fieldkey) : '') . '" />';
if (isset($rownumber)) {
$output .= '<input type="hidden" name="rownumber" value="'
. htmlspecialchars($rownumber) . '" />';
}
$output .= '<span class="formelement">'
. '<label for="input_foreign_filter">' . __('Search') . ':' . '</label>'
. '<input type="text" name="foreign_filter" id="input_foreign_filter" value="'
. (isset($foreign_filter) ? htmlspecialchars($foreign_filter) : '') . '" />'
. '<input type="submit" name="submit_foreign_filter" value="'
. __('Go') . '" />'
. '</span>'
. '<span class="formelement">' . $gotopage . '</span>'
. '<span class="formelement">' . $showall . '</span>'
. '</fieldset>'
. '</form>';
$output .= '<table width="100%">';
if (is_array($foreignData['disp_row'])) {
$header = '<tr>
<th>' . __('Keyname') . '</th>
<th>' . __('Description') . '</th>
<td width="20%"></td>
<th>' . __('Description') . '</th>
<th>' . __('Keyname') . '</th>
</tr>';
$output .= '<thead>' . $header . '</thead>' . "\n"
. '<tfoot>' . $header . '</tfoot>' . "\n"
. '<tbody>' . "\n";
$values = array();
$keys = array();
foreach ($foreignData['disp_row'] as $relrow) {
if ($foreignData['foreign_display'] != false) {
$values[] = $relrow[$foreignData['foreign_display']];
} else {
$values[] = '';
}
$keys[] = $relrow[$foreignData['foreign_field']];
}
asort($keys);
$hcount = 0;
$odd_row = true;
$val_ordered_current_row = 0;
$val_ordered_current_equals_data = false;
$key_ordered_current_equals_data = false;
foreach ($keys as $key_ordered_current_row => $value) {
$hcount++;
if ($cfg['RepeatCells'] > 0 && $hcount > $cfg['RepeatCells']) {
$output .= $header;
$hcount = 0;
$odd_row = true;
}
$key_ordered_current_key = $keys[$key_ordered_current_row];
$key_ordered_current_val = $values[$key_ordered_current_row];
$val_ordered_current_key = $keys[$val_ordered_current_row];
$val_ordered_current_val = $values[$val_ordered_current_row];
$val_ordered_current_row++;
if (PMA_strlen($val_ordered_current_val) <= $cfg['LimitChars']) {
$val_ordered_current_val = htmlspecialchars(
$val_ordered_current_val
);
$val_ordered_current_val_title = '';
} else {
$val_ordered_current_val_title = htmlspecialchars(
$val_ordered_current_val
);
$val_ordered_current_val = htmlspecialchars(
PMA_substr($val_ordered_current_val, 0, $cfg['LimitChars'])
. '...'
);
}
if (PMA_strlen($key_ordered_current_val) <= $cfg['LimitChars']) {
$key_ordered_current_val = htmlspecialchars(
$key_ordered_current_val
);
$key_ordered_current_val_title = '';
} else {
$key_ordered_current_val_title = htmlspecialchars(
$key_ordered_current_val
);
$key_ordered_current_val = htmlspecialchars(
PMA_substr(
$key_ordered_current_val, 0, $cfg['LimitChars']
) . '...'
);
}
if (! empty($data)) {
$val_ordered_current_equals_data = $val_ordered_current_key == $data;
$key_ordered_current_equals_data = $key_ordered_current_key == $data;
}
$output .= '<tr class="noclick ' . ($odd_row ? 'odd' : 'even') . '">';
$odd_row = ! $odd_row;
$output .= '<td class="nowrap">'
. ($key_ordered_current_equals_data ? '<strong>' : '')
. '<a href="#" title="' . __('Use this value')
. ($key_ordered_current_val_title != ''
? ': ' . $key_ordered_current_val_title
: '') . '"'
. ' onclick="formupdate(\'' . md5($field) . '\', \''
. PMA_jsFormat($key_ordered_current_key, false) . '\'); return false;">'
. htmlspecialchars($key_ordered_current_key)
. '</a>' . ($key_ordered_current_equals_data ? '</strong>' : '')
. '</td>';
$output .= '<td>'
. ($key_ordered_current_equals_data ? '<strong>' : '')
. '<a href="#" title="' . __('Use this value')
. ($key_ordered_current_val_title != '' ? ': '
. $key_ordered_current_val_title : '') . '" onclick="formupdate(\''
. md5($field) . '\', \''
. PMA_jsFormat($key_ordered_current_key, false)
. '\'); return false;">'
. $key_ordered_current_val . '</a>'
. ($key_ordered_current_equals_data ? '</strong>' : '')
. '</td>';
$output .= '<td width="20%">'
. '<img src="' . $GLOBALS['pmaThemeImage'] . 'spacer.png" alt=""'
. ' width="1" height="1" /></td>';
$output .= '<td>'
. ($val_ordered_current_equals_data ? '<strong>' : '')
. '<a href="#" title="' . __('Use this value')
. ($val_ordered_current_val_title != '' ? ': '
. $val_ordered_current_val_title : '') . '" onclick="formupdate(\''
. md5($field) . '\', \''
. PMA_jsFormat($val_ordered_current_key, false)
. '\'); return false;">'
. $val_ordered_current_val . '</a>'
. ($val_ordered_current_equals_data ? '</strong>' : '')
. '</td>';
$output .= '<td class="nowrap">'
. ($val_ordered_current_equals_data ? '<strong>' : '')
. '<a href="#" title="' . __('Use this value')
. ($val_ordered_current_val_title != ''
? ': ' . $val_ordered_current_val_title : '')
. '" onclick="formupdate(\'' . md5($field) . '\', \''
. PMA_jsFormat($val_ordered_current_key, false) . '\'); return false;">'
. htmlspecialchars($val_ordered_current_key)
. '</a>' . ($val_ordered_current_equals_data ? '</strong>' : '')
. '</td>';
$output .= '</tr>';
} // end while
}
$output .= '</tbody>'
. '</table>';
$response->addHtml($output);
?>

View File

@ -0,0 +1,153 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Simple script to set correct charset for changelog
*
* @package PhpMyAdmin
*/
/**
* Gets core libraries and defines some variables
*/
require 'libraries/common.inc.php';
$response = PMA_Response::getInstance();
$response->disable();
$filename = CHANGELOG_FILE;
/**
* Read changelog.
*/
// Check if the file is available, some distributions remove these.
if (is_readable($filename)) {
// Test if the if is in a compressed format
if (substr($filename, -3) == '.gz') {
ob_start();
readgzfile($filename);
$changelog = ob_get_contents();
ob_end_clean();
} else {
$changelog = file_get_contents($filename);
}
} else {
printf(
__('The %s file is not available on this system, please visit www.phpmyadmin.net for more information.'),
$filename
);
exit;
}
/**
* Whole changelog in variable.
*/
$changelog = htmlspecialchars($changelog);
$tracker_url = 'https://sourceforge.net/support/tracker.php?aid=\\1';
$tracker_url_bug = 'https://sourceforge.net/p/phpmyadmin/bugs/\\1/';
$tracker_url_rfe = 'https://sourceforge.net/p/phpmyadmin/feature-requests/\\1/';
$tracker_url_patch = 'https://sourceforge.net/p/phpmyadmin/patches/\\1/';
$github_url = 'https://github.com/phpmyadmin/phpmyadmin/';
$replaces = array(
'@(http://[./a-zA-Z0-9.-_-]*[/a-zA-Z0-9_])@'
=> '<a href="./url.php?url=\\1">\\1</a>',
// sourceforge users
'/([0-9]{4}-[0-9]{2}-[0-9]{2}) (.+[^ ]) +&lt;(.*)@users.sourceforge.net&gt;/i'
=> '\\1 <a href="./url.php?url=https://sourceforge.net/users/\\3/">\\2</a>',
'/thanks to ([^\(\r\n]+) \(([-\w]+)\)/i'
=> 'thanks to <a href="./url.php?url=https://sourceforge.net/users/\\2/">\\1</a>',
'/thanks to ([^\(\r\n]+) -\s+([-\w]+)/i'
=> 'thanks to <a href="./url.php?url=https://sourceforge.net/users/\\2/">\\1</a>',
// mail address
'/([0-9]{4}-[0-9]{2}-[0-9]{2}) (.+[^ ]) +&lt;(.*@.*)&gt;/i'
=> '\\1 <a href="mailto:\\3">\\2</a>',
// linking patches
'/patch\s*#?([0-9]{6,})/i'
=> '<a href="./url.php?url=' . $tracker_url . '">patch #\\1</a>',
// linking RFE
'/(?:rfe|feature)\s*#?([0-9]{6,})/i'
=> '<a href="./url.php?url=https://sourceforge.net/support/tracker.php?aid=\\1">RFE #\\1</a>',
// linking files
'/(\s+)([\\/a-z_0-9\.]+\.(?:php3?|html|pl|js|sh))/i'
=> '\\1<a href="./url.php?url=' . $github_url . 'commits/HEAD/\\2">\\2</a>',
// FAQ entries
'/FAQ ([0-9]+)\.([0-9a-z]+)/i'
=> '<a href="./url.php?url=https://docs.phpmyadmin.net/en/latest/faq.html#faq\\1-\\2">FAQ \\1.\\2</a>',
// linking bugs
'/bug\s*#?([0-9]{6,})/i'
=> '<a href="./url.php?url=https://sourceforge.net/support/tracker.php?aid=\\1">bug #\\1</a>',
// all other 6+ digit numbers are treated as bugs
'/(?<!bug|RFE|patch) #?([0-9]{6,})/i'
=> '<a href="./url.php?url=' . $tracker_url . '">bug #\\1</a>',
// transitioned SF.net project bug/rfe/patch links
// by the time we reach 6-digit numbers, we can probably retire the above links
'/patch\s*#?([0-9]{4,5}) /i'
=> '<a href="./url.php?url=' . $tracker_url_patch . '">patch #\\1</a> ',
'/(?:rfe|feature)\s*#?([0-9]{4,5}) /i'
=> '<a href="./url.php?url=' . $tracker_url_rfe . '">RFE #\\1</a> ',
'/bug\s*#?([0-9]{4,5}) /i'
=> '<a href="./url.php?url=' . $tracker_url_bug . '">bug #\\1</a> ',
'/(?<!bug|RFE|patch) #?([0-9]{4,5}) /i'
=> '<a href="./url.php?url=' . $tracker_url_bug . '">bug #\\1</a> ',
// CVE/CAN entries
'/((CAN|CVE)-[0-9]+-[0-9]+)/'
=> '<a href="./url.php?url=http://cve.mitre.org/cgi-bin/cvename.cgi?name=\\1">\\1</a>',
// PMASAentries
'/(PMASA-[0-9]+-[0-9]+)/'
=> '<a href="./url.php?url=https://www.phpmyadmin.net/security/\\1/">\\1</a>',
// Highlight releases (with links)
'/([0-9]+)\.([0-9]+)\.([0-9]+)\.0 (\([0-9-]+\))/'
=> '<a name="\\1_\\2_\\3"></a>'
. '<a href="./url.php?url=' . $github_url . 'commits/RELEASE_\\1_\\2_\\3">'
. '\\1.\\2.\\3.0 \\4</a>',
'/([0-9]+)\.([0-9]+)\.([0-9]+)\.([1-9][0-9]*) (\([0-9-]+\))/'
=> '<a name="\\1_\\2_\\3_\\4"></a>'
. '<a href="./url.php?url=' . $github_url . 'commits/RELEASE_\\1_\\2_\\3_\\4">'
. '\\1.\\2.\\3.\\4 \\5</a>',
// Highlight releases (not linkable)
'/( ### )(.*)/'
=> '\\1<b>\\2</b>',
);
header('Content-type: text/html; charset=utf-8');
?>
<!DOCTYPE HTML>
<html lang="en" dir="ltr">
<head>
<link rel="icon" href="favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<title>phpMyAdmin - ChangeLog</title>
<meta charset="utf-8" />
</head>
<body>
<h1>phpMyAdmin - ChangeLog</h1>
<?php
echo '<pre>';
echo preg_replace(array_keys($replaces), $replaces, $changelog);
echo '</pre>';
?>
<script type="text/javascript">
var links = document.getElementsByTagName("a");
for(var i = 0; i < links.length; i++) {
links[i].target = "_blank";
links[i].rel = "noopener noreferrer";
}
</script>
</body>
</html>

View File

@ -0,0 +1,15 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Displays status of phpMyAdmin configuration storage
*
* @package PhpMyAdmin
*/
require_once 'libraries/common.inc.php';
$response = PMA_Response::getInstance();
$response->addHTML(
PMA_getRelationsParamDiagnostic(PMA_getRelationsParam())
);
?>

View File

@ -0,0 +1,29 @@
{
"name": "phpmyadmin/phpmyadmin",
"type": "application",
"description": "MySQL web administration tool",
"keywords": ["phpmyadmin","mysql","web"],
"homepage": "https://www.phpmyadmin.net/",
"license": "GPL-2.0+",
"authors": [
{
"name": "The phpMyAdmin Team",
"email": "phpmyadmin-devel@lists.sourceforge.net",
"homepage": "https://www.phpmyadmin.net/team/"
}
],
"support": {
"forum": "https://sourceforge.net/p/phpmyadmin/discussion/Help",
"issues": "https://sourceforge.net/p/phpmyadmin/bugs/",
"wiki": "https://wiki.phpmyadmin.net/",
"source": "https://github.com/phpmyadmin/phpmyadmin"
},
"require": {
"php": ">=5.2.0"
},
"require-dev": {
"satooshi/php-coveralls": ">=0.6",
"phpunit/phpunit": "<4.2",
"phpunit/phpunit-selenium": ">=1.2"
}
}

View File

@ -0,0 +1,139 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* phpMyAdmin sample configuration, you can use it as base for
* manual configuration. For easier setup you can use setup/
*
* All directives are explained in documentation in the doc/ folder
* or at <https://docs.phpmyadmin.net/>.
*
* @package PhpMyAdmin
*/
/**
* This is needed for cookie based authentication to encrypt password in
* cookie. Needs to be 32 chars long.
*/
$cfg['blowfish_secret'] = 'GObO60^(04#^5637%fdUGo(*6$%6#dy4'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
/**
* Servers configuration
*/
$i = 0;
/**
* First server
*/
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'mysql';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = TRUE;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
/**
* phpMyAdmin configuration storage settings.
*/
/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';
/* Storage database and tables */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
// $cfg['Servers'][$i]['relation'] = 'pma__relation';
// $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
// $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
// $cfg['Servers'][$i]['history'] = 'pma__history';
// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
// $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
// $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
// $cfg['Servers'][$i]['recent'] = 'pma__recent';
/**
* End of servers configuration
*/
/**
* Directories for saving/loading files from server
*/
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
/**
* Defines whether a user should be displayed a "show all (records)"
* button in browse mode or not.
* default = false
*/
//$cfg['ShowAll'] = true;
/**
* Number of rows displayed when browsing a result set. If the result
* set contains more rows, "Previous" and "Next".
* Possible values: 25, 50, 100, 250, 500
* default = 25
*/
//$cfg['MaxRows'] = 50;
/**
* Disallow editing of binary fields
* valid values are:
* false allow editing
* 'blob' allow editing except for BLOB fields
* 'noblob' disallow editing except for BLOB fields
* 'all' disallow editing
* default = 'blob'
*/
//$cfg['ProtectBinary'] = false;
/**
* Default language to use, if not browser-defined or user-defined
* (you find all languages in the locale folder)
* uncomment the desired line:
* default = 'en'
*/
//$cfg['DefaultLang'] = 'en';
//$cfg['DefaultLang'] = 'de';
/**
* default display direction (horizontal|vertical|horizontalflipped)
*/
//$cfg['DefaultDisplay'] = 'vertical';
/**
* How many columns should be used for table display of a database?
* (a value larger than 1 results in some information being hidden)
* default = 1
*/
//$cfg['PropertiesNumColumns'] = 2;
/**
* Set to true if you want DB-based query history.If false, this utilizes
* JS-routines to display query history (lost by window close)
*
* This requires configuration storage enabled, see above.
* default = false
*/
//$cfg['QueryHistoryDB'] = true;
/**
* When using DB-based query history, how many entries should be kept?
* default = 25
*/
//$cfg['QueryHistoryMax'] = 100;
/*
* You can find more configuration options in the documentation
* in the doc/ folder or at <https://docs.phpmyadmin.net/>.
*/
?>

View File

@ -0,0 +1,139 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* phpMyAdmin sample configuration, you can use it as base for
* manual configuration. For easier setup you can use setup/
*
* All directives are explained in documentation in the doc/ folder
* or at <https://docs.phpmyadmin.net/>.
*
* @package PhpMyAdmin
*/
/*
* This is needed for cookie based authentication to encrypt password in
* cookie. Needs to be 32 chars long.
*/
$cfg['blowfish_secret'] = 'a8b7c6d'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
/*
* Servers configuration
*/
$i = 0;
/*
* First server
*/
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
/*
* phpMyAdmin configuration storage settings.
*/
/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';
/* Storage database and tables */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
// $cfg['Servers'][$i]['relation'] = 'pma__relation';
// $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
// $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
// $cfg['Servers'][$i]['history'] = 'pma__history';
// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
// $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
// $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
// $cfg['Servers'][$i]['recent'] = 'pma__recent';
/*
* End of servers configuration
*/
/*
* Directories for saving/loading files from server
*/
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
/**
* Defines whether a user should be displayed a "show all (records)"
* button in browse mode or not.
* default = false
*/
//$cfg['ShowAll'] = true;
/**
* Number of rows displayed when browsing a result set. If the result
* set contains more rows, "Previous" and "Next".
* default = 30
*/
//$cfg['MaxRows'] = 50;
/**
* disallow editing of binary fields
* valid values are:
* false allow editing
* 'blob' allow editing except for BLOB fields
* 'noblob' disallow editing except for BLOB fields
* 'all' disallow editing
* default = blob
*/
//$cfg['ProtectBinary'] = 'false';
/**
* Default language to use, if not browser-defined or user-defined
* (you find all languages in the locale folder)
* uncomment the desired line:
* default = 'en'
*/
//$cfg['DefaultLang'] = 'en';
//$cfg['DefaultLang'] = 'de';
/**
* default display direction (horizontal|vertical|horizontalflipped)
*/
//$cfg['DefaultDisplay'] = 'vertical';
/**
* How many columns should be used for table display of a database?
* (a value larger than 1 results in some information being hidden)
* default = 1
*/
//$cfg['PropertiesNumColumns'] = 2;
/**
* Set to true if you want DB-based query history.If false, this utilizes
* JS-routines to display query history (lost by window close)
*
* This requires configuration storage enabled, see above.
* default = false
*/
//$cfg['QueryHistoryDB'] = true;
/**
* When using DB-based query history, how many entries should be kept?
*
* default = 25
*/
//$cfg['QueryHistoryMax'] = 100;
/*
* You can find more configuration options in the documentation
* in the doc/ folder or at <https://docs.phpmyadmin.net/>.
*/
?>

View File

@ -0,0 +1,148 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin
*/
/**
* Gets some core libraries
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/mysql_charsets.lib.php';
if (! PMA_DRIZZLE) {
include_once 'libraries/replication.inc.php';
}
require 'libraries/build_html_for_db.lib.php';
/**
* Sets globals from $_POST
*/
$post_params = array(
'db_collation',
'new_db'
);
foreach ($post_params as $one_post_param) {
if (isset($_POST[$one_post_param])) {
$GLOBALS[$one_post_param] = $_POST[$one_post_param];
}
}
PMA_Util::checkParameters(array('new_db'));
/**
* Defines the url to return to in case of error in a sql statement
*/
$err_url = 'index.php?' . PMA_generate_common_url();
/**
* Builds and executes the db creation sql query
*/
$sql_query = 'CREATE DATABASE ' . PMA_Util::backquote($new_db);
if (! empty($db_collation)) {
list($db_charset) = explode('_', $db_collation);
if (in_array($db_charset, $mysql_charsets)
&& in_array($db_collation, $mysql_collations[$db_charset])
) {
$sql_query .= ' DEFAULT' . PMA_generateCharsetQueryPart($db_collation);
}
$db_collation_for_ajax = $db_collation;
unset($db_charset, $db_collation);
}
$sql_query .= ';';
$result = PMA_DBI_try_query($sql_query);
if (! $result) {
$message = PMA_Message::rawError(PMA_DBI_getError());
// avoid displaying the not-created db name in header or navi panel
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
/**
* If in an Ajax request, just display the message with {@link PMA_Response}
*/
if ($GLOBALS['is_ajax_request'] == true) {
$response = PMA_Response::getInstance();
$response->isSuccess(false);
$response->addJSON('message', $message);
} else {
include_once 'index.php';
}
} else {
$message = PMA_Message::success(__('Database %1$s has been created.'));
$message->addParam($new_db);
$GLOBALS['db'] = $new_db;
/**
* If in an Ajax request, build the output and send it
*/
if ($GLOBALS['is_ajax_request'] == true) {
//Construct the html for the new database, so that it can be appended to
// the list of databases on server_databases.php
/**
* Build the array to be passed to {@link PMA_generate_common_url}
* to generate the links
*
* @global array $GLOBALS['db_url_params']
* @name $db_url_params
*/
$db_url_params['db'] = $new_db;
$is_superuser = PMA_isSuperuser();
$column_order = PMA_getColumnOrder();
$url_query = PMA_generate_common_url($new_db);
/**
* String that will contain the output HTML
* @name $new_db_string
*/
$new_db_string = '<tr>';
if (empty($db_collation_for_ajax)) {
$db_collation_for_ajax = PMA_getServerCollation();
}
// $dbstats comes from the create table dialog
if (! empty($dbstats)) {
$current = array(
'SCHEMA_NAME' => $new_db,
'DEFAULT_COLLATION_NAME' => $db_collation_for_ajax,
'SCHEMA_TABLES' => '0',
'SCHEMA_TABLE_ROWS' => '0',
'SCHEMA_DATA_LENGTH' => '0',
'SCHEMA_MAX_DATA_LENGTH' => '0',
'SCHEMA_INDEX_LENGTH' => '0',
'SCHEMA_LENGTH' => '0',
'SCHEMA_DATA_FREE' => '0'
);
} else {
$current = array(
'SCHEMA_NAME' => $new_db
);
}
list($column_order, $generated_html) = PMA_buildHtmlForDb(
$current, $is_superuser, $url_query,
$column_order, $replication_types, $replication_info
);
$new_db_string .= $generated_html;
$new_db_string .= '</tr>';
$response = PMA_Response::getInstance();
$response->addJSON('message', $message);
$response->addJSON('new_db_string', $new_db_string);
$response->addJSON(
'sql_query',
PMA_Util::getMessage(
null, $sql_query, 'success'
)
);
} else {
include_once '' . $cfg['DefaultTabDatabase'];
}
}
?>

View File

@ -0,0 +1,291 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin
*/
/**
* Gets the variables sent or posted to this script, then displays headers
*/
require_once 'libraries/common.inc.php';
if (! isset($selected_tbl)) {
include 'libraries/db_common.inc.php';
include 'libraries/db_info.inc.php';
}
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$header->enablePrintView();
/**
* Gets the relations settings
*/
$cfgRelation = PMA_getRelationsParam();
require_once 'libraries/transformations.lib.php';
require_once 'libraries/Index.class.php';
/**
* Check parameters
*/
PMA_Util::checkParameters(array('db'));
/**
* Defines the url to return to in case of error in a sql statement
*/
if (strlen($table)) {
$err_url = 'tbl_sql.php?' . PMA_generate_common_url($db, $table);
} else {
$err_url = 'db_sql.php?' . PMA_generate_common_url($db);
}
if ($cfgRelation['commwork']) {
$comment = PMA_getDbComment($db);
/**
* Displays DB comment
*/
if ($comment) {
echo '<p>' . __('Database comment: ')
. '<i>' . htmlspecialchars($comment) . '</i></p>';
} // end if
}
/**
* Selects the database and gets tables names
*/
PMA_DBI_select_db($db);
$tables = PMA_DBI_get_tables($db);
$count = 0;
foreach ($tables as $table) {
$comments = PMA_getComments($db, $table);
echo '<div>' . "\n";
echo '<h2>' . htmlspecialchars($table) . '</h2>' . "\n";
/**
* Gets table informations
*/
$show_comment = PMA_Table::sGetStatusInfo($db, $table, 'TABLE_COMMENT');
/**
* Gets table keys and retains them
*/
PMA_DBI_select_db($db);
$indexes = PMA_DBI_get_table_indexes($db, $table);
$primary = '';
$indexes = array();
$lastIndex = '';
$indexes_info = array();
$indexes_data = array();
$pk_array = array(); // will be use to emphasis prim. keys in the table
// view
foreach ($indexes as $row) {
// Backups the list of primary keys
if ($row['Key_name'] == 'PRIMARY') {
$primary .= $row['Column_name'] . ', ';
$pk_array[$row['Column_name']] = 1;
}
// Retains keys informations
if ($row['Key_name'] != $lastIndex) {
$indexes[] = $row['Key_name'];
$lastIndex = $row['Key_name'];
}
$indexes_info[$row['Key_name']]['Sequences'][] = $row['Seq_in_index'];
$indexes_info[$row['Key_name']]['Non_unique'] = $row['Non_unique'];
if (isset($row['Cardinality'])) {
$indexes_info[$row['Key_name']]['Cardinality'] = $row['Cardinality'];
}
// I don't know what does following column mean....
// $indexes_info[$row['Key_name']]['Packed'] = $row['Packed'];
$indexes_info[$row['Key_name']]['Comment'] = $row['Comment'];
$indexes_data[$row['Key_name']][$row['Seq_in_index']]['Column_name'] = $row['Column_name'];
if (isset($row['Sub_part'])) {
$indexes_data[$row['Key_name']][$row['Seq_in_index']]['Sub_part'] = $row['Sub_part'];
}
} // end while
/**
* Gets columns properties
*/
$columns = PMA_DBI_get_columns($db, $table);
$fields_cnt = count($columns);
if (PMA_MYSQL_INT_VERSION < 50025) {
// We need this to correctly learn if a TIMESTAMP is NOT NULL, since
// SHOW FULL COLUMNS or INFORMATION_SCHEMA incorrectly says NULL
// and SHOW CREATE TABLE says NOT NULL
// http://bugs.mysql.com/20910.
$show_create_table_query = 'SHOW CREATE TABLE '
. PMA_Util::backquote($db) . '.'
. PMA_Util::backquote($table);
$show_create_table = PMA_DBI_fetch_value(
$show_create_table_query, 0, 1
);
$analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table));
}
// Check if we can use Relations
if (!empty($cfgRelation['relation'])) {
// Find which tables are related with the current one and write it in
// an array
$res_rel = PMA_getForeigners($db, $table);
if (count($res_rel) > 0) {
$have_rel = true;
} else {
$have_rel = false;
}
} else {
$have_rel = false;
} // end if
/**
* Displays the comments of the table if MySQL >= 3.23
*/
if (!empty($show_comment)) {
echo __('Table comments') . ': ' . htmlspecialchars($show_comment) . '<br /><br />';
}
/**
* Displays the table structure
*/
?>
<table width="100%" class="print">
<tr><th width="50"><?php echo __('Column'); ?></th>
<th width="80"><?php echo __('Type'); ?></th>
<?php /* <th width="50"><?php echo __('Attributes'); ?></th>*/ ?>
<th width="40"><?php echo __('Null'); ?></th>
<th width="70"><?php echo __('Default'); ?></th>
<?php /* <th width="50"><?php echo __('Extra'); ?></th>*/ ?>
<?php
if ($have_rel) {
echo ' <th>' . __('Links to') . '</th>' . "\n";
}
echo ' <th>' . __('Comments') . '</th>' . "\n";
if ($cfgRelation['mimework']) {
echo ' <th>MIME</th>' . "\n";
}
?>
</tr>
<?php
$odd_row = true;
foreach ($columns as $row) {
if ($row['Null'] == '') {
$row['Null'] = 'NO';
}
$extracted_columnspec
= PMA_Util::extractColumnSpec($row['Type']);
// reformat mysql query output
// set or enum types: slashes single quotes inside options
if ('set' == $extracted_columnspec['type'] || 'enum' == $extracted_columnspec['type']) {
$type_nowrap = '';
} else {
$type_nowrap = ' class="nowrap"';
}
$type = htmlspecialchars($extracted_columnspec['print_type']);
$attribute = $extracted_columnspec['attribute'];
if (! isset($row['Default'])) {
if ($row['Null'] != 'NO') {
$row['Default'] = '<i>NULL</i>';
}
} else {
$row['Default'] = htmlspecialchars($row['Default']);
}
$field_name = $row['Field'];
if (PMA_MYSQL_INT_VERSION < 50025
&& ! empty($analyzed_sql[0]['create_table_fields'][$field_name]['type'])
&& $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP'
&& $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']
) {
// here, we have a TIMESTAMP that SHOW FULL COLUMNS reports as having the
// NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
// the latter.
/**
* @todo merge this logic with the one in tbl_structure.php
* or move it in a function similar to PMA_DBI_get_columns_full()
* but based on SHOW CREATE TABLE because information_schema
* cannot be trusted in this case (MySQL bug)
*/
$row['Null'] = 'NO';
}
?>
<tr class="<?php echo $odd_row ? 'odd' : 'even'; $odd_row = ! $odd_row; ?>">
<td class="nowrap">
<?php
if (isset($pk_array[$row['Field']])) {
echo '<u>' . htmlspecialchars($field_name) . '</u>';
} else {
echo htmlspecialchars($field_name);
}
?>
</td>
<td<?php echo $type_nowrap; ?> lang="en" dir="ltr"><?php echo $type; ?></td>
<?php /* <td<?php echo $type_nowrap; ?>><?php echo $attribute; ?></td>*/ ?>
<td><?php echo (($row['Null'] == 'NO') ? __('No') : __('Yes')); ?></td>
<td class="nowrap"><?php
if (isset($row['Default'])) {
echo $row['Default'];
}
?></td>
<?php /* <td<?php echo $type_nowrap; ?>><?php echo $row['Extra']; ?></td>*/ ?>
<?php
if ($have_rel) {
echo ' <td>';
if (isset($res_rel[$field_name])) {
echo htmlspecialchars($res_rel[$field_name]['foreign_table'] . ' -> ' . $res_rel[$field_name]['foreign_field']);
}
echo '</td>' . "\n";
}
echo ' <td>';
if (isset($comments[$field_name])) {
echo htmlspecialchars($comments[$field_name]);
}
echo '</td>' . "\n";
if ($cfgRelation['mimework']) {
$mime_map = PMA_getMIME($db, $table, true);
echo ' <td>';
if (isset($mime_map[$field_name])) {
echo htmlspecialchars(str_replace('_', '/', $mime_map[$field_name]['mimetype']));
}
echo '</td>' . "\n";
}
?>
</tr>
<?php
} // end foreach
$count++;
?>
</table>
<?php
// display indexes information
if (count(PMA_Index::getFromTable($table, $db)) > 0) {
echo PMA_Index::getView($table, $db, true);
}
?>
</div>
<?php
} //ends main while
/**
* Displays the footer
*/
echo PMA_Util::getButton();
?>

View File

@ -0,0 +1,26 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Events management.
*
* @package PhpMyAdmin
*/
/**
* Include required files
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/Util.class.php';
/**
* Include all other files
*/
require_once 'libraries/rte/rte_events.lib.php';
/**
* Do the magic
*/
$_PMA_RTE = 'EVN';
require_once 'libraries/rte/rte_main.inc.php';
?>

View File

@ -0,0 +1,90 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* dumps a database
*
* @package PhpMyAdmin
*/
/**
* Gets some core libraries
*/
require_once 'libraries/common.inc.php';
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('export.js');
// $sub_part is also used in db_info.inc.php to see if we are coming from
// db_export.php, in which case we don't obey $cfg['MaxTableList']
$sub_part = '_export';
require_once 'libraries/db_common.inc.php';
$url_query .= '&amp;goto=db_export.php';
require_once 'libraries/db_info.inc.php';
/**
* Displays the form
*/
$export_page_title = __('View dump (schema) of database');
// exit if no tables in db found
if ($num_tables < 1) {
PMA_Message::error(__('No tables found in database.'))->display();
exit;
} // end if
$multi_values = '<div>';
$multi_values .= '<a href="#"';
$multi_values .= ' onclick="setSelectOptions(\'dump\', \'table_select[]\', true); return false;">';
$multi_values .= __('Select All');
$multi_values .= '</a>';
$multi_values .= ' / ';
$multi_values .= '<a href="#"';
$multi_values .= ' onclick="setSelectOptions(\'dump\', \'table_select[]\', false); return false;">';
$multi_values .= __('Unselect All');
$multi_values .= '</a><br />';
$multi_values .= '<select name="table_select[]" id="table_select" size="10" multiple="multiple">';
$multi_values .= "\n";
if (!empty($selected_tbl) && empty($table_select)) {
$table_select = $selected_tbl;
}
// Check if the selected tables are defined in $_GET
// (from clicking Back button on export.php)
if (isset($_GET['table_select'])) {
$_GET['table_select'] = urldecode($_GET['table_select']);
$_GET['table_select'] = explode(",", $_GET['table_select']);
}
foreach ($tables as $each_table) {
if (isset($_GET['table_select'])) {
if (in_array($each_table['Name'], $_GET['table_select'])) {
$is_selected = ' selected="selected"';
} else {
$is_selected = '';
}
} elseif (isset($table_select)) {
if (in_array($each_table['Name'], $table_select)) {
$is_selected = ' selected="selected"';
} else {
$is_selected = '';
}
} else {
$is_selected = ' selected="selected"';
}
$table_html = htmlspecialchars($each_table['Name']);
$multi_values .= ' <option value="' . $table_html . '"'
. $is_selected . '>'
. str_replace(' ', '&nbsp;', $table_html) . '</option>' . "\n";
} // end for
$multi_values .= "\n";
$multi_values .= '</select></div>';
$export_type = 'database';
require_once 'libraries/display_export.lib.php';
?>

View File

@ -0,0 +1,28 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin
*/
/**
*
*/
require_once 'libraries/common.inc.php';
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('import.js');
/**
* Gets tables informations and displays top links
*/
require 'libraries/db_common.inc.php';
require 'libraries/db_info.inc.php';
$import_type = 'database';
require 'libraries/display_import.lib.php';
?>

View File

@ -0,0 +1,294 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* handles miscellaneous db operations:
* - move/rename
* - copy
* - changing collation
* - changing comment
* - adding tables
* - viewing PDF schemas
*
* @package PhpMyAdmin
*/
/**
* requirements
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/mysql_charsets.lib.php';
/**
* functions implementation for this script
*/
require_once 'libraries/operations.lib.php';
// add a javascript file for jQuery functions to handle Ajax actions
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('db_operations.js');
/**
* Rename/move or copy database
*/
if (strlen($db)
&& (! empty($_REQUEST['db_rename']) || ! empty($_REQUEST['db_copy']))
) {
if (! empty($_REQUEST['db_rename'])) {
$move = true;
} else {
$move = false;
}
if (! isset($_REQUEST['newname']) || ! strlen($_REQUEST['newname'])) {
$message = PMA_Message::error(__('The database name is empty!'));
} else {
$sql_query = ''; // in case target db exists
$_error = false;
if ($move
|| (isset($_REQUEST['create_database_before_copying'])
&& $_REQUEST['create_database_before_copying'])
) {
$sql_query = PMA_getSqlQueryAndCreateDbBeforeCopy();
}
// here I don't use DELIMITER because it's not part of the
// language; I have to send each statement one by one
// to avoid selecting alternatively the current and new db
// we would need to modify the CREATE definitions to qualify
// the db name
PMA_runProcedureAndFunctionDefinitions($db);
// go back to current db, just in case
PMA_DBI_select_db($db);
$tables_full = PMA_DBI_get_tables_full($db);
include_once "libraries/plugin_interface.lib.php";
// remove all foreign key constraints, otherwise we can get errors
$export_sql_plugin = PMA_getPlugin(
"export",
"sql",
'libraries/plugins/export/',
array(
'single_table' => isset($single_table),
'export_type' => 'database'
)
);
$GLOBALS['sql_constraints_query_full_db']
= PMA_getSqlConstraintsQueryForFullDb(
$tables_full, $export_sql_plugin, $move, $db
);
$views = PMA_getViewsAndCreateSqlViewStandIn(
$tables_full, $export_sql_plugin, $db
);
list($sql_query, $_error) = PMA_getSqlQueryForCopyTable(
$tables_full, $sql_query, $move, $db
);
// handle the views
if (! $_error) {
$_error = PMA_handleTheViews($views, $move, $db);
}
unset($views);
// now that all tables exist, create all the accumulated constraints
if (! $_error && count($GLOBALS['sql_constraints_query_full_db']) > 0) {
PMA_createAllAccumulatedConstraints();
}
if (! PMA_DRIZZLE && PMA_MYSQL_INT_VERSION >= 50100) {
// here DELIMITER is not used because it's not part of the
// language; each statement is sent one by one
PMA_runEventDefinitionsForDb($db);
}
// go back to current db, just in case
PMA_DBI_select_db($db);
// Duplicate the bookmarks for this db (done once for each db)
PMA_duplicateBookmarks($_error, $db);
if (! $_error && $move) {
/**
* cleanup pmadb stuff for this db
*/
include_once 'libraries/relation_cleanup.lib.php';
PMA_relationsCleanupDatabase($db);
// if someday the RENAME DATABASE reappears, do not DROP
$local_query = 'DROP DATABASE ' . PMA_Util::backquote($db) . ';';
$sql_query .= "\n" . $local_query;
PMA_DBI_query($local_query);
$message = PMA_Message::success(__('Database %1$s has been renamed to %2$s'));
$message->addParam($db);
$message->addParam($_REQUEST['newname']);
} elseif (! $_error) {
$message = PMA_Message::success(__('Database %1$s has been copied to %2$s'));
$message->addParam($db);
$message->addParam($_REQUEST['newname']);
}
$reload = true;
/* Change database to be used */
if (! $_error && $move) {
$db = $_REQUEST['newname'];
} elseif (! $_error) {
if (isset($_REQUEST['switch_to_new'])
&& $_REQUEST['switch_to_new'] == 'true'
) {
$GLOBALS['PMA_Config']->setCookie('pma_switch_to_new', 'true');
$db = $_REQUEST['newname'];
} else {
$GLOBALS['PMA_Config']->setCookie('pma_switch_to_new', '');
}
}
if ($_error && ! isset($message)) {
$message = PMA_Message::error();
}
}
/**
* Database has been successfully renamed/moved. If in an Ajax request,
* generate the output with {@link PMA_Response} and exit
*/
if ($GLOBALS['is_ajax_request'] == true) {
$response = PMA_Response::getInstance();
$response->isSuccess($message->isSuccess());
$response->addJSON('message', $message);
$response->addJSON('newname', $_REQUEST['newname']);
$response->addJSON(
'sql_query',
PMA_Util::getMessage(null, $sql_query)
);
$response->addJSON('db', $db);
exit;
}
}
/**
* Settings for relations stuff
*/
$cfgRelation = PMA_getRelationsParam();
/**
* Check if comments were updated
* (must be done before displaying the menu tabs)
*/
if (isset($_REQUEST['comment'])) {
PMA_setDbComment($db, $_REQUEST['comment']);
}
/**
* Prepares the tables list if the user where not redirected to this script
* because there is no table in the database ($is_info is true)
*/
if (empty($is_info)) {
include 'libraries/db_common.inc.php';
$url_query .= '&amp;goto=db_operations.php';
// Gets the database structure
$sub_part = '_structure';
include 'libraries/db_info.inc.php';
echo "\n";
if (isset($message)) {
echo PMA_Util::getMessage($message, $sql_query);
unset($message);
}
}
$_REQUEST['db_collation'] = PMA_getDbCollation($db);
$is_information_schema = PMA_is_system_schema($db);
if (!$is_information_schema) {
if ($cfgRelation['commwork']) {
/**
* database comment
*/
$response->addHTML(PMA_getHtmlForDatabaseComment($db));
}
$response->addHTML('<div class="operations_half_width">');
ob_start();
include 'libraries/display_create_table.lib.php';
$content = ob_get_contents();
ob_end_clean();
$response->addHTML($content);
$response->addHTML('</div>');
/**
* rename database
*/
if ($db != 'mysql') {
$response->addHTML(PMA_getHtmlForRenameDatabase($db));
}
// Drop link if allowed
// Don't even try to drop information_schema.
// You won't be able to. Believe me. You won't.
// Don't allow to easily drop mysql database, RFE #1327514.
if (($is_superuser || $GLOBALS['cfg']['AllowUserDropDatabase'])
&& ! $db_is_information_schema
&& (PMA_DRIZZLE || $db != 'mysql')
) {
$response->addHTML(PMA_getHtmlForDropDatabaseLink($db));
}
/**
* Copy database
*/
$response->addHTML(PMA_getHtmlForCopyDatabase($db));
/**
* Change database charset
*/
$response->addHTML(PMA_getHtmlForChangeDatabaseCharset($db, $table));
if ($num_tables > 0
&& ! $cfgRelation['allworks']
&& $cfg['PmaNoRelation_DisableWarning'] == false
) {
$message = PMA_Message::notice(
__('The phpMyAdmin configuration storage has been deactivated. To find out why click %shere%s.')
);
$message->addParam(
'<a href="' . $cfg['PmaAbsoluteUri'] . 'chk_rel.php?' . $url_query . '">',
false
);
$message->addParam('</a>', false);
/* Show error if user has configured something, notice elsewhere */
if (!empty($cfg['Servers'][$server]['pmadb'])) {
$message->isError(true);
}
$response->addHTML('<div class="operations_full_width">');
$response->addHTML($message->getDisplay());
$response->addHTML('</div>');
} // end if
} // end if (!$is_information_schema)
// not sure about displaying the PDF dialog in case db is information_schema
if ($cfgRelation['pdfwork'] && $num_tables > 0) {
// We only show this if we find something in the new pdf_pages table
$test_query = '
SELECT *
FROM ' . PMA_Util::backquote($GLOBALS['cfgRelation']['db'])
. '.' . PMA_Util::backquote($cfgRelation['pdf_pages']) . '
WHERE db_name = \'' . PMA_Util::sqlAddSlashes($db) . '\'';
$test_rs = PMA_queryAsControlUser($test_query, null, PMA_DBI_QUERY_STORE);
/*
* Export Relational Schema View
*/
$response->addHTML(PMA_getHtmlForExportRelationalSchemaView($url_query));
} // end if
?>

View File

@ -0,0 +1,252 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin
*/
/**
*
*/
require_once 'libraries/common.inc.php';
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$header->enablePrintView();
PMA_Util::checkParameters(array('db'));
/**
* Defines the url to return to in case of error in a sql statement
*/
$err_url = 'db_sql.php?' . PMA_generate_common_url($db);
/**
* Settings for relations stuff
*/
$cfgRelation = PMA_getRelationsParam();
/**
* Gets the list of the table in the current db and informations about these
* tables if possible
*
* @todo merge this speedup _optionaly_ into PMA_DBI_get_tables_full()
*
// speedup view on locked tables
// Special speedup for newer MySQL Versions (in 4.0 format changed)
if ($cfg['SkipLockedTables'] == true) {
$result = PMA_DBI_query('SHOW OPEN TABLES FROM ' . PMA_Util::backquote($db) . ';');
// Blending out tables in use
if ($result != false && PMA_DBI_num_rows($result) > 0) {
while ($tmp = PMA_DBI_fetch_row($result)) {
// if in use memorize tablename
if (preg_match('@in_use=[1-9]+@i', $tmp[0])) {
$sot_cache[$tmp[0]] = true;
}
}
PMA_DBI_free_result($result);
if (isset($sot_cache)) {
$result = PMA_DBI_query('SHOW TABLES FROM ' . PMA_Util::backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
if ($result != false && PMA_DBI_num_rows($result) > 0) {
while ($tmp = PMA_DBI_fetch_row($result)) {
if (! isset($sot_cache[$tmp[0]])) {
$sts_result = PMA_DBI_query('SHOW TABLE STATUS FROM ' . PMA_Util::backquote($db) . ' LIKE \'' . sqlAddSlashes($tmp[0], true) . '\';');
$sts_tmp = PMA_DBI_fetch_assoc($sts_result);
$tables[] = $sts_tmp;
} else { // table in use
$tables[] = array('Name' => $tmp[0]);
}
}
PMA_DBI_free_result($result);
$sot_ready = true;
}
}
unset($tmp, $result);
}
}
if (! isset($sot_ready)) {
$result = PMA_DBI_query('SHOW TABLE STATUS FROM ' . PMA_Util::backquote($db) . ';');
if (PMA_DBI_num_rows($result) > 0) {
while ($sts_tmp = PMA_DBI_fetch_assoc($result)) {
$tables[] = $sts_tmp;
}
PMA_DBI_free_result($result);
unset($res);
}
}
*/
/**
* If there is at least one table, displays the printer friendly view, else
* an error message
*/
$tables = PMA_DBI_get_tables_full($db);
$num_tables = count($tables);
echo '<br />';
// 1. No table
if ($num_tables == 0) {
echo __('No tables found in database.');
} else {
// 2. Shows table information
?>
<table>
<thead>
<tr>
<th><?php echo __('Table'); ?></th>
<th><?php echo __('Rows'); ?></th>
<th><?php echo __('Type'); ?></th>
<?php
if ($cfg['ShowStats']) {
echo '<th>' . __('Size') . '</th>';
}
?>
<th><?php echo __('Comments'); ?></th>
</tr>
</thead>
<tbody>
<?php
$sum_entries = $sum_size = 0;
$odd_row = true;
foreach ($tables as $sts_data) {
if (PMA_Table::isMerge($db, $sts_data['TABLE_NAME'])
|| strtoupper($sts_data['ENGINE']) == 'FEDERATED'
) {
$merged_size = true;
} else {
$merged_size = false;
}
$sum_entries += $sts_data['TABLE_ROWS'];
?>
<tr class="<?php echo $odd_row ? 'odd' : 'even'; ?>">
<th>
<?php echo htmlspecialchars($sts_data['TABLE_NAME']); ?>
</th>
<?php
if (isset($sts_data['TABLE_ROWS'])) {
?>
<td class="right">
<?php
if ($merged_size) {
echo '<i>' . PMA_Util::formatNumber($sts_data['TABLE_ROWS'], 0) . '</i>' . "\n";
} else {
echo PMA_Util::formatNumber($sts_data['TABLE_ROWS'], 0) . "\n";
}
?>
</td>
<td class="nowrap">
<?php echo $sts_data['ENGINE']; ?>
</td>
<?php
if ($cfg['ShowStats']) {
$tblsize = $sts_data['Data_length'] + $sts_data['Index_length'];
$sum_size += $tblsize;
list($formated_size, $unit)
= PMA_Util::formatByteDown($tblsize, 3, 1);
?>
<td class="right nowrap">
<?php echo $formated_size . ' ' . $unit; ?>
</td>
<?php
} // end if
} else {
?>
<td colspan="3" class="center">
<?php echo __('in use'); ?>
</td>
<?php
}
?>
<td>
<?php
if (! empty($sts_data['Comment'])) {
echo htmlspecialchars($sts_data['Comment']);
$needs_break = '<br />';
} else {
$needs_break = '';
}
if (! empty($sts_data['Create_time'])
|| ! empty($sts_data['Update_time'])
|| ! empty($sts_data['Check_time'])
) {
echo $needs_break;
?>
<table width="100%">
<?php
if (! empty($sts_data['Create_time'])) {
?>
<tr>
<td class="right"><?php echo __('Creation') . ': '; ?></td>
<td class="right"><?php echo PMA_Util::localisedDate(strtotime($sts_data['Create_time'])); ?></td>
</tr>
<?php
}
if (! empty($sts_data['Update_time'])) {
?>
<tr>
<td class="right"><?php echo __('Last update') . ': '; ?></td>
<td class="right"><?php echo PMA_Util::localisedDate(strtotime($sts_data['Update_time'])); ?></td>
</tr>
<?php
}
if (! empty($sts_data['Check_time'])) {
?>
<tr>
<td class="right"><?php echo __('Last check') . ': '; ?></td>
<td class="right"><?php echo PMA_Util::localisedDate(strtotime($sts_data['Check_time'])); ?></td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</td>
</tr>
<?php
}
?>
<tr>
<th class="center">
<?php echo sprintf(_ngettext('%s table', '%s tables', $num_tables), PMA_Util::formatNumber($num_tables, 0)); ?>
</th>
<th class="right nowrap">
<?php echo PMA_Util::formatNumber($sum_entries, 0); ?>
</th>
<th class="center">
--
</th>
<?php
if ($cfg['ShowStats']) {
list($sum_formated, $unit)
= PMA_Util::formatByteDown($sum_size, 3, 1);
?>
<th class="right nowrap">
<?php echo $sum_formated . ' ' . $unit; ?>
</th>
<?php
}
?>
<th></th>
</tr>
</tbody>
</table>
<?php
}
/**
* Displays the footer
*/
echo PMA_Util::getButton();
echo "<div id='PMA_disable_floating_menubar'></div>\n";
?>

View File

@ -0,0 +1,68 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* query by example the whole database
*
* @package PhpMyAdmin
*/
/**
* requirements
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/DBQbe.class.php';
$response = PMA_Response::getInstance();
// Gets the relation settings
$cfgRelation = PMA_getRelationsParam();
/**
* A query has been submitted -> (maybe) execute it
*/
$message_to_display = false;
if (isset($_REQUEST['submit_sql']) && ! empty($sql_query)) {
if (! preg_match('@^SELECT@i', $sql_query)) {
$message_to_display = true;
} else {
$goto = 'db_sql.php';
include 'sql.php';
exit;
}
}
$sub_part = '_qbe';
require 'libraries/db_common.inc.php';
$url_query .= '&amp;goto=db_qbe.php';
$url_params['goto'] = 'db_qbe.php';
require 'libraries/db_info.inc.php';
if ($message_to_display) {
PMA_Message::error(__('You have to choose at least one column to display'))->display();
}
unset($message_to_display);
// create new qbe search instance
$db_qbe = new PMA_DBQbe($GLOBALS['db']);
/**
* Displays the Query by example form
*/
if ($cfgRelation['designerwork']) {
$url = 'pmd_general.php' . PMA_generate_common_url(
array_merge(
$url_params,
array('query' => 1)
)
);
$response->addHTML(
PMA_Message::notice(
sprintf(
__('Switch to %svisual builder%s'),
'<a href="' . $url . '">',
'</a>'
)
)
);
}
$response->addHTML($db_qbe->getSelectionForm($cfgRelation));
?>

View File

@ -0,0 +1,27 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Routines management.
*
* @package PhpMyAdmin
*/
/**
* Include required files
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/Util.class.php';
require_once 'libraries/mysql_charsets.lib.php';
/**
* Include all other files
*/
require_once 'libraries/rte/rte_routines.lib.php';
/**
* Do the magic
*/
$_PMA_RTE = 'RTN';
require_once 'libraries/rte/rte_main.inc.php';
?>

View File

@ -0,0 +1,57 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* searchs the entire database
*
* @todo make use of UNION when searching multiple tables
* @todo display executed query, optional?
* @package PhpMyAdmin
*/
/**
* Gets some core libraries
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/DbSearch.class.php';
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('db_search.js');
$scripts->addFile('sql.js');
$scripts->addFile('makegrid.js');
$scripts->addFile('jquery/jquery-ui-timepicker-addon.js');
require 'libraries/db_common.inc.php';
// If config variable $GLOBALS['cfg']['Usedbsearch'] is on false : exit.
if (! $GLOBALS['cfg']['UseDbSearch']) {
PMA_Util::mysqlDie(
__('Access denied'), '', false, $err_url
);
} // end if
$url_query .= '&amp;goto=db_search.php';
$url_params['goto'] = 'db_search.php';
// Create a database search instance
$db_search = new PMA_DbSearch($GLOBALS['db']);
// Display top links if we are not in an Ajax request
if ( $GLOBALS['is_ajax_request'] != true) {
include 'libraries/db_info.inc.php';
}
$response->addHTML('<div id="searchresults">');
// Main search form has been submitted, get results
if (isset($_REQUEST['submit_search'])) {
$response->addHTML($db_search->getSearchResults());
}
// If we are in an Ajax request, we need to exit after displaying all the HTML
if ($GLOBALS['is_ajax_request'] == true && empty($_REQUEST['ajax_page_request'])) {
exit;
}
// Display the search form
$response->addHTML($db_search->getSelectionForm($url_params));
?>

View File

@ -0,0 +1,65 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin
*/
/**
*
*/
require_once 'libraries/common.inc.php';
/**
* Runs common work
*/
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('functions.js');
$scripts->addFile('makegrid.js');
$scripts->addFile('sql.js');
require 'libraries/db_common.inc.php';
require_once 'libraries/sql_query_form.lib.php';
// After a syntax error, we return to this script
// with the typed query in the textarea.
$goto = 'db_sql.php';
$back = 'db_sql.php';
/**
* Sets globals from $_GET
*/
$get_params = array(
'db_query_force'
);
foreach ($get_params as $one_get_param) {
if (isset($_GET[$one_get_param])) {
$GLOBALS[$one_get_param] = $_GET[$one_get_param];
}
}
/**
* Gets informations about the database and, if it is empty, move to the
* "db_structure.php" script where table can be created
*/
require 'libraries/db_info.inc.php';
if ($num_tables == 0 && empty($db_query_force)) {
$sub_part = '';
$is_info = true;
include 'db_structure.php';
exit();
}
/**
* Query box, bookmark, insert data from textfile
*/
PMA_sqlQueryForm(
true, false,
isset($_REQUEST['delimiter']) ? htmlspecialchars($_REQUEST['delimiter']) : ';'
);
?>

View File

@ -0,0 +1,335 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin
*/
/**
*
*/
require_once 'libraries/common.inc.php';
/**
* Function implementations for this script
*/
require_once 'libraries/structure.lib.php';
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('db_structure.js');
$scripts->addFile('tbl_change.js');
$scripts->addFile('jquery/jquery-ui-timepicker-addon.js');
$post_params = array(
'error',
'is_info',
'message',
'mult_btn',
'selected_tbl',
'submit_mult'
);
foreach ($post_params as $one_post_param) {
if (isset($_POST[$one_post_param])) {
$GLOBALS[$one_post_param] = $_POST[$one_post_param];
}
}
/**
* Prepares the tables list if the user where not redirected to this script
* because there is no table in the database ($is_info is true)
*/
if (empty($_POST['is_info'])) {
// Drops/deletes/etc. multiple tables if required
if ((!empty($_POST['submit_mult']) && isset($_POST['selected_tbl']))
|| isset($_POST['mult_btn'])
) {
$action = 'db_structure.php';
$err_url = 'db_structure.php?'. PMA_generate_common_url($db);
// see bug #2794840; in this case, code path is:
// db_structure.php -> libraries/mult_submits.inc.php -> sql.php
// -> db_structure.php and if we got an error on the multi submit,
// we must display it here and not call again mult_submits.inc.php
if (! isset($_POST['error']) || false === $_POST['error']) {
include 'libraries/mult_submits.inc.php';
}
if (empty($_POST['message'])) {
$_POST['message'] = PMA_Message::success();
}
}
include 'libraries/db_common.inc.php';
$url_query .= '&amp;goto=db_structure.php';
// Gets the database structure
$sub_part = '_structure';
include 'libraries/db_info.inc.php';
if (!PMA_DRIZZLE) {
include_once 'libraries/replication.inc.php';
} else {
$server_slave_status = false;
}
}
require_once 'libraries/bookmark.lib.php';
require_once 'libraries/mysql_charsets.lib.php';
$db_collation = PMA_getDbCollation($db);
$titles = PMA_Util::buildActionTitles();
// 1. No tables
if ($num_tables == 0) {
$response->addHTML(
'<p>' . __('No tables found in database') . '</p>' . "\n"
);
if (empty($db_is_information_schema)) {
ob_start();
include 'libraries/display_create_table.lib.php';
$content = ob_get_contents();
ob_end_clean();
$response->addHTML($content);
unset($content);
} // end if (Create Table dialog)
exit;
}
// else
// 2. Shows table informations
/**
* Displays the tables list
*/
$response->addHTML('<div id="tableslistcontainer">');
$_url_params = array(
'pos' => $pos,
'db' => $db);
// Add the sort options if they exists
if (isset($_REQUEST['sort'])) {
$_url_params['sort'] = $_REQUEST['sort'];
}
if (isset($_REQUEST['sort_order'])) {
$_url_params['sort_order'] = $_REQUEST['sort_order'];
}
$response->addHTML(
PMA_Util::getListNavigator(
$total_num_tables, $pos, $_url_params, 'db_structure.php',
'frame_content', $GLOBALS['cfg']['MaxTableList']
)
);
// tables form
$response->addHTML(
'<form method="post" action="db_structure.php" '
. 'name="tablesForm" id="tablesForm">'
);
$response->addHTML(PMA_generate_common_hidden_inputs($db));
$response->addHTML(
PMA_TableHeader($db_is_information_schema, $server_slave_status)
);
$i = $sum_entries = 0;
$overhead_check = '';
$create_time_all = '';
$update_time_all = '';
$check_time_all = '';
$num_columns = $cfg['PropertiesNumColumns'] > 1
? ceil($num_tables / $cfg['PropertiesNumColumns']) + 1
: 0;
$row_count = 0;
$sum_size = (double) 0;
$overhead_size = (double) 0;
$hidden_fields = array();
$odd_row = true;
$sum_row_count_pre = '';
foreach ($tables as $keyname => $current_table) {
// Get valid statistics whatever is the table type
$drop_query = '';
$drop_message = '';
$overhead = '';
$table_is_view = false;
$table_encoded = urlencode($current_table['TABLE_NAME']);
// Sets parameters for links
$tbl_url_query = $url_query . '&amp;table=' . $table_encoded;
// do not list the previous table's size info for a view
list($current_table, $formatted_size, $unit, $formatted_overhead,
$overhead_unit, $overhead_size, $table_is_view, $sum_size)
= PMA_getStuffForEngineTypeTable(
$current_table, $db_is_information_schema,
$is_show_stats, $table_is_view, $sum_size, $overhead_size
);
if (! PMA_Table::isMerge($db, $current_table['TABLE_NAME'])) {
$sum_entries += $current_table['TABLE_ROWS'];
}
if (isset($current_table['Collation'])) {
$collation = '<dfn title="'
. PMA_getCollationDescr($current_table['Collation']) . '">'
. $current_table['Collation'] . '</dfn>';
} else {
$collation = '---';
}
if ($is_show_stats) {
if ($formatted_overhead != '') {
$overhead = '<a href="tbl_structure.php?'
. $tbl_url_query . '#showusage">'
. '<span>' . $formatted_overhead . '</span>'
. '<span class="unit">' . $overhead_unit . '</span>'
. '</a>' . "\n";
$overhead_check .=
"markAllRows('row_tbl_" . ($i + 1) . "');";
} else {
$overhead = '-';
}
} // end if
unset($showtable);
if ($GLOBALS['cfg']['ShowDbStructureCreation']) {
list($create_time, $create_time_all) = PMA_getTimeForCreateUpdateCheck(
$current_table, 'Create_time', $create_time_all
);
}
if ($GLOBALS['cfg']['ShowDbStructureLastUpdate']) {
// $showtable might already be set from ShowDbStructureCreation, see above
list($update_time, $update_time_all) = PMA_getTimeForCreateUpdateCheck(
$current_table, 'Update_time', $update_time_all
);
}
if ($GLOBALS['cfg']['ShowDbStructureLastCheck']) {
// $showtable might already be set from ShowDbStructureCreation, see above
list($check_time, $check_time_all) = PMA_getTimeForCreateUpdateCheck(
$current_table, 'Check_time', $check_time_all
);
}
list($alias, $truename) = PMA_getAliasAndTrueName(
$tooltip_aliasname, $current_table, $tooltip_truename
);
$i++;
$row_count++;
if ($table_is_view) {
$hidden_fields[] = '<input type="hidden" name="views[]" value="'
. htmlspecialchars($current_table['TABLE_NAME']) . '" />';
}
/*
* Always activate links for Browse, Search and Empty, even if
* the icons are greyed, because
* 1. for views, we don't know the number of rows at this point
* 2. for tables, another source could have populated them since the
* page was generated
*
* I could have used the PHP ternary conditional operator but I find
* the code easier to read without this operator.
*/
list($browse_table, $search_table, $browse_table_label, $empty_table,
$tracking_icon) = PMA_getHtmlForActionLinks(
$current_table, $table_is_view, $tbl_url_query,
$titles, $truename, $db_is_information_schema, $url_query
);
if (! $db_is_information_schema) {
list($drop_query, $drop_message)
= PMA_getTableDropQueryAndMessage($table_is_view, $current_table);
}
if ($num_columns > 0
&& $num_tables > $num_columns
&& ($row_count % $num_columns) == 0
) {
$row_count = 1;
$odd_row = true;
$response->addHTML(
'</tr></tbody></table>'
);
$response->addHTML(PMA_TableHeader(false, $server_slave_status));
}
list($do, $ignored) = PMA_getServerSlaveStatus(
$server_slave_status, $truename
);
list($html_output, $odd_row) = PMA_getHtmlForStructureTableRow(
$i, $odd_row, $table_is_view, $current_table,
$browse_table_label, $tracking_icon, $server_slave_status,
$browse_table, $tbl_url_query, $search_table, $db_is_information_schema,
$titles, $empty_table, $drop_query, $drop_message, $collation,
$formatted_size, $unit, $overhead,
(isset ($create_time) ? $create_time : ''),
(isset ($update_time) ? $update_time : ''),
(isset ($check_time) ? $check_time : ''),
$is_show_stats, $ignored, $do, $colspan_for_structure
);
$response->addHTML($html_output);
} // end foreach
// Show Summary
$response->addHTML('</tbody>');
$response->addHTML(
PMA_getHtmlBodyForTableSummary(
$num_tables, $server_slave_status, $db_is_information_schema, $sum_entries,
$db_collation, $is_show_stats, $sum_size, $overhead_size, $create_time_all,
$update_time_all, $check_time_all, $sum_row_count_pre
)
);
$response->addHTML('</table>');
//check all
$response->addHTML(
PMA_getHtmlForCheckAllTables(
$pmaThemeImage, $text_dir, $overhead_check,
$db_is_information_schema, $hidden_fields
)
);
$response->addHTML('</form>'); //end of form
// display again the table list navigator
$response->addHTML(
PMA_Util::getListNavigator(
$total_num_tables, $pos, $_url_params, 'db_structure.php',
'frame_content', $GLOBALS['cfg']['MaxTableList']
)
);
$response->addHTML('</div><hr />');
/**
* Work on the database
*/
/* DATABASE WORK */
/* Printable view of a table */
$response->addHTML(
PMA_getHtmlForTablePrintViewLink($url_query)
. PMA_getHtmlForDataDictionaryLink($url_query)
);
if (empty($db_is_information_schema)) {
ob_start();
include 'libraries/display_create_table.lib.php';
$content = ob_get_contents();
ob_end_clean();
$response->addHTML($content);
} // end if (Create Table dialog)
?>

View File

@ -0,0 +1,249 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* @package PhpMyAdmin
*/
/**
* Run common work
*/
require_once 'libraries/common.inc.php';
//Get some js files needed for Ajax requests
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('db_structure.js');
/**
* If we are not in an Ajax request, then do the common work and show the links etc.
*/
require 'libraries/db_common.inc.php';
$url_query .= '&amp;goto=tbl_tracking.php&amp;back=db_tracking.php';
// Get the database structure
$sub_part = '_structure';
require 'libraries/db_info.inc.php';
// Work to do?
// (here, do not use $_REQUEST['db] as it can be crafted)
if (isset($_REQUEST['delete_tracking']) && isset($_REQUEST['table'])) {
PMA_Tracker::deleteTracking($GLOBALS['db'], $_REQUEST['table']);
/**
* If in an Ajax request, generate the success message and use
* {@link PMA_Response()} to send the output
*/
if ($GLOBALS['is_ajax_request'] == true) {
$response = PMA_Response::getInstance();
$response->addJSON('message', PMA_Message::success());
exit;
}
}
// Get tracked data about the database
$data = PMA_Tracker::getTrackedData($_REQUEST['db'], '', '1');
// No tables present and no log exist
if ($num_tables == 0 && count($data['ddlog']) == 0) {
echo '<p>' . __('No tables found in database.') . '</p>' . "\n";
if (empty($db_is_information_schema)) {
include 'libraries/display_create_table.lib.php';
}
exit;
}
// ---------------------------------------------------------------------------
// Prepare statement to get HEAD version
$all_tables_query = ' SELECT table_name, MAX(version) as version FROM ' .
PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb']) . '.' .
PMA_Util::backquote($GLOBALS['cfg']['Server']['tracking']) .
' WHERE db_name = \'' . PMA_Util::sqlAddSlashes($_REQUEST['db']) . '\' ' .
' GROUP BY table_name' .
' ORDER BY table_name ASC';
$all_tables_result = PMA_queryAsControlUser($all_tables_query);
// If a HEAD version exists
if (PMA_DBI_num_rows($all_tables_result) > 0) {
?>
<div id="tracked_tables">
<h3><?php echo __('Tracked tables');?></h3>
<table id="versions" class="data">
<thead>
<tr>
<th><?php echo __('Database');?></th>
<th><?php echo __('Table');?></th>
<th><?php echo __('Last version');?></th>
<th><?php echo __('Created');?></th>
<th><?php echo __('Updated');?></th>
<th><?php echo __('Status');?></th>
<th><?php echo __('Action');?></th>
<th><?php echo __('Show');?></th>
</tr>
</thead>
<tbody>
<?php
// Print out information about versions
$drop_image_or_text = '';
if (in_array(
$GLOBALS['cfg']['ActionLinksMode'],
array('icons', 'both')
)
) {
$drop_image_or_text .= PMA_Util::getImage(
'b_drop.png',
__('Delete tracking data for this table')
);
}
if (in_array(
$GLOBALS['cfg']['ActionLinksMode'],
array('text', 'both')
)
) {
$drop_image_or_text .= __('Drop');
}
$style = 'odd';
while ($one_result = PMA_DBI_fetch_array($all_tables_result)) {
list($table_name, $version_number) = $one_result;
$table_query = ' SELECT * FROM ' .
PMA_Util::backquote($GLOBALS['cfg']['Server']['pmadb']) . '.' .
PMA_Util::backquote($GLOBALS['cfg']['Server']['tracking']) .
' WHERE `db_name` = \'' . PMA_Util::sqlAddSlashes($_REQUEST['db'])
. '\' AND `table_name` = \'' . PMA_Util::sqlAddSlashes($table_name)
. '\' AND `version` = \'' . $version_number . '\'';
$table_result = PMA_queryAsControlUser($table_query);
$version_data = PMA_DBI_fetch_array($table_result);
if ($version_data['tracking_active'] == 1) {
$version_status = __('active');
} else {
$version_status = __('not active');
}
$tmp_link = 'tbl_tracking.php?' . $url_query . '&amp;table='
. htmlspecialchars($version_data['table_name']);
$delete_link = 'db_tracking.php?' . $url_query . '&amp;table='
. htmlspecialchars($version_data['table_name'])
. '&amp;delete_tracking=true&amp';
?>
<tr class="noclick <?php echo $style;?>">
<td><?php echo htmlspecialchars($version_data['db_name']);?></td>
<td><?php echo htmlspecialchars($version_data['table_name']);?></td>
<td><?php echo $version_data['version'];?></td>
<td><?php echo $version_data['date_created'];?></td>
<td><?php echo $version_data['date_updated'];?></td>
<td><?php echo $version_status;?></td>
<td><a class="drop_tracking_anchor ajax" href="<?php echo $delete_link;?>" ><?php echo $drop_image_or_text; ?></a></td>
<td> <a href="<?php echo $tmp_link; ?>"><?php echo __('Versions');?></a>
| <a href="<?php echo $tmp_link; ?>&amp;report=true&amp;version=<?php echo $version_data['version'];?>"><?php echo __('Tracking report');?></a>
| <a href="<?php echo $tmp_link; ?>&amp;snapshot=true&amp;version=<?php echo $version_data['version'];?>"><?php echo __('Structure snapshot');?></a></td>
</tr>
<?php
if ($style == 'even') {
$style = 'odd';
} else {
$style = 'even';
}
}
unset($tmp_link);
?>
</tbody>
</table>
</div>
<?php
}
$sep = $GLOBALS['cfg']['NavigationTreeTableSeparator'];
// Get list of tables
$table_list = PMA_Util::getTableList($GLOBALS['db']);
// For each table try to get the tracking version
foreach ($table_list as $key => $value) {
// If $value is a table group.
if (array_key_exists(('is' . $sep . 'group'), $value)
&& $value['is' . $sep . 'group']
) {
foreach ($value as $temp_table) {
// If $temp_table is a table with the value for 'Name' is set,
// rather than a propery of the table group.
if (is_array($temp_table)
&& array_key_exists('Name', $temp_table)
) {
$tracking_version = PMA_Tracker::getVersion(
$GLOBALS['db'],
$temp_table['Name']
);
if ($tracking_version == -1) {
$my_tables[] = $temp_table['Name'];
}
}
}
} else { // If $value is a table.
if (PMA_Tracker::getVersion($GLOBALS['db'], $value['Name']) == -1) {
$my_tables[] = $value['Name'];
}
}
}
// If untracked tables exist
if (isset($my_tables)) {
?>
<h3><?php echo __('Untracked tables');?></h3>
<table id="noversions" class="data">
<thead>
<tr>
<th style="width: 300px"><?php echo __('Table');?></th>
<th></th>
</tr>
</thead>
<tbody>
<?php
// Print out list of untracked tables
$style = 'odd';
foreach ($my_tables as $key => $tablename) {
if (PMA_Tracker::getVersion($GLOBALS['db'], $tablename) == -1) {
$my_link = '<a href="tbl_tracking.php?' . $url_query
. '&amp;table=' . htmlspecialchars($tablename) .'">';
$my_link .= PMA_Util::getIcon('eye.png', __('Track table'));
$my_link .= '</a>';
?>
<tr class="noclick <?php echo $style;?>">
<td><?php echo htmlspecialchars($tablename);?></td>
<td><?php echo $my_link;?></td>
</tr>
<?php
if ($style == 'even') {
$style = 'odd';
} else {
$style = 'even';
}
}
}
?>
</tbody>
</table>
<?php
}
// If available print out database log
if (count($data['ddlog']) > 0) {
$log = '';
foreach ($data['ddlog'] as $entry) {
$log .= '# ' . $entry['date'] . ' ' . $entry['username'] . "\n"
. $entry['statement'] . "\n";
}
echo PMA_Util::getMessage(__('Database Log'), $log);
}
?>

View File

@ -0,0 +1,25 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Triggers management.
*
* @package PhpMyAdmin
*/
/**
* Include required files
*/
require_once 'libraries/common.inc.php';
/**
* Include all other files
*/
require_once 'libraries/rte/rte_triggers.lib.php';
/**
* Do the magic
*/
$_PMA_RTE = 'TRI';
require_once 'libraries/rte/rte_main.inc.php';
?>

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More