Skip to content
Snippets Groups Projects
Commit 6d92cd3e authored by Adam Niedzielski's avatar Adam Niedzielski
Browse files

WIP

parent e299504b
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -36,7 +36,7 @@ class Projects::ProjectMembersController < Projects::ApplicationController
end
 
def create
@project.team.add_users(params[:user_ids].split(','), params[:access_level], current_user)
@project.team.add_users(params[:user_ids].split(','), params[:access_level], current_user, params[:expires_at])
 
redirect_to namespace_project_project_members_path(@project.namespace, @project)
end
Loading
Loading
Loading
Loading
@@ -31,6 +31,7 @@ class Member < ActiveRecord::Base
scope :non_invite, -> { where(invite_token: nil) }
scope :request, -> { where.not(requested_at: nil) }
scope :has_access, -> { where('access_level > 0') }
scope :still_active, -> { where('expires_at IS NULL OR expires_at > ?', Time.current) }
 
scope :guests, -> { where(access_level: GUEST) }
scope :reporters, -> { where(access_level: REPORTER) }
Loading
Loading
@@ -54,7 +55,7 @@ class Member < ActiveRecord::Base
 
class << self
def access_for_user_ids(user_ids)
where(user_id: user_ids).has_access.pluck(:user_id, :access_level).to_h
where(user_id: user_ids).has_access.still_active.pluck(:user_id, :access_level).to_h
end
 
def find_by_invite_token(invite_token)
Loading
Loading
@@ -73,7 +74,7 @@ class Member < ActiveRecord::Base
user
end
 
def add_user(members, user_id, access_level, current_user = nil)
def add_user(members, user_id, access_level, current_user = nil, expires_at = nil)
user = user_for_id(user_id)
 
# `user` can be either a User object or an email to be invited
Loading
Loading
@@ -87,6 +88,7 @@ class Member < ActiveRecord::Base
if can_update_member?(current_user, member) || project_creator?(member, access_level)
member.created_by ||= current_user
member.access_level = access_level
member.expires_at = expires_at
 
member.save
end
Loading
Loading
Loading
Loading
@@ -33,7 +33,7 @@ class ProjectMember < Member
# :master
# )
#
def add_users_into_projects(project_ids, user_ids, access, current_user = nil)
def add_users_into_projects(project_ids, user_ids, access, current_user = nil, expires_at = nil)
access_level = if roles_hash.has_key?(access)
roles_hash[access]
elsif roles_hash.values.include?(access.to_i)
Loading
Loading
@@ -49,7 +49,7 @@ class ProjectMember < Member
project = Project.find(project_id)
 
users.each do |user|
Member.add_user(project.project_members, user, access_level, current_user)
Member.add_user(project.project_members, user, access_level, current_user, expires_at)
end
end
end
Loading
Loading
Loading
Loading
@@ -33,12 +33,13 @@ class ProjectTeam
member
end
 
def add_users(users, access, current_user = nil)
def add_users(users, access, current_user = nil, expires_at = nil)
ProjectMember.add_users_into_projects(
[project.id],
users,
access,
current_user
current_user,
expires_at
)
end
 
Loading
Loading
Loading
Loading
@@ -66,7 +66,7 @@ class User < ActiveRecord::Base
# Projects
has_many :groups_projects, through: :groups, source: :projects
has_many :personal_projects, through: :namespace, source: :projects
has_many :project_members, -> { where(requested_at: nil) }, dependent: :destroy, class_name: 'ProjectMember'
has_many :project_members, -> { where(requested_at: nil).still_active }, dependent: :destroy, class_name: 'ProjectMember'
has_many :projects, through: :project_members
has_many :created_projects, foreign_key: :creator_id, class_name: 'Project'
has_many :users_star_projects, dependent: :destroy
Loading
Loading
Loading
Loading
@@ -14,5 +14,10 @@
Read more about role permissions
%strong= link_to "here", help_page_path("user/permissions"), class: "vlink"
 
.form-group
= f.label :expires_at, "Membership expires at", class: 'control-label'
.col-sm-10
= text_field_tag :expires_at, nil, class: "datepicker form-control", placeholder: "Select expires at"
.form-actions
= f.submit 'Add users to project', class: "btn btn-create"
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class AddExpiresAtToMember < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
# Set this constant to true if this migration requires downtime.
DOWNTIME = false
# When a migration requires downtime you **must** uncomment the following
# constant and define a short and easy to understand explanation as to why the
# migration requires downtime.
# DOWNTIME_REASON = ''
# When using the methods "add_concurrent_index" or "add_column_with_default"
# you must disable the use of transactions as these methods can not run in an
# existing transaction. When using "add_concurrent_index" make sure that this
# method is the _only_ method called in the migration, any other changes
# should go in a separate migration. This ensures that upon failure _only_ the
# index creation fails and can be retried or reverted easily.
#
# To disable transactions uncomment the following line and remove these
# comments:
# disable_ddl_transaction!
def change
add_column :members, :expires_at, :datetime
end
end
Loading
Loading
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
 
ActiveRecord::Schema.define(version: 20160722221922) do
ActiveRecord::Schema.define(version: 20160801163421) do
 
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
Loading
Loading
@@ -581,6 +581,7 @@ ActiveRecord::Schema.define(version: 20160722221922) do
t.string "invite_token"
t.datetime "invite_accepted_at"
t.datetime "requested_at"
t.datetime "expires_at"
end
 
add_index "members", ["access_level"], name: "index_members_on_access_level", using: :btree
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment