kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
3.3 KiB
166 lines
3.3 KiB
module Members
|
|
class RowCell < ::RowCell
|
|
include AvatarHelper
|
|
include UsersHelper
|
|
|
|
property :principal
|
|
|
|
def member
|
|
model
|
|
end
|
|
|
|
def row_css_id
|
|
"member-#{member.id}"
|
|
end
|
|
|
|
def row_css_class
|
|
"member #{principal_class_name}".strip
|
|
end
|
|
|
|
def name
|
|
icon = avatar principal, class: 'avatar-mini'
|
|
|
|
icon + principal_link
|
|
end
|
|
|
|
def mail
|
|
return unless user?
|
|
|
|
link = mail_to(principal.mail)
|
|
|
|
if member.principal.invited?
|
|
i = content_tag "i", "", title: t("text_user_invited"), class: "icon icon-mail1"
|
|
|
|
link + i
|
|
else
|
|
link
|
|
end
|
|
end
|
|
|
|
def roles
|
|
label = h member.roles.sort.collect(&:name).join(', ')
|
|
|
|
if principal&.admin?
|
|
label << tag(:br)
|
|
label << I18n.t(:label_member_all_admin)
|
|
end
|
|
|
|
span = content_tag "span", label, id: "member-#{member.id}-roles"
|
|
|
|
if may_update?
|
|
span + role_form_cell.call
|
|
else
|
|
span
|
|
end
|
|
end
|
|
|
|
def role_form_cell
|
|
Members::RoleFormCell.new(
|
|
member,
|
|
row: self,
|
|
params: controller.params,
|
|
roles: table.available_roles,
|
|
context: { controller: controller }
|
|
)
|
|
end
|
|
|
|
def groups
|
|
if user?
|
|
principal.groups.map(&:name).join(", ")
|
|
end
|
|
end
|
|
|
|
def status
|
|
translate_user_status(model.principal.status)
|
|
end
|
|
|
|
def may_update?
|
|
!principal&.admin && table.authorize_update
|
|
end
|
|
|
|
def may_delete?
|
|
table.authorize_update
|
|
end
|
|
|
|
def button_links
|
|
if may_update? && may_delete?
|
|
[edit_link, delete_link].compact
|
|
elsif may_delete?
|
|
[delete_link].compact
|
|
else
|
|
[]
|
|
end
|
|
end
|
|
|
|
def edit_link
|
|
link_to(
|
|
op_icon('icon icon-edit'),
|
|
'#',
|
|
class: "toggle-membership-button #{toggle_item_class_name}",
|
|
data: { 'toggle-target': ".#{toggle_item_class_name}" },
|
|
title: t(:button_edit)
|
|
)
|
|
end
|
|
|
|
def roles_css_id
|
|
"member-#{member.id}-roles"
|
|
end
|
|
|
|
def toggle_item_class_name
|
|
"member-#{member.id}--edit-toggle-item"
|
|
end
|
|
|
|
def delete_link
|
|
if model.deletable?
|
|
link_to(
|
|
op_icon('icon icon-delete'),
|
|
{ controller: '/members', action: 'destroy', id: model, page: params[:page] },
|
|
method: :delete,
|
|
data: { confirm: delete_link_confirmation, disable_with: I18n.t(:label_loading) },
|
|
title: delete_title
|
|
)
|
|
end
|
|
end
|
|
|
|
def delete_title
|
|
if model.disposable?
|
|
I18n.t(:title_remove_and_delete_user)
|
|
else
|
|
I18n.t(:button_remove)
|
|
end
|
|
end
|
|
|
|
def delete_link_confirmation
|
|
if !User.current.admin? && model.include?(User.current)
|
|
t(:text_own_membership_delete_confirmation)
|
|
end
|
|
end
|
|
|
|
def column_css_class(column)
|
|
if column == :mail
|
|
"email"
|
|
else
|
|
super
|
|
end
|
|
end
|
|
|
|
def principal_link
|
|
case Principal
|
|
when User
|
|
link_to principal.name, user_path(principal)
|
|
when Group
|
|
link_to principal.name, show_group_path(principal)
|
|
else
|
|
content_tag :span, principal.name
|
|
end
|
|
end
|
|
|
|
def principal_class_name
|
|
principal.model_name.singular
|
|
end
|
|
|
|
def user?
|
|
principal.is_a?(User)
|
|
end
|
|
end
|
|
end
|
|
|