diff options
author | Felipe Figueroa <amenadiel@gmail.com> | 2020-12-31 04:59:13 +0300 |
---|---|---|
committer | Felipe Figueroa <amenadiel@gmail.com> | 2021-01-06 20:45:01 +0300 |
commit | ef42be11d880af62587b1f66e5cdac689c715d62 (patch) | |
tree | 66a27f76e37d396a9f001012f8d34a1a6eebca86 | |
parent | 18079aad800aa31f7cc4c629bf7f391ad59d8eaf (diff) |
change views layout to include the browser tree in the main body instead of an iframe
75 files changed, 1313 insertions, 1960 deletions
diff --git a/assets/images/vsizegrip.png b/assets/images/vsizegrip.png Binary files differnew file mode 100644 index 00000000..fdc1260c --- /dev/null +++ b/assets/images/vsizegrip.png diff --git a/assets/js/footer_scripts.js b/assets/js/footer_scripts.js index ee9aa69f..e8b606ff 100644 --- a/assets/js/footer_scripts.js +++ b/assets/js/footer_scripts.js @@ -1,151 +1,99 @@ function historyApiBack() { window.history && window.history.back(); } + function redirectToIframesView() { - if ( - window.inPopUp || - parent.frames.length || - stateObj.reload === 'other' || - stateObj.in_test !== '0' - ) { - return false; - } var redirect_to, - subject = location.pathname - .replace(stateObj.subfolder, '') - .replace('/src/views/', '') + subject = stateObj.pathname + //.replace(stateObj.subfolder, '') + .replace(`/src/views`, '') .replace('.php', ''); - if (subject === '/redirect/server') { - subject = '/servers'; + if (subject.includes('/redirect/server')) { + subject = subject.replace('/redirect/server', '/servers'); } - redirect_to = `${stateObj.subfolder}/${subject}${location.search}`; + subject += location.search; + redirect_to = `${subject}`; var redirection_msg = - 'location subject ' + subject + ' will redirect_to ' + redirect_to; + 'location subject is ' + subject + ' will redirect_to ' + redirect_to; + console.log( + `redirect: ${stateObj.pathname}${location.search} -> ${redirect_to}` + ); return redirect_to; } -function addBehaviorToTopLinks(amIDetailFrame) { - const parentHandle = - amIDetailFrame && window.parent.document.querySelector('#detail'), - toplink_logout = - amIDetailFrame && - (parentHandle.contentDocument || document).querySelector( - '#toplink_logout' - ); - - parentHandle && - [ - ...(parentHandle.contentDocument || document).querySelectorAll( - '.toplink a.toplink_popup' - ), - ].forEach((element) => { - let href = element.href; - element.addEventListener('click', (e) => { - e.preventDefault(); - window - .open( - `${href}`, - `sqledit:${stateObj.server}`, - 'toolbar=no,width=750,height=520,resizable=yes,scrollbars=yes' - ) - .focus(); - }); - element.setAttribute('rel', href); - - element.href = 'javascript:void(this.click())'; // eslint-disable-line - }); - toplink_logout && - toplink_logout.addEventListener('click', (e) => { - e.preventDefault(); - if (confirm(stateObj.strconfdropcred)) { - window.location.href = e.target.href; - } - }); - - return; -} -if ( - !window.inPopUp && - stateObj.reload !== 'other' && - !parent.frames.length && - stateObj.in_test === '0' -) { - redirectToIframesView(); -} -let { - frames: { browser }, -} = window.parent; -if (browser && browser.jsTree && stateObj.reload) { - browser.jsTree.jstree('refresh'); -} $.ready .then(() => { - let amIDetailFrame = document.body.classList.contains('detailbody'); // Need to open popup from parent document + stateObj.basePath = + window.parent.location.origin + (stateObj.subfolder || ''); let redirect_to = redirectToIframesView(); - if (redirect_to === false) { - return addBehaviorToTopLinks(amIDetailFrame); - } - window.location.replace(redirect_to); - }) - .then(() => { - if (window.parent.frames.length === 0) { - return; - } window.parent.document.title = window.document.title; /* beautify preserve:start */ - stateObj.realurl = location.href.replace(location.origin, ''); + stateObj.realurl = location.href; //.replace(location.origin, ''); //path will only be defined inside a route /* beautify preserve:end */ - stateObj.newurl = - stateObj.subfolder + - stateObj.realurl - .replace(stateObj.subfolder, '') - .replace('src/views/', '') - .replace('.php', ''); - stateObj.parenturl = window.parent.location.href.replace( - window.parent.location.origin, - '' - ); - return; - }) - .then(() => { + stateObj.redirect_to = redirect_to; + stateObj.parenturl = window.parent.location.href; if (window.location.href.indexOf('servers?action=logout') !== -1) { window.setTimeout(function () { - window.parent.location.replace(`${stateObj.subfolder}/servers`); + window.parent.location.replace(`${stateObj.basePath}/servers`); }, 3000); - } else if ( - stateObj.method === 'GET' && - stateObj.newurl !== stateObj.parenturl + return { jqFn: {}, hljsFn: {} }; + } + if (window.jsTree) { + return { jqFn: jQuery.fn || {}, hljsFn: globalThis.hljs || {} }; + } + if ( + shouldSkipRedirection() || + window.parent.frames.length === 0 || + stateObj.redirect_to === stateObj.parenturl ) { - //console.log('will pushState', stateObj); - window.parent.history.pushState( - stateObj, - document.title, - stateObj.newurl - ); + if ( + stateObj.method === 'GET' && + stateObj.redirect_to !== stateObj.parenturl + ) { + let { reload } = stateObj || {}; + console.log('will pushState. Reload is ' + reload, stateObj); + window.parent.history.pushState( + stateObj, + document.title, + stateObj.redirect_to + ); + } + return { jqFn: jQuery.fn || {}, hljsFn: globalThis.hljs || {} }; + } else { + //console.log({ stateObj }); + window.parent.location.replace(redirect_to); } + return { jqFn: {}, hljsFn: {} }; }) - .then(() => { - if (jQuery.fn) { - if (jQuery.fn.select2) { - jQuery('.select2').select2(); - } - if (jQuery.fn.DataTable) { - $('.will_be_datatable').DataTable({ - pageLength: 100, - }); - } + .then(({ jqFn, hljsFn }) => { + if (jqFn.select2) { + jQuery('.select2').select2(); + } + if (jqFn.DataTable) { + $('.will_be_datatable').DataTable({ + pageLength: 100, + }); } - if (typeof hljs !== 'undefined') { + + if (hljsFn.highlightBlock) { $('pre code.hljs').each(function (i, block) { - hljs.highlightBlock(block); + hljsFn.highlightBlock(block); }); } + let { reload } = stateObj || {}; + if (reload && reload !== 'none') { + globalThis.postMessage( + { reload_browser: true }, + window.parent.location.origin + ); + } + return; }) .catch((err) => { diff --git a/assets/js/jstree_events.js b/assets/js/jstree_events.js new file mode 100644 index 00000000..f8899208 --- /dev/null +++ b/assets/js/jstree_events.js @@ -0,0 +1,100 @@ +window.jsTree = $('#lazy').jstree({ + state: { + key: 'jstree', + }, + plugins: ['state'], + core: { + data: { + url: function (node) { + if (node.id === '#') { + return stateObj.subfolder + '/src/views/browser?action=tree'; + } else { + return node.original.url; + } + }, + }, + }, +}); +$('#refreshTree').on('click', () => { + window.jsTree.jstree('refresh'); +}); + +if (parent.frames && parent.frames.detail) { + parent.frames.detail.jsTree = window.jsTree; +} + +$('#lazy').on('activate_node.jstree', function (e, data) { + if (window.parent.frames.detail) { + window.parent.frames.detail.location.replace(data.node.a_attr.href); + } +}); +$('#lazy').on('state_ready.jstree', function (e, data) { + console.log('state_ready'); + const detailContailer = $('#detail'); + $.ready.then(() => { + jQuery('#browser_container').resizableSafe({ + handleSelector: '.splitter', + resizeHeight: false, + //resizeWidthFrom: 'left', + onDragEnd: function (e, $el, opt) { + let currentWidth = $el.width(), + detailWidth = window.innerWidth - currentWidth; + console.log('onDragEnd', { e, opt, $el, currentWidth, detailWidth }); + detailContailer.width(detailWidth); + + // explicitly return **false** if you don't want + // auto-height computation to occur + }, + onDrag: function (e, $el, newWidth, newHeight, opt) { + // limit box size + + if (newWidth > 350) { + newWidth = 350; + $el.width(newWidth); + return false; + } + + // explicitly return **false** if you don't want + // auto-height computation to occur + //return false; + }, + }); + }); +}); +$('#lazy').on('loaded.jstree', function (e, data) { + console.log('loaded'); + $('#lazy').data('jstree').show_dots(); +}); +$('#lazy').on('click', '.jstree-anchor', function () { + console.log(this); +}); + +window.addEventListener( + 'message', + (event) => { + console.log(event); + + const { origin, isTrusted, data } = event, + { reload_browser } = data || {}, + { jsTree } = globalThis || {}; + + console.log({ reload_browser, jsTree }); + if (!isTrusted) { + console.warn('non trusted event'); + return; + } + if (origin !== location.origin) { + console.warn('different origin', { origin, location }); + return; + } + + if (data.reload_browser && globalThis.jsTree) { + try { + jsTree.jstree('refresh'); + } catch (err) { + console.warn(err); + } + } + }, + false +); diff --git a/assets/js/toplinks_behavior.js b/assets/js/toplinks_behavior.js new file mode 100644 index 00000000..a6396974 --- /dev/null +++ b/assets/js/toplinks_behavior.js @@ -0,0 +1,56 @@ +function shouldSkipRedirection() { + return ( + window.inPopUp || + parent.frames.length || + stateObj.reload === 'other' || + stateObj.in_test !== '0' + ); +} + +function addBehaviorToTopLinks(amIDetailFrame) { + const parentHandle = + amIDetailFrame && window.parent.document.querySelector('#detail'), + toplink_logout = + amIDetailFrame && + (parentHandle.contentDocument || document).querySelector( + '#toplink_logout' + ); + + parentHandle && + [ + ...(parentHandle.contentDocument || document).querySelectorAll( + '.toplink a.toplink_popup' + ), + ].forEach((element) => { + let href = element.href; + element.addEventListener('click', (e) => { + e.preventDefault(); + window + .open( + `${href}`, + `sqledit:${stateObj.server}`, + 'toolbar=no,width=750,height=520,resizable=yes,scrollbars=yes' + ) + .focus(); + }); + element.setAttribute('rel', href); + + element.href = 'javascript:void(this.click())'; // eslint-disable-line + }); + toplink_logout && + toplink_logout.addEventListener('click', (e) => { + e.preventDefault(); + if (confirm(stateObj.strconfdropcred)) { + window.location.href = e.target.href; + } + }); + + return; +} + +$.ready.then(() => { + let amIDetailFrame = document.body.classList.contains('detailbody'); + if (shouldSkipRedirection()) { + return addBehaviorToTopLinks(amIDetailFrame); + } +}); diff --git a/assets/sw.dev.js b/assets/sw.dev.js index afd1b2f3..48548faf 100644 --- a/assets/sw.dev.js +++ b/assets/sw.dev.js @@ -1,78 +1,28 @@ -self.addEventListener('install', function (/*event*/) { - // The promise that skipWaiting() returns can be safely ignored. - self.skipWaiting(); +importScripts( + 'https://storage.googleapis.com/workbox-cdn/releases/6.0.2/workbox-sw.js' +); +const { registerRoute } = workbox.routing; +const { CacheFirst, StaleWhileRevalidate } = workbox.strategies; +const { ExpirationPlugin } = workbox.expiration; - // Perform any other actions required for your - // service worker to install, potentially inside - // of event.waitUntil(); -}); -self.addEventListener('activate', (event) => { - event.waitUntil(clients.claim()); -}); -if (typeof workbox === 'undefined') { - importScripts( - 'https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js' - ); - workbox.loadModule('workbox-strategies'); - workbox.loadModule('workbox-cacheable-response'); - workbox.loadModule('workbox-expiration'); -} -self.__precacheManifest = [].concat(self.__precacheManifest || []); -if (typeof workbox !== 'undefined' && workbox) { - workbox.core.skipWaiting(); +self.__precacheManifest = [].concat(self.__WB_MANIFEST || []); +registerRoute( + ({ request, url }) => + request.destination === 'image' || url.includes('assets/vendor'), + new CacheFirst() +); +/*registerRoute( + ({ request }) => + request.destination === 'script' || request.destination === 'style', + new StaleWhileRevalidate() +);*/ - workbox.core.clientsClaim(); - - workbox.precaching.precacheAndRoute([]); - - console.log(`Yay! Workbox is loaded 🎉`); - - workbox.routing.registerRoute( - /\/assets\/css/, - new workbox.strategies.CacheFirst({ - cacheName: 'vendor-local-css', - plugins: [ - new workbox.cacheableResponse.CacheableResponse({ statuses: [0, 200] }), - ], - }) - ); - workbox.routing.registerRoute( - /\/assets\/js/, - new workbox.strategies.CacheFirst({ - cacheName: 'vendor-local-js', - plugins: [ - new workbox.cacheableResponse.CacheableResponse({ statuses: [0, 200] }), - ], - }) - ); - workbox.routing.registerRoute( - /\/img/, - new workbox.strategies.CacheFirst({ - cacheName: 'image-files', - plugins: [ - new workbox.cacheableResponse.CacheableResponse({ statuses: [0, 200] }), - ], - }) - ); - - // Cache the Google Fonts stylesheets with a stale-while-revalidate strategy. - workbox.routing.registerRoute( - /^https:\/\/fonts\.googleapis\.com/, - new workbox.strategies.StaleWhileRevalidate({ - cacheName: 'google-fonts-stylesheets', - }) - ); - - // Cache the underlying font files with a cache-first strategy for 1 year. - workbox.routing.registerRoute( - /^https:\/\/fonts\.gstatic\.com/, - new workbox.strategies.CacheFirst({ - cacheName: 'google-fonts-webfonts', - plugins: [ - new workbox.cacheableResponse.CacheableResponse({ statuses: [0, 200] }), - ], - }) - ); -} else { - console.log(`Boo! Workbox didn't load 😬`); -} +registerRoute( + ({ url }) => + url.origin === 'https://fonts.googleapis.com' || + url.origin === 'https://fonts.gstatic.com', + new StaleWhileRevalidate({ + cacheName: 'google-fonts', + plugins: [new ExpirationPlugin({ maxEntries: 20 })], + }) +); diff --git a/assets/sw.js b/assets/sw.js index 296dcc71..ffe26185 100644 --- a/assets/sw.js +++ b/assets/sw.js @@ -1,1339 +1,28 @@ -self.addEventListener('install', function (/*event*/) { - // The promise that skipWaiting() returns can be safely ignored. - self.skipWaiting(); +importScripts( + 'https://storage.googleapis.com/workbox-cdn/releases/6.0.2/workbox-sw.js' +); +const { registerRoute } = workbox.routing; +const { CacheFirst, StaleWhileRevalidate } = workbox.strategies; +const { ExpirationPlugin } = workbox.expiration; - // Perform any other actions required for your - // service worker to install, potentially inside - // of event.waitUntil(); -}); -self.addEventListener('activate', (event) => { - event.waitUntil(clients.claim()); -}); -if (typeof workbox === 'undefined') { - importScripts( - 'https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js' - ); - workbox.loadModule('workbox-strategies'); - workbox.loadModule('workbox-cacheable-response'); - workbox.loadModule('workbox-expiration'); -} -self.__precacheManifest = [].concat(self.__precacheManifest || []); -if (typeof workbox !== 'undefined' && workbox) { - workbox.core.skipWaiting(); +self.__precacheManifest = [].concat([{"revision":"7f7f3b73b863ab0db2800b0cc9d87f22","url":"images/themes/bootstrap/Favicon.ico"},{"revision":"8dbc90cfbfd4d9a2f5a3e7c5924771ee","url":"images/themes/bootstrap/Introduction.png"},{"revision":"6987da08785938281c0cef64a08e3263","url":"images/themes/bootstrap/logo.png"},{"revision":"6987da08785938281c0cef64a08e3263","url":"images/themes/bootstrap/title.png"},{"revision":"0836efcda7efd8f7143e6bc944fb2ae1","url":"images/themes/cappuccino/inputbckg.png"},{"revision":"4c6ad5374b9518299739fb8f6c0f0dcf","url":"images/themes/cappuccino/Lminus.png"},{"revision":"0e918eec776f591e565f252bbb3935d1","url":"images/themes/cappuccino/Lplus.png"},{"revision":"35fec4ef79e5c77f884c28db9d646ff8","url":"images/themes/cappuccino/openListe.png"},{"revision":"256583a0062c189786a788f550e4833e","url":"images/themes/cappuccino/title.png"},{"revision":"fd64d87ca98273a08a689508c15e21d0","url":"images/themes/cappuccino/Tminus.png"},{"revision":"6be509ad6d0bdf6f5f4bb0112a28a9c4","url":"images/themes/cappuccino/Tplus.png"},{"revision":"5783c8524fa7f4daff4f1ef7bcb4bfb9","url":"images/themes/default/AddArguments.png"},{"revision":"a82687f9d571988c5a50cd1c4c85e245","url":"images/themes/default/Admin.png"},{"revision":"ff0166451279bef06132ca55d2b13bb3","url":"images/themes/default/Aggregate.png"},{"revision":"480dca5e5fa1bef15990e13f7299ac9a","url":"images/themes/default/Aggregates.png"},{"revision":"c8e3e86ffd0a4d7370e08388352fcc53","url":"images/themes/default/AllUsers.png"},{"revision":"ce257e663eb495ba4d90fc55feb361ff","url":"images/themes/default/AvailableReplicationSet.png"},{"revision":"5ec68e4a7bd37d101bdd202890bfb606","url":"images/themes/default/AvailableSubscription.png"},{"revision":"362dd1ab7684968a9051fb2ffd145a06","url":"images/themes/default/Backup.png"},{"revision":"ff372eacef6cd22aa9a962b1fab6b927","url":"images/themes/default/blank.png"},{"revision":"2b52864370d5111e7a68d3347f0047f4","url":"images/themes/default/Cast.png"},{"revision":"5597d48b8d4b6d0e30762500ced49539","url":"images/themes/default/Casts.png"},{"revision":"12878c160ad2030c33fbe74b9ef4980c","url":"images/themes/default/CheckConstraint.png"},{"revision":"8ffa29a8aadf2e8a78a58f246ecb8f3a","url":"images/themes/default/Cluster.png"},{"revision":"e9a7cd147304fa43da5121aca3aa96bd","url":"images/themes/default/Column.png"},{"revision":"135c695556735ca7bfbec339300d475a","url":"images/themes/default/Columns.png"},{"revision":"a08d098a40f117173b627f279d3e5c84","url":"images/themes/default/Constraints.png"},{"revision":"0f5b34e3477bc7dec9d214c75624618e","url":"images/themes/default/Conversion.png"},{"revision":"34b35cebcc208e56a590de389650c31c","url":"images/themes/default/Conversions.png"},{"revision":"c8f58a82f94ad33c92c4434195211986","url":"images/themes/default/Copy.png"},{"revision":"37d5edb86c49b49e04dc1f31ea61d944","url":"images/themes/default/CorruptedDatabase.png"},{"revision":"13cb3db5b00eb488ea488c11f7ef6c7b","url":"images/themes/default/Cut.png"},{"revision":"f5db4650c1155434dd3395449145e185","url":"images/themes/default/Database.png"},{"revision":"f78fd91345a5f9e6135740c39f94c281","url":"images/themes/default/Databases.png"},{"revision":"01e09c5e6a4dff39c69c69c30e3c2df0","url":"images/themes/default/Definition.png"},{"revision":"909467ce82f287d29b32a3bde5001a98","url":"images/themes/default/Delete.png"},{"revision":"0c7afdc74e664afc728350efdc4f8e54","url":"images/themes/default/DisabledJob.png"},{"revision":"871a020d4cce6841704c1e6465b5ac11","url":"images/themes/default/DisconnectedDatabase.png"},{"revision":"0b2aecfe0a2fefbaa9d153e06a12ce4a","url":"images/themes/default/DisconnectedServer.png"},{"revision":"0573dfc5e4d10eb7d2708dc9be361e1d","url":"images/themes/default/Domain.png"},{"revision":"5bc7b098fd0c94841c7bb39a8d32c3dd","url":"images/themes/default/Domains.png"},{"revision":"075f3f50ae58bea29ea9853ec69f8822","url":"images/themes/default/EnableArgument.png"},{"revision":"cd1bcdc76c1ac1c8d228b3748ed4b469","url":"images/themes/default/Erase.png"},{"revision":"21388b26da2079d313b9df99324550ac","url":"images/themes/default/Execute.png"},{"revision":"0e75ce0c09fce81f44bb6f71faf15fd8","url":"images/themes/default/ExecuteSave.png"},{"revision":"e0e9aa509cbdd8ef731b35fa9a39aa84","url":"images/themes/default/Explain.png"},{"revision":"20d4e370edd5f9da50f168bedc708fe2","url":"images/themes/default/Export.png"},{"revision":"7f7f3b73b863ab0db2800b0cc9d87f22","url":"images/themes/default/Favicon.ico"},{"revision":"6fa649f2cffe185328b703b4a5f69475","url":"images/themes/default/Filter.png"},{"revision":"928e06e119cc3a048912672d40d06abc","url":"images/themes/default/ForeignKey.png"},{"revision":"c13ce81b5e4a3187ce37a55a387cbd8e","url":"images/themes/default/Fts.png"},{"revision":"78a5c183c4ec2f68fa2c124f11df71ad","url":"images/themes/default/FtsCfg.png"},{"revision":"72795d6e7ba1eaa63f4353d075eb551c","url":"images/themes/default/FtsDict.png"},{"revision":"512bc774fedde4b56563c935ea5b6a2d","url":"images/themes/default/FtsParser.png"},{"revision":"d1db8bbd46db17458812fd60ae458b4e","url":"images/themes/default/Function.png"},{"revision":"6c19e68bf4aff2345c62355ae814cd07","url":"images/themes/default/Functions.png"},{"revision":"aee27759d60d8b19aea299c1af78c902","url":"images/themes/default/GurusHint.png"},{"revision":"e599e96f305c61cb374326d49834c990","url":"images/themes/default/Help.png"},{"revision":"dc9c5432bcca789f6e8adcac5fbecb4a","url":"images/themes/default/Histories.png"},{"revision":"bb6651298f7feca614348a277417b679","url":"images/themes/default/History.png"},{"revision":"7fef7f3891268fbd886d3776d4bb18d2","url":"images/themes/default/I.png"},{"revision":"591ac6f7a26a67ae9485c9ea5f53bfbe","url":"images/themes/default/Import.png"},{"revision":"50d5f45d81511368d878756d6c26f47d","url":"images/themes/default/Index.png"},{"revision":"68100f02b944c3e5814ad9ad679c0169","url":"images/themes/default/Indexes.png"},{"revision":"8dbc90cfbfd4d9a2f5a3e7c5924771ee","url":"images/themes/default/Introduction.png"},{"revision":"0b6670ea8590f013806ad04e139a4d9e","url":"images/themes/default/Job.png"},{"revision":"7c5f31d0ac216e9f90c661e98dba2856","url":"images/themes/default/Jobs.png"},{"revision":"932e67636e6acbb814a2dded608bb652","url":"images/themes/default/Key.png"},{"revision":"e151369d672d2e2cc6f647be2f736e8f","url":"images/themes/default/L.png"},{"revision":"20938113d067cff7a6ff773f75e07491","url":"images/themes/default/Language.png"},{"revision":"ac48fd0fdc93ad3f1928cccb9c9e028e","url":"images/themes/default/Languages.png"},{"revision":"788ee2492ef829b80cfba68d56f14430","url":"images/themes/default/Listen.png"},{"revision":"c529a6fda4b2e2a375f7e5f51e577120","url":"images/themes/default/Listens.png"},{"revision":"d25bce2a91933a53b40ec210c7323372","url":"images/themes/default/Lminus.png"},{"revision":"af1d523a137ef9b2005411770f454b2e","url":"images/themes/default/Loading.gif"},{"revision":"1f099fbed522a3980847f07bcc4573ae","url":"images/themes/default/LowerArgument.png"},{"revision":"b42f13fbc6d7701cd1bb7d827c3113ca","url":"images/themes/default/Lplus.png"},{"revision":"a6cdad27aed2812de33ff2d45e00385b","url":"images/themes/default/MViews.png"},{"revision":"1c8e6ef452ff7a9770047b469c85a05c","url":"images/themes/default/Node.png"},{"revision":"e3f4f6d43a689035a2208662e933f5ea","url":"images/themes/default/Nodes.png"},{"revision":"8534caffcf3d558648a0662245e2fc3d","url":"images/themes/default/ObjectNotFound.png"},{"revision":"adc078de3c9e353b75640c2e180d20e6","url":"images/themes/default/OfferedReplicationSet.png"},{"revision":"768fc20465c6354398625c4ed5c85cb4","url":"images/themes/default/OfferedSubscription.png"},{"revision":"92bb01a30f897095adb2f98c0036b9e9","url":"images/themes/default/Open.png"},{"revision":"fb73b5a1f6499159043e5b20dc3285db","url":"images/themes/default/Operator.png"},{"revision":"a9b82cc57bf520190315ddbc833e64c7","url":"images/themes/default/OperatorClass.png"},{"revision":"b94fc3a6153d8fb2e261ec454d69a252","url":"images/themes/default/OperatorClasses.png"},{"revision":"c5cb1662b9cbf877de8cb08d0c8bc4cb","url":"images/themes/default/Operators.png"},{"revision":"db9d9333b530c266bab387ae076a5ada","url":"images/themes/default/Paste.png"},{"revision":"f888ffe2c6ab9c59d45ee07ae6199f4a","url":"images/themes/default/Path.png"},{"revision":"737c12988806ad60b5a5aec244920709","url":"images/themes/default/Paths.png"},{"revision":"d0744174f9db9929b5be155c9f603e01","url":"images/themes/default/PrimaryKey.png"},{"revision":"1f27241c0f520a279d3665028024b45e","url":"images/themes/default/Privileges.png"},{"revision":"bf5538bb0bd23ed8c209997766dac284","url":"images/themes/default/Processes.png"},{"revision":"9bfdb2725bc9facafe90474d2c364c8f","url":"images/themes/default/Property.png"},{"revision":"e7f18a3dea3acd7e3333cd8f95e3fcce","url":"images/themes/default/RaiseArgument.png"},{"revision":"acd2ad85dbbd2bf5b71c0062b167b139","url":"images/themes/default/Record.png"},{"revision":"878ff904362c9b59e2d6f6ac93ecc4b8","url":"images/themes/default/Records.png"},{"revision":"a169b03df76e87e44c45757f6a168e61","url":"images/themes/default/Redo.png"},{"revision":"cf51d096cc572377189c2bc884936b78","url":"images/themes/default/Refresh.png"},{"revision":"8d804ee75dfd7b8f3ac98b218a847d54","url":"images/themes/default/RemoveArgument.png"},{"revision":"cdd35ed8aa98e9b0d356effb0d74548b","url":"images/themes/default/Replication.png"},{"revision":"7d5e0bff7082704171013afd322821d4","url":"images/themes/default/ReplicationSets.png"},{"revision":"94b8007abc4354fd4cdbdbcd6087bea7","url":"images/themes/default/Restore.png"},{"revision":"f1c25bb9e2a4eb52d9c6ea52545ede2d","url":"images/themes/default/Roles.png"},{"revision":"565c4b37066f23c5a08d428f2592ee7b","url":"images/themes/default/Rule.png"},{"revision":"18fed3c727afc31e40941828697047ad","url":"images/themes/default/Rules.png"},{"revision":"b5a94436bc66832e0498de05bd72b23e","url":"images/themes/default/Save.png"},{"revision":"e2af41bef5d952cb6887723bc3e5921c","url":"images/themes/default/Schedule.png"},{"revision":"2b7a924ed6a9074d4102a547772750bc","url":"images/themes/default/Schedules.png"},{"revision":"18b2e143c60c9ef3813032bb45310e67","url":"images/themes/default/Schema.png"},{"revision":"b9fe50541e03c0b6e503b4ac1e65ddf1","url":"images/themes/default/Schemas.png"},{"revision":"9cf1fe46d6b8fd3ba257d46a3d05965d","url":"images/themes/default/Search.png"},{"revision":"4bfa8c4668036788458732d85630f931","url":"images/themes/default/Sequence.png"},{"revision":"c4bb32230118c69cf6bab8617ef62b16","url":"images/themes/default/Sequences.png"},{"revision":"bf4a2c360541176e03505124830cddac","url":"images/themes/default/Server.png"},{"revision":"07681bcc17ebc43645d6c1796f5df219","url":"images/themes/default/Servers.png"},{"revision":"df73ed3b7b0a31d266d97f97d5ac5c5a","url":"images/themes/default/SqlEditor.png"},{"revision":"b6d59a3d2b8ad767c54305bc91a8243a","url":"images/themes/default/Statistics.png"},{"revision":"892be7a355b19ffdb0ce39483cd4b6c1","url":"images/themes/default/Step.png"},{"revision":"5f28c19fac73bc0e869caed580a28457","url":"images/themes/default/Steps.png"},{"revision":"ef7050f86e5ace6f4c026057beca7b91","url":"images/themes/default/Stop.png"},{"revision":"065f6490b63a46edee2162a6a76a9131","url":"images/themes/default/Subscriptions.png"},{"revision":"fe196453a6e822e7ebbd23692b35fd5e","url":"images/themes/default/T.png"},{"revision":"edd7db39026ec7c3d78284a319198b8d","url":"images/themes/default/Table.png"},{"revision":"84533f1145926e2d71aafaa4ca1eb1ac","url":"images/themes/default/Tables.png"},{"revision":"4014487f76df092d3f57b6a90a6c96a0","url":"images/themes/default/Tablespace.png"},{"revision":"7d2334e497eee6e5719b25dfa39cfe66","url":"images/themes/default/Tablespaces.png"},{"revision":"6987da08785938281c0cef64a08e3263","url":"images/themes/default/title_blue.png"},{"revision":"27762f17ee6301aac5bb3521d34e142b","url":"images/themes/default/title.png"},{"revision":"eb42ed7ec1597a0a9976fb4198a7ee71","url":"images/themes/default/Tminus.png"},{"revision":"fcfd867d96fa1908bd165c97f4099e74","url":"images/themes/default/Tplus.png"},{"revision":"f827a98b8f30eefac6f9ab47d6ca1f16","url":"images/themes/default/Trigger.png"},{"revision":"9337acb5c8b57422cd0aab291aa706bb","url":"images/themes/default/TriggerFunction.png"},{"revision":"5dc7b60313a7a4f3598050afbddad7d2","url":"images/themes/default/TriggerFunctions.png"},{"revision":"6644a0ddffc0487230295acd19de296c","url":"images/themes/default/Triggers.png"},{"revision":"952a9dae51878f6869b24527bca77b49","url":"images/themes/default/Type.png"},{"revision":"0f1e8651d2422952d224d1657442cc42","url":"images/themes/default/Types.png"},{"revision":"a60bb9589277159b06882458fc54e1a9","url":"images/themes/default/Undo.png"},{"revision":"96ce5e94257ba8115ffb5956e3ed3296","url":"images/themes/default/UniqueConstraint.png"},{"revision":"746e073e551917a29630184eace87c8e","url":"images/themes/default/User.png"},{"revision":"735113096adc5e5a8299a6f6f09c721d","url":"images/themes/default/UserGroup.png"},{"revision":"76c595fe16835a3bf582d0278828fc49","url":"images/themes/default/UserGroups.png"},{"revision":"6dda662436c3178b2a51c306edc1cc89","url":"images/themes/default/Users.png"},{"revision":"c5b6e5d13e4d159cf5893a0abb7cb9df","url":"images/themes/default/Variables.png"},{"revision":"2479afdac6324e368251f9d436a86db0","url":"images/themes/default/View.png"},{"revision":"a8a50a05e97c59f0b6cbd8b123b0a4bd","url":"images/themes/default/Views.png"},{"revision":"6987da08785938281c0cef64a08e3263","url":"images/themes/instaGIS/logo.png"},{"revision":"6a131cd0296e2b877a1adec2e629224e","url":"images/vsizegrip.png"},{"revision":"97f9ebda1b8fb0e35ac35ffce8a5a960","url":"themes/bootstrap/global.css"},{"revision":"6987da08785938281c0cef64a08e3263","url":"themes/bootstrap/title.png"},{"revision":"faeff89daa358a9f481f42e32b77cfc3","url":"themes/cappuccino/global.css"},{"revision":"c49fd9c93fd688a1445a17aa316b09bb","url":"themes/default/global.css"},{"revision":"474d702a68605f0a8368ec25c488f455","url":"themes/global.css"},{"revision":"c5984fcad101f4b5507718d47780c026","url":"themes/gotar/global.css"},{"revision":"f2798285cd723a94866088997228accc","url":"vendor/codemirror/addon/comment/comment.js"},{"revision":"0374616c52803e22bace5dfabbc0e42f","url":"vendor/codemirror/addon/comment/continuecomment.js"},{"revision":"c89dce10b44d2882a024e7befc2b63f5","url":"vendor/codemirror/addon/dialog/dialog.css"},{"revision":"904554fefae1a2beb0eaad467018af7a","url":"vendor/codemirror/addon/dialog/dialog.js"},{"revision":"a8525e557b32a9ff330db311f444058b","url":"vendor/codemirror/addon/display/autorefresh.js"},{"revision":"1a278e72b51528270f8ce9ec991929a1","url":"vendor/codemirror/addon/display/fullscreen.css"},{"revision":"744a9a476b90075936f58ebb8b35ac85","url":"vendor/codemirror/addon/display/fullscreen.js"},{"revision":"45aa4eb1759d95e5169397df11a0cd79","url":"vendor/codemirror/addon/display/panel.js"},{"revision":"0e8705231c3e7d910611e5cfcfc9145f","url":"vendor/codemirror/addon/display/placeholder.js"},{"revision":"38aaf61e611edfe39883f46f89b0b91b","url":"vendor/codemirror/addon/display/rulers.js"},{"revision":"7138da5915e3a819ea35126930b43402","url":"vendor/codemirror/addon/edit/closebrackets.js"},{"revision":"eb8606363338598e8f3099392a7fa2ce","url":"vendor/codemirror/addon/edit/closetag.js"},{"revision":"cc1c2b9fd1184a4e8b845e4fb09707e1","url":"vendor/codemirror/addon/edit/continuelist.js"},{"revision":"5a44e9d0ad6abe1afd67c48b70d1cbd2","url":"vendor/codemirror/addon/edit/matchbrackets.js"},{"revision":"d0c67185e94d3a096299b680c0fca7d6","url":"vendor/codemirror/addon/edit/matchtags.js"},{"revision":"81d50700cee8c27e0e311de3650851bc","url":"vendor/codemirror/addon/edit/trailingspace.js"},{"revision":"c4850e56d89da48a8625e13ed9a076db","url":"vendor/codemirror/addon/fold/brace-fold.js"},{"revision":"9b289797886789d2ce7f40e3f7408c9e","url":"vendor/codemirror/addon/fold/comment-fold.js"},{"revision":"67922ad2e2c384c5455bfcacdec393d8","url":"vendor/codemirror/addon/fold/foldcode.js"},{"revision":"38bb68770b6f7ebaa7adea770a68e0b1","url":"vendor/codemirror/addon/fold/foldgutter.css"},{"revision":"2e6a4ca9c0f057daaecbc330d8f96bc0","url":"vendor/codemirror/addon/fold/foldgutter.js"},{"revision":"5017f49481f30946bd4229a6d05d5fcc","url":"vendor/codemirror/addon/fold/indent-fold.js"},{"revision":"6e3228db96bbadbb93c79922ecd88ce0","url":"vendor/codemirror/addon/fold/markdown-fold.js"},{"revision":"b88e73a8e7bdc8b032adfd5047dfe2c5","url":"vendor/codemirror/addon/fold/xml-fold.js"},{"revision":"736f4c0aa67db12cf39097f3d1790c8b","url":"vendor/codemirror/addon/hint/anyword-hint.js"},{"revision":"4958c441a7cdf2d39fa6c8bd4b340168","url":"vendor/codemirror/addon/hint/css-hint.js"},{"revision":"51364bfc06c261a20b9ced6606db9580","url":"vendor/codemirror/addon/hint/html-hint.js"},{"revision":"fe11e9d0e373480aa61af6ae86c04dc1","url":"vendor/codemirror/addon/hint/javascript-hint.js"},{"revision":"49647712414ff96d5846de9736b5dbd3","url":"vendor/codemirror/addon/hint/show-hint.css"},{"revision":"2fa9552bd0d701cac634055d17bb130a","url":"vendor/codemirror/addon/hint/show-hint.js"},{"revision":"f66526ad34eaaeee2dca6282961808a8","url":"vendor/codemirror/addon/hint/sql-hint.js"},{"revision":"65cf0f4e6ce510f4a189a0b87d943b8c","url":"vendor/codemirror/addon/hint/xml-hint.js"},{"revision":"140f1a44841627e860cafd955e89f4e7","url":"vendor/codemirror/addon/lint/coffeescript-lint.js"},{"revision":"6a6166008cb94a6d62e05dc2cab7fc16","url":"vendor/codemirror/addon/lint/css-lint.js"},{"revision":"4ce658b4b1c2cacb8a2685effa0ed4eb","url":"vendor/codemirror/addon/lint/html-lint.js"},{"revision":"3db1c5d6629bde3e0a4a694c5cd94065","url":"vendor/codemirror/addon/lint/javascript-lint.js"},{"revision":"dcfd194ca63e175996aaea2b3a58b598","url":"vendor/codemirror/addon/lint/json-lint.js"},{"revision":"80cbf240f7114fb23e506da29cced118","url":"vendor/codemirror/addon/lint/lint.css"},{"revision":"16098bd4d5e62f123cbc4482622e1360","url":"vendor/codemirror/addon/lint/lint.js"},{"revision":"eabad9dfc99d98d6995c37fce194c28c","url":"vendor/codemirror/addon/lint/yaml-lint.js"},{"revision":"d4009e57cbbb2c969147cf233671ba42","url":"vendor/codemirror/addon/merge/merge.css"},{"revision":"001c710b643ececdbaf65328bb3419fc","url":"vendor/codemirror/addon/merge/merge.js"},{"revision":"f8291cb1ca96e29af58def213012655a","url":"vendor/codemirror/addon/mode/loadmode.js"},{"revision":"37963861dd6e41a530a6f84c2b17bdf7","url":"vendor/codemirror/addon/mode/multiplex_test.js"},{"revision":"b132b004f352bf044cd80a9f55731147","url":"vendor/codemirror/addon/mode/multiplex.js"},{"revision":"4f8e4dcaeb7c237cbe4f1f69972cdc8a","url":"vendor/codemirror/addon/mode/overlay.js"},{"revision":"eed15e8b955aaee880af0c819b38fa25","url":"vendor/codemirror/addon/mode/simple.js"},{"revision":"c8fb49ed714798e04bc3d0289b19efa4","url":"vendor/codemirror/addon/runmode/colorize.js"},{"revision":"aa4a42bca69b6f096a18cd51203afe6e","url":"vendor/codemirror/addon/runmode/runmode-standalone.js"},{"revision":"2c0ddde09a9f1f8f5dc9d4f67f03d2f2","url":"vendor/codemirror/addon/runmode/runmode.js"},{"revision":"f3c8c9b85bbeecf3c873e52d3783f39b","url":"vendor/codemirror/addon/runmode/runmode.node.js"},{"revision":"87198e00de438bb7f9afe2e55b6cb4a3","url":"vendor/codemirror/addon/scroll/annotatescrollbar.js"},{"revision":"92a24e9251be0dc620c11cb61919293f","url":"vendor/codemirror/addon/scroll/scrollpastend.js"},{"revision":"0352ba51fd6a422fe6cc44925e33ad88","url":"vendor/codemirror/addon/scroll/simplescrollbars.css"},{"revision":"13948e6ef35e3c3d2c65de096af58721","url":"vendor/codemirror/addon/scroll/simplescrollbars.js"},{"revision":"cf5f2c65e9c8e26841923b5e1a6bf611","url":"vendor/codemirror/addon/search/jump-to-line.js"},{"revision":"ace658d3aaf9d8ae9895ff97dd9eb5ca","url":"vendor/codemirror/addon/search/match-highlighter.js"},{"revision":"00ea2770c568a848190bcf52e4241276","url":"vendor/codemirror/addon/search/matchesonscrollbar.css"},{"revision":"b7dfa5fd6a57e306bf7ce99542819883","url":"vendor/codemirror/addon/search/matchesonscrollbar.js"},{"revision":"1e2c6bec0a25d4e7dea128f048b08931","url":"vendor/codemirror/addon/search/search.js"},{"revision":"fa73eef9cf913ee2d766c8501a582a0c","url":"vendor/codemirror/addon/search/searchcursor.js"},{"revision":"30fc5d6c1847dc207bd0e38c0e97e789","url":"vendor/codemirror/addon/selection/active-line.js"},{"revision":"c0240b66ae29bda93e80be5e60c9ed8d","url":"vendor/codemirror/addon/selection/mark-selection.js"},{"revision":"ae80c5e4d54f8ccb07c6373e66f523a4","url":"vendor/codemirror/addon/selection/selection-pointer.js"},{"revision":"4d57ced774b5f3fa9f00dfa398e74819","url":"vendor/codemirror/addon/tern/tern.css"},{"revision":"f6c76d9ec32faccbb8cf23b7a2f6f917","url":"vendor/codemirror/addon/tern/tern.js"},{"revision":"6866b3b6f236f5ae8b89e15b5cf167e1","url":"vendor/codemirror/addon/tern/worker.js"},{"revision":"359a2bb5a43f724a09f2adbbfe40dd86","url":"vendor/codemirror/addon/wrap/hardwrap.js"},{"revision":"fc217d502b05f65616356459c0ec1d62","url":"vendor/codemirror/lib/codemirror.css"},{"revision":"82b9491f7e4ecd8ce57812ee3f99014f","url":"vendor/codemirror/lib/codemirror.js"},{"revision":"3eb5b33a2d2022c4de839b1980511f54","url":"vendor/codemirror/mode/meta.js"},{"revision":"91f74a33b9232251058426d1e16e9dce","url":"vendor/codemirror/mode/sql/index.html"},{"revision":"d21c7a0e713132429cf903be42310a89","url":"vendor/codemirror/mode/sql/sql.js"},{"revision":"80026250946cff8a6fc0da995aa02566","url":"vendor/datatables/datatables.min.css"},{"revision":"c1e3d63eab27d1aa7beb191d32340bba","url":"vendor/datatables/datatables.min.js"},{"revision":"d7dc10c78f23615d328581aebcd805eb","url":"vendor/datatables/images/sort_asc_disabled.png"},{"revision":"9326ad44ae4bebdedd141e7a53c2a730","url":"vendor/datatables/images/sort_asc.png"},{"revision":"9a6486086d09bb38cf66a57cc559ade3","url":"vendor/datatables/images/sort_both.png"},{"revision":"bda51e15154a18257b4f955a222fd66f","url":"vendor/datatables/images/sort_desc_disabled.png"},{"revision":"1fc418e33fd5a687290258b23fac4e98","url":"vendor/datatables/images/sort_desc.png"},{"revision":"d7dc10c78f23615d328581aebcd805eb","url":"vendor/images/datatables/sort_asc_disabled.png"},{"revision":"9326ad44ae4bebdedd141e7a53c2a730","url":"vendor/images/datatables/sort_asc.png"},{"revision":"9a6486086d09bb38cf66a57cc559ade3","url":"vendor/images/datatables/sort_both.png"},{"revision":"bda51e15154a18257b4f955a222fd66f","url":"vendor/images/datatables/sort_desc_disabled.png"},{"revision":"1fc418e33fd5a687290258b23fac4e98","url":"vendor/images/datatables/sort_desc.png"},{"revision":"1ec88e235979893e9efc355f22a23441","url":"vendor/jquery-resizable.js"},{"revision":"f83a8b8886694eaef4505dd80af7a430","url":"vendor/jquery/images/ui-icons_444444_256x240.png"},{"revision":"220afd743d9e9643852e31a135a9f3ae","url":"vendor/jquery/jquery-3.4.1.min.js"},{"revision":"81188e0c65a0a25d5ebfa7356bf81884","url":"vendor/jquery/jquery-ui.min.css"},{"revision":"8cbf62fc02083afe12a90787cb8f9e3c","url":"vendor/jquery/jquery-ui.min.js"},{"revision":"66cefd86e219c19be9a32b4a9f6f70b2","url":"vendor/jstree/jstree.js"},{"revision":"dc4a6494cf51022fa4a8541d13837166","url":"vendor/jstree/jstree.min.js"},{"revision":"eebaf260766f5e0e773f53d3ea4f3e4d","url":"vendor/jstree/themes/default-dark/32px.png"},{"revision":"51286e68b083696edaf4f9fc577e2a2d","url":"vendor/jstree/themes/default-dark/40px.png"},{"revision":"6791bf1b92e95d10c8445ac010c429df","url":"vendor/jstree/themes/default-dark/style.css"},{"revision":"0236b108a8deddca3b0fae061147a0a6","url":"vendor/jstree/themes/default-dark/style.min.css"},{"revision":"62be6ed2b189444b472b8000dc187240","url":"vendor/jstree/themes/default-dark/throbber.gif"},{"revision":"db49c8de4f267eede40a9a8843efcdec","url":"vendor/jstree/themes/default/32px.png"},{"revision":"1f075735090412ed7eb8077d819b19c6","url":"vendor/jstree/themes/default/40px.png"},{"revision":"0cf1fc2eadda48373db31569a791ae29","url":"vendor/jstree/themes/default/style.css"},{"revision":"8f65ba57d02eadb0c75d0623190d1ee8","url":"vendor/jstree/themes/default/style.min.css"},{"revision":"9ed4669f524bec38319be63a2ee4ba26","url":"vendor/jstree/themes/default/throbber.gif"},{"revision":"230b82ca8561d9b4111ba8102cae2bb6","url":"vendor/jstree/themes/phppgadmin/32px.png"},{"revision":"1f075735090412ed7eb8077d819b19c6","url":"vendor/jstree/themes/phppgadmin/40px.png"},{"revision":"f5a9ca92f2b904247c7b83ce4b054481","url":"vendor/jstree/themes/phppgadmin/style.css"},{"revision":"8f65ba57d02eadb0c75d0623190d1ee8","url":"vendor/jstree/themes/phppgadmin/style.min.css"},{"revision":"9ed4669f524bec38319be63a2ee4ba26","url":"vendor/jstree/themes/phppgadmin/throbber.gif"},{"revision":"887b34f2cf309344f3e0b96aaab2b15d","url":"vendor/select2/css/select2.css"},{"revision":"d44571114a90b9226cd654d3c7d9442c","url":"vendor/select2/css/select2.min.css"},{"revision":"a8bb27ec698c86bde72c8a6f13a8e9b4","url":"vendor/select2/js/i18n/ar.js"},{"revision":"498dc667b34eb0fddc31c4e92330d1aa","url":"vendor/select2/js/i18n/az.js"},{"revision":"89cba4df3c8694fcb33098dd1646cac1","url":"vendor/select2/js/i18n/bg.js"},{"revision":"2eaad4eb1950a0d542812c58d30c93dd","url":"vendor/select2/js/i18n/ca.js"},{"revision":"a68bcd293adcd6d9ac0b8527c9b39189","url":"vendor/select2/js/i18n/cs.js"},{"revision":"cbf897a0ae53b0cffbbe3f50d8b1b136","url":"vendor/select2/js/i18n/da.js"},{"revision":"366d0aacb55f4929cc50bb977abec674","url":"vendor/select2/js/i18n/de.js"},{"revision":"5629ce65500f96c62414a27c6eaed62c","url":"vendor/select2/js/i18n/el.js"},{"revision":"05649b26c08630d2b703bc1e9ef93c7b","url":"vendor/select2/js/i18n/en.js"},{"revision":"dc9dbf9d65df3f69e6b6d650c97bd967","url":"vendor/select2/js/i18n/es.js"},{"revision":"c3953fb90b6bb9669697f5f12e802a66","url":"vendor/select2/js/i18n/et.js"},{"revision":"11b925456433eaab07e35b8dca7046f5","url":"vendor/select2/js/i18n/eu.js"},{"revision":"98e52839b583e1ca66f4360a4f43f9b0","url":"vendor/select2/js/i18n/fa.js"},{"revision":"659847deefdcfd7e4f8f2ed924d360f4","url":"vendor/select2/js/i18n/fi.js"},{"revision":"b06a3340de45535358a0bc33fa2b9739","url":"vendor/select2/js/i18n/fr.js"},{"revision":"78a87f7c0a519118fbe4f583ff2a3b3f","url":"vendor/select2/js/i18n/gl.js"},{"revision":"222d90ee0344ee8beeb5fb1835c93c76","url":"vendor/select2/js/i18n/he.js"},{"revision":"116a90b7111b953cd092e30a034d6913","url":"vendor/select2/js/i18n/hi.js"},{"revision":"e1d2c70b4df50d98d2c35856804d38be","url":"vendor/select2/js/i18n/hr.js"},{"revision":"db45641f10b2412801d5872e40ef7c2f","url":"vendor/select2/js/i18n/hu.js"},{"revision":"6ee6c9c64b945bb8a0f42d247ee0d868","url":"vendor/select2/js/i18n/id.js"},{"revision":"808c7d47acb59537728bc74fdeb0ad0d","url":"vendor/select2/js/i18n/is.js"},{"revision":"bae1661dbb77c15384655faffc10a3fa","url":"vendor/select2/js/i18n/it.js"},{"revision":"19cf1ce8a03de84ea668e8fec99a8c80","url":"vendor/select2/js/i18n/ja.js"},{"revision":"6074a9c5575cfaa8b3c1dccdb3133dde","url":"vendor/select2/js/i18n/km.js"},{"revision":"74b17541834ff1bb8c5651d321bd2281","url":"vendor/select2/js/i18n/ko.js"},{"revision":"a0783b1bd1594b7c584564cc68b6c6e5","url":"vendor/select2/js/i18n/lt.js"},{"revision":"07fe2a580d17cba308a972fdabbcaea0","url":"vendor/select2/js/i18n/lv.js"},{"revision":"4986d7fc3ff3ed9a5f8af646f5ca587b","url":"vendor/select2/js/i18n/mk.js"},{"revision":"23e7b436957996a10f451bc8d688764d","url":"vendor/select2/js/i18n/ms.js"},{"revision":"137e184004aaec03977a4caf1cca30f4","url":"vendor/select2/js/i18n/nb.js"},{"revision":"c363ace8aa0501526c17a61ab2fb854f","url":"vendor/select2/js/i18n/nl.js"},{"revision":"76465b54a6b0eb6b2204143a0827d0ca","url":"vendor/select2/js/i18n/pl.js"},{"revision":"9efbbac4fda8d23225df16dddecb2718","url":"vendor/select2/js/i18n/pt-BR.js"},{"revision":"5d6ccc53b347b155e1af6afb1bc5fe94","url":"vendor/select2/js/i18n/pt.js"},{"revision":"1ddc2b9980dcdd1008761149e0349a8b","url":"vendor/select2/js/i18n/ro.js"},{"revision":"d83609abf2e0ba927b9ec472bf47e180","url":"vendor/select2/js/i18n/ru.js"},{"revision":"a0f1a818d09228a87ae105d09fdee80c","url":"vendor/select2/js/i18n/sk.js"},{"revision":"2f3047aad49eedd75dd5dacc092a7e02","url":"vendor/select2/js/i18n/sr-Cyrl.js"},{"revision":"157bc6eb978e9a35985bc655d09ac258","url":"vendor/select2/js/i18n/sr.js"},{"revision":"2b21bb3f61100fd656b41d16e25e2f80","url":"vendor/select2/js/i18n/sv.js"},{"revision":"2a4ece4c4355b7efd9e9591a53b3edc1","url":"vendor/select2/js/i18n/th.js"},{"revision":"c1925d8817db211164145dc47b18d333","url":"vendor/select2/js/i18n/tr.js"},{"revision":"3d56f311192daf9ce44246c52777789f","url":"vendor/select2/js/i18n/uk.js"},{"revision":"3520aa7bdea8234161b2c18f631417a0","url":"vendor/select2/js/i18n/vi.js"},{"revision":"419002d3c6c10ec9618ce6275c1057d1","url":"vendor/select2/js/i18n/zh-CN.js"},{"revision":"c021537edf2c555f149509150ff986e3","url":"vendor/select2/js/i18n/zh-TW.js"},{"revision":"a95323cb476000ee17d7a252786df963","url":"vendor/select2/js/select2.full.js"},{"revision":"da607360bcc65284a197ada3d68d5439","url":"vendor/select2/js/select2.full.min.js"},{"revision":"b8f26dd6733ccc6263cb273e8f821dab","url":"vendor/select2/js/select2.js"},{"revision":"e87ca4c3554f7b9e693605ce12d3a234","url":"vendor/select2/js/select2.min.js"}] || []); +registerRoute( + ({ request, url }) => + request.destination === 'image' || url.includes('assets/vendor'), + new CacheFirst() +); +/*registerRoute( + ({ request }) => + request.destination === 'script' || request.destination === 'style', + new StaleWhileRevalidate() +);*/ - workbox.core.clientsClaim(); - - workbox.precaching.precacheAndRoute([ - { - "url": "images/themes/bootstrap/Favicon.ico", - "revision": "7f7f3b73b863ab0db2800b0cc9d87f22" - }, - { - "url": "images/themes/bootstrap/Introduction.png", - "revision": "8dbc90cfbfd4d9a2f5a3e7c5924771ee" - }, - { - "url": "images/themes/bootstrap/logo.png", - "revision": "6987da08785938281c0cef64a08e3263" - }, - { - "url": "images/themes/bootstrap/title.png", - "revision": "6987da08785938281c0cef64a08e3263" - }, - { - "url": "images/themes/cappuccino/inputbckg.png", - "revision": "0836efcda7efd8f7143e6bc944fb2ae1" - }, - { - "url": "images/themes/cappuccino/Lminus.png", - "revision": "4c6ad5374b9518299739fb8f6c0f0dcf" - }, - { - "url": "images/themes/cappuccino/Lplus.png", - "revision": "0e918eec776f591e565f252bbb3935d1" - }, - { - "url": "images/themes/cappuccino/openListe.png", - "revision": "35fec4ef79e5c77f884c28db9d646ff8" - }, - { - "url": "images/themes/cappuccino/title.png", - "revision": "256583a0062c189786a788f550e4833e" - }, - { - "url": "images/themes/cappuccino/Tminus.png", - "revision": "fd64d87ca98273a08a689508c15e21d0" - }, - { - "url": "images/themes/cappuccino/Tplus.png", - "revision": "6be509ad6d0bdf6f5f4bb0112a28a9c4" - }, - { - "url": "images/themes/default/AddArguments.png", - "revision": "5783c8524fa7f4daff4f1ef7bcb4bfb9" - }, - { - "url": "images/themes/default/Admin.png", - "revision": "a82687f9d571988c5a50cd1c4c85e245" - }, - { - "url": "images/themes/default/Aggregate.png", - "revision": "ff0166451279bef06132ca55d2b13bb3" - }, - { - "url": "images/themes/default/Aggregates.png", - "revision": "480dca5e5fa1bef15990e13f7299ac9a" - }, - { - "url": "images/themes/default/AllUsers.png", - "revision": "c8e3e86ffd0a4d7370e08388352fcc53" - }, - { - "url": "images/themes/default/AvailableReplicationSet.png", - "revision": "ce257e663eb495ba4d90fc55feb361ff" - }, - { - "url": "images/themes/default/AvailableSubscription.png", - "revision": "5ec68e4a7bd37d101bdd202890bfb606" - }, - { - "url": "images/themes/default/Backup.png", - "revision": "362dd1ab7684968a9051fb2ffd145a06" - }, - { - "url": "images/themes/default/blank.png", - "revision": "ff372eacef6cd22aa9a962b1fab6b927" - }, - { - "url": "images/themes/default/Cast.png", - "revision": "2b52864370d5111e7a68d3347f0047f4" - }, - { - "url": "images/themes/default/Casts.png", - "revision": "5597d48b8d4b6d0e30762500ced49539" - }, - { - "url": "images/themes/default/CheckConstraint.png", - "revision": "12878c160ad2030c33fbe74b9ef4980c" - }, - { - "url": "images/themes/default/Cluster.png", - "revision": "8ffa29a8aadf2e8a78a58f246ecb8f3a" - }, - { - "url": "images/themes/default/Column.png", - "revision": "e9a7cd147304fa43da5121aca3aa96bd" - }, - { - "url": "images/themes/default/Columns.png", - "revision": "135c695556735ca7bfbec339300d475a" - }, - { - "url": "images/themes/default/Constraints.png", - "revision": "a08d098a40f117173b627f279d3e5c84" - }, - { - "url": "images/themes/default/Conversion.png", - "revision": "0f5b34e3477bc7dec9d214c75624618e" - }, - { - "url": "images/themes/default/Conversions.png", - "revision": "34b35cebcc208e56a590de389650c31c" - }, - { - "url": "images/themes/default/Copy.png", - "revision": "c8f58a82f94ad33c92c4434195211986" - }, - { - "url": "images/themes/default/CorruptedDatabase.png", - "revision": "37d5edb86c49b49e04dc1f31ea61d944" - }, - { - "url": "images/themes/default/Cut.png", - "revision": "13cb3db5b00eb488ea488c11f7ef6c7b" - }, - { - "url": "images/themes/default/Database.png", - "revision": "f5db4650c1155434dd3395449145e185" - }, - { - "url": "images/themes/default/Databases.png", - "revision": "f78fd91345a5f9e6135740c39f94c281" - }, - { - "url": "images/themes/default/Definition.png", - "revision": "01e09c5e6a4dff39c69c69c30e3c2df0" - }, - { - "url": "images/themes/default/Delete.png", - "revision": "909467ce82f287d29b32a3bde5001a98" - }, - { - "url": "images/themes/default/DisabledJob.png", - "revision": "0c7afdc74e664afc728350efdc4f8e54" - }, - { - "url": "images/themes/default/DisconnectedDatabase.png", - "revision": "871a020d4cce6841704c1e6465b5ac11" - }, - { - "url": "images/themes/default/DisconnectedServer.png", - "revision": "0b2aecfe0a2fefbaa9d153e06a12ce4a" - }, - { - "url": "images/themes/default/Domain.png", - "revision": "0573dfc5e4d10eb7d2708dc9be361e1d" - }, - { - "url": "images/themes/default/Domains.png", - "revision": "5bc7b098fd0c94841c7bb39a8d32c3dd" - }, - { - "url": "images/themes/default/EnableArgument.png", - "revision": "075f3f50ae58bea29ea9853ec69f8822" - }, - { - "url": "images/themes/default/Erase.png", - "revision": "cd1bcdc76c1ac1c8d228b3748ed4b469" - }, - { - "url": "images/themes/default/Execute.png", - "revision": "21388b26da2079d313b9df99324550ac" - }, - { - "url": "images/themes/default/ExecuteSave.png", - "revision": "0e75ce0c09fce81f44bb6f71faf15fd8" - }, - { - "url": "images/themes/default/Explain.png", - "revision": "e0e9aa509cbdd8ef731b35fa9a39aa84" - }, - { - "url": "images/themes/default/Export.png", - "revision": "20d4e370edd5f9da50f168bedc708fe2" - }, - { - "url": "images/themes/default/Favicon.ico", - "revision": "7f7f3b73b863ab0db2800b0cc9d87f22" - }, - { - "url": "images/themes/default/Filter.png", - "revision": "6fa649f2cffe185328b703b4a5f69475" - }, - { - "url": "images/themes/default/ForeignKey.png", - "revision": "928e06e119cc3a048912672d40d06abc" - }, - { - "url": "images/themes/default/Fts.png", - "revision": "c13ce81b5e4a3187ce37a55a387cbd8e" - }, - { - "url": "images/themes/default/FtsCfg.png", - "revision": "78a5c183c4ec2f68fa2c124f11df71ad" - }, - { - "url": "images/themes/default/FtsDict.png", - "revision": "72795d6e7ba1eaa63f4353d075eb551c" - }, - { - "url": "images/themes/default/FtsParser.png", - "revision": "512bc774fedde4b56563c935ea5b6a2d" - }, - { - "url": "images/themes/default/Function.png", - "revision": "d1db8bbd46db17458812fd60ae458b4e" - }, - { - "url": "images/themes/default/Functions.png", - "revision": "6c19e68bf4aff2345c62355ae814cd07" - }, - { - "url": "images/themes/default/GurusHint.png", - "revision": "aee27759d60d8b19aea299c1af78c902" - }, - { - "url": "images/themes/default/Help.png", - "revision": "e599e96f305c61cb374326d49834c990" - }, - { - "url": "images/themes/default/Histories.png", - "revision": "dc9c5432bcca789f6e8adcac5fbecb4a" - }, - { - "url": "images/themes/default/History.png", - "revision": "bb6651298f7feca614348a277417b679" - }, - { - "url": "images/themes/default/I.png", - "revision": "7fef7f3891268fbd886d3776d4bb18d2" - }, - { - "url": "images/themes/default/Import.png", - "revision": "591ac6f7a26a67ae9485c9ea5f53bfbe" - }, - { - "url": "images/themes/default/Index.png", - "revision": "50d5f45d81511368d878756d6c26f47d" - }, - { - "url": "images/themes/default/Indexes.png", - "revision": "68100f02b944c3e5814ad9ad679c0169" - }, - { - "url": "images/themes/default/Introduction.png", - "revision": "8dbc90cfbfd4d9a2f5a3e7c5924771ee" - }, - { - "url": "images/themes/default/Job.png", - "revision": "0b6670ea8590f013806ad04e139a4d9e" - }, - { - "url": "images/themes/default/Jobs.png", - "revision": "7c5f31d0ac216e9f90c661e98dba2856" - }, - { - "url": "images/themes/default/Key.png", - "revision": "932e67636e6acbb814a2dded608bb652" - }, - { - "url": "images/themes/default/L.png", - "revision": "e151369d672d2e2cc6f647be2f736e8f" - }, - { - "url": "images/themes/default/Language.png", - "revision": "20938113d067cff7a6ff773f75e07491" - }, - { - "url": "images/themes/default/Languages.png", - "revision": "ac48fd0fdc93ad3f1928cccb9c9e028e" - }, - { - "url": "images/themes/default/Listen.png", - "revision": "788ee2492ef829b80cfba68d56f14430" - }, - { - "url": "images/themes/default/Listens.png", - "revision": "c529a6fda4b2e2a375f7e5f51e577120" - }, - { - "url": "images/themes/default/Lminus.png", - "revision": "d25bce2a91933a53b40ec210c7323372" - }, - { - "url": "images/themes/default/Loading.gif", - "revision": "af1d523a137ef9b2005411770f454b2e" - }, - { - "url": "images/themes/default/LowerArgument.png", - "revision": "1f099fbed522a3980847f07bcc4573ae" - }, - { - "url": "images/themes/default/Lplus.png", - "revision": "b42f13fbc6d7701cd1bb7d827c3113ca" - }, - { - "url": "images/themes/default/MViews.png", - "revision": "a6cdad27aed2812de33ff2d45e00385b" - }, - { - "url": "images/themes/default/Node.png", - "revision": "1c8e6ef452ff7a9770047b469c85a05c" - }, - { - "url": "images/themes/default/Nodes.png", - "revision": "e3f4f6d43a689035a2208662e933f5ea" - }, - { - "url": "images/themes/default/ObjectNotFound.png", - "revision": "8534caffcf3d558648a0662245e2fc3d" - }, - { - "url": "images/themes/default/OfferedReplicationSet.png", - "revision": "adc078de3c9e353b75640c2e180d20e6" - }, - { - "url": "images/themes/default/OfferedSubscription.png", - "revision": "768fc20465c6354398625c4ed5c85cb4" - }, - { - "url": "images/themes/default/Open.png", - "revision": "92bb01a30f897095adb2f98c0036b9e9" - }, - { - "url": "images/themes/default/Operator.png", - "revision": "fb73b5a1f6499159043e5b20dc3285db" - }, - { - "url": "images/themes/default/OperatorClass.png", - "revision": "a9b82cc57bf520190315ddbc833e64c7" - }, - { - "url": "images/themes/default/OperatorClasses.png", - "revision": "b94fc3a6153d8fb2e261ec454d69a252" - }, - { - "url": "images/themes/default/Operators.png", - "revision": "c5cb1662b9cbf877de8cb08d0c8bc4cb" - }, - { - "url": "images/themes/default/Paste.png", - "revision": "db9d9333b530c266bab387ae076a5ada" - }, - { - "url": "images/themes/default/Path.png", - "revision": "f888ffe2c6ab9c59d45ee07ae6199f4a" - }, - { - "url": "images/themes/default/Paths.png", - "revision": "737c12988806ad60b5a5aec244920709" - }, - { - "url": "images/themes/default/PrimaryKey.png", - "revision": "d0744174f9db9929b5be155c9f603e01" - }, - { - "url": "images/themes/default/Privileges.png", - "revision": "1f27241c0f520a279d3665028024b45e" - }, - { - "url": "images/themes/default/Processes.png", - "revision": "bf5538bb0bd23ed8c209997766dac284" - }, - { - "url": "images/themes/default/Property.png", - "revision": "9bfdb2725bc9facafe90474d2c364c8f" - }, - { - "url": "images/themes/default/RaiseArgument.png", - "revision": "e7f18a3dea3acd7e3333cd8f95e3fcce" - }, - { - "url": "images/themes/default/Record.png", - "revision": "acd2ad85dbbd2bf5b71c0062b167b139" - }, - { - "url": "images/themes/default/Records.png", - "revision": "878ff904362c9b59e2d6f6ac93ecc4b8" - }, - { - "url": "images/themes/default/Redo.png", - "revision": "a169b03df76e87e44c45757f6a168e61" - }, - { - "url": "images/themes/default/Refresh.png", - "revision": "cf51d096cc572377189c2bc884936b78" - }, - { - "url": "images/themes/default/RemoveArgument.png", - "revision": "8d804ee75dfd7b8f3ac98b218a847d54" - }, - { - "url": "images/themes/default/Replication.png", - "revision": "cdd35ed8aa98e9b0d356effb0d74548b" - }, - { - "url": "images/themes/default/ReplicationSets.png", - "revision": "7d5e0bff7082704171013afd322821d4" - }, - { - "url": "images/themes/default/Restore.png", - "revision": "94b8007abc4354fd4cdbdbcd6087bea7" - }, - { - "url": "images/themes/default/Roles.png", - "revision": "f1c25bb9e2a4eb52d9c6ea52545ede2d" - }, - { - "url": "images/themes/default/Rule.png", - "revision": "565c4b37066f23c5a08d428f2592ee7b" - }, - { - "url": "images/themes/default/Rules.png", - "revision": "18fed3c727afc31e40941828697047ad" - }, - { - "url": "images/themes/default/Save.png", - "revision": "b5a94436bc66832e0498de05bd72b23e" - }, - { - "url": "images/themes/default/Schedule.png", - "revision": "e2af41bef5d952cb6887723bc3e5921c" - }, - { - "url": "images/themes/default/Schedules.png", - "revision": "2b7a924ed6a9074d4102a547772750bc" - }, - { - "url": "images/themes/default/Schema.png", - "revision": "18b2e143c60c9ef3813032bb45310e67" - }, - { - "url": "images/themes/default/Schemas.png", - "revision": "b9fe50541e03c0b6e503b4ac1e65ddf1" - }, - { - "url": "images/themes/default/Search.png", - "revision": "9cf1fe46d6b8fd3ba257d46a3d05965d" - }, - { - "url": "images/themes/default/Sequence.png", - "revision": "4bfa8c4668036788458732d85630f931" - }, - { - "url": "images/themes/default/Sequences.png", - "revision": "c4bb32230118c69cf6bab8617ef62b16" - }, - { - "url": "images/themes/default/Server.png", - "revision": "bf4a2c360541176e03505124830cddac" - }, - { - "url": "images/themes/default/Servers.png", - "revision": "07681bcc17ebc43645d6c1796f5df219" - }, - { - "url": "images/themes/default/SqlEditor.png", - "revision": "df73ed3b7b0a31d266d97f97d5ac5c5a" - }, - { - "url": "images/themes/default/Statistics.png", - "revision": "b6d59a3d2b8ad767c54305bc91a8243a" - }, - { - "url": "images/themes/default/Step.png", - "revision": "892be7a355b19ffdb0ce39483cd4b6c1" - }, - { - "url": "images/themes/default/Steps.png", - "revision": "5f28c19fac73bc0e869caed580a28457" - }, - { - "url": "images/themes/default/Stop.png", - "revision": "ef7050f86e5ace6f4c026057beca7b91" - }, - { - "url": "images/themes/default/Subscriptions.png", - "revision": "065f6490b63a46edee2162a6a76a9131" - }, - { - "url": "images/themes/default/T.png", - "revision": "fe196453a6e822e7ebbd23692b35fd5e" - }, - { - "url": "images/themes/default/Table.png", - "revision": "edd7db39026ec7c3d78284a319198b8d" - }, - { - "url": "images/themes/default/Tables.png", - "revision": "84533f1145926e2d71aafaa4ca1eb1ac" - }, - { - "url": "images/themes/default/Tablespace.png", - "revision": "4014487f76df092d3f57b6a90a6c96a0" - }, - { - "url": "images/themes/default/Tablespaces.png", - "revision": "7d2334e497eee6e5719b25dfa39cfe66" - }, - { - "url": "images/themes/default/title_blue.png", - "revision": "6987da08785938281c0cef64a08e3263" - }, - { - "url": "images/themes/default/title.png", - "revision": "27762f17ee6301aac5bb3521d34e142b" - }, - { - "url": "images/themes/default/Tminus.png", - "revision": "eb42ed7ec1597a0a9976fb4198a7ee71" - }, - { - "url": "images/themes/default/Tplus.png", - "revision": "fcfd867d96fa1908bd165c97f4099e74" - }, - { - "url": "images/themes/default/Trigger.png", - "revision": "f827a98b8f30eefac6f9ab47d6ca1f16" - }, - { - "url": "images/themes/default/TriggerFunction.png", - "revision": "9337acb5c8b57422cd0aab291aa706bb" - }, - { - "url": "images/themes/default/TriggerFunctions.png", - "revision": "5dc7b60313a7a4f3598050afbddad7d2" - }, - { - "url": "images/themes/default/Triggers.png", - "revision": "6644a0ddffc0487230295acd19de296c" - }, - { - "url": "images/themes/default/Type.png", - "revision": "952a9dae51878f6869b24527bca77b49" - }, - { - "url": "images/themes/default/Types.png", - "revision": "0f1e8651d2422952d224d1657442cc42" - }, - { - "url": "images/themes/default/Undo.png", - "revision": "a60bb9589277159b06882458fc54e1a9" - }, - { - "url": "images/themes/default/UniqueConstraint.png", - "revision": "96ce5e94257ba8115ffb5956e3ed3296" - }, - { - "url": "images/themes/default/User.png", - "revision": "746e073e551917a29630184eace87c8e" - }, - { - "url": "images/themes/default/UserGroup.png", - "revision": "735113096adc5e5a8299a6f6f09c721d" - }, - { - "url": "images/themes/default/UserGroups.png", - "revision": "76c595fe16835a3bf582d0278828fc49" - }, - { - "url": "images/themes/default/Users.png", - "revision": "6dda662436c3178b2a51c306edc1cc89" - }, - { - "url": "images/themes/default/Variables.png", - "revision": "c5b6e5d13e4d159cf5893a0abb7cb9df" - }, - { - "url": "images/themes/default/View.png", - "revision": "2479afdac6324e368251f9d436a86db0" - }, - { - "url": "images/themes/default/Views.png", - "revision": "a8a50a05e97c59f0b6cbd8b123b0a4bd" - }, - { - "url": "images/themes/instaGIS/logo.png", - "revision": "6987da08785938281c0cef64a08e3263" - }, - { - "url": "sw.dev.js", - "revision": "febc92b3cdfdc35035a05df733c1dd98" - }, - { - "url": "themes/bootstrap/global.css", - "revision": "97f9ebda1b8fb0e35ac35ffce8a5a960" - }, - { - "url": "themes/bootstrap/title.png", - "revision": "6987da08785938281c0cef64a08e3263" - }, - { - "url": "themes/cappuccino/global.css", - "revision": "faeff89daa358a9f481f42e32b77cfc3" - }, - { - "url": "themes/default/global.css", - "revision": "c49fd9c93fd688a1445a17aa316b09bb" - }, - { - "url": "themes/global.css", - "revision": "6cb6f33fdd8a22c780f6f968141c25a3" - }, - { - "url": "themes/gotar/global.css", - "revision": "c5984fcad101f4b5507718d47780c026" - }, - { - "url": "vendor/codemirror/addon/comment/comment.js", - "revision": "f2798285cd723a94866088997228accc" - }, - { - "url": "vendor/codemirror/addon/comment/continuecomment.js", - "revision": "0374616c52803e22bace5dfabbc0e42f" - }, - { - "url": "vendor/codemirror/addon/dialog/dialog.css", - "revision": "c89dce10b44d2882a024e7befc2b63f5" - }, - { - "url": "vendor/codemirror/addon/dialog/dialog.js", - "revision": "904554fefae1a2beb0eaad467018af7a" - }, - { - "url": "vendor/codemirror/addon/display/autorefresh.js", - "revision": "a8525e557b32a9ff330db311f444058b" - }, - { - "url": "vendor/codemirror/addon/display/fullscreen.css", - "revision": "1a278e72b51528270f8ce9ec991929a1" - }, - { - "url": "vendor/codemirror/addon/display/fullscreen.js", - "revision": "744a9a476b90075936f58ebb8b35ac85" - }, - { - "url": "vendor/codemirror/addon/display/panel.js", - "revision": "45aa4eb1759d95e5169397df11a0cd79" - }, - { - "url": "vendor/codemirror/addon/display/placeholder.js", - "revision": "0e8705231c3e7d910611e5cfcfc9145f" - }, - { - "url": "vendor/codemirror/addon/display/rulers.js", - "revision": "38aaf61e611edfe39883f46f89b0b91b" - }, - { - "url": "vendor/codemirror/addon/edit/closebrackets.js", - "revision": "7138da5915e3a819ea35126930b43402" - }, - { - "url": "vendor/codemirror/addon/edit/closetag.js", - "revision": "eb8606363338598e8f3099392a7fa2ce" - }, - { - "url": "vendor/codemirror/addon/edit/continuelist.js", - "revision": "cc1c2b9fd1184a4e8b845e4fb09707e1" - }, - { - "url": "vendor/codemirror/addon/edit/matchbrackets.js", - "revision": "5a44e9d0ad6abe1afd67c48b70d1cbd2" - }, - { - "url": "vendor/codemirror/addon/edit/matchtags.js", - "revision": "d0c67185e94d3a096299b680c0fca7d6" - }, - { - "url": "vendor/codemirror/addon/edit/trailingspace.js", - "revision": "81d50700cee8c27e0e311de3650851bc" - }, - { - "url": "vendor/codemirror/addon/fold/brace-fold.js", - "revision": "c4850e56d89da48a8625e13ed9a076db" - }, - { - "url": "vendor/codemirror/addon/fold/comment-fold.js", - "revision": "9b289797886789d2ce7f40e3f7408c9e" - }, - { - "url": "vendor/codemirror/addon/fold/foldcode.js", - "revision": "67922ad2e2c384c5455bfcacdec393d8" - }, - { - "url": "vendor/codemirror/addon/fold/foldgutter.css", - "revision": "38bb68770b6f7ebaa7adea770a68e0b1" - }, - { - "url": "vendor/codemirror/addon/fold/foldgutter.js", - "revision": "2e6a4ca9c0f057daaecbc330d8f96bc0" - }, - { - "url": "vendor/codemirror/addon/fold/indent-fold.js", - "revision": "5017f49481f30946bd4229a6d05d5fcc" - }, - { - "url": "vendor/codemirror/addon/fold/markdown-fold.js", - "revision": "6e3228db96bbadbb93c79922ecd88ce0" - }, - { - "url": "vendor/codemirror/addon/fold/xml-fold.js", - "revision": "b88e73a8e7bdc8b032adfd5047dfe2c5" - }, - { - "url": "vendor/codemirror/addon/hint/anyword-hint.js", - "revision": "736f4c0aa67db12cf39097f3d1790c8b" - }, - { - "url": "vendor/codemirror/addon/hint/css-hint.js", - "revision": "4958c441a7cdf2d39fa6c8bd4b340168" - }, - { - "url": "vendor/codemirror/addon/hint/html-hint.js", - "revision": "51364bfc06c261a20b9ced6606db9580" - }, - { - "url": "vendor/codemirror/addon/hint/javascript-hint.js", - "revision": "fe11e9d0e373480aa61af6ae86c04dc1" - }, - { - "url": "vendor/codemirror/addon/hint/show-hint.css", - "revision": "49647712414ff96d5846de9736b5dbd3" - }, - { - "url": "vendor/codemirror/addon/hint/show-hint.js", - "revision": "2fa9552bd0d701cac634055d17bb130a" - }, - { - "url": "vendor/codemirror/addon/hint/sql-hint.js", - "revision": "f66526ad34eaaeee2dca6282961808a8" - }, - { - "url": "vendor/codemirror/addon/hint/xml-hint.js", - "revision": "65cf0f4e6ce510f4a189a0b87d943b8c" - }, - { - "url": "vendor/codemirror/addon/lint/coffeescript-lint.js", - "revision": "140f1a44841627e860cafd955e89f4e7" - }, - { - "url": "vendor/codemirror/addon/lint/css-lint.js", - "revision": "6a6166008cb94a6d62e05dc2cab7fc16" - }, - { - "url": "vendor/codemirror/addon/lint/html-lint.js", - "revision": "4ce658b4b1c2cacb8a2685effa0ed4eb" - }, - { - "url": "vendor/codemirror/addon/lint/javascript-lint.js", - "revision": "3db1c5d6629bde3e0a4a694c5cd94065" - }, - { - "url": "vendor/codemirror/addon/lint/json-lint.js", - "revision": "dcfd194ca63e175996aaea2b3a58b598" - }, - { - "url": "vendor/codemirror/addon/lint/lint.css", - "revision": "80cbf240f7114fb23e506da29cced118" - }, - { - "url": "vendor/codemirror/addon/lint/lint.js", - "revision": "16098bd4d5e62f123cbc4482622e1360" - }, - { - "url": "vendor/codemirror/addon/lint/yaml-lint.js", - "revision": "eabad9dfc99d98d6995c37fce194c28c" - }, - { - "url": "vendor/codemirror/addon/merge/merge.css", - "revision": "d4009e57cbbb2c969147cf233671ba42" - }, - { - "url": "vendor/codemirror/addon/merge/merge.js", - "revision": "001c710b643ececdbaf65328bb3419fc" - }, - { - "url": "vendor/codemirror/addon/mode/loadmode.js", - "revision": "f8291cb1ca96e29af58def213012655a" - }, - { - "url": "vendor/codemirror/addon/mode/multiplex_test.js", - "revision": "37963861dd6e41a530a6f84c2b17bdf7" - }, - { - "url": "vendor/codemirror/addon/mode/multiplex.js", - "revision": "b132b004f352bf044cd80a9f55731147" - }, - { - "url": "vendor/codemirror/addon/mode/overlay.js", - "revision": "4f8e4dcaeb7c237cbe4f1f69972cdc8a" - }, - { - "url": "vendor/codemirror/addon/mode/simple.js", - "revision": "eed15e8b955aaee880af0c819b38fa25" - }, - { - "url": "vendor/codemirror/addon/runmode/colorize.js", - "revision": "c8fb49ed714798e04bc3d0289b19efa4" - }, - { - "url": "vendor/codemirror/addon/runmode/runmode-standalone.js", - "revision": "aa4a42bca69b6f096a18cd51203afe6e" - }, - { - "url": "vendor/codemirror/addon/runmode/runmode.js", - "revision": "2c0ddde09a9f1f8f5dc9d4f67f03d2f2" - }, - { - "url": "vendor/codemirror/addon/runmode/runmode.node.js", - "revision": "f3c8c9b85bbeecf3c873e52d3783f39b" - }, - { - "url": "vendor/codemirror/addon/scroll/annotatescrollbar.js", - "revision": "87198e00de438bb7f9afe2e55b6cb4a3" - }, - { - "url": "vendor/codemirror/addon/scroll/scrollpastend.js", - "revision": "92a24e9251be0dc620c11cb61919293f" - }, - { - "url": "vendor/codemirror/addon/scroll/simplescrollbars.css", - "revision": "0352ba51fd6a422fe6cc44925e33ad88" - }, - { - "url": "vendor/codemirror/addon/scroll/simplescrollbars.js", - "revision": "13948e6ef35e3c3d2c65de096af58721" - }, - { - "url": "vendor/codemirror/addon/search/jump-to-line.js", - "revision": "cf5f2c65e9c8e26841923b5e1a6bf611" - }, - { - "url": "vendor/codemirror/addon/search/match-highlighter.js", - "revision": "ace658d3aaf9d8ae9895ff97dd9eb5ca" - }, - { - "url": "vendor/codemirror/addon/search/matchesonscrollbar.css", - "revision": "00ea2770c568a848190bcf52e4241276" - }, - { - "url": "vendor/codemirror/addon/search/matchesonscrollbar.js", - "revision": "b7dfa5fd6a57e306bf7ce99542819883" - }, - { - "url": "vendor/codemirror/addon/search/search.js", - "revision": "1e2c6bec0a25d4e7dea128f048b08931" - }, - { - "url": "vendor/codemirror/addon/search/searchcursor.js", - "revision": "fa73eef9cf913ee2d766c8501a582a0c" - }, - { - "url": "vendor/codemirror/addon/selection/active-line.js", - "revision": "30fc5d6c1847dc207bd0e38c0e97e789" - }, - { - "url": "vendor/codemirror/addon/selection/mark-selection.js", - "revision": "c0240b66ae29bda93e80be5e60c9ed8d" - }, - { - "url": "vendor/codemirror/addon/selection/selection-pointer.js", - "revision": "ae80c5e4d54f8ccb07c6373e66f523a4" - }, - { - "url": "vendor/codemirror/addon/tern/tern.css", - "revision": "4d57ced774b5f3fa9f00dfa398e74819" - }, - { - "url": "vendor/codemirror/addon/tern/tern.js", - "revision": "f6c76d9ec32faccbb8cf23b7a2f6f917" - }, - { - "url": "vendor/codemirror/addon/tern/worker.js", - "revision": "6866b3b6f236f5ae8b89e15b5cf167e1" - }, - { - "url": "vendor/codemirror/addon/wrap/hardwrap.js", - "revision": "359a2bb5a43f724a09f2adbbfe40dd86" - }, - { - "url": "vendor/codemirror/lib/codemirror.css", - "revision": "fc217d502b05f65616356459c0ec1d62" - }, - { - "url": "vendor/codemirror/lib/codemirror.js", - "revision": "82b9491f7e4ecd8ce57812ee3f99014f" - }, - { - "url": "vendor/codemirror/mode/meta.js", - "revision": "3eb5b33a2d2022c4de839b1980511f54" - }, - { - "url": "vendor/codemirror/mode/sql/index.html", - "revision": "91f74a33b9232251058426d1e16e9dce" - }, - { - "url": "vendor/codemirror/mode/sql/sql.js", - "revision": "d21c7a0e713132429cf903be42310a89" - }, - { - "url": "vendor/datatables/datatables.min.css", - "revision": "80026250946cff8a6fc0da995aa02566" - }, - { - "url": "vendor/datatables/datatables.min.js", - "revision": "c1e3d63eab27d1aa7beb191d32340bba" - }, - { - "url": "vendor/datatables/images/sort_asc_disabled.png", - "revision": "d7dc10c78f23615d328581aebcd805eb" - }, - { - "url": "vendor/datatables/images/sort_asc.png", - "revision": "9326ad44ae4bebdedd141e7a53c2a730" - }, - { - "url": "vendor/datatables/images/sort_both.png", - "revision": "9a6486086d09bb38cf66a57cc559ade3" - }, - { - "url": "vendor/datatables/images/sort_desc_disabled.png", - "revision": "bda51e15154a18257b4f955a222fd66f" - }, - { - "url": "vendor/datatables/images/sort_desc.png", - "revision": "1fc418e33fd5a687290258b23fac4e98" - }, - { - "url": "vendor/images/datatables/sort_asc_disabled.png", - "revision": "d7dc10c78f23615d328581aebcd805eb" - }, - { - "url": "vendor/images/datatables/sort_asc.png", - "revision": "9326ad44ae4bebdedd141e7a53c2a730" - }, - { - "url": "vendor/images/datatables/sort_both.png", - "revision": "9a6486086d09bb38cf66a57cc559ade3" - }, - { - "url": "vendor/images/datatables/sort_desc_disabled.png", - "revision": "bda51e15154a18257b4f955a222fd66f" - }, - { - "url": "vendor/images/datatables/sort_desc.png", - "revision": "1fc418e33fd5a687290258b23fac4e98" - }, - { - "url": "vendor/jquery/images/ui-icons_444444_256x240.png", - "revision": "f83a8b8886694eaef4505dd80af7a430" - }, - { - "url": "vendor/jquery/jquery-3.4.1.min.js", - "revision": "220afd743d9e9643852e31a135a9f3ae" - }, - { - "url": "vendor/jquery/jquery-ui.min.css", - "revision": "81188e0c65a0a25d5ebfa7356bf81884" - }, - { - "url": "vendor/jquery/jquery-ui.min.js", - "revision": "8cbf62fc02083afe12a90787cb8f9e3c" - }, - { - "url": "vendor/jstree/jstree.js", - "revision": "66cefd86e219c19be9a32b4a9f6f70b2" - }, - { - "url": "vendor/jstree/jstree.min.js", - "revision": "dc4a6494cf51022fa4a8541d13837166" - }, - { - "url": "vendor/jstree/themes/default-dark/32px.png", - "revision": "eebaf260766f5e0e773f53d3ea4f3e4d" - }, - { - "url": "vendor/jstree/themes/default-dark/40px.png", - "revision": "51286e68b083696edaf4f9fc577e2a2d" - }, - { - "url": "vendor/jstree/themes/default-dark/style.css", - "revision": "6791bf1b92e95d10c8445ac010c429df" - }, - { - "url": "vendor/jstree/themes/default-dark/style.min.css", - "revision": "0236b108a8deddca3b0fae061147a0a6" - }, - { - "url": "vendor/jstree/themes/default-dark/throbber.gif", - "revision": "62be6ed2b189444b472b8000dc187240" - }, - { - "url": "vendor/jstree/themes/default/32px.png", - "revision": "db49c8de4f267eede40a9a8843efcdec" - }, - { - "url": "vendor/jstree/themes/default/40px.png", - "revision": "1f075735090412ed7eb8077d819b19c6" - }, - { - "url": "vendor/jstree/themes/default/style.css", - "revision": "0cf1fc2eadda48373db31569a791ae29" - }, - { - "url": "vendor/jstree/themes/default/style.min.css", - "revision": "8f65ba57d02eadb0c75d0623190d1ee8" - }, - { - "url": "vendor/jstree/themes/default/throbber.gif", - "revision": "9ed4669f524bec38319be63a2ee4ba26" - }, - { - "url": "vendor/jstree/themes/phppgadmin/32px.png", - "revision": "230b82ca8561d9b4111ba8102cae2bb6" - }, - { - "url": "vendor/jstree/themes/phppgadmin/40px.png", - "revision": "1f075735090412ed7eb8077d819b19c6" - }, - { - "url": "vendor/jstree/themes/phppgadmin/style.css", - "revision": "f5a9ca92f2b904247c7b83ce4b054481" - }, - { - "url": "vendor/jstree/themes/phppgadmin/style.min.css", - "revision": "8f65ba57d02eadb0c75d0623190d1ee8" - }, - { - "url": "vendor/jstree/themes/phppgadmin/throbber.gif", - "revision": "9ed4669f524bec38319be63a2ee4ba26" - }, - { - "url": "vendor/less.min.js", - "revision": "df377f04717c4d59bfdec987dff69a0e" - }, - { - "url": "vendor/select2/css/select2.css", - "revision": "887b34f2cf309344f3e0b96aaab2b15d" - }, - { - "url": "vendor/select2/css/select2.min.css", - "revision": "d44571114a90b9226cd654d3c7d9442c" - }, - { - "url": "vendor/select2/js/i18n/ar.js", - "revision": "a8bb27ec698c86bde72c8a6f13a8e9b4" - }, - { - "url": "vendor/select2/js/i18n/az.js", - "revision": "498dc667b34eb0fddc31c4e92330d1aa" - }, - { - "url": "vendor/select2/js/i18n/bg.js", - "revision": "89cba4df3c8694fcb33098dd1646cac1" - }, - { - "url": "vendor/select2/js/i18n/ca.js", - "revision": "2eaad4eb1950a0d542812c58d30c93dd" - }, - { - "url": "vendor/select2/js/i18n/cs.js", - "revision": "a68bcd293adcd6d9ac0b8527c9b39189" - }, - { - "url": "vendor/select2/js/i18n/da.js", - "revision": "cbf897a0ae53b0cffbbe3f50d8b1b136" - }, - { - "url": "vendor/select2/js/i18n/de.js", - "revision": "366d0aacb55f4929cc50bb977abec674" - }, - { - "url": "vendor/select2/js/i18n/el.js", - "revision": "5629ce65500f96c62414a27c6eaed62c" - }, - { - "url": "vendor/select2/js/i18n/en.js", - "revision": "05649b26c08630d2b703bc1e9ef93c7b" - }, - { - "url": "vendor/select2/js/i18n/es.js", - "revision": "dc9dbf9d65df3f69e6b6d650c97bd967" - }, - { - "url": "vendor/select2/js/i18n/et.js", - "revision": "c3953fb90b6bb9669697f5f12e802a66" - }, - { - "url": "vendor/select2/js/i18n/eu.js", - "revision": "11b925456433eaab07e35b8dca7046f5" - }, - { - "url": "vendor/select2/js/i18n/fa.js", - "revision": "98e52839b583e1ca66f4360a4f43f9b0" - }, - { - "url": "vendor/select2/js/i18n/fi.js", - "revision": "659847deefdcfd7e4f8f2ed924d360f4" - }, - { - "url": "vendor/select2/js/i18n/fr.js", - "revision": "b06a3340de45535358a0bc33fa2b9739" - }, - { - "url": "vendor/select2/js/i18n/gl.js", - "revision": "78a87f7c0a519118fbe4f583ff2a3b3f" - }, - { - "url": "vendor/select2/js/i18n/he.js", - "revision": "222d90ee0344ee8beeb5fb1835c93c76" - }, - { - "url": "vendor/select2/js/i18n/hi.js", - "revision": "116a90b7111b953cd092e30a034d6913" - }, - { - "url": "vendor/select2/js/i18n/hr.js", - "revision": "e1d2c70b4df50d98d2c35856804d38be" - }, - { - "url": "vendor/select2/js/i18n/hu.js", - "revision": "db45641f10b2412801d5872e40ef7c2f" - }, - { - "url": "vendor/select2/js/i18n/id.js", - "revision": "6ee6c9c64b945bb8a0f42d247ee0d868" - }, - { - "url": "vendor/select2/js/i18n/is.js", - "revision": "808c7d47acb59537728bc74fdeb0ad0d" - }, - { - "url": "vendor/select2/js/i18n/it.js", - "revision": "bae1661dbb77c15384655faffc10a3fa" - }, - { - "url": "vendor/select2/js/i18n/ja.js", - "revision": "19cf1ce8a03de84ea668e8fec99a8c80" - }, - { - "url": "vendor/select2/js/i18n/km.js", - "revision": "6074a9c5575cfaa8b3c1dccdb3133dde" - }, - { - "url": "vendor/select2/js/i18n/ko.js", - "revision": "74b17541834ff1bb8c5651d321bd2281" - }, - { - "url": "vendor/select2/js/i18n/lt.js", - "revision": "a0783b1bd1594b7c584564cc68b6c6e5" - }, - { - "url": "vendor/select2/js/i18n/lv.js", - "revision": "07fe2a580d17cba308a972fdabbcaea0" - }, - { - "url": "vendor/select2/js/i18n/mk.js", - "revision": "4986d7fc3ff3ed9a5f8af646f5ca587b" - }, - { - "url": "vendor/select2/js/i18n/ms.js", - "revision": "23e7b436957996a10f451bc8d688764d" - }, - { - "url": "vendor/select2/js/i18n/nb.js", - "revision": "137e184004aaec03977a4caf1cca30f4" - }, - { - "url": "vendor/select2/js/i18n/nl.js", - "revision": "c363ace8aa0501526c17a61ab2fb854f" - }, - { - "url": "vendor/select2/js/i18n/pl.js", - "revision": "76465b54a6b0eb6b2204143a0827d0ca" - }, - { - "url": "vendor/select2/js/i18n/pt-BR.js", - "revision": "9efbbac4fda8d23225df16dddecb2718" - }, - { - "url": "vendor/select2/js/i18n/pt.js", - "revision": "5d6ccc53b347b155e1af6afb1bc5fe94" - }, - { - "url": "vendor/select2/js/i18n/ro.js", - "revision": "1ddc2b9980dcdd1008761149e0349a8b" - }, - { - "url": "vendor/select2/js/i18n/ru.js", - "revision": "d83609abf2e0ba927b9ec472bf47e180" - }, - { - "url": "vendor/select2/js/i18n/sk.js", - "revision": "a0f1a818d09228a87ae105d09fdee80c" - }, - { - "url": "vendor/select2/js/i18n/sr-Cyrl.js", - "revision": "2f3047aad49eedd75dd5dacc092a7e02" - }, - { - "url": "vendor/select2/js/i18n/sr.js", - "revision": "157bc6eb978e9a35985bc655d09ac258" - }, - { - "url": "vendor/select2/js/i18n/sv.js", - "revision": "2b21bb3f61100fd656b41d16e25e2f80" - }, - { - "url": "vendor/select2/js/i18n/th.js", - "revision": "2a4ece4c4355b7efd9e9591a53b3edc1" - }, - { - "url": "vendor/select2/js/i18n/tr.js", - "revision": "c1925d8817db211164145dc47b18d333" - }, - { - "url": "vendor/select2/js/i18n/uk.js", - "revision": "3d56f311192daf9ce44246c52777789f" - }, - { - "url": "vendor/select2/js/i18n/vi.js", - "revision": "3520aa7bdea8234161b2c18f631417a0" - }, - { - "url": "vendor/select2/js/i18n/zh-CN.js", - "revision": "419002d3c6c10ec9618ce6275c1057d1" - }, - { - "url": "vendor/select2/js/i18n/zh-TW.js", - "revision": "c021537edf2c555f149509150ff986e3" - }, - { - "url": "vendor/select2/js/select2.full.js", - "revision": "a95323cb476000ee17d7a252786df963" - }, - { - "url": "vendor/select2/js/select2.full.min.js", - "revision": "da607360bcc65284a197ada3d68d5439" - }, - { - "url": "vendor/select2/js/select2.js", - "revision": "b8f26dd6733ccc6263cb273e8f821dab" - }, - { - "url": "vendor/select2/js/select2.min.js", - "revision": "e87ca4c3554f7b9e693605ce12d3a234" - } -]); - - console.log(`Yay! Workbox is loaded 🎉`); - - workbox.routing.registerRoute( - /\/assets\/css/, - new workbox.strategies.CacheFirst({ - cacheName: 'vendor-local-css', - plugins: [ - new workbox.cacheableResponse.CacheableResponse({ statuses: [0, 200] }), - ], - }) - ); - workbox.routing.registerRoute( - /\/assets\/js/, - new workbox.strategies.CacheFirst({ - cacheName: 'vendor-local-js', - plugins: [ - new workbox.cacheableResponse.CacheableResponse({ statuses: [0, 200] }), - ], - }) - ); - workbox.routing.registerRoute( - /\/img/, - new workbox.strategies.CacheFirst({ - cacheName: 'image-files', - plugins: [ - new workbox.cacheableResponse.CacheableResponse({ statuses: [0, 200] }), - ], - }) - ); - - // Cache the Google Fonts stylesheets with a stale-while-revalidate strategy. - workbox.routing.registerRoute( - /^https:\/\/fonts\.googleapis\.com/, - new workbox.strategies.StaleWhileRevalidate({ - cacheName: 'google-fonts-stylesheets', - }) - ); - - // Cache the underlying font files with a cache-first strategy for 1 year. - workbox.routing.registerRoute( - /^https:\/\/fonts\.gstatic\.com/, - new workbox.strategies.CacheFirst({ - cacheName: 'google-fonts-webfonts', - plugins: [ - new workbox.cacheableResponse.CacheableResponse({ statuses: [0, 200] }), - ], - }) - ); -} else { - console.log(`Boo! Workbox didn't load 😬`); -} +registerRoute( + ({ url }) => + url.origin === 'https://fonts.googleapis.com' || + url.origin === 'https://fonts.gstatic.com', + new StaleWhileRevalidate({ + cacheName: 'google-fonts', + plugins: [new ExpirationPlugin({ maxEntries: 20 })], + }) +); diff --git a/assets/templates/browser.twig b/assets/templates/browser.twig index 7754ae38..a03f79a9 100644 --- a/assets/templates/browser.twig +++ b/assets/templates/browser.twig @@ -2,7 +2,7 @@ <html xml:lang="{{lang.applocale}}" lang="{{lang.applocale}}" dir="{{lang.applangdir}}"> <head data-headertemplate="{{headertemplate}}"> - <link rel="stylesheet" href="{{subfolder}}/assets/vendor/jstree/themes/phppgadmin/style.css" /> {% include 'components/common_head.twig' %} + {% include 'components/common_head.twig' %} <script src="{{subfolder}}/assets/vendor/jstree/jstree.min.js"></script> <style type="text/css"> @@ -15,55 +15,8 @@ </head> <body class="browser"> - - <div dir="{{lang.applangdir}}"> - - <div class="logo"> - <a href="{{subfolder}}/" target="_parent">{{appName}}</a> - </div> - <div class="refreshTree"> - <a href="{{subfolder}}/src/views/browser" target="browser"> - <img src="{{icon.Refresh}}" alt="{{lang.strrefresh}}" title="{{lang.strrefresh}}" /> - </a> - </div> - - <div id="lazy" class="demo"></div> - - </div> - - <script> - window.jsTree = $('#lazy').jstree({ - "state": { - "key": "jstree" - }, - "plugins": ["state"], - 'core': { - 'data': { - "url": function (node) { - if (node.id === '#') { - return '{{subfolder}}/src/views/browser?action=tree'; - } else { - return node.original.url; - } - } - } - } - }); - if(parent.frames && parent.frames.detail) { - parent.frames.detail.jsTree=window.jsTree; - } - - $('#lazy').on("activate_node.jstree", function (e, data) { - if (window.parent.frames.detail) { - window.parent.frames.detail.location.replace(data.node.a_attr.href); - } - }); - $('#lazy').on("loaded.jstree", function (e, data) { - $('#lazy').data('jstree').show_dots(); - }); - $('#lazy').on('click','.jstree-anchor',function(){ - console.log(this); - }); +{% include 'components/browser_body.twig' %} + <script src="{{subfolder}}/assets/js/jstree_events.js"> </script> </body> diff --git a/assets/templates/components/browser_body.twig b/assets/templates/components/browser_body.twig new file mode 100644 index 00000000..dbc532fa --- /dev/null +++ b/assets/templates/components/browser_body.twig @@ -0,0 +1,16 @@ + + <div dir="{{lang.applangdir}}"> + + <div class="logo"> + <a href="{{subfolder}}/" target="_parent">{{appName}}</a> + </div> + <div class="refreshTree" id="refreshTree"> + <a href="#"> + <img src="{{icon.Refresh}}" alt="{{lang.strrefresh}}" title="{{lang.strrefresh}}" /> + </a> + </div> + + <div id="lazy" class="demo"></div> + + </div> + diff --git a/assets/templates/components/common_body.twig b/assets/templates/components/common_body.twig new file mode 100644 index 00000000..81028d83 --- /dev/null +++ b/assets/templates/components/common_body.twig @@ -0,0 +1,22 @@ +<body data-controller="{{ controller_name }}" class="{{ bodyClass }}" {{ onload }}> + {% if includeJsTree %} + <div class="flexbox_wrapper"> + <div id="masking_overlay"></div> + <div id="browser_container"> + + <div class="browser_container"> + <div class="browser" name="browser" id="browser"> + {% include 'components/browser_body.twig' %} + <script src="{{ subfolder }}/assets/js/jstree_events.js"></script> + </div> + </div></div> + <div class="splitter"> + </div> + <div id="detail" class="detail_container" > + + + {% else %} + {#<iframe src="{{subfolder}}/src/views/browser" name="browser" id="browser" class="browser_container" frameborder="0" /> + <p>Your browser does not support iframes.</p> + </iframe>#} + {% endif %} diff --git a/assets/templates/components/common_head.twig b/assets/templates/components/common_head.twig index 3a44349a..514d3d87 100644 --- a/assets/templates/components/common_head.twig +++ b/assets/templates/components/common_head.twig @@ -1,5 +1,6 @@ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> {% set development_assets = true %} + <link rel="stylesheet" href="{{subfolder}}/assets/vendor/jstree/themes/phppgadmin/style.css" /> <link rel="stylesheet" href="{{ subfolder }}/assets/themes/global.css" type="text/css" id="cssmain" /> <link rel="stylesheet" href="{{ subfolder }}/assets/themes/{{ theme }}/global.css" type="text/css" id="csstheme" /> <link rel="stylesheet" href="{{ subfolder }}/assets/vendor/jquery/jquery-ui.min.css" type="text/css" /> @@ -8,14 +9,22 @@ <script src="{{ subfolder }}/assets/vendor/jquery/jquery-3.4.1.min.js"></script> <script src="{{ subfolder }}/assets/vendor/jquery/jquery-ui.min.js"></script> +<script src="{{ subfolder }}/assets/vendor/jquery-resizable.js"></script> + <script src="{{ subfolder }}/assets/vendor/jstree/jstree.min.js"></script> + <style type="text/css"> + .refreshTree { position: absolute; right: 0; z-index: 1000; } + .splitter { + background: url("{{subfolder}}/assets/images/vsizegrip.png") center center no-repeat #b0bec5 !important + } + </style> {{ script|raw }}<!-- prettier-ignore-start --> <script> - window.stateObj = { + globalThis.stateObj = { {% for key, value in params %} '{{key}}': "{{value}}", {% endfor %} @@ -27,10 +36,13 @@ path:"{{path}}", query_string:"{{query_string}}", strconfdropcred:"{{lang.strconfdropcred}}", + origin:globalThis.location.origin, + url:"{{url}}", + href:globalThis.location.href, + guessedSubfolder:(''+globalThis.location.pathname).replace("/{{path}}",''), + pathname:globalThis.location.pathname }; - if (stateObj.reload !== "none" && window.jsTree) { - window.jsTree.jstree('refresh') - } + </script> diff --git a/assets/templates/components/tabs.twig b/assets/templates/components/tabs.twig index 9a4bb825..98b951ba 100644 --- a/assets/templates/components/tabs.twig +++ b/assets/templates/components/tabs.twig @@ -1,8 +1,8 @@ -<table class="tabs" data-controller="{{controller_name}}"> - <tr> +<div class="tabs" data-controller="{{controller_name}}"> + {% for tab in tabs %} - <td style="width: {{width}};" class="tab {{tab.active}}"> + <div class="tab {{tab.active}}"> <a href="{{tab.tablink}}"> {% if tab.iconurl %} <span class="icon"><img src="{{tab.iconurl}}" alt="{{tab.title}}" /></span> @@ -10,9 +10,10 @@ <span class="label">{{tab.title}}</span> </a> {% if tab.helpurl %} <a class="help" href="{{tab.helpurl}}" title="{{lang.strhelp}}" target="phppgadminhelp">{{lang.strhelpicon}}</a> {% endif %} - </td> + </div> {% endfor %} - </tr> -</table>
\ No newline at end of file + +</div> +<div class="clearfix"> </div>
\ No newline at end of file diff --git a/assets/templates/iframe_view.twig b/assets/templates/deprecated.iframe_view.twig index ee8f4d10..ee8f4d10 100644 --- a/assets/templates/iframe_view.twig +++ b/assets/templates/deprecated.iframe_view.twig diff --git a/assets/templates/footer.twig b/assets/templates/footer.twig index 835dcdd9..d5c41e6d 100644 --- a/assets/templates/footer.twig +++ b/assets/templates/footer.twig @@ -1,7 +1,31 @@ {{script_footer|raw}} {% if print_bottom_link == true %} <a data-footertemplate="{{footer_template}}" href="#" class="bottom_link">{{lang.strgotoppage}}</a> {% endif %} +<script src="{{subfolder}}/assets/js/toplinks_behavior.js" type="text/javascript"></script> <script src="{{subfolder}}/assets/js/footer_scripts.js" type="text/javascript"></script> +<script type="text/javascript"> +var dir = '{{lang.applangdir}}'; + +window.onpopstate = function (event) { + console.log('onpopstate', { + state: event.state + }); + if (event.state && event.state.realurl) { + let ifr = document.getElementById('detail'), + realUrl=event.state.realurl, + detailLocation=ifr.contentWindow.location.href; + //console.log({detailLocation,realUrl}); + ifr.contentWindow.location.replace(event.state.realurl); + } +}; +if('serviceWorker' in navigator) { + navigator.serviceWorker.register('{{subfolder}}/assets/sw.dev.js').then(function(registration) { + console.log('Service Worker Registered'); + }).catch(warn=>{ + console.warn(warn); + }) +} +</script> </body> </html>
\ No newline at end of file diff --git a/assets/templates/footer_iframe.twig b/assets/templates/footer_iframe.twig index 5c2dfe3e..a958348c 100644 --- a/assets/templates/footer_iframe.twig +++ b/assets/templates/footer_iframe.twig @@ -1,44 +1,25 @@ <script type="text/javascript"> var dir = '{{lang.applangdir}}'; -jQuery('#browser_container').resizable({ - handles: (dir === 'ltr') ? "e" : "w", - start: function () { - jQuery('#masking_overlay').css('display', 'block'); - }, - stop: function () { - jQuery('#masking_overlay').css('display', 'none'); - } -}); + window.onpopstate = function (event) { console.log('onpopstate', { state: event.state }); if (event.state && event.state.realurl) { - var ifr = document.getElementById('detail') + let ifr = document.getElementById('detail'), + realUrl=event.state.realurl, + detailLocation=ifr.contentWindow.location.href; + //console.log({detailLocation,realUrl}); ifr.contentWindow.location.replace(event.state.realurl); } }; if('serviceWorker' in navigator) { - navigator.serviceWorker.register('assets/sw.dev.js').then(function(registration) { + navigator.serviceWorker.register('{{subdomain}}/assets/sw.dev.js').then(function(registration) { console.log('Service Worker Registered'); }).catch(warn=>{ console.warn(warn); }) } -window.addEventListener("message", (event) => { - const {origin,isTrusted,data}=event,browserIframe= document.getElementById('browser'); - if(!isTrusted||origin!==location.origin) { - return; - } - if(data.reload_browser && browserIframe) { - try { - browserIframe.contentWindow.jsTree.jstree('refresh') - }catch(err){ - console.warn(err); - } - } - console.log(event); -}, false); </script> </body> diff --git a/assets/templates/intro_view.twig b/assets/templates/intro_view.twig new file mode 100644 index 00000000..f6e2c16c --- /dev/null +++ b/assets/templates/intro_view.twig @@ -0,0 +1,23 @@ +{% include 'header.twig' %} + +<body class="flexbox_body {{ lang.applangdir }}"> + + + <div class="flexbox_wrapper"> + <div id="masking_overlay"></div> + <div id="browser_container"> + <div class="browser_container"> + <div class="browser" name="browser" id="browser"> + {% include 'components/browser_body.twig' %} + <script src="{{subfolder}}/assets/js/jstree_events.js"> </script> + + </div> + </div> + </div> + + <iframe src="{{ subfolder }}{{ url }}" name="detail" id="detail" class="detail_container" frameborder="0" /> + </div> + {% include 'footer_iframe.twig' %} + + +</body> diff --git a/assets/themes/global.css b/assets/themes/global.css index 214f7d41..d4b0e9a5 100644 --- a/assets/themes/global.css +++ b/assets/themes/global.css @@ -33,57 +33,98 @@ html body.sql_edit #sqlform #queryedition > .CodeMirror .CodeMirror-scroll .Code html body.sql_edit #sqlform #queryedition #query { min-height: 70px; } +html body #detail.detail_container, html body.detailbody { padding-top: 90px; margin-left: 10px !important; padding-bottom: 20px; } -html body.detailbody table.tabs { +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 { + flex: 1 1 auto; + flex-direction: column; +} +html body #detail.detail_container > table.tabs, +html body.detailbody > table.tabs { position: fixed; top: 58px; margin-left: -10px; z-index: 50; } -html body.detailbody table.tabs tbody tr td { +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#data td, html body.detailbody table#data td { white-space: nowrap; } +html body #detail.detail_container table#data td.opbutton1, html body.detailbody table#data td.opbutton1, +html body #detail.detail_container table#data td.opbutton2, html body.detailbody table#data td.opbutton2, +html body #detail.detail_container table#data td.opbutton3, html body.detailbody table#data td.opbutton3 { border: 0 none; padding-left: 1px; padding-right: 1px; } +html body #detail.detail_container table#data td.opbutton1 a, html body.detailbody table#data td.opbutton1 a, +html body #detail.detail_container table#data td.opbutton2 a, html body.detailbody table#data td.opbutton2 a, +html body #detail.detail_container table#data td.opbutton3 a, html body.detailbody table#data td.opbutton3 a { margin-left: 2px; margin-right: 2px; } +html body #detail.detail_container table.will_be_datatable td, html body.detailbody table.will_be_datatable td { white-space: nowrap; } +html body #detail.detail_container table.will_be_datatable td.opbutton1, html body.detailbody table.will_be_datatable td.opbutton1, +html body #detail.detail_container table.will_be_datatable td.opbutton2, html body.detailbody table.will_be_datatable td.opbutton2, +html body #detail.detail_container table.will_be_datatable td.opbutton3, html body.detailbody table.will_be_datatable td.opbutton3 { border: 0 none; padding-left: 1px; padding-right: 1px; } +html body #detail.detail_container table.will_be_datatable td.opbutton1 a, html body.detailbody table.will_be_datatable td.opbutton1 a, +html body #detail.detail_container table.will_be_datatable td.opbutton2 a, html body.detailbody table.will_be_datatable td.opbutton2 a, +html body #detail.detail_container table.will_be_datatable td.opbutton3 a, html body.detailbody table.will_be_datatable td.opbutton3 a { margin-left: 2px; margin-right: 2px; } +html body #detail.detail_container table.will_be_datatable td.comment, html body.detailbody table.will_be_datatable td.comment { white-space: normal; } +html body #detail.detail_container table tr.data1 td.opbutton1 a, html body.detailbody table tr.data1 td.opbutton1 a, +html body #detail.detail_container table tr.data2 td.opbutton2 a, html body.detailbody table tr.data2 td.opbutton2 a, +html body #detail.detail_container table tr.data3 td.opbutton3 a, html body.detailbody table tr.data3 td.opbutton3 a { -webkit-background-clip: border-box; -webkit-background-origin: padding-box; @@ -114,6 +155,29 @@ 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; + clear: both; + display: block; + width: 40px; +} +html body #detail.detail_container table.tabs { + position: relative; + margin-right: -10px; +} +html body #detail.detail_container .topbar { + position: fixed; +} +html body #detail.detail_container .topbar .toplink { + width: 160px; + margin-right: 110px; +} +html body #detail.detail_container .trail { + position: fixed; +} html body .navlink li a { -webkit-background-clip: border-box; -webkit-background-origin: padding-box; @@ -154,59 +218,91 @@ 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 { - display: flex; height: 100%; margin: 0; + display: flex; + flex-direction: row; + border: 1px solid silver; + overflow: hidden; + /* avoid browser level touch actions */ + xtouch-action: none; +} +html body.flexbox_body .flexbox_wrapper #browser_container { + flex: 0 0 auto; + /* only manually resize */ + width: 250px; + min-height: 200px; + min-width: 150px; + white-space: nowrap; + color: white; } -html body.flexbox_body .flexbox_wrapper .ui-resizable-helper { - border: 2px dotted #00f; -} -html body.flexbox_body .flexbox_wrapper #masking_overlay { - position: fixed; - top: 0; - width: 100%; - bottom: 0; - z-index: 80; - display: none; -} -html body.flexbox_body .flexbox_wrapper > .detail_container { - height: 100%; - width: 100%; - margin: 0px; - padding: 0px; - text-align: left; - float: left; - flex: 1 1; +html body.flexbox_body .flexbox_wrapper #browser_container .refreshTree { + position: absolute; + left: 200px; + z-index: 1000; + padding: 5px; + width: 40px; } -html body.flexbox_body .flexbox_wrapper > #browser_container { - height: 100%; - margin: 0px; - padding: 0px; - text-align: left; - float: left; - flex: 0 0 300px; +html body.flexbox_body .flexbox_wrapper .splitter { + flex: 0 0 auto; + width: 8px; + min-height: 200px; + cursor: col-resize; } -html body.flexbox_body .flexbox_wrapper > #browser_container > .browser_container { - height: 100%; - margin: 0px; - padding: 0px; - text-align: left; - float: left; +html body.flexbox_body .flexbox_wrapper #detail_container { + flex: 1 1 auto; + /* resizable */ + padding: 10px; width: 100%; -} -html body.flexbox_body .flexbox_wrapper > #browser_container.ui-resizable { - width: 300px; - flex: unset; - border-right: 8px solid #cfd8dc; -} -html body.flexbox_body .flexbox_wrapper > #browser_container.ui-resizable .ui-resizable-handle.ui-resizable-e { - width: 8px; - right: -8px; - background: #84a0ad; - top: 45%; - height: 50px; + min-height: 200px; + min-width: 200px; + background: #eee; } html body.flexbox_body.rtl .flexbox_wrapper > .detail_container { float: right; @@ -237,6 +333,7 @@ html body.browser { html body.browser .refreshTree { float: right; text-align: right; + margin: 10px; padding: 0 3px; } html body.browser .webfx-tree-row { @@ -278,15 +375,22 @@ html body .arg_icon { padding-right: 5pt; padding-left: 5pt; } -html body .topbar { +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: fixed; + position: sticky; z-index: 100; width: 100%; top: 27px; diff --git a/assets/themes/global.less b/assets/themes/global.less index 7980a2d3..7ea0b9ef 100644 --- a/assets/themes/global.less +++ b/assets/themes/global.less @@ -40,28 +40,43 @@ html { } } } - + #detail.detail_container, &.detailbody { padding-top: 90px; //margin-bottom: -90px; margin-left: 10px !important; padding-bottom: 20px; - - table { - &.tabs { - position: fixed; - top: 58px; - z-index: 50; - margin-left: -10px; - z-index: 50; - - tbody { - tr { - td { - white-space: nowrap; - } + 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); + &#data { td { @@ -138,8 +153,34 @@ html { 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: 160px; + margin-right: 110px; + } + } + .trail { + position: fixed; + } + + } .navlink { li { a { @@ -192,22 +233,58 @@ html { margin: 0; .flexbox_wrapper { - display: flex; - height: 100%; + height: 100%; margin: 0; - .ui-resizable-helper { - border: 2px dotted #00f; - } + + 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; - #masking_overlay { - position: fixed; - top: 0; - width: 100%; - bottom: 0; - z-index: 80; - display: none; + .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%; @@ -216,16 +293,16 @@ html { padding: 0px; text-align: left; float: left; - flex: 1 1; - } - + flex: 1 1 1300px; + }*/ +/* & > #browser_container { height: 100%; margin: 0px; padding: 0px; text-align: left; float: left; - flex: 0 0 300px; + flex: 1 2 300px; & > .browser_container { height: 100%; @@ -238,7 +315,7 @@ html { &.ui-resizable { width: 300px; - flex: unset; + //flex: unset; border-right: 8px solid #cfd8dc; .ui-resizable-handle.ui-resizable-e { @@ -250,7 +327,8 @@ html { } } } - } + */ + &.rtl { .flexbox_wrapper { @@ -261,6 +339,7 @@ html { & > #browser_container { float: right; + flex: 0 0 300px; &.ui-resizable { @@ -291,6 +370,7 @@ html { .refreshTree { float: right; text-align: right; + margin: 10px; padding: 0 3px; } @@ -345,9 +425,15 @@ html { padding-right: 5pt; padding-left: 5pt; } - - .topbar { + .fixed-top { + display: flex; position: fixed; + top: 0; + left: 0; + right: 0; + } + .topbar { + position: sticky; z-index: 100; width: 100%; top: 0; @@ -355,7 +441,7 @@ html { } .trail { - position: fixed; + position: sticky; z-index: 100; width: 100%; top: 27px; diff --git a/assets/vendor/jquery-resizable.js b/assets/vendor/jquery-resizable.js new file mode 100644 index 00000000..3562bd31 --- /dev/null +++ b/assets/vendor/jquery-resizable.js @@ -0,0 +1,197 @@ +/// <reference path="../bower_components/jquery/dist/jquery.js" /> +/* +jquery-resizable +Version 0.35 - 11/18/2019 +© 2015-2019 Rick Strahl, West Wind Technologies +www.west-wind.com +Licensed under MIT License +*/ +(function(factory, undefined) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['jquery'], factory); + } else if (typeof module === 'object' && typeof module.exports === 'object') { + // CommonJS + module.exports = factory(require('jquery')); + } else { + // Global jQuery + factory(jQuery); + } +}(function($, undefined) { + + if ($.fn.resizableSafe) + return; + + $.fn.resizableSafe = function fnResizable(options) { + var defaultOptions = { + // selector for handle that starts dragging + handleSelector: null, + // resize the width + resizeWidth: true, + // resize the height + resizeHeight: true, + // the side that the width resizing is relative to + resizeWidthFrom: 'right', + // the side that the height resizing is relative to + resizeHeightFrom: 'bottom', + // hook into start drag operation (event passed) + onDragStart: null, + // hook into stop drag operation (event passed) + onDragEnd: null, + // hook into each drag operation (event passed) + onDrag: null, + // disable touch-action on $handle + // prevents browser level actions like forward back gestures + touchActionNone: true, + // instance id + instanceId: null + }; + if (typeof options == "object") + defaultOptions = $.extend(defaultOptions, options); + + return this.each(function () { + var opt = $.extend({}, defaultOptions); + if (!opt.instanceId) + opt.instanceId = "rsz_" + new Date().getTime(); + + var startPos, startTransition; + + // get the element to resize + var $el = $(this); + var $handle; + + if (options === 'destroy') { + opt = $el.data('resizable'); + if (!opt) + return; + + $handle = getHandle(opt.handleSelector, $el); + $handle.off("mousedown." + opt.instanceId + " touchstart." + opt.instanceId); + if (opt.touchActionNone) + $handle.css("touch-action", ""); + $el.removeClass("resizable"); + return; + } + + $el.data('resizable', opt); + + // get the drag handle + + $handle = getHandle(opt.handleSelector, $el); + + if (opt.touchActionNone) + $handle.css("touch-action", "none"); + + $el.addClass("resizable"); + $handle.on("mousedown." + opt.instanceId + " touchstart." + opt.instanceId, startDragging); + + function noop(e) { + e.stopPropagation(); + e.preventDefault(); + }; + + function startDragging(e) { + // Prevent dragging a ghost image in HTML5 / Firefox and maybe others + if ( e.preventDefault ) { + e.preventDefault(); + } + + startPos = getMousePos(e); + startPos.width = parseInt($el.width(), 10); + startPos.height = parseInt($el.height(), 10); + + startTransition = $el.css("transition"); + $el.css("transition", "none"); + + if (opt.onDragStart) { + if (opt.onDragStart(e, $el, opt) === false) + return; + } + + $(document).on('mousemove.' + opt.instanceId, doDrag); + $(document).on('mouseup.' + opt.instanceId, stopDragging); + if (window.Touch || navigator.maxTouchPoints) { + $(document).on('touchmove.' + opt.instanceId, doDrag); + $(document).on('touchend.' + opt.instanceId, stopDragging); + } + $(document).on('selectstart.' + opt.instanceId, noop); // disable selection + $("iframe").css("pointer-events","none"); + } + + function doDrag(e) { + + var pos = getMousePos(e), newWidth, newHeight; + + if (opt.resizeWidthFrom === 'left') + newWidth = startPos.width - pos.x + startPos.x; + else + newWidth = startPos.width + pos.x - startPos.x; + + if (opt.resizeHeightFrom === 'top') + newHeight = startPos.height - pos.y + startPos.y; + else + newHeight = startPos.height + pos.y - startPos.y; + + if (!opt.onDrag || opt.onDrag(e, $el, newWidth, newHeight, opt) !== false) { + if (opt.resizeHeight) + $el.height(newHeight); + + if (opt.resizeWidth) + $el.width(newWidth); + } + } + + function stopDragging(e) { + e.stopPropagation(); + e.preventDefault(); + + $(document).off('mousemove.' + opt.instanceId); + $(document).off('mouseup.' + opt.instanceId); + + if (window.Touch || navigator.maxTouchPoints) { + $(document).off('touchmove.' + opt.instanceId); + $(document).off('touchend.' + opt.instanceId); + } + $(document).off('selectstart.' + opt.instanceId, noop); + + // reset changed values + $el.css("transition", startTransition); + $("iframe").css("pointer-events","auto"); + + if (opt.onDragEnd) + opt.onDragEnd(e, $el, opt); + + return false; + } + + function getMousePos(e) { + var pos = { x: 0, y: 0, width: 0, height: 0 }; + if (typeof e.clientX === "number") { + pos.x = e.clientX; + pos.y = e.clientY; + } else if (e.originalEvent.touches) { + pos.x = e.originalEvent.touches[0].clientX; + pos.y = e.originalEvent.touches[0].clientY; + } else + return null; + + return pos; + } + + function getHandle(selector, $el) { + if (selector && selector.trim()[0] === ">") { + selector = selector.trim().replace(/^>\s*/, ""); + return $el.find(selector); + } + + // Search for the selector, but only in the parent element to limit the scope + // This works for multiple objects on a page (using .class syntax most likely) + // as long as each has a separate parent container. + return selector ? $el.parent().find(selector) : $el; + } + }); + }; + + if (!$.fn.resizable) + $.fn.resizable = $.fn.resizableSafe; +})); diff --git a/composer.json b/composer.json index 6aedb29f..6ed31196 100644 --- a/composer.json +++ b/composer.json @@ -23,6 +23,7 @@ "slim/flash": "^0.4.0", "slim/slim": "^3.6", "slim/twig-view": "~2.5.1", + "symfony/polyfill-php74": "^1.20", "symfony/yaml": "^5.1", "twig/twig": "~3" }, @@ -56,7 +57,8 @@ "PHPPgAdmin\\Traits\\": "src/traits", "PHPPgAdmin\\Database\\Traits\\": "src/database/databasetraits", "PHPPgAdmin\\Help\\": "src/help", - "PHPPgAdmin\\Translations\\": "src/translations" + "PHPPgAdmin\\Translations\\": "src/translations", + "PHPPgAdmin\\Interfaces\\": "src/interfaces" }, "files": [ "src/lib.inc.php", diff --git a/composer.lock b/composer.lock index 6da8c93f..7259e07b 100644 --- a/composer.lock +++ b/composer.lock @@ -685,6 +685,86 @@ "time": "2020-07-14T12:35:20+00:00" }, { + "name": "symfony/polyfill-php74", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php74.git", + "reference": "b3a1d2953afb225535abdf966c91dcb3c60786db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php74/zipball/b3a1d2953afb225535abdf966c91dcb3c60786db", + "reference": "b3a1d2953afb225535abdf966c91dcb3c60786db", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php74\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php74/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { "name": "symfony/yaml", "version": "v5.1.7", "source": { diff --git a/mk_linters.mk b/mk_linters.mk index e4cc0ff2..d20c57f4 100644 --- a/mk_linters.mk +++ b/mk_linters.mk @@ -164,7 +164,7 @@ lint: $(executable) --ignore-fails --exclude vendor src -fixers: dependency_analysis lint csfixer_dry psalm phpstan phpcs +fixers: lint csfixer dependency_analysis phpcs psalm phpstan diff --git a/src/classes/ADORecordSet.php b/src/classes/ADORecordSet.php index feae209c..674ed8e1 100644 --- a/src/classes/ADORecordSet.php +++ b/src/classes/ADORecordSet.php @@ -13,7 +13,7 @@ use Countable; /** * Extends ADORecordSet to let correct inference on PHPDoc params. */ -class ADORecordSet extends ADODBRecordsetClass implements Countable +class ADORecordSet extends ADODBRecordsetClass implements Countable, Interfaces\RecordSet { /** * Returns the recordCount. @@ -28,7 +28,7 @@ class ADORecordSet extends ADODBRecordsetClass implements Countable * * @return int number of rows or -1 if this is not supported */ - public function recordCount() + public function RecordCount() { return $this->count(); } @@ -40,8 +40,12 @@ class ADORecordSet extends ADODBRecordsetClass implements Countable * * @return ADOFieldObject the field */ - public function fetchField($fieldoffset = -1): ADOFieldObject + public function FetchField($fieldoffset = -1): ADOFieldObject { - return parent::fetchField(); + return parent::FetchField(); + } + + public function MoveNext():void { +parent::MoveNext(); } } diff --git a/src/classes/ArrayRecordSet.php b/src/classes/ArrayRecordSet.php index 2668321d..17c2b43e 100644 --- a/src/classes/ArrayRecordSet.php +++ b/src/classes/ArrayRecordSet.php @@ -6,6 +6,7 @@ namespace PHPPgAdmin; +use ADOFieldObject; use Countable; /** @@ -21,7 +22,7 @@ use Countable; * * Id: ArrayRecordSet.php,v 1.3 2007/01/10 01:46:28 soranzo Exp $ */ -class ArrayRecordSet implements Countable +class ArrayRecordSet implements Countable , Interfaces\RecordSet { public $EOF = false; @@ -51,13 +52,25 @@ class ArrayRecordSet implements Countable { return \count($this->_array); } + function FetchField($off = 0): ADOFieldObject + { + // offsets begin at 0 + + $o= new ADOFieldObject(); + + $o->name= array_keys($this->fields)[$off]??null; + $value = $this->fields[$o->name??random_bytes(64)]??null; + $o->type= get_debug_type($value); + $o->max_length = 1024; + return $o; + } /** * Counts the records in the instance array. * * @return int number of records in the instance array */ - public function recordCount() + public function RecordCount():int { return $this->count(); } @@ -66,7 +79,7 @@ class ArrayRecordSet implements Countable * Advance the internal pointer of the instance array * if no more fields are left, marks the instance variable $EOF as true. */ - public function moveNext(): void + public function MoveNext(): void { $this->fields = \next($this->_array); diff --git a/src/classes/ContainerUtils.php b/src/classes/ContainerUtils.php index 41bdca49..88e3b394 100644 --- a/src/classes/ContainerUtils.php +++ b/src/classes/ContainerUtils.php @@ -127,6 +127,7 @@ class ContainerUtils extends Container implements ContainerInterface 'gotar' => 'Blue/Green', 'bootstrap' => 'Bootstrap3', ], + 'display_sizes' => ['schemas' => false, 'tables' => false], 'BASE_PATH' => $config['BASE_PATH'] ?? \dirname(__DIR__, 2), 'subFolder' => $config['subfolder'] ?? '', 'debug' => $config['debugmode'] ?? false, @@ -136,12 +137,12 @@ class ContainerUtils extends Container implements ContainerInterface ]; self::$envConfig = \array_merge(self::$envConfig, $config); - if (!self::$instance) { self::$instance = new static(self::$envConfig); self::$instance ->withConf(self::$envConfig); + $handlers = new ContainerHandlers(self::$instance); $handlers->setExtra() @@ -150,6 +151,7 @@ class ContainerUtils extends Container implements ContainerInterface ->storeMainRequestParams() ->setHaltHandler(); } + //ddd($container->subfolder); return self::$instance; } @@ -162,15 +164,14 @@ class ContainerUtils extends Container implements ContainerInterface public function getRedirectUrl() { $container = self::getContainerInstance(); - $container = self::getContainerInstance(); $query_string = $container->request->getUri()->getQuery(); // if server_id isn't set, then you will be redirected to intro if (null === $container->request->getQueryParam('server')) { - $destinationurl = self::$envConfig['subFolder'] . '/src/views/intro'; + $destinationurl = $this->subFolder. '/src/views/intro'; } else { // otherwise, you'll be redirected to the login page for that server; - $destinationurl = self::$envConfig['subFolder'] . '/src/views/login' . ($query_string ? '?' . $query_string : ''); + $destinationurl = $this->subFolder. '/src/views/login' . ($query_string ? '?' . $query_string : ''); } return $destinationurl; @@ -237,7 +238,7 @@ class ContainerUtils extends Container implements ContainerInterface $actionurl = Decorator::actionurl($url['url'], $_GET); $destinationurl = $actionurl->value($_GET); - return \str_replace('views/?', \sprintf( + return $this->subFolder.\str_replace('views/?', \sprintf( 'views/%s?', $subject ), $destinationurl); @@ -296,7 +297,7 @@ class ContainerUtils extends Container implements ContainerInterface $conf['plugins'] = []; $container->BASE_PATH = $conf['BASE_PATH']; - $container->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/classes/ViewManager.php b/src/classes/ViewManager.php index e78a646c..49d2d7e7 100644 --- a/src/classes/ViewManager.php +++ b/src/classes/ViewManager.php @@ -154,6 +154,11 @@ class ViewManager extends Twig $this->offsetSet('applangdir', $this->lang['applangdir']); + $this->offsetSet('icon', [ + 'Refresh' => $this->icon('Refresh'), + 'Servers' => $this->icon('Servers'), + ]); + $this->offsetSet('appName', $c->get('settings')['appName']); $_theme = $this->getTheme($this->conf, $this->misc->getServerInfo()); @@ -199,13 +204,23 @@ class ViewManager extends Twig return $this->_reload_browser; } - public function maybeRenderIframes(Response $response, string $subject, string $query_string): ResponseInterface +/** + * Undocumented function + * + * @param Response $response + * @param string $subject + * @param string $query_string + * @param string $template + * @return ResponseInterface + */ + public function maybeRenderIframes(Response $response, string $subject, string $query_string,string $template='intro_view.twig') { $c = $this->getContainer(); $in_test = $this->offsetGet('in_test'); + $includeJsTree = $this->offsetExists('includeJsTree')?$this->offsetGet('includeJsTree'):true; - if ('1' === $in_test) { + if ('1' === $in_test||$includeJsTree) { $className = self::getControllerClassName($subject); $controller = new $className($c); @@ -217,7 +232,7 @@ class ViewManager extends Twig 'headertemplate' => 'header.twig', ]; - return $this->render($response, 'iframe_view.twig', $viewVars); + return $this->render($response, $template, $viewVars); } /** diff --git a/src/controllers/AcinsertController.php b/src/controllers/AcinsertController.php index 7194e380..4dafaecc 100644 --- a/src/controllers/AcinsertController.php +++ b/src/controllers/AcinsertController.php @@ -79,7 +79,7 @@ class AcinsertController extends BaseController echo '<tr class="acline">'; foreach ($res->fields as $n => $v) { - $finfo = $res->fetchField($j++); + $finfo = $res->FetchField($j++); if (\in_array($n, $fkeynames, true)) { echo \sprintf( @@ -96,7 +96,7 @@ class AcinsertController extends BaseController } echo '</tr>' . \PHP_EOL; ++$i; - $res->moveNext(); + $res->MoveNext(); } echo '</table>' . \PHP_EOL; @@ -109,7 +109,7 @@ class AcinsertController extends BaseController $js .= "fkl_hasprev=false;\n"; } - if (12 === $res->recordCount()) { + if (12 === $res->RecordCount()) { $js .= "fkl_hasnext=true;\n"; echo ' <a href="javascript:void(0)" id="fknext">Next >></a>'; } else { diff --git a/src/controllers/AggregatesController.php b/src/controllers/AggregatesController.php index afd57de0..20d63135 100644 --- a/src/controllers/AggregatesController.php +++ b/src/controllers/AggregatesController.php @@ -428,7 +428,7 @@ class AggregatesController extends BaseController echo '<form action="' . \containerInstance()->subFolder . '/src/views/aggregates" method="post">' . \PHP_EOL; $aggrdata = $this->data->getAggregate($_REQUEST['aggrname'], $_REQUEST['aggrtype']); - if (0 < $aggrdata->recordCount()) { + if (0 < $aggrdata->RecordCount()) { // Output table header echo '<table>' . \PHP_EOL; echo \sprintf( @@ -551,7 +551,7 @@ class AggregatesController extends BaseController $aggrdata = $this->data->getAggregate($_REQUEST['aggrname'], $_REQUEST['aggrtype']); - if (0 < $aggrdata->recordCount()) { + if (0 < $aggrdata->RecordCount()) { // Display aggregate's info echo '<table>' . \PHP_EOL; echo \sprintf( diff --git a/src/controllers/AlldbController.php b/src/controllers/AlldbController.php index 54f42a1d..67dc3a8a 100644 --- a/src/controllers/AlldbController.php +++ b/src/controllers/AlldbController.php @@ -84,7 +84,7 @@ class AlldbController extends BaseController $output = \ob_get_clean(); $this->printHeader($this->headerTitle(), null, true, $header_template); - $this->printBody(); + $this->printBody(true,'flexbox_body',false,true); echo $output; return $this->printFooter(); @@ -113,7 +113,7 @@ class AlldbController extends BaseController 'database' => [ 'title' => $this->lang['strdatabase'], 'field' => Decorator::field('datname'), - 'url' => \containerInstance()->subFolder . $redirecturl . '&', + 'url' => $redirecturl . '&', 'vars' => ['database' => 'datname'], ], 'owner' => [ @@ -254,7 +254,6 @@ class AlldbController extends BaseController 'action' => Decorator::redirecturl('redirect', $reqvars, ['subject' => 'database', 'database' => Decorator::field('datname')]), 'branch' => Decorator::url('/src/views/database', $reqvars, ['action' => 'tree', 'database' => Decorator::field('datname')]), ]; - return $this->printTree($databases, $attrs, 'databases'); } @@ -301,7 +300,7 @@ class AlldbController extends BaseController $uname = $users->fields['usename']; echo '<option value="', \htmlspecialchars($uname), '"', ($uname === $owner) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } @@ -510,7 +509,7 @@ class AlldbController extends BaseController $dbname ) . \PHP_EOL; } - $templatedbs->moveNext(); + $templatedbs->MoveNext(); } echo "\t\t\t</select>" . \PHP_EOL; echo "\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -560,7 +559,7 @@ class AlldbController extends BaseController } // Tablespace (if there are any) - if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { + if ($data->hasTablespaces() && 0 < $tablespaces->RecordCount()) { echo \sprintf( ' <tr> <th class="data left">%s</th>', @@ -581,7 +580,7 @@ class AlldbController extends BaseController '>%s</option>', $spcname ) . \PHP_EOL; - $tablespaces->moveNext(); + $tablespaces->MoveNext(); } echo "\t\t\t</select>\n\t\t</td>\n\t</tr>" . \PHP_EOL; } diff --git a/src/controllers/BaseController.php b/src/controllers/BaseController.php index 22d8d373..e14332b5 100644 --- a/src/controllers/BaseController.php +++ b/src/controllers/BaseController.php @@ -18,6 +18,7 @@ use PHPPgAdmin\XHtml\HTMLHeaderController; use PHPPgAdmin\XHtml\HTMLNavbarController; use PHPPgAdmin\XHtml\HTMLTableController; use Slim\Http\Response; +use ADORecordSet as ADODBRecordsetClass; /** * Base controller class. @@ -257,14 +258,14 @@ class BaseController /** * Produce JSON data for the browser tree. * - * @param ADORecordSet|ArrayRecordSet $_treedata a set of records to populate the tree + * @param \PHPPgAdmin\Interfaces\Recordset|\ADORecordSet * @param array $attrs Attributes for tree items * @param string $section The section where the branch is linked in the tree * @param bool $print either to return or echo the result * * @return Response|string the json rendered tree */ - public function printTree(&$_treedata, &$attrs, $section, $print = true) + public function printTree( &$_treedata, &$attrs, $section, $print = true) { $tree = $this->_getTreeController(); @@ -409,11 +410,20 @@ class BaseController return $header_controller->printHeader($title, $script, $do_print, $template); } - public function printBody(bool $doBody = true, string $bodyClass = 'detailbody', bool $onloadInit = false) + /** + * Undocumented function + * + * @param boolean $doBody + * @param string $bodyClass + * @param boolean $onloadInit + * @param boolean $includeJsTree either to add the jsTree in the root body. By default is inserted using an iframe + * @return void + */ + public function printBody(bool $doBody = true, string $bodyClass = 'detailbody', bool $onloadInit = false,bool $includeJsTree=false) { $header_controller = $this->_getHeaderController(); - return $header_controller->printBody($doBody, $bodyClass, $onloadInit); + return $header_controller->printBody($doBody, $bodyClass, $onloadInit,$includeJsTree); } /** diff --git a/src/controllers/ColpropertiesController.php b/src/controllers/ColpropertiesController.php index 22caeec2..cf6241b7 100644 --- a/src/controllers/ColpropertiesController.php +++ b/src/controllers/ColpropertiesController.php @@ -330,7 +330,7 @@ class ColpropertiesController extends BaseController $types_for_js[] = $typname; echo "\t<option value=\"", \htmlspecialchars($typname), '"', ($typname === $_REQUEST['type']) ? ' selected="selected"' : '', '>', $this->misc->printVal($typname), '</option>' . \PHP_EOL; - $types->moveNext(); + $types->MoveNext(); } echo '</select>' . \PHP_EOL; echo '</td>' . \PHP_EOL; diff --git a/src/controllers/ConstraintsController.php b/src/controllers/ConstraintsController.php index 3b16a8c2..06b88cd8 100644 --- a/src/controllers/ConstraintsController.php +++ b/src/controllers/ConstraintsController.php @@ -257,11 +257,11 @@ class ConstraintsController extends BaseController $selColumns = new XHtmlSelect('TableColumnList', true, 10); $selColumns->set_style('width: 15em;'); - if (0 < $attrs->recordCount()) { + if (0 < $attrs->RecordCount()) { while (!$attrs->EOF) { $xmloption = new XHtmlOption($attrs->fields['attname']); $selColumns->add($xmloption); - $attrs->moveNext(); + $attrs->MoveNext(); } } @@ -311,7 +311,7 @@ class ConstraintsController extends BaseController echo \htmlspecialchars($tables->fields['nspname']), '.'; } echo \htmlspecialchars($tables->fields['relname']), '</option>' . \PHP_EOL; - $tables->moveNext(); + $tables->MoveNext(); } echo '</select>' . \PHP_EOL; echo '</td></tr>'; @@ -428,11 +428,11 @@ class ConstraintsController extends BaseController $selColumns = new XHtmlSelect('TableColumnList', true, 10); $selColumns->set_style('width: 15em;'); - if (0 < $attrs->recordCount()) { + if (0 < $attrs->RecordCount()) { while (!$attrs->EOF) { $new_option = new XHtmlOption($attrs->fields['attname']); $selColumns->add($new_option); - $attrs->moveNext(); + $attrs->MoveNext(); } } @@ -470,7 +470,7 @@ class ConstraintsController extends BaseController echo '<td class=data1>' . $selIndex->fetch() . '</td></tr>' . \PHP_EOL; // Tablespace (if there are any) - if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { + if ($data->hasTablespaces() && 0 < $tablespaces->RecordCount()) { echo \sprintf( '<tr><th class="data" colspan="3">%s</th></tr>', $this->lang['strtablespace'] @@ -490,7 +490,7 @@ class ConstraintsController extends BaseController '>%s</option>', $spcname ) . \PHP_EOL; - $tablespaces->moveNext(); + $tablespaces->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } @@ -745,11 +745,11 @@ class ConstraintsController extends BaseController $selColumns = new XHtmlSelect('TableColumnList', true, 10); $selColumns->set_style('width: 15em;'); - if (0 < $attrs->recordCount()) { + if (0 < $attrs->RecordCount()) { while (!$attrs->EOF) { $xmloption = new XHtmlOption($attrs->fields['attname']); $selColumns->add($xmloption); - $attrs->moveNext(); + $attrs->MoveNext(); } } diff --git a/src/controllers/DatabaseController.php b/src/controllers/DatabaseController.php index 16277dd6..db355e6b 100644 --- a/src/controllers/DatabaseController.php +++ b/src/controllers/DatabaseController.php @@ -269,7 +269,7 @@ class DatabaseController extends BaseController $data = $this->misc->getDatabaseAccessor(); $rs = $data->findObject($_REQUEST['term'], $_REQUEST['filter']); - if (0 < $rs->recordCount()) { + if (0 < $rs->RecordCount()) { $curr = ''; while (!$rs->EOF) { @@ -297,11 +297,11 @@ class DatabaseController extends BaseController } $this->_printHtmlForType($curr, $rs); - $rs->moveNext(); + $rs->MoveNext(); } echo '</ul>' . \PHP_EOL; - echo '<p>', $rs->recordCount(), ' ', $this->lang['strobjects'], '</p>' . \PHP_EOL; + echo '<p>', $rs->RecordCount(), ' ', $this->lang['strobjects'], '</p>' . \PHP_EOL; } else { echo \sprintf( '<p>%s</p>', diff --git a/src/controllers/DataexportController.php b/src/controllers/DataexportController.php index 9e27c729..ceb643a4 100644 --- a/src/controllers/DataexportController.php +++ b/src/controllers/DataexportController.php @@ -343,7 +343,7 @@ class DataexportController extends BaseController } } echo \PHP_EOL; - $rs->moveNext(); + $rs->MoveNext(); } echo "\\.\n"; } @@ -365,7 +365,7 @@ class DataexportController extends BaseController $j = 0; foreach ($rs->fields as $k => $v) { - $finfo = $rs->fetchField($j++); + $finfo = $rs->FetchField($j++); if ($finfo->name === $data->id && !$oids) { continue; @@ -381,7 +381,7 @@ class DataexportController extends BaseController $j = 0; foreach ($rs->fields as $k => $v) { - $finfo = $rs->fetchField($j++); + $finfo = $rs->FetchField($j++); if ($finfo->name === $data->id && !$oids) { continue; @@ -390,7 +390,7 @@ class DataexportController extends BaseController echo "\t\t<td>", $this->misc->printVal($v, 'verbatim', $finfo->type), "</td>\r\n"; } echo "\t</tr>\r\n"; - $rs->moveNext(); + $rs->MoveNext(); } echo "</table>\r\n"; echo "</body>\r\n"; @@ -408,7 +408,7 @@ class DataexportController extends BaseController echo "\t<header>" . \PHP_EOL; foreach ($rs->fields as $k => $v) { - $finfo = $rs->fetchField($j++); + $finfo = $rs->FetchField($j++); $name = \htmlspecialchars($finfo->name); $type = \htmlspecialchars($finfo->type); echo \sprintf( @@ -426,7 +426,7 @@ class DataexportController extends BaseController echo "\t\t<row>" . \PHP_EOL; foreach ($rs->fields as $k => $v) { - $finfo = $rs->fetchField($j++); + $finfo = $rs->FetchField($j++); $name = \htmlspecialchars($finfo->name); if (null !== $v) { @@ -442,7 +442,7 @@ class DataexportController extends BaseController ) . \PHP_EOL; } echo "\t\t</row>" . \PHP_EOL; - $rs->moveNext(); + $rs->MoveNext(); } echo "\t</records>" . \PHP_EOL; echo '</data>' . \PHP_EOL; @@ -462,7 +462,7 @@ class DataexportController extends BaseController $j = 0; foreach ($rs->fields as $k => $v) { - $finfo = $rs->fetchField($j++); + $finfo = $rs->FetchField($j++); $k = $finfo->name; // SQL (INSERT) format cannot handle oids // if ($k == $data->id) continue; @@ -510,7 +510,7 @@ class DataexportController extends BaseController ', $values ); - $rs->moveNext(); + $rs->MoveNext(); } } @@ -533,7 +533,7 @@ class DataexportController extends BaseController $first = true; foreach ($rs->fields as $k => $v) { - $finfo = $rs->fetchField($k); + $finfo = $rs->FetchField($k); $v = $finfo->name; if (null !== $v) { @@ -583,7 +583,7 @@ class DataexportController extends BaseController } } echo "\r\n"; - $rs->moveNext(); + $rs->MoveNext(); } } } diff --git a/src/controllers/DisplayController.php b/src/controllers/DisplayController.php index 0a32e583..3338a8f2 100644 --- a/src/controllers/DisplayController.php +++ b/src/controllers/DisplayController.php @@ -410,7 +410,7 @@ class DisplayController extends BaseController } // Create view and download - if (isset($_REQUEST['query'], $resultset) && \is_object($resultset) && 0 < $resultset->recordCount()) { + 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'] = [ @@ -493,7 +493,7 @@ class DisplayController extends BaseController */ public function printResultsTable($resultset, $page, $max_pages, array $_gets, $object): void { - if (!\is_object($resultset) || 0 >= $resultset->recordCount()) { + if (!\is_object($resultset) || 0 >= $resultset->RecordCount()) { echo \sprintf( '<p>%s</p>', $this->lang['strnodata'] @@ -550,11 +550,11 @@ class DisplayController extends BaseController $this->printTableRowCells($resultset, $fkey_information, isset($object)); echo '</tr>' . \PHP_EOL; - $resultset->moveNext(); + $resultset->MoveNext(); } echo '</table>' . \PHP_EOL; - echo '<p>', $resultset->recordCount(), \sprintf( + echo '<p>', $resultset->RecordCount(), \sprintf( ' %s</p>', $this->lang['strrows'] ) . \PHP_EOL; @@ -573,7 +573,7 @@ class DisplayController extends BaseController { $data = $this->misc->getDatabaseAccessor(); - if (!\is_object($resultset) || 0 >= $resultset->recordCount()) { + if (!\is_object($resultset) || 0 >= $resultset->RecordCount()) { return; } @@ -581,7 +581,7 @@ class DisplayController extends BaseController if (($key === $data->id) && (!($withOid && $this->conf['show_oids']))) { continue; } - $finfo = $resultset->fetchField($index); + $finfo = $resultset->FetchField($index); if (false === $args) { echo '<th class="data">', $this->misc->printVal($finfo->name), '</th>' . \PHP_EOL; @@ -630,7 +630,7 @@ class DisplayController extends BaseController $this->coalesceArr($_REQUEST, 'strings', 'collapsed'); foreach ($resultset->fields as $k => $v) { - $finfo = $resultset->fetchField($j++); + $finfo = $resultset->FetchField($j++); if (($k === $data->id) && (!($withOid && $this->conf['show_oids']))) { continue; @@ -677,7 +677,7 @@ class DisplayController extends BaseController $elements = 0; $error = true; - if (1 === $resultset->recordCount() && 0 < $attrs->recordCount()) { + if (1 === $resultset->RecordCount() && 0 < $attrs->RecordCount()) { echo '<table>' . \PHP_EOL; // Output table header @@ -781,12 +781,12 @@ class DisplayController extends BaseController ++$elements; echo '</tr>' . \PHP_EOL; ++$i; - $attrs->moveNext(); + $attrs->MoveNext(); } echo '</table>' . \PHP_EOL; $error = false; - } elseif (1 !== $resultset->recordCount()) { + } elseif (1 !== $resultset->RecordCount()) { echo \sprintf( '<p>%s</p>', $this->lang['strrownotunique'] @@ -925,7 +925,7 @@ class DisplayController extends BaseController echo '<form action="' . \containerInstance()->subFolder . '/src/views/display" method="post">' . \PHP_EOL; echo $this->view->form; - if (1 === $resultset->recordCount()) { + if (1 === $resultset->RecordCount()) { echo \sprintf( '<p>%s</p>', $this->lang['strconfdeleterow'] @@ -950,7 +950,7 @@ class DisplayController extends BaseController '<input type="submit" name="no" value="%s" />', $this->lang['strno'] ) . \PHP_EOL; - } elseif (1 !== $resultset->recordCount()) { + } elseif (1 !== $resultset->RecordCount()) { echo \sprintf( '<p>%s</p>', $this->lang['strrownotunique'] @@ -1029,7 +1029,7 @@ class DisplayController extends BaseController if (isset($_REQUEST['table'])) { $constraints = $data->getConstraintsWithFields($_REQUEST['table']); - if (0 < $constraints->recordCount()) { + if (0 < $constraints->RecordCount()) { $fkey_information['common_url'] = $this->misc->getHREF('schema') . '&subject=table'; // build the FK constraints data structure @@ -1053,7 +1053,7 @@ class DisplayController extends BaseController $fkey_information['byfield'][$constr['p_field']][] = $constr['conid']; } - $constraints->moveNext(); + $constraints->MoveNext(); } } } @@ -1092,7 +1092,7 @@ class DisplayController extends BaseController echo '<a href="javascript:void(0);" style="display:table-cell;" class="fk_delete"><img alt="[delete]" src="' . $this->view->icon('Delete') . '" /></a>' . \PHP_EOL; echo '<div style="display:table-cell;">'; - if (\is_object($resultset) && 0 < $resultset->recordCount()) { + if (\is_object($resultset) && 0 < $resultset->RecordCount()) { /* we are browsing a referenced table here * we should show OID if show_oids is true * so we give true to withOid in functions bellow diff --git a/src/controllers/DomainsController.php b/src/controllers/DomainsController.php index 7a6c55c3..a09c0ff8 100644 --- a/src/controllers/DomainsController.php +++ b/src/controllers/DomainsController.php @@ -275,7 +275,7 @@ class DomainsController extends BaseController // Fetch all users $users = $data->getUsers(); - if (0 < $domaindata->recordCount()) { + if (0 < $domaindata->RecordCount()) { if (!isset($_POST['domname'])) { $_POST['domtype'] = $domaindata->fields['domtype']; $_POST['domdefault'] = $domaindata->fields['domdef']; @@ -322,7 +322,7 @@ class DomainsController extends BaseController $uname = $users->fields['usename']; echo '<option value="', \htmlspecialchars($uname), '"', ($uname === $_POST['domowner']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; echo '</table>' . \PHP_EOL; @@ -483,7 +483,7 @@ class DomainsController extends BaseController $domaindata = $data->getDomain($_REQUEST['domain']); - if (0 < $domaindata->recordCount()) { + if (0 < $domaindata->RecordCount()) { // Show comment if any if (null !== $domaindata->fields['domcomment']) { echo '<p class="comment">', $this->misc->printVal($domaindata->fields['domcomment']), '</p>' . \PHP_EOL; @@ -718,7 +718,7 @@ class DomainsController extends BaseController echo '<option value="', \htmlspecialchars($types->fields['typname']), '"', ($types->fields['typname'] === $_POST['domtype']) ? ' selected="selected"' : '', '>', $this->misc->printVal($types->fields['typname']), '</option>' . \PHP_EOL; - $types->moveNext(); + $types->MoveNext(); } echo '</select>' . \PHP_EOL; diff --git a/src/controllers/FulltextController.php b/src/controllers/FulltextController.php index e14d6249..6e5974aa 100644 --- a/src/controllers/FulltextController.php +++ b/src/controllers/FulltextController.php @@ -465,7 +465,7 @@ class FulltextController extends BaseController if ($_POST['formTemplate'] === $tpls[$tplname]) { $tplsel = \htmlspecialchars($tpls[$tplname]); } - $ftscfgs->moveNext(); + $ftscfgs->MoveNext(); } echo HTMLController::printCombo($tpls, 'formTemplate', true, $tplsel, false); echo "\n\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -493,7 +493,7 @@ class FulltextController extends BaseController if ($_POST['formParser'] === $ftsparsers_[$parsername]) { $ftsparsel = \htmlspecialchars($ftsparsers_[$parsername]); } - $ftsparsers->moveNext(); + $ftsparsers->MoveNext(); } echo HTMLController::printCombo($ftsparsers_, 'formParser', true, $ftsparsel, false); echo "\n\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -589,7 +589,7 @@ class FulltextController extends BaseController $ftscfg = $data->getFtsConfigurationByName($_REQUEST['ftscfg']); - if (0 < $ftscfg->recordCount()) { + if (0 < $ftscfg->RecordCount()) { $this->coalesceArr($_POST, 'formComment', $ftscfg->fields['comment']); $this->coalesceArr($_POST, 'ftscfg', $_REQUEST['ftscfg']); @@ -959,7 +959,7 @@ class FulltextController extends BaseController if ($_POST['formTemplate'] === $tpls[$tplname]) { $tplsel = \htmlspecialchars($tpls[$tplname]); } - $ftstpls->moveNext(); + $ftstpls->MoveNext(); } echo HTMLController::printCombo($tpls, 'formTemplate', true, $tplsel, false); echo "\n\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -1098,7 +1098,7 @@ class FulltextController extends BaseController $ftsdict = $data->getFtsDictionaryByName($_REQUEST['ftsdict']); - if (0 < $ftsdict->recordCount()) { + if (0 < $ftsdict->RecordCount()) { $this->coalesceArr($_POST, 'formComment', $ftsdict->fields['comment']); $this->coalesceArr($_POST, 'ftsdict', $_REQUEST['ftsdict']); @@ -1265,7 +1265,7 @@ class FulltextController extends BaseController $ftsdicts = $data->getFtsDictionaries(); - if (0 < $ftsdicts->recordCount()) { + if (0 < $ftsdicts->RecordCount()) { $this->coalesceArr($_POST, 'formMapping', $_REQUEST['mapping']); $this->coalesceArr($_POST, 'formDictionary', ''); @@ -1325,7 +1325,7 @@ class FulltextController extends BaseController '>%s</option>', $ftsdict ) . \PHP_EOL; - $ftsdicts->moveNext(); + $ftsdicts->MoveNext(); } echo "\t\t</td>" . \PHP_EOL; @@ -1387,7 +1387,7 @@ class FulltextController extends BaseController $ftsdicts = $data->getFtsDictionaries(); - if (0 < $ftsdicts->recordCount()) { + if (0 < $ftsdicts->RecordCount()) { $this->coalesceArr($_POST, 'formMapping', ''); $this->coalesceArr($_POST, 'formDictionary', ''); @@ -1423,7 +1423,7 @@ class FulltextController extends BaseController $mapping_desc ) : '', '</option>' . \PHP_EOL; - $mappings->moveNext(); + $mappings->MoveNext(); } echo "\t\t</td>" . \PHP_EOL; echo "\t</tr>" . \PHP_EOL; @@ -1448,7 +1448,7 @@ class FulltextController extends BaseController '>%s</option>', $ftsdict ) . \PHP_EOL; - $ftsdicts->moveNext(); + $ftsdicts->MoveNext(); } echo "\t\t</td>" . \PHP_EOL; diff --git a/src/controllers/FunctionsController.php b/src/controllers/FunctionsController.php index cbd71e80..b4d37781 100644 --- a/src/controllers/FunctionsController.php +++ b/src/controllers/FunctionsController.php @@ -300,7 +300,7 @@ class FunctionsController extends BaseController $fndata = $data->getFunction($_REQUEST['function_oid']); - if (0 >= $fndata->recordCount()) { + if (0 >= $fndata->RecordCount()) { echo \sprintf( '<p>%s</p>', $this->lang['strnodata'] @@ -377,7 +377,7 @@ class FunctionsController extends BaseController $schema = $schemas->fields['nspname']; echo '<option value="', \htmlspecialchars($schema), '"', ($schema === $_POST['formFuncSchema']) ? ' selected="selected"' : '', '>', \htmlspecialchars($schema), '</option>' . \PHP_EOL; - $schemas->moveNext(); + $schemas->MoveNext(); } echo '</select>' . \PHP_EOL; } else { @@ -517,7 +517,7 @@ class FunctionsController extends BaseController $uname = $users->fields['usename']; echo '<option value="', \htmlspecialchars($uname), '"', ($uname === $_POST['formFuncOwn']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select>' . \PHP_EOL; echo '<input type="hidden" name="original_owner" value="', \htmlspecialchars($fndata->fields['proowner']), '" />' . \PHP_EOL; @@ -560,7 +560,7 @@ class FunctionsController extends BaseController $funcdata = $data->getFunctionDef($function_oid); $func_full = ''; - if (0 >= $funcdata->recordCount()) { + if (0 >= $funcdata->RecordCount()) { echo \sprintf( '<p>%s</p>', $this->lang['strnodata'] @@ -662,7 +662,7 @@ class FunctionsController extends BaseController $funcdata = $data->getFunction($_REQUEST['function_oid']); $func_full = ''; - if (0 >= $funcdata->recordCount()) { + if (0 >= $funcdata->RecordCount()) { echo \sprintf( '<p>%s</p>', $this->lang['strnodata'] @@ -964,7 +964,7 @@ class FunctionsController extends BaseController $szSelected ); $szTypes .= \htmlspecialchars($types->fields['typname'], \ENT_QUOTES) . '</option>'; - $types->moveNext(); + $types->MoveNext(); } $szFunctionName = \sprintf( @@ -1048,7 +1048,7 @@ class FunctionsController extends BaseController $this->misc->printVal($langs->fields['lanname']) . '</option>'; } - $langs->moveNext(); + $langs->MoveNext(); } $szLanguage .= '</select>' . \PHP_EOL; } @@ -1582,7 +1582,7 @@ class FunctionsController extends BaseController while (!$arrayTypes->EOF) { $arrayPTypes[] = "'" . $arrayTypes->fields['typname'] . "'"; - $arrayTypes->moveNext(); + $arrayTypes->MoveNext(); } foreach ($arrayModes as $pV) { diff --git a/src/controllers/GroupsController.php b/src/controllers/GroupsController.php index fe7854cb..9509117a 100644 --- a/src/controllers/GroupsController.php +++ b/src/controllers/GroupsController.php @@ -230,7 +230,7 @@ class GroupsController extends BaseController $groupdata = $data->getGroup($_REQUEST['group']); $users = $data->getUsers(); - if (0 < $groupdata->recordCount()) { + if (0 < $groupdata->RecordCount()) { $columns = [ 'members' => [ 'title' => $this->lang['strmembers'], @@ -274,7 +274,7 @@ class GroupsController extends BaseController '>%s</option>', $uname ) . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select>' . \PHP_EOL; echo \sprintf( @@ -373,7 +373,7 @@ class GroupsController extends BaseController $data->_maxNameLen ), \htmlspecialchars($_POST['name']), "\" /></td>\n\t</tr>" . \PHP_EOL; - if (0 < $users->recordCount()) { + if (0 < $users->RecordCount()) { echo \sprintf( ' <tr> <th class="data left">%s</th>', @@ -381,7 +381,7 @@ class GroupsController extends BaseController ) . \PHP_EOL; echo "\t\t<td class=\"data\">" . \PHP_EOL; - echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", \min(40, $users->recordCount()), '">' . \PHP_EOL; + echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", \min(40, $users->RecordCount()), '">' . \PHP_EOL; while (!$users->EOF) { $username = $users->fields['usename']; @@ -390,7 +390,7 @@ class GroupsController extends BaseController $username ), (\in_array($username, $_POST['members'], true) ? ' selected="selected"' : ''), '>', $this->misc->printVal($username), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo "\t\t\t</select>" . \PHP_EOL; echo "\t\t</td>\n\t</tr>" . \PHP_EOL; diff --git a/src/controllers/IndexesController.php b/src/controllers/IndexesController.php index 7cf0ee4f..f8eb64b9 100644 --- a/src/controllers/IndexesController.php +++ b/src/controllers/IndexesController.php @@ -366,11 +366,11 @@ class IndexesController extends BaseController $selColumns = new XHtmlSelect('TableColumnList', true, 10); $selColumns->set_style('width: 14em;'); - if (0 < $attrs->recordCount()) { + if (0 < $attrs->RecordCount()) { while (!$attrs->EOF) { $attname = new XHtmlOption($attrs->fields['attname']); $selColumns->add($attname); - $attrs->moveNext(); + $attrs->MoveNext(); } } @@ -431,7 +431,7 @@ class IndexesController extends BaseController echo '</tr>'; // Tablespace (if there are any) - if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { + if ($data->hasTablespaces() && 0 < $tablespaces->RecordCount()) { echo '<tr>' . \PHP_EOL; echo \sprintf( '<th class="data left">%s</th>', @@ -453,7 +453,7 @@ class IndexesController extends BaseController '>%s</option>', $spcname ) . \PHP_EOL; - $tablespaces->moveNext(); + $tablespaces->MoveNext(); } echo "\t\t\t</select>\n\t\t</td>\n\t</tr>" . \PHP_EOL; } diff --git a/src/controllers/InfoController.php b/src/controllers/InfoController.php index 9e784ef7..2c358991 100644 --- a/src/controllers/InfoController.php +++ b/src/controllers/InfoController.php @@ -59,46 +59,46 @@ class InfoController extends BaseController $indexstatsio = $data->getStatsIndexIO($_REQUEST['table']); // Check that there is some info - if ((-99 === $referrers || (-99 !== $referrers && 0 === $referrers->recordCount())) - && 0 === $parents->recordCount() && 0 === $children->recordCount() - && (0 === $tablestatstups->recordCount() && 0 === $tablestatsio->recordCount() - && 0 === $indexstatstups->recordCount() && 0 === $indexstatsio->recordCount())) { + if ((-99 === $referrers || (-99 !== $referrers && 0 === $referrers->RecordCount())) + && 0 === $parents->RecordCount() && 0 === $children->RecordCount() + && (0 === $tablestatstups->RecordCount() && 0 === $tablestatsio->RecordCount() + && 0 === $indexstatstups->RecordCount() && 0 === $indexstatsio->RecordCount())) { $this->printMsg($this->lang['strnoinfo']); return; } // Referring foreign tables - if (-99 !== $referrers && 0 < $referrers->recordCount()) { + if (-99 !== $referrers && 0 < $referrers->RecordCount()) { $this->_printReferring($referrers); } // Parent tables - if (0 < $parents->recordCount()) { + if (0 < $parents->RecordCount()) { $this->_printParents($parents); } // Child tables - if (0 < $children->recordCount()) { + if (0 < $children->RecordCount()) { $this->_printChildren($children); } // Row performance - if (0 < $tablestatstups->recordCount()) { + if (0 < $tablestatstups->RecordCount()) { $this->_printTablestatstups($tablestatstups); } // I/O performance - if (0 < $tablestatsio->recordCount()) { + if (0 < $tablestatsio->RecordCount()) { $this->_printTablestatsio($tablestatsio); } // Index row performance - if (0 < $indexstatstups->recordCount()) { + if (0 < $indexstatstups->RecordCount()) { $this->_printIndexstatstups($indexstatstups); } // Index I/0 performance - if (0 < $indexstatsio->recordCount()) { + if (0 < $indexstatsio->RecordCount()) { $this->_printIndexstatsio($indexstatsio); } } @@ -210,7 +210,7 @@ class InfoController extends BaseController echo "\t\t<td>", $this->misc->printVal($tablestatstups->fields['n_tup_upd'], 'int4', $this->shownull), '</td>' . \PHP_EOL; echo "\t\t<td>", $this->misc->printVal($tablestatstups->fields['n_tup_del'], 'int4', $this->shownull), '</td>' . \PHP_EOL; echo "\t</tr>" . \PHP_EOL; - $tablestatstups->movenext(); + $tablestatstups->MoveNext(); ++$i; } @@ -366,7 +366,7 @@ class InfoController extends BaseController $this->lang['strpercent'] ) . \PHP_EOL; echo "\t</tr>" . \PHP_EOL; - $tablestatsio->movenext(); + $tablestatsio->MoveNext(); ++$i; } @@ -412,7 +412,7 @@ class InfoController extends BaseController echo "\t\t<td>", $this->misc->printVal($indexstatstups->fields['idx_tup_read'], 'int4', $this->shownull), '</td>' . \PHP_EOL; echo "\t\t<td>", $this->misc->printVal($indexstatstups->fields['idx_tup_fetch'], 'int4', $this->shownull), '</td>' . \PHP_EOL; echo "\t</tr>" . \PHP_EOL; - $indexstatstups->movenext(); + $indexstatstups->MoveNext(); ++$i; } @@ -470,7 +470,7 @@ class InfoController extends BaseController $this->lang['strpercent'] ) . \PHP_EOL; echo "\t</tr>" . \PHP_EOL; - $indexstatsio->movenext(); + $indexstatsio->MoveNext(); ++$i; } diff --git a/src/controllers/IntroController.php b/src/controllers/IntroController.php index 3f30127d..1382da0a 100644 --- a/src/controllers/IntroController.php +++ b/src/controllers/IntroController.php @@ -34,7 +34,7 @@ class IntroController extends BaseController public function doDefault() { $intro_html = $this->printHeader('Intro', $this->scripts, false); - $intro_html .= $this->printBody(false); + $intro_html .= $this->printBody(false,'flexbox_body',false,true); $intro_html .= $this->printTrail('root', false); diff --git a/src/controllers/MaterializedviewpropertiesController.php b/src/controllers/MaterializedviewpropertiesController.php index 8a5b5df7..712a33c7 100644 --- a/src/controllers/MaterializedviewpropertiesController.php +++ b/src/controllers/MaterializedviewpropertiesController.php @@ -147,7 +147,7 @@ class MaterializedviewpropertiesController extends BaseController $viewdata = $data->getView($_REQUEST[$this->subject]); - if (0 < $viewdata->recordCount()) { + if (0 < $viewdata->RecordCount()) { if (!isset($_POST['formDefinition'])) { $_POST['formDefinition'] = $viewdata->fields['vwdefinition']; $_POST['formComment'] = $viewdata->fields['relcomment']; @@ -315,7 +315,7 @@ class MaterializedviewpropertiesController extends BaseController // Fetch matview info $matview = $data->getView($_REQUEST[$this->subject]); - if (0 < $matview->recordCount()) { + if (0 < $matview->RecordCount()) { $this->coalesceArr($_POST, 'name', $matview->fields['relname']); $this->coalesceArr($_POST, 'owner', $matview->fields['relowner']); @@ -351,7 +351,7 @@ class MaterializedviewpropertiesController extends BaseController $uname = $users->fields['usename']; echo '<option value="', \htmlspecialchars($uname), '"', ($uname === $_POST['owner']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } @@ -368,7 +368,7 @@ class MaterializedviewpropertiesController extends BaseController $schema = $schemas->fields['nspname']; echo '<option value="', \htmlspecialchars($schema), '"', ($schema === $_POST['newschema']) ? ' selected="selected"' : '', '>', \htmlspecialchars($schema), '</option>' . \PHP_EOL; - $schemas->moveNext(); + $schemas->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } diff --git a/src/controllers/OperatorsController.php b/src/controllers/OperatorsController.php index 839d6ece..c3d33cba 100644 --- a/src/controllers/OperatorsController.php +++ b/src/controllers/OperatorsController.php @@ -186,7 +186,7 @@ class OperatorsController extends BaseController $oprdata = $data->getOperator($_REQUEST['operator_oid']); $oprdata->fields['oprcanhash'] = $data->phpBool($oprdata->fields['oprcanhash']); - if (0 < $oprdata->recordCount()) { + if (0 < $oprdata->RecordCount()) { echo '<table>' . \PHP_EOL; echo \sprintf( '<tr><th class="data left">%s</th>', diff --git a/src/controllers/PrivilegesController.php b/src/controllers/PrivilegesController.php index fc4397b3..5413966c 100644 --- a/src/controllers/PrivilegesController.php +++ b/src/controllers/PrivilegesController.php @@ -354,7 +354,7 @@ class PrivilegesController extends BaseController '<tr><th class="data left">%s</th>', $this->lang['strusers'] ) . \PHP_EOL; - echo '<td class="data1"><select name="username[]" multiple="multiple" size="', \min(6, $users->recordCount()), '">' . \PHP_EOL; + echo '<td class="data1"><select name="username[]" multiple="multiple" size="', \min(6, $users->RecordCount()), '">' . \PHP_EOL; while (!$users->EOF) { $uname = \htmlspecialchars($users->fields['usename']); @@ -366,7 +366,7 @@ class PrivilegesController extends BaseController '>%s</option>', $uname ) . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; echo \sprintf( @@ -376,8 +376,8 @@ class PrivilegesController extends BaseController echo '<td class="data1">' . \PHP_EOL; echo '<input type="checkbox" id="public" name="public"', (isset($_REQUEST['public']) ? ' checked="checked"' : ''), ' /><label for="public">PUBLIC</label>' . \PHP_EOL; // Only show groups if there are groups! - if (0 < $groups->recordCount()) { - echo '<br /><select name="groupname[]" multiple="multiple" size="', \min(6, $groups->recordCount()), '">' . \PHP_EOL; + if (0 < $groups->RecordCount()) { + echo '<br /><select name="groupname[]" multiple="multiple" size="', \min(6, $groups->RecordCount()), '">' . \PHP_EOL; while (!$groups->EOF) { $gname = \htmlspecialchars($groups->fields['groname']); @@ -389,7 +389,7 @@ class PrivilegesController extends BaseController '>%s</option>', $gname ) . \PHP_EOL; - $groups->moveNext(); + $groups->MoveNext(); } echo '</select>' . \PHP_EOL; } diff --git a/src/controllers/RolesController.php b/src/controllers/RolesController.php index 9f44e697..86fe3fc5 100644 --- a/src/controllers/RolesController.php +++ b/src/controllers/RolesController.php @@ -317,14 +317,14 @@ class RolesController extends BaseController $roles = $data->getRoles(); - if (0 < $roles->recordCount()) { + if (0 < $roles->RecordCount()) { echo \sprintf( ' <tr> <th class="data left">%s</th>', $this->lang['strmemberof'] ) . \PHP_EOL; echo "\t\t<td class=\"data\">" . \PHP_EOL; - echo "\t\t\t<select name=\"memberof[]\" multiple=\"multiple\" size=\"", \min(20, $roles->recordCount()), '">' . \PHP_EOL; + echo "\t\t\t<select name=\"memberof[]\" multiple=\"multiple\" size=\"", \min(20, $roles->RecordCount()), '">' . \PHP_EOL; while (!$roles->EOF) { $rolename = $roles->fields['rolname']; @@ -333,7 +333,7 @@ class RolesController extends BaseController $rolename ), (\in_array($rolename, $_POST['memberof'], true) ? ' selected="selected"' : ''), '>', $this->misc->printVal($rolename), '</option>' . \PHP_EOL; - $roles->moveNext(); + $roles->MoveNext(); } echo "\t\t\t</select>" . \PHP_EOL; echo "\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -345,7 +345,7 @@ class RolesController extends BaseController $this->lang['strmembers'] ) . \PHP_EOL; echo "\t\t<td class=\"data\">" . \PHP_EOL; - echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", \min(20, $roles->recordCount()), '">' . \PHP_EOL; + echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", \min(20, $roles->RecordCount()), '">' . \PHP_EOL; while (!$roles->EOF) { $rolename = $roles->fields['rolname']; @@ -354,7 +354,7 @@ class RolesController extends BaseController $rolename ), (\in_array($rolename, $_POST['members'], true) ? ' selected="selected"' : ''), '>', $this->misc->printVal($rolename), '</option>' . \PHP_EOL; - $roles->moveNext(); + $roles->MoveNext(); } echo "\t\t\t</select>" . \PHP_EOL; echo "\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -366,7 +366,7 @@ class RolesController extends BaseController $this->lang['stradminmembers'] ) . \PHP_EOL; echo "\t\t<td class=\"data\">" . \PHP_EOL; - echo "\t\t\t<select name=\"adminmembers[]\" multiple=\"multiple\" size=\"", \min(20, $roles->recordCount()), '">' . \PHP_EOL; + echo "\t\t\t<select name=\"adminmembers[]\" multiple=\"multiple\" size=\"", \min(20, $roles->RecordCount()), '">' . \PHP_EOL; while (!$roles->EOF) { $rolename = $roles->fields['rolname']; @@ -375,7 +375,7 @@ class RolesController extends BaseController $rolename ), (\in_array($rolename, $_POST['adminmembers'], true) ? ' selected="selected"' : ''), '>', $this->misc->printVal($rolename), '</option>' . \PHP_EOL; - $roles->moveNext(); + $roles->MoveNext(); } echo "\t\t\t</select>" . \PHP_EOL; echo "\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -453,7 +453,7 @@ class RolesController extends BaseController $roledata = $data->getRole($_REQUEST['rolename']); - if (0 >= $roledata->recordCount()) { + if (0 >= $roledata->RecordCount()) { echo \sprintf( '<p>%s</p>', $this->lang['strnodata'] @@ -553,14 +553,14 @@ class RolesController extends BaseController $roles = $data->getRoles($_REQUEST['rolename']); - if (0 < $roles->recordCount()) { + if (0 < $roles->RecordCount()) { echo \sprintf( ' <tr> <th class="data left">%s</th>', $this->lang['strmemberof'] ) . \PHP_EOL; echo "\t\t<td class=\"data\">" . \PHP_EOL; - echo "\t\t\t<select name=\"memberof[]\" multiple=\"multiple\" size=\"", \min(20, $roles->recordCount()), '">' . \PHP_EOL; + echo "\t\t\t<select name=\"memberof[]\" multiple=\"multiple\" size=\"", \min(20, $roles->RecordCount()), '">' . \PHP_EOL; while (!$roles->EOF) { $rolename = $roles->fields['rolname']; @@ -569,7 +569,7 @@ class RolesController extends BaseController $rolename ), (\in_array($rolename, $_POST['memberof'], true) ? ' selected="selected"' : ''), '>', $this->misc->printVal($rolename), '</option>' . \PHP_EOL; - $roles->moveNext(); + $roles->MoveNext(); } echo "\t\t\t</select>" . \PHP_EOL; echo "\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -581,7 +581,7 @@ class RolesController extends BaseController $this->lang['strmembers'] ) . \PHP_EOL; echo "\t\t<td class=\"data\">" . \PHP_EOL; - echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", \min(20, $roles->recordCount()), '">' . \PHP_EOL; + echo "\t\t\t<select name=\"members[]\" multiple=\"multiple\" size=\"", \min(20, $roles->RecordCount()), '">' . \PHP_EOL; while (!$roles->EOF) { $rolename = $roles->fields['rolname']; @@ -590,7 +590,7 @@ class RolesController extends BaseController $rolename ), (\in_array($rolename, $_POST['members'], true) ? ' selected="selected"' : ''), '>', $this->misc->printVal($rolename), '</option>' . \PHP_EOL; - $roles->moveNext(); + $roles->MoveNext(); } echo "\t\t\t</select>" . \PHP_EOL; echo "\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -602,7 +602,7 @@ class RolesController extends BaseController $this->lang['stradminmembers'] ) . \PHP_EOL; echo "\t\t<td class=\"data\">" . \PHP_EOL; - echo "\t\t\t<select name=\"adminmembers[]\" multiple=\"multiple\" size=\"", \min(20, $roles->recordCount()), '">' . \PHP_EOL; + echo "\t\t\t<select name=\"adminmembers[]\" multiple=\"multiple\" size=\"", \min(20, $roles->RecordCount()), '">' . \PHP_EOL; while (!$roles->EOF) { $rolename = $roles->fields['rolname']; @@ -611,7 +611,7 @@ class RolesController extends BaseController $rolename ), (\in_array($rolename, $_POST['adminmembers'], true) ? ' selected="selected"' : ''), '>', $this->misc->printVal($rolename), '</option>' . \PHP_EOL; - $roles->moveNext(); + $roles->MoveNext(); } echo "\t\t\t</select>" . \PHP_EOL; echo "\t\t</td>\n\t</tr>" . \PHP_EOL; @@ -727,7 +727,7 @@ class RolesController extends BaseController $roledata = $data->getRole($_REQUEST['rolename']); - if (0 < $roledata->recordCount()) { + if (0 < $roledata->RecordCount()) { $roledata->fields['rolsuper'] = $data->phpBool($roledata->fields['rolsuper']); $roledata->fields['rolcreatedb'] = $data->phpBool($roledata->fields['rolcreatedb']); $roledata->fields['rolcreaterole'] = $data->phpBool($roledata->fields['rolcreaterole']); @@ -799,10 +799,10 @@ class RolesController extends BaseController echo "\t\t<td class=\"data2\">"; $memberof = $data->getMemberOf($_REQUEST['rolename']); - if (0 < $memberof->recordCount()) { + if (0 < $memberof->RecordCount()) { while (!$memberof->EOF) { echo $this->misc->printVal($memberof->fields['rolname']), '<br />' . \PHP_EOL; - $memberof->moveNext(); + $memberof->MoveNext(); } } echo "</td>\n\t</tr>" . \PHP_EOL; @@ -814,10 +814,10 @@ class RolesController extends BaseController echo "\t\t<td class=\"data1\">"; $members = $data->getMembers($_REQUEST['rolename']); - if (0 < $members->recordCount()) { + if (0 < $members->RecordCount()) { while (!$members->EOF) { echo $this->misc->printVal($members->fields['rolname']), '<br />' . \PHP_EOL; - $members->moveNext(); + $members->MoveNext(); } } echo "</td>\n\t</tr>" . \PHP_EOL; @@ -829,10 +829,10 @@ class RolesController extends BaseController echo "\t\t<td class=\"data2\">"; $adminmembers = $data->getMembers($_REQUEST['rolename'], 't'); - if (0 < $adminmembers->recordCount()) { + if (0 < $adminmembers->RecordCount()) { while (!$adminmembers->EOF) { echo $this->misc->printVal($adminmembers->fields['rolname']), '<br />' . \PHP_EOL; - $adminmembers->moveNext(); + $adminmembers->MoveNext(); } } echo "</td>\n\t</tr>" . \PHP_EOL; @@ -908,7 +908,7 @@ class RolesController extends BaseController $this->printTabs('server', 'account'); $this->printMsg($msg); - if (0 < $roledata->recordCount()) { + if (0 < $roledata->RecordCount()) { $roledata->fields['rolsuper'] = $data->phpBool($roledata->fields['rolsuper']); $roledata->fields['rolcreatedb'] = $data->phpBool($roledata->fields['rolcreatedb']); $roledata->fields['rolcreaterole'] = $data->phpBool($roledata->fields['rolcreaterole']); @@ -1092,12 +1092,12 @@ class RolesController extends BaseController if (!isset($_POST['memberof'])) { $memberof = $data->getMemberOf($_REQUEST['rolename']); - if (0 < $memberof->recordCount()) { + if (0 < $memberof->RecordCount()) { $i = 0; while (!$memberof->EOF) { $_POST['memberof'][$i++] = $memberof->fields['rolname']; - $memberof->moveNext(); + $memberof->MoveNext(); } } else { $_POST['memberof'] = []; @@ -1110,12 +1110,12 @@ class RolesController extends BaseController if (!isset($_POST['members'])) { $members = $data->getMembers($_REQUEST['rolename']); - if (0 < $members->recordCount()) { + if (0 < $members->RecordCount()) { $i = 0; while (!$members->EOF) { $_POST['members'][$i++] = $members->fields['rolname']; - $members->moveNext(); + $members->MoveNext(); } } else { $_POST['members'] = []; @@ -1128,12 +1128,12 @@ class RolesController extends BaseController if (!isset($_POST['adminmembers'])) { $adminmembers = $data->getMembers($_REQUEST['rolename'], 't'); - if (0 < $adminmembers->recordCount()) { + if (0 < $adminmembers->RecordCount()) { $i = 0; while (!$adminmembers->EOF) { $_POST['adminmembers'][$i++] = $adminmembers->fields['rolname']; - $adminmembers->moveNext(); + $adminmembers->MoveNext(); } } else { $_POST['adminmembers'] = []; diff --git a/src/controllers/SchemasController.php b/src/controllers/SchemasController.php index 810e3e63..6d62e897 100644 --- a/src/controllers/SchemasController.php +++ b/src/controllers/SchemasController.php @@ -319,7 +319,7 @@ class SchemasController extends BaseController '>%s</option>', $uname ) . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo "\t\t\t</select>\n\t\t</td>\n\t</tr>" . \PHP_EOL; echo \sprintf( @@ -385,7 +385,7 @@ class SchemasController extends BaseController $schema = $data->getSchemaByName($_REQUEST['schema']); - if (0 < $schema->recordCount()) { + if (0 < $schema->RecordCount()) { $this->coalesceArr($_POST, 'comment', $schema->fields['nspcomment']); $this->coalesceArr($_POST, 'schema', $_REQUEST['schema']); @@ -423,7 +423,7 @@ class SchemasController extends BaseController $uname = $users->fields['usename']; echo '<option value="', \htmlspecialchars($uname), '"', ($uname === $_POST['owner']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } else { diff --git a/src/controllers/SequencesController.php b/src/controllers/SequencesController.php index 47efa54b..1c114739 100644 --- a/src/controllers/SequencesController.php +++ b/src/controllers/SequencesController.php @@ -245,7 +245,7 @@ class SequencesController extends BaseController // Fetch the sequence information $sequence = $data->getSequence($_REQUEST['sequence']); - if (\is_object($sequence) && 0 < $sequence->recordCount()) { + if (\is_object($sequence) && 0 < $sequence->RecordCount()) { $sequence->fields['is_cycled'] = $data->phpBool($sequence->fields['is_cycled']); $sequence->fields['is_called'] = $data->phpBool($sequence->fields['is_called']); @@ -734,7 +734,7 @@ class SequencesController extends BaseController // Fetch the sequence information $sequence = $data->getSequence($_REQUEST['sequence']); - if (\is_object($sequence) && 0 < $sequence->recordCount()) { + if (\is_object($sequence) && 0 < $sequence->RecordCount()) { echo '<form action="' . \containerInstance()->subFolder . '/src/views/sequences" method="post">' . \PHP_EOL; echo '<table border="0">'; echo \sprintf( @@ -845,7 +845,7 @@ class SequencesController extends BaseController // Fetch the sequence information $sequence = $data->getSequence($_REQUEST['sequence']); - if (\is_object($sequence) && 0 < $sequence->recordCount()) { + if (\is_object($sequence) && 0 < $sequence->RecordCount()) { $this->coalesceArr($_POST, 'name', $_REQUEST['sequence']); $this->coalesceArr($_POST, 'comment', $sequence->fields['seqcomment']); @@ -893,7 +893,7 @@ class SequencesController extends BaseController '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } @@ -913,7 +913,7 @@ class SequencesController extends BaseController '>', \htmlspecialchars($schema), '</option>' . \PHP_EOL; - $schemas->moveNext(); + $schemas->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } diff --git a/src/controllers/ServersController.php b/src/controllers/ServersController.php index e287e5c3..6faf2666 100644 --- a/src/controllers/ServersController.php +++ b/src/controllers/ServersController.php @@ -45,7 +45,7 @@ class ServersController extends BaseController $msg = $this->msg; $server_html = $this->printHeader($this->headerTitle(), null, false); - $server_html .= $this->printBody(false); + $server_html .= $this->printBody(false,'flexbox_body',false,true); $server_html .= $this->printTrail('root', false); \ob_start(); @@ -95,7 +95,7 @@ class ServersController extends BaseController if ((false !== $group) && (isset($this->conf['srv_groups'][$group])) && - (0 < $groups->recordCount()) + (0 < $groups->RecordCount()) ) { $this->printTitle(\sprintf($this->lang['strgroupgroups'], \htmlentities($this->conf['srv_groups'][$group]['desc'], \ENT_QUOTES, 'UTF-8'))); echo $this->printTable($groups, $columns, $actions, $this->table_place); diff --git a/src/controllers/SqlController.php b/src/controllers/SqlController.php index 6da26277..49750a26 100644 --- a/src/controllers/SqlController.php +++ b/src/controllers/SqlController.php @@ -224,11 +224,11 @@ class SqlController extends BaseController // Now, depending on what happened do various things // First, if rows returned, then display the results - if (0 < $rs->recordCount()) { + if (0 < $rs->RecordCount()) { echo "<table>\n<tr>"; foreach ($rs->fields as $k => $v) { - $finfo = $rs->fetchField($k); + $finfo = $rs->FetchField($k); echo '<th class="data">', $this->misc->printVal($finfo->name), '</th>'; } echo '</tr>' . \PHP_EOL; @@ -242,15 +242,15 @@ class SqlController extends BaseController ) . \PHP_EOL; foreach ($rs->fields as $k => $v) { - $finfo = $rs->fetchField($k); + $finfo = $rs->FetchField($k); echo '<td style="white-space:nowrap;">', $this->misc->printVal($v, $finfo->type, ['null' => true]), '</td>'; } echo '</tr>' . \PHP_EOL; - $rs->moveNext(); + $rs->MoveNext(); ++$i; } echo '</table>' . \PHP_EOL; - echo '<p>', $rs->recordCount(), \sprintf( + echo '<p>', $rs->RecordCount(), \sprintf( ' %s</p>', $this->lang['strrows'] ) . \PHP_EOL; @@ -340,7 +340,7 @@ class SqlController extends BaseController ]; // Create view and download - if ('' !== $this->query && isset($rs) && \is_object($rs) && 0 < $rs->recordCount()) { + if ('' !== $this->query && isset($rs) && \is_object($rs) && 0 < $rs->RecordCount()) { // Report views don't set a schema, so we need to disable create view in that case if (isset($_REQUEST['schema'])) { $navlinks['createview'] = [ diff --git a/src/controllers/TablesController.php b/src/controllers/TablesController.php index 2837a71b..79f8b462 100644 --- a/src/controllers/TablesController.php +++ b/src/controllers/TablesController.php @@ -189,7 +189,7 @@ class TablesController extends BaseController ], ]; - if ((0 < $tables->recordCount()) && $data->hasCreateTableLike()) { + if ((0 < $tables->RecordCount()) && $data->hasCreateTableLike()) { $navlinks['createlike'] = [ 'attr' => [ 'href' => [ @@ -355,7 +355,7 @@ class TablesController extends BaseController echo "\t\t<td class=\"data\"><label for=\"withoutoids\"><input type=\"checkbox\" id=\"withoutoids\" name=\"withoutoids\"", isset($_REQUEST['withoutoids']) ? ' checked="checked"' : '', " />WITHOUT OIDS</label></td>\n\t</tr>" . \PHP_EOL; // Tablespace (if there are any) - if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { + if ($data->hasTablespaces() && 0 < $tablespaces->RecordCount()) { echo \sprintf( ' <tr> <th class="data left">%s</th>', @@ -378,7 +378,7 @@ class TablesController extends BaseController '>%s</option>', $spcname ) . \PHP_EOL; - $tablespaces->moveNext(); + $tablespaces->MoveNext(); } echo "\t\t\t</select>\n\t\t</td>\n\t</tr>" . \PHP_EOL; } @@ -510,7 +510,7 @@ class TablesController extends BaseController '>', $this->misc->printVal($typname), '</option>' . \PHP_EOL; - $types->moveNext(); + $types->MoveNext(); } echo "\t\t\t</select>\n\t\t\n"; @@ -758,7 +758,7 @@ class TablesController extends BaseController if ($data->hasTablespaces()) { $tblsp_ = $data->getTablespaces(); - if (0 < $tblsp_->recordCount()) { + if (0 < $tblsp_->RecordCount()) { $tblsp_ = $tblsp_->getArray(); $tblsp = []; @@ -879,7 +879,7 @@ class TablesController extends BaseController echo '<form action="' . \containerInstance()->subFolder . '/src/views/display" method="post" id="selectform">' . \PHP_EOL; - if (0 < $attrs->recordCount()) { + if (0 < $attrs->RecordCount()) { // JavaScript for select all feature echo '<script type="text/javascript">' . \PHP_EOL; echo "//<![CDATA[\n"; @@ -958,7 +958,7 @@ class TablesController extends BaseController ), '</td>'; echo '</tr>' . \PHP_EOL; ++$i; - $attrs->moveNext(); + $attrs->MoveNext(); } // Select all checkbox echo \sprintf( @@ -1054,7 +1054,7 @@ class TablesController extends BaseController echo '<form action="' . \containerInstance()->subFolder . '/src/views/tables" method="post" id="ac_form">' . \PHP_EOL; - if (0 < $attrs->recordCount()) { + if (0 < $attrs->RecordCount()) { echo '<table>' . \PHP_EOL; // Output table header @@ -1180,7 +1180,7 @@ class TablesController extends BaseController echo '</td>' . \PHP_EOL; echo '</tr>' . \PHP_EOL; ++$i; - $attrs->moveNext(); + $attrs->MoveNext(); } echo '</table>' . \PHP_EOL; diff --git a/src/controllers/TablespacesController.php b/src/controllers/TablespacesController.php index 41727a4c..12bfcae3 100644 --- a/src/controllers/TablespacesController.php +++ b/src/controllers/TablespacesController.php @@ -183,7 +183,7 @@ class TablespacesController extends BaseController // Fetch all users $users = $data->getUsers(); - if (0 < $tablespace->recordCount()) { + if (0 < $tablespace->RecordCount()) { $this->coalesceArr($_POST, 'name', $tablespace->fields['spcname']); $this->coalesceArr($_POST, 'owner', $tablespace->fields['spcowner']); @@ -213,7 +213,7 @@ class TablespacesController extends BaseController $uname = $users->fields['usename']; echo '<option value="', \htmlspecialchars($uname), '"', ($uname === $_POST['owner']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; @@ -364,7 +364,7 @@ class TablespacesController extends BaseController $uname = $users->fields['usename']; echo "\t\t\t<option value=\"", \htmlspecialchars($uname), '"', ($uname === $_POST['formOwner']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo "\t\t</select></td>\n\t</tr>" . \PHP_EOL; echo \sprintf( diff --git a/src/controllers/TblpropertiesController.php b/src/controllers/TblpropertiesController.php index b0d60606..2cef3bf7 100644 --- a/src/controllers/TblpropertiesController.php +++ b/src/controllers/TblpropertiesController.php @@ -348,7 +348,7 @@ class TblpropertiesController extends BaseController $tablespaces = $data->getTablespaces(true); } - if (0 < $table->recordCount()) { + if (0 < $table->RecordCount()) { $this->coalesceArr($_POST, 'name', $table->fields['relname']); $this->coalesceArr($_POST, 'owner', $table->fields['relowner']); @@ -389,7 +389,7 @@ class TblpropertiesController extends BaseController '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } @@ -409,13 +409,13 @@ class TblpropertiesController extends BaseController '>', \htmlspecialchars($schema), '</option>' . \PHP_EOL; - $schemas->moveNext(); + $schemas->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } // Tablespace (if there are any) - if ($data->hasTablespaces() && 0 < $tablespaces->recordCount()) { + if ($data->hasTablespaces() && 0 < $tablespaces->RecordCount()) { echo \sprintf( ' <tr> <th class="data left">%s</th>', @@ -438,7 +438,7 @@ class TblpropertiesController extends BaseController '>%s</option>', $spcname ) . \PHP_EOL; - $tablespaces->moveNext(); + $tablespaces->MoveNext(); } echo "\t\t\t</select>\n\t\t</td>\n\t</tr>" . \PHP_EOL; } @@ -692,7 +692,7 @@ class TblpropertiesController extends BaseController echo "\t<option value=\"", \htmlspecialchars($typname), '"', ($typname === $_POST['type']) ? ' selected="selected"' : '', '>', $misc->printVal($typname), '</option>' . \PHP_EOL; - $types->moveNext(); + $types->MoveNext(); } echo '</select></td>' . \PHP_EOL; diff --git a/src/controllers/TreeController.php b/src/controllers/TreeController.php index 6e4be3db..4f7e6103 100644 --- a/src/controllers/TreeController.php +++ b/src/controllers/TreeController.php @@ -9,6 +9,7 @@ namespace PHPPgAdmin\Controller; use PHPPgAdmin\ArrayRecordSet; use PHPPgAdmin\ContainerUtils; use PHPPgAdmin\Decorators\Decorator; +use PHPPgAdmin\Interfaces\RecordSet; use PHPPgAdmin\Traits\HelperTrait; /** @@ -68,7 +69,7 @@ class TreeController extends BaseController /** * Produce JSON data for the browser tree. * - * @param ArrayRecordSet $_treedata a set of records to populate the tree + * @param \PHPPgAdmin\Interfaces\Recordset|\ADORecordSet $_treedata a set of records to populate the tree * @param array $attrs Attributes for tree items * 'text' - the text for the tree node * 'icon' - an icon for node @@ -86,17 +87,18 @@ 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()) { + if (0 < $_treedata->RecordCount()) { while (!$_treedata->EOF) { - $treedata[] = $_treedata->fields; - $_treedata->moveNext(); + $treedata[] = $_treedata->fields; + $_treedata->MoveNext(); } - } + } + $tree_params = [ 'treedata' => &$treedata, 'attrs' => &$attrs, @@ -163,7 +165,11 @@ 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); + if ($href) { + $href = \str_replace('//', '/', \containerInstance()->subFolder . $href); + } + $tree = [ 'text' => Decorator::get_sanitized_value($attrs['text'], $rec), 'id' => \sha1(Decorator::get_sanitized_value($attrs['action'], $rec)), @@ -171,7 +177,7 @@ class TreeController extends BaseController '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' => Decorator::get_sanitized_value($attrs['action'], $rec)], + 'a_attr' => ['href' => $href], 'children' => false, ]; $url = Decorator::get_sanitized_value($attrs['branch'], $rec); diff --git a/src/controllers/TriggersController.php b/src/controllers/TriggersController.php index 70373008..1d32f48d 100644 --- a/src/controllers/TriggersController.php +++ b/src/controllers/TriggersController.php @@ -279,7 +279,7 @@ class TriggersController extends BaseController $triggerdata = $data->getTrigger($_REQUEST['table'], $_REQUEST['trigger']); - if (0 < $triggerdata->recordCount()) { + if (0 < $triggerdata->RecordCount()) { $this->coalesceArr($_POST, 'name', $triggerdata->fields['tgname']); echo '<form action="' . \containerInstance()->subFolder . '/src/views/triggers" method="post">' . \PHP_EOL; @@ -485,7 +485,7 @@ class TriggersController extends BaseController // Get all the functions that can be used in triggers $funcs = $data->getTriggerFunctions(); - if (0 === $funcs->recordCount()) { + if (0 === $funcs->RecordCount()) { $this->doDefault($this->lang['strnofunctions']); return; @@ -496,7 +496,7 @@ class TriggersController extends BaseController while (!$funcs->EOF) { $sel0->add(new XHtmlOption($funcs->fields['proname'])); - $funcs->moveNext(); + $funcs->MoveNext(); } // Populate times diff --git a/src/controllers/TypesController.php b/src/controllers/TypesController.php index c48c8a17..3eecc349 100644 --- a/src/controllers/TypesController.php +++ b/src/controllers/TypesController.php @@ -255,7 +255,7 @@ class TypesController extends BaseController $rowdata->fields['+type'] = $data->formatType($rowdata->fields['type'], $rowdata->fields['atttypmod']); }; - if (0 < $typedata->recordCount()) { + if (0 < $typedata->RecordCount()) { $vals = false; switch ($typedata->fields['typtype']) { @@ -549,7 +549,7 @@ class TypesController extends BaseController 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(); + $types->MoveNext(); } echo "\t\t\t</select>\n\t\t</td>" . \PHP_EOL; @@ -885,7 +885,7 @@ class TypesController extends BaseController '>%s</option>', $proname ) . \PHP_EOL; - $funcs->moveNext(); + $funcs->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; echo \sprintf( @@ -905,7 +905,7 @@ class TypesController extends BaseController '>%s</option>', $proname ) . \PHP_EOL; - $funcs->moveNext(); + $funcs->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; echo '<tr><th class="data left' . (\version_compare($data->major_version, '7.4', '<') ? ' required' : '') . \sprintf( @@ -937,7 +937,7 @@ class TypesController extends BaseController '>%s</option>', $currname ) . \PHP_EOL; - $types->moveNext(); + $types->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; echo \sprintf( diff --git a/src/controllers/UsersController.php b/src/controllers/UsersController.php index 0786d961..a03ca6d4 100644 --- a/src/controllers/UsersController.php +++ b/src/controllers/UsersController.php @@ -204,7 +204,7 @@ class UsersController extends BaseController $this->printTabs('server', 'account'); $this->printMsg($msg); - if (0 < $userdata->recordCount()) { + if (0 < $userdata->RecordCount()) { $userdata->fields['usesuper'] = $data->phpBool($userdata->fields['usesuper']); $userdata->fields['usecreatedb'] = $data->phpBool($userdata->fields['usecreatedb']); echo '<table>' . \PHP_EOL; @@ -334,7 +334,7 @@ class UsersController extends BaseController $userdata = $data->getUser($_REQUEST['username']); - if (!\is_object($userdata) || 0 < $userdata->recordCount()) { + if (!\is_object($userdata) || 0 < $userdata->RecordCount()) { $server_info = $this->misc->getServerInfo(); $canRename = $data->hasUserRename() && ($_REQUEST['username'] !== $server_info['username']); $userdata->fields['usesuper'] = $data->phpBool($userdata->fields['usesuper'] ?? false); diff --git a/src/controllers/ViewpropertiesController.php b/src/controllers/ViewpropertiesController.php index 33091e27..d0a5f3eb 100644 --- a/src/controllers/ViewpropertiesController.php +++ b/src/controllers/ViewpropertiesController.php @@ -137,7 +137,7 @@ class ViewpropertiesController extends BaseController $viewdata = $data->getView($_REQUEST[$this->subject]); $this->printHeader($this->headerTitle(), null, true, 'header_sqledit.twig'); - if (0 < $viewdata->recordCount()) { + if (0 < $viewdata->RecordCount()) { if (!isset($_POST['formDefinition'])) { $_POST['formDefinition'] = $viewdata->fields['vwdefinition']; $_POST['formComment'] = $viewdata->fields['relcomment']; @@ -323,7 +323,7 @@ class ViewpropertiesController extends BaseController // Fetch view info $view = $data->getView($_REQUEST[$this->subject]); - if (0 < $view->recordCount()) { + if (0 < $view->RecordCount()) { $this->coalesceArr($_POST, 'name', $view->fields['relname']); $this->coalesceArr($_POST, 'owner', $view->fields['relowner']); @@ -359,7 +359,7 @@ class ViewpropertiesController extends BaseController $uname = $users->fields['usename']; echo '<option value="', \htmlspecialchars($uname), '"', ($uname === $_POST['owner']) ? ' selected="selected"' : '', '>', \htmlspecialchars($uname), '</option>' . \PHP_EOL; - $users->moveNext(); + $users->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } @@ -376,7 +376,7 @@ class ViewpropertiesController extends BaseController $schema = $schemas->fields['nspname']; echo '<option value="', \htmlspecialchars($schema), '"', ($schema === $_POST['newschema']) ? ' selected="selected"' : '', '>', \htmlspecialchars($schema), '</option>' . \PHP_EOL; - $schemas->moveNext(); + $schemas->MoveNext(); } echo '</select></td></tr>' . \PHP_EOL; } diff --git a/src/database/ADOdbBase.php b/src/database/ADOdbBase.php index 9d8db0ff..28d04ce5 100644 --- a/src/database/ADOdbBase.php +++ b/src/database/ADOdbBase.php @@ -113,7 +113,7 @@ class ADOdbBase $rs = $this->selectSet($sql); - if ($rs->recordCount() !== \count($atts)) { + if ($rs->RecordCount() !== \count($atts)) { return -2; } @@ -121,7 +121,7 @@ class ADOdbBase while (!$rs->EOF) { $temp[$rs->fields['attnum']] = $rs->fields['attname']; - $rs->moveNext(); + $rs->MoveNext(); } return $temp; @@ -372,7 +372,7 @@ class ADOdbBase return $this->ErrorNo(); } - if (0 === $rs->recordCount()) { + if (0 === $rs->RecordCount()) { return -1; } diff --git a/src/database/databasetraits/DatabaseTrait.php b/src/database/databasetraits/DatabaseTrait.php index ad17c16d..c932ec51 100644 --- a/src/database/databasetraits/DatabaseTrait.php +++ b/src/database/databasetraits/DatabaseTrait.php @@ -643,7 +643,7 @@ trait DatabaseTrait while (!$_defaults->EOF) { $ret[$_defaults->fields['name']] = $_defaults->fields['setting']; - $_defaults->moveNext(); + $_defaults->MoveNext(); } return $ret; diff --git a/src/database/databasetraits/IndexTrait.php b/src/database/databasetraits/IndexTrait.php index 615330aa..8adf53a0 100644 --- a/src/database/databasetraits/IndexTrait.php +++ b/src/database/databasetraits/IndexTrait.php @@ -40,7 +40,7 @@ trait IndexTrait $v = $this->selectSet($sql); - return !(0 === $v->recordCount()); + return !(0 === $v->RecordCount()); } /** diff --git a/src/database/databasetraits/RowTrait.php b/src/database/databasetraits/RowTrait.php index fcbd0fed..e102f978 100644 --- a/src/database/databasetraits/RowTrait.php +++ b/src/database/databasetraits/RowTrait.php @@ -91,7 +91,7 @@ trait RowTrait // If none, check for an OID column. Even though OIDs can be duplicated, the edit and delete row // functions check that they're only modiying a single row. Otherwise, return empty array. - if (0 === $rs->recordCount()) { + if (0 === $rs->RecordCount()) { // Check for OID column $temp = []; diff --git a/src/database/databasetraits/SequenceTrait.php b/src/database/databasetraits/SequenceTrait.php index 47415d48..cb9fe670 100644 --- a/src/database/databasetraits/SequenceTrait.php +++ b/src/database/databasetraits/SequenceTrait.php @@ -133,7 +133,7 @@ trait SequenceTrait // Get the minimum value of the sequence $seq = $this->getSequence($sequence); - if (1 !== $seq->recordCount()) { + if (1 !== $seq->RecordCount()) { return -1; } @@ -302,7 +302,7 @@ trait SequenceTrait $data = $this->getSequence($sequence); - if (1 !== $data->recordCount()) { + if (1 !== $data->RecordCount()) { return -2; } diff --git a/src/database/databasetraits/TableTrait.php b/src/database/databasetraits/TableTrait.php index 2664368c..39a82db1 100644 --- a/src/database/databasetraits/TableTrait.php +++ b/src/database/databasetraits/TableTrait.php @@ -154,7 +154,7 @@ trait TableTrait // Fetch table $t = $this->getTable($table); - if (!\is_object($t) || 1 !== $t->recordCount()) { + if (!\is_object($t) || 1 !== $t->RecordCount()) { $this->rollbackTransaction(); return null; @@ -187,7 +187,7 @@ trait TableTrait // Output all table columns $col_comments_sql = ''; // Accumulate comments on columns - $num = $atts->recordCount() + $cons->recordCount(); + $num = $atts->RecordCount() + $cons->RecordCount(); $i = 1; $sql = $this->_dumpSerials($atts, $t, $sql, $col_comments_sql, $i, $num); @@ -393,7 +393,7 @@ trait TableTrait $rs = $this->selectSet($sql); - if (1 !== $rs->recordCount()) { + if (1 !== $rs->RecordCount()) { return false; } @@ -421,13 +421,13 @@ trait TableTrait return null; } - if (0 < $indexes->recordCount()) { + if (0 < $indexes->RecordCount()) { $sql .= "\n-- Indexes\n\n"; while (!$indexes->EOF) { $sql .= $indexes->fields['inddef'] . ";\n"; - $indexes->moveNext(); + $indexes->MoveNext(); } } @@ -440,14 +440,14 @@ trait TableTrait return null; } - if (0 < $triggers->recordCount()) { + if (0 < $triggers->RecordCount()) { $sql .= "\n-- Triggers\n\n"; while (!$triggers->EOF) { $sql .= $triggers->fields['tgdef']; $sql .= ";\n"; - $triggers->moveNext(); + $triggers->MoveNext(); } } @@ -460,13 +460,13 @@ trait TableTrait return null; } - if (0 < $rules->recordCount()) { + if (0 < $rules->RecordCount()) { $sql .= "\n-- Rules\n\n"; while (!$rules->EOF) { $sql .= $rules->fields['definition'] . "\n"; - $rules->moveNext(); + $rules->MoveNext(); } } @@ -893,7 +893,7 @@ trait TableTrait { $tblrs = $this->getTable($table); - if (1 !== $tblrs->recordCount()) { + if (1 !== $tblrs->RecordCount()) { return -2; } @@ -1312,7 +1312,7 @@ trait TableTrait $autovacs[] = $_; - $_autovacs->moveNext(); + $_autovacs->MoveNext(); } return new ArrayRecordSet($autovacs); @@ -1667,7 +1667,7 @@ trait TableTrait ); } - $atts->moveNext(); + $atts->MoveNext(); ++$i; } @@ -1725,7 +1725,7 @@ trait TableTrait $sql .= "\n"; } - $cons->moveNext(); + $cons->MoveNext(); ++$i; } @@ -1798,7 +1798,7 @@ trait TableTrait ); } - $atts->moveNext(); + $atts->MoveNext(); } return $sql; diff --git a/src/database/databasetraits/ViewTrait.php b/src/database/databasetraits/ViewTrait.php index ed74aace..b61cd9cb 100644 --- a/src/database/databasetraits/ViewTrait.php +++ b/src/database/databasetraits/ViewTrait.php @@ -137,7 +137,7 @@ trait ViewTrait { $data = $this->getView($view); - if (1 !== $data->recordCount()) { + if (1 !== $data->RecordCount()) { return -2; } diff --git a/src/interfaces/RecordSet.php b/src/interfaces/RecordSet.php new file mode 100644 index 00000000..a9ae6e6d --- /dev/null +++ b/src/interfaces/RecordSet.php @@ -0,0 +1,36 @@ +<?php + +/** + * PHPPgAdmin 6.1.3 + */ + +namespace PHPPgAdmin\Interfaces; +use ADOFieldObject; + +use Countable; + +interface RecordSet +{ + + + + /** + * Returns the recordCount. + */ + public function count(): int; + + /** + * Counts the records in the instance array. + * + * @return int number of records in the instance array + */ + public function RecordCount():int; + /** + * Advance the internal pointer of the instance array + * if no more fields are left, marks the instance variable $EOF as true. + */ + public function MoveNext(): void; + + public function FetchField(int $fieldoffset = -1): ADOFieldObject; + +} diff --git a/src/lib.inc.php b/src/lib.inc.php index c8e02d77..f1470e4b 100644 --- a/src/lib.inc.php +++ b/src/lib.inc.php @@ -57,7 +57,7 @@ function getAppInstance(): App $conf['IN_TEST'] = IN_TEST; // Fetch App and DI Container - $app = ContainerUtils::getAppInstance($conf); + $app = ContainerUtils::getAppInstance($conf); return $app; } diff --git a/src/router.php b/src/router.php index 7f965c38..3b098758 100644 --- a/src/router.php +++ b/src/router.php @@ -117,10 +117,28 @@ $app->get('/redirect[/{subject}]', function ( ) { $subject = (isset($args['subject'])) ? $args['subject'] : 'root'; $destinationurl = $this->getDestinationWithLastTab($subject); + return $response->withStatus(302)->withHeader('Location', $destinationurl); +}); + +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); + $className = '\PHPPgAdmin\Controller\\' . \ucfirst($subject) . 'Controller'; + $controller = new $className($this); + return $controller->render(); + + //$query_string = $request->getUri()->getQuery(); + //return $this->view->maybeRenderIframes($response, $subject, $query_string,'intro_view.twig'); - return $response->withStatus(302)->withHeader('Location', $destinationurl); + }); + $app->map(['GET', 'POST'], '/src/views/{subject}', function ( \Slim\Http\Request $request, \Slim\Http\Response $response, @@ -171,6 +189,7 @@ $app->get('/{subject:\w+}[/{server_id}]', function ( $subject = 'servers'; } $query_string = $request->getUri()->getQuery(); + $this->view->offsetSet('includeJsTree',true); return $this->view->maybeRenderIframes($response, $subject, $query_string); }); diff --git a/src/traits/AdminTrait.php b/src/traits/AdminTrait.php index 0890b083..dd9fa1f2 100644 --- a/src/traits/AdminTrait.php +++ b/src/traits/AdminTrait.php @@ -1046,7 +1046,7 @@ trait AdminTrait echo $this->printTable($autovac, $columns, $actions, 'admin-admin', $this->lang['strnovacuumconf']); - if (('table' === $type) && (0 === $autovac->recordCount())) { + if (('table' === $type) && (0 === $autovac->RecordCount())) { echo '<br />'; echo '<a href="' . \containerInstance()->subFolder . "/src/views/tables?action=confeditautovac&{$this->misc->href}&table="; diff --git a/src/traits/HelperTrait.php b/src/traits/HelperTrait.php index f869ffd6..0610572c 100644 --- a/src/traits/HelperTrait.php +++ b/src/traits/HelperTrait.php @@ -68,13 +68,13 @@ trait HelperTrait { $result = []; - if (0 >= $set->recordCount()) { + if (0 >= $set->RecordCount()) { return $result; } while (!$set->EOF) { $result[] = $field ? $set->fields[$field] : $set; - $set->moveNext(); + $set->MoveNext(); } return $result; diff --git a/src/traits/InsertEditRowTrait.php b/src/traits/InsertEditRowTrait.php index 27821d04..b44fece4 100644 --- a/src/traits/InsertEditRowTrait.php +++ b/src/traits/InsertEditRowTrait.php @@ -82,7 +82,7 @@ trait InsertEditRowTrait $fksprops['byfield'][$constrs->fields['p_attnum']][] = $constrs->fields['conid']; } - $constrs->moveNext(); + $constrs->MoveNext(); } $fksprops['code'] = '<script type="text/javascript">' . \PHP_EOL; diff --git a/src/traits/ServersTrait.php b/src/traits/ServersTrait.php index 16533cb9..0a8e8c16 100644 --- a/src/traits/ServersTrait.php +++ b/src/traits/ServersTrait.php @@ -146,7 +146,7 @@ trait ServersTrait $data = $this->misc->getDatabaseAccessor(); $databases = $data->getDatabases(); - if (0 < $databases->recordCount()) { + if (0 < $databases->RecordCount()) { $connection_html .= '<label>'; $connection_html .= $this->view->printHelp($this->lang['strdatabase'], 'pg.database', false); $connection_html .= ": <select id='selectdb' name=\"database\" >" . \PHP_EOL; @@ -161,7 +161,7 @@ trait ServersTrait $dbselected = isset($_REQUEST['database']) && $dbname === $_REQUEST['database'] ? ' selected="selected"' : ''; $connection_html .= '<option value="' . \htmlspecialchars($dbname) . '" ' . $dbselected . '>' . \htmlspecialchars($dbname) . '</option>' . \PHP_EOL; - $databases->moveNext(); + $databases->MoveNext(); } $connection_html .= '</select></label>' . \PHP_EOL; } else { diff --git a/src/traits/ViewsMatViewsPropertiesTrait.php b/src/traits/ViewsMatViewsPropertiesTrait.php index acc373c6..be52e53f 100644 --- a/src/traits/ViewsMatViewsPropertiesTrait.php +++ b/src/traits/ViewsMatViewsPropertiesTrait.php @@ -264,7 +264,7 @@ trait ViewsMatViewsPropertiesTrait $this->printTabs($this->subject, 'definition'); $this->printMsg($msg); - if (0 < $vdata->recordCount()) { + if (0 < $vdata->RecordCount()) { // Show comment if any if (null !== $vdata->fields['relcomment']) { echo '<p class="comment">', $this->misc->printVal($vdata->fields['relcomment']), '</p>' . \PHP_EOL; diff --git a/src/traits/ViewsMatviewsTrait.php b/src/traits/ViewsMatviewsTrait.php index d2cade2c..f839aecf 100644 --- a/src/traits/ViewsMatviewsTrait.php +++ b/src/traits/ViewsMatviewsTrait.php @@ -67,7 +67,7 @@ trait ViewsMatviewsTrait echo '<form action="' . \containerInstance()->subFolder . '/src/views/' . $this->script . '" method="post" id="selectform">'; echo \PHP_EOL; - if (0 < $attrs->recordCount()) { + if (0 < $attrs->RecordCount()) { // JavaScript for select all feature echo '<script type="text/javascript">' . \PHP_EOL; echo "//<![CDATA[\n"; @@ -126,7 +126,7 @@ trait ViewsMatviewsTrait ); echo '</td></tr>' . \PHP_EOL; ++$i; - $attrs->moveNext(); + $attrs->MoveNext(); } // Select all checkbox echo "<tr><td colspan=\"5\"><input type=\"checkbox\" id=\"selectall\" name=\"selectall\" accesskey=\"a\" onclick=\"javascript:selectAll()\" /><label for=\"selectall\">{$this->lang['strselectallfields']}</label></td></tr>"; @@ -198,7 +198,7 @@ trait ViewsMatviewsTrait $arrTmp['tablename'] = $tables->fields['relname']; $schema_and_name = $tables->fields['nspname'] . '.' . $tables->fields['relname']; $arrTables[$schema_and_name] = \serialize($arrTmp); - $tables->moveNext(); + $tables->MoveNext(); } echo \PHPPgAdmin\XHtml\HTMLController::printCombo($arrTables, 'formTables[]', false, '', true); @@ -347,7 +347,7 @@ trait ViewsMatviewsTrait //get linking keys $rsLinkKeys = $data->getLinkingKeys($arrSelTables); - $linkCount = $rsLinkKeys->recordCount() > $tblCount ? $rsLinkKeys->recordCount() : $tblCount; + $linkCount = $rsLinkKeys->RecordCount() > $tblCount ? $rsLinkKeys->RecordCount() : $tblCount; $arrFields = []; //array that will hold all our table/field names @@ -369,7 +369,7 @@ trait ViewsMatviewsTrait 'tablename' => $arrSelTables[$i]['tablename'], 'fieldname' => $attrs->fields['attname'], ] ); - $attrs->moveNext(); + $attrs->MoveNext(); } $data->setSchema($curSchema); @@ -418,7 +418,7 @@ trait ViewsMatviewsTrait if (!$rsLinkKeys->EOF) { $curLeftLink = \htmlspecialchars(\serialize(['schemaname' => $rsLinkKeys->fields['p_schema'], 'tablename' => $rsLinkKeys->fields['p_table'], 'fieldname' => $rsLinkKeys->fields['p_field']])); $curRightLink = \htmlspecialchars(\serialize(['schemaname' => $rsLinkKeys->fields['f_schema'], 'tablename' => $rsLinkKeys->fields['f_table'], 'fieldname' => $rsLinkKeys->fields['f_field']])); - $rsLinkKeys->moveNext(); + $rsLinkKeys->MoveNext(); } else { $curLeftLink = ''; $curRightLink = ''; diff --git a/src/xhtml/HTMLHeaderController.php b/src/xhtml/HTMLHeaderController.php index 1faa794b..ad08b5fc 100644 --- a/src/xhtml/HTMLHeaderController.php +++ b/src/xhtml/HTMLHeaderController.php @@ -90,13 +90,18 @@ class HTMLHeaderController extends HTMLController * * @return string the parsed template */ - public function printBody($doBody = true, $bodyClass = 'detailbody', $onloadInit = false) + public function printBody($doBody = true, $bodyClass = 'detailbody', $onloadInit = false,$includeJsTree=false) { - $bodyClass = $this->lang['applangdir'] . ' ' . \htmlspecialchars($bodyClass); - $onload = ($onloadInit ? 'onload="init();" ' : ''); - - $bodyHtml = \sprintf('<body data-controller="%s" class="%s" %s >', $this->controller_name, $bodyClass, $onload); - $bodyHtml .= \PHP_EOL; + + $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) { echo $bodyHtml; diff --git a/src/xhtml/HTMLTableController.php b/src/xhtml/HTMLTableController.php index 8575ad0b..7ab03023 100644 --- a/src/xhtml/HTMLTableController.php +++ b/src/xhtml/HTMLTableController.php @@ -97,7 +97,7 @@ class HTMLTableController extends HTMLController public function printTable($turn_into_datatable = true, $with_body = true) { - if (0 >= $this->tabledata->recordCount()) { + if (0 >= $this->tabledata->RecordCount()) { return "<p>{$this->nodata}</p>" . \PHP_EOL; } @@ -330,6 +330,7 @@ class HTMLTableController extends HTMLController if (null !== $val) { if (isset($column['url'])) { + $column['url']=str_replace(sprintf('%s%s',$this->container->subFolder,$this->container->subFolder),$this->container->subFolder,$column['url']??''); $tbody_html .= "<a href=\"{$column['url']}"; $tbody_html .= $this->printUrlVars($column['vars'], $tabledata->fields, false); $tbody_html .= '">'; @@ -350,7 +351,7 @@ class HTMLTableController extends HTMLController } $tbody_html .= '</tr>' . \PHP_EOL; - $tabledata->moveNext(); + $tabledata->MoveNext(); ++$i; } |