OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/modules/overviews/app/seeders/demo_data/overview_seeder.rb

106 lines
2.8 KiB

module DemoData
class OverviewSeeder < Seeder
include ::DemoData::References
def seed_data!
puts "*** Seeding Overview"
Array(demo_data_for('projects')).each do |(_key, project_config)|
next unless overview_config(project_config)
puts " -Creating overview for #{project_config[:name]}"
overview = overview_from_config(project_config)
overview_config(project_config)[:widgets].each do |widget_config|
build_widget(overview, widget_config)
end
overview.save!
end
add_permission
end
def applicable?
Grids::Overview.count.zero? && demo_projects_exist?
end
private
def demo_projects_exist?
identifiers = Array(demo_data_for('projects'))
.map { |_key, project| project[:identifier] }
identifiers
.all? { |ident| Project.where(identifier: ident).exists? }
end
def build_widget(overview, widget_config)
create_attachments!(overview, widget_config)
widget_options = widget_config[:options]
text_with_references(overview, widget_options)
query_id_references(overview, widget_options)
overview.widgets.build(widget_config.except(:attachments))
end
def create_attachments!(overview, attributes)
Array(attributes[:attachments]).each do |file_name|
attachment = overview.attachments.build
attachment.author = User.admin.first
attachment.file = File.new attachment_path(file_name)
attachment.save!
end
end
def attachment_path(file_name)
::Overviews::Engine.root.join(
"config/locales/media/#{I18n.locale}/#{file_name}"
)
end
def project_from_config(config)
Project.find_by! identifier: config[:identifier]
end
def overview_from_config(project_config)
params = overview_config(project_config)
.slice(:row_count, :column_count)
.merge(project: project_from_config(project_config))
Grids::Overview
.create(params)
end
def overview_config(project_config)
project_config[:"project-overview"]
end
def text_with_references(overview, widget_options)
if widget_options && widget_options[:text]
widget_options[:text] = with_references(widget_options[:text], overview.project)
widget_options[:text] = link_attachments(widget_options[:text], overview.attachments)
end
end
def query_id_references(overview, widget_options)
if widget_options && widget_options[:queryId]
widget_options[:queryId] = with_references(widget_options[:queryId], overview.project)
end
end
def add_permission
Role
.includes(:role_permissions)
.where(role_permissions: { permission: 'edit_project' })
.each do |role|
role.add_permission!(:manage_overview)
end
end
end
end