add ability to change namespace from project edit page

This commit is contained in:
Dmitriy Zaporozhets 2012-11-24 22:00:30 +02:00
parent f997947664
commit f37fa968b2
9 changed files with 64 additions and 26 deletions

View file

@ -64,9 +64,8 @@ class ApplicationController < ActionController::Base
def project def project
id = params[:project_id] || params[:id] 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 @project || render_404
end end

View file

@ -4,6 +4,7 @@ class GroupsController < ApplicationController
before_filter :group before_filter :group
before_filter :projects before_filter :projects
before_filter :add_project_abilities
def show def show
@events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0) @events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0)

View file

@ -34,8 +34,16 @@ class ProjectsController < ProjectResourceController
end end
def update 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| respond_to do |format|
if project.update_attributes(params[:project]) 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.html { redirect_to edit_project_path(project), notice: 'Project was successfully updated.' }
format.js format.js
else else

View file

@ -7,6 +7,7 @@ class Ability
when "Note" then note_abilities(object, subject) when "Note" then note_abilities(object, subject)
when "Snippet" then snippet_abilities(object, subject) when "Snippet" then snippet_abilities(object, subject)
when "MergeRequest" then merge_request_abilities(object, subject) when "MergeRequest" then merge_request_abilities(object, subject)
when "Group" then group_abilities(object, subject)
else [] else []
end end
end end
@ -61,6 +62,16 @@ class Ability
rules.flatten rules.flatten
end 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| [:issue, :note, :snippet, :merge_request].each do |name|
define_method "#{name}_abilities" do |user, subject| define_method "#{name}_abilities" do |user, subject|
if subject.author == user if subject.author == user

View file

@ -84,6 +84,16 @@ class Project < ActiveRecord::Base
where("projects.name LIKE :query OR projects.path LIKE :query", query: "%#{query}%") where("projects.name LIKE :query OR projects.path LIKE :query", query: "%#{query}%")
end 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) def create_by_user(params, user)
namespace_id = params.delete(:namespace_id) namespace_id = params.delete(:namespace_id)
namespace_id ||= user.namespace.try(:id) namespace_id ||= user.namespace.try(:id)

View file

@ -3,6 +3,11 @@
Projects Projects
%small %small
(#{projects.count}) (#{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 %ul.unstyled
- projects.each do |project| - projects.each do |project|
%li.wll %li.wll

View file

@ -9,41 +9,45 @@
Project name is Project name is
.input .input
= f.text_field :name, placeholder: "Example Project", class: "xxlarge" = f.text_field :name, placeholder: "Example Project", class: "xxlarge"
%fieldset %fieldset
%legend Advanced settings: %legend Advanced settings:
.clearfix .control-group
= f.label :path do = f.label :path do
Path Path
.input .controls
.input-prepend = text_field_tag :ppath, @project.path_to_repo, class: "xlarge", disabled: true
%strong
= text_field_tag :ppath, @project.path_to_repo, class: "xlarge", disabled: true
- unless @project.new_record? || @project.heads.empty? .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 .clearfix
= f.label :default_branch, "Default Branch" = f.label :default_branch, "Default Branch"
.input= f.select(:default_branch, @project.heads.map(&:name), {}, style: "width:210px;") .input= f.select(:default_branch, @project.heads.map(&:name), {}, style: "width:210px;")
- unless @project.new_record? %fieldset
%fieldset %legend Features:
%legend Features:
.clearfix .clearfix
= f.label :issues_enabled, "Issues" = f.label :issues_enabled, "Issues"
.input= f.check_box :issues_enabled .input= f.check_box :issues_enabled
.clearfix .clearfix
= f.label :merge_requests_enabled, "Merge Requests" = f.label :merge_requests_enabled, "Merge Requests"
.input= f.check_box :merge_requests_enabled .input= f.check_box :merge_requests_enabled
.clearfix .clearfix
= f.label :wall_enabled, "Wall" = f.label :wall_enabled, "Wall"
.input= f.check_box :wall_enabled .input= f.check_box :wall_enabled
.clearfix .clearfix
= f.label :wiki_enabled, "Wiki" = f.label :wiki_enabled, "Wiki"
.input= f.check_box :wiki_enabled .input= f.check_box :wiki_enabled
%br %br

View file

@ -14,7 +14,7 @@
= f.label :namespace_id do = f.label :namespace_id do
%span.cgray Namespace %span.cgray Namespace
.input .input
= f.select :namespace_id, namespaces_options, {}, {class: 'chosen'} = f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'chosen'}
%hr %hr
%p.padded %p.padded
All created project are private. You choose who can see project and commit to repository. All created project are private. You choose who can see project and commit to repository.

View file

@ -1,6 +1,6 @@
- if @project.valid? - if @project.valid?
:plain :plain
location.href = "#{edit_project_path(@project, notice: 'Project was successfully updated.')}"; location.href = "#{edit_project_path(@project)}";
- else - else
:plain :plain
$('.project_edit_holder').show(); $('.project_edit_holder').show();