Beispiel #1
0
    def changeform_view(self,
                        request,
                        obj_id=None,
                        form_url='',
                        extra_context=None):
        extra_context = extra_context or {}
        if obj_id:
            obj = (
                self.get_object(request, obj_id)
                # if we can't find the obj_id maybe it's a guid instead
                or self.get_object(request, obj_id, 'guid'))
            if obj and str(obj_id) != str(obj.id):
                # we found it from the guid if the obj_id != obj.id so redirect
                url = request.path.replace(obj_id, str(obj.id), 1)
                return http.HttpResponsePermanentRedirect(url)
        else:
            obj = None
        if obj and request.method == 'POST':
            if not self.has_change_permission(request, obj):
                raise PermissionDenied
            ModelForm = self.get_form(request, obj, change=bool(obj_id))
            form = ModelForm(request.POST, request.FILES, instance=obj)
            if form.is_valid():
                return HttpResponseTemporaryRedirect(
                    reverse('admin:blocklist_blocklistsubmission_add'))

        extra_context['show_save_and_continue'] = False
        extra_context['is_imported_from_legacy_regex'] = (
            obj and obj.is_imported_from_legacy_regex)

        return super().changeform_view(request,
                                       object_id=obj_id,
                                       form_url=form_url,
                                       extra_context=extra_context)
Beispiel #2
0
    def _multi_input_view(self, request, *, add, form_url='',
                          extra_context=None):
        MultiForm = MultiAddForm if add else MultiDeleteForm
        if request.method == 'POST':
            form = MultiForm(request.POST)
            if form.is_valid():
                guids = splitlines(form.data.get('guids'))
                if len(guids) == 1 and form.existing_block:
                    # If the guid already has a Block go to the change view
                    return redirect(
                        'admin:blocklist_block_change',
                        form.existing_block.id)
                elif len(guids) > 0:
                    # Otherwise go to multi view.
                    return HttpResponseTemporaryRedirect(
                        reverse('admin:blocklist_blocklistsubmission_add'))
        else:
            form = MultiForm()

        context = {
            'form': form,
            'add': add,
            'change': False,
            'has_view_permission': self.has_view_permission(request, None),
            'has_add_permission': self.has_add_permission(request),
            'has_change_permission': self.has_change_permission(request, None),
            'app_label': 'blocklist',
            'opts': self.model._meta,
            'title': 'Block Add-ons' if add else 'Delete Blocks',
            'save_as': False,
        }
        return TemplateResponse(
            request, 'admin/blocklist/multi_guid_input.html', context)
Beispiel #3
0
    def input_guids_view(self, request, form_url='', extra_context=None):
        errors = []
        if request.method == 'POST':
            guids_data = request.POST.get('guids')
            guids = guids_data.splitlines() if guids_data else []
            if len(guids) == 1:
                guid = guids[0]
                # If the guid already has a Block go to the change view
                existing = Block.objects.filter(guid=guid).first()
                if existing:
                    return redirect('admin:blocklist_block_change',
                                    existing.id)

                if not Addon.unfiltered.filter(guid=guid).exists():
                    # We might want to do something better than this eventually
                    # - e.g. go to the multi_view once implemented.
                    errors.append(
                        _('Addon with specified GUID does not exist'))
                else:
                    # Otherwise proceed to the single guid add view
                    return redirect(
                        reverse('admin:blocklist_block_add_single') +
                        f'?guid={guid}')
            elif len(guids) > 1:
                # If there's > 1 guid go to multi view.
                return HttpResponseTemporaryRedirect(
                    reverse('admin:blocklist_block_add_multiple'))

        context = {}
        context.update({
            'add':
            True,
            'change':
            False,
            'has_view_permission':
            self.has_view_permission(request, None),
            'has_add_permission':
            self.has_add_permission(request),
            'has_change_permission':
            self.has_change_permission(request, None),
            'app_label':
            'blocklist',
            'opts':
            self.model._meta,
            'title':
            'Block Add-ons',
            'save_as':
            False,
            'errors':
            errors,
        })
        return TemplateResponse(request, "blocklist/add_guids.html", context)
Beispiel #4
0
 def delete_multiple_view(self, request, form_url='', extra_context=None):
     if request.method == 'POST':
         if request.POST.get('action') == 'delete_selected':
             # it's the confirmation so redirect to changelist to handle
             return HttpResponseTemporaryRedirect(
                 reverse('admin:blocklist_block_changelist'))
         form = MultiDeleteForm(request.POST)
         if form.is_valid():
             return admin.actions.delete_selected(self, request,
                                                  form.existing_block_qs)
     else:
         form = MultiDeleteForm()
     return self._render_multi_guid_input(request,
                                          form,
                                          title='Delete Blocks',
                                          add=False)
Beispiel #5
0
    def changeform_view(self, request, obj_id=None, form_url='',
                        extra_context=None):
        extra_context = extra_context or {}
        obj = self.get_object(request, obj_id) if obj_id else None
        if obj and request.method == 'POST':
            if not self.has_change_permission(request, obj):
                raise PermissionDenied
            ModelForm = self.get_form(request, obj, change=bool(obj_id))
            form = ModelForm(request.POST, request.FILES, instance=obj)
            if form.is_valid():
                return HttpResponseTemporaryRedirect(
                    reverse('admin:blocklist_blocklistsubmission_add'))

        extra_context['show_save_and_continue'] = False
        extra_context['is_imported_from_legacy_regex'] = (
            obj and obj.is_imported_from_legacy_regex)

        return super().changeform_view(
            request, object_id=obj_id, form_url=form_url,
            extra_context=extra_context)
Beispiel #6
0
 def input_guids_view(self, request, form_url='', extra_context=None):
     if request.method == 'POST':
         form = MultiAddForm(request.POST)
         if form.is_valid():
             guids = splitlines(form.data.get('guids'))
             if len(guids) == 1:
                 # If the guid already has a Block go to the change view
                 if form.existing_block:
                     return redirect('admin:blocklist_block_change',
                                     form.existing_block.id)
                 else:
                     # Otherwise proceed to the single guid add view
                     return redirect(
                         reverse('admin:blocklist_block_add_single') +
                         f'?guid={guids[0]}')
             elif len(guids) > 1:
                 # If there's > 1 guid go to multi view.
                 return HttpResponseTemporaryRedirect(
                     reverse('admin:blocklist_blocksubmission_add'))
     else:
         form = MultiAddForm()
     return self._render_multi_guid_input(request,
                                          form,
                                          title='Block Add-ons')