diff --git a/server/crashmanager/forms.py b/server/crashmanager/forms.py index 3de90a94..ce854745 100644 --- a/server/crashmanager/forms.py +++ b/server/crashmanager/forms.py @@ -22,67 +22,6 @@ class Row(Div): class BugzillaTemplateBugForm(ModelForm): - helper = FormHelper() - helper.layout = Layout( - HTML("""
"""), - Row(Field("name", wrapper_class="col-md-6")), - "summary", - Row( - Field("product", wrapper_class="col-md-6"), - Field("component", wrapper_class="col-md-6"), - ), - HTML("""
"""), - HTML(""""""), - HTML("""
"""), - Row( - Field("whiteboard", wrapper_class="col-md-6"), - Field("keywords", wrapper_class="col-md-6"), - ), - Row( - Field("op_sys", wrapper_class="col-md-6"), - Field("platform", wrapper_class="col-md-6"), - ), - Row( - Field("cc", wrapper_class="col-md-6"), - Field("assigned_to", wrapper_class="col-md-6"), - ), - Row( - Field("priority", wrapper_class="col-md-6"), - Field("severity", wrapper_class="col-md-6"), - ), - Row( - Field("alias", wrapper_class="col-md-6"), - Field("qa_contact", wrapper_class="col-md-6"), - ), - Row( - Field("version", wrapper_class="col-md-6"), - Field("target_milestone", wrapper_class="col-md-6"), - ), - Row( - Field("blocks", wrapper_class="col-md-6"), - Field("dependson", wrapper_class="col-md-6"), - ), - "attrs", - "description", - "security", - Row(Field("security_group", wrapper_class="col-md-6")), - Row(Field("testcase_filename", wrapper_class="col-md-6")), - Submit("submit", "Save", css_class="btn btn-danger"), - HTML( - """""" - """Cancel""" - ), - HTML("""
"""), - ) - product = CharField( - label="Current product (choose below)", - widget=TextInput(attrs={"disabled": True}), - ) - component = CharField( - label="Current component (choose below)", - widget=TextInput(attrs={"disabled": True}), - ) - class Meta: model = BugzillaTemplate fields = [ @@ -135,13 +74,6 @@ class Meta: "dependson": "Depends On", } - widgets = {} - for field in fields: - if field not in ["description", "attrs", "security"]: - widgets[field] = TextInput() - - widgets["attrs"] = Textarea(attrs={"rows": 2}) - class BugzillaTemplateCommentForm(ModelForm): helper = FormHelper() diff --git a/server/crashmanager/templates/bugzilla/create_edit.html b/server/crashmanager/templates/bugzilla/create_edit.html index 703cca32..e512fb08 100644 --- a/server/crashmanager/templates/bugzilla/create_edit.html +++ b/server/crashmanager/templates/bugzilla/create_edit.html @@ -7,10 +7,19 @@
{{ title }}
-
- {% csrf_token %} - {% crispy form %} -
+ {% if mode == "Comment" %} +
+ {% csrf_token %} + {% crispy form %} +
+ {% else %} + + {% endif %}
{% endblock body_content %} diff --git a/server/crashmanager/views.py b/server/crashmanager/views.py index f1f0e3cd..a7445a76 100644 --- a/server/crashmanager/views.py +++ b/server/crashmanager/views.py @@ -1609,7 +1609,17 @@ class BugzillaTemplateEditView(UpdateView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) + + if "provider" in self.request.POST: + provider = get_object_or_404(BugProvider, pk=self.request.GET["provider"]) + else: + user = User.get_or_create_restricted(self.request.user)[0] + provider = get_object_or_404(BugProvider, pk=user.defaultProviderId) + context["title"] = "Edit template" + context["template_id"] = self.kwargs[self.pk_url_kwarg] + context["provider"] = provider + context["mode"] = "Bug" if self.object.mode == BugzillaTemplateMode.Bug else "Comment" return context def get_form_class(self): @@ -1628,6 +1638,15 @@ class BugzillaTemplateBugCreateView(CreateView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Create a bug template" + + if "provider" in self.request.GET: + provider = get_object_or_404(BugProvider, pk=self.request.GET["provider"]) + else: + user = User.get_or_create_restricted(self.request.user)[0] + provider = get_object_or_404(BugProvider, pk=user.defaultProviderId) + + context["provider"] = provider + context["mode"] = "Bug" return context def form_valid(self, form): @@ -1644,6 +1663,7 @@ class BugzillaTemplateCommentCreateView(CreateView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Create a comment template" + context["mode"] = "Comment" return context def form_valid(self, form): diff --git a/server/frontend/src/api.js b/server/frontend/src/api.js index 8ac14952..73b6e4e4 100644 --- a/server/frontend/src/api.js +++ b/server/frontend/src/api.js @@ -47,8 +47,12 @@ export const listCrashes = async (params) => export const listBugProviders = async () => (await mainAxios.get("/crashmanager/rest/bugproviders/")).data; -export const listTemplates = async () => - (await mainAxios.get("/crashmanager/rest/bugzilla/templates/")).data; +export const listTemplates = async (id) => + ( + await mainAxios.get( + `/crashmanager/rest/bugzilla/templates${id !== -1 && id ? `/${id}/` : "/"}`, + ) + ).data; export const listUnreadNotifications = async (params) => (await mainAxios.get("/crashmanager/rest/inbox/", { params })).data; @@ -65,6 +69,13 @@ export const listPools = async (params) => export const listTasks = async (params) => (await mainAxios.get("/taskmanager/rest/tasks/", { params })).data; +export const createBugzillaBugTemplate = async (data) => + (await mainAxios.post("/crashmanager/bugzilla/templates/create-bug/", data)) + .data; + +export const updateBugzillaBugTemplate = async (id, data) => + (await mainAxios.post(`/crashmanager/bugzilla/templates/${id}/`, data)).data; + export const covManagerDiffStats = async ({ path, params, cb }) => await mainAxios .get("/covmanager/collections/diff/api/" + path, { params }) diff --git a/server/frontend/src/components/Bugs/FullPPCSelect.vue b/server/frontend/src/components/Bugs/FullPPCSelect.vue index c55b659e..98b1aae4 100644 --- a/server/frontend/src/components/Bugs/FullPPCSelect.vue +++ b/server/frontend/src/components/Bugs/FullPPCSelect.vue @@ -14,6 +14,8 @@ :template-product="templateProduct" :template-component="templateComponent" style-class="col-md-4" + @update-product="product = $event" + @update-component="component = $event" /> @@ -45,11 +47,13 @@ export default defineComponent({ default: "", }, }, - setup(props) { + setup(props, { emit }) { const providers = ref([]); const selectedProvider = ref(null); const providerHostname = ref(""); const provider = ref(null); + const product = ref(""); + const component = ref(""); onMounted(async () => { const data = await api.listBugProviders(); @@ -71,11 +75,27 @@ export default defineComponent({ providerHostname.value = provider.value.hostname; }); + watch( + () => product.value, + () => { + emit("update-product", product.value); + }, + ); + + watch( + () => component.value, + () => { + emit("update-component", component.value); + }, + ); + return { providers, selectedProvider, providerHostname, provider, + product, + component, }; }, }); diff --git a/server/frontend/src/components/Bugs/PublicationForm.vue b/server/frontend/src/components/Bugs/PublicationForm.vue index e50a4e97..fcadfc16 100644 --- a/server/frontend/src/components/Bugs/PublicationForm.vue +++ b/server/frontend/src/components/Bugs/PublicationForm.vue @@ -1,57 +1,142 @@