Files
cao_sunyata/cao_blogr/views/default.py

301 lines
9.7 KiB
Python

from pyramid.view import (
forbidden_view_config,
view_config,
)
from pyramid.httpexceptions import HTTPFound
from pyramid.security import remember, forget
from pyramid_mailer.message import Message
from ..services.user import UserService
from ..services.blog_record import BlogRecordService
from ..forms import UserCreateForm, TopicForm, TagForm
from ..models.user import User
from ..models.blog_record import Topics, Tags
@view_config(route_name='home',
renderer='cao_blogr:templates/home.jinja2')
def home(request):
# images list for the carousel
dir = request.static_url('cao_blogr:static/carousel')
car_images = [dir + '/S01.jpg',
dir + '/S02.jpg',
dir + '/S03.jpg',
dir + '/S06.jpg',
dir + '/S09.jpg',
dir + '/S12.jpg',
dir + '/S15.jpg',
dir + '/S18.jpg',
dir + '/S21.jpg',
dir + '/S25.jpg']
# get the Activities section
activ = BlogRecordService.get_activities(request)
# insèrer le path de static/img
activities = activ.body.replace('static/img/', "%s/static/img/" % request.application_url)
# get the last created posts
last_five = BlogRecordService.get_last_created(request)
name = ''
email = ''
comments = ''
ngot = ''
if 'form.submitted' in request.params :
name = request.params['name']
email = request.params['email']
comments = request.params['comments']
ngot = request.params['ngot']
# honeypot filled ?
if not ngot:
# no, message is not spam, send it
body = """
Bonjour,
L' expéditeur : {0} ( {1} )
a envoyé le message suivant via le formulaire de Contact du site :
----- Début du message -----
{2}
----- Fin du message -----
Le site "meditation-sunyata.paris"
""".format(name, email, comments)
message = Message(subject="[MSParis] Message de contact",
sender=request.registry.settings['cao_blogr.admin_email'],
body=body)
message.add_recipient('phuoc@caotek.fr')
mailer = request.registry['mailer']
mailer.send_immediately(message)
request.session.flash("Votre message a bien été envoyé au webmestre. Merci de votre intérêt pour notre site", "success")
return {
'page_title': "",
'last_five': last_five,
'activities': activities,
'car_images': car_images,
'name': name,
'email': email,
'comments': comments,
}
@view_config(route_name='settings', renderer='cao_blogr:templates/settings.jinja2', permission='manage')
def settings(request):
# lire toutes les docs du topic
topic = 'ADM'
items = BlogRecordService.by_topic(request, topic, '')
return {
'page_title': "Paramètres",
'topic': topic,
'items': items,
}
@view_config(route_name='apropos',
renderer='cao_blogr:templates/apropos.jinja2')
def apropos(request):
return {
'page_title': "A propos",
}
@view_config(route_name='login',
renderer='cao_blogr:templates/login.jinja2')
@forbidden_view_config(renderer='cao_blogr:templates/login.jinja2')
def login(request):
username = request.POST.get('username')
if username:
user = UserService.by_name(request, username)
if user and user.verify_password(request.POST.get('password')):
headers = remember(request, user.name)
request.session.flash("Bonjour %s, Bienvenue sur le site !" % username, 'success')
return HTTPFound(location=request.route_url('home'), headers=headers)
else:
headers = forget(request)
request.session.flash("Login et mot de passe invalides. La connexion a échoué.", "danger")
return {
'page_title': "",
}
@view_config(route_name='logout', renderer='string')
def logout(request):
headers = forget(request)
request.session.flash('Vous avez bien été déconnecté.', 'success')
return HTTPFound(location=request.route_url('home'), headers=headers)
@view_config(route_name='users',
renderer='cao_blogr:templates/users.jinja2', permission='manage')
def users(request):
# get all users
users = UserService.all(request)
return {
'page_title': "Liste des utilisateurs",
'users': users
}
@view_config(route_name='user_add',
renderer='cao_blogr:templates/user_add.jinja2', permission='manage')
def user_add(request):
name = request.matchdict['name']
# nouveau
form = UserCreateForm(request.POST)
if 'form.submitted' in request.params and form.validate():
# créer nouveau
new_user = User(name=form.username.data)
new_user.set_password(form.password.data.encode('utf8'))
request.dbsession.add(new_user)
return HTTPFound(location=request.route_url('users'))
return {
'page_title': 'Nouvel utilisateur',
'form': form,
'name': name,
}
@view_config(route_name='user_pwd',
renderer='cao_blogr:templates/user_pwd.jinja2', permission='manage')
def user_pwd(request):
# reset password or delete user
name = request.matchdict['name']
# lire la fiche du membre
entry = UserService.by_name(request, name)
if not entry:
request.session.flash(u"Utilisateur non trouvé : %s" % name, 'warning')
return HTTPFound(location=request.route_url('users'))
if 'form.submitted' in request.params:
mdp = request.params["new_password"]
entry.set_password(mdp.encode('utf8'))
return HTTPFound(location=request.route_url('users'))
if 'form.deleted' in request.params:
UserService.delete(request, entry.id)
request.session.flash("La fiche a été supprimée avec succès.", 'success')
return HTTPFound(location=request.route_url('users'))
return {
'page_title': "Utilisateur : %s" %(entry.name),
'entry': entry,
}
@view_config(route_name='topics',
renderer='cao_blogr:templates/topics.jinja2', permission='manage')
def topics(request):
# get all topics
topics = BlogRecordService.get_topics(request)
return {
'page_title': "Liste des rubriques",
'topics': topics
}
@view_config(route_name='topic_edit',
renderer='cao_blogr:templates/topic_edit.jinja2', permission='manage')
def topic_edit(request):
# get topic parameters from request
topic = request.matchdict['topic']
url = request.route_url('topic_edit',topic=topic)
# get the list of tags of this topic
tags = BlogRecordService.get_tags_byTopic(request, topic)
if topic == '0':
# create a new topic
entry = Topics()
form = TopicForm(request.POST, entry)
page_title = "Nouvelle rubrique"
else:
# modify post
entry = BlogRecordService.get_topic_byTopic(request, topic)
if not entry:
request.session.flash(u"Topic non trouvé : %s" % topic, 'warning')
return HTTPFound(location=request.route_url('topics'))
form = TopicForm(request.POST, entry)
page_title = entry.topic_name
if 'form.submitted' in request.params and form.validate():
if topic == '0':
form.populate_obj(entry)
request.dbsession.add(entry)
return HTTPFound(location=request.route_url('topics'))
else:
del form.topic # SECURITY: prevent overwriting of primary key
form.populate_obj(entry)
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 {
'page_title': page_title,
'url': url,
'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,
}