Commit 259182c1 authored by Skia's avatar Skia

Add page properties view

parent 7b093f6f
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UserChangeForm
from django import forms from django import forms
from django.contrib.auth import logout, login, authenticate from django.contrib.auth import logout, login, authenticate
import logging import logging
...@@ -42,21 +42,47 @@ class LoginForm(AuthenticationForm): ...@@ -42,21 +42,47 @@ class LoginForm(AuthenticationForm):
params={'username': self.username_field.verbose_name}, params={'username': self.username_field.verbose_name},
) )
class PageForm(forms.ModelForm): class EditUserForm(UserChangeForm):
error_css_class = 'error'
required_css_class = 'required'
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'date_of_birth', 'groups', 'user_permissions')
class PagePropForm(forms.ModelForm):
error_css_class = 'error' error_css_class = 'error'
required_css_class = 'required' required_css_class = 'required'
parent = forms.ModelChoiceField(queryset=Page.objects.all()) parent = forms.ModelChoiceField(queryset=Page.objects.all())
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(PageForm, self).__init__(*args, **kwargs) super(PagePropForm, self).__init__(*args, **kwargs)
self.fields['parent'].required = False self.fields['parent'].required = False
class Meta: class Meta:
model = Page model = Page
fields = ['parent', 'name', 'title', 'content', ] fields = ['parent', 'name', 'owner_group', 'edit_group', 'view_group']
def save(self, commit=True):
page = super(PagePropForm, self).save(commit=False)
if commit:
page.save()
return page
class PageEditForm(forms.ModelForm):
error_css_class = 'error'
required_css_class = 'required'
def __init__(self, *args, **kwargs):
super(PageEditForm, self).__init__(*args, **kwargs)
class Meta:
model = Page
fields = ['title', 'content', ]
def save(self, commit=True): def save(self, commit=True):
page = super(PageForm, self).save(commit=False) page = super(PageEditForm, self).save(commit=False)
if commit: if commit:
page.save() page.save()
return page return page
......
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0002_page_full_name'),
]
operations = [
migrations.AlterModelOptions(
name='page',
options={'permissions': ()},
),
]
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('auth', '0006_require_contenttypes_0002'),
('core', '0003_auto_20151124_1021'),
]
operations = [
migrations.AddField(
model_name='page',
name='edit_group',
field=models.ForeignKey(null=True, to='auth.Group', related_name='editable_pages'),
),
migrations.AddField(
model_name='page',
name='owner_group',
field=models.ForeignKey(null=True, to='auth.Group', related_name='owned_pages'),
),
migrations.AddField(
model_name='page',
name='view_group',
field=models.ForeignKey(null=True, to='auth.Group', related_name='viewable_pages'),
),
]
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0004_auto_20151124_1033'),
]
operations = [
migrations.AlterField(
model_name='page',
name='edit_group',
field=models.ForeignKey(related_name='editable_pages', to='auth.Group', default=1),
),
migrations.AlterField(
model_name='page',
name='owner_group',
field=models.ForeignKey(related_name='owned_pages', to='auth.Group', default=1),
),
migrations.AlterField(
model_name='page',
name='view_group',
field=models.ForeignKey(related_name='viewable_pages', to='auth.Group', default=1),
),
]
from django.db import models from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, UserManager from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, UserManager, Group
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils import timezone from django.utils import timezone
from django.core import validators from django.core import validators
...@@ -130,11 +130,15 @@ class Page(models.Model): ...@@ -130,11 +130,15 @@ class Page(models.Model):
# playing with a Page object, use get_full_name() instead! # playing with a Page object, use get_full_name() instead!
full_name = models.CharField(_('page name'), max_length=255, blank=True) full_name = models.CharField(_('page name'), max_length=255, blank=True)
owner_group = models.ForeignKey(Group, related_name="owned_pages", default=1)
edit_group = models.ForeignKey(Group, related_name="editable_pages", default=1)
view_group = models.ForeignKey(Group, related_name="viewable_pages", default=1)
class Meta: class Meta:
unique_together = ('name', 'parent') unique_together = ('name', 'parent')
permissions = ( permissions = (
("can_edit", "Can edit the page"), #("can_edit", "Can edit the page"),
("can_view", "Can view the page"), #("can_view", "Can view the page"),
) )
@staticmethod @staticmethod
......
...@@ -11,5 +11,10 @@ Edit {{ profile.get_display_name }} ...@@ -11,5 +11,10 @@ Edit {{ profile.get_display_name }}
<h3>Edit user</h3> <h3>Edit user</h3>
<p><a href="{% url 'core:user_profile' profile.id %}">Back to profile</a></p> <p><a href="{% url 'core:user_profile' profile.id %}">Back to profile</a></p>
<p>You're editing the profile of <strong>{{ profile.get_display_name }}</strong></p> <p>You're editing the profile of <strong>{{ profile.get_display_name }}</strong></p>
<form action="{% url 'core:user_edit' profile.id %}" method="post">
{% csrf_token %}
{{ user_form }}
<p><input type="submit" value="Save!" /></p>
</form>
{% endif %} {% endif %}
{% endblock %} {% endblock %}
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<p><a href="{% url 'core:page_list' %}">Back to list</a></p> <p><a href="{% url 'core:page_list' %}">Back to list</a></p>
{% if user.is_superuser %} {% if user.is_superuser %}
<p><a href="{% url 'core:page_edit' page.get_full_name %}">Edit</a></p> <p><a href="{% url 'core:page_edit' page.get_full_name %}">Edit</a></p>
<p><a href="{% url 'core:page_prop' page.get_full_name %}">Prop</a></p>
{% endif %} {% endif %}
<p>You're seeing the page <strong>{{ page.get_display_name }}</strong></p> <p>You're seeing the page <strong>{{ page.get_display_name }}</strong></p>
<h3>{{ page.title }}</h3> <h3>{{ page.title }}</h3>
...@@ -29,12 +30,19 @@ ...@@ -29,12 +30,19 @@
</ul> </ul>
{% elif new_page %} {% elif new_page %}
<h2>{{ title }}</h2> <h2>{{ title }}</h2>
<p><a href="{% url 'core:page_edit' new_page %}">Create it?</a></p> <p><a href="{% url 'core:page_prop' new_page %}">Create it?</a></p>
{% elif page_form %} {% elif page_prop %}
<h2>Page properties</h2>
<form action="{% url 'core:page_prop' page_name=page.get_full_name %}" method="post">
{% csrf_token %}
{{ page_prop }}
<p><input type="submit" value="Save!" /></p>
</form>
{% elif page_edit %}
<h2>Edit page</h2> <h2>Edit page</h2>
<form action="{% url 'core:page_edit' page_name=page.get_full_name %}" method="post"> <form action="{% url 'core:page_edit' page_name=page.get_full_name %}" method="post">
{% csrf_token %} {% csrf_token %}
{{ page_form }} {{ page_edit }}
<p><input type="submit" value="Save!" /></p> <p><input type="submit" value="Save!" /></p>
</form> </form>
{% else %} {% else %}
......
from django.test import SimpleTestCase, Client from django.test import SimpleTestCase, Client
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib.auth.models import Group
from .models import User from .models import User
from .forms import RegisteringForm, LoginForm from .forms import RegisteringForm, LoginForm
class UserRegistrationTest(SimpleTestCase): class UserRegistrationTest(SimpleTestCase):
def setUp(self):
try:
Group.objects.create(name="root")
except:
pass
def test_register_user_form_ok(self): def test_register_user_form_ok(self):
""" """
Should register a user correctly Should register a user correctly
...@@ -209,3 +216,8 @@ class UserRegistrationTest(SimpleTestCase): ...@@ -209,3 +216,8 @@ class UserRegistrationTest(SimpleTestCase):
response = c.get(reverse('core:page', kwargs={'page_name': 'swagg'})) response = c.get(reverse('core:page', kwargs={'page_name': 'swagg'}))
self.assertTrue(response.status_code == 200) self.assertTrue(response.status_code == 200)
self.assertTrue('PAGE_NOT_FOUND' in str(response.content)) self.assertTrue('PAGE_NOT_FOUND' in str(response.content))
#TODO: many tests on the pages:
# - renaming a page
# - changing a page's parent --> check that page's children's full_name
# - changing the different groups of the page
...@@ -13,5 +13,6 @@ urlpatterns = [ ...@@ -13,5 +13,6 @@ urlpatterns = [
url(r'^page/$', views.page, name='page_list'), url(r'^page/$', views.page, name='page_list'),
url(r'^page/(?P<page_name>[a-z0-9/]*)/$', views.page, name='page'), url(r'^page/(?P<page_name>[a-z0-9/]*)/$', views.page, name='page'),
url(r'^page/(?P<page_name>[a-z0-9/]*)/edit$', views.page_edit, name='page_edit'), url(r'^page/(?P<page_name>[a-z0-9/]*)/edit$', views.page_edit, name='page_edit'),
url(r'^page/(?P<page_name>[a-z0-9/]*)/prop$', views.page_prop, name='page_prop'),
] ]
...@@ -4,7 +4,7 @@ from django.contrib.auth import logout as auth_logout ...@@ -4,7 +4,7 @@ from django.contrib.auth import logout as auth_logout
from django.db import models from django.db import models
from .models import User, Page from .models import User, Page
from .forms import RegisteringForm, LoginForm, PageForm from .forms import RegisteringForm, LoginForm, EditUserForm, PageEditForm, PagePropForm
import logging import logging
...@@ -90,6 +90,7 @@ def user_edit(request, user_id=None): ...@@ -90,6 +90,7 @@ def user_edit(request, user_id=None):
user_id = int(user_id) user_id = int(user_id)
if request.user.is_authenticated() and (request.user.pk == user_id or request.user.is_superuser): if request.user.is_authenticated() and (request.user.pk == user_id or request.user.is_superuser):
context['profile'] = get_object_or_404(User, pk=user_id) context['profile'] = get_object_or_404(User, pk=user_id)
context['user_form'] = EditUserForm(instance=context['profile']).as_p()
return render(request, "core/edit_user.html", context) return render(request, "core/edit_user.html", context)
return user(request, user_id) return user(request, user_id)
...@@ -130,7 +131,7 @@ def page_edit(request, page_name=None): ...@@ -130,7 +131,7 @@ def page_edit(request, page_name=None):
p = Page(name=name, parent=parent) p = Page(name=name, parent=parent)
# Saving page # Saving page
if request.method == 'POST': if request.method == 'POST':
f = PageForm(request.POST, instance=p) f = PageEditForm(request.POST, instance=p)
if f.is_valid(): if f.is_valid():
f.save() f.save()
context['tests'] = "PAGE_SAVED" context['tests'] = "PAGE_SAVED"
...@@ -139,8 +140,39 @@ def page_edit(request, page_name=None): ...@@ -139,8 +140,39 @@ def page_edit(request, page_name=None):
# Default: display the edit form without change # Default: display the edit form without change
else: else:
context['tests'] = "POST_NOT_RECEIVED" context['tests'] = "POST_NOT_RECEIVED"
f = PageForm(instance=p) f = PageEditForm(instance=p)
context['page'] = p context['page'] = p
context['page_form'] = f.as_p() context['page_edit'] = f.as_p()
return render(request, 'core/page.html', context) return render(request, 'core/page.html', context)
def page_prop(request, page_name=None):
"""
page_prop view, able to change a page's properties
"""
context = {'title': 'Page properties',
'page_name': page_name}
p = Page.get_page_by_full_name(page_name)
# New page
if p == None:
parent_name = '/'.join(page_name.split('/')[:-1])
name = page_name.split('/')[-1]
if parent_name == "":
p = Page(name=name)
else:
parent = Page.get_page_by_full_name(parent_name)
p = Page(name=name, parent=parent)
# Saving page
if request.method == 'POST':
f = PagePropForm(request.POST, instance=p)
if f.is_valid():
f.save()
context['tests'] = "PAGE_SAVED"
else:
context['tests'] = "PAGE_NOT_SAVED"
# Default: display the edit form without change
else:
context['tests'] = "POST_NOT_RECEIVED"
f = PagePropForm(instance=p)
context['page'] = p
context['page_prop'] = f.as_p()
return render(request, 'core/page.html', context)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment