# 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}"