From f3b1e099e6ae252f1f1296ce5415b85fef6361cf Mon Sep 17 00:00:00 2001 From: Hybris95 <hybris_95@hotmail.com> Date: Thu, 01 May 2014 16:14:14 -0400 Subject: [PATCH] Added back the "my tickets" button in the navbar. --- src/main/java/com/gitblit/wicket/pages/TicketsPage.java | 130 +++++++++++++++++++++++++++++++++++++++--- 1 files changed, 119 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/TicketsPage.java b/src/main/java/com/gitblit/wicket/pages/TicketsPage.java index 525658c..5973d47 100644 --- a/src/main/java/com/gitblit/wicket/pages/TicketsPage.java +++ b/src/main/java/com/gitblit/wicket/pages/TicketsPage.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.TreeSet; @@ -42,6 +43,7 @@ import com.gitblit.Constants.AccessPermission; import com.gitblit.Keys; import com.gitblit.models.RegistrantAccessPermission; +import com.gitblit.models.RepositoryModel; import com.gitblit.models.TicketModel; import com.gitblit.models.TicketModel.Status; import com.gitblit.models.UserModel; @@ -87,7 +89,7 @@ // set stateless page preference setStatelessHint(true); - any = new TicketResponsible("any", "[* TO *]", null); + any = new TicketResponsible(getString("gb.any"), "[* TO *]", null); UserModel user = GitBlitWebSession.get().getUser(); boolean isAuthenticated = user != null && user.isAuthenticated; @@ -164,6 +166,9 @@ if (currentMilestone == null) { // milestone not found, create a temporary one currentMilestone = new TicketMilestone(milestoneParam); + String q = QueryBuilder.q(Lucene.rid.matches(getRepositoryModel().getRID())).and(Lucene.milestone.matches(milestoneParam)).build(); + currentMilestone.tickets = app().tickets().queryFor(q, 1, 0, Lucene.number.name(), true); + milestones.add(currentMilestone); } } @@ -185,16 +190,16 @@ milestonePanel.add(label); milestonePanel.add(new LinkPanel("openTickets", null, - currentMilestone.getOpenTickets() + " open", + MessageFormat.format(getString("gb.nOpenTickets"), currentMilestone.getOpenTickets()), TicketsPage.class, queryParameters(null, currentMilestone.name, openStatii, null, sortBy, desc, 1))); milestonePanel.add(new LinkPanel("closedTickets", null, - currentMilestone.getClosedTickets() + " closed", + MessageFormat.format(getString("gb.nClosedTickets"), currentMilestone.getClosedTickets()), TicketsPage.class, queryParameters(null, currentMilestone.name, closedStatii, null, sortBy, desc, 1))); - milestonePanel.add(new Label("totalTickets", currentMilestone.getTotalTickets() + " total")); + milestonePanel.add(new Label("totalTickets", MessageFormat.format(getString("gb.nTotalTickets"), currentMilestone.getTotalTickets()))); add(milestonePanel); } @@ -397,7 +402,8 @@ add(new BookmarkablePageLink<Void>("allTickets", TicketsPage.class, queryParameters(queryParam, milestoneParam, null, assignedToParam, sortBy, desc, 1))); // by status - List<Status> statii = Arrays.asList(Status.values()); + List<Status> statii = new ArrayList<Status>(Arrays.asList(Status.values())); + statii.remove(Status.Closed); ListDataProvider<Status> resolutionsDp = new ListDataProvider<Status>(statii); DataView<Status> statiiLinks = new DataView<Status>("statii", resolutionsDp) { private static final long serialVersionUID = 1L; @@ -529,7 +535,7 @@ @Override public void populateItem(final Item<String> labelItem) { - String content = messageProcessor().processPlainCommitMessage(getRepository(), repositoryName, labelItem.getModelObject()); + String content = bugtraqProcessor().processPlainCommitMessage(getRepository(), repositoryName, labelItem.getModelObject()); Label label = new Label("label", content); label.setEscapeModelStrings(false); TicketLabel tLabel = app().tickets().getLabel(getRepositoryModel(), labelItem.getModelObject()); @@ -642,18 +648,120 @@ }; add(ticketsView); - DataView<TicketMilestone> milestonesList = new DataView<TicketMilestone>("milestoneList", milestonesDp) { + // new milestone link + RepositoryModel repositoryModel = getRepositoryModel(); + final boolean acceptingUpdates = app().tickets().isAcceptingTicketUpdates(repositoryModel) + && user != null && user.canAdmin(getRepositoryModel()); + if (acceptingUpdates) { + add(new LinkPanel("newMilestone", null, getString("gb.newMilestone"), + NewMilestonePage.class, WicketUtils.newRepositoryParameter(repositoryName))); + } else { + add(new Label("newMilestone").setVisible(false)); + } + + // milestones list + List<TicketMilestone> openMilestones = new ArrayList<TicketMilestone>(); + List<TicketMilestone> closedMilestones = new ArrayList<TicketMilestone>(); + for (TicketMilestone milestone : app().tickets().getMilestones(repositoryModel)) { + if (milestone.isOpen()) { + openMilestones.add(milestone); + } else { + closedMilestones.add(milestone); + } + } + Collections.sort(openMilestones, new Comparator<TicketMilestone>() { + @Override + public int compare(TicketMilestone o1, TicketMilestone o2) { + return o2.due.compareTo(o1.due); + } + }); + + Collections.sort(closedMilestones, new Comparator<TicketMilestone>() { + @Override + public int compare(TicketMilestone o1, TicketMilestone o2) { + return o2.due.compareTo(o1.due); + } + }); + + DataView<TicketMilestone> openMilestonesList = milestoneList("openMilestonesList", openMilestones, acceptingUpdates); + add(openMilestonesList); + + DataView<TicketMilestone> closedMilestonesList = milestoneList("closedMilestonesList", closedMilestones, acceptingUpdates); + add(closedMilestonesList); + } + + protected DataView<TicketMilestone> milestoneList(String wicketId, List<TicketMilestone> milestones, final boolean acceptingUpdates) { + ListDataProvider<TicketMilestone> milestonesDp = new ListDataProvider<TicketMilestone>(milestones); + DataView<TicketMilestone> milestonesList = new DataView<TicketMilestone>(wicketId, milestonesDp) { private static final long serialVersionUID = 1L; @Override public void populateItem(final Item<TicketMilestone> item) { + Fragment entryPanel = new Fragment("entryPanel", "milestoneListFragment", this); + item.add(entryPanel); + final TicketMilestone tm = item.getModelObject(); - item.add(new Label("milestoneName", tm.name)); - item.add(new Label("milestoneState", tm.status.name())); - item.add(new Label("milestoneDue", tm.due == null ? getString("gb.notSpecified") : tm.due.toString())); + PageParameters params = queryParameters(null, tm.name, null, null, null, true, 1); + entryPanel.add(new LinkPanel("milestoneName", null, tm.name, TicketsPage.class, params).setRenderBodyOnly(true)); + + String css; + String status = tm.status.name(); + switch (tm.status) { + case Open: + if (tm.isOverdue()) { + css = "aui-lozenge aui-lozenge-subtle aui-lozenge-error"; + status = "overdue"; + } else { + css = "aui-lozenge aui-lozenge-subtle"; + } + break; + default: + css = "aui-lozenge"; + break; + } + Label stateLabel = new Label("milestoneState", status); + WicketUtils.setCssClass(stateLabel, css); + entryPanel.add(stateLabel); + + if (tm.due == null) { + entryPanel.add(new Label("milestoneDue", getString("gb.notSpecified"))); + } else { + entryPanel.add(WicketUtils.createDatestampLabel("milestoneDue", tm.due, getTimeZone(), getTimeUtils())); + } + if (acceptingUpdates) { + entryPanel.add(new LinkPanel("editMilestone", null, getString("gb.edit"), EditMilestonePage.class, + WicketUtils.newObjectParameter(repositoryName, tm.name))); + } else { + entryPanel.add(new Label("editMilestone").setVisible(false)); + } + + if (tm.isOpen()) { + // re-load milestone with query results + TicketMilestone m = app().tickets().getMilestone(getRepositoryModel(), tm.name); + + Fragment milestonePanel = new Fragment("milestonePanel", "openMilestoneFragment", this); + Label label = new Label("progress"); + WicketUtils.setCssStyle(label, "width:" + tm.getProgress() + "%;"); + milestonePanel.add(label); + + milestonePanel.add(new LinkPanel("openTickets", null, + MessageFormat.format(getString("gb.nOpenTickets"), m.getOpenTickets()), + TicketsPage.class, + queryParameters(null, tm.name, openStatii, null, null, true, 1))); + + milestonePanel.add(new LinkPanel("closedTickets", null, + MessageFormat.format(getString("gb.nClosedTickets"), m.getClosedTickets()), + TicketsPage.class, + queryParameters(null, tm.name, closedStatii, null, null, true, 1))); + + milestonePanel.add(new Label("totalTickets", MessageFormat.format(getString("gb.nTotalTickets"), m.getTotalTickets()))); + entryPanel.add(milestonePanel); + } else { + entryPanel.add(new Label("milestonePanel").setVisible(false)); + } } }; - add(milestonesList); + return milestonesList; } protected PageParameters queryParameters( -- Gitblit v1.9.1