diff --git a/Gemfile b/Gemfile index c7fcb12..2815a8c 100644 --- a/Gemfile +++ b/Gemfile @@ -40,6 +40,10 @@ gem 'puma' gem 'geocoder' gem 'rails_12factor' +gem 'rails_admin' + +gem 'mongoid_paranoia' + group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' diff --git a/Gemfile.lock b/Gemfile.lock index f23be6f..71cea83 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -68,9 +68,13 @@ GEM diff-lcs (1.2.5) erubis (2.7.0) execjs (2.6.0) + font-awesome-rails (4.6.1.0) + railties (>= 3.2, < 5.1) geocoder (1.3.1) globalid (0.3.6) activesupport (>= 4.1.0) + haml (4.0.7) + tilt i18n (0.7.0) jbuilder (2.4.1) activesupport (>= 3.0.0, < 5.1) @@ -79,7 +83,12 @@ GEM rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) + jquery-ui-rails (5.0.5) + railties (>= 3.2.16) json (1.8.3) + kaminari (0.16.3) + actionpack (>= 3.0.0) + activesupport (>= 3.0.0) loofah (2.0.3) nokogiri (>= 1.5.9) mail (2.6.4) @@ -97,11 +106,18 @@ GEM mongo (~> 2.1) origin (~> 2.1) tzinfo (>= 0.3.37) + mongoid-compatibility (0.3.1) + activesupport + mongoid (>= 2.0) mongoid-rspec (3.0.0) mongoid (~> 5.0) rake rspec (~> 3.3) + mongoid_paranoia (0.2.1) + mongoid (>= 4) + mongoid-compatibility multi_json (1.11.2) + nested_form (0.3.2) nokogiri (1.6.7.2) mini_portile2 (~> 2.0.0.rc2) origin (2.2.0) @@ -113,6 +129,9 @@ GEM pry (>= 0.9.10) puma (3.2.0) rack (1.6.4) + rack-pjax (0.8.0) + nokogiri (~> 1.5) + rack (~> 1.1) rack-test (0.6.3) rack (>= 1.0) rails (4.2.6) @@ -140,6 +159,20 @@ GEM rails_12factor (0.0.3) rails_serve_static_assets rails_stdout_logging + rails_admin (0.8.1) + builder (~> 3.1) + coffee-rails (~> 4.0) + font-awesome-rails (>= 3.0, < 5) + haml (~> 4.0) + jquery-rails (>= 3.0, < 5) + jquery-ui-rails (~> 5.0) + kaminari (~> 0.14) + nested_form (~> 0.3) + rack-pjax (~> 0.7) + rails (~> 4.0) + remotipart (~> 1.0) + safe_yaml (~> 1.0) + sass-rails (>= 4.0, < 6) rails_serve_static_assets (0.0.5) rails_stdout_logging (0.0.5) railties (4.2.6) @@ -150,6 +183,7 @@ GEM rake (11.1.1) rdoc (4.2.2) json (~> 1.4) + remotipart (1.2.1) rspec (3.4.0) rspec-core (~> 3.4.0) rspec-expectations (~> 3.4.0) @@ -171,6 +205,7 @@ GEM rspec-mocks (~> 3.4.0) rspec-support (~> 3.4.0) rspec-support (3.4.1) + safe_yaml (1.0.4) sass (3.4.21) sass-rails (5.0.4) railties (>= 4.0.0, < 5.0) @@ -233,11 +268,13 @@ DEPENDENCIES jquery-rails mongoid (~> 5.0.0) mongoid-rspec (= 3.0.0) + mongoid_paranoia pry-rails puma rails (~> 4.2) rails-i18n rails_12factor + rails_admin rspec-rails (~> 3.0) sass-rails (~> 5.0) sdoc (~> 0.4.0) diff --git a/app/controllers/admin/supporters_controller.rb b/app/controllers/admin/supporters_controller.rb deleted file mode 100644 index 03f4af2..0000000 --- a/app/controllers/admin/supporters_controller.rb +++ /dev/null @@ -1,5 +0,0 @@ -class Admin::SupportersController < Admin::ApplicationController - def index - @supporters = Supporter.desc(:created_at) - end -end diff --git a/app/models/supporter.rb b/app/models/supporter.rb index fb1aaad..34e2351 100644 --- a/app/models/supporter.rb +++ b/app/models/supporter.rb @@ -1,6 +1,7 @@ class Supporter include Mongoid::Document include Mongoid::Timestamps + include Mongoid::Paranoia include Geocoder::Model::Mongoid COUNTER_START = 322 @@ -20,6 +21,9 @@ class Supporter field :coordinates, type: Array field :comments, type: String field :language, type: String + field :email2, type: String + field :email3, type: String + field :duplicate, type: Boolean, default: false validates :first_name, presence: true validates :last_name, presence: true diff --git a/app/views/admin/supporters/index.slim b/app/views/admin/supporters/index.slim deleted file mode 100644 index e7fdd32..0000000 --- a/app/views/admin/supporters/index.slim +++ /dev/null @@ -1,25 +0,0 @@ -h1 #{@supporters.count} Unterstützer -table.table - tr - th Eingeschrieben - th Adresse - th Unterstützung - th width="20%" Kommentar - - @supporters.each do |supporter| - tr - td = distance_of_time_in_words_to_now(supporter.created_at) - td - address - = "#{supporter.first_name} #{supporter.last_name}" - = - br - = supporter.street - br - = "#{supporter.zip} #{supporter.city}" - td - = supporter.support - - if supporter.li_membership - br - | Mitgliedschaft - td = supporter.comments - diff --git a/config/initializers/rails_admin.rb b/config/initializers/rails_admin.rb new file mode 100644 index 0000000..5bfb5ad --- /dev/null +++ b/config/initializers/rails_admin.rb @@ -0,0 +1,58 @@ +RailsAdmin.config do |config| + config.authorize_with do + unless Rails.env.development? + authenticate_or_request_with_http_basic('Administration') do |username, password| + username == 'admin' && password == ENV['ADMIN_PASSWORD'] + end + end + end + + config.model 'Supporter' do + list do + field :duplicate + field :first_name + field :last_name + field :zip + field :city + field :email + field :language + field :support + field :li_membership + end + end + + ### Popular gems integration + + ## == Devise == + # config.authenticate_with do + # warden.authenticate! scope: :user + # end + # config.current_user_method(&:current_user) + + ## == Cancan == + # config.authorize_with :cancan + + ## == Pundit == + # config.authorize_with :pundit + + ## == PaperTrail == + # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0 + + ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration + + config.actions do + dashboard # mandatory + index # mandatory + new + # export + # bulk_delete + show + edit + delete + # show_in_app + + ## With an audit adapter, you can add: + # history_index + # history_show + end +end diff --git a/config/locales/rails_admin.de.yml b/config/locales/rails_admin.de.yml new file mode 100644 index 0000000..6f5f9bf --- /dev/null +++ b/config/locales/rails_admin.de.yml @@ -0,0 +1,150 @@ +de: + admin: + js: + true: True + false: False + is_present: Is present + is_blank: Is blank + date: Date ... + between_and_: Between ... and ... + today: Today + yesterday: Yesterday + this_week: This week + last_week: Last week + number: Number ... + contains: Contains + is_exactly: Is exactly + starts_with: Starts with + ends_with: Ends with + too_many_objects: "Too many objects, use search box above" + no_objects: "No objects found" + loading: "Loading..." + toggle_navigation: Toggle navigation + home: + name: "Home" + pagination: + previous: "« Prev" + next: "Next »" + truncate: "…" + misc: + search: "Search" + filter: "Filter" + refresh: "Refresh" + show_all: "Show all" + add_filter: "Add filter" + bulk_menu_title: "Selected items" + remove: "Remove" + add_new: "Add new" + chosen: "Chosen %{name}" + chose_all: "Choose all" + clear_all: "Clear all" + up: "Up" + down: "Down" + navigation: "Navigation" + navigation_static_label: "Links" + log_out: "Log out" + ago: "ago" + flash: + successful: "%{name} successfully %{action}" + error: "%{name} failed to be %{action}" + noaction: "No actions were taken" + model_not_found: "Model '%{model}' could not be found" + object_not_found: "%{model} with id '%{id}' could not be found" + table_headers: + model_name: "Model name" + last_created: "Last created" + records: "Records" + username: "User" + changes: "Changes" + created_at: "Date/Time" + item: "Item" + message: "Message" + actions: + dashboard: + title: "Site Administration" + menu: "Dashboard" + breadcrumb: "Dashboard" + index: + title: "List of %{model_label_plural}" + menu: "List" + breadcrumb: "%{model_label_plural}" + show: + title: "Details for %{model_label} '%{object_label}'" + menu: "Show" + breadcrumb: "%{object_label}" + show_in_app: + menu: "Show in app" + new: + title: "New %{model_label}" + menu: "Add new" + breadcrumb: "New" + link: "Add a new %{model_label}" + done: "created" + edit: + title: "Edit %{model_label} '%{object_label}'" + menu: "Edit" + breadcrumb: "Edit" + link: "Edit this %{model_label}" + done: "updated" + delete: + title: "Delete %{model_label} '%{object_label}'" + menu: "Delete" + breadcrumb: "Delete" + link: "Delete '%{object_label}'" + done: "deleted" + bulk_delete: + title: "Delete %{model_label_plural}" + menu: "Multiple delete" + breadcrumb: "Multiple delete" + bulk_link: "Delete selected %{model_label_plural}" + export: + title: "Export %{model_label_plural}" + menu: "Export" + breadcrumb: "Export" + link: "Export found %{model_label_plural}" + bulk_link: "Export selected %{model_label_plural}" + done: "exported" + history_index: + title: "History for %{model_label_plural}" + menu: "History" + breadcrumb: "History" + history_show: + title: "History for %{model_label} '%{object_label}'" + menu: "History" + breadcrumb: "History" + form: + cancel: "Cancel" + basic_info: "Basic info" + required: "Required" + optional: "Optional" + one_char: "character" + char_length_up_to: "length up to" + char_length_of: "length of" + save: "Save" + save_and_add_another: "Save and add another" + save_and_edit: "Save and edit" + all_of_the_following_related_items_will_be_deleted: "? The following related items may be deleted or orphaned:" + are_you_sure_you_want_to_delete_the_object: "Are you sure you want to delete this %{model_name}" + confirmation: "Yes, I'm sure" + bulk_delete: "The following objects will be deleted, which may delete or orphan some of their related dependencies:" + new_model: "%{name} (new)" + export: + confirmation: "Export to %{name}" + select: "Select fields to export" + select_all_fields: "Select All Fields" + fields_from: "Fields from %{name}" + fields_from_associated: "Fields from associated %{name}" + display: "Display %{name}: %{type}" + options_for: "Options for %{name}" + empty_value_for_associated_objects: "" + click_to_reverse_selection: 'Click to reverse selection' + csv: + header_for_root_methods: "%{name}" # 'model' is available + header_for_association_methods: "%{name} [%{association}]" + encoding_to: "Encode to" + encoding_to_help: "Choose output encoding. Leave empty to let current input encoding untouched: (%{name})" + skip_header: "No header" + skip_header_help: "Do not output a header (no fields description)" + default_col_sep: "," + col_sep: "Column separator" + col_sep_help: "Leave blank for default ('%{value}')" # value is default_col_sep diff --git a/config/mongoid.yml b/config/mongoid.yml index 755128a..046f454 100644 --- a/config/mongoid.yml +++ b/config/mongoid.yml @@ -1,8 +1,8 @@ development: clients: default: - database: ch420_development - # database: heroku_t242kdp0 + # database: ch420_development + database: heroku_t242kdp0 hosts: - localhost:27017 diff --git a/config/routes.rb b/config/routes.rb index 2f4a426..f325852 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,9 +3,10 @@ Rails.application.routes.draw do namespace :admin do get '/map', to: 'pages#map', as: :map - - resources :supporters, only: :index + # resources :supporters, only: :index end + mount RailsAdmin::Engine => '/admin', as: 'rails_admin' + get '/cities_autocomplete', to: 'cities_autocomplete#index', as: :cities_autocomplete scope '/:locale' do get '/', to: 'supporters#new'