mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 06:03:20 +00:00
Add page properties view
This commit is contained in:
parent
7b093f6fbd
commit
259182c1c4
@ -1,4 +1,4 @@
|
|||||||
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):
|
|||||||
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):
|
def save(self, commit=True):
|
||||||
page = super(PageForm, self).save(commit=False)
|
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):
|
||||||
|
page = super(PageEditForm, self).save(commit=False)
|
||||||
if commit:
|
if commit:
|
||||||
page.save()
|
page.save()
|
||||||
return page
|
return page
|
||||||
|
18
core/migrations/0003_auto_20151124_1021.py
Normal file
18
core/migrations/0003_auto_20151124_1021.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# -*- 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': ()},
|
||||||
|
),
|
||||||
|
]
|
30
core/migrations/0004_auto_20151124_1033.py
Normal file
30
core/migrations/0004_auto_20151124_1033.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# -*- 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'),
|
||||||
|
),
|
||||||
|
]
|
29
core/migrations/0005_auto_20151124_1219.py
Normal file
29
core/migrations/0005_auto_20151124_1219.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# -*- 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),
|
||||||
|
),
|
||||||
|
]
|
@ -1,5 +1,5 @@
|
|||||||
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):
|
|||||||
# 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 }}
|
|||||||
<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 @@
|
|||||||
<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 @@
|
|||||||
</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 %}
|
||||||
|
@ -1,10 +1,17 @@
|
|||||||
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):
|
|||||||
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 = [
|
|||||||
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
|
|||||||
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):
|
|||||||
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):
|
|||||||
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):
|
|||||||
# 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)
|
||||||
|
Loading…
Reference in New Issue
Block a user