var models = require('../models'), Tag = models.Tag, Topic = models.Topic, TopicTag = models.TopicTag, TopicCollect = models.TopicCollect; var check = require('validator').check, sanitize = require('validator').sanitize; var at_ctrl = require('./at'); var tag_ctrl = require('./tag'); var user_ctrl = require('./user'); var reply_ctrl = require('./reply'); var EventProxy = require('eventproxy').EventProxy; var Markdown = require('node-markdown').Markdown; var Util = require('../libs/util'); exports.index = function(req,res,next){ var topic_id = req.params.tid; if(topic_id.length != 24){ res.render('notify/notify',{error: '此话题不存在或已被删除。'}); return; } var proxy = new EventProxy(); var render = function(topic,author_other_topics,no_reply_topics){ at_ctrl.link_at_who(topic.content,function(err,str){ if(err) return next(err); topic.content = str; res.render('topic/index',{topic:topic,author_other_topics:author_other_topics,no_reply_topics:no_reply_topics}); }); }; proxy.assign('topic','author_other_topics','no_reply_topics',render); get_full_topic(topic_id,function(err,message,topic,tags,author,replies){ if(err) return next(err); if(message){ res.render('notify/notify',{error: message}); return; } topic.visit_count +=1; topic.save(function(err){ if(!topic.content_is_html){ // trans Markdown to HTML topic.content = Markdown(topic.content,true); } // format date topic.friendly_create_at = Util.format_date(topic.create_at,true); topic.friendly_update_at = Util.format_date(topic.update_at,true); topic.tags = tags; topic.author = author; topic.replies = replies; if(!req.session.user){ proxy.trigger('topic',topic); }else{ TopicCollect.findOne({user_id:req.session.user._id, topic_id:topic._id},function(err,doc){ if(err) return next(err); topic.in_collection = doc; proxy.trigger('topic',topic); }); } var opt = {limit:5, sort:[['last_reply_at','desc']]}; get_topics_by_query({author_id:topic.author_id,_id:{'$nin':[topic._id]}},opt,function(err,topics){ if(err) return next(err); proxy.trigger('author_other_topics',topics); }); opt = {limit:5, sort:[['create_at','desc']]}; get_topics_by_query({reply_count:0},opt,function(err,topics){ if(err) return next(err); proxy.trigger('no_reply_topics',topics); }); }); }); }; exports.create = function(req,res,next){ if(!req.session.user){ res.render('notify/notify',{error:'未登入用户不能发布话题。'}); return; } var method = req.method.toLowerCase(); if(method == 'get'){ tag_ctrl.get_all_tags(function(err,tags){ if(err) return next(err); res.render('topic/edit',{tags:tags}); return; }); } if(method == 'post'){ var title = sanitize(req.body.title).trim(); title = sanitize(title).xss(); var content = req.body.t_content; var topic_tags=[]; if(req.body.topic_tags != ''){ topic_tags = req.body.topic_tags.split(','); } if(title == ''){ tag_ctrl.get_all_tags(function(err,tags){ if(err) return next(err); for(var i=0; i100){ tag_ctrl.get_all_tags(function(err,tags){ if(err) return next(err); for(var i=0; i