Merge pull request #8175 from aignatov-bio/ai-sci-11487-add-team-owner-self-assign-to-forms

Add team owner self assign to forms [SCI-11487]
This commit is contained in:
aignatov-bio 2025-01-22 12:44:07 +01:00 committed by GitHub
commit af049ea782
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 25 additions and 4 deletions

View file

@ -1,7 +1,12 @@
<template>
<a :href="params.data.urls.show" :title="params.data.name">
<a v-if="params.data.urls.show"
:href="params.data.urls.show"
:title="params.data.name">
{{ params.data.name }}
</a>
<span v-else class="text-sn-grey" :title="params.data.name">
{{ params.data.name }}
</span>
</template>
<script>

View file

@ -36,6 +36,20 @@ class Form < ApplicationRecord
enum :visibility, { hidden: 0, visible: 1 }
def self.viewable_by_user(user, teams)
# Team owners see all forms in the team
owner_role = UserRole.find_predefined_owner_role
forms = Form.where(team: teams)
viewable_as_team_owner = forms.joins("INNER JOIN user_assignments team_user_assignments " \
"ON team_user_assignments.assignable_type = 'Team' " \
"AND team_user_assignments.assignable_id = forms.team_id")
.where(team_user_assignments: { user_id: user, user_role_id: owner_role })
.select(:id)
viewable_as_assigned = forms.with_granted_permissions(user, FormPermissions::READ).select(:id)
where('forms.id IN ((?) UNION (?))', viewable_as_team_owner, viewable_as_assigned)
end
def archived_branch?
archived?
end

View file

@ -57,10 +57,11 @@ module Lists
def urls
urls_list = {
show: form_path(object),
show_access: access_permissions_form_path(object)
}
urls_list[:show] = form_path(object) if can_read_form?(object)
if can_manage_form_users?(object)
urls_list[:update_access] = access_permissions_form_path(object)
urls_list[:new_access] = new_access_permissions_form_path(id: object.id)

View file

@ -10,8 +10,9 @@ module Lists
def fetch_records
@records =
Form.includes(:team, user_assignments: %i(user user_role))
.joins(:user_assignments)
.left_outer_joins(:user_assignments)
.left_outer_joins(:form_responses)
.viewable_by_user(@user, @team)
.joins(
'LEFT OUTER JOIN users AS publishers ' \
'ON forms.published_by_id = publishers.id'
@ -20,7 +21,7 @@ module Lists
'publishers.full_name AS published_by_user',
'COUNT(DISTINCT form_responses.id) AS used_in_protocols_count',
'COUNT(DISTINCT user_assignments.id) AS user_assignment_count'
).where(team: @team).readable_by_user(@user).group('forms.id', 'publishers.full_name')
).where(team: @team).group('forms.id', 'publishers.full_name')
view_mode = @params[:view_mode] || 'active'