Module: IssuesHelper
- Includes:
- Issues::IssueTypeHelpers
- Defined in:
- app/helpers/issues_helper.rb
Instance Method Summary collapse
- #award_emoji_issue_api_path(issue) ⇒ Object
- #award_state_class(awardable, awards, current_user) ⇒ Object
- #award_user_list(awards, current_user, limit: 10) ⇒ Object
- #awards_sort(awards) ⇒ Object
- #can_admin_issue? ⇒ Boolean
- #can_create_confidential_merge_request? ⇒ Boolean
- #common_issues_list_data(namespace, current_user) ⇒ Object
- #confidential_icon(issue) ⇒ Object
- #dashboard_issues_list_data(current_user) ⇒ Object
- #group_issues_list_data(group, current_user) ⇒ Object
- #hidden_issue_icon(issue) ⇒ Object
- #issue_css_classes(issue) ⇒ Object
- #issue_header_actions_data(project, issuable, current_user, issuable_sidebar) ⇒ Object
- #issue_hidden?(issue) ⇒ Boolean
- #issue_manual_ordering_class ⇒ Object
- #issue_repositioning_disabled? ⇒ Boolean
- #issues_form_data(project) ⇒ Object
- #link_to_discussions_to_resolve(merge_request, single_discussion = nil) ⇒ Object
- #project_issues_list_data(project, current_user) ⇒ Object
-
#scoped_labels_available?(parent) ⇒ Boolean
Overridden in EE.
- #show_moved_service_desk_issue_warning?(issue) ⇒ Boolean
- #show_new_branch_button? ⇒ Boolean
- #show_new_issue_link?(project) ⇒ Boolean
- #show_timeline_view_toggle?(issue) ⇒ Boolean
Methods included from Issues::IssueTypeHelpers
Instance Method Details
#award_emoji_issue_api_path(issue) ⇒ Object
240 241 242 |
# File 'app/helpers/issues_helper.rb', line 240 def award_emoji_issue_api_path(issue) api_v4_projects_issues_award_emoji_path(id: issue.project.id, issue_iid: issue.iid) end |
#award_state_class(awardable, awards, current_user) ⇒ Object
65 66 67 68 69 70 71 72 73 |
# File 'app/helpers/issues_helper.rb', line 65 def award_state_class(awardable, awards, current_user) if !can?(current_user, :award_emoji, awardable) "disabled" elsif current_user && awards.find { |a| a.user_id == current_user.id } "selected" else "" end end |
#award_user_list(awards, current_user, limit: 10) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'app/helpers/issues_helper.rb', line 52 def award_user_list(awards, current_user, limit: 10) names = awards.map do |award| award.user == current_user ? 'You' : award.user.name end current_user_name = names.delete('You') names = names.insert(0, current_user_name).compact.first(limit) names << "#{awards.size - names.size} more." if awards.size > names.size names.to_sentence end |
#awards_sort(awards) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'app/helpers/issues_helper.rb', line 75 def awards_sort(awards) awards.sort_by do |award, award_emojis| case award when "thumbsup" 0 when "thumbsdown" 1 else 2 end end.to_h end |
#can_admin_issue? ⇒ Boolean
6 7 8 |
# File 'app/helpers/issues_helper.rb', line 6 def can_admin_issue? can?(current_user, :admin_issue, @group || @project) end |
#can_create_confidential_merge_request? ⇒ Boolean
117 118 119 120 |
# File 'app/helpers/issues_helper.rb', line 117 def can_create_confidential_merge_request? @issue.confidential? && !@project.private? && can?(current_user, :create_merge_request_in, @project) end |
#common_issues_list_data(namespace, current_user) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'app/helpers/issues_helper.rb', line 155 def common_issues_list_data(namespace, current_user) { autocomplete_award_emojis_path: autocomplete_award_emojis_path, calendar_path: url_for(safe_params.merge()), empty_state_svg_path: image_path('illustrations/empty-state/empty-issues-md.svg'), full_path: namespace.full_path, initial_sort: current_user&.user_preference&.issues_sort, is_issue_repositioning_disabled: issue_repositioning_disabled?.to_s, is_public_visibility_restricted: Gitlab::CurrentSettings.restricted_visibility_levels&.include?(Gitlab::VisibilityLevel::PUBLIC).to_s, is_signed_in: current_user.present?.to_s, jira_integration_path: help_page_url('integration/jira/issues', anchor: 'view-jira-issues'), rss_path: url_for(safe_params.merge()), sign_in_path: new_user_session_path, has_issue_date_filter_feature: Feature.enabled?(:issue_date_filter, namespace).to_s } end |
#confidential_icon(issue) ⇒ Object
38 39 40 |
# File 'app/helpers/issues_helper.rb', line 38 def confidential_icon(issue) sprite_icon('eye-slash', css_class: 'gl-vertical-align-text-bottom') if issue.confidential? end |
#dashboard_issues_list_data(current_user) ⇒ Object
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
# File 'app/helpers/issues_helper.rb', line 212 def dashboard_issues_list_data(current_user) { autocomplete_award_emojis_path: autocomplete_award_emojis_path, autocomplete_users_path: autocomplete_users_path, calendar_path: url_for(safe_params.merge()), dashboard_labels_path: dashboard_labels_path(format: :json, include_ancestor_groups: true), dashboard_milestones_path: dashboard_milestones_path(format: :json), empty_state_with_filter_svg_path: image_path('illustrations/empty-state/empty-issues-md.svg'), empty_state_without_filter_svg_path: image_path('illustrations/issue-dashboard_results-without-filter.svg'), initial_sort: current_user&.user_preference&.issues_sort, is_public_visibility_restricted: Gitlab::CurrentSettings.restricted_visibility_levels&.include?(Gitlab::VisibilityLevel::PUBLIC).to_s, is_signed_in: current_user.present?.to_s, rss_path: url_for(safe_params.merge()) } end |
#group_issues_list_data(group, current_user) ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 |
# File 'app/helpers/issues_helper.rb', line 200 def group_issues_list_data(group, current_user) common_issues_list_data(group, current_user).merge( can_create_projects: can?(current_user, :create_projects, group).to_s, can_read_crm_contact: can?(current_user, :read_crm_contact, group).to_s, can_read_crm_organization: can?(current_user, :read_crm_organization, group).to_s, has_any_issues: @has_issues.to_s, has_any_projects: @has_projects.to_s, new_project_path: new_project_path(namespace_id: group.id), group_id: group.id ) end |
#hidden_issue_icon(issue) ⇒ Object
46 47 48 49 50 |
# File 'app/helpers/issues_helper.rb', line 46 def hidden_issue_icon(issue) return unless issue_hidden?(issue) hidden_resource_icon(issue) end |
#issue_css_classes(issue) ⇒ Object
10 11 12 13 14 15 |
# File 'app/helpers/issues_helper.rb', line 10 def issue_css_classes(issue) classes = ["issue"] classes << "closed" if issue.closed? classes << "gl-cursor-grab" if @sort == 'relative_position' classes.join(' ') end |
#issue_header_actions_data(project, issuable, current_user, issuable_sidebar) ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'app/helpers/issues_helper.rb', line 129 def issue_header_actions_data(project, issuable, current_user, ) new_issuable_params = { issue: {}, add_related_issue: issuable.iid } if issuable.work_item_type&.incident? new_issuable_params[:issuable_template] = 'incident' new_issuable_params[:issue][:issue_type] = 'incident' end { can_create_issue: show_new_issue_link?(project).to_s, can_create_incident: create_issue_type_allowed?(project, :incident).to_s, can_destroy_issue: can?(current_user, :"destroy_#{issuable.to_ability_name}", issuable).to_s, can_reopen_issue: can?(current_user, :reopen_issue, issuable).to_s, can_report_spam: issuable.submittable_as_spam_by?(current_user).to_s, can_update_issue: can?(current_user, :update_issue, issuable).to_s, is_issue_author: (issuable. == current_user).to_s, issue_path: issuable_path(issuable), new_issue_path: new_project_issue_path(project, new_issuable_params), project_path: project.full_path, report_abuse_path: add_category_abuse_reports_path, reported_user_id: issuable..id, reported_from_url: issue_url(issuable), submit_as_spam_path: mark_as_spam_project_issue_path(project, issuable), issuable_email_address: .nil? ? '' : [:create_note_email] } end |
#issue_hidden?(issue) ⇒ Boolean
42 43 44 |
# File 'app/helpers/issues_helper.rb', line 42 def issue_hidden?(issue) issue.hidden? end |
#issue_manual_ordering_class ⇒ Object
22 23 24 25 26 27 28 |
# File 'app/helpers/issues_helper.rb', line 22 def issue_manual_ordering_class is_sorting_by_relative_position = @sort == 'relative_position' if is_sorting_by_relative_position && !issue_repositioning_disabled? "manual-ordering" end end |
#issue_repositioning_disabled? ⇒ Boolean
30 31 32 33 34 35 36 |
# File 'app/helpers/issues_helper.rb', line 30 def issue_repositioning_disabled? if @group @group.root_ancestor.issue_repositioning_disabled? elsif @project @project.root_namespace.issue_repositioning_disabled? end end |
#issues_form_data(project) ⇒ Object
229 230 231 232 233 |
# File 'app/helpers/issues_helper.rb', line 229 def issues_form_data(project) { new_issue_path: new_project_issue_path(project) } end |
#link_to_discussions_to_resolve(merge_request, single_discussion = nil) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'app/helpers/issues_helper.rb', line 88 def link_to_discussions_to_resolve(merge_request, single_discussion = nil) link_text = [merge_request.to_reference] link_text << "(discussion #{single_discussion.first_note.id})" if single_discussion path = if single_discussion Gitlab::UrlBuilder.build(single_discussion.first_note) else project = merge_request.project project_merge_request_path(project, merge_request) end link_to link_text.join(' '), path end |
#project_issues_list_data(project, current_user) ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'app/helpers/issues_helper.rb', line 173 def project_issues_list_data(project, current_user) common_issues_list_data(project, current_user).merge( can_bulk_update: can?(current_user, :admin_issue, project).to_s, can_edit: can?(current_user, :admin_project, project).to_s, can_import_issues: can?(current_user, :import_issues, @project).to_s, can_read_crm_contact: can?(current_user, :read_crm_contact, project.group).to_s, can_read_crm_organization: can?(current_user, :read_crm_organization, project.group).to_s, email: current_user&.notification_email_or_default, emails_help_page_path: help_page_path('development/emails', anchor: 'email-namespace'), export_csv_path: export_csv_project_issues_path(project), has_any_issues: project_issues(project).exists?.to_s, import_csv_issues_path: import_csv_namespace_project_issues_path, initial_email: project.new_issuable_address(current_user, 'issue'), is_project: true.to_s, markdown_help_path: help_page_path('user/markdown'), max_attachment_size: number_to_human_size(Gitlab::CurrentSettings..megabytes), new_issue_path: new_project_issue_path(project), project_import_jira_path: project_import_jira_path(project), quick_actions_help_path: help_page_path('user/project/quick_actions'), releases_path: project_releases_path(project, format: :json), reset_path: new_issuable_address_project_path(project, issuable_type: 'issue'), show_new_issue_link: show_new_issue_link?(project).to_s, report_abuse_path: add_category_abuse_reports_path, register_path: new_user_registration_path(redirect_to_referer: 'yes') ) end |
#scoped_labels_available?(parent) ⇒ Boolean
Overridden in EE
236 237 238 |
# File 'app/helpers/issues_helper.rb', line 236 def scoped_labels_available?(parent) false end |
#show_moved_service_desk_issue_warning?(issue) ⇒ Boolean
122 123 124 125 126 127 |
# File 'app/helpers/issues_helper.rb', line 122 def show_moved_service_desk_issue_warning?(issue) return false unless issue.moved_from return false unless issue.from_service_desk? issue.moved_from.project.service_desk_enabled? && !issue.project.service_desk_enabled? end |
#show_new_branch_button? ⇒ Boolean
113 114 115 |
# File 'app/helpers/issues_helper.rb', line 113 def can_create_confidential_merge_request? || !@issue.confidential? end |
#show_new_issue_link?(project) ⇒ Boolean
102 103 104 105 106 107 108 109 110 111 |
# File 'app/helpers/issues_helper.rb', line 102 def show_new_issue_link?(project) return false unless project return false if project.archived? # We want to show the link to users that are not signed in, that way they # get directed to the sign-in/sign-up flow and afterwards to the new issue page. return true unless current_user can?(current_user, :create_issue, project) end |
#show_timeline_view_toggle?(issue) ⇒ Boolean
17 18 19 20 |
# File 'app/helpers/issues_helper.rb', line 17 def show_timeline_view_toggle?(issue) # Overridden in EE false end |