app/controllers/elt_controller.rb in parlement-0.5 vs app/controllers/elt_controller.rb in parlement-0.6
- old
+ new
@@ -2,75 +2,125 @@
# This is the central component to parlement
#
# An element is just the name for a poll/message/issue
#
class EltController < ApplicationController
- def index
+
+ def index
params[:id] = params[:id].gsub(/.html/, '')
- show
- end
+ show
+ end
- def show
+ def show
params[:id] = params[:id].gsub(/.html/, '')
- @elt = Elt.find(params[:id])
- @title = @elt.subject+' (parlement)'
+ @elt = Elt.find(params[:id])
+ @title = @elt.subject
+ @title += " (parlement)" if !@title.downcase.include? "parlement"
+ if request.env['REQUEST_URI'].match '.dyndns'
+ headers["Status"] = "301 Moved Permanently"
+ redirect_to request.env['REQUEST_URI'].gsub(/.dyndns/, '')
+ end
render :layout => 'top'
# TODO
- rescue ActiveRecord::RecordNotFound => e
- flash[:error] = "Element '#{params[:id]}' does not exist"
- headers["Status"] = "301 Moved Permanently"
- redirect_to '/'
- end
+ rescue ActiveRecord::RecordNotFound => e
+ flash[:error] = "Element '#{params[:id]}' does not exist"
+ headers["Status"] = "301 Moved Permanently"
+ redirect_to '/'
+ end
- def list
- @elt = Elt.find(params[:id]) if @elt == nil
+ def list
+ @elt = Elt.find(params[:id]) if @elt == nil
render :partial => '/elt/list', :locals => { :elt => @elt }
- end
+ end
- def rss
+ def listByDate
+ @elt = Elt.find params[:id] unless @elt
+ render :partial => 'listByDate'
+ end
+
+ def listByVote
+ @elt = Elt.find params[:id] unless @elt
+ render :partial => 'listByVote'
+ end
+
+ def rss
params[:id] = params[:id].gsub(/.rss/, '')
@headers["Content-Type"] = "text/xml; charset=utf-8"
- @elt = Elt.find(params[:id]) if @elt == nil
- end
+ @elt = Elt.find(params[:id]) if @elt == nil
+ end
+ def vote_rss
+ params[:id] = params[:id].gsub(/.rss/, '')
+ @headers["Content-Type"] = "text/xml; charset=utf-8"
+ @elt = Elt.find(params[:id]) if @elt == nil
+ end
+
# Used to initialise the elt, its subject mainly
- def new
- @elt = Elt.new
+ def new
+ @elt = Elt.new
@elt.parent = Elt.find(params[:id])
- @elt.position = 0
- @elt.person = Person.find_by_name(cookies[:person])
- @elt.build_person if @elt.person == nil
- @person = @elt.person
-
if @elt.parent.subject.include? 'Re: '
@elt.subject = @elt.parent.subject
else
@elt.subject = 'Re: '+@elt.parent.subject
end
- end
+ end
- def preview
+ def preview
render :inline => h(format(params[:elt][:body]))
- end
+ end
- def create
- @elt = Elt.new(params[:elt])
-
+ def create
+ @elt = Elt.new(params[:elt])
@elt.person = @session[:person]
- if params[:submit] == 'preview' or @elt.save
- render :partial => '/elt/elt', :locals => { :elt => @elt, :eltTop => false }
- else
- flash[:notice] = 'Error'
- render :controller => 'elt', :action => 'new'
- end
- end
+ if @elt.subject.match(/([<>\/]|href)/) then
+ logger.error "SPAM! '#{@elt.subject}'"
+ logger.error "SPAM! '#{@elt.body}'"
+ flash[:error] = 'Sorry, to fight spam "<" ">" or "href" are forbidden in the subject!'
+ headers["Status"] = "404 Post considered as spam"
+ render :controller => 'elt', :action => 'new', :status => 404
+ elsif params[:submit] == "preview" or (@elt.publish and @elt.parent.add_child(@elt)) then
+ headers["Status"] = "201 Created"
+ render :partial => '/elt/elt', :status => 201, :locals => { :elt => @elt, :eltTop => false }
+ else
+ flash[:notice] = 'Error'
+ render :controller => 'elt', :action => 'new'
+ end
+ end
- def raw_elt
- @mail = Elt.find(params[:id]).mail
- #@elt = TMail::Mail.parse(Elt.find(params[:id]).mail.id)
+ def raw_elt
+ @mail = Elt.find(params[:id]).mail
+ #@elt = TMail::Mail.parse(Elt.find(params[:id]).mail.id)
render :inline => "<pre><%= @mail.file %></pre>", :layout => 'top'
- end
+ end
+
+ def vote
+ @elt = Elt.find params[:id]
+ vote = @elt.children.build
+ vote.person = session[:person]
+ vote.subject = @elt.subject
+ vote.subject = 'Re: '+vote.subject if vote.subject and !vote.subject.include? 'Re: '
+ vote.body = params[:choice][:value]
+
+ choice = Choice.find_by_elt_id_and_person_id @elt.id, (session[:person] ? session[:person].id : nil)
+
+ if choice and choice.value == vote.body.to_i then
+ logger.info "#{(session[:person] ? session[:person].name : 'null')} voting 0"
+ vote.body = "0"
+ else
+ logger.info "#{(session[:person] ? session[:person].name : 'null')} voting #{params[:choice][:value]}"
+ end
+
+ vote.publish
+ @elt.add_child vote
+
+ render :partial => '/elt/choice', :locals => { :elt => @elt }
+ end
+
+ def choices
+ @elt = Elt.find params[:id]
+ end
end