added tag_edit

This commit is contained in:
2022-05-12 11:46:42 +02:00
parent 4f5bb3350e
commit 6e21f084cd
12 changed files with 213 additions and 13 deletions

Binary file not shown.

View File

@@ -11,6 +11,8 @@ class BlogCreateForm(Form):
body = TextAreaField('Corps du texte', validators=[InputRequired(), Length(min=1)], body = TextAreaField('Corps du texte', validators=[InputRequired(), Length(min=1)],
filters=[strip_filter]) filters=[strip_filter])
tag = SelectField('Sous-rubrique') tag = SelectField('Sous-rubrique')
author = StringField('Auteur', validators=[InputRequired(), Length(min=1, max=50)],
filters=[strip_filter])
class BlogUpdateForm(BlogCreateForm): class BlogUpdateForm(BlogCreateForm):
@@ -42,3 +44,10 @@ class TopicForm(Form):
filters=[strip_filter]) 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])

View File

@@ -8,6 +8,7 @@ def includeme(config):
config.add_route('login', '/login') config.add_route('login', '/login')
config.add_route('logout', '/logout') config.add_route('logout', '/logout')
config.add_route('settings', '/settings') config.add_route('settings', '/settings')
config.add_route('tag_edit', '/tag_edit/{topic}/{id}')
config.add_route('topic', '/topic/{topic}') config.add_route('topic', '/topic/{topic}')
config.add_route('topic_edit', '/topic_edit/{topic}') config.add_route('topic_edit', '/topic_edit/{topic}')
config.add_route('topics', '/topics') config.add_route('topics', '/topics')

View File

@@ -32,7 +32,7 @@ class BlogRecordService(object):
def get_last_five(cls, request): def get_last_five(cls, request):
# gest the last 5 items modified # gest the last 5 items modified
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id != 'ADM') 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 return query
@classmethod @classmethod
@@ -42,6 +42,12 @@ class BlogRecordService(object):
query = query.order_by(Tags.tag_name).all() query = query.order_by(Tags.tag_name).all()
return query 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 @classmethod
def get_topic_byTopic(cls, request, id): def get_topic_byTopic(cls, request, id):
# get the name of a given topic # 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) request.dbsession.query(BlogRecord).filter(BlogRecord.id == id).delete(synchronize_session=False)
return 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

View File

@@ -16,7 +16,8 @@
<p>{{ body_html | safe }}</p> <p>{{ body_html | safe }}</p>
<hr/> <hr/>
<p> <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> </p>
{% endblock %} {% endblock %}

View File

@@ -25,6 +25,11 @@
{{ form.tag(class_='form-control') }} {{ form.tag(class_='form-control') }}
</div> </div>
<div class="form-group">
<label class="required-field" for="author">{{ form.author.label }}</label>
{{ form.author(class_='form-control') }}
</div>
<p> <p>
Topic : <strong>{{ entry.topic_id }}</strong> Topic : <strong>{{ entry.topic_id }}</strong>
{% if blog_id != '0' %} {% if blog_id != '0' %}

View File

@@ -150,10 +150,10 @@
<ul> <ul>
{% for entry in last_five %} {% for entry in last_five %}
<li> <li>
{{ entry.edited.strftime("%d-%m-%Y") }}&nbsp;&nbsp;
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}"> <a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">
<span class="glyphicon glyphicon-menu-right"></span>&nbsp;&nbsp;{{ entry.title }} {{ entry.title }}
</a> </a>
&nbsp;—&nbsp;{{ entry.author }}, {{ entry.created.strftime("%d-%m-%Y") }}
</li> </li>
{% endfor %} {% endfor %}

View 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">&times;</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 %}

View File

@@ -35,9 +35,62 @@
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a> <span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
<button class="btn btn-primary" type="submit" name="form.submitted"> <button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button> <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> </div>
</form> </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">&times;</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 %} {% endblock %}

View File

@@ -4,8 +4,8 @@
<p> <p>
<a href="{{ request.route_url('settings') }}" class="btn btn-default" role="button"> <a href="{{ request.route_url('settings') }}" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a> <span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
<a href="{{ request.route_url('user_add', name='new') }}" class="btn btn-success" role="button"> <a href="{{ request.route_url('topic_edit', topic='0') }}" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-plus"></span> Nouvel utilisateur</a> <span class="glyphicon glyphicon-plus"></span> Nouvelle rubrique</a>
</p> </p>
<table id="users_list" class="table table-striped table-bordered table-condensed"> <table id="users_list" class="table table-striped table-bordered table-condensed">

View File

@@ -131,9 +131,9 @@ def topic(request):
if items: if items:
liste += '<ul>' liste += '<ul>'
for item in items: for item in items:
liste += '<li><a href="{0}">{1}</a> — {2}</li>'.format( liste += '<li><a href="{0}">{1}</a> — {2}, {3}</li>'.format(
request.route_url('blog', id=item.id, slug=item.slug), item.title, request.route_url('blog', id=item.id, slug=item.slug), item.title, item.author,
item.edited.strftime("%d-%m-%Y")) item.created.strftime("%d-%m-%Y"))
liste += '</ul>' liste += '</ul>'
else: else:
liste += '<ul><li> </li></ul>' liste += '<ul><li> </li></ul>'

View File

@@ -9,9 +9,9 @@ from pyramid_mailer.message import Message
from ..services.user import UserService from ..services.user import UserService
from ..services.blog_record import BlogRecordService from ..services.blog_record import BlogRecordService
from ..forms import UserCreateForm, TopicForm from ..forms import UserCreateForm, TopicForm, TagForm
from ..models.user import User from ..models.user import User
from ..models.blog_record import Topics from ..models.blog_record import Topics, Tags
@view_config(route_name='home', @view_config(route_name='home',
@@ -196,7 +196,7 @@ def topics(request):
# get all topics # get all topics
topics = BlogRecordService.get_topics(request) topics = BlogRecordService.get_topics(request)
return { return {
'page_title': "Liste des topics", 'page_title': "Liste des rubriques",
'topics': topics 'topics': topics
} }
@@ -230,14 +230,66 @@ def topic_edit(request):
form.populate_obj(entry) form.populate_obj(entry)
request.dbsession.add(entry) request.dbsession.add(entry)
return HTTPFound(location=request.route_url('topic', topic=topic)) return HTTPFound(location=request.route_url('topics'))
else: else:
del form.topic # SECURITY: prevent overwriting of primary key del form.topic # SECURITY: prevent overwriting of primary key
form.populate_obj(entry) form.populate_obj(entry)
return HTTPFound(location=request.route_url('topics')) 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 { return {
'page_title': page_title, 'page_title': page_title,
'url': url, 'url': url,
'form': form, '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,
} }