package com.psddev.cms.tool.search;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import com.psddev.cms.tool.CmsTool;
import com.psddev.cms.tool.Search;
import com.psddev.cms.tool.SearchResultAction;
import com.psddev.cms.tool.SearchResultSelection;
import com.psddev.cms.tool.SearchResultSelectionItem;
import com.psddev.cms.tool.ToolPageContext;
import com.psddev.dari.db.ObjectType;
import com.psddev.dari.db.Query;
import com.psddev.dari.db.State;
import com.psddev.dari.util.UrlBuilder;
public class BulkEditSearchResultAction implements SearchResultAction {
@Override
public String getGroup() {
return "Bulk";
}
@Override
public void writeHtml(
ToolPageContext page,
Search search,
SearchResultSelection selection)
throws IOException {
UUID typeId = null;
UUID selectionId = null;
if (selection != null) {
Set<UUID> itemIds = new HashSet<>();
for (SearchResultSelectionItem item : Query
.from(SearchResultSelectionItem.class)
.where("selectionId = ?", selection.getId())
.selectAll()) {
itemIds.add(item.getItemId());
}
Set<UUID> itemTypeIds = new HashSet<>();
for (Object item : Query
.fromAll()
.where("_id = ?", itemIds)
.selectAll()) {
itemTypeIds.add(State.getInstance(item).getTypeId());
}
if (itemTypeIds.size() != 1) {
return;
} else {
typeId = itemTypeIds.iterator().next();
selectionId = selection.getId();
}
} else if (search != null) {
ObjectType type = search.getSelectedType();
if (type == null || type.isAbstract()) {
return;
} else {
typeId = type.getId();
}
}
String typePermissionId = "type/" + typeId;
// Do not allow editing of types for which the user does not have Bulk Edit permission
if (!page.hasPermission(typePermissionId + "/bulkEdit")
|| !page.hasPermission(typePermissionId + "/write")) {
return;
}
page.writeStart("div", "class", "searchResult-action-simple");
page.writeStart("a",
"class", "button",
"target", "_top",
"href", new UrlBuilder(page.getRequest())
.absolutePath(page.toolPath(CmsTool.class, "/contentEditBulk"))
.currentParameters()
.parameter("typeId", typeId)
.parameter("selectionId", selectionId));
if (selection != null) {
page.writeHtml(page.localize(BulkEditSearchResultAction.class, "action.editSelected"));
} else {
page.writeHtml(page.localize(BulkEditSearchResultAction.class, "action.editAll"));
}
page.writeEnd();
page.writeEnd();
}
}