Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
AE UTBM
Sith
Commits
259182c1
Commit
259182c1
authored
Nov 24, 2015
by
Skia
Browse files
Add page properties view
parent
7b093f6f
Changes
10
Show whitespace changes
Inline
Side-by-side
core/forms.py
View file @
259182c1
from
django.contrib.auth.forms
import
UserCreationForm
,
AuthenticationForm
from
django.contrib.auth.forms
import
UserCreationForm
,
AuthenticationForm
,
UserChangeForm
from
django
import
forms
from
django.contrib.auth
import
logout
,
login
,
authenticate
import
logging
...
...
@@ -42,21 +42,47 @@ class LoginForm(AuthenticationForm):
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'
required_css_class
=
'required'
parent
=
forms
.
ModelChoiceField
(
queryset
=
Page
.
objects
.
all
())
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
(
PageForm
,
self
).
__init__
(
*
args
,
**
kwargs
)
super
(
Page
Prop
Form
,
self
).
__init__
(
*
args
,
**
kwargs
)
self
.
fields
[
'parent'
].
required
=
False
class
Meta
:
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
):
page
=
super
(
PageForm
,
self
).
save
(
commit
=
False
)
page
=
super
(
Page
Edit
Form
,
self
).
save
(
commit
=
False
)
if
commit
:
page
.
save
()
return
page
...
...
core/migrations/0003_auto_20151124_1021.py
0 → 100644
View file @
259182c1
# -*- 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'
:
()},
),
]
core/migrations/0004_auto_20151124_1033.py
0 → 100644
View file @
259182c1
# -*- 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'
),
),
]
core/migrations/0005_auto_20151124_1219.py
0 → 100644
View file @
259182c1
# -*- 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
),
),
]
core/models.py
View file @
259182c1
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
import
timezone
from
django.core
import
validators
...
...
@@ -130,11 +130,15 @@ class Page(models.Model):
# playing with a Page object, use get_full_name() instead!
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
:
unique_together
=
(
'name'
,
'parent'
)
permissions
=
(
(
"can_edit"
,
"Can edit the page"
),
(
"can_view"
,
"Can view the page"
),
#
("can_edit", "Can edit the page"),
#
("can_view", "Can view the page"),
)
@
staticmethod
...
...
core/templates/core/edit_user.html
View file @
259182c1
...
...
@@ -11,5 +11,10 @@ Edit {{ profile.get_display_name }}
<h3>
Edit user
</h3>
<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>
<form
action=
"{% url 'core:user_edit' profile.id %}"
method=
"post"
>
{% csrf_token %}
{{ user_form }}
<p><input
type=
"submit"
value=
"Save!"
/></p>
</form>
{% endif %}
{% endblock %}
core/templates/core/page.html
View file @
259182c1
...
...
@@ -16,6 +16,7 @@
<p><a
href=
"{% url 'core:page_list' %}"
>
Back to list
</a></p>
{% if user.is_superuser %}
<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 %}
<p>
You're seeing the page
<strong>
{{ page.get_display_name }}
</strong></p>
<h3>
{{ page.title }}
</h3>
...
...
@@ -29,12 +30,19 @@
</ul>
{% elif new_page %}
<h2>
{{ title }}
</h2>
<p><a
href=
"{% url 'core:page_edit' new_page %}"
>
Create it?
</a></p>
{% elif page_form %}
<p><a
href=
"{% url 'core:page_prop' new_page %}"
>
Create it?
</a></p>
{% 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>
<form
action=
"{% url 'core:page_edit' page_name=page.get_full_name %}"
method=
"post"
>
{% csrf_token %}
{{ page_
form
}}
{{ page_
edit
}}
<p><input
type=
"submit"
value=
"Save!"
/></p>
</form>
{% else %}
...
...
core/tests.py
View file @
259182c1
from
django.test
import
SimpleTestCase
,
Client
from
django.core.urlresolvers
import
reverse
from
django.contrib.auth.models
import
Group
from
.models
import
User
from
.forms
import
RegisteringForm
,
LoginForm
class
UserRegistrationTest
(
SimpleTestCase
):
def
setUp
(
self
):
try
:
Group
.
objects
.
create
(
name
=
"root"
)
except
:
pass
def
test_register_user_form_ok
(
self
):
"""
Should register a user correctly
...
...
@@ -209,3 +216,8 @@ class UserRegistrationTest(SimpleTestCase):
response
=
c
.
get
(
reverse
(
'core:page'
,
kwargs
=
{
'page_name'
:
'swagg'
}))
self
.
assertTrue
(
response
.
status_code
==
200
)
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
core/urls.py
View file @
259182c1
...
...
@@ -13,5 +13,6 @@ urlpatterns = [
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/]*)/edit$'
,
views
.
page_edit
,
name
=
'page_edit'
),
url
(
r
'^page/(?P<page_name>[a-z0-9/]*)/prop$'
,
views
.
page_prop
,
name
=
'page_prop'
),
]
core/views.py
View file @
259182c1
...
...
@@ -4,7 +4,7 @@ from django.contrib.auth import logout as auth_logout
from
django.db
import
models
from
.models
import
User
,
Page
from
.forms
import
RegisteringForm
,
LoginForm
,
Page
Form
from
.forms
import
RegisteringForm
,
LoginForm
,
EditUserForm
,
PageEditForm
,
PageProp
Form
import
logging
...
...
@@ -90,6 +90,7 @@ def user_edit(request, user_id=None):
user_id
=
int
(
user_id
)
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
[
'user_form'
]
=
EditUserForm
(
instance
=
context
[
'profile'
]).
as_p
()
return
render
(
request
,
"core/edit_user.html"
,
context
)
return
user
(
request
,
user_id
)
...
...
@@ -130,7 +131,7 @@ def page_edit(request, page_name=None):
p
=
Page
(
name
=
name
,
parent
=
parent
)
# Saving page
if
request
.
method
==
'POST'
:
f
=
PageForm
(
request
.
POST
,
instance
=
p
)
f
=
Page
Edit
Form
(
request
.
POST
,
instance
=
p
)
if
f
.
is_valid
():
f
.
save
()
context
[
'tests'
]
=
"PAGE_SAVED"
...
...
@@ -139,8 +140,39 @@ def page_edit(request, page_name=None):
# Default: display the edit form without change
else
:
context
[
'tests'
]
=
"POST_NOT_RECEIVED"
f
=
PageForm
(
instance
=
p
)
f
=
Page
Edit
Form
(
instance
=
p
)
context
[
'page'
]
=
p
context
[
'page_
form
'
]
=
f
.
as_p
()
context
[
'page_
edit
'
]
=
f
.
as_p
()
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
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment