initial
This commit is contained in:
commit
d7ffb7a30a
6 changed files with 2730 additions and 0 deletions
380
adminer.css
Normal file
380
adminer.css
Normal file
|
|
@ -0,0 +1,380 @@
|
|||
/*
|
||||
FLAT UI Flavored Adminer Theme by M. Mahbubur Rahman (mahbub@mahbubblog.com)
|
||||
Screenshot : http://d.pr/i/cznH
|
||||
Based on work by : Lukáš Brandejs
|
||||
https://raw.github.com/vrana/adminer/master/designs/ng9/adminer.css
|
||||
*/
|
||||
|
||||
@import url(https://fonts.googleapis.com/css?family=Roboto:400,600);
|
||||
|
||||
|
||||
* {
|
||||
font: 13px/1.7 "Roboto","Proxima Nova Rg","Source Sans Pro","Droid Sans",Arial,Helvetica, sans-serif;
|
||||
color:#333333;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
a,a:visited {
|
||||
color:#2980b9;
|
||||
text-decoration:none;
|
||||
padding:3px 1px;
|
||||
}
|
||||
#dbs span{
|
||||
color:white;
|
||||
}
|
||||
|
||||
#content table thead span, #content table thead a {
|
||||
font-weight:bold;
|
||||
color:#FFF;
|
||||
text-shadow:0px 01px 0px #000;
|
||||
}
|
||||
|
||||
#content table thead a:hover {
|
||||
background:none;
|
||||
text-decoration:underline;
|
||||
color:black;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size:1.9em;
|
||||
font-weight:normal;
|
||||
background:white;
|
||||
color:#1e5eb6;
|
||||
border-bottom:1px solid rgb(85, 112, 139);
|
||||
padding:20px;
|
||||
margin:0px;
|
||||
}
|
||||
|
||||
#menu h1 {
|
||||
padding:0px 0px 5px 20px;
|
||||
background:none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
h2,h3 {
|
||||
font-size:1.7em;
|
||||
font-weight:bold;
|
||||
background:transparent;
|
||||
color:#34495e;
|
||||
border-bottom:1px solid #f4f4f4;
|
||||
padding:10px 0px;
|
||||
margin:0px;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
padding:5px;
|
||||
border:1px solid #DEDEDE;
|
||||
}
|
||||
input,select,textarea {
|
||||
border:1px solid #e5e5e5;
|
||||
margin:1px;
|
||||
padding:0px;
|
||||
}
|
||||
select{
|
||||
padding:7px 4px;
|
||||
background-color:#FFFFFF;
|
||||
}
|
||||
|
||||
input[type=submit] {
|
||||
color:white;
|
||||
background:#27ae60;
|
||||
padding:4px 10px;
|
||||
cursor:pointer;
|
||||
border:0px solid;
|
||||
}
|
||||
|
||||
input[type=submit]:hover{
|
||||
background:#2c3e50;
|
||||
}
|
||||
|
||||
input[type=checkbox]{
|
||||
margin-right:5px;
|
||||
}
|
||||
|
||||
input[type=image] {
|
||||
border:1px solid #d0cdc4;
|
||||
}
|
||||
|
||||
input[type=checkbox],input[type=radio]{
|
||||
border:1px solid #e5e5e5;
|
||||
padding:2px 5px;
|
||||
}
|
||||
|
||||
code{
|
||||
background:#f0ffe1;
|
||||
border:1px dashed #d5f1b9;
|
||||
padding:2px 4px;
|
||||
font-family:"Monaco","Courier New";
|
||||
}
|
||||
code a:hover{background:transparent}
|
||||
|
||||
table{
|
||||
margin:10px 0px;
|
||||
border:1px solid #E6E6E6;
|
||||
background-color:#FFFFFF;
|
||||
}
|
||||
|
||||
tbody tr:hover td,tbody tr:hover th{
|
||||
background:#edf4ff
|
||||
}
|
||||
|
||||
thead th, thead td {
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
font-weight:bold;
|
||||
white-space:nowrap;
|
||||
border-right:1px solid #34495e;
|
||||
background:#34495e;
|
||||
color:#FFFFFF;
|
||||
padding-right:10px;
|
||||
}
|
||||
thead th acronym, thead td acronym, thead th sup, thead td sup{
|
||||
color:#CCDDFF;
|
||||
}
|
||||
|
||||
th,td{
|
||||
border:1px solid rgba(233,233,233,.3);
|
||||
padding:3px 6px;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
th a {
|
||||
font-weight:bold;
|
||||
padding-bottom:0px;
|
||||
text-shadow:1px 1px 1px #FFF;
|
||||
}
|
||||
|
||||
th {
|
||||
background:white;
|
||||
}
|
||||
|
||||
tr.odd td {
|
||||
background:#fcfaf5;
|
||||
}
|
||||
|
||||
#content tbody tr.checked td, tr.checked.odd td {
|
||||
background:#fbe2e2;
|
||||
color:red;
|
||||
}
|
||||
|
||||
.hidden{
|
||||
display:none
|
||||
}
|
||||
|
||||
.error,.message{
|
||||
padding:0px;
|
||||
background:transparent;
|
||||
font-weight:bold
|
||||
}
|
||||
|
||||
.error{
|
||||
color:#c00
|
||||
}
|
||||
|
||||
.message{
|
||||
color:#090
|
||||
}
|
||||
|
||||
#content{
|
||||
margin:0px 0px 0px 320px;
|
||||
padding:50px 20px 40px 0px;
|
||||
height:100%;
|
||||
}
|
||||
|
||||
#lang {
|
||||
/* background:#ecf0f1; */
|
||||
color:#fff;
|
||||
position:fixed;
|
||||
top:auto;
|
||||
bottom: 0px;
|
||||
left:0px;
|
||||
width: 242px;
|
||||
padding:10px 20px;
|
||||
z-index:1;
|
||||
}
|
||||
|
||||
#breadcrumb {
|
||||
position:fixed;
|
||||
top:0px;
|
||||
left:300px;
|
||||
background:#48A5BF;
|
||||
z-index:2;
|
||||
width:100%;
|
||||
color:#ecf0f1;
|
||||
padding:10px;
|
||||
font-size:15px;
|
||||
font-weight:bold;
|
||||
}
|
||||
#breadcrumb a{
|
||||
color:#ecf0f1;
|
||||
font-size:15px;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
#menu {
|
||||
background:#34495e;
|
||||
position:fixed;
|
||||
top:-10px;
|
||||
color:#FFF;
|
||||
padding:20px;
|
||||
/* padding-top:40px; */
|
||||
bottom:0px;
|
||||
overflow:auto;
|
||||
left:0px;
|
||||
width:240px;
|
||||
border-right:2px solid #34495e;
|
||||
}
|
||||
|
||||
#menu p, #tables{
|
||||
border-bottom:1px solid rgb(85, 112, 139);
|
||||
}
|
||||
|
||||
#menu a{
|
||||
color:#FFF;
|
||||
}
|
||||
|
||||
#schema .table {
|
||||
padding:5px;
|
||||
background:#fcfaf5;
|
||||
border:1px solid #d0cdc4;
|
||||
}
|
||||
|
||||
#schema .table b {
|
||||
color:#006aeb;
|
||||
font-weight:bold;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
#schema .table b:hover {
|
||||
color:white;
|
||||
}
|
||||
|
||||
input[name=logout] {
|
||||
color:#fce2e2;
|
||||
background:#d73e3e;
|
||||
}
|
||||
|
||||
input[name=drop] {
|
||||
background-color:#c0392b;
|
||||
}
|
||||
|
||||
input[name=logout]:hover {
|
||||
background:#ea0202;
|
||||
}
|
||||
|
||||
#logins a, #tables a {
|
||||
background:none;
|
||||
}
|
||||
|
||||
#logins a:hover, #tables a:hover {
|
||||
|
||||
}
|
||||
|
||||
#logout {
|
||||
color:#FFF;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
#logout:hover {
|
||||
color:red;
|
||||
}
|
||||
|
||||
.logout {
|
||||
z-index:3;
|
||||
}
|
||||
|
||||
.js .column {
|
||||
background:#ecf0f1;
|
||||
}
|
||||
|
||||
#content table thead a.text:hover {
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
#version, .version {
|
||||
font-size:50%;
|
||||
}
|
||||
|
||||
#h1:hover {
|
||||
color:white;
|
||||
}
|
||||
|
||||
|
||||
input[type=submit] {
|
||||
font-size:13px;
|
||||
font-weight:normal;
|
||||
-moz-border-radius:1px;
|
||||
-webkit-border-radius:1px;
|
||||
border-radius:1px;
|
||||
border:0px solid #469df5;
|
||||
padding:4px 12px;
|
||||
text-decoration:none;
|
||||
background-color:#65ADC3;
|
||||
color:#ffffff;
|
||||
display:inline-block;
|
||||
text-shadow:0px 01px 0px #287ace;
|
||||
-webkit-box-shadow:inset 0px 0px 0px 0px #cae3fc;
|
||||
-moz-box-shadow:inset 0px 0px 0px 0px #cae3fc;
|
||||
box-shadow:inset 0px 0px 0px 0px #cae3fc;
|
||||
}
|
||||
input[type=submit]:hover {
|
||||
background-color:#34495e;
|
||||
text-shadow:0px 1px 0px #000;
|
||||
}
|
||||
input[type=submit]:active {
|
||||
position:relative;
|
||||
top:1px;
|
||||
}
|
||||
|
||||
|
||||
table
|
||||
{
|
||||
position: relative;
|
||||
}
|
||||
table:before, table:after
|
||||
{
|
||||
z-index: -1;
|
||||
position: absolute;
|
||||
content: "";
|
||||
bottom: 15px;
|
||||
left: 10px;
|
||||
width: 50%;
|
||||
top: 80%;
|
||||
max-width:300px;
|
||||
background: #777;
|
||||
-webkit-box-shadow: 0 15px 10px #777;
|
||||
-moz-box-shadow: 0 15px 10px #777;
|
||||
box-shadow: 0 15px 10px #777;
|
||||
-webkit-transform: rotate(-3deg);
|
||||
-moz-transform: rotate(-3deg);
|
||||
-o-transform: rotate(-3deg);
|
||||
-ms-transform: rotate(-3deg);
|
||||
transform: rotate(-3deg);
|
||||
}
|
||||
table:after
|
||||
{
|
||||
-webkit-transform: rotate(3deg);
|
||||
-moz-transform: rotate(3deg);
|
||||
-o-transform: rotate(3deg);
|
||||
-ms-transform: rotate(3deg);
|
||||
transform: rotate(3deg);
|
||||
right: 10px;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
i {
|
||||
font-style: italic;
|
||||
color: gray;
|
||||
font-size: 90%;
|
||||
font-family: monospace;
|
||||
border: 1px silver solid;
|
||||
}
|
||||
1807
adminer.php
Normal file
1807
adminer.php
Normal file
File diff suppressed because one or more lines are too long
17
index.php
Normal file
17
index.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
function adminer_object() {
|
||||
include_once "./plugin.php";
|
||||
$plugins = array();
|
||||
|
||||
foreach (glob("plugins/*.php") as $filename) {
|
||||
include_once "./$filename";
|
||||
$plugin = str_replace('plugins/', '', $filename);
|
||||
$plugin = str_replace('.php', '', $plugin);
|
||||
$plugins[] = new $plugin();
|
||||
}
|
||||
|
||||
return new AdminerPlugin($plugins);
|
||||
}
|
||||
|
||||
include "./adminer.php";
|
||||
360
plugin.php
Normal file
360
plugin.php
Normal file
|
|
@ -0,0 +1,360 @@
|
|||
<?php
|
||||
|
||||
/** Adminer customization allowing usage of plugins
|
||||
* @link https://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerPlugin extends Adminer {
|
||||
/** @access protected */
|
||||
var $plugins;
|
||||
|
||||
function _findRootClass($class) { // is_subclass_of(string, string) is available since PHP 5.0.3
|
||||
do {
|
||||
$return = $class;
|
||||
} while ($class = get_parent_class($class));
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Register plugins
|
||||
* @param array object instances or null to register all classes starting by 'Adminer'
|
||||
*/
|
||||
function __construct($plugins) {
|
||||
if ($plugins === null) {
|
||||
$plugins = array();
|
||||
foreach (get_declared_classes() as $class) {
|
||||
if (preg_match('~^Adminer.~i', $class) && strcasecmp($this->_findRootClass($class), 'Adminer')) { //! can use interface
|
||||
$plugins[$class] = new $class;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->plugins = $plugins;
|
||||
//! it is possible to use ReflectionObject to find out which plugins defines which methods at once
|
||||
}
|
||||
|
||||
function _callParent($function, $args) {
|
||||
return call_user_func_array(array('parent', $function), $args);
|
||||
}
|
||||
|
||||
function _applyPlugin($function, $args) {
|
||||
foreach ($this->plugins as $plugin) {
|
||||
if (method_exists($plugin, $function)) {
|
||||
switch (count($args)) { // call_user_func_array() doesn't work well with references
|
||||
case 0: $return = $plugin->$function(); break;
|
||||
case 1: $return = $plugin->$function($args[0]); break;
|
||||
case 2: $return = $plugin->$function($args[0], $args[1]); break;
|
||||
case 3: $return = $plugin->$function($args[0], $args[1], $args[2]); break;
|
||||
case 4: $return = $plugin->$function($args[0], $args[1], $args[2], $args[3]); break;
|
||||
case 5: $return = $plugin->$function($args[0], $args[1], $args[2], $args[3], $args[4]); break;
|
||||
case 6: $return = $plugin->$function($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]); break;
|
||||
default: trigger_error('Too many parameters.', E_USER_WARNING);
|
||||
}
|
||||
if ($return !== null) {
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->_callParent($function, $args);
|
||||
}
|
||||
|
||||
function _appendPlugin($function, $args) {
|
||||
$return = $this->_callParent($function, $args);
|
||||
foreach ($this->plugins as $plugin) {
|
||||
if (method_exists($plugin, $function)) {
|
||||
$return += call_user_func_array(array($plugin, $function), $args);
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
// appendPlugin
|
||||
|
||||
function dumpFormat() {
|
||||
$args = func_get_args();
|
||||
return $this->_appendPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function dumpOutput() {
|
||||
$args = func_get_args();
|
||||
return $this->_appendPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function editFunctions($field) {
|
||||
$args = func_get_args();
|
||||
return $this->_appendPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
// applyPlugin
|
||||
|
||||
function name() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function credentials() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function permanentLogin($create = false) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function database() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function schemas() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function databases($flush = true) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function queryTimeout() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function headers() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function head() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function loginForm() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function login($login, $password) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function tableName($tableStatus) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function fieldName($field, $order = 0) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectLinks($tableStatus, $set = "") {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function foreignKeys($table) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function backwardKeys($table, $tableName) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function backwardKeysPrint($backwardKeys, $row) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectQuery($query, $time) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function sqlCommandQuery($query) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function rowDescription($table) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function rowDescriptions($rows, $foreignKeys) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectLink($val, $field) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectVal($val, $link, $field, $original) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function editVal($val, $field) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function tableStructurePrint($fields) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function tableIndexesPrint($indexes) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectColumnsPrint($select, $columns) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectSearchPrint($where, $columns, $indexes) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectOrderPrint($order, $columns, $indexes) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectLimitPrint($limit) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectLengthPrint($text_length) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectActionPrint($indexes) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectCommandPrint() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectImportPrint() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectEmailPrint($emailFields, $columns) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectColumnsProcess($columns, $indexes) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectSearchProcess($fields, $indexes) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectOrderProcess($fields, $indexes) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectLimitProcess() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectLengthProcess() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectEmailProcess($where, $foreignKeys) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectQueryBuild($select, $where, $group, $order, $limit, $page) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function messageQuery($query, $time) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function processInput($field, $value, $function = "") {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function dumpDatabase($db) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function dumpTable($table, $style, $is_view = 0) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function dumpData($table, $style, $query) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function dumpFilename($identifier) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function dumpHeaders($identifier, $multi_table = false) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function homepage() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function navigation($missing) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function databasesPrint($missing) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function tablesPrint($tables) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
}
|
||||
28
plugins/AdminerFrames.php
Normal file
28
plugins/AdminerFrames.php
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
/** Allow using Adminer inside a frame (disables ClickJacking protection)
|
||||
* @link https://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerFrames {
|
||||
/** @access protected */
|
||||
var $sameOrigin;
|
||||
|
||||
/**
|
||||
* @param bool allow running from the same origin only
|
||||
*/
|
||||
function __construct($sameOrigin = false) {
|
||||
$this->sameOrigin = $sameOrigin;
|
||||
}
|
||||
|
||||
function headers() {
|
||||
if ($this->sameOrigin) {
|
||||
header("X-Frame-Options: SameOrigin");
|
||||
}
|
||||
header("X-XSS-Protection: 0");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
138
plugins/AdminerSimpleMenu.php
Normal file
138
plugins/AdminerSimpleMenu.php
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Displays only one prefered action in table list.
|
||||
*
|
||||
* Get rid of schizophrenic decisions between selecting data and showing table structure.
|
||||
* Optimize your workflow!
|
||||
*
|
||||
* @author Peter Knut
|
||||
* @copyright 2014-2015 Pematon, s.r.o. (http://www.pematon.com/)
|
||||
*/
|
||||
class AdminerSimpleMenu
|
||||
{
|
||||
/** @var bool */
|
||||
private $preferSelect;
|
||||
|
||||
/** @var bool */
|
||||
private $reorderLinks;
|
||||
|
||||
/**
|
||||
* @param bool $preferSelect Whether to prefer table selection before editing structure.
|
||||
* @param bool $reorderLinks Whether links above data table will be reordered to reflect workflow priority.
|
||||
*/
|
||||
public function AdminerSimpleMenu($preferSelect = true, $reorderLinks = true)
|
||||
{
|
||||
$this->preferSelect = $preferSelect;
|
||||
$this->reorderLinks = $reorderLinks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints HTML code inside <head>.
|
||||
*/
|
||||
public function head()
|
||||
{
|
||||
?>
|
||||
|
||||
<style>
|
||||
#tables {
|
||||
margin: 0;
|
||||
padding: 0.8em 1em;
|
||||
border-bottom: 1px solid #ccc;
|
||||
list-style: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints table list in menu.
|
||||
*
|
||||
* @param array $tables Table list.
|
||||
* @return bool|null
|
||||
*/
|
||||
public function tablesPrint($tables)
|
||||
{
|
||||
if (defined("PMTN_ADMINER_THEME")) {
|
||||
echo "<ul id='tables' class='simple'>\n";
|
||||
} else {
|
||||
echo "<ul id='tables' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);' class='simple'>\n";
|
||||
}
|
||||
|
||||
foreach ($tables as $table => $status) {
|
||||
$name = Adminer::tableName($status);
|
||||
$active = in_array($table, array($_GET["select"], $_GET["edit"], $_GET["table"], $_GET["create"], $_GET["indexes"], $_GET["foreign"], $_GET["trigger"]));
|
||||
|
||||
if ($this->preferSelect) {
|
||||
$action = "select";
|
||||
$title = "Select data";
|
||||
} else {
|
||||
$action = "table";
|
||||
$title = "Show structure";
|
||||
}
|
||||
|
||||
echo "<li>";
|
||||
if ($this->preferSelect || support("table") || support("indexes")) {
|
||||
echo '<a href="' . h(ME) . $action . '=' . urlencode($table) . '"' . bold($active, (is_view($status) ? "view" : "")) . " title='" . lang($title) . "'>$name</a>";
|
||||
} else {
|
||||
echo "<span>$name</span>";
|
||||
}
|
||||
echo "</li>\n";
|
||||
}
|
||||
|
||||
echo "</ul>\n";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Prints links after select heading.
|
||||
*
|
||||
* @param array $tableStatus Result of SHOW TABLE STATUS.
|
||||
* @param string $set New item options, NULL for no new item.
|
||||
*
|
||||
* @return bool|null
|
||||
*/
|
||||
public function selectLinks($tableStatus, $set = "")
|
||||
{
|
||||
if (!$this->reorderLinks) {
|
||||
return null; // null has to be returned to force Adminer print original links.
|
||||
}
|
||||
|
||||
echo '<p class="links">';
|
||||
|
||||
$links = array();
|
||||
|
||||
if ($this->preferSelect) {
|
||||
$links["select"] = lang('Select data');
|
||||
}
|
||||
|
||||
if (support("table") || support("indexes")) {
|
||||
$links["table"] = lang('Show structure');
|
||||
}
|
||||
|
||||
if (!$this->preferSelect) {
|
||||
$links["select"] = lang('Select data');
|
||||
}
|
||||
|
||||
if (support("table")) {
|
||||
if (is_view($tableStatus)) {
|
||||
$links["view"] = lang('Alter view');
|
||||
} else {
|
||||
$links["create"] = lang('Alter table');
|
||||
}
|
||||
}
|
||||
|
||||
if ($set !== null) {
|
||||
$links["edit"] = lang('New item');
|
||||
}
|
||||
|
||||
foreach ($links as $key => $val) {
|
||||
echo " <a href='" . h(ME) . "$key=" . urlencode($tableStatus["Name"]) . ($key == "edit" ? $set : "") . "'" . bold(isset($_GET[$key])) . ">$val</a>";
|
||||
}
|
||||
|
||||
echo "\n";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue