Note we aren't allowing to delete a tenant because it would delete all its data, so this action is a very dangerous one. We might need to add a warning when creating a tenant, indicating the tenant cannot be destroyed. We can also add an action to delete a tenant which forces the admin to write the name of the tenant before deleting it and with a big warning about the danger of this operation. For now, we're letting administrators of the "main" (default) tenant to create other tenants. However, we're only allowing to manage tenants when the multitenancy configuration option is enabled. This way the interface won't get in the way on single-tenant applications. We've thought about creating a new role to manage tenants or a new URL out of the admin area. We aren't doing so for simplicity purposes and because we want to keep CONSUL working the same way it has for single-tenant installations, but we might change it in the future. There's also the fact that by default we create one user with a known password, and if by default we create a new role and a new user to handle tenants, the chances of people forgetting to change the password of one of these users increases dramatically, particularly if they aren't using multitenancy.
335 lines
9.2 KiB
Ruby
335 lines
9.2 KiB
Ruby
namespace :admin do
|
|
root to: "dashboard#index"
|
|
resources :organizations, only: :index do
|
|
get :search, on: :collection
|
|
member do
|
|
put :verify
|
|
put :reject
|
|
end
|
|
end
|
|
|
|
resources :hidden_users, only: [:index, :show] do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :hidden_budget_investments, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :hidden_debates, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :debates, only: [:index, :show]
|
|
|
|
resources :proposals, only: [:index, :show, :update] do
|
|
member { patch :toggle_selection }
|
|
resources :milestones, controller: "proposal_milestones"
|
|
resources :progress_bars, except: :show, controller: "proposal_progress_bars"
|
|
end
|
|
|
|
resources :hidden_proposals, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :hidden_proposal_notifications, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :budgets, except: [:create, :new] do
|
|
member do
|
|
patch :publish
|
|
put :calculate_winners
|
|
end
|
|
|
|
resources :groups, except: [:index, :show], controller: "budget_groups" do
|
|
resources :headings, except: [:index, :show], controller: "budget_headings"
|
|
end
|
|
|
|
resources :budget_investments, only: [:index, :show, :edit, :update] do
|
|
member { patch :toggle_selection }
|
|
|
|
resources :audits, only: :show, controller: "budget_investment_audits"
|
|
resources :milestones, controller: "budget_investment_milestones"
|
|
resources :progress_bars, except: :show, controller: "budget_investment_progress_bars"
|
|
end
|
|
|
|
resources :budget_phases, only: [:edit, :update] do
|
|
member { patch :toggle_enabled }
|
|
end
|
|
end
|
|
|
|
namespace :budgets_wizard do
|
|
resources :budgets, only: [:create, :new, :edit, :update] do
|
|
resources :groups, only: [:index, :create, :edit, :update, :destroy] do
|
|
resources :headings, only: [:index, :create, :edit, :update, :destroy]
|
|
end
|
|
|
|
resources :phases, as: "budget_phases", only: [:index, :edit, :update] do
|
|
member { patch :toggle_enabled }
|
|
end
|
|
end
|
|
end
|
|
|
|
resources :milestone_statuses, only: [:index, :new, :create, :update, :edit, :destroy]
|
|
|
|
resources :signature_sheets, only: [:index, :new, :create, :show]
|
|
|
|
resources :banners, only: [:index, :new, :create, :edit, :update, :destroy] do
|
|
collection { get :search }
|
|
end
|
|
|
|
resources :hidden_comments, only: :index do
|
|
member do
|
|
put :restore
|
|
put :confirm_hide
|
|
end
|
|
end
|
|
|
|
resources :comments, only: :index
|
|
|
|
resources :tags, only: [:index, :create, :update, :destroy]
|
|
|
|
resources :officials, only: [:index, :edit, :update, :destroy] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resources :settings, only: [:index, :update]
|
|
put :update_map, to: "settings#update_map"
|
|
put :update_content_types, to: "settings#update_content_types"
|
|
|
|
resources :moderators, only: [:index, :create, :destroy] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resources :valuators, only: [:show, :index, :edit, :update, :create, :destroy] do
|
|
get :search, on: :collection
|
|
get :summary, on: :collection
|
|
end
|
|
|
|
resources :valuator_groups
|
|
|
|
resources :managers, only: [:index, :create, :destroy] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
namespace :sdg do
|
|
resources :managers, only: [:index, :create, :destroy]
|
|
end
|
|
|
|
resources :administrators, only: [:index, :create, :destroy, :edit, :update] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resources :users, only: [:index, :show]
|
|
|
|
scope module: :poll do
|
|
resources :polls do
|
|
get :booth_assignments, on: :collection
|
|
|
|
resources :booth_assignments, only: [:index, :show, :create, :destroy] do
|
|
get :search_booths, on: :collection
|
|
get :manage, on: :collection
|
|
end
|
|
|
|
resources :officer_assignments, only: [:index, :create, :destroy] do
|
|
get :search_officers, on: :collection
|
|
get :by_officer, on: :collection
|
|
end
|
|
|
|
resources :recounts, only: :index
|
|
resources :results, only: :index
|
|
end
|
|
|
|
resources :officers, only: [:index, :new, :create, :destroy] do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resources :booths do
|
|
get :available, on: :collection
|
|
|
|
resources :shifts do
|
|
get :search_officers, on: :collection
|
|
end
|
|
end
|
|
|
|
resources :questions, shallow: true do
|
|
resources :answers, except: [:index, :show], controller: "questions/answers", shallow: false
|
|
resources :answers, only: [], controller: "questions/answers" do
|
|
resources :images, controller: "questions/answers/images"
|
|
resources :videos, controller: "questions/answers/videos", shallow: false
|
|
resources :documents, only: [:index, :create], controller: "questions/answers/documents"
|
|
end
|
|
post "/answers/order_answers", to: "questions/answers#order_answers"
|
|
end
|
|
|
|
resource :active_polls, only: [:create, :edit, :update]
|
|
end
|
|
|
|
resources :verifications, controller: :verifications, only: :index do
|
|
get :search, on: :collection
|
|
end
|
|
|
|
resource :activity, controller: :activity, only: :show
|
|
|
|
resources :newsletters do
|
|
member do
|
|
post :deliver
|
|
end
|
|
get :users, on: :collection
|
|
end
|
|
|
|
resources :admin_notifications do
|
|
member do
|
|
post :deliver
|
|
end
|
|
end
|
|
|
|
resources :system_emails, only: [:index] do
|
|
get :view
|
|
get :preview_pending
|
|
put :moderate_pending
|
|
put :send_pending
|
|
end
|
|
|
|
resources :emails_download, only: :index do
|
|
get :generate_csv, on: :collection
|
|
end
|
|
|
|
resource :stats, only: :show do
|
|
get :graph, on: :member
|
|
get :budgets, on: :collection
|
|
get :budget_supporting, on: :member
|
|
get :budget_balloting, on: :member
|
|
get :proposal_notifications, on: :collection
|
|
get :direct_messages, on: :collection
|
|
get :polls, on: :collection
|
|
get :sdg, on: :collection
|
|
end
|
|
|
|
namespace :legislation do
|
|
resources :processes do
|
|
resources :questions
|
|
resources :proposals do
|
|
member { patch :toggle_selection }
|
|
end
|
|
resources :draft_versions
|
|
resources :milestones
|
|
resources :progress_bars, except: :show
|
|
resource :homepage, only: [:edit, :update]
|
|
end
|
|
end
|
|
|
|
namespace :api do
|
|
resource :stats, only: :show
|
|
end
|
|
|
|
resources :geozones, only: [:index, :new, :create, :edit, :update, :destroy]
|
|
|
|
namespace :site_customization do
|
|
resources :pages, except: [:show] do
|
|
resources :cards, except: [:show], as: :widget_cards
|
|
end
|
|
resources :images, only: [:index, :update, :destroy]
|
|
resources :content_blocks, except: [:show]
|
|
delete "/heading_content_blocks/:id", to: "content_blocks#delete_heading_content_block", as: "delete_heading_content_block"
|
|
get "/edit_heading_content_blocks/:id", to: "content_blocks#edit_heading_content_block", as: "edit_heading_content_block"
|
|
put "/update_heading_content_blocks/:id", to: "content_blocks#update_heading_content_block", as: "update_heading_content_block"
|
|
resources :information_texts, only: [:index] do
|
|
post :update, on: :collection
|
|
end
|
|
resources :documents, only: [:index, :new, :create, :destroy]
|
|
end
|
|
|
|
resource :homepage, controller: :homepage, only: [:show]
|
|
|
|
namespace :widget do
|
|
resources :cards
|
|
resources :feeds, only: [:update]
|
|
end
|
|
|
|
namespace :dashboard do
|
|
resources :actions, only: [:index, :new, :create, :edit, :update, :destroy]
|
|
resources :administrator_tasks, only: [:index, :edit, :update]
|
|
end
|
|
|
|
resources :local_census_records
|
|
namespace :local_census_records do
|
|
resources :imports, only: [:new, :create, :show]
|
|
end
|
|
|
|
resource :machine_learning, controller: :machine_learning, only: [:show] do
|
|
post :execute, on: :collection
|
|
delete :cancel, on: :collection
|
|
end
|
|
|
|
resources :tenants, except: [:show, :destroy]
|
|
end
|
|
|
|
resolve "Milestone" do |milestone|
|
|
[*resource_hierarchy_for(milestone.milestoneable), milestone]
|
|
end
|
|
|
|
resolve "ProgressBar" do |progress_bar|
|
|
[*resource_hierarchy_for(progress_bar.progressable), progress_bar]
|
|
end
|
|
|
|
resolve "Audit" do |audit|
|
|
[*resource_hierarchy_for(audit.associated || audit.auditable), audit]
|
|
end
|
|
|
|
resolve "Widget::Card" do |card, options|
|
|
[*resource_hierarchy_for(card.cardable), card]
|
|
end
|
|
|
|
resolve "Budget::Group" do |group, options|
|
|
[group.budget, :group, options.merge(id: group)]
|
|
end
|
|
|
|
resolve "Budget::Heading" do |heading, options|
|
|
[heading.budget, :group, :heading, options.merge(group_id: heading.group, id: heading)]
|
|
end
|
|
|
|
resolve "Budget::Phase" do |phase, options|
|
|
[phase.budget, :phase, options.merge(id: phase)]
|
|
end
|
|
|
|
resolve "Poll::Booth" do |booth, options|
|
|
[:booth, options.merge(id: booth)]
|
|
end
|
|
|
|
resolve "Poll::BoothAssignment" do |assignment, options|
|
|
[assignment.poll, :booth_assignment, options.merge(id: assignment)]
|
|
end
|
|
|
|
resolve "Poll::Shift" do |shift, options|
|
|
[:booth, :shift, options.merge(booth_id: shift.booth, id: shift)]
|
|
end
|
|
|
|
resolve "Poll::Officer" do |officer, options|
|
|
[:officer, options.merge(id: officer)]
|
|
end
|
|
|
|
resolve "Poll::Question::Answer" do |answer, options|
|
|
[:question, :answer, options.merge(question_id: answer.question, id: answer)]
|
|
end
|
|
|
|
resolve "Poll::Question::Answer::Video" do |video, options|
|
|
[:answer, :video, options.merge(answer_id: video.answer, id: video)]
|
|
end
|