Class: DestroyProjectJob

Inherits:
ApplicationJob show all
Includes:
Redmine::I18n
Defined in:
app/jobs/destroy_project_job.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Redmine::I18n

#abbr_day_name, #current_language, #day_letter, #day_name, #find_language, #format_date, #format_hours, #format_time, included, #l, #l_hours, #l_hours_short, #l_or_humanize, #languages_options, #ll, #lu, #month_name, #set_language_if_valid, #valid_languages

Class Method Details

.schedule(project, user: User.current) ⇒ Object



6
7
8
9
10
# File 'app/jobs/destroy_project_job.rb', line 6

def self.schedule(project, user: User.current)
  # make the project (and any children) disappear immediately
  project.self_and_descendants.update_all status: Project::STATUS_SCHEDULED_FOR_DELETION
  perform_later project.id, user.id, user.remote_ip
end

Instance Method Details

#perform(project_id, user_id, remote_ip) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'app/jobs/destroy_project_job.rb', line 12

def perform(project_id, user_id, remote_ip)
  user_current_was = User.current

  unless @user = User.active.find_by_id(user_id)
    info "User check failed: User #{user_id} triggering project destroy does not exist anymore or isn't active."
    return
  end
  @user.remote_ip = remote_ip
  User.current = @user
  set_language_if_valid @user.language || Setting.default_language

  unless @project = Project.find_by_id(project_id)
    info "Project check failed: Project has already been deleted."
    return
  end

  unless @project.deletable?
    info "Project check failed: User #{user_id} lacks permissions."
    return
  end

  message = if @project.descendants.any?
              :mail_destroy_project_with_subprojects_successful
            else
              :mail_destroy_project_successful
            end
  delete_project ? success(message) : failure
ensure
  User.current = user_current_was
  info "End destroy project"
end