def post(self):
   user = self.getAuthentificatedUser()
   if not user:
     return
   id = self.request.get('id')
   try:
     thread = Thread.get(db.Key.from_path('Thread', int(id)))
   except:
     return
   name = strip_ml_tags(self.request.get('name'))
   if name == '':
     template_values = {
       'topics' : self.topics,
       'name' : name,
     }
   else:
     topic = Topic() #parent=thread
     topic.thread = thread
     topic.name = name
     if users.get_current_user():
       topic.author = users.get_current_user()
     topic.put()
     mode = self.request.get('mode')
     self.redirect('/view?id=' + str(topic.key().id()))
     return 
     template_values = {
       'topics' : self.topics,
       'name' : '',
     }
   path = os.path.join(os.path.dirname(__file__), os.path.join('templates', 'addTopic.htm'))
   self.response.out.write(template.render(path, template_values))
Ejemplo n.º 2
0
    def post(self):
        user = users.get_current_user()
        if not user:
            self.response.out.write('~!@#$%')
            return

        if (not self.request.get('sentence')):
            self.response.out.write(json_output('error', {
                'message': 'empty sentence',
            }))
            return
        if (not self.request.get('answer')):
            self.response.out.write(json_output('error', {
                'message': 'empty answer',
            }))
            return

        topic = Topic()
        topic.author = users.get_current_user()
        topic.sentence = self.request.get('sentence')[:300]
        topic.answer = self.request.get('answer')
        topic.put()

        memcache.delete('topic_list::latest'+user.user_id())

        if self.is_ajax:
            self.response.out.write(json_output('ok', {
                'user': topic.author.nickname(),
                'sentence': topic.sentence,
                'answer': topic.answer,
            }))
        else:
            self.redirect('/')
Ejemplo n.º 3
0
    def post(self):
        user = users.get_current_user()
        if not user:
            self.response.out.write('~!@#$%')
            return

        if (not self.request.get('sentence')):
            self.response.out.write(
                json_output('error', {
                    'message': 'empty sentence',
                }))
            return
        if (not self.request.get('answer')):
            self.response.out.write(
                json_output('error', {
                    'message': 'empty answer',
                }))
            return

        topic = Topic()
        topic.author = users.get_current_user()
        topic.sentence = self.request.get('sentence')[:300]
        topic.answer = self.request.get('answer')
        topic.put()

        memcache.delete('topic_list::latest' + user.user_id())

        if self.is_ajax:
            self.response.out.write(
                json_output(
                    'ok', {
                        'user': topic.author.nickname(),
                        'sentence': topic.sentence,
                        'answer': topic.answer,
                    }))
        else:
            self.redirect('/')
Ejemplo n.º 4
0
from __future__ import print_function
import sys
from model import Session, User, Topic

session = Session()

# Add a user to a topic.
t1 = Topic("and now for something completely different")
t1.author = User("xyzzy")

# Add some topics to a user.
u2 = User("plugh")
u2.topics = [
    Topic("my hovercraft is full of eels"),
    Topic("he is pining for the fjords"),
]

try:
    session.add(t1)
    session.add(u2)
    session.commit()
except Exception as e:
    print("Failed:", e)
    session.rollback()
    sys.exit(1)
Ejemplo n.º 5
0
    def post(self, nodeid='1'):
        if self.cur_user and self.cur_user.flag > 1:
            n_obj = Node.get_by_id(int(nodeid))
            if not n_obj:
                self.error(404)
                self.write('404: not found')
                return

            errors = []
            author = self.cur_user.name
            title = self.POST['title']
            content = self.POST['content']

            if title and content:
                if len(title) <= TITLE_MAX_S and len(content) <= CONTENT_MAX_S:
                    int_time = int(time())
                    #check spam
                    mi_obj = MemberInfo.get_or_insert(author)
                    if self.cur_user.flag < 99:
                        if mi_obj.topict:
                            t_list = mi_obj.topict.split(',')
                            if len(t_list) == MEMBER_RECENT_TOPIC and (
                                    int_time - int(t_list[-1])) < 3600:
                                self.write(
                                    u'403:不要发帖太频繁了 <a href="/newpost/%s">请返回</a>'
                                    % nodeid)
                                return

                    #check repeat
                    content = textilize(content)
                    #content = safe_encode(content)
                    con_md5 = md5(content.encode('utf-8')).hexdigest()
                    if memcache.get('c_' + con_md5):
                        self.write(u'403:请勿灌水 <a href="/newpost/%s">请返回</a>' %
                                   nodeid)
                        return
                    else:
                        memcache.set('c_' + con_md5, '1', 36000)

                    if n_obj.count:
                        topic_id = n_obj.count + 1
                    else:
                        topic_id = 1

                    topic_key = '%s-%s' % (nodeid, str(topic_id))

                    t_obj = Topic(key_name=topic_key)
                    t_obj.title = title
                    t_obj.author = author
                    t_obj.add = int_time
                    t_obj.con = content
                    t_obj.put()
                    if t_obj.is_saved():
                        #node count +1
                        n_obj.count += 1
                        db.run_in_transaction(obj_runput, n_obj)
                        #memberinfo
                        mi_obj.topicn += 1
                        if mi_obj.topick:
                            t_list = mi_obj.topick.split(',')
                            t_list.insert(0, topic_key)
                            mi_obj.topick = ','.join(
                                t_list[:MEMBER_RECENT_TOPIC])
                        else:
                            mi_obj.topick = topic_key

                        if mi_obj.topict:
                            t_list = mi_obj.topict.split(',')
                            t_list.insert(0, str(int_time))
                            mi_obj.topict = ','.join(
                                t_list[:MEMBER_RECENT_TOPIC])
                        else:
                            mi_obj.topict = str(int_time)
                        db.run_in_transaction(obj_runput, mi_obj,
                                              ['topic_objs:' + author])
                        #recent in home +key
                        hi_obj = KeyStrValue.get_or_insert('recent-topic-home')
                        if hi_obj.value:
                            t_list = hi_obj.value.split(',')
                            t_list.insert(0, topic_key)
                            hi_obj.value = ','.join(t_list[:RECENT_POST_NUM])
                        else:
                            hi_obj.value = topic_key
                        db.run_in_transaction(obj_runput, hi_obj, [
                            'get_topic_objs:recent-topic-home',
                            'get_topic_key_title:recent-topic-home'
                        ])
                        #all topic counter +1
                        at_obj = Counter.get_or_insert('all-topic-num',
                                                       name='all-topic-num')
                        at_obj.value += 1
                        db.run_in_transaction(obj_runput, at_obj)
                        #notifications
                        mentions = findall_mentions(t_obj.con, author)
                        if mentions:
                            deferred.defer(set_mentions,
                                           topic_key,
                                           ','.join(mentions),
                                           _countdown=8,
                                           _queue="default")

                        self.redirect('/t-' + topic_key)
                        return
                else:
                    t_obj = Topic(title=title, con=content)
                    errors.append(u"注意标题和内容的最大字数限制,当前字数:%s %d" %
                                  (len(title), len(content)))
            else:
                t_obj = Topic(title=title, con=content)
                errors.append("标题和内容必填")

            self.echo('newpost.html', {
                'title': "发新帖子",
                'errors': errors,
                'n_obj': n_obj,
                't_obj': t_obj,
                'newest_node': Node.get_newest(),
            },
                      layout='_layout.html')

        else:
            self.error(403)
            self.write('403:forbidden')
Ejemplo n.º 6
0
 def post(self, nodeid='1'):
     if self.cur_user and self.cur_user.flag>1:
         n_obj = Node.get_by_id(int(nodeid))
         if not n_obj:
             self.error(404)
             self.write('404: not found')
             return
         
         errors = []
         author = self.cur_user.name
         title = self.POST['title']
         content = self.POST['content']
         
         if title and content:
             if len(title)<=TITLE_MAX_S and len(content)<=CONTENT_MAX_S:
                 int_time = int(time())
                 #check spam
                 mi_obj = MemberInfo.get_or_insert(author)
                 if mi_obj.topict:
                     t_list = mi_obj.topict.split(',')
                     if len(t_list) == MEMBER_RECENT_TOPIC and (int_time-int(t_list[-1])) < 3600:
                         self.write(u'403:不要发帖太频繁了 <a href="/newpost/%s">请返回</a>' % nodeid)
                         return
                 
                 #check repeat
                 content = textilize(content)
                 #content = safe_encode(content)
                 con_md5 = md5(content.encode('utf-8')).hexdigest()
                 if memcache.get('c_'+con_md5):
                     self.write(u'403:请勿灌水 <a href="/newpost/%s">请返回</a>' % nodeid)
                     return
                 else:
                     memcache.set('c_'+con_md5, '1', 36000)                    
                 
                 if n_obj.count:
                     topic_id = n_obj.count + 1
                 else:
                     topic_id = 1
                 
                 topic_key = '%s-%s' % (nodeid, str(topic_id))
                 
                 t_obj = Topic(key_name=topic_key)
                 t_obj.title = title
                 t_obj.author = author
                 t_obj.add = int_time
                 t_obj.con = textilize(content)
                 #t_obj.con = safe_encode(content)
                 t_obj.put()
                 if t_obj.is_saved():
                     #node count +1
                     n_obj.count += 1
                     db.run_in_transaction(obj_runput,n_obj)
                     #memberinfo
                     mi_obj.topicn += 1
                     if mi_obj.topick:
                         t_list = mi_obj.topick.split(',')
                         t_list.insert(0, topic_key)
                         mi_obj.topick = ','.join(t_list[:MEMBER_RECENT_TOPIC])
                     else:
                         mi_obj.topick = topic_key
                         
                     if mi_obj.topict:
                         t_list = mi_obj.topict.split(',')
                         t_list.insert(0, str(int_time))
                         mi_obj.topict = ','.join(t_list[:MEMBER_RECENT_TOPIC])
                     else:
                         mi_obj.topict = str(int_time)
                     db.run_in_transaction(obj_runput,mi_obj,['topic_objs:'+author])
                     #recent in home +key
                     hi_obj = KeyStrValue.get_or_insert('recent-topic-home')
                     if hi_obj.value:
                         t_list = hi_obj.value.split(',')
                         t_list.insert(0, topic_key)
                         hi_obj.value = ','.join(t_list[:RECENT_POST_NUM])
                     else:
                         hi_obj.value = topic_key
                     db.run_in_transaction(obj_runput,hi_obj,['get_topic_objs:recent-topic-home', 'get_topic_key_title:recent-topic-home'])
                     #all topic counter +1
                     at_obj = Counter.get_or_insert('all-topic-num', name = 'all-topic-num')
                     at_obj.value += 1
                     db.run_in_transaction(obj_runput,at_obj)
                     #notifications
                     mentions = findall_mentions(t_obj.con, author)
                     if mentions:
                         deferred.defer(set_mentions, topic_key, ','.join(mentions), _countdown=8, _queue="default")
                     
                     self.redirect('/t-'+topic_key)
                     return
             else:
                 t_obj = Topic(title = title, con = content)
                 errors.append(u"注意标题和内容的最大字数限制,当前字数:%s %d" % (len(title), len(content)))
         else:
             t_obj = Topic(title = title, con = content)
             errors.append("标题和内容必填")
         
         self.echo('newpost.html', {
             'title': "发新帖子",
             'errors':errors,
             'n_obj': n_obj,
             't_obj': t_obj,
             'newest_node': Node.get_newest(),
         }, layout='_layout.html')
         
     else:
         self.error(403)
         self.write('403:forbidden')