Files
redmine-ki/scripts/seed-mitho.rb
2026-05-20 23:11:39 +02:00

98 lines
3.9 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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}"