Skip to content

Commit

Permalink
TRAC #7528 Adds challenge update form
Browse files Browse the repository at this point in the history
  • Loading branch information
jmsmkn committed Mar 10, 2018
1 parent fdef307 commit 2137aa4
Show file tree
Hide file tree
Showing 10 changed files with 173 additions and 38 deletions.
101 changes: 94 additions & 7 deletions app/challenges/forms.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,106 @@
from crispy_forms.bootstrap import TabHolder, Tab
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
from crispy_forms.layout import Submit, Layout, ButtonHolder
from django import forms

from comicmodels.models import ComicSite


class ChallengeForm(forms.ModelForm):
class ChallengeCreateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ChallengeForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.layout.append(Submit('save', 'Save'))

class Meta:
model = ComicSite
fields = ['short_name',
'description',
'require_participant_review',
'use_evaluation']
fields = [
'short_name',
'description',
'require_participant_review',
'use_evaluation',
]


class ChallengeUpdateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.layout = Layout(
TabHolder(
Tab(
'Information',
'title',
'description',
'logo',
),
Tab(
'Layout',
'header_image',
'skin',
'disclaimer',
),
Tab(
'Metadata',
'workshop_date',
'event_name',
'event_url',
'is_open_for_submissions',
'submission_page_name',
'number_of_submissions',
'last_submission_date',
'offers_data_download',
'number_of_downloads',
'publication_url',
'publication_journal_name',
),
Tab(
'Users',
'use_registration_page',
'require_participant_review',
'registration_page_text',
),
Tab(
'Visibility',
'hidden',
'hide_signin',
'hide_footer',
),
Tab(
'Automated Evaluation',
'use_evaluation',
),
),
ButtonHolder(
Submit('save', 'Save'),
)
)

class Meta:
model = ComicSite
fields = [
'title',
'description',
'logo',
'header_image',
'skin',
'disclaimer',
'workshop_date',
'event_name',
'event_url',
'is_open_for_submissions',
'submission_page_name',
'number_of_submissions',
'last_submission_date',
'offers_data_download',
'number_of_downloads',
'publication_url',
'publication_journal_name',
'use_registration_page',
'require_participant_review',
'registration_page_text',
'hidden',
'hide_signin',
'hide_footer',
'use_evaluation',
]
8 changes: 6 additions & 2 deletions app/challenges/templates/comicmodels/comicsite_form.html
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
{% extends "mainpage.html" %}
{% load crispy_forms_tags %}
{% load static from staticfiles %}

{% block pageName %}New Challenge{% endblock %}

{% block pagecontent %}
{% block contentTitle %}
<h2>Create A New Challenge</h2>

<p>
Please fill out this form if you would like to set up your own challenge.
</p>
{% endblock %}

{% block pagecontent %}
{% crispy form %}

<script type="text/javascript" src="{% static "js/unsavedform.js" %}"></script>
{% endblock %}
5 changes: 5 additions & 0 deletions app/challenges/templates/comicmodels/comicsite_update.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{% extends 'comicmodels/comicsite_form.html' %}

{% block contentTitle %}
<h2>Update {{ site.short_name }}</h2>
{% endblock %}
4 changes: 3 additions & 1 deletion app/challenges/urls.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from django.conf.urls import url

from challenges.views import ChallengeCreate, ChallengeList
from challenges.views import ChallengeCreate, ChallengeList, ChallengeUpdate

urlpatterns = [
url(r'^my-challenges/$', ChallengeList.as_view(), name='list'),
url(r'^create/$', ChallengeCreate.as_view(), name='create'),
url(r'^(?P<challenge_short_name>[\w-]+)/update/$',
ChallengeUpdate.as_view(), name='update')
]
21 changes: 17 additions & 4 deletions app/challenges/views.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
from auth_mixins import LoginRequiredMixin
from django.contrib.messages.views import SuccessMessageMixin
from django.db.models import Q
from django.views.generic import CreateView, ListView
from django.views.generic import CreateView, ListView, UpdateView

from challenges.forms import ChallengeForm
from challenges.forms import ChallengeCreateForm, ChallengeUpdateForm
from comicmodels.models import ComicSite
from comicsite.permissions.mixins import UserIsChallengeAdminMixin


class ChallengeCreate(LoginRequiredMixin, CreateView):
class ChallengeCreate(LoginRequiredMixin, SuccessMessageMixin, CreateView):
model = ComicSite
form_class = ChallengeForm
form_class = ChallengeCreateForm
success_message = 'Challenge successfully created'

def form_valid(self, form):
form.instance.creator = self.request.user
Expand All @@ -28,3 +31,13 @@ def get_queryset(self):
)

return queryset


class ChallengeUpdate(UserIsChallengeAdminMixin, SuccessMessageMixin,
UpdateView):
model = ComicSite
slug_field = 'short_name'
slug_url_kwarg = 'challenge_short_name'
form_class = ChallengeUpdateForm
success_message = 'Challenge successfully updated'
template_name_suffix = '_update'
38 changes: 18 additions & 20 deletions app/comicsite/templates/mainpage.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,30 +30,28 @@



{% block content %}
{% block pagecontent %}
{% block pagecontent %}

{% if site.disclaimer %}
<div class="disclaimer"
style=" background-color: #FDFDD4; border: 1px solid black; clear: right; font-size: x-small; margin: 10px; padding-left: 10px;">
{% if site.disclaimer %}
<div class="disclaimer"
style=" background-color: #FDFDD4; border: 1px solid black; clear: right; font-size: x-small; margin: 10px; padding-left: 10px;">

<p>{% autoescape off %}
{{ site.disclaimer }}{% endautoescape %}</p>
</div>
{% endif %}
<div>{{ currentpage.rawHTML }}</div>

<br/>
<p>{% autoescape off %}
{{ site.disclaimer }}{% endautoescape %}</p>
</div>
{% endif %}
<div>{{ currentpage.rawHTML }}</div>

{% get_obj_perms user for site as "site_perms" %}
{% if "change_comicsite" in site_perms %}
<br/>

<a class="editPageLink"
href="{% url 'pages:update' currentpage.comicsite.short_name currentpage.title %}">
Edit this page
</a>
{% endif %}
{% get_obj_perms user for site as "site_perms" %}
{% if "change_comicsite" in site_perms %}

{% endblock %}
<a class="editPageLink"
href="{% url 'pages:update' currentpage.comicsite.short_name currentpage.title %}">
Edit this page
</a>
{% endif %}

{% endblock %}

2 changes: 1 addition & 1 deletion app/comicsite/templates/site.html
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
class="caret"></span></a>
<ul class="dropdown-menu">
<li>
<a href="{% url 'admin:index' %}">Challenge</a>
<a href="{% url 'challenges:update' site.short_name %}">Challenge</a>
</li>
<li>
<a href="{% url 'pages:list' site.short_name %}">Pages</a>
Expand Down
3 changes: 3 additions & 0 deletions app/pages/templates/comicmodels/page_form.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{% extends "site.html" %}
{% load crispy from crispy_forms_tags %}
{% load static from staticfiles %}

{% block pagecontent %}

Expand All @@ -16,4 +17,6 @@ <h2>
{{ form | crispy }}
<input type="submit" value="Save" class="btn btn-primary"/>
</form>

<script type="text/javascript" src="{% static "js/unsavedform.js" %}"></script>
{% endblock %}
15 changes: 15 additions & 0 deletions app/static/js/unsavedform.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
$(document).ready(function () {
var unsaved = false;

$(":input").change(function () {
unsaved = true;
});

function unloadPage() {
if (unsaved) {
return "You have unsaved changes on this page. Do you want to leave this page and discard your changes or stay on this page?";
}
}

window.onbeforeunload = unloadPage;
});
14 changes: 11 additions & 3 deletions app/tests/challenges_tests/test_permissions.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest

from comicsite.core.urlresolvers import reverse
from tests.utils import validate_logged_in_view
from tests.utils import validate_logged_in_view, validate_admin_only_view


@pytest.mark.django_db
Expand All @@ -12,10 +12,18 @@
'challenges:list',
]
)
def test_challenge_list_permissions(view, client, ChallengeSet):

def test_challenge_logged_in_permissions(view, client, ChallengeSet):
validate_logged_in_view(
url=reverse(view),
challenge_set=ChallengeSet,
client=client,
)


@pytest.mark.django_db
def test_challenge_update_permissions(client, TwoChallengeSets):
validate_admin_only_view(
two_challenge_set=TwoChallengeSets,
viewname='challenges:update',
client=client,
)

0 comments on commit 2137aa4

Please sign in to comment.