src/main/java/com/gitblit/models/UserModel.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/pages/EditTicketPage.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/pages/NewTicketPage.html | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/pages/NewTicketPage.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/pages/TicketPage.java | ●●●●● patch | view | raw | blame | history |
src/main/java/com/gitblit/models/UserModel.java
@@ -449,9 +449,15 @@ public boolean canEdit(TicketModel ticket, RepositoryModel repository) { return isAuthenticated() && (username.equals(ticket.createdBy) || username.equals(ticket.responsible) || canPush(repository)); (canPush(repository) || (ticket != null && username.equals(ticket.responsible)) || (ticket != null && username.equals(ticket.createdBy))); } public boolean canAdmin(TicketModel ticket, RepositoryModel repository) { return isAuthenticated() && (canPush(repository) || ticket != null && username.equals(ticket.responsible)); } public boolean canReviewPatchset(RepositoryModel model) { src/main/java/com/gitblit/wicket/pages/EditTicketPage.java
@@ -250,6 +250,7 @@ status.add(new DropDownChoice<TicketModel.Status>("status", statusModel, statusChoices)); form.add(status); if (currentUser.canAdmin(ticket, getRepositoryModel())) { // responsible Set<String> userlist = new TreeSet<String>(ticket.getParticipants()); @@ -314,7 +315,12 @@ Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this); mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches)); form.add(mergeto.setVisible(!branches.isEmpty())); } else { // user can not admin this ticket form.add(new Label("responsible").setVisible(false)); form.add(new Label("milestone").setVisible(false)); form.add(new Label("mergeto").setVisible(false)); } form.add(new Button("update")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; src/main/java/com/gitblit/wicket/pages/NewTicketPage.html
@@ -41,6 +41,7 @@ <tr><th><wicket:message key="gb.type"></wicket:message><span style="color:red;">*</span></th><td class="edit"><select class="input-large" wicket:id="type"></select></td></tr> <tr wicket:id="responsible"></tr> <tr wicket:id="milestone"></tr> <tr wicket:id="mergeto"></tr> </table> </div> </div> @@ -62,5 +63,9 @@ <th><wicket:message key="gb.milestone"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="milestone"></select></td> </wicket:fragment> <wicket:fragment wicket:id="mergeToFragment"> <th><wicket:message key="gb.mergeTo"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="mergeto"></select></td> </wicket:fragment> </wicket:extend> </html> src/main/java/com/gitblit/wicket/pages/NewTicketPage.java
@@ -29,7 +29,9 @@ import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.eclipse.jgit.lib.Repository; import com.gitblit.Constants; import com.gitblit.Constants.AccessPermission; import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.TicketModel; @@ -61,6 +63,8 @@ private IModel<String> topicModel; private IModel<String> mergeToModel; private IModel<TicketResponsible> responsibleModel; private IModel<TicketMilestone> milestoneModel; @@ -83,6 +87,7 @@ typeModel = Model.of(TicketModel.Type.defaultType); titleModel = Model.of(); topicModel = Model.of(); mergeToModel = Model.of(Repository.shortenRefName(getRepositoryModel().HEAD)); responsibleModel = Model.of(); milestoneModel = Model.of(); @@ -123,6 +128,12 @@ change.setField(Field.milestone, milestone.name); } // integration branch String mergeTo = mergeToModel.getObject(); if (!StringUtils.isEmpty(mergeTo)) { change.setField(Field.mergeTo, mergeTo); } TicketModel ticket = app().tickets().createTicket(getRepositoryModel(), 0L, change); if (ticket != null) { TicketNotifier notifier = app().tickets().createNotifier(); @@ -149,7 +160,7 @@ descriptionEditor.setRepository(repositoryName); form.add(descriptionEditor); if (currentUser != null && currentUser.isAuthenticated && currentUser.canPush(getRepositoryModel())) { if (currentUser.canAdmin(null, getRepositoryModel())) { // responsible List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>(); for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) { @@ -170,10 +181,26 @@ Fragment milestone = new Fragment("milestone", "milestoneFragment", this); milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones)); form.add(milestone.setVisible(!milestones.isEmpty())); // integration branch List<String> branches = new ArrayList<String>(); for (String branch : getRepositoryModel().getLocalBranches()) { // exclude ticket branches if (!branch.startsWith(Constants.R_TICKET)) { branches.add(Repository.shortenRefName(branch)); } } branches.remove(Repository.shortenRefName(getRepositoryModel().HEAD)); branches.add(0, Repository.shortenRefName(getRepositoryModel().HEAD)); Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this); mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches)); form.add(mergeto.setVisible(!branches.isEmpty())); } else { // user does not have permission to assign milestone or responsible // user does not have permission to assign milestone, responsible, or mergeto form.add(new Label("responsible").setVisible(false)); form.add(new Label("milestone").setVisible(false)); form.add(new Label("mergeto").setVisible(false)); } form.add(new Button("create")); src/main/java/com/gitblit/wicket/pages/TicketPage.java
@@ -327,7 +327,7 @@ * UPDATE FORM (DISCUSSION TAB) */ if (user.canEdit(ticket, repository) && app().tickets().isAcceptingTicketUpdates(repository)) { if (ticket.isOpen()) { if (user.canAdmin(ticket, repository) && ticket.isOpen()) { /* * OPEN TICKET */