summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-11-24 22:00:30 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2012-11-24 22:00:30 +0200
commitf37fa968b2509d8e2ab0fc72aba1fb53df7451c7 (patch)
treeecdeebab9c2c8ee747b2cf59dcebf1cfdb0ec1e0
parentf997947664a7c959b5e606614f56dc52443bd0dd (diff)
downloadgitlab-ce-f37fa968b2509d8e2ab0fc72aba1fb53df7451c7.tar.gz
add ability to change namespace from project edit page
-rw-r--r--app/controllers/application_controller.rb3
-rw-r--r--app/controllers/groups_controller.rb1
-rw-r--r--app/controllers/projects_controller.rb8
-rw-r--r--app/models/ability.rb11
-rw-r--r--app/models/project.rb10
-rw-r--r--app/views/groups/_projects.html.haml5
-rw-r--r--app/views/projects/_form.html.haml50
-rw-r--r--app/views/projects/_new_form.html.haml2
-rw-r--r--app/views/projects/update.js.haml2
9 files changed, 65 insertions, 27 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 847523d603f..2be9a54da52 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -64,9 +64,8 @@ class ApplicationController < ActionController::Base
def project
id = params[:project_id] || params[:id]
- id = id.split("/") if id.include?("/")
- @project ||= current_user.projects.find_by_path(id)
+ @project ||= current_user.projects.find_with_namespace(id)
@project || render_404
end
diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb
index 07f613033c4..c969f41ebda 100644
--- a/app/controllers/groups_controller.rb
+++ b/app/controllers/groups_controller.rb
@@ -4,6 +4,7 @@ class GroupsController < ApplicationController
before_filter :group
before_filter :projects
+ before_filter :add_project_abilities
def show
@events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0)
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 72080070bed..1a402efa7c4 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -34,8 +34,16 @@ class ProjectsController < ProjectResourceController
end
def update
+ namespace_id = params[:project].delete(:namespace_id)
+
+ if namespace_id
+ namespace = Namespace.find(namespace_id)
+ project.transfer(namespace)
+ end
+
respond_to do |format|
if project.update_attributes(params[:project])
+ flash[:notice] = 'Project was successfully updated.'
format.html { redirect_to edit_project_path(project), notice: 'Project was successfully updated.' }
format.js
else
diff --git a/app/models/ability.rb b/app/models/ability.rb
index c3a212f473d..e55e7709372 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -7,6 +7,7 @@ class Ability
when "Note" then note_abilities(object, subject)
when "Snippet" then snippet_abilities(object, subject)
when "MergeRequest" then merge_request_abilities(object, subject)
+ when "Group" then group_abilities(object, subject)
else []
end
end
@@ -61,6 +62,16 @@ class Ability
rules.flatten
end
+ def group_abilities user, group
+ rules = []
+
+ rules << [
+ :manage_group
+ ] if group.owner == user
+
+ rules.flatten
+ end
+
[:issue, :note, :snippet, :merge_request].each do |name|
define_method "#{name}_abilities" do |user, subject|
if subject.author == user
diff --git a/app/models/project.rb b/app/models/project.rb
index ad8d8293ff7..956ab2aa1c8 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -84,6 +84,16 @@ class Project < ActiveRecord::Base
where("projects.name LIKE :query OR projects.path LIKE :query", query: "%#{query}%")
end
+ def find_with_namespace(id)
+ if id.include?("/")
+ id = id.split("/")
+ namespace_id = Namespace.find_by_path(id.first).id
+ where(namespace_id: namespace_id).find_by_path(id.last)
+ else
+ find_by_path(id)
+ end
+ end
+
def create_by_user(params, user)
namespace_id = params.delete(:namespace_id)
namespace_id ||= user.namespace.try(:id)
diff --git a/app/views/groups/_projects.html.haml b/app/views/groups/_projects.html.haml
index b565dad37a9..6425a2e61ce 100644
--- a/app/views/groups/_projects.html.haml
+++ b/app/views/groups/_projects.html.haml
@@ -3,6 +3,11 @@
Projects
%small
(#{projects.count})
+ - if can? current_user, :manage_group, @group
+ %span.right
+ = link_to new_project_path(namespace_id: @group.id), class: "btn very_small info" do
+ %i.icon-plus
+ New Project
%ul.unstyled
- projects.each do |project|
%li.wll
diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml
index 68b9e789664..fe926adbceb 100644
--- a/app/views/projects/_form.html.haml
+++ b/app/views/projects/_form.html.haml
@@ -9,41 +9,45 @@
Project name is
.input
= f.text_field :name, placeholder: "Example Project", class: "xxlarge"
-
%fieldset
%legend Advanced settings:
- .clearfix
+ .control-group
= f.label :path do
Path
- .input
- .input-prepend
- %strong
- = text_field_tag :ppath, @project.path_to_repo, class: "xlarge", disabled: true
-
- - unless @project.new_record? || @project.heads.empty?
+ .controls
+ = text_field_tag :ppath, @project.path_to_repo, class: "xlarge", disabled: true
+
+ .control-group
+ = f.label :namespace_id do
+ %span Namespace
+ .controls
+ = f.select :namespace_id, namespaces_options(@project.namespace_id), {}, {class: 'chosen'}
+ &nbsp;
+ %span.cred Be careful. Changing project namespace can have unintended side effects
+
+ - unless @project.heads.empty?
.clearfix
= f.label :default_branch, "Default Branch"
.input= f.select(:default_branch, @project.heads.map(&:name), {}, style: "width:210px;")
- - unless @project.new_record?
- %fieldset
- %legend Features:
+ %fieldset
+ %legend Features:
- .clearfix
- = f.label :issues_enabled, "Issues"
- .input= f.check_box :issues_enabled
+ .clearfix
+ = f.label :issues_enabled, "Issues"
+ .input= f.check_box :issues_enabled
- .clearfix
- = f.label :merge_requests_enabled, "Merge Requests"
- .input= f.check_box :merge_requests_enabled
+ .clearfix
+ = f.label :merge_requests_enabled, "Merge Requests"
+ .input= f.check_box :merge_requests_enabled
- .clearfix
- = f.label :wall_enabled, "Wall"
- .input= f.check_box :wall_enabled
+ .clearfix
+ = f.label :wall_enabled, "Wall"
+ .input= f.check_box :wall_enabled
- .clearfix
- = f.label :wiki_enabled, "Wiki"
- .input= f.check_box :wiki_enabled
+ .clearfix
+ = f.label :wiki_enabled, "Wiki"
+ .input= f.check_box :wiki_enabled
%br
diff --git a/app/views/projects/_new_form.html.haml b/app/views/projects/_new_form.html.haml
index ae7b051a8d3..2ef29cb0c65 100644
--- a/app/views/projects/_new_form.html.haml
+++ b/app/views/projects/_new_form.html.haml
@@ -14,7 +14,7 @@
= f.label :namespace_id do
%span.cgray Namespace
.input
- = f.select :namespace_id, namespaces_options, {}, {class: 'chosen'}
+ = f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'chosen'}
%hr
%p.padded
All created project are private. You choose who can see project and commit to repository.
diff --git a/app/views/projects/update.js.haml b/app/views/projects/update.js.haml
index 8aaa0e491dd..f44ed529182 100644
--- a/app/views/projects/update.js.haml
+++ b/app/views/projects/update.js.haml
@@ -1,6 +1,6 @@
- if @project.valid?
:plain
- location.href = "#{edit_project_path(@project, notice: 'Project was successfully updated.')}";
+ location.href = "#{edit_project_path(@project)}";
- else
:plain
$('.project_edit_holder').show();