+ {{adminltetags.useTag('fields',
+ [
+ 'component' : component,
+ 'componentName' : componentName,
+ 'componentId' : componentId,
+ 'sectionId' : sectionId,
+ 'fieldId' : 'delete_source_files',
+ 'fieldLabel' : false,
+ 'fieldHelp' : true,
+ 'fieldHelpTooltipContent' : 'Delete downloaded source files? Files are only deleted on successful installation/upgrade.',
+ 'fieldRequired' : false,
+ 'fieldType' : 'checkbox',
+ 'fieldCheckboxType' : 'success',
+ 'fieldCheckboxChecked' : settingsFilesDeleteSourceFilesChecked,
+ 'fieldCheckboxLabel' : 'DELETE SOURCE FILES?',
+ 'fieldBazJstreeSearch' : true,
+ 'fieldBazPostOnCreate' : false,
+ 'fieldBazPostOnUpdate' : false,
+ 'fieldBazScan' : true
+ ]
+ )}}
+
{{adminltetags.useTag('fields',
[
@@ -472,7 +544,7 @@
'fieldRequired' : false,
'fieldType' : 'checkbox',
'fieldCheckboxType' : 'danger',
- 'fieldCheckboxChecked' : settingsRSyncDeleteDestinationFilesChecked,
+ 'fieldCheckboxChecked' : settingsFilesDeleteDestinationFilesChecked,
'fieldCheckboxLabel' : 'RSYNC DELETE DESTINATION FILES?',
'fieldBazJstreeSearch' : true,
'fieldBazPostOnCreate' : false,
diff --git a/apps/Core/Views/Default/html/modules/view.html b/apps/Core/Views/Default/html/modules/view.html
index ed2a1d5d5..3f105c463 100644
--- a/apps/Core/Views/Default/html/modules/view.html
+++ b/apps/Core/Views/Default/html/modules/view.html
@@ -3,6 +3,8 @@
{% set precheckHidden = false %}
{% set analyseHidden = false %}
{% set processHidden = true %}
+ {% set cancelHidden = false %}
+ {% set closeHidden = true %}
{% if queue['status'] == 1 %}
{% set precheckHidden = false %}
{% set precheckTitle = 'Re-Perform Precheck' %}
@@ -11,6 +13,8 @@
{% set precheckHidden = true %}
{% set analyseHidden = true %}
{% set processHidden = true %}
+ {% set cancelHidden = true %}
+ {% set closeHidden = false %}
{% endif %}
{% set footerContent =
adminltetags.useTag('buttons',
@@ -47,6 +51,16 @@
'title' : 'Cancel',
'type' : 'secondary',
'position' : 'right',
+ 'hidden' : cancelHidden,
+ 'buttonAdditionalClass' : 'contentAjaxLink',
+ 'url' : links.url('modules')
+ ],
+ 'close' : [
+ 'title' : 'Close',
+ 'type' : 'secondary',
+ 'position' : 'right',
+ 'hidden' : closeHidden,
+ 'buttonAdditionalClass' : 'contentAjaxLink',
'url' : links.url('modules')
]
]
@@ -64,10 +78,10 @@
'cardFooter' : true,
'cardType' : 'primary',
'cardIcon' : 'th',
- 'cardTitle' : 'Analyse Modules',
+ 'cardTitle' : 'Analyse Queue Modules',
'cardAdditionalClass' : 'rounded-0',
'cardCollapsed' : false,
- 'cardBodyInclude' : 'modules/analyse',
+ 'cardBodyInclude' : 'modules/queue/analyse',
'cardShowTools' : ['maximize'],
'cardFooterContent' : footerContent
]
diff --git a/apps/Core/Views/Default/html/system/api/client/services/list.html b/apps/Core/Views/Default/html/system/api/client/services/list.html
index 2044c1cb6..99ff46b84 100644
--- a/apps/Core/Views/Default/html/system/api/client/services/list.html
+++ b/apps/Core/Views/Default/html/system/api/client/services/list.html
@@ -52,7 +52,7 @@
'dropdownButtonAdditionalClass' : 'text-uppercase',
'buttonPosition' : 'right',
'dropdownAlign' : 'right',
- 'buttons' : apiButtons
+ 'dropdowns' : apiButtons
},
'dtTable' : table,
'dtColumns' : table['columns'],
diff --git a/apps/Core/Views/Default/html/system/email/queue/list.html b/apps/Core/Views/Default/html/system/email/queue/list.html
index b575dd87d..8ece19316 100644
--- a/apps/Core/Views/Default/html/system/email/queue/list.html
+++ b/apps/Core/Views/Default/html/system/email/queue/list.html
@@ -29,7 +29,7 @@
'dropdownButtonAdditionalClass' : 'text-uppercase',
'buttonPosition' : 'right',
'dropdownAlign' : 'right',
- 'buttons' :
+ 'dropdowns' :
{
'process-high' : {
'title' : 'High Priority',
diff --git a/apps/Core/Views/Default/html/system/menus/form.html b/apps/Core/Views/Default/html/system/menus/form.html
new file mode 100644
index 000000000..cf26b9432
--- /dev/null
+++ b/apps/Core/Views/Default/html/system/menus/form.html
@@ -0,0 +1,167 @@
+{% if menu['id'] is defined %}
+ {% set menuId = menu['id'] %}
+ {% set menuRoute = menu['route'] %}
+ {% set menuAppType = menu['app_type'] %}
+ {% set menuMenu = menu['menu'] %}
+{% else %}
+ {% set menuId = '' %}
+ {% set menuRoute = '' %}
+ {% set menuAppType = '' %}
+ {% set menuMenu = '' %}
+{% endif %}
+
+
\ No newline at end of file
diff --git a/apps/Core/Views/Default/html/system/menus/list.html b/apps/Core/Views/Default/html/system/menus/list.html
new file mode 100644
index 000000000..7067e9104
--- /dev/null
+++ b/apps/Core/Views/Default/html/system/menus/list.html
@@ -0,0 +1,30 @@
+{{adminltetags.useTag('content',
+ [
+ 'component' : table['component'],
+ 'componentName' : componentName,
+ 'componentId' : componentId,
+ 'parentComponentId' : parent,
+ 'sectionId' : 'listing',
+ 'contentType' : 'sectionWithListing',
+ 'cardHeader' : true,
+ 'cardType' : 'primary',
+ 'cardIcon' : 'bars',
+ 'cardTitle' : componentName,
+ 'cardAdditionalClass' : 'rounded-0',
+ 'dtFilter' : false,
+ 'dtFilters' : table['filters'],
+ 'dtFilterColumns' : table['filterColumns'],
+ 'dtFixedHeader' : true,
+ 'dtTable' : table,
+ 'dtColumns' : table['columns'],
+ 'dtPostUrl' : table['postUrl'],
+ 'dtPostUrlParams' : table['postUrlParams'],
+ 'dtStriped' : true,
+ 'dtStateSave' : false,
+ 'dtBordered' : false,
+ 'dtHideIdColumn' : true,
+ 'dtNoOfColumnsToShow' : 6,
+ 'dtTableCompact' : true,
+ 'dtZeroRecords' : 'No menus data available. Menus are added via component.json file during installation or you can make custom menu in the app.'
+ ]
+)}}
\ No newline at end of file
diff --git a/apps/Core/Views/Default/html/system/menus/view.html b/apps/Core/Views/Default/html/system/menus/view.html
new file mode 100644
index 000000000..b0c413839
--- /dev/null
+++ b/apps/Core/Views/Default/html/system/menus/view.html
@@ -0,0 +1,29 @@
+{% if menu['id'] is defined %}
+ {% set menuId = menu['id'] %}
+ {% set title = ' Menu (' ~ menu['route'] ~ ')' %}
+{% else %}
+ {% set menuId = '' %}
+ {% set title = 'New Menu' %}
+{% endif %}
+
+{{adminltetags.useTag('content',
+ [
+ 'component' : component,
+ 'componentName' : componentName,
+ 'componentId' : componentId,
+ 'parentComponentId' : parent,
+ 'sectionId' : 'main',
+ 'contentType' : 'sectionWithForm',
+ 'cardHeader' : true,
+ 'cardFooter' : true,
+ 'cardType' : 'primary',
+ 'cardIcon' : 'bars',
+ 'cardTitle' : title,
+ 'cardAdditionalClass' : 'rounded-0',
+ 'cardBodyInclude' : 'menus/form',
+ 'formButtons' :
+ [
+ 'closeActionUrl' : 'system/menus'
+ ]
+ ]
+)}}
\ No newline at end of file
diff --git a/apps/Core/Views/Default/html/system/notifications/list.html b/apps/Core/Views/Default/html/system/notifications/list.html
index 1d46dcfbe..48fc78d61 100644
--- a/apps/Core/Views/Default/html/system/notifications/list.html
+++ b/apps/Core/Views/Default/html/system/notifications/list.html
@@ -60,7 +60,7 @@
'dropdownButtonDisabled' : true,
'buttonPosition' : 'right',
'dropdownAlign' : 'right',
- 'buttons' :
+ 'dropdowns' :
{
'mark-read' : {
'title' : 'Read',
diff --git a/apps/Core/Views/Default/html/system/storages/list.html b/apps/Core/Views/Default/html/system/storages/list.html
index af667a542..7dace9692 100644
--- a/apps/Core/Views/Default/html/system/storages/list.html
+++ b/apps/Core/Views/Default/html/system/storages/list.html
@@ -26,7 +26,7 @@
'dropdownButtonAdditionalClass' : 'text-uppercase',
'buttonPosition' : 'right',
'dropdownAlign' : 'right',
- 'buttons' :
+ 'dropdowns' :
{
'local-storage' : {
'title' : 'Local Storage',
diff --git a/apps/Core/Views/Default/html/system/tools/importexport/list.html b/apps/Core/Views/Default/html/system/tools/importexport/list.html
index 9d98c71a2..5f84ce938 100644
--- a/apps/Core/Views/Default/html/system/tools/importexport/list.html
+++ b/apps/Core/Views/Default/html/system/tools/importexport/list.html
@@ -29,7 +29,7 @@
'dropdownButtonAdditionalClass' : 'text-uppercase',
'buttonPosition' : 'right',
'dropdownAlign' : 'right',
- 'buttons' :
+ 'dropdowns' :
{
'import' : {
'title' : 'Import',
diff --git a/public/core/default/css/core.css b/public/core/default/css/core.css
index 3f42a8a4b..6078b81c2 100644
--- a/public/core/default/css/core.css
+++ b/public/core/default/css/core.css
@@ -37,7 +37,7 @@
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
- --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Roboto, "Helvetica Neue", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
@@ -60,7 +60,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
body {
margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Roboto, "Helvetica Neue", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
@@ -5564,7 +5564,7 @@ a.close.disabled, a.disabled.mailbox-attachment-close {
z-index: 1070;
display: block;
margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Roboto, "Helvetica Neue", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal;
font-weight: 400;
line-height: 1.5;
@@ -5666,7 +5666,7 @@ a.close.disabled, a.disabled.mailbox-attachment-close {
z-index: 1060;
display: block;
max-width: 276px;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Roboto, "Helvetica Neue", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal;
font-weight: 400;
line-height: 1.5;
@@ -31522,7 +31522,7 @@ select.form-control-sm ~ .select2-container--default .select2-selection--multipl
position: relative;
}
.mapael .mapTooltip {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Roboto, "Helvetica Neue", "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal;
font-weight: 400;
line-height: 1.5;
diff --git a/public/core/default/js/footer/core/Baz/BazProgress.js b/public/core/default/js/footer/core/Baz/BazProgress.js
index 20533bc42..565385bb5 100644
--- a/public/core/default/js/footer/core/Baz/BazProgress.js
+++ b/public/core/default/js/footer/core/Baz/BazProgress.js
@@ -211,6 +211,7 @@ var BazProgress = function() {
$('.child-progress-span').attr('hidden', true);
$('.' + $(element)[0].id + '-child-bar').css('width', '0%');
$('.' + $(element)[0].id + '-child-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-child-bar', 'info');
if (responseData['runners']['running'] &&
responseData['runners']['running']['remoteWeb'] &&
@@ -229,6 +230,7 @@ var BazProgress = function() {
} else {
$('.' + $(element)[0].id + '-remote-bar').css('width', '0%');
$('.' + $(element)[0].id + '-remote-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-remote-bar', 'info');
}
} else {
$('.progress-remote, .remote-progress-span').attr('hidden', true);
@@ -265,17 +267,13 @@ var BazProgress = function() {
$('.' + $(element)[0].id + '-child-bar').css('width', '100%');
$('.' + $(element)[0].id + '-child-bar').attr('aria-valuenow', 100);
$('.' + $(element)[0].id + '-child-progress-span').html('Done (100%)');
- $('.' + $(element)[0].id + '-child-bar').removeClass(function (index, className) {
- return (className.match (/(^|\s)bg-\S+/g) || []).join(' ');
- }).addClass('bg-success');
+ switchProgressBarColor('.' + $(element)[0].id + '-child-bar', 'success');
} else {
$('.' + $(element)[0].id + '-bar').removeClass('progress-bar-animated');
$('.' + $(element)[0].id + '-bar').css('width', '100%');
$('.' + $(element)[0].id + '-bar').attr('aria-valuenow', 100);
$('.' + $(element)[0].id + '-progress-span').html('Done (100%)');
- $('.' + $(element)[0].id + '-bar').removeClass(function (index, className) {
- return (className.match (/(^|\s)bg-\S+/g) || []).join(' ');
- }).addClass('bg-success');
+ switchProgressBarColor('.' + $(element)[0].id + '-bar', 'success');
$('#' + $(element)[0].id + ' .progress-child').attr('hidden', true);
$('.child-progress-span').attr('hidden', true);
@@ -297,8 +295,10 @@ var BazProgress = function() {
isDownload = false;
$('.' + $(element)[0].id + '-child-bar').css('width', '0%');
$('.' + $(element)[0].id + '-child-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-child-bar', 'info');
$('.' + $(element)[0].id + '-remote-bar').css('width', '0%');
$('.' + $(element)[0].id + '-remote-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-remote-bar', 'info');
$('.progress-remote, .remote-progress-span').attr('hidden', true);
}
} else {
@@ -322,6 +322,16 @@ var BazProgress = function() {
}
}
+ function switchProgressBarColor(bar = null, color = 'info') {
+ if (!bar) {
+ bar = '.' + $(element)[0].id + '-bar';
+ }
+
+ $(bar).removeClass(function (index, className) {
+ return (className.match (/(^|\s)bg-\S+/g) || []).join(' ');
+ }).addClass('bg-' + color);
+ }
+
function getText(responseData) {
var text = responseData['runners']['running']['text'] + ' (' + responseData['percentComplete'] + '%)';
@@ -367,6 +377,7 @@ var BazProgress = function() {
$('#' + $(element)[0].id).attr('hidden', true);
$('.' + $(element)[0].id + '-bar').css('width', '0%');
$('.' + $(element)[0].id + '-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-bar', 'info');
downloadTotal = 0;
downloadedBytes = 0;
uploadTotal = 0;
@@ -413,6 +424,9 @@ var BazProgress = function() {
BazProgress.buildProgressBar = function(el, mSH = false, child = false, remoteWeb = false) {
buildProgressBar(el, mSH, child, remoteWeb);
}
+ BazProgress.switchProgressBarColor = function(el, color) {
+ switchProgressBarColor(el, color);
+ }
BazProgress.setCallable = function(callable) {
setCallable(callable);
}
diff --git a/public/core/default/js/footer/core/Baz/BazTunnels.js b/public/core/default/js/footer/core/Baz/BazTunnels.js
index 0e0de81c2..b214e78c7 100644
--- a/public/core/default/js/footer/core/Baz/BazTunnels.js
+++ b/public/core/default/js/footer/core/Baz/BazTunnels.js
@@ -26,9 +26,6 @@ var BazTunnels = function() {
dataCollection.env.wsTunnels.messenger = { };
dataCollection.env.wsTunnels.pusher = { };
- // var reconnectMessengerTunnel = null;
- // var reconnectPusherTunnel = null;
-
// Error
// function error(errorMsg) {
// throw new Error(errorMsg);
@@ -173,7 +170,7 @@ var BazTunnels = function() {
BazHelpers.setTimeoutTimers.add(function() {
initPusherTunnel(options);
- }, 60000, null, 'initPusherTunnel');
+ }, 30000, null, 'initPusherTunnel');
},
{
'skipSubprotocolCheck': true
diff --git a/public/core/default/js/footer/jsFooterCore.js b/public/core/default/js/footer/jsFooterCore.js
index 40239bf02..468c3ed90 100644
--- a/public/core/default/js/footer/jsFooterCore.js
+++ b/public/core/default/js/footer/jsFooterCore.js
@@ -10100,9 +10100,6 @@ var BazTunnels = function() {
dataCollection.env.wsTunnels.messenger = { };
dataCollection.env.wsTunnels.pusher = { };
- // var reconnectMessengerTunnel = null;
- // var reconnectPusherTunnel = null;
-
// Error
// function error(errorMsg) {
// throw new Error(errorMsg);
@@ -10247,7 +10244,7 @@ var BazTunnels = function() {
BazHelpers.setTimeoutTimers.add(function() {
initPusherTunnel(options);
- }, 60000, null, 'initPusherTunnel');
+ }, 30000, null, 'initPusherTunnel');
},
{
'skipSubprotocolCheck': true
@@ -12005,6 +12002,7 @@ var BazProgress = function() {
$('.child-progress-span').attr('hidden', true);
$('.' + $(element)[0].id + '-child-bar').css('width', '0%');
$('.' + $(element)[0].id + '-child-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-child-bar', 'info');
if (responseData['runners']['running'] &&
responseData['runners']['running']['remoteWeb'] &&
@@ -12023,6 +12021,7 @@ var BazProgress = function() {
} else {
$('.' + $(element)[0].id + '-remote-bar').css('width', '0%');
$('.' + $(element)[0].id + '-remote-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-remote-bar', 'info');
}
} else {
$('.progress-remote, .remote-progress-span').attr('hidden', true);
@@ -12059,17 +12058,13 @@ var BazProgress = function() {
$('.' + $(element)[0].id + '-child-bar').css('width', '100%');
$('.' + $(element)[0].id + '-child-bar').attr('aria-valuenow', 100);
$('.' + $(element)[0].id + '-child-progress-span').html('Done (100%)');
- $('.' + $(element)[0].id + '-child-bar').removeClass(function (index, className) {
- return (className.match (/(^|\s)bg-\S+/g) || []).join(' ');
- }).addClass('bg-success');
+ switchProgressBarColor('.' + $(element)[0].id + '-child-bar', 'success');
} else {
$('.' + $(element)[0].id + '-bar').removeClass('progress-bar-animated');
$('.' + $(element)[0].id + '-bar').css('width', '100%');
$('.' + $(element)[0].id + '-bar').attr('aria-valuenow', 100);
$('.' + $(element)[0].id + '-progress-span').html('Done (100%)');
- $('.' + $(element)[0].id + '-bar').removeClass(function (index, className) {
- return (className.match (/(^|\s)bg-\S+/g) || []).join(' ');
- }).addClass('bg-success');
+ switchProgressBarColor('.' + $(element)[0].id + '-bar', 'success');
$('#' + $(element)[0].id + ' .progress-child').attr('hidden', true);
$('.child-progress-span').attr('hidden', true);
@@ -12091,8 +12086,10 @@ var BazProgress = function() {
isDownload = false;
$('.' + $(element)[0].id + '-child-bar').css('width', '0%');
$('.' + $(element)[0].id + '-child-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-child-bar', 'info');
$('.' + $(element)[0].id + '-remote-bar').css('width', '0%');
$('.' + $(element)[0].id + '-remote-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-remote-bar', 'info');
$('.progress-remote, .remote-progress-span').attr('hidden', true);
}
} else {
@@ -12116,6 +12113,16 @@ var BazProgress = function() {
}
}
+ function switchProgressBarColor(bar = null, color = 'info') {
+ if (!bar) {
+ bar = '.' + $(element)[0].id + '-bar';
+ }
+
+ $(bar).removeClass(function (index, className) {
+ return (className.match (/(^|\s)bg-\S+/g) || []).join(' ');
+ }).addClass('bg-' + color);
+ }
+
function getText(responseData) {
var text = responseData['runners']['running']['text'] + ' (' + responseData['percentComplete'] + '%)';
@@ -12161,6 +12168,7 @@ var BazProgress = function() {
$('#' + $(element)[0].id).attr('hidden', true);
$('.' + $(element)[0].id + '-bar').css('width', '0%');
$('.' + $(element)[0].id + '-bar').attr('aria-valuenow', 0);
+ switchProgressBarColor('.' + $(element)[0].id + '-bar', 'info');
downloadTotal = 0;
downloadedBytes = 0;
uploadTotal = 0;
@@ -12207,6 +12215,9 @@ var BazProgress = function() {
BazProgress.buildProgressBar = function(el, mSH = false, child = false, remoteWeb = false) {
buildProgressBar(el, mSH, child, remoteWeb);
}
+ BazProgress.switchProgressBarColor = function(el, color) {
+ switchProgressBarColor(el, color);
+ }
BazProgress.setCallable = function(callable) {
setCallable(callable);
}
diff --git a/public/core/default/js/footer/jsFooterPlugins.js b/public/core/default/js/footer/jsFooterPlugins.js
index f23583869..48decfe16 100644
--- a/public/core/default/js/footer/jsFooterPlugins.js
+++ b/public/core/default/js/footer/jsFooterPlugins.js
@@ -60,7 +60,6 @@ function paginatedPNotify(type, opts) {
opts['stack'] = window.stackPaginate;
opts['destroy'] = true;
opts['delay'] = 2000;
- opts['destroy'] = true;
opts['titleTrusted'] = true;
opts['modules'] = new Map([
...PNotify.defaultModules,
diff --git a/public/core/default/js/footer/plugins/pnotify/5.2.0/PNotify.js b/public/core/default/js/footer/plugins/pnotify/5.2.0/PNotify.js
index 3738562e8..ced2e6a6e 100644
--- a/public/core/default/js/footer/plugins/pnotify/5.2.0/PNotify.js
+++ b/public/core/default/js/footer/plugins/pnotify/5.2.0/PNotify.js
@@ -37,7 +37,6 @@ function paginatedPNotify(type, opts) {
opts['stack'] = window.stackPaginate;
opts['destroy'] = true;
opts['delay'] = 2000;
- opts['destroy'] = true;
opts['titleTrusted'] = true;
opts['modules'] = new Map([
...PNotify.defaultModules,
diff --git a/public/core/default/js/header/dependencies/Baz/BazContentLoader.js b/public/core/default/js/header/dependencies/Baz/BazContentLoader.js
index 5f6c8f190..d0a3258b9 100644
--- a/public/core/default/js/header/dependencies/Baz/BazContentLoader.js
+++ b/public/core/default/js/header/dependencies/Baz/BazContentLoader.js
@@ -148,6 +148,10 @@ var BazContentLoader = function() {
}
function loadAjax(element, options, popped) {
+ if (element.length === 0) {
+ return false;
+ }
+
BazHelpers.setTimeoutTimers.stopAll();//Stop all timers from previous component.
var urlToLoad, elementId;
var dataCollection = window.dataCollection;
diff --git a/public/core/default/js/header/dependencies/Baz/BazCore.js b/public/core/default/js/header/dependencies/Baz/BazCore.js
index 17261a46f..e99e9b46a 100644
--- a/public/core/default/js/header/dependencies/Baz/BazCore.js
+++ b/public/core/default/js/header/dependencies/Baz/BazCore.js
@@ -116,6 +116,15 @@ var BazCore = function() {
if (dataCollection.env.currentRoute.indexOf('auth') === -1) {
BazTunnels.init();
}
+ $('#body').on('bazContentLoaderAjaxComplete', function() {
+ //eslint-disable-next-line
+ console.log(dataCollection.env.wsTunnels.pusher._websocket_connected);
+ if (dataCollection.env.wsTunnels.pusher._websocket_connected !== 'undefined' &&
+ dataCollection.env.wsTunnels.pusher._websocket_connected === false
+ ) {
+ BazTunnels.init();
+ }
+ });
initPings();
}
diff --git a/public/core/default/js/header/jsHeaderCore.js b/public/core/default/js/header/jsHeaderCore.js
index ca25076a4..660c19b10 100644
--- a/public/core/default/js/header/jsHeaderCore.js
+++ b/public/core/default/js/header/jsHeaderCore.js
@@ -148,6 +148,10 @@ var BazContentLoader = function() {
}
function loadAjax(element, options, popped) {
+ if (element.length === 0) {
+ return false;
+ }
+
BazHelpers.setTimeoutTimers.stopAll();//Stop all timers from previous component.
var urlToLoad, elementId;
var dataCollection = window.dataCollection;
@@ -554,6 +558,15 @@ var BazCore = function() {
if (dataCollection.env.currentRoute.indexOf('auth') === -1) {
BazTunnels.init();
}
+ $('#body').on('bazContentLoaderAjaxComplete', function() {
+ //eslint-disable-next-line
+ console.log(dataCollection.env.wsTunnels.pusher._websocket_connected);
+ if (dataCollection.env.wsTunnels.pusher._websocket_connected !== 'undefined' &&
+ dataCollection.env.wsTunnels.pusher._websocket_connected === false
+ ) {
+ BazTunnels.init();
+ }
+ });
initPings();
}
diff --git a/public/index.php b/public/index.php
index fb46a35f0..482532023 100644
--- a/public/index.php
+++ b/public/index.php
@@ -94,4 +94,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/system/Base/Helpers.php b/system/Base/Helpers.php
index c20444975..a52c777a8 100644
--- a/system/Base/Helpers.php
+++ b/system/Base/Helpers.php
@@ -473,6 +473,30 @@ function array_get_values_recursive($keys = [], array $arr) {
}
}
+if (!function_exists('extractLineFromFile')) {
+ function extractLineFromFile($file, $word)
+ {
+ $lineWithWord = NULL;
+
+ $handle = fopen($file, "r");
+
+ if ($handle) {
+ while (($line = fgets($handle)) !== false) {
+ if (strpos($line, $word) === 0) {
+ $parts = explode(' ', $line);
+
+ $lineWithWord = rtrim(trim($parts[1]), ';');
+
+ break;
+ }
+ }
+
+ fclose($handle);
+ }
+
+ return $lineWithWord;
+ }
+}
if (!function_exists('arraySqueeze')) {
//$task = keep - Keep the data of defined keys, remove rest
@@ -516,6 +540,46 @@ function arrayFilterKeywords($array, array $keywords, $task = 'keep')
}
});
+ return $array;
+ }
+}
+
+if (!function_exists('printArrayList')) {
+ function printArrayList($array) {
+ $html = "
";
+
+ foreach($array as $k => $v) {
+ if (!is_array($v) && !is_null($v) && is_string($v) && str_starts_with($v, '{') && str_ends_with($v, '}')) {
+ $v = @json_decode($v, true);
+ }
+
+ if (is_array($v)) {
+ $html .= "- " . $k . " :
";
+ $html .= " " . printArrayList($v);
+ continue;
+ }
+
+ $html .= "- " . $k . " : " . $v . "
";
+ }
+
+ $html .= "
";
+
+ return $html;
+ }
+}
+
+if (!function_exists('arrayReplace')) {
+ function arrayReplace($array, $findKey, $replace) {
+ if (is_array($array)) {
+ foreach ($array as $key=>$val) {
+ if ($key === $findKey) {
+ $array[$key] = $replace;
+ } else if (is_array($array[$key])) {
+ $array[$key] = arrayReplace($array[$key], $findKey, $replace);
+ }
+ }
+ }
+
return $array;
}
}
\ No newline at end of file
diff --git a/system/Base/Installer/Components/Setup.php b/system/Base/Installer/Components/Setup.php
index f1366026f..240b4f416 100644
--- a/system/Base/Installer/Components/Setup.php
+++ b/system/Base/Installer/Components/Setup.php
@@ -417,6 +417,8 @@ public function run($onlyUpdateDb = false, $message = null)
$this->setupPackage->registerModule('views');
+ $this->setupPackage->registerModule('externals');
+
$this->setupPackage->registerCoreRole();
$this->setupPackage->registerRegisteredUserAndGuestRoles();
@@ -589,6 +591,10 @@ protected function registerProgressMethods()
'method' => 'registerModule',
'text' => 'Registering views modules...'
],
+ [
+ 'method' => 'registerModule',
+ 'text' => 'Registering external modules...'
+ ],
[
'method' => 'registerCoreRole',
'text' => 'Registering core role...'
@@ -800,6 +806,12 @@ protected function renderView($precheckFail = false, $onlyUpdateDb = false, $mes
$this->localContent->read('/system/Base/Providers/BasepackagesServiceProvider/Packages/Geo/Data/AllCountries.json'),
true
);
+
+ $this->view->coreJson =
+ $this->helper->decode(
+ $this->localContent->read('system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Core/package.json'),
+ true
+ );
}
echo $this->container->getShared('view')->render(
diff --git a/system/Base/Installer/Packages/Setup.php b/system/Base/Installer/Packages/Setup.php
index 5c5bfbe08..251b63762 100644
--- a/system/Base/Installer/Packages/Setup.php
+++ b/system/Base/Installer/Packages/Setup.php
@@ -26,6 +26,7 @@
use System\Base\Installer\Packages\Setup\Register\Modules\Middleware as RegisterMiddleware;
use System\Base\Installer\Packages\Setup\Register\Modules\Package as RegisterPackage;
use System\Base\Installer\Packages\Setup\Register\Modules\View as RegisterView;
+use System\Base\Installer\Packages\Setup\Register\Modules\External as RegisterExternal;
use System\Base\Installer\Packages\Setup\Register\Providers\App as RegisterCoreApp;
use System\Base\Installer\Packages\Setup\Register\Providers\App\Type as RegisterCoreAppType;
use System\Base\Installer\Packages\Setup\Register\Providers\Core as RegisterCore;
@@ -397,7 +398,7 @@ protected function buildSchema()
protected function registerRepos()
{
- (new RegisterRepos())->register($this->db, $this->ff);
+ (new RegisterRepos())->register($this->db, $this->ff, $this->postData);
return true;
}
@@ -464,7 +465,7 @@ protected function registerModule($type)
}
if ($jsonFile['menu'] && $jsonFile['menu'] !== 'false') {
- $menuId = $this->registerCoreMenu($jsonFile['app_type'], $jsonFile['menu']);
+ $menuId = $this->registerCoreMenu($jsonFile);
} else {
$menuId = null;
}
@@ -521,13 +522,6 @@ protected function registerModule($type)
$this->registerStorages($jsonFile);
}
- $jsonFile['files'] = [];
-
- if ($jsonFile['name'] === 'Core') {
- $jsonFile['files'] =
- array_merge_recursive($this->basepackages->utils->init($this->container)->scanDir('system/', true), $this->basepackages->utils->init($this->container)->scanDir('apps/', true));
- }
-
$this->registerCorePackage($jsonFile);
}
}
@@ -573,6 +567,14 @@ protected function registerModule($type)
}
$this->registerCoreView($jsonFile);
+ } else if ($type === 'externals') {
+ try {
+ $composerJsonFile = $this->helper->decode(file_get_contents(base_path('external/composer.json')), true);
+ } catch (\throwable $e) {
+ throw new \Exception($e->getMessage() . '. Problem reading composer.json');
+ }
+
+ $this->registerCoreExternal($composerJsonFile);
}
return true;
@@ -598,9 +600,9 @@ protected function updateCoreAppComponents()
return (new RegisterCoreApp())->update($this->db, $this->ff);
}
- protected function registerCoreMenu($appType, array $menu)
+ protected function registerCoreMenu($componentJsonFile)
{
- return (new RegisterMenu())->register($this->db, $this->ff, $appType, $menu, $this->helper);
+ return (new RegisterMenu())->register($this->db, $this->ff, $componentJsonFile, $this->helper);
}
protected function registerCorePackage(array $packageFile)
@@ -618,6 +620,11 @@ protected function registerCoreView(array $viewFile)
return (new RegisterView())->register($this->db, $this->ff, $viewFile, $this->helper);
}
+ protected function registerCoreExternal(array $composerJsonFile)
+ {
+ return (new RegisterExternal())->register($this->db, $this->ff, $composerJsonFile, $this->helper);
+ }
+
public function validateData()
{
$this->validation->add('email', Email::class, ["message" => "Please enter valid email address."]);
diff --git a/system/Base/Installer/Packages/Setup/Register/Basepackages/ApiClientServices/Apis/Repos.php b/system/Base/Installer/Packages/Setup/Register/Basepackages/ApiClientServices/Apis/Repos.php
index 30d7e50af..8ab1450e2 100644
--- a/system/Base/Installer/Packages/Setup/Register/Basepackages/ApiClientServices/Apis/Repos.php
+++ b/system/Base/Installer/Packages/Setup/Register/Basepackages/ApiClientServices/Apis/Repos.php
@@ -4,7 +4,7 @@
class Repos
{
- public function register($db, $ff)
+ public function register($db, $ff, $postData)
{
$coreRepo =
[
@@ -16,23 +16,28 @@ public function register($db, $ff)
'authorization' => ''
];
+ $usedBy = ["modules"];
+ if ($postData['dev'] == 'true') {
+ array_push($usedBy, "devtoolsmodules");
+ }
+
$coreApi =
[
- 'name' => 'SP Framework Core',
- 'description' => 'SP Framework Core Repository',
- 'category' => 'repos',
- 'provider' => 'Github',
- 'in_use' => 0,
- 'used_by' => json_encode([]),
- 'setup' => 4,
- 'location' => 'basepackages'
+ 'name' => 'SP Framework Core',
+ 'description' => 'SP Framework Core Repository',
+ 'category' => 'repos',
+ 'provider' => 'Github',
+ 'in_use' => 1,
+ 'used_by' => json_encode($usedBy),
+ 'setup' => 4,
+ 'location' => 'basepackages'
];
$modulesRepo =
[
'api_url' => 'https://api.github.com',
'org_user' => 'sp-modules',
- 'repo_url' => 'https://github.com/sp-modules/',
+ 'repo_url' => 'https://github.com/sp-modules',
'branch' => 'main',
'auth_type' => 'autho',
'authorization' => ''
@@ -44,8 +49,8 @@ public function register($db, $ff)
'description' => 'SP Framework Modules Repository',
'category' => 'repos',
'provider' => 'Github',
- 'in_use' => 0,
- 'used_by' => json_encode([]),
+ 'in_use' => 1,
+ 'used_by' => json_encode($usedBy),
'setup' => 4,
'location' => 'basepackages'
];
diff --git a/system/Base/Installer/Packages/Setup/Register/Basepackages/Dashboard.php b/system/Base/Installer/Packages/Setup/Register/Basepackages/Dashboard.php
index ea23f2572..48a336f7b 100644
--- a/system/Base/Installer/Packages/Setup/Register/Basepackages/Dashboard.php
+++ b/system/Base/Installer/Packages/Setup/Register/Basepackages/Dashboard.php
@@ -8,9 +8,8 @@ public function register($db, $ff, $componentFile, $helper)
{
$dashboard =
[
- 'name' => 'Default',
- 'app_id' => 1,
- 'app_default' => 1,
+ 'name' => 'Core Default',
+ 'app_type' => 'core',
'created_by' => 1,
'settings' => $helper->encode($componentFile['settings'])
];
@@ -24,5 +23,34 @@ public function register($db, $ff, $componentFile, $helper)
$dashboardStore->updateOrInsert($dashboard);
}
+
+ //Register Timezone Widget
+ $widget =
+ [
+ "dashboard_id" => 1,
+ "sequence" => 0,
+ "widget_id" => 1,
+ "settings" =>
+ $helper->encode([
+ "minW" => "3",
+ "method" => "worldClock",
+ "widget_id" => "1",
+ "dashboard_id" => "1",
+ "x" => "0",
+ "y" => "0",
+ "clocks" => ["australiamelbourne"],
+ "w" => "12"
+ ])
+ ];
+
+ if ($db) {
+ $db->insertAsDict('basepackages_dashboards_widgets', $widget);
+ }
+
+ if ($ff) {
+ $widgetStore = $ff->store('basepackages_dashboards_widgets');
+
+ $widgetStore->updateOrInsert($widget);
+ }
}
}
\ No newline at end of file
diff --git a/system/Base/Installer/Packages/Setup/Register/Basepackages/Menu.php b/system/Base/Installer/Packages/Setup/Register/Basepackages/Menu.php
index 3587b16c1..8065f4dc9 100644
--- a/system/Base/Installer/Packages/Setup/Register/Basepackages/Menu.php
+++ b/system/Base/Installer/Packages/Setup/Register/Basepackages/Menu.php
@@ -4,8 +4,10 @@
class Menu
{
- public function register($db, $ff, $appType, array $menu, $helper)
+ public function register($db, $ff, $componentJsonFile, $helper)
{
+ $menu = $componentJsonFile['menu'];
+
if (isset($menu['seq'])) {
$sequence = $menu['seq'];
unset($menu['seq']);
@@ -19,7 +21,8 @@ public function register($db, $ff, $appType, array $menu, $helper)
[
'menu' => $helper->encode($menu),
'apps' => $helper->encode(['1' => ['enabled' => true]]),
- 'app_type' => $appType,
+ 'app_type' => $componentJsonFile['app_type'],
+ 'route' => $componentJsonFile['route'],
'sequence' => $sequence
];
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Component.php b/system/Base/Installer/Packages/Setup/Register/Modules/Component.php
index b37cbca8b..0a61d2a19 100644
--- a/system/Base/Installer/Packages/Setup/Register/Modules/Component.php
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/Component.php
@@ -40,10 +40,6 @@ public function register($db, $ff, $componentFile, $menuId, $helper)
'installed' => 1,
'apps' =>
$helper->encode($componentApp),
- 'files' =>
- isset($componentFile['files']) ?
- $helper->encode($componentFile['files']) :
- $helper->encode([]),
'settings' =>
isset($componentFile['settings']) ?
$helper->encode($componentFile['settings']) :
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/External.php b/system/Base/Installer/Packages/Setup/Register/Modules/External.php
new file mode 100644
index 000000000..4f9beed19
--- /dev/null
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/External.php
@@ -0,0 +1,135 @@
+ 0) {
+ $installedComposerPackages = $this->executeComposer();
+
+ $coreId = $this->getCoreId($db, $ff);
+
+ try {
+ $installedComposerPackages = $helper->decode($installedComposerPackages, true);
+ } catch (\throwable $e) {
+ //Do nothing.
+ }
+
+ if (isset($installedComposerPackages['installed']) && count($installedComposerPackages['installed']) > 0) {
+ array_walk($installedComposerPackages['installed'], function($installedComposerPackage, $index) use (&$installedComposerPackages) {
+ $installedComposerPackages[$installedComposerPackage['name']] = $installedComposerPackage;
+ unset($installedComposerPackages[$index]);
+ });
+
+ unset($installedComposerPackages['installed']);
+ }
+
+ foreach ($composerJsonFile['require'] as $externalPackageName => $externalPackageversion) {
+ $externalPackageNameArr = explode('/', $externalPackageName);
+ if (count($externalPackageNameArr) === 2) {
+ $externalPackage =
+ [
+ 'developer' => $externalPackageNameArr[0],
+ 'name' => $externalPackageNameArr[1],
+ 'display_name' => $externalPackageName,
+ 'description' =>
+ (isset($installedComposerPackages[$externalPackageName]['description'])) ? $installedComposerPackages[$externalPackageName]['description'] : '',
+ 'module_type' => 'externals',
+ 'app_type' => 'core',
+ 'version' =>
+ (isset($installedComposerPackages[$externalPackageName]['version'])) ? $installedComposerPackages[$externalPackageName]['version'] : '',
+ 'patches' =>
+ (isset($composerJsonFile['extra']['patches'][$externalPackageName])) ?
+ $helper->encode($composerJsonFile['extra']['patches'][$externalPackageName]) :
+ $helper->encode([]),
+ 'abandoned' =>
+ (isset($installedComposerPackages[$externalPackageName]['abandoned'])) ? (($installedComposerPackages[$externalPackageName]['abandoned'] == true) ? 1 : 0) : 0,
+ 'installed' => 1,
+ 'required_by' => $helper->encode(['packages' => [$coreId]]),
+ 'updated_by' => 0
+ ];
+
+ if ($db) {
+ $db->insertAsDict('modules_externals', $externalPackage);
+ }
+
+ if ($ff) {
+ $externalPackageStore = $ff->store('modules_externals');
+
+ $externalPackageStore->updateOrInsert($externalPackage);
+ }
+ }
+ }
+ }
+ }
+
+ protected function executeComposer()
+ {
+ try {
+ putenv('COMPOSER_HOME=' . base_path('external/'));
+
+ $stream = fopen(base_path('external/composer.info'), 'w');
+ $input = new \Symfony\Component\Console\Input\StringInput('show -f json -d ' . base_path('external/'));
+ $output = new \Symfony\Component\Console\Output\StreamOutput($stream);
+
+ $application = new \Composer\Console\Application();
+ $application->setAutoExit(false); // prevent `$application->run` method from exiting the script
+
+ $app = $application->run($input, $output);
+ } catch (\throwable $e) {
+ throw $e;
+ }
+
+ if ($app !== 0) {
+ return false;
+ }
+
+ $file = '';
+
+ $handle = fopen(base_path('external/composer.info'), "r");
+
+ if ($handle) {
+ while (($line = fgets($handle)) !== false) {
+ if (!str_contains($line, '
')) {
+ $file .= $line;
+ }
+ }
+
+ fclose($handle);
+ }
+
+ return $file;
+ }
+
+ protected function getCoreId($db, $ff)
+ {
+ if ($ff) {
+ $modulesStore = $ff->store('modules_packages');
+
+ $core = $modulesStore->findOneBy(['name', '=', 'Core']);
+
+ if ($core) {
+ return $core['id'];
+ }
+ }
+
+ if ($db) {
+ $core =
+ $db->fetchAll(
+ "SELECT * FROM modules_packages WHERE name LIKE :name",
+ Enum::FETCH_ASSOC,
+ [
+ "name" => "Core",
+ ]
+ );
+
+ if ($core) {
+ return $core['id'];
+ }
+ }
+
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Middleware.php b/system/Base/Installer/Packages/Setup/Register/Modules/Middleware.php
index 417519945..b155e5b0b 100644
--- a/system/Base/Installer/Packages/Setup/Register/Modules/Middleware.php
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/Middleware.php
@@ -36,10 +36,6 @@ public function register($db, $ff, $middlewareFile, $helper)
'apps' => $apps,
'api_id' => 1,
'installed' => 1,
- 'files' =>
- isset($middlewareFile['files']) ?
- $helper->encode($middlewareFile['files']) :
- $helper->encode([]),
'updated_by' => 0
];
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Package.php b/system/Base/Installer/Packages/Setup/Register/Modules/Package.php
index ad5458ebd..928a73473 100644
--- a/system/Base/Installer/Packages/Setup/Register/Modules/Package.php
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/Package.php
@@ -29,10 +29,6 @@ public function register($db, $ff, $packageFile, $helper)
$helper->encode(['1'=>['enabled'=>true]]),
'api_id' => 1,
'installed' => 1,
- 'files' =>
- isset($packageFile['files']) ?
- $helper->encode($packageFile['files']) :
- $helper->encode([]),
'updated_by' => 0
];
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Activity/Logs/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Activity/Logs/package.json
new file mode 100644
index 000000000..61c6263c0
--- /dev/null
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Activity/Logs/package.json
@@ -0,0 +1,24 @@
+{
+ "name" : "ActivityLogs",
+ "display_name" : "Activity Logs",
+ "description" : "Basepackage Activity Logs",
+ "module_type" : "packages",
+ "app_type" : "core",
+ "category" : "basepackages",
+ "version" : "0.0.0",
+ "repo" : "https://.../",
+ "class" : "System\\Base\\Providers\\BasepackagesServiceProvider\\Packages\\ActivityLogs",
+ "dependencies" : {
+ "core" : {
+ "name" : "Core",
+ "version" : "0.0.0",
+ "repo" : "https://.../"
+ },
+ "components" : [],
+ "packages" : [],
+ "middlewares" : [],
+ "views" : [],
+ "external" : []
+ },
+ "settings" : { }
+}
\ No newline at end of file
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/AddressBook/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Address/Book/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/AddressBook/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Address/Book/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/ApiClientServices/Apis/Repos/Gitea/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Api/Apis/Repos/Gitea/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/ApiClientServices/Apis/Repos/Gitea/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Api/Apis/Repos/Gitea/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/ApiClientServices/Apis/Repos/Github/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Api/Apis/Repos/Github/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/ApiClientServices/Apis/Repos/Github/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Api/Apis/Repos/Github/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/ApiClientServices/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Api/Client/Services/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/ApiClientServices/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Api/Client/Services/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/BackupRestore/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Backup/Restore/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/BackupRestore/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Backup/Restore/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Dashboards/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Dashboards/package.json
new file mode 100644
index 000000000..eb09f357f
--- /dev/null
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Dashboards/package.json
@@ -0,0 +1,26 @@
+{
+ "name" : "Dashboards",
+ "display_name" : "Dashboards",
+ "description" : "Basepackage Dashboards",
+ "module_type" : "packages",
+ "app_type" : "core",
+ "category" : "basepackages",
+ "version" : "0.0.0",
+ "repo" : "https://.../",
+ "class" : "System\\Base\\Providers\\BasepackagesServiceProvider\\Packages\\Dashboards",
+ "dependencies" :
+ {
+ "core" :
+ {
+ "name" : "Core",
+ "version" : "0.0.0",
+ "repo" : "https://.../"
+ },
+ "components" : [],
+ "packages" : [],
+ "middlewares" : [],
+ "views" : [],
+ "external" : []
+ },
+ "settings" : []
+}
\ No newline at end of file
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/EmailServices/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Email/Services/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/EmailServices/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Email/Services/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/GeoCities/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Geo/Cities/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/GeoCities/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Geo/Cities/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/GeoCountries/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Geo/Countries/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/GeoCountries/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Geo/Countries/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/GeoStates/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Geo/States/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/GeoStates/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Geo/States/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/GeoTimezones/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Geo/Timezones/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/GeoTimezones/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Geo/Timezones/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/ImportExport/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Import/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/ImportExport/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Import/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Menus/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Menus/package.json
new file mode 100644
index 000000000..00ee598a0
--- /dev/null
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Menus/package.json
@@ -0,0 +1,24 @@
+{
+ "name" : "Menus",
+ "display_name" : "Menus",
+ "description" : "Menus package",
+ "module_type" : "packages",
+ "app_type" : "core",
+ "category" : "basepackages",
+ "version" : "0.0.0",
+ "repo" : "https://.../",
+ "class" : "System\\Base\\Providers\\BasepackagesServiceProvider\\Packages\\Menus",
+ "dependencies" : {
+ "core" : {
+ "name" : "Core",
+ "version" : "0.0.0",
+ "repo" : "https://.../"
+ },
+ "components" : [],
+ "packages" : [],
+ "middlewares" : [],
+ "views" : [],
+ "external" : []
+ },
+ "settings" : {"componentRoute":"system/menus"}
+}
\ No newline at end of file
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/UsersAccounts/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Users/Accounts/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/UsersAccounts/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Users/Accounts/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/UsersProfiles/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Users/Profiles/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/UsersProfiles/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Users/Profiles/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/UsersRoles/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Users/Roles/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/UsersRoles/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Users/Roles/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/WorkersJobs/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Workers/Jobs/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/WorkersJobs/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Workers/Jobs/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/WorkersSchedules/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Workers/Schedules/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/WorkersSchedules/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Workers/Schedules/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/WorkersTasks/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Workers/Tasks/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/WorkersTasks/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Workers/Tasks/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/WorkersWorkers/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Workers/Workers/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/WorkersWorkers/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Basepackages/Workers/Workers/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ApiServerClients/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Api/Server/Clients/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ApiServerClients/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Api/Server/Clients/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ApiServerScopes/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Api/Server/Scopes/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ApiServerScopes/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Api/Server/Scopes/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ApiServerServices/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Api/Server/Services/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ApiServerServices/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Api/Server/Services/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/AppsTypes/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Apps/Types/package.json
similarity index 100%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/AppsTypes/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Apps/Types/package.json
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ModulesManager/package.json b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Modules/Manager/package.json
similarity index 96%
rename from system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ModulesManager/package.json
rename to system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Modules/Manager/package.json
index 6e00b9ef8..1dd69676d 100644
--- a/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/ModulesManager/package.json
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/Packages/Providers/Modules/Manager/package.json
@@ -22,6 +22,6 @@
},
"settings" : {
"componentRoute":"modules",
- "api_clients" : []
+ "api_clients" : [1,2]
}
}
\ No newline at end of file
diff --git a/system/Base/Installer/Packages/Setup/Register/Modules/View.php b/system/Base/Installer/Packages/Setup/Register/Modules/View.php
index 98fbd99ed..c47cc97a5 100644
--- a/system/Base/Installer/Packages/Setup/Register/Modules/View.php
+++ b/system/Base/Installer/Packages/Setup/Register/Modules/View.php
@@ -31,10 +31,6 @@ public function register($db, $ff, $viewFile, $helper)
$helper->encode(['1'=>['enabled'=>true]]),
'api_id' => 1,
'installed' => 1,
- 'files' =>
- isset($viewFile['files']) ?
- $helper->encode($viewFile['files']) :
- $helper->encode([]),
'updated_by' => 0
];
diff --git a/system/Base/Installer/Packages/Setup/Register/Providers/App/Type.php b/system/Base/Installer/Packages/Setup/Register/Providers/App/Type.php
index 270da5276..b0555d6d3 100644
--- a/system/Base/Installer/Packages/Setup/Register/Providers/App/Type.php
+++ b/system/Base/Installer/Packages/Setup/Register/Providers/App/Type.php
@@ -10,6 +10,7 @@ public function register($db, $ff, $typeFile)
[
'name' => $typeFile['name'],
'app_type' => $typeFile['app_type'],
+ 'dashboards' => $typeFile['dashboards'] == 'true' ? 1 : 0,
'description' => $typeFile['description'],
'api_id' => 1,
'repo' => $typeFile['repo'],
diff --git a/system/Base/Installer/Packages/Setup/Schema.php b/system/Base/Installer/Packages/Setup/Schema.php
index c63350e71..861281279 100644
--- a/system/Base/Installer/Packages/Setup/Schema.php
+++ b/system/Base/Installer/Packages/Setup/Schema.php
@@ -43,6 +43,7 @@
use System\Base\Installer\Packages\Setup\Schema\Basepackages\Workers\Workers;
use System\Base\Installer\Packages\Setup\Schema\Modules\Bundles;
use System\Base\Installer\Packages\Setup\Schema\Modules\Components;
+use System\Base\Installer\Packages\Setup\Schema\Modules\Externals;
use System\Base\Installer\Packages\Setup\Schema\Modules\Middlewares;
use System\Base\Installer\Packages\Setup\Schema\Modules\Packages;
use System\Base\Installer\Packages\Setup\Schema\Modules\Queues;
@@ -113,6 +114,7 @@
use System\Base\Providers\ModulesServiceProvider\Model\ServiceProviderModulesQueues;
use System\Base\Providers\ModulesServiceProvider\Modules\Model\ModulesBundles;
use System\Base\Providers\ModulesServiceProvider\Modules\Model\ModulesComponents;
+use System\Base\Providers\ModulesServiceProvider\Modules\Model\ModulesExternals;
use System\Base\Providers\ModulesServiceProvider\Modules\Model\ModulesMiddlewares;
use System\Base\Providers\ModulesServiceProvider\Modules\Model\ModulesPackages;
use System\Base\Providers\ModulesServiceProvider\Modules\Model\ModulesViews;
@@ -171,6 +173,10 @@ public function getSchema()
'schema' => new Settings,
'model' => new ModulesViewsSettings,
],
+ 'modules_externals' => [
+ 'schema' => new Externals,
+ 'model' => new ModulesExternals,
+ ],
'basepackages_email_services' => [
'schema' => new EmailServices,
'model' => new BasepackagesEmailServices,
@@ -354,11 +360,7 @@ public function getSchema()
'service_provider_api_scopes' => [
'schema' => new Scopes,
'model' => new ServiceProviderApiScopes,
- ],
- 'test_schema' => [
- 'schema' => new \System\Base\Installer\Packages\Setup\Schema\TestSchema,
- 'model' => new \System\Base\Installer\Packages\Setup\Schema\TestModel,
- ],
+ ]
];
}
}
\ No newline at end of file
diff --git a/system/Base/Installer/Packages/Setup/Schema/Basepackages/Dashboards.php b/system/Base/Installer/Packages/Setup/Schema/Basepackages/Dashboards.php
index cdc777d43..8733b79be 100644
--- a/system/Base/Installer/Packages/Setup/Schema/Basepackages/Dashboards.php
+++ b/system/Base/Installer/Packages/Setup/Schema/Basepackages/Dashboards.php
@@ -29,17 +29,11 @@ public function columns()
]
),
new Column(
- 'app_id',
+ 'app_type',
[
- 'type' => Column::TYPE_INTEGER,
- 'notNull' => true
- ]
- ),
- new Column(
- 'app_default',
- [
- 'type' => Column::TYPE_BOOLEAN,
- 'notNull' => true
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 50,
+ 'notNull' => true,
]
),
new Column(
@@ -57,9 +51,9 @@ public function columns()
]
),
new Column(
- 'is_default',
+ 'user_default',
[
- 'type' => Column::TYPE_BOOLEAN,
+ 'type' => Column::TYPE_JSON,
'notNull' => false
]
),
diff --git a/system/Base/Installer/Packages/Setup/Schema/Basepackages/Menus.php b/system/Base/Installer/Packages/Setup/Schema/Basepackages/Menus.php
index 7dd2f420e..d3fffe87d 100644
--- a/system/Base/Installer/Packages/Setup/Schema/Basepackages/Menus.php
+++ b/system/Base/Installer/Packages/Setup/Schema/Basepackages/Menus.php
@@ -44,6 +44,14 @@ public function columns()
'notNull' => true,
]
),
+ new Column(
+ 'route',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 50,
+ 'notNull' => true,
+ ]
+ ),
new Column(
'sequence',
[
diff --git a/system/Base/Installer/Packages/Setup/Schema/Modules/Components.php b/system/Base/Installer/Packages/Setup/Schema/Modules/Components.php
index dad56a6d0..6f891b8b0 100644
--- a/system/Base/Installer/Packages/Setup/Schema/Modules/Components.php
+++ b/system/Base/Installer/Packages/Setup/Schema/Modules/Components.php
@@ -151,13 +151,6 @@ public function columns()
'notNull' => true,
]
),
- new Column(
- 'files',
- [
- 'type' => Column::TYPE_MEDIUMTEXT,
- 'notNull' => false,
- ]
- ),
new Column(
'api_id',
[
diff --git a/system/Base/Installer/Packages/Setup/Schema/Modules/Externals.php b/system/Base/Installer/Packages/Setup/Schema/Modules/Externals.php
new file mode 100644
index 000000000..047432e72
--- /dev/null
+++ b/system/Base/Installer/Packages/Setup/Schema/Modules/Externals.php
@@ -0,0 +1,158 @@
+ [
+ new Column(
+ 'id',
+ [
+ 'type' => Column::TYPE_SMALLINTEGER,
+ 'notNull' => true,
+ 'autoIncrement' => true,
+ 'primary' => true,
+ ]
+ ),
+ new Column(
+ 'developer',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 50,
+ 'notNull' => true,
+ ]
+ ),
+ new Column(
+ 'name',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 50,
+ 'notNull' => true,
+ ]
+ ),
+ new Column(
+ 'display_name',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 50,
+ 'notNull' => true,
+ ]
+ ),
+ new Column(
+ 'description',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 2048,
+ 'notNull' => false,
+ ]
+ ),
+ new Column(
+ 'module_type',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 50,
+ 'notNull' => true,
+ ]
+ ),
+ new Column(
+ 'app_type',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 50,
+ 'notNull' => true,
+ ]
+ ),
+ new Column(
+ 'abandoned',
+ [
+ 'type' => Column::TYPE_TINYINTEGER,
+ 'notNull' => false,
+ ]
+ ),
+ new Column(
+ 'version',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 100,
+ 'notNull' => false,
+ ]
+ ),
+ new Column(
+ 'patches',
+ [
+ 'type' => Column::TYPE_JSON,
+ 'notNull' => false,
+ ]
+ ),
+ new Column(
+ 'installed',
+ [
+ 'type' => Column::TYPE_TINYINTEGER,
+ 'notNull' => true,
+ ]
+ ),
+ new Column(
+ 'required_by',
+ [
+ 'type' => Column::TYPE_JSON,
+ 'notNull' => false,
+ ]
+ ),
+ new Column(
+ 'update_available',
+ [
+ 'type' => Column::TYPE_TINYINTEGER,
+ 'size' => 1,
+ 'notNull' => false,
+ ]
+ ),
+ new Column(
+ 'update_version',
+ [
+ 'type' => Column::TYPE_VARCHAR,
+ 'size' => 15,
+ 'notNull' => false,
+ ]
+ ),
+ new Column(
+ 'updated_by',
+ [
+ 'type' => Column::TYPE_INTEGER,
+ 'notNull' => true,
+ ]
+ ),
+ new Column(
+ 'updated_on',
+ [
+ 'type' => Column::TYPE_TIMESTAMP,
+ 'notNull' => true,
+ 'default' => 'CURRENT_TIMESTAMP',
+ ]
+ ),
+ new Column(
+ 'notification_subscriptions',
+ [
+ 'type' => Column::TYPE_JSON,
+ 'notNull' => false,
+ ]
+ ),
+ ],
+ 'indexes' => [
+ new Index(
+ 'column_UNIQUE',
+ [
+ 'name'
+ ],
+ 'UNIQUE'
+ )
+ ]
+ ];
+ }
+}
\ No newline at end of file
diff --git a/system/Base/Installer/Packages/Setup/Schema/Modules/Middlewares.php b/system/Base/Installer/Packages/Setup/Schema/Modules/Middlewares.php
index 41d5d05a4..435c3be6f 100644
--- a/system/Base/Installer/Packages/Setup/Schema/Modules/Middlewares.php
+++ b/system/Base/Installer/Packages/Setup/Schema/Modules/Middlewares.php
@@ -129,13 +129,6 @@ public function columns()
'notNull' => true,
]
),
- new Column(
- 'files',
- [
- 'type' => Column::TYPE_MEDIUMTEXT,
- 'notNull' => false,
- ]
- ),
new Column(
'api_id',
[
diff --git a/system/Base/Installer/Packages/Setup/Schema/Modules/Packages.php b/system/Base/Installer/Packages/Setup/Schema/Modules/Packages.php
index 6a331bf1f..66b7a9d8d 100644
--- a/system/Base/Installer/Packages/Setup/Schema/Modules/Packages.php
+++ b/system/Base/Installer/Packages/Setup/Schema/Modules/Packages.php
@@ -129,13 +129,6 @@ public function columns()
'notNull' => true,
]
),
- new Column(
- 'files',
- [
- 'type' => Column::TYPE_MEDIUMTEXT,
- 'notNull' => false,
- ]
- ),
new Column(
'api_id',
[
diff --git a/system/Base/Installer/Packages/Setup/Schema/Modules/Views.php b/system/Base/Installer/Packages/Setup/Schema/Modules/Views.php
index 1d4cc8f11..80334687c 100644
--- a/system/Base/Installer/Packages/Setup/Schema/Modules/Views.php
+++ b/system/Base/Installer/Packages/Setup/Schema/Modules/Views.php
@@ -143,13 +143,6 @@ public function columns()
'notNull' => true,
]
),
- new Column(
- 'files',
- [
- 'type' => Column::TYPE_MEDIUMTEXT,
- 'notNull' => false,
- ]
- ),
new Column(
'api_id',
[
diff --git a/system/Base/Installer/Packages/Setup/Schema/Providers/Apps/Types.php b/system/Base/Installer/Packages/Setup/Schema/Providers/Apps/Types.php
index 27afc465c..e26554e54 100644
--- a/system/Base/Installer/Packages/Setup/Schema/Providers/Apps/Types.php
+++ b/system/Base/Installer/Packages/Setup/Schema/Providers/Apps/Types.php
@@ -37,6 +37,13 @@ public function columns()
'notNull' => true
]
),
+ new Column(
+ 'dashboards',
+ [
+ 'type' => Column::TYPE_BOOLEAN,
+ 'notNull' => true
+ ]
+ ),
new Column(
'description',
[
diff --git a/system/Base/Installer/Packages/Setup/Schema/TestModel.php b/system/Base/Installer/Packages/Setup/Schema/TestModel.php
deleted file mode 100644
index 847371220..000000000
--- a/system/Base/Installer/Packages/Setup/Schema/TestModel.php
+++ /dev/null
@@ -1,18 +0,0 @@
- [
- new Column(
- 'id',
- [
- 'type' => Column::TYPE_INTEGER,
- 'notNull' => true,
- 'autoIncrement' => true,
- 'primary' => true,
- ]
- ),
- new Column(
- 'key',
- [
- 'type' => Column::TYPE_VARCHAR,
- 'size' => 100,
- 'notNull' => true,
- ]
- ),
- new Column(
- 'key2',
- [
- 'type' => Column::TYPE_VARCHAR,
- 'size' => 100,
- 'notNull' => true,
- ]
- ),
- new Column(
- 'query',
- [
- 'type' => Column::TYPE_JSON,
- 'notNull' => true,
- ]
- ),
- new Column(
- 'status',
- [
- 'type' => Column::TYPE_TINYINTEGER,
- 'size' => 1,
- 'notNull' => false,
- ]
- ),
- new Column(
- 'bool',
- [
- 'type' => Column::TYPE_BOOLEAN,
- 'notNull' => false,
- ]
- )
- ],
- 'indexes' => [
- new Index(
- 'column_UNIQUE',
- [
- 'key'
- ],
- 'UNIQUE'
- )
- ]
- ];
- }
-
- public function indexes()
- {
- return
- [
- new Index(
- 'column_INDEX',
- [
- 'key2'
- ],
- 'INDEX'
- )
- ];
- }
-}
\ No newline at end of file
diff --git a/system/Base/Installer/View/setup.phtml b/system/Base/Installer/View/setup.phtml
index b638e553d..05a3218fb 100644
--- a/system/Base/Installer/View/setup.phtml
+++ b/system/Base/Installer/View/setup.phtml
@@ -44,7 +44,7 @@
-
+
diff --git a/system/Base/Providers/AppsServiceProvider/Apps.php b/system/Base/Providers/AppsServiceProvider/Apps.php
index 883632b71..3a0ae0caa 100644
--- a/system/Base/Providers/AppsServiceProvider/Apps.php
+++ b/system/Base/Providers/AppsServiceProvider/Apps.php
@@ -298,7 +298,7 @@ public function updateApp(array $data)
$this->modules->components->updateComponents($app);
}
- if (isset($app['menus'])) {
+ if (isset($app['menus']) && $app['menus'] !== '') {
$this->basepackages->menus->updateMenus($app);
}
diff --git a/system/Base/Providers/AppsServiceProvider/Types.php b/system/Base/Providers/AppsServiceProvider/Types.php
index 827f82e80..35fb650c8 100644
--- a/system/Base/Providers/AppsServiceProvider/Types.php
+++ b/system/Base/Providers/AppsServiceProvider/Types.php
@@ -20,6 +20,19 @@ public function init(bool $resetCache = false)
return $this;
}
+ public function getInstalledAppTypes()
+ {
+ $types = [];
+
+ foreach($this->types as $type) {
+ if ($type['installed'] == true) {
+ array_push($types, $type);
+ }
+ }
+
+ return $types;
+ }
+
public function getAppTypeById($id)
{
foreach($this->types as $type) {
diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/ApiClientServices.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/ApiClientServices.php
index 5dcecb075..a5bbc3680 100644
--- a/system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/ApiClientServices.php
+++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/ApiClientServices.php
@@ -155,6 +155,9 @@ protected function switchApiModel($api = null)
$api['location'] = ucfirst($api['location']);
$api['category'] = ucfirst($api['category']);
$api['provider'] = ucfirst($api['provider']);
+ if ($api['provider'] === 'Github' || $api['provider'] === 'Gitea') {
+ $api['location'] = 'Basepackages';
+ }
if ($api['location'] === 'Basepackages') {
$modelClass = 'System\\Base\\Providers\\BasepackagesServiceProvider\\Packages\\Model\\ApiClientServices\\Apis\\' . $api['category'] . '\\';
@@ -179,6 +182,9 @@ public function addApi(array $data)
$data['location'] = strtolower($data['location']);
$data['category'] = strtolower($data['category']);
$data['provider'] = strtolower($data['provider']);
+ if ($data['provider'] === 'github' || $data['provider'] === 'gitea') {
+ $data['location'] = 'basepackages';
+ }
$data = $this->encryptPassToken($data);
@@ -209,6 +215,9 @@ public function updateApi(array $data)
$data['location'] = strtolower($data['location']);
$data['category'] = strtolower($data['category']);
$data['provider'] = strtolower($data['provider']);
+ if ($data['provider'] === 'github' || $data['provider'] === 'gitea') {
+ $data['location'] = 'basepackages';
+ }
$data = $this->encryptPassToken($data);
diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/BackupRestore.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/BackupRestore.php
index 75964d015..465816452 100644
--- a/system/Base/Providers/BasepackagesServiceProvider/Packages/BackupRestore.php
+++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/BackupRestore.php
@@ -28,7 +28,7 @@ class BackupRestore extends BasePackage
protected $restoreProgressMethods;
- public function init($process = 'backup')
+ public function init($process = null)
{
$this->zip = new \ZipArchive;
@@ -72,7 +72,7 @@ protected function withProgress($method, $arguments)
}
}
- public function backup(array $data)
+ public function backup(array $data, $viaModuleInstaller = false)
{
set_time_limit(300);//5 mins
@@ -90,9 +90,11 @@ public function backup(array $data)
if ($noOptions) {
$this->addResponse('Nothing to backup!', 1, []);
- $this->basepackages->progress->preCheckComplete(false);
+ if (!$viaModuleInstaller) {
+ $this->basepackages->progress->preCheckComplete(false);
- $this->basepackages->progress->resetProgress();
+ $this->basepackages->progress->resetProgress();
+ }
return false;
}
@@ -119,9 +121,11 @@ public function backup(array $data)
) {
$this->addResponse('Protect password missing!', 1, []);
- $this->basepackages->progress->preCheckComplete(false);
+ if (!$viaModuleInstaller) {
+ $this->basepackages->progress->preCheckComplete(false);
- $this->basepackages->progress->resetProgress();
+ $this->basepackages->progress->resetProgress();
+ }
return false;
}
@@ -134,99 +138,125 @@ public function backup(array $data)
}
}
if ($noFilesOptions) {
- $this->basepackages->progress->unregisterMethods(['generateStructure']);
+ if ($viaModuleInstaller) {
+ $this->basepackages->progress->unregisterMethods(['createBackup'], 'method', ['generateStructure']);
+ } else {
+ $this->basepackages->progress->unregisterMethods(['generateStructure']);
+ }
}
if (!isset($this->backupInfo['request']['database']) ||
(isset($this->backupInfo['request']['database']) && $this->backupInfo['request']['database'] != 'true')
) {
- $this->basepackages->progress->unregisterMethods(['performDbBackup']);
+ if ($viaModuleInstaller) {
+ $this->basepackages->progress->unregisterMethods(['createBackup'], 'method', ['performDbBackup']);
+ } else {
+ $this->basepackages->progress->unregisterMethods(['performDbBackup']);
+ }
}
- $this->basepackages->progress->preCheckComplete();
+ if (!$viaModuleInstaller) {
+ $this->basepackages->progress->preCheckComplete();
- foreach ($this->backupProgressMethods as $method) {
- if ($this->withProgress($method['method'], $data) === false) {
- return false;
- }
+ foreach ($this->backupProgressMethods as $method) {
+ if ($this->withProgress($method['method'], $data) === false) {
+ return false;
+ }
- usleep(500);
+ usleep(500);
+ }
}
return true;
}
- protected function generateStructure(array $data)
+ public function generateStructure()
{
- $this->zip->open(base_path($this->backupLocation . $this->backupInfo['backupName']), $this->zip::CREATE);
+ try {
+ $this->zip->open(base_path($this->backupLocation . $this->backupInfo['backupName']), $this->zip::CREATE);
- if (isset($this->backupInfo['request']['database']) && $this->backupInfo['request']['database'] == 'true') {
- if ($this->core->core['settings']['databasetype'] != 'db') {
- $this->getContent($this->basepackages->utils->scanDir('.ff/'));
+ if (isset($this->backupInfo['request']['database']) && $this->backupInfo['request']['database'] == 'true') {
+ if ($this->core->core['settings']['databasetype'] != 'db') {
+ $this->getContent($this->basepackages->utils->scanDir('.ff/'));
+ }
}
- }
- if (isset($this->backupInfo['request']['apps_dir']) && $this->backupInfo['request']['apps_dir'] == 'true') {
- $this->getContent($this->basepackages->utils->scanDir('apps/'));
- }
- if (isset($this->backupInfo['request']['systems_dir']) && $this->backupInfo['request']['systems_dir'] == 'true') {
- $this->getContent($this->basepackages->utils->scanDir('system/'));
- }
- if (isset($this->backupInfo['request']['public_dir']) && $this->backupInfo['request']['public_dir'] == 'true') {
- $this->getContent($this->basepackages->utils->scanDir('public/'));
- }
- if (isset($this->backupInfo['request']['private_dir']) && $this->backupInfo['request']['private_dir'] == 'true') {
- $this->getContent($this->basepackages->utils->scanDir('private/'));
- }
- if (isset($this->backupInfo['request']['var_dir']) && $this->backupInfo['request']['var_dir'] == 'true') {
- $this->getContent($this->basepackages->utils->scanDir('var/'));
- }
- if (isset($this->backupInfo['request']['external_dir']) && $this->backupInfo['request']['external_dir'] == 'true') {
- if (isset($this->backupInfo['request']['external_vendor_dir']) && $this->backupInfo['request']['external_vendor_dir'] == 'true') {
- $this->getContent($this->basepackages->utils->scanDir('external/'));
- } else {
- $this->getContent($this->basepackages->utils->scanDir('external/', false));
+ if (isset($this->backupInfo['request']['apps_dir']) && $this->backupInfo['request']['apps_dir'] == 'true') {
+ $this->getContent($this->basepackages->utils->scanDir('apps/'));
+ }
+ if (isset($this->backupInfo['request']['systems_dir']) && $this->backupInfo['request']['systems_dir'] == 'true') {
+ $this->getContent($this->basepackages->utils->scanDir('system/'));
+ }
+ if (isset($this->backupInfo['request']['public_dir']) && $this->backupInfo['request']['public_dir'] == 'true') {
+ $this->getContent($this->basepackages->utils->scanDir('public/'));
+ }
+ if (isset($this->backupInfo['request']['private_dir']) && $this->backupInfo['request']['private_dir'] == 'true') {
+ $this->getContent($this->basepackages->utils->scanDir('private/'));
+ }
+ if (isset($this->backupInfo['request']['var_dir']) && $this->backupInfo['request']['var_dir'] == 'true') {
+ $this->getContent($this->basepackages->utils->scanDir('var/'));
+ }
+ if (isset($this->backupInfo['request']['external_dir']) && $this->backupInfo['request']['external_dir'] == 'true') {
+ if (isset($this->backupInfo['request']['external_vendor_dir']) && $this->backupInfo['request']['external_vendor_dir'] == 'true') {
+ $this->getContent($this->basepackages->utils->scanDir('external/'));
+ } else {
+ $this->getContent($this->basepackages->utils->scanDir('external/', false));
+ }
}
- }
- if (isset($this->backupInfo['request']['old_backups_dir']) && $this->backupInfo['request']['old_backups_dir'] == 'true') {
- $this->getContent($this->basepackages->utils->scanDir('.backups/'));
- $this->getContent($this->basepackages->utils->scanDir('.backupsdb/'));
- $this->getContent($this->basepackages->utils->scanDir('.backupsff/'));
- }
+ if (isset($this->backupInfo['request']['old_backups_dir']) && $this->backupInfo['request']['old_backups_dir'] == 'true') {
+ $this->getContent($this->basepackages->utils->scanDir('.backups/'));
+ $this->getContent($this->basepackages->utils->scanDir('.backupsdb/'));
+ $this->getContent($this->basepackages->utils->scanDir('.backupsff/'));
+ }
- return true;
+ return true;
+ } catch (\Exception | \throwable $e) {
+ $this->addResponse('Backup Error: ' . $e->getMessage(), 1);
+
+ $this->basepackages->progress->resetProgress();
+
+ return false;
+ }
}
- protected function zipBackupFiles(array $data)
+ public function zipBackupFiles()
{
- foreach ($this->backupInfo['files'] as $file) {
- if (!$this->addToZip(base_path($file), $file)) {
+ try {
+ foreach ($this->backupInfo['files'] as $file) {
+ if (!$this->addToZip(base_path($file), $file)) {
+ return false;
+ }
+ }
+
+ if (isset($this->backupInfo['request']['password_protect']) && $this->backupInfo['request']['password_protect'] !== '') {
+ $this->backupInfo['request']['password_protect'] =
+ $this->secTools->hashPassword($this->backupInfo['request']['password_protect'], 4);
+ }
+
+ try {
+ $this->localContent->write('var/tmp/backupInfo.json' , $this->helper->encode($this->backupInfo));
+ } catch (\ErrorException | FilesystemException | UnableToWriteFile $exception) {
+ throw $exception;
+ }
+
+ //Dont Encrypt info file as we need to know if encryption is applied or not during restore. We can encrypt the content in case we want to hide something (like we are encrypting the password_protect password)
+ if (!$this->addToZip(base_path('var/tmp/backupInfo.json'), 'backupInfo.json', false)) {
return false;
}
- }
- if (isset($this->backupInfo['request']['password_protect']) && $this->backupInfo['request']['password_protect'] !== '') {
- $this->backupInfo['request']['password_protect'] =
- $this->secTools->hashPassword($this->backupInfo['request']['password_protect'], 4);
- }
+ $this->zip->close();
- try {
- $this->localContent->write('var/tmp/backupInfo.json' , $this->helper->encode($this->backupInfo));
- } catch (\ErrorException | FilesystemException | UnableToWriteFile $exception) {
- throw $exception;
- }
+ return true;
+ } catch (\Exception | \throwable $e) {
+ $this->addResponse('Backup Error: ' . $e->getMessage(), 1);
+
+ $this->basepackages->progress->resetProgress();
- //Dont Encrypt info file as we need to know if encryption is applied or not during restore. We can encrypt the content in case we want to hide something (like we are encrypting the password_protect password)
- if (!$this->addToZip(base_path('var/tmp/backupInfo.json'), 'backupInfo.json', false)) {
return false;
}
-
- $this->zip->close();
-
- return true;
}
- protected function performDbBackup(array $data)
+ public function performDbBackup()
{
foreach ($this->core->core['settings']['dbs'] as $dbKey => $db) {
try {
@@ -266,35 +296,41 @@ protected function performDbBackup(array $data)
return true;
}
- protected function finishBackup(array $data)
+ public function finishBackup(array $data)
{
- if ($this->basepackages->storages->storeFile(
- 'private',
- '.backups',
- null,
- $this->backupInfo['backupName'],
- filesize(base_path('.backups/' . $this->backupInfo['backupName'])),
- 'application/zip',
- true
- )
- ) {
- $this->basepackages->storages->changeOrphanStatus(
- null,
- null,
- false,
- null,
- $this->backupInfo['backupName']
- );
-
- $this->addResponse('Generated backup ' . $this->backupInfo['backupName'] . '.',
- 0,
- ['filename' => $this->backupInfo['backupName'],
- 'uuid' => $this->basepackages->storages->packagesData->responseData['uuid'],
- 'request' => $data
- ]
- );
+ try {
+ if ($this->basepackages->storages->storeFile(
+ 'private',
+ '.backups',
+ null,
+ $this->backupInfo['backupName'],
+ filesize(base_path('.backups/' . $this->backupInfo['backupName'])),
+ 'application/zip',
+ true
+ )
+ ) {
+ $this->basepackages->storages->changeOrphanStatus(
+ null,
+ null,
+ false,
+ null,
+ $this->backupInfo['backupName']
+ );
+
+ $this->addResponse('Generated backup ' . $this->backupInfo['backupName'] . '.',
+ 0,
+ ['filename' => $this->backupInfo['backupName'],
+ 'uuid' => $this->basepackages->storages->packagesData->responseData['uuid'],
+ 'request' => $data
+ ]
+ );
+
+ return true;
+ }
+ } catch (\Exception | \throwable $e) {
+ $this->addResponse('Backup Error: ' . $e->getMessage(), 1);
- return true;
+ $this->basepackages->progress->resetProgress();
}
return false;
@@ -718,7 +754,7 @@ private function getDbKey($dbConfig = null)
}
}
- protected function registerBackupProgressMethods()
+ public function getBackupProgressMethods()
{
$this->backupProgressMethods =
[
@@ -740,10 +776,17 @@ protected function registerBackupProgressMethods()
]
];
+ return $this->backupProgressMethods;
+ }
+
+ protected function registerBackupProgressMethods()
+ {
+ $this->getBackupProgressMethods();
+
$this->basepackages->progress->registerMethods($this->backupProgressMethods);
}
- protected function registerRestoreProgressMethods()
+ public function getRestoreProgressMethods()
{
$this->restoreProgressMethods =
[
@@ -761,6 +804,13 @@ protected function registerRestoreProgressMethods()
]
];
+ return $this->restoreProgressMethods;
+ }
+
+ protected function registerRestoreProgressMethods()
+ {
+ $this->getRestoreProgressMethods();
+
$this->basepackages->progress->registerMethods($this->restoreProgressMethods);
}
}
\ No newline at end of file
diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Dashboards.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Dashboards.php
index 617fc53c0..c739790ee 100644
--- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Dashboards.php
+++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Dashboards.php
@@ -56,9 +56,27 @@ public function getDashboardById(int $id, $getwidgets = true, $getContent = fals
return false;
}
+ public function getDashboardsByAppType($appType)
+ {
+ $dashboards = [];
+
+ foreach($this->dashboards as $dashboard) {
+ if ($dashboard['app_type'] == $appType) {
+ array_push($dashboards, $dashboard);
+ }
+ }
+
+ $this->addResponse('Ok', 0, ['dashboards' => $dashboards]);
+
+ return $dashboards;
+ }
+
public function addDashboard(array $data)
{
- $data['app_id'] = $this->apps->getAppInfo()['id'];
+ $data['app_default'] = 0;
+ if (!isset($data['app_type'])) {
+ $data['app_type'] = $this->apps->app['app_type'];
+ }
$data['created_by'] = 0;
if ($this->access->auth->account()) {
@@ -67,8 +85,12 @@ public function addDashboard(array $data)
$data['settings']['maxWidgetsPerDashboard'] = $this->maxWidgetsPerDashboard;
- if (isset($data['is_default']) && $data['is_default'] == true) {
- $this->checkDefaultDashboard($data);
+ if (isset($data['user_default']) && $data['user_default'] == true) {
+ if ($this->access->auth->account()) {
+ $data['user_default'] = [$this->access->auth->account()['id']];
+ }
+ } else {
+ $data['user_default'] = [];
}
$data = $this->getSharedIds($data);
@@ -94,11 +116,32 @@ public function updateDashboard(array $data)
throw new PermissionDeniedException;
}
- $data = array_merge($dashboard, $data);
+ if (is_string($dashboard['user_default'])) {
+ $dashboard['user_default'] = $this->helper->decode($dashboard['user_default'], true);
+ }
+ if (isset($data['user_default'])) {
+ if ($data['user_default'] == true) {
+ if ($this->access->auth->account()) {
+ if ($dashboard['user_default'] && !in_array($this->access->auth->account()['id'], $dashboard['user_default'])) {
+ array_push($dashboard['user_default'], $this->access->auth->account()['id']);
+ } else {
+ $dashboard['user_default'] = [$this->access->auth->account()['id']];
+ }
+ }
+ } else if ($data['user_default'] == false) {
+ if ($this->access->auth->account()) {
+ if ($dashboard['user_default'] && in_array($this->access->auth->account()['id'], $dashboard['user_default'])) {
+ $key = array_search($this->access->auth->account()['id'], $dashboard['user_default']);
- if (isset($data['is_default']) && $data['is_default'] == true) {
- $this->checkDefaultDashboard($data);
+ if ($key !== false) {
+ unset($dashboard['user_default'][$key]);
+ }
+ }
+ }
+ }
}
+ unset($data['user_default']);
+ $data = array_merge($dashboard, $data);
$data = $this->getSharedIds($data);
@@ -109,25 +152,6 @@ public function updateDashboard(array $data)
}
}
- protected function checkDefaultDashboard($data)
- {
- $dashboards = $this->basepackages->dashboards->dashboards;
-
- foreach ($dashboards as $dashboard) {
- if ($data['id'] == $dashboard['id']) {
- continue;
- }
-
- if (isset($dashboard['is_default']) && $dashboard['is_default'] == true) {
- $dashboard['is_default'] = null;
-
- $this->update($dashboard);
-
- break;
- }
- }
- }
-
protected function getSharedIds($data)
{
if (isset($data['shared']) && is_string($data['shared'])) {
@@ -140,6 +164,8 @@ protected function getSharedIds($data)
} catch (\throwable $e) {
$data['shared'] = null;
}
+ } else {
+ $data['shared'] = null;
}
return $data;
diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Filters.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Filters.php
index 098c7e26a..88bb46ab7 100644
--- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Filters.php
+++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Filters.php
@@ -141,7 +141,7 @@ protected function getFilters(int $componentId, array $account = null)
count($filter['shared_ids']['aids']) > 0
) {
foreach ($filter['shared_ids']['aids'] as $sharingAidKey => $sharingAid) {
- $sharingAccount = $this->accounts->getById($sharingAid);
+ $sharingAccount = $this->basepackages->accounts->getById($sharingAid);
if ($sharingAccount) {
$filter['shared_ids']['aids'][$sharingAidKey] =
@@ -215,7 +215,7 @@ protected function getFilters(int $componentId, array $account = null)
// $filter['employee_full_name'] = $employee['full_name'];
// }
// } else {
- $sharedBy = $this->accounts->getById($filter['account_id']);
+ $sharedBy = $this->basepackages->accounts->getById($filter['account_id']);
if ($sharedBy) {
$filter['account_email'] = $sharedBy['email'];
@@ -243,7 +243,7 @@ protected function getFilters(int $componentId, array $account = null)
// $filter['employee_full_name'] = $employee['full_name'];
// }
// } else {
- $sharedBy = $this->accounts->getById($filter['account_id']);
+ $sharedBy = $this->basepackages->accounts->getById($filter['account_id']);
if ($sharedBy) {
$filter['account_email'] = $sharedBy['email'];
diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Menus.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Menus.php
index 99681ee7a..8f5786be4 100644
--- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Menus.php
+++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Menus.php
@@ -9,7 +9,7 @@ class Menus extends BasePackage
{
protected $modelToUse = BasepackagesMenus::class;
- protected $packageNameS = 'Menu';
+ protected $packageName = 'menus';
public $menus;
@@ -38,7 +38,11 @@ public function buildMenus($menus = null)
$buildMenu = [];
foreach (msort($menus, 'sequence') as $key => $menu) {
- $menu = $this->helper->decode($menu['menu'], true);
+ if (is_string($menu['menu'])) {
+ $menu['menu'] = $this->helper->decode($menu['menu'], true);
+ }
+
+ $menu = $menu['menu'];
if ($menu) {
$buildMenu = array_replace_recursive($buildMenu, $menu);
@@ -81,9 +85,28 @@ public function getMenusForAppType($appType)
return $this->buildMenus($menus);
}
- public function updateMenus($data)
+ public function getMenusByRouteForAppType($route, $appType)
{
- $menus = $this->helper->decode($data['menus'], true);
+ $menus = [];
+
+ foreach($this->menus as $menu) {
+ if ($menu['route'] === strtolower($route)) {
+ if ($menu['app_type'] === $appType) {
+ return $menu;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public function updateMenus(array $data)
+ {
+ $menus = $data['menus'];
+
+ if (is_string($menus)) {
+ $menus = $this->helper->decode($menus, true);
+ }
if (count($menus) > 0) {
foreach ($menus as $menuId => $value) {
@@ -105,8 +128,10 @@ public function updateMenus($data)
$this->init(true);
}
- public function addMenu($appType, array $menu)
+ public function addMenu(array $componentJsonFile)
{
+ $menu = $componentJsonFile['menu'];
+
if (isset($menu['seq'])) {
$sequence = $menu['seq'];
unset($menu['seq']);
@@ -119,7 +144,8 @@ public function addMenu($appType, array $menu)
$insertMenu = $this->add([
'menu' => $this->helper->encode($menu),
'apps' => $this->helper->encode([]),
- 'app_type' => $appType,
+ 'app_type' => $componentJsonFile['app_type'],
+ 'route' => $componentJsonFile['route'],
'sequence' => $sequence
]
);
@@ -131,8 +157,19 @@ public function addMenu($appType, array $menu)
}
}
- public function updateMenu($id, $appType, array $menu)
+ public function updateMenu($id, array $componentJsonFile)
{
+ $menu = $this->getById($id);
+
+ if (is_string($menu['menu'])) {
+ $menu['menu'] = $this->helper->decode($menu['menu'], true);
+ }
+ if ($menu) {
+ $menu = array_merge($menu['menu'], $componentJsonFile['menu']);
+ } else {
+ $menu = $componentJsonFile['menu'];
+ }
+
if (isset($menu['seq'])) {
$sequence = $menu['seq'];
unset($menu['seq']);
@@ -146,7 +183,8 @@ public function updateMenu($id, $appType, array $menu)
'id' => $id,
'menu' => $this->helper->encode($menu),
'apps' => $this->helper->encode([]),
- 'app_type' => $appType,
+ 'app_type' => $componentJsonFile['app_type'],
+ 'route' => $componentJsonFile['route'],
'sequence' => $sequence
]
);
diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Model/BasepackagesDashboards.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Model/BasepackagesDashboards.php
index 028b3e8d1..29d5c737b 100644
--- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Model/BasepackagesDashboards.php
+++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Model/BasepackagesDashboards.php
@@ -13,15 +13,13 @@ class BasepackagesDashboards extends BaseModel
public $name;
- public $app_id;
-
- public $app_default;
+ public $app_type;
public $created_by;
public $shared;
- public $is_default;
+ public $user_default;
public $settings;
diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Model/BasepackagesMenus.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Model/BasepackagesMenus.php
index 9e44ac5ce..d5e30d14b 100644
--- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Model/BasepackagesMenus.php
+++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Model/BasepackagesMenus.php
@@ -14,5 +14,7 @@ class BasepackagesMenus extends BaseModel
public $app_type;
+ public $route;
+
public $sequence;
}
\ No newline at end of file
diff --git a/system/Base/Providers/BasepackagesServiceProvider/Packages/Progress.php b/system/Base/Providers/BasepackagesServiceProvider/Packages/Progress.php
index 59b3f3e32..ba2c8dda4 100644
--- a/system/Base/Providers/BasepackagesServiceProvider/Packages/Progress.php
+++ b/system/Base/Providers/BasepackagesServiceProvider/Packages/Progress.php
@@ -51,6 +51,11 @@ public function checkProgressFile($fileName = null)
return false;
}
+ public function getProgressFile()
+ {
+ return $this->readProgressFile();
+ }
+
public function registerMethods(array $methods)
{
foreach ($methods as $key => $method) {
@@ -81,19 +86,28 @@ public function registerMethods(array $methods)
return false;
}
- public function unregisterMethods(array $methods, $using = 'method')//Either Method or Text as identifier in case of duplicate methods.
+ public function unregisterMethods(array $methods, $using = 'method', array $childs = [])//Either Method or Text as identifier in case of duplicate methods.
{
$progressFile = $this->readProgressFile();
+ if ($using !== 'method' && $using !== 'text') {
+ $using = 'method';
+ }
+
if (isset($progressFile['processes']) && count($progressFile['processes']) > 0) {
foreach ($methods as $method) {
foreach ($progressFile['processes'] as $progressFileKey => $progressFileMethod) {
- if ($using === 'method') {
- if ($progressFileMethod['method'] === $method) {
- unset($progressFile['processes'][$progressFileKey]);
- }
- } else if ($using === 'text') {
- if ($progressFileMethod['text'] === $method) {
+ if ($progressFileMethod[$using] === $method) {
+ if (count($childs) > 0 &&
+ isset($progressFile['processes'][$progressFileKey]['childs']) &&
+ count($progressFile['processes'][$progressFileKey]['childs']) > 0
+ ) {
+ foreach ($progressFile['processes'][$progressFileKey]['childs'] as $childKey => $child) {
+ if (in_array($child[$using], $childs)) {
+ unset($progressFile['processes'][$progressFileKey]['childs'][$childKey]);
+ }
+ }
+ } else {
unset($progressFile['processes'][$progressFileKey]);
}
}
diff --git a/system/Base/Providers/CoreServiceProvider/Install/Install.php b/system/Base/Providers/CoreServiceProvider/Install/Install.php
new file mode 100644
index 000000000..29a458661
--- /dev/null
+++ b/system/Base/Providers/CoreServiceProvider/Install/Install.php
@@ -0,0 +1,77 @@
+getSchema();
+
+ $this->databases = $databases;
+
+ //Only update 1 database
+ if (count($schemaNames) > 0) {
+ $schemaNamesDatabase = [];
+ foreach ($schemaNames as $schemaName) {
+ if (isset($databases[$schemaName])) {
+ $schemaNamesDatabase[$schemaName] = $databases[$schemaName];
+ }
+ }
+
+ $this->databases = $schemaNamesDatabase;
+ }
+
+ $this->dbInstaller = new DbInstaller;
+
+ return $this;
+ }
+
+ public function install()
+ {
+ $this->preInstall();
+
+ $this->installDb();
+
+ $this->postInstall();
+
+ return true;
+ }
+
+ public function preInstall()
+ {
+ //Do version specific update for any future version upgrades.
+ // if ($this->core->core['version'] === 'x.x.x') {
+ //Do something
+ // }
+
+ return true;
+ }
+
+ public function installDb()
+ {
+ $this->dbInstaller->installDb($this->databases);
+
+ return true;
+ }
+
+ public function postInstall()
+ {
+ //Do anything after installation.
+
+ return true;
+ }
+
+ public function truncate()
+ {
+ $this->dbInstaller->truncate($this->databases);
+ }
+}
\ No newline at end of file
diff --git a/system/Base/Providers/DatabaseServiceProvider/Ff.php b/system/Base/Providers/DatabaseServiceProvider/Ff.php
index 37a72a2e5..01e7f8716 100644
--- a/system/Base/Providers/DatabaseServiceProvider/Ff.php
+++ b/system/Base/Providers/DatabaseServiceProvider/Ff.php
@@ -615,11 +615,15 @@ public function reSync()
if (is_array($storeDataValue)) {
$storeDataValue = $this->helper->encode($storeDataValue);
}
+ if (is_int($storeDataValue)) {
+ $storeDataValue = (string) $storeDataValue;
+ }
+ if (is_bool($storeDataValue)) {
+ $storeDataValue = $storeDataValue ? 1 : 0;
+ }
}
- $model->assign($storeData);
-
- $model->create();
+ $this->db->insertAsDict($model->getSource(), $storeData);
}
return true;
diff --git a/system/Base/Providers/DatabaseServiceProvider/Ff/Store.php b/system/Base/Providers/DatabaseServiceProvider/Ff/Store.php
index a5eeaf694..971107a36 100644
--- a/system/Base/Providers/DatabaseServiceProvider/Ff/Store.php
+++ b/system/Base/Providers/DatabaseServiceProvider/Ff/Store.php
@@ -1568,12 +1568,26 @@ protected function normalizeData(array $data, $jsonToArray = false): array
continue;
}
- if ($type === 'boolean' || $type === 'integer') {
+ if ($type === 'integer') {
if (is_string($data[$propertyKey])) {
$data[$propertyKey] = (int) $data[$propertyKey];
}
+ }
+
+ if ($type === 'boolean') {
+ if (is_string($data[$propertyKey])) {
+ if ($data[$propertyKey] === 'false' ||
+ $data[$propertyKey] === '0'
+ ) {
+ $data[$propertyKey] = false;
+ } else if ($data[$propertyKey] === 'false' ||
+ $data[$propertyKey] === '1'
+ ) {
+ $data[$propertyKey] = true;
+ }
+ }
- if (is_int($data[$propertyKey]) && $type === 'boolean') {
+ if (is_int($data[$propertyKey])) {
$data[$propertyKey] = $data[$propertyKey] === 0 ? false : true;
}
}
diff --git a/system/Base/Providers/ErrorServiceProvider/Error.php b/system/Base/Providers/ErrorServiceProvider/Error.php
index 587fb7902..e8a56b2b1 100644
--- a/system/Base/Providers/ErrorServiceProvider/Error.php
+++ b/system/Base/Providers/ErrorServiceProvider/Error.php
@@ -250,8 +250,8 @@ protected function buildMessageNoDebug($message)
$userId = 0;
- if ($this->auth->account()) {
- $userId = $this->auth->account()['id'];
+ if ($this->access->auth->account()) {
+ $userId = $this->access->auth->account()['id'];
}
return '