def edit_installer(request, slug): """Display an edit form for install scripts Args: request: Django request object slug (str): installer slug Returns: Django response """ installer = get_object_or_404(Installer, slug=slug) # Handle installer deletion in a separate view if 'delete' in request.POST: return redirect( reverse('delete_installer', kwargs={'slug': installer.slug})) # Extract optional revision ID from parameters revision_id = request.GET.get('revision') try: revision_id = int(revision_id) except (ValueError, TypeError): revision_id = None draft_data = None versions = Version.objects.get_for_object(installer) for version in versions: if revision_id: # Display the revision given in the GET parameters if version.id == revision_id: draft_data = version.field_dict break else: # Display the latest revision created by the current logged in user if (version.revision.user == request.user and version.revision.date_created > installer.updated_at): draft_data = version.field_dict revision_id = version.id break if draft_data: messages.info( request, "You are viewing a draft of the installer which does not " "reflect the currently available installer. Changes will be " "published once it goes through moderation.") if 'runner_id' in draft_data: draft_data['runner'] = draft_data['runner_id'] form = InstallerEditForm(request.POST or None, instance=installer, initial=draft_data) if request.method == 'POST' and form.is_valid(): # Force the creation of a revision instead of creating a new installer with reversion.create_revision(): installer = form.save(commit=False) reversion.set_user(request.user) reversion.set_comment("[{}] {} by {} on {}".format( 'draft' if installer.draft else 'submission', slug, request.user.username, timezone.now())) reversion.add_to_revision(installer) return redirect("installer_complete", slug=installer.game.slug) return render( request, 'installers/form.html', { 'form': form, 'game': installer.game, 'new': False, 'installer': installer, 'versions': versions, 'revision_id': revision_id })
def edit_installer(request, slug): """Display an edit form for install scripts Args: request: Django request object slug (str): installer slug Returns: Django response """ installer = get_object_or_404(Installer, slug=slug) # Handle installer deletion in a separate view if "delete" in request.POST: return redirect( reverse("delete_installer", kwargs={"slug": installer.slug})) # Extract optional revision ID from parameters revision_id = request.GET.get("revision") try: revision_id = int(revision_id) except (ValueError, TypeError): revision_id = None draft_data = None versions = Version.objects.get_for_object(installer) # Reset reason when the installer is edited. installer.reason = "" for version in versions: if revision_id: # Display the revision given in the GET parameters if version.revision.id == revision_id: draft_data = version.field_dict break else: # Display the latest revision created by the current logged in user if (version.revision.user == request.user or request.user.is_staff ) and version.revision.date_created > installer.updated_at: draft_data = version.field_dict revision_id = version.revision.id break if draft_data: draft_data["reason"] = "" if "runner_id" in draft_data: draft_data["runner"] = draft_data["runner_id"] form = InstallerEditForm(request.POST or None, instance=installer, initial=draft_data) if request.method == "POST" and form.is_valid(): # Force the creation of a revision instead of creating a new installer with reversion.create_revision(): installer = form.save(commit=False) reversion.set_user(request.user) reversion.set_comment("[{}] {} by {} on {}".format( "draft" if installer.draft else "submission", slug, request.user.username, timezone.now(), )) reversion.add_to_revision(installer) if "save" in request.POST: messages.info(request, "Draft saved") return redirect("edit_installer", slug=installer.slug) messages.info(request, "Submission sent to moderation") return redirect("installer_complete", slug=installer.game.slug) if draft_data: messages.info( request, "You are viewing a draft of the installer which does not " "reflect the currently available installer. Changes will be " "published once it goes through moderation.", ) return render( request, "installers/form.html", { "form": form, "game": installer.game, "new": False, "installer": installer, "versions": versions, "revision_id": revision_id, })
def edit_installer(request, slug): """Display an edit form for install scripts Args: request: Django request object slug (str): installer slug Returns: Django response """ installer = get_object_or_404(Installer, slug=slug) # Handle installer deletion in a separate view if "delete" in request.POST: return redirect(reverse("delete_installer", kwargs={"slug": installer.slug})) # Extract optional revision ID from parameters revision_id = request.GET.get("revision") try: revision_id = int(revision_id) except (ValueError, TypeError): revision_id = None draft_data = None versions = Version.objects.get_for_object(installer) # Reset reason when the installer is edited. installer.reason = "" for version in versions: if revision_id: # Display the revision given in the GET parameters if version.revision.id == revision_id: draft_data = version.field_dict break else: # Display the latest revision created by the current logged in user if ( version.revision.user == request.user or request.user.is_staff ) and version.revision.date_created > installer.updated_at: draft_data = version.field_dict revision_id = version.revision.id break if draft_data: draft_data["reason"] = "" if "runner_id" in draft_data: draft_data["runner"] = draft_data["runner_id"] form = InstallerEditForm( request.POST or None, instance=installer, initial=draft_data ) if request.method == "POST" and form.is_valid(): # Force the creation of a revision instead of creating a new installer with reversion.create_revision(): installer = form.save(commit=False) reversion.set_user(request.user) reversion.set_comment( "[{}] {} by {} on {}".format( "draft" if installer.draft else "submission", slug, request.user.username, timezone.now(), ) ) reversion.add_to_revision(installer) if "save" in request.POST: messages.info(request, "Draft saved") return redirect("edit_installer", slug=installer.slug) messages.info(request, "Submission sent to moderation") return redirect("installer_complete", slug=installer.game.slug) if draft_data: messages.info( request, "You are viewing a draft of the installer which does not " "reflect the currently available installer. Changes will be " "published once it goes through moderation.", ) return render( request, "installers/form.html", { "form": form, "game": installer.game, "new": False, "installer": installer, "versions": versions, "revision_id": revision_id, } )