Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/HuasoFoundries/phpPgAdmin6.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Figueroa <amenadiel@gmail.com>2021-03-16 09:56:55 +0300
committerFelipe Figueroa <amenadiel@gmail.com>2021-03-16 09:56:55 +0300
commit978c0359fc0d332f175b6c9af314886dfa77f340 (patch)
tree179c098505f4be2ac911744a380d174d8d5ec8d0
parent4c18f3e766270c68a9ae0d7c49a2de76cbfca0e2 (diff)
got new layout working
-rw-r--r--.configs/debug.kint.php48
-rw-r--r--.jsbeautifyrc56
-rw-r--r--assets/js/footer_scripts.js30
-rw-r--r--assets/js/toplinks_behavior.js3
-rw-r--r--assets/templates/browser.twig23
-rw-r--r--assets/templates/components/common_body.twig3
-rw-r--r--assets/templates/components/common_head.twig2
-rw-r--r--assets/templates/components/tabs.twig1
-rw-r--r--assets/templates/footer.twig14
-rw-r--r--assets/templates/header.twig16
-rw-r--r--assets/themes/global.css127
-rw-r--r--assets/themes/global.less1299
-rw-r--r--src/classes/Connection.php2
-rw-r--r--src/classes/ContainerUtils.php75
-rw-r--r--src/controllers/AggregatesController.php8
-rw-r--r--src/controllers/AlldbController.php6
-rw-r--r--src/controllers/BaseController.php1
-rw-r--r--src/controllers/ColpropertiesController.php4
-rw-r--r--src/controllers/ConstraintsController.php4
-rw-r--r--src/controllers/DatabaseController.php18
-rw-r--r--src/controllers/DataexportController.php2
-rw-r--r--src/controllers/DisplayController.php503
-rw-r--r--src/controllers/DomainsController.php10
-rw-r--r--src/controllers/FulltextController.php18
-rw-r--r--src/controllers/FunctionsController.php16
-rw-r--r--src/controllers/GroupsController.php6
-rw-r--r--src/controllers/HistoryController.php8
-rw-r--r--src/controllers/IndexesController.php6
-rw-r--r--src/controllers/LoginController.php2
-rw-r--r--src/controllers/MaterializedviewpropertiesController.php6
-rw-r--r--src/controllers/MaterializedviewsController.php6
-rw-r--r--src/controllers/OperatorsController.php2
-rw-r--r--src/controllers/PrivilegesController.php2
-rw-r--r--src/controllers/RolesController.php12
-rw-r--r--src/controllers/RulesController.php4
-rw-r--r--src/controllers/SchemasController.php25
-rw-r--r--src/controllers/SequencesController.php8
-rw-r--r--src/controllers/SqlController.php90
-rw-r--r--src/controllers/SqleditController.php19
-rw-r--r--src/controllers/TablesController.php148
-rw-r--r--src/controllers/TablespacesController.php6
-rw-r--r--src/controllers/TblpropertiesController.php10
-rw-r--r--src/controllers/TreeController.php40
-rw-r--r--src/controllers/TriggersController.php10
-rw-r--r--src/controllers/TypesController.php12
-rw-r--r--src/controllers/UsersController.php52
-rw-r--r--src/controllers/ViewpropertiesController.php12
-rw-r--r--src/controllers/ViewsController.php6
-rw-r--r--src/database/Connection.php188
-rw-r--r--src/router.php31
-rw-r--r--src/xhtml/HTMLFooterController.php5
-rw-r--r--src/xhtml/HTMLHeaderController.php39
-rw-r--r--src/xhtml/HTMLNavbarController.php41
-rw-r--r--src/xhtml/HTMLTableController.php4
54 files changed, 1500 insertions, 1589 deletions
diff --git a/.configs/debug.kint.php b/.configs/debug.kint.php
index 97394bd6..2decaa6b 100644
--- a/.configs/debug.kint.php
+++ b/.configs/debug.kint.php
@@ -15,38 +15,44 @@ define('KINT_SKIP_FACADE', true);
Kint::$enabled_mode = true;
RichRenderer::$folder = false;
+ if (!\function_exists('kdump')) {
+ function kdump(...$vars): void
+ {
+ $fp = fopen(sprintf('%s/temp/debug.output.log', dirname(__DIR__)), 'ab');
- if (!\function_exists('dump')) {
- function dump(...$vars)
- {
- $fp = fopen(sprintf('%s/temp/debug.output.log', dirname(__DIR__)), 'ab');
-
- CliRenderer::$cli_colors = true;
- $return = Kint::$return;
- $enabled_mode = Kint::$enabled_mode;
- Kint::$return = true;
- Kint::$enabled_mode = Kint::MODE_CLI;
+ CliRenderer::$cli_colors = true;
+ $return = Kint::$return;
+ $enabled_mode = Kint::$enabled_mode;
+ Kint::$return = true;
+ Kint::$enabled_mode = Kint::MODE_CLI;
- $kintdump = Kint::dump(...$vars);
- //dump($kintdump);
- fwrite($fp, $kintdump);
+ $kintdump = Kint::dump(...$vars);
+ //dump($kintdump);
+ fwrite($fp, $kintdump);
- Kint::$enabled_mode = $enabled_mode;
- Kint::$return = $return;
+ Kint::$enabled_mode = $enabled_mode;
+ Kint::$return = $return;
- fclose($fp);
- }
- }
-
- function ddd(...$v): void
+ fclose($fp);
+ }}
+ if (!\function_exists('ddd')) {
+ function ddd(...$vars): void
{
- Kint::dump(...$v);
+ kdump(...$vars);
exit;
+ }}
+ if (!\function_exists('dump')) {
+ function dump(...$vars)
+ {
+ kdump(...$vars);
+ }
}
+
Kint::$aliases[] = ['PHPPgAdmin\\Traits\\HelperTrait', 'staticTrace'];
Kint::$aliases[] = ['PHPPgAdmin\\ContainerUtils', 'staticTrace'];
Kint::$aliases[] = ['PHPPgAdmin\\Traits\\HelperTrait', 'prTrace'];
Kint::$aliases[] = 'ddd';
Kint::$aliases[] = 'dump';
+ Kint::$aliases[] = 'kdump';
diff --git a/.jsbeautifyrc b/.jsbeautifyrc
deleted file mode 100644
index 3ff42934..00000000
--- a/.jsbeautifyrc
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- // The plugin looks for a .jsbeautifyrc file in the same directory as the
- // source file you're prettifying (or any directory above if it doesn't exist,
- // or in your home folder if everything else fails) and uses those options
- // along the default ones.
-
- // Details: https://github.com/victorporof/Sublime-HTMLPrettify#using-your-own-jsbeautifyrc-options
- // Documentation: https://github.com/einars/js-beautify/
-
- "html": {
- "allowed_file_extensions": ["htm", "html", "xhtml", "shtml", "xml", "svg", "hbs", "twig"],
- "brace_style": "collapse",
- "end_with_newline": false, // End output with newline
- "indent_char": " ", // Indentation character
- "indent_handlebars": false, // e.g. {{#foo}}, {{/foo}}
- "indent_inner_html": true, // Indent <head> and <body> sections
- "indent_scripts": "keep", // [keep|separate|normal]
- "indent_size": 4, // Indentation size
- "max_preserve_newlines": 1, // Maximum number of line breaks to be preserved in one chunk (0 disables)
- "preserve_newlines": true, // Whether existing line breaks before elements should be preserved (only works before elements, not inside tags or for text)
- "unformatted": ["a", "span", "img", "code", "pre", "sub", "sup", "em",
- "strong", "b", "i", "u", "strike", "big", "small", "pre", "h1", "h2", "h3",
- "h4", "h5", "h6"
- ], // List of tags that should not be reformatted
- "wrap_line_length": 0 // Lines should wrap at next opportunity after this number of characters (0 disables)
- },
- "css": {
- "allowed_file_extensions": ["css", "scss", "sass", "less"],
- "end_with_newline": false, // End output with newline
- "indent_char": " ", // Indentation character
- "indent_size": 4, // Indentation size
- "newline_between_rules": true, // Add a new line after every css rule
- "selector_separator": " ",
- "selector_separator_newline": true, // Separate selectors with newline or not (e.g. "a,\nbr" or "a, br"),
- "indent_with_tabs": true
- },
- "js": {
- "indent_size": 4,
- "indent_char": " ",
- "indent_level": 0,
- "indent_with_tabs": true,
- "preserve_newlines": true,
- "max_preserve_newlines": 3,
- "jslint_happy": true,
- "space_after_anon_function": false,
- "brace_style": "collapse",
- "keep_array_indentation": false,
- "keep_function_indentation": false,
- "space_before_conditional": true,
- "break_chained_methods": false,
- "eval_code": false,
- "unescape_strings": false,
- "wrap_line_length": 180
- }
-
-}
diff --git a/assets/js/footer_scripts.js b/assets/js/footer_scripts.js
index e8b606ff..5002dc87 100644
--- a/assets/js/footer_scripts.js
+++ b/assets/js/footer_scripts.js
@@ -24,10 +24,36 @@ function redirectToIframesView() {
$.ready
.then(() => {
+ stateObj.dttArgs = {
+ pageLength: 100,
+ };
// Need to open popup from parent document
stateObj.basePath =
window.parent.location.origin + (stateObj.subfolder || '');
+ if (stateObj.serverSide) {
+ let dttData = [...new URLSearchParams($('#sqlform').serialize())].reduce(
+ (accum, [key, value]) => {
+ accum[key] = value;
+ return accum;
+ },
+ {}
+ );
+ dttData.json = 'on';
+ stateObj.dttArgs = {
+ ...stateObj.dttArgs,
+ columns: stateObj.dttFields,
+ processing: !!stateObj.serverSide,
+ serverSide: !!stateObj.serverSide,
+ ajax: !stateObj.serverSide
+ ? ''
+ : {
+ url: $('#sqlform').attr('action'),
+ method: 'POST',
+ data: dttData,
+ },
+ };
+ }
let redirect_to = redirectToIframesView();
window.parent.document.title = window.document.title;
@@ -76,9 +102,7 @@ $.ready
jQuery('.select2').select2();
}
if (jqFn.DataTable) {
- $('.will_be_datatable').DataTable({
- pageLength: 100,
- });
+ stateObj.dataTable = $('.will_be_datatable').DataTable(stateObj.dttArgs);
}
if (hljsFn.highlightBlock) {
diff --git a/assets/js/toplinks_behavior.js b/assets/js/toplinks_behavior.js
index 58dbd149..596f23eb 100644
--- a/assets/js/toplinks_behavior.js
+++ b/assets/js/toplinks_behavior.js
@@ -24,6 +24,7 @@ function addBehaviorToTopLinks(amIDetailFrame) {
),
].forEach((element) => {
element.addEventListener('click', (e) => {
+ window.name = 'detail';
window
.open(
`${element.getAttribute('rel')}`,
@@ -37,7 +38,7 @@ function addBehaviorToTopLinks(amIDetailFrame) {
toplink_logout.addEventListener('click', (e) => {
e.preventDefault();
if (confirm(stateObj.strconfdropcred)) {
- window.location.href = e.target.href;
+ window.location.href = e.target.getAttribute('rel');
}
});
diff --git a/assets/templates/browser.twig b/assets/templates/browser.twig
deleted file mode 100644
index b7b7dbe6..00000000
--- a/assets/templates/browser.twig
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html xml:lang="{{lang.applocale}}" lang="{{lang.applocale}}" dir="{{lang.applangdir}}">
-
- <head data-headertemplate="{{headertemplate}}">
- {% include 'components/common_head.twig' %}
-
- <script src="{{subfolder}}/assets/vendor/jstree/jstree.min.js"></script>
- <style type="text/css">
- .refreshTree {
- position: absolute;
- right: 0;
- z-index: 1000;
- }
- </style>
- </head>
-
- <body class="browser">
- {% include 'components/browser_body.twig' %}
- <script src="{{subfolder}}/assets/js/jstree_events.js"></script>
-
- </body>
-
-</html>
diff --git a/assets/templates/components/common_body.twig b/assets/templates/components/common_body.twig
index 7738aecf..bfbfa370 100644
--- a/assets/templates/components/common_body.twig
+++ b/assets/templates/components/common_body.twig
@@ -1,6 +1,6 @@
<body data-controller="{{ controller_name }}" class="{{ bodyClass }}" {{ onload }}>
<div class="flexbox_wrapper">
- {% if includeJsTree %}
+ {% if excludeJsTree==false %}
<div id="masking_overlay"></div>
<div id="browser_container">
@@ -16,4 +16,3 @@
{% endif %}
<div id="detail" class="detail_container">
- \ No newline at end of file
diff --git a/assets/templates/components/common_head.twig b/assets/templates/components/common_head.twig
index ace59995..89294061 100644
--- a/assets/templates/components/common_head.twig
+++ b/assets/templates/components/common_head.twig
@@ -31,6 +31,7 @@
{% for key, value in params %}
'{{ key }}' : "{{ value }}",
{% endfor %}
+serverSide:!!'{{serverSide}}',
dir: '{{ lang.applangdir }}',
in_test: '{{ in_test }}',
reload: '{{ reload }}',
@@ -41,6 +42,7 @@ query_string:"{{ query_string }}",
strconfdropcred:"{{ lang.strconfdropcred }}",
origin: globalThis.location.origin,
url:"{{ url }}",
+dttFields: {{dttFields|json_encode|raw}},
href: globalThis.location.href,
guessedSubfolder: ('' + globalThis.location.pathname).replace("/ {{ path }}", ''),
pathname: globalThis.location.pathname
diff --git a/assets/templates/components/tabs.twig b/assets/templates/components/tabs.twig
index cc70c994..c5084fb3 100644
--- a/assets/templates/components/tabs.twig
+++ b/assets/templates/components/tabs.twig
@@ -18,4 +18,5 @@
</div>
+<div class="max_height {{ controller_name }}">
<div class="clearfix">&nbsp;</div>
diff --git a/assets/templates/footer.twig b/assets/templates/footer.twig
index ba134db4..bfac764c 100644
--- a/assets/templates/footer.twig
+++ b/assets/templates/footer.twig
@@ -1,5 +1,13 @@
-{{script_footer|raw}}
+{{script_footer|raw}}
+{% if codemirror == true %}
+<script type="text/javascript">
+CodeMirror.modeURL = "{{subfolder}}/assets/vendor/codemirror/mode/%N/%N.js";
+</script>
+<script src="{{subfolder}}/assets/js/codemirror/codemirror_footer.js" type="text/javascript"></script>
+<!--<script src="{{subfolder}}/assets/js/footer_scripts.js" type="text/javascript"></script>-->
+<script src="{{subfolder}}/assets/js/footer_sqledit.js" type="text/javascript"></script>
+{% endif %}
{% if print_bottom_link == true %}
<a data-footertemplate="{{footer_template}}" href="#" class="bottom_link">{{lang.strgotoppage}}</a>
{% endif %}
@@ -26,4 +34,6 @@ console.log('Service Worker Registered');
console.warn(warn);
})
}
-</script></body></html>
+</script>
+</div>
+</body></html>
diff --git a/assets/templates/header.twig b/assets/templates/header.twig
index f233670c..fd6bbb3a 100644
--- a/assets/templates/header.twig
+++ b/assets/templates/header.twig
@@ -8,13 +8,13 @@
<script src="{{ subfolder }}/assets/vendor/jquery-resizable.js"></script>
<script src="{{ subfolder }}/assets/vendor/jstree/jstree.min.js"></script>
<meta name="header_template" value="{{headertemplate}}"/>
-{% if headertemplate == 'header_datatables.twig' %}
+{% if headertemplate == 'header_datatables.twig' or datatables == true %}
<link rel="stylesheet" href="{{subfolder}}/assets/vendor/datatables/datatables.min.css" type="text/css"/>
<script src="{{subfolder}}/assets/vendor/datatables/datatables.min.js"></script>
{% endif %}
-{% if headertemplate == 'header_select2.twig' %}
+{% if headertemplate == 'header_select2.twig' %}
<link rel="stylesheet" href="{{subfolder}}/assets/vendor/select2/css/select2.css" type="text/css"/>
<script src="{{subfolder}}/assets/vendor/select2/js/select2.full.min.js"></script>
<script src="{{subfolder}}/assets/vendor/select2/js/i18n/{{lang.isolang}}.js"></script>
@@ -24,7 +24,17 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css" type="text/css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
{% endif %}
-<script defer src="{{subfolder}}/assets/js/jstree_events.js"></script>
+
+{% if codemirror==true %}
+
+ <link href="{{subfolder}}/assets/vendor/codemirror/lib/codemirror.css" type="text/css" rel="stylesheet"/>
+ <script src="{{subfolder}}/assets/vendor/codemirror/lib/codemirror.js"></script>
+ <script src="{{subfolder}}/assets/vendor/codemirror/addon/mode/loadmode.js"></script>
+ <script src="{{subfolder}}/assets/vendor/codemirror/mode/meta.js"></script>
+
+{% endif %}
+{#<script defer src="{{subfolder}}/assets/js/jstree_events.js"></script>#}
</head>
+
</html>
diff --git a/assets/themes/global.css b/assets/themes/global.css
index 86f9c18e..e1fa56d6 100644
--- a/assets/themes/global.css
+++ b/assets/themes/global.css
@@ -12,6 +12,24 @@ html body {
/** FK browsing **/
/** Syntax highlighting **/
}
+html body .topbar_parent {
+ display: flex;
+ flex-direction: row;
+}
+html body .topbar_parent .logo {
+ width: 200px;
+ height: 100px;
+ flex: 250px 0;
+ background-position: 0;
+}
+html body .topbar_parent .trail_parent {
+ flex: 1 auto;
+ display: flex;
+ flex-direction: column;
+}
+html body .topbar_parent .trail_parent .topbar {
+ flex: 2 auto;
+}
html body.sql_edit #sqlform #queryedition {
min-height: 80px;
}
@@ -35,20 +53,23 @@ html body.sql_edit #sqlform #queryedition #query {
}
html body #detail.detail_container,
html body.detailbody {
- padding-top: 90px;
+ flex: 1 auto;
+ padding-top: 0;
margin-left: 10px !important;
padding-bottom: 20px;
}
+html body #detail.detail_container .max_height:not(.SqlEditController),
+html body.detailbody .max_height:not(.SqlEditController) {
+ max-height: calc(100vh - 91px);
+ max-width: calc(100vw - 275px);
+ overflow: auto;
+}
html body #detail.detail_container div.tabs,
html body.detailbody div.tabs {
display: flex;
- /* margin-top: 58px; */
- /* width: 100%; */
flex: 2 1 1500px;
flex-direction: row;
- position: relative;
right: 0;
- top: 60px;
}
html body #detail.detail_container div.tabs .tab,
html body.detailbody div.tabs .tab {
@@ -66,10 +87,6 @@ html body #detail.detail_container > table.tabs tbody tr td,
html body.detailbody > table.tabs tbody tr td {
white-space: nowrap;
}
-html body #detail.detail_container table,
-html body.detailbody table {
- min-width: calc(100vw - 370px);
-}
html body #detail.detail_container table.searchpath html body #detail.detail_container table#data td,
html body #detail.detail_container table.searchpath html body.detailbody table#data td,
html body.detailbody table.searchpath html body #detail.detail_container table#data td,
@@ -169,11 +186,8 @@ html body.detailbody table tr.data3 td.opbutton3 a {
white-space: nowrap;
color: #fff !important;
}
-html body #detail.detail_container {
- padding-top: 0 !important;
-}
html body #detail.detail_container .clearfix {
- height: 61px;
+ height: 20px;
clear: both;
display: block;
width: 40px;
@@ -182,12 +196,22 @@ html body #detail.detail_container table.tabs {
position: relative;
margin-right: -10px;
}
-html body #detail.detail_container .topbar {
+html body #detail.detail_container .fixed-top {
+ display: flex;
position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+}
+html body #detail.detail_container .topbar {
+ z-index: 100;
+ width: 100%;
+ top: 0;
+ margin-left: -10px !important;
}
html body #detail.detail_container .topbar .toplink {
- width: 180px;
- margin-right: 150px;
+ width: 200px;
+ margin-right: 15px;
}
html body #detail.detail_container .topbar .toplink button,
html body #detail.detail_container .topbar .toplink .toplink_popup {
@@ -202,7 +226,10 @@ html body #detail.detail_container .topbar .toplink .toplink_popup {
}
html body #detail.detail_container .trail {
height: 24px;
- position: fixed;
+ z-index: 100;
+ width: 100%;
+ top: 27px;
+ margin-left: -10px !important;
}
html body #detail.detail_container .trail .trail_table {
min-width: unset;
@@ -253,57 +280,12 @@ html body.sql_edit table.tabs {
html body.flexbox_body {
height: 100%;
margin: 0;
- /*
-
- & > .detail_container {
- height: 100%;
- width: 100%;
- margin: 0px;
- padding: 0px;
- text-align: left;
- float: left;
- flex: 1 1 1300px;
- }*/
- /*
- & > #browser_container {
- height: 100%;
- margin: 0px;
- padding: 0px;
- text-align: left;
- float: left;
- flex: 1 2 300px;
-
- & > .browser_container {
- height: 100%;
- margin: 0px;
- padding: 0px;
- text-align: left;
- float: left;
- width: 100%;
- }
-
- &.ui-resizable {
- width: 300px;
- //flex: unset;
- border-right: 8px solid #cfd8dc;
-
- .ui-resizable-handle.ui-resizable-e {
- width: 8px;
- right: -8px;
- background: #84a0ad;
- top: 45%;
- height: 50px;
- }
- }
- }
- */
}
html body.flexbox_body .flexbox_wrapper {
height: 100%;
margin: 0;
display: flex;
flex-direction: row;
- border: 1px solid silver;
overflow: hidden;
/* avoid browser level touch actions */
xtouch-action: none;
@@ -410,27 +392,6 @@ html body .arg_icon {
padding-right: 5pt;
padding-left: 5pt;
}
-html body .fixed-top {
- display: flex;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
-}
-html body .topbar {
- position: sticky;
- z-index: 100;
- width: 100%;
- top: 0;
- margin-left: -10px !important;
-}
-html body .trail {
- position: sticky;
- z-index: 100;
- width: 100%;
- top: 27px;
- margin-left: -10px !important;
-}
html body #fkbg {
display: none;
position: fixed;
diff --git a/assets/themes/global.less b/assets/themes/global.less
index 51a42628..743755c3 100644
--- a/assets/themes/global.less
+++ b/assets/themes/global.less
@@ -3,656 +3,655 @@
**/
html {
- height: 100%;
- margin: 0;
-
- body {
- &.sql_edit {
- #sqlform {
- #queryedition {
- min-height: 80px;
-
- & > .CodeMirror {
- min-height: 70px;
- .CodeMirror-scroll {
- .CodeMirror-sizer {
- margin-left: 40px !important;
- .cm-m-sql {
- &.cm-keyword {
- text-transform: uppercase;
- }
- }
- }
- .CodeMirror-gutters {
- .CodeMirror-linenumbers {
- min-width: 30px !important;
- }
- .CodeMirror-foldgutter {
- width: 0.7em !important;
- }
- }
- }
- }
-
- #query {
- min-height: 70px;
- }
- }
- }
- }
- #detail.detail_container,
- &.detailbody {
- padding-top: 90px; //margin-bottom: -90px;
- margin-left: 10px !important;
- padding-bottom: 20px;
- div.tabs {
- display: flex;
- /* margin-top: 58px; */
- /* width: 100%; */
- flex: 2 1 1500px;
- flex-direction: row;
- position: relative;
- right: 0;
- top: 60px;
- .tab {
- flex: 1 1 auto;
- flex-direction: column;
- }
- }
- & > table.tabs {
- position: fixed;
- top: 58px;
- z-index: 50;
- margin-left: -10px;
- z-index: 50;
-
- tbody {
- tr {
- td {
- white-space: nowrap;
- }
- }
- }
- }
- table {
- min-width: calc(100vw - 370px);
- &.searchpath &#data {
- td {
- white-space: nowrap;
-
- &.opbutton1,
- &.opbutton2,
- &.opbutton3 {
- border: 0 none;
- padding-left: 1px;
- padding-right: 1px;
-
- a {
- margin-left: 2px;
- margin-right: 2px;
- }
- }
- }
- }
-
- &.will_be_datatable {
- td {
- white-space: nowrap;
-
- &.opbutton1,
- &.opbutton2,
- &.opbutton3 {
- border: 0 none;
- padding-left: 1px;
- padding-right: 1px;
-
- a {
- margin-left: 2px;
- margin-right: 2px;
- }
- }
-
- &.comment {
- white-space: normal;
- }
- }
- }
-
- tr.data1 td.opbutton1 a,
- tr.data2 td.opbutton2 a,
- tr.data3 td.opbutton3 a {
- -webkit-background-clip: border-box;
- -webkit-background-origin: padding-box;
- -webkit-background-size: auto;
- -webkit-user-select: none;
- background-attachment: scroll;
- background-clip: border-box;
- background-color: rgb(66, 139, 202);
- background-image: none;
- background-origin: padding-box;
- background-size: auto;
- border: 1px solid #999;
- border-radius: 1.5px;
- cursor: pointer;
- display: inline-block;
- font-size: 11px;
- font-weight: normal;
- height: 15px;
- line-height: 15px;
- margin-bottom: 0px;
- padding-bottom: 1px;
- padding-left: 5px;
- padding-right: 5px;
- padding-top: 1px;
- text-align: center;
- text-decoration: none;
- vertical-align: middle;
- white-space: nowrap;
- color: #fff !important;
- }
- }
- }
- #detail.detail_container {
- padding-top: 0 !important;
- .clearfix {
- height: 61px;
- clear: both;
- display: block;
- width: 40px;
- }
- table {
- &.tabs {
- position: relative;
- margin-right: -10px;
- }
- }
- .topbar {
- position: fixed;
- .toplink {
- width: 180px;
- margin-right: 150px;
- button,
- .toplink_popup {
- font-size:1.05em;
- border: 1px solid rgba(51, 102, 153,0.5);
- border-radius: 4px;
- float:left;
- margin-right:3px;
- font-weight: bold;
- color:#336699;
- cursor:pointer;
- }
- }
- }
- .trail {
- height:24px;
- position: fixed;
- .trail_table {
- min-width:unset;
- }
- .searchpath {
- min-width:unset;
-right:0;
-position:fixed;
-top:25px;
- }
- }
- }
- .navlink {
- li {
- a {
- -webkit-background-clip: border-box;
- -webkit-background-origin: padding-box;
- -webkit-background-size: auto;
- -webkit-user-select: none;
- background-attachment: scroll;
- background-clip: border-box;
- background-color: rgb(66, 139, 202);
- background-image: none;
- background-origin: padding-box;
- background-size: auto;
- border: 1px solid #999;
- border-radius: 1.5px;
- cursor: pointer;
- display: inline-block;
- font-size: 12px;
- font-weight: normal;
- height: 15px;
- line-height: 15px;
- margin-bottom: 0px;
- padding-bottom: 1px;
- padding-left: 5px;
- padding-right: 5px;
- padding-top: 1px;
- text-align: center;
- text-decoration: none;
- vertical-align: middle;
- white-space: nowrap;
- color: #fff !important;
- }
- }
- }
-
- &.sql_edit {
- //padding-top: 35px;
- #flexbox_wrapper {
- height: 100%;
- margin-top: 25px;
- }
-
- table.tabs {
- top: 0;
- }
- }
-
- &.flexbox_body {
- height: 100%;
- margin: 0;
-
- .flexbox_wrapper {
- height: 100%;
- margin: 0;
-
- display: flex;
- flex-direction: row;
- border: 1px solid silver;
- overflow: hidden;
-
- /* avoid browser level touch actions */
- xtouch-action: none;
-
- #browser_container {
- flex: 0 0 auto;
- /* only manually resize */
- //padding: 10px;
- width: 250px;
- min-height: 200px;
- min-width: 150px;
- white-space: nowrap;
- // background: #838383;
- color: white;
-
- .refreshTree {
- position: absolute;
- left: 200px;
- z-index: 1000;
- padding: 5px;
- width: 40px;
- }
- }
-
- .splitter {
- flex: 0 0 auto;
- width: 8px;
-
- min-height: 200px;
- cursor: col-resize;
- }
-
- #detail_container {
- flex: 1 1 auto;
- /* resizable */
- padding: 10px;
- width: 100%;
- min-height: 200px;
- min-width: 200px;
- background: #eee;
- }
- }
- /*
-
- & > .detail_container {
- height: 100%;
- width: 100%;
- margin: 0px;
- padding: 0px;
- text-align: left;
- float: left;
- flex: 1 1 1300px;
- }*/
- /*
- & > #browser_container {
- height: 100%;
- margin: 0px;
- padding: 0px;
- text-align: left;
- float: left;
- flex: 1 2 300px;
-
- & > .browser_container {
- height: 100%;
- margin: 0px;
- padding: 0px;
- text-align: left;
- float: left;
- width: 100%;
- }
-
- &.ui-resizable {
- width: 300px;
- //flex: unset;
- border-right: 8px solid #cfd8dc;
-
- .ui-resizable-handle.ui-resizable-e {
- width: 8px;
- right: -8px;
- background: #84a0ad;
- top: 45%;
- height: 50px;
- }
- }
- }
- */
-
- &.rtl {
- .flexbox_wrapper {
- & > .detail_container {
- float: right;
- flex-grow: 1;
- }
-
- & > #browser_container {
- float: right;
-
- flex: 0 0 300px;
-
- &.ui-resizable {
- flex: unset;
- border-right: 0 none;
- border-left: 8px solid #cfd8dc;
-
- .ui-resizable-handle.ui-resizable-w {
- width: 8px;
- left: -8px;
- background: #84a0ad;
- top: 45%;
- height: 50px;
- }
- }
- }
- }
- }
- }
-
- /** Browser Tree using XLoadTree 2 **/
- &.browser {
- height: 100%;
- margin: 0px;
- padding: 0px;
- text-align: left;
-
- .refreshTree {
- float: right;
- text-align: right;
- margin: 10px;
- padding: 0 3px;
- }
-
- .webfx-tree-row {
- white-space: nowrap;
- }
-
- .webfx-tree-children {
- background-repeat: repeat-y;
- background-position-y: 1px !important;
- /* IE only */
- }
-
- .webfx-tree-row img {
- vertical-align: middle;
- }
-
- .webfx-tree-item-label {
- margin-left: 0.5ex;
- }
-
- .webfx-tree-icon {
- margin-left: 1px;
- }
-
- .webfx-tree-hide-root {
- display: none;
- }
- }
-
- img {
- border: none;
- }
-
- p.message {
- color: blue;
- }
-
- p.comment {
- font-style: italic;
- }
-
- .left {
- text-align: left;
- }
-
- .pre {
- white-space: pre;
- }
-
- .arg_icon {
- padding-right: 5pt;
- padding-left: 5pt;
- }
- .fixed-top {
- display: flex;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- }
- .topbar {
- position: sticky;
- z-index: 100;
- width: 100%;
- top: 0;
- margin-left: -10px !important;
- }
-
- .trail {
- position: sticky;
- z-index: 100;
- width: 100%;
- top: 27px;
- margin-left: -10px !important;
- }
-
- /** auto-complete on insert **/
- #fkbg {
- display: none;
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: 10;
- }
-
- #fklist {
- display: none;
- position: absolute;
- background: #fff;
- border: 1px solid #000;
- overflow: auto;
- z-index: 15;
- }
-
- #fklist table {
- border-collapse: collapse;
- border: 1px solid #aaa;
- }
-
- #fklist th {
- border: 1px solid #aaa;
- }
-
- #fklist td,
- #fklist th {
- padding: 3px 10px;
- border-right: 1px solid #aaa;
- font-size: 12px;
- }
-
- #fklist td a {
- display: block;
- color: #000;
- }
-
- #fklist td a.fkval,
- p.errmsg {
- color: red;
- }
-
- .ac_values {
- width: 100%;
- }
-
- /** bottom link back to top **/
- .bottom_link {
- position: fixed;
- bottom: 0;
- right: 0;
- margin: 0;
- padding: 4px;
- background: #eee;
- border-top: 1px dotted #999;
- border-left: 1px dotted #999;
- font-size: smaller;
- }
-
- /** FK browsing **/
- div#root {
- position: absolute;
- }
-
- div.fk {
- margin-left: 20px;
- }
-
- div#fkcontainer {
- margin: 0;
- position: relative;
- width: 100%;
- background: none;
- border: 0px;
- }
-
- div.fk_value {
- display: inline-block;
- }
-
- .highlight {
- background-color: #ffff00;
- }
-
- /** Syntax highlighting **/
- .comment {
- color: #008080;
- }
-
- .keyword {
- color: #ff8000;
- }
-
- .literal {
- color: #808080;
- }
-
- .bold {
- font-weight: bold;
- }
-
- .select2-container {
- min-width: 250px;
- }
-
- form.sqlform {
- float: left;
- width: 100%;
-
- .sqledit_bottom_inputs {
- padding: 1%;
- width: 98%;
- float: left;
-
- p {
- label {
- float: left;
-
- #paginate {
- position: relative;
- top: 2px;
- }
- }
- }
- }
- }
-
- .searchpath {
- padding: 5px;
- clear: both;
- min-width:unset;
- float:left;
- }
-
- .CodeMirror {
- border: 1px solid #aaa;
- padding: 3px;
- font-size: 1.1em;
- line-height: 1.5em;
- }
- }
+ height: 100%;
+ margin: 0;
+
+ body {
+
+ .topbar_parent {
+ display: flex;
+ flex-direction: row;
+
+ .logo {
+ width: 200px;
+ height: 100px;
+ flex: 250px 0;
+ background-position: 0;
+ }
+
+ .trail_parent {
+ flex: 1 auto;
+ display: flex;
+ flex-direction: column;
+
+ .topbar {
+ flex: 2 auto;
+ }
+ }
+ }
+
+ &.sql_edit {
+ #sqlform {
+ #queryedition {
+ min-height: 80px;
+
+ &>.CodeMirror {
+ min-height: 70px;
+
+ .CodeMirror-scroll {
+ .CodeMirror-sizer {
+ margin-left: 40px !important;
+
+ .cm-m-sql {
+ &.cm-keyword {
+ text-transform: uppercase;
+ }
+ }
+ }
+
+ .CodeMirror-gutters {
+ .CodeMirror-linenumbers {
+ min-width: 30px !important;
+ }
+
+ .CodeMirror-foldgutter {
+ width: 0.7em !important;
+ }
+ }
+ }
+ }
+
+ #query {
+ min-height: 70px;
+ }
+ }
+ }
+ }
+
+ #detail.detail_container,
+ &.detailbody {
+ flex: 1 auto;
+
+ padding-top: 0; //margin-bottom: -90px;
+ margin-left: 10px !important;
+ padding-bottom: 20px;
+
+ .max_height:not(.SqlEditController) {
+ max-height: calc(100vh - 91px);
+ max-width: calc(100vw - 275px);
+ overflow:auto;
+ }
+
+ div.tabs {
+ display: flex;
+ flex: 2 1 1500px;
+ flex-direction: row;
+
+ right: 0;
+
+ .tab {
+ flex: 1 1 auto;
+ flex-direction: column;
+ }
+ }
+
+ &>table.tabs {
+ position: fixed;
+ top: 58px;
+ z-index: 50;
+ margin-left: -10px;
+ z-index: 50;
+
+ tbody {
+ tr {
+ td {
+ white-space: nowrap;
+ }
+ }
+ }
+ }
+
+ table {
+ //min-width: calc(100vw - 370px);
+
+ &.searchpath &#data {
+ td {
+ white-space: nowrap;
+
+ &.opbutton1,
+ &.opbutton2,
+ &.opbutton3 {
+ border: 0 none;
+ padding-left: 1px;
+ padding-right: 1px;
+
+ a {
+ margin-left: 2px;
+ margin-right: 2px;
+ }
+ }
+ }
+ }
+
+ &.will_be_datatable {
+ td {
+ white-space: nowrap;
+
+ &.opbutton1,
+ &.opbutton2,
+ &.opbutton3 {
+ border: 0 none;
+ padding-left: 1px;
+ padding-right: 1px;
+
+ a {
+ margin-left: 2px;
+ margin-right: 2px;
+ }
+ }
+
+ &.comment {
+ white-space: normal;
+ }
+ }
+ }
+
+ tr.data1 td.opbutton1 a,
+ tr.data2 td.opbutton2 a,
+ tr.data3 td.opbutton3 a {
+ -webkit-background-clip: border-box;
+ -webkit-background-origin: padding-box;
+ -webkit-background-size: auto;
+ -webkit-user-select: none;
+ background-attachment: scroll;
+ background-clip: border-box;
+ background-color: rgb(66, 139, 202);
+ background-image: none;
+ background-origin: padding-box;
+ background-size: auto;
+ border: 1px solid #999;
+ border-radius: 1.5px;
+ cursor: pointer;
+ display: inline-block;
+ font-size: 11px;
+ font-weight: normal;
+ height: 15px;
+ line-height: 15px;
+ margin-bottom: 0px;
+ padding-bottom: 1px;
+ padding-left: 5px;
+ padding-right: 5px;
+ padding-top: 1px;
+ text-align: center;
+ text-decoration: none;
+ vertical-align: middle;
+ white-space: nowrap;
+ color: #fff !important;
+ }
+ }
+ }
+
+ #detail.detail_container {
+
+ .clearfix {
+ height: 20px;
+ clear: both;
+ display: block;
+ width: 40px;
+ }
+
+ table {
+ &.tabs {
+ position: relative;
+ margin-right: -10px;
+ }
+ }
+
+ .fixed-top {
+ display: flex;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ }
+
+
+ .topbar {
+
+ z-index: 100;
+ width: 100%;
+ top: 0;
+ margin-left: -10px !important;
+
+ .toplink {
+ width: 200px;
+ margin-right: 15px;
+
+ button,
+ .toplink_popup {
+ font-size: 1.05em;
+ border: 1px solid rgba(51, 102, 153, 0.5);
+ border-radius: 4px;
+ float: left;
+ margin-right: 3px;
+ font-weight: bold;
+ color: #336699;
+ cursor: pointer;
+ }
+ }
+ }
+
+ .trail {
+ height: 24px;
+ z-index: 100;
+ width: 100%;
+ top: 27px;
+ margin-left: -10px !important;
+ .trail_table {
+ min-width: unset;
+ }
+
+ .searchpath {
+ min-width: unset;
+ right: 0;
+ position: fixed;
+ top: 25px;
+ }
+ }
+ }
+
+ .navlink {
+ li {
+ a {
+ -webkit-background-clip: border-box;
+ -webkit-background-origin: padding-box;
+ -webkit-background-size: auto;
+ -webkit-user-select: none;
+ background-attachment: scroll;
+ background-clip: border-box;
+ background-color: rgb(66, 139, 202);
+ background-image: none;
+ background-origin: padding-box;
+ background-size: auto;
+ border: 1px solid #999;
+ border-radius: 1.5px;
+ cursor: pointer;
+ display: inline-block;
+ font-size: 12px;
+ font-weight: normal;
+ height: 15px;
+ line-height: 15px;
+ margin-bottom: 0px;
+ padding-bottom: 1px;
+ padding-left: 5px;
+ padding-right: 5px;
+ padding-top: 1px;
+ text-align: center;
+ text-decoration: none;
+ vertical-align: middle;
+ white-space: nowrap;
+ color: #fff !important;
+ }
+ }
+ }
+
+ &.sql_edit {
+
+ //padding-top: 35px;
+ #flexbox_wrapper {
+ height: 100%;
+ margin-top: 25px;
+ }
+
+ table.tabs {
+ top: 0;
+ }
+ }
+
+ &.flexbox_body {
+ height: 100%;
+ margin: 0;
+
+ .flexbox_wrapper {
+ height: 100%;
+ margin: 0;
+
+ display: flex;
+ flex-direction: row;
+
+ overflow: hidden;
+
+ /* avoid browser level touch actions */
+ xtouch-action: none;
+
+ #browser_container {
+ flex: 0 0 auto;
+ /* only manually resize */
+ //padding: 10px;
+ width: 250px;
+ min-height: 200px;
+ min-width: 150px;
+ white-space: nowrap;
+ // background: #838383;
+ color: white;
+
+ .refreshTree {
+ position: absolute;
+ left: 200px;
+ z-index: 1000;
+ padding: 5px;
+ width: 40px;
+ }
+ }
+
+ .splitter {
+ flex: 0 0 auto;
+ width: 8px;
+
+ min-height: 200px;
+ cursor: col-resize;
+ }
+
+ #detail_container {
+ flex: 1 1 auto;
+ /* resizable */
+ padding: 10px;
+ width: 100%;
+ min-height: 200px;
+ min-width: 200px;
+ background: #eee;
+ }
+ }
+
+
+ &.rtl {
+ .flexbox_wrapper {
+ &>.detail_container {
+ float: right;
+ flex-grow: 1;
+ }
+
+ &>#browser_container {
+ float: right;
+
+ flex: 0 0 300px;
+
+ &.ui-resizable {
+ flex: unset;
+ border-right: 0 none;
+ border-left: 8px solid #cfd8dc;
+
+ .ui-resizable-handle.ui-resizable-w {
+ width: 8px;
+ left: -8px;
+ background: #84a0ad;
+ top: 45%;
+ height: 50px;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /** Browser Tree using XLoadTree 2 **/
+ &.browser {
+ height: 100%;
+ margin: 0px;
+ padding: 0px;
+ text-align: left;
+
+ .refreshTree {
+ float: right;
+ text-align: right;
+ margin: 10px;
+ padding: 0 3px;
+ }
+
+ .webfx-tree-row {
+ white-space: nowrap;
+ }
+
+ .webfx-tree-children {
+ background-repeat: repeat-y;
+ background-position-y: 1px !important;
+ /* IE only */
+ }
+
+ .webfx-tree-row img {
+ vertical-align: middle;
+ }
+
+ .webfx-tree-item-label {
+ margin-left: 0.5ex;
+ }
+
+ .webfx-tree-icon {
+ margin-left: 1px;
+ }
+
+ .webfx-tree-hide-root {
+ display: none;
+ }
+ }
+
+ img {
+ border: none;
+ }
+
+ p.message {
+ color: blue;
+ }
+
+ p.comment {
+ font-style: italic;
+ }
+
+ .left {
+ text-align: left;
+ }
+
+ .pre {
+ white-space: pre;
+ }
+
+ .arg_icon {
+ padding-right: 5pt;
+ padding-left: 5pt;
+ }
+
+
+ /** auto-complete on insert **/
+ #fkbg {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 10;
+ }
+
+ #fklist {
+ display: none;
+ position: absolute;
+ background: #fff;
+ border: 1px solid #000;
+ overflow: auto;
+ z-index: 15;
+ }
+
+ #fklist table {
+ border-collapse: collapse;
+ border: 1px solid #aaa;
+ }
+
+ #fklist th {
+ border: 1px solid #aaa;
+ }
+
+ #fklist td,
+ #fklist th {
+ padding: 3px 10px;
+ border-right: 1px solid #aaa;
+ font-size: 12px;
+ }
+
+ #fklist td a {
+ display: block;
+ color: #000;
+ }
+
+ #fklist td a.fkval,
+ p.errmsg {
+ color: red;
+ }
+
+ .ac_values {
+ width: 100%;
+ }
+
+ /** bottom link back to top **/
+ .bottom_link {
+ position: fixed;
+ bottom: 0;
+ right: 0;
+ margin: 0;
+ padding: 4px;
+ background: #eee;
+ border-top: 1px dotted #999;
+ border-left: 1px dotted #999;
+ font-size: smaller;
+ }
+
+ /** FK browsing **/
+ div#root {
+ position: absolute;
+ }
+
+ div.fk {
+ margin-left: 20px;
+ }
+
+ div#fkcontainer {
+ margin: 0;
+ position: relative;
+ width: 100%;
+ background: none;
+ border: 0px;
+ }
+
+ div.fk_value {
+ display: inline-block;
+ }
+
+ .highlight {
+ background-color: #ffff00;
+ }
+
+ /** Syntax highlighting **/
+ .comment {
+ color: #008080;
+ }
+
+ .keyword {
+ color: #ff8000;
+ }
+
+ .literal {
+ color: #808080;
+ }
+
+ .bold {
+ font-weight: bold;
+ }
+
+ .select2-container {
+ min-width: 250px;
+ }
+
+ form.sqlform {
+ float: left;
+ width: 100%;
+
+ .sqledit_bottom_inputs {
+ padding: 1%;
+ width: 98%;
+ float: left;
+
+ p {
+ label {
+ float: left;
+
+ #paginate {
+ position: relative;
+ top: 2px;
+ }
+ }
+ }
+ }
+ }
+
+ .searchpath {
+ padding: 5px;
+ clear: both;
+ min-width: unset;
+ float: left;
+ }
+
+ .CodeMirror {
+ border: 1px solid #aaa;
+ padding: 3px;
+ font-size: 1.1em;
+ line-height: 1.5em;
+ }
+ }
}
@media print {
- @page {
- size: 215.9mm 279.4mm;
- margin: 5mm 5mm 5mm 5mm;
- orphans: 100;
- widows: 0;
- }
-
- html,
- body {
- height: 100%;
- width: 100%;
- }
-
- #browser_container {
- display: none;
- }
-
- body {
- margin: 0; //zoom: 0.9;
- background: white;
- background-color: #ffffff;
-
- .flexbox_wrapper > .detail_container {
- height: 100%;
- width: 100%;
- margin: 0px;
- padding: 0px;
- text-align: left;
- float: left;
- flex: 1 1;
- border: 4px red;
- }
-
- .topbar {
- display: none;
- }
-
- .trail {
- display: none;
- }
-
- h2 {
- display: none;
- }
- }
-}
+ @page {
+ size: 215.9mm 279.4mm;
+ margin: 5mm 5mm 5mm 5mm;
+ orphans: 100;
+ widows: 0;
+ }
+
+ html,
+ body {
+ height: 100%;
+ width: 100%;
+ }
+
+ #browser_container {
+ display: none;
+ }
+
+ body {
+ margin: 0; //zoom: 0.9;
+ background: white;
+ background-color: #ffffff;
+
+ .flexbox_wrapper>.detail_container {
+ height: 100%;
+ width: 100%;
+ margin: 0px;
+ padding: 0px;
+ text-align: left;
+ float: left;
+ flex: 1 1;
+ border: 4px red;
+ }
+
+ .topbar {
+ display: none;
+ }
+
+ .trail {
+ display: none;
+ }
+
+ h2 {
+ display: none;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/classes/Connection.php b/src/classes/Connection.php
index a27a1470..645169fa 100644
--- a/src/classes/Connection.php
+++ b/src/classes/Connection.php
@@ -109,7 +109,7 @@ class Connection
return null;
}
$serverInfo = $this->conn->ServerInfo();
- dump($serverInfo);
+ // dump($serverInfo);
$this->pgVersion = $serverInfo['version'];
$description = \sprintf(
'PostgreSQL %s',
diff --git a/src/classes/ContainerUtils.php b/src/classes/ContainerUtils.php
index 2fb57b7a..300effc0 100644
--- a/src/classes/ContainerUtils.php
+++ b/src/classes/ContainerUtils.php
@@ -142,7 +142,7 @@ class ContainerUtils extends Container implements ContainerInterface
self::$instance
->withConf(self::$envConfig);
-
+
$handlers = new ContainerHandlers(self::$instance);
$handlers->setExtra()
@@ -168,15 +168,15 @@ class ContainerUtils extends Container implements ContainerInterface
// if server_id isn't set, then you will be redirected to intro
if (null === $container->request->getQueryParam('server')) {
- $destinationurl = $this->subFolder. '/intro';
+ $destinationurl = $this->subFolder . '/intro';
} else {
// otherwise, you'll be redirected to the login page for that server;
- $destinationurl = $this->subFolder. '/login' . ($query_string ? '?' . $query_string : '');
+ $destinationurl = $this->subFolder . '/login' . ($query_string ? '?' . $query_string : '');
}
- $destinationurl= (strpos($destinationurl,'/')===0)? $destinationurl:'/'.$destinationurl;
- // ddd($destinationurl);
- return $destinationurl;
+ $destinationurl = (strpos($destinationurl, '/') === 0) ? $destinationurl : '/' . $destinationurl;
+ // ddd($destinationurl);
+ return $destinationurl;
}
/**
@@ -198,6 +198,38 @@ class ContainerUtils extends Container implements ContainerInterface
}
}
+ public function getActionUrl($subject, bool $debug = false)
+ {
+ $container = self::getContainerInstance();
+ $_server_info = $container->misc->getServerInfo();
+ $url = $container->misc->getLastTabURL($subject) ?? ['url' => 'alldb', 'urlvars' => ['subject' => 'server']];
+ $url['urlvars'] = array_merge([], $url['urlvars'] ?? []);
+
+
+ if (isset($_server_info['username']) && \is_array($url)) {
+
+
+
+
+
+ $this->addFlash($url, 'getLastTabURL for ' . $subject);
+ // Load query vars into superglobal arrays
+
+ $urlvars = [];
+
+ foreach ($url['urlvars'] as $key => $urlvar) {
+ //$this->prtrace($key, $urlvar);
+ $urlvars[$key] = Decorator::get_sanitized_value($urlvar, $_REQUEST);
+ }
+ $_REQUEST = \array_merge($_REQUEST, $urlvars);
+ $_GET = \array_merge($_GET, $urlvars);
+ $actionurl = Decorator::actionurl($url['url'], $_GET);
+ //kdump($actionurl);
+ return $actionurl;
+ }
+ //kdump($url);
+ return null;
+ }
/**
* Gets the destination with the last active tab selected for that controller
* Usually used after going through a redirect route.
@@ -206,7 +238,7 @@ class ContainerUtils extends Container implements ContainerInterface
*
* @return string The destination url with last tab set in the query string
*/
- public function getDestinationWithLastTab($subject,$urlvars=[])
+ public function getDestinationWithLastTab($subject, $urlvars = [])
{
$container = self::getContainerInstance();
$_server_info = $container->misc->getServerInfo();
@@ -214,17 +246,17 @@ class ContainerUtils extends Container implements ContainerInterface
//$this->prtrace('$_server_info', $_server_info);
// If username isn't set in server_info, you should login
$url = $container->misc->getLastTabURL($subject) ?? ['url' => 'alldb', 'urlvars' => ['subject' => 'server']];
- $url['urlvars']=array_merge($urlvars,$url['urlvars']??[]);
+ $url['urlvars'] = array_merge($urlvars, $url['urlvars'] ?? []);
$destinationurl = $this->getRedirectUrl();
if (isset($_server_info['username']) && \is_array($url)) {
-
-
-
-
-
- $this->addFlash($url, 'getLastTabURL for ' . $subject);
- // Load query vars into superglobal arrays
-
+
+
+
+
+
+ $this->addFlash($url, 'getLastTabURL for ' . $subject);
+ // Load query vars into superglobal arrays
+
$urlvars = [];
foreach ($url['urlvars'] as $key => $urlvar) {
@@ -233,12 +265,11 @@ class ContainerUtils extends Container implements ContainerInterface
}
$_REQUEST = \array_merge($_REQUEST, $urlvars);
$_GET = \array_merge($_GET, $urlvars);
-
- $actionurl = Decorator::actionurl($url['url'], $_GET);
- $destinationurl =str_replace($this->subFolder,'', $actionurl->value($_GET));
-
+
+ $actionurl = Decorator::actionurl($url['url'], $_GET);
+ $destinationurl = str_replace($this->subFolder, '', $actionurl->value($_GET));
}
- $destinationurl= (($container->subFolder==='' || strpos($destinationurl,$container->subFolder)===0)?'': $container->subFolder).$destinationurl;
+ $destinationurl = (($container->subFolder === '' || strpos($destinationurl, $container->subFolder) === 0) ? '' : $container->subFolder) . $destinationurl;
return $destinationurl;
}
@@ -295,7 +326,7 @@ class ContainerUtils extends Container implements ContainerInterface
$conf['plugins'] = [];
$container->BASE_PATH = $conf['BASE_PATH'];
- $container->subFolder = $conf['subfolder']??$conf['subFolder'];
+ $container->subFolder = $conf['subfolder'] ?? $conf['subFolder'];
$container->debug = $conf['debugmode'];
$container->THEME_PATH = $conf['theme_path'];
$container->IN_TEST = $conf['IN_TEST'];
diff --git a/src/controllers/AggregatesController.php b/src/controllers/AggregatesController.php
index 20d63135..55f124b5 100644
--- a/src/controllers/AggregatesController.php
+++ b/src/controllers/AggregatesController.php
@@ -102,7 +102,7 @@ class AggregatesController extends BaseController
'title' => $this->lang['strname'],
'field' => Decorator::field('proname'),
'url' => \sprintf(
- 'redirect.php?subject=aggregate&amp;action=properties&amp;%s&amp;',
+ 'aggregates?subject=aggregate&amp;action=properties&amp;%s&amp;',
$this->misc->href
),
'vars' => ['aggrname' => 'proname', 'aggrtype' => 'proargtypes'],
@@ -282,7 +282,7 @@ class AggregatesController extends BaseController
$this->printTitle($this->lang['strcreateaggregate'], 'pg.aggregate.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/aggregates" method="post">' . \PHP_EOL;
+ echo '<form action="aggregates" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -425,7 +425,7 @@ class AggregatesController extends BaseController
$this->printTitle($this->lang['stralter'], 'pg.aggregate.alter');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/aggregates" method="post">' . \PHP_EOL;
+ echo '<form action="aggregates" method="post">' . \PHP_EOL;
$aggrdata = $this->data->getAggregate($_REQUEST['aggrname'], $_REQUEST['aggrtype']);
if (0 < $aggrdata->RecordCount()) {
@@ -505,7 +505,7 @@ class AggregatesController extends BaseController
\htmlspecialchars($_REQUEST['aggrname'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/aggregates" method="post">' . \PHP_EOL;
+ echo '<form action="aggregates" method="post">' . \PHP_EOL;
echo \sprintf(
'<p><input type="checkbox" id="cascade" name="cascade" /> <label for="cascade">%s</label></p>',
$this->lang['strcascade']
diff --git a/src/controllers/AlldbController.php b/src/controllers/AlldbController.php
index 67dc3a8a..91a2ab14 100644
--- a/src/controllers/AlldbController.php
+++ b/src/controllers/AlldbController.php
@@ -270,7 +270,7 @@ class AlldbController extends BaseController
$this->printTrail('database');
$this->printTitle($this->lang['stralter'], 'pg.database.alter');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/alldb" method="post">' . \PHP_EOL;
+ echo '<form action="alldb" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left required">%s</th>',
@@ -361,7 +361,7 @@ class AlldbController extends BaseController
$this->printTrail('database');
$this->printTitle($this->lang['strdrop'], 'pg.database.drop');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/alldb" method="post">' . \PHP_EOL;
+ echo '<form action="alldb" method="post">' . \PHP_EOL;
//If multi drop
if (isset($_REQUEST['ma'])) {
foreach ($_REQUEST['ma'] as $v) {
@@ -469,7 +469,7 @@ class AlldbController extends BaseController
$tablespaces = $data->getTablespaces();
}
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/alldb" method="post">' . \PHP_EOL;
+ echo '<form action="alldb" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
diff --git a/src/controllers/BaseController.php b/src/controllers/BaseController.php
index f37b8a55..919b555c 100644
--- a/src/controllers/BaseController.php
+++ b/src/controllers/BaseController.php
@@ -439,6 +439,7 @@ class BaseController
}
/**
+ * Retrieves a request parameter either from the body or query string
* @param string $key
* @param null|string $default
*/
diff --git a/src/controllers/ColpropertiesController.php b/src/controllers/ColpropertiesController.php
index cf6241b7..ac4ba282 100644
--- a/src/controllers/ColpropertiesController.php
+++ b/src/controllers/ColpropertiesController.php
@@ -240,8 +240,8 @@ class ColpropertiesController extends BaseController
$this->printTitle($this->lang['stralter'], 'pg.column.alter');
$this->printMsg($msg);
- echo '<script src="' . \containerInstance()->subFolder . '/assets/js/tables.js" type="text/javascript"></script>';
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/colproperties" method="post">' . \PHP_EOL;
+ echo '<script src="assets/js/tables.js" type="text/javascript"></script>';
+ echo '<form action="colproperties" method="post">' . \PHP_EOL;
// Output table header
echo '<table>' . \PHP_EOL;
diff --git a/src/controllers/ConstraintsController.php b/src/controllers/ConstraintsController.php
index 06b88cd8..d10e4b80 100644
--- a/src/controllers/ConstraintsController.php
+++ b/src/controllers/ConstraintsController.php
@@ -30,7 +30,7 @@ class ConstraintsController extends BaseController
$this->printHeader(
$this->lang['strtables'] . ' - ' . $_REQUEST['table'] . ' - ' . $this->lang['strconstraints'],
- '<script src="' . \containerInstance()->subFolder . '/assets/js/indexes.js" type="text/javascript"></script>',
+ '<script src="assets/js/indexes.js" type="text/javascript"></script>',
true,
'header_select2.twig'
);
@@ -582,7 +582,7 @@ class ConstraintsController extends BaseController
$this->printTitle($this->lang['straddcheck'], 'pg.constraint.check');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/constraints" method="post">' . \PHP_EOL;
+ echo '<form action="constraints" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data">%s</th>',
diff --git a/src/controllers/DatabaseController.php b/src/controllers/DatabaseController.php
index db355e6b..a33b835d 100644
--- a/src/controllers/DatabaseController.php
+++ b/src/controllers/DatabaseController.php
@@ -43,7 +43,7 @@ class DatabaseController extends BaseController
$scripts = '';
// normal flow
if ('locks' === $this->action || 'processes' === $this->action) {
- $scripts .= '<script src="' . \containerInstance()->subFolder . '/assets/js/database.js" type="text/javascript"></script>';
+ $scripts .= '<script src="assets/js/database.js" type="text/javascript"></script>';
$refreshTime = $this->conf['ajax_refresh'] * 1500;
@@ -80,7 +80,7 @@ class DatabaseController extends BaseController
);
$scripts .= "errmsg: '" . \str_replace("'", "\\'", $this->lang['strconnectionfail']) . "'\n";
$scripts .= "};\n";
- $scripts .= '</script>' . \PHP_EOL;
+ $this->scripts = $scripts . '</script>' . \PHP_EOL;
}
$header_template = 'header.twig';
@@ -99,8 +99,8 @@ class DatabaseController extends BaseController
break;
case 'sql':
$this->doSQL();
- $header_template = 'header_sqledit.twig';
- $footer_template = 'footer_sqledit.twig';
+ $this->view->offsetSet('codemirror', true);
+
break;
case 'variables':
@@ -126,8 +126,8 @@ class DatabaseController extends BaseController
default:
if (false === $this->adminActions($this->action, 'database')) {
- $header_template = 'header_sqledit.twig';
- $footer_template = 'footer_sqledit.twig';
+ $this->view->offsetSet('codemirror', true);
+
$this->doSQL();
}
@@ -135,7 +135,7 @@ class DatabaseController extends BaseController
}
$output = \ob_get_clean();
- $this->printHeader($this->headerTitle(), $scripts, true, $header_template);
+ $this->printHeader($this->headerTitle(), $this->scripts, true, $header_template);
$this->printBody();
echo $output;
@@ -213,7 +213,7 @@ class DatabaseController extends BaseController
$this->printTabs('database', 'find');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/database" method="post">' . \PHP_EOL;
+ echo '<form action="database" method="post">' . \PHP_EOL;
echo '<p><input name="term" value="', \htmlspecialchars($_REQUEST['term']),
\sprintf(
'" size="32" maxlength="%s" />',
@@ -603,7 +603,7 @@ class DatabaseController extends BaseController
'<p>%s</p>',
$this->lang['strentersql']
) . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/sql" method="post" enctype="multipart/form-data" id="sqlform">' . \PHP_EOL;
+ echo '<form action="sql" method="post" enctype="multipart/form-data" id="sqlform">' . \PHP_EOL;
echo \sprintf(
'<p>%s<br />',
$this->lang['strsql']
diff --git a/src/controllers/DataexportController.php b/src/controllers/DataexportController.php
index ceb643a4..5f18a25a 100644
--- a/src/controllers/DataexportController.php
+++ b/src/controllers/DataexportController.php
@@ -109,7 +109,7 @@ class DataexportController extends BaseController
$this->printMsg($msg);
}
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/dataexport" method="post">' . \PHP_EOL;
+ echo '<form action="dataexport" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data">%s:</th><td><select name="d_format">',
diff --git a/src/controllers/DisplayController.php b/src/controllers/DisplayController.php
index 3338a8f2..670220cd 100644
--- a/src/controllers/DisplayController.php
+++ b/src/controllers/DisplayController.php
@@ -6,8 +6,10 @@
namespace PHPPgAdmin\Controller;
+use ADOFieldObject;
use ADORecordSet;
use Exception;
+use Kint\Kint;
use PHPPgAdmin\ADOdbException;
use PHPPgAdmin\Traits\InsertEditRowTrait;
@@ -31,23 +33,24 @@ class DisplayController extends BaseController
\set_time_limit(0);
- $scripts = '<script src="' . \containerInstance()->subFolder . '/assets/js/display.js" type="text/javascript"></script>';
+ $scripts = '<script src="assets/js/display.js" type="text/javascript"></script>';
$scripts .= '<script type="text/javascript">' . \PHP_EOL;
$scripts .= "var Display = {\n";
$scripts .= "errmsg: '" . \str_replace("'", "\\'", $this->lang['strconnectionfail']) . "'\n";
$scripts .= "};\n";
- $scripts .= '</script>' . \PHP_EOL;
+ $this->scripts =$scripts. '</script>' . \PHP_EOL;
$footer_template = 'footer.twig';
$header_template = 'header.twig';
-
+$browseResult=[];
\ob_start();
switch ($this->action) {
case 'editrow':
- $header_template = 'header_sqledit.twig';
- $footer_template = 'footer_sqledit.twig';
+ $this->view->offsetSet('codemirror',true);
+
+
if (isset($_POST['save'])) {
$this->doEditRow();
@@ -62,8 +65,9 @@ class DisplayController extends BaseController
break;
case 'delrow':
- $header_template = 'header_sqledit.twig';
- $footer_template = 'footer_sqledit.twig';
+ $this->view->offsetSet('codemirror',true);
+
+
if (isset($_POST['yes'])) {
$this->doDelRow(false);
@@ -78,14 +82,21 @@ class DisplayController extends BaseController
break;
default:
- $header_template = 'header_sqledit.twig';
- $footer_template = 'footer_sqledit.twig';
- $this->doBrowse();
+ $this->view->offsetSet('datatables',true);
+ $this->view->offsetSet('codemirror',true);
+
+
+ $jsonResult=$this->doBrowse();
break;
}
$output = \ob_get_clean();
+ $json=boolval($this->getRequestParam('json',null));
+ //ddd($this->getAllParams());
+if($json) {
+ return responseInstance()->withJson( $jsonResult);
+ }
$subject = $this->coalesceArr($_REQUEST, 'subject', 'table')['subject'];
$object = null;
@@ -103,8 +114,8 @@ class DisplayController extends BaseController
} else {
$title = $this->headerTitle('strqueryresults');
}
-
- $this->printHeader($title, $scripts, true, $header_template);
+$this->view->offsetSet('serverSide',1);
+ $this->printHeader($title, $this->scripts, true, $header_template);
$this->printBody();
@@ -161,25 +172,29 @@ class DisplayController extends BaseController
$_REQUEST['return'] = 'selectrows';
}
- //$object = $this->setIfIsset($object, $_REQUEST[$subject]);
-
- $this->printTrail($subject);
+ $json=boolval($this->getRequestParam('json',null));
+ //$object = $this->setIfIsset($object, $_REQUEST[$subject]);
+ $trailsubject=$subject;
+ if($subject==='table' && !$this->getRequestParam($subject,null)) {
+ $trailsubject='database';
+ }
+ $this->printTrail($trailsubject,!$json);
$tabsPosition = 'browse';
- if ('database' === $subject) {
+ if ('database' === $trailsubject) {
$tabsPosition = 'sql';
- } elseif ('column' === $subject) {
+ } elseif ('column' === $trailsubject) {
$tabsPosition = 'colproperties';
}
-
- $this->printTabs($subject, $tabsPosition);
-
+
+ $this->printTabs($trailsubject, $tabsPosition, !$json);
+
[$query, $title, $type] = $this->getQueryTitleAndType($data, $object);
- $this->printTitle($this->lang[$title]);
+ $this->printTitle($this->lang[$title],null, !$json);
- $this->printMsg($msg);
+ $this->printMsg($msg, !$json);
// If 'sortkey' is not set, default to ''
$sortkey = $this->coalesceArr($_REQUEST, 'sortkey', '')['sortkey'];
@@ -197,6 +212,9 @@ class DisplayController extends BaseController
if (isset($search_path) && (0 !== $data->setSearchPath(\array_map('trim', \explode(',', $search_path))))) {
return;
}
+
+ $paginate=$this->getRequestParam('paginate',null);
+
try {
$max_pages = 0;
@@ -212,6 +230,22 @@ class DisplayController extends BaseController
$this->conf['max_rows'],
$max_pages
);
+
+
+ if($json) {
+ $jsonResult=[];
+ while (!$resultset->EOF) {
+ $jsonResult[]= $this->getJsonRowCells($resultset,isset($object));
+ $resultset->MoveNext();
+ }
+
+ return [
+ 'draw'=>1,
+ 'recordsTotal'=>$max_pages,
+ 'recordsFiltered'=>$max_pages,
+ 'data'=>$jsonResult];
+ }
+
} catch (ADOdbException $e) {
return $this->halt($e->getMessage());
}
@@ -258,17 +292,25 @@ class DisplayController extends BaseController
//die(htmlspecialchars($query));
- echo '<form method="post" id="sqlform" action="' . $_SERVER['REQUEST_URI'] . '">';
- echo $this->view->form;
+ $formHTML= '<form method="post" id="sqlform" action="' . $_SERVER['REQUEST_URI'] . '">';
+ $formHTML.= $this->view->form;
if ($object) {
- echo '<input type="hidden" name="' . $subject . '" value="', \htmlspecialchars($object), '" />' . \PHP_EOL;
+ $formHTML.= '<input type="hidden" name="' . $subject . '" value="'. \htmlspecialchars($object). '" />' . \PHP_EOL;
+ }
+ $search_path = \htmlspecialchars($_REQUEST['search_path']??null);
+ $formHTML.= '<input type="hidden" name="search_path" id="search_path" size="45" value="' . $search_path . '" />';
+
+ if(isset($_REQUEST['paginate'])) {
+ $formHTML.= '<input type="hidden" name="paginate" value="on" />';
}
- echo '<textarea width="90%" name="query" id="query" rows="5" cols="100" resizable="true">';
- echo \htmlspecialchars($query);
- echo '</textarea><br><input type="submit"/>';
+ // $formHTML.= '<input type="checkbox" name="json" />';
+ $formHTML.= '<textarea width="90%" name="query" id="query" rows="5" cols="100" resizable="true">';
+ $formHTML.= \htmlspecialchars($query);
+ $formHTML.= '</textarea><br><input type="submit"/>';
+ $formHTML.= '</form>';
+echo $formHTML;
- echo '</form>';
$this->printResultsTable($resultset, $page, $max_pages, $_gets, $object);
// Navigation links
@@ -318,171 +360,6 @@ class DisplayController extends BaseController
return [$query, $title, $type];
}
- /**
- * @param array $_gets
- * @param mixed $type
- * @param mixed $page
- * @param string $subject
- * @param mixed $object
- * @param mixed $resultset
- *
- * @return ((array|mixed|string)[][]|mixed)[][]
- *
- * @psalm-return array{back?: array{attr: array{href: array{url: mixed, urlvars: mixed}}, content: mixed}, edit?: array{attr: array{href: array{url: string, urlvars: array{server: mixed, database: mixed, action: string, paginate: string}}}, content: mixed}, collapse: array{attr: array{href: array{url: string, urlvars: array{strings: string, page: mixed}}}, content: mixed}, createview?: array{attr: array{href: array{url: string, urlvars: array{server: mixed, database: mixed, action: string, formDefinition: mixed}}}, content: mixed}, download?: array{attr: array{href: array{url: string, urlvars: array{server: mixed, database: mixed}}}, content: mixed}, insert?: array{attr: array{href: array{url: string, urlvars: array{server: mixed, database: mixed, action: string, table: mixed}}}, content: mixed}, refresh: array{attr: array{href: array{url: string, urlvars: array{strings: mixed, page: mixed}}}, content: mixed}}
- */
- public function getBrowseNavLinks($type, array $_gets, $page, string $subject, $object, $resultset)
- {
- $fields = [
- 'server' => $_REQUEST['server'],
- 'database' => $_REQUEST['database'],
- ];
-
- $this->setIfIsset($fields['schema'], $_REQUEST['schema'], null, false);
-
- $navlinks = [];
- $strings = $_gets['strings'];
- // Return
- if (isset($_REQUEST['return'])) {
- $urlvars = $this->misc->getSubjectParams($_REQUEST['return']);
-
- $navlinks['back'] = [
- 'attr' => [
- 'href' => [
- 'url' => $urlvars['url'],
- 'urlvars' => $urlvars['params'],
- ],
- ],
- 'content' => $this->lang['strback'],
- ];
- }
-
- // Edit SQL link
- if ('QUERY' === $type) {
- $navlinks['edit'] = [
- 'attr' => [
- 'href' => [
- 'url' => 'database',
- 'urlvars' => \array_merge(
- $fields,
- [
- 'action' => 'sql',
- 'paginate' => 'on',
- ]
- ),
- ],
- ],
- 'content' => $this->lang['streditsql'],
- ];
- }
-
- $navlinks['collapse'] = [
- 'attr' => [
- 'href' => [
- 'url' => 'display',
- 'urlvars' => \array_merge(
- $_gets,
- [
- 'strings' => 'expanded',
- 'page' => $page,
- ]
- ),
- ],
- ],
- 'content' => $this->lang['strexpand'],
- ];
- // Expand/Collapse
- if ('expanded' === $strings) {
- $navlinks['collapse'] = [
- 'attr' => [
- 'href' => [
- 'url' => 'display',
- 'urlvars' => \array_merge(
- $_gets,
- [
- 'strings' => 'collapsed',
- 'page' => $page,
- ]
- ),
- ],
- ],
- 'content' => $this->lang['strcollapse'],
- ];
- }
-
- // Create view and download
- if (isset($_REQUEST['query'], $resultset) && \is_object($resultset) && 0 < $resultset->RecordCount()) {
- // Report views don't set a schema, so we need to disable create view in that case
- if (isset($_REQUEST['schema'])) {
- $navlinks['createview'] = [
- 'attr' => [
- 'href' => [
- 'url' => 'views',
- 'urlvars' => \array_merge(
- $fields,
- [
- 'action' => 'create',
- 'formDefinition' => $_REQUEST['query'],
- ]
- ),
- ],
- ],
- 'content' => $this->lang['strcreateview'],
- ];
- }
-
- $urlvars = [];
-
- $this->setIfIsset($urlvars['search_path'], $_REQUEST['search_path'], null, false);
-
- $navlinks['download'] = [
- 'attr' => [
- 'href' => [
- 'url' => 'dataexport',
- 'urlvars' => \array_merge($fields, $urlvars),
- ],
- ],
- 'content' => $this->lang['strdownload'],
- ];
- }
-
- // Insert
- if (isset($object) && (isset($subject) && 'table' === $subject)) {
- $navlinks['insert'] = [
- 'attr' => [
- 'href' => [
- 'url' => 'tables',
- 'urlvars' => \array_merge(
- $fields,
- [
- 'action' => 'confinsertrow',
- 'table' => $object,
- ]
- ),
- ],
- ],
- 'content' => $this->lang['strinsert'],
- ];
- }
-
- // Refresh
- $navlinks['refresh'] = [
- 'attr' => [
- 'href' => [
- 'url' => 'display',
- 'urlvars' => \array_merge(
- $_gets,
- [
- 'strings' => $strings,
- 'page' => $page,
- ]
- ),
- ],
- ],
- 'content' => $this->lang['strrefresh'],
- ];
-
- return $navlinks;
- }
/**
* @param array $_gets
@@ -493,6 +370,7 @@ class DisplayController extends BaseController
*/
public function printResultsTable($resultset, $page, $max_pages, array $_gets, $object): void
{
+
if (!\is_object($resultset) || 0 >= $resultset->RecordCount()) {
echo \sprintf(
'<p>%s</p>',
@@ -509,7 +387,6 @@ class DisplayController extends BaseController
$fkey_information = $this->getFKInfo();
// Show page navigation
$paginator = $this->_printPages($page, $max_pages, $_gets);
-
echo $paginator;
echo '<table id="data">' . \PHP_EOL;
echo '<tr>';
@@ -576,18 +453,20 @@ class DisplayController extends BaseController
if (!\is_object($resultset) || 0 >= $resultset->RecordCount()) {
return;
}
-
+$dttFields=[];
foreach (\array_keys($resultset->fields) as $index => $key) {
if (($key === $data->id) && (!($withOid && $this->conf['show_oids']))) {
continue;
}
$finfo = $resultset->FetchField($index);
+ $dttFields[]=["data"=>$finfo->name];
if (false === $args) {
echo '<th class="data">', $this->misc->printVal($finfo->name), '</th>' . \PHP_EOL;
continue;
}
+
$args['page'] = $_REQUEST['page'];
$args['sortkey'] = $index + 1;
// Sort direction opposite to current direction, unless it's currently ''
@@ -611,10 +490,37 @@ class DisplayController extends BaseController
}
echo '</a></th>' . \PHP_EOL;
}
-
- \reset($resultset->fields);
+ $this->view->offsetSet('dttFields',$dttFields);
+ \reset($resultset->fields);
}
+private function FetchField(ADORecordSet $ADORecordSet,int $index):ADOFieldObject {
+ return $ADORecordSet->FetchField($index);
+}
+
+ /**
+ * Print table rows.
+ *
+ * @param ADORecordSet $resultset The resultset
+ * @param bool $withOid either to display OIDs or not
+ */
+ public function getJsonRowCells(&$resultset, $withOid): array
+ {
+ $data = $this->misc->getDatabaseAccessor();
+ $j = 0;
+
+ $strings=$this->getRequestParam('string', 'collapsed');
+$result=[];
+ foreach ($resultset->fields as $fieldname => $fieldvalue) {
+ /** @var \ADOFieldObject */
+ $finfo =$this->FetchField( $resultset,$j++);
+ if (($fieldname === $data->id) && (!($withOid && $this->conf['show_oids']))) {
+ continue;
+ }
+ $result[$finfo->name ] =$fieldvalue;
+ }
+ return $result;
+ }
/**
* Print table rows.
*
@@ -627,24 +533,25 @@ class DisplayController extends BaseController
$data = $this->misc->getDatabaseAccessor();
$j = 0;
- $this->coalesceArr($_REQUEST, 'strings', 'collapsed');
+ $strings=$this->getRequestParam('string', 'collapsed');
- foreach ($resultset->fields as $k => $v) {
- $finfo = $resultset->FetchField($j++);
+ foreach ($resultset->fields as $fieldName => $fieldValue) {
+ /** @var \ADOFieldObject */
+ $finfo =$this->FetchField( $resultset,$j++);
- if (($k === $data->id) && (!($withOid && $this->conf['show_oids']))) {
+ if (($fieldName === $data->id) && (!($withOid && $this->conf['show_oids']))) {
continue;
}
- $printvalOpts = ['null' => true, 'clip' => ('collapsed' === $_REQUEST['strings'])];
+ $printvalOpts = ['null' => true, 'clip' => ('collapsed' === $strings)];
- if (null !== $v && '' === $v) {
+ if (null !== $fieldValue && '' === $fieldValue) {
echo '<td>&nbsp;</td>';
} else {
echo '<td style="white-space:nowrap;">';
-
- $this->_printFKLinks($resultset, $fkey_information, $k, $v, $printvalOpts);
-
- $val = $this->misc->printVal($v, $finfo->type, $printvalOpts);
+ if ((null !== $fieldValue)&& isset($fkey_information['byfield'][$fieldName])) {
+ $this->_printFKLinks($resultset, $fkey_information, $fieldName, $fieldValue, $printvalOpts);
+ }
+ $val = $this->misc->printVal($fieldValue, $finfo->type, $printvalOpts);
echo $val;
echo '</td>';
@@ -672,7 +579,7 @@ class DisplayController extends BaseController
$fksprops = $this->_getFKProps();
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/display" method="post" id="ac_form">' . \PHP_EOL;
+ echo '<form action="display" method="post" id="ac_form">' . \PHP_EOL;
$elements = 0;
$error = true;
@@ -871,10 +778,174 @@ class DisplayController extends BaseController
echo '</p>' . \PHP_EOL;
echo '</form>' . \PHP_EOL;
- echo '<script src="' . \containerInstance()->subFolder . '/assets/js/insert_or_edit_row.js" type="text/javascript"></script>';
+ echo '<script src="assets/js/insert_or_edit_row.js" type="text/javascript"></script>';
}
/**
+ * @param array $_gets
+ * @param mixed $type
+ * @param mixed $page
+ * @param string $subject
+ * @param mixed $object
+ * @param mixed $resultset
+ *
+ * @return ((array|mixed|string)[][]|mixed)[][]
+ *
+ * @psalm-return array{back?: array{attr: array{href: array{url: mixed, urlvars: mixed}}, content: mixed}, edit?: array{attr: array{href: array{url: string, urlvars: array{server: mixed, database: mixed, action: string, paginate: string}}}, content: mixed}, collapse: array{attr: array{href: array{url: string, urlvars: array{strings: string, page: mixed}}}, content: mixed}, createview?: array{attr: array{href: array{url: string, urlvars: array{server: mixed, database: mixed, action: string, formDefinition: mixed}}}, content: mixed}, download?: array{attr: array{href: array{url: string, urlvars: array{server: mixed, database: mixed}}}, content: mixed}, insert?: array{attr: array{href: array{url: string, urlvars: array{server: mixed, database: mixed, action: string, table: mixed}}}, content: mixed}, refresh: array{attr: array{href: array{url: string, urlvars: array{strings: mixed, page: mixed}}}, content: mixed}}
+ */
+ public function getBrowseNavLinks($type, array $_gets, $page, string $subject, $object, $resultset)
+ {
+ $fields = [
+ 'server' => $_REQUEST['server'],
+ 'database' => $_REQUEST['database'],
+ ];
+
+ $this->setIfIsset($fields['schema'], $_REQUEST['schema'], null, false);
+
+ $navlinks = [];
+ $strings = $_gets['strings'];
+ // Return
+ if (isset($_REQUEST['return'])) {
+ $urlvars = $this->misc->getSubjectParams($_REQUEST['return']);
+
+ $navlinks['back'] = [
+ 'attr' => [
+ 'href' => [
+ 'url' => $urlvars['url'],
+ 'urlvars' => $urlvars['params'],
+ ],
+ ],
+ 'content' => $this->lang['strback'],
+ ];
+ }
+
+ // Edit SQL link
+ if ('QUERY' === $type) {
+ $navlinks['edit'] = [
+ 'attr' => [
+ 'href' => [
+ 'url' => 'database',
+ 'urlvars' => \array_merge(
+ $fields,
+ [
+ 'action' => 'sql',
+ 'paginate' => 'on',
+ ]
+ ),
+ ],
+ ],
+ 'content' => $this->lang['streditsql'],
+ ];
+ }
+ $navlinks['collapse'] = [
+ 'attr' => [
+ 'href' => [
+ 'url' => 'display',
+ 'urlvars' => \array_merge(
+ $_gets,
+ [
+ 'strings' => 'expanded',
+ 'page' => $page,
+ ]
+ ),
+ ],
+ ],
+ 'content' => $this->lang['strexpand'],
+ ];
+ // Expand/Collapse
+ if ('expanded' === $strings) {
+ $navlinks['collapse'] = [
+ 'attr' => [
+ 'href' => [
+ 'url' => 'display',
+ 'urlvars' => \array_merge(
+ $_gets,
+ [
+ 'strings' => 'collapsed',
+ 'page' => $page,
+ ]
+ ),
+ ],
+ ],
+ 'content' => $this->lang['strcollapse'],
+ ];
+ }
+
+ // Create view and download
+ if (isset($_REQUEST['query'], $resultset) && \is_object($resultset) && 0 < $resultset->RecordCount()) {
+ // Report views don't set a schema, so we need to disable create view in that case
+ if (isset($_REQUEST['schema'])) {
+ $navlinks['createview'] = [
+ 'attr' => [
+ 'href' => [
+ 'url' => 'views',
+ 'urlvars' => \array_merge(
+ $fields,
+ [
+ 'action' => 'create',
+ 'formDefinition' => $_REQUEST['query'],
+ ]
+ ),
+ ],
+ ],
+ 'content' => $this->lang['strcreateview'],
+ ];
+ }
+
+ $urlvars = [];
+
+ $this->setIfIsset($urlvars['search_path'], $_REQUEST['search_path'], null, false);
+
+ $navlinks['download'] = [
+ 'attr' => [
+ 'href' => [
+ 'url' => 'dataexport',
+ 'urlvars' => \array_merge($fields, $urlvars),
+ ],
+ ],
+ 'content' => $this->lang['strdownload'],
+ ];
+ }
+
+ // Insert
+ if (isset($object) && (isset($subject) && 'table' === $subject)) {
+ $navlinks['insert'] = [
+ 'attr' => [
+ 'href' => [
+ 'url' => 'tables',
+ 'urlvars' => \array_merge(
+ $fields,
+ [
+ 'action' => 'confinsertrow',
+ 'table' => $object,
+ ]
+ ),
+ ],
+ ],
+ 'content' => $this->lang['strinsert'],
+ ];
+ }
+
+ // Refresh
+ $navlinks['refresh'] = [
+ 'attr' => [
+ 'href' => [
+ 'url' => 'display',
+ 'urlvars' => \array_merge(
+ $_gets,
+ [
+ 'strings' => $strings,
+ 'page' => $page,
+ ]
+ ),
+ ],
+ ],
+ 'content' => $this->lang['strrefresh'],
+ ];
+
+ return $navlinks;
+ }
+ /**
* Performs actual edition of row.
*/
public function doEditRow()
@@ -922,7 +993,7 @@ class DisplayController extends BaseController
$resultset = $data->browseRow($_REQUEST['table'], $_REQUEST['key']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/display" method="post">' . \PHP_EOL;
+ echo '<form action="display" method="post">' . \PHP_EOL;
echo $this->view->form;
if (1 === $resultset->RecordCount()) {
@@ -1257,16 +1328,16 @@ class DisplayController extends BaseController
* @param bool[] $printvalOpts
* @param ADORecordSet $resultset
* @param array $fkey_information
- * @param mixed $k
- * @param mixed $v
+ * @param mixed $fieldName
+ * @param mixed $fieldValue
*/
- private function _printFKLinks(ADORecordSet $resultset, array $fkey_information, $k, $v, array &$printvalOpts): void
+ private function _printFKLinks(ADORecordSet $resultset, array $fkey_information, $fieldName, $fieldValue, array &$printvalOpts): void
{
- if ((null === $v) || !isset($fkey_information['byfield'][$k])) {
+ if ((null === $fieldValue) || !isset($fkey_information['byfield'][$fieldName])) {
return;
}
- foreach ($fkey_information['byfield'][$k] as $conid) {
+ foreach ($fkey_information['byfield'][$fieldName] as $conid) {
$query_params = $fkey_information['byconstr'][$conid]['url_data'];
foreach ($fkey_information['byconstr'][$conid]['fkeys'] as $p_field => $f_field) {
diff --git a/src/controllers/DomainsController.php b/src/controllers/DomainsController.php
index a09c0ff8..469789ac 100644
--- a/src/controllers/DomainsController.php
+++ b/src/controllers/DomainsController.php
@@ -289,7 +289,7 @@ class DomainsController extends BaseController
}
// Display domain info
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/domains" method="post">' . \PHP_EOL;
+ echo '<form action="domains" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left required" style="width: 70px">%s</th>',
@@ -366,7 +366,7 @@ class DomainsController extends BaseController
$this->printTitle($this->lang['straddcheck'], 'pg.constraint.check');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/domains" method="post">' . \PHP_EOL;
+ echo '<form action="domains" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data">%s</th>',
@@ -439,7 +439,7 @@ class DomainsController extends BaseController
$this->misc->printVal($_REQUEST['constraint']),
$this->misc->printVal($_REQUEST['domain'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/domains" method="post">' . \PHP_EOL;
+ echo '<form action="domains" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="drop_con" />' . \PHP_EOL;
echo '<input type="hidden" name="domain" value="', \htmlspecialchars($_REQUEST['domain']), '" />' . \PHP_EOL;
echo '<input type="hidden" name="constraint" value="', \htmlspecialchars($_REQUEST['constraint']), '" />' . \PHP_EOL;
@@ -639,7 +639,7 @@ class DomainsController extends BaseController
$this->lang['strconfdropdomain'],
$this->misc->printVal($_REQUEST['domain'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/domains" method="post">' . \PHP_EOL;
+ echo '<form action="domains" method="post">' . \PHP_EOL;
echo \sprintf(
'<p><input type="checkbox" id="cascade" name="cascade" /><label for="cascade">%s</label></p>',
$this->lang['strcascade']
@@ -695,7 +695,7 @@ class DomainsController extends BaseController
$this->printTitle($this->lang['strcreatedomain'], 'pg.domain.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/domains" method="post">' . \PHP_EOL;
+ echo '<form action="domains" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left required" style="width: 70px">%s</th>',
diff --git a/src/controllers/FulltextController.php b/src/controllers/FulltextController.php
index 6e5974aa..758b0df5 100644
--- a/src/controllers/FulltextController.php
+++ b/src/controllers/FulltextController.php
@@ -322,7 +322,7 @@ class FulltextController extends BaseController
$this->misc->printVal($_REQUEST['ftscfg'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
echo \sprintf(
'<p><input type="checkbox" id="cascade" name="cascade" /> <label for="cascade">%s</label></p>',
$this->lang['strcascade']
@@ -366,7 +366,7 @@ class FulltextController extends BaseController
$this->misc->printVal($_REQUEST['ftsdict'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
echo \sprintf(
'<p><input type="checkbox" id="cascade" name="cascade" /> <label for="cascade">%s</label></p>',
$this->lang['strcascade']
@@ -427,7 +427,7 @@ class FulltextController extends BaseController
$this->printTitle($this->lang['strftscreateconfig'], 'pg.ftscfg.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
// conf name
echo \sprintf(
@@ -601,7 +601,7 @@ class FulltextController extends BaseController
// Fetch all FTS parsers from the database
$ftsparsers = $data->getFtsParsers();
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo "\t<tr>" . \PHP_EOL;
@@ -915,7 +915,7 @@ class FulltextController extends BaseController
$this->printTitle($this->lang['strftscreatedict'], 'pg.ftsdict.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -1105,7 +1105,7 @@ class FulltextController extends BaseController
$this->coalesceArr($_POST, 'formName', $_REQUEST['ftsdict']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo "\t<tr>" . \PHP_EOL;
@@ -1195,7 +1195,7 @@ class FulltextController extends BaseController
$this->printTrail('ftscfg'); // TODO: proper breadcrumbs
$this->printTitle($this->lang['strdrop'], 'pg.ftscfg.alter');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
// Case of multiaction drop
if (isset($_REQUEST['ma'])) {
@@ -1272,7 +1272,7 @@ class FulltextController extends BaseController
$this->coalesceArr($_POST, 'ftscfg', $_REQUEST['ftscfg']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo "\t<tr>" . \PHP_EOL;
@@ -1396,7 +1396,7 @@ class FulltextController extends BaseController
$mappings = $data->getFtsMappings($_POST['ftscfg']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/fulltext" method="post">' . \PHP_EOL;
+ echo '<form action="fulltext" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo "\t<tr>" . \PHP_EOL;
echo \sprintf(
diff --git a/src/controllers/FunctionsController.php b/src/controllers/FunctionsController.php
index 64abe050..fea69aa8 100644
--- a/src/controllers/FunctionsController.php
+++ b/src/controllers/FunctionsController.php
@@ -66,8 +66,8 @@ class FunctionsController extends BaseController
break;
case 'edit':
- $header_template = 'header_sqledit.twig';
- $footer_template = 'footer_sqledit.twig';
+ $this->view->offsetSet('codemirror',true);
+
$this->doEdit();
break;
@@ -119,9 +119,7 @@ class FunctionsController extends BaseController
'title' => $this->lang['strfunction'],
'field' => Decorator::field('proproto'),
'url'=>containerInstance()->getDestinationWithLastTab('function'),
- '/redirect/function?action=properties&amp;%s&amp;',
- $this->misc->href
- ),
+
'vars' => ['function' => 'proproto', 'function_oid' => 'prooid'],
],
'returns' => [
@@ -339,7 +337,7 @@ class FunctionsController extends BaseController
$args = $fndata->fields['proarguments'];
}
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/functions" method="post">' . \PHP_EOL;
+ echo '<form action="functions" method="post">' . \PHP_EOL;
echo '<table style="width: 95%">' . \PHP_EOL;
echo '<tr>' . \PHP_EOL;
echo \sprintf(
@@ -803,7 +801,7 @@ class FunctionsController extends BaseController
$this->printTabs('function', 'definition');
$this->printTitle($this->lang['strdrop'], 'pg.function.drop');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/functions" method="post">' . \PHP_EOL;
+ echo '<form action="functions" method="post">' . \PHP_EOL;
//If multi drop
if (isset($_REQUEST['ma'])) {
@@ -1128,7 +1126,7 @@ class FunctionsController extends BaseController
//]]>
</script>
";
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/functions" method="post">' . \PHP_EOL;
+ echo '<form action="functions" method="post">' . \PHP_EOL;
echo '<table><tbody id="args_table">' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data required">%s</th>',
@@ -1282,7 +1280,7 @@ class FunctionsController extends BaseController
$szJS = '';
- echo '<script src="' . \containerInstance()->subFolder . '/assets/js/functions.js" type="text/javascript"></script>';
+ echo '<script src="assets/js/functions.js" type="text/javascript"></script>';
echo '<script type="text/javascript">' . $this->_buildJSData() . '</script>';
if (!empty($_POST['formArgName'])) {
diff --git a/src/controllers/GroupsController.php b/src/controllers/GroupsController.php
index 9509117a..1a0a6966 100644
--- a/src/controllers/GroupsController.php
+++ b/src/controllers/GroupsController.php
@@ -187,7 +187,7 @@ class GroupsController extends BaseController
$this->misc->printVal($_REQUEST['group'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/groups" method="post">' . \PHP_EOL;
+ echo '<form action="groups" method="post">' . \PHP_EOL;
echo $this->view->form;
echo '<input type="hidden" name="action" value="drop_member" />' . \PHP_EOL;
echo '<input type="hidden" name="group" value="', \htmlspecialchars($_REQUEST['group']), '" />' . \PHP_EOL;
@@ -261,7 +261,7 @@ class GroupsController extends BaseController
}
// Display form for adding a user to the group
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/groups" method="post">' . \PHP_EOL;
+ echo '<form action="groups" method="post">' . \PHP_EOL;
echo '<select name="user">';
while (!$users->EOF) {
@@ -317,7 +317,7 @@ class GroupsController extends BaseController
$this->misc->printVal($_REQUEST['group'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/groups" method="post">' . \PHP_EOL;
+ echo '<form action="groups" method="post">' . \PHP_EOL;
echo $this->view->form;
echo '<input type="hidden" name="action" value="drop" />' . \PHP_EOL;
echo '<input type="hidden" name="group" value="', \htmlspecialchars($_REQUEST['group']), '" />' . \PHP_EOL;
diff --git a/src/controllers/HistoryController.php b/src/controllers/HistoryController.php
index c614b160..3f66a288 100644
--- a/src/controllers/HistoryController.php
+++ b/src/controllers/HistoryController.php
@@ -64,6 +64,8 @@ class HistoryController extends BaseController
// Set the name of the window
$this->setWindowName('history');
+ $this->view->offsetSet('excludeJsTree',true);
+ $this->view->offsetSet('inPopUp',true);
return $this->printFooter(true, 'footer_sqledit.twig');
}
@@ -77,7 +79,7 @@ class HistoryController extends BaseController
// Bring to the front always
echo '<body onload="window.focus();">' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/history" method="post">' . \PHP_EOL;
+ echo '<form action="history" method="post">' . \PHP_EOL;
$this->printConnection('history');
echo '</form><br />';
@@ -213,7 +215,7 @@ class HistoryController extends BaseController
) . \PHP_EOL;
echo '<pre>', \htmlentities($_SESSION['history'][$_REQUEST['server']][$_REQUEST['database']][$qid]['query'], \ENT_QUOTES, 'UTF-8'), '</pre>';
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/history" method="post">' . \PHP_EOL;
+ echo '<form action="history" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="delhistory" />' . \PHP_EOL;
echo \sprintf(
'<input type="hidden" name="queryid" value="%s" />',
@@ -251,7 +253,7 @@ class HistoryController extends BaseController
$this->lang['strconfclearhistory']
) . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/history" method="post">' . \PHP_EOL;
+ echo '<form action="history" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="clearhistory" />' . \PHP_EOL;
echo $this->view->form;
echo \sprintf(
diff --git a/src/controllers/IndexesController.php b/src/controllers/IndexesController.php
index f8eb64b9..96d76522 100644
--- a/src/controllers/IndexesController.php
+++ b/src/controllers/IndexesController.php
@@ -29,7 +29,7 @@ class IndexesController extends BaseController
if ('tree' === $this->action) {
return $this->doTree();
}
- $this->scripts = '<script src="' . \containerInstance()->subFolder . '/assets/js/indexes.js" type="text/javascript"></script>';
+ $this->scripts = '<script src="assets/js/indexes.js" type="text/javascript"></script>';
$this->printHeader($this->headerTitle(), $this->scripts);
$onloadInit = false;
@@ -278,7 +278,7 @@ class IndexesController extends BaseController
$this->misc->printVal($_REQUEST['index'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/indexes" method="post">' . \PHP_EOL;
+ echo '<form action="indexes" method="post">' . \PHP_EOL;
echo '<p><input type="checkbox" id="analyze" name="analyze"', (isset($_REQUEST['analyze']) ? ' checked="checked"' : ''), ' />';
echo \sprintf(
'<label for="analyze">%s</label></p>',
@@ -550,7 +550,7 @@ class IndexesController extends BaseController
$this->lang['strconfdropindex'],
$this->misc->printVal($this->getRequestParam('index'))
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/indexes" method="post">' . \PHP_EOL;
+ echo '<form action="indexes" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="drop_index" />' . \PHP_EOL;
echo '<input type="hidden" name="table" value="', \htmlspecialchars($object), '" />' . \PHP_EOL;
echo '<input type="hidden" name="index" value="', \htmlspecialchars($this->getRequestParam('index')), '" />' . \PHP_EOL;
diff --git a/src/controllers/LoginController.php b/src/controllers/LoginController.php
index 5a7c97a1..de9f8ec6 100644
--- a/src/controllers/LoginController.php
+++ b/src/controllers/LoginController.php
@@ -99,7 +99,7 @@ class LoginController extends BaseController
$login_html .= $this->printMsg($msg, false);
}
- $login_html .= '<p class="clearfix">&nbsp;</p><p><form id="login_form" method="post" name="login_form" action="' . \containerInstance()->subFolder . '/login?server=' . \htmlspecialchars($server_id) . '"></p>';
+ $login_html .= '<p class="clearfix">&nbsp;</p><p><form id="login_form" method="post" name="login_form" action="login?server=' . \htmlspecialchars($server_id) . '"></p>';
$md5_server = \md5($server_id);
// Pass request vars through form (is this a security risk???)
diff --git a/src/controllers/MaterializedviewpropertiesController.php b/src/controllers/MaterializedviewpropertiesController.php
index 712a33c7..c0cb17eb 100644
--- a/src/controllers/MaterializedviewpropertiesController.php
+++ b/src/controllers/MaterializedviewpropertiesController.php
@@ -153,7 +153,7 @@ class MaterializedviewpropertiesController extends BaseController
$_POST['formComment'] = $viewdata->fields['relcomment'];
}
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/materializedviewproperties" method="post">' . \PHP_EOL;
+ echo '<form action="materializedviewproperties" method="post">' . \PHP_EOL;
echo '<table style="width: 100%">' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -208,7 +208,7 @@ class MaterializedviewpropertiesController extends BaseController
$this->printTitle($this->lang['stralter'], 'pg.column.alter');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/materializedviewproperties" method="post">' . \PHP_EOL;
+ echo '<form action="materializedviewproperties" method="post">' . \PHP_EOL;
// Output matview header
echo '<table>' . \PHP_EOL;
@@ -324,7 +324,7 @@ class MaterializedviewpropertiesController extends BaseController
$this->coalesceArr($_POST, 'comment', $matview->fields['relcomment']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/materializedviewproperties" method="post">' . \PHP_EOL;
+ echo '<form action="materializedviewproperties" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left required">%s</th>',
diff --git a/src/controllers/MaterializedviewsController.php b/src/controllers/MaterializedviewsController.php
index 5930a557..8831d6d1 100644
--- a/src/controllers/MaterializedviewsController.php
+++ b/src/controllers/MaterializedviewsController.php
@@ -126,9 +126,7 @@ class MaterializedviewsController extends BaseController
'title' => 'M ' . $this->lang['strview'],
'field' => Decorator::field('relname'),
'url' => \containerInstance()->getDestinationWithLastTab('matview'),
- '/redirect/matview?%s&amp;',
- $this->misc->href
- ),
+
'vars' => [$this->keystring => 'relname'],
],
'owner' => [
@@ -287,7 +285,7 @@ class MaterializedviewsController extends BaseController
$this->printTrail('getTrail');
$this->printTitle($this->lang['strdrop'], 'pg.matview.drop');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/materializedviews" method="post">' . \PHP_EOL;
+ echo '<form action="materializedviews" method="post">' . \PHP_EOL;
//If multi drop
if (isset($_REQUEST['ma'])) {
diff --git a/src/controllers/OperatorsController.php b/src/controllers/OperatorsController.php
index c3d33cba..5f3c0a63 100644
--- a/src/controllers/OperatorsController.php
+++ b/src/controllers/OperatorsController.php
@@ -306,7 +306,7 @@ class OperatorsController extends BaseController
$this->misc->printVal($_REQUEST['operator'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/operators" method="post">' . \PHP_EOL;
+ echo '<form action="operators" method="post">' . \PHP_EOL;
echo \sprintf(
'<p><input type="checkbox" id="cascade" name="cascade" /> <label for="cascade">%s</label></p>',
$this->lang['strcascade']
diff --git a/src/controllers/PrivilegesController.php b/src/controllers/PrivilegesController.php
index 5413966c..76bc24b4 100644
--- a/src/controllers/PrivilegesController.php
+++ b/src/controllers/PrivilegesController.php
@@ -348,7 +348,7 @@ class PrivilegesController extends BaseController
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/privileges" method="post">' . \PHP_EOL;
+ echo '<form action="privileges" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left">%s</th>',
diff --git a/src/controllers/RolesController.php b/src/controllers/RolesController.php
index 8b3809a1..6d236e7e 100644
--- a/src/controllers/RolesController.php
+++ b/src/controllers/RolesController.php
@@ -118,9 +118,7 @@ class RolesController extends BaseController
'title' => $this->lang['strrole'],
'field' => Decorator::field('rolname'),
'url' => \containerInstance()->getDestinationWithLastTab('role'),
- '/redirect/role?action=properties&amp;%s&amp;',
- $this->misc->href
- ),
+
'vars' => ['rolename' => 'rolname'],
],
'group' => [
@@ -244,7 +242,7 @@ class RolesController extends BaseController
$this->printTitle($this->lang['strcreaterole'], 'pg.role.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/roles" method="post">' . \PHP_EOL;
+ echo '<form action="roles" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -471,7 +469,7 @@ class RolesController extends BaseController
$this->_adjustPostVars($roledata, $canRename);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/roles" method="post">' . \PHP_EOL;
+ echo '<form action="roles" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -687,7 +685,7 @@ class RolesController extends BaseController
$this->misc->printVal($_REQUEST['rolename'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/roles" method="post">' . \PHP_EOL;
+ echo '<form action="roles" method="post">' . \PHP_EOL;
echo '<p><input type="hidden" name="action" value="drop" />' . \PHP_EOL;
echo '<input type="hidden" name="rolename" value="', \htmlspecialchars($_REQUEST['rolename']), '" />' . \PHP_EOL;
echo $this->view->form;
@@ -1000,7 +998,7 @@ class RolesController extends BaseController
$this->coalesceArr($_POST, 'confirm', '');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/roles" method="post">' . \PHP_EOL;
+ echo '<form action="roles" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
diff --git a/src/controllers/RulesController.php b/src/controllers/RulesController.php
index 33b1ddf2..195663cf 100644
--- a/src/controllers/RulesController.php
+++ b/src/controllers/RulesController.php
@@ -173,7 +173,7 @@ class RulesController extends BaseController
$this->printTitle($this->lang['strcreaterule'], 'pg.rule.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/rules" method="post">' . \PHP_EOL;
+ echo '<form action="rules" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left required">%s</th>',
@@ -282,7 +282,7 @@ class RulesController extends BaseController
$this->misc->printVal($_REQUEST[$_REQUEST['reltype']])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/rules" method="post">' . \PHP_EOL;
+ echo '<form action="rules" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="drop" />' . \PHP_EOL;
echo '<input type="hidden" name="subject" value="', \htmlspecialchars($_REQUEST['reltype']), '" />' . \PHP_EOL;
echo '<input type="hidden" name="', \htmlspecialchars($_REQUEST['reltype']),
diff --git a/src/controllers/SchemasController.php b/src/controllers/SchemasController.php
index 6d62e897..58a9df75 100644
--- a/src/controllers/SchemasController.php
+++ b/src/controllers/SchemasController.php
@@ -116,11 +116,16 @@ class SchemasController extends BaseController
'owner' => [
'title' => $this->lang['strowner'],
'field' => Decorator::field('nspowner'),
- ],
- 'schema_size' => [
+ ]];
+ if(boolval($this->conf['display_sizes']['schemas']??false)===true) {
+
+
+ $columns['schema_size'] = [
'title' => $this->lang['strsize'],
'field' => Decorator::field('schema_size'),
- ],
+ ];
+ }
+ $columns=array_merge($columns,[
'actions' => [
'title' => $this->lang['stractions'],
],
@@ -128,7 +133,7 @@ class SchemasController extends BaseController
'title' => $this->lang['strcomment'],
'field' => Decorator::field('nspcomment'),
],
- ];
+ ]);
$actions = [
'multiactions' => [
@@ -289,7 +294,7 @@ class SchemasController extends BaseController
$this->printTitle($this->lang['strcreateschema'], 'pg.schema.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/schemas" method="post">' . \PHP_EOL;
+ echo '<form action="schemas" method="post">' . \PHP_EOL;
echo '<table style="width: 100%">' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -314,8 +319,7 @@ class SchemasController extends BaseController
echo \sprintf(
' <option value="%s"',
$uname
- ),
- ($uname === $_POST['formAuth']) ? ' selected="selected"' : '', \sprintf(
+ ), ($uname === $_POST['formAuth']) ? ' selected="selected"' : '', \sprintf(
'>%s</option>',
$uname
) . \PHP_EOL;
@@ -394,7 +398,7 @@ class SchemasController extends BaseController
$this->coalesceArr($_POST, 'owner', $schema->fields['ownername']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/schemas" method="post">' . \PHP_EOL;
+ echo '<form action="schemas" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo "\t<tr>" . \PHP_EOL;
@@ -421,8 +425,7 @@ class SchemasController extends BaseController
while (!$users->EOF) {
$uname = $users->fields['usename'];
- echo '<option value="', \htmlspecialchars($uname), '"',
- ($uname === $_POST['owner']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL;
+ echo '<option value="', \htmlspecialchars($uname), '"', ($uname === $_POST['owner']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL;
$users->MoveNext();
}
echo '</select></td></tr>' . \PHP_EOL;
@@ -498,7 +501,7 @@ class SchemasController extends BaseController
$this->printTrail('schema');
$this->printTitle($this->lang['strdrop'], 'pg.schema.drop');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/schemas" method="post">' . \PHP_EOL;
+ echo '<form action="schemas" method="post">' . \PHP_EOL;
//If multi drop
if (isset($_REQUEST['ma'])) {
foreach ($_REQUEST['ma'] as $v) {
diff --git a/src/controllers/SequencesController.php b/src/controllers/SequencesController.php
index 1c114739..0bca0fab 100644
--- a/src/controllers/SequencesController.php
+++ b/src/controllers/SequencesController.php
@@ -438,7 +438,7 @@ class SequencesController extends BaseController
$this->printTitle($this->lang['strdrop'], 'pg.sequence.drop');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/sequences" method="post">' . \PHP_EOL;
+ echo '<form action="sequences" method="post">' . \PHP_EOL;
//If multi drop
if (isset($_REQUEST['ma'])) {
@@ -548,7 +548,7 @@ class SequencesController extends BaseController
$this->printTitle($this->lang['strcreatesequence'], 'pg.sequence.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/sequences" method="post">' . \PHP_EOL;
+ echo '<form action="sequences" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
@@ -735,7 +735,7 @@ class SequencesController extends BaseController
$sequence = $data->getSequence($_REQUEST['sequence']);
if (\is_object($sequence) && 0 < $sequence->RecordCount()) {
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/sequences" method="post">' . \PHP_EOL;
+ echo '<form action="sequences" method="post">' . \PHP_EOL;
echo '<table border="0">';
echo \sprintf(
'<tr><th class="data left required">%s</th>',
@@ -861,7 +861,7 @@ class SequencesController extends BaseController
$_POST['formCycledValue'] = 'on';
}
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/sequences" method="post">' . \PHP_EOL;
+ echo '<form action="sequences" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
diff --git a/src/controllers/SqlController.php b/src/controllers/SqlController.php
index 49750a26..b36adb04 100644
--- a/src/controllers/SqlController.php
+++ b/src/controllers/SqlController.php
@@ -7,6 +7,7 @@
namespace PHPPgAdmin\Controller;
use ADORecordSet;
+use Kint\Kint;
use PHPPgAdmin\ADOdbException;
/**
@@ -56,7 +57,7 @@ class SqlController extends BaseController
if (isset($_REQUEST['subject'])) {
$this->subject = $_REQUEST['subject'];
}
-
+
// Check to see if pagination has been specified. In that case, send to display
// script for pagination
// if a file is given or the request is an explain, do not paginate
@@ -64,33 +65,47 @@ class SqlController extends BaseController
!(isset($_FILES['script']) && 0 < $_FILES['script']['size']) &&
(0 === \preg_match('/^\s*explain/i', $this->query))) {
//if (!(isset($_FILES['script']) && $_FILES['script']['size'] > 0)) {
-
+
$display_controller = new DisplayController($this->getContainer());
-
+
return $display_controller->render();
}
+
+ $this->view->offsetSet('codemirror',true);
- $this->printHeader($this->headerTitle(), null, true, 'header_sqledit.twig');
- $this->printBody();
- $this->printTrail('database');
- $this->printTitle($this->lang['strqueryresults']);
-
+
+
// Set the schema search path
if (isset($_REQUEST['search_path'])) {
if (0 !== $data->setSearchPath(\array_map('trim', \explode(',', $_REQUEST['search_path'])))) {
+ $this->printHeader($this->headerTitle(), null, true );
+ $body=$this->printBody(false);
+ $trail=$this->printTrail('database',false);
+ $title=$this->printTitle($this->lang['strqueryresults'],null,false);
+ echo $body.$trail.$title;
return $this->printFooter();
}
}
+
// May as well try to time the query
if (\function_exists('microtime')) {
[$usec, $sec] = \explode(' ', \microtime());
$this->start_time = ((float) $usec + (float) $sec);
- }
-
+ $this->view->offsetSet('serverSide',1);
+ $header= $this->printHeader($this->headerTitle(), null, true );
+ $body=$this->printBody(false);
+ $trail=$this->printTrail('database',false);
+ $title=$this->printTitle($this->lang['strqueryresults'],null,false);
+ echo $body.$trail.$title;
+
$rs = $this->doDefault();
-
- $this->doFooter(true, 'footer_sqledit.twig', $rs);
+
+
+ }
+ echo $body.$trail.$title;
+ // echo $body.$trail.$title;
+ $this->doFooter(true, 'footer_sqledit.twig', $rs);
}
public function doDefault()
@@ -98,10 +113,7 @@ class SqlController extends BaseController
$_connection = $this->misc->getConnection();
try {
- // Execute the query. If it's a script upload, special handling is necessary
- if (isset($_FILES['script']) && 0 < $_FILES['script']['size']) {
- return $this->execute_script();
- }
+
return $this->execute_query();
} catch (ADOdbException $e) {
@@ -119,12 +131,13 @@ class SqlController extends BaseController
$data = $this->misc->getDatabaseAccessor();
$_connection = $this->misc->getConnection();
$lang = $this->lang;
+ $json=[];
/**
* This is a callback function to display the result of each separate query.
*
* @param ADORecordSet $rs The recordset returned by the script execetor
*/
- $sqlCallback = static function ($query, $rs, $lineno) use ($data, $misc, $lang, $_connection): void {
+ $sqlCallback = static function ($query, $rs, $lineno) use ($data, $misc, $lang, $_connection,&$json): void {
// Check if $rs is false, if so then there was a fatal error
if (false === $rs) {
echo \htmlspecialchars($_FILES['script']['name']), ':', $lineno, ': ', \nl2br(\htmlspecialchars($_connection->getLastError())), '<br/>' . \PHP_EOL;
@@ -136,8 +149,8 @@ class SqlController extends BaseController
$num_fields = \pg_numfields($rs);
echo "<p><table>\n<tr>";
- for ($k = 0; $k < $num_fields; ++$k) {
- echo '<th class="data">', $misc->printVal(\pg_fieldname($rs, $k)), '</th>';
+ for ($fieldIndex = 0; $fieldIndex < $num_fields; ++$fieldIndex) {
+ echo '<th class="data">', $misc->printVal(\pg_fieldname($rs, $fieldIndex)), '</th>';
}
$i = 0;
@@ -150,11 +163,12 @@ class SqlController extends BaseController
$id
) . \PHP_EOL;
- foreach ($row as $k => $v) {
- echo '<td style="white-space:nowrap;">', $misc->printVal($v, \pg_fieldtype($rs, $k), ['null' => true]), '</td>';
+ foreach ($row as $fieldIndex => $v) {
+ echo '<td style="white-space:nowrap;">', $misc->printVal($v, \pg_fieldtype($rs, $fieldIndex), ['null' => true]), '</td>';
}
echo '</tr>' . \PHP_EOL;
$row = \pg_fetch_row($rs);
+
++$i;
}
@@ -186,8 +200,9 @@ class SqlController extends BaseController
}
}
};
+ $final= $data->executeScript('script', $sqlCallback);
- return $data->executeScript('script', $sqlCallback);
+ return $final;
}
/**
@@ -205,7 +220,7 @@ class SqlController extends BaseController
* @var ADORecordSet
*/
$rs = $data->conn->Execute($this->query);
-
+
echo '<form method="post" id="sqlform" action="' . $_SERVER['REQUEST_URI'] . '">';
echo '<textarea width="90%" name="query" id="query" rows="5" cols="100" resizable="true">';
@@ -213,7 +228,7 @@ class SqlController extends BaseController
echo '</textarea><br>';
echo $this->view->setForm();
echo '<input type="submit"/></form>';
-
+$json=[];
// $rs will only be an object if there is no error
if (\is_object($rs)) {
// Request was run, saving it in history
@@ -227,28 +242,37 @@ class SqlController extends BaseController
if (0 < $rs->RecordCount()) {
echo "<table>\n<tr>";
- foreach ($rs->fields as $k => $v) {
- $finfo = $rs->FetchField($k);
+ foreach ($rs->fields as $fieldName => $fieldValue) {
+ $finfo = $rs->FetchField($fieldName);
echo '<th class="data">', $this->misc->printVal($finfo->name), '</th>';
}
echo '</tr>' . \PHP_EOL;
$i = 0;
-
+$res='';
while (!$rs->EOF) {
$id = (0 === ($i % 2) ? '1' : '2');
- echo \sprintf(
+ $res.= \sprintf(
'<tr class="data%s">',
$id
) . \PHP_EOL;
- foreach ($rs->fields as $k => $v) {
- $finfo = $rs->FetchField($k);
- echo '<td style="white-space:nowrap;">', $this->misc->printVal($v, $finfo->type, ['null' => true]), '</td>';
+ $json[$i]=[];
+ foreach ($rs->fields as $fieldName => $fieldValue) {
+ $finfo = $rs->FetchField($fieldName);
+ $parsedValue=$this->misc->printVal($fieldValue, $finfo->type, ['null' => true]);
+
+ $json[$i][$fieldName]=$parsedValue;
+ $res.= '<td style="white-space:nowrap;">';
+ $res.= $parsedValue;
+ $res.= '</td>';
}
- echo '</tr>' . \PHP_EOL;
+ $res.= '</tr>' . \PHP_EOL;
$rs->MoveNext();
++$i;
+
}
+
+ echo $res;
echo '</table>' . \PHP_EOL;
echo '<p>', $rs->RecordCount(), \sprintf(
' %s</p>',
@@ -264,7 +288,7 @@ class SqlController extends BaseController
// Otherwise nodata to print
echo '<p>', $this->lang['strnodata'], '</p>' . \PHP_EOL;
}
-
+
return $rs;
}
}
diff --git a/src/controllers/SqleditController.php b/src/controllers/SqleditController.php
index 19811178..03c79ef6 100644
--- a/src/controllers/SqleditController.php
+++ b/src/controllers/SqleditController.php
@@ -45,6 +45,9 @@ class SqleditController extends BaseController
$this->setWindowName('sqledit');
$this->scripts = '<script type="text/javascript">window.inPopUp=true;</script>';
+ $this->view->offsetSet('excludeJsTree',true);
+ $this->view->offsetSet('inPopUp',true);
+ $this->view->offsetSet('codemirror',true);
$header=$this->printHeader($title, $this->scripts, false, 'header_sqledit.twig');
echo $header;
@@ -70,21 +73,21 @@ class SqleditController extends BaseController
}
$this->coalesceArr($_REQUEST, 'search_path', \implode(',', $data->getSearchPath()));
- $search_path = \htmlspecialchars($_REQUEST['search_path']);
$sqlquery = \htmlspecialchars($_SESSION['sqlquery']);
-
+
$default_html = $this->printTabs('popup', 'sql', false);
-
- $default_html .= '<form action="' . \containerInstance()->subFolder . '/sql" method="post" enctype="multipart/form-data" class="sqlform" id="sqlform" target="parent">';
+
+ $default_html .= '<form action="' . \containerInstance()->subFolder . '/sql" method="post" enctype="multipart/form-data" class="sqlform" id="sqlform" target="opener">';
$default_html .= \PHP_EOL;
$default_html .= $this->printConnection('sql', false);
-
+
$default_html .= \PHP_EOL;
-
+
$default_html .= ' <div class="searchpath">';
$default_html .= '<label>';
$default_html .= $this->view->printHelp($this->lang['strsearchpath'], 'pg.schema.search_path', false);
-
+
+ $search_path = \htmlspecialchars($_REQUEST['search_path']);
$default_html .= ': <input type="text" name="search_path" id="search_path" size="45" value="' . $search_path . '" />';
$default_html .= '</label>' . \PHP_EOL;
@@ -151,7 +154,7 @@ class SqleditController extends BaseController
$default_html = $this->printTabs('popup', 'find', false);
- $default_html .= '<form action="database" method="post" target="detail">' . \PHP_EOL;
+ $default_html .= '<form action="database" method="post" target="opener">' . \PHP_EOL;
$default_html .= $this->printConnection('find', false);
$default_html .= '<p><input class="focusme" name="term" id="term" value="' . \htmlspecialchars($_REQUEST['term']) . \sprintf(
'" size="32" maxlength="%s" />',
diff --git a/src/controllers/TablesController.php b/src/controllers/TablesController.php
index fa4aef47..c3f31584 100644
--- a/src/controllers/TablesController.php
+++ b/src/controllers/TablesController.php
@@ -158,6 +158,10 @@ class TablesController extends BaseController
$columns = $this->_getColumns();
+ if(boolval($this->conf['display_sizes']['tables']??false)===false) {
+ unset($columns['table_size']);
+ }
+
$actions = $this->_getActions();
echo $this->printTable($tables, $columns, $actions, $this->table_place, $this->lang['strnotables']);
@@ -322,7 +326,7 @@ class TablesController extends BaseController
$this->printTitle($this->lang['strcreatetable'], 'pg.table.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/' . $this->script . '" method="post">';
+ echo '<form action="' . $this->script . '" method="post">';
echo \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
@@ -334,8 +338,8 @@ class TablesController extends BaseController
' <td class="data"><input name="name" size="32" maxlength="%s" value="',
$data->_maxNameLen
),
- \htmlspecialchars($_REQUEST['name']),
- "\" /></td>\n\t</tr>" . \PHP_EOL;
+ \htmlspecialchars($_REQUEST['name']),
+ "\" /></td>\n\t</tr>" . \PHP_EOL;
echo \sprintf(
' <tr>
<th class="data left required">%s</th>',
@@ -345,8 +349,8 @@ class TablesController extends BaseController
' <td class="data"><input name="fields" size="5" maxlength="%s" value="',
$data->_maxNameLen
),
- \htmlspecialchars($_REQUEST['fields']),
- "\" /></td>\n\t</tr>" . \PHP_EOL;
+ \htmlspecialchars($_REQUEST['fields']),
+ "\" /></td>\n\t</tr>" . \PHP_EOL;
echo \sprintf(
' <tr>
<th class="data left">%s</th>',
@@ -363,21 +367,19 @@ class TablesController extends BaseController
) . \PHP_EOL;
echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"spcname\">" . \PHP_EOL;
// Always offer the default (empty) option
- echo "\t\t\t\t<option value=\"\"",
- ('' === $_REQUEST['spcname']) ? ' selected="selected"' : '',
- '></option>' . \PHP_EOL;
+ echo "\t\t\t\t<option value=\"\"", ('' === $_REQUEST['spcname']) ? ' selected="selected"' : '',
+ '></option>' . \PHP_EOL;
// Display all other tablespaces
while (!$tablespaces->EOF) {
$spcname = \htmlspecialchars($tablespaces->fields['spcname']);
echo \sprintf(
' <option value="%s"',
$spcname
- ),
- ($tablespaces->fields['spcname'] === $_REQUEST['spcname']) ? ' selected="selected"' : '',
- \sprintf(
- '>%s</option>',
- $spcname
- ) . \PHP_EOL;
+ ), ($tablespaces->fields['spcname'] === $_REQUEST['spcname']) ? ' selected="selected"' : '',
+ \sprintf(
+ '>%s</option>',
+ $spcname
+ ) . \PHP_EOL;
$tablespaces->MoveNext();
}
echo "\t\t\t</select>\n\t\t</td>\n\t</tr>" . \PHP_EOL;
@@ -389,8 +391,8 @@ class TablesController extends BaseController
$this->lang['strcomment']
) . \PHP_EOL;
echo "\t\t<td><textarea name=\"tblcomment\" rows=\"3\" cols=\"32\">",
- \htmlspecialchars($_REQUEST['tblcomment']),
- "</textarea></td>\n\t</tr>" . \PHP_EOL;
+ \htmlspecialchars($_REQUEST['tblcomment']),
+ "</textarea></td>\n\t</tr>" . \PHP_EOL;
echo '</table>' . \PHP_EOL;
echo '<p><input type="hidden" name="action" value="create" />' . \PHP_EOL;
@@ -433,8 +435,8 @@ class TablesController extends BaseController
$this->printTitle($this->lang['strcreatetable'], 'pg.table.create');
$this->printMsg($msg);
- echo '<script src="' . \containerInstance()->subFolder . '/assets/js/tables.js" type="text/javascript"></script>';
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tables" method="post">' . \PHP_EOL;
+ echo '<script src="assets/js/tables.js" type="text/javascript"></script>';
+ echo '<form action="tables" method="post">' . \PHP_EOL;
// Output table header
echo '<table>' . \PHP_EOL;
@@ -482,8 +484,8 @@ class TablesController extends BaseController
$i,
$data->_maxNameLen
),
- \htmlspecialchars($_REQUEST['field'][$i]),
- '" /></td>' . \PHP_EOL;
+ \htmlspecialchars($_REQUEST['field'][$i]),
+ '" /></td>' . \PHP_EOL;
echo \sprintf(
' <td>
<select name="type[%s]" class="select2" id="types%s" onchange="checkLengths(this.options[this.selectedIndex].value,%s);">',
@@ -494,22 +496,20 @@ class TablesController extends BaseController
// Output any "magic" types
foreach ($data->extraTypes as $v) {
$types_for_js[\mb_strtolower($v)] = 1;
- echo "\t\t\t\t<option value=\"", \htmlspecialchars($v), '"',
- (isset($_REQUEST['type'][$i]) && $_REQUEST['type'][$i] === $v) ? ' selected="selected"' : '',
- '>',
- $this->misc->printVal($v),
- '</option>' . \PHP_EOL;
+ echo "\t\t\t\t<option value=\"", \htmlspecialchars($v), '"', (isset($_REQUEST['type'][$i]) && $_REQUEST['type'][$i] === $v) ? ' selected="selected"' : '',
+ '>',
+ $this->misc->printVal($v),
+ '</option>' . \PHP_EOL;
}
$types->moveFirst();
while (!$types->EOF) {
$typname = $types->fields['typname'];
$types_for_js[$typname] = 1;
- echo "\t\t\t\t<option value=\"", \htmlspecialchars($typname), '"',
- (isset($_REQUEST['type'][$i]) && $_REQUEST['type'][$i] === $typname) ? ' selected="selected"' : '',
- '>',
- $this->misc->printVal($typname),
- '</option>' . \PHP_EOL;
+ echo "\t\t\t\t<option value=\"", \htmlspecialchars($typname), '"', (isset($_REQUEST['type'][$i]) && $_REQUEST['type'][$i] === $typname) ? ' selected="selected"' : '',
+ '>',
+ $this->misc->printVal($typname),
+ '</option>' . \PHP_EOL;
$types->MoveNext();
}
echo "\t\t\t</select>\n\t\t\n";
@@ -543,8 +543,8 @@ class TablesController extends BaseController
$i,
$i
),
- \htmlspecialchars($_REQUEST['length'][$i]),
- '" /></td>' . \PHP_EOL;
+ \htmlspecialchars($_REQUEST['length'][$i]),
+ '" /></td>' . \PHP_EOL;
echo \sprintf(
' <td><input type="checkbox" name="notnull[%s]"',
$i
@@ -564,21 +564,21 @@ class TablesController extends BaseController
' <td><input name="default[%s]" size="20" value="',
$i
),
- \htmlspecialchars($_REQUEST['default'][$i]),
- '" /></td>' . \PHP_EOL;
+ \htmlspecialchars($_REQUEST['default'][$i]),
+ '" /></td>' . \PHP_EOL;
echo \sprintf(
' <td><input name="colcomment[%s]" size="40" value="',
$i
),
- \htmlspecialchars($_REQUEST['colcomment'][$i]),
- \sprintf(
- '" />
+ \htmlspecialchars($_REQUEST['colcomment'][$i]),
+ \sprintf(
+ '" />
<script type="text/javascript">checkLengths(document.getElementById(\'types%s\').value,%s);</script>
</td>
</tr>',
- $i,
- $i
- ) . \PHP_EOL;
+ $i,
+ $i
+ ) . \PHP_EOL;
}
echo '</table>' . \PHP_EOL;
echo '<p><input type="hidden" name="action" value="create" />' . \PHP_EOL;
@@ -735,7 +735,7 @@ class TablesController extends BaseController
unset($tbltmp);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tables" method="post">' . \PHP_EOL;
+ echo '<form action="tables" method="post">' . \PHP_EOL;
echo \sprintf(
'<table>
<tr>
@@ -783,28 +783,28 @@ class TablesController extends BaseController
$this->lang['stroptions']
);
echo '<label for="withdefaults"><input type="checkbox" id="withdefaults" name="withdefaults"',
- isset($_REQUEST['withdefaults']) ? ' checked="checked"' : '',
- \sprintf(
- '/>%s</label>',
- $this->lang['strcreatelikewithdefaults']
- );
+ isset($_REQUEST['withdefaults']) ? ' checked="checked"' : '',
+ \sprintf(
+ '/>%s</label>',
+ $this->lang['strcreatelikewithdefaults']
+ );
if ($data->hasCreateTableLikeWithConstraints()) {
echo '<br /><label for="withconstraints"><input type="checkbox" id="withconstraints" name="withconstraints"',
- isset($_REQUEST['withconstraints']) ? ' checked="checked"' : '',
- \sprintf(
- '/>%s</label>',
- $this->lang['strcreatelikewithconstraints']
- );
+ isset($_REQUEST['withconstraints']) ? ' checked="checked"' : '',
+ \sprintf(
+ '/>%s</label>',
+ $this->lang['strcreatelikewithconstraints']
+ );
}
if ($data->hasCreateTableLikeWithIndexes()) {
echo '<br /><label for="withindexes"><input type="checkbox" id="withindexes" name="withindexes"',
- isset($_REQUEST['withindexes']) ? ' checked="checked"' : '',
- \sprintf(
- '/>%s</label>',
- $this->lang['strcreatelikewithindexes']
- );
+ isset($_REQUEST['withindexes']) ? ' checked="checked"' : '',
+ \sprintf(
+ '/>%s</label>',
+ $this->lang['strcreatelikewithindexes']
+ );
}
echo "</td>\n\t</tr>" . \PHP_EOL;
echo '</table>';
@@ -877,7 +877,7 @@ class TablesController extends BaseController
$attrs = $data->getTableAttributes($_REQUEST['table']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/display" method="post" id="selectform">' . \PHP_EOL;
+ echo '<form action="display" method="post" id="selectform">' . \PHP_EOL;
if (0 < $attrs->RecordCount()) {
// JavaScript for select all feature
@@ -931,8 +931,8 @@ class TablesController extends BaseController
) . \PHP_EOL;
echo '<td style="white-space:nowrap;">';
echo '<input type="checkbox" name="show[', \htmlspecialchars($attrs->fields['attname']), ']"',
- isset($_REQUEST['show'][$attrs->fields['attname']]) ? ' checked="checked"' : '',
- ' /></td>';
+ isset($_REQUEST['show'][$attrs->fields['attname']]) ? ' checked="checked"' : '',
+ ' /></td>';
echo '<td style="white-space:nowrap;">', $this->misc->printVal($attrs->fields['attname']), '</td>';
echo '<td style="white-space:nowrap;">', $this->misc->printVal($data->formatType($attrs->fields['type'], $attrs->fields['atttypmod'])), '</td>';
echo '<td style="white-space:nowrap;">';
@@ -943,9 +943,9 @@ class TablesController extends BaseController
foreach (\array_keys($data->selectOps) as $v) {
echo '<option value="', \htmlspecialchars($v), '"', ($_REQUEST['ops'][$attrs->fields['attname']] === $v) ? ' selected="selected"' : '',
- '>',
- \htmlspecialchars($v),
- '</option>' . \PHP_EOL;
+ '>',
+ \htmlspecialchars($v),
+ '</option>' . \PHP_EOL;
}
echo "</select>\n</td>" . \PHP_EOL;
echo '<td style="white-space:nowrap;">', $data->printField(
@@ -1052,7 +1052,7 @@ class TablesController extends BaseController
$this->coalesceArr($_REQUEST, 'nulls', []);
$this->coalesceArr($_REQUEST, 'format', []);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tables" method="post" id="ac_form">' . \PHP_EOL;
+ echo '<form action="tables" method="post" id="ac_form">' . \PHP_EOL;
if (0 < $attrs->RecordCount()) {
echo '<table>' . \PHP_EOL;
@@ -1113,8 +1113,8 @@ class TablesController extends BaseController
'<input type="hidden" name="types[%s]" value="',
$attrs->fields['attnum']
),
- \htmlspecialchars($attrs->fields['type']),
- '" /></td>';
+ \htmlspecialchars($attrs->fields['type']),
+ '" /></td>';
echo '<td style="white-space:nowrap;">' . \PHP_EOL;
echo \sprintf(
@@ -1232,7 +1232,7 @@ class TablesController extends BaseController
$this->lang['strcancel'],
\PHP_EOL
);
- echo '<script src="' . \containerInstance()->subFolder . '/assets/js/insert_or_edit_row.js" type="text/javascript"></script>';
+ echo '<script src="assets/js/insert_or_edit_row.js" type="text/javascript"></script>';
}
/**
@@ -1289,7 +1289,7 @@ class TablesController extends BaseController
$this->printTrail('schema');
$this->printTitle($this->lang['strempty'], 'pg.table.empty');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tables" method="post">' . \PHP_EOL;
+ echo '<form action="tables" method="post">' . \PHP_EOL;
foreach ($_REQUEST['ma'] as $v) {
$a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES));
@@ -1310,7 +1310,7 @@ class TablesController extends BaseController
$this->misc->printVal($_REQUEST['table'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tables" method="post">' . \PHP_EOL;
+ echo '<form action="tables" method="post">' . \PHP_EOL;
echo \sprintf(
'<input type="hidden" name="table" value="%s" />%s',
@@ -1406,7 +1406,7 @@ class TablesController extends BaseController
$this->printTrail('schema');
$this->printTitle($this->lang['strdrop'], 'pg.table.drop');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tables" method="post">' . \PHP_EOL;
+ echo '<form action="tables" method="post">' . \PHP_EOL;
foreach ($_REQUEST['ma'] as $v) {
$a = \unserialize(\htmlspecialchars_decode($v, \ENT_QUOTES));
@@ -1425,7 +1425,7 @@ class TablesController extends BaseController
$this->misc->printVal($_REQUEST['table'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tables" method="post">' . \PHP_EOL;
+ echo '<form action="tables" method="post">' . \PHP_EOL;
echo \sprintf(
'<input type="hidden" name="table" value="%s" />%s',
\htmlspecialchars($_REQUEST['table']),
@@ -1521,10 +1521,10 @@ class TablesController extends BaseController
'table' => [
'title' => $this->lang['strtable'],
'field' => Decorator::field('relname'),
- 'url' => \containerInstance()->getDestinationWithLastTab('table').'&',
- // '/redirect/table?%s&amp;',
- //$this->misc->href
- // ),
+ 'url' => \containerInstance()->getDestinationWithLastTab('table') . '&',
+ // '/redirect/table?%s&amp;',
+ //$this->misc->href
+ // ),
'vars' => ['table' => 'relname'],
],
'owner' => [
diff --git a/src/controllers/TablespacesController.php b/src/controllers/TablespacesController.php
index 12bfcae3..51ddf42f 100644
--- a/src/controllers/TablespacesController.php
+++ b/src/controllers/TablespacesController.php
@@ -190,7 +190,7 @@ class TablespacesController extends BaseController
$this->coalesceArr($_POST, 'comment', ($data->hasSharedComments()) ? $tablespace->fields['spccomment'] : '');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tablespaces" method="post">' . \PHP_EOL;
+ echo '<form action="tablespaces" method="post">' . \PHP_EOL;
echo $this->view->form;
echo '<table>' . \PHP_EOL;
echo \sprintf(
@@ -291,7 +291,7 @@ class TablespacesController extends BaseController
$this->misc->printVal($_REQUEST['tablespace'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tablespaces" method="post">' . \PHP_EOL;
+ echo '<form action="tablespaces" method="post">' . \PHP_EOL;
echo $this->view->form;
echo '<input type="hidden" name="action" value="drop" />' . \PHP_EOL;
echo '<input type="hidden" name="tablespace" value="', \htmlspecialchars($_REQUEST['tablespace']), '" />' . \PHP_EOL;
@@ -341,7 +341,7 @@ class TablespacesController extends BaseController
$this->printTitle($this->lang['strcreatetablespace'], 'pg.tablespace.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tablespaces" method="post">' . \PHP_EOL;
+ echo '<form action="tablespaces" method="post">' . \PHP_EOL;
echo $this->view->form;
echo '<table>' . \PHP_EOL;
echo \sprintf(
diff --git a/src/controllers/TblpropertiesController.php b/src/controllers/TblpropertiesController.php
index 2cef3bf7..81ba3b81 100644
--- a/src/controllers/TblpropertiesController.php
+++ b/src/controllers/TblpropertiesController.php
@@ -361,7 +361,7 @@ class TblpropertiesController extends BaseController
$_POST['tablespace'] = $table->fields['tablespace'];
}
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tblproperties" method="post">' . \PHP_EOL;
+ echo '<form action="tblproperties" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left required">%s</th>',
@@ -539,7 +539,7 @@ class TblpropertiesController extends BaseController
$max_size = $misc->inisizeToBytes(\ini_get('upload_max_filesize'));
if (\is_float($max_size) && 0 < $max_size) {
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/dataimport" method="post" enctype="multipart/form-data">' . \PHP_EOL;
+ echo '<form action="dataimport" method="post" enctype="multipart/form-data">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -637,8 +637,8 @@ class TblpropertiesController extends BaseController
$this->printTitle($this->lang['straddcolumn'], 'pg.column.add');
$this->printMsg($msg);
- echo '<script src="' . \containerInstance()->subFolder . '/assets/js/tables.js" type="text/javascript"></script>';
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tblproperties" method="post">' . \PHP_EOL;
+ echo '<script src="assets/js/tables.js" type="text/javascript"></script>';
+ echo '<form action="tblproperties" method="post">' . \PHP_EOL;
// Output table header
echo '<table>' . \PHP_EOL;
@@ -818,7 +818,7 @@ class TblpropertiesController extends BaseController
$misc->printVal($_REQUEST['table'])
) . '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/tblproperties" method="post">' . \PHP_EOL;
+ echo '<form action="tblproperties" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="drop" />' . \PHP_EOL;
echo \sprintf(
'<input type="hidden" name="table" value="%s" />%s',
diff --git a/src/controllers/TreeController.php b/src/controllers/TreeController.php
index 9786a3d7..94ec3210 100644
--- a/src/controllers/TreeController.php
+++ b/src/controllers/TreeController.php
@@ -87,18 +87,17 @@ class TreeController extends BaseController
*
* @psalm-return array<int|string, array<string, mixed>|bool|string>
*/
- public function printTree( &$_treedata, &$attrs, $section, $print = true)
+ public function printTree(&$_treedata, &$attrs, $section, $print = true)
{
$treedata = [];
if (0 < $_treedata->RecordCount()) {
while (!$_treedata->EOF) {
- $treedata[] = $_treedata->fields;
+ $treedata[] = $_treedata->fields;
$_treedata->MoveNext();
}
-
}
-
+
$tree_params = [
'treedata' => &$treedata,
'attrs' => &$attrs,
@@ -147,15 +146,15 @@ class TreeController extends BaseController
private function printTreeJSON(&$treedata, &$attrs, $print = true)
{
$parent = [];
-
+ $subFolder = containerInstance()->subFolder;
if (isset($attrs['is_root'])) {
$parent = [
'id' => 'root',
'children' => true,
- 'icon' => \containerInstance()->subFolder . '/assets/images/themes/default/Servers.png',
+ 'icon' => $subFolder . '/assets/images/themes/default/Servers.png',
'state' => ['opened' => true],
- 'a_attr' => ['href' =>'servers'],
- 'url' => \containerInstance()->subFolder . ('/servers?action=tree'),
+ 'a_attr' => ['href' => 'servers'],
+ 'url' => $subFolder . ('/servers?action=tree'),
'text' => 'Servers',
];
} elseif (0 < \count($treedata)) {
@@ -165,43 +164,44 @@ class TreeController extends BaseController
if (!empty($attrs['openicon'])) {
$icon = $this->view->icon(Decorator::get_sanitized_value($attrs['openIcon'], $rec));
}
- $href=Decorator::get_sanitized_value($attrs['action'], $rec);
+ $href = Decorator::get_sanitized_value($attrs['action'], $rec);
if ($href) {
- $href = \str_replace('//', '/', $href);
+ $href = \str_replace('//', '/', $href);
+ $href = $subFolder . str_replace($subFolder, '', $href);
}
-
+
$tree = [
'text' => Decorator::get_sanitized_value($attrs['text'], $rec),
- 'id' => \sha1(Decorator::get_sanitized_value($attrs['action'], $rec)),
+ 'id' => \sha1($href),
'icon' => Decorator::get_sanitized_value($icon, $rec),
'iconaction' => Decorator::get_sanitized_value($attrs['iconAction'], $rec),
'openicon' => Decorator::get_sanitized_value($icon, $rec),
'tooltip' => Decorator::get_sanitized_value($attrs['toolTip'], $rec),
'a_attr' => ['href' => $href],
+ 'href' => $href,
//'url'=>strtolower(),
'children' => false,
];
$url = Decorator::get_sanitized_value($attrs['branch'], $rec);
- $urlparts=parse_url('https://dummy.domain'.$tree['a_attr']['href']);
- $path_arr=explode('/',$urlparts['path']??'');
- $tree['url']=containerInstance()->getDestinationWithLastTab(array_pop($path_arr));
+ $urlparts = parse_url('https://dummy.domain' . $tree['a_attr']['href']);
+ $path_arr = explode('/', $urlparts['path'] ?? '');
+ $tree['url'] = containerInstance()->getDestinationWithLastTab(array_pop($path_arr));
+
+
+ $url = \str_replace('/src/views/', '/', $url);
-
- $url = \str_replace('/src/views/', '/', $url);
-
if ($url) {
$tree['url'] = $url;
$tree['children'] = true;
}
- //$tree['text'] = '<a href="' . $tree['id'] . '" target="detail">' . $tree['text'] . '</a>';
$parent[] = $tree;
}
- } else {
+ } else {
$parent = ['children' => false];
}
//ddd($parent);
diff --git a/src/controllers/TriggersController.php b/src/controllers/TriggersController.php
index 1d32f48d..cc84f700 100644
--- a/src/controllers/TriggersController.php
+++ b/src/controllers/TriggersController.php
@@ -282,7 +282,7 @@ class TriggersController extends BaseController
if (0 < $triggerdata->RecordCount()) {
$this->coalesceArr($_POST, 'name', $triggerdata->fields['tgname']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/triggers" method="post">' . \PHP_EOL;
+ echo '<form action="triggers" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data">%s</th>',
@@ -340,7 +340,7 @@ class TriggersController extends BaseController
$this->misc->printVal($_REQUEST['table'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/triggers" method="post">' . \PHP_EOL;
+ echo '<form action="triggers" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="drop" />' . \PHP_EOL;
echo \sprintf(
'<input type="hidden" name="table" value="%s" />%s',
@@ -392,7 +392,7 @@ class TriggersController extends BaseController
$this->misc->printVal($_REQUEST['table'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/triggers" method="post">' . \PHP_EOL;
+ echo '<form action="triggers" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="enable" />' . \PHP_EOL;
echo \sprintf(
'<input type="hidden" name="table" value="%s" />%s',
@@ -440,7 +440,7 @@ class TriggersController extends BaseController
$this->misc->printVal($_REQUEST['table'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/triggers" method="post">' . \PHP_EOL;
+ echo '<form action="triggers" method="post">' . \PHP_EOL;
echo '<input type="hidden" name="action" value="disable" />' . \PHP_EOL;
echo \sprintf(
'<input type="hidden" name="table" value="%s" />%s',
@@ -511,7 +511,7 @@ class TriggersController extends BaseController
$sel3 = new XHtmlSelect('formFrequency');
$sel3->set_data($data->triggerFrequency);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/triggers" method="post">' . \PHP_EOL;
+ echo '<form action="triggers" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo '<tr>' . \PHP_EOL;
echo \sprintf(
diff --git a/src/controllers/TypesController.php b/src/controllers/TypesController.php
index 3eecc349..c618cf09 100644
--- a/src/controllers/TypesController.php
+++ b/src/controllers/TypesController.php
@@ -379,7 +379,7 @@ class TypesController extends BaseController
$this->misc->printVal($_REQUEST['type'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/types" method="post">' . \PHP_EOL;
+ echo '<form action="types" method="post">' . \PHP_EOL;
echo \sprintf(
'<p><input type="checkbox" id="cascade" name="cascade" /> <label for="cascade">%s</label></p>',
$this->lang['strcascade']
@@ -431,7 +431,7 @@ class TypesController extends BaseController
$this->printTitle($this->lang['strcreatecomptype'], 'pg.type.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/types" method="post">' . \PHP_EOL;
+ echo '<form action="types" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -502,7 +502,7 @@ class TypesController extends BaseController
$this->printTitle($this->lang['strcreatecomptype'], 'pg.type.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/types" method="post">' . \PHP_EOL;
+ echo '<form action="types" method="post">' . \PHP_EOL;
// Output table header
echo '<table>' . \PHP_EOL;
@@ -669,7 +669,7 @@ class TypesController extends BaseController
$this->printTitle($this->lang['strcreateenumtype'], 'pg.type.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/types" method="post">' . \PHP_EOL;
+ echo '<form action="types" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -738,7 +738,7 @@ class TypesController extends BaseController
$this->printTitle($this->lang['strcreateenumtype'], 'pg.type.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/types" method="post">' . \PHP_EOL;
+ echo '<form action="types" method="post">' . \PHP_EOL;
// Output table header
echo '<table>' . \PHP_EOL;
@@ -858,7 +858,7 @@ class TypesController extends BaseController
$this->printTitle($this->lang['strcreatetype'], 'pg.type.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/types" method="post">' . \PHP_EOL;
+ echo '<form action="types" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left required">%s</th>',
diff --git a/src/controllers/UsersController.php b/src/controllers/UsersController.php
index a03ca6d4..3db2c095 100644
--- a/src/controllers/UsersController.php
+++ b/src/controllers/UsersController.php
@@ -21,63 +21,71 @@ class UsersController extends BaseController
public function render(): void
{
$this->printHeader();
- $this->printBody();
-
+
+$this->action=isset($_REQUEST['cancel'])?'cancel':$this->action;
switch ($this->action) {
+ case 'cancel':
+ $this->printBody();
+ $this->doDefault();
+ break;
+
case 'changepassword':
if (isset($_REQUEST['ok'])) {
+ $this->printBody();
$this->doChangePassword(false);
} else {
+ $this->printBody();
$this->doAccount();
}
break;
case 'confchangepassword':
+ $this->printBody();
$this->doChangePassword(true);
break;
case 'account':
+ $this->printBody();
$this->doAccount();
break;
case 'save_create':
- if (isset($_REQUEST['cancel'])) {
- $this->doDefault();
- } else {
- $this->doSaveCreate();
- }
+ $this->printBody();
+ $this->doSaveCreate();
+
break;
case 'create':
+ $this->printBody();
$this->doCreate();
break;
case 'drop':
- if (isset($_REQUEST['cancel'])) {
- $this->doDefault();
- } else {
- $this->doDrop(false);
- }
+ $this->printBody();
+ $this->doDrop(false);
+
break;
case 'confirm_drop':
+ $this->printBody();
$this->doDrop(true);
break;
case 'save_edit':
- if (isset($_REQUEST['cancel'])) {
- $this->doDefault();
- } else {
- $this->doSaveEdit();
- }
+ $this->printBody();
+ $this->doSaveEdit();
+
break;
case 'edit':
+ $this->printBody();
$this->doEdit();
break;
default:
+ $this->view->offsetSet('trail',$this->printTrail('server',false));
+ $this->printBody();
$this->doDefault();
break;
@@ -100,7 +108,7 @@ class UsersController extends BaseController
return 'infinity' === $val ? $lang['strnever'] : \htmlspecialchars($val);
};
- $this->printTrail('server');
+
$this->printTabs('server', 'users');
$this->printMsg($msg);
@@ -269,7 +277,7 @@ class UsersController extends BaseController
$this->coalesceArr($_POST, 'confirm', '');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/users" method="post">' . \PHP_EOL;
+ echo '<form action="' . \containerInstance()->subFolder . '/users" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -357,7 +365,7 @@ class UsersController extends BaseController
$_POST['formPassword'] = '';
}
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/users" method="post">' . \PHP_EOL;
+ echo '<form action="' . \containerInstance()->subFolder . '/users" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
@@ -469,7 +477,7 @@ class UsersController extends BaseController
$this->misc->printVal($_REQUEST['username'])
), '</p>' . \PHP_EOL;
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/users" method="post">' . \PHP_EOL;
+ echo '<form action="' . \containerInstance()->subFolder . '/users" method="post">' . \PHP_EOL;
echo '<p><input type="hidden" name="action" value="drop" />' . \PHP_EOL;
echo '<input type="hidden" name="username" value="', \htmlspecialchars($_REQUEST['username']), '" />' . \PHP_EOL;
echo $this->view->form;
@@ -515,7 +523,7 @@ class UsersController extends BaseController
$this->printTitle($this->lang['strcreateuser'], 'pg.user.create');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/users" method="post">' . \PHP_EOL;
+ echo '<form action="' . \containerInstance()->subFolder . '/users" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
' <tr>
diff --git a/src/controllers/ViewpropertiesController.php b/src/controllers/ViewpropertiesController.php
index d0a5f3eb..5b9afeb8 100644
--- a/src/controllers/ViewpropertiesController.php
+++ b/src/controllers/ViewpropertiesController.php
@@ -46,8 +46,8 @@ class ViewpropertiesController extends BaseController
break;
case 'edit':
- $footer_template = 'header_sqledit.twig';
- $footer_template = 'footer_sqledit.twig';
+ $this->view->offsetSet('codemirror',true);
+
$this->doEdit();
break;
@@ -135,7 +135,9 @@ class ViewpropertiesController extends BaseController
$this->printMsg($msg);
$viewdata = $data->getView($_REQUEST[$this->subject]);
- $this->printHeader($this->headerTitle(), null, true, 'header_sqledit.twig');
+ $this->view->offsetSet('codemirror',true);
+
+ $this->printHeader($this->headerTitle(), null, true );
if (0 < $viewdata->RecordCount()) {
if (!isset($_POST['formDefinition'])) {
@@ -216,7 +218,7 @@ class ViewpropertiesController extends BaseController
$this->printTitle($this->lang['stralter'], 'pg.column.alter');
$this->printMsg($msg);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/viewproperties" method="post">' . \PHP_EOL;
+ echo '<form action="viewproperties" method="post">' . \PHP_EOL;
// Output view header
echo '<table>' . \PHP_EOL;
@@ -332,7 +334,7 @@ class ViewpropertiesController extends BaseController
$this->coalesceArr($_POST, 'comment', $view->fields['relcomment']);
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/viewproperties" method="post">' . \PHP_EOL;
+ echo '<form action="viewproperties" method="post">' . \PHP_EOL;
echo '<table>' . \PHP_EOL;
echo \sprintf(
'<tr><th class="data left required">%s</th>',
diff --git a/src/controllers/ViewsController.php b/src/controllers/ViewsController.php
index 3872e19f..1f8f5305 100644
--- a/src/controllers/ViewsController.php
+++ b/src/controllers/ViewsController.php
@@ -126,9 +126,7 @@ class ViewsController extends BaseController
'title' => $this->lang['strview'],
'field' => Decorator::field('relname'),
'url' => \containerInstance()->getDestinationWithLastTab('view'),
- '/redirect/view?%s&amp;',
- $this->misc->href
- ),
+
'vars' => [$this->keystring => 'relname'],
],
'owner' => [
@@ -287,7 +285,7 @@ class ViewsController extends BaseController
$this->printTrail('view');
$this->printTitle($this->lang['strdrop'], 'pg.view.drop');
- echo '<form action="' . \containerInstance()->subFolder . '/src/views/views" method="post">' . \PHP_EOL;
+ echo '<form action="views" method="post">' . \PHP_EOL;
//If multi drop
if (isset($_REQUEST['ma'])) {
diff --git a/src/database/Connection.php b/src/database/Connection.php
deleted file mode 100644
index df562d31..00000000
--- a/src/database/Connection.php
+++ /dev/null
@@ -1,188 +0,0 @@
-<?php
-
-/**
- * PHPPgAdmin 6.1.3
- */
-
-namespace PHPPgAdmin\Database;
-
-use Exception;
-use PHPPgAdmin\Traits\HelperTrait;
-use Slim\Container;
-
-/**
- * @file
- * Class to represent a database connection
- *
- * Id: Connection.php,v 1.15 2008/02/18 21:42:47 ioguix Exp $
- */
-class Connection
-{
- use HelperTrait;
-
- public $conn;
-
- public $platform = 'UNKNOWN';
-
- protected $container;
-
- protected $server_info;
-
- protected $version_dictionary = [
- '13' => 'Postgres13',
- '12' => 'Postgres12',
- '11' => 'Postgres11',
- '10' => 'Postgres10',
- '9.7' => 'Postgres96',
- '9.6' => 'Postgres96',
- '9.5' => 'Postgres95',
- '9.4' => 'Postgres94',
- '9.3' => 'Postgres93',
- '9.2' => 'Postgres92',
- '9.1' => 'Postgres91',
- '9.0' => 'Postgres90',
- ];
-
- // The backend platform. Set to UNKNOWN by default.
- private $_connection_result;
-
- /**
- * Creates a new connection. Will actually make a database connection.
- *
- * @param array $server_info
- * @param string $database database name
- * @param Container $container
- * @param int $fetchMode Defaults to associative. Override for different behaviour
- */
- public function __construct($server_info, $database, $container, $fetchMode = \ADODB_FETCH_ASSOC)
- {
- $host = $server_info['host'];
- $port = $server_info['port'];
- $sslmode = $server_info['sslmode'];
- $user = $server_info['username'];
- $password = $server_info['password'];
-
- $this->server_info = $server_info;
-
- $this->container = $container;
-
- $this->conn = \ADONewConnection('postgres9');
- //$this->conn->debug = true;
- $this->conn->setFetchMode($fetchMode);
-
- // Ignore host if null
- if (null === $host || '' === $host) {
- if (null !== $port && '' !== $port) {
- $pghost = ':' . $port;
- } else {
- $pghost = '';
- }
- } else {
- $pghost = \sprintf(
- '%s:%s',
- $host,
- $port
- );
- }
-
- // Add sslmode to $pghost as needed
- if (('disable' === $sslmode) || ('allow' === $sslmode) || ('prefer' === $sslmode) || ('require' === $sslmode)) {
- $pghost .= ':' . $sslmode;
- } elseif ('legacy' === $sslmode) {
- $pghost .= ' requiressl=1';
- }
-
- try {
- $this->conn->connect($pghost, $user, $password, $database);
- //$this->prtrace($this->conn);
- } catch (Exception $e) {
- dump($e);
- $this->prtrace($e->getMessage(), $e->getTrace());
- }
- }
-
- public function getConnectionResult()
- {
- return $this->_connection_result;
- }
-
- /**
- * Gets the name of the correct database driver to use. As a side effect,
- * sets the platform.
- *
- * @param string $description A description of the database and version (returns by reference)
- *
- * @return string The driver. e.g. Postgres96
- */
- public function getDriver(&$description)
- {
- $version = null;
-
- if ($this->conn->_connectionID) {
- $v = \pg_version($this->conn->_connectionID);
-
- //\PhpConsole\Handler::getInstance()->debug($v, 'pg_version');
-
- if (isset($v['server'])) {
- $version = $v['server'];
- }
- }
- // If we didn't manage to get the version without a query, query...
- if (!isset($version)) {
- $adodb = new ADOdbBase($this->conn, $this->container, $this->server_info);
-
- $sql = 'SELECT VERSION() AS version';
- $field = $adodb->selectField($sql, 'version');
-
- // Check the platform, if it's mingw, set it
- if (\preg_match('/ mingw /i', $field)) {
- $this->platform = 'MINGW';
- }
-
- $params = \explode(' ', $field);
-
- if (!isset($params[1])) {
- return null;
- }
-
- $version = $params[1]; // eg. 8.4.4
- }
-
- $description = \sprintf(
- 'PostgreSQL %s',
- $version
- );
-
- $version_parts = \explode('.', $version);
-
- if ((int) (10 <= $version_parts[0])) {
- $major_version = $version_parts[0];
- } else {
- $major_version = \implode('.', [$version_parts[0], $version_parts[1]]);
- }
-
- //$this->prtrace(['pg_version' => pg_version($this->conn->_connectionID), 'version' => $version, 'major_version' => $major_version]);
- // Detect version and choose appropriate database driver
- if (\array_key_exists($major_version, $this->version_dictionary)) {
- return $this->version_dictionary[$major_version];
- }
-
- // if major version is less than 9 return null, we don't support it
- if (9 > (int) \mb_substr($version, 0, 1)) {
- return null;
- }
-
- // If unknown version, then default to latest driver
- return 'Postgres';
- }
-
- /**
- * Get the last error in the connection.
- *
- * @return string Error string
- */
- public function getLastError()
- {
- return \pg_last_error($this->conn->_connectionID);
- }
-}
diff --git a/src/router.php b/src/router.php
index 54c40cca..c3f82c54 100644
--- a/src/router.php
+++ b/src/router.php
@@ -37,8 +37,9 @@ $container = $app->getContainer();
// If no dump function has been globally declared at this point
// we fill the gap with an empty one to avoid errors
-if(!function_exists('dump')) {
- function dump(...$args):void {
+if (!function_exists('dump')) {
+ function dump(...$args): void
+ {
// do nothing
}
}
@@ -124,26 +125,24 @@ $app->get('/redirect[/{subject}]', function (
array $args
) {
$subject = (isset($args['subject'])) ? $args['subject'] : 'root';
- $destinationurl = $this->getDestinationWithLastTab($subject);
- $cleanDestination=($this->subFolder.'/'. $destinationurl);
-
- return $response->withStatus(302)->withHeader('Location',$cleanDestination);
+ $destinationurl = str_replace($this->subFolder . '/', '', $this->getDestinationWithLastTab($subject));
+ $cleanDestination = ($this->subFolder . '/' . $destinationurl);
+
+ return $response->withStatus(302)->withHeader('Location', $cleanDestination);
});
-ini_set('display_errors','on');
+ini_set('display_errors', 'on');
$app->get('/{subject:servers|intro|browser}[/{server_id}]', function (
\Slim\Http\Request $request,
\Slim\Http\Response $response,
array $args
) {
$subject = $args['subject'] ?? 'intro';
- $this->view->offsetSet('includeJsTree',true);
+ $this->view->offsetSet('includeJsTree', true);
$className = '\PHPPgAdmin\Controller\\' . \ucfirst($subject) . 'Controller';
$controller = new $className($this);
-
+
return $controller->render();
-
-
});
@@ -153,16 +152,17 @@ $app->map(['GET', 'POST'], '/src/views/{subject}', function (
array $args
) {
$subject = $args['subject'];
- $nextPath=$this->subFolder.'/'. $subject;
+ $nextPath = $this->subFolder . '/' . $subject;
$query_string = $request->getUri()->getQuery();
-return $response->withStatus(302)->withHeader('Location',$nextPath.($query_string? '?'.$query_string:''));
+ return $response->withStatus(307)->withHeader('Location', $nextPath . ($query_string ? '?' . $query_string : ''));
});
-$app->get('/{subject:\w+}[/{server_id}]', function (
+$app->map(['GET', 'POST'], '/{subject:\w+}[/{server_id}]', function (
\Slim\Http\Request $request,
\Slim\Http\Response $response,
array $args
) {
+ // ddd($args);
$subject = $args['subject'] ?? 'intro';
$server_id = $args['server_id'] ?? $request->getQueryParam('server');
$_server_info = $this->misc->getServerInfo();
@@ -174,11 +174,10 @@ $app->get('/{subject:\w+}[/{server_id}]', function (
$subject = 'servers';
}
$query_string = $request->getUri()->getQuery();
- $this->view->offsetSet('includeJsTree',true);
+ $this->view->offsetSet('includeJsTree', true);
$className = $this->view->getControllerClassName($subject);
$controller = new $className($this);
return $controller->render();
-
});
$app->get('/', function (
diff --git a/src/xhtml/HTMLFooterController.php b/src/xhtml/HTMLFooterController.php
index 885d3abe..42648478 100644
--- a/src/xhtml/HTMLFooterController.php
+++ b/src/xhtml/HTMLFooterController.php
@@ -65,7 +65,10 @@ class HTMLFooterController extends HTMLController
$this->view->offsetSet('reload', $reload_param);
$this->view->offsetSet('footer_template', $template);
$this->view->offsetSet('print_bottom_link', !$this->_no_bottom_link);
-///ddd($template);
+ if (!$this->view->offsetExists('excludeJsTree')) {
+ $this->view->offsetSet('excludeJsTree', false);
+ }
+ $template = $this->view->offsetGet('excludeJsTree') === true && $template === 'footer_sqledit.twig' ? $template : 'footer.twig';
$footer_html = $this->view->fetch($template);
if ($doBody) {
diff --git a/src/xhtml/HTMLHeaderController.php b/src/xhtml/HTMLHeaderController.php
index 16e31584..dd1a6a6d 100644
--- a/src/xhtml/HTMLHeaderController.php
+++ b/src/xhtml/HTMLHeaderController.php
@@ -50,14 +50,14 @@ class HTMLHeaderController extends HTMLController
$viewVars['dir'] = (0 !== \strcasecmp($lang['applangdir'], 'ltr')) ? ' dir="' . \htmlspecialchars($lang['applangdir']) . '"' : '';
$viewVars['headertemplate'] = $template;
- $viewVars['headerFlags'][str_replace('.twig','',basename($template))]=1;
- $viewVars['includeJsTree']=$template!=='header_sqledit.twig';
+ $viewVars['headerFlags'][str_replace('.twig', '', basename($template))] = 1;
+ $viewVars['includeJsTree'] = true;
+ //$viewVars['excludeJsTree']=$template==='header_sqledit.twig';
$viewVars['title'] = ('' !== $title) ? ' - ' . $title : '';
$viewVars['lang'] = $lang;
$viewVars['appName'] = \htmlspecialchars($this->appName);
-
- $reload_param = 'none';
+ $reload_param = 'none';
if ($this->view->getReloadBrowser()) {
$reload_param = 'other';
} elseif ($this->_reload_drop_database) {
@@ -65,7 +65,11 @@ class HTMLHeaderController extends HTMLController
}
$viewVars['reload'] = $reload_param;
$viewVars['script'] = $script;
- $header_html = $this->view->fetch($template==='header_sqledit.twig'?$template:'header.twig', $viewVars);
+ if (!$this->view->offsetExists('excludeJsTree')) {
+ $this->view->offsetSet('excludeJsTree', false);
+ }
+ $template = $this->view->offsetGet('excludeJsTree') === true && $template === 'header_sqledit.twig' ? $template : 'header.twig';
+ $header_html = $this->view->fetch($template, $viewVars);
/*$plugins_head = [];
$_params = ['heads' => &$plugins_head];
@@ -90,20 +94,25 @@ class HTMLHeaderController extends HTMLController
* @param bool $doBody True to output body tag, false to return
* @param string $bodyClass - name of body class
* @param bool $onloadInit - if true, call init() on body load event
+ * @param bool $includeJsTree - if true, include the jstree section
*
* @return string the parsed template
*/
- public function printBody($doBody = true, $bodyClass = 'detailbody', $onloadInit = false,$includeJsTree=true)
- {
-
- // $includeJsTree=$includeJsTree||( $this->view->offsetExists('includeJsTree')?$this->view->offsetGet('includeJsTree'):false);
- $viewVars=[
- 'bodyClass'=> $this->lang['applangdir'] . ' ' . \htmlspecialchars($bodyClass).' '.$includeJsTree?'flexbox_body':'',
- 'onload'=>($onloadInit ? 'onload="init();" ' : ''),
- 'controller_name'=>$this->controller_name,
- 'includeJsTree'=>$includeJsTree
+ public function printBody(
+ $doBody = true,
+ $bodyClass = 'detailbody',
+ $onloadInit = false,
+ $includeJsTree = true
+ ) {
+
+ // $includeJsTree=$includeJsTree||( $this->view->offsetExists('includeJsTree')?$this->view->offsetGet('includeJsTree'):false);
+ $viewVars = [
+ 'bodyClass' => $this->lang['applangdir'] . ' ' . \htmlspecialchars($bodyClass) . ' ' . $includeJsTree ? 'flexbox_body' : '',
+ 'onload' => ($onloadInit ? 'onload="init();" ' : ''),
+ 'controller_name' => $this->controller_name,
+ 'includeJsTree' => $includeJsTree
];
-
+
$bodyHtml = $this->view->fetch('components/common_body.twig', $viewVars);
if (!$this->_no_output && $doBody) {
diff --git a/src/xhtml/HTMLNavbarController.php b/src/xhtml/HTMLNavbarController.php
index 9af68191..68f91585 100644
--- a/src/xhtml/HTMLNavbarController.php
+++ b/src/xhtml/HTMLNavbarController.php
@@ -47,7 +47,6 @@ class HTMLNavbarController extends HTMLController
$viewVars = $this->_getSearchPathsCrumbs($crumbs, $viewVars);
$trail_html .= $this->getContainer()->view->fetch('components/trail.twig', $viewVars);
-
if ($do_print) {
echo $trail_html;
@@ -191,8 +190,8 @@ class HTMLNavbarController extends HTMLController
$search_paths = $data->getSearchPath();
foreach ($search_paths as $schema) {
- $destination = $this->container->getDestinationWithLastTab('database');
- $search_path_crumbs[$schema] = [
+ $destination = $this->container->getDestinationWithLastTab('database');
+ $search_path_crumbs[$schema] = [
'title' => $lang['strschema'],
'text' => $schema,
'icon' => $this->view->icon('Schema'),
@@ -259,6 +258,7 @@ class HTMLNavbarController extends HTMLController
],
'history' => [
'attr' => [
+ 'class' => 'toplink_popup',
'href' => [
'url' => \containerInstance()->subFolder . '/src/views/history',
'urlvars' => \array_merge($reqvars, [
@@ -266,7 +266,7 @@ class HTMLNavbarController extends HTMLController
]),
],
'id' => 'toplink_history',
- 'class' => 'toplink_popup',
+
],
'content' => $lang['strhistory'],
],
@@ -286,6 +286,7 @@ class HTMLNavbarController extends HTMLController
],
'logout' => [
'attr' => [
+ 'id' => 'toplink_logout',
'href' => [
'url' => \containerInstance()->subFolder . '/src/views/servers',
'urlvars' => [
@@ -293,7 +294,6 @@ class HTMLNavbarController extends HTMLController
'logoutServer' => \sha1("{$server_info['host']}:{$server_info['port']}:{$server_info['sslmode']}"),
],
],
- 'id' => 'toplink_logout',
],
'content' => $lang['strlogout'],
],
@@ -305,12 +305,29 @@ class HTMLNavbarController extends HTMLController
];
$topbar_html .= '<td style="text-align: right">';
-$toplinks=$this->printLinksList($toplinks, 'toplink', false, $from);
-if(strpos($toplinks,'toplink_popup')!==false) {
- $topbar_html .= str_replace(['<li>','</li>','<a','/a>','class="toplink_popup" href','src/views/','target="sqledit"'],[
- '','',
- '<button','/button>','class="toplink_popup" rel','','target="_blank" '],$toplinks);
-}
+ $toplinks = $this->printLinksList($toplinks, 'toplink', false, $from);
+
+ if (strpos($toplinks, 'toplink_popup') !== false) {
+ $topbar_html .= str_replace(
+ [
+ '<li>',
+ '</li>', '<a', '/a>',
+
+ 'id="toplink_logout" href',
+ 'class="toplink_popup" href',
+ 'src/views/', 'target="sqledit"'
+ ],
+ [
+ '', '',
+ '<button',
+ '/button>',
+ 'id="toplink_logout" rel',
+
+ 'class="toplink_popup" rel', '', 'target="_blank" '
+ ],
+ $toplinks
+ );
+ }
$topbar_html .= '</td>';
} else {
$topbar_html .= "<span class=\"appname\">{$appName}</span> <span class=\"version\">{$appVersion}</span>";
@@ -332,7 +349,7 @@ if(strpos($toplinks,'toplink_popup')!==false) {
$vars = $this->misc->getSubjectParams($subject);
\ksort($vars['params']);
- return "{$vars['url']}?" . \http_build_query($vars['params'], '', '&amp;');
+ return "{$vars['url']}&" . \http_build_query($vars['params'], '', '&amp;');
}
/**
diff --git a/src/xhtml/HTMLTableController.php b/src/xhtml/HTMLTableController.php
index 31ea5e89..96656656 100644
--- a/src/xhtml/HTMLTableController.php
+++ b/src/xhtml/HTMLTableController.php
@@ -147,7 +147,7 @@ class HTMLTableController extends HTMLController
foreach ($columns as $column_id => $column) {
// Handle cases where no class has been passed
-
+
$class = (isset($column['class']) && '' !== $column['class']) ? $column['class'] : '';
switch ($column_id) {
@@ -159,7 +159,7 @@ class HTMLTableController extends HTMLController
break;
default:
- $thead_html .= '<th class="data' . $class . '">';
+ $thead_html .= '<th class="data' . $class . ' '.$column_id.'">';
if (isset($column['help'])) {
$thead_html .= $this->view->printHelp($column['title'], $column['help'], false);