diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-09-13 16:31:11 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-09-13 16:31:11 +0000 |
commit | cc643ce932b2abdc56c4d1933c02806ca57ddefa (patch) | |
tree | eeaaba02f0eee8ce2d06a10609ccffebdfb1ee4d /app | |
parent | 6ef6459630cfd8fd5af31d527c0043243ef2cb09 (diff) | |
download | redmine-cc643ce932b2abdc56c4d1933c02806ca57ddefa.tar.gz redmine-cc643ce932b2abdc56c4d1933c02806ca57ddefa.zip |
Merged nbc branch @ r1812 (commit access permission and reposman improvements).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1814 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r-- | app/apis/sys_api.rb | 14 | ||||
-rw-r--r-- | app/controllers/sys_controller.rb | 9 | ||||
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/models/role.rb | 27 |
4 files changed, 42 insertions, 10 deletions
diff --git a/app/apis/sys_api.rb b/app/apis/sys_api.rb index f52f9e7ef..fcee616b5 100644 --- a/app/apis/sys_api.rb +++ b/app/apis/sys_api.rb @@ -15,11 +15,19 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +class AWSProjectWithRepository < ActionWebService::Struct + member :id, :int + member :identifier, :string + member :name, :string + member :is_public, :bool + member :repository, Repository +end + class SysApi < ActionWebService::API::Base - api_method :projects, + api_method :projects_with_repository_enabled, :expects => [], - :returns => [[Project]] + :returns => [[AWSProjectWithRepository]] api_method :repository_created, - :expects => [:string, :string], + :expects => [:string, :string, :string], :returns => [:int] end diff --git a/app/controllers/sys_controller.rb b/app/controllers/sys_controller.rb index 6065c2833..8aff3bd15 100644 --- a/app/controllers/sys_controller.rb +++ b/app/controllers/sys_controller.rb @@ -23,18 +23,17 @@ class SysController < ActionController::Base before_invocation :check_enabled # Returns the projects list, with their repositories - def projects - Project.find(:all, :include => :repository) + def projects_with_repository_enabled + Project.has_module(:repository).find(:all, :include => :repository, :order => 'identifier') end # Registers a repository for the given project identifier - # (Subversion specific) - def repository_created(identifier, url) + def repository_created(identifier, vendor, url) project = Project.find_by_identifier(identifier) # Do not create the repository if the project has already one return 0 unless project && project.repository.nil? logger.debug "Repository for #{project.name} was created" - repository = Repository.factory('Subversion', :project => project, :url => url) + repository = Repository.factory(vendor, :project => project, :url => url) repository.save repository.id || 0 end diff --git a/app/models/project.rb b/app/models/project.rb index adc70c644..e40af9967 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -62,6 +62,8 @@ class Project < ActiveRecord::Base validates_format_of :identifier, :with => /^[a-z0-9\-]*$/ before_destroy :delete_all_members + + named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } } def identifier=(identifier) super unless identifier_frozen? diff --git a/app/models/role.rb b/app/models/role.rb index 6f1fb4768..5ff9470f9 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -19,6 +19,11 @@ class Role < ActiveRecord::Base # Built-in roles BUILTIN_NON_MEMBER = 1 BUILTIN_ANONYMOUS = 2 + + named_scope :builtin, lambda { |*args| + compare = 'not' if args.first == true + { :conditions => "#{compare} builtin = 0" } + } before_destroy :check_deletable has_many :workflows, :dependent => :delete_all do @@ -36,7 +41,7 @@ class Role < ActiveRecord::Base has_many :members acts_as_list - serialize :permissions + serialize :permissions, Array attr_protected :builtin validates_presence_of :name @@ -49,9 +54,27 @@ class Role < ActiveRecord::Base end def permissions=(perms) - perms = perms.collect {|p| p.to_sym unless p.blank? }.compact if perms + perms = perms.collect {|p| p.to_sym unless p.blank? }.compact.uniq if perms write_attribute(:permissions, perms) end + + def add_permission!(*perms) + self.permissions = [] unless permissions.is_a?(Array) + + permissions_will_change! + perms.each do |p| + p = p.to_sym + permissions << p unless permissions.include?(p) + end + save! + end + + def remove_permission!(*perms) + return unless permissions.is_a?(Array) + permissions_will_change! + perms.each { |p| permissions.delete(p.to_sym) } + save! + end def <=>(role) position <=> role.position |