Example #1
0
	def get( self, post ):
		data = ''
		not_found = ''
		is_author = False
		post_body = ''
		self.session[ 'sessionrefpath' ] = self.request.referrer
		if post.isdigit() and EnkiModelPost.get_by_id( int( post ) ):
			data = EnkiModelPost.get_post_data( post )
			if data:
				is_author = True if self.user_id == data.author_data.user_id else False
				post_body = '' if data.post.body == EnkiModelPost.POST_DELETED else data.post.body
		else:
			not_found = MSG.POST_NOT_EXIST( )
		change = self.request.get( 'change' )
		CSRFneeded = True
		if change != 'edit' and change != 'delete':
			CSRFneeded = False
		self.render_tmpl( 'post.html', CSRFneeded,
		                  active_menu = 'forums',
		                  data = data,
		                  not_found = not_found,
		                  change = change,
		                  isauthor = is_author,
						  has_permission_sticky = self.has_permissions( self.enki_user, [ 'PFPS' ]),
		                  postbody = post_body,
		                  maxpostlength = EnkiModelPost.POST_LENGTH_MAX )
Example #2
0
	def post( self, post ):
		if self.ensure_is_logged_in() and self.ensure_has_display_name():
			if post.isdigit() and EnkiModelPost.get_by_id( int( post )):

				data = EnkiModelPost.get_post_data( post )
				is_author = True if self.user_id == data.author_data.user_id else False
				user = self.user_id
				post_body = self.request.get( 'post_body' )
				submit_type = self.request.get( 'submittype' )
				change = self.request.get( 'change' )
				error_message = ''
				preview = ''

				if submit_type == 'delete':
					self.check_CSRF()
					result = EnkiModelPost.delete_post( user, post )
					if result[ 0 ] == enki.libutil.ENKILIB_OK:
						self.add_infomessage( MSG.SUCCESS( ), MSG.POST_DELETED())
						url = enki.libutil.get_local_url( 'thread', { 'thread' : result[ 1 ]})
						self.send_email_admin( 'FPD', url )
						self.redirect( url ) # redirect to parent thread
						return
					else:
						error_message = MSG.FAIL_POST_DELETION()

				elif submit_type == 'cancel':
					self.redirect( data.post_page )
					return
				else:
					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':
						self.check_CSRF()
						result = EnkiModelPost.edit_post( user, post, post_body, post_sticky_order )
						if result[ 0 ] == enki.libutil.ENKILIB_OK:
							self.add_infomessage( MSG.SUCCESS( ), MSG.POST_MODIFIED())
							url = enki.libutil.get_local_url( 'thread', { 'thread' : result[ 1 ]})
							self.send_email_admin( 'FPE', url )
							self.redirect( url ) # redirect to parent thread
							return
						else:
							error_message = MSG.FAIL_POST_MODIFICATION()
					elif submit_type == 'preview':
						preview = post_body

				self.render_tmpl( 'post.html',
				                  active_menu = 'forums',
				                  data = data,
				                  change = change,
				                  isauthor = is_author,
								  has_permission_sticky = self.has_permissions( self.enki_user, [ 'PFPS' ]),
				                  error = error_message,
				                  postbody = post_body,
				                  maxpostlength = EnkiModelPost.POST_LENGTH_MAX,
				                  preview = preview )