def view_and_edit_table_form_process_items(request):
    """ Request to process a selection of items from the
        view & edit table page.

        Args:
            request (Request): This should contain
                a POST request defining:
                    - action: The action to apply
                    - select_action: List of items to apply
                      the action too.
    """
    # Process the form
    if request.method == "POST":
        params = _get_view_and_edit_form_request_parameters(request.POST)
        if params["action"] == "batchupdate":
            selected = ItemTable.get_selected(params)
            _handle_batch_action(request, params["batchaction"], selected)

        elif params["action"] == "save":
            changes = ItemTable.get_row_select_values(params, "category")
            # TODO: Work out the item type.
            _add_items_categories(
                request, [(item, ITEM_TYPE_CATEGORY["question"], category) for item, category in changes]
            )
        elif params["action"] != "none":
            messages.error(request, _("Unknown action"))

    # Find the tab to redirect to
    redirect_url = request.POST.get("next")
    if not redirect_url:
        redirect_url = reverse("tabbed-page", kwargs={"name": "main", "tab_name": "all"})
    return HttpResponseRedirect(redirect_url)
    def get_context_data(self, tab_instance, request, **kwargs):
        question_types = self._get_category_options(**kwargs)
        # Build the table
        table = ItemTable(
            self._get_items(**kwargs),
            categories=question_types,
            exclude=self._get_columns_to_exclude(**kwargs),
            orderable=True,
            order_by=request.GET.get("sort", None),
        )
        table.paginate(per_page=kwargs.get("per_page", 25), page=request.GET.get("page", 1))

        upload_form = self._build_upload_form(tab_instance, kwargs.get("source", None))
        actions = self._build_actions_dropdown(question_types)

        # Ensure we have the assets we want
        require_assets("hid/js/automatic_file_upload.js")
        require_assets("hid/js/select_all_checkbox.js")

        # And return the context
        return {
            "add_button_for": self._get_item_type_filter(kwargs),
            "type_label": kwargs.get("label", "?"),
            "table": table,
            "upload_form": upload_form,
            "actions": actions,
            "has_categories": len(question_types) > 0,
            "next": reverse("tabbed-page", kwargs={"name": tab_instance.page.name, "tab_name": tab_instance.name}),
        }