Changeset 1130
- Timestamp:
- 08/19/07 22:03:16 (1 year ago)
- Files:
-
- trunk/app/controllers/document_controller.rb (modified) (1 diff)
- trunk/app/controllers/documents_controller.rb (modified) (1 diff)
- trunk/app/controllers/group_controller.rb (modified) (1 diff)
- trunk/app/controllers/subscriptions_controller.rb (modified) (3 diffs)
- trunk/app/controllers/users_controller.rb (modified) (2 diffs)
- trunk/app/models/document.rb (modified) (1 diff)
- trunk/app/models/group.rb (modified) (1 diff)
- trunk/app/models/subscription.rb (modified) (1 diff)
- trunk/app/models/user.rb (modified) (4 diffs)
- trunk/app/views/documents/share.rhtml (modified) (2 diffs)
- trunk/app/views/group/_groups.rhtml (modified) (2 diffs)
- trunk/app/views/group/update.rjs (modified) (1 diff)
- trunk/app/views/subscriptions/update.rjs (modified) (1 diff)
- trunk/app/views/users/_people.rhtml (added)
- trunk/app/views/users/_sidebar.rhtml (modified) (1 diff)
- trunk/app/views/users/_users.rhtml (deleted)
- trunk/test/unit/user_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/app/controllers/document_controller.rb
r1126 r1130 62 62 attributes = Hash.new 63 63 64 key =~ /(.*)\/(.*)/ 65 attributes[:username]= $1 66 attributes[:password]= $2 64 username, password = key.split('/') 67 65 68 user = User.authenticate( attributes)66 user = User.authenticate(username, password) 69 67 if user 70 68 @user_id = user.id trunk/app/controllers/documents_controller.rb
r1126 r1130 132 132 id = params[:id] 133 133 134 @ users= Document.find(id).nonsubscribers.delete_if do |user|134 @people = Document.find(id).nonsubscribers.delete_if do |user| 135 135 not (user.name.downcase.include?(input) or (not user.username.nil? and user.username.downcase.include?(input))) 136 136 end 137 render :partial => "users/ users", :object => @users,137 render :partial => "users/people", :object => @people, 138 138 :locals => { :empty => "Aucun utilisateur ne correspond", :draggable => true } 139 139 end trunk/app/controllers/group_controller.rb
r1113 r1130 63 63 id = params[:id] 64 64 65 @ users= Group.find(id).nonmembers.delete_if do |user|66 not (user.name.downcase.include?(input) or user.username.downcase.include?(input))65 @people = Group.find(id).nonmembers.delete_if do |user| 66 not (user.name.downcase.include?(input) or (!user.username.nil? and user.username.downcase.include?(input))) 67 67 end 68 render :partial => "users/ users", :object => @users,68 render :partial => "users/people", :object => @people, 69 69 :locals => { :empty => "Aucun utilisateur ne correspond", :draggable => true } 70 70 end trunk/app/controllers/subscriptions_controller.rb
r1128 r1130 5 5 redirect_to :action => 'manage' 6 6 end 7 7 8 8 9 def manage 9 @pages = Paginator.new(self, User.find(session[:user]). subscriptions.size, 4, params[:page])10 @subscription = User.find(session[:user]). subscriptions.find(:all,:limit => @pages.items_per_page, :offset => @pages.current.offset)10 @pages = Paginator.new(self, User.find(session[:user]).find_subscriptions.size, 4, params[:page]) 11 @subscription = User.find(session[:user]).find_subscriptions(:limit => @pages.items_per_page, :offset => @pages.current.offset) 11 12 end 12 13 13 14 def show 14 @subscription = User.find(session[:user]). subscriptions.find(params[:id])15 @subscription = User.find(session[:user]).find_subscription(params[:id]) 15 16 @review = Review.new(params[:review]) 16 17 if request.post? … … 29 30 30 31 def add 32 document_id = params[:document] 33 subscriber_type, subscriber_id = params[:id].split("_") 34 31 35 @subscription = Subscription.new do |subscription| 32 36 subscription.author = User.find(session[:user]) 33 subscription.document = subscription.author.documents.find( params[:document])34 subscription.subscriber = User.find(params[:id].split("_")[1])37 subscription.document = subscription.author.documents.find(document_id) 38 subscription.subscriber = Object.const_get(subscriber_type.capitalize).find(subscriber_id) 35 39 end 36 @subscription.save 40 41 unless @subscription.save 42 logger.error("can't create subscription on #{document_id} for #{subscriber_type}:#{subscriber_id} : #{@subscription.errors.inspect}") 43 end 44 37 45 render :action => "update" 38 46 end … … 45 53 46 54 def tag 47 @pages = Paginator.new(self, User.find(session[:user]). subscriptions.find_by_tag(params[:name]).size, 4, params[:page])48 @subscriptions = User.find(session[:user]). subscriptions.find_by_tag(params[:name], { :offset => @pages.current.offset, :limit => @pages.items_per_page })55 @pages = Paginator.new(self, User.find(session[:user]).find_subscriptions(:tag => params[:name]).size, 4, params[:page]) 56 @subscriptions = User.find(session[:user]).find_subscriptions(:tag => params[:name], :offset => @pages.current.offset, :limit => @pages.items_per_page) 49 57 end 50 58 51 59 def download 52 @subscription = User.find(session[:user]). subscriptions.find(params[:id])60 @subscription = User.find(session[:user]).find_subscription(params[:id]) 53 61 @subscription.increment!(:download_count) 54 62 send_file @subscription.document.path, :type => @subscription.document.format, :filename => @subscription.document.filename 55 63 end 64 56 65 end trunk/app/controllers/users_controller.rb
r1128 r1130 13 13 14 14 def dashboard 15 @author = User.find(session[:user])16 @ subscriber = User.find(session[:user])17 user_tags = @author.documents.collect{ |d| d.tags }18 @tag = @subscriber.subscriptions.collect{ |s| s.document.tags } + user_tags 19 @tag = @tag.flatten.uniq[0..15]15 user = User.find(session[:user]) 16 @author = user 17 @subscriber = user 18 19 @tag = user.tags.uniq[0..15] 20 20 end 21 21 22 22 def tags 23 @author = User.find(session[:user]) 24 @subscriber = User.find(session[:user]) 25 @tag = @subscriber.subscriptions.collect{ |s| s.document.tags } + @author.documents.collect{ |d| d.tags } 26 @tag = @tag.flatten.uniq 23 user = User.find(session[:user]) 24 @author = user 25 @subscriber = user 26 27 @tag = user.tags.uniq[0..15] 27 28 end 28 29 29 30 def tag 30 @document = User.find(session[:user]).documents.find_by_tag(params[:name], { :limit => 5 }) 31 @subscription = User.find(session[:user]).subscriptions.find_by_tag(params[:name], { :limit => 5 }) 31 user = User.find(session[:user]) 32 33 @document = user.documents.find_by_tag(params[:name], { :limit => 5 }) 34 @subscription = user.find_subscriptions(:tag => params[:name], :limit => 5) 32 35 end 33 36 34 37 def find 35 @document = User.find(session[:user]).documents.find_by_keywords(params[:keywords]) 36 @subscription = User.find(session[:user]).subscriptions.find_by_keywords(params[:keywords]) 38 user = User.find(session[:user]) 39 40 @document = user.documents.find_by_keywords(params[:keywords]) 41 @subscription = user.find_subscriptions(:keywords => params[:keywords]) 37 42 end 38 43 … … 52 57 @user = User.new 53 58 if request.post? 54 @user = User.authenticate(params[:user] )59 @user = User.authenticate(params[:user][:username],params[:user][:password]) 55 60 unless @user.blank? 56 61 flash[:success] = "Bienvenue !" trunk/app/models/document.rb
r1129 r1130 77 77 78 78 def nonsubscribers 79 User.find(:all, :conditions => ["id != ? AND confirmed = ?", author.id, true]) - subscribers 79 groups = Group.find(:all) 80 users = User.find(:all, :conditions => ["id != ? AND confirmed = ?", author.id, true]) 81 return groups + users - subscribers 80 82 end 81 83 84 def match?(keywords) 85 title.downcase.match(keywords.downcase) 86 end 87 82 88 protected 83 89 def destroy_tags trunk/app/models/group.rb
r1108 r1130 2 2 has_and_belongs_to_many :users 3 3 belongs_to :owner, :class_name => "User", :foreign_key => "owner_id" 4 5 has_many :subscriptions, :dependent => :destroy, :order => "created_at DESC", :as => "subscriber" 4 6 5 7 validates_uniqueness_of :name, :message => "Ce nom de groupe existe déjà " trunk/app/models/subscription.rb
r1129 r1130 4 4 belongs_to :document 5 5 6 validates_uniqueness_of :subscriber_id, :scope => [:document_id ]6 validates_uniqueness_of :subscriber_id, :scope => [:document_id, :subscriber_type] 7 7 end trunk/app/models/user.rb
r1129 r1130 5 5 has_many :documents, :dependent => :destroy, :order => "updated_at DESC", :foreign_key => "author_id" do 6 6 def find_by_tag(name, options = Hash.new) 7 find_by_sql(["SELECT documents.* FROM documents, tags, documents_tags WHERE documents.id = documents_tags.document_id AND tags.id = documents_tags.tag_id AND documents.author_id = ? AND tags.name = ? OFFSET ? LIMIT ?", @owner.quoted_id, name, options[:offset], options[:limit]]) 7 tag = Tag.find_by_name(name) 8 documents = find(:all).delete_if { |d| !d.tags.include?(tag) } 9 10 if options[:offset] and options[:limit] 11 documents.slice!(options[:offset], options[:limit]) 12 end 13 14 documents 8 15 end 9 16 10 17 def find_by_keywords(keywords) 11 find(:all , :conditions => ["title ~* ?", keywords])18 find(:all).delete_if { |d| !d.match?(keywords) } 12 19 end 13 20 end 14 21 15 has_many :subscriptions, :dependent => :destroy, :order => "created_at DESC", :as => "subscriber" do 16 def find_by_tag(name, options = Hash.new) 17 options[:offset] = 0 if options[:offset] 18 find_by_sql(["SELECT subscriptions.* FROM subscriptions, documents, tags, documents_tags WHERE subscriptions.document_id = documents.id AND documents.id = documents_tags.document_id AND tags.id = documents_tags.tag_id AND subscriptions.subscriber_id = ? AND tags.name = ? OFFSET ? LIMIT ?", @owner.quoted_id, name, options[:offset], options[:limit]]) 19 end 20 21 def find_by_keywords(keywords) 22 find_by_sql(["SELECT subscriptions.* FROM subscriptions, documents WHERE subscriptions.document_id = documents.id AND subscriptions.subscriber_id = ? AND documents.title ~* ?", @owner.quoted_id, keywords]) 23 end 24 end 22 has_many :subscriptions, :dependent => :destroy, :order => "created_at DESC", :as => "subscriber" 25 23 26 24 has_many :podcasts, :dependent => :destroy, :foreign_key => "author_id" … … 36 34 validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/, :message => "Un email valide pour vous contacter est requis" 37 35 36 def tags 37 subscriptions_tags = find_subscriptions.collect{ |s| s.document.tags }.flatten 38 documents_tags = documents.collect{ |d| d.tags }.flatten 39 (subscriptions_tags + documents_tags).uniq 40 end 41 42 def find_subscriptions(options = Hash.new) 43 group_subscriptions = groups.collect{ |group| group.subscriptions }.flatten 44 all_subscriptions = self.subscriptions + group_subscriptions 45 46 sorted_attribute = "created_at" 47 all_subscriptions = all_subscriptions.sort_by { |s| s[sorted_attribute] }.reverse 48 49 if options[:tag] 50 tag = Tag.find_by_name(options[:tag]) 51 all_subscriptions = all_subscriptions.delete_if { |s| ! s.document.tags.include?(tag) } 52 end 53 54 if options[:keywords] 55 puts options[:keywords] 56 all_subscriptions = all_subscriptions.delete_if do |s| 57 !s.document.match?(options[:keywords]) 58 end 59 end 60 61 if options[:offset] and options[:limit] 62 return all_subscriptions.slice(options[:offset], options[:limit]) 63 end 64 65 all_subscriptions 66 end 67 68 def find_subscription(id) 69 subscription = self.subscriptions.find_by_id(id) 70 for group in groups 71 subscription = group.subscriptions.find_by_id(id) 72 break unless subscription.nil? 73 end 74 subscription 75 end 76 38 77 def self.digest_password(clear_password) 39 78 Digest::SHA256.hexdigest(clear_password) … … 44 83 end 45 84 46 def self.authenticate(attributes) 47 username = attributes[:username] 48 85 def self.authenticate(username, clear_password) 49 86 user = User.find_by_username(username, :conditions => ["confirmed = ?", true]) 50 87 51 88 if user.blank? 52 89 logger.debug("unknown or unconfirmed user : #{username}") … … 54 91 end 55 92 56 if User.digest_password( attributes[:password]) != user.password93 if User.digest_password(clear_password) != user.password 57 94 logger.debug("wrong password for : #{username}") 58 95 return nil trunk/app/views/documents/share.rhtml
r1128 r1130 22 22 23 23 <ul id="users"> 24 <%= render :partial => "users/ users", :object => @document.nonsubscribers, :locals => { :empty => "Déposer ici les utilisateurs qui n'ont pas accÚs à ce document", :draggable => true} %>24 <%= render :partial => "users/people", :object => @document.nonsubscribers, :locals => { :empty => "Reposer ici les utilisateurs qui ne doivent pas avoir accÚs à ce document" } %> 25 25 </ul> 26 26 <%= drop_receiving_element("users", :url => { :controller => "subscriptions", :action => "remove", :document => @document }) %> … … 36 36 <h4>Ont accÚs à ce document :</h4> 37 37 <ul id="subscribers"> 38 <%= render :partial => "users/ subscribers", :object => @document.subscribers, :locals => { :empty => "Déposer ici les utilisateurs qui ont accÚs à ce document", :draggable => true } %>38 <%= render :partial => "users/people", :object => @document.subscribers, :locals => { :empty => "Déposer ici les utilisateurs qui ont accÚs à ce document", :limit => :none } %> 39 39 </ul> 40 40 <%= drop_receiving_element("subscribers", :url => { :controller => "subscriptions", :action => "add", :document => @document }) %> trunk/app/views/group/_groups.rhtml
r1113 r1130 20 20 21 21 <ul id="members"> 22 <%= render :partial => "users/ users", :object => @group.users, :locals => { :empty => "Aucun membre", :draggable => actions} %>22 <%= render :partial => "users/people", :object => @group.users, :locals => { :empty => "Aucun membre", :draggable => actions, :limit => :none } %> 23 23 </ul> 24 24 <%= drop_receiving_element("members", :url => { :controller => "group", :action => "add_member", :group => @group }) %> … … 28 28 <h4>Ne sont pas membres de ce groupe :</h4> 29 29 <ul id="users"> 30 <%= render :partial => "users/ users", :object => @group.nonmembers, :locals => { :empty => "Déposer ici les utilisateurs qui ne sont membres de ce groupe", :draggable => actions } %>30 <%= render :partial => "users/people", :object => @group.nonmembers, :locals => { :empty => "Déposer ici les utilisateurs qui ne sont membres de ce groupe", :draggable => actions } %> 31 31 </ul> 32 32 <%= drop_receiving_element("users", :url => { :controller => "group", :action => "remove_member", :group => @group }) %> trunk/app/views/group/update.rjs
r1108 r1130 1 page.replace_html "users", :partial => "users/ users", :object => @group.nonmembers, :locals => { :empty => "Déposer ici les utilisateurs qui ne sont membres de ce groupe", :draggable => true}2 page.replace_html "members", :partial => "users/ users", :object => @group.users, :locals => { :empty => "Déposer ici les utilisateurs membres de ce groupe", :draggable => true}1 page.replace_html "users", :partial => "users/people", :object => @group.nonmembers, :locals => { :empty => "Déposer ici les utilisateurs qui ne sont membres de ce groupe" } 2 page.replace_html "members", :partial => "users/people", :object => @group.users, :locals => { :empty => "Déposer ici les utilisateurs membres de ce groupe" } trunk/app/views/subscriptions/update.rjs
r1128 r1130 1 page.replace_html "users", :partial => "users/ users", :object => @subscription.document.nonsubscribers, :locals => { :empty => "Déposer ici les utilisateurs qui n'ont pas accÚs à ce document", :draggable => true}2 page.replace_html "subscribers", :partial => "users/ subscribers", :object => @subscription.document.subscribers, :locals => { :empty => "Déposer ici les utilisateurs qui ont accÚs à ce document", :draggable => true }1 page.replace_html "users", :partial => "users/people", :object => @subscription.document.nonsubscribers, :locals => { :empty => "Déposer ici les utilisateurs qui n'ont pas accÚs à ce document" } 2 page.replace_html "subscribers", :partial => "users/people", :object => @subscription.document.subscribers, :locals => { :empty => "Déposer ici les utilisateurs qui ont accÚs à ce document", :limit => :none } trunk/app/views/users/_sidebar.rhtml
r1120 r1130 11 11 <li><%= link_to("Ajouter un podcast", :controller => "podcasts", :action => "add") %></li> 12 12 </ul> 13 <!-- 13 14 14 <ul> 15 15 <li><%= link_to("Gérer vos groupes", :controller => "group", :action => "manage") %></li> 16 16 <li><%= link_to("Ajouter un groupe", :controller => "group", :action => "add") %></li> 17 17 </ul> 18 --> 18 19 19 <h2>Recherchez</h2> 20 20 <% form_tag({:controller => :users, :action => :find }, :id => "search") do %> trunk/test/unit/user_test.rb
r1126 r1130 2 2 3 3 class UserTest < Test::Unit::TestCase 4 fixtures :users 4 fixtures :users, :documents 5 5 6 6 def test_username … … 36 36 user = users(:elmo) 37 37 assert ! user.documents.empty? 38 tags = user.documents.collect{ |d| d.tags } 38 end 39 40 def test_authenticate 41 user = users(:elmo) 42 43 clear_password = "test" 44 user.password = clear_password 45 user.save 46 47 logged_user = User.authenticate(user.username, clear_password) 48 assert_not_nil logged_user 49 50 assert_equal user, logged_user 39 51 end 40 52
