aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZog2018-01-24 08:58:28 +0100
committerZog2018-01-24 08:58:28 +0100
commit82279efd9598204d5429e4b3cc98ddfad0e6dd56 (patch)
tree405534ef15157e7456a64a2f2684d5cfae72bf2e
parent5ecadfdead964381304fcf56a2564e2045988ef7 (diff)
downloadchouette-core-82279efd9598204d5429e4b3cc98ddfad0e6dd56.tar.bz2
Add a toolbar for devs to easily manage permissions and features
-rw-r--r--.gitignore1
-rw-r--r--app/assets/stylesheets/components/_toolbar.sass47
-rw-r--r--app/controllers/development_toolbar_controller.rb11
-rw-r--r--app/views/layouts/application.html.slim3
-rw-r--r--app/views/layouts/navigation/_main_nav_top.html.slim4
-rw-r--r--app/views/shared/_development_toolbar.html.slim48
-rw-r--r--config/environments/development.rb7
-rw-r--r--config/routes.rb4
8 files changed, 125 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index ddd5fdda3..acdb5e230 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,3 +49,4 @@ coverage
/bin/spring
spec/fixtures/target_*
+config/development_toolbar.rb
diff --git a/app/assets/stylesheets/components/_toolbar.sass b/app/assets/stylesheets/components/_toolbar.sass
new file mode 100644
index 000000000..47ae2ac0c
--- /dev/null
+++ b/app/assets/stylesheets/components/_toolbar.sass
@@ -0,0 +1,47 @@
+#development-toolbar
+ .inner
+ overflow: scroll
+ padding: 10px
+ max-height: 70vh
+ display: flex
+ flex-direction: row
+ .toggles
+ font-size: 0.7em
+ float: right
+ a:first-child
+ padding-right: 3px
+ margin-right: 3px
+ border-right: 1px solid $lightgrey
+
+ .col
+ flex: 1 1
+ padding-right: 10px
+ padding-left: 10px
+ border-right: 1px solid $lightgrey
+ &:last-child
+ padding-right: 0
+ border-right: none
+
+ ul
+ padding: 0
+ li
+ list-style-type: none
+ label
+ padding-left: 5px
+ font-weight: normal
+ h5
+ font-weight: bold
+ &.permissions
+ ul
+ overflow: hidden
+ li
+ float: left
+ width: 33%
+ label
+ font-size: 0.8em
+ max-width: calc(100% - 15px)
+ text-overflow: ellipsis
+ overflow: hidden
+ padding-top: 3px
+ input
+ vertical-align: top
diff --git a/app/controllers/development_toolbar_controller.rb b/app/controllers/development_toolbar_controller.rb
new file mode 100644
index 000000000..20349f7b8
--- /dev/null
+++ b/app/controllers/development_toolbar_controller.rb
@@ -0,0 +1,11 @@
+class DevelopmentToolbarController < ApplicationController
+ def update_settings
+ return unless Rails.application.config.development_toolbar.present?
+ organisation = current_user.organisation
+ organisation.features = params[:features].keys.select{|k| params[:features][k] == "true"}
+ organisation.save
+ current_user.permissions = params[:permissions].keys.select{|k| params[:permissions][k] == "true"}
+ current_user.save
+ redirect_to request.referrer || "/"
+ end
+end
diff --git a/app/views/layouts/application.html.slim b/app/views/layouts/application.html.slim
index 567e14ef0..34b373295 100644
--- a/app/views/layouts/application.html.slim
+++ b/app/views/layouts/application.html.slim
@@ -21,3 +21,6 @@ html lang=I18n.locale
= yield
#sidebar
= yield :sidebar
+
+ = render 'shared/development_toolbar'
+ = yield :javascript
diff --git a/app/views/layouts/navigation/_main_nav_top.html.slim b/app/views/layouts/navigation/_main_nav_top.html.slim
index 278249e09..f664d5416 100644
--- a/app/views/layouts/navigation/_main_nav_top.html.slim
+++ b/app/views/layouts/navigation/_main_nav_top.html.slim
@@ -14,9 +14,13 @@
span = current_user.name
span.fa.fa-lg.fa-user
+ - if Rails.application.config.development_toolbar
+ = link_to '#', data: { toggle: 'modal', target: '#development-toolbar' }, class: "toolbar-button menu-item" do
+ .fa.fa-cog
= link_to destroy_user_session_path, method: :delete, class: 'menu-item', title: 'Se déconnecter' do
span.fa.fa-lg.fa-sign-out
+
= render 'layouts/navigation/nav_panel_operations'
= render 'layouts/navigation/nav_panel_profile' if user_signed_in?
diff --git a/app/views/shared/_development_toolbar.html.slim b/app/views/shared/_development_toolbar.html.slim
new file mode 100644
index 000000000..b51bb3de6
--- /dev/null
+++ b/app/views/shared/_development_toolbar.html.slim
@@ -0,0 +1,48 @@
+- if Rails.application.config.development_toolbar
+ = modalbox 'development-toolbar' do
+ = form_tag development_toolbar_update_settings_path, authenticity_token: true do
+ .modal-header
+ h3= "Toolbar"
+
+ .inner
+ .col.features
+ h4
+ = "Features"
+ .toggles
+ = link_to 'all', '#', data: {mask: 'features', val: true}
+ = link_to 'none', '#', data: {mask: 'features', val: false}
+ ul
+ - Rails.application.config.development_toolbar.available_features.sort.each do |feature|
+ li
+ = hidden_field_tag "features[#{feature}]", false, id: ""
+ = check_box_tag "features[#{feature}]", true, has_feature?(feature)
+ = label :features, feature
+ .col.permissions
+ h4
+ = "Permissions"
+ .toggles
+ = link_to 'all', '#', data: {mask: 'permissions', val: true}
+ = link_to 'none', '#', data: {mask: 'permissions', val: false}
+ - model = ""
+ - Rails.application.config.development_toolbar.available_permissions.sort.each do |permission|
+ - if permission.split('.').first != model
+ - model = permission.split('.').first
+ </ul>
+ h5
+ = model
+ .toggles
+ = link_to 'all', '#', data: {mask: "permissions[#{model}", val: true}
+ = link_to 'none', '#', data: {mask: "permissions[#{model}", val: false}
+ <ul>
+ li
+ = hidden_field_tag "permissions[#{permission}]", false, id: ""
+ = check_box_tag "permissions[#{permission}]", true, current_user.has_permission?(permission)
+ = label :permissions, permission, permission.split('.').last
+ .modal-footer= submit_tag t("actions.submit"), class: 'btn btn-primary'
+
+ - content_for :javascript do
+ coffee:
+ $('#development-toolbar .toggles a').click (e)->
+ $('#development-toolbar').find("[name^=\"#{e.currentTarget.dataset.mask}\"]").attr "checked", e.currentTarget.dataset.val == 'true'
+ e.preventDefault()
+ false
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 24a4ed6b8..925718e69 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -95,4 +95,11 @@ Rails.application.configure do
config.i18n.available_locales = [:fr, :en]
config.middleware.insert_after(ActionDispatch::Static, Rack::LiveReload) if ENV['LIVERELOAD']
+ config.development_toolbar = false
+ if ENV['TOOLBAR'] && File.exists?("config/development_toolbar.rb")
+ config.development_toolbar = OpenStruct.new
+ config.development_toolbar.tap do |toolbar|
+ eval File.read("config/development_toolbar.rb")
+ end
+ end
end
diff --git a/config/routes.rb b/config/routes.rb
index 0f60733af..432423ac5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -238,6 +238,10 @@ ChouetteIhm::Application.routes.draw do
get '/help/(*slug)' => 'help#show'
+ if Rails.application.config.development_toolbar
+ post "/development_toolbar" => "development_toolbar#update_settings", as: :development_toolbar_update_settings
+ end
+
match '/404', to: 'errors#not_found', via: :all, as: 'not_found'
match '/403', to: 'errors#forbidden', via: :all, as: 'forbidden'
match '/422', to: 'errors#server_error', via: :all, as: 'unprocessable_entity'