1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class Service::System::CheckSetup < Service::Base
- attr_reader :status, :type
- STATES = %w[new automated in_progress done].freeze
- TYPES = %w[auto manual import].freeze
- def self.new?
- setup = new
- setup.execute
- setup.status == 'new'
- end
- def self.new!
- raise SystemSetupError, __('The system setup cannot be started, because there is another one running or it was completed before.') if !new?
- end
- def self.done?
- setup = new
- setup.execute
- setup.status == 'done'
- end
- def self.done!
- raise SystemSetupError, __('This operation cannot be continued, because the system set-up was not completed yet.') if !done?
- end
- def execute
- if Setting.get('import_mode')
- @status = 'in_progress'
- @type = 'import'
- return
- end
- if setup_done!
- @status = 'done'
- return
- end
- if Service::ExecuteLockedBlock.locked?('Zammad::System::Setup')
- @status = 'in_progress'
- @type = AutoWizard.enabled? ? 'auto' : 'manual'
- return
- end
- if AutoWizard.enabled?
- @status = 'automated'
- return
- end
- @status = 'new'
- end
- private
- def setup_done!
- is_done = Setting.get('system_init_done')
- has_admin = User.all.any? { |user| user.role?('Admin') && user.active? && user.id != 1 }
- if !is_done && has_admin
- Rails.logger.warn('The system setup is not marked as done, but at least one admin user is existing. Marking system setup as done.')
- Setting.set('system_init_done', true)
- return true
- end
- if is_done && !has_admin
- Setting.set('system_init_done', false)
- raise SystemSetupError, __('The system setup is marked as done, but no admin user is existing. Please run the system setup again.')
- end
- if is_done && has_admin
- return true
- end
- false
- end
- class SystemSetupError < StandardError; end
- end
|