To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / vendor / plugins / redmine_tags / lib / redmine_tags / patches / projects_controller_patch.rb @ 816:f3c3a1c55451

History | View | Annotate | Download (4.79 KB)

1
require_dependency 'projects_controller'
2

    
3
module RedmineTags
4
  module Patches
5
    module ProjectsControllerPatch      
6
      def self.included(base)
7
        base.send(:include, InstanceMethods)
8
        base.class_eval do          
9
          unloadable 
10
          skip_before_filter :authorize, :only => [:set_fieldset_status]
11
          skip_before_filter :find_project, :only => [:set_fieldset_status]
12
          before_filter :add_tags_to_project, :only => [:save, :update]
13

    
14
          alias :index filtered_index
15
        end
16
      end
17

    
18
      module InstanceMethods
19
                
20
        def add_tags_to_project
21

    
22
          if params && params[:project] && !params[:project][:tag_list].nil?
23
            old_tags = @project.tag_list.to_s.downcase
24
            new_tags = params[:project][:tag_list].to_s.downcase
25

    
26
            unless (old_tags == new_tags)
27
              @project.tag_list = ActionController::Base.helpers.strip_tags(new_tags)
28
            end
29
          end
30
        end
31

    
32
        def paginate_projects
33
          sort_init 'name'
34
          sort_update %w(name lft created_on updated_on)
35
          @limit = per_page_option
36
          @project_count = Project.visible_roots.find(@projects).count
37
          @project_pages = ActionController::Pagination::Paginator.new self, @project_count, @limit, params['page']
38
          @offset ||= @project_pages.current.offset
39
        end
40

    
41
        def set_fieldset_status
42

    
43
          # luisf. test for missing parameters………
44
          field = params[:field_id]
45
          status = params[:status]
46

    
47
          session[(field + "_status").to_sym] = status
48
          render :nothing => true
49
        end
50

    
51
        # gets the status of the collabsible fieldsets
52
        def get_fieldset_statuses
53
          if session[:my_projects_fieldset_status].nil?
54
            @myproj_status = "true"
55
          else
56
            @myproj_status = session[:my_projects_fieldset_status]
57
          end
58
                    
59
          if session[:filters_fieldset_status].nil?
60
            @filter_status = "false"
61
          else
62
            @filter_status = session[:filters_fieldset_status]
63
          end
64
          
65
          if params && params[:project] && !params[:project][:tag_list].nil?
66
            @filter_status = "true"
67
          end
68
                                      
69
        end
70

    
71
        # Lists visible projects. Paginator is for top-level projects only
72
        # (subprojects belong to them)
73
        def filtered_index
74
          @project = Project.new
75
          filter_projects
76
          get_fieldset_statuses
77

    
78
          respond_to do |format|
79
            format.html { 
80
              paginate_projects
81
              
82
              @projects = Project.visible_roots.find(@projects, :offset => @offset, :limit => @limit, :order => sort_clause) 
83

    
84
              if User.current.logged?
85
                # seems sort_by gives us case-sensitive ordering, which we don't want
86
                #          @user_projects = User.current.projects.sort_by(&:name)
87
                @user_projects = User.current.projects.all(:order => :name)
88
              end
89
              
90
              render :template => 'projects/index.rhtml', :layout => !request.xhr?
91
            }
92
            format.api {
93
              @offset, @limit = api_offset_and_limit
94
              @project_count = Project.visible.count
95
              @projects = Project.visible.find(@projects, :offset => @offset, :limit => @limit, :order => 'lft')
96
            }
97
            format.atom {
98
              projects = Project.visible.find(:all, :order => 'created_on DESC', :limit => Setting.feeds_limit.to_i)
99
              render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}")
100
            }
101
            format.js {
102
              paginate_projects
103
              @projects = Project.visible_roots.find(@projects, :offset => @offset, :limit => @limit, :order => sort_clause)
104
              render :update do |page|
105
                page.replace_html 'projects', :partial => 'filtered_projects'
106
              end
107
            }
108
          end
109
        end
110

    
111
        private
112

    
113
        def filter_projects                  
114
          @question = (params[:q] || "").strip     
115

    
116
          if params.has_key?(:project)
117
            @tag_list = (params[:project][:tag_list] || "").strip.split(",")
118
          else
119
            @tag_list = []
120
          end
121

    
122
          if  @question == ""
123
            @projects = Project.visible
124
          else
125
            @projects = Project.visible.search_by_question(@question)
126
          end
127
  
128
          unless @tag_list.empty?
129
            @tagged_projects_ids = Project.visible.tagged_with(@tag_list).collect{ |project| Project.find(project.id) }
130
            @projects = @projects & @tagged_projects_ids
131
          end
132
          
133
          @projects = @projects.collect{ |project| project.root }
134
          @projects = @projects.uniq
135

    
136
        end
137
      end
138
    end
139
  end
140
end