Class: ProjectsController

Inherits:
Projects::ApplicationController show all
Includes:
ExtractsPath
Defined in:
app/controllers/projects_controller.rb

Instance Method Summary collapse

Methods included from ExtractsPath

#assign_ref_vars, #extract_ref, #tree

Methods inherited from ApplicationController

#redirect_back_or_default

Methods included from PageLayoutHelper

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

Methods included from GitlabRoutingHelper

#activity_project_path, #edit_project_path, #edit_project_url, #issue_path, #issue_url, #merge_request_path, #merge_request_url, #milestone_path, #project_builds_path, #project_commits_path, #project_files_path, #project_path, #project_pipelines_path, #project_snippet_url, #project_url, #runner_path, #runners_path, #toggle_subscription_path

Methods included from Gitlab::GonHelper

#add_gon_variables

Methods included from Gitlab::CurrentSettings

#current_application_settings, #fake_application_settings

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Projects::ApplicationController

Instance Method Details

#activityObject


82
83
84
85
86
87
88
89
90
# File 'app/controllers/projects_controller.rb', line 82

def activity
  respond_to do |format|
    format.html
    format.json do
      load_events
      pager_json('events/_events', @events.count)
    end
  end
end

#archiveObject


159
160
161
162
163
164
165
166
167
# File 'app/controllers/projects_controller.rb', line 159

def archive
  return access_denied! unless can?(current_user, :archive_project, @project)

  @project.archive!

  respond_to do |format|
    format.html { redirect_to project_path(@project) }
  end
end

#autocomplete_sourcesObject


141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'app/controllers/projects_controller.rb', line 141

def autocomplete_sources
  note_type = params['type']
  note_id = params['type_id']
  autocomplete = ::Projects::AutocompleteService.new(@project, current_user)
  participants = ::Projects::ParticipantsService.new(@project, current_user).execute(note_type, note_id)

  @suggestions = {
    emojis: AwardEmoji.urls,
    issues: autocomplete.issues,
    mergerequests: autocomplete.merge_requests,
    members: participants
  }

  respond_to do |format|
    format.json { render json: @suggestions }
  end
end

#createObject


27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/controllers/projects_controller.rb', line 27

def create
  @project = ::Projects::CreateService.new(current_user, project_params).execute

  if @project.saved?
    redirect_to(
      project_path(@project),
      notice: "Project '#{@project.name}' was successfully created."
    )
  else
    render 'new'
  end
end

#destroyObject


130
131
132
133
134
135
136
137
138
139
# File 'app/controllers/projects_controller.rb', line 130

def destroy
  return access_denied! unless can?(current_user, :remove_project, @project)

  ::Projects::DestroyService.new(@project, current_user, {}).pending_delete!
  flash[:alert] = "Project '#{@project.name}' will be deleted."

  redirect_to dashboard_projects_path
rescue Projects::DestroyService::DestroyError => ex
  redirect_to edit_project_path(@project), alert: ex.message
end

#editObject


23
24
25
# File 'app/controllers/projects_controller.rb', line 23

def edit
  render 'edit'
end

#housekeepingObject


179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'app/controllers/projects_controller.rb', line 179

def housekeeping
  ::Projects::HousekeepingService.new(@project).execute

  redirect_to(
    project_path(@project),
    notice: "Housekeeping successfully started"
  )
rescue ::Projects::HousekeepingService::LeaseTaken => ex
  redirect_to(
    edit_project_path(@project),
    alert: ex.to_s
  )
end

#indexObject


15
16
17
# File 'app/controllers/projects_controller.rb', line 15

def index
  redirect_to(current_user ? root_path : explore_root_path)
end

#markdown_previewObject


202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'app/controllers/projects_controller.rb', line 202

def markdown_preview
  text = params[:text]

  ext = Gitlab::ReferenceExtractor.new(@project, current_user, current_user)
  ext.analyze(text)

  render json: {
    body:       view_context.markdown(text),
    references: {
      users: ext.users.map(&:username)
    }
  }
end

#newObject


19
20
21
# File 'app/controllers/projects_controller.rb', line 19

def new
  @project = Project.new
end

#remove_forkObject


74
75
76
77
78
79
80
# File 'app/controllers/projects_controller.rb', line 74

def remove_fork
  return access_denied! unless can?(current_user, :remove_fork_project, @project)

  if ::Projects::UnlinkForkService.new(@project, current_user).execute
    flash[:notice] = 'The fork relationship has been removed.'
  end
end

#showObject


92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'app/controllers/projects_controller.rb', line 92

def show
  if @project.import_in_progress?
    redirect_to namespace_project_import_path(@project.namespace, @project)
    return
  end

  if @project.pending_delete?
    flash[:alert] = "Project queued for delete."
  end

  respond_to do |format|
    format.html do
      if current_user
        @membership = @project.team.find_member(current_user.id)

        if @membership
          @notification_setting = current_user.notification_settings_for(@project)
        end
      end

      if @project.repository_exists?
        if @project.empty_repo?
          render 'projects/empty'
        else
          render :show
        end
      else
        render 'projects/no_repo'
      end
    end

    format.atom do
      load_events
      render layout: false
    end
  end
end

#toggle_starObject


193
194
195
196
197
198
199
200
# File 'app/controllers/projects_controller.rb', line 193

def toggle_star
  current_user.toggle_star(@project)
  @project.reload

  render json: {
    star_count: @project.star_count
  }
end

#transferObject


63
64
65
66
67
68
69
70
71
72
# File 'app/controllers/projects_controller.rb', line 63

def transfer
  return access_denied! unless can?(current_user, :change_namespace, @project)

  namespace = Namespace.find_by(id: params[:new_namespace_id])
  ::Projects::TransferService.new(project, current_user).execute(namespace)

  if @project.errors[:new_namespace].present?
    flash[:alert] = @project.errors[:new_namespace].first
  end
end

#unarchiveObject


169
170
171
172
173
174
175
176
177
# File 'app/controllers/projects_controller.rb', line 169

def unarchive
  return access_denied! unless can?(current_user, :archive_project, @project)

  @project.unarchive!

  respond_to do |format|
    format.html { redirect_to project_path(@project) }
  end
end

#updateObject


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'app/controllers/projects_controller.rb', line 40

def update
  status = ::Projects::UpdateService.new(@project, current_user, project_params).execute

  # Refresh the repo in case anything changed
  @repository = project.repository

  respond_to do |format|
    if status
      flash[:notice] = "Project '#{@project.name}' was successfully updated."
      format.html do
        redirect_to(
          edit_project_path(@project),
          notice: "Project '#{@project.name}' was successfully updated."
        )
      end
      format.js
    else
      format.html { render 'edit' }
      format.js
    end
  end
end