package com.psddev.cms.tool.page; import com.google.common.collect.ImmutableMap; import com.psddev.cms.db.Localization; import com.psddev.cms.db.LocalizationContext; import com.psddev.cms.db.Schedule; import com.psddev.cms.db.Site; 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 org.joda.time.DateTime; import javax.servlet.ServletException; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; @RoutingFilter.Path(application = "cms", value = "/scheduleEventsList") public class ScheduleEventsList extends PageServlet { @Override protected String getPermissionId() { return null; } @Override protected void doService(final ToolPageContext page) throws IOException, ServletException { reallyDoService(page); } public static void reallyDoService(ToolPageContext page) throws IOException, ServletException { long ms = page.param(long.class, "date"); DateTime date = new DateTime(ms); Site currentSite = page.getSite(); DateTime begin = date.toDateMidnight().toDateTime(); DateTime end = begin.plusDays(1); List<Schedule> schedules = new ArrayList<>(); for (Schedule schedule : Query .from(Schedule.class) .where("triggerDate >= ? and triggerDate < ?", begin, end) .sortAscending("triggerDate") .iterable(0)) { if (currentSite != null && !currentSite.equals(schedule.getTriggerSite())) { continue; } schedules.add(schedule); } page.writeStart("div", "class", "widget"); { page.writeStart("h1", "class", "icon icon-object-schedule"); page.writeHtml( Localization.currentUserText( new LocalizationContext( ScheduleEventsList.class, ImmutableMap.of( "date", Localization.currentUserDate(begin.getMillis(), Localization.DATE_ONLY_SKELETON))), "title")); page.writeEnd(); page.writeStart("table", "class", "links table-striped"); { page.writeStart("thead"); { page.writeStart("tr"); { page.writeStart("th"); page.writeHtml("Content"); page.writeEnd(); page.writeStart("th"); page.writeHtml("Time"); page.writeEnd(); } page.writeEnd(); } page.writeEnd(); page.writeStart("tbody"); { for (Schedule schedule : schedules) { List<Object> drafts = Query.fromAll().where("com.psddev.cms.db.Draft/schedule = ?", schedule).selectAll(); if (drafts.isEmpty()) { continue; } Date triggerDate = schedule.getTriggerDate(); for (Object draft : drafts) { page.writeStart("tr"); { page.writeStart("td"); page.writeStart("a", "href", page.objectUrl("/content/edit.jsp", draft), "target", "_top"); page.writeObjectLabel(draft); page.writeEnd(); page.writeStart("td"); page.writeHtml(triggerDate != null ? Localization.currentUserDate(triggerDate.getTime(), Localization.TIME_ONLY_SKELETON) : Localization.currentUserText(ScheduleEventsList.class, Localization.NOT_AVAILABLE_KEY)); page.writeEnd(); } page.writeEnd(); } } } page.writeEnd(); } page.writeEnd(); } page.writeEnd(); } }