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)
def post( self, thread ): if self.ensure_is_logged_in() and self.ensure_has_display_name(): if thread.isdigit() and EnkiModelThread.get_by_id( int( thread )): user = self.user_id post_body = self.request.get( 'post_body' ) submit_type = self.request.get( 'submittype' ) post_count = str( self.request.get( 'count' )) post_requested = str( self.request.get( 'start' )) if not post_count: post_count = EnkiModelPost.POSTS_PER_PAGE if not post_requested: post_requested = EnkiModelPost.get_first_post_on_page( EnkiModelPost.get_page( EnkiModelThread.get_by_id( int( thread )), EnkiModelPost.POST_LAST, int( post_count )), int( post_count )) error_message = '' preview = '' pmtoken = self.request.get( 'preventmultitoken' ) show_input = True if submit_type == 'input': post_body = '' pmtoken = EnkiModelTokenVerify.add_preventmultipost_token( 'preventmultipost' ) else: self.check_CSRF() if submit_type != 'cancel': if not post_body: error_message = MSG.POST_BODY_NEEDED() else: exceed = len( post_body ) - EnkiModelPost.POST_LENGTH_MAX if exceed > 0: error_message = MSG.POST_BODY_TOO_LONG( exceed ) if not error_message: post_sticky_order = xint( self.request.get( 'sticky_order' )) if submit_type == 'submit': if EnkiModelTokenVerify.check_and_delete_preventmultipost_token( pmtoken, 'preventmultipost' ): result = EnkiModelPost.add_post( user, thread, post_body, post_sticky_order ) if result == enki.libutil.ENKILIB_OK: self.add_infomessage( MSG.SUCCESS( ), MSG.POST_PUBLISHED()) post_requested = EnkiModelPost.get_first_post_on_page( EnkiModelPost.get_page( EnkiModelThread.get_by_id( int( thread )), EnkiModelPost.POST_LAST, int( post_count )), int( post_count )) url = enki.libutil.get_local_url( 'thread', { 'thread': thread, 'start': str( post_requested ), 'count': str( post_count )}) self.send_email_admin( 'FPA', url ) self.redirect( url ) return else: error_message = MSG.FAIL_POST_SUBMISSION() else: post_body = '' elif submit_type == 'preview': preview = post_body elif submit_type == 'cancel': post_body = '' data = EnkiModelPost.get_thread_data( thread, post_requested, post_count ) pagination = EnkiModelPost.get_thread_pagination_data( thread, post_requested, post_count ) self.render_tmpl( 'thread.html', CSRFneeded = show_input, active_menu = 'forums', data = data, pagination = pagination, user_id = self.user_id, has_permission_sticky = self.has_permissions( self.enki_user, [ 'PFPS' ]), show_input = show_input, preventmultitoken = pmtoken, error = error_message, maxpostlength = EnkiModelPost.POST_LENGTH_MAX, postbody = post_body, preview = preview )