finalize topic template

This commit is contained in:
2022-05-03 19:24:51 +02:00
parent cd7e21bb53
commit e7bebbe5e4
13 changed files with 101 additions and 65 deletions

Binary file not shown.

View File

@@ -1,6 +1,6 @@
from wtforms import Form, StringField, TextAreaField, SelectField from wtforms import Form, StringField, TextAreaField, SelectField
from wtforms import IntegerField, PasswordField from wtforms import IntegerField, PasswordField
from wtforms.validators import InputRequired, DataRequired, Length from wtforms.validators import InputRequired, Length
from wtforms.widgets import HiddenInput from wtforms.widgets import HiddenInput
strip_filter = lambda x: x.strip() if x else None strip_filter = lambda x: x.strip() if x else None
@@ -10,7 +10,7 @@ class BlogCreateForm(Form):
filters=[strip_filter]) filters=[strip_filter])
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('Tag', validators=[DataRequired()], id='select_tag') tag = SelectField('Sous-rubrique')
class BlogUpdateForm(BlogCreateForm): class BlogUpdateForm(BlogCreateForm):

View File

@@ -1,9 +1,10 @@
def includeme(config): def includeme(config):
config.add_static_view('static', 'static', cache_max_age=3600) config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/') config.add_route('home', '/')
config.add_route('admin', '/admin')
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_edit', '/blog_edit/{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')
config.add_route('logout', '/logout') config.add_route('logout', '/logout')

View File

@@ -10,9 +10,9 @@ from markdown2 import Markdown
class BlogRecordService(object): class BlogRecordService(object):
@classmethod @classmethod
def by_topic(cls, request, topic): def by_topic(cls, request, topic, tag):
# get posts by topic # get posts by topic
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id == topic) query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id == topic, BlogRecord.tag == tag)
query = query.order_by(BlogRecord.tag, BlogRecord.title).all() query = query.order_by(BlogRecord.tag, BlogRecord.title).all()
return query return query
@@ -25,8 +25,8 @@ class BlogRecordService(object):
@classmethod @classmethod
def by_id(cls, request, _id): def by_id(cls, request, _id):
query = request.dbsession.query(BlogRecord) query = request.dbsession.query(BlogRecord).filter(BlogRecord.id == _id).first()
return query.get(_id) return query
@classmethod @classmethod
def get_last_five(cls, request): def get_last_five(cls, request):
@@ -39,12 +39,12 @@ class BlogRecordService(object):
def get_tags_byTopic(cls, request, topic): def get_tags_byTopic(cls, request, topic):
# gest the last 5 items modified # gest the last 5 items modified
query = request.dbsession.query(Tags).filter(Tags.topic == topic) query = request.dbsession.query(Tags).filter(Tags.topic == topic)
query = query.order_by(Tags.tag).all() query = query.order_by(Tags.tag_name).all()
return query return query
@classmethod @classmethod
def get_topic_name(cls, request, id): def get_topic_name(cls, request, id):
# gest the last 5 items modified # gest the name of a given topic
query = request.dbsession.query(Topics).filter(Topics.topic == id).first() query = request.dbsession.query(Topics).filter(Topics.topic == id).first()
return query.topic_name.upper() return query.topic_name.upper()

View File

@@ -146,3 +146,8 @@ textarea {
color: red; color: red;
margin-left:2px; margin-left:2px;
} }
.icone-big {
color: #f4511e;
font-size: 50px;
}

View File

@@ -0,0 +1,23 @@
{% extends "cao_blogr:templates/layout.jinja2" %}
{% block content %}
<div class="container-fluid">
<div class="row text-center">
<div class="col-sm-3">
<a href=" {{request.route_url('users')}} "><span class="glyphicon glyphicon-user icone-big"></span></a>
<h4>UTILISATEURS</h4>
</div>
<div class="col-sm-3">
<a href=" {{request.route_url('users')}} "><span class="glyphicon glyphicon-user icone-big"></span></a>
<h4>TOPICS / TAGS</h4>
</div>
<div class="col-sm-3">
<a href=" {{request.route_url('topic', topic='ADM')}} "><span class="glyphicon glyphicon-file icone-big"></span></a>
<h4>PAGES ADMIN</h4>
</div>
</div>
</div>
{% endblock %}

View File

@@ -4,8 +4,8 @@
{% if request.authenticated_userid %} {% if request.authenticated_userid %}
<p> <p>
<a href="{{ request.route_url('home') }}">[ Retour ]</a> <a href="{{ request.route_url('topic', topic=entry.topic_id) }}">[ Retour ]</a>
<a href="{{ request.route_url('blog_edit', id=entry.id) }}">[ Modifier ]</a> <a href="{{ request.route_url('blog_edit', topic=entry.topic_id, id=entry.id) }}">[ Modifier ]</a>
</p> </p>
{% endif %} {% endif %}

View File

@@ -20,37 +20,27 @@
{{ form.body(class_='form-control', cols="35", rows="20") }} {{ form.body(class_='form-control', cols="35", rows="20") }}
</div> </div>
{% for error in form.topic.errors %}
<div class="error">{{ error }}</div>
{% endfor %}
<div class="form-group">
<label class="required-field" for="topic">{{ form.topic.label }}</label>
{{ form.topic(class_='form-control') }}
</div>
{% for error in form.tag.errors %}
<div class="text-danger">{{ error }}</div>
{% endfor %}
<div class="form-group"> <div class="form-group">
<label class="required-field" for="tag">{{ form.tag.label }}</label> <label class="required-field" for="tag">{{ form.tag.label }}</label>
{{ form.tag(class_='form-control') }} {{ form.tag(class_='form-control') }}
</div> </div>
<p> <p>
Topic : <strong>{{ entry.topic }}</strong> Topic : <strong>{{ entry.topic_id }}</strong>
&nbsp;|&nbsp; {% if blog_id != '0' %}
Tag : <strong>{{ entry.tag }}</strong> &nbsp;|&nbsp;
&nbsp;|&nbsp; Créé le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong>
Créé le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong> &nbsp;|&nbsp;
&nbsp;|&nbsp; Modifié le : <strong>{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}</strong>
Modifié le : <strong>{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}</strong> {% endif %}
</p> </p>
<br /> <br />
<div class="form-group"> <div class="form-group">
<a class="btn btn-default" href="{{ request.route_url('home') }}"><span class="glyphicon glyphicon-chevron-left"></span> Retour</a> <a class="btn btn-default" href="{{ request.route_url('topic', topic=entry.topic_id) }}">
<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 action == 'edit' %} {% if blog_id != '0' %}
<button class="btn btn-warning" type="submit" name="form.deleted"> <button class="btn btn-warning" type="submit" name="form.deleted">
<span class="glyphicon glyphicon-remove"></span> Supprimer</button> <span class="glyphicon glyphicon-remove"></span> Supprimer</button>
{% endif %} {% endif %}

View File

@@ -149,7 +149,6 @@
<!-- Container (POSTS Section) --> <!-- Container (POSTS Section) -->
<div id="posts"> <div id="posts">
<br> <br>
<h2 class="text-center">DERNIERES PUBLICATIONS</h2> <h2 class="text-center">DERNIERES PUBLICATIONS</h2>
<ul> <ul>
@@ -174,7 +173,7 @@
<div class="row"> <div class="row">
<div class="col-xs-4"> <div class="col-xs-4">
<p><span class="glyphicon glyphicon-envelope"></span>&nbsp;Centre Méditation Sunyata Paris<br> <p><span class="glyphicon glyphicon-envelope"></span>&nbsp;Centre de Méditation Sunyata<br>
116 bd Maréchal Foch<br> 116 bd Maréchal Foch<br>
93160 NOISY LE GRAND 93160 NOISY LE GRAND
</p> </p>

View File

@@ -91,7 +91,7 @@
|&nbsp;<a href="{{ request.route_url('topic', topic='FR2') }}">Pratique</a>&nbsp; |&nbsp;<a href="{{ request.route_url('topic', topic='FR2') }}">Pratique</a>&nbsp;
|&nbsp;<a href="{{ request.route_url('topic', topic='FR3') }}">Qi Gong</a>&nbsp; |&nbsp;<a href="{{ request.route_url('topic', topic='FR3') }}">Qi Gong</a>&nbsp;
|&nbsp;<a href="{{ request.route_url('topic', topic='FR4') }}">Sciences</a>&nbsp; |&nbsp;<a href="{{ request.route_url('topic', topic='FR4') }}">Sciences</a>&nbsp;
|&nbsp;<a href="{{ request.route_url('topic', topic='FR9') }}">Méditation Sunyata</a>&nbsp; |&nbsp;<a href="{{ request.route_url('topic', topic='FR9') }}">A propos</a>&nbsp;
|</big> |</big>
</p> </p>
<p class="text-center"> <p class="text-center">
@@ -99,7 +99,7 @@
&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-l%25C3%25A9gales') }}">Mentions légales</a>
{% if request.authenticated_userid == 'admin' %} {% if request.authenticated_userid == 'admin' %}
&nbsp|&nbsp<a href="{{request.route_url('users')}}">Utilisateurs</a> &nbsp|&nbsp<a href="{{request.route_url('admin')}}">Admin</a>
{% endif %} {% endif %}
</p> </p>

View File

@@ -3,21 +3,11 @@
{% block content %} {% block content %}
{% if request.authenticated_userid %} {% if request.authenticated_userid %}
<p><a href="{{ request.route_url('blog_edit', topic='topic', id='0') }}"> <p><a href="{{ request.route_url('blog_edit', topic=topic, id='0') }}">
[Nouveau post]</a> [Nouveau post]</a>
</p> </p>
{% endif%} {% endif%}
<ul> {{ liste | safe }}
{% for entry in items %}
<li>
{{ entry.edited.strftime("%d-%m-%Y") }}&nbsp;&nbsp;
<a href="{{ request.route_url('blog', id=entry.id, slug=entry.slug) }}">
<span class="glyphicon glyphicon-menu-right"></span>&nbsp;&nbsp;{{ entry.title }}
</a>
</li>
{% endfor %}
</ul>
{% endblock %} {% endblock %}

View File

@@ -12,8 +12,8 @@ def blog(request):
blog_id = request.matchdict['id'] blog_id = request.matchdict['id']
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(u"Page non trouvée : %s" % blog_id, 'warning')
return HTTPFound(location=request.route_url('home')) return HTTPFound(location=request.route_url('home'))
# just created ? convert body to html # just created ? convert body to html
if entry.body_html == '': if entry.body_html == '':
@@ -29,18 +29,21 @@ def blog(request):
renderer='cao_blogr:templates/blog_edit.jinja2', renderer='cao_blogr:templates/blog_edit.jinja2',
permission='view') permission='view')
def blog_edit(request): def blog_edit(request):
# get post id from request # get post parameters from request
topic = request.matchdict['topic']
blog_id = request.matchdict['id'] blog_id = request.matchdict['id']
url = request.route_url('blog_edit',id=blog_id) url = request.route_url('blog_edit',topic=topic, id=blog_id)
# get the list of tags of this topic
tags = BlogRecordService.get_tags_byTopic(request, topic)
if blog_id == '0': if blog_id == '0':
# create a new post # create a new post
entry = BlogRecord() entry = BlogRecord()
# set default values entry.topic_id = topic
entry.tag = 'pyramid'
entry.topic = 'blog'
form = BlogCreateForm(request.POST, entry) form = BlogCreateForm(request.POST, entry)
form.tag.choices = [(row.tag, row.title) for row in BlogRecordService.tags] form.tag.choices = [(row.tag, row.tag_name) for row in tags]
else: else:
# modify post # modify post
entry = BlogRecordService.by_id(request, blog_id) entry = BlogRecordService.by_id(request, blog_id)
@@ -48,15 +51,17 @@ def blog_edit(request):
request.session.flash(u"Page non trouvée : %s" % blog_id, 'warning') request.session.flash(u"Page non trouvée : %s" % blog_id, 'warning')
return HTTPFound(location=request.route_url('home')) return HTTPFound(location=request.route_url('home'))
form = BlogUpdateForm(request.POST, entry) form = BlogUpdateForm(request.POST, entry)
form.tag.choices = [(row.tag, row.tag_name) for row in tags]
if 'form.submitted' in request.params and form.validate(): if 'form.submitted' in request.params and form.validate():
if blog_id == '0': if blog_id == '0':
form.populate_obj(entry) form.populate_obj(entry)
entry.title_url = entry.slug entry.title_url = entry.slug
entry.topic_id = topic
request.dbsession.add(entry) request.dbsession.add(entry)
return HTTPFound(location=request.route_url('home')) return HTTPFound(location=request.route_url('topic', topic=topic))
else: else:
del form.id # SECURITY: prevent overwriting of primary key del form.id # SECURITY: prevent overwriting of primary key
form.populate_obj(entry) form.populate_obj(entry)
@@ -70,6 +75,7 @@ def blog_edit(request):
'page_title': entry.title, 'page_title': entry.title,
'url': url, 'url': url,
'form': form, 'form': form,
'blog_id': blog_id,
'entry': entry, 'entry': entry,
} }
@@ -101,12 +107,25 @@ def topic(request):
# get the topic_name # get the topic_name
topic_name = BlogRecordService.get_topic_name(request, topic) topic_name = BlogRecordService.get_topic_name(request, topic)
# get all the tags of this topic
tags = BlogRecordService.get_tags_byTopic(request, topic)
# lire toutes les docs du topic # generate the items list group by tag
items = BlogRecordService.by_topic(request, topic) liste = ''
for tag in tags:
liste += '<h3>' + tag.tag_name + '</h3>'
# lire toutes les docs du topic
items = BlogRecordService.by_topic(request, topic, tag.tag)
if items:
liste += '<ul>'
for item in items:
liste += '<li>{0} <a href="{1}"><span class="glyphicon glyphicon-menu-right"></span>{2}</a></li>'.format(
item.edited.strftime("%d-%m-%Y"), request.route_url('blog', id=item.id, slug=item.slug), item.title)
liste += '</ul>'
else:
liste += '<ul><li> </li></ul>'
return { return {
'page_title': topic_name, 'page_title': topic_name,
'topic': topic, 'topic': topic,
'items': items, 'liste': liste,
} }

View File

@@ -33,6 +33,15 @@ def home(request):
} }
@view_config(route_name='admin',
renderer='cao_blogr:templates/admin.jinja2')
def admin(request):
return {
'page_title': "Admin",
}
@view_config(route_name='apropos', @view_config(route_name='apropos',
renderer='cao_blogr:templates/apropos.jinja2') renderer='cao_blogr:templates/apropos.jinja2')
def apropos(request): def apropos(request):