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

View File

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

View File

@@ -10,9 +10,9 @@ from markdown2 import Markdown
class BlogRecordService(object):
@classmethod
def by_topic(cls, request, topic):
def by_topic(cls, request, topic, tag):
# 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()
return query
@@ -25,8 +25,8 @@ class BlogRecordService(object):
@classmethod
def by_id(cls, request, _id):
query = request.dbsession.query(BlogRecord)
return query.get(_id)
query = request.dbsession.query(BlogRecord).filter(BlogRecord.id == _id).first()
return query
@classmethod
def get_last_five(cls, request):
@@ -39,12 +39,12 @@ class BlogRecordService(object):
def get_tags_byTopic(cls, request, topic):
# gest the last 5 items modified
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
@classmethod
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()
return query.topic_name.upper()

View File

@@ -146,3 +146,8 @@ textarea {
color: red;
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 %}
<p>
<a href="{{ request.route_url('home') }}">[ Retour ]</a>
<a href="{{ request.route_url('blog_edit', id=entry.id) }}">[ Modifier ]</a>
<a href="{{ request.route_url('topic', topic=entry.topic_id) }}">[ Retour ]</a>
<a href="{{ request.route_url('blog_edit', topic=entry.topic_id, id=entry.id) }}">[ Modifier ]</a>
</p>
{% endif %}

View File

@@ -20,37 +20,27 @@
{{ form.body(class_='form-control', cols="35", rows="20") }}
</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">
<label class="required-field" for="tag">{{ form.tag.label }}</label>
{{ form.tag(class_='form-control') }}
</div>
<p>
Topic : <strong>{{ entry.topic }}</strong>
&nbsp;|&nbsp;
Tag : <strong>{{ entry.tag }}</strong>
&nbsp;|&nbsp;
Créé le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong>
&nbsp;|&nbsp;
Modifié le : <strong>{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}</strong>
Topic : <strong>{{ entry.topic_id }}</strong>
{% if blog_id != '0' %}
&nbsp;|&nbsp;
Créé le : <strong>{{ entry.created.strftime("%d-%m-%Y - %H:%M") }}</strong>
&nbsp;|&nbsp;
Modifié le : <strong>{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}</strong>
{% endif %}
</p>
<br />
<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">
<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">
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
{% endif %}

View File

@@ -149,7 +149,6 @@
<!-- Container (POSTS Section) -->
<div id="posts">
<br>
<h2 class="text-center">DERNIERES PUBLICATIONS</h2>
<ul>
@@ -174,7 +173,7 @@
<div class="row">
<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>
93160 NOISY LE GRAND
</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='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='FR9') }}">Méditation Sunyata</a>&nbsp;
|&nbsp;<a href="{{ request.route_url('topic', topic='FR9') }}">A propos</a>&nbsp;
|</big>
</p>
<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>
{% 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 %}
</p>

View File

@@ -3,21 +3,11 @@
{% block content %}
{% 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>
</p>
{% endif%}
<ul>
{% 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>
{{ liste | safe }}
{% endblock %}

View File

@@ -12,8 +12,8 @@ def blog(request):
blog_id = request.matchdict['id']
entry = BlogRecordService.by_id(request, blog_id)
if not entry:
request.session.flash(u"Page non trouvée : %s" % blog_id, 'warning')
return HTTPFound(location=request.route_url('home'))
request.session.flash(u"Page non trouvée : %s" % blog_id, 'warning')
return HTTPFound(location=request.route_url('home'))
# just created ? convert body to html
if entry.body_html == '':
@@ -29,18 +29,21 @@ def blog(request):
renderer='cao_blogr:templates/blog_edit.jinja2',
permission='view')
def blog_edit(request):
# get post id from request
# get post parameters from request
topic = request.matchdict['topic']
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':
# create a new post
entry = BlogRecord()
# set default values
entry.tag = 'pyramid'
entry.topic = 'blog'
entry.topic_id = topic
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:
# modify post
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')
return HTTPFound(location=request.route_url('home'))
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 blog_id == '0':
form.populate_obj(entry)
entry.title_url = entry.slug
entry.topic_id = topic
request.dbsession.add(entry)
return HTTPFound(location=request.route_url('home'))
return HTTPFound(location=request.route_url('topic', topic=topic))
else:
del form.id # SECURITY: prevent overwriting of primary key
form.populate_obj(entry)
@@ -70,6 +75,7 @@ def blog_edit(request):
'page_title': entry.title,
'url': url,
'form': form,
'blog_id': blog_id,
'entry': entry,
}
@@ -101,12 +107,25 @@ def topic(request):
# get the topic_name
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
items = BlogRecordService.by_topic(request, topic)
# generate the items list group by tag
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 {
'page_title': topic_name,
'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',
renderer='cao_blogr:templates/apropos.jinja2')
def apropos(request):