You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					329 lines
				
				10 KiB
			
		
		
			
		
	
	
					329 lines
				
				10 KiB
			| 
											2 years ago
										 | /* Licensed under the Apache License, Version 2.0 (the "License"); | ||
|  |  * you may not use this file except in compliance with the License. | ||
|  |  * You may obtain a copy of the License at | ||
|  |  * | ||
|  |  *      http://www.apache.org/licenses/LICENSE-2.0
 | ||
|  |  * | ||
|  |  * Unless required by applicable law or agreed to in writing, software | ||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
|  |  * See the License for the specific language governing permissions and | ||
|  |  * limitations under the License. | ||
|  |  */ | ||
|  | angular.module('flowableModeler') | ||
|  |   .controller('AppDefinitionCtrl', ['$rootScope', '$scope', '$translate', '$http', '$location', '$routeParams', '$modal', '$popover', '$timeout', | ||
|  |                               function ($rootScope, $scope, $translate, $http, $location, $routeParams, $modal, $popover, $timeout) { | ||
|  | 
 | ||
|  |     // Main page (needed for visual indicator of current page)
 | ||
|  |     $rootScope.setMainPageById('apps'); | ||
|  | 
 | ||
|  |     // Initialize model
 | ||
|  |     $scope.model = { | ||
|  |         // Store the main model id, this points to the current version of a model,
 | ||
|  |         // even when we're showing history
 | ||
|  |         latestModelId: $routeParams.modelId, | ||
|  |         activeTab: 'bpmn' | ||
|  |     }; | ||
|  |      | ||
|  |     $scope.tabs = [ | ||
|  |         { | ||
|  |             id: 'bpmn', | ||
|  |             title: 'BPMN models' | ||
|  |         }, | ||
|  |         { | ||
|  |             id: 'cmmn', | ||
|  |             title: 'CMMN models' | ||
|  |         } | ||
|  |     ]; | ||
|  | 
 | ||
|  |     $scope.loadApp = function() { | ||
|  |     	var url; | ||
|  |     	var definitionUrl; | ||
|  | 
 | ||
|  |     	if ($routeParams.modelHistoryId) { | ||
|  |     		url = FLOWABLE.APP_URL.getModelHistoryUrl($routeParams.modelId, $routeParams.modelHistoryId); | ||
|  |     		definitionUrl = FLOWABLE.APP_URL.getAppDefinitionHistoryUrl($routeParams.modelId, $routeParams.modelHistoryId); | ||
|  |     	} else { | ||
|  |     		url = FLOWABLE.APP_URL.getModelUrl($routeParams.modelId); | ||
|  |     		definitionUrl = FLOWABLE.APP_URL.getAppDefinitionUrl($routeParams.modelId); | ||
|  | 
 | ||
|  |     		$scope.model.appExportUrl = FLOWABLE.APP_URL.getAppDefinitionExportUrl($routeParams.modelId); | ||
|  | 
 | ||
|  |     		$scope.model.appBarExportUrl = FLOWABLE.APP_URL.getAppDefinitionBarExportUrl($routeParams.modelId); | ||
|  |     	} | ||
|  | 
 | ||
|  |     	$http({method: 'GET', url: url}). | ||
|  |         	success(function(data, status, headers, config) { | ||
|  |         		$scope.model.app = data; | ||
|  |         		$scope.loadVersions(); | ||
|  | 
 | ||
|  |         	}).error(function(data, status, headers, config) { | ||
|  |         		$scope.returnToList(); | ||
|  |         	}); | ||
|  | 
 | ||
|  |     	$http({method: 'GET', url: definitionUrl}). | ||
|  |             success(function(data, status, headers, config) { | ||
|  |                 $scope.model.appDefinition = data; | ||
|  |             }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.useAsNewVersion = function() { | ||
|  |         _internalCreateModal({ | ||
|  |     		template: 'views/popup/model-use-as-new-version.html', | ||
|  |     		scope: $scope | ||
|  |     	}, $modal, $scope); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.loadVersions = function() { | ||
|  | 
 | ||
|  |       var params = { | ||
|  |         includeLatestVersion: !$scope.model.app.latestVersion | ||
|  |       }; | ||
|  | 
 | ||
|  |       $http({method: 'GET', url: FLOWABLE.APP_URL.getModelHistoriesUrl($scope.model.latestModelId), params: params}). | ||
|  | 	      success(function(data, status, headers, config) { | ||
|  | 	        if ($scope.model.app.latestVersion) { | ||
|  | 	          if (!data.data) { | ||
|  | 	            data.data = []; | ||
|  | 	          } | ||
|  | 	          data.data.unshift($scope.model.app); | ||
|  | 	        } | ||
|  | 
 | ||
|  | 	        $scope.model.versions = data; | ||
|  | 	      }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.showVersion = function(version) { | ||
|  |       if (version) { | ||
|  |         if (version.latestVersion) { | ||
|  |             $location.path("/apps/" +  $scope.model.latestModelId); | ||
|  |         } else { | ||
|  |           // Show latest version, no history-suffix needed in URL
 | ||
|  |           $location.path("/apps/" +  $scope.model.latestModelId + "/history/" + version.id); | ||
|  |         } | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.returnToList = function() { | ||
|  |         $location.path("/apps/"); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.openEditor = function() { | ||
|  |         $location.path("/app-editor/" + $scope.model.latestModelId); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.editApp = function() { | ||
|  |         _internalCreateModal({ | ||
|  |     		template: 'views/popup/model-edit.html', | ||
|  | 	        scope: $scope | ||
|  |     	}, $modal, $scope); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.duplicateApp = function () { | ||
|  |       var modalInstance = _internalCreateModal({ | ||
|  |           template: 'views/popup/app-definition-duplicate.html?version=' + Date.now() | ||
|  |       }, $modal, $scope); | ||
|  | 
 | ||
|  |       modalInstance.$scope.originalModel = $scope.model; | ||
|  |     }; | ||
|  | 
 | ||
|  | 
 | ||
|  |     $scope.deleteApp = function() { | ||
|  |         // User is owner of the app definition and the app definition is deployed
 | ||
|  |         /*_internalCreateModal({ | ||
|  |             template: 'views/popup/app-definition-delete.html?version=' + Date.now(), | ||
|  |             scope: $scope | ||
|  |         }, $modal, $scope);*/ | ||
|  | 
 | ||
|  |       	_internalCreateModal({ | ||
|  |             template: 'views/popup/model-delete.html?version=' + Date.now(), | ||
|  |             scope: $scope | ||
|  |         }, $modal, $scope); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.publish = function() { | ||
|  |         _internalCreateModal({ | ||
|  |             template: 'views/popup/app-definition-publish.html?version=' + Date.now(), | ||
|  |             scope: $scope | ||
|  |         }, $modal, $scope); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.shareApp = function() { | ||
|  |         _internalCreateModal({ | ||
|  |     		template: 'views/popup/model-share.html?version=' + Date.now(), | ||
|  |     		scope: $scope | ||
|  |     	}, $modal, $scope); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.importAppDefinition = function () { | ||
|  |         _internalCreateModal({ | ||
|  |             template: 'views/popup/app-definition-import.html?version=' + Date.now(), | ||
|  |             scope: $scope | ||
|  |         }, $modal, $scope); | ||
|  |     }; | ||
|  | 
 | ||
|  |       $scope.toggleHistory = function($event) { | ||
|  |         if(!$scope.historyState) { | ||
|  |           var state = {}; | ||
|  |           $scope.historyState = state; | ||
|  | 
 | ||
|  |           // Create popover
 | ||
|  |           state.popover = $popover(angular.element($event.target), { | ||
|  |             template: 'views/popover/history.html', | ||
|  |             placement: 'bottom-right', | ||
|  |             show: true, | ||
|  |             scope: $scope, | ||
|  |             container: 'body' | ||
|  |           }); | ||
|  | 
 | ||
|  |           var destroy = function() { | ||
|  |             state.popover.destroy(); | ||
|  |             delete $scope.historyState; | ||
|  |           }; | ||
|  | 
 | ||
|  |           // When popup is hidden or scope is destroyed, hide popup
 | ||
|  |           state.popover.$scope.$on('tooltip.hide', destroy); | ||
|  |           $scope.$on('$destroy', destroy); | ||
|  |         } | ||
|  |       }; | ||
|  | 
 | ||
|  |     $scope.loadApp(); | ||
|  | }]); | ||
|  | 
 | ||
|  | angular.module('flowableModeler') | ||
|  | .controller('PublishAppDefinitionPopupCtrl', ['$rootScope', '$scope', '$http', '$route', '$translate', function ($rootScope, $scope, $http, $route, $translate) { | ||
|  | 
 | ||
|  |     $scope.popup = { | ||
|  |         loading: false, | ||
|  |         comment: '' | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.ok = function (force) { | ||
|  |         $scope.popup.loading = true; | ||
|  |         var data = { | ||
|  |             comment: $scope.popup.comment | ||
|  |         }; | ||
|  | 
 | ||
|  |         if (force !== undefined && force !== null && force === true) { | ||
|  |             data.force = true; | ||
|  |         } | ||
|  | 
 | ||
|  |         delete $scope.popup.error; | ||
|  | 
 | ||
|  |         $http({method: 'POST', url: FLOWABLE.APP_URL.getAppDefinitionPublishUrl($scope.model.app.id), data: data}). | ||
|  |             success(function(data, status, headers, config) { | ||
|  |                 $scope.$hide(); | ||
|  | 
 | ||
|  |                 if (data.error) { | ||
|  |                     $scope.popup.loading = false; | ||
|  |                     $scope.addAlert(data.errorDescription, 'error'); | ||
|  |                 } else { | ||
|  |                     $scope.popup.loading = false; | ||
|  |                     $route.reload(); | ||
|  |                     $scope.addAlertPromise($translate('APP.ALERT.PUBLISH-CONFIRM'), 'info'); | ||
|  |                 } | ||
|  |             }). | ||
|  |             error(function(data, status, headers, config) { | ||
|  |                 $scope.popup.loading = false; | ||
|  |                 $scope.$hide(); | ||
|  |                 $scope.addAlertPromise($translate('APP.ALERT.PUBLISH-ERROR'), 'error'); | ||
|  |             }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.cancel = function () { | ||
|  |         if (!$scope.popup.loading) { | ||
|  |             $scope.$hide(); | ||
|  |         } | ||
|  |     }; | ||
|  | }]); | ||
|  | 
 | ||
|  | angular.module('flowableModeler') | ||
|  | .controller('DeleteAppDefinitionPopupCtrl', ['$rootScope', '$scope', '$http', '$translate', function ($rootScope, $scope, $http, $translate) { | ||
|  | 
 | ||
|  |     $scope.popup = { | ||
|  |         loading: false, | ||
|  |         cascade: 'false' | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.ok = function () { | ||
|  |         $scope.popup.loading = true; | ||
|  |         var params = { | ||
|  |             // Explicit string-check because radio-values cannot be js-booleans
 | ||
|  |             cascade : $scope.popup.cascade === 'true', | ||
|  |             deleteRuntimeApp: true | ||
|  |         }; | ||
|  | 
 | ||
|  |         $http({method: 'DELETE', url: FLOWABLE.APP_URL.getModelUrl($scope.model.app.id), params: params}). | ||
|  |             success(function(data, status, headers, config) { | ||
|  |                 $scope.$hide(); | ||
|  |                 $scope.popup.loading = false; | ||
|  |                 $scope.addAlertPromise($translate('APP.ALERT.DELETE-CONFIRM'), 'info'); | ||
|  |                 $scope.returnToList(); | ||
|  |             }). | ||
|  |             error(function(data, status, headers, config) { | ||
|  |                 $scope.$hide(); | ||
|  |                 $scope.popup.loading = false; | ||
|  |             }); | ||
|  |     }; | ||
|  | 
 | ||
|  |     $scope.cancel = function () { | ||
|  |         if (!$scope.popup.loading) { | ||
|  |             $scope.$hide(); | ||
|  |         } | ||
|  |     }; | ||
|  | }]); | ||
|  | 
 | ||
|  | angular.module('flowableModeler') | ||
|  | .controller('ImportNewVersionAppDefinitionCtrl', ['$rootScope', '$scope', '$http', 'Upload', '$route', function ($rootScope, $scope, $http, Upload, $route) { | ||
|  | 
 | ||
|  |   $scope.popup = { | ||
|  |        loading: false, | ||
|  |        renewIdmIds: false | ||
|  |   }; | ||
|  | 
 | ||
|  |   $scope.onFileSelect = function($files, isIE) { | ||
|  | 
 | ||
|  |       $scope.popup.loading = true; | ||
|  | 
 | ||
|  |       for (var i = 0; i < $files.length; i++) { | ||
|  |           var file = $files[i]; | ||
|  | 
 | ||
|  |           var url; | ||
|  |           if (isIE) { | ||
|  |               url = FLOWABLE.APP_URL.getAppDefinitionModelTextImportUrl($scope.model.app.id, $scope.popup.renewIdmIds); | ||
|  |           } else { | ||
|  |               url = FLOWABLE.APP_URL.getAppDefinitionModelImportUrl($scope.model.app.id, $scope.popup.renewIdmIds); | ||
|  |           } | ||
|  | 
 | ||
|  |           Upload.upload({ | ||
|  |               url: url, | ||
|  |               method: 'POST', | ||
|  |               file: file | ||
|  |           }).progress(function(evt) { | ||
|  |               $scope.popup.uploadProgress = parseInt(100.0 * evt.loaded / evt.total); | ||
|  | 
 | ||
|  |           }).success(function(data, status, headers, config) { | ||
|  |               $scope.popup.loading = false; | ||
|  | 
 | ||
|  |               $route.reload(); | ||
|  |               $scope.$hide(); | ||
|  | 
 | ||
|  |           }).error(function(data, status, headers, config) { | ||
|  | 
 | ||
|  |               if (data && data.message) { | ||
|  |                   $scope.popup.errorMessage = data.message; | ||
|  |               } | ||
|  | 
 | ||
|  |               $scope.popup.error = true; | ||
|  |               $scope.popup.loading = false; | ||
|  |           }); | ||
|  |       } | ||
|  |   }; | ||
|  | 
 | ||
|  |   $scope.cancel = function () { | ||
|  |       if (!$scope.popup.loading) { | ||
|  |           $scope.$hide(); | ||
|  |       } | ||
|  |   }; | ||
|  | }]); |