Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prevent accidentical removal of whole folder instead of deleting selected assets / objects #390

Merged
13 changes: 11 additions & 2 deletions public/js/pimcore/asset/folder.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,10 +252,19 @@ pimcore.asset.folder = Class.create(pimcore.asset.asset, {
}

this.toolbarButtons.remove = new Ext.Button({
tooltip: t('delete_folder'),
tooltip: t('delete'),
iconCls: "pimcore_material_icon_delete pimcore_material_icon",
scale: "medium",
handler: this.remove.bind(this)
handler: function () {
var options = this.listfolder.onRawDeleteSelectedRows();
if (!options) {
options = {
"elementType" : "asset",
"id": this.id
};
}
pimcore.elementservice.deleteElement(options);
}.bind(this)
});

this.toolbarButtons.rename = new Ext.Button({
Expand Down
19 changes: 19 additions & 0 deletions public/js/pimcore/asset/listfolder.js
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,25 @@ pimcore.asset.listfolder = Class.create(pimcore.asset.helpers.gridTabAbstract, {
return config;
},

onRawDeleteSelectedRows: function () {
var ids = [];
BlackbitDevs marked this conversation as resolved.
Show resolved Hide resolved
var selectedRows = this.grid.getSelectionModel().getSelection();
for (var i = 0; i < selectedRows.length; i++) {
ids.push(selectedRows[i].data.id);
}
ids = ids.join(',');

var options = {
"elementType" : "asset",
"id": ids,
"success": function() {
this.store.reload();
}.bind(this)
};

return ids.length ? options : null;
},

onRowContextmenu: function (grid, record, tr, rowIndex, e, eOpts ) {

var menu = new Ext.menu.Menu();
Expand Down
20 changes: 18 additions & 2 deletions public/js/pimcore/elementservice.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,25 @@ pimcore.elementservice.deleteElementsComplete = function(options, response) {
pimcore.elementservice.deleteElementCheckDependencyComplete = function (window, res, options) {

try {
let message = res.batchDelete ? t('delete_message_batch') : t('delete_message');
let message = '';
if (res.batchDelete) {
message += sprintf(t('delete_message_batch'), res.itemResults.length) + "<br /><div>";
res.itemResults.forEach(function (item) {
if (res.itemResults.length > 0) {
message += "<ul>";
res.itemResults.forEach(function (item) {
message += '<li>' + htmlspecialchars(item.path) + '<b>' + htmlspecialchars(item.key) + '</b></li>';
})
message += "</ul>";
}
})
kingjia90 marked this conversation as resolved.
Show resolved Hide resolved
message += "</div>";
} else {
message += t('delete_message');
}

if (res.elementKey) {
message += "<br /><b style='display: block; text-align: center; padding: 10px 0;'>\"" + htmlspecialchars(res.elementKey) + "\"</b>";
message += "<br /><b style='display: block; text-align: center; padding: 10px 0;'>\"" + htmlspecialchars(res.itemResults[0].path + res.elementKey) + "\"</b>";
}
if (res.hasDependencies) {
message += "<br />" + t('delete_message_dependencies');
Expand Down
13 changes: 11 additions & 2 deletions public/js/pimcore/object/folder.js
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,19 @@ pimcore.object.folder = Class.create(pimcore.object.abstract, {
});

this.toolbarButtons.remove = new Ext.Button({
tooltip: t('delete_folder'),
tooltip: t('delete'),
iconCls: "pimcore_material_icon_delete pimcore_material_icon",
scale: "medium",
handler: this.remove.bind(this)
handler: function () {
var options = this.search.onRawDeleteSelectedRows();
if (!options) {
options = {
"elementType" : "object",
"id": this.id
};
}
kingjia90 marked this conversation as resolved.
Show resolved Hide resolved
pimcore.elementservice.deleteElement(options);
}.bind(this)
});

this.toolbarButtons.rename = new Ext.Button({
Expand Down
19 changes: 19 additions & 0 deletions public/js/pimcore/object/folder/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,25 @@ pimcore.object.search = Class.create(pimcore.object.helpers.gridTabAbstract, {
return config;
},

onRawDeleteSelectedRows: function () {
var ids = [];
var selectedRows = this.grid.getSelectionModel().getSelection();
for (var i = 0; i < selectedRows.length; i++) {
ids.push(selectedRows[i].data.id);
}
ids = ids.join(',');

var options = {
"elementType" : "object",
"id": ids,
"success": function() {
this.store.reload();
}.bind(this)
};

return ids.length ? options : null;
},

onRowContextmenu: function (grid, record, tr, rowIndex, e, eOpts) {

var menu = new Ext.menu.Menu();
Expand Down
1 change: 1 addition & 0 deletions src/Controller/Admin/ElementControllerBase.php
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ public function deleteInfoAction(Request $request, EventDispatcherInterface $eve
'id' => $element->getId(),
'type' => $element->getType(),
'key' => $element->getKey(),
'path' => $element->getPath(),
'allowed' => true,
];

Expand Down
2 changes: 1 addition & 1 deletion translations/admin.en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ add_variant: 'Add variant'
delete_message_dependencies: 'There are dependencies, delete anyway?'
delete_message: 'Do you really want to delete this item?'
delete_message_advanced: "Do you really want to delete %s '%s' ?"
delete_message_batch: 'Do you really want to delete these elements?'
delete_message_batch: 'Do you really want to delete these %s elements?'
delete_group_message: 'Do you really want to delete this group and all of its contents?'
no_further_objectbricks_allowed: 'No further objectbricks allowed'
grid_current_language: 'Current language'
Expand Down
Loading