mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2026-05-06 07:06:30 +02:00
More groundwork to allow installing multiple packages at once
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ export default class Updates {
|
||||
<p>
|
||||
<i class="fa fa-bullhorn"></i>
|
||||
<strong>v${resources[item].available}</strong> ${translations.PLUGIN_ADMIN.OF_THIS} ${singles[index]} ${translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE}!
|
||||
<a href="#" class="button button-small secondary" data-remodal-target="add-package" data-package-slug="${item}" data-${singles[index]}-action="get-package-dependencies">${translations.PLUGIN_ADMIN.UPDATE} ${singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase()}</a>
|
||||
<a href="#" class="button button-small secondary" data-remodal-target="add-package" data-packages-slugs="${item}" data-${singles[index]}-action="get-package-dependencies">${translations.PLUGIN_ADMIN.UPDATE} ${singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase()}</a>
|
||||
</p>
|
||||
`);
|
||||
}
|
||||
|
||||
@@ -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(`<li>${text}</li>`);
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
<div class="button-bar">
|
||||
<button data-remodal-action="cancel" class="button secondary remodal-cancel"><i class="fa fa-fw fa-close"></i> {{ "PLUGIN_ADMIN.CANCEL"|tu }}</button>
|
||||
<button data-{{ type }}-action="remove-package" data-package-slug="{{ package.slug }}" class="button"><i class="fa fa-fw fa-check"></i> {{ "PLUGIN_ADMIN.CONTINUE"|tu }}</button>
|
||||
<button data-{{ type }}-action="remove-package" data-packages-slugs="{{ package.slug }}" class="button"><i class="fa fa-fw fa-check"></i> {{ "PLUGIN_ADMIN.CONTINUE"|tu }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="button-bar success">
|
||||
<a class="button" href="#" data-remodal-target="add-package" data-package-slug="{{ plugin.slug }}" data-plugin-action="get-package-dependencies"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL"|tu }}</a>
|
||||
<a class="button" href="#" data-remodal-target="add-package" data-packages-slugs="{{ plugin.slug }}" data-plugin-action="get-package-dependencies"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL"|tu }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<i class="fa fa-fw fa-toggle-{{ data.get('enabled') ? 'on' : 'off' }}"></i>
|
||||
</a>
|
||||
{% elseif (installing) %}
|
||||
<a class="button" href="#" data-remodal-target="add-package" data-package-slug="{{ plugin.slug }}" data-plugin-action="get-package-dependencies"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL"|tu }}</a>
|
||||
<a class="button" href="#" data-remodal-target="add-package" data-packages-slugs="{{ plugin.slug }}" data-plugin-action="get-package-dependencies"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL"|tu }}</a>
|
||||
{% endif %}
|
||||
<span class="gpm-details-expand"><i class="fa fa-chevron-down"></i></span>
|
||||
</td>
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<div class="button-bar success">
|
||||
<a class="button" href="#" data-remodal-target="add-package" data-package-slug="{{ theme.slug }}" data-theme-action="get-package-dependencies"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL_THEME"|tu }}</a>
|
||||
<a class="button" href="#" data-remodal-target="add-package" data-packages-slugs="{{ theme.slug }}" data-theme-action="get-package-dependencies"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL_THEME"|tu }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user