diff --git a/classes/controller.php b/classes/controller.php index cd561cbd..ac0c4270 100644 --- a/classes/controller.php +++ b/classes/controller.php @@ -261,22 +261,25 @@ class AdminController * * @return bool */ - protected function taskPackageDependencies() + protected function taskGetPackagesDependencies() { $data = $this->post; - $package = isset($data['package']) ? $data['package'] : ''; + $packages = isset($data['packages']) ? $data['packages'] : ''; + $packages = (array)$packages; - $dependencies = $this->admin->getDependenciesNeededToInstall([$package]); + $dependencies = $this->admin->getDependenciesNeededToInstall($packages); $this->admin->json_response = ['status' => 'success', 'dependencies' => $dependencies]; return true; } - protected function taskInstallDependenciesOfPackage() + protected function taskInstallDependenciesOfPackages() { $data = $this->post; - $package = isset($data['package']) ? $data['package'] : ''; + $packages = isset($data['packages']) ? $data['packages'] : ''; + $packages = (array)$packages; + $type = isset($data['type']) ? $data['type'] : ''; if (!$this->authorizeTask('install ' . $type, ['admin.' . $type, 'admin.super'])) { @@ -286,7 +289,7 @@ class AdminController require_once __DIR__ . '/gpm.php'; - $dependencies = $this->admin->getDependenciesNeededToInstall([$package]); + $dependencies = $this->admin->getDependenciesNeededToInstall($packages); $result = \Grav\Plugin\Admin\Gpm::install(array_keys($dependencies), ['theme' => ($type == 'theme')]); @@ -314,7 +317,7 @@ class AdminController $result = \Grav\Plugin\Admin\Gpm::install($package, ['theme' => ($type == 'theme')]); if ($result) { - $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.INSTALLATION_SUCCESSFUL')]; + $this->admin->json_response = ['status' => 'success', 'message' => "Package $package installed successfully"]; } else { $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.INSTALLATION_FAILED')]; } @@ -334,7 +337,7 @@ class AdminController $type = isset($data['type']) ? $data['type'] : ''; if (!$this->authorizeTask('uninstall ' . $type, ['admin.' . $type, 'admin.super'])) { - $this->admin->json_response = ['status' => 'error', 'message' => 'Unauthorized']; + $this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK')]; return false; } diff --git a/themes/grav/app/updates/index.js b/themes/grav/app/updates/index.js index f0ac27f1..7afe8059 100644 --- a/themes/grav/app/updates/index.js +++ b/themes/grav/app/updates/index.js @@ -111,7 +111,7 @@ export default class Updates {

v${resources[item].available} ${translations.PLUGIN_ADMIN.OF_THIS} ${singles[index]} ${translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE}! - ${translations.PLUGIN_ADMIN.UPDATE} ${singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase()} + ${translations.PLUGIN_ADMIN.UPDATE} ${singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase()}

`); } diff --git a/themes/grav/app/utils/packages.js b/themes/grav/app/utils/packages.js index 218093d5..5aa054af 100644 --- a/themes/grav/app/utils/packages.js +++ b/themes/grav/app/utils/packages.js @@ -26,7 +26,7 @@ class Packages { } static getTaskUrl(type, task) { - var url = `${config.base_url_relative}`; + let url = `${config.base_url_relative}`; url += `/${type}s.json`; url += `/task${config.param_sep}${task}`; return url; @@ -36,16 +36,12 @@ class Packages { return `${Packages.getTaskUrl(type, 'removePackage')}`; } - static getAddPackageUrl(type) { - return `${Packages.getTaskUrl(type, 'addPackage')}`; + static getGetPackagesDependenciesUrl(type) { + return `${Packages.getTaskUrl(type, 'getPackagesDependencies')}`; } - static getPackageDependenciesUrl(type) { - return `${Packages.getTaskUrl(type, 'packageDependencies')}`; - } - - static getInstallDependenciesOfPackageUrl(type) { - return `${Packages.getTaskUrl(type, 'installDependenciesOfPackage')}`; + static getInstallDependenciesOfPackagesUrl(type) { + return `${Packages.getTaskUrl(type, 'installDependenciesOfPackages')}`; } static getInstallPackageUrl(type) { @@ -106,13 +102,13 @@ class Packages { list.append(`
  • ${text}
  • `); } - getPackageDependencies(type, slug, finishedLoadingCallback) { - let url = Packages.getPackageDependenciesUrl(type); + getPackagesDependencies(type, slugs, finishedLoadingCallback) { + let url = Packages.getGetPackagesDependenciesUrl(type); request(url, { method: 'post', body: { - package: slug + packages: slugs } }, (response) => { @@ -120,7 +116,7 @@ class Packages { if (response.status === 'success') { if (response.dependencies) { - var hasDependencies = false; + let hasDependencies = false; for (var dependency in response.dependencies) { if (response.dependencies.hasOwnProperty(dependency)) { hasDependencies = true; @@ -143,51 +139,46 @@ class Packages { }); } - installDependenciesOfPackage(type, slug, callbackSuccess, callbackError) { - let url = Packages.getInstallDependenciesOfPackageUrl(type); + installDependenciesOfPackages(type, slugs, callbackSuccess, callbackError) { + let url = Packages.getInstallDependenciesOfPackagesUrl(type); request(url, { method: 'post', body: { - package: slug + packages: slugs } - }, (response) => { - - if (response.status === 'success') { - callbackSuccess(); - } else { - callbackError(); - } - }); + }, callbackSuccess); } - installPackage(type, slug, callbackSuccess) { + installPackage(type, slugs, callbackSuccess) { let url = Packages.getInstallPackageUrl(type); - request(url, { - method: 'post', - body: { - package: slug, - type: type - } - }, () => { - callbackSuccess(); + slugs.forEach((slug) => { + request(url, { + method: 'post', + body: { + package: slug, + type: type + } + }, callbackSuccess); }); + } - static getSlugFromEvent(event) { - var slug = ''; - if ($(event.target).is('[data-package-slug]')) { - slug = $(event.target).data('package-slug'); + static getSlugsFromEvent(event) { + let slugs = ''; + if ($(event.target).is('[data-packages-slugs]')) { + slugs = $(event.target).data('packages-slugs'); } else { - slug = $(event.target).parent('[data-package-slug]').data('package-slug'); + slugs = $(event.target).parent('[data-packages-slugs]').data('packages-slugs'); } - return slug; + slugs = slugs.split(','); + return typeof slugs === 'string' ? [slugs] : slugs; } handleGettingPackageDependencies(type, event) { - var slug = Packages.getSlugFromEvent(event); + let slugs = Packages.getSlugsFromEvent(event); event.preventDefault(); event.stopPropagation(); @@ -200,34 +191,41 @@ class Packages { $('[data-remodal-id="add-package"] .install-dependencies-package-container .button-bar').removeClass('hidden'); $('[data-remodal-id="add-package"] .install-package-container .button-bar').removeClass('hidden'); - this.getPackageDependencies(type, slug, () => { - $(`[data-remodal-id="add-package"] [data-${type}-action="install-dependencies-and-package"]`).attr('data-package-slug', slug); - $(`[data-remodal-id="add-package"] [data-${type}-action="install-package"]`).attr('data-package-slug', slug); + this.getPackagesDependencies(type, slugs, () => { + let slugs_string = slugs.join(); + $(`[data-remodal-id="add-package"] [data-${type}-action="install-dependencies-and-package"]`).attr('data-packages-slugs', slugs_string); + $(`[data-remodal-id="add-package"] [data-${type}-action="install-package"]`).attr('data-packages-slugs', slugs_string); $('[data-remodal-id="add-package"] .loading').addClass('hidden'); }); } handleInstallingDependenciesAndPackage(type, event) { - var slug = Packages.getSlugFromEvent(event); + let slugs = Packages.getSlugsFromEvent(event); event.preventDefault(); event.stopPropagation(); $('.install-dependencies-package-container .button-bar').addClass('hidden'); $('.installing-dependencies').removeClass('hidden'); - this.installDependenciesOfPackage(type, slug, () => { + this.installDependenciesOfPackages(type, slugs, () => { $('.installing-dependencies').addClass('hidden'); $('.installing-package').removeClass('hidden'); - this.installPackage(type, slug, () => { + this.installPackage(type, slugs, () => { $('.installing-package').addClass('hidden'); $('.installation-complete').removeClass('hidden'); - window.location.href = `${config.base_url_relative}/${type}s/${slug}`; + + if (slugs.length === 1) { + window.location.href = `${config.base_url_relative}/${type}s/${slugs[0]}`; + } else { + window.location.href = `${config.base_url_relative}/${type}s`; + } + }); }); } handleInstallingPackage(type, event) { - var slug = Packages.getSlugFromEvent(event); + let slug = Packages.getSlugsFromEvent(event); event.preventDefault(); event.stopPropagation(); @@ -242,7 +240,7 @@ class Packages { } handleRemovingPackage(type, event) { - let slug = $(event.target).data('package-slug'); + let slug = $(event.target).data('packages-slugs'); event.preventDefault(); event.stopPropagation(); diff --git a/themes/grav/templates/partials/modal-remove-package.html.twig b/themes/grav/templates/partials/modal-remove-package.html.twig index b2be7361..fbe1b464 100644 --- a/themes/grav/templates/partials/modal-remove-package.html.twig +++ b/themes/grav/templates/partials/modal-remove-package.html.twig @@ -10,7 +10,7 @@
    - +
    diff --git a/themes/grav/templates/partials/plugins-details.html.twig b/themes/grav/templates/partials/plugins-details.html.twig index ba74b792..1167c710 100644 --- a/themes/grav/templates/partials/plugins-details.html.twig +++ b/themes/grav/templates/partials/plugins-details.html.twig @@ -31,7 +31,7 @@ {% else %}
    - {{ "PLUGIN_ADMIN.INSTALL"|tu }} + {{ "PLUGIN_ADMIN.INSTALL"|tu }}
    {% endif %} diff --git a/themes/grav/templates/partials/plugins-list.html.twig b/themes/grav/templates/partials/plugins-list.html.twig index 9727c5f5..be309bbf 100644 --- a/themes/grav/templates/partials/plugins-list.html.twig +++ b/themes/grav/templates/partials/plugins-list.html.twig @@ -28,7 +28,7 @@ {% elseif (installing) %} - {{ "PLUGIN_ADMIN.INSTALL"|tu }} + {{ "PLUGIN_ADMIN.INSTALL"|tu }} {% endif %} diff --git a/themes/grav/templates/partials/themes-details.html.twig b/themes/grav/templates/partials/themes-details.html.twig index f06d40bb..57994743 100644 --- a/themes/grav/templates/partials/themes-details.html.twig +++ b/themes/grav/templates/partials/themes-details.html.twig @@ -99,7 +99,7 @@ {% endif %} {% else %}
    - {{ "PLUGIN_ADMIN.INSTALL_THEME"|tu }} + {{ "PLUGIN_ADMIN.INSTALL_THEME"|tu }}
    {% endif %}