added button to dupplicate a post

This commit is contained in:
2022-05-19 16:45:24 +02:00
parent 9c61a8e98b
commit f018b418c0
14 changed files with 59 additions and 19 deletions

View File

@@ -13,7 +13,7 @@ from sqlalchemy.orm import relationship
from webhelpers2.text import urlify #<- will generate slugs from webhelpers2.text import urlify #<- will generate slugs
from webhelpers2.date import distance_of_time_in_words #<- human friendly dates from webhelpers2.date import distance_of_time_in_words #<- human friendly dates
import unidecode
class BlogRecord(Base): class BlogRecord(Base):
__tablename__ = 'entries' __tablename__ = 'entries'
@@ -30,7 +30,9 @@ class BlogRecord(Base):
@property @property
def slug(self): def slug(self):
return urlify(self.title) # remove ascents
title = unidecode.unidecode(self.title)
return urlify(title)
@property @property
def created_in_words(self): def created_in_words(self):

View File

@@ -3,6 +3,7 @@ def includeme(config):
config.add_route('home', '/') config.add_route('home', '/')
config.add_route('apropos', '/apropos') config.add_route('apropos', '/apropos')
config.add_route('blog', '/blog/{id:\d+}/{slug}') config.add_route('blog', '/blog/{id:\d+}/{slug}')
config.add_route('blog_copy', '/blog_copy/{topic}/{id}')
config.add_route('blog_edit', '/blog_edit/{topic}/{id}') config.add_route('blog_edit', '/blog_edit/{topic}/{id}')
config.add_route('blog_search', '/blog_search') config.add_route('blog_search', '/blog_search')
config.add_route('login', '/login') config.add_route('login', '/login')

View File

@@ -14,6 +14,9 @@ class BlogRecordService(object):
if request.authenticated_userid == None: if request.authenticated_userid == None:
# if user is anonym, display only published posts # if user is anonym, display only published posts
query = query.filter(BlogRecord.status == 'publié') query = query.filter(BlogRecord.status == 'publié')
if request.authenticated_userid != 'admin':
# if user is not 'admin', hide admin posts
query = query.filter(BlogRecord.tag != 'admin')
if tag != '': if tag != '':
query = query.filter(BlogRecord.tag == tag) query = query.filter(BlogRecord.tag == tag)
query = query.order_by(BlogRecord.tag, BlogRecord.title).all() query = query.order_by(BlogRecord.tag, BlogRecord.title).all()
@@ -44,7 +47,7 @@ class BlogRecordService(object):
@classmethod @classmethod
def get_activities(cls, request): def get_activities(cls, request):
# gest the Activities section # gest the Activities section
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id == 'ADM' and BlogRecord.tag == 'Activities') query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id == 'ADM' and BlogRecord.tag == 'activities')
query = query.order_by(sa.desc(BlogRecord.created)).first() query = query.order_by(sa.desc(BlogRecord.created)).first()
return query return query

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -8,7 +8,9 @@
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a> <span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
<a href="{{ request.route_url('blog_edit', topic=entry.topic_id, id=entry.id) }}" class="btn btn-primary" role="button"> <a href="{{ request.route_url('blog_edit', topic=entry.topic_id, id=entry.id) }}" class="btn btn-primary" role="button">
<span class="glyphicon glyphicon-pencil"></span> Modifier</a> <span class="glyphicon glyphicon-pencil"></span> Modifier</a>
</p> <a href="{{ request.route_url('blog_copy', topic=entry.topic_id, id=entry.id) }}" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-duplicate"></span> Duppliquer</a>
</p>
{% endif %} {% endif %}
@@ -18,6 +20,9 @@
<p> <p>
Auteur : <strong>{{ entry.author }}</strong><br> Auteur : <strong>{{ entry.author }}</strong><br>
Publié le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong><br> Publié le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong><br>
{% if request.authenticated_userid %}
Topic - Tag : <strong>{{ entry.topic_id }}</strong> - <strong>{{ entry.tag }}</strong>
{% endif %}
</p> </p>
{% endblock %} {% endblock %}

View File

@@ -73,7 +73,7 @@
<div class="row"> <div class="row">
<div class="col-xs-4"> <div class="col-xs-4">
<p> <p>
<a href="{{ request.route_url('blog', id=10, slug='la-m%25C3%25A9ditation-sunyata-%253A-un-aper%25C3%25A7u') }}"> <a href="{{ request.route_url('blog', id=10, slug='la-meditation-sunyata-%253A-un-apercu') }}">
<img src="{{ request.static_url('cao_blogr:static/ni-su.jpg') }}" class="img-circle person" alt="Médiation Sunyata" width="255" height="255"> <img src="{{ request.static_url('cao_blogr:static/ni-su.jpg') }}" class="img-circle person" alt="Médiation Sunyata" width="255" height="255">
<br /><b>La Méditation SUNYATA</b> <br /><b>La Méditation SUNYATA</b>
</a> </a>
@@ -82,7 +82,7 @@
</div> </div>
<div class="col-xs-4"> <div class="col-xs-4">
<p> <p>
<a href="{{ request.route_url('blog', id=2, slug='biographie-du-ma%25C3%25AEtre-thich-th%25C3%25B4ng-tri%25C3%25AAt-%25281929-2019%2529') }}"> <a href="{{ request.route_url('blog', id=2, slug='biographie-du-maitre-thich-thong-triet-%25281929-2019%2529') }}">
<img src="{{ request.static_url('cao_blogr:static/img/thong-triet.jpg') }}" class="img-circle person" alt="Maître Thông Triêt" width="255" height="255"> <img src="{{ request.static_url('cao_blogr:static/img/thong-triet.jpg') }}" class="img-circle person" alt="Maître Thông Triêt" width="255" height="255">
<br /><b>Le Maître Fondateur</b> <br /><b>Le Maître Fondateur</b>
</a> </a>
@@ -91,10 +91,11 @@
Il s'est ensuite établi aux Etats Unis et a commencé à enseigner en 1995 dans l'Oregon. </p> Il s'est ensuite établi aux Etats Unis et a commencé à enseigner en 1995 dans l'Oregon. </p>
</div> </div>
<div class="col-xs-4"> <div class="col-xs-4">
<a href="#demo3" data-toggle="collapse"> <p>
<a href="{{ request.route_url('blog', id=22, slug='aller-droit-au-samadhi-avec-les-deux-mots-%2522parle-pas%2522') }}">
<img src="{{ request.static_url('cao_blogr:static/khong-noi.jpg') }}" class="img-circle person" alt="Khong Noi" width="255" height="255"> <img src="{{ request.static_url('cao_blogr:static/khong-noi.jpg') }}" class="img-circle person" alt="Khong Noi" width="255" height="255">
<br /><b>La technique « PARLE PAS »</b>
</a> </a>
<p><b>La technique « PARLE PAS »</p></b>
<p>Depuis 2016, la technique <b>PARLE PAS</b> (ou KHÔNG NÓI) est devenu la pierre angulaire de la pratique de la méditation SUNYATA. Cette technique conduit le méditant vers la maîtrise de ses pensées à travers un processus graduel d'extinction des murmures mentaux.</p> <p>Depuis 2016, la technique <b>PARLE PAS</b> (ou KHÔNG NÓI) est devenu la pierre angulaire de la pratique de la méditation SUNYATA. Cette technique conduit le méditant vers la maîtrise de ses pensées à travers un processus graduel d'extinction des murmures mentaux.</p>
</div> </div>
</div> </div>

View File

@@ -111,7 +111,7 @@
<div class="row"> <div class="row">
<p class="text-center"> <p class="text-center">
&copy; 2022&nbsp;-&nbsp;Méditation SUNYATA Paris &copy; 2022&nbsp;-&nbsp;Méditation SUNYATA Paris
&nbsp;|&nbsp;<a href="{{ request.route_url('blog', id=1, slug='mentions-l%25C3%25A9gales') }}">Mentions légales</a> &nbsp;|&nbsp;<a href="{{ request.route_url('blog', id=1, slug='mentions-legales') }}">Mentions légales</a>
&nbsp;|&nbsp;<a href="{{ request.route_url('topic', topic='FR9') }}">A propos</a> &nbsp;|&nbsp;<a href="{{ request.route_url('topic', topic='FR9') }}">A propos</a>
</p> </p>

View File

@@ -3,7 +3,7 @@
{% block content %} {% block content %}
<div class="row text-center"> <div class="row text-center">
{% if request.authenticated_userid %} {% if request.authenticated_userid == 'admin' %}
<div class="col-sm-3"> <div class="col-sm-3">
<a href=" {{request.route_url('users')}} "><span class="glyphicon glyphicon-user icone-big"></span> <a href=" {{request.route_url('users')}} "><span class="glyphicon glyphicon-user icone-big"></span>
<h4>UTILISATEURS</h4> <h4>UTILISATEURS</h4>
@@ -18,9 +18,8 @@
</div> </div>
<div class="row"> <div class="row">
<h2>Pages internes</h2> <h2>Pages internes</h2>
{% if request.authenticated_userid %} {% if request.authenticated_userid == 'admin' %}
<p> <p>
<a href="{{ request.route_url('blog_edit', topic=topic, id='0') }}" class="btn btn-success" role="button"> <a href="{{ request.route_url('blog_edit', topic=topic, id='0') }}" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-plus"></span> Nouveau</a> <span class="glyphicon glyphicon-plus"></span> Nouveau</a>
@@ -39,7 +38,7 @@
{% if entry.status == 'brouillon' %} {% if entry.status == 'brouillon' %}
<td><span class="label label-danger">{{ entry.status }}</span></td> <td><span class="label label-danger">{{ entry.status }}</span></td>
{% else %} {% else %}
td> </td> <td> </td>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>

View File

@@ -31,6 +31,35 @@ def blog(request):
} }
@view_config(route_name='blog_copy',
renderer='cao_blogr:templates/blog_copy.jinja2', permission='view')
def blog_copy(request):
# get post parameters from request
topic = request.matchdict['topic']
blog_id = request.matchdict['id']
# get the post
entry = BlogRecordService.by_id(request, blog_id)
if not entry:
request.session.flash("Page non trouvée : %s" % blog_id, 'warning')
return HTTPFound(location=request.route_url('topic', topic=topic))
# create a new post
dup_entry = BlogRecord()
dup_entry.title = entry.title + ' - copie'
dup_entry.body = entry.body
dup_entry.topic_id = entry.topic_id
dup_entry.tag = entry.tag
dup_entry.author = entry.author
dup_entry.status = entry.status
request.dbsession.add(dup_entry)
request.session.flash("La page a été duppliquée avec succès", 'success')
return HTTPFound(location=request.route_url('topic', topic=topic))
@view_config(route_name='blog_edit', @view_config(route_name='blog_edit',
renderer='cao_blogr:templates/blog_edit.jinja2', permission='view') renderer='cao_blogr:templates/blog_edit.jinja2', permission='view')
def blog_edit(request): def blog_edit(request):
@@ -54,8 +83,8 @@ def blog_edit(request):
# modify post # modify post
entry = BlogRecordService.by_id(request, blog_id) entry = BlogRecordService.by_id(request, blog_id)
if not entry: if not entry:
request.session.flash(u"Page non trouvée : %s" % blog_id, 'warning') request.session.flash("Page non trouvée : %s" % blog_id, 'warning')
return HTTPFound(location=request.route_url('home')) return HTTPFound(location=request.route_url('topic', topic=topic))
form = BlogUpdateForm(request.POST, entry) form = BlogUpdateForm(request.POST, entry)
form.tag.choices = [(row.tag, row.tag_name) for row in tags] form.tag.choices = [(row.tag, row.tag_name) for row in tags]
page_title = 'Modifier : ' + entry.title page_title = 'Modifier : ' + entry.title

View File

@@ -83,7 +83,7 @@ Le site "meditation-sunyata.paris"
} }
@view_config(route_name='settings', renderer='cao_blogr:templates/settings.jinja2', permission='manage') @view_config(route_name='settings', renderer='cao_blogr:templates/settings.jinja2', permission='view')
def settings(request): def settings(request):
# lire toutes les docs du topic # lire toutes les docs du topic
@@ -196,7 +196,7 @@ def user_pwd(request):
} }
@view_config(route_name='topics', @view_config(route_name='topics',
renderer='cao_blogr:templates/topics.jinja2', permission='manage') renderer='cao_blogr:templates/topics.jinja2', permission='view')
def topics(request): def topics(request):
# get all topics # get all topics
topics = BlogRecordService.get_topics(request) topics = BlogRecordService.get_topics(request)
@@ -206,7 +206,7 @@ def topics(request):
} }
@view_config(route_name='topic_edit', @view_config(route_name='topic_edit',
renderer='cao_blogr:templates/topic_edit.jinja2', permission='manage') renderer='cao_blogr:templates/topic_edit.jinja2', permission='view')
def topic_edit(request): def topic_edit(request):
# get topic parameters from request # get topic parameters from request
topic = request.matchdict['topic'] topic = request.matchdict['topic']
@@ -254,7 +254,7 @@ def topic_edit(request):
} }
@view_config(route_name='tag_edit', @view_config(route_name='tag_edit',
renderer='cao_blogr:templates/tag_edit.jinja2', permission='manage') renderer='cao_blogr:templates/tag_edit.jinja2', permission='view')
def tag_edit(request): def tag_edit(request):
# get tag parameters from request # get tag parameters from request
topic = request.matchdict['topic'] topic = request.matchdict['topic']