symphonia 2.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +674 -0
- data/README.md +16 -0
- data/Rakefile +44 -0
- data/app/assets/images/bg-checker.png +0 -0
- data/app/assets/images/bullet.gif +0 -0
- data/app/assets/images/close.png +0 -0
- data/app/assets/images/loading.gif +0 -0
- data/app/assets/images/next.png +0 -0
- data/app/assets/images/prev.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/autogrow/plugin.js +232 -0
- data/app/assets/javascripts/ckeditor/plugins/autogrow/samples/autogrow.html +102 -0
- data/app/assets/javascripts/ckeditor/plugins/image_chooser/icons/addimage.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image_chooser/plugin.js +15 -0
- data/app/assets/javascripts/symphonia/Sortable.js +1249 -0
- data/app/assets/javascripts/symphonia/_core.js +45 -0
- data/app/assets/javascripts/symphonia/application.js.erb +147 -0
- data/app/assets/javascripts/symphonia/filters.js +44 -0
- data/app/assets/javascripts/symphonia/symphonia_bootstrap_dialog.js +136 -0
- data/app/assets/javascripts/symphonia/symphonia_ckeditor.js +55 -0
- data/app/assets/stylesheets/symphonia/application.css +4 -0
- data/app/assets/stylesheets/symphonia/basic.scss +218 -0
- data/app/assets/stylesheets/symphonia/filters.scss +19 -0
- data/app/assets/stylesheets/symphonia/symphonia_bootstrap.scss +56 -0
- data/app/channels/application_cable/channel.rb +5 -0
- data/app/controllers/symphonia/accounts_controller.rb +169 -0
- data/app/controllers/symphonia/admin_controller.rb +22 -0
- data/app/controllers/symphonia/api_controller.rb +64 -0
- data/app/controllers/symphonia/application_controller.rb +8 -0
- data/app/controllers/symphonia/attachments_controller.rb +37 -0
- data/app/controllers/symphonia/filters_controller.rb +23 -0
- data/app/controllers/symphonia/images_controller.rb +16 -0
- data/app/controllers/symphonia/login_controller.rb +80 -0
- data/app/controllers/symphonia/roles_controller.rb +100 -0
- data/app/controllers/symphonia/user_sessions_controller.rb +16 -0
- data/app/controllers/symphonia/users_controller.rb +168 -0
- data/app/helpers/symphonia/application_helper.rb +422 -0
- data/app/helpers/symphonia/bootstrap_modal_helper.rb +59 -0
- data/app/helpers/symphonia/form_helper.rb +50 -0
- data/app/helpers/symphonia/renderer_helper.rb +85 -0
- data/app/mailers/symphonia/application_mailer.rb +6 -0
- data/app/mailers/symphonia/notifier.rb +42 -0
- data/app/models/symphonia/admin_module.rb +18 -0
- data/app/models/symphonia/application_record.rb +14 -0
- data/app/models/symphonia/attachment.rb +16 -0
- data/app/models/symphonia/common_file.rb +9 -0
- data/app/models/symphonia/email_preference.rb +5 -0
- data/app/models/symphonia/image.rb +46 -0
- data/app/models/symphonia/preference.rb +12 -0
- data/app/models/symphonia/role.rb +55 -0
- data/app/models/symphonia/swagger/error_model.rb +19 -0
- data/app/models/symphonia/swagger/responses.rb +27 -0
- data/app/models/symphonia/user.rb +141 -0
- data/app/models/symphonia/user_session.rb +19 -0
- data/app/views/common/403.html.erb +5 -0
- data/app/views/common/404.html.erb +2 -0
- data/app/views/layouts/symphonia/_modal.html.erb +19 -0
- data/app/views/layouts/symphonia/_query.html.erb +51 -0
- data/app/views/layouts/symphonia/application.html.erb +45 -0
- data/app/views/layouts/symphonia/application.pdf.erb +15 -0
- data/app/views/layouts/symphonia/mailer.html.erb +13 -0
- data/app/views/symphonia/accounts/_detail.html.erb +65 -0
- data/app/views/symphonia/accounts/_form.html.erb +14 -0
- data/app/views/symphonia/accounts/edit.html.erb +9 -0
- data/app/views/symphonia/accounts/edit.js.erb +5 -0
- data/app/views/symphonia/accounts/lost_password.html.erb +6 -0
- data/app/views/symphonia/accounts/lost_password.js.erb +3 -0
- data/app/views/symphonia/accounts/new_activation.html.erb +11 -0
- data/app/views/symphonia/accounts/new_activation.js.erb +6 -0
- data/app/views/symphonia/accounts/register.html.erb +20 -0
- data/app/views/symphonia/accounts/reset_password.html.erb +18 -0
- data/app/views/symphonia/accounts/update.js.erb +1 -0
- data/app/views/symphonia/admin/index.html.erb +15 -0
- data/app/views/symphonia/attachments/destroy.js.erb +1 -0
- data/app/views/symphonia/common/_editable_images_grid.html.erb +12 -0
- data/app/views/symphonia/common/_filters.html.erb +23 -0
- data/app/views/symphonia/common/_locale_chooser.html.erb +16 -0
- data/app/views/symphonia/common/_share_links.html.erb +5 -0
- data/app/views/symphonia/filters/options.html.erb +36 -0
- data/app/views/symphonia/filters/options.js.erb +9 -0
- data/app/views/symphonia/filters/table.html.erb +21 -0
- data/app/views/symphonia/login/_form.html.erb +19 -0
- data/app/views/symphonia/login/new.html.erb +11 -0
- data/app/views/symphonia/login_sessions/new.html.erb +1 -0
- data/app/views/symphonia/notifier/activation_user.html.erb +7 -0
- data/app/views/symphonia/notifier/activation_user.text.erb +3 -0
- data/app/views/symphonia/notifier/reset_password_user.html.erb +7 -0
- data/app/views/symphonia/notifier/reset_password_user.text.erb +3 -0
- data/app/views/symphonia/notifier/test_mail.html.erb +2 -0
- data/app/views/symphonia/notifier/test_mail.text.erb +3 -0
- data/app/views/symphonia/notifier/user_change_to_active.html.erb +3 -0
- data/app/views/symphonia/notifier/user_change_to_active.text.erb +1 -0
- data/app/views/symphonia/notifier/user_registered.html.erb +13 -0
- data/app/views/symphonia/notifier/user_registered.text.erb +8 -0
- data/app/views/symphonia/roles/_form.html.erb +30 -0
- data/app/views/symphonia/roles/edit.html.erb +5 -0
- data/app/views/symphonia/roles/index.html.erb +6 -0
- data/app/views/symphonia/roles/new.html.erb +4 -0
- data/app/views/symphonia/roles/show.html.erb +5 -0
- data/app/views/symphonia/users/_form.html.erb +13 -0
- data/app/views/symphonia/users/edit.html.erb +26 -0
- data/app/views/symphonia/users/edit.js.erb +3 -0
- data/app/views/symphonia/users/edit_current.html.erb +7 -0
- data/app/views/symphonia/users/index.html.erb +5 -0
- data/app/views/symphonia/users/new.html.erb +8 -0
- data/app/views/symphonia/users/show.html.erb +63 -0
- data/config/locales/cs.yml +233 -0
- data/config/locales/en.yml +47 -0
- data/config/routes.rb +52 -0
- data/db/migrate/20130714140500_create_users.rb +49 -0
- data/db/migrate/20130714140501_create_roles.rb +16 -0
- data/db/migrate/20130714140502_create_preferences.rb +26 -0
- data/db/migrate/20130828175114_create_attachments.rb +20 -0
- data/db/migrate/20141213204351_create_admin_modules.rb +20 -0
- data/db/seeds.rb +12 -0
- data/lib/generators/symphonia/entity_controller/entity_controller_generator.rb +48 -0
- data/lib/generators/symphonia/entity_controller/templates/controller.rb +100 -0
- data/lib/generators/symphonia/query/query_generator.rb +37 -0
- data/lib/generators/symphonia/setup/setup_generator.rb +52 -0
- data/lib/generators/symphonia/setup/templates/404.html +26 -0
- data/lib/generators/symphonia/setup/templates/500.html +37 -0
- data/lib/generators/symphonia/setup/templates/Gemfile +18 -0
- data/lib/generators/symphonia/setup/templates/base_layout.html.erb +46 -0
- data/lib/generators/symphonia/setup/templates/design.scss +4 -0
- data/lib/generators/symphonia/setup/templates/settings.rb +65 -0
- data/lib/generators/symphonia/setup/templates/spec_helper.rb +18 -0
- data/lib/symphonia/action_cable/connection.rb +31 -0
- data/lib/symphonia/admin_constraint.rb +9 -0
- data/lib/symphonia/attachable.rb +35 -0
- data/lib/symphonia/base_controller.rb +96 -0
- data/lib/symphonia/bootstrap_link_render.rb +69 -0
- data/lib/symphonia/controller_extensions.rb +200 -0
- data/lib/symphonia/engine.rb +137 -0
- data/lib/symphonia/form_builder.rb +137 -0
- data/lib/symphonia/menu_manager.rb +23 -0
- data/lib/symphonia/model_attributes/attribute.rb +137 -0
- data/lib/symphonia/model_attributes.rb +102 -0
- data/lib/symphonia/model_filters/base.rb +82 -0
- data/lib/symphonia/model_filters/boolean_filter.rb +26 -0
- data/lib/symphonia/model_filters/date_filter.rb +81 -0
- data/lib/symphonia/model_filters/integer_filter.rb +18 -0
- data/lib/symphonia/model_filters/select_filter.rb +48 -0
- data/lib/symphonia/model_filters/string_filter.rb +18 -0
- data/lib/symphonia/model_filters.rb +10 -0
- data/lib/symphonia/object.rb +31 -0
- data/lib/symphonia/permissions.rb +93 -0
- data/lib/symphonia/query.rb +275 -0
- data/lib/symphonia/query_columns/attribute_column.rb +43 -0
- data/lib/symphonia/query_columns/generic_column.rb +165 -0
- data/lib/symphonia/query_columns.rb +8 -0
- data/lib/symphonia/spec_helper.rb +4 -0
- data/lib/symphonia/user_management.rb +58 -0
- data/lib/symphonia/version.rb +4 -0
- data/lib/symphonia.rb +20 -0
- data/spec/controllers/account_controller_spec.rb +90 -0
- data/spec/controllers/admin_controller_spec.rb +35 -0
- data/spec/controllers/api_controller_spec.rb +9 -0
- data/spec/controllers/filters_controller_spec.rb +35 -0
- data/spec/controllers/images_controller_spec.rb +5 -0
- data/spec/controllers/login_controller_spec.rb +20 -0
- data/spec/controllers/roles_controller_spec.rb +12 -0
- data/spec/controllers/users_controller_spec.rb +47 -0
- data/spec/factories/factories.rb +52 -0
- data/spec/helpers/symphonia/application_helper_spec.rb +62 -0
- data/spec/mailers/previews/symphonia/notifier_preview.rb +27 -0
- data/spec/mailers/symphonia/notifier_spec.rb +76 -0
- data/spec/models/attachment_spec.rb +22 -0
- data/spec/models/query/attribute_spec.rb +8 -0
- data/spec/models/query/symphonia_query_spec.rb +70 -0
- data/spec/models/role_spec.rb +13 -0
- data/spec/models/user_spec.rb +10 -0
- data/spec/rails_helper.rb +13 -0
- data/spec/requests/accounts_spec.rb +118 -0
- data/spec/requests/attachments_controller_spec.rb +23 -0
- data/spec/requests/login_spec.rb +26 -0
- data/spec/requests/roles_spec.rb +10 -0
- data/spec/requests/users_spec.rb +50 -0
- data/spec/spec_helper.rb +101 -0
- data/spec/support/common_file.txt +2 -0
- data/spec/support/query.rb +36 -0
- data/spec/support/shared.rb +62 -0
- data/spec/support/shared_controllers.rb +31 -0
- data/spec/support/stub_users.rb +32 -0
- data/spec/support/symphonia.jpg +0 -0
- data/spec/support/wait_for_ajax.rb +15 -0
- data/spec/version_spec.rb +5 -0
- data/spec/views/filters/options.html.erb_spec.rb +14 -0
- metadata +697 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
// require _bootstrap
|
2
|
+
// *= require rails_bootstrap_forms
|
3
|
+
// *= require bootstrap-datepicker3
|
4
|
+
//@import "bootstrap-sprockets";
|
5
|
+
@import "bootstrap";
|
6
|
+
@import "bootstrap-datepicker3";
|
7
|
+
|
8
|
+
//@media (min-width: $screen-sm) {
|
9
|
+
// #internal_static_page_sign {
|
10
|
+
// font-size: 20em;
|
11
|
+
// }
|
12
|
+
//}
|
13
|
+
//
|
14
|
+
//@media (min-width: $screen-md) {
|
15
|
+
// #internal_static_page_sign {
|
16
|
+
// font-size: 25em;
|
17
|
+
// }
|
18
|
+
//}
|
19
|
+
//
|
20
|
+
//@media (min-width: $screen-lg) {
|
21
|
+
// #internal_static_page_sign {
|
22
|
+
// font-size: 30em;
|
23
|
+
// }
|
24
|
+
//}
|
25
|
+
|
26
|
+
body > .container {
|
27
|
+
padding-top: 80px; // fixed navbar
|
28
|
+
}
|
29
|
+
footer.footer {
|
30
|
+
//position: absolute;
|
31
|
+
height: 40px;
|
32
|
+
line-height: 40px;
|
33
|
+
bottom: 0;
|
34
|
+
width: 100%;
|
35
|
+
}
|
36
|
+
|
37
|
+
@keyframes highlight {
|
38
|
+
from {
|
39
|
+
background-color: map-get($theme-colors, warning);
|
40
|
+
}
|
41
|
+
to {
|
42
|
+
background-color: inherit;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
@media print {
|
47
|
+
.contextual {
|
48
|
+
@extend .d-print-none;
|
49
|
+
}
|
50
|
+
a[href]:after {
|
51
|
+
content: none
|
52
|
+
}
|
53
|
+
.btn {
|
54
|
+
@extend .d-print-none;
|
55
|
+
}
|
56
|
+
}
|
@@ -0,0 +1,169 @@
|
|
1
|
+
module Symphonia
|
2
|
+
class AccountsController < ApplicationController
|
3
|
+
|
4
|
+
before_action :login_require, only: [:show, :edit, :update]
|
5
|
+
before_action -> { menu_item(:my_account) }, only: [:show, :edit, :update]
|
6
|
+
before_action :prepare_user, only: [:register, :create]
|
7
|
+
|
8
|
+
helper Recaptcha::ClientHelper if defined? Recaptcha
|
9
|
+
|
10
|
+
def show
|
11
|
+
@user = current_account
|
12
|
+
|
13
|
+
respond_to do |format|
|
14
|
+
format.html { render(template: "#{@user.class.name.underscore.pluralize}/show") }
|
15
|
+
format.json { render json: @user }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def register
|
20
|
+
menu_item(:register)
|
21
|
+
end
|
22
|
+
|
23
|
+
def create
|
24
|
+
menu_item(:register)
|
25
|
+
@user.attributes = user_params
|
26
|
+
if Symphonia.config[:self_activation_enabled]
|
27
|
+
@user.status = @user.class.statuses[:active]
|
28
|
+
else
|
29
|
+
@user.status = @user.class.statuses[:pending]
|
30
|
+
end
|
31
|
+
respond_to do |format|
|
32
|
+
verified = if defined?(Recaptcha)
|
33
|
+
@user.valid? && verify_recaptcha(model: @user)
|
34
|
+
else
|
35
|
+
true
|
36
|
+
end
|
37
|
+
if verified && @user.save
|
38
|
+
Notifier.activation_user(@user).deliver_now
|
39
|
+
Notifier.user_registered(@user).deliver_now
|
40
|
+
format.html { redirect_to '/', notice: t(:text_user_registered) }
|
41
|
+
format.json { render status: :created }
|
42
|
+
else
|
43
|
+
format.html {
|
44
|
+
render action: 'register'
|
45
|
+
}
|
46
|
+
format.json { render json: @user.errors, status: :unprocessable_entity }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def edit
|
52
|
+
@user = current_account
|
53
|
+
end
|
54
|
+
|
55
|
+
def update
|
56
|
+
@user = current_account
|
57
|
+
@user.attributes = user_params
|
58
|
+
respond_to do |format|
|
59
|
+
@user.edited_by = User.current.logged_in? && User.current
|
60
|
+
@user.edited_at = Time.now
|
61
|
+
if @user.save
|
62
|
+
format.html { redirect_to({ action: 'show' }, notice: t(:text_updated)) }
|
63
|
+
format.json { head :no_content }
|
64
|
+
format.js
|
65
|
+
else
|
66
|
+
format.html {
|
67
|
+
render action: 'edit'
|
68
|
+
}
|
69
|
+
format.json { render json: @user.errors, status: :unprocessable_entity }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
#----
|
75
|
+
|
76
|
+
def new_activation
|
77
|
+
end
|
78
|
+
|
79
|
+
def resend_activation
|
80
|
+
@user = find_account_by_mail(params.require(:mail))
|
81
|
+
if @user
|
82
|
+
if @user.active?
|
83
|
+
redirect_to root_path, flash: { error: t(:text_user_alerady_active) }
|
84
|
+
else
|
85
|
+
@user.reset_perishable_token!
|
86
|
+
Notifier.activation_user(@user).deliver_later
|
87
|
+
redirect_to root_path, notice: t(:text_activation_resend)
|
88
|
+
end
|
89
|
+
else
|
90
|
+
redirect_to root_path, flash: { error: t(:text_user_not_found) }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def activation
|
95
|
+
@user = find_account_by_token(params[:activation_code])
|
96
|
+
if @user
|
97
|
+
@user.activate!
|
98
|
+
redirect_to(login_path, notice: t(:text_activation_success))
|
99
|
+
else
|
100
|
+
redirect_to root_path, flash: { error: t(:text_user_not_found_or_token_invalid) }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def current
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
def admin
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
def reset_password
|
113
|
+
@user = find_account_by_token(params.require(:id))
|
114
|
+
return render_404 if @user.nil?
|
115
|
+
|
116
|
+
if params[:password] && params[:password_confirmation]
|
117
|
+
@user.password = params[:password]
|
118
|
+
@user.password_confirmation = params[:password_confirmation]
|
119
|
+
end
|
120
|
+
|
121
|
+
if @user.changed? && @user.save
|
122
|
+
return redirect_to(user_current_path, notice: t(:text_updated))
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def lost_password
|
127
|
+
@user = find_account_by_mail(params[:mail]) if params[:mail]
|
128
|
+
if @user
|
129
|
+
if @user.active?
|
130
|
+
@user.reset_perishable_token!
|
131
|
+
Notifier.reset_password_user(@user).deliver_later
|
132
|
+
redirect_to login_path, notice: t(:text_reset_password_resend)
|
133
|
+
else
|
134
|
+
redirect_to login_path, flash: { error: t("authlogic.error_messages.not_active") }
|
135
|
+
end
|
136
|
+
else
|
137
|
+
respond_to do |format|
|
138
|
+
format.html
|
139
|
+
format.js
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
private
|
145
|
+
|
146
|
+
def prepare_user
|
147
|
+
return render_403 unless Symphonia.config[:allow_registrations]
|
148
|
+
@user = User.new
|
149
|
+
end
|
150
|
+
|
151
|
+
def user_params
|
152
|
+
params.require(:user).permit(:login, :first_name, :last_name, :password, :password_confirmation, :email, :mail, preference_ids: [])
|
153
|
+
end
|
154
|
+
|
155
|
+
def current_account
|
156
|
+
User.current
|
157
|
+
end
|
158
|
+
|
159
|
+
def find_account_by_mail(mail)
|
160
|
+
User.where(email: mail).first
|
161
|
+
end
|
162
|
+
|
163
|
+
def find_account_by_token(id)
|
164
|
+
User.find_using_perishable_token(id, 1.week)
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Symphonia
|
2
|
+
class AdminController < ApplicationController
|
3
|
+
before_action :login_require
|
4
|
+
|
5
|
+
def index
|
6
|
+
@admin_modules = AdminModule.where(user_id: [nil, current_user.id]).order(:position).all
|
7
|
+
@modules_count = @admin_modules.count
|
8
|
+
|
9
|
+
respond_to do |format|
|
10
|
+
format.html
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_mail
|
15
|
+
Notifier.test_mail(current_user.id).deliver_later
|
16
|
+
|
17
|
+
redirect_to symphonia.root_path, notice: 'Test mail'
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Symphonia
|
2
|
+
class ApiController < ApplicationController
|
3
|
+
include ::Swagger::Blocks
|
4
|
+
# https://github.com/fotinakis/swagger-blocks
|
5
|
+
swagger_root do
|
6
|
+
key :swagger, '2.0'
|
7
|
+
info do
|
8
|
+
key :version, '1.0.0'
|
9
|
+
key :title, 'Symphonia API'
|
10
|
+
key :description, ''
|
11
|
+
# key :termsOfService, 'http://helloreverb.com/terms/'
|
12
|
+
contact do
|
13
|
+
key :name, 'Lukas Pokorny'
|
14
|
+
key :email, 'pokorny@luk4s.cz'
|
15
|
+
end
|
16
|
+
license do
|
17
|
+
key :name, 'GPLv3'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
# tag do
|
21
|
+
# key :name, 'pet'
|
22
|
+
# key :description, 'Pets operations'
|
23
|
+
# externalDocs do
|
24
|
+
# key :description, 'Find more info here'
|
25
|
+
# key :url, 'https://swagger.io'
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
# key :host, 'petstore.swagger.wordnik.com'
|
29
|
+
key :basePath, '/'
|
30
|
+
key :consumes, ['application/json']
|
31
|
+
key :produces, ['application/json']
|
32
|
+
|
33
|
+
security_definition :token do
|
34
|
+
key :type, :apiKey
|
35
|
+
key :name, :Authorization
|
36
|
+
key :in, :header
|
37
|
+
end
|
38
|
+
security do
|
39
|
+
key :token, []
|
40
|
+
end
|
41
|
+
# security_definition :petstore_auth do
|
42
|
+
# key :type, :oauth2
|
43
|
+
# key :authorizationUrl, 'http://swagger.io/api/oauth/dialog'
|
44
|
+
# key :flow, :implicit
|
45
|
+
# scopes do
|
46
|
+
# key 'write:pets', 'modify pets in your account'
|
47
|
+
# key 'read:pets', 'read your pets'
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
end
|
51
|
+
|
52
|
+
# A list of all classes that have swagger_* declarations.
|
53
|
+
SWAGGERED_CLASSES = [
|
54
|
+
UsersController,
|
55
|
+
User,
|
56
|
+
Swagger::ErrorModel,
|
57
|
+
self
|
58
|
+
]
|
59
|
+
|
60
|
+
def index
|
61
|
+
render json: ::Swagger::Blocks.build_root_json(SWAGGERED_CLASSES)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Symphonia
|
2
|
+
class AttachmentsController < ApplicationController
|
3
|
+
|
4
|
+
before_action :require_login, :find_attachment
|
5
|
+
|
6
|
+
def show
|
7
|
+
# find_attachment
|
8
|
+
render(plain: @attachment.attachment.url(:original), layout: false)
|
9
|
+
end
|
10
|
+
|
11
|
+
def destroy
|
12
|
+
# find_attachment
|
13
|
+
@attachment.destroy
|
14
|
+
respond_to do |format|
|
15
|
+
format.html do
|
16
|
+
flash[:notice] = t(:"text_#{@attachment.type.underscore}_successfully_destroy")
|
17
|
+
redirect_back_or_default(polymorphic_path(@attachment.attachable))
|
18
|
+
end
|
19
|
+
format.js
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def reorder
|
24
|
+
# find_attachment
|
25
|
+
new_position = params.require(:position).to_i
|
26
|
+
@attachment.insert_at(new_position)
|
27
|
+
head :ok
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def find_attachment
|
33
|
+
@attachment = Attachment.find(params.require(:id))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Symphonia
|
2
|
+
class FiltersController < ApplicationController
|
3
|
+
before_action :require_login
|
4
|
+
before_action :find_filters
|
5
|
+
|
6
|
+
def options
|
7
|
+
respond_to do |format |
|
8
|
+
format.html
|
9
|
+
format.js
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def find_filters
|
16
|
+
_type = params.delete(:type)
|
17
|
+
@query = _type.constantize.query.new
|
18
|
+
rescue StandardError => e
|
19
|
+
Rails.logger.debug e.message
|
20
|
+
render_404
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Symphonia
|
2
|
+
class ImagesController < ApplicationController
|
3
|
+
# before_action :require_login
|
4
|
+
|
5
|
+
# raise '??? images ??'
|
6
|
+
# def index
|
7
|
+
# @images = Image.order(created_at: :asc)
|
8
|
+
# @images = @images.like(params[:q]) if params[:q].present?
|
9
|
+
# @images = @images.page(params[:page])
|
10
|
+
# respond_to do |format|
|
11
|
+
# format.html
|
12
|
+
# format.js
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Symphonia
|
2
|
+
class LoginController < ApplicationController
|
3
|
+
|
4
|
+
before_action { menu_item(:login) }
|
5
|
+
|
6
|
+
def index
|
7
|
+
if current_model.constantize.current.logged_in?
|
8
|
+
return destroy
|
9
|
+
else
|
10
|
+
return new
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def new
|
15
|
+
if current_model.constantize.current.logged_in?
|
16
|
+
return redirect_to(after_login_path)
|
17
|
+
end
|
18
|
+
@model_session = "#{current_model}Session".constantize.new
|
19
|
+
render :new
|
20
|
+
end
|
21
|
+
|
22
|
+
def create
|
23
|
+
@model_session = "#{current_model}Session".constantize.new(login_session_params)
|
24
|
+
if @model_session.save
|
25
|
+
current_model.constantize.current = @model_session.user
|
26
|
+
redirect_to after_login_path
|
27
|
+
else
|
28
|
+
render :new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def login_session_params
|
33
|
+
params.require(:login_session).permit(:login, :password, :remember_me).to_h
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy
|
37
|
+
current_session && current_session.destroy
|
38
|
+
redirect_to '/', notice: t(:text_successfully_logout)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def current_model
|
44
|
+
raise NotImplementedError
|
45
|
+
end
|
46
|
+
|
47
|
+
def current_session
|
48
|
+
raise NotImplementedError
|
49
|
+
end
|
50
|
+
|
51
|
+
def after_login_path
|
52
|
+
path = session[:return_to].presence
|
53
|
+
path ||= Symphonia.config.after_login_path.presence
|
54
|
+
path ||= get_first_menu_item_path(Symphonia::MenuManager.menu(:top_menu).values) || :admin_path
|
55
|
+
case path
|
56
|
+
when Symbol
|
57
|
+
main_app.send(path)
|
58
|
+
when Proc
|
59
|
+
path.call(self)
|
60
|
+
else
|
61
|
+
path
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_first_menu_item_path(menu_items)
|
66
|
+
menu_items.detect do |item|
|
67
|
+
if (submenu = item[:children]).present?
|
68
|
+
if (subitem = get_first_menu_item_path(submenu.values))
|
69
|
+
return subitem
|
70
|
+
break
|
71
|
+
end
|
72
|
+
else
|
73
|
+
item[:if].nil? || item[:if].call
|
74
|
+
end
|
75
|
+
end.try(:[], :url)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module Symphonia
|
2
|
+
class RolesController < ApplicationController
|
3
|
+
|
4
|
+
include BaseController
|
5
|
+
|
6
|
+
def model
|
7
|
+
Role
|
8
|
+
end
|
9
|
+
|
10
|
+
def safe_attributes
|
11
|
+
[:name, :description, permissions: []]
|
12
|
+
end
|
13
|
+
# helper Symphonia::RendererHelper
|
14
|
+
#
|
15
|
+
# before_action :authorize
|
16
|
+
before_action :load_permissions, only: [:new, :edit, :update, :create]
|
17
|
+
#
|
18
|
+
# #layout 'admin'
|
19
|
+
#
|
20
|
+
# def index
|
21
|
+
# @query = Symphonia::Role.query.new(self)
|
22
|
+
# @entities = @query.entities
|
23
|
+
# respond_to do |format|
|
24
|
+
# format.html do
|
25
|
+
# @entities = @entities.page(params[:page])
|
26
|
+
# render layout: !request.xhr?
|
27
|
+
# end
|
28
|
+
# format.xml { render xml: @entities.all }
|
29
|
+
# format.json { render json: @entities.all }
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# def show
|
34
|
+
# @role = Role.find(params[:id])
|
35
|
+
# respond_to do |format|
|
36
|
+
# format.html
|
37
|
+
# format.json { render json: @role }
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# def new
|
42
|
+
# @role = Role.new
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# def edit
|
46
|
+
# @role = Role.find(params[:id])
|
47
|
+
# end
|
48
|
+
|
49
|
+
def create
|
50
|
+
@entity = @role = Role.new(entity_params)
|
51
|
+
@role.permissions = Symphonia::Permissions.find_all(params[:permissions]).map(&:name)
|
52
|
+
super
|
53
|
+
# respond_to do |format|
|
54
|
+
# if @role.save
|
55
|
+
# format.html { redirect_to((params[:continue] ? new_role_path : roles_path), notice: t(:text_created)) }
|
56
|
+
# format.json { render(json: @role, status: :created, location: @role) }
|
57
|
+
# else
|
58
|
+
# format.html { render(action: 'new') }
|
59
|
+
# format.json { render(json: @role.errors, status: :unprocessable_entity) }
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
end
|
63
|
+
|
64
|
+
def update
|
65
|
+
@entity = @role = Role.find(params[:id])
|
66
|
+
@role.permissions = Symphonia::Permissions.find_all(params[:permissions]).map(&:name)
|
67
|
+
super
|
68
|
+
# respond_to do |format|
|
69
|
+
# if @role.update_attributes(role_params)
|
70
|
+
# format.html { redirect_to(edit_role_path(@role), notice: t(:text_updated)) }
|
71
|
+
# format.json { head(:no_content) }
|
72
|
+
# else
|
73
|
+
# format.html { render(action: 'edit') }
|
74
|
+
# format.json { render(json: @role.errors, status: :unprocessable_entity) }
|
75
|
+
# end
|
76
|
+
# end
|
77
|
+
end
|
78
|
+
|
79
|
+
# def destroy
|
80
|
+
# @role = Role.find(params[:id])
|
81
|
+
# @role.destroy
|
82
|
+
# respond_to do |format|
|
83
|
+
# format.html { redirect_to(roles_url, notice: t(:text_destroyed)) }
|
84
|
+
# format.json { head :no_content }
|
85
|
+
# format.js { render js: "Symphonia.filters.removeRow('#{view_context.dom_id(@role)}')"}
|
86
|
+
# end
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
private
|
90
|
+
#
|
91
|
+
def load_permissions
|
92
|
+
@permissions = Symphonia::Permissions.all
|
93
|
+
end
|
94
|
+
#
|
95
|
+
# def role_params
|
96
|
+
# params.require(:role).permit(:name, :description, permissions: [])
|
97
|
+
# end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|