# -*- coding: utf-8 -*- # vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 ############################################################################### # ScribeEngine - Open Source Blog Software # # --------------------------------------------------------------------------- # # Copyright (c) 2010 Raoul Snyman # # --------------------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify it # # under the terms of the GNU General Public License as published by the Free # # Software Foundation; version 2 of the License. # # # # This program is distributed in the hope that it will be useful, but WITHOUT # # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # # more details. # # # # You should have received a copy of the GNU General Public License along # # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### import logging from datetime import datetime import time from scribeengine.lib.base import * from scribeengine.lib import utils from scribeengine.model import Post, Tag from scribeengine.model.meta import Session log = logging.getLogger(__name__) class PostController(BaseController): def __before__(self): BaseController.__before__(self) self._add_javascript(u'jquery.tag.editor.js') self._add_javascript(u'jquery.tinymce.js') self._add_javascript(u'ScribeEngine.Post.js') def index(self): h.redirect_to('/') @authenticate(u'Add Posts') def new(self): c.page_title = u'New Post' c.now = datetime.now() return render(u'/post/new.mako') @authenticate(u'Edit My Posts') def edit(self, id=None): if id is None: h.redirect_to(h.url_for(controller=u'post', action=u'new')) c.post = Session.query(Post).get(id) if len(c.post.tags): c.post.tags_list = u', '.join([tag.name for tag in c.post.tags]) else: c.post.tags_list = u'' c.page_title = u'Edit Post: %s' % c.post.title return render(u'/post/edit.mako') @authenticate(u'Edit My Posts') def edit_POST(self, id=None): url = utils.generate_url(c.form_values[u'post-title']) if id is None: post = Post() post.user = c.current_user else: post = Session.query(Post).get(id) post.modified = datetime.now() if c.form_values.get(u'post-authored') and c.form_values[u'post-authored']: post.created = datetime(*time.strptime(c.form_values[u'post-authored'], '%Y/%m/%d %H:%M:%S')[0:6]) post.title = c.form_values[u'post-title'] post.body = c.form_values[u'post-body'] if c.form_values[u'post-action'] == u'Save Draft': post.status = u'draft' else: post.status = u'published' post.url = url tags = c.form_values[u'post-tags'] tag_list = [tag_name.strip() for tag_name in tags.split(u',')] tag_urls = [utils.generate_url(tag_name) for tag_name in tags.split(u',')] db_tags = Session.query(Tag).filter(Tag.url.in_(tag_urls)).all() post.tags = [] for tag in db_tags: if tag.name in tag_list: tag_list.remove(tag.name) post.tags.append(tag) for tag in tag_list: post.tags.append(Tag(name=tag, url=utils.generate_url(tag))) Session.add(post) Session.commit() if c.form_values[u'post-action'] == u'Save Draft': h.redirect_to(h.url_for(controller=u'post', action=u'draft')) else: h.redirect_to(h.url_for_post(post)) def draft(self): posts = Session.query(Post)\ .filter_by(status=u'draft')\ .order_by(Post.created.desc()) pagination = utils.paginate(posts, 10, int(request.GET.get(u'page', 1)), '/') c.posts = pagination[u'records'] if pagination[u'prev'] != pagination[u'page']: c.first_page = pagination[u'first'] c.prev_page = pagination[u'prev'] if pagination[u'next'] != pagination[u'page']: c.next_page = pagination[u'next'] c.last_page = pagination[u'last'] c.list_start = pagination[u'start'] c.list_total = pagination[u'total'] c.list_end = pagination[u'end'] c.page_title = u'Draft Posts' return render(u'/post/draft.mako')