diff --git a/bower.json b/bower.json index c4e49b0..7bf41bd 100644 --- a/bower.json +++ b/bower.json @@ -41,7 +41,8 @@ "jquery-timepicker-addon": "^1.3.1", "jquery-ui": "^1.11.4", "messageformat": "^0.3.1", - "jasny-bootstrap": "git://github.com/jasny/bootstrap" + "jasny-bootstrap": "git://github.com/jasny/bootstrap", + "form": "git://github.com/malsup/form/" }, "overrides": { "angular-bootstrap": { diff --git a/src/admin/bundles/bundle-install.directive.js b/src/admin/bundles/bundle-install.directive.js new file mode 100644 index 0000000..14d6ec7 --- /dev/null +++ b/src/admin/bundles/bundle-install.directive.js @@ -0,0 +1,124 @@ +(function(){ + 'use-strict'; + + angular.module('motech-admin') + .directive('installModules', moduleInstall); + + moduleInstall.$inject = ['ServerService']; + function moduleInstall(ServerService) { + return { + restrict: 'E', + replace: true, + templateUrl: '/admin/bundles/install-modules.html', + controller: controller, + link: function(scope, element, attrs) { + var url = $("#bundleUploadForm").attr("action"); + url = ServerService.formatURL(url); + $("#bundleUploadForm").attr("action", url); + } + }; + } + + controller.$inject = ['$scope', '$rootScope', '$state', 'BundlesFactory', 'LoadingModal', 'ModalFactory']; + function controller($scope, $rootScope, $state, BundlesFactory, LoadingModal, ModalFactory) { + $scope.moduleSources = [ + 'Repository', + 'File' + ]; + + $scope.moduleSource = $scope.moduleSources[0]; + + $scope.mavenStr = function(artifactId) { + return 'org.motechproject:'.concat(artifactId).concat(':').concat($scope.msg('server.version')); + }; + + $scope.modules = {}; + $scope.modules[$scope.mavenStr('alerts')] = 'Alerts'; + $scope.modules[$scope.mavenStr('appointments')] = 'Appointments'; + $scope.modules[$scope.mavenStr('atom-client')] = 'Atom Client'; + $scope.modules[$scope.mavenStr('csd')] = 'Care Services Directory'; + $scope.modules[$scope.mavenStr('cms-lite')] = 'CMS Lite'; + $scope.modules[$scope.mavenStr('commcare')] = 'Commcare'; + $scope.modules[$scope.mavenStr('dhis2')] = 'DHIS2'; + $scope.modules[$scope.mavenStr('event-logging')] = 'Event Logging'; + $scope.modules[$scope.mavenStr('http-agent')] = 'Http Agent'; + $scope.modules[$scope.mavenStr('ihe-interop')] = 'IHE Interop'; + $scope.modules[$scope.mavenStr('ivr')] = 'IVR'; + $scope.modules[$scope.mavenStr('message-campaign')] = 'Message Campaign'; + $scope.modules[$scope.mavenStr('metrics')] = 'Metrics'; + $scope.modules[$scope.mavenStr('mtraining')] = 'mTraining'; + $scope.modules[$scope.mavenStr('motech-tasks')] = 'Tasks'; + $scope.modules[$scope.mavenStr('odk')] = 'Open Data Kit'; + $scope.modules[$scope.mavenStr('openmrs')] = 'OpenMRS'; + $scope.modules[$scope.mavenStr('pill-reminder')] = 'Pill Reminder'; + $scope.modules[$scope.mavenStr('motech-scheduler')] = 'Scheduler'; + $scope.modules[$scope.mavenStr('schedule-tracking')] = 'Schedule Tracking'; + $scope.modules[$scope.mavenStr('sms')] = 'SMS'; + + $scope.module = ""; + + $scope.startOnUpload = function () { + if ($scope.startUpload !== true) { + $scope.startUpload = true; + $('.start-on-upload').find('i').removeClass("fa-square-o").addClass('fa-check-square-o'); + } else { + $scope.startUpload = false; + $('.start-on-upload').find('i').removeClass("fa-check-square-o").addClass('fa-square-o'); + } + }; + + $scope.submitBundle = function () { + if (!$scope.isNoModuleOrFileSelected()) { + LoadingModal.open(); + $('#bundleUploadForm').ajaxSubmit({ + success: function (data, textStatus, jqXHR) { + if (jqXHR.status === 0 && data) { + ModalFactory.showErrorWithStackTrace('admin.error', 'admin.bundles.error.start', data); + LoadingModal.close(); + } else { + $scope.bundles = BundlesFactory.query(function () { + if ($scope.startUpload) { + $timeout(function () { + $scope.$emit('lang.refresh'); + $scope.refreshModuleList(); + LoadingModal.close(); + }, MODULE_LIST_REFRESH_TIMEOUT); + } else { + $state.reload(); + LoadingModal.close(); + } + $scope.module = ""; + $('#bundleUploadForm .fileinput').fileinput('clear'); + ModalFactory.showSuccessAlert('admin.bundles.successInstall', 'admin.bundles.installNewModule'); + }); + } + }, + error:function (response) { + ModalFactory.showErrorWithStackTrace('admin.error', 'admin.bundles.error.start', response); + LoadingModal.close(); + } + }); + } else if ($scope.moduleSource === 'Repository') { + ModalFactory.showErrorAlert('admin.bundles.error.moduleNotSelected', 'admin.error'); + } else { + ModalFactory.showErrorAlert('admin.bundles.error.fileNotSelected', 'admin.error'); + } + }; + + $scope.isNoModuleOrFileSelected = function () { + if ($scope.moduleSource === 'Repository') { + return !$scope.module; + } else if ($scope.moduleSource === 'File') { + if ($("#bundleUploadForm #fileInput").val() === '') { + return true; + } else { + return false; + } + } + }; + + $scope.refreshModuleList = function () { + $scope.$emit('module.list.refresh'); + }; + } +})(); diff --git a/src/admin/bundles/bundles-list.controller.js b/src/admin/bundles/bundles-list.controller.js index 69f5917..21360a6 100644 --- a/src/admin/bundles/bundles-list.controller.js +++ b/src/admin/bundles/bundles-list.controller.js @@ -4,11 +4,10 @@ angular.module('motech-admin') .controller('BundlesListController', bundlesListController); - bundlesListController.$inject = ['$scope', '$rootScope', 'BundlesFactory']; - function bundlesListController ($scope, $rootScope, BundlesFactory) { - BundlesFactory.query(function(bundles){ + bundlesListController.$inject = ['$scope', 'BundlesFactory']; + function bundlesListController ($scope, BundlesFactory) { + BundlesFactory.query(function (bundles) { $scope.bundles = bundles; }); } - })(); \ No newline at end of file diff --git a/src/admin/bundles/bundles-list.html b/src/admin/bundles/bundles-list.html index 6754f2b..8849a7b 100644 --- a/src/admin/bundles/bundles-list.html +++ b/src/admin/bundles/bundles-list.html @@ -1,3 +1,6 @@ + + +
diff --git a/src/admin/bundles/bundles.scss b/src/admin/bundles/bundles.scss index 212662e..ee2a020 100644 --- a/src/admin/bundles/bundles.scss +++ b/src/admin/bundles/bundles.scss @@ -20,4 +20,14 @@ right: 0.5em; top: -0.25em; } +} + +form{ + padding: 0.5em; +} +.form-inline .form-group label{ + position: static !important; +} +#bundleUploadForm .fileinput { + margin-bottom: 0; } \ No newline at end of file diff --git a/src/admin/bundles/install-modules.html b/src/admin/bundles/install-modules.html new file mode 100644 index 0000000..2ef2608 --- /dev/null +++ b/src/admin/bundles/install-modules.html @@ -0,0 +1,30 @@ +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ + +
+
+ {{msg('admin.bundles.installOrUpdate')}} +
+
+
\ No newline at end of file diff --git a/src/common/base/base.icons.scss b/src/common/base/base.icons.scss index ed95c0e..95b7c57 100644 --- a/src/common/base/base.icons.scss +++ b/src/common/base/base.icons.scss @@ -110,7 +110,6 @@ Styleguide 1.3 .icon-arrow-down{ @include icon(caret-down); } - .icon-pause{ @include icon(pause); } @@ -126,3 +125,6 @@ Styleguide 1.3 .icon-check{ @include icon(check); } +.icon-file{ + @include icon(file); +}