added related entries table
This commit is contained in:
Binary file not shown.
@@ -33,6 +33,16 @@ def get_entries_by_criteria(request, criteria):
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
return results
|
||||
|
||||
def get_entries_related(request, _id):
|
||||
query = """SELECT *, strftime('%d/%m/%Y', edited) AS edit_date FROM entries_related WHERE id=:id;"""
|
||||
results = request.dbsession.execute(query, {'id':_id}).fetchall()
|
||||
return results
|
||||
|
||||
def get_entries_related_by_id(request, _id, id_related):
|
||||
query = """SELECT *, strftime('%d/%m/%Y', edited) AS edit_date FROM entries_related WHERE id=:id AND id_related=:id_related;"""
|
||||
results = request.dbsession.execute(query, {'id':_id, 'id_related':id_related}).first()
|
||||
return results
|
||||
|
||||
def get_entries_by_id(request, _id):
|
||||
query = """SELECT *, strftime('%d/%m/%Y', created) AS create_date,
|
||||
strftime('%d/%m/%Y', edited) AS edit_date FROM entries WHERE id=:id;"""
|
||||
@@ -107,6 +117,10 @@ def delete_tag(request, id):
|
||||
query = "DELETE FROM tags WHERE id = :id ;"
|
||||
execute_query(request, query, {'id': id})
|
||||
|
||||
def delete_related(request, id, id_related):
|
||||
query = "DELETE FROM entries_related WHERE id = :id AND id_related = :id_related;"
|
||||
execute_query(request, query, {'id': id, 'id_related': id_related})
|
||||
|
||||
def delete_topic(request, topic):
|
||||
query = "DELETE FROM topics WHERE topic = :topic ;"
|
||||
execute_query(request, query, {'topic': topic})
|
||||
@@ -149,6 +163,22 @@ def update_tag(request, id, new_values):
|
||||
query = "UPDATE tags SET %s WHERE id = :id;" % s
|
||||
execute_query(request, query, new_values)
|
||||
|
||||
def create_related(request, id, id_related, new_values):
|
||||
# formater les champs
|
||||
s = ''
|
||||
for param in new_values.keys():
|
||||
if s:
|
||||
s += ",%s=:%s" % (param, param)
|
||||
else:
|
||||
s = "%s=:%s" % (param, param)
|
||||
|
||||
# import pdb;pdb.set_trace()
|
||||
query = "INSERT INTO entries_related (id, id_related, title_related, author_related, edited, creator) " \
|
||||
"VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}')".format(
|
||||
new_values['id'], new_values['id_related'], new_values['title_related'], new_values['author_related'],
|
||||
new_values['edited'], new_values['creator'])
|
||||
execute_query(request, query, new_values)
|
||||
|
||||
def update_topic(request, topic, new_values):
|
||||
# formater les champs
|
||||
s = ''
|
||||
|
||||
@@ -10,6 +10,7 @@ def includeme(config):
|
||||
config.add_route('image_edit', '/image_edit/{filename}')
|
||||
config.add_route('login', '/login')
|
||||
config.add_route('logout', '/logout')
|
||||
config.add_route('related_edit', '/related_edit/{topic}/{id}/{id_related}')
|
||||
config.add_route('settings', '/settings')
|
||||
config.add_route('stats_pages', '/stats_pages')
|
||||
config.add_route('tag_edit', '/tag_edit/{topic}/{id}')
|
||||
|
||||
@@ -24,14 +24,16 @@
|
||||
<hr/>
|
||||
|
||||
{% if entry.source_link != '' %}
|
||||
<ul>
|
||||
<li><b>{{ scr_label }}</b> : <a href="{{ entry.source_link }}">{{ entry.source_title }}</a> - {{ entry.source_site }}</li>
|
||||
</ul>
|
||||
<p><b>{{ scr_label }}</b> : <a href="{{ entry.source_link }}">{{ entry.source_title }}</a> - {{ entry.source_site }}</p>
|
||||
{% endif %}
|
||||
{% if entry.related %}
|
||||
{% if relateds %}
|
||||
<div><b>{{ rel_label }}</b> : </div>
|
||||
<ul>
|
||||
<li><b>{{ rel_label }}</b> : <a href="{{ request.route_url('blog', id=related.id, slug=related.title) }}">{{ related.title }}</a> - {{ related.author }}</li>
|
||||
{% for entry in relateds %}
|
||||
<li><a href="{{ request.route_url('blog', id=entry.id_related, slug=entry.title_related) }}">{{ entry.title_related }}</a> - {{ entry.author_related }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<br>
|
||||
{% endif %}
|
||||
|
||||
<p>
|
||||
|
||||
@@ -44,11 +44,6 @@
|
||||
<input class="form-control" name="source_title" type="text" value="{{entry.source_title}}">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label for="author">Contenu corrélé</label>
|
||||
<input class="form-control" name="related" type="text" value="{{entry.related}}">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label required-field" for="status">Statut</label>
|
||||
<select class="form-control" id="status" name="status" value="{{ entry.status}}">
|
||||
@@ -81,11 +76,43 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<p class="text-center">Apprendre la syntaxe de <a href="https://daringfireball.net/projects/markdown/syntax"
|
||||
<p class="text-end">La syntaxe de <a href="https://daringfireball.net/projects/markdown/syntax"
|
||||
target="_blank">Markdown</a></li></p>
|
||||
|
||||
</form>
|
||||
|
||||
<h3>Contenus corrélés</h3>
|
||||
<p><a href="{{ request.route_url('related_edit', topic=entry.topic_id, id=entry.id, id_related='0') }}" class="btn btn-success" role="button">
|
||||
<span class="ti ti-plus"></span> Nouveau</a>
|
||||
</p>
|
||||
|
||||
<table class="table table-striped table-bordered table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<th>Titre</th>
|
||||
<th>Auteur</th>
|
||||
<th>Modifié le</th>
|
||||
<th>Par</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="table-group-divider">
|
||||
{% for related in relateds %}
|
||||
<tr>
|
||||
<td>{{ related.id_related }}</td>
|
||||
<td>
|
||||
<a href="{{ request.route_url('related_edit', topic=entry.topic_id, id=related.id, id_related=related.id_related) }}">
|
||||
{{ related.title_related }}
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ related.author_related }}</td>
|
||||
<td>{{ related.edit_date }}</td>
|
||||
<td>{{ related.creator }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Modal : Confirmation SUPRESSION -->
|
||||
<div id="confirmDelete" class="modal">
|
||||
<div class="modal-dialog">
|
||||
|
||||
53
cao_sunyata/templates/related_edit.jinja2
Normal file
53
cao_sunyata/templates/related_edit.jinja2
Normal file
@@ -0,0 +1,53 @@
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="card mb-0">
|
||||
<div class="card-body">
|
||||
|
||||
<form action="{{ url }}" method="post" class="form needs-validation">
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label required-field" for="id_related">Id du contenu corrélé</label>
|
||||
<input class="form-control" name="id_related" type="text" value="{{entry.id_related}}" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<a class="btn btn-light" href="{{ url_retour }}">
|
||||
<span class="ti ti-chevron-left"></span> Retour</a>
|
||||
{% if entry.id_related == '0' %}
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="ti ti-check"></span> Enregistrer</button>
|
||||
{% else %}
|
||||
<button class="btn btn-danger" type="button" data-bs-toggle="modal" data-bs-target="#confirmDelete">
|
||||
<span class="ti ti-x"></span> Supprimer</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
<!-- Modal : Confirmation SUPRESSION -->
|
||||
<div id="confirmDelete" class="modal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Supprimer le contenu corrélé</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<!-- The form is placed inside the body of modal -->
|
||||
<p>Etes-vous certain(e) de vouloir supprimer le contenu <b>{{ entry.id_related }}</b> ?</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<form id="confirmForm" method="post">
|
||||
<button type="submit" class="btn btn-danger" name="form.deleted">Supprimer</button>
|
||||
<button type="button" class="btn btn-success" data-bs-dismiss="modal">Fermer</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -45,7 +45,7 @@
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<br>
|
||||
<h3>Liste des Tags</h3>
|
||||
<p><a href="{{ request.route_url('tag_edit', topic=entry.topic, id='0') }}" class="btn btn-success" role="button">
|
||||
<span class="ti ti-plus"></span> Nouveau</a>
|
||||
|
||||
@@ -23,20 +23,19 @@ def blog(request):
|
||||
rel_label = 'Nội dung liên quan'
|
||||
else:
|
||||
scr_label = 'Source'
|
||||
rel_label = 'Contenu corrélé'
|
||||
rel_label = 'Contenu(s) corrélé(s)'
|
||||
|
||||
# insèrer le path de static/img
|
||||
body = entry.body.replace('static/', "%s/static/" % request.application_url)
|
||||
# convertir de markdown en HTML
|
||||
body_html = markdown.markdown(body, extensions=['footnotes'])
|
||||
# lire le contenu correle
|
||||
if entry.related != '0':
|
||||
related = get_entries_by_id(request, entry.related)
|
||||
# lire les contenus correles
|
||||
relateds = get_entries_related(request, entry.id)
|
||||
|
||||
return {
|
||||
'page_title': entry.title,
|
||||
'entry': entry,
|
||||
'related': related,
|
||||
'relateds': relateds,
|
||||
'scr_label': scr_label,
|
||||
'rel_label': rel_label,
|
||||
'body_html': body_html,
|
||||
@@ -101,13 +100,16 @@ def blog_edit(request):
|
||||
entry['editor'] = ''
|
||||
page_title = 'Nouvelle page'
|
||||
url_retour = request.route_url('topic', topic=topic)
|
||||
|
||||
relateds = []
|
||||
else:
|
||||
# modify post
|
||||
entry = get_entries_by_id(request, blog_id)
|
||||
if not entry:
|
||||
request.session.flash("Page non trouvée : %s" % blog_id, 'warning')
|
||||
return HTTPFound(url_retour)
|
||||
|
||||
# lire les contenus correles
|
||||
relateds = get_entries_related(request, entry.id)
|
||||
page_title = 'Modifier : ' + entry.title
|
||||
entry_slug = urlify(entry.title)
|
||||
url_retour = request.route_url('blog', id=blog_id, slug=entry_slug)
|
||||
@@ -160,6 +162,66 @@ def blog_edit(request):
|
||||
'blog_id': blog_id,
|
||||
'entry': entry,
|
||||
'tags': tags,
|
||||
'relateds': relateds,
|
||||
}
|
||||
|
||||
@view_config(route_name='related_edit', renderer='../templates/related_edit.jinja2', permission='view')
|
||||
def related_edit(request):
|
||||
# get tag parameters from request
|
||||
topic = request.matchdict['topic']
|
||||
id_related = request.matchdict['id_related']
|
||||
id = request.matchdict['id']
|
||||
id_related = request.matchdict['id_related']
|
||||
url = request.route_url('related_edit', topic=topic, id=id, id_related=id_related)
|
||||
url_retour = request.route_url('blog_edit',topic=topic, id=id)
|
||||
|
||||
if id_related == '0':
|
||||
# create a new related
|
||||
entry = {}
|
||||
entry['id'] = id
|
||||
entry['id_related'] = '0'
|
||||
entry['tag_name'] = ''
|
||||
page_title = "Nouveau Contenu corrélé"
|
||||
else:
|
||||
# modify post
|
||||
entry = get_entries_related_by_id(request, id, id_related)
|
||||
if not entry:
|
||||
request.session.flash(u"Contenu non trouvé : %s, %s" % (id, id_related), 'warning')
|
||||
return HTTPFound(location=request.route_url('related_edit', id=id, id_related=id_related))
|
||||
page_title = "Modification du contenu corrélé " + str(entry.id_related)
|
||||
|
||||
if 'form.submitted' in request.params :
|
||||
id_related = request.params["id_related"]
|
||||
|
||||
if id_related != '0' :
|
||||
# lire le post correle
|
||||
related = get_entries_by_id(request, id_related)
|
||||
if related:
|
||||
# post trouvé
|
||||
new_values = {}
|
||||
new_values['id'] = id
|
||||
new_values['id_related'] = id_related
|
||||
new_values['title_related'] = related.title
|
||||
new_values['author_related'] = related.author
|
||||
new_values['edited'] = datetime.datetime.now()
|
||||
new_values['creator'] = request.authenticated_userid
|
||||
create_related(request, id, id_related, new_values)
|
||||
request.session.flash(u"La fiche a été mise à jour avec succès.", 'success')
|
||||
return HTTPFound(location=url_retour)
|
||||
else:
|
||||
request.session.flash("Le contenu corrélé est invalide !", 'danger')
|
||||
return HTTPFound(location=url_retour)
|
||||
|
||||
if 'form.deleted' in request.params:
|
||||
delete_related(request, id, id_related)
|
||||
request.session.flash("La fiche a été supprimée avec succès.", 'success')
|
||||
return HTTPFound(location=url_retour)
|
||||
|
||||
return {
|
||||
'page_title': page_title,
|
||||
'url': url,
|
||||
'url_retour': url_retour,
|
||||
'entry': entry,
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user