Class: GroupsController

Constant Summary

Constants included from CookiesHelper

CookiesHelper::COOKIE_TYPE_ENCRYPTED, CookiesHelper::COOKIE_TYPE_PERMANENT

Constants inherited from ApplicationController

ApplicationController::DEFAULT_GITLAB_CACHE_CONTROL

Constants included from Gitlab::Logging::CloudflareHelper

Gitlab::Logging::CloudflareHelper::CLOUDFLARE_CUSTOM_HEADERS

Constants included from Gitlab::NoCacheHeaders

Gitlab::NoCacheHeaders::DEFAULT_GITLAB_NO_CACHE_HEADERS

Instance Method Summary collapse

Methods included from Gitlab::Utils::Override

extended, extensions, included, method_added, override, prepended, queue_verification, verify!

Methods included from FiltersEvents

#event_filter

Methods included from SendFileUpload

#content_type_for, #guess_content_type, #send_upload

Methods included from RecordUserLastActivity

#set_user_last_activity

Methods included from CookiesHelper

#set_secure_cookie

Methods included from PreviewMarkdown

#preview_markdown

Methods included from IssuableCollectionsAction

#issues, #issues_calendar, #merge_requests

Methods included from IssuesCalendar

#render_issues_calendar

Methods included from Gitlab::Utils::StrongMemoize

#clear_memoization, #strong_memoize, #strong_memoized?

Methods included from SortingPreference

#default_sort_order, #legacy_sort_cookie_name, #set_sort_order, #sorting_field

Methods included from SortingHelper

#admin_groups_sort_options_hash, #audit_logs_sort_order_hash, #branches_sort_options_hash, #groups_sort_options_hash, #issuable_reverse_sort_order_hash, #issuable_sort_direction_button, #issuable_sort_option_overrides, #issuable_sort_option_title, #label_sort_options_hash, #member_sort_options_hash, #milestone_sort_options_hash, #packages_reverse_sort_order_hash, #packages_sort_direction_button, #packages_sort_option_title, #packages_sort_options_hash, #project_sort_direction_button, #projects_reverse_sort_options_hash, #projects_sort_option_titles, #projects_sort_options_hash, #sort_direction_button, #sort_direction_icon, #sort_options_hash, #sort_title_access_level_asc, #sort_title_access_level_desc, #sort_title_contacted_date, #sort_title_created_date, #sort_title_downvotes, #sort_title_due_date, #sort_title_due_date_later, #sort_title_due_date_soon, #sort_title_expire_date, #sort_title_label_priority, #sort_title_largest_group, #sort_title_largest_repo, #sort_title_last_joined, #sort_title_latest_activity, #sort_title_milestone, #sort_title_milestone_later, #sort_title_milestone_soon, #sort_title_most_stars, #sort_title_name, #sort_title_name_asc, #sort_title_name_desc, #sort_title_oldest_activity, #sort_title_oldest_created, #sort_title_oldest_joined, #sort_title_oldest_last_activity, #sort_title_oldest_signin, #sort_title_oldest_starred, #sort_title_oldest_updated, #sort_title_popularity, #sort_title_priority, #sort_title_recently_created, #sort_title_recently_last_activity, #sort_title_recently_signin, #sort_title_recently_starred, #sort_title_recently_updated, #sort_title_relative_position, #sort_title_size, #sort_title_stars, #sort_title_start_date_later, #sort_title_start_date_soon, #sort_title_upvotes, #sort_value_access_level_asc, #sort_value_access_level_desc, #sort_value_contacted_date, #sort_value_created_date, #sort_value_downvotes, #sort_value_due_date, #sort_value_due_date_later, #sort_value_due_date_soon, #sort_value_expire_date, #sort_value_label_priority, #sort_value_largest_group, #sort_value_largest_repo, #sort_value_last_joined, #sort_value_latest_activity, #sort_value_least_popular, #sort_value_milestone, #sort_value_milestone_later, #sort_value_milestone_soon, #sort_value_most_popular, #sort_value_name, #sort_value_name_desc, #sort_value_oldest_activity, #sort_value_oldest_created, #sort_value_oldest_joined, #sort_value_oldest_last_activity, #sort_value_oldest_signin, #sort_value_oldest_updated, #sort_value_popularity, #sort_value_priority, #sort_value_recently_created, #sort_value_recently_last_activity, #sort_value_recently_signin, #sort_value_recently_updated, #sort_value_relative_position, #sort_value_size, #sort_value_stars_asc, #sort_value_stars_desc, #sort_value_start_date_later, #sort_value_start_date_soon, #sort_value_upvotes, #sortable_item, #starrers_sort_options_hash, #subgroups_sort_options_hash, #tags_sort_options_hash, #users_sort_options_hash

Methods included from API::Helpers::RelatedResourcesHelpers

#expose_path, #expose_url, #issues_available?, #mrs_available?

Methods included from ControllerWithCrossProjectAccessCheck

#authorize_cross_project_page!, #cross_project_check

Methods included from RoutableActions

#ensure_canonical_path, #find_routable!, #not_found_actions, #perform_not_found_actions, #routable_authorized?

Methods inherited from ApplicationController

#not_found, #redirect_back_or_default, #render, #route_not_found

Methods included from Gitlab::Logging::CloudflareHelper

#store_cloudflare_headers!, #valid_cloudflare_header?

Methods included from Impersonation

#current_user

Methods included from InitializesCurrentUserMode

#current_user_mode

Methods included from Gitlab::Experimentation::ControllerConcern

#experiment_enabled?, #experiment_tracking_category_and_group, #frontend_experimentation_tracking_data, #record_experiment_user, #set_experimentation_subject_id_cookie, #track_experiment_event

Methods included from SessionsHelper

#limit_session_time, #unconfirmed_email?

Methods included from SessionlessAuthentication

#authenticate_sessionless_user!, #sessionless_bypass_admin_mode!, #sessionless_sign_in, #sessionless_user?

Methods included from Gitlab::SearchContext::ControllerConcern

#search_context

Methods included from EnforcesTwoFactorAuthentication

#check_two_factor_requirement, #current_user_requires_two_factor?, #skip_two_factor?, #two_factor_authentication_reason, #two_factor_authentication_required?, #two_factor_grace_period, #two_factor_grace_period_expired?, #two_factor_skippable?, #two_factor_verifier

Methods included from WorkhorseHelper

#send_artifacts_entry, #send_git_archive, #send_git_blob, #send_git_diff, #send_git_patch, #set_workhorse_internal_api_content_type, #workhorse_set_content_type!

Methods included from SafeParamsHelper

#safe_params

Methods included from PageLayoutHelper

#blank_container, #container_class, #favicon, #fluid_layout, #header_title, #nav, #page_card_attributes, #page_card_meta_tags, #page_description, #page_image, #page_title, #search_context, #sidebar

Methods included from GitlabRoutingHelper

#approve_access_request_group_member_path, #approve_access_request_project_member_path, #artifacts_action_path, #commit_url, #commits_url, #edit_milestone_path, #edit_pipeline_schedule_path, #environment_delete_path, #environment_metrics_path, #environment_path, #expose_fast_artifacts_path, #fast_browse_project_job_artifacts_path, #fast_download_project_job_artifacts_path, #fast_keep_project_job_artifacts_path, #gitlab_dashboard_snippets_path, #gitlab_raw_snippet_blob_path, #gitlab_raw_snippet_blob_url, #gitlab_raw_snippet_path, #gitlab_raw_snippet_url, #gitlab_snippet_note_path, #gitlab_snippet_note_url, #gitlab_snippet_notes_path, #gitlab_snippet_notes_url, #gitlab_snippet_path, #gitlab_snippet_url, #gitlab_toggle_award_emoji_snippet_note_path, #gitlab_toggle_award_emoji_snippet_note_url, #gitlab_toggle_award_emoji_snippet_path, #gitlab_toggle_award_emoji_snippet_url, #group_member_path, #group_members_url, #issue_path, #issue_url, #leave_group_members_path, #leave_project_members_path, #merge_request_path, #merge_request_url, #pipeline_job_url, #pipeline_path, #pipeline_schedule_path, #pipeline_schedules_path, #pipeline_url, #play_pipeline_schedule_path, #preview_markdown_path, #project_commits_path, #project_member_path, #project_members_url, #project_ref_path, #project_tree_path, #request_access_group_members_path, #request_access_project_members_path, #resend_invite_group_member_path, #resend_invite_project_member_path, #take_ownership_pipeline_schedule_path, #toggle_award_emoji_personal_snippet_path, #toggle_award_emoji_project_project_snippet_path, #toggle_award_emoji_project_project_snippet_url, #toggle_subscription_path, #wiki_page_path, #wiki_path

Methods included from Gitlab::NoCacheHeaders

#no_cache_headers

Methods included from Gitlab::GonHelper

#add_gon_variables, #default_avatar_url, #push_frontend_feature_flag

Methods included from WebpackHelper

#webpack_bundle_tag, #webpack_controller_bundle_tags, #webpack_entrypoint_paths, #webpack_public_host, #webpack_public_path

Methods included from StartupCssHelper

#use_startup_css?

Instance Method Details

#activityObject


103
104
105
106
107
108
109
110
111
112
# File 'app/controllers/groups_controller.rb', line 103

def activity
  respond_to do |format|
    format.html

    format.json do
      load_events
      pager_json("events/_events", @events.count { |event| event.visible_to_user?(current_user) })
    end
  end
end

#createObject


57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/controllers/groups_controller.rb', line 57

def create
  @group = Groups::CreateService.new(current_user, group_params).execute

  if @group.persisted?
    track_experiment_event(:onboarding_issues, 'created_namespace')

    notice = if @group.chat_team.present?
               "Group '#{@group.name}' and its Mattermost team were successfully created."
             else
               "Group '#{@group.name}' was successfully created."
             end

    redirect_to @group, notice: notice
  else
    render action: "new"
  end
end

#destroyObject


131
132
133
134
135
# File 'app/controllers/groups_controller.rb', line 131

def destroy
  Groups::DestroyService.new(@group, current_user).async_execute

  redirect_to root_path, status: :found, alert: "Group '#{@group.name}' was scheduled for deletion."
end

#detailsObject


91
92
93
94
95
96
97
98
99
100
101
# File 'app/controllers/groups_controller.rb', line 91

def details
  respond_to do |format|
    format.html do
      render_details_html
    end

    format.atom do
      render_details_view_atom
    end
  end
end

#download_exportObject


162
163
164
165
166
167
168
169
# File 'app/controllers/groups_controller.rb', line 162

def download_export
  if @group.export_file_exists?
    send_upload(@group.export_file, attachment: @group.export_file.filename)
  else
    redirect_to edit_group_path(@group),
      alert: _('Group export link has expired. Please generate a new export from your group settings.')
  end
end

#editObject


114
115
116
# File 'app/controllers/groups_controller.rb', line 114

def edit
  @badge_api_endpoint = expose_path(api_v4_groups_badges_path(id: @group.id))
end

#exportObject

rubocop: enable CodeReuse/ActiveRecord


152
153
154
155
156
157
158
159
160
# File 'app/controllers/groups_controller.rb', line 152

def export
  export_service = Groups::ImportExport::ExportService.new(group: @group, user: current_user)

  if export_service.async_execute
    redirect_to edit_group_path(@group), notice: _('Group export started. A download link will be sent by email and made available on this page.')
  else
    redirect_to edit_group_path(@group), alert: _('Group export could not be started.')
  end
end

#indexObject


49
50
51
# File 'app/controllers/groups_controller.rb', line 49

def index
  redirect_to(current_user ? dashboard_groups_path : explore_groups_path)
end

#newObject


53
54
55
# File 'app/controllers/groups_controller.rb', line 53

def new
  @group = Group.new(params.permit(:parent_id))
end

#projectsObject


118
119
120
# File 'app/controllers/groups_controller.rb', line 118

def projects
  @projects = @group.projects.with_statistics.page(params[:page])
end

#showObject


75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'app/controllers/groups_controller.rb', line 75

def show
  respond_to do |format|
    format.html do
      if @group.import_state&.in_progress?
        redirect_to group_import_path(@group)
      else
        render_show_html
      end
    end

    format.atom do
      render_details_view_atom
    end
  end
end

#transferObject

rubocop: disable CodeReuse/ActiveRecord


138
139
140
141
142
143
144
145
146
147
148
149
# File 'app/controllers/groups_controller.rb', line 138

def transfer
  parent_group = Group.find_by(id: params[:new_parent_group_id])
  service = ::Groups::TransferService.new(@group, current_user)

  if service.execute(parent_group)
    flash[:notice] = "Group '#{@group.name}' was successfully transferred."
    redirect_to group_path(@group)
  else
    flash[:alert] = service.error.html_safe
    redirect_to edit_group_path(@group)
  end
end

#updateObject


122
123
124
125
126
127
128
129
# File 'app/controllers/groups_controller.rb', line 122

def update
  if Groups::UpdateService.new(@group, current_user, group_params).execute
    redirect_to edit_group_path(@group, anchor: params[:update_section]), notice: "Group '#{@group.name}' was successfully updated."
  else
    @group.reset
    render action: "edit"
  end
end