diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-11-24 22:00:30 +0200 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-11-24 22:00:30 +0200 |
commit | f37fa968b2509d8e2ab0fc72aba1fb53df7451c7 (patch) | |
tree | ecdeebab9c2c8ee747b2cf59dcebf1cfdb0ec1e0 | |
parent | f997947664a7c959b5e606614f56dc52443bd0dd (diff) | |
download | gitlab-ce-f37fa968b2509d8e2ab0fc72aba1fb53df7451c7.tar.gz |
add ability to change namespace from project edit page
-rw-r--r-- | app/controllers/application_controller.rb | 3 | ||||
-rw-r--r-- | app/controllers/groups_controller.rb | 1 | ||||
-rw-r--r-- | app/controllers/projects_controller.rb | 8 | ||||
-rw-r--r-- | app/models/ability.rb | 11 | ||||
-rw-r--r-- | app/models/project.rb | 10 | ||||
-rw-r--r-- | app/views/groups/_projects.html.haml | 5 | ||||
-rw-r--r-- | app/views/projects/_form.html.haml | 50 | ||||
-rw-r--r-- | app/views/projects/_new_form.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/update.js.haml | 2 |
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'} + + %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(); |