package com.psddev.cms.tool.content;
import com.google.common.collect.ImmutableMap;
import com.psddev.cms.db.Content;
import com.psddev.cms.db.Directory;
import com.psddev.cms.db.Draft;
import com.psddev.cms.db.Localization;
import com.psddev.cms.tool.ContentEditWidgetPlacement;
import com.psddev.cms.tool.ContentEditWidget;
import com.psddev.cms.tool.Search;
import com.psddev.cms.tool.ToolPageContext;
import com.psddev.dari.db.Query;
import com.psddev.dari.db.State;
import com.psddev.dari.util.PaginatedResult;
import java.io.IOException;
import java.util.UUID;
public class ReferencesWidget extends ContentEditWidget {
@Override
public boolean shouldDisplay(ToolPageContext page, Object content) {
return true;
}
@Override
public ContentEditWidgetPlacement getPlacement(ToolPageContext page, Object content) {
return ContentEditWidgetPlacement.RIGHT;
}
@Override
public double getPosition(ToolPageContext page, Object content, ContentEditWidgetPlacement placement) {
return 10.0;
}
@Override
public String getHeading(ToolPageContext page, Object content) {
return Localization.currentUserText(ReferencesWidget.class, "title");
}
@Override
public void display(ToolPageContext page, Object content, ContentEditWidgetPlacement placement) throws IOException {
UUID contentId = State.getInstance(content).getId();
Query<Object> query = Query
.fromGroup(Content.SEARCHABLE_GROUP)
.and("* matches ?", contentId)
.and("_type != ?", Draft.class)
.and("_id != ?", contentId)
.and("cms.content.updateDate != missing")
.sortDescending("cms.content.updateDate");
PaginatedResult<Object> result = query.select(0L, 10);
if (result.getItems().isEmpty()) {
return;
}
if (result.hasNext()) {
page.writeStart("p");
page.writeStart("a",
"class", "icon icon-action-search",
"target", "_top",
"href", page.cmsUrl("/searchAdvancedFull",
Search.ADVANCED_QUERY_PARAMETER, query.getPredicate().toString()));
page.writeHtml(page.localize(
ReferencesWidget.class,
ImmutableMap.of("count", result.getCount()),
"action.viewAll"));
page.writeEnd();
page.writeEnd();
page.writeStart("h2");
page.writeHtml(page.localize(
ReferencesWidget.class,
ImmutableMap.of("count", result.getItems().size()),
"subtitle.mostRecent"));
page.writeEnd();
}
page.writeStart("ul", "class", "links pageThumbnails");
for (Object item : result.getItems()) {
page.writeStart("li",
"data-preview-url", State.getInstance(item).as(Directory.ObjectModification.class).getPermalink());
page.writeStart("a",
"href", page.objectUrl("/content/edit.jsp", item),
"target", "_top");
page.writeTypeObjectLabel(item);
page.writeEnd();
page.writeEnd();
}
page.writeEnd();
}
}