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
1dc1a0a4
Commit
1dc1a0a4
authored
Dec 23, 2016
by
Skia
🤘
Browse files
Add news moderation tool
parent
c95e7565
Pipeline
#609
passed with stage
in 2 minutes and 32 seconds
Changes
12
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
club/templates/club/club_tools.jinja
View file @
1dc1a0a4
...
...
@@ -3,6 +3,10 @@
{%
block
content
%}
<h3>
{%
trans
%}
Club tools
{%
endtrans
%}
</h3>
<div>
<h4>
{%
trans
%}
Communication:
{%
endtrans
%}
</h4>
<ul>
<li>
<a
href=
"
{{
url
(
'com:news_new'
)
}}
?club=
{{
object.id
}}
"
>
{%
trans
%}
Create a news
{%
endtrans
%}
</a></li>
</ul>
<h4>
{%
trans
%}
Counters:
{%
endtrans
%}
</h4>
<ul>
{%
if
object.unix_name
==
settings.SITH_LAUNDERETTE_MANAGER
[
'unix_name'
]
%}
...
...
com/migrations/0003_auto_20161223_1548.py
0 → 100644
View file @
1dc1a0a4
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
from
django.conf
import
settings
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'com'
,
'0002_news_newsdate'
),
]
operations
=
[
migrations
.
RenameField
(
model_name
=
'news'
,
old_name
=
'owner'
,
new_name
=
'author'
,
),
migrations
.
AlterField
(
model_name
=
'news'
,
name
=
'moderator'
,
field
=
models
.
ForeignKey
(
null
=
True
,
to
=
settings
.
AUTH_USER_MODEL
,
related_name
=
'moderated_news'
,
verbose_name
=
'moderator'
),
),
]
com/migrations/0004_auto_20161223_1548.py
0 → 100644
View file @
1dc1a0a4
# -*- coding: utf-8 -*-
from
__future__
import
unicode_literals
from
django.db
import
migrations
,
models
from
django.conf
import
settings
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'com'
,
'0003_auto_20161223_1548'
),
]
operations
=
[
migrations
.
AlterField
(
model_name
=
'news'
,
name
=
'author'
,
field
=
models
.
ForeignKey
(
to
=
settings
.
AUTH_USER_MODEL
,
related_name
=
'owned_news'
,
verbose_name
=
'author'
),
),
]
com/models.py
View file @
1dc1a0a4
...
...
@@ -32,9 +32,18 @@ class News(models.Model):
content
=
models
.
TextField
(
_
(
"content"
))
type
=
models
.
CharField
(
_
(
"type"
),
max_length
=
16
,
choices
=
NEWS_TYPES
,
default
=
"EVENT"
)
club
=
models
.
ForeignKey
(
Club
,
related_name
=
"news"
,
verbose_name
=
_
(
"club"
))
owne
r
=
models
.
ForeignKey
(
User
,
related_name
=
"owned_news"
,
verbose_name
=
_
(
"
owne
r"
))
autho
r
=
models
.
ForeignKey
(
User
,
related_name
=
"owned_news"
,
verbose_name
=
_
(
"
autho
r"
))
is_moderated
=
models
.
BooleanField
(
_
(
"is moderated"
),
default
=
False
)
moderator
=
models
.
ForeignKey
(
User
,
related_name
=
"moderated_news"
,
verbose_name
=
_
(
"owner"
),
null
=
True
)
moderator
=
models
.
ForeignKey
(
User
,
related_name
=
"moderated_news"
,
verbose_name
=
_
(
"moderator"
),
null
=
True
)
def
is_owned_by
(
self
,
user
):
return
user
.
is_in_group
(
settings
.
SITH_GROUP_COM_ADMIN_ID
)
or
user
==
self
.
author
def
can_be_edited_by
(
self
,
user
):
return
user
.
is_in_group
(
settings
.
SITH_GROUP_COM_ADMIN_ID
)
def
can_be_viewed_by
(
self
,
user
):
return
self
.
is_moderated
or
user
.
is_in_group
(
settings
.
SITH_GROUP_COM_ADMIN_ID
)
def
get_absolute_url
(
self
):
return
reverse
(
'com:news_detail'
,
kwargs
=
{
'news_id'
:
self
.
id
})
...
...
com/templates/com/news_admin_list.jinja
View file @
1dc1a0a4
{%
extends
"core/base.jinja"
%}
{%
from
'core/macros.jinja'
import
user_profile_link
%}
{%
block
title
%}
{%
trans
%}
News admin
{%
endtrans
%}
...
...
@@ -6,19 +7,73 @@
{%
block
content
%}
<h3>
{%
trans
%}
News
{%
endtrans
%}
</h3>
<ul>
{%
for
news
in
object_list
%}
<li>
<p>
{{
news.get_type_display
()
}}
-
{{
news.title
}}
:
<span>
{{
news.dates.first
()
.
start_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
-
<span>
{{
news.dates.first
()
.
end_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
end_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
-
<a
href=
"
{{
url
(
'com:news_edit'
,
news_id
=
news.id
)
}}
"
>
{%
trans
%}
Edit
{%
endtrans
%}
</a>
</p>
</li>
{%
endfor
%}
</ul>
<h4>
{%
trans
%}
Displayed news
{%
endtrans
%}
</h4>
<table>
<thead>
<tr>
<td>
{%
trans
%}
Type
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Title
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Summary
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Club
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Author
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Moderator
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Start
{%
endtrans
%}
</td>
<td>
{%
trans
%}
End
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Actions
{%
endtrans
%}
</td>
</tr>
</thead>
<tbody>
{%
for
news
in
object_list.
filter
(
is_moderated
=
True
)
%}
<tr>
<td>
{{
news.get_type_display
()
}}
</td>
<td>
{{
news.title
}}
</td>
<td>
{{
news.summary
|
markdown
}}
</td>
<td><a
href=
"
{{
news.club.get_absolute_url
()
}}
"
>
{{
news.club
}}
</a></td>
<td>
{{
user_profile_link
(
news.author
)
}}
</td>
<td>
{{
user_profile_link
(
news.moderator
)
}}
</td>
<td>
{{
news.dates.first
()
.
start_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</td>
<td>
{{
news.dates.first
()
.
end_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
end_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</td>
<td><a
href=
"
{{
url
(
'com:news_detail'
,
news_id
=
news.id
)
}}
"
>
{%
trans
%}
View
{%
endtrans
%}
</a>
<a
href=
"
{{
url
(
'com:news_edit'
,
news_id
=
news.id
)
}}
"
>
{%
trans
%}
Edit
{%
endtrans
%}
</a>
</td>
</tr>
{%
endfor
%}
</tbody>
</table>
<h4>
{%
trans
%}
News to moderate
{%
endtrans
%}
</h4>
<table>
<thead>
<tr>
<td>
{%
trans
%}
Type
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Title
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Summary
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Club
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Author
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Start
{%
endtrans
%}
</td>
<td>
{%
trans
%}
End
{%
endtrans
%}
</td>
<td>
{%
trans
%}
Actions
{%
endtrans
%}
</td>
</tr>
</thead>
<tbody>
{%
for
news
in
object_list.
filter
(
is_moderated
=
False
)
%}
<tr>
<td>
{{
news.get_type_display
()
}}
</td>
<td>
{{
news.title
}}
</td>
<td>
{{
news.summary
|
markdown
}}
</td>
<td><a
href=
"
{{
news.club.get_absolute_url
()
}}
"
>
{{
news.club
}}
</a></td>
<td>
{{
user_profile_link
(
news.author
)
}}
</td>
<td>
{{
news.dates.first
()
.
start_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</td>
<td>
{{
news.dates.first
()
.
end_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
end_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</td>
<td><a
href=
"
{{
url
(
'com:news_detail'
,
news_id
=
news.id
)
}}
"
>
{%
trans
%}
View
{%
endtrans
%}
</a>
<a
href=
"
{{
url
(
'com:news_edit'
,
news_id
=
news.id
)
}}
"
>
{%
trans
%}
Edit
{%
endtrans
%}
</a>
<a
href=
"
{{
url
(
'com:news_moderate'
,
news_id
=
news.id
)
}}
"
>
{%
trans
%}
Moderate
{%
endtrans
%}
</a></td>
</tr>
{%
endfor
%}
</tbody>
</table>
{%
endblock
%}
...
...
com/templates/com/news_detail.jinja
View file @
1dc1a0a4
{%
extends
"core/base.jinja"
%}
{%
from
'core/macros.jinja'
import
user_profile_link
%}
{%
block
title
%}
{%
trans
%}
News
{%
endtrans
%}
-
...
...
@@ -6,9 +7,30 @@
{%
endblock
%}
{%
block
content
%}
<p><a
href=
"
{{
url
(
'com:news_list'
)
}}
"
>
{%
trans
%}
Back to news
{%
endtrans
%}
</a></p>
<h3>
{%
trans
%}
News
{%
endtrans
%}
</h3>
{{
object
}}
{{
object.dates.all
()
}}
{%
if
user.is_in_group
(
settings.SITH_GROUP_COM_ADMIN_ID
)
or
user.is_root
%}
{%
endif
%}
<section
class=
"news_event"
>
<h4>
{{
news.title
}}
</h4>
<p
class=
"date"
>
<span>
{{
news.dates.first
()
.
start_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
-
<span>
{{
news.dates.first
()
.
end_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
end_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
</p>
<p><a
href=
"
{{
news.club.get_absolute_url
()
}}
"
>
{{
news.club
}}
</a></p>
<p>
{{
news.summary
|
markdown
}}
</p>
<p>
{%
trans
%}
Author:
{%
endtrans
%}{{
user_profile_link
(
news.author
)
}}
</p>
{%
if
news.moderator
%}
<p>
{%
trans
%}
Moderator:
{%
endtrans
%}{{
user_profile_link
(
news.moderator
)
}}
</p>
{%
elif
user.is_in_group
(
settings.SITH_GROUP_COM_ADMIN_ID
)
%}
<p>
<a
href=
"
{{
url
(
'com:news_moderate'
,
news_id
=
news.id
)
}}
"
>
{%
trans
%}
Moderate
{%
endtrans
%}
</a></p>
{%
endif
%}
{%
if
user.can_edit
(
news
)
%}
<p>
<a
href=
"
{{
url
(
'com:news_edit'
,
news_id
=
news.id
)
}}
"
>
{%
trans
%}
Edit (will be remoderated)
{%
endtrans
%}
</a></p>
{%
endif
%}
</section>
{%
endblock
%}
...
...
com/templates/com/news_edit.jinja
View file @
1dc1a0a4
...
...
@@ -17,8 +17,15 @@
<form
action=
""
method=
"post"
>
{%
csrf_token
%}
{{
form.non_field_errors
()
}}
{{
form.owner
}}
<p>
{{
form.type.errors
}}
<label
for=
"
{{
form.type.name
}}
"
>
{{
form.type.label
}}
</label>
{{
form.type
}}
</p>
{{
form.author
}}
<p>
{{
form.type.errors
}}
<label
for=
"
{{
form.type.name
}}
"
>
{{
form.type.label
}}
</label>
<ul>
<li>
Notice: Information, election result - no date
</li>
<li>
Evenement: punctual event, associated with one date
</li>
<li>
Weekly: recurrent event, associated with many dates (specify the first one, and a deadline)
</li>
<li>
Call: long time event, associated with a long date (election appliance, ...)
</li>
</ul>
{{
form.type
}}
</p>
<p
class=
"date"
>
{{
form.start_date.errors
}}
<label
for=
"
{{
form.start_date.name
}}
"
>
{{
form.start_date.label
}}
</label>
{{
form.start_date
}}
</p>
<p
class=
"date"
>
{{
form.end_date.errors
}}
<label
for=
"
{{
form.end_date.name
}}
"
>
{{
form.end_date.label
}}
</label>
{{
form.end_date
}}
</p>
<p
class=
"until"
>
{{
form.until.errors
}}
<label
for=
"
{{
form.until.name
}}
"
>
{{
form.until.label
}}
</label>
{{
form.until
}}
</p>
...
...
@@ -26,6 +33,10 @@
<p>
{{
form.club.errors
}}
<label
for=
"
{{
form.club.name
}}
"
>
{{
form.club.label
}}
</label>
{{
form.club
}}
</p>
<p>
{{
form.summary.errors
}}
<label
for=
"
{{
form.summary.name
}}
"
>
{{
form.summary.label
}}
</label>
{{
form.summary
}}
</p>
<p>
{{
form.content.errors
}}
<label
for=
"
{{
form.content.name
}}
"
>
{{
form.content.label
}}
</label>
{{
form.content
}}
</p>
{%
if
user.is_in_group
(
settings.SITH_GROUP_COM_ADMIN_ID
)
%}
<p>
{{
form.automoderation.errors
}}
<label
for=
"
{{
form.automoderation.name
}}
"
>
{{
form.automoderation.label
}}
</label>
{{
form.automoderation
}}
</p>
{%
endif
%}
<p><input
type=
"submit"
value=
"
{%
trans
%}
Save
{%
endtrans
%}
"
/></p>
</form>
{%
endblock
%}
...
...
com/templates/com/news_list.jinja
View file @
1dc1a0a4
...
...
@@ -10,10 +10,11 @@
section
{
padding
:
5px
;
}
section
.news_call
{
section
.news_call
,
section
.news_notice
{
background
:
lightgrey
;
margin
:
2px
;
}
section
.news_event
:nth-
child
(
even
)
{
section
.news_event
:nth-
of-type
(
even
)
{
background
:
lightblue
;
}
.date
{
...
...
@@ -25,50 +26,62 @@ section.news_event:nth-child(even) {
{%
block
content
%}
<h3>
{%
trans
%}
News
{%
endtrans
%}
</h3>
<hr>
<h4>
{%
trans
%}
Notice
{%
endtrans
%}
</h4>
{%
for
news
in
object_list.
filter
(
type
=
"NOTICE"
)
%}
<section
class=
"news_notice"
>
<h4>
{{
news.title
}}
</h4>
<p>
{{
news.summary
}}
</p>
<h4>
<a
href=
"
{{
url
(
'com:news_detail'
,
news_id
=
news.id
)
}}
"
>
{{
news.title
}}
</
a></
h4>
<p>
{{
news.summary
|
markdown
}}
</p>
</section>
{%
endfor
%}
<hr>
<h4>
{%
trans
%}
Calls
{%
endtrans
%}
</h4>
{%
for
news
in
object_list.
filter
(
dates__start_date__lte
=
timezone.now
(),
dates__end_date__gte
=
timezone.now
(),
type
=
"CALL"
)
%}
<section
class=
"news_call"
>
<h4>
{{
news.title
}}
</h4>
<h4>
<a
href=
"
{{
url
(
'com:news_detail'
,
news_id
=
news.id
)
}}
"
>
{{
news.title
}}
</
a></
h4>
<p
class=
"date"
>
<span>
{{
news.dates.first
()
.
start_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
-
<span>
{{
news.dates.first
()
.
end_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
end_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
</p>
<p>
{{
news.summary
}}
</p>
<p>
{{
news.summary
|
markdown
}}
</p>
</section>
{%
endfor
%}
<hr>
<h4>
{%
trans
%}
Events
{%
endtrans
%}
</h4>
{%
for
news
in
object_list.
filter
(
dates__end_date__gte
=
timezone.now
(),
type
=
"EVENT"
)
%}
<h4>
{%
trans
%}
Events today and the next few days
{%
endtrans
%}
</h4>
{%
for
d
in
NewsDate.objects.
filter
(
end_date__gte
=
timezone.now
(),
start_date__lte
=
timezone.now
()
+
timedelta
(
days
=
5
),
news__type
=
"EVENT"
,
news__is_moderated
=
True
)
.
datetimes
(
'start_date'
,
'day'
)
%}
<h5
class=
"date"
>
{{
d
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
</h5>
{%
for
news
in
object_list.
filter
(
dates__start_date__gte
=
d
,
dates__start_date__lte
=
d
+
timedelta
(
days
=
1
),
type
=
"EVENT"
)
.
exclude
(
dates__end_date__lt
=
timezone.now
())
%}
<section
class=
"news_event"
>
<h4>
{{
news.title
}}
</h4>
<h4>
<a
href=
"
{{
url
(
'com:news_detail'
,
news_id
=
news.id
)
}}
"
>
{{
news.title
}}
</
a></
h4>
<p
class=
"date"
>
<span>
{{
news.dates.first
()
.
start_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
-
<span>
{{
news.dates.first
()
.
end_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
end_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
<span>
{{
news.dates.first
()
.
start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
-
<span>
{{
news.dates.first
()
.
end_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
</p>
<p><a
href=
"
{{
news.club.get_absolute_url
()
}}
"
>
{{
news.club
}}
</a></p>
<p>
{{
news.summary
|
markdown
}}
</p>
</section>
{%
endfor
%}
<hr>
<h4>
{%
trans
%}
Coming soon... don't miss!
{%
endtrans
%}
</h4>
{%
endfor
%}
{%
for
news
in
object_list.
filter
(
dates__start_date__gte
=
timezone.now
()
+
timedelta
(
days
=
5
),
type
=
"EVENT"
)
%}
<section>
<h4>
<a
href=
"
{{
url
(
'com:news_detail'
,
news_id
=
news.id
)
}}
"
>
{{
news.title
}}
</a>
<span
class=
"date"
>
{{
news.dates.first
()
.
start_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
-
{{
news.dates.first
()
.
end_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
news.dates.first
()
.
end_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span>
</h4>
</section>
{%
endfor
%}
<!--
<hr>
<h4>
{%
trans
%}
Weekly
{%
endtrans
%}
</h4>
{%
for
news
in
object_list.
filter
(
dates__end_date__gte
=
timezone.now
(),
type
=
"WEEKLY"
)
.
distinct
()
%}
<!--
buggy when more than one news, anyway, we won't use it this way
-->
buggy when more than one news, anyway, we won't use it this way
{%
for
d
in
news.dates.all
()
%}
<section class="news_weekly">
<h4>
{{
news.title
}}
</h4>
<h4>
<a href="
{{
url
(
'com:news_detail'
,
news_id
=
news.id
)
}}
">
{{
news.title
}}
</
a></
h4>
<p class="date">
<span>
{{
d.start_date
|
localtime
|
date
(
DATETIME_FORMAT
)
}}
{{
d.start_date
|
localtime
|
time
(
DATETIME_FORMAT
)
}}
</span> -
...
...
@@ -80,6 +93,7 @@ section.news_event:nth-child(even) {
</section>
{%
endfor
%}
{%
endfor
%}
-->
{%
endblock
%}
...
...
com/urls.py
View file @
1dc1a0a4
...
...
@@ -9,6 +9,7 @@ urlpatterns = [
url
(
r
'^news$'
,
NewsListView
.
as_view
(),
name
=
'news_list'
),
url
(
r
'^news/admin$'
,
NewsAdminListView
.
as_view
(),
name
=
'news_admin_list'
),
url
(
r
'^news/create$'
,
NewsCreateView
.
as_view
(),
name
=
'news_new'
),
url
(
r
'^news/(?P<news_id>[0-9]+)/moderate$'
,
NewsModerateView
.
as_view
(),
name
=
'news_moderate'
),
url
(
r
'^news/(?P<news_id>[0-9]+)/edit$'
,
NewsEditView
.
as_view
(),
name
=
'news_edit'
),
url
(
r
'^news/(?P<news_id>[0-9]+)$'
,
NewsDetailView
.
as_view
(),
name
=
'news_detail'
),
]
...
...
com/views.py
View file @
1dc1a0a4
from
django.shortcuts
import
render
from
django.shortcuts
import
render
,
redirect
from
django.views.generic
import
ListView
,
DetailView
,
RedirectView
from
django.views.generic.edit
import
UpdateView
,
CreateView
from
django.views.generic.detail
import
SingleObjectMixin
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.core.urlresolvers
import
reverse
,
reverse_lazy
from
django.core.exceptions
import
ValidationError
...
...
@@ -10,7 +11,7 @@ from django import forms
from
datetime
import
timedelta
from
com.models
import
Sith
,
News
,
NewsDate
from
core.views
import
CanViewMixin
,
CanEditMixin
,
CanEditPropMixin
,
TabedViewMixin
from
core.views
import
CanViewMixin
,
CanEditMixin
,
CanEditPropMixin
,
TabedViewMixin
,
CanCreateMixin
from
core.views.forms
import
SelectDateTime
from
club.models
import
Club
...
...
@@ -69,14 +70,15 @@ class IndexEditView(ComEditView):
class
NewsForm
(
forms
.
ModelForm
):
class
Meta
:
model
=
News
fields
=
[
'type'
,
'title'
,
'club'
,
'summary'
,
'content'
,
'
owne
r'
]
fields
=
[
'type'
,
'title'
,
'club'
,
'summary'
,
'content'
,
'
autho
r'
]
widgets
=
{
'
owne
r'
:
forms
.
HiddenInput
,
'
autho
r'
:
forms
.
HiddenInput
,
'type'
:
forms
.
RadioSelect
,
}
start_date
=
forms
.
DateTimeField
([
'%Y-%m-%d %H:%M:%S'
],
label
=
_
(
"Start date"
),
widget
=
SelectDateTime
,
required
=
False
)
end_date
=
forms
.
DateTimeField
([
'%Y-%m-%d %H:%M:%S'
],
label
=
_
(
"End date"
),
widget
=
SelectDateTime
,
required
=
False
)
until
=
forms
.
DateTimeField
([
'%Y-%m-%d %H:%M:%S'
],
label
=
_
(
"Until"
),
widget
=
SelectDateTime
,
required
=
False
)
automoderation
=
forms
.
BooleanField
(
label
=
_
(
"Automoderation"
),
required
=
False
)
def
clean
(
self
):
self
.
cleaned_data
=
super
(
NewsForm
,
self
).
clean
()
...
...
@@ -107,7 +109,7 @@ class NewsForm(forms.ModelForm):
end_date
+=
timedelta
(
days
=
7
)
return
ret
class
NewsEditView
(
UpdateView
):
class
NewsEditView
(
CanEditMixin
,
UpdateView
):
model
=
News
form_class
=
NewsForm
template_name
=
'com/news_edit.jinja'
...
...
@@ -123,27 +125,70 @@ class NewsEditView(UpdateView):
except
:
pass
return
init
class
NewsCreateView
(
CreateView
):
def
form_valid
(
self
,
form
):
self
.
object
=
form
.
save
()
if
form
.
cleaned_data
[
'automoderation'
]
and
self
.
request
.
user
.
is_in_group
(
settings
.
SITH_GROUP_COM_ADMIN_ID
):
self
.
object
.
moderator
=
self
.
request
.
user
self
.
object
.
is_moderated
=
True
self
.
object
.
save
()
else
:
self
.
object
.
is_moderated
=
False
self
.
object
.
save
()
return
super
(
NewsEditView
,
self
).
form_valid
(
form
)
class
NewsCreateView
(
CanCreateMixin
,
CreateView
):
model
=
News
form_class
=
NewsForm
template_name
=
'com/news_edit.jinja'
def
get_initial
(
self
):
init
=
{
'
owne
r'
:
self
.
request
.
user
}
init
=
{
'
autho
r'
:
self
.
request
.
user
}
try
:
init
[
'club'
]
=
Club
.
objects
.
filter
(
id
=
self
.
request
.
GET
[
'club'
]).
first
()
except
:
pass
return
init
class
NewsAdminListView
(
ListView
):
def
form_valid
(
self
,
form
):
self
.
object
=
form
.
save
()
print
(
form
.
cleaned_data
)
if
form
.
cleaned_data
[
'automoderation'
]
and
self
.
request
.
user
.
is_in_group
(
settings
.
SITH_GROUP_COM_ADMIN_ID
):
print
(
"GUY"
)
self
.
object
.
moderator
=
self
.
request
.
user
self
.
object
.
is_moderated
=
True
self
.
object
.
save
()
return
super
(
NewsCreateView
,
self
).
form_valid
(
form
)
class
NewsModerateView
(
CanEditMixin
,
SingleObjectMixin
):
model
=
News
pk_url_kwarg
=
'news_id'
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
object
=
self
.
get_object
()
self
.
object
.
is_moderated
=
True
self
.
object
.
moderator
=
request
.
user
self
.
object
.
save
()
if
'next'
in
self
.
request
.
GET
.
keys
():
return
redirect
(
self
.
request
.
GET
[
'next'
])
return
redirect
(
'com:news_admin_list'
)
class
NewsAdminListView
(
CanEditMixin
,
ListView
):
model
=
News
template_name
=
'com/news_admin_list.jinja'
queryset
=
News
.
objects
.
filter
(
dates__end_date__gte
=
timezone
.
now
()).
distinct
().
order_by
(
'id'
)
class
NewsListView
(
ListView
):
class
NewsListView
(
CanViewMixin
,
ListView
):
model
=
News
template_name
=
'com/news_list.jinja'
class
NewsDetailView
(
DetailView
):
def
get_context_data
(
self
,
**
kwargs
):
kwargs
=
super
(
NewsListView
,
self
).
get_context_data
(
**
kwargs
)
kwargs
[
'NewsDate'
]
=
NewsDate
kwargs
[
'timedelta'
]
=
timedelta
return
kwargs
class
NewsDetailView
(
CanViewMixin
,
DetailView
):
model
=
News
template_name
=
'com/news_detail.jinja'
pk_url_kwarg
=
'news_id'
core/templates/core/user_tools.jinja
View file @
1dc1a0a4
...
...
@@ -66,6 +66,7 @@
<h4>
{%
trans
%}
Communication
{%
endtrans
%}
</h4>
<ul>
{%
if
user.is_in_group
(
settings.SITH_GROUP_COM_ADMIN_ID
)
or
user.is_root
%}
<li><a
href=
"
{{
url
(
'com:news_admin_list'
)
}}
"
>
{%
trans
%}
Moderate news
{%
endtrans
%}
</a></li>
<li><a
href=
"
{{
url
(
'com:index_edit'
)
}}
"
>
{%
trans
%}
Edit index page
{%
endtrans
%}
</a></li>
<li><a
href=
"
{{
url
(
'com:alert_edit'
)
}}
"
>
{%
trans
%}
Edit alert message
{%
endtrans
%}
</a></li>
<li><a
href=
"
{{
url
(
'com:info_edit'
)
}}
"
>
{%
trans
%}
Edit information message
{%
endtrans
%}
</a></li>
...
...
locale/fr/LC_MESSAGES/django.po
View file @
1dc1a0a4
...
...
@@ -6,7 +6,7 @@
msgid
""
msgstr
""
"Report-Msgid-Bugs-To:
\n
"
"POT-Creation-Date: 2016-12-23
03:16
+0100
\n
"
"POT-Creation-Date: 2016-12-23
18:25
+0100
\n
"
"PO-Revision-Date: 2016-07-18
\n
"
"Last-Translator: Skia <skia@libskia.so>
\n
"
"Language-Team: AE info <ae.info@utbm.fr>
\n
"
...
...
@@ -178,6 +178,8 @@ msgid "User"
msgstr
"Utilisateur"
#: accounting/models.py:207 club/templates/club/club_detail.jinja:5
#: com/templates/com/news_admin_list.jinja:17
#: com/templates/com/news_admin_list.jinja:51
#: counter/templates/counter/invoices_call.jinja:20
msgid
"Club"
msgstr
"Club"
...
...
@@ -347,7 +349,8 @@ msgstr "Nouveau compte club"
#: accounting/templates/accounting/bank_account_list.jinja:21
#: accounting/templates/accounting/club_account_details.jinja:55
#: accounting/templates/accounting/journal_details.jinja:73 club/views.py:54
#: com/templates/com/news_admin_list.jinja:17 core/templates/core/file.jinja:38
#: com/templates/com/news_admin_list.jinja:39
#: com/templates/com/news_admin_list.jinja:71 core/templates/core/file.jinja:38
#: core/templates/core/page.jinja:31 core/templates/core/user_tools.jinja:38
#: core/views/user.py:152 counter/templates/counter/cash_summary_list.jinja:53
#: counter/templates/counter/counter_list.jinja:17
...
...
@@ -411,10 +414,14 @@ msgid "Name"
msgstr
"Nom"
#: accounting/templates/accounting/club_account_details.jinja:29
#: com/templates/com/news_admin_list.jinja:20
#: com/templates/com/news_admin_list.jinja:53
msgid
"Start"
msgstr
"Début"
#: accounting/templates/accounting/club_account_details.jinja:30
#: com/templates/com/news_admin_list.jinja:21
#: com/templates/com/news_admin_list.jinja:54
msgid
"End"
msgstr
"Fin"
...
...
@@ -436,6 +443,8 @@ msgstr "Fermé"
#: accounting/templates/accounting/club_account_details.jinja:34
#: accounting/templates/accounting/journal_details.jinja:41
#: com/templates/com/news_admin_list.jinja:22
#: com/templates/com/news_admin_list.jinja:55
msgid
"Actions"
msgstr
"Actions"
...
...
@@ -450,7 +459,9 @@ msgid "No"
msgstr
"Non"
#: accounting/templates/accounting/club_account_details.jinja:54
#: core/templates/core/file.jinja:36 core/templates/core/page.jinja:28
#: com/templates/com/news_admin_list.jinja:38
#: com/templates/com/news_admin_list.jinja:70 core/templates/core/file.jinja:36
#: core/templates/core/page.jinja:28
msgid
"View"
msgstr
"Voir"
...
...
@@ -616,7 +627,7 @@ msgid "Edit operation"
msgstr
"Éditer l'opération"
#: accounting/templates/accounting/operation_edit.jinja:41
#: com/templates/com/news_edit.jinja:
29
core/templates/core/create.jinja:12
#: com/templates/com/news_edit.jinja:
40
core/templates/core/create.jinja:12
#: core/templates/core/edit.jinja:7 core/templates/core/edit.jinja.py:15
#: core/templates/core/edit.jinja:20 core/templates/core/file_edit.jinja:8
#: core/templates/core/page_prop.jinja:8
...
...
@@ -913,19 +924,27 @@ msgid "Payment method"
msgstr
"Méthode de paiement"
#: club/templates/club/club_tools.jinja:4
#: core/templates/core/user_tools.jinja:8
1
#: core/templates/core/user_tools.jinja:8
2
msgid
"Club tools"
msgstr
"Outils club"
#: club/templates/club/club_tools.jinja:6
msgid
"Communication:"
msgstr
"Communication : "
#: club/templates/club/club_tools.jinja:8
msgid
"Create a news"
msgstr
"Créer une nouvelle"
#: club/templates/club/club_tools.jinja:10
msgid
"Counters:"
msgstr
"Comptoirs : "
#: club/templates/club/club_tools.jinja:2
2
#: club/templates/club/club_tools.jinja:2
6
msgid
"Accouting: "
msgstr
"Comptabilité : "
#: club/templates/club/club_tools.jinja:3
0
#: club/templates/club/club_tools.jinja:3
4
msgid
"Manage launderettes"
msgstr
"Gestion des laveries"
...
...
@@ -960,7 +979,7 @@ msgstr "Vous n'avez pas la permission de faire cela"
msgid
"Begin date"
msgstr
"Date de début"
#: club/views.py:166 com/views.py:7
8
counter/views.py:909
#: club/views.py:166 com/views.py:7
9
counter/views.py:909
msgid
"End date"
msgstr
"Date de fin"
...
...
@@ -981,7 +1000,7 @@ msgstr "message d'info"
msgid
"index page"
msgstr
"page d'accueil"