pimcore 工作流管理 - 禁用保存和发布
pimcore workflow management - disabling Save and publish
在 pimcore 中,我尝试实现对象的工作流管理。工作流运行良好。但是,保存和发布按钮仍然出现,如果启用了工作流,我该如何删除这些功能。 1. 如果启用了工作流,则禁用对用户的保存、发布、取消发布和删除。 2. 删除右键单击对象的相同选项(保存、发布、取消发布和删除)。
如果你想禁用按钮,你必须覆盖 pimcore object.js(pimcore/static6/js/pimcore/object/object.js) 和 tree.js(pimcore/static6/js/pimcore/object/tree.js)。
首先创建插件。然后在static中创建object.js(记得把js路径添加到plugin.xml)并添加代码:
pimcore.registerNS("pimcore.object.object");
pimcore.object.object = Class.create(pimcore.object.object, {
getLayoutToolbar : function () {
if (!this.toolbar) {
var buttons = [];
this.toolbarButtons = {};
this.toolbarButtons.save = new Ext.SplitButton({
text: t('save'),
iconCls: "pimcore_icon_save",
scale: "medium",
handler: this.save.bind(this, "unpublish"),
menu:[{
text: t('save_close'),
iconCls: "pimcore_icon_save",
handler: this.unpublishClose.bind(this)
}]
});
this.toolbarButtons.publish = new Ext.SplitButton({
text: t('save_and_publish'),
iconCls: "pimcore_icon_publish",
scale: "medium",
handler: this.publish.bind(this),
menu: [{
text: t('save_pubish_close'),
iconCls: "pimcore_icon_save",
handler: this.publishClose.bind(this)
},
{
text: t('save_only_new_version'),
iconCls: "pimcore_icon_save",
handler: this.save.bind(this, "version")
},
{
text: t('save_only_scheduled_tasks'),
iconCls: "pimcore_icon_save",
handler: this.save.bind(this, "scheduler","scheduler")
}
]
});
this.toolbarButtons.unpublish = new Ext.Button({
text: t('unpublish'),
iconCls: "pimcore_icon_unpublish",
scale: "medium",
handler: this.unpublish.bind(this)
});
this.toolbarButtons.remove = new Ext.Button({
tooltip: t("delete"),
iconCls: "pimcore_icon_delete",
scale: "medium",
handler: this.remove.bind(this)
});
this.toolbarButtons.rename = new Ext.Button({
tooltip: t('rename'),
iconCls: "pimcore_icon_key pimcore_icon_overlay_go",
scale: "medium",
handler: function () {
var options = {
elementType: "object",
elementSubType: this.data.general.o_type,
id: this.id,
default: this.data.general.o_key
};
pimcore.elementservice.editElementKey(options);
}.bind(this)
});
//This code is for save&publish buttons
if (this.isAllowed("save")) {
buttons.push(this.toolbarButtons.save);
}
if (this.isAllowed("publish")) {
buttons.push(this.toolbarButtons.publish);
}
if (this.isAllowed("unpublish") && !this.data.general.o_locked) {
buttons.push(this.toolbarButtons.unpublish);
}
buttons.push("-");
if(this.isAllowed("delete") && !this.data.general.o_locked) {
buttons.push(this.toolbarButtons.remove);
}
if(this.isAllowed("rename") && !this.data.general.o_locked) {
buttons.push(this.toolbarButtons.rename);
}
var reloadConfig = {
xtype: "splitbutton",
tooltip: t('reload'),
iconCls: "pimcore_icon_reload",
scale: "medium",
handler: this.reload.bind(this, this.data.currentLayoutId)
};
if (this.data["validLayouts"] && this.data.validLayouts.length > 1) {
var menu = [];
for (var i = 0; i < this.data.validLayouts.length; i++) {
var menuLabel = ts(this.data.validLayouts[i].name);
if (Number(this.data.currentLayoutId) == this.data.validLayouts[i].id) {
menuLabel = "<b>" + menuLabel + "</b>";
}
menu.push({
text: menuLabel,
iconCls: "pimcore_icon_reload",
handler: this.reload.bind(this, this.data.validLayouts[i].id)
});
}
reloadConfig.menu = menu;
}
buttons.push(reloadConfig);
if (pimcore.elementservice.showLocateInTreeButton("object")) {
if (this.data.general.o_type != "variant" || this.data.general.showVariants) {
buttons.push({
tooltip: t('show_in_tree'),
iconCls: "pimcore_icon_show_in_tree",
scale: "medium",
handler: this.selectInTree.bind(this, this.data.general.o_type)
});
}
}
buttons.push({
tooltip: t("show_metainfo"),
iconCls: "pimcore_icon_info",
scale: "medium",
handler: this.showMetaInfo.bind(this)
});
buttons.push("-");
buttons.push({
xtype: 'tbtext',
text: t("id") + " " + this.data.general.o_id,
scale: "medium"
});
buttons.push("-");
buttons.push({
xtype: 'tbtext',
text: ts(this.data.general.o_className),
scale: "medium"
});
// version notification
this.newerVersionNotification = new Ext.Toolbar.TextItem({
xtype: 'tbtext',
text: ' <img src="/pimcore/static6/img/flat-color-icons/medium_priority.svg" style="height: 16px;" align="absbottom" /> '
+ t("this_is_a_newer_not_published_version"),
scale: "medium",
hidden: true
});
buttons.push(this.newerVersionNotification);
//workflow management
pimcore.elementservice.integrateWorkflowManagement('object', this.id, this, buttons);
// check for newer version than the published
if (this.data.versions.length > 0) {
if (this.data.general.o_modificationDate < this.data.versions[0].date) {
this.newerVersionNotification.show();
}
}
this.toolbar = new Ext.Toolbar({
id: "object_toolbar_" + this.id,
region: "north",
border: false,
cls: "main-toolbar",
items: buttons,
overflowHandler: 'scroller'
});
this.toolbar.on("afterrender", function () {
window.setTimeout(function () {
if (!this.data.general.o_published) {
this.toolbarButtons.unpublish.hide();
} else if (this.isAllowed("publish")) {
this.toolbarButtons.save.hide();
}
}.bind(this), 500);
}.bind(this));
}
return this.toolbar;
}
});
你必须对tree.js做同样的事情:
pimcore.object.tree = Class.create({
onTreeNodeContextmenu: function (tree, record, item, index, e, eOpts ) {
e.stopEvent();
tree.select();
var menu = new Ext.menu.Menu();
var perspectiveCfg = this.perspectiveCfg;
var object_types = pimcore.globalmanager.get("object_types_store_create");
var objectMenu = {
objects: [],
importer: [],
ref: this
};
var groups = {
importer: {},
objects: {}
};
var tmpMenuEntry;
var tmpMenuEntryImport;
var $this = this;
object_types.each(function (classRecord) {
if ($this.config.allowedClasses && !in_array(classRecord.get("id"), $this.config.allowedClasses)) {
return;
}
tmpMenuEntry = {
text: classRecord.get("translatedText"),
iconCls: "pimcore_icon_object pimcore_icon_overlay_add",
handler: $this.addObject.bind($this, classRecord.get("id"), classRecord.get("text"), tree, record)
};
// add special icon
if (classRecord.get("icon") != "/pimcore/static6/img/flat-color-icons/timeline.svg") {
tmpMenuEntry.icon = classRecord.get("icon");
tmpMenuEntry.iconCls = "";
}
tmpMenuEntryImport = {
text: classRecord.get("translatedText"),
iconCls: "pimcore_icon_object pimcore_icon_overlay_add",
handler: $this.importObjects.bind($this, classRecord.get("id"), classRecord.get("text"), tree, record)
};
// add special icon
if (classRecord.get("icon") != "/pimcore/static6/img/flat-color-icons/timeline.svg") {
tmpMenuEntryImport.icon = classRecord.get("icon");
tmpMenuEntryImport.iconCls = "";
}
// check if the class is within a group
if(classRecord.get("group")) {
if(!groups["objects"][classRecord.get("group")]) {
groups["objects"][classRecord.get("group")] = {
text: classRecord.get("group"),
iconCls: "pimcore_icon_folder",
hideOnClick: false,
menu: {
items: []
}
};
groups["importer"][classRecord.get("group")] = {
text: classRecord.get("group"),
iconCls: "pimcore_icon_folder",
hideOnClick: false,
menu: {
items: []
}
};
objectMenu["objects"].push(groups["objects"][classRecord.get("group")]);
objectMenu["importer"].push(groups["importer"][classRecord.get("group")]);
}
groups["objects"][classRecord.get("group")]["menu"]["items"].push(tmpMenuEntry);
groups["importer"][classRecord.get("group")]["menu"]["items"].push(tmpMenuEntryImport);
} else {
objectMenu["objects"].push(tmpMenuEntry);
objectMenu["importer"].push(tmpMenuEntryImport);
}
});
var isVariant = record.data.type == "variant";
if (record.data.permissions.create) {
if (!isVariant) {
if (perspectiveCfg.inTreeContextMenu("object.add")) {
menu.add(new Ext.menu.Item({
text: t('add_object'),
iconCls: "pimcore_icon_object pimcore_icon_overlay_add",
hideOnClick: false,
menu: objectMenu.objects
}));
}
}
if (record.data.allowVariants && perspectiveCfg.inTreeContextMenu("object.add")) {
menu.add(new Ext.menu.Item({
text: t("add_variant"),
iconCls: "pimcore_icon_variant",
handler: this.createVariant.bind(this, tree, record)
}));
}
if (!isVariant) {
if (perspectiveCfg.inTreeContextMenu("object.addFolder")) {
menu.add(new Ext.menu.Item({
text: t('add_folder'),
iconCls: "pimcore_icon_folder pimcore_icon_overlay_add",
handler: this.addFolder.bind(this, tree, record)
}));
}
if (perspectiveCfg.inTreeContextMenu("object.importCsv")) {
menu.add({
text: t('import_csv'),
hideOnClick: false,
iconCls: "pimcore_icon_object pimcore_icon_overlay_upload",
menu: objectMenu.importer
});
}
menu.add("-");
//paste
var pasteMenu = [];
if (perspectiveCfg.inTreeContextMenu("object.paste")) {
if (pimcore.cachedObjectId && record.data.permissions.create) {
pasteMenu.push({
text: t("paste_recursive_as_childs"),
iconCls: "pimcore_icon_paste",
handler: this.pasteInfo.bind(this, tree, record, "recursive")
});
pasteMenu.push({
text: t("paste_recursive_updating_references"),
iconCls: "pimcore_icon_paste",
handler: this.pasteInfo.bind(this, tree, record, "recursive-update-references")
});
pasteMenu.push({
text: t("paste_as_child"),
iconCls: "pimcore_icon_paste",
handler: this.pasteInfo.bind(this, tree, record, "child")
});
if (record.data.type != "folder") {
pasteMenu.push({
text: t("paste_contents"),
iconCls: "pimcore_icon_paste",
handler: this.pasteInfo.bind(this, tree, record, "replace")
});
}
}
}
if (!isVariant) {
if (pimcore.cutObject && record.data.permissions.create) {
pasteMenu.push({
text: t("paste_cut_element"),
iconCls: "pimcore_icon_paste",
handler: function () {
this.pasteCutObject(pimcore.cutObject,
pimcore.cutObjectParentNode, record, this.tree);
pimcore.cutObjectParentNode = null;
pimcore.cutObject = null;
}.bind(this)
});
}
if (pasteMenu.length > 0) {
menu.add(new Ext.menu.Item({
text: t('paste'),
iconCls: "pimcore_icon_paste",
hideOnClick: false,
menu: pasteMenu
}));
}
}
}
}
if (!isVariant) {
if (record.data.id != 1 && record.data.permissions.view && perspectiveCfg.inTreeContextMenu("object.copy")) {
menu.add(new Ext.menu.Item({
text: t('copy'),
iconCls: "pimcore_icon_copy",
handler: this.copy.bind(this, tree, record)
}));
}
//cut
if (record.data.id != 1 && !record.data.locked && record.data.permissions.rename && perspectiveCfg.inTreeContextMenu("object.cut")) {
menu.add(new Ext.menu.Item({
text: t('cut'),
iconCls: "pimcore_icon_cut",
handler: this.cut.bind(this, tree, record)
}));
}
}
//publish
if (record.data.type != "folder" && !record.data.locked) {
if (record.data.published && record.data.permissions.unpublish && perspectiveCfg.inTreeContextMenu("object.unpublish")) {
menu.add(new Ext.menu.Item({
text: t('unpublish'),
iconCls: "pimcore_icon_unpublish",
handler: this.publishObject.bind(this, tree, record, 'unpublish')
}));
} else if (!record.data.published && record.data.permissions.publish && perspectiveCfg.inTreeContextMenu("object.publish")) {
menu.add(new Ext.menu.Item({
text: t('publish'),
iconCls: "pimcore_icon_publish",
handler: this.publishObject.bind(this, tree, record, 'publish')
}));
}
}
if (record.data.permissions["delete"] && record.data.id != 1 && !record.data.locked && perspectiveCfg.inTreeContextMenu("object.delete")) {
menu.add(new Ext.menu.Item({
text: t('delete'),
iconCls: "pimcore_icon_delete",
handler: this.remove.bind(this, tree, record)
}));
}
if (record.data.permissions.rename && record.data.id != 1 && !record.data.locked && perspectiveCfg.inTreeContextMenu("object.rename")) {
menu.add(new Ext.menu.Item({
text: t('rename'),
iconCls: "pimcore_icon_key pimcore_icon_overlay_go",
handler: this.editObjectKey.bind(this, tree, record)
}));
}
// advanced menu
var advancedMenuItems = [];
var user = pimcore.globalmanager.get("user");
if (record.data.permissions.create && perspectiveCfg.inTreeContextMenu("object.searchAndMove")) {
advancedMenuItems.push({
text: t('search_and_move'),
iconCls: "pimcore_icon_search pimcore_icon_overlay_go",
handler: this.searchAndMove.bind(this, tree, record)
});
}
if (record.data.id != 1 && user.admin) {
var lockMenu = [];
if (record.data.lockOwner && perspectiveCfg.inTreeContextMenu("object.unlock")) { // add unlock
lockMenu.push({
text: t('unlock'),
iconCls: "pimcore_icon_lock pimcore_icon_overlay_delete",
handler: function () {
pimcore.elementservice.lockElement({
elementType: "object",
id: record.data.id,
mode: "null"
});
}.bind(this)
});
} else {
if (perspectiveCfg.inTreeContextMenu("object.lock")) {
lockMenu.push({
text: t('lock'),
iconCls: "pimcore_icon_lock pimcore_icon_overlay_add",
handler: function () {
pimcore.elementservice.lockElement({
elementType: "object",
id: record.data.id,
mode: "self"
});
}.bind(this)
});
}
if (perspectiveCfg.inTreeContextMenu("object.lockAndPropagate")) {
lockMenu.push({
text: t('lock_and_propagate_to_childs'),
iconCls: "pimcore_icon_lock pimcore_icon_overlay_go",
handler: function () {
pimcore.elementservice.lockElement({
elementType: "object",
id: record.data.id,
mode: "propagate"
});
}.bind(this)
});
}
}
if(record.data.locked) {
// add unlock and propagate to children functionality
if (perspectiveCfg.inTreeContextMenu("object.unlockAndPropagate")) {
lockMenu.push({
text: t('unlock_and_propagate_to_children'),
iconCls: "pimcore_icon_lock pimcore_icon_overlay_delete",
handler: function () {
pimcore.elementservice.unlockElement({
elementType: "object",
id: record.data.id
});
}.bind(this)
});
}
}
if (lockMenu.length > 0) {
advancedMenuItems.push({
text: t('lock'),
iconCls: "pimcore_icon_lock",
hideOnClick: false,
menu: lockMenu
});
}
}
menu.add("-");
if(advancedMenuItems.length) {
menu.add({
text: t('advanced'),
iconCls: "pimcore_icon_more",
hideOnClick: false,
menu: advancedMenuItems
});
}
if (perspectiveCfg.inTreeContextMenu("object.reload")) {
menu.add({
text: t('refresh'),
iconCls: "pimcore_icon_reload",
handler: this.reloadNode.bind(this, tree, record)
});
}
pimcore.helpers.hideRedundantSeparators(menu);
pimcore.plugin.broker.fireEvent("prepareObjectTreeContextMenu", menu, this, record);
menu.showAt(e.pageX+1, e.pageY+1);
},
});
在 pimcore 中,我尝试实现对象的工作流管理。工作流运行良好。但是,保存和发布按钮仍然出现,如果启用了工作流,我该如何删除这些功能。 1. 如果启用了工作流,则禁用对用户的保存、发布、取消发布和删除。 2. 删除右键单击对象的相同选项(保存、发布、取消发布和删除)。
如果你想禁用按钮,你必须覆盖 pimcore object.js(pimcore/static6/js/pimcore/object/object.js) 和 tree.js(pimcore/static6/js/pimcore/object/tree.js)。 首先创建插件。然后在static中创建object.js(记得把js路径添加到plugin.xml)并添加代码:
pimcore.registerNS("pimcore.object.object");
pimcore.object.object = Class.create(pimcore.object.object, {
getLayoutToolbar : function () {
if (!this.toolbar) {
var buttons = [];
this.toolbarButtons = {};
this.toolbarButtons.save = new Ext.SplitButton({
text: t('save'),
iconCls: "pimcore_icon_save",
scale: "medium",
handler: this.save.bind(this, "unpublish"),
menu:[{
text: t('save_close'),
iconCls: "pimcore_icon_save",
handler: this.unpublishClose.bind(this)
}]
});
this.toolbarButtons.publish = new Ext.SplitButton({
text: t('save_and_publish'),
iconCls: "pimcore_icon_publish",
scale: "medium",
handler: this.publish.bind(this),
menu: [{
text: t('save_pubish_close'),
iconCls: "pimcore_icon_save",
handler: this.publishClose.bind(this)
},
{
text: t('save_only_new_version'),
iconCls: "pimcore_icon_save",
handler: this.save.bind(this, "version")
},
{
text: t('save_only_scheduled_tasks'),
iconCls: "pimcore_icon_save",
handler: this.save.bind(this, "scheduler","scheduler")
}
]
});
this.toolbarButtons.unpublish = new Ext.Button({
text: t('unpublish'),
iconCls: "pimcore_icon_unpublish",
scale: "medium",
handler: this.unpublish.bind(this)
});
this.toolbarButtons.remove = new Ext.Button({
tooltip: t("delete"),
iconCls: "pimcore_icon_delete",
scale: "medium",
handler: this.remove.bind(this)
});
this.toolbarButtons.rename = new Ext.Button({
tooltip: t('rename'),
iconCls: "pimcore_icon_key pimcore_icon_overlay_go",
scale: "medium",
handler: function () {
var options = {
elementType: "object",
elementSubType: this.data.general.o_type,
id: this.id,
default: this.data.general.o_key
};
pimcore.elementservice.editElementKey(options);
}.bind(this)
});
//This code is for save&publish buttons
if (this.isAllowed("save")) {
buttons.push(this.toolbarButtons.save);
}
if (this.isAllowed("publish")) {
buttons.push(this.toolbarButtons.publish);
}
if (this.isAllowed("unpublish") && !this.data.general.o_locked) {
buttons.push(this.toolbarButtons.unpublish);
}
buttons.push("-");
if(this.isAllowed("delete") && !this.data.general.o_locked) {
buttons.push(this.toolbarButtons.remove);
}
if(this.isAllowed("rename") && !this.data.general.o_locked) {
buttons.push(this.toolbarButtons.rename);
}
var reloadConfig = {
xtype: "splitbutton",
tooltip: t('reload'),
iconCls: "pimcore_icon_reload",
scale: "medium",
handler: this.reload.bind(this, this.data.currentLayoutId)
};
if (this.data["validLayouts"] && this.data.validLayouts.length > 1) {
var menu = [];
for (var i = 0; i < this.data.validLayouts.length; i++) {
var menuLabel = ts(this.data.validLayouts[i].name);
if (Number(this.data.currentLayoutId) == this.data.validLayouts[i].id) {
menuLabel = "<b>" + menuLabel + "</b>";
}
menu.push({
text: menuLabel,
iconCls: "pimcore_icon_reload",
handler: this.reload.bind(this, this.data.validLayouts[i].id)
});
}
reloadConfig.menu = menu;
}
buttons.push(reloadConfig);
if (pimcore.elementservice.showLocateInTreeButton("object")) {
if (this.data.general.o_type != "variant" || this.data.general.showVariants) {
buttons.push({
tooltip: t('show_in_tree'),
iconCls: "pimcore_icon_show_in_tree",
scale: "medium",
handler: this.selectInTree.bind(this, this.data.general.o_type)
});
}
}
buttons.push({
tooltip: t("show_metainfo"),
iconCls: "pimcore_icon_info",
scale: "medium",
handler: this.showMetaInfo.bind(this)
});
buttons.push("-");
buttons.push({
xtype: 'tbtext',
text: t("id") + " " + this.data.general.o_id,
scale: "medium"
});
buttons.push("-");
buttons.push({
xtype: 'tbtext',
text: ts(this.data.general.o_className),
scale: "medium"
});
// version notification
this.newerVersionNotification = new Ext.Toolbar.TextItem({
xtype: 'tbtext',
text: ' <img src="/pimcore/static6/img/flat-color-icons/medium_priority.svg" style="height: 16px;" align="absbottom" /> '
+ t("this_is_a_newer_not_published_version"),
scale: "medium",
hidden: true
});
buttons.push(this.newerVersionNotification);
//workflow management
pimcore.elementservice.integrateWorkflowManagement('object', this.id, this, buttons);
// check for newer version than the published
if (this.data.versions.length > 0) {
if (this.data.general.o_modificationDate < this.data.versions[0].date) {
this.newerVersionNotification.show();
}
}
this.toolbar = new Ext.Toolbar({
id: "object_toolbar_" + this.id,
region: "north",
border: false,
cls: "main-toolbar",
items: buttons,
overflowHandler: 'scroller'
});
this.toolbar.on("afterrender", function () {
window.setTimeout(function () {
if (!this.data.general.o_published) {
this.toolbarButtons.unpublish.hide();
} else if (this.isAllowed("publish")) {
this.toolbarButtons.save.hide();
}
}.bind(this), 500);
}.bind(this));
}
return this.toolbar;
}
});
你必须对tree.js做同样的事情:
pimcore.object.tree = Class.create({
onTreeNodeContextmenu: function (tree, record, item, index, e, eOpts ) {
e.stopEvent();
tree.select();
var menu = new Ext.menu.Menu();
var perspectiveCfg = this.perspectiveCfg;
var object_types = pimcore.globalmanager.get("object_types_store_create");
var objectMenu = {
objects: [],
importer: [],
ref: this
};
var groups = {
importer: {},
objects: {}
};
var tmpMenuEntry;
var tmpMenuEntryImport;
var $this = this;
object_types.each(function (classRecord) {
if ($this.config.allowedClasses && !in_array(classRecord.get("id"), $this.config.allowedClasses)) {
return;
}
tmpMenuEntry = {
text: classRecord.get("translatedText"),
iconCls: "pimcore_icon_object pimcore_icon_overlay_add",
handler: $this.addObject.bind($this, classRecord.get("id"), classRecord.get("text"), tree, record)
};
// add special icon
if (classRecord.get("icon") != "/pimcore/static6/img/flat-color-icons/timeline.svg") {
tmpMenuEntry.icon = classRecord.get("icon");
tmpMenuEntry.iconCls = "";
}
tmpMenuEntryImport = {
text: classRecord.get("translatedText"),
iconCls: "pimcore_icon_object pimcore_icon_overlay_add",
handler: $this.importObjects.bind($this, classRecord.get("id"), classRecord.get("text"), tree, record)
};
// add special icon
if (classRecord.get("icon") != "/pimcore/static6/img/flat-color-icons/timeline.svg") {
tmpMenuEntryImport.icon = classRecord.get("icon");
tmpMenuEntryImport.iconCls = "";
}
// check if the class is within a group
if(classRecord.get("group")) {
if(!groups["objects"][classRecord.get("group")]) {
groups["objects"][classRecord.get("group")] = {
text: classRecord.get("group"),
iconCls: "pimcore_icon_folder",
hideOnClick: false,
menu: {
items: []
}
};
groups["importer"][classRecord.get("group")] = {
text: classRecord.get("group"),
iconCls: "pimcore_icon_folder",
hideOnClick: false,
menu: {
items: []
}
};
objectMenu["objects"].push(groups["objects"][classRecord.get("group")]);
objectMenu["importer"].push(groups["importer"][classRecord.get("group")]);
}
groups["objects"][classRecord.get("group")]["menu"]["items"].push(tmpMenuEntry);
groups["importer"][classRecord.get("group")]["menu"]["items"].push(tmpMenuEntryImport);
} else {
objectMenu["objects"].push(tmpMenuEntry);
objectMenu["importer"].push(tmpMenuEntryImport);
}
});
var isVariant = record.data.type == "variant";
if (record.data.permissions.create) {
if (!isVariant) {
if (perspectiveCfg.inTreeContextMenu("object.add")) {
menu.add(new Ext.menu.Item({
text: t('add_object'),
iconCls: "pimcore_icon_object pimcore_icon_overlay_add",
hideOnClick: false,
menu: objectMenu.objects
}));
}
}
if (record.data.allowVariants && perspectiveCfg.inTreeContextMenu("object.add")) {
menu.add(new Ext.menu.Item({
text: t("add_variant"),
iconCls: "pimcore_icon_variant",
handler: this.createVariant.bind(this, tree, record)
}));
}
if (!isVariant) {
if (perspectiveCfg.inTreeContextMenu("object.addFolder")) {
menu.add(new Ext.menu.Item({
text: t('add_folder'),
iconCls: "pimcore_icon_folder pimcore_icon_overlay_add",
handler: this.addFolder.bind(this, tree, record)
}));
}
if (perspectiveCfg.inTreeContextMenu("object.importCsv")) {
menu.add({
text: t('import_csv'),
hideOnClick: false,
iconCls: "pimcore_icon_object pimcore_icon_overlay_upload",
menu: objectMenu.importer
});
}
menu.add("-");
//paste
var pasteMenu = [];
if (perspectiveCfg.inTreeContextMenu("object.paste")) {
if (pimcore.cachedObjectId && record.data.permissions.create) {
pasteMenu.push({
text: t("paste_recursive_as_childs"),
iconCls: "pimcore_icon_paste",
handler: this.pasteInfo.bind(this, tree, record, "recursive")
});
pasteMenu.push({
text: t("paste_recursive_updating_references"),
iconCls: "pimcore_icon_paste",
handler: this.pasteInfo.bind(this, tree, record, "recursive-update-references")
});
pasteMenu.push({
text: t("paste_as_child"),
iconCls: "pimcore_icon_paste",
handler: this.pasteInfo.bind(this, tree, record, "child")
});
if (record.data.type != "folder") {
pasteMenu.push({
text: t("paste_contents"),
iconCls: "pimcore_icon_paste",
handler: this.pasteInfo.bind(this, tree, record, "replace")
});
}
}
}
if (!isVariant) {
if (pimcore.cutObject && record.data.permissions.create) {
pasteMenu.push({
text: t("paste_cut_element"),
iconCls: "pimcore_icon_paste",
handler: function () {
this.pasteCutObject(pimcore.cutObject,
pimcore.cutObjectParentNode, record, this.tree);
pimcore.cutObjectParentNode = null;
pimcore.cutObject = null;
}.bind(this)
});
}
if (pasteMenu.length > 0) {
menu.add(new Ext.menu.Item({
text: t('paste'),
iconCls: "pimcore_icon_paste",
hideOnClick: false,
menu: pasteMenu
}));
}
}
}
}
if (!isVariant) {
if (record.data.id != 1 && record.data.permissions.view && perspectiveCfg.inTreeContextMenu("object.copy")) {
menu.add(new Ext.menu.Item({
text: t('copy'),
iconCls: "pimcore_icon_copy",
handler: this.copy.bind(this, tree, record)
}));
}
//cut
if (record.data.id != 1 && !record.data.locked && record.data.permissions.rename && perspectiveCfg.inTreeContextMenu("object.cut")) {
menu.add(new Ext.menu.Item({
text: t('cut'),
iconCls: "pimcore_icon_cut",
handler: this.cut.bind(this, tree, record)
}));
}
}
//publish
if (record.data.type != "folder" && !record.data.locked) {
if (record.data.published && record.data.permissions.unpublish && perspectiveCfg.inTreeContextMenu("object.unpublish")) {
menu.add(new Ext.menu.Item({
text: t('unpublish'),
iconCls: "pimcore_icon_unpublish",
handler: this.publishObject.bind(this, tree, record, 'unpublish')
}));
} else if (!record.data.published && record.data.permissions.publish && perspectiveCfg.inTreeContextMenu("object.publish")) {
menu.add(new Ext.menu.Item({
text: t('publish'),
iconCls: "pimcore_icon_publish",
handler: this.publishObject.bind(this, tree, record, 'publish')
}));
}
}
if (record.data.permissions["delete"] && record.data.id != 1 && !record.data.locked && perspectiveCfg.inTreeContextMenu("object.delete")) {
menu.add(new Ext.menu.Item({
text: t('delete'),
iconCls: "pimcore_icon_delete",
handler: this.remove.bind(this, tree, record)
}));
}
if (record.data.permissions.rename && record.data.id != 1 && !record.data.locked && perspectiveCfg.inTreeContextMenu("object.rename")) {
menu.add(new Ext.menu.Item({
text: t('rename'),
iconCls: "pimcore_icon_key pimcore_icon_overlay_go",
handler: this.editObjectKey.bind(this, tree, record)
}));
}
// advanced menu
var advancedMenuItems = [];
var user = pimcore.globalmanager.get("user");
if (record.data.permissions.create && perspectiveCfg.inTreeContextMenu("object.searchAndMove")) {
advancedMenuItems.push({
text: t('search_and_move'),
iconCls: "pimcore_icon_search pimcore_icon_overlay_go",
handler: this.searchAndMove.bind(this, tree, record)
});
}
if (record.data.id != 1 && user.admin) {
var lockMenu = [];
if (record.data.lockOwner && perspectiveCfg.inTreeContextMenu("object.unlock")) { // add unlock
lockMenu.push({
text: t('unlock'),
iconCls: "pimcore_icon_lock pimcore_icon_overlay_delete",
handler: function () {
pimcore.elementservice.lockElement({
elementType: "object",
id: record.data.id,
mode: "null"
});
}.bind(this)
});
} else {
if (perspectiveCfg.inTreeContextMenu("object.lock")) {
lockMenu.push({
text: t('lock'),
iconCls: "pimcore_icon_lock pimcore_icon_overlay_add",
handler: function () {
pimcore.elementservice.lockElement({
elementType: "object",
id: record.data.id,
mode: "self"
});
}.bind(this)
});
}
if (perspectiveCfg.inTreeContextMenu("object.lockAndPropagate")) {
lockMenu.push({
text: t('lock_and_propagate_to_childs'),
iconCls: "pimcore_icon_lock pimcore_icon_overlay_go",
handler: function () {
pimcore.elementservice.lockElement({
elementType: "object",
id: record.data.id,
mode: "propagate"
});
}.bind(this)
});
}
}
if(record.data.locked) {
// add unlock and propagate to children functionality
if (perspectiveCfg.inTreeContextMenu("object.unlockAndPropagate")) {
lockMenu.push({
text: t('unlock_and_propagate_to_children'),
iconCls: "pimcore_icon_lock pimcore_icon_overlay_delete",
handler: function () {
pimcore.elementservice.unlockElement({
elementType: "object",
id: record.data.id
});
}.bind(this)
});
}
}
if (lockMenu.length > 0) {
advancedMenuItems.push({
text: t('lock'),
iconCls: "pimcore_icon_lock",
hideOnClick: false,
menu: lockMenu
});
}
}
menu.add("-");
if(advancedMenuItems.length) {
menu.add({
text: t('advanced'),
iconCls: "pimcore_icon_more",
hideOnClick: false,
menu: advancedMenuItems
});
}
if (perspectiveCfg.inTreeContextMenu("object.reload")) {
menu.add({
text: t('refresh'),
iconCls: "pimcore_icon_reload",
handler: this.reloadNode.bind(this, tree, record)
});
}
pimcore.helpers.hideRedundantSeparators(menu);
pimcore.plugin.broker.fireEvent("prepareObjectTreeContextMenu", menu, this, record);
menu.showAt(e.pageX+1, e.pageY+1);
},
});