James Moger
2014-03-08 cc1c3ffa7d261d2e8bcdc600253528e8d09e1d06
Allow selection of integration branch in new ticket page
5 files modified
58 ■■■■ changed files
src/main/java/com/gitblit/models/UserModel.java 12 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/EditTicketPage.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/NewTicketPage.html 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/NewTicketPage.java 31 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/TicketPage.java 2 ●●● 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
                 */