Changeset 1171

Show
Ignore:
Timestamp:
02/28/08 18:08:58 (10 months ago)
Author:
alban
Message:

Fixe la recherche de User.find_subscription. Fixes #8

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/app/models/user.rb

    r1138 r1171  
    22class User < ActiveRecord::Base 
    33        has_many :reviews, :dependent => :destroy 
    4          
     4 
    55        has_many :documents, :dependent => :destroy, :order => "updated_at DESC", :foreign_key => "author_id" do 
    66                def find_by_tag(name, options = Hash.new) 
    77            tag = Tag.find_by_name(name) 
    88                  documents = find(:all).delete_if { |d| !d.tags.include?(tag) } 
    9                    
     9 
    1010          if options[:offset] and options[:limit] 
    1111            documents.slice!(options[:offset], options[:limit]) 
    1212          end 
    13            
     13 
    1414          documents 
    1515                end 
    16                  
     16 
    1717                def find_by_keywords(keywords) 
    1818                        find(:all).delete_if { |d| !d.match?(keywords) } 
    1919                end 
    2020        end 
    21          
     21 
    2222        has_many :subscriptions, :dependent => :destroy, :order => "created_at DESC", :as => "subscriber" 
    23          
     23 
    2424        has_many :podcasts, :dependent => :destroy, :foreign_key => "author_id" 
    25          
     25 
    2626        has_and_belongs_to_many :groups 
    2727        has_many :manageable_groups, :class_name => "Group", :foreign_key => "owner_id" 
     
    3333  validates_presence_of :password, :message => "Un mot de passe est requis", :if => Proc.new { |u| u.openid_url.nil? } 
    3434        validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/, :message => "Un email valide pour vous contacter est requis" 
    35          
     35 
    3636        def tags 
    3737          subscriptions_tags = find_subscriptions.collect{ |s| s.document.tags }.flatten 
     
    3939          (subscriptions_tags + documents_tags).uniq 
    4040        end 
    41          
     41 
    4242        def find_subscriptions(options = Hash.new) 
    4343          group_subscriptions = groups.collect{ |group| group.subscriptions }.flatten 
     
    4646          sorted_attribute = "created_at" 
    4747          all_subscriptions = all_subscriptions.sort_by { |s| s[sorted_attribute] }.reverse 
    48            
     48 
    4949          if options[:tag] 
    5050          options[:tags] = Tag.parse(options[:tag]) 
    5151          end 
    52            
     52 
    5353          if options[:tags] 
    5454            tags = Tag.parse(options[:tags]) 
    5555          all_subscriptions = all_subscriptions.delete_if { |s| ! s.document.match_tags?(tags) } 
    5656        end 
    57          
     57 
    5858        if options[:keywords] 
    59           all_subscriptions = all_subscriptions.delete_if do |s|  
     59          all_subscriptions = all_subscriptions.delete_if do |s| 
    6060            !s.document.match?(options[:keywords]) 
    6161          end 
     
    6565            return all_subscriptions.slice(options[:offset], options[:limit]) 
    6666          end 
    67            
     67 
    6868          all_subscriptions 
    6969        end 
    70          
     70 
    7171        def find_documents(options = Hash.new) 
    7272          documents = self.documents.find(:all) 
     
    7575          options[:tags] = Tag.parse(options[:tag]) 
    7676          end 
    77            
     77 
    7878          if options[:tags] 
    7979            tags = Tag.parse(options[:tags]) 
    80                   documents = documents.delete_if do |document|  
     80                  documents = documents.delete_if do |document| 
    8181                    !document.match_tags?(tags) 
    8282                  end 
     
    8484 
    8585        if options[:keywords] 
    86           documents = documents.delete_if do |document|  
     86          documents = documents.delete_if do |document| 
    8787            !document.match?(options[:keywords]) 
    8888          end 
    8989        end 
    90            
     90 
    9191          if options[:offset] and options[:limit] 
    9292            documents.slice!(options[:offset], options[:limit]) 
    9393          end 
    94            
     94 
    9595          documents 
    9696        end 
    97          
    98          
     97 
     98 
    9999        def find_subscription(id) 
    100100          subscription = self.subscriptions.find_by_id(id) 
    101           for group in groups 
    102           subscription = group.subscriptions.find_by_id(id) 
    103           break unless subscription.nil? 
    104           end 
     101    unless subscription 
     102            for group in groups 
     103              subscription = group.subscriptions.find_by_id(id) 
     104              break unless subscription.nil? 
     105            end 
     106    end 
    105107          subscription 
    106108        end 
    107                  
     109 
    108110        def self.digest_password(clear_password) 
    109111        Digest::SHA256.hexdigest(clear_password) 
    110112        end 
    111          
     113 
    112114        def password=(password) 
    113115                write_attribute(:password, User.digest_password(password)) unless password.empty? 
    114116        end 
    115          
     117 
    116118        def self.authenticate(username, clear_password) 
    117119                user = User.find_by_username(username, :conditions => ["confirmed = ?", true]) 
    118                  
     120 
    119121    if user.blank? 
    120122      logger.debug("unknown or unconfirmed user : #{username}") 
    121123      return nil 
    122124    end 
    123      
     125 
    124126    if User.digest_password(clear_password) != user.password 
    125127      logger.debug("wrong password for : #{username}") 
    126128      return nil 
    127129    end 
    128                  
     130 
    129131    logger.info("user logged : #{username}") 
    130132                user 
    131133        end 
    132          
     134 
    133135        def match_name?(input) 
    134136          (self.name.downcase.include?(input) or (not self.username.nil? and self.username.downcase.include?(input))) 
    135137        end 
    136          
     138 
    137139        def ==(other) 
    138140    id == other.id 
    139141        end 
    140          
     142 
    141143        def hashcode 
    142144    Digest::SHA256.hexdigest(id.to_s + email) 
    143145  end 
    144      
     146 
    145147  def confirmed? 
    146148        confirmed 
    147149  end 
    148    
     150 
    149151  def after_save 
    150152        User.destroy_all(["confirmed = ? AND created_at <= ?", false, Time.new - 2592000])