package com.psddev.cms.tool.page;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import com.psddev.cms.db.Site;
import com.psddev.cms.db.SiteCategory;
import com.psddev.cms.db.ToolUser;
import com.psddev.cms.tool.PageServlet;
import com.psddev.cms.tool.ToolPageContext;
import com.psddev.dari.db.Query;
import com.psddev.dari.util.RoutingFilter;
import com.psddev.dari.util.StringUtils;
@RoutingFilter.Path(application = "cms", value = "/siteSwitchResults")
public class SiteSwitchResults extends PageServlet {
@Override
protected String getPermissionId() {
return null;
}
@Override
protected void doService(ToolPageContext page) throws IOException, ServletException {
ToolUser user = page.getUser();
Site currentSite = user.getCurrentSite();
List<Site> sites = user.findOtherAccessibleSites();
UUID siteCategoryId = page.param(UUID.class, "siteCategory");
// Filter sites by site category and query string (if necessary)
final SiteCategory siteCategory = siteCategoryId != null ? Query.findById(SiteCategory.class, siteCategoryId) : null;
final String queryString = page.param(String.class, "query");
if (siteCategory != null) {
sites.removeIf(s -> !siteCategory.equals(s.getSiteCategory()));
} else {
sites.removeIf(s -> s.getSiteCategory() != null);
}
if (!StringUtils.isBlank(queryString)) {
sites.removeIf(s -> !s.is("name != missing && name ^=[c] ?", queryString));
}
String returnUrl = page.param(String.class, "returnUrl");
page.writeStart("ul", "class", "links");
if (currentSite != null && page.hasPermission("site/global") && siteCategoryId == null) {
page.writeStart("li");
page.writeStart("a",
"href", page.cmsUrl("/siteSwitch", "switch", true, "returnUrl", returnUrl),
"target", "_top");
page.writeHtml(page.localize(SiteSwitch.class, "label.global"));
page.writeEnd();
page.writeEnd();
}
for (Site site : sites) {
page.writeStart("li");
page.writeStart("a",
"href", page.cmsUrl("/siteSwitch", "switch", true, "returnUrl", returnUrl, "id", site.getId()),
"target", "_top");
page.writeObjectLabel(site);
page.writeEnd();
page.writeEnd();
}
page.writeEnd();
}
}