James Moger
2014-11-20 e2c0c97867829f7db5a95f5e055bb6251cad6a65
Revise severity & priority permissions

Ticket reporters should be able to specify severity whereas only those with repository push access should be able to specify priority. This also fixes a bug related to non-admin users creating tickets.
4 files modified
59 ■■■■■ changed files
src/main/java/com/gitblit/wicket/pages/EditTicketPage.html 8 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/EditTicketPage.java 24 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/NewTicketPage.html 8 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/NewTicketPage.java 19 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/EditTicketPage.html
@@ -39,10 +39,10 @@
                </div>
            </td></tr>
            <tr wicket:id="status"></tr>
            <tr><th><wicket:message key="gb.severity"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="severity"></select></td></tr>
            <tr wicket:id="priority"></tr>
            <tr wicket:id="responsible"></tr>
            <tr wicket:id="milestone"></tr>
            <tr><th><wicket:message key="gb.priority"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="priority"></select></td></tr>
            <tr><th><wicket:message key="gb.severity"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="severity"></select></td></tr>
            <tr wicket:id="mergeto"></tr>
        </table>
    </div>
@@ -73,5 +73,9 @@
    <th><wicket:message key="gb.mergeTo"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="mergeto"></select></td>
</wicket:fragment>
<wicket:fragment wicket:id="priorityFragment">
    <th><wicket:message key="gb.priority"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="priority"></select></td>
</wicket:fragment>
</wicket:extend>
</html>
src/main/java/com/gitblit/wicket/pages/EditTicketPage.java
@@ -83,9 +83,9 @@
    private IModel<TicketMilestone> milestoneModel;
    private Label descriptionPreview;
    private IModel<TicketModel.Priority> priorityModel;
    private IModel<TicketModel.Severity> severityModel;
    public EditTicketPage(PageParameters params) {
@@ -167,6 +167,9 @@
        status.add(new DropDownChoice<TicketModel.Status>("status", statusModel, statusChoices));
        form.add(status);
        List<TicketModel.Severity> severityChoices = Arrays.asList(TicketModel.Severity.choices());
        form.add(new DropDownChoice<TicketModel.Severity>("severity", severityModel, severityChoices));
        if (currentUser.canAdmin(ticket, getRepositoryModel())) {
            // responsible
            Set<String> userlist = new TreeSet<String>(ticket.getParticipants());
@@ -220,19 +223,17 @@
                milestones.add(new TicketMilestone(NIL));
            }
            // milestone
            Fragment milestone = new Fragment("milestone", "milestoneFragment", this);
            milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones));
            form.add(milestone.setVisible(!milestones.isEmpty()));
            // priority
            Fragment priority = new Fragment("priority", "priorityFragment", this);
            List<TicketModel.Priority> priorityChoices = Arrays.asList(TicketModel.Priority.choices());
            form.add(new DropDownChoice<TicketModel.Priority>("priority", priorityModel, priorityChoices));
            // severity
            List<TicketModel.Severity> severityChoices = Arrays.asList(TicketModel.Severity.choices());
            form.add(new DropDownChoice<TicketModel.Severity>("severity", severityModel, severityChoices));
            priority.add(new DropDownChoice<TicketModel.Priority>("priority", priorityModel, priorityChoices));
            form.add(priority);
            // mergeTo (integration branch)
            List<String> branches = new ArrayList<String>();
            for (String branch : getRepositoryModel().getLocalBranches()) {
@@ -252,6 +253,7 @@
            form.add(new Label("responsible").setVisible(false));
            form.add(new Label("milestone").setVisible(false));
            form.add(new Label("mergeto").setVisible(false));
            form.add(new Label("priority").setVisible(false));
        }
        form.add(new AjaxButton("update") {
@@ -329,7 +331,7 @@
                        change.setField(Field.milestone, milestone.name);
                    }
                }
                TicketModel.Priority priority = priorityModel.getObject();
                if (!ticket.priority.equals(priority))
                {
@@ -341,7 +343,7 @@
                {
                    change.setField(Field.severity, severity);
                }
                String mergeTo = mergeToModel.getObject();
                if ((StringUtils.isEmpty(ticket.mergeTo) && !StringUtils.isEmpty(mergeTo))
                        || (!StringUtils.isEmpty(mergeTo) && !mergeTo.equals(ticket.mergeTo))) {
src/main/java/com/gitblit/wicket/pages/NewTicketPage.html
@@ -39,10 +39,10 @@
                </div>
            </td></tr>
            <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><th><wicket:message key="gb.severity"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="severity"></select></td></tr>
            <tr wicket:id="priority"></tr>
            <tr wicket:id="responsible"></tr>
            <tr wicket:id="milestone"></tr>
            <tr><th><wicket:message key="gb.priority"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="priority"></select></td></tr>
            <tr><th><wicket:message key="gb.severity"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="severity"></select></td></tr>
            <tr wicket:id="mergeto"></tr>
        </table>
    </div>
@@ -69,5 +69,9 @@
    <th><wicket:message key="gb.mergeTo"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="mergeto"></select></td>
</wicket:fragment>
<wicket:fragment wicket:id="priorityFragment">
    <th><wicket:message key="gb.priority"></wicket:message></th><td class="edit"><select class="input-large" wicket:id="priority"></select></td>
</wicket:fragment>
</wicket:extend>
</html>
src/main/java/com/gitblit/wicket/pages/NewTicketPage.java
@@ -75,9 +75,9 @@
    private IModel<TicketMilestone> milestoneModel;
    private Label descriptionPreview;
    private IModel<TicketModel.Priority> priorityModel;
    private IModel<TicketModel.Severity> severityModel;
    public NewTicketPage(PageParameters params) {
@@ -111,6 +111,7 @@
        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));
        form.add(new DropDownChoice<TicketModel.Severity>("severity", severityModel, Arrays.asList(TicketModel.Severity.choices())));
        final IModel<String> markdownPreviewModel = Model.of();
        descriptionPreview = new Label("descriptionPreview", markdownPreviewModel);
@@ -159,11 +160,10 @@
            form.add(milestone.setVisible(!milestones.isEmpty()));
            // priority
            form.add(new DropDownChoice<TicketModel.Priority>("priority", priorityModel, Arrays.asList(TicketModel.Priority.choices())));
            //severity
            form.add(new DropDownChoice<TicketModel.Severity>("severity", severityModel, Arrays.asList(TicketModel.Severity.choices())));
            Fragment priority = new Fragment("priority", "priorityFragment", this);
            priority.add(new DropDownChoice<TicketModel.Priority>("priority", priorityModel, Arrays.asList(TicketModel.Priority.choices())));
            form.add(priority);
            // integration branch
            List<String> branches = new ArrayList<String>();
            for (String branch : getRepositoryModel().getLocalBranches()) {
@@ -183,6 +183,7 @@
            form.add(new Label("responsible").setVisible(false));
            form.add(new Label("milestone").setVisible(false));
            form.add(new Label("mergeto").setVisible(false));
            form.add(new Label("priority").setVisible(false));
        }
        form.add(new AjaxButton("create") {
@@ -223,14 +224,14 @@
                if (milestone != null) {
                    change.setField(Field.milestone, milestone.name);
                }
                // severity
                TicketModel.Severity severity = TicketModel.Severity.defaultSeverity;
                if (severityModel.getObject() != null) {
                    severity = severityModel.getObject();
                }
                change.setField(Field.severity, severity);
                // priority
                TicketModel.Priority priority = TicketModel.Priority.defaultPriority;
                if (priorityModel.getObject() != null) {