Skip to content

Commit

Permalink
Add form handler entry delete
Browse files Browse the repository at this point in the history
  • Loading branch information
barseghyanartur committed Jul 9, 2022
1 parent d7dc3b3 commit a9dfc83
Show file tree
Hide file tree
Showing 4 changed files with 203 additions and 9 deletions.
10 changes: 10 additions & 0 deletions src/fobi/permissions/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"DeleteFormElementEntryPermission",
"AddFormHandlerEntryPermission",
"EditFormHandlerEntryPermission",
"DeleteFormHandlerEntryPermission",
)


Expand Down Expand Up @@ -113,3 +114,12 @@ def has_permission(self, request, view) -> bool:
return login_required(request) and permissions_required_func(
edit_form_handler_entry_permission
)(request.user)


class DeleteFormHandlerEntryPermission(BasePermission):
"""Permission to delete form handler entries."""

def has_permission(self, request, view) -> bool:
return login_required(request) and permissions_required_func(
delete_form_handler_entry_permission
)(request.user)
8 changes: 6 additions & 2 deletions src/fobi/urls/class_based/edit.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
EditFormElementEntryView,
DeleteFormElementEntryView,
AddFormHandlerEntryView,
EditFormHandlerEntryView,
DeleteFormHandlerEntryView,
)

__title__ = 'fobi.urls.class_based.edit'
Expand Down Expand Up @@ -122,12 +124,14 @@

# Edit form handler entry
url(_(r'^forms/handlers/edit/(?P<form_handler_entry_id>\d+)/$'),
edit_form_handler_entry,
# view=edit_form_handler_entry,
view=EditFormHandlerEntryView.as_view(),
name='fobi.edit_form_handler_entry'),

# Delete form handler entry
url(_(r'^forms/handlers/delete/(?P<form_handler_entry_id>\d+)/$'),
delete_form_handler_entry,
# view=delete_form_handler_entry,
view=DeleteFormHandlerEntryView.as_view(),
name='fobi.delete_form_handler_entry'),

# ***********************************************************************
Expand Down
187 changes: 184 additions & 3 deletions src/fobi/views/class_based.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
DeleteFormElementEntryPermission,
AddFormHandlerEntryPermission,
EditFormHandlerEntryPermission,
DeleteFormHandlerEntryPermission,
)
from ..settings import DEBUG, GET_PARAM_INITIAL_DATA, SORT_PLUGINS_BY_VALUE
from ..utils import (
Expand All @@ -76,6 +77,8 @@
"EditFormElementEntryView",
"DeleteFormElementEntryView",
"AddFormHandlerEntryView",
"EditFormHandlerEntryView",
"DeleteFormHandlerEntryView",
)

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -827,7 +830,6 @@ def get_essential_objects(
form_entry,
form_element_entry_id,
form_element_plugin,
form_element_plugin,
form_element_plugin_form_cls,
obj,
)
Expand Down Expand Up @@ -862,7 +864,6 @@ def get(self, request, *args, **kwargs):
form_entry,
form_element_entry_id,
form_element_plugin,
form_element_plugin,
form_element_plugin_form_cls,
obj,
) = self.get_essential_objects(
Expand Down Expand Up @@ -901,7 +902,6 @@ def post(self, request, *args, **kwargs):
form_entry,
form_element_entry_id,
form_element_plugin,
form_element_plugin,
form_element_plugin_form_cls,
obj,
) = self.get_essential_objects(
Expand Down Expand Up @@ -1204,3 +1204,184 @@ def post(self, request, *args, **kwargs):
# *****************************************************************************
# **************************** Edit form handler entry ************************
# *****************************************************************************


class EditFormHandlerEntryView(PermissionMixin, UpdateView):
"""Edit form handler entry view."""

template_name = None
form_class = None
theme = None
pk_url_kwarg = "form_handler_entry_id"
permission_classes = (EditFormHandlerEntryPermission,)

def _get_queryset(self, request):
"""Get queryset."""
# TODO: The form element entry has also `form_entry__user` in
# `seleect_related`. Find out if that something that could
# be also be applied here to improve the performance.
return FormHandlerEntry._default_manager \
.select_related('form_entry') \
.filter(form_entry__user__pk=request.user.pk)

def get_essential_objects(
self,
form_handler_entry_id,
request,
):
"""Get essential objects."""
try:
obj = self.get_object(queryset=self._get_queryset(request))
except ObjectDoesNotExist as err:
raise Http404(_("Form element entry not found."))

form_entry = obj.form_entry
form_handler_plugin = obj.get_plugin(request=request)
form_handler_plugin.request = request

form_handler_plugin_form_cls = form_handler_plugin.get_form()

return (
form_entry,
form_handler_entry_id,
form_handler_plugin,
form_handler_plugin_form_cls,
obj,
)

def get_context_data(self, **kwargs):
"""Get context data."""
context = super(EditFormHandlerEntryView, self).get_context_data(**kwargs)

if not self.theme:
theme = get_theme(request=self.request, as_instance=True)
else:
theme = self.theme

if theme:
context.update({"fobi_theme": theme})
return context

def get_template_names(self):
"""Get template names."""
template_name = self.template_name
if not template_name:
if not self.theme:
theme = get_theme(request=self.request, as_instance=True)
else:
theme = self.theme
template_name = theme.edit_form_handler_entry_template
return [template_name]

def get(self, request, *args, **kwargs):
"""Handle GET requests: instantiate a blank version of the form."""
(
form_entry,
form_handler_entry_id,
form_handler_plugin,
form_handler_plugin_form_cls,
obj,
) = self.get_essential_objects(
self.kwargs.get("form_handler_entry_id"),
self.request,
)
self.object = obj
form = None

if not form_handler_plugin_form_cls:
messages.info(
request,
_('The form handler plugin "{0}" is not '
'configurable!').format(form_handler_plugin.name)
)
return redirect('fobi.edit_form_entry', form_entry_id=form_entry.pk)

else:
form = form_handler_plugin.get_initialised_edit_form_or_404()

return self.render_to_response(
self.get_context_data(
form=form,
form_entry=form_entry,
form_handler_plugin=form_handler_plugin,
)
)

def post(self, request, *args, **kwargs):
"""
Handle POST requests: instantiate a form instance with the passed
POST variables and then check if it's valid.
"""
self.object = None
(
form_entry,
form_handler_entry_id,
form_handler_plugin,
form_handler_plugin_form_cls,
obj,
) = self.get_essential_objects(
self.kwargs.get("form_handler_entry_id"),
self.request,
)
self.object = obj

if not form_handler_plugin_form_cls:
messages.info(
request,
_('The form handler plugin "{0}" is not '
'configurable!').format(form_handler_plugin.name)
)
return redirect('fobi.edit_form_entry', form_entry_id=form_entry.pk)

form = form_handler_plugin.get_initialised_edit_form_or_404(
data=request.POST,
files=request.FILES
)

if form.is_valid():
# Saving the plugin form data.
form.save_plugin_data(request=request)

# Getting the plugin data.
obj.plugin_data = form.get_plugin_data(request=request)

# Save the object.
obj.save()

messages.info(
request,
_('The form handler plugin "{0}" was edited '
'successfully.').format(form_handler_plugin.name)
)

return redirect(
"{0}?active_tab=tab-form-handlers".format(
reverse_lazy(
'fobi.edit_form_entry',
kwargs={'form_entry_id': form_entry.pk}
)
)
)

return self.render_to_response(
self.get_context_data(
form=form,
form_entry=form_entry,
form_handler_plugin=form_handler_plugin,
)
)

# *****************************************************************************
# **************************** Delete form handler entry **********************
# *****************************************************************************


class DeleteFormHandlerEntryView(AbstractDeletePluginEntryView):
"""Delete form handler entry."""

model = FormHandlerEntry
permission_classes = (DeleteFormHandlerEntryPermission,)
pk_url_kwarg = "form_handler_entry_id"
get_user_plugin_uids_func = get_user_form_handler_plugin_uids
message = _('The form handler plugin "{0}" was deleted successfully.')
html_anchor = '?active_tab=tab-form-handlers'
7 changes: 3 additions & 4 deletions src/fobi/views/function_based.py
Original file line number Diff line number Diff line change
Expand Up @@ -1032,18 +1032,17 @@ def edit_form_handler_entry(request,
raise Http404(gettext("Form handler entry not found."))

form_entry = obj.form_entry

form_handler_plugin = obj.get_plugin(request=request)
form_handler_plugin.request = request

FormHandlerPluginForm = form_handler_plugin.get_form()
form_handler_plugin_form_cls = form_handler_plugin.get_form()
form = None

if not FormHandlerPluginForm:
if not form_handler_plugin_form_cls:
messages.info(
request,
gettext('The form handler plugin "{0}" is not '
'configurable!').format(form_handler_plugin.name)
'configurable!').format(form_handler_plugin.name)
)
return redirect('fobi.edit_form_entry', form_entry_id=form_entry.pk)

Expand Down

0 comments on commit a9dfc83

Please sign in to comment.