##// END OF EJS Templates
fixed: non public projects were shown on welcome screen even if current user is not a member...
Jean-Philippe Lang -
r126:7a03cf92ba62
parent child
Show More
@@ -1,25 +1,25
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class WelcomeController < ApplicationController
19 19 layout 'base'
20 20
21 21 def index
22 @news = News.latest
23 @projects = Project.latest
22 @news = News.latest logged_in_user
23 @projects = Project.latest logged_in_user
24 24 end
25 25 end
@@ -1,29 +1,29
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class News < ActiveRecord::Base
19 19 belongs_to :project
20 20 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
21 21 has_many :comments, :as => :commented, :dependent => :delete_all, :order => "created_on"
22 22
23 23 validates_presence_of :title, :description
24 24
25 # returns last created news
26 def self.latest
27 find(:all, :limit => 5, :include => [ :author, :project ], :order => "news.created_on DESC")
25 # returns latest news for projects visible by user
26 def self.latest(user=nil, count=5)
27 find(:all, :limit => count, :conditions => Project.visible_by(user), :include => [ :author, :project ], :order => "news.created_on DESC")
28 28 end
29 29 end
@@ -1,61 +1,70
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class Project < ActiveRecord::Base
19 19 has_many :versions, :dependent => :destroy, :order => "versions.effective_date DESC, versions.name DESC"
20 20 has_many :members, :dependent => :delete_all, :include => :user, :conditions => "users.status=#{User::STATUS_ACTIVE}"
21 21 has_many :users, :through => :members
22 22 has_many :custom_values, :dependent => :delete_all, :as => :customized
23 23 has_many :issues, :dependent => :destroy, :order => "issues.created_on DESC", :include => [:status, :tracker]
24 24 has_many :queries, :dependent => :delete_all
25 25 has_many :documents, :dependent => :destroy
26 26 has_many :news, :dependent => :delete_all, :include => :author
27 27 has_many :issue_categories, :dependent => :delete_all, :order => "issue_categories.name"
28 28 has_one :repository, :dependent => :destroy
29 29 has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => 'custom_fields_projects', :association_foreign_key => 'custom_field_id'
30 30 acts_as_tree :order => "name", :counter_cache => true
31 31
32 32 validates_presence_of :name, :description
33 33 validates_uniqueness_of :name
34 34 validates_associated :custom_values, :on => :update
35 35 validates_associated :repository
36 36 validates_format_of :name, :with => /^[\w\s\'\-]*$/i
37 37
38 # returns 5 last created projects
39 def self.latest
40 find(:all, :limit => 5, :order => "created_on DESC")
38 # returns latest created projects
39 # non public projects will be returned only if user is a member of those
40 def self.latest(user=nil, count=5)
41 find(:all, :limit => count, :conditions => visible_by(user), :order => "projects.created_on DESC")
41 42 end
42 43
44 def self.visible_by(user=nil)
45 if user && !user.memberships.empty?
46 return ["projects.is_public = ? or projects.id IN (#{user.memberships.collect{|m| m.project_id}.join(',')})", true]
47 else
48 return ["projects.is_public = ?", true]
49 end
50 end
51
43 52 # Returns an array of all custom fields enabled for project issues
44 53 # (explictly associated custom fields and custom fields enabled for all projects)
45 54 def custom_fields_for_issues(tracker)
46 55 tracker.custom_fields.find(:all, :include => :projects,
47 56 :conditions => ["is_for_all=? or project_id=?", true, self.id])
48 57 #(CustomField.for_all + custom_fields).uniq
49 58 end
50 59
51 60 def all_custom_fields
52 61 @all_custom_fields ||= IssueCustomField.find(:all, :include => :projects,
53 62 :conditions => ["is_for_all=? or project_id=?", true, self.id])
54 63 end
55 64
56 65 protected
57 66 def validate
58 67 errors.add(parent_id, " must be a root project") if parent and parent.parent
59 68 errors.add_to_base("A project with subprojects can't be a subproject") if parent and projects_count > 0
60 69 end
61 70 end
General Comments 0
You need to be logged in to leave comments. Login now