diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/package.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/package.resource.js index bfb801e536..9dae2008e2 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/package.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/package.resource.js @@ -24,6 +24,15 @@ function packageResource($q, $http, umbDataFormatter, umbRequestHelper) { 'Failed to get installed packages'); }, + validateInstalled: function (name, version) { + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "packageInstallApiBaseUrl", + "ValidateInstalled", { name: name, version: version })), + 'Failed to validate package ' + name); + }, + deleteCreatedPackage: function (packageId) { return umbRequestHelper.resourcePromise( $http.post( diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/dashboard.tabs.controller.js b/src/Umbraco.Web.UI.Client/src/views/dashboard/dashboard.tabs.controller.js index 42ceb86964..53c0e0419d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/dashboard.tabs.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/dashboard.tabs.controller.js @@ -17,28 +17,28 @@ function startUpVideosDashboardController($scope, xmlhelper, $log, $http) { angular.module("umbraco").controller("Umbraco.Dashboard.StartupVideosController", startUpVideosDashboardController); -function FormsController($scope, $route, $cookieStore, packageResource) { +function FormsController($scope, $route, $cookieStore, packageResource, localizationService) { $scope.installForms = function(){ - $scope.state = "Installng package"; + $scope.state = localizationService.localize("packager_installStateDownloading"); packageResource .fetch("CD44CF39-3D71-4C19-B6EE-948E1FAF0525") .then(function(pack) { - $scope.state = "importing"; + $scope.state = localizationService.localize("packager_installStateImporting"); return packageResource.import(pack); }, $scope.error) .then(function(pack) { - $scope.state = "Installing"; + $scope.state = localizationService.localize("packager_installStateInstalling"); return packageResource.installFiles(pack); }, $scope.error) .then(function(pack) { - $scope.state = "Restarting, please wait..."; + $scope.state = localizationService.localize("packager_installStateRestarting"); return packageResource.installData(pack); }, $scope.error) .then(function(pack) { - $scope.state = "All done, your browser will now refresh"; + $scope.state = localizationService.localize("packager_installStateComplete"); return packageResource.cleanUp(pack); }, $scope.error) diff --git a/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.controller.js b/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.controller.js index 63a270386d..0f3455203d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function PackagesInstallLocalController($scope, $route, $location, Upload, umbRequestHelper, packageResource, localStorageService, $timeout, $window) { + function PackagesInstallLocalController($scope, $route, $location, Upload, umbRequestHelper, packageResource, localStorageService, $timeout, $window, localizationService) { var vm = this; vm.state = "upload"; @@ -9,7 +9,8 @@ vm.localPackage = {}; vm.installPackage = installPackage; vm.installState = { - status: "" + status: "", + progress:0 }; vm.zipFile = { uploadStatus: "idle", @@ -98,7 +99,7 @@ } function installPackage() { - vm.installState.status = "Importing"; + vm.installState.status = localizationService.localize("packager_installStateImporting"); vm.installState.progress = "0"; //TODO: If any of these fail, will they keep calling the next one? @@ -106,19 +107,19 @@ .import(vm.localPackage) .then(function(pack) { vm.installState.progress = "25"; - vm.installState.status = "Installing..."; + vm.installState.status = localizationService.localize("packager_installStateInstalling"); vm.installState.progress = "50"; return packageResource.installFiles(pack); }, installError) .then(function(pack) { - vm.installState.status = "Restarting, please wait..."; + vm.installState.status = localizationService.localize("packager_installStateRestarting"); vm.installState.progress = "75"; return packageResource.installData(pack); }, installError) .then(function(pack) { - vm.installState.status = "All done, your browser will now refresh, please wait..."; + vm.installState.status = localizationService.localize("packager_installStateComplete"); vm.installState.progress = "100"; return packageResource.cleanUp(pack); }, diff --git a/src/Umbraco.Web.UI.Client/src/views/packager/views/installed.controller.js b/src/Umbraco.Web.UI.Client/src/views/packager/views/installed.controller.js index a1bc40ece0..ce1d2cca0f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/packager/views/installed.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/packager/views/installed.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function PackagesInstalledController($scope, $route, $location, packageResource, $timeout, $window, localStorageService) { + function PackagesInstalledController($scope, $route, $location, packageResource, $timeout, $window, localStorageService, localizationService) { var vm = this; @@ -28,14 +28,14 @@ } function uninstallPackage(installedPackage) { - vm.installState.status = "Uninstalling package..."; + vm.installState.status = localizationService.localize("packager_installStateUninstalling"); vm.installState.progress = "0"; packageResource.uninstall(installedPackage.id) .then(function () { if (installedPackage.files.length > 0) { - vm.installState.status = "All done, your browser will now refresh"; + vm.installState.status = localizationService.localize("packager_installStateComplete"); vm.installState.progress = "100"; //set this flag so that on refresh it shows the installed packages list diff --git a/src/Umbraco.Web.UI.Client/src/views/packager/views/repo.controller.js b/src/Umbraco.Web.UI.Client/src/views/packager/views/repo.controller.js index 6aae118085..dc6dfe7da4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/packager/views/repo.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/packager/views/repo.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function PackagesRepoController($scope, $route, $location, $timeout, ourPackageRepositoryResource, $q, packageResource, localStorageService) { + function PackagesRepoController($scope, $route, $location, $timeout, ourPackageRepositoryResource, $q, packageResource, localStorageService, localizationService) { var vm = this; @@ -15,7 +15,9 @@ }; vm.searchQuery = ""; vm.installState = { - status: "" + status: "", + progress: 0, + type: "ok" }; vm.selectCategory = selectCategory; vm.showPackageDetails = showPackageDetails; @@ -107,11 +109,20 @@ function showPackageDetails(selectedPackage) { ourPackageRepositoryResource.getDetails(selectedPackage.id) - .then(function(pack) { - vm.package = pack; - vm.packageViewState = "packageDetails"; + .then(function (pack) { + packageResource.validateInstalled(pack.name, pack.latestVersion) + .then(function() { + //ok, can install + vm.package = pack; + vm.package.isValid = true; + vm.packageViewState = "packageDetails"; + }, function() { + //nope, cannot install + vm.package = pack; + vm.package.isValid = false; + vm.packageViewState = "packageDetails"; + }) }); - } function setPackageViewState(state) { @@ -154,35 +165,42 @@ vm.loading = false; vm.localPackage = pack; vm.localPackage.allowed = true; - }, - error); + }, function (evt, status, headers, config) { + + if (status == 400) { + //it's a validation error + vm.installState.type = "error"; + vm.zipFile.serverErrorMessage = evt.message; + } + }); } function error(e, args) { - + //This will return a rejection meaning that the promise change above will stop + return $q.reject(); } function installPackage(selectedPackage) { - vm.installState.status = "importing..."; + vm.installState.status = localizationService.localize("packager_installStateImporting"); vm.installState.progress = "0"; packageResource .import(selectedPackage) .then(function(pack) { - vm.installState.status = "Installing..."; + vm.installState.status = localizationService.localize("packager_installStateInstalling"); vm.installState.progress = "33"; return packageResource.installFiles(pack); }, error) .then(function(pack) { - vm.installState.status = "Restarting, please wait..."; + vm.installState.status = localizationService.localize("packager_installStateRestarting"); vm.installState.progress = "66"; return packageResource.installData(pack); }, error) .then(function(pack) { - vm.installState.status = "All done, your browser will now refresh"; + vm.installState.status = localizationService.localize("packager_installStateComplete"); vm.installState.progress = "100"; return packageResource.cleanUp(pack); }, diff --git a/src/Umbraco.Web.UI.Client/src/views/packager/views/repo.html b/src/Umbraco.Web.UI.Client/src/views/packager/views/repo.html index a78966e492..973fa8c440 100644 --- a/src/Umbraco.Web.UI.Client/src/views/packager/views/repo.html +++ b/src/Umbraco.Web.UI.Client/src/views/packager/views/repo.html @@ -153,7 +153,12 @@