summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-09-13 16:31:11 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-09-13 16:31:11 +0000
commitcc643ce932b2abdc56c4d1933c02806ca57ddefa (patch)
treeeeaaba02f0eee8ce2d06a10609ccffebdfb1ee4d /app
parent6ef6459630cfd8fd5af31d527c0043243ef2cb09 (diff)
downloadredmine-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.rb14
-rw-r--r--app/controllers/sys_controller.rb9
-rw-r--r--app/models/project.rb2
-rw-r--r--app/models/role.rb27
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