diff --git a/core/models.py b/core/models.py
index 7c480e28..5336a3e1 100644
--- a/core/models.py
+++ b/core/models.py
@@ -213,7 +213,7 @@ class User(AbstractBaseUser, PermissionsMixin):
if hasattr(obj, "is_owned_by") and obj.is_owned_by(self):
return True
if hasattr(obj, "owner_group") and self.is_in_group(obj.owner_group.name):
- return False
+ return True
if self.is_superuser or self.is_in_group(settings.SITH_GROUPS['root']['name']):
return True
return False
diff --git a/core/templates/core/page.jinja b/core/templates/core/page.jinja
index b421fdd8..ac3021eb 100644
--- a/core/templates/core/page.jinja
+++ b/core/templates/core/page.jinja
@@ -5,6 +5,8 @@
{{ page.get_display_name() }}
{% elif page_list %}
Page list
+ {% elif new_page %}
+ Create page
{% else %}
Not found
{% endif %}
@@ -16,6 +18,6 @@
{% endblock %}
{% else %}
Page does not exist
- Create it?
+ Create it?
{% endif %}
{% endblock %}
diff --git a/core/templates/core/page_detail.jinja b/core/templates/core/page_detail.jinja
index 6ca0e222..889698bf 100644
--- a/core/templates/core/page_detail.jinja
+++ b/core/templates/core/page_detail.jinja
@@ -3,10 +3,10 @@
{% block page %}
Page
Back to list
- {% if can_edit %}
+ {% if can_edit(page, user) %}
Edit
{% endif %}
- {% if can_edit_prop %}
+ {% if can_edit_prop(page, user) %}
Prop
{% endif %}
You're seeing the page {{ page.get_display_name() }} -
diff --git a/core/tests.py b/core/tests.py
index e8fb6bc9..12166b29 100644
--- a/core/tests.py
+++ b/core/tests.py
@@ -181,7 +181,7 @@ class PageHandlingTest(TestCase):
"""
Should create a page correctly
"""
- self.client.post(reverse('core:page_prop', kwargs={'page_name': 'guy'}), {
+ self.client.post(reverse('core:page_new'), {
'parent': '',
'name': 'guy',
'owner_group': 1,
@@ -194,12 +194,12 @@ class PageHandlingTest(TestCase):
"""
Should create a page correctly
"""
- self.client.post(reverse('core:page_prop', kwargs={'page_name': 'guy'}), {
+ self.client.post(reverse('core:page_new'), {
'parent': '',
'name': 'guy',
'owner_group': '1',
})
- response = self.client.post(reverse('core:page_prop', kwargs={'page_name': 'guy/bibou'}), {
+ response = self.client.post(reverse('core:page_new'), {
'parent': '1',
'name': 'bibou',
'owner_group': '1',
@@ -235,14 +235,13 @@ class PageHandlingTest(TestCase):
"""
response = self.client.get(reverse('core:page', kwargs={'page_name': 'swagg'}))
self.assertTrue(response.status_code == 200)
- self.assertTrue('Create it?' in str(response.content))
-
+ self.assertTrue('Create it?' in str(response.content))
def test_create_page_markdown_safe(self):
"""
Should format the markdown and escape html correctly
"""
- self.client.post(reverse('core:page_prop', kwargs={'page_name': 'guy'}), {
+ self.client.post(reverse('core:page_new'), {
'parent': '',
'name': 'guy',
'owner_group': '1',
diff --git a/core/urls.py b/core/urls.py
index e07609ac..5d1c8b89 100644
--- a/core/urls.py
+++ b/core/urls.py
@@ -31,6 +31,7 @@ urlpatterns = [
# Page views
url(r'^page/$', PageListView.as_view(), name='page_list'),
+ url(r'^page/create$', PageCreateView.as_view(), name='page_new'),
url(r'^page/(?P[a-z0-9/-_]*)/edit$', PageEditView.as_view(), name='page_edit'),
url(r'^page/(?P[a-z0-9/-_]*)/prop$', PagePropView.as_view(), name='page_prop'),
url(r'^page/(?P[a-z0-9/-_]*)/hist$', PageHistView.as_view(), name='page_hist'),
diff --git a/core/views/page.py b/core/views/page.py
index 28c85008..fc164047 100644
--- a/core/views/page.py
+++ b/core/views/page.py
@@ -1,9 +1,11 @@
# This file contains all the views that concern the page model
from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic import ListView, DetailView
-from django.views.generic.edit import UpdateView
+from django.views.generic.edit import UpdateView, CreateView
from django.contrib.auth.decorators import login_required, permission_required
from django.utils.decorators import method_decorator
+from django.forms.models import modelform_factory
+from django.forms import CheckboxSelectMultiple
from core.models import Page, PageRev, LockError
from core.views.forms import PagePropForm
@@ -29,11 +31,6 @@ class PageView(CanViewMixin, DetailView):
context = super(PageView, self).get_context_data(**kwargs)
if "page" not in context.keys():
context['new_page'] = self.kwargs['page_name']
- if self.request.user.is_owner(self.object):
- context['can_edit_prop'] = True
- if self.request.user.can_edit(self.object):
- context['can_edit'] = True
-
return context
class PageHistView(CanViewMixin, DetailView):
@@ -66,36 +63,67 @@ class PageRevView(CanViewMixin, DetailView):
context['new_page'] = self.kwargs['page_name']
return context
-class PagePropView(CanEditPropMixin, UpdateView):
+class PageCreateView(CanEditPropMixin, CreateView):
model = Page
- form_class = PagePropForm
+ form_class = modelform_factory(Page,
+ fields = ['parent', 'name', 'owner_group', 'edit_groups', 'view_groups', ],
+ widgets={
+ 'edit_groups':CheckboxSelectMultiple,
+ 'view_groups':CheckboxSelectMultiple,
+ })
template_name = 'core/page_prop.jinja'
- def get_object(self):
- page_name = self.kwargs['page_name']
- p = Page.get_page_by_full_name(page_name)
- # Create the page if it does not exists
- if p == None:
+ def get_initial(self):
+ init = {}
+ if 'page' in self.request.GET.keys():
+ page_name = self.request.GET['page']
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)
- self.page = p
+ parent = Page.get_page_by_full_name(parent_name)
+ if parent is not None:
+ init['parent'] = parent.id
+ init['name'] = page_name.split('/')[-1]
+ return init
+
+ def get_context_data(self, **kwargs):
+ context = super(PageCreateView, self).get_context_data(**kwargs)
+ print(context)
+ context['new_page'] = True
+ return context
+
+ def form_valid(self, form):
+ form.instance.set_lock(self.request.user)
+ return super(PageCreateView, self).form_valid(form)
+
+class PagePropView(CanEditPropMixin, UpdateView):
+ model = Page
+ form_class = modelform_factory(Page,
+ fields = ['parent', 'name', 'owner_group', 'edit_groups', 'view_groups', ],
+ widgets={
+ 'edit_groups':CheckboxSelectMultiple,
+ 'view_groups':CheckboxSelectMultiple,
+ })
+ template_name = 'core/page_prop.jinja'
+ slug_field = '_full_name'
+ slug_url_kwarg = 'page_name'
+
+ def get_object(self):
+ o = super(PagePropView, self).get_object()
+ # Create the page if it does not exists
+ #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)
+ self.page = o
try:
self.page.set_lock_recursive(self.request.user)
except LockError as e:
raise e
return self.page
- def get_context_data(self, **kwargs):
- context = super(PagePropView, self).get_context_data(**kwargs)
- if "page" not in context.keys():
- context['new_page'] = self.kwargs['page_name']
- return context
-
class PageEditView(CanEditMixin, UpdateView):
model = PageRev
fields = ['title', 'content',]