from pyramid.view import view_config from pyramid.httpexceptions import HTTPNotFound, HTTPFound from ..models.blog_record import BlogRecord, Tags from ..services.blog_record import BlogRecordService from ..forms import BlogCreateForm, BlogUpdateForm, BlogSearchForm, TagForm import markdown import datetime #<- will be used to set default dates on models @view_config(route_name='blog', renderer='cao_blogr:templates/blog.jinja2') def blog(request): # get post id from 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')) # 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']) # si page mouvement de portfolio if blog_id == '2': return_url = "/portfolio" else: return_url = "/" return { 'page_title': entry.title, 'entry': entry, 'body_html': body_html, 'return_url': return_url, } @view_config(route_name='blog_edit', renderer='cao_blogr:templates/blog_edit.jinja2', permission='view') def blog_edit(request): # get post id from request blog_id = request.matchdict['id'] url = request.route_url('blog_edit',id=blog_id) # get the list of tags tags = BlogRecordService.get_tags(request) if blog_id == '0': # create a new post entry = BlogRecord() # set default values form = BlogCreateForm(request.POST, entry) form.tag.choices = [(row.tag, row.tag) for row in tags] page_title = 'Nouvelle page' else: # modify post 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')) form = BlogUpdateForm(request.POST, entry) form.tag.choices = [(row.tag, row.tag) for row in tags] page_title = 'Modifier : ' + entry.title if 'form.submitted' in request.params and form.validate(): if blog_id == '0': form.populate_obj(entry) # interdire le car '/' dans le titre à cause du slug entry.title = entry.title.replace('/','.') entry.creator = request.authenticated_userid entry.editor = entry.creator request.dbsession.add(entry) return HTTPFound(location=request.route_url('home')) else: del form.id # SECURITY: prevent overwriting of primary key form.populate_obj(entry) # interdire le car '/' dans le titre à cause du slug entry.title = entry.title.replace('/','.') entry.edited = datetime.datetime.now() entry.editor = request.authenticated_userid return HTTPFound(location=request.route_url('blog', id=entry.id, slug=entry.slug)) if 'form.update_created' in request.params and form.validate(): del form.id # SECURITY: prevent overwriting of primary key form.populate_obj(entry) entry.created = datetime.datetime.now() return HTTPFound(location=request.route_url('blog', id=entry.id, slug=entry.slug)) if 'form.deleted' in request.params: BlogRecordService.delete(request, blog_id) request.session.flash("La page a été supprimée avec succès.", 'success') return HTTPFound(location=request.route_url('home')) return { 'page_title': page_title, 'url': url, 'form': form, 'blog_id': blog_id, 'entry': entry, } @view_config(route_name='blog_bytag', renderer='cao_blogr:templates/blog_bytag.jinja2') def blog_bytag(request): # get tag parameters from request tag = request.matchdict['tag'] retour = request.matchdict['retour'] url_retour = request.route_url(retour) # get the posts by tag items = BlogRecordService.by_tag(request, tag) nb_items = len(items) return { 'page_title': "Billets avec tag : " + tag, 'items': items, 'nb_items': nb_items, 'url_retour': url_retour, } @view_config(route_name='blog_search', renderer='cao_blogr:templates/blog_search.jinja2') def blog_search(request): criteria = '' # get the list of tags tags = BlogRecordService.get_tags(request) form = BlogSearchForm(request.POST) items = [] if 'form.submitted' in request.params and form.validate(): criteria = request.params['criteria'] # si afficher tous les fiches ? items = BlogRecordService.by_criteria(request, criteria) return { 'page_title': "Rechercher", 'form': form, 'items': items, 'criteria': criteria, 'tags': tags, } @view_config(route_name='tags', renderer='cao_blogr:templates/tags.jinja2', permission='view') def tags(request): # get the list of tags tags = BlogRecordService.get_tags(request) return { 'page_title': 'Tags', 'tags': tags, } @view_config(route_name='tag_edit', renderer='cao_blogr:templates/tag_edit.jinja2', permission='view') def tag_edit(request): # get tag parameters from request tag_id = request.matchdict['id'] url = request.route_url('tag_edit', id=tag_id) if tag_id == '0': # create a new tag entry = Tags() form = TagForm(request.POST, entry) page_title = "Nouveau Tag" 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('tags')) form = TagForm(request.POST, entry) page_title = entry.tag if 'form.submitted' in request.params and form.validate(): if tag_id == '0': form.populate_obj(entry) request.dbsession.add(entry) return HTTPFound(location=request.route_url('tags')) else: del form.id # SECURITY: prevent overwriting of primary key form.populate_obj(entry) return HTTPFound(location=request.route_url('tags')) 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('tags')) return { 'page_title': page_title, 'url': url, 'form': form, }