added tag_edit
This commit is contained in:
BIN
cao_blogr.sqlite
BIN
cao_blogr.sqlite
Binary file not shown.
@@ -11,6 +11,8 @@ class BlogCreateForm(Form):
|
||||
body = TextAreaField('Corps du texte', validators=[InputRequired(), Length(min=1)],
|
||||
filters=[strip_filter])
|
||||
tag = SelectField('Sous-rubrique')
|
||||
author = StringField('Auteur', validators=[InputRequired(), Length(min=1, max=50)],
|
||||
filters=[strip_filter])
|
||||
|
||||
|
||||
class BlogUpdateForm(BlogCreateForm):
|
||||
@@ -42,3 +44,10 @@ class TopicForm(Form):
|
||||
filters=[strip_filter])
|
||||
|
||||
|
||||
class TagForm(Form):
|
||||
id = IntegerField(widget=HiddenInput())
|
||||
|
||||
tag = StringField('Sous-rubrique', validators=[InputRequired(), Length(min=1, max=25)],
|
||||
filters=[strip_filter])
|
||||
tag_name = StringField('Intitulé', validators=[InputRequired(), Length(min=1, max=25)],
|
||||
filters=[strip_filter])
|
||||
|
||||
@@ -8,6 +8,7 @@ def includeme(config):
|
||||
config.add_route('login', '/login')
|
||||
config.add_route('logout', '/logout')
|
||||
config.add_route('settings', '/settings')
|
||||
config.add_route('tag_edit', '/tag_edit/{topic}/{id}')
|
||||
config.add_route('topic', '/topic/{topic}')
|
||||
config.add_route('topic_edit', '/topic_edit/{topic}')
|
||||
config.add_route('topics', '/topics')
|
||||
|
||||
@@ -32,7 +32,7 @@ class BlogRecordService(object):
|
||||
def get_last_five(cls, request):
|
||||
# gest the last 5 items modified
|
||||
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id != 'ADM')
|
||||
query = query.order_by(sa.desc(BlogRecord.edited)).limit(5).all()
|
||||
query = query.order_by(sa.desc(BlogRecord.created)).limit(5).all()
|
||||
return query
|
||||
|
||||
@classmethod
|
||||
@@ -42,6 +42,12 @@ class BlogRecordService(object):
|
||||
query = query.order_by(Tags.tag_name).all()
|
||||
return query
|
||||
|
||||
@classmethod
|
||||
def get_tags_byId(cls, request, id):
|
||||
# gest the last 5 items modified
|
||||
query = request.dbsession.query(Tags).filter(Tags.id == id).first()
|
||||
return query
|
||||
|
||||
@classmethod
|
||||
def get_topic_byTopic(cls, request, id):
|
||||
# get the name of a given topic
|
||||
@@ -59,3 +65,12 @@ class BlogRecordService(object):
|
||||
request.dbsession.query(BlogRecord).filter(BlogRecord.id == id).delete(synchronize_session=False)
|
||||
return
|
||||
|
||||
@classmethod
|
||||
def tag_delete(cls, request, id):
|
||||
request.dbsession.query(Tags).filter(Tags.id == id).delete(synchronize_session=False)
|
||||
return
|
||||
|
||||
@classmethod
|
||||
def topic_delete(cls, request, id):
|
||||
request.dbsession.query(Topics).filter(Topics.topic == id).delete(synchronize_session=False)
|
||||
return
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
<p>{{ body_html | safe }}</p>
|
||||
<hr/>
|
||||
<p>
|
||||
Publié le : <strong title="{{ entry.created }}">{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}</strong>
|
||||
Auteur : <strong>{{ entry.author }}</strong><br>
|
||||
Publié le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong><br>
|
||||
</p>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -25,6 +25,11 @@
|
||||
{{ form.tag(class_='form-control') }}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="required-field" for="author">{{ form.author.label }}</label>
|
||||
{{ form.author(class_='form-control') }}
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Topic : <strong>{{ entry.topic_id }}</strong>
|
||||
{% if blog_id != '0' %}
|
||||
|
||||
@@ -150,10 +150,10 @@
|
||||
<ul>
|
||||
{% for entry in last_five %}
|
||||
<li>
|
||||
{{ entry.edited.strftime("%d-%m-%Y") }}
|
||||
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">
|
||||
<span class="glyphicon glyphicon-menu-right"></span> {{ entry.title }}
|
||||
{{ entry.title }}
|
||||
</a>
|
||||
— {{ entry.author }}, {{ entry.created.strftime("%d-%m-%Y") }}
|
||||
</li>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
64
cao_blogr/templates/tag_edit.jinja2
Normal file
64
cao_blogr/templates/tag_edit.jinja2
Normal file
@@ -0,0 +1,64 @@
|
||||
{% extends "cao_blogr:templates/layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form action="{{ url }}" method="post" class="form">
|
||||
|
||||
{% for error in form.tag.errors %}
|
||||
<div class="error">{{ error }}</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="form-group">
|
||||
<label class="required-field" for="tag">{{form.tag.label}}</label>
|
||||
{{form.tag(class_='form-control')}}
|
||||
</div>
|
||||
|
||||
{% for error in form.tag_name.errors %}
|
||||
<div class="error">{{error}}</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="form-group">
|
||||
<label class="required-field" for="tag_name">{{form.tag_name.label}}</label>
|
||||
{{form.tag_name(class_='form-control')}}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<a class="btn btn-default" href="{{ request.route_url('topic_edit', topic=topic) }}">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
{% if form.id.data %}
|
||||
<button class="btn btn-danger" type="button" data-toggle="modal" data-target="#confirmDelete">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
<!-- Modal : Confirmation SUPRESSION -->
|
||||
<div id="confirmDelete" class="modal" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">Supprimer la sous-rubrique</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<!-- The form is placed inside the body of modal -->
|
||||
<p>Etes-vous certain(e) de vouloir supprimer la sous-rubrique <b>{{ form.tag_name.data }}</b> ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="form-group">
|
||||
<div class="text-center">
|
||||
<form id="confirmForm" method="post">
|
||||
<button type="submit" class="btn btn-danger" name="form.deleted">Supprimer</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -35,9 +35,62 @@
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
{% if form.topic.data %}
|
||||
<button class="btn btn-danger" type="button" data-toggle="modal" data-target="#confirmDelete">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
<h3>Sous-rubriques</h3>
|
||||
<p><a href="{{ request.route_url('tag_edit', topic=form.topic.data, id='0') }}" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau</a>
|
||||
</p>
|
||||
|
||||
<table id="users_list" class="table table-striped table-bordered table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Sous-rubrique</th>
|
||||
<th>Intitulé</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for entry in tags %}
|
||||
<tr>
|
||||
<td>{{ entry.tag }}</td>
|
||||
<td>
|
||||
<a href="{{ request.route_url('tag_edit', topic=form.topic.data, id=entry.id) }}">
|
||||
{{ entry.tag_name }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
<!-- Modal : Confirmation SUPRESSION -->
|
||||
<div id="confirmDelete" class="modal" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">Supprimer la rubrique</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<!-- The form is placed inside the body of modal -->
|
||||
<p>Etes-vous certain(e) de vouloir supprimer la rubrique <b>{{ form.topic_name.data }}</b> ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="form-group">
|
||||
<div class="text-center">
|
||||
<form id="confirmForm" method="post">
|
||||
<button type="submit" class="btn btn-danger" name="form.deleted">Supprimer</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
<p>
|
||||
<a href="{{ request.route_url('settings') }}" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="{{ request.route_url('user_add', name='new') }}" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouvel utilisateur</a>
|
||||
<a href="{{ request.route_url('topic_edit', topic='0') }}" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouvelle rubrique</a>
|
||||
</p>
|
||||
|
||||
<table id="users_list" class="table table-striped table-bordered table-condensed">
|
||||
|
||||
@@ -131,9 +131,9 @@ def topic(request):
|
||||
if items:
|
||||
liste += '<ul>'
|
||||
for item in items:
|
||||
liste += '<li><a href="{0}">{1}</a> — {2}</li>'.format(
|
||||
request.route_url('blog', id=item.id, slug=item.slug), item.title,
|
||||
item.edited.strftime("%d-%m-%Y"))
|
||||
liste += '<li><a href="{0}">{1}</a> — {2}, {3}</li>'.format(
|
||||
request.route_url('blog', id=item.id, slug=item.slug), item.title, item.author,
|
||||
item.created.strftime("%d-%m-%Y"))
|
||||
liste += '</ul>'
|
||||
else:
|
||||
liste += '<ul><li> </li></ul>'
|
||||
|
||||
@@ -9,9 +9,9 @@ from pyramid_mailer.message import Message
|
||||
|
||||
from ..services.user import UserService
|
||||
from ..services.blog_record import BlogRecordService
|
||||
from ..forms import UserCreateForm, TopicForm
|
||||
from ..forms import UserCreateForm, TopicForm, TagForm
|
||||
from ..models.user import User
|
||||
from ..models.blog_record import Topics
|
||||
from ..models.blog_record import Topics, Tags
|
||||
|
||||
|
||||
@view_config(route_name='home',
|
||||
@@ -196,7 +196,7 @@ def topics(request):
|
||||
# get all topics
|
||||
topics = BlogRecordService.get_topics(request)
|
||||
return {
|
||||
'page_title': "Liste des topics",
|
||||
'page_title': "Liste des rubriques",
|
||||
'topics': topics
|
||||
}
|
||||
|
||||
@@ -230,14 +230,66 @@ def topic_edit(request):
|
||||
form.populate_obj(entry)
|
||||
request.dbsession.add(entry)
|
||||
|
||||
return HTTPFound(location=request.route_url('topic', topic=topic))
|
||||
return HTTPFound(location=request.route_url('topics'))
|
||||
else:
|
||||
del form.topic # SECURITY: prevent overwriting of primary key
|
||||
form.populate_obj(entry)
|
||||
return HTTPFound(location=request.route_url('topics'))
|
||||
|
||||
if 'form.deleted' in request.params:
|
||||
BlogRecordService.topic_delete(request, entry.topic)
|
||||
request.session.flash("La fiche a été supprimée avec succès.", 'success')
|
||||
return HTTPFound(location=request.route_url('topics'))
|
||||
|
||||
return {
|
||||
'page_title': page_title,
|
||||
'url': url,
|
||||
'form': form,
|
||||
'tags': tags,
|
||||
}
|
||||
|
||||
@view_config(route_name='tag_edit',
|
||||
renderer='cao_blogr:templates/tag_edit.jinja2', permission='manage')
|
||||
def tag_edit(request):
|
||||
# get tag parameters from request
|
||||
topic = request.matchdict['topic']
|
||||
tag_id = request.matchdict['id']
|
||||
url = request.route_url('tag_edit', topic=topic, id=tag_id)
|
||||
|
||||
if tag_id == '0':
|
||||
# create a new tag
|
||||
entry = Tags()
|
||||
form = TagForm(request.POST, entry)
|
||||
page_title = "Nouvelle sous-rubrique"
|
||||
|
||||
else:
|
||||
# modify post
|
||||
entry = BlogRecordService.get_tags_byId(request, tag_id)
|
||||
if not entry:
|
||||
request.session.flash(u"Tag non trouvé : %s" % tag_id, 'warning')
|
||||
return HTTPFound(location=request.route_url('topic_edit', topic=topic))
|
||||
form = TagForm(request.POST, entry)
|
||||
page_title = entry.tag_name
|
||||
|
||||
if 'form.submitted' in request.params and form.validate():
|
||||
if tag_id == '0':
|
||||
form.populate_obj(entry)
|
||||
entry.topic = topic
|
||||
request.dbsession.add(entry)
|
||||
return HTTPFound(location=request.route_url('topic_edit', topic=topic))
|
||||
else:
|
||||
del form.id # SECURITY: prevent overwriting of primary key
|
||||
form.populate_obj(entry)
|
||||
return HTTPFound(location=request.route_url('topic_edit', topic=topic))
|
||||
|
||||
if 'form.deleted' in request.params:
|
||||
BlogRecordService.tag_delete(request, entry.id)
|
||||
request.session.flash("La fiche a été supprimée avec succès.", 'success')
|
||||
return HTTPFound(location=request.route_url('topic_edit', topic=topic))
|
||||
|
||||
return {
|
||||
'page_title': page_title,
|
||||
'url': url,
|
||||
'form': form,
|
||||
'topic': topic,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user