Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Jotter Controller
- class JottersController < ApplicationController
- before_filter :login_required
- # GET /jotters
- # GET /jotters.xml
- def index
- if current_user.admin?
- @jotters= @jotter = Jotter.find(:all,
- :order => "created_at DESC")
- else
- @jotters = current_user.jotters
- end
- respond_to do |format|
- format.html # index.rhtml
- format.xml { render :xml => @jotters.to_xml }
- end
- end
- # GET /jotters/1
- # GET /jotters/1.xml
- def show
- @jotter = Jotter.find(params[:id])
- respond_to do |format|
- format.html # show.rhtml
- format.xml { render :xml => @jotter.to_xml }
- end
- end
- # GET /jotters/new
- def new
- @jotter = Jotter.new
- @jotter.creator = current_user
- end
- # GET /jotters/1;edit
- def edit
- @jotter = Jotter.find(params[:id])
- @jotter.user_id = current_user.id
- end
- # POST /jotters
- # POST /jotters.xml
- def create
- @jotter = Jotter.new(params[:jotter])
- @jotter.user_id = current_user.id
- respond_to do |format|
- if @jotter.save
- flash[:notice] = 'Jotter was successfully created.'
- format.html { redirect_to jotter_url(@jotter) }
- format.xml { head :created, :location => jotter_url(@jotter) }
- else
- format.html { render :action => "new" }
- format.xml { render :xml => @jotter.errors.to_xml }
- end
- end
- end
- # PUT /jotters/1
- # PUT /jotters/1.xml
- def update
- @jotter = Jotter.find(params[:id])
- @jotter.user_id = current_user.id
- respond_to do |format|
- if @jotter.update_attributes(params[:jotter])
- flash[:notice] = 'Jotter was successfully updated.'
- format.html { redirect_to jotter_url(@jotter) }
- format.xml { head :ok }
- for user in User.find(@jotter.users) do
- email = user.email
- SiteMailer.deliver_jotterUpdated(@jotter, email)
- end
- else
- format.html { render :action => "edit" }
- format.xml { render :xml => @jotter.errors.to_xml }
- end
- end
- end
- # DELETE /jotters/1
- # DELETE /jotters/1.xml
- def destroy
- @jotter = Jotter.find(params[:id])
- @jotter.destroy
- respond_to do |format|
- format.html { redirect_to jotters_url }
- format.xml { head :ok }
- end
- end
- private
- end
- ## Jotter Model
- class Jotter < ActiveRecord::Base
- acts_as_versioned
- has_and_belongs_to_many :users
- validates_presence_of :title
- has_many :comments, :order => "created_at DESC"
- belongs_to :creator, :class_name => "User", :foreign_key => "user_id"
- def has_revisions?
- version > 1
- end
- def jotter_owner?
- current.user = jotter.owner
- end
- end
- ## User Model
- require 'digest/sha1'
- class User < ActiveRecord::Base
- # Virtual attribute for the unencrypted password
- attr_accessor :password
- has_and_belongs_to_many :jotters
- has_many :created_jotters, :class_name => "Jotter"
- validates_presence_of :login, :email
- validates_presence_of :password, :if => :password_required?
- validates_presence_of :password_confirmation, :if => :password_required?
- validates_length_of :password, :within => 4..40, :if => :password_required?
- validates_confirmation_of :password, :if => :password_required?
- validates_length_of :login, :within => 3..40
- validates_length_of :email, :within => 3..100
- validates_uniqueness_of :login, :email, :case_sensitive => false
- before_save :encrypt_password
- # prevents a user from submitting a crafted form that bypasses activation
- # anything else you want your user to change should be added here.
- attr_accessible :login, :email, :password, :password_confirmation, :first_name, :last_name, :admin
- # Authenticates a user by their login name and unencrypted password. Returns the user or nil.
- def self.authenticate(login, password)
- u = find_by_login(login) # need to get the salt
- u && u.authenticated?(password) ? u : nil
- end
- # Encrypts some data with the salt.
- def self.encrypt(password, salt)
- Digest::SHA1.hexdigest("--#{salt}--#{password}--")
- end
- # Encrypts the password with the user salt
- def encrypt(password)
- self.class.encrypt(password, salt)
- end
- def authenticated?(password)
- crypted_password == encrypt(password)
- end
- def remember_token?
- remember_token_expires_at && Time.now.utc < remember_token_expires_at
- end
- # These create and unset the fields required for remembering users between browser closes
- def remember_me
- remember_me_for 2.weeks
- end
- def remember_me_for(time)
- remember_me_until time.from_now.utc
- end
- def remember_me_until(time)
- self.remember_token_expires_at = time
- self.remember_token = encrypt("#{email}--#{remember_token_expires_at}")
- save(false)
- end
- def forget_me
- self.remember_token_expires_at = nil
- self.remember_token = nil
- save(false)
- end
- # Returns true if the user has just been activated.
- def recently_activated?
- @activated
- end
- protected
- # before filter
- def encrypt_password
- return if password.blank?
- self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record?
- self.crypted_password = encrypt(password)
- end
- def password_required?
- crypted_password.blank? || !password.blank?
- end
- end
Add Comment
Please, Sign In to add comment