sunrise-cms 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.rdoc +8 -3
- data/Gemfile +5 -8
- data/README.md +6 -0
- data/Rakefile +1 -0
- data/app/assets/images/sunrise/icons/export.svg +4 -0
- data/app/assets/images/sunrise/icons/import.svg +5 -0
- data/app/assets/javascripts/sunrise/application.js +0 -1
- data/app/assets/javascripts/sunrise/jquery.dialog.js.coffee +113 -40
- data/app/assets/javascripts/sunrise/jquery.editable.js.coffee +21 -21
- data/app/assets/javascripts/sunrise/manage.js.coffee +29 -28
- data/app/assets/stylesheets/sunrise/application.css +0 -1
- data/app/assets/stylesheets/sunrise/customize.css +7 -4
- data/app/assets/stylesheets/sunrise/main.css +883 -606
- data/app/controllers/sunrise/manager_controller.rb +42 -3
- data/app/views/layouts/sunrise/application.html.erb +7 -6
- data/app/views/sunrise/manager/buttons/_export.html.erb +9 -2
- data/app/views/sunrise/manager/buttons/_import.html.erb +25 -0
- data/app/views/sunrise/manager/buttons/_sort.html.erb +3 -3
- data/app/views/sunrise/manager/tree/index.html.erb +1 -1
- data/config/routes.rb +1 -0
- data/lib/sunrise/abstract_model.rb +3 -3
- data/lib/sunrise/config/model.rb +4 -0
- data/lib/sunrise/engine.rb +6 -0
- data/lib/sunrise/models/ability.rb +7 -7
- data/lib/sunrise/version.rb +1 -1
- data/sunrise-cms.gemspec +1 -3
- metadata +6 -31
@@ -4,15 +4,15 @@ module Sunrise
|
|
4
4
|
class ManagerController < Sunrise::ApplicationController
|
5
5
|
include Sunrise::Utils::SearchWrapper
|
6
6
|
|
7
|
-
before_action :build_record, only: [
|
8
|
-
before_action :find_record, only: [
|
7
|
+
before_action :build_record, only: %i[new create]
|
8
|
+
before_action :find_record, only: %i[show edit update destroy]
|
9
9
|
before_action :authorize_resource
|
10
10
|
|
11
11
|
helper :all
|
12
12
|
helper_method :abstract_model, :apply_scope, :scoped_index_path
|
13
13
|
|
14
14
|
respond_to(*Sunrise::Config.navigational_formats)
|
15
|
-
respond_to :xml, :csv, :xlsx, only: [
|
15
|
+
respond_to :xml, :csv, :xlsx, only: %i[export]
|
16
16
|
|
17
17
|
def index
|
18
18
|
@records = abstract_model.apply_scopes(params)
|
@@ -69,6 +69,19 @@ module Sunrise
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
+
def import
|
73
|
+
return render plain: 'Unacceptable', status: 422 unless import_possible?
|
74
|
+
|
75
|
+
@files = import_process_uploaded_files
|
76
|
+
|
77
|
+
respond_to do |format|
|
78
|
+
format.html { redirect_to scoped_index_path }
|
79
|
+
format.json do
|
80
|
+
render json: { files: @files }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
72
85
|
def sort
|
73
86
|
abstract_model.update_sort(params)
|
74
87
|
|
@@ -89,6 +102,32 @@ module Sunrise
|
|
89
102
|
|
90
103
|
protected
|
91
104
|
|
105
|
+
def import_process_uploaded_files
|
106
|
+
raw_files = params['files']
|
107
|
+
return [] if raw_files.blank?
|
108
|
+
|
109
|
+
raw_files.each_with_object([]) do |file, obj|
|
110
|
+
results = abstract_model.model.public_send(:sunrise_import, file)
|
111
|
+
results = render_imported_results(results, file)
|
112
|
+
|
113
|
+
obj << { name: file.original_filename, records: results }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def render_imported_results(results, file)
|
118
|
+
return results unless import_custom_render?
|
119
|
+
|
120
|
+
abstract_model.model.send(:sunrise_import_results_renderer, results, file)
|
121
|
+
end
|
122
|
+
|
123
|
+
def import_possible?
|
124
|
+
abstract_model.model.methods.include?(:sunrise_import)
|
125
|
+
end
|
126
|
+
|
127
|
+
def import_custom_render?
|
128
|
+
abstract_model.model.methods.include?(:sunrise_import_results_renderer)
|
129
|
+
end
|
130
|
+
|
92
131
|
def find_model
|
93
132
|
@abstract_model = Utils.get_model(params[:model_name], params)
|
94
133
|
if @abstract_model.nil?
|
@@ -6,9 +6,10 @@
|
|
6
6
|
<meta name="robots" content="NONE,NOARCHIVE" />
|
7
7
|
<%= csrf_meta_tag %>
|
8
8
|
<title><%= t('manage.page_title') %></title>
|
9
|
-
|
10
|
-
<%= stylesheet_link_tag
|
11
|
-
<%= javascript_include_tag
|
9
|
+
|
10
|
+
<%= stylesheet_link_tag 'sunrise/application' %>
|
11
|
+
<%= javascript_include_tag 'sunrise/application' %>
|
12
|
+
<%#= javascript_include_tag ::Ckeditor.cdn_url %>
|
12
13
|
</head>
|
13
14
|
<body>
|
14
15
|
<div class="outer">
|
@@ -16,16 +17,16 @@
|
|
16
17
|
<%= render :partial => "sunrise/shared/panel" %>
|
17
18
|
<%= manage_render_header %>
|
18
19
|
</div>
|
19
|
-
|
20
|
+
|
20
21
|
<%= yield %>
|
21
22
|
</div>
|
22
|
-
|
23
|
+
|
23
24
|
<div class="footer">
|
24
25
|
<div class="fwrapper">
|
25
26
|
<%= image_tag("sunrise/created.png", :title => "fodojo.com") %>
|
26
27
|
</div>
|
27
28
|
</div>
|
28
|
-
|
29
|
+
|
29
30
|
<div id="dark-shadow" class="dark-bg" style="display:none;"></div>
|
30
31
|
</body>
|
31
32
|
</html>
|
@@ -1,5 +1,12 @@
|
|
1
1
|
<div class="but-holder">
|
2
2
|
<div class="act-but">
|
3
|
-
<%= link_to
|
3
|
+
<%= link_to 'CSV', export_path(format: :csv), class: 'but-container export', title: 'Export' %>
|
4
4
|
</div>
|
5
|
-
</div>
|
5
|
+
</div>
|
6
|
+
<% if defined?(Mime::XLSX) %>
|
7
|
+
<div class="but-holder">
|
8
|
+
<div class="act-but">
|
9
|
+
<%= link_to 'XLS', export_path(format: :xlsx), class: 'but-container export', title: 'Export (XLS)' %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<% if abstract_model.config.available_import %>
|
2
|
+
<div class="but-holder">
|
3
|
+
<div class="act-but">
|
4
|
+
<%=
|
5
|
+
link_to(
|
6
|
+
image_tag('sunrise/empty.gif'),
|
7
|
+
export_path(format: :csv),
|
8
|
+
class: 'but-container import',
|
9
|
+
id: 'import-button',
|
10
|
+
title: 'Import',
|
11
|
+
data: {
|
12
|
+
title: 'Import',
|
13
|
+
url: import_path
|
14
|
+
}
|
15
|
+
)
|
16
|
+
%>
|
17
|
+
|
18
|
+
<script type="text/javascript">
|
19
|
+
$(document).ready(function(){
|
20
|
+
$('#import-button').import_dialog();
|
21
|
+
});
|
22
|
+
</script>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<div class="but-holder">
|
2
2
|
<div class="act-but">
|
3
3
|
<%= link_to image_tag('sunrise/empty.gif'), export_path(:format => :json), :class => 'but-container sort', :title => t('manage.buttons.sort'), :id => 'sort-button', :"data-save_title" => t('manage.buttons.save'), :"data-cancel_title" => t('manage.buttons.cancel'), :"data-url" => sort_path(:format => :json) %>
|
4
|
-
|
4
|
+
|
5
5
|
<script type="text/javascript">
|
6
6
|
$(document).ready(function(){
|
7
7
|
$('#sort-button').sort_dialog();
|
8
8
|
});
|
9
9
|
</script>
|
10
|
-
|
10
|
+
|
11
11
|
<script id="sort-template" type="text/x-jquery-tmpl">
|
12
12
|
<div class="sort-item" data-record-id="${id}">
|
13
13
|
<div class="sort-inner">
|
@@ -17,4 +17,4 @@
|
|
17
17
|
</div>
|
18
18
|
</script>
|
19
19
|
</div>
|
20
|
-
</div>
|
20
|
+
</div>
|
data/config/routes.rb
CHANGED
@@ -13,6 +13,7 @@ Sunrise::Engine.routes.draw do
|
|
13
13
|
scope ':model_name' do
|
14
14
|
get '/', action: :index, as: :index
|
15
15
|
get '/export.:format', action: :export, as: :export
|
16
|
+
post '/import', action: :import, as: :import
|
16
17
|
post '/sort', action: :sort, as: :sort
|
17
18
|
get '/new', action: :new, as: :new
|
18
19
|
post '/new', action: :create, as: :create
|
@@ -50,14 +50,14 @@ module Sunrise
|
|
50
50
|
delegate :label, to: 'self.class.config'
|
51
51
|
delegate :param_key, :singular, :plural, :route_key, to: :model_name
|
52
52
|
|
53
|
-
define_model_callbacks :sort, :mass_destroy, only: [
|
53
|
+
define_model_callbacks :sort, :mass_destroy, only: %i[before after]
|
54
54
|
|
55
55
|
def initialize(params = {})
|
56
56
|
@model_name = model.model_name
|
57
57
|
@current_list = config.default_index_view
|
58
58
|
@available_index_views = config.available_index_views
|
59
59
|
@sort_column = config.sort_column
|
60
|
-
@request_params = params.symbolize_keys
|
60
|
+
@request_params = params.try(:symbolize_keys) || params
|
61
61
|
self.current_list = params[:view]
|
62
62
|
end
|
63
63
|
|
@@ -183,7 +183,7 @@ module Sunrise
|
|
183
183
|
if model.respond_to?(:sunrise_search) && params[:search].present?
|
184
184
|
scope = model.sunrise_search(params[:search])
|
185
185
|
end
|
186
|
-
scope ||= model.
|
186
|
+
scope ||= model.all
|
187
187
|
|
188
188
|
scope = scope.merge(association_scope) unless parent_record.nil?
|
189
189
|
scope = scope.merge(sort_scope(params[:sort])) if params[:sort].present?
|
data/lib/sunrise/config/model.rb
CHANGED
data/lib/sunrise/engine.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'rails'
|
4
4
|
require 'sunrise'
|
5
|
+
require 'select2-rails'
|
6
|
+
require 'jquery-ui-rails'
|
5
7
|
|
6
8
|
module Sunrise
|
7
9
|
class Engine < ::Rails::Engine
|
@@ -10,6 +12,10 @@ module Sunrise
|
|
10
12
|
|
11
13
|
config.i18n.load_path += Dir[Sunrise.root_path.join('config/locales/**', '*.{rb,yml}')]
|
12
14
|
|
15
|
+
config.assets.precompile += %w[
|
16
|
+
sunrise/*
|
17
|
+
]
|
18
|
+
|
13
19
|
initializer 'sunrise.setup' do
|
14
20
|
I18n::Backend::Simple.include I18n::Backend::Pluralization
|
15
21
|
I18n::Backend::Simple.include I18n::Backend::Transliterator
|
@@ -1,16 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'cancan_namespace'
|
4
|
-
|
5
3
|
module Sunrise
|
6
4
|
module Models
|
7
5
|
class Ability
|
8
|
-
include
|
6
|
+
include CanCan::Ability
|
9
7
|
|
10
8
|
attr_accessor :context, :user
|
11
9
|
|
12
10
|
def initialize(user, context = nil)
|
13
|
-
alias_action :delete, to: :destroy
|
11
|
+
# alias_action :delete, to: :destroy
|
14
12
|
|
15
13
|
@user = (user || ::User.new) # guest user (not logged in)
|
16
14
|
@context = context
|
@@ -24,13 +22,15 @@ module Sunrise
|
|
24
22
|
|
25
23
|
def admin
|
26
24
|
can :manage, :all
|
27
|
-
can :manage, :all, context: :sunrise
|
25
|
+
# can :manage, :all, context: :sunrise
|
28
26
|
|
29
27
|
# User cannot destroy self account
|
30
|
-
cannot :destroy, ::User, id: @user.id, context: :sunrise
|
28
|
+
# cannot :destroy, ::User, id: @user.id, context: :sunrise
|
29
|
+
cannot :destroy, ::User, id: @user.id
|
31
30
|
|
32
31
|
# User cannot destroy root structure
|
33
|
-
cannot :destroy, ::Structure, structure_type_id: ::StructureType.main.id, context: :sunrise
|
32
|
+
# cannot :destroy, ::Structure, structure_type_id: ::StructureType.main.id, context: :sunrise
|
33
|
+
cannot :destroy, ::Structure, structure_type_id: ::StructureType.main.id
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
data/lib/sunrise/version.rb
CHANGED
data/sunrise-cms.gemspec
CHANGED
@@ -13,7 +13,6 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = 'Sunrise is a Open Source CMS'
|
14
14
|
s.authors = ['Igor Galeta', 'Pavlo Galeta']
|
15
15
|
s.email = 'galeta.igor@gmail.com'
|
16
|
-
s.rubyforge_project = 'sunrise-cms'
|
17
16
|
s.homepage = 'https://github.com/galetahub/sunrise'
|
18
17
|
s.license = 'MIT'
|
19
18
|
|
@@ -32,7 +31,7 @@ Gem::Specification.new do |s|
|
|
32
31
|
|
33
32
|
s.add_dependency('babosa')
|
34
33
|
s.add_dependency('cancan')
|
35
|
-
|
34
|
+
|
36
35
|
s.add_dependency('carrierwave')
|
37
36
|
s.add_dependency('galetahub-enum_field')
|
38
37
|
s.add_dependency('jquery-ui-rails', '>= 5.0.0')
|
@@ -43,7 +42,6 @@ Gem::Specification.new do |s|
|
|
43
42
|
s.add_dependency('public_activity', '>= 1.0.0')
|
44
43
|
s.add_dependency('rails-settings-cached', '>= 0.4.0')
|
45
44
|
s.add_dependency('rails-uploader')
|
46
|
-
s.add_dependency('select2-rails')
|
47
45
|
|
48
46
|
s.add_development_dependency('capybara')
|
49
47
|
s.add_development_dependency('database_cleaner')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunrise-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Galeta
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-04-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: kaminari
|
@@ -81,20 +81,6 @@ dependencies:
|
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: cancan_namespace
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '0'
|
91
|
-
type: :runtime
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '0'
|
98
84
|
- !ruby/object:Gem::Dependency
|
99
85
|
name: carrierwave
|
100
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -235,20 +221,6 @@ dependencies:
|
|
235
221
|
- - ">="
|
236
222
|
- !ruby/object:Gem::Version
|
237
223
|
version: '0'
|
238
|
-
- !ruby/object:Gem::Dependency
|
239
|
-
name: select2-rails
|
240
|
-
requirement: !ruby/object:Gem::Requirement
|
241
|
-
requirements:
|
242
|
-
- - ">="
|
243
|
-
- !ruby/object:Gem::Version
|
244
|
-
version: '0'
|
245
|
-
type: :runtime
|
246
|
-
prerelease: false
|
247
|
-
version_requirements: !ruby/object:Gem::Requirement
|
248
|
-
requirements:
|
249
|
-
- - ">="
|
250
|
-
- !ruby/object:Gem::Version
|
251
|
-
version: '0'
|
252
224
|
- !ruby/object:Gem::Dependency
|
253
225
|
name: capybara
|
254
226
|
requirement: !ruby/object:Gem::Requirement
|
@@ -362,6 +334,8 @@ files:
|
|
362
334
|
- app/assets/images/sunrise/icons/commented.svg
|
363
335
|
- app/assets/images/sunrise/icons/create.svg
|
364
336
|
- app/assets/images/sunrise/icons/destroy.svg
|
337
|
+
- app/assets/images/sunrise/icons/export.svg
|
338
|
+
- app/assets/images/sunrise/icons/import.svg
|
365
339
|
- app/assets/images/sunrise/icons/update.svg
|
366
340
|
- app/assets/images/sunrise/note_pointer.png
|
367
341
|
- app/assets/images/sunrise/page_arr_hover.png
|
@@ -446,6 +420,7 @@ files:
|
|
446
420
|
- app/views/sunrise/manager/buttons/_delete.html.erb
|
447
421
|
- app/views/sunrise/manager/buttons/_edit.html.erb
|
448
422
|
- app/views/sunrise/manager/buttons/_export.html.erb
|
423
|
+
- app/views/sunrise/manager/buttons/_import.html.erb
|
449
424
|
- app/views/sunrise/manager/buttons/_new.html.erb
|
450
425
|
- app/views/sunrise/manager/buttons/_sort.html.erb
|
451
426
|
- app/views/sunrise/manager/edit.html.erb
|
@@ -608,7 +583,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
608
583
|
- !ruby/object:Gem::Version
|
609
584
|
version: '0'
|
610
585
|
requirements: []
|
611
|
-
rubyforge_project:
|
586
|
+
rubyforge_project:
|
612
587
|
rubygems_version: 2.7.6.2
|
613
588
|
signing_key:
|
614
589
|
specification_version: 4
|