trusty-cms 7.0.7 → 7.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/Gemfile.lock +7 -4
- data/INSTALL.md +4 -2
- data/app/assets/javascripts/admin/dropdown.js +33 -12
- data/app/assets/stylesheets/admin/modules/_buttons.scss +2 -0
- data/app/assets/stylesheets/admin/partials/_forms.scss +8 -0
- data/app/controllers/admin/layouts_controller.rb +1 -1
- data/app/controllers/admin/pages_controller.rb +29 -1
- data/app/helpers/admin/node_helper.rb +20 -4
- data/app/models/menu_renderer.rb +3 -1
- data/app/models/page.rb +4 -0
- data/app/views/admin/layouts/_site_chooser.html.haml +1 -1
- data/app/views/admin/pages/_fields.html.haml +3 -0
- data/app/views/admin/pages/_previous_versions.haml +28 -0
- data/app/views/admin/pages/_search_form.html.haml +8 -0
- data/app/views/admin/pages/index.html.haml +4 -3
- data/app/views/admin/pages/search.html.haml +24 -0
- data/config/initializers/paper_trail.rb +1 -1
- data/config/locales/en.yml +2 -0
- data/config/routes.rb +1 -0
- data/lib/trusty_cms/admin_ui.rb +4 -0
- data/lib/trusty_cms/engine.rb +6 -5
- data/lib/trusty_cms/version.rb +1 -1
- data/spec/dummy/db/schema.rb +39 -18
- data/trusty_cms.gemspec +4 -1
- data/vendor/extensions/multi-site-extension/lib/multi_site/pages_controller_extensions.rb +0 -8
- data/vendor/extensions/multi-site-extension/lib/multi_site/site_chooser_helper.rb +1 -1
- data/vendor/extensions/multi-site-extension/multi_site_extension.rb +1 -0
- metadata +54 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90afffae83c31538f9db86d664a6cf86d4a29b1e910a7bd9644d795949908a8a
|
4
|
+
data.tar.gz: 2ed58dea81ef5468bf67ccbac8af93e0fee4918a4937cce840ef39846306e886
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c7197a1dde572a4b5280165ea6fcfa13be02c3830ff4bd3e5b0038d1ea4ddede69739b76f9373d575517b85fc3925022e357e0aa7efc3678de50aa5ed17faf3
|
7
|
+
data.tar.gz: 99658f3bbb7c65c3fdb2e02ddbc2eab6f6cf02b757a332211b81a154eb45e0080c3b61d93d07497d38e4d0f2daa5b74425434cf18875b4ab69358a20d70ffa92
|
data/Gemfile
CHANGED
@@ -7,9 +7,6 @@ source 'https://rubygems.org'
|
|
7
7
|
# requires trusty and therefore pulls in every
|
8
8
|
# dependency mentioned in trusty.gemspec.
|
9
9
|
|
10
|
-
gem 'paper_trail'
|
11
|
-
gem 'paper_trail-association_tracking'
|
12
|
-
gem 'psych', '5.2.2'
|
13
10
|
gem 'trustygems', '~> 0.2.0'
|
14
11
|
|
15
12
|
gemspec
|
@@ -22,8 +19,11 @@ group :development, :test do
|
|
22
19
|
gem 'file_validators'
|
23
20
|
gem 'launchy', '~> 3.0.1'
|
24
21
|
gem 'mysql2'
|
22
|
+
gem 'paper_trail', '~> 16.0.0'
|
23
|
+
gem 'paper_trail-association_tracking', '~> 2.2.1'
|
25
24
|
gem 'poltergeist', '~> 1.18.1'
|
26
25
|
gem 'pry-byebug'
|
26
|
+
gem 'psych', '5.2.2'
|
27
27
|
gem 'rails-observers'
|
28
28
|
gem 'ransack'
|
29
29
|
gem 'rspec-rails'
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
trusty-cms (7.0.
|
4
|
+
trusty-cms (7.0.9)
|
5
5
|
RedCloth (= 4.3.3)
|
6
6
|
activestorage-validator
|
7
7
|
acts_as_list (>= 0.9.5, < 1.3.0)
|
@@ -21,12 +21,15 @@ PATH
|
|
21
21
|
mini_racer
|
22
22
|
mutex_m
|
23
23
|
mysql2
|
24
|
+
paper_trail (~> 16.0.0)
|
25
|
+
paper_trail-association_tracking (~> 2.2.1)
|
26
|
+
psych (= 5.2.2)
|
24
27
|
rack (>= 2.0.1, < 3.2.0)
|
25
28
|
rack-cache (~> 1.7)
|
26
29
|
radius (~> 0.7)
|
27
30
|
rails (~> 7.0.0)
|
28
31
|
rake (< 14.0)
|
29
|
-
ransack
|
32
|
+
ransack (~> 4.2.1)
|
30
33
|
rdoc (>= 5.1, < 7.0)
|
31
34
|
roadie-rails
|
32
35
|
sass-rails
|
@@ -429,8 +432,8 @@ DEPENDENCIES
|
|
429
432
|
file_validators
|
430
433
|
launchy (~> 3.0.1)
|
431
434
|
mysql2
|
432
|
-
paper_trail
|
433
|
-
paper_trail-association_tracking
|
435
|
+
paper_trail (~> 16.0.0)
|
436
|
+
paper_trail-association_tracking (~> 2.2.1)
|
434
437
|
poltergeist (~> 1.18.1)
|
435
438
|
pry-byebug
|
436
439
|
psych (= 5.2.2)
|
data/INSTALL.md
CHANGED
@@ -14,9 +14,11 @@ From within the directory containing your TrustyCMS instance:
|
|
14
14
|
4. Run the Trusty CMS generator to get the project into shape: `rails g trusty_cms [project_name]`.
|
15
15
|
- This will ask you if you want to replace a number of existing files (like application.rb); reply Y to all.
|
16
16
|
|
17
|
-
5.
|
17
|
+
5. Add `config.extensions = [ :snippets, :clipped, :layouts, :multi_site ]` to enable them in application.rb
|
18
|
+
|
19
|
+
6. Add `config.active_record.yaml_column_permitted_classes = [Symbol, Date, Time, ActiveSupport::TimeWithZone, ActiveSupport::TimeZone]` to application.rb. This is required for pages to save previous versions.
|
18
20
|
|
19
21
|
7. Add utf8 encoding to your db.yml
|
20
22
|
|
21
|
-
|
23
|
+
8. Run `bundle exec rake db:setup`, `bundle exec rake trusty_cms:install:migrations`, then
|
22
24
|
`bundle exec rake db:bootstrap`.
|
@@ -1,26 +1,47 @@
|
|
1
1
|
(function(Dropdown, $) {
|
2
2
|
Dropdown.setup = function(link) {
|
3
|
-
var
|
4
|
-
if ($(menuToWrap).parent("div").length == 0) {
|
5
|
-
menuToWrap.wrap("<div class='dropdown_wrapper' style='position: absolute; display: none'></div>");
|
3
|
+
var menu = Dropdown.findMenu(link);
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
5
|
+
// Attach click handler to toggle dropdown
|
6
|
+
$(link).off('click').on('click', function(event) {
|
7
|
+
event.preventDefault();
|
8
|
+
event.stopPropagation();
|
9
|
+
var $link = $(this);
|
10
|
+
var $menuWrapper = $link.siblings("div.dropdown_wrapper");
|
11
|
+
|
12
|
+
if ($menuWrapper.is(':visible')) {
|
13
|
+
// If already visible, hide it
|
14
|
+
$menuWrapper.css('z-index', '').slideUp();
|
15
|
+
$link.removeClass('selected');
|
16
|
+
} else {
|
17
|
+
// Close other dropdowns
|
18
|
+
$('.dropdown_wrapper').css('z-index', '').slideUp();
|
19
|
+
$('a.dropdown').removeClass('selected');
|
20
|
+
|
21
|
+
// Show the current dropdown with priority z-index
|
22
|
+
$menuWrapper.css('z-index', '1000').slideDown();
|
23
|
+
$link.addClass('selected');
|
24
|
+
}
|
25
|
+
});
|
26
|
+
};
|
14
27
|
|
15
28
|
Dropdown.findMenu = function(link) {
|
16
29
|
var match = $(link).attr('href').match(/#(.+)$/)[1];
|
17
30
|
return $('#' + match);
|
18
|
-
}
|
31
|
+
};
|
32
|
+
|
33
|
+
// Close dropdown when clicking anywhere else
|
34
|
+
$(document).on('click', function(event) {
|
35
|
+
if (!$(event.target).closest('.dropdown_wrapper, a.dropdown').length) {
|
36
|
+
$('.dropdown_wrapper').css('z-index', '').slideUp();
|
37
|
+
$('a.dropdown').removeClass('selected');
|
38
|
+
}
|
39
|
+
});
|
19
40
|
|
20
41
|
}(window.Dropdown = window.Dropdown || {}, jQuery));
|
21
42
|
|
22
43
|
$(function () {
|
23
|
-
$('a.dropdown').each(function(){
|
44
|
+
$('a.dropdown').each(function() {
|
24
45
|
Dropdown.setup(this);
|
25
46
|
});
|
26
47
|
});
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Admin::LayoutsController < Admin::ResourceController
|
2
2
|
paginate_models
|
3
3
|
before_action :authorize_role
|
4
|
-
only_allow_access_to :index, :show, :new, :create, :edit, :update, :remove, :destroy,
|
4
|
+
only_allow_access_to :index, :show, :new, :create, :edit, :update, :remove, :destroy, :search,
|
5
5
|
when: %i[designer admin],
|
6
6
|
denied_url: { controller: 'admin/pages', action: 'index' },
|
7
7
|
denied_message: 'You must have at least editor privileges to perform this action.'
|
@@ -23,10 +23,19 @@ class Admin::PagesController < Admin::ResourceController
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def index
|
26
|
-
|
26
|
+
set_site_and_homepage
|
27
|
+
@q = initialize_search
|
27
28
|
response_for :plural
|
28
29
|
end
|
29
30
|
|
31
|
+
def search
|
32
|
+
@site_id = params[:site_id] || Page.current_site.id
|
33
|
+
@q = initialize_search
|
34
|
+
|
35
|
+
@pages = fetch_search_results if search_title_present?
|
36
|
+
render
|
37
|
+
end
|
38
|
+
|
30
39
|
def new
|
31
40
|
assets = Asset.order('created_at DESC')
|
32
41
|
@term = assets.ransack(params[:search] || '')
|
@@ -67,6 +76,25 @@ class Admin::PagesController < Admin::ResourceController
|
|
67
76
|
@page = Page.find(params[:id])
|
68
77
|
end
|
69
78
|
|
79
|
+
def set_site_and_homepage
|
80
|
+
@site ||= Page.current_site
|
81
|
+
@homepage = @site&.homepage || Page.homepage
|
82
|
+
@site_id = @site&.id
|
83
|
+
end
|
84
|
+
|
85
|
+
def initialize_search
|
86
|
+
Page.ransack(params[:search] || '')
|
87
|
+
end
|
88
|
+
|
89
|
+
def fetch_search_results
|
90
|
+
@title = params.dig(:search, :title)
|
91
|
+
Page.ransack(title_cont: @title, site_id_eq: @site_id).result
|
92
|
+
end
|
93
|
+
|
94
|
+
def search_title_present?
|
95
|
+
params.dig(:search, :title).present?
|
96
|
+
end
|
97
|
+
|
70
98
|
def validation_error(e)
|
71
99
|
flash[:error] = e.message
|
72
100
|
render :new
|
@@ -7,13 +7,15 @@ module Admin::NodeHelper
|
|
7
7
|
|
8
8
|
def render_node(page, index, parent_index = nil, simple = false)
|
9
9
|
@current_node = prepare_page(page)
|
10
|
-
|
11
|
-
@rendered_html += (render partial: 'admin/pages/node',
|
12
|
-
locals: { level: index, index: index, parent_index: parent_index,
|
13
|
-
page: page, simple: simple, branch: (page.children.count.positive?) })
|
10
|
+
@rendered_html += render_partial(page, index:, parent_index:, simple:)
|
14
11
|
index
|
15
12
|
end
|
16
13
|
|
14
|
+
def render_search_node(page)
|
15
|
+
@current_node = prepare_page(page)
|
16
|
+
@rendered_html = render_partial(page, index: 0, parent_index: nil, simple: false)
|
17
|
+
end
|
18
|
+
|
17
19
|
def prepare_page(page)
|
18
20
|
page.extend MenuRenderer
|
19
21
|
page.view = self
|
@@ -90,4 +92,18 @@ module Admin::NodeHelper
|
|
90
92
|
alt: '', title: '',
|
91
93
|
style: 'display: none;')
|
92
94
|
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def render_partial(page, index:, parent_index:, simple:)
|
99
|
+
render partial: 'admin/pages/node',
|
100
|
+
locals: {
|
101
|
+
level: index,
|
102
|
+
index: index,
|
103
|
+
parent_index: parent_index,
|
104
|
+
page: page,
|
105
|
+
simple: simple,
|
106
|
+
branch: page.children.count.positive?,
|
107
|
+
}
|
108
|
+
end
|
93
109
|
end
|
data/app/models/menu_renderer.rb
CHANGED
@@ -62,7 +62,9 @@ module MenuRenderer
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def menu_list
|
65
|
-
view.content_tag :
|
65
|
+
view.content_tag :div, class: 'dropdown_wrapper', style: 'position: absolute; display: none' do
|
66
|
+
view.content_tag :ul, menu_items.join.html_safe, class: 'menu', id: "allowed_children_#{id}"
|
67
|
+
end
|
66
68
|
end
|
67
69
|
|
68
70
|
def remove_link
|
data/app/models/page.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
- if current_user.scoped_site? && defined?(Site) && defined?(controller) && controller.sited_model? &&
|
1
|
+
- if current_user.scoped_site? && defined?(Site) && defined?(controller) && controller.sited_model? && Site.several?
|
2
2
|
.site_chooser
|
3
3
|
%ul.nav
|
4
4
|
%li
|
@@ -30,6 +30,9 @@
|
|
30
30
|
= render :partial => 'admin/page_parts/page_part', :collection => @page.parts
|
31
31
|
= render_region :parts_bottom, :locals => {:f => fields}
|
32
32
|
|
33
|
+
#previous-versions
|
34
|
+
= render :partial => 'admin/pages/previous_versions'
|
35
|
+
|
33
36
|
.set
|
34
37
|
- render_region :layout, :locals => {:f => fields} do |layout|
|
35
38
|
- layout.edit_layout do
|
@@ -0,0 +1,28 @@
|
|
1
|
+
%fieldset
|
2
|
+
%h4
|
3
|
+
%i.fas.fa-clock-rotate-left
|
4
|
+
Previous Versions
|
5
|
+
|
6
|
+
- if @versions.present?
|
7
|
+
%section
|
8
|
+
%table
|
9
|
+
%thead
|
10
|
+
%tr
|
11
|
+
%th Date Updated
|
12
|
+
%th Time Updated
|
13
|
+
%th Updated By
|
14
|
+
%th Action
|
15
|
+
%tbody{ :id => 'versions-table' }
|
16
|
+
- @versions.each do |version|
|
17
|
+
%tr
|
18
|
+
%td= version[:update_date]
|
19
|
+
%td= version[:update_time]
|
20
|
+
%td= version[:updated_by]
|
21
|
+
%td
|
22
|
+
= link_to 'Restore',
|
23
|
+
restore_version_admin_page_path(@page.id, version_index: version[:index]),
|
24
|
+
method: :put,
|
25
|
+
data: { confirm: 'Are you sure you want to restore this version?' }
|
26
|
+
- else
|
27
|
+
%section
|
28
|
+
%p No previous versions are available.
|
@@ -0,0 +1,8 @@
|
|
1
|
+
= search_form_for @q, url: search_admin_pages_path, html: { method: :get, class: 'search-form' } do |f|
|
2
|
+
= hidden_field_tag :site_id, @site_id
|
3
|
+
.page-search
|
4
|
+
%i.fas.fa-search
|
5
|
+
= f.search_field :title, value: title, placeholder: 'Search by Page Title', id: 'search-input'
|
6
|
+
%input.button{ type: 'submit', value: 'Search' }
|
7
|
+
- if show_view_all_button
|
8
|
+
= link_to t("view_all_pages"), admin_pages_path, class: 'button'
|
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
.outset
|
4
4
|
= render_region :top
|
5
|
-
|
5
|
+
= render 'search_form', title: nil, show_view_all_button: false
|
6
|
+
%table.index.tablesaw#pages{ :summary => t('page_hierarchy') }
|
6
7
|
%thead
|
7
8
|
%tr
|
8
9
|
- render_region :sitemap_head do |sitemap_head|
|
@@ -17,13 +18,13 @@
|
|
17
18
|
= render_nodes(@homepage, 0).html_safe
|
18
19
|
- else
|
19
20
|
%tr.sortable
|
20
|
-
%td.empty{:colspan => admin.page.index.node.length}= t('no_pages')
|
21
|
+
%td.empty{ :colspan => admin.page.index.node.length }= t('no_pages')
|
21
22
|
= render_region :bottom
|
22
23
|
|
23
24
|
- unless @homepage
|
24
25
|
#actions
|
25
26
|
%ul
|
26
27
|
%li
|
27
|
-
= link_to
|
28
|
+
= link_to admin_pages_path, :class => 'action_button' do
|
28
29
|
%i.fas.fa-plus-circle
|
29
30
|
= t("new_homepage")
|
@@ -0,0 +1,24 @@
|
|
1
|
+
- @page_title = t('pages') + ' - ' + default_page_title
|
2
|
+
|
3
|
+
.outset
|
4
|
+
= render_region :top
|
5
|
+
= render 'search_form', title: @title, show_view_all_button: true
|
6
|
+
%table.index.tablesaw#pages{ :summary => t('page_hierarchy') }
|
7
|
+
%thead
|
8
|
+
%tr
|
9
|
+
- render_region :sitemap_head do |sitemap_head|
|
10
|
+
- sitemap_head.title_column_header do
|
11
|
+
%th.name= t('page')
|
12
|
+
- sitemap_head.status_column_header do
|
13
|
+
%th.status= t('status')
|
14
|
+
- sitemap_head.actions_column_header do
|
15
|
+
%th.actions= t('modify')
|
16
|
+
%tbody
|
17
|
+
- if @pages.present?
|
18
|
+
- @pages.each do |page|
|
19
|
+
= render_search_node(page).html_safe
|
20
|
+
- else
|
21
|
+
%tr.sortable
|
22
|
+
%td.empty{ :colspan => admin.page.index.node.length }= t('no_pages_found')
|
23
|
+
|
24
|
+
= render_region :bottom
|
data/config/locales/en.yml
CHANGED
@@ -216,6 +216,7 @@ en:
|
|
216
216
|
'no': 'No'
|
217
217
|
no_layouts: 'No Layouts'
|
218
218
|
no_pages: 'No Pages'
|
219
|
+
no_pages_found: 'No Pages Found'
|
219
220
|
normal_page: 'Normal Page'
|
220
221
|
notes: 'Notes'
|
221
222
|
optional: 'Optional'
|
@@ -326,6 +327,7 @@ en:
|
|
326
327
|
users_controller:
|
327
328
|
cannot_delete_self: 'You cannot delete yourself.'
|
328
329
|
version: 'Version'
|
330
|
+
view_all_pages: 'View All Pages'
|
329
331
|
view_site: 'View Site'
|
330
332
|
warning: 'Warning'
|
331
333
|
website: 'Website'
|
data/config/routes.rb
CHANGED
@@ -14,6 +14,7 @@ TrustyCms::Application.routes.draw do
|
|
14
14
|
resources :children, controller: 'pages'
|
15
15
|
get 'remove', on: :member
|
16
16
|
put 'restore/:version_index', on: :member, to: 'pages#restore', as: :restore_version
|
17
|
+
get 'search', on: :collection, to: 'pages#search', as: :search
|
17
18
|
end
|
18
19
|
resources :layouts do
|
19
20
|
get 'remove', on: :member
|
data/lib/trusty_cms/admin_ui.rb
CHANGED
@@ -177,6 +177,10 @@ module TrustyCms
|
|
177
177
|
index.sitemap_head.concat %w{title_column_header status_column_header actions_column_header}
|
178
178
|
index.node.concat %w{title_column status_column actions_column}
|
179
179
|
end
|
180
|
+
page.search = RegionSet.new do |search|
|
181
|
+
search.sitemap_head.concat %w{title_column_header status_column_header actions_column_header}
|
182
|
+
search.node.concat %w{title_column status_column actions_column}
|
183
|
+
end
|
180
184
|
page.remove = page.children = page.index
|
181
185
|
page.new = page._part = page.edit
|
182
186
|
end
|
data/lib/trusty_cms/engine.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
require 'ckeditor'
|
2
|
+
require 'devise'
|
3
|
+
require 'ransack'
|
4
|
+
require 'paper_trail'
|
5
|
+
require 'paper_trail-association_tracking'
|
6
|
+
|
1
7
|
module TrustyCms
|
2
8
|
class Engine < Rails::Engine
|
3
9
|
isolate_namespace TrustyCms
|
@@ -19,8 +25,3 @@ module TrustyCms
|
|
19
25
|
end
|
20
26
|
end
|
21
27
|
end
|
22
|
-
|
23
|
-
require 'ckeditor'
|
24
|
-
require 'devise'
|
25
|
-
require 'ransack'
|
26
|
-
|
data/lib/trusty_cms/version.rb
CHANGED
data/spec/dummy/db/schema.rb
CHANGED
@@ -10,8 +10,8 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema[7.0].define(version:
|
14
|
-
create_table "active_storage_attachments", charset: "
|
13
|
+
ActiveRecord::Schema[7.0].define(version: 2025_01_03_191134) do
|
14
|
+
create_table "active_storage_attachments", charset: "utf8", force: :cascade do |t|
|
15
15
|
t.string "name", null: false
|
16
16
|
t.string "record_type", null: false
|
17
17
|
t.bigint "record_id", null: false
|
@@ -21,7 +21,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
21
21
|
t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
|
22
22
|
end
|
23
23
|
|
24
|
-
create_table "active_storage_blobs", charset: "
|
24
|
+
create_table "active_storage_blobs", charset: "utf8", force: :cascade do |t|
|
25
25
|
t.string "key", null: false
|
26
26
|
t.string "filename", null: false
|
27
27
|
t.string "content_type"
|
@@ -33,13 +33,13 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
33
33
|
t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
|
34
34
|
end
|
35
35
|
|
36
|
-
create_table "active_storage_variant_records", charset: "
|
36
|
+
create_table "active_storage_variant_records", charset: "utf8", force: :cascade do |t|
|
37
37
|
t.bigint "blob_id", null: false
|
38
38
|
t.string "variation_digest", null: false
|
39
39
|
t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
|
40
40
|
end
|
41
41
|
|
42
|
-
create_table "admins", charset: "
|
42
|
+
create_table "admins", charset: "utf8", force: :cascade do |t|
|
43
43
|
t.string "email", default: "", null: false
|
44
44
|
t.string "encrypted_password", default: "", null: false
|
45
45
|
t.string "reset_password_token"
|
@@ -69,14 +69,14 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
69
69
|
t.datetime "updated_at", precision: nil, null: false
|
70
70
|
end
|
71
71
|
|
72
|
-
create_table "admins_sites", charset: "
|
72
|
+
create_table "admins_sites", charset: "utf8", force: :cascade do |t|
|
73
73
|
t.integer "admin_id", null: false
|
74
74
|
t.integer "site_id", null: false
|
75
75
|
t.index ["admin_id"], name: "index_admins_sites_on_admin_id"
|
76
76
|
t.index ["site_id"], name: "index_admins_sites_on_site_id"
|
77
77
|
end
|
78
78
|
|
79
|
-
create_table "assets", charset: "
|
79
|
+
create_table "assets", charset: "utf8", force: :cascade do |t|
|
80
80
|
t.string "caption"
|
81
81
|
t.string "title"
|
82
82
|
t.string "asset_file_name"
|
@@ -92,19 +92,19 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
92
92
|
t.string "original_extension"
|
93
93
|
end
|
94
94
|
|
95
|
-
create_table "config", charset: "
|
95
|
+
create_table "config", charset: "utf8", force: :cascade do |t|
|
96
96
|
t.string "key", limit: 40, default: "", null: false
|
97
97
|
t.string "value", default: ""
|
98
98
|
t.index ["key"], name: "key", unique: true
|
99
99
|
end
|
100
100
|
|
101
|
-
create_table "extension_meta", charset: "
|
101
|
+
create_table "extension_meta", charset: "utf8", force: :cascade do |t|
|
102
102
|
t.string "name"
|
103
103
|
t.integer "schema_version", default: 0
|
104
104
|
t.boolean "enabled", default: true
|
105
105
|
end
|
106
106
|
|
107
|
-
create_table "layouts", charset: "
|
107
|
+
create_table "layouts", charset: "utf8", force: :cascade do |t|
|
108
108
|
t.string "name", limit: 100
|
109
109
|
t.text "content"
|
110
110
|
t.datetime "created_at", precision: nil
|
@@ -116,20 +116,20 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
116
116
|
t.integer "site_id"
|
117
117
|
end
|
118
118
|
|
119
|
-
create_table "page_attachments", charset: "
|
119
|
+
create_table "page_attachments", charset: "utf8", force: :cascade do |t|
|
120
120
|
t.integer "asset_id"
|
121
121
|
t.integer "page_id"
|
122
122
|
t.integer "position"
|
123
123
|
end
|
124
124
|
|
125
|
-
create_table "page_fields", charset: "
|
125
|
+
create_table "page_fields", charset: "utf8", force: :cascade do |t|
|
126
126
|
t.integer "page_id"
|
127
127
|
t.string "name"
|
128
128
|
t.string "content"
|
129
129
|
t.index ["page_id", "name", "content"], name: "index_page_fields_on_page_id_and_name_and_content"
|
130
130
|
end
|
131
131
|
|
132
|
-
create_table "page_parts", charset: "
|
132
|
+
create_table "page_parts", charset: "utf8", force: :cascade do |t|
|
133
133
|
t.string "name", limit: 100
|
134
134
|
t.string "filter_id", limit: 25
|
135
135
|
t.text "content", size: :medium
|
@@ -137,7 +137,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
137
137
|
t.index ["page_id", "name"], name: "parts_by_page"
|
138
138
|
end
|
139
139
|
|
140
|
-
create_table "pages", charset: "
|
140
|
+
create_table "pages", charset: "utf8", force: :cascade do |t|
|
141
141
|
t.string "title"
|
142
142
|
t.string "slug", limit: 100
|
143
143
|
t.string "breadcrumb", limit: 160
|
@@ -162,7 +162,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
162
162
|
t.index ["virtual", "status_id"], name: "pages_published"
|
163
163
|
end
|
164
164
|
|
165
|
-
create_table "sessions", charset: "
|
165
|
+
create_table "sessions", charset: "utf8", force: :cascade do |t|
|
166
166
|
t.string "session_id"
|
167
167
|
t.text "data"
|
168
168
|
t.datetime "updated_at", precision: nil
|
@@ -170,7 +170,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
170
170
|
t.index ["updated_at"], name: "index_sessions_on_updated_at"
|
171
171
|
end
|
172
172
|
|
173
|
-
create_table "sites", charset: "
|
173
|
+
create_table "sites", charset: "utf8", force: :cascade do |t|
|
174
174
|
t.string "name"
|
175
175
|
t.string "domain"
|
176
176
|
t.integer "homepage_id"
|
@@ -184,7 +184,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
184
184
|
t.string "base_domain"
|
185
185
|
end
|
186
186
|
|
187
|
-
create_table "snippets", charset: "
|
187
|
+
create_table "snippets", charset: "utf8", force: :cascade do |t|
|
188
188
|
t.string "name", limit: 100, default: "", null: false
|
189
189
|
t.string "filter_id", limit: 25
|
190
190
|
t.text "content"
|
@@ -197,7 +197,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
197
197
|
t.index ["name", "site_id"], name: "name_site_id", unique: true
|
198
198
|
end
|
199
199
|
|
200
|
-
create_table "users", charset: "
|
200
|
+
create_table "users", charset: "utf8", force: :cascade do |t|
|
201
201
|
t.string "name", limit: 100
|
202
202
|
t.string "email"
|
203
203
|
t.string "login", limit: 40, default: "", null: false
|
@@ -218,6 +218,27 @@ ActiveRecord::Schema[7.0].define(version: 2024_11_08_172942) do
|
|
218
218
|
t.datetime "password_reset_sent_at", precision: nil
|
219
219
|
end
|
220
220
|
|
221
|
+
create_table "version_associations", charset: "utf8", force: :cascade do |t|
|
222
|
+
t.integer "version_id"
|
223
|
+
t.string "foreign_key_name", null: false
|
224
|
+
t.integer "foreign_key_id"
|
225
|
+
t.string "foreign_type"
|
226
|
+
t.index ["foreign_key_name", "foreign_key_id", "foreign_type"], name: "index_version_associations_on_foreign_key"
|
227
|
+
t.index ["version_id"], name: "index_version_associations_on_version_id"
|
228
|
+
end
|
229
|
+
|
230
|
+
create_table "versions", charset: "utf8mb4", force: :cascade do |t|
|
231
|
+
t.string "whodunnit"
|
232
|
+
t.datetime "created_at"
|
233
|
+
t.bigint "item_id", null: false
|
234
|
+
t.string "item_type", limit: 191, null: false
|
235
|
+
t.string "event", null: false
|
236
|
+
t.text "object", size: :long
|
237
|
+
t.integer "transaction_id"
|
238
|
+
t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
|
239
|
+
t.index ["transaction_id"], name: "index_versions_on_transaction_id"
|
240
|
+
end
|
241
|
+
|
221
242
|
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
|
222
243
|
add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
|
223
244
|
end
|
data/trusty_cms.gemspec
CHANGED
@@ -43,12 +43,15 @@ a general purpose content management system--not merely a blogging engine.'
|
|
43
43
|
s.add_dependency 'mini_racer'
|
44
44
|
s.add_dependency 'mutex_m'
|
45
45
|
s.add_dependency 'mysql2'
|
46
|
+
s.add_dependency 'paper_trail', '~> 16.0.0'
|
47
|
+
s.add_dependency 'paper_trail-association_tracking', '~> 2.2.1'
|
48
|
+
s.add_dependency 'psych', '5.2.2'
|
46
49
|
s.add_dependency 'rack', '>= 2.0.1', '< 3.2.0'
|
47
50
|
s.add_dependency 'rack-cache', '~> 1.7'
|
48
51
|
s.add_dependency 'radius', '~> 0.7'
|
49
52
|
s.add_dependency 'rails', '~> 7.0.0'
|
50
53
|
s.add_dependency 'rake', '< 14.0'
|
51
|
-
s.add_dependency 'ransack'
|
54
|
+
s.add_dependency 'ransack', '~> 4.2.1'
|
52
55
|
s.add_dependency 'rdoc', '>= 5.1', '< 7.0'
|
53
56
|
s.add_dependency 'RedCloth', '4.3.3'
|
54
57
|
s.add_dependency 'roadie-rails'
|
@@ -5,7 +5,6 @@ module MultiSite::PagesControllerExtensions
|
|
5
5
|
alias_method :discover_current_site, :discover_current_site_with_root
|
6
6
|
|
7
7
|
alias_method :index_without_site, :index
|
8
|
-
alias_method :index, :index_with_site
|
9
8
|
|
10
9
|
alias_method :continue_url_without_site, :continue_url
|
11
10
|
alias_method :continue_url, :continue_url_with_site
|
@@ -37,13 +36,6 @@ module MultiSite::PagesControllerExtensions
|
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
|
-
def index_with_site
|
41
|
-
@site ||= Page.current_site
|
42
|
-
@homepage ||= @site.homepage if @site
|
43
|
-
@homepage ||= Page.homepage
|
44
|
-
response_for :plural
|
45
|
-
end
|
46
|
-
|
47
39
|
def remove_with_back
|
48
40
|
session[:came_from] = request.env["HTTP_REFERER"]
|
49
41
|
remove_without_back
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module MultiSite::SiteChooserHelper
|
2
2
|
|
3
3
|
def sites_chooser_thing
|
4
|
-
return "" unless current_user.admin? && defined?(Site) && defined?(controller) && controller.sited_model? &&
|
4
|
+
return "" unless current_user.admin? && defined?(Site) && defined?(controller) && controller.sited_model? && Site.several?
|
5
5
|
options = Site.all.map { |site| "<li>" + link_to(site.name, "#{request.path}?site_id=#{site.id}", :class => site == current_site ? 'fg' : '') + "</li>" }.join("")
|
6
6
|
chooser = %{<div id="site_chooser">}
|
7
7
|
# chooser << link_to("sites", admin_sites_url, {:id => 'show_site_list', :class => 'expandable'})
|
@@ -24,6 +24,7 @@ class MultiSiteExtension < TrustyCms::Extension
|
|
24
24
|
admin.layouts.index.add(:before_nav, "admin/layouts/site_chooser")
|
25
25
|
admin.pages.index.add(:before_nav, "admin/layouts/site_chooser")
|
26
26
|
admin.snippets.index.add(:before_nav, "admin/layouts/site_chooser")
|
27
|
+
admin.pages.search.add(:before_nav, "admin/layouts/site_chooser")
|
27
28
|
Layout.send :is_site_scoped
|
28
29
|
Snippet.send :is_site_scoped
|
29
30
|
User.send :is_site_scoped, :shareable => true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trusty-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TrustyCms CMS dev team
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-01-
|
11
|
+
date: 2025-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activestorage-validator
|
@@ -292,6 +292,48 @@ dependencies:
|
|
292
292
|
- - ">="
|
293
293
|
- !ruby/object:Gem::Version
|
294
294
|
version: '0'
|
295
|
+
- !ruby/object:Gem::Dependency
|
296
|
+
name: paper_trail
|
297
|
+
requirement: !ruby/object:Gem::Requirement
|
298
|
+
requirements:
|
299
|
+
- - "~>"
|
300
|
+
- !ruby/object:Gem::Version
|
301
|
+
version: 16.0.0
|
302
|
+
type: :runtime
|
303
|
+
prerelease: false
|
304
|
+
version_requirements: !ruby/object:Gem::Requirement
|
305
|
+
requirements:
|
306
|
+
- - "~>"
|
307
|
+
- !ruby/object:Gem::Version
|
308
|
+
version: 16.0.0
|
309
|
+
- !ruby/object:Gem::Dependency
|
310
|
+
name: paper_trail-association_tracking
|
311
|
+
requirement: !ruby/object:Gem::Requirement
|
312
|
+
requirements:
|
313
|
+
- - "~>"
|
314
|
+
- !ruby/object:Gem::Version
|
315
|
+
version: 2.2.1
|
316
|
+
type: :runtime
|
317
|
+
prerelease: false
|
318
|
+
version_requirements: !ruby/object:Gem::Requirement
|
319
|
+
requirements:
|
320
|
+
- - "~>"
|
321
|
+
- !ruby/object:Gem::Version
|
322
|
+
version: 2.2.1
|
323
|
+
- !ruby/object:Gem::Dependency
|
324
|
+
name: psych
|
325
|
+
requirement: !ruby/object:Gem::Requirement
|
326
|
+
requirements:
|
327
|
+
- - '='
|
328
|
+
- !ruby/object:Gem::Version
|
329
|
+
version: 5.2.2
|
330
|
+
type: :runtime
|
331
|
+
prerelease: false
|
332
|
+
version_requirements: !ruby/object:Gem::Requirement
|
333
|
+
requirements:
|
334
|
+
- - '='
|
335
|
+
- !ruby/object:Gem::Version
|
336
|
+
version: 5.2.2
|
295
337
|
- !ruby/object:Gem::Dependency
|
296
338
|
name: rack
|
297
339
|
requirement: !ruby/object:Gem::Requirement
|
@@ -372,16 +414,16 @@ dependencies:
|
|
372
414
|
name: ransack
|
373
415
|
requirement: !ruby/object:Gem::Requirement
|
374
416
|
requirements:
|
375
|
-
- - "
|
417
|
+
- - "~>"
|
376
418
|
- !ruby/object:Gem::Version
|
377
|
-
version:
|
419
|
+
version: 4.2.1
|
378
420
|
type: :runtime
|
379
421
|
prerelease: false
|
380
422
|
version_requirements: !ruby/object:Gem::Requirement
|
381
423
|
requirements:
|
382
|
-
- - "
|
424
|
+
- - "~>"
|
383
425
|
- !ruby/object:Gem::Version
|
384
|
-
version:
|
426
|
+
version: 4.2.1
|
385
427
|
- !ruby/object:Gem::Dependency
|
386
428
|
name: rdoc
|
387
429
|
requirement: !ruby/object:Gem::Requirement
|
@@ -790,11 +832,14 @@ files:
|
|
790
832
|
- app/views/admin/pages/_meta_row.html.haml
|
791
833
|
- app/views/admin/pages/_node.html.haml
|
792
834
|
- app/views/admin/pages/_popups.html.haml
|
835
|
+
- app/views/admin/pages/_previous_versions.haml
|
836
|
+
- app/views/admin/pages/_search_form.html.haml
|
793
837
|
- app/views/admin/pages/children.html.haml
|
794
838
|
- app/views/admin/pages/edit.html.haml
|
795
839
|
- app/views/admin/pages/index.html.haml
|
796
840
|
- app/views/admin/pages/new.html.haml
|
797
841
|
- app/views/admin/pages/remove.html.haml
|
842
|
+
- app/views/admin/pages/search.html.haml
|
798
843
|
- app/views/admin/preferences/edit.html.haml
|
799
844
|
- app/views/admin/references/_tag_reference.haml
|
800
845
|
- app/views/admin/references/filters.haml
|
@@ -1164,7 +1209,7 @@ homepage: https://github.com/pgharts/trusty-cms
|
|
1164
1209
|
licenses:
|
1165
1210
|
- MIT
|
1166
1211
|
metadata: {}
|
1167
|
-
post_install_message:
|
1212
|
+
post_install_message:
|
1168
1213
|
rdoc_options:
|
1169
1214
|
- "--title"
|
1170
1215
|
- TrustyCms -- Content Management You Can Trust
|
@@ -1213,7 +1258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1213
1258
|
version: 1.3.1
|
1214
1259
|
requirements: []
|
1215
1260
|
rubygems_version: 3.2.33
|
1216
|
-
signing_key:
|
1261
|
+
signing_key:
|
1217
1262
|
specification_version: 4
|
1218
1263
|
summary: A no-fluff content management system designed for small teams.
|
1219
1264
|
test_files:
|