setup
This commit is contained in:
97
scripts/seed-mitho.rb
Normal file
97
scripts/seed-mitho.rb
Normal file
@@ -0,0 +1,97 @@
|
||||
# Wendet die mitho-Konfiguration auf das lokale Redmine an.
|
||||
# Aufruf: docker compose exec redmine bundle exec rails runner -e production scripts/seed-mitho.rb
|
||||
|
||||
User.current = User.find_by(login: 'admin')
|
||||
|
||||
# --- Core-Settings ---
|
||||
Setting.app_title = "Servicecenter – mitho®"
|
||||
Setting.ui_theme = "purplemine2"
|
||||
Setting.default_language = "de"
|
||||
Setting.force_default_language_for_anonymous = 1
|
||||
Setting.force_default_language_for_loggedin = 1
|
||||
Setting.default_projects_modules = %w[issue_tracking wiki news documents files boards]
|
||||
|
||||
# --- Additionals-Plugin-Settings ---
|
||||
add = Setting.plugin_additionals || {}
|
||||
add.merge!(
|
||||
'account_login_bottom' => 'h2. Willkommen im mitho® Servicecenter!',
|
||||
'add_go_to_top' => '1',
|
||||
'remove_help' => '1',
|
||||
'global_wiki_sidebar' => "Wiki-Seiten sind nur für *mitho* sichtbar!\n\nh3. Seiten\n\n{{child_pages()}}",
|
||||
'new_ticket_message' => <<~TXT
|
||||
h3. Hinweise zur Erstellung eines neuen Tickets
|
||||
|
||||
Bitte beachten Sie, dass wir ein Support-Ticket nur bearbeiten können,
|
||||
wenn Sie einen entsprechenden Support-Level ausgewählt haben:
|
||||
|
||||
*Support-3* => Eine Reaktion unsererseits erfolgt werktags innerhalb 3h
|
||||
*Support-6* => Eine Reaktion unsererseits erfolgt werktags innerhalb 6h
|
||||
*Support-36* => Eine Reaktion unsererseits erfolgt werktags innerhalb 36h
|
||||
|
||||
Die Preise für die angebotenen Support-Level können Sie dem Auswahl-Menü
|
||||
(Tracker) entnehmen.
|
||||
TXT
|
||||
)
|
||||
Setting.plugin_additionals = add
|
||||
|
||||
# --- Rollen ---
|
||||
def ensure_role(name, source_name, *adjust)
|
||||
role = Role.find_by(name: name)
|
||||
return role if role
|
||||
|
||||
src = Role.find_by(name: source_name) or raise "Quellrolle #{source_name} fehlt"
|
||||
role = Role.new(
|
||||
name: name,
|
||||
assignable: src.assignable,
|
||||
issues_visibility: src.issues_visibility,
|
||||
users_visibility: src.users_visibility,
|
||||
time_entries_visibility: src.time_entries_visibility,
|
||||
permissions: src.permissions.dup
|
||||
)
|
||||
role.save!
|
||||
|
||||
# Workflow je Tracker kopieren (Status- und Feldberechtigungen)
|
||||
Tracker.all.each do |t|
|
||||
WorkflowRule.copy(t, src, t, role)
|
||||
end
|
||||
|
||||
adjust.each { |fn| fn.call(role) }
|
||||
role.save!
|
||||
role
|
||||
end
|
||||
|
||||
grant = ->(perms) { ->(r) { r.add_permission!(*perms) } }
|
||||
revoke = ->(perms) { ->(r) { perms.each { |p| r.remove_permission!(p) }; nil } }
|
||||
|
||||
intern_extra = grant.call(%i[
|
||||
view_member_box
|
||||
view_project_activity
|
||||
])
|
||||
|
||||
pm = ensure_role('PM', 'Manager', intern_extra)
|
||||
devel = ensure_role('Devel', 'Entwickler', intern_extra)
|
||||
devel2 = ensure_role('Devel2', 'Entwickler', intern_extra)
|
||||
backoffice = ensure_role('Backoffice','Manager', intern_extra,
|
||||
revoke.call(%i[manage_repository browse_repository view_changesets commit_access manage_related_issues])
|
||||
)
|
||||
|
||||
projektkunden = ensure_role('Projektkunden', 'Reporter',
|
||||
revoke.call(%i[
|
||||
view_wiki_pages view_wiki_edits export_wiki_pages edit_wiki_pages rename_wiki_pages
|
||||
delete_wiki_pages delete_wiki_pages_attachments view_wiki_page_watchers add_wiki_page_watchers
|
||||
delete_wiki_page_watchers protect_wiki_pages manage_wiki
|
||||
view_messages add_messages edit_messages edit_own_messages delete_messages delete_own_messages manage_boards
|
||||
])
|
||||
)
|
||||
|
||||
# --- Workflow: Kunden dürfen Status nur ab "Neu" ändern ---
|
||||
# Status-Übergänge sind WorkflowTransition. "Nur-lesen" für andere Status =
|
||||
# alle Transitions löschen, deren Ausgangs-Status nicht "Neu" ist.
|
||||
new_status = IssueStatus.find_by(name: 'New') || IssueStatus.find_by(name: 'Neu') || IssueStatus.first
|
||||
removed = WorkflowTransition.where(role_id: projektkunden.id).where.not(old_status_id: new_status.id).delete_all
|
||||
puts "WorkflowTransitions entfernt (Projektkunden, alte Status != #{new_status.name}): #{removed}"
|
||||
|
||||
puts "OK"
|
||||
puts "Rollen: #{[pm, devel, devel2, backoffice, projektkunden].map(&:name).join(', ')}"
|
||||
puts "Theme: #{Setting.ui_theme}"
|
||||
puts "Titel: #{Setting.app_title}"
|
||||
Reference in New Issue
Block a user