lato_blog 2.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +27 -0
- data/Rakefile +5 -0
- data/app/assets/config/lato_blog_manifest.js +2 -0
- data/app/assets/javascripts/lato_blog/application.js +19 -0
- data/app/assets/javascripts/lato_blog/initializers/Fields.js +56 -0
- data/app/assets/javascripts/lato_blog/initializers/Posts.js +54 -0
- data/app/assets/stylesheets/lato_blog/_helpers.scss +37 -0
- data/app/assets/stylesheets/lato_blog/application.scss +20 -0
- data/app/assets/stylesheets/lato_blog/fields/_composed.scss +7 -0
- data/app/assets/stylesheets/lato_blog/fields/_datetime.scss +0 -0
- data/app/assets/stylesheets/lato_blog/fields/_editor.scss +3 -0
- data/app/assets/stylesheets/lato_blog/fields/_fields.scss +8 -0
- data/app/assets/stylesheets/lato_blog/fields/_general.scss +9 -0
- data/app/assets/stylesheets/lato_blog/fields/_geolocalization.scss +3 -0
- data/app/assets/stylesheets/lato_blog/fields/_image.scss +3 -0
- data/app/assets/stylesheets/lato_blog/fields/_relay.scss +121 -0
- data/app/assets/stylesheets/lato_blog/fields/_text.scss +3 -0
- data/app/assets/stylesheets/lato_blog/pages/_categories.scss +18 -0
- data/app/assets/stylesheets/lato_blog/pages/_pages.scss +2 -0
- data/app/assets/stylesheets/lato_blog/pages/_posts.scss +25 -0
- data/app/assets/stylesheets/lato_blog/theme.scss.erb +12 -0
- data/app/assets/stylesheets/lato_blog/widgets/_switchlang.scss +3 -0
- data/app/assets/stylesheets/lato_blog/widgets/_widgets.scss +1 -0
- data/app/controllers/lato_blog/api/api_controller.rb +5 -0
- data/app/controllers/lato_blog/api/categories_controller.rb +51 -0
- data/app/controllers/lato_blog/api/posts_controller.rb +93 -0
- data/app/controllers/lato_blog/application_controller.rb +13 -0
- data/app/controllers/lato_blog/back/back_controller.rb +45 -0
- data/app/controllers/lato_blog/back/categories_controller.rb +141 -0
- data/app/controllers/lato_blog/back/post_fields_controller.rb +86 -0
- data/app/controllers/lato_blog/back/posts_controller.rb +340 -0
- data/app/controllers/lato_blog/doc/doc_controller.rb +16 -0
- data/app/controllers/lato_blog/doc/fields_controller.rb +19 -0
- data/app/controllers/lato_blog/doc/general_controller.rb +11 -0
- data/app/helpers/lato_blog/application_helper.rb +13 -0
- data/app/helpers/lato_blog/fields_helper.rb +100 -0
- data/app/jobs/lato_blog/application_job.rb +4 -0
- data/app/mailers/lato_blog/application_mailer.rb +6 -0
- data/app/models/lato_blog/application_record.rb +5 -0
- data/app/models/lato_blog/category.rb +119 -0
- data/app/models/lato_blog/category/entity_helpers.rb +55 -0
- data/app/models/lato_blog/category/serializer_helpers.rb +66 -0
- data/app/models/lato_blog/category_parent.rb +9 -0
- data/app/models/lato_blog/category_post.rb +35 -0
- data/app/models/lato_blog/post.rb +112 -0
- data/app/models/lato_blog/post/entity_helpers.rb +42 -0
- data/app/models/lato_blog/post/serializer_helpers.rb +85 -0
- data/app/models/lato_blog/post_field.rb +50 -0
- data/app/models/lato_blog/post_field/entity_helpers.rb +5 -0
- data/app/models/lato_blog/post_field/serializer_helpers.rb +127 -0
- data/app/models/lato_blog/post_parent.rb +20 -0
- data/app/views/lato_blog/back/back/switch_current_language.js +2 -0
- data/app/views/lato_blog/back/categories/edit.html.erb +44 -0
- data/app/views/lato_blog/back/categories/index.html.erb +18 -0
- data/app/views/lato_blog/back/categories/new.html.erb +40 -0
- data/app/views/lato_blog/back/categories/shared/_form.html.erb +38 -0
- data/app/views/lato_blog/back/categories/shared/edit/_edit_child_tree.html.erb +23 -0
- data/app/views/lato_blog/back/categories/shared/edit/_edit_child_tree_level.html.erb +7 -0
- data/app/views/lato_blog/back/categories/shared/edit/_edit_informations.html.erb +24 -0
- data/app/views/lato_blog/back/categories/shared/edit/_edit_languages.html.erb +38 -0
- data/app/views/lato_blog/back/categories/shared/new/_new_informations.html.erb +21 -0
- data/app/views/lato_blog/back/post_fields/create_relay_field.js.erb +14 -0
- data/app/views/lato_blog/back/post_fields/destroy_relay_field.js.erb +14 -0
- data/app/views/lato_blog/back/post_fields/fields/_composed.html.erb +24 -0
- data/app/views/lato_blog/back/post_fields/fields/_datetime.html.erb +17 -0
- data/app/views/lato_blog/back/post_fields/fields/_editor.html.erb +17 -0
- data/app/views/lato_blog/back/post_fields/fields/_geolocalization.html.erb +22 -0
- data/app/views/lato_blog/back/post_fields/fields/_image.html.erb +18 -0
- data/app/views/lato_blog/back/post_fields/fields/_relay.html.erb +39 -0
- data/app/views/lato_blog/back/post_fields/fields/_text.html.erb +17 -0
- data/app/views/lato_blog/back/post_fields/index.html.erb +28 -0
- data/app/views/lato_blog/back/posts/edit.html.erb +48 -0
- data/app/views/lato_blog/back/posts/index.html.erb +38 -0
- data/app/views/lato_blog/back/posts/new.html.erb +40 -0
- data/app/views/lato_blog/back/posts/shared/_fields.html.erb +13 -0
- data/app/views/lato_blog/back/posts/shared/_form.html.erb +69 -0
- data/app/views/lato_blog/back/posts/shared/edit/_edit_categories.html.erb +36 -0
- data/app/views/lato_blog/back/posts/shared/edit/_edit_informations.html.erb +26 -0
- data/app/views/lato_blog/back/posts/shared/edit/_edit_languages.html.erb +40 -0
- data/app/views/lato_blog/back/posts/shared/edit/_edit_pubblication_datetime.html.erb +24 -0
- data/app/views/lato_blog/back/posts/shared/edit/_edit_status_switch.html.erb +27 -0
- data/app/views/lato_blog/back/posts/shared/index/_index.html.erb +28 -0
- data/app/views/lato_blog/back/posts/shared/index/_index_informations.html.erb +37 -0
- data/app/views/lato_blog/back/posts/shared/index/_index_status_switch.html.erb +29 -0
- data/app/views/lato_blog/back/posts/shared/new/_new_informations.html.erb +21 -0
- data/app/views/lato_blog/doc/doc/index.html.erb +83 -0
- data/app/views/lato_blog/doc/fields/composed.html.erb +87 -0
- data/app/views/lato_blog/doc/fields/datetime.html.erb +0 -0
- data/app/views/lato_blog/doc/fields/editor.html.erb +1 -0
- data/app/views/lato_blog/doc/fields/geolocalization.html.erb +1 -0
- data/app/views/lato_blog/doc/fields/image.html.erb +70 -0
- data/app/views/lato_blog/doc/fields/relay.html.erb +87 -0
- data/app/views/lato_blog/doc/fields/text.html.erb +70 -0
- data/app/views/lato_blog/doc/general/api.html.erb +0 -0
- data/app/views/lato_blog/doc/general/installation.html.erb +49 -0
- data/app/views/lato_blog/doc/general/personalization.html.erb +0 -0
- data/app/views/lato_blog/partials/_relay_destroy_button.html.erb +5 -0
- data/app/views/lato_blog/widgets/_switchlang.html.erb +20 -0
- data/config/configs.yml +109 -0
- data/config/initializers/assets.rb +4 -0
- data/config/initializers/init_system.rb +22 -0
- data/config/languages/default.yml +87 -0
- data/config/languages/it.yml +87 -0
- data/config/routes.rb +16 -0
- data/config/routes/api.rb +11 -0
- data/config/routes/back.rb +17 -0
- data/config/routes/doc.rb +19 -0
- data/db/migrate/20170504222008_create_lato_blog_posts.rb +19 -0
- data/db/migrate/20170504223521_create_lato_blog_post_parents.rb +9 -0
- data/db/migrate/20170516063317_create_lato_blog_categories.rb +16 -0
- data/db/migrate/20170516063320_create_lato_blog_category_parents.rb +9 -0
- data/db/migrate/20170516063330_create_lato_blog_category_posts.rb +10 -0
- data/db/migrate/20170516063330_create_lato_blog_post_fields.rb +18 -0
- data/lib/lato_blog.rb +6 -0
- data/lib/lato_blog/engine.rb +15 -0
- data/lib/lato_blog/interface.rb +17 -0
- data/lib/lato_blog/interfaces/categories.rb +34 -0
- data/lib/lato_blog/interfaces/fields.rb +195 -0
- data/lib/lato_blog/interfaces/languages.rb +15 -0
- data/lib/lato_blog/interfaces/posts.rb +13 -0
- data/lib/lato_blog/version.rb +3 -0
- data/lib/tasks/lato_blog_tasks.rake +4 -0
- metadata +223 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.posts__edit-status-switch, .posts__edit-publication-datetime {
|
|
2
|
+
|
|
3
|
+
.elements-button {
|
|
4
|
+
margin-top: 0;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.posts__edit-categories {
|
|
9
|
+
.inputs-checkbox {
|
|
10
|
+
margin: 0;
|
|
11
|
+
margin-bottom: 2px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.elements-table__row {
|
|
15
|
+
td:first-child {
|
|
16
|
+
width: 50px;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.posts__index {
|
|
22
|
+
.elements-table__row td:first-child {
|
|
23
|
+
width: 60%;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%
|
|
2
|
+
colors = core__get_colors
|
|
3
|
+
%>
|
|
4
|
+
|
|
5
|
+
$color_white: <%= colors[:white] %>;
|
|
6
|
+
$color_black: <%= colors[:black] %>;
|
|
7
|
+
$color_grey: <%= colors[:grey] %>;
|
|
8
|
+
$color_main: <%= colors[:main] %>;
|
|
9
|
+
$color_active: <%= colors[:active] %>;
|
|
10
|
+
$color_danger: <%= colors[:danger] %>;
|
|
11
|
+
$color_warning: <%= colors[:warning] %>;
|
|
12
|
+
$color_success: <%= colors[:success] %>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "switchlang";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module LatoBlog
|
|
2
|
+
class Api::CategoriesController < Api::ApiController
|
|
3
|
+
|
|
4
|
+
def index
|
|
5
|
+
categories = LatoBlog::Category.all
|
|
6
|
+
|
|
7
|
+
# order categories
|
|
8
|
+
order = (params[:order] && params[:order] == 'ASC') ? 'ASC' : 'DESC'
|
|
9
|
+
categories = categories.order("title #{order}")
|
|
10
|
+
|
|
11
|
+
# filter language
|
|
12
|
+
categories = categories.where(meta_language: params[:language]) if params[:language]
|
|
13
|
+
# filter search
|
|
14
|
+
categories = categories.where('title like ?', "%#{params[:search]}%") if params[:search]
|
|
15
|
+
|
|
16
|
+
# save total categories
|
|
17
|
+
total = categories.length
|
|
18
|
+
|
|
19
|
+
# manage pagination
|
|
20
|
+
page = params[:page] ? params[:page].to_i : 1
|
|
21
|
+
per_page = params[:per_page] ? params[:per_page].to_i : 20
|
|
22
|
+
categories = core__paginate_array(categories, per_page, page)
|
|
23
|
+
|
|
24
|
+
# render response
|
|
25
|
+
core__send_request_success(
|
|
26
|
+
categories: (categories && !categories.empty?) ? categories.map(&:serialize) : [],
|
|
27
|
+
page: page,
|
|
28
|
+
per_page: per_page,
|
|
29
|
+
order: order,
|
|
30
|
+
total: total
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def show
|
|
35
|
+
# check parameters
|
|
36
|
+
core__send_request_fail('Uncorrect parameters') && return unless params[:id] || params[:permalink]
|
|
37
|
+
|
|
38
|
+
# find post
|
|
39
|
+
if params[:id]
|
|
40
|
+
category = LatoBlog::Category.find_by(id: params[:id].to_i)
|
|
41
|
+
else
|
|
42
|
+
category = LatoBlog::Category.find_by(meta_permalink: params[:permalink])
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# render respnse
|
|
46
|
+
core__send_request_fail('Category not found') && return unless category
|
|
47
|
+
core__send_request_success(category: category.serialize)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module LatoBlog
|
|
2
|
+
class Api::PostsController < Api::ApiController
|
|
3
|
+
|
|
4
|
+
def index
|
|
5
|
+
posts = LatoBlog::Post.published.joins(:categories).joins(:post_parent)
|
|
6
|
+
posts = posts.where('lato_blog_post_parents.publication_datetime <= ?', DateTime.now)
|
|
7
|
+
|
|
8
|
+
# order posts
|
|
9
|
+
order = (params[:order] && params[:order] == 'ASC') ? 'ASC' : 'DESC'
|
|
10
|
+
posts = posts.order("lato_blog_post_parents.publication_datetime #{order}")
|
|
11
|
+
|
|
12
|
+
# filter language
|
|
13
|
+
posts = posts.where(meta_language: params[:language]) if params[:language]
|
|
14
|
+
# filter category permalink
|
|
15
|
+
posts = filter_category_permalink(posts) if params[:category_permalink]
|
|
16
|
+
# filter category id
|
|
17
|
+
posts = filter_category_id(posts) if params[:category_id]
|
|
18
|
+
# filter search
|
|
19
|
+
posts = posts.where('lato_blog_posts.title like ?', "%#{params[:search]}%") if params[:search]
|
|
20
|
+
|
|
21
|
+
# take posts uniqueness
|
|
22
|
+
posts = posts.uniq(&:id)
|
|
23
|
+
|
|
24
|
+
# save total posts
|
|
25
|
+
total = posts.length
|
|
26
|
+
|
|
27
|
+
# manage pagination
|
|
28
|
+
page = params[:page] ? params[:page].to_i : 1
|
|
29
|
+
per_page = params[:per_page] ? params[:per_page].to_i : 20
|
|
30
|
+
posts = core__paginate_array(posts, per_page, page)
|
|
31
|
+
|
|
32
|
+
# render response
|
|
33
|
+
core__send_request_success(
|
|
34
|
+
posts: (posts && !posts.empty?) ? posts.map(&:serialize) : [],
|
|
35
|
+
page: page,
|
|
36
|
+
per_page: per_page,
|
|
37
|
+
order: order,
|
|
38
|
+
total: total
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def show
|
|
43
|
+
# check parameters
|
|
44
|
+
core__send_request_fail('Uncorrect parameters') && return unless params[:id] || params[:permalink]
|
|
45
|
+
|
|
46
|
+
# find post
|
|
47
|
+
if params[:id]
|
|
48
|
+
post = LatoBlog::Post.find_by(id: params[:id].to_i, meta_status: 'published')
|
|
49
|
+
else
|
|
50
|
+
post = LatoBlog::Post.find_by(meta_permalink: params[:permalink], meta_status: 'published')
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# render respnse
|
|
54
|
+
core__send_request_fail('Post not found') && return unless post
|
|
55
|
+
core__send_request_success(post: post.serialize)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def filter_category_permalink(posts)
|
|
61
|
+
return posts unless params[:category_permalink]
|
|
62
|
+
category_permalinks = params[:category_permalink].is_a?(Array) ? params[:category_permalink] : params[:category_permalink].split(',')
|
|
63
|
+
posts = posts.where(lato_blog_categories: { meta_permalink: category_permalinks })
|
|
64
|
+
# manage AND clause
|
|
65
|
+
if params[:category_permalink_AND] == 'true'
|
|
66
|
+
ids = []
|
|
67
|
+
posts.pluck(:id).each do |id|
|
|
68
|
+
ids.push(id) if posts.where(id: id).length >= category_permalinks.length
|
|
69
|
+
end
|
|
70
|
+
posts = posts.where(id: ids)
|
|
71
|
+
end
|
|
72
|
+
# return posts
|
|
73
|
+
posts
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def filter_category_id(posts)
|
|
77
|
+
return posts unless params[:category_id]
|
|
78
|
+
category_ids = params[:category_id].is_a?(Array) ? params[:category_id] : params[:category_id].split(',')
|
|
79
|
+
posts = posts.where(lato_blog_categories: { id: category_ids })
|
|
80
|
+
# manage AND clause
|
|
81
|
+
if params[:category_id_AND] == 'true'
|
|
82
|
+
ids = []
|
|
83
|
+
posts.pluck(:id).each do |id|
|
|
84
|
+
ids.push(id) if posts.where(id: id).length >= category_ids.length
|
|
85
|
+
end
|
|
86
|
+
posts = posts.where(id: ids)
|
|
87
|
+
end
|
|
88
|
+
# return posts
|
|
89
|
+
posts
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module LatoBlog
|
|
2
|
+
class Back::BackController < ApplicationController
|
|
3
|
+
|
|
4
|
+
# Specific helpers import to fix not found functions bug
|
|
5
|
+
helper LatoBlog::ApplicationHelper
|
|
6
|
+
helper LatoBlog::FieldsHelper
|
|
7
|
+
|
|
8
|
+
layout 'lato_core/admin'
|
|
9
|
+
|
|
10
|
+
# check user is logged
|
|
11
|
+
before_action :core__manage_superuser_session
|
|
12
|
+
# set default language if not exist
|
|
13
|
+
before_action :set_default_current_language
|
|
14
|
+
|
|
15
|
+
# This function switch the default language used by the system and redirect to the same user page.
|
|
16
|
+
def switch_current_language
|
|
17
|
+
set_current_language params[:language]
|
|
18
|
+
|
|
19
|
+
respond_to do |format|
|
|
20
|
+
format.js
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
# Language helpers:
|
|
27
|
+
|
|
28
|
+
# This function set a default language on cookie if no languages are set.
|
|
29
|
+
def set_default_current_language
|
|
30
|
+
if !cookies[:lato_blog__current_language]
|
|
31
|
+
cookies[:lato_blog__current_language] = BLOG_LANGUAGES_IDENTIFIER.first
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# This function set the language received as params as default language if it is possible.
|
|
36
|
+
def set_current_language language
|
|
37
|
+
if BLOG_LANGUAGES_IDENTIFIER.include? language
|
|
38
|
+
cookies[:lato_blog__current_language] = language
|
|
39
|
+
else
|
|
40
|
+
set_default_current_language
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
module LatoBlog
|
|
2
|
+
class Back::CategoriesController < Back::BackController
|
|
3
|
+
|
|
4
|
+
before_action do
|
|
5
|
+
core__set_menu_active_item('blog_articles')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# This function shows the list of possible categories.
|
|
9
|
+
def index
|
|
10
|
+
core__set_header_active_page_title(LANGUAGES[:lato_blog][:pages][:categories])
|
|
11
|
+
# find categories to show
|
|
12
|
+
@categories = LatoBlog::Category.where(meta_language: cookies[:lato_blog__current_language]).order('title ASC')
|
|
13
|
+
@widget_index_categories = core__widgets_index(@categories, search: 'title', pagination: 10)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# This function shows a single category. It create a redirect to the edit path.
|
|
17
|
+
def show
|
|
18
|
+
# use edit as default post show page
|
|
19
|
+
redirect_to lato_blog.edit_category_path(params[:id])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# This function shows the view to create a new category.
|
|
23
|
+
def new
|
|
24
|
+
core__set_header_active_page_title(LANGUAGES[:lato_blog][:pages][:categories_new])
|
|
25
|
+
@category = LatoBlog::Category.new
|
|
26
|
+
|
|
27
|
+
if params[:language]
|
|
28
|
+
set_current_language params[:language]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
if params[:parent]
|
|
32
|
+
@category_parent = LatoBlog::CategoryParent.find_by(id: params[:parent])
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
fetch_external_objects
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# This function creates a new category.
|
|
39
|
+
def create
|
|
40
|
+
@category = LatoBlog::Category.new(new_category_params)
|
|
41
|
+
|
|
42
|
+
if !@category.save
|
|
43
|
+
flash[:danger] = @category.errors.full_messages.to_sentence
|
|
44
|
+
redirect_to lato_blog.new_category_path
|
|
45
|
+
return
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
flash[:success] = LANGUAGES[:lato_blog][:flashes][:category_create_success]
|
|
49
|
+
redirect_to lato_blog.category_path(@category.id)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# This function show the view to edit a category.
|
|
53
|
+
def edit
|
|
54
|
+
core__set_header_active_page_title(LANGUAGES[:lato_blog][:pages][:categories_edit])
|
|
55
|
+
@category = LatoBlog::Category.find_by(id: params[:id])
|
|
56
|
+
return unless check_category_presence
|
|
57
|
+
|
|
58
|
+
if @category.meta_language != cookies[:lato_blog__current_language]
|
|
59
|
+
set_current_language @category.meta_language
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
fetch_external_objects
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# This function updates a category.
|
|
66
|
+
def update
|
|
67
|
+
@category = LatoBlog::Category.find_by(id: params[:id])
|
|
68
|
+
return unless check_category_presence
|
|
69
|
+
|
|
70
|
+
if !@category.update(edit_category_params)
|
|
71
|
+
flash[:danger] = @category.errors.full_messages.to_sentence
|
|
72
|
+
redirect_to lato_blog.edit_category_path(@category.id)
|
|
73
|
+
return
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
flash[:success] = LANGUAGES[:lato_blog][:flashes][:category_update_success]
|
|
77
|
+
redirect_to lato_blog.category_path(@category.id)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# This function destroyes a category.
|
|
81
|
+
def destroy
|
|
82
|
+
@category = LatoBlog::Category.find_by(id: params[:id])
|
|
83
|
+
return unless check_category_presence
|
|
84
|
+
|
|
85
|
+
if !@category.destroy
|
|
86
|
+
flash[:danger] = @category.category_parent.errors.full_messages.to_sentence
|
|
87
|
+
redirect_to lato_blog.edit_category_path(@category.id)
|
|
88
|
+
return
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
flash[:success] = LANGUAGES[:lato_blog][:flashes][:category_destroy_success]
|
|
92
|
+
redirect_to lato_blog.categories_path(status: 'deleted')
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
|
|
97
|
+
def fetch_external_objects
|
|
98
|
+
@categories_list = LatoBlog::Category.where(meta_language: cookies[:lato_blog__current_language]).where.not(
|
|
99
|
+
id: @category.id).map { |cat| { title: cat.title, value: cat.id } }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# This function checks the @post variable is present and redirect to index if it not exist.
|
|
103
|
+
def check_category_presence
|
|
104
|
+
if !@category
|
|
105
|
+
flash[:warning] = LANGUAGES[:lato_blog][:flashes][:category_not_found]
|
|
106
|
+
redirect_to lato_blog.categories_path
|
|
107
|
+
return false
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
return true
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Params helpers:
|
|
114
|
+
|
|
115
|
+
# This function generate params for a new category.
|
|
116
|
+
def new_category_params
|
|
117
|
+
# take params from front-end request
|
|
118
|
+
category_params = params.require(:category).permit(:title, :lato_blog_category_id).to_h
|
|
119
|
+
# add current superuser id
|
|
120
|
+
category_params[:lato_core_superuser_creator_id] = @core__current_superuser.id
|
|
121
|
+
# add post parent id
|
|
122
|
+
category_params[:lato_blog_category_parent_id] = (params[:parent] && !params[:parent].blank? ? params[:parent] : generate_category_parent)
|
|
123
|
+
# add metadata
|
|
124
|
+
category_params[:meta_language] = cookies[:lato_blog__current_language]
|
|
125
|
+
# return final post object
|
|
126
|
+
return category_params
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# This function generate params for a edit category.
|
|
130
|
+
def edit_category_params
|
|
131
|
+
params.require(:category).permit(:title, :lato_blog_category_id, :meta_permalink)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# This function generate and save a new category parent and return the id.
|
|
135
|
+
def generate_category_parent
|
|
136
|
+
category_parent = LatoBlog::CategoryParent.create
|
|
137
|
+
return category_parent.id
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
module LatoBlog
|
|
2
|
+
class Back::PostFieldsController < Back::BackController
|
|
3
|
+
|
|
4
|
+
before_action do
|
|
5
|
+
core__set_menu_active_item('blog_articles')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def index
|
|
9
|
+
core__set_header_active_page_title(LANGUAGES[:lato_blog][:pages][:post_fields])
|
|
10
|
+
@post_fields = LatoBlog::PostField.all.order('meta_visible')
|
|
11
|
+
@widget_index_post_fields = core__widgets_index(@post_fields, search: 'key', pagination: 10)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def destroy
|
|
15
|
+
@post_field = LatoBlog::PostField.find_by(id: params[:id])
|
|
16
|
+
|
|
17
|
+
unless @post_field
|
|
18
|
+
flash[:warning] = LANGUAGES[:lato_blog][:flashes][:post_field_not_found]
|
|
19
|
+
redirect_to lato_blog.root_path
|
|
20
|
+
return
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
unless @post_field.destroy
|
|
24
|
+
flash[:danger] = @post_field.category_parent.errors.full_messages.to_sentence
|
|
25
|
+
redirect_to lato_blog.post_fields_path
|
|
26
|
+
return
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
flash[:success] = LANGUAGES[:lato_blog][:flashes][:post_field_destroy_success]
|
|
30
|
+
redirect_to lato_blog.post_fields_path
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Single fields endpoints:
|
|
34
|
+
# **************************************************************************
|
|
35
|
+
|
|
36
|
+
# This function create a new field for the post.
|
|
37
|
+
def create_relay_field
|
|
38
|
+
# find post field
|
|
39
|
+
@post_field = LatoBlog::PostField.find_by(id: params[:post_field_id])
|
|
40
|
+
unless @post_field
|
|
41
|
+
@error = true
|
|
42
|
+
respond_to { |r| r.js }
|
|
43
|
+
end
|
|
44
|
+
# find subfield info
|
|
45
|
+
child_field_info = nil
|
|
46
|
+
@post_field.meta_datas[:fields].each do |key, content|
|
|
47
|
+
child_field_info = [key, content] if key == params[:key]
|
|
48
|
+
end
|
|
49
|
+
unless child_field_info
|
|
50
|
+
@error = true
|
|
51
|
+
respond_to { |r| r.js }
|
|
52
|
+
end
|
|
53
|
+
# prepare data to create field
|
|
54
|
+
child_field_key = child_field_info.first
|
|
55
|
+
child_field_content = child_field_info.last
|
|
56
|
+
# override class and position
|
|
57
|
+
child_field_content[:class] = nil
|
|
58
|
+
child_field_content[:position] = !@post_field.post_fields.empty? ? @post_field.post_fields.order('position ASC').last.position + 1 : 1
|
|
59
|
+
# create subfield for the post field
|
|
60
|
+
blog__create_db_post_field(@post_field.post, child_field_key, child_field_content, @post_field)
|
|
61
|
+
# send response to client
|
|
62
|
+
@error = false
|
|
63
|
+
respond_to { |r| r.js }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# This function destroy a post for the field.
|
|
67
|
+
def destroy_relay_field
|
|
68
|
+
# find post field
|
|
69
|
+
child_field = LatoBlog::PostField.find_by(id: params[:id])
|
|
70
|
+
@post_field = child_field.post_field
|
|
71
|
+
unless @post_field
|
|
72
|
+
@error = true
|
|
73
|
+
respond_to { |r| r.js }
|
|
74
|
+
end
|
|
75
|
+
# find post field child and destroy it
|
|
76
|
+
unless child_field.destroy
|
|
77
|
+
@error = true
|
|
78
|
+
respond_to { |r| r.js }
|
|
79
|
+
end
|
|
80
|
+
# send response to client
|
|
81
|
+
@error = false
|
|
82
|
+
respond_to { |r| r.js }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
end
|