File manager - Edit - /home/opticamezl/www/newok/com_cpanel.tar
Back
js/admin-add_module.min.js 0000644 00000002111 15172606523 0011465 0 ustar 00 /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */(t=>{t.addEventListener("DOMContentLoaded",()=>{window.jSelectModuleType=()=>{const e=t.querySelectorAll("#moduleDashboardAddModal .modal-footer .btn.hidden");e.length&&setTimeout(()=>{e.forEach(o=>{o.classList.remove("hidden")})},1e3)};const s=t.querySelectorAll("#moduleDashboardAddModal .modal-footer .btn"),l=[];let n=!1;s.length&&s.forEach(e=>{e.classList.contains("hidden")&&l.push(e),e.addEventListener("click",o=>{let d=o.currentTarget;if(d||(d=o.target),d){const i=d.dataset.bsTarget;n=i==="#saveBtn",setTimeout(()=>{n=!1},1500);const r=t.querySelector("#moduleDashboardAddModal iframe"),c=(r.contentDocument||r.contentWindow.document).querySelector(i);c&&c.click()}})});const a=t.querySelector("#moduleDashboardAddModal");a&&(a.addEventListener("hide.bs.modal",()=>{l.forEach(e=>{e.classList.add("hidden")})}),a.addEventListener("hidden.bs.modal",()=>{n&&setTimeout(()=>{window.parent.location.reload()},1e3)}))})})(document); js/admin-add_module.min.js.gz 0000644 00000001065 15172606523 0012113 0 ustar 00 � �S�N1���"��h����F�!$����'YS�'�g��v���BU�'K3��7�=�=6`5.�]��?��`�].��+��6UDb�μ��CI����z-o+�$�Ÿ�rV���c�_�)xʱ��Y��� B���!��"9� ��xrq5�tK{l0�T��I*c&+�tn#�x<9������ʀI2.���z�kys4M����Pt]�>�������#�x�_u�OT,g��92f�F9&��x=G$L����>9H~Ae�F�k[�ĻQ �&J���=J�T�-}�����M6�7�ɷ���KD�o�s�|�j��'������J�'e}|╦N.�Xr<�vV�H�v�v�)P�:�t��(�sn6�6���̈�[i�$g��[E�� >�O�]Q�m�l��@�b�]�����UA"2]��-�NP�x�lK_�2}G��"�i�e�?M#�6���$"Wi��3ր�ŭ�}��)c~˒�^�4�wQ����?�R�FJ�Z�E/8T�?DUt���D��/�i�I js/admin-add_module-es5.js 0000644 00000005021 15172606523 0011400 0 ustar 00 (function () { 'use strict'; /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ (function (document) { document.addEventListener('DOMContentLoaded', function () { window.jSelectModuleType = function () { var elements = document.querySelectorAll('#moduleDashboardAddModal .modal-footer .btn.hidden'); if (elements.length) { setTimeout(function () { elements.forEach(function (button) { button.classList.remove('hidden'); }); }, 1000); } }; var buttons = document.querySelectorAll('#moduleDashboardAddModal .modal-footer .btn'); var hideButtons = []; var isSaving = false; if (buttons.length) { buttons.forEach(function (button) { if (button.classList.contains('hidden')) { hideButtons.push(button); } button.addEventListener('click', function (event) { var elem = event.currentTarget; // There is some bug with events in iframe where currentTarget is "null" // => prevent this here by bubble up if (!elem) { elem = event.target; } if (elem) { var clickTarget = elem.dataset.bsTarget; // We remember to be in the saving process isSaving = clickTarget === '#saveBtn'; // Reset saving process, if e.g. the validation of the form fails setTimeout(function () { isSaving = false; }, 1500); var iframe = document.querySelector('#moduleDashboardAddModal iframe'); var content = iframe.contentDocument || iframe.contentWindow.document; var targetBtn = content.querySelector(clickTarget); if (targetBtn) { targetBtn.click(); } } }); }); } var elementH = document.querySelector('#moduleDashboardAddModal'); if (elementH) { elementH.addEventListener('hide.bs.modal', function () { hideButtons.forEach(function (button) { button.classList.add('hidden'); }); }); elementH.addEventListener('hidden.bs.modal', function () { if (isSaving) { setTimeout(function () { window.parent.location.reload(); }, 1000); } }); } }); })(document); })(); js/admin-system-loader.min.js.gz 0000644 00000001173 15172606523 0012606 0 ustar 00 � �TMo!��WL8X`������F�"7r��vOU�^���:��ծ�Hm�ު����7�n� ��A�j�$ ~*�h��\W�a��Ɣ���ޗDU����J~a�qqܦrV�O p6�g�1*7����{�c����N�"�/NG��H�#@��y�H�|"Po+�MXɈ���4����8sA�)��"t��L�&��s<��z�5�x�g2�ᲧC� #"�ҡ_P��h9q�t�Ӌ�P$�@:!���&��(R�::&���P�C2�}����+sx�) 6��&<k���k����:�aȖHe0Cvs=����ai[!�D�͋_1U�'��#� lNq�����z"+r/�Z�.7Tư�+�"g�uh��Lh����9���ӡ���SIj�Rj,ߗ�3����z&����'�2�3�G����m�.9��Њkl{��RGT�#�K��Y��o���������0���*��W�Eo���~��g��e��:�]��IyK�;���=K�RS�4 e��)���u�c�Ķ�ѿ��u������V�}��w�������y��wJ�fv��&����A�M�u� �����R$� js/admin-system-loader-es5.js 0000644 00000004702 15172606523 0012100 0 ustar 00 (function () { 'use strict'; /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ (function (document, Joomla) { var init = function init() { // Cleanup window.removeEventListener('load', init); // Get the elements var elements = [].slice.call(document.querySelectorAll('.system-counter')); if (elements.length) { elements.forEach(function (element) { var badgeurl = element.getAttribute('data-url'); if (badgeurl && Joomla && Joomla.request && typeof Joomla.request === 'function') { Joomla.enqueueRequest({ url: badgeurl, method: 'POST', promise: true }).then(function (xhr) { var resp = xhr.responseText; var response; try { response = JSON.parse(resp); } catch (error) { throw new Error('Failed to parse JSON'); } if (response.error || !response.success) { element.classList.remove('icon-spin'); element.classList.remove('icon-spinner'); element.classList.add('text-danger'); element.classList.add('icon-remove'); } else if (response.data) { var elem = document.createElement('span'); elem.classList.add('float-end'); elem.classList.add('badge'); elem.classList.add('bg-warning', 'text-dark'); elem.innerHTML = Joomla.sanitizeHtml(response.data); element.parentNode.replaceChild(elem, element); } else { element.classList.remove('icon-spin'); element.classList.remove('icon-spinner'); element.classList.add('icon-check'); element.classList.add('text-success'); } }).catch(function () { element.classList.remove('icon-spin'); element.classList.remove('icon-spinner'); element.classList.add('text-danger'); element.classList.add('icon-remove'); }); } }); } }; // Give some times to the layout and other scripts to settle their stuff window.addEventListener('load', function () { setTimeout(init, 300); }); })(document, Joomla); })(); js/admin-cpanel-default-es5.min.js.gz 0000644 00000002074 15172606523 0013375 0 ustar 00 � �UMo7��Wla�6E� r�6��Vׅ����0���P䆜��*�����X�Bqw���{3;��m��i��$�V#-�wwߐ]��,�j���>'o����<�&j � b��kI>����ߟN��s�d���K(g5��r|vM��CT�\4���d�z� 1���["q !$��Ip6H|�7dw�AE��g�I�h�<6�,��!XC�;;˷�\lz"�U�b�L�c�|�cKSr��1���>���x�����-Vٴ��B��M� WG����X�E�$��R���9_, ��ˈ$��Q6�Β��i0��u���3m(��e=��u~U�0��,����\�`;�!N��S�T�2� �1�O �F�괷:�P^��l�D׃=���)��q0=zq>��b�@L�9���s5���h.�j� �/�.D�FkH���G.*�QjR�G��4���Hyd�"x<d�Ix���:���7O!%UAb�I��w�� Q�1�??��_� �w�g�GÓ�_w�������u�?�(�]�Lqc���3�2�'����-��/�\n��*���֔-8� v4;1��VP�{Ϡ���ͭLy��V�1�_��8��s��m_YJ9/��q��x�s�ϽT����&�3ɨvV�� mfW�*V�O��լ��E���I/�?���zd�CE�"�Ba;��E;��_�h�Qx��9�� ��0M���x�Ǫ�tE�d���h� �d�)+�S�P�Q�U4���W�G�����,x����1���Uy�p,5X��>�{��d��5𦤩V�нj�X<t���d@�c��K��C����y"����fS �EK�I9���X��Aa�E��M�:��;ez)�/�VܪY���5�hk�-M��&u�`FY��+�m�M�e�b�����1�q��r 0�#;��Љa�(]����x~Җ��1L;��� [�p�Nƅy��]P�n.��D����A� ۛ�o:��w��=�~:�x����t�*�{�]�9%���aS�M� �r���,�^V�x��?��>�� js/admin-system-loader.js 0000644 00000004404 15172606523 0011405 0 ustar 00 /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ ((document, Joomla) => { const init = () => { // Cleanup window.removeEventListener('load', init); // Get the elements const elements = [].slice.call(document.querySelectorAll('.system-counter')); if (elements.length) { elements.forEach(element => { const badgeurl = element.getAttribute('data-url'); if (badgeurl && Joomla && Joomla.request && typeof Joomla.request === 'function') { Joomla.enqueueRequest({ url: badgeurl, method: 'POST', promise: true }).then(xhr => { const resp = xhr.responseText; let response; try { response = JSON.parse(resp); } catch (error) { throw new Error('Failed to parse JSON'); } if (response.error || !response.success) { element.classList.remove('icon-spin'); element.classList.remove('icon-spinner'); element.classList.add('text-danger'); element.classList.add('icon-remove'); } else if (response.data) { const elem = document.createElement('span'); elem.classList.add('float-end'); elem.classList.add('badge'); elem.classList.add('bg-warning', 'text-dark'); elem.innerHTML = Joomla.sanitizeHtml(response.data); element.parentNode.replaceChild(elem, element); } else { element.classList.remove('icon-spin'); element.classList.remove('icon-spinner'); element.classList.add('icon-check'); element.classList.add('text-success'); } }).catch(() => { element.classList.remove('icon-spin'); element.classList.remove('icon-spinner'); element.classList.add('text-danger'); element.classList.add('icon-remove'); }); } }); } }; // Give some times to the layout and other scripts to settle their stuff window.addEventListener('load', () => { setTimeout(init, 300); }); })(document, Joomla); js/admin-system-loader.min.js 0000644 00000002354 15172606523 0012171 0 ustar 00 /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */((r,t)=>{const a=()=>{window.removeEventListener("load",a);const c=[].slice.call(r.querySelectorAll(".system-counter"));c.length&&c.forEach(s=>{const o=s.getAttribute("data-url");o&&t&&t.request&&typeof t.request=="function"&&t.enqueueRequest({url:o,method:"POST",promise:!0}).then(d=>{const n=d.responseText;let i;try{i=JSON.parse(n)}catch{throw new Error("Failed to parse JSON")}if(i.error||!i.success)s.classList.remove("icon-spin"),s.classList.remove("icon-spinner"),s.classList.add("text-danger"),s.classList.add("icon-remove");else if(i.data){const e=r.createElement("span");e.classList.add("float-end"),e.classList.add("badge"),e.classList.add("bg-warning","text-dark"),e.innerHTML=t.sanitizeHtml(i.data),s.parentNode.replaceChild(e,s)}else s.classList.remove("icon-spin"),s.classList.remove("icon-spinner"),s.classList.add("icon-check"),s.classList.add("text-success")}).catch(()=>{s.classList.remove("icon-spin"),s.classList.remove("icon-spinner"),s.classList.add("text-danger"),s.classList.add("icon-remove")})})};window.addEventListener("load",()=>{setTimeout(a,300)})})(document,Joomla); js/admin-cpanel-default.min.js.gz 0000644 00000001723 15172606523 0012703 0 ustar 00 � �U]S7}�WhT���,2y��u���c��/��ҍ�D+m�����Y���&o{WW�{�����!����h�$� 89��J� �dʨ�L"�$��kI~[ ��n/�K�%��)⼿�rV�O@!'�W�<D��yy�&���-�d�'�$D�B�@ƣ��t:�x�;d���OH܄�kȘ1;|�ȳ>�R���/m�D���Z�*���*h6V(K_4|�bL� ��_�k��Zo�N��P� >�!��Ĵ�*}�6�#���s�ٗ<>9<B���D`�(T����5��PF�VBBV��u�w�P�ik�����"\ӥ�g�K*��ԭ� x���h���pV��d{U��OK�!�.�6�2�څ�ԣr�cUQ@���d�"x< d�<��`a�a����7'���CbU���~Dy w(g��&�����p<�:=�:��f���W��lz5�S�?ռ�7�1�5��ذZ�I��������uo�l�o�b3���<ߏ�z-!�=���I�ưR+��o%�)8��s�>�x3?ʹ��P��Y��R3��c��q;��Y�� V��s�n�y��:�8���ɟa�?�l�=ʀ���_��Z��v�њ�p��s� �Ja���Ux�'��tD�d���h�!g ��|�:OTaTj��,=��,5J����g��hd\.��Y�x��� �`sm�x�{ �;�JCo��T(Ov+U_��ݑs�����&�аԍw#��9��lMγN�X�����Z�z�V9����I�,>W�](n�DVj�tpe��g�F�Aȋ�L ���{/�e�� F��~9�����)W�MfK�Z1,��ÿ�a�?ò5W��5��R�锄}ŭ.(CEsH�s���M7_�0���0��}������Ns�^_�S��� �]��۾�9[Zo�R�����X��"�{;� ��n js/admin-add_module-es5.min.js 0000644 00000002254 15172606523 0012167 0 ustar 00 (function(){"use strict";/** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */(function(n){n.addEventListener("DOMContentLoaded",function(){window.jSelectModuleType=function(){var e=n.querySelectorAll("#moduleDashboardAddModal .modal-footer .btn.hidden");e.length&&setTimeout(function(){e.forEach(function(t){t.classList.remove("hidden")})},1e3)};var i=n.querySelectorAll("#moduleDashboardAddModal .modal-footer .btn"),r=[],d=!1;i.length&&i.forEach(function(e){e.classList.contains("hidden")&&r.push(e),e.addEventListener("click",function(t){var o=t.currentTarget;if(o||(o=t.target),o){var l=o.dataset.bsTarget;d=l==="#saveBtn",setTimeout(function(){d=!1},1500);var s=n.querySelector("#moduleDashboardAddModal iframe"),f=s.contentDocument||s.contentWindow.document,c=f.querySelector(l);c&&c.click()}})});var a=n.querySelector("#moduleDashboardAddModal");a&&(a.addEventListener("hide.bs.modal",function(){r.forEach(function(e){e.classList.add("hidden")})}),a.addEventListener("hidden.bs.modal",function(){d&&setTimeout(function(){window.parent.location.reload()},1e3)}))})})(document)})(); js/admin-add_module.js 0000644 00000004445 15172606523 0010717 0 ustar 00 /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ (document => { document.addEventListener('DOMContentLoaded', () => { window.jSelectModuleType = () => { const elements = document.querySelectorAll('#moduleDashboardAddModal .modal-footer .btn.hidden'); if (elements.length) { setTimeout(() => { elements.forEach(button => { button.classList.remove('hidden'); }); }, 1000); } }; const buttons = document.querySelectorAll('#moduleDashboardAddModal .modal-footer .btn'); const hideButtons = []; let isSaving = false; if (buttons.length) { buttons.forEach(button => { if (button.classList.contains('hidden')) { hideButtons.push(button); } button.addEventListener('click', event => { let elem = event.currentTarget; // There is some bug with events in iframe where currentTarget is "null" // => prevent this here by bubble up if (!elem) { elem = event.target; } if (elem) { const clickTarget = elem.dataset.bsTarget; // We remember to be in the saving process isSaving = clickTarget === '#saveBtn'; // Reset saving process, if e.g. the validation of the form fails setTimeout(() => { isSaving = false; }, 1500); const iframe = document.querySelector('#moduleDashboardAddModal iframe'); const content = iframe.contentDocument || iframe.contentWindow.document; const targetBtn = content.querySelector(clickTarget); if (targetBtn) { targetBtn.click(); } } }); }); } const elementH = document.querySelector('#moduleDashboardAddModal'); if (elementH) { elementH.addEventListener('hide.bs.modal', () => { hideButtons.forEach(button => { button.classList.add('hidden'); }); }); elementH.addEventListener('hidden.bs.modal', () => { if (isSaving) { setTimeout(() => { window.parent.location.reload(); }, 1000); } }); } }); })(document); js/admin-cpanel-default.min.js 0000644 00000003556 15172606523 0012272 0 ustar 00 /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */const debounce=(i,r=250,t)=>(...d)=>clearTimeout(t,t=setTimeout(i,r,...d));((i,r,t)=>{t.unpublishModule=e=>{const o="index.php?option=com_modules&task=modules.unpublish&format=json",n=e.getAttribute("data-module-id");t.request({url:`${o}&cid=${n}`,method:"POST",headers:{"Content-Type":"application/json"},onSuccess:()=>{const s=e.closest(".module-wrapper");s.parentNode.removeChild(s),t.renderMessages({message:[t.Text._("COM_CPANEL_UNPUBLISH_MODULE_SUCCESS")]})},onError:()=>{t.renderMessages({error:[t.Text._("COM_CPANEL_UNPUBLISH_MODULE_ERROR")]})}})};const d=()=>{const e=r.getElementById("content");e&&[].slice.call(e.querySelectorAll(".unpublish-module")).forEach(n=>{n.addEventListener("click",({target:s})=>t.unpublishModule(s))}),r.removeEventListener("DOMContentLoaded",d)};r.addEventListener("DOMContentLoaded",d),{$gridBox:null,gridAutoRows:0,gridRowGap:10,resizeGridItem(e,o,n){const s=e.querySelector(".card");if(s){const l=s.getBoundingClientRect().height+n,a=Math.ceil(l/(o+n));e.style.gridRowEnd=`span ${a}`}},resizeAllGridItems(){[].slice.call(this.$gridBox.children).forEach(o=>{this.resizeGridItem(o,this.gridAutoRows,this.gridRowGap)})},initialise(){this.$gridBox=r.querySelector("#cpanel-modules .card-columns");const e=i.getComputedStyle(this.$gridBox);this.gridAutoRows=parseInt(e.getPropertyValue("grid-auto-rows"),10)||this.gridAutoRows,this.gridRowGap=parseInt(e.getPropertyValue("grid-row-gap"),10)||this.gridRowGap,this.resizeAllGridItems(),i.addEventListener("load",()=>this.resizeAllGridItems()),i.addEventListener("joomla:menu-toggle",()=>{setTimeout(()=>this.resizeAllGridItems(),330)}),i.addEventListener("resize",debounce(()=>this.resizeAllGridItems(),50))}}.initialise()})(window,document,window.Joomla); js/admin-system-loader-es5.min.js.gz 0000644 00000001215 15172606523 0013275 0 ustar 00 � �TMo1��W>Dv�q�貈� _�"�8��$kp��x�4��w�� n�6�����rV�e��TkQ2Bf�E������ܦnE~�2�<R�h��8�0�4�'�)W�:Z O[�.��-�K�)�E0:�� �Ř ���{x��x[.��p|�^!e�"<�D#Ր���t:�|�;��'�7�W�+C��m �T륏.-5�"]�� #���R�d�����>�|��s�N[�4�� ���r����y�c�Jd$�Tmu�8�v4�z�hbl��T�Z�M�s�Cf��Q g،��8���k�˂�G#^u�f��4�VP�D���ۢr](�j��&w ޞM�E�QZ���7Js��'��T� s�b�s��k�՚�7ӳS��(��Xö]sKi �0!J$��:��&�6~&YcO����\�ŜU�6����o!��)�s�P�_����8'�5�����}�%T�!#��Pc�%4����,E�L��_�f!ctBU�����^`>^�>�Euk�>��T��O������|ŋpk��0�ir� �`,�>8IUV��<�"��-���f�Bm�n���y��Io�Uy�ܽ��_�s��TXb�x�.��߈���w�%U�|&^q{% js/admin-cpanel-default-es5.js 0000644 00000011121 15172606523 0012165 0 ustar 00 (function () { 'use strict'; /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ /** * Debounce * https://gist.github.com/nmsdvid/8807205 * * @param { function } callback The callback function to be executed * @param { int } time The time to wait before firing the callback * @param { int } interval The interval */ // eslint-disable-next-line no-param-reassign, no-return-assign, default-param-last var debounce = function debounce(callback, time, interval) { if (time === void 0) { time = 250; } return function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return clearTimeout(interval, interval = setTimeout.apply(void 0, [callback, time].concat(args))); }; }; (function (window, document, Joomla) { Joomla.unpublishModule = function (element) { // Get variables var baseUrl = 'index.php?option=com_modules&task=modules.unpublish&format=json'; var id = element.getAttribute('data-module-id'); Joomla.request({ url: baseUrl + "&cid=" + id, method: 'POST', headers: { 'Content-Type': 'application/json' }, onSuccess: function onSuccess() { var wrapper = element.closest('.module-wrapper'); wrapper.parentNode.removeChild(wrapper); Joomla.renderMessages({ message: [Joomla.Text._('COM_CPANEL_UNPUBLISH_MODULE_SUCCESS')] }); }, onError: function onError() { Joomla.renderMessages({ error: [Joomla.Text._('COM_CPANEL_UNPUBLISH_MODULE_ERROR')] }); } }); }; var onBoot = function onBoot() { var cpanelModules = document.getElementById('content'); if (cpanelModules) { var links = [].slice.call(cpanelModules.querySelectorAll('.unpublish-module')); links.forEach(function (link) { link.addEventListener('click', function (_ref) { var target = _ref.target; return Joomla.unpublishModule(target); }); }); } // Cleanup document.removeEventListener('DOMContentLoaded', onBoot); }; // Initialise document.addEventListener('DOMContentLoaded', onBoot); // Masonry layout for cpanel cards var MasonryLayout = { $gridBox: null, gridAutoRows: 0, gridRowGap: 10, // Calculate "grid-row-end" property resizeGridItem: function resizeGridItem($cell, rowHeight, rowGap) { var $content = $cell.querySelector('.card'); if ($content) { var contentHeight = $content.getBoundingClientRect().height + rowGap; var rowSpan = Math.ceil(contentHeight / (rowHeight + rowGap)); $cell.style.gridRowEnd = "span " + rowSpan; } }, // Check a size of every cell in the grid resizeAllGridItems: function resizeAllGridItems() { var _this = this; var $gridCells = [].slice.call(this.$gridBox.children); $gridCells.forEach(function ($cell) { _this.resizeGridItem($cell, _this.gridAutoRows, _this.gridRowGap); }); }, initialise: function initialise() { var _this2 = this; this.$gridBox = document.querySelector('#cpanel-modules .card-columns'); var gridStyle = window.getComputedStyle(this.$gridBox); this.gridAutoRows = parseInt(gridStyle.getPropertyValue('grid-auto-rows'), 10) || this.gridAutoRows; this.gridRowGap = parseInt(gridStyle.getPropertyValue('grid-row-gap'), 10) || this.gridRowGap; this.resizeAllGridItems(); // Recheck the layout after all content (fonts and images) is loaded. window.addEventListener('load', function () { return _this2.resizeAllGridItems(); }); // Recheck the layout when the menu is toggled window.addEventListener('joomla:menu-toggle', function () { // 300ms is animation time, need to wait for the animation to end setTimeout(function () { return _this2.resizeAllGridItems(); }, 330); }); // Watch on window resize window.addEventListener('resize', debounce(function () { return _this2.resizeAllGridItems(); }, 50)); } }; // Initialise Masonry layout at the very beginning, to avoid jumping. // We can do this because the script is deferred. MasonryLayout.initialise(); })(window, document, window.Joomla); })(); js/admin-cpanel-default.js 0000644 00000007410 15172606523 0011501 0 ustar 00 /** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ /** * Debounce * https://gist.github.com/nmsdvid/8807205 * * @param { function } callback The callback function to be executed * @param { int } time The time to wait before firing the callback * @param { int } interval The interval */ // eslint-disable-next-line no-param-reassign, no-return-assign, default-param-last const debounce = (callback, time = 250, interval) => (...args) => clearTimeout(interval, interval = setTimeout(callback, time, ...args)); ((window, document, Joomla) => { Joomla.unpublishModule = element => { // Get variables const baseUrl = 'index.php?option=com_modules&task=modules.unpublish&format=json'; const id = element.getAttribute('data-module-id'); Joomla.request({ url: `${baseUrl}&cid=${id}`, method: 'POST', headers: { 'Content-Type': 'application/json' }, onSuccess: () => { const wrapper = element.closest('.module-wrapper'); wrapper.parentNode.removeChild(wrapper); Joomla.renderMessages({ message: [Joomla.Text._('COM_CPANEL_UNPUBLISH_MODULE_SUCCESS')] }); }, onError: () => { Joomla.renderMessages({ error: [Joomla.Text._('COM_CPANEL_UNPUBLISH_MODULE_ERROR')] }); } }); }; const onBoot = () => { const cpanelModules = document.getElementById('content'); if (cpanelModules) { const links = [].slice.call(cpanelModules.querySelectorAll('.unpublish-module')); links.forEach(link => { link.addEventListener('click', ({ target }) => Joomla.unpublishModule(target)); }); } // Cleanup document.removeEventListener('DOMContentLoaded', onBoot); }; // Initialise document.addEventListener('DOMContentLoaded', onBoot); // Masonry layout for cpanel cards const MasonryLayout = { $gridBox: null, gridAutoRows: 0, gridRowGap: 10, // Calculate "grid-row-end" property resizeGridItem($cell, rowHeight, rowGap) { const $content = $cell.querySelector('.card'); if ($content) { const contentHeight = $content.getBoundingClientRect().height + rowGap; const rowSpan = Math.ceil(contentHeight / (rowHeight + rowGap)); $cell.style.gridRowEnd = `span ${rowSpan}`; } }, // Check a size of every cell in the grid resizeAllGridItems() { const $gridCells = [].slice.call(this.$gridBox.children); $gridCells.forEach($cell => { this.resizeGridItem($cell, this.gridAutoRows, this.gridRowGap); }); }, initialise() { this.$gridBox = document.querySelector('#cpanel-modules .card-columns'); const gridStyle = window.getComputedStyle(this.$gridBox); this.gridAutoRows = parseInt(gridStyle.getPropertyValue('grid-auto-rows'), 10) || this.gridAutoRows; this.gridRowGap = parseInt(gridStyle.getPropertyValue('grid-row-gap'), 10) || this.gridRowGap; this.resizeAllGridItems(); // Recheck the layout after all content (fonts and images) is loaded. window.addEventListener('load', () => this.resizeAllGridItems()); // Recheck the layout when the menu is toggled window.addEventListener('joomla:menu-toggle', () => { // 300ms is animation time, need to wait for the animation to end setTimeout(() => this.resizeAllGridItems(), 330); }); // Watch on window resize window.addEventListener('resize', debounce(() => this.resizeAllGridItems(), 50)); } }; // Initialise Masonry layout at the very beginning, to avoid jumping. // We can do this because the script is deferred. MasonryLayout.initialise(); })(window, document, window.Joomla); js/admin-system-loader-es5.min.js 0000644 00000002445 15172606523 0012664 0 ustar 00 (function(){"use strict";/** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */(function(a,i){var e=function o(){window.removeEventListener("load",o);var c=[].slice.call(a.querySelectorAll(".system-counter"));c.length&&c.forEach(function(s){var n=s.getAttribute("data-url");n&&i&&i.request&&typeof i.request=="function"&&i.enqueueRequest({url:n,method:"POST",promise:!0}).then(function(d){var u=d.responseText,t;try{t=JSON.parse(u)}catch{throw new Error("Failed to parse JSON")}if(t.error||!t.success)s.classList.remove("icon-spin"),s.classList.remove("icon-spinner"),s.classList.add("text-danger"),s.classList.add("icon-remove");else if(t.data){var r=a.createElement("span");r.classList.add("float-end"),r.classList.add("badge"),r.classList.add("bg-warning","text-dark"),r.innerHTML=i.sanitizeHtml(t.data),s.parentNode.replaceChild(r,s)}else s.classList.remove("icon-spin"),s.classList.remove("icon-spinner"),s.classList.add("icon-check"),s.classList.add("text-success")}).catch(function(){s.classList.remove("icon-spin"),s.classList.remove("icon-spinner"),s.classList.add("text-danger"),s.classList.add("icon-remove")})})};window.addEventListener("load",function(){setTimeout(e,300)})})(document,Joomla)})(); js/admin-add_module-es5.min.js.gz 0000644 00000001107 15172606523 0012602 0 ustar 00 � �S�n�@��+W�v#�i�8�1��QU)i�Z�q���-띰;N���;���iI�����7�=��,z.n�&���$�z{��>h��;��1~,��� ���g�� l�� Č�y-ٻ�h����B^#�NI��*g5��1vz��������L��l���!D��2�)����Fg���ˡ����z}~O܋[/�1�9x�H�^��\���S[Ce�$�֩� .�%8�4F�8���A�53W�A����zÑs<ٯ�NT�&��92f�F9&��D$LN���>9H~JU�F�+[6ķ�@��JWE�$�S1�g� 5'w+Wb� �X�-U��T�����/��gk�-�^=)���4 r�Ċ��`�7�Y�}�Z��I݄ ��T���\�A]Ed��uJ�HE 9��qS��(�����|�햺�p� ^�N��T�?�fˠjHDV��<��nj�\ޗ��f6�L�'r��ZvZp�Z�՚��w6��U�r�C�������Q��_ U�<J�ȞA0�wc��R���f�5Y:Ԫm� ��w�*�S�}��/vY�� js/admin-cpanel-default-es5.min.js 0000644 00000004235 15172606523 0012757 0 ustar 00 (function(){"use strict";/** * @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */var c=function(s,t,u){return t===void 0&&(t=250),function(){for(var a=arguments.length,r=new Array(a),e=0;e<a;e++)r[e]=arguments[e];return clearTimeout(u,u=setTimeout.apply(void 0,[s,t].concat(r)))}};(function(d,s,t){t.unpublishModule=function(r){var e="index.php?option=com_modules&task=modules.unpublish&format=json",i=r.getAttribute("data-module-id");t.request({url:e+"&cid="+i,method:"POST",headers:{"Content-Type":"application/json"},onSuccess:function(){var o=r.closest(".module-wrapper");o.parentNode.removeChild(o),t.renderMessages({message:[t.Text._("COM_CPANEL_UNPUBLISH_MODULE_SUCCESS")]})},onError:function(){t.renderMessages({error:[t.Text._("COM_CPANEL_UNPUBLISH_MODULE_ERROR")]})}})};var u=function r(){var e=s.getElementById("content");if(e){var i=[].slice.call(e.querySelectorAll(".unpublish-module"));i.forEach(function(n){n.addEventListener("click",function(o){var l=o.target;return t.unpublishModule(l)})})}s.removeEventListener("DOMContentLoaded",r)};s.addEventListener("DOMContentLoaded",u);var a={$gridBox:null,gridAutoRows:0,gridRowGap:10,resizeGridItem:function(e,i,n){var o=e.querySelector(".card");if(o){var l=o.getBoundingClientRect().height+n,g=Math.ceil(l/(i+n));e.style.gridRowEnd="span "+g}},resizeAllGridItems:function(){var e=this,i=[].slice.call(this.$gridBox.children);i.forEach(function(n){e.resizeGridItem(n,e.gridAutoRows,e.gridRowGap)})},initialise:function(){var e=this;this.$gridBox=s.querySelector("#cpanel-modules .card-columns");var i=d.getComputedStyle(this.$gridBox);this.gridAutoRows=parseInt(i.getPropertyValue("grid-auto-rows"),10)||this.gridAutoRows,this.gridRowGap=parseInt(i.getPropertyValue("grid-row-gap"),10)||this.gridRowGap,this.resizeAllGridItems(),d.addEventListener("load",function(){return e.resizeAllGridItems()}),d.addEventListener("joomla:menu-toggle",function(){setTimeout(function(){return e.resizeAllGridItems()},330)}),d.addEventListener("resize",c(function(){return e.resizeAllGridItems()},50))}};a.initialise()})(window,document,window.Joomla)})(); joomla.asset.json 0000644 00000004226 15172606523 0010051 0 ustar 00 { "$schema": "https://developer.joomla.org/schemas/json-schema/web_assets.json", "name": "com_cpanel", "version": "4.0.0", "description": "Joomla CMS", "license": "GPL-2.0-or-later", "assets": [ { "name": "com_cpanel.admin-addmodule.es5", "type": "script", "uri": "com_cpanel/admin-add_module-es5.min.js", "dependencies": [ "core" ], "attributes": { "nomodule": true, "defer": true }, "version": "5bc10e073f2a2b5dad01951aaa7369c1750b8fb3" }, { "name": "com_cpanel.admin-addmodule", "type": "script", "uri": "com_cpanel/admin-add_module.min.js", "dependencies": [ "com_cpanel.admin-addmodule.es5" ], "attributes": { "type": "module" }, "version": "84a7c56832dc933b6718b60858910c1028a8add6" }, { "name": "com_cpanel.admin-cpanel.es5", "type": "script", "uri": "com_cpanel/admin-cpanel-default-es5.min.js", "dependencies": [ "core" ], "attributes": { "nomodule": true, "defer": true }, "version": "34dc661a6bd9110f8b8f13c307d705093c921b6f" }, { "name": "com_cpanel.admin-cpanel", "type": "script", "uri": "com_cpanel/admin-cpanel-default.min.js", "dependencies": [ "com_cpanel.admin-cpanel.es5" ], "attributes": { "type": "module" }, "version": "7fc6a0ceafc7c05d88122061aafec820dffccbbd" }, { "name": "com_cpanel.admin-system-loader.es5", "type": "script", "uri": "com_cpanel/admin-system-loader-es5.min.js", "dependencies": [ "core" ], "attributes": { "nomodule": true, "defer": true }, "version": "18e45327283bc5fed60579064d1c60c02a9c436c" }, { "name": "com_cpanel.admin-system-loader", "type": "script", "uri": "com_cpanel/admin-system-loader.min.js", "dependencies": [ "com_cpanel.admin-system-loader.es5" ], "attributes": { "type": "module", "defer": true }, "version": "b2d1ac8205d56eec891e1ba751e9a0680d3bb6c0" } ] } tmpl/cpanel/default.php 0000644 00000005603 15172634230 0011126 0 ustar 00 <?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\Helper\ModuleHelper; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; // Load JavaScript message titles Text::script('ERROR'); Text::script('WARNING'); Text::script('NOTICE'); Text::script('MESSAGE'); Text::script('COM_CPANEL_UNPUBLISH_MODULE_SUCCESS'); Text::script('COM_CPANEL_UNPUBLISH_MODULE_ERROR'); /** @var Joomla\CMS\WebAsset\WebAssetManager $wa */ $wa = $this->document->getWebAssetManager(); $wa->useScript('com_cpanel.admin-cpanel') ->useScript('com_cpanel.admin-addmodule'); $user = Factory::getUser(); // Set up the bootstrap modal that will be used for all module editors echo HTMLHelper::_( 'bootstrap.renderModal', 'moduleDashboardAddModal', [ 'title' => Text::_('COM_CPANEL_ADD_MODULE_MODAL_TITLE'), 'backdrop' => 'static', 'url' => Route::_('index.php?option=com_cpanel&task=addModule&function=jSelectModuleType&position=' . $this->escape($this->position)), 'bodyHeight' => '70', 'modalWidth' => '80', 'footer' => '<button type="button" class="button-cancel btn btn-danger" data-bs-dismiss="modal" data-bs-target="#closeBtn">' . Text::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>' . '<button type="button" id="btnModalSaveAndClose" class="button-save btn btn-success hidden" data-bs-target="#saveBtn">' . Text::_('JSAVE') . '</button>', ] ); ?> <div id="cpanel-modules"> <div class="cpanel-modules <?php echo $this->position; ?>"> <div class="card-columns"> <?php if ($this->quickicons) : foreach ($this->quickicons as $iconmodule) { echo ModuleHelper::renderModule($iconmodule, ['style' => 'well']); } endif; foreach ($this->modules as $module) { echo ModuleHelper::renderModule($module, ['style' => 'well']); } ?> <?php if ($user->authorise('core.admin', 'com_modules') && $user->authorise('core.create', 'com_modules')) : ?> <div class="module-wrapper"> <div class="card"> <button type="button" data-bs-toggle="modal" data-bs-target="#moduleDashboardAddModal" class="cpanel-add-module"> <div class="cpanel-add-module-icon"> <span class="icon-plus-square" aria-hidden="true"></span> </div> <span><?php echo Text::_('COM_CPANEL_ADD_DASHBOARD_MODULE'); ?></span> </button> </div> </div> <?php endif; ?> </div> </div> </div> tmpl/cpanel/default.xml 0000644 00000000322 15172634230 0011130 0 ustar 00 <?xml version="1.0" encoding="UTF-8"?> <metadata> <layout title="COM_CPANEL_CPANEL_VIEW_DEFAULT_TITLE"> <message> <![CDATA[COM_CPANEL_CPANEL_VIEW_DEFAULT_TITLE_DESC]]> </message> </layout> </metadata> cpanel.xml 0000644 00000001640 15172634230 0006534 0 ustar 00 <?xml version="1.0" encoding="UTF-8"?> <extension type="component" method="upgrade"> <name>com_cpanel</name> <author>Joomla! Project</author> <creationDate>2007-06</creationDate> <copyright>(C) 2007 Open Source Matters, Inc.</copyright> <license>GNU General Public License version 2 or later; see LICENSE.txt</license> <authorEmail>admin@joomla.org</authorEmail> <authorUrl>www.joomla.org</authorUrl> <version>4.0.0</version> <description>COM_CPANEL_XML_DESCRIPTION</description> <namespace path="src">Joomla\Component\Cpanel</namespace> <administration> <files folder="admin"> <filename>cpanel.xml</filename> <folder>services</folder> <folder>src</folder> <folder>tmpl</folder> </files> <languages folder="admin"> <language tag="en-GB">language/en-GB/com_cpanel.ini</language> <language tag="en-GB">language/en-GB/com_cpanel.sys.ini</language> </languages> </administration> </extension> index.html 0000604 00000000037 15172634230 0006540 0 ustar 00 <!DOCTYPE html><title></title> src/Dispatcher/Dispatcher.php 0000644 00000001505 15172634230 0012224 0 ustar 00 <?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Cpanel\Administrator\Dispatcher; use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Dispatcher\ComponentDispatcher; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * ComponentDispatcher class for com_cpanel * * @since 4.0.0 */ class Dispatcher extends ComponentDispatcher { /** * Method to check component access permission * * @since 4.0.0 * * @return void * * @throws \Exception|NotAllowed */ protected function checkAccess() { } } src/Controller/DisplayController.php 0000644 00000004722 15172634230 0013650 0 ustar 00 <?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Cpanel\Administrator\Controller; use Joomla\CMS\MVC\Controller\BaseController; use Joomla\CMS\Router\Route; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Cpanel Controller * * @since 1.5 */ class DisplayController extends BaseController { /** * The default view. * * @var string * @since 1.6 */ protected $default_view = 'cpanel'; /** * Typical view method for MVC based architecture * * This function is provide as a default implementation, in most cases * you will need to override it in your own controllers. * * @param boolean $cachable If true, the view output will be cached * @param array $urlparams An array of safe url parameters and their variable types, for valid values see {@link \JFilterInput::clean()}. * * @return static An instance of the current object to support chaining. * * @since 3.0 */ public function display($cachable = false, $urlparams = []) { /* * Set the template - this will display cpanel.php * from the selected admin template. */ $this->input->set('tmpl', 'cpanel'); return parent::display($cachable, $urlparams); } /** * Method to add a module to a dashboard * * @since 4.0.0 * * @return void */ public function addModule() { $position = $this->input->get('position', 'cpanel'); $function = $this->input->get('function'); $appendLink = ''; if ($function) { $appendLink .= '&function=' . $function; } if (substr($position, 0, 6) != 'cpanel') { $position = 'cpanel'; } // Administrator $clientId = (\Joomla\CMS\Application\ApplicationHelper::getClientInfo('administrator', true))->id; $this->app->setUserState('com_modules.modules.' . $clientId . '.filter.position', $position); $this->app->setUserState('com_modules.modules.client_id', (string) $clientId); $this->setRedirect(Route::_('index.php?option=com_modules&view=select&tmpl=component&layout=modal' . $appendLink, false)); } } src/View/Cpanel/HtmlView.php 0000644 00000012223 15172634230 0011722 0 ustar 00 <?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Component\Cpanel\Administrator\View\Cpanel; use Joomla\CMS\Factory; use Joomla\CMS\Filter\OutputFilter; use Joomla\CMS\Helper\ModuleHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * HTML View class for the Cpanel component * * @since 1.0 */ class HtmlView extends BaseHtmlView { /** * Array of cpanel modules * * @var array */ protected $modules = null; /** * Array of cpanel modules * * @var array */ protected $quickicons = null; /** * Moduleposition to load * * @var string */ protected $position = null; /** * Execute and display a template script. * * @param string $tpl The name of the template file to parse; automatically searches through the template paths. * * @return void */ public function display($tpl = null) { $app = Factory::getApplication(); $dashboard = $app->getInput()->getCmd('dashboard', ''); $toolbar = Toolbar::getInstance(); $position = OutputFilter::stringURLSafe($dashboard); // Generate a title for the view cpanel if (!empty($dashboard)) { $parts = explode('.', $dashboard); $component = $parts[0]; if (strpos($component, 'com_') === false) { $component = 'com_' . $component; } // Need to load the language file $lang = $this->getLanguage(); $lang->load($component, JPATH_BASE) || $lang->load($component, JPATH_ADMINISTRATOR . '/components/' . $component); $lang->load($component); // Lookup dashboard attributes from component manifest file $manifestFile = JPATH_ADMINISTRATOR . '/components/' . $component . '/' . str_replace('com_', '', $component) . '.xml'; if (is_file($manifestFile)) { $manifest = simplexml_load_file($manifestFile); if ($dashboardManifests = $manifest->dashboards) { foreach ($dashboardManifests->children() as $dashboardManifest) { if ((string) $dashboardManifest === $dashboard) { $title = Text::_((string) $dashboardManifest->attributes()->title); $icon = (string) $dashboardManifest->attributes()->icon; break; } } } } if (empty($title)) { // Try building a title $prefix = strtoupper($component) . '_DASHBOARD'; $sectionkey = !empty($parts[1]) ? '_' . strtoupper($parts[1]) : ''; $key = $prefix . $sectionkey . '_TITLE'; $keyIcon = $prefix . $sectionkey . '_ICON'; // Search for a component title if ($lang->hasKey($key)) { $title = Text::_($key); } else { // Try with a string from CPanel $key = 'COM_CPANEL_DASHBOARD_' . $parts[0] . '_TITLE'; if ($lang->hasKey($key)) { $title = Text::_($key); } else { $title = Text::_('COM_CPANEL_DASHBOARD_BASE_TITLE'); } } // Define the icon if (empty($parts[1])) { // Default core icons. if ($parts[0] === 'components') { $icon = 'icon-puzzle-piece'; } elseif ($parts[0] === 'system') { $icon = 'icon-wrench'; } elseif ($parts[0] === 'help') { $icon = 'icon-info-circle'; } elseif ($lang->hasKey($keyIcon)) { $icon = Text::_($keyIcon); } else { $icon = 'icon-home'; } } elseif ($lang->hasKey($keyIcon)) { $icon = Text::_($keyIcon); } } } else { // Home Dashboard $title = Text::_('COM_CPANEL_DASHBOARD_BASE_TITLE'); $icon = 'icon-home'; } // Set toolbar items for the page ToolbarHelper::title($title, $icon . ' cpanel'); $toolbar->help('screen.cpanel'); // Display the cpanel modules $this->position = $position ? 'cpanel-' . $position : 'cpanel'; $this->modules = ModuleHelper::getModules($this->position); $quickicons = $position ? 'icon-' . $position : 'icon'; $this->quickicons = ModuleHelper::getModules($quickicons); parent::display($tpl); } } services/provider.php 0000644 00000003077 15172634230 0010744 0 ustar 00 <?php /** * @package Joomla.Administrator * @subpackage com_cpanel * * @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Dispatcher\ComponentDispatcherFactoryInterface; use Joomla\CMS\Extension\ComponentInterface; use Joomla\CMS\Extension\MVCComponent; use Joomla\CMS\Extension\Service\Provider\ComponentDispatcherFactory; use Joomla\CMS\Extension\Service\Provider\MVCFactory; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\DI\Container; use Joomla\DI\ServiceProviderInterface; /** * The cpanel service provider. * * @since 4.0.0 */ return new class () implements ServiceProviderInterface { /** * Registers the service provider with a DI container. * * @param Container $container The DI container. * * @return void * * @since 4.0.0 */ public function register(Container $container) { $container->registerServiceProvider(new MVCFactory('\\Joomla\\Component\\Cpanel')); $container->registerServiceProvider(new ComponentDispatcherFactory('\\Joomla\\Component\\Cpanel')); $container->set( ComponentInterface::class, function (Container $container) { $component = new MVCComponent($container->get(ComponentDispatcherFactoryInterface::class)); $component->setMVCFactory($container->get(MVCFactoryInterface::class)); return $component; } ); } };
| ver. 1.4 |
Github
|
.
| PHP 8.3.23 | Generation time: 0 |
proxy
|
phpinfo
|
Settings