diff options
| author | GitLab <gitlab@localhost> | 2013-01-17 17:35:57 +0200 |
|---|---|---|
| committer | GitLab <gitlab@localhost> | 2013-01-17 17:35:57 +0200 |
| commit | 232d61d59808e6f0c731d135d728800c4b13ae27 (patch) | |
| tree | 87356bbbd97abd549fcc489fb3bed60dc0438528 /app/contexts | |
| parent | c7c1a97c2fecb8931bbe66af6860a072ca97335d (diff) | |
| download | gitlab-ce-232d61d59808e6f0c731d135d728800c4b13ae27.tar.gz | |
Refactor project creation. Added logout link to profile page
Diffstat (limited to 'app/contexts')
| -rw-r--r-- | app/contexts/project_update_context.rb | 24 | ||||
| -rw-r--r-- | app/contexts/projects/create_context.rb | 64 | ||||
| -rw-r--r-- | app/contexts/projects/update_context.rb | 25 |
3 files changed, 89 insertions, 24 deletions
diff --git a/app/contexts/project_update_context.rb b/app/contexts/project_update_context.rb deleted file mode 100644 index f6d69e7b62d..00000000000 --- a/app/contexts/project_update_context.rb +++ /dev/null @@ -1,24 +0,0 @@ -class ProjectUpdateContext < BaseContext - def execute(role = :default) - namespace_id = params[:project].delete(:namespace_id) - params[:project].delete(:public) unless can?(current_user, :change_public_mode, project) - - allowed_transfer = can?(current_user, :change_namespace, project) || role == :admin - - if allowed_transfer && namespace_id.present? - if namespace_id == Namespace.global_id - if project.namespace.present? - # Transfer to global namespace from anyone - project.transfer(nil) - end - elsif namespace_id.to_i != project.namespace_id - # Transfer to someone namespace - namespace = Namespace.find(namespace_id) - project.transfer(namespace) - end - end - - project.update_attributes(params[:project], as: role) - end -end - diff --git a/app/contexts/projects/create_context.rb b/app/contexts/projects/create_context.rb new file mode 100644 index 00000000000..5329443c5f7 --- /dev/null +++ b/app/contexts/projects/create_context.rb @@ -0,0 +1,64 @@ +module Projects + class CreateContext < BaseContext + def execute + # get namespace id + namespace_id = params[:project].delete(:namespace_id) + + @project = Project.new(params[:project]) + + # Parametrize path for project + # + # Ex. + # 'GitLab HQ'.parameterize => "gitlab-hq" + # + @project.path = @project.name.dup.parameterize + + + if namespace_id + # Find matching namespace and check if it allowed + # for current user if namespace_id passed. + if allowed_namespace?(current_user, namespace_id) + @project.namespace_id = namespace_id unless namespace_id == Namespace.global_id + else + deny_namespace + return @project + end + else + # Set current user namespace if namespace_id is nil + @project.namespace_id = current_user.id + end + + Project.transaction do + @project.creator = current_user + @project.save! + + # Add user as project master + @project.users_projects.create!(project_access: UsersProject::MASTER, user: current_user) + + # when project saved no team member exist so + # project repository should be updated after first user add + @project.update_repository + end + + @project + rescue => ex + @project.errors.add(:base, "Can't save project. Please try again later") + @project + end + + protected + + def deny_namespace + @project.errors.add(:namespace, "is not valid") + end + + def allowed_namespace?(user, namespace_id) + if namespace_id == Namespace.global_id + return user.admin + else + namespace = Namespace.find_by_id(namespace_id) + current_user.can?(:manage_namespace, namespace) + end + end + end +end diff --git a/app/contexts/projects/update_context.rb b/app/contexts/projects/update_context.rb new file mode 100644 index 00000000000..e5d09b7df7f --- /dev/null +++ b/app/contexts/projects/update_context.rb @@ -0,0 +1,25 @@ +module Projects + class UpdateContext < BaseContext + def execute(role = :default) + namespace_id = params[:project].delete(:namespace_id) + params[:project].delete(:public) unless can?(current_user, :change_public_mode, project) + + allowed_transfer = can?(current_user, :change_namespace, project) || role == :admin + + if allowed_transfer && namespace_id.present? + if namespace_id == Namespace.global_id + if project.namespace.present? + # Transfer to global namespace from anyone + project.transfer(nil) + end + elsif namespace_id.to_i != project.namespace_id + # Transfer to someone namespace + namespace = Namespace.find(namespace_id) + project.transfer(namespace) + end + end + + project.update_attributes(params[:project], as: role) + end + end +end |
