From bb2d22d38555efde80536d0d8b15db4a262a5035 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 11 Sep 2014 09:35:45 -0400 Subject: [PATCH] Merged #175 "Repository url is now r" --- src/main/java/com/gitblit/wicket/pages/NewTicketPage.java | 157 ++++++++++++++++++++++++++++++--------------------- 1 files changed, 92 insertions(+), 65 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java b/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java index fda2e9f..21a2af1 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java @@ -19,8 +19,12 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Set; +import java.util.TreeSet; import org.apache.wicket.PageParameters; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.DropDownChoice; @@ -33,6 +37,7 @@ import com.gitblit.Constants; import com.gitblit.Constants.AccessPermission; +import com.gitblit.Constants.AuthorizationControl; import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.TicketModel; import com.gitblit.models.TicketModel.Change; @@ -44,6 +49,8 @@ import com.gitblit.tickets.TicketResponsible; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; +import com.gitblit.wicket.SafeTextModel; +import com.gitblit.wicket.SafeTextModel.Mode; import com.gitblit.wicket.WicketUtils; import com.gitblit.wicket.panels.MarkdownTextArea; @@ -85,8 +92,8 @@ } typeModel = Model.of(TicketModel.Type.defaultType); - titleModel = Model.of(); - topicModel = Model.of(); + titleModel = SafeTextModel.none(); + topicModel = SafeTextModel.none(); mergeToModel = Model.of(Repository.shortenRefName(getRepositoryModel().mergeTo)); responsibleModel = Model.of(); milestoneModel = Model.of(); @@ -94,15 +101,94 @@ setStatelessHint(false); setOutputMarkupId(true); - Form<Void> form = new Form<Void>("editForm") { + Form<Void> form = new Form<Void>("editForm"); + add(form); + + form.add(new DropDownChoice<TicketModel.Type>("type", typeModel, Arrays.asList(TicketModel.Type.choices()))); + form.add(new TextField<String>("title", titleModel)); + form.add(new TextField<String>("topic", topicModel)); + + final SafeTextModel markdownPreviewModel = new SafeTextModel(Mode.none); + descriptionPreview = new Label("descriptionPreview", markdownPreviewModel); + descriptionPreview.setEscapeModelStrings(false); + descriptionPreview.setOutputMarkupId(true); + form.add(descriptionPreview); + + descriptionEditor = new MarkdownTextArea("description", markdownPreviewModel, descriptionPreview); + descriptionEditor.setRepository(repositoryName); + form.add(descriptionEditor); + + if (currentUser.canAdmin(null, getRepositoryModel())) { + // responsible + Set<String> userlist = new TreeSet<String>(); + + if (UserModel.ANONYMOUS.canPush(getRepositoryModel()) + || AuthorizationControl.AUTHENTICATED == getRepositoryModel().authorizationControl) { + // authorization is ANONYMOUS or AUTHENTICATED (i.e. all users can be set responsible) + userlist.addAll(app().users().getAllUsernames()); + } else { + // authorization is by NAMED users (users with PUSH permission can be set responsible) + for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) { + if (rp.permission.atLeast(AccessPermission.PUSH)) { + userlist.add(rp.registrant); + } + } + } + + List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>(); + for (String username : userlist) { + UserModel user = app().users().getUserModel(username); + if (user != null && !user.disabled) { + TicketResponsible responsible = new TicketResponsible(user); + responsibles.add(responsible); + } + } + Collections.sort(responsibles); + Fragment responsible = new Fragment("responsible", "responsibleFragment", this); + responsible.add(new DropDownChoice<TicketResponsible>("responsible", responsibleModel, responsibles)); + form.add(responsible.setVisible(!responsibles.isEmpty())); + + // milestone + List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open); + 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, 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 AjaxButton("create") { private static final long serialVersionUID = 1L; @Override - protected void onSubmit() { + protected void onSubmit(AjaxRequestTarget target, Form<?> form) { + String title = titleModel.getObject(); + if (StringUtils.isEmpty(title)) { + return; + } + String createdBy = GitBlitWebSession.get().getUsername(); Change change = new Change(createdBy); - change.setField(Field.title, titleModel.getObject()); + change.setField(Field.title, title); change.setField(Field.body, descriptionEditor.getText()); String topic = topicModel.getObject(); if (!StringUtils.isEmpty(topic)) { @@ -143,67 +229,8 @@ // TODO error } } - }; - add(form); + }); - form.add(new DropDownChoice<TicketModel.Type>("type", typeModel, Arrays.asList(TicketModel.Type.choices()))); - form.add(new TextField<String>("title", titleModel)); - form.add(new TextField<String>("topic", topicModel)); - - final IModel<String> markdownPreviewModel = new Model<String>(); - descriptionPreview = new Label("descriptionPreview", markdownPreviewModel); - descriptionPreview.setEscapeModelStrings(false); - descriptionPreview.setOutputMarkupId(true); - form.add(descriptionPreview); - - descriptionEditor = new MarkdownTextArea("description", markdownPreviewModel, descriptionPreview); - descriptionEditor.setRepository(repositoryName); - form.add(descriptionEditor); - - if (currentUser.canAdmin(null, getRepositoryModel())) { - // responsible - List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>(); - for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) { - if (rp.permission.atLeast(AccessPermission.PUSH) && !rp.isTeam()) { - UserModel user = app().users().getUserModel(rp.registrant); - if (user != null) { - responsibles.add(new TicketResponsible(user)); - } - } - } - Collections.sort(responsibles); - Fragment responsible = new Fragment("responsible", "responsibleFragment", this); - responsible.add(new DropDownChoice<TicketResponsible>("responsible", responsibleModel, responsibles)); - form.add(responsible.setVisible(!responsibles.isEmpty())); - - // milestone - List<TicketMilestone> milestones = app().tickets().getMilestones(getRepositoryModel(), Status.Open); - 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, 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")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; -- Gitblit v1.9.1