thecore 1.3.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +37 -0
- data/app/controllers/application_controller.rb +2 -0
- data/app/controllers/pages_controller.rb +37 -0
- data/app/jobs/application_job.rb +2 -0
- data/app/models/ability.rb +48 -0
- data/app/models/user.rb +158 -0
- data/app/uploaders/attachment_uploader.rb +27 -0
- data/app/uploaders/image_uploader.rb +27 -0
- data/config/initializers/rails_admin.rb +42 -0
- data/config/initializers/rails_application_config.rb +28 -0
- data/config/initializers/thecore_concern.rb +113 -0
- data/config/locales/en.activerecord.yml +6 -0
- data/config/locales/en.contact_mailer.custom.yml +5 -0
- data/config/locales/en.devise.custom.yml +15 -0
- data/config/locales/en.rails_admin.yml +34 -0
- data/config/locales/en.rollincode.yml +5 -0
- data/config/locales/en.simple_form.yml +31 -0
- data/config/locales/en.yml +31 -0
- data/config/locales/it.activerecord.yml +20 -0
- data/config/locales/it.contact_mailer.custom.yml +5 -0
- data/config/locales/it.devise.custom.yml +15 -0
- data/config/locales/it.rails_admin.yml +34 -0
- data/config/locales/it.rollincode.yml +5 -0
- data/config/locales/it.simple_form.yml +31 -0
- data/config/locales/it.yml +38 -0
- data/config/routes.rb +14 -0
- data/db/migrate/20131103142222_create_friendly_id_slugs.rb +15 -0
- data/db/migrate/20141010133701_devise_create_users.rb +54 -0
- data/db/migrate/20150806091039_add_authentication_token_to_users.rb +6 -0
- data/db/migrate/20150825101810_add_roles_mask_to_users.rb +5 -0
- data/db/migrate/20151201145832_add_external_to_user.rb +5 -0
- data/db/migrate/20160331101901_add_code_to_user.rb +6 -0
- data/db/migrate/20160331101902_add_admin_user.rb +162 -0
- data/db/migrate/20161029154134_remove_friendly_id_slugs.rb +5 -0
- data/db/seeds.rb +1 -0
- data/lib/abilities.rb +20 -0
- data/lib/active_record_extension.rb +145 -0
- data/lib/activerecord_paperclip_extension.rb +21 -0
- data/lib/application_configs.rb +26 -0
- data/lib/application_record_loader.rb +3 -0
- data/lib/backtrace_silencers.rb +7 -0
- data/lib/constants.rb +0 -0
- data/lib/date_format.rb +27 -0
- data/lib/devise_initializer.rb +275 -0
- data/lib/generators/thecore/add_git/USAGE +8 -0
- data/lib/generators/thecore/add_git/add_git_generator.rb +269 -0
- data/lib/generators/thecore/thecorize_app/USAGE +8 -0
- data/lib/generators/thecore/thecorize_app/thecorize_app_generator.rb +37 -0
- data/lib/generators/thecore/thecorize_models/USAGE +9 -0
- data/lib/generators/thecore/thecorize_models/thecorize_models_generator.rb +255 -0
- data/lib/generators/thecore/thecorize_plugin/USAGE +9 -0
- data/lib/generators/thecore/thecorize_plugin/thecorize_plugin_generator.rb +166 -0
- data/lib/inflections.rb +16 -0
- data/lib/integer_extensions.rb +26 -0
- data/lib/kaminari_config.rb +12 -0
- data/lib/mime_types.rb +5 -0
- data/lib/postgresql_drop_replacement.rb +11 -0
- data/lib/string_extensions.rb +14 -0
- data/lib/tasks/thecore_tasks.rake +4 -0
- data/lib/thecore/engine.rb +35 -0
- data/lib/thecore/version.rb +3 -0
- data/lib/thecore.rb +63 -0
- data/lib/thecore_actions.rb +2 -0
- data/lib/thecore_base_roles.rb +2 -0
- data/lib/thecore_rails_admin_bulk_delete_concern.rb +19 -0
- data/lib/thecore_rails_admin_export_concern.rb +19 -0
- data/lib/thecore_rails_admin_main_controller_concern.rb +11 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config/application.rb +25 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/log/development.log +6 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/fixtures/users.yml +11 -0
- data/test/integration/navigation_test.rb +8 -0
- data/test/lib/generators/make_associations_complete_generator_test.rb +14 -0
- data/test/lib/generators/thecoreize_rails_plugin_generator_test.rb +14 -0
- data/test/lib/generators/thecorize_app_generator_test.rb +14 -0
- data/test/models/user_test.rb +7 -0
- data/test/test_helper.rb +20 -0
- data/test/thecore_test.rb +7 -0
- metadata +494 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2cd52dac896d7a464ed6311a27c66f298dac2fac
|
4
|
+
data.tar.gz: 749149993625e1370d43c359469b4dfbfad1ab68
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8ba5ab09e8614d9f6d075e60bdf8d72ecadadb06e70b44819a8a515967ca1eb5131abe38b518645d1e13193e9b7488255425715848cd2cdea155f7782f3ca5d0
|
7
|
+
data.tar.gz: d678cca087627de83e0ac9792b49e69995be31fce2be23663ef109ac51f4184a9fa4b55afbc15b7f66be6d22bfb90588e5c244cbd6697ec3ba6762982d4f80de
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2016 Gabriele Tassoni
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Thecore'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
load 'rails/tasks/statistics.rake'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
Bundler::GemHelper.install_tasks
|
26
|
+
|
27
|
+
require 'rake/testtask'
|
28
|
+
|
29
|
+
Rake::TestTask.new(:test) do |t|
|
30
|
+
t.libs << 'lib'
|
31
|
+
t.libs << 'test'
|
32
|
+
t.pattern = 'test/**/*_test.rb'
|
33
|
+
t.verbose = false
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
task default: :test
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class PagesController < ApplicationController
|
2
|
+
before_action :authenticate_user!, only: [
|
3
|
+
:inside, :contact
|
4
|
+
]
|
5
|
+
#authorize_resource :class => false
|
6
|
+
|
7
|
+
def home
|
8
|
+
end
|
9
|
+
|
10
|
+
def inside
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def email
|
15
|
+
@name = params[:name]
|
16
|
+
@email = params[:email]
|
17
|
+
@message = params[:message]
|
18
|
+
|
19
|
+
if @name.blank?
|
20
|
+
flash[:alert] = "Please enter your name before sending your message. Thank you."
|
21
|
+
render :contact
|
22
|
+
elsif @email.blank? || @email.scan(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i).size < 1
|
23
|
+
flash[:alert] = "You must provide a valid email address before sending your message. Thank you."
|
24
|
+
render :contact
|
25
|
+
elsif @message.blank? || @message.length < 10
|
26
|
+
flash[:alert] = "Your message is empty. Requires at least 10 characters. Nothing to send."
|
27
|
+
render :contact
|
28
|
+
elsif @message.scan(/<a href=/).size > 0 || @message.scan(/\[url=/).size > 0 || @message.scan(/\[link=/).size > 0 || @message.scan(/http:\/\//).size > 0
|
29
|
+
flash[:alert] = "You can't send links. Thank you for your understanding."
|
30
|
+
render :contact
|
31
|
+
else
|
32
|
+
ContactMailer.contact_message(@name,@email,@message).deliver_now
|
33
|
+
redirect_to root_path, notice: "Your message was sent. Thank you."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class Ability
|
2
|
+
include CanCan::Ability
|
3
|
+
|
4
|
+
include TheCoreAbilities
|
5
|
+
|
6
|
+
def initialize(user)
|
7
|
+
# Define abilities for the passed in user here. For example:
|
8
|
+
#
|
9
|
+
# user ||= User.new # guest user (not logged in)
|
10
|
+
# if user.admin?
|
11
|
+
# can :manage, :all
|
12
|
+
# else
|
13
|
+
# can :read, :all
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# The first argument to `can` is the action you are giving the user
|
17
|
+
# permission to do.
|
18
|
+
# If you pass :manage it will apply to every action. Other common actions
|
19
|
+
# here are :read, :create, :update and :destroy.
|
20
|
+
#
|
21
|
+
# The second argument is the resource the user can perform the action on.
|
22
|
+
# If you pass :all it will apply to every resource. Otherwise pass a Ruby
|
23
|
+
# class of the resource.
|
24
|
+
#
|
25
|
+
# The third argument is an optional hash of conditions to further filter the
|
26
|
+
# objects.
|
27
|
+
# For example, here the user can only update published articles.
|
28
|
+
#
|
29
|
+
# can :update, Article, :published => true
|
30
|
+
#
|
31
|
+
# See the wiki for details:
|
32
|
+
# https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
|
33
|
+
|
34
|
+
# TODO: Spiegare meglio Taris
|
35
|
+
# Modo per poter caricare diversi file ability presenti in diversi engine
|
36
|
+
# bisogna creare nella cartella config/initializers dell'engine un file che
|
37
|
+
# faccia il module_eval di TheCore::Abilities, aggiungendo un metodo
|
38
|
+
# che accetta user come parametro e con dentro la definizione delle ability
|
39
|
+
# include TheCore::Abilities
|
40
|
+
TheCoreAbilities.instance_methods(false).each do |a|
|
41
|
+
# method(a).call(user)
|
42
|
+
# eval("#{a} #{user}")
|
43
|
+
Rails.logger.debug "LOADING ABILITIES FROM: #{a}"
|
44
|
+
send(a, user)
|
45
|
+
end
|
46
|
+
# core_abilities user
|
47
|
+
end
|
48
|
+
end
|
data/app/models/user.rb
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
class User < ApplicationRecord
|
2
|
+
include RailsAdmin
|
3
|
+
# # include default devise modules. Others available are:
|
4
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
5
|
+
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable #, :confirmable
|
6
|
+
|
7
|
+
before_create :generate_authentication_token
|
8
|
+
|
9
|
+
paginates_per 50
|
10
|
+
|
11
|
+
# Validations
|
12
|
+
# :username
|
13
|
+
validates :username, uniqueness: { case_sensitive: false }
|
14
|
+
validates_format_of :username, with: /\A[a-zA-Z0-9]*\z/, on: :create, message: "can only contain letters and digits"
|
15
|
+
validates :username, length: { in: 4..15 }
|
16
|
+
# :email
|
17
|
+
validates :email, uniqueness: { case_sensitive: false }
|
18
|
+
validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
|
19
|
+
|
20
|
+
validates :username, presence: true
|
21
|
+
validates :email, presence: true
|
22
|
+
|
23
|
+
validates :password, presence: true, on: :create
|
24
|
+
validates :password_confirmation, presence: true, on: :create
|
25
|
+
|
26
|
+
def self.paged(page_number)
|
27
|
+
order(admin: :desc, username: :asc).page page_number
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.search_and_order(search, page_number)
|
31
|
+
if search
|
32
|
+
where("username LIKE ?", "%#{search.downcase}%").order(
|
33
|
+
admin: :desc, username: :asc
|
34
|
+
).page page_number
|
35
|
+
else
|
36
|
+
order(admin: :desc, username: :asc).page page_number
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.last_signups(count)
|
41
|
+
order(created_at: :desc).limit(count).select("id","username","slug","created_at")
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.last_signins(count)
|
45
|
+
order(last_sign_in_at:
|
46
|
+
:desc).limit(count).select("id","username","slug","last_sign_in_at")
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.users_count
|
50
|
+
where("admin = ? AND locked = ?",false,false).count
|
51
|
+
end
|
52
|
+
|
53
|
+
def title
|
54
|
+
username
|
55
|
+
end
|
56
|
+
|
57
|
+
serialize :roles, Array
|
58
|
+
def roles_enum
|
59
|
+
# Do not EDIT below this line
|
60
|
+
ROLES.each_with_index.map {|a,i| [I18n.t("roles.#{a.to_sym}"), (i+1).to_s]}
|
61
|
+
end
|
62
|
+
def has_role? role
|
63
|
+
# example called from cancan's app/models/ability.rb
|
64
|
+
# if user.has_role? :admin
|
65
|
+
|
66
|
+
# for roles array stored in db... take each value, see if it matches the second column in the roles_enum array, if so, retu the 1st col of the enum as a uprcase,space_to_underscore,symbol .
|
67
|
+
chosen_roles = self.roles.map { |r| r.blank? ? nil : ROLES[r.to_i - 1] }
|
68
|
+
chosen_roles.compact.include? role
|
69
|
+
end
|
70
|
+
|
71
|
+
RailsAdmin.config do |config|
|
72
|
+
config.model self.name.underscore.capitalize.constantize do
|
73
|
+
# rails_admin do
|
74
|
+
navigation_label I18n.t("admin.settings.label")
|
75
|
+
navigation_icon 'fa fa-user-circle-o'
|
76
|
+
desc I18n.t("activerecord.descriptions.user")
|
77
|
+
|
78
|
+
weight 1000
|
79
|
+
# Field present Everywhere
|
80
|
+
field :email do
|
81
|
+
required true
|
82
|
+
end
|
83
|
+
field :username do
|
84
|
+
required true
|
85
|
+
end
|
86
|
+
field :code
|
87
|
+
field :admin do
|
88
|
+
visible do
|
89
|
+
bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
|
90
|
+
end
|
91
|
+
end
|
92
|
+
field :locked do
|
93
|
+
visible do
|
94
|
+
bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
|
95
|
+
end
|
96
|
+
end
|
97
|
+
field :third_party do
|
98
|
+
visible do
|
99
|
+
bindings[:view].current_user.admin? && bindings[:view].current_user.id != bindings[:object].id
|
100
|
+
end
|
101
|
+
end
|
102
|
+
field :roles, :enum do
|
103
|
+
visible !ROLES.blank?
|
104
|
+
pretty_value do # used in list view columns and show views, defaults to formatted_value for non-association fields
|
105
|
+
value.map { |v| bindings[:object].roles_enum.rassoc(v)[0] rescue nil }.compact.join ", "
|
106
|
+
end
|
107
|
+
export_value do
|
108
|
+
value.map { |v| bindings[:object].roles_enum.rassoc(v)[0] rescue nil }.compact.join ", " # used in exports, where no html/data is allowed
|
109
|
+
end
|
110
|
+
queryable false
|
111
|
+
end
|
112
|
+
# include UserRailsAdminConcern
|
113
|
+
|
114
|
+
# Fields only in lists and forms
|
115
|
+
list do
|
116
|
+
field :created_at
|
117
|
+
configure :email do
|
118
|
+
visible false
|
119
|
+
end
|
120
|
+
|
121
|
+
# include UserRailsAdminListConcern
|
122
|
+
end
|
123
|
+
|
124
|
+
create do
|
125
|
+
field :password do
|
126
|
+
required true
|
127
|
+
end
|
128
|
+
field :password_confirmation do
|
129
|
+
required true
|
130
|
+
end
|
131
|
+
|
132
|
+
# include UserRailsAdminCreateConcern
|
133
|
+
end
|
134
|
+
|
135
|
+
edit do
|
136
|
+
field :password do
|
137
|
+
required false
|
138
|
+
end
|
139
|
+
field :password_confirmation do
|
140
|
+
required false
|
141
|
+
end
|
142
|
+
|
143
|
+
# include UserRailsAdminEditConcern
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
#has_paper_trail
|
149
|
+
|
150
|
+
private
|
151
|
+
|
152
|
+
def generate_authentication_token
|
153
|
+
loop do
|
154
|
+
self.authentication_token = SecureRandom.base64(64)
|
155
|
+
break unless User.find_by(authentication_token: authentication_token)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# class ImageUploader < CarrierWave::Uploader::Base
|
2
|
+
# include CarrierWave::MiniMagick
|
3
|
+
#
|
4
|
+
# storage :file
|
5
|
+
#
|
6
|
+
# def store_dir
|
7
|
+
# "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# #version :example, if: :is_example? do
|
11
|
+
# #process :resize_to_fill => [200, 150]
|
12
|
+
# #end
|
13
|
+
#
|
14
|
+
# def extension_white_list
|
15
|
+
# %w(jpg jpeg gif png)
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# def content_type_whitelist
|
19
|
+
# /image\//
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# protected
|
23
|
+
# #def is_example?(picture)
|
24
|
+
# # model.kind_of?(ExampleModel)
|
25
|
+
# #end
|
26
|
+
# end
|
27
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# class ImageUploader < CarrierWave::Uploader::Base
|
2
|
+
# include CarrierWave::MiniMagick
|
3
|
+
#
|
4
|
+
# storage :file
|
5
|
+
#
|
6
|
+
# def store_dir
|
7
|
+
# "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# #version :example, if: :is_example? do
|
11
|
+
# #process :resize_to_fill => [200, 150]
|
12
|
+
# #end
|
13
|
+
#
|
14
|
+
# def extension_white_list
|
15
|
+
# %w(jpg jpeg gif png)
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# def content_type_whitelist
|
19
|
+
# /image\//
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# protected
|
23
|
+
# #def is_example?(picture)
|
24
|
+
# # model.kind_of?(ExampleModel)
|
25
|
+
# #end
|
26
|
+
# end
|
27
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rails_admin'
|
2
|
+
|
3
|
+
require "thecore_actions"
|
4
|
+
|
5
|
+
include TheCoreActions
|
6
|
+
|
7
|
+
RailsAdmin.config do |config|
|
8
|
+
# config.main_app_name = Proc.new { |controller|
|
9
|
+
# [(Settings.app_name rescue (ENV["APP_NAME"] || "TheCore App")), "#{controller.params[:action].try(:titleize)} (#{Time.zone.now.to_s(:time)})"]
|
10
|
+
# }
|
11
|
+
### Popular gems integration
|
12
|
+
|
13
|
+
## == Devise ==
|
14
|
+
config.authenticate_with do
|
15
|
+
warden.authenticate! scope: :user
|
16
|
+
end
|
17
|
+
config.current_user_method(&:current_user)
|
18
|
+
|
19
|
+
## == Cancan ==
|
20
|
+
config.authorize_with :cancan
|
21
|
+
|
22
|
+
## == PaperTrail ==
|
23
|
+
# config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0
|
24
|
+
|
25
|
+
### More at https://github.com/sferik/rails_admin/wiki/Base-configuration
|
26
|
+
config.label_methods.unshift(:display_name)
|
27
|
+
|
28
|
+
config.actions do
|
29
|
+
# show_in_app
|
30
|
+
dashboard # mandatory
|
31
|
+
index # mandatory
|
32
|
+
new
|
33
|
+
export
|
34
|
+
bulk_delete
|
35
|
+
show
|
36
|
+
edit
|
37
|
+
delete
|
38
|
+
toggle
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# require "thecore_rails_admin_main_controller_concern"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Rails.application.configure do
|
2
|
+
config.assets.precompile += %w( favicon.ico )
|
3
|
+
config.assets.precompile += %w( apple-touch-icon.png )
|
4
|
+
config.assets.precompile += %w( favicon-32x32.png )
|
5
|
+
config.assets.precompile += %w( favicon-16x16.png )
|
6
|
+
config.assets.precompile += %w( safari-pinned-tab.svg )
|
7
|
+
config.assets.precompile += %w( mstile-150x150.svg )
|
8
|
+
config.assets.precompile += %w( android-chrome-192x192.png )
|
9
|
+
config.assets.precompile += %w( android-chrome-512x512.png )
|
10
|
+
config.assets.precompile += %w( logo.png )
|
11
|
+
config.assets.precompile += %w( up-arrow.png )
|
12
|
+
# mstile-150x150
|
13
|
+
config.assets.precompile += %w( thecore.js )
|
14
|
+
config.assets.precompile += %w( thecore.css )
|
15
|
+
# config.assets.precompile += %w( app_logo.png )
|
16
|
+
# config.assets.precompile += %w( main_app_logo.png )
|
17
|
+
config.assets.precompile += %w( ie.js )
|
18
|
+
config.assets.precompile += %w( manifest.json )
|
19
|
+
config.assets.precompile += %w( browserconfig.xml )
|
20
|
+
|
21
|
+
config.filter_parameters += [:password]
|
22
|
+
|
23
|
+
config.active_record.raise_in_transactional_callbacks = true
|
24
|
+
|
25
|
+
config.serviceworker.routes.draw do
|
26
|
+
match "/manifest.json"
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module ThecoreConcern
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
# Prevent CSRF attacks by raising an exception.
|
8
|
+
# For APIs, you may want to use :null_session instead.
|
9
|
+
layout 'thecore'
|
10
|
+
protect_from_forgery with: :exception, prepend: true
|
11
|
+
rescue_from CanCan::AccessDenied do |exception|
|
12
|
+
redirect_to main_app.root_url, :alert => exception.message
|
13
|
+
end
|
14
|
+
include HttpAcceptLanguage::AutoLocale
|
15
|
+
Rails.logger.debug "Selected Locale: #{I18n.locale}"
|
16
|
+
before_action :configure_permitted_parameters, if: :devise_controller?
|
17
|
+
before_action :reject_locked!, if: :devise_controller?
|
18
|
+
|
19
|
+
helper_method :reject_locked!
|
20
|
+
helper_method :require_admin!
|
21
|
+
helper_method :line_break
|
22
|
+
helper_method :title
|
23
|
+
helper_method :bootstrap_class_for
|
24
|
+
|
25
|
+
# Redirects on successful sign in
|
26
|
+
def after_sign_in_path_for resource
|
27
|
+
Rails.logger.debug("SUCCESFULL SIGNIN, USER IS ADMIN? #{current_user.admin?}")
|
28
|
+
#if current_user.admin?
|
29
|
+
# GETTING JUST THE ROOT ACTIONS I (CURRENT_USER) CAN MANAGE
|
30
|
+
root_actions = RailsAdmin::Config::Actions.all(:root).select {|action| can? action.action_name, :all }
|
31
|
+
# Rails.logger.debug "ROOT ACTIONS: #{root_actions.inspect}"
|
32
|
+
# GETTING THE FIRST ACTION I CAN MANAGE
|
33
|
+
action = root_actions.collect(&:action_name).first
|
34
|
+
# Rails.logger.debug "FIRST ACTION: #{action}"
|
35
|
+
# REDIRECT TO THAT ACTION
|
36
|
+
rails_admin.send("#{action}_path").sub("#{ENV['RAILS_RELATIVE_URL_ROOT']}#{ENV['RAILS_RELATIVE_URL_ROOT']}", "#{ENV['RAILS_RELATIVE_URL_ROOT']}")
|
37
|
+
#rails_admin.dashboard_path.sub("#{ENV['RAILS_RELATIVE_URL_ROOT']}#{ENV['RAILS_RELATIVE_URL_ROOT']}", "#{ENV['RAILS_RELATIVE_URL_ROOT']}")
|
38
|
+
#elsif current_user.has_role? :workers
|
39
|
+
# rails_admin.new_path('timetable').sub("#{ENV['RAILS_RELATIVE_URL_ROOT']}#{ENV['RAILS_RELATIVE_URL_ROOT']}", "#{ENV['RAILS_RELATIVE_URL_ROOT']}")
|
40
|
+
#else
|
41
|
+
# inside_path
|
42
|
+
#end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def title value = "Thecore"
|
47
|
+
@title = value
|
48
|
+
end
|
49
|
+
|
50
|
+
def bootstrap_class_for flash_type
|
51
|
+
case flash_type
|
52
|
+
when 'success'
|
53
|
+
'alert-success'
|
54
|
+
when 'error'
|
55
|
+
'alert-danger'
|
56
|
+
when 'alert'
|
57
|
+
'alert-warning'
|
58
|
+
when 'notice'
|
59
|
+
'alert-info'
|
60
|
+
else
|
61
|
+
flash_type.to_s
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def line_break s
|
66
|
+
s.gsub("\n", "<br/>")
|
67
|
+
end
|
68
|
+
# Devise permitted params
|
69
|
+
def configure_permitted_parameters
|
70
|
+
devise_parameter_sanitizer.permit(:sign_in) { |u| u.permit(
|
71
|
+
:username,
|
72
|
+
:password,
|
73
|
+
:password_confirmation,
|
74
|
+
:remember_me)
|
75
|
+
}
|
76
|
+
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(
|
77
|
+
:username,
|
78
|
+
:password,
|
79
|
+
:password_confirmation)
|
80
|
+
}
|
81
|
+
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(
|
82
|
+
:username,
|
83
|
+
:password,
|
84
|
+
:password_confirmation,
|
85
|
+
:current_password
|
86
|
+
)
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
# Auto-sign out locked users
|
91
|
+
def reject_locked!
|
92
|
+
if current_user && current_user.locked?
|
93
|
+
sign_out current_user
|
94
|
+
user_session = nil
|
95
|
+
current_user = nil
|
96
|
+
flash[:alert] = "Your account is locked."
|
97
|
+
flash[:notice] = nil
|
98
|
+
redirect_to root_url
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# Only permits admin users
|
103
|
+
def require_admin!
|
104
|
+
authenticate_user!
|
105
|
+
|
106
|
+
if current_user && !current_user.admin?
|
107
|
+
redirect_to inside_path
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# include the extension
|
113
|
+
ActionController::Base.send(:include, ThecoreConcern)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
en:
|
2
|
+
devise:
|
3
|
+
mailer:
|
4
|
+
password_changed_instructions:
|
5
|
+
greeting: Welcome %{recipient}!
|
6
|
+
instruction: We sent you this email to inform about password change.
|
7
|
+
instruction_2: If you didn't changed password, we ask you to contact our customer service, please.
|
8
|
+
shared:
|
9
|
+
links:
|
10
|
+
sign_out: Log out
|
11
|
+
descriptions:
|
12
|
+
current_password_needed: (we need your current password to confirm your changes)
|
13
|
+
leave_blank: (leave blank if you don't want to change it)
|
14
|
+
validations:
|
15
|
+
minimum_length: "%{length} characters minimum"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
en:
|
2
|
+
admin:
|
3
|
+
misc:
|
4
|
+
scopes: Fast Filters
|
5
|
+
scopes:
|
6
|
+
all: All
|
7
|
+
order_by_name: Order By Name
|
8
|
+
order_by_insert_date: Order By Date
|
9
|
+
starts_with_a: Starts with A
|
10
|
+
starts_with_b: Starts with B
|
11
|
+
starts_with_c: Starts with C
|
12
|
+
starts_with_d: Starts with D
|
13
|
+
starts_with_e: Starts with E
|
14
|
+
starts_with_f: Starts with F
|
15
|
+
starts_with_g: Starts with G
|
16
|
+
starts_with_h: Starts with H
|
17
|
+
starts_with_i: Starts with I
|
18
|
+
starts_with_j: Starts with J
|
19
|
+
starts_with_k: Starts with K
|
20
|
+
starts_with_l: Starts with L
|
21
|
+
starts_with_m: Starts with M
|
22
|
+
starts_with_n: Starts with N
|
23
|
+
starts_with_o: Starts with O
|
24
|
+
starts_with_p: Starts with P
|
25
|
+
starts_with_q: Starts with Q
|
26
|
+
starts_with_r: Starts with R
|
27
|
+
starts_with_s: Starts with S
|
28
|
+
starts_with_t: Starts with T
|
29
|
+
starts_with_u: Starts with U
|
30
|
+
starts_with_v: Starts with V
|
31
|
+
starts_with_w: Starts with W
|
32
|
+
starts_with_x: Starts with X
|
33
|
+
starts_with_y: Starts with Y
|
34
|
+
starts_with_z: Starts with Z
|
@@ -0,0 +1,31 @@
|
|
1
|
+
en:
|
2
|
+
simple_form:
|
3
|
+
"yes": 'Yes'
|
4
|
+
"no": 'No'
|
5
|
+
required:
|
6
|
+
# text: 'required'
|
7
|
+
# mark: '*'
|
8
|
+
# You can uncomment the line below if you need to overwrite the whole required html.
|
9
|
+
# When using html, text and mark won't be used.
|
10
|
+
html: '*'
|
11
|
+
error_notification:
|
12
|
+
default_message: "Please review the problems below:"
|
13
|
+
# Examples
|
14
|
+
# labels:
|
15
|
+
# defaults:
|
16
|
+
# password: 'Password'
|
17
|
+
# user:
|
18
|
+
# new:
|
19
|
+
# email: 'E-mail to sign in.'
|
20
|
+
# edit:
|
21
|
+
# email: 'E-mail.'
|
22
|
+
# hints:
|
23
|
+
# defaults:
|
24
|
+
# username: 'User name to sign in.'
|
25
|
+
# password: 'No special characters, please.'
|
26
|
+
# include_blanks:
|
27
|
+
# defaults:
|
28
|
+
# age: 'Rather not say'
|
29
|
+
# prompts:
|
30
|
+
# defaults:
|
31
|
+
# age: 'Select your age'
|