Exemplo n.º 1
0
	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 )
Exemplo n.º 2
0
	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)