From 85775acd760c668a73f9febf80009832ddf91af9 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 05 Mar 2014 11:42:34 -0500 Subject: [PATCH] Delegate closed ticket changes to the Edit Ticket page --- src/main/java/com/gitblit/wicket/pages/TicketPage.html | 15 ++ src/main/java/com/gitblit/wicket/pages/TicketPage.java | 289 +++++++++++++++++++++++++----------------------- 2 files changed, 163 insertions(+), 141 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/TicketPage.html b/src/main/java/com/gitblit/wicket/pages/TicketPage.html index 2e0288a..6fcf96c 100644 --- a/src/main/java/com/gitblit/wicket/pages/TicketPage.html +++ b/src/main/java/com/gitblit/wicket/pages/TicketPage.html @@ -136,8 +136,8 @@ </wicket:fragment> -<!-- TICKET CONTROLS FRAGMENT --> -<wicket:fragment wicket:id="controlsFragment"> +<!-- OPEN TICKET CONTROLS FRAGMENT --> +<wicket:fragment wicket:id="openControlsFragment"> <div class="hidden-phone hidden-tablet"> <div class="btn-group" style="display:inline-block;"> <a class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#"><wicket:message key="gb.status"></wicket:message> <span class="caret"></span></a> @@ -167,6 +167,17 @@ </wicket:fragment> +<!-- CLOSED TICKET CONTROLS FRAGMENT --> +<wicket:fragment wicket:id="closedControlsFragment"> + <div class="hidden-phone hidden-tablet"> + + <div class="btn-group" style="display:inline-block;"> + <a class="btn btn-small" wicket:id="editLink"></a> + </div> + </div> +</wicket:fragment> + + <!-- STATUS INDICATOR FRAGMENT --> <wicket:fragment wicket:id="ticketStatusFragment"> <div style="font-size:2.5em;padding-bottom: 5px;"> diff --git a/src/main/java/com/gitblit/wicket/pages/TicketPage.java b/src/main/java/com/gitblit/wicket/pages/TicketPage.java index 07382ad..3f92eaa 100644 --- a/src/main/java/com/gitblit/wicket/pages/TicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/TicketPage.java @@ -328,159 +328,170 @@ * UPDATE FORM (DISCUSSION TAB) */ if (isAuthenticated && app().tickets().isAcceptingTicketUpdates(repository)) { - Fragment controls = new Fragment("controls", "controlsFragment", this); + if (ticket.isOpen()) { + /* + * OPEN TICKET + */ + Fragment controls = new Fragment("controls", "openControlsFragment", this); - - /* - * STATUS - */ - List<Status> choices = new ArrayList<Status>(); - if (ticket.isClosed()) { - // re-open - choices.addAll(Arrays.asList(TicketModel.Status.Open)); - } else if (ticket.isProposal()) { - choices.addAll(Arrays.asList(TicketModel.Status.proposalWorkflow)); - } else if (ticket.isBug()) { - choices.addAll(Arrays.asList(TicketModel.Status.bugWorkflow)); - } else { - choices.addAll(Arrays.asList(TicketModel.Status.requestWorkflow)); - } - choices.remove(ticket.status); - - ListDataProvider<Status> workflowDp = new ListDataProvider<Status>(choices); - DataView<Status> statusView = new DataView<Status>("newStatus", workflowDp) { - private static final long serialVersionUID = 1L; - - @Override - public void populateItem(final Item<Status> item) { - SimpleAjaxLink<Status> link = new SimpleAjaxLink<Status>("link", item.getModel()) { - - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - Status status = getModel().getObject(); - Change change = new Change(user.username); - change.setField(Field.status, status); - if (!ticket.isWatching(user.username)) { - change.watch(user.username); - } - TicketModel update = app().tickets().updateTicket(repository, ticket.number, change); - app().tickets().createNotifier().sendMailing(update); - setResponsePage(TicketsPage.class, getPageParameters()); - } - }; - String css = getStatusClass(item.getModel().getObject()); - WicketUtils.setCssClass(link, css); - item.add(link); + /* + * STATUS + */ + List<Status> choices = new ArrayList<Status>(); + if (ticket.isProposal()) { + choices.addAll(Arrays.asList(TicketModel.Status.proposalWorkflow)); + } else if (ticket.isBug()) { + choices.addAll(Arrays.asList(TicketModel.Status.bugWorkflow)); + } else { + choices.addAll(Arrays.asList(TicketModel.Status.requestWorkflow)); } - }; - controls.add(statusView); + choices.remove(ticket.status); - /* - * RESPONSIBLE LIST - */ - Set<String> userlist = new TreeSet<String>(ticket.getParticipants()); - for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) { - if (rp.permission.atLeast(AccessPermission.PUSH) && !rp.isTeam()) { - userlist.add(rp.registrant); - } - } - List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>(); - if (!StringUtils.isEmpty(ticket.responsible)) { - // exclude the current responsible - userlist.remove(ticket.responsible); - } - for (String username : userlist) { - UserModel u = app().users().getUserModel(username); - if (u != null) { - responsibles.add(new TicketResponsible(u)); - } - } - Collections.sort(responsibles); - responsibles.add(new TicketResponsible(ESC_NIL, "", "")); - ListDataProvider<TicketResponsible> responsibleDp = new ListDataProvider<TicketResponsible>(responsibles); - DataView<TicketResponsible> responsibleView = new DataView<TicketResponsible>("newResponsible", responsibleDp) { - private static final long serialVersionUID = 1L; + ListDataProvider<Status> workflowDp = new ListDataProvider<Status>(choices); + DataView<Status> statusView = new DataView<Status>("newStatus", workflowDp) { + private static final long serialVersionUID = 1L; - @Override - public void populateItem(final Item<TicketResponsible> item) { - SimpleAjaxLink<TicketResponsible> link = new SimpleAjaxLink<TicketResponsible>("link", item.getModel()) { + @Override + public void populateItem(final Item<Status> item) { + SimpleAjaxLink<Status> link = new SimpleAjaxLink<Status>("link", item.getModel()) { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - @Override - public void onClick(AjaxRequestTarget target) { - TicketResponsible responsible = getModel().getObject(); - Change change = new Change(user.username); - change.setField(Field.responsible, responsible.username); - if (!StringUtils.isEmpty(responsible.username)) { - if (!ticket.isWatching(responsible.username)) { - change.watch(responsible.username); + @Override + public void onClick(AjaxRequestTarget target) { + Status status = getModel().getObject(); + Change change = new Change(user.username); + change.setField(Field.status, status); + if (!ticket.isWatching(user.username)) { + change.watch(user.username); } + TicketModel update = app().tickets().updateTicket(repository, ticket.number, change); + app().tickets().createNotifier().sendMailing(update); + setResponsePage(TicketsPage.class, getPageParameters()); } - if (!ticket.isWatching(user.username)) { - change.watch(user.username); - } - TicketModel update = app().tickets().updateTicket(repository, ticket.number, change); - app().tickets().createNotifier().sendMailing(update); - setResponsePage(TicketsPage.class, getPageParameters()); - } - }; - item.add(link); - } - }; - controls.add(responsibleView); + }; + String css = getStatusClass(item.getModel().getObject()); + WicketUtils.setCssClass(link, css); + item.add(link); + } + }; + controls.add(statusView); - /* - * MILESTONE LIST - */ - List<TicketMilestone> milestones = app().tickets().getMilestones(repository, Status.Open); - if (!StringUtils.isEmpty(ticket.milestone)) { - for (TicketMilestone milestone : milestones) { - if (milestone.name.equals(ticket.milestone)) { - milestones.remove(milestone); - break; + /* + * RESPONSIBLE LIST + */ + Set<String> userlist = new TreeSet<String>(ticket.getParticipants()); + for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) { + if (rp.permission.atLeast(AccessPermission.PUSH) && !rp.isTeam()) { + userlist.add(rp.registrant); } } - } - milestones.add(new TicketMilestone(ESC_NIL)); - ListDataProvider<TicketMilestone> milestoneDp = new ListDataProvider<TicketMilestone>(milestones); - DataView<TicketMilestone> milestoneView = new DataView<TicketMilestone>("newMilestone", milestoneDp) { - private static final long serialVersionUID = 1L; - - @Override - public void populateItem(final Item<TicketMilestone> item) { - SimpleAjaxLink<TicketMilestone> link = new SimpleAjaxLink<TicketMilestone>("link", item.getModel()) { - - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - TicketMilestone milestone = getModel().getObject(); - Change change = new Change(user.username); - if (NIL.equals(milestone.name) || ESC_NIL.equals(milestone.name)) { - change.setField(Field.milestone, ""); - } else { - change.setField(Field.milestone, milestone.name); - } - if (!ticket.isWatching(user.username)) { - change.watch(user.username); - } - TicketModel update = app().tickets().updateTicket(repository, ticket.number, change); - app().tickets().createNotifier().sendMailing(update); - setResponsePage(TicketsPage.class, getPageParameters()); - } - }; - item.add(link); + List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>(); + if (!StringUtils.isEmpty(ticket.responsible)) { + // exclude the current responsible + userlist.remove(ticket.responsible); } - }; - controls.add(milestoneView); + for (String username : userlist) { + UserModel u = app().users().getUserModel(username); + if (u != null) { + responsibles.add(new TicketResponsible(u)); + } + } + Collections.sort(responsibles); + responsibles.add(new TicketResponsible(ESC_NIL, "", "")); + ListDataProvider<TicketResponsible> responsibleDp = new ListDataProvider<TicketResponsible>(responsibles); + DataView<TicketResponsible> responsibleView = new DataView<TicketResponsible>("newResponsible", responsibleDp) { + private static final long serialVersionUID = 1L; - String editHref = urlFor(EditTicketPage.class, params).toString(); - controls.add(new ExternalLink("editLink", editHref, getString("gb.edit"))); + @Override + public void populateItem(final Item<TicketResponsible> item) { + SimpleAjaxLink<TicketResponsible> link = new SimpleAjaxLink<TicketResponsible>("link", item.getModel()) { - add(controls); + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + TicketResponsible responsible = getModel().getObject(); + Change change = new Change(user.username); + change.setField(Field.responsible, responsible.username); + if (!StringUtils.isEmpty(responsible.username)) { + if (!ticket.isWatching(responsible.username)) { + change.watch(responsible.username); + } + } + if (!ticket.isWatching(user.username)) { + change.watch(user.username); + } + TicketModel update = app().tickets().updateTicket(repository, ticket.number, change); + app().tickets().createNotifier().sendMailing(update); + setResponsePage(TicketsPage.class, getPageParameters()); + } + }; + item.add(link); + } + }; + controls.add(responsibleView); + + /* + * MILESTONE LIST + */ + List<TicketMilestone> milestones = app().tickets().getMilestones(repository, Status.Open); + if (!StringUtils.isEmpty(ticket.milestone)) { + for (TicketMilestone milestone : milestones) { + if (milestone.name.equals(ticket.milestone)) { + milestones.remove(milestone); + break; + } + } + } + milestones.add(new TicketMilestone(ESC_NIL)); + ListDataProvider<TicketMilestone> milestoneDp = new ListDataProvider<TicketMilestone>(milestones); + DataView<TicketMilestone> milestoneView = new DataView<TicketMilestone>("newMilestone", milestoneDp) { + private static final long serialVersionUID = 1L; + + @Override + public void populateItem(final Item<TicketMilestone> item) { + SimpleAjaxLink<TicketMilestone> link = new SimpleAjaxLink<TicketMilestone>("link", item.getModel()) { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + TicketMilestone milestone = getModel().getObject(); + Change change = new Change(user.username); + if (NIL.equals(milestone.name) || ESC_NIL.equals(milestone.name)) { + change.setField(Field.milestone, ""); + } else { + change.setField(Field.milestone, milestone.name); + } + if (!ticket.isWatching(user.username)) { + change.watch(user.username); + } + TicketModel update = app().tickets().updateTicket(repository, ticket.number, change); + app().tickets().createNotifier().sendMailing(update); + setResponsePage(TicketsPage.class, getPageParameters()); + } + }; + item.add(link); + } + }; + controls.add(milestoneView); + + String editHref = urlFor(EditTicketPage.class, params).toString(); + controls.add(new ExternalLink("editLink", editHref, getString("gb.edit"))); + + add(controls); + } else { + /* + * CLOSED TICKET + */ + Fragment controls = new Fragment("controls", "closedControlsFragment", this); + + String editHref = urlFor(EditTicketPage.class, params).toString(); + controls.add(new ExternalLink("editLink", editHref, getString("gb.edit"))); + + add(controls); + } } else { add(new Label("controls").setVisible(false)); } -- Gitblit v1.9.1