diff options
Diffstat (limited to 'app/helpers/milestones_helper.rb')
-rw-r--r-- | app/helpers/milestones_helper.rb | 309 |
1 files changed, 0 insertions, 309 deletions
diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb deleted file mode 100644 index df1ee54c5ac..00000000000 --- a/app/helpers/milestones_helper.rb +++ /dev/null @@ -1,309 +0,0 @@ -# frozen_string_literal: true - -module MilestonesHelper - include EntityDateHelper - include Gitlab::Utils::StrongMemoize - - def milestone_status_string(milestone) - if milestone.closed? - _('Closed') - elsif milestone.expired? - _('Past due') - elsif milestone.upcoming? - _('Upcoming') - else - _('Open') - end - end - - def milestones_filter_path(opts = {}) - if @project - project_milestones_path(@project, opts) - elsif @group - group_milestones_path(@group, opts) - else - dashboard_milestones_path(opts) - end - end - - def milestones_issues_path(opts = {}) - if @project - project_issues_path(@project, opts) - elsif @group - issues_group_path(@group, opts) - else - issues_dashboard_path(opts) - end - end - - def milestones_browse_issuables_path(milestone, state: nil, type:) - opts = { milestone_title: milestone.title, state: state } - - if @project - polymorphic_path([@project.namespace.becomes(Namespace), @project, type], opts) - elsif @group - polymorphic_url([type, @group], opts) - else - polymorphic_url([type, :dashboard], opts) - end - end - - def milestone_issues_by_label_count(milestone, label, state:) - issues = milestone.issues.with_label(label.title) - issues = - case state - when :opened - issues.opened - when :closed - issues.closed - else - raise ArgumentError, _("invalid milestone state `%{state}`") % { state: state } - end - - issues.size - end - - # Returns count of milestones for different states - # Uses explicit hash keys as the 'opened' state URL params differs from the db value - # and we need to add the total - # rubocop: disable CodeReuse/ActiveRecord - def milestone_counts(milestones) - counts = milestones.reorder(nil).group(:state).count - - { - opened: counts['active'] || 0, - closed: counts['closed'] || 0, - all: counts.values.sum || 0 - } - end - # rubocop: enable CodeReuse/ActiveRecord - - # Show 'active' class if provided GET param matches check - # `or_blank` allows the function to return 'active' when given an empty param - # Could be refactored to be simpler but that may make it harder to read - def milestone_class_for_state(param, check, match_blank_param = false) - if match_blank_param - 'active' if param.blank? || param == check - elsif param == check - 'active' - else - check - end - end - - def milestone_progress_tooltip_text(milestone) - has_issues = milestone.total_issues_count > 0 - - if has_issues - [ - _('Progress'), - _("%{percent}%% complete") % { percent: milestone.percent_complete } - ].join('<br />') - else - _('Progress') - end - end - - def milestone_progress_bar(milestone) - options = { - class: 'progress-bar bg-success', - style: "width: #{milestone.percent_complete}%;" - } - - content_tag :div, class: 'progress' do - content_tag :div, nil, options - end - end - - def milestones_filter_dropdown_path - project = @target_project || @project - if project - project_milestones_path(project, :json) - elsif @group - group_milestones_path(@group, :json) - else - dashboard_milestones_path(:json) - end - end - - def milestone_time_for(date, date_type) - title = date_type == :start ? "Start date" : "End date" - - if date - time_ago = time_ago_in_words(date).sub("about ", "") - state = if date.past? - "ago" - else - "remaining" - end - - content = [ - title, - "<br />", - date.to_s(:medium), - "(#{time_ago} #{state})" - ].join(" ") - - content.html_safe - else - title - end - end - - def milestone_issues_tooltip_text(milestone) - total = milestone.total_issues_count - opened = milestone.opened_issues_count - closed = milestone.closed_issues_count - - return _("Issues") if total.zero? - - content = [] - - if opened > 0 - content << n_("1 open issue", "%{issues} open issues", opened) % { issues: opened } - end - - if closed > 0 - content << n_("1 closed issue", "%{issues} closed issues", closed) % { issues: closed } - end - - content.join('<br />').html_safe - end - - def milestone_merge_requests_tooltip_text(milestone) - merge_requests = milestone.merge_requests - - return _("Merge requests") if merge_requests.empty? - - content = [] - - content << n_("1 open merge request", "%{merge_requests} open merge requests", merge_requests.opened.count) % { merge_requests: merge_requests.opened.count } if merge_requests.opened.any? - content << n_("1 closed merge request", "%{merge_requests} closed merge requests", merge_requests.closed.count) % { merge_requests: merge_requests.closed.count } if merge_requests.closed.any? - content << n_("1 merged merge request", "%{merge_requests} merged merge requests", merge_requests.merged.count) % { merge_requests: merge_requests.merged.count } if merge_requests.merged.any? - - content.join('<br />').html_safe - end - - def milestone_releases_tooltip_text(milestone) - count = milestone.releases.count - - return _("Releases") if count.zero? - - n_("%{releases} release", "%{releases} releases", count) % { releases: count } - end - - def recent_releases_with_counts(milestone) - total_count = milestone.releases.size - return [[], 0, 0] if total_count == 0 - - recent_releases = milestone.releases.recent.to_a - more_count = total_count - recent_releases.size - [recent_releases, total_count, more_count] - end - - def milestone_tooltip_due_date(milestone) - if milestone.due_date - "#{milestone.due_date.to_s(:medium)} (#{remaining_days_in_words(milestone.due_date, milestone.start_date)})" - else - _('Milestone') - end - end - - def milestone_date_range(milestone) - if milestone.start_date && milestone.due_date - "#{milestone.start_date.to_s(:medium)}–#{milestone.due_date.to_s(:medium)}" - elsif milestone.due_date - if milestone.due_date.past? - _("expired on %{milestone_due_date}") % { milestone_due_date: milestone.due_date.strftime('%b %-d, %Y') } - else - _("expires on %{milestone_due_date}") % { milestone_due_date: milestone.due_date.strftime('%b %-d, %Y') } - end - elsif milestone.start_date - if milestone.start_date.past? - _("started on %{milestone_start_date}") % { milestone_start_date: milestone.start_date.strftime('%b %-d, %Y') } - else - _("starts on %{milestone_start_date}") % { milestone_start_date: milestone.start_date.strftime('%b %-d, %Y') } - end - end - end - - def milestone_tab_path(milestone, tab) - if milestone.global_milestone? - url_for(action: tab, title: milestone.title, format: :json) - else - url_for(action: tab, format: :json) - end - end - - def update_milestone_path(milestone, params = {}) - if milestone.project_milestone? - project_milestone_path(milestone.project, milestone, milestone: params) - else - group_milestone_route(milestone, params) - end - end - - def group_milestone_route(milestone, params = {}) - params = nil if params.empty? - - if milestone.legacy_group_milestone? - group_milestone_path(@group, milestone.safe_title, title: milestone.title, milestone: params) - else - group_milestone_path(milestone.group, milestone.iid, milestone: params) - end - end - - def group_or_project_milestone_path(milestone) - params = - if milestone.group_milestone? - { milestone: { title: milestone.title } } - else - { title: milestone.title } - end - - milestone_path(milestone.milestone, params) - end - - def edit_milestone_path(milestone) - if milestone.group_milestone? - edit_group_milestone_path(milestone.group, milestone) - elsif milestone.project_milestone? - edit_project_milestone_path(milestone.project, milestone) - end - end - - def can_admin_project_milestones? - strong_memoize(:can_admin_project_milestones) do - can?(current_user, :admin_milestone, @project) - end - end - - def can_admin_group_milestones? - strong_memoize(:can_admin_group_milestones) do - can?(current_user, :admin_milestone, @project.group) - end - end - - def display_issues_count_warning?(milestone) - milestone_visible_issues_count(milestone) > Milestone::DISPLAY_ISSUES_LIMIT - end - - def milestone_issues_count_message(milestone) - total_count = milestone_visible_issues_count(milestone) - limit = Milestone::DISPLAY_ISSUES_LIMIT - link_options = { milestone_title: @milestone.title } - - message = _('Showing %{limit} of %{total_count} issues. ') % { limit: limit, total_count: total_count } - message += link_to(_('View all issues'), milestones_issues_path(link_options)) - - message.html_safe - end - - private - - def milestone_visible_issues_count(milestone) - @milestone_visible_issues_count ||= milestone.issues_visible_to_user(current_user).size - end -end - -MilestonesHelper.prepend_if_ee('EE::MilestonesHelper') |