def edit_fetch_comment_ajax(request): """ Fetch comment details """ comment_id = int(request.matchdict['comment_id']) dbsession = DBSession() comment = dbsession.query(Comment).get(comment_id) attrs = ('display_name', 'email', 'website', 'body', 'ip_address', 'xff_ip_address', 'is_subscribed') data = {} for a in attrs: data[a] = getattr(comment, a) data['date'] = h.timestamp_to_str(comment.published) return data
def edit_article(request): article_id = int(request.matchdict['article_id']) c = {} c['errors'] = {} c['new_article'] = False dbsession = DBSession() if request.method == 'GET': article = dbsession.query(Article).get(article_id) c['article'] = article c['tags'] = [tag.tag for tag in article.tags] c['article_published_str'] = h.timestamp_to_str(article.published) elif request.method == 'POST': res = _update_article(article_id, request) if type(res) != dict: return res c.update(res) c['submit_url'] = route_url('blog_edit_article', request, article_id=article_id) c['save_url_ajax'] = route_url('blog_edit_article_ajax', request, article_id=article_id) return c
def _extract_comment_sub(request, comment): """ Extract placeholders substitution strings from the comment object """ author_name = comment.display_name author_email = comment.email if comment.user is not None: author_name = comment.user.display_name author_email = comment.user.email # construct comment link article = comment.article comment_url = h.article_url(request, article) + '#comment-' + str(comment.id) comment_date = h.timestamp_to_str(comment.published) res = { 'comment_author_email': author_email, 'comment_author_name': author_name, 'comment_text': comment.body, 'comment_date': comment_date, 'comment_url': comment_url } return res
def write_article(request): _ = request.translate c = { 'new_article': True, 'submit_url': route_url('blog_write_article', request), 'errors': {}, 'tags': [] } if request.method == 'GET': a = Article('new-article-shortcut', 'New article title') c['tags'] = [] c['article'] = a c['article_published_str'] = h.timestamp_to_str(a.published) elif request.method == 'POST': article = Article() e = _check_article_fields(article, request) c['errors'].update(e) c['article_published_str'] = request.POST['published'] if 'published' not in request.POST: c['errors']['published'] = _('invalid date and time format') else: # parse value to check structure date_re = re.compile('^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2})$') mo = date_re.match(request.POST['published']) if mo is None: c['errors']['published'] = _('invalid date and time format') else: # we need to convert LOCAL date and time to UTC seconds article.published = h.str_to_timestamp(request.POST['published']) v = [int(x) for x in mo.groups()[0:3]] article.shortcut_date = '{0:04d}/{1:02d}/{2:02d}'.format(*v) dbsession = DBSession() q = dbsession.query(Article).filter(Article.shortcut_date == article.shortcut_date)\ .filter(Article.shortcut == article.shortcut) res = q.first() if res is not None: c['errors']['shortcut'] = _('duplicated shortcut') # tags c['tags'] = [] if 'tags' in request.POST: tags_str = request.POST['tags'] tags = set([s.strip() for s in tags_str.split(',')]) for tag_str in tags: if tag_str == '': continue c['tags'].append(tag_str) if len(c['errors']) == 0: dbsession = DBSession() # save and redirect user = request.user article.user_id = user.id dbsession.add(article) dbsession.flush() # required as we need to obtain article_id article_id = article.id for tag_str in c['tags']: tag = Tag(tag_str, article) dbsession.add(tag) # force update of tags cloud h.get_public_tags_cloud(force_reload=True) return HTTPFound(location=route_url('blog_go_article', request, article_id=article_id)) c['article'] = article else: return HTTPBadRequest() return c