def get( self, forum ): data = '' not_found = '' if forum.isdigit() and EnkiModelForum.get_by_id( int( forum ) ): enki.modelcounter.increment( 'views_forum' ) data = EnkiModelThread.get_forum_data( forum ) else: not_found = MSG.FORUM_NOT_EXIST( ) self.render_tmpl( 'forum.html', False, active_menu = 'forums', data = data, not_found = not_found, maxpostlength = EnkiModelPost.POST_LENGTH_MAX, maxthreadtitlelength = EnkiModelThread.THREAD_TITLE_LENGTH_MAX )
def post( self, forum ): if self.ensure_is_logged_in() and self.ensure_has_display_name(): if forum.isdigit() and EnkiModelForum.get_by_id( int( forum )): user_id = self.user_id thread_title = self.request.get( 'thread_title' ) post_body = self.request.get( 'post_body' ) thread_sticky_order = xint( self.request.get( 'sticky_order_thread' )) post_sticky_order = xint( self.request.get( 'sticky_order_post' )) submit_type = self.request.get( 'submittype' ) error_message_threadtitle = '' error_message_postbody = '' pmtoken = self.request.get( 'preventmultitoken' ) show_input = True if submit_type == 'cancel' or submit_type == 'input': thread_title = '' post_body = '' thread_sticky_order = 0 post_sticky_order = 0 if submit_type == 'input': pmtoken = EnkiModelTokenVerify.add_preventmultipost_token( 'preventmultipost' ) else: self.check_CSRF() if not thread_title: error_message_threadtitle = MSG.THREAD_TITLE_NEEDED( ) else: exceed = len( thread_title ) - EnkiModelThread.THREAD_TITLE_LENGTH_MAX if exceed > 0: error_message_threadtitle = MSG.THREAD_TITLE_TOO_LONG( exceed ) if not post_body: error_message_postbody = MSG.POST_BODY_NEEDED() else: exceed = len( post_body ) - EnkiModelPost.POST_LENGTH_MAX if exceed > 0: error_message_postbody = MSG.POST_BODY_TOO_LONG( exceed ) if not error_message_threadtitle and not error_message_postbody: if submit_type == 'submit': if EnkiModelTokenVerify.check_and_delete_preventmultipost_token( pmtoken, 'preventmultipost' ): result = EnkiModelPost.add_thread_and_post( user_id, forum, thread_title, thread_sticky_order, post_body, post_sticky_order ) if result == enki.libutil.ENKILIB_OK: self.add_infomessage( MSG.SUCCESS( ), MSG.THREAD_PUBLISHED()) url = enki.libutil.get_local_url( 'forum', { 'forum':forum }) self.send_email_admin( 'FTPA', url ) self.redirect( url ) return else: error_threadtitle = MSG.FAIL_THREAD_SUBMISSION() else: thread_title = '' post_body = '' self.render_tmpl( 'forum.html', CSRFneeded = show_input, active_menu = 'forums', data = EnkiModelThread.get_forum_data( forum ), has_permission_sticky = self.has_permissions( self.enki_user, [ 'PFPS', 'PFTS' ]), show_input = show_input, preventmultitoken = pmtoken, error_threadtitle = error_message_threadtitle, error_postbody = error_message_postbody, maxpostlength = EnkiModelPost.POST_LENGTH_MAX, maxthreadtitlelength = EnkiModelThread.THREAD_TITLE_LENGTH_MAX, threadtitle = thread_title, postbody = post_body, threadstickyorder = thread_sticky_order, poststickyorder = post_sticky_order, preview = True if ( submit_type == 'preview' and thread_title and post_body ) else False)