lato_blog 2.1.1 → 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/app/assets/stylesheets/lato_blog/pages/_posts.scss +5 -1
- data/app/controllers/lato_blog/api/categories_controller.rb +14 -33
- data/app/controllers/lato_blog/api/posts_controller.rb +17 -74
- data/app/models/lato_blog/post/entity_helpers.rb +5 -0
- data/app/models/lato_blog/post_field/serializer_helpers.rb +14 -11
- data/app/views/lato_blog/back/post_fields/create_relay_field.js.erb +1 -1
- data/app/views/lato_blog/back/post_fields/destroy_relay_field.js.erb +1 -1
- data/app/views/lato_blog/back/posts/shared/index/_index.html.erb +13 -14
- data/app/views/lato_blog/doc/fields/editor.html.erb +0 -1
- data/app/views/lato_blog/doc/fields/geolocalization.html.erb +0 -1
- data/lib/lato_blog/interfaces/queries.rb +154 -3
- data/lib/lato_blog/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aad2a0a2115db531a078ab05c7694142da5bb307
|
4
|
+
data.tar.gz: dafd5bdb23bcdcb082965d2e81125c11c6ad3fc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b055147664621e25759b0de18a9e293d72fd745086d2f24a0e869a78dfbfa6f2f625f69ca9e544f578e9df469e4c90ad176bb093d36280d15b5d71eb37721ca
|
7
|
+
data.tar.gz: 416b158ff15f8cd5e9f29f1dd2d6bc5508f999fca232edc25fbc1a91365d4751c222eba70a3fcaace76710a244fb64a5040e01373424823721f668e930fd3c0f
|
data/README.md
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
# Lato Blog
|
2
2
|
|
3
|
+
Lato is a Rails engine used to develop modular admin panels. This is the module used to manage a blog.
|
4
|
+
|
3
5
|
## Installation
|
4
6
|
|
7
|
+
Install [lato_core](https://github.com/ideonetwork/lato-core) and [lato_media](https://github.com/ideonetwork/lato-media) gem as required dependencies.
|
8
|
+
|
5
9
|
Add the lato_blog gem on your Gemfile
|
6
10
|
|
7
11
|
```ruby
|
@@ -2,50 +2,31 @@ module LatoBlog
|
|
2
2
|
class Api::CategoriesController < Api::ApiController
|
3
3
|
|
4
4
|
def index
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
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)
|
5
|
+
result = blog__get_categories(
|
6
|
+
order: params[:order],
|
7
|
+
language: params[:language],
|
8
|
+
search: params[:search],
|
9
|
+
page: params[:page],
|
10
|
+
per_page: params[:per_page]
|
11
|
+
)
|
23
12
|
|
24
13
|
# 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
|
-
)
|
14
|
+
core__send_request_success(result)
|
32
15
|
end
|
33
16
|
|
34
17
|
def show
|
35
18
|
# check parameters
|
36
19
|
core__send_request_fail('Uncorrect parameters') && return unless params[:id] || params[:permalink]
|
37
20
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
category = LatoBlog::Category.find_by(meta_permalink: params[:permalink])
|
43
|
-
end
|
21
|
+
category = blog__get_category(
|
22
|
+
id: params[:id],
|
23
|
+
permalink: params[:permalink]
|
24
|
+
)
|
44
25
|
|
45
26
|
# render respnse
|
46
27
|
core__send_request_fail('Category not found') && return unless category
|
47
|
-
core__send_request_success(category: category
|
28
|
+
core__send_request_success(category: category)
|
48
29
|
end
|
49
30
|
|
50
31
|
end
|
51
|
-
end
|
32
|
+
end
|
@@ -2,91 +2,34 @@ module LatoBlog
|
|
2
2
|
class Api::PostsController < Api::ApiController
|
3
3
|
|
4
4
|
def index
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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)
|
5
|
+
result = blog__get_posts(
|
6
|
+
order: params[:order],
|
7
|
+
language: params[:language],
|
8
|
+
category_permalink: params[:category_permalink],
|
9
|
+
category_permalink_AND: params[:category_permalink_AND],
|
10
|
+
category_id: params[:category_id],
|
11
|
+
category_id_AND: params[:category_id_AND],
|
12
|
+
search: params[:search],
|
13
|
+
page: params[:page],
|
14
|
+
per_page: params[:per_page]
|
15
|
+
)
|
31
16
|
|
32
17
|
# 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
|
-
)
|
18
|
+
core__send_request_success(result)
|
40
19
|
end
|
41
20
|
|
42
21
|
def show
|
43
22
|
# check parameters
|
44
23
|
core__send_request_fail('Uncorrect parameters') && return unless params[:id] || params[:permalink]
|
45
24
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
post = LatoBlog::Post.find_by(meta_permalink: params[:permalink], meta_status: 'published')
|
51
|
-
end
|
25
|
+
post = blog__get_post(
|
26
|
+
id: params[:id],
|
27
|
+
permalink: params[:permalink]
|
28
|
+
)
|
52
29
|
|
53
30
|
# render respnse
|
54
31
|
core__send_request_fail('Post not found') && return unless post
|
55
|
-
core__send_request_success(post: post
|
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
|
32
|
+
core__send_request_success(post: post)
|
90
33
|
end
|
91
34
|
|
92
35
|
end
|
@@ -53,18 +53,21 @@ module LatoBlog
|
|
53
53
|
|
54
54
|
# Datetime.
|
55
55
|
def serialize_field_value_datetime
|
56
|
-
date = DateTime.parse(value)
|
57
|
-
serialized = {}
|
58
|
-
|
59
|
-
# add basic info
|
60
|
-
serialized[:datetime] = date
|
61
|
-
serialized[:year] = date.year
|
62
|
-
serialized[:month] = date.month
|
63
|
-
serialized[:day] = date.day
|
64
|
-
serialized[:hour] = date.hour
|
65
|
-
serialized[:minute] = date.min
|
66
|
-
serialized[:second] = date.sec
|
67
56
|
|
57
|
+
begin
|
58
|
+
date = DateTime.parse(value)
|
59
|
+
serialized = {}
|
60
|
+
|
61
|
+
serialized[:datetime] = date
|
62
|
+
serialized[:year] = date.year
|
63
|
+
serialized[:month] = date.month
|
64
|
+
serialized[:day] = date.day
|
65
|
+
serialized[:hour] = date.hour
|
66
|
+
serialized[:minute] = date.min
|
67
|
+
serialized[:second] = date.sec
|
68
|
+
rescue StandardError
|
69
|
+
serialized = {}
|
70
|
+
end
|
68
71
|
# return serialized data
|
69
72
|
serialized
|
70
73
|
end
|
@@ -1,28 +1,27 @@
|
|
1
1
|
<%
|
2
2
|
block = cell(:elements, :block).new(class: 'xs-12 sm-12 md-12 posts__index')
|
3
|
-
table = cell(:elements, :table, :container).new
|
4
|
-
table_head = cell(:elements, :table, :head).new(labels: [
|
5
|
-
LANGUAGES[:lato_blog][:forms][:title],
|
6
|
-
LANGUAGES[:lato_blog][:forms][:language],
|
7
|
-
LANGUAGES[:lato_blog][:forms][:publication]
|
8
|
-
])
|
9
|
-
table_body = cell(:elements, :table, :body).new
|
10
3
|
%>
|
11
4
|
|
12
5
|
<%=raw block.open %>
|
13
6
|
|
14
7
|
<%
|
15
|
-
title =
|
16
|
-
title = LANGUAGES[:lato_blog][:mixed][:published_posts] if status && status === 'published'
|
17
|
-
title = LANGUAGES[:lato_blog][:mixed][:drafted_posts] if status && status === 'drafted'
|
18
|
-
title = LANGUAGES[:lato_blog][:mixed][:deleted_posts] if status && status === 'deleted'
|
8
|
+
title = "#{get_current_language_title.upcase}: "
|
9
|
+
title = "#{title}#{LANGUAGES[:lato_blog][:mixed][:published_posts]}" if status && status === 'published'
|
10
|
+
title = "#{title}#{LANGUAGES[:lato_blog][:mixed][:drafted_posts]}" if status && status === 'drafted'
|
11
|
+
title = "#{title}#{LANGUAGES[:lato_blog][:mixed][:deleted_posts]}" if status && status === 'deleted'
|
19
12
|
%>
|
20
13
|
|
21
14
|
<%=raw cell(:elements, :title).new(label: title, size: 6) %>
|
22
15
|
|
23
16
|
|
24
|
-
<%=raw cell(:widgets, :index).new(
|
25
|
-
|
26
|
-
|
17
|
+
<%=raw cell(:widgets, :index).new(
|
18
|
+
records: @widget_index_posts,
|
19
|
+
index_url: lato_blog.posts_path(status: @posts_status),
|
20
|
+
head: [LANGUAGES[:lato_blog][:forms][:title], LANGUAGES[:lato_blog][:mixed][:categories]],
|
21
|
+
columns: ['title', 'get_category_titles'],
|
22
|
+
actions: {show: true, new: true, delete: (@posts_status === 'deleted')},
|
23
|
+
search: true,
|
24
|
+
pagination: true
|
25
|
+
) %>
|
27
26
|
|
28
27
|
<%=raw block.close %>
|
@@ -1 +0,0 @@
|
|
1
|
-
<h1>TODO</h1>
|
@@ -1 +0,0 @@
|
|
1
|
-
<h1>TODO</h1>
|
@@ -1,9 +1,160 @@
|
|
1
1
|
module LatoBlog
|
2
|
-
|
3
|
-
# This module contains a list of helpers used on controllers to get posts
|
2
|
+
|
3
|
+
# This module contains a list of helpers used on controllers to get posts
|
4
|
+
# to render the blog elements.
|
4
5
|
module Interface::Queries
|
5
6
|
|
6
|
-
#
|
7
|
+
# This function returns an object with the list of posts with some filters.
|
8
|
+
def blog__get_posts(order: nil, language: nil, category_permalink: nil, category_permalink_AND: false, category_id: nil, category_id_AND: false, search: nil, page: nil, per_page: nil)
|
9
|
+
posts = LatoBlog::Post.published.joins(:categories).joins(:post_parent).where('lato_blog_post_parents.publication_datetime <= ?', DateTime.now)
|
10
|
+
|
11
|
+
# apply filters
|
12
|
+
order = order && order == 'ASC' ? 'ASC' : 'DESC'
|
13
|
+
posts = _posts_filter_by_order(posts, order)
|
14
|
+
posts = _posts_filter_by_language(posts, language)
|
15
|
+
posts = _posts_filter_by_category_permalink(posts, category_permalink, category_permalink_AND)
|
16
|
+
posts = _posts_filter_category_id(posts, category_id, category_id_AND)
|
17
|
+
posts = _posts_filter_search(posts, search)
|
18
|
+
|
19
|
+
# take posts uniqueness
|
20
|
+
posts = posts.uniq(&:id)
|
21
|
+
|
22
|
+
# save total posts
|
23
|
+
total = posts.length
|
24
|
+
|
25
|
+
# manage pagination
|
26
|
+
page ||= 1
|
27
|
+
per_page ||= 20
|
28
|
+
posts = core__paginate_array(posts, per_page, page)
|
29
|
+
|
30
|
+
# return result
|
31
|
+
{
|
32
|
+
posts: posts && !posts.empty? ? posts.map(&:serialize) : [],
|
33
|
+
page: page,
|
34
|
+
per_page: per_page,
|
35
|
+
order: order,
|
36
|
+
total: total
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
# This function returns a single post searched by id or permalink.
|
41
|
+
def blog__get_post(id: nil, permalink: nil)
|
42
|
+
return {} unless id || permalink
|
43
|
+
|
44
|
+
if id
|
45
|
+
post = LatoBlog::Post.find_by(id: id.to_i, meta_status: 'published')
|
46
|
+
else
|
47
|
+
post = LatoBlog::Post.find_by(meta_permalink: permalink, meta_status: 'published')
|
48
|
+
end
|
49
|
+
|
50
|
+
post.serialize
|
51
|
+
end
|
52
|
+
|
53
|
+
# This function returns an object with the list of categories with some filters.
|
54
|
+
def blog__get_categories(order: nil, language: nil, search: nil, page: nil, per_page: nil)
|
55
|
+
categories = LatoBlog::Category.all
|
56
|
+
|
57
|
+
# apply filters
|
58
|
+
order = order && order == 'ASC' ? 'ASC' : 'DESC'
|
59
|
+
categories = _categories_filter_by_order(categories, order)
|
60
|
+
categories = _categories_filter_by_language(categories, language)
|
61
|
+
categories = _categories_filter_search(categories, search)
|
62
|
+
|
63
|
+
# take categories uniqueness
|
64
|
+
categories = categories.uniq(&:id)
|
65
|
+
|
66
|
+
# save total categories
|
67
|
+
total = categories.length
|
68
|
+
|
69
|
+
# manage pagination
|
70
|
+
page ||= 1
|
71
|
+
per_page ||= 20
|
72
|
+
categories = core__paginate_array(categories, per_page, page)
|
73
|
+
|
74
|
+
# return result
|
75
|
+
{
|
76
|
+
categories: categories && !categories.empty? ? categories.map(&:serialize) : [],
|
77
|
+
page: page,
|
78
|
+
per_page: per_page,
|
79
|
+
order: order,
|
80
|
+
total: total
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
# This function returns a single category searched by id or permalink.
|
85
|
+
def blog__get_category(id: nil, permalink: nil)
|
86
|
+
return {} unless id || permalink
|
87
|
+
|
88
|
+
if id
|
89
|
+
category = LatoBlog::Category.find_by(id: id.to_i)
|
90
|
+
else
|
91
|
+
category = LatoBlog::Category.find_by(meta_permalink: permalink)
|
92
|
+
end
|
93
|
+
|
94
|
+
category.serialize
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def _posts_filter_by_order(posts, order)
|
100
|
+
posts.order("lato_blog_post_parents.publication_datetime #{order}")
|
101
|
+
end
|
102
|
+
|
103
|
+
def _posts_filter_by_language(posts, language)
|
104
|
+
return posts unless language
|
105
|
+
posts.where(meta_language: language)
|
106
|
+
end
|
107
|
+
|
108
|
+
def _posts_filter_by_category_permalink(posts, category_permalink, category_permalink_AND)
|
109
|
+
return posts unless category_permalink
|
110
|
+
category_permalinks = category_permalink.is_a?(Array) ? category_permalink : category_permalink.split(',')
|
111
|
+
posts = posts.where(lato_blog_categories: { meta_permalink: category_permalinks })
|
112
|
+
# manage AND clause
|
113
|
+
if ['true', true].include?(category_permalink_AND)
|
114
|
+
ids = []
|
115
|
+
posts.pluck(:id).each do |id|
|
116
|
+
ids.push(id) if posts.where(id: id).length >= category_permalinks.length
|
117
|
+
end
|
118
|
+
posts = posts.where(id: ids)
|
119
|
+
end
|
120
|
+
# return posts
|
121
|
+
posts
|
122
|
+
end
|
123
|
+
|
124
|
+
def _posts_filter_category_id(posts, category_id, category_id_AND)
|
125
|
+
return posts unless category_id
|
126
|
+
category_ids = category_id.is_a?(Array) ? category_id : category_id.split(',')
|
127
|
+
posts = posts.where(lato_blog_categories: { id: category_ids })
|
128
|
+
# manage AND clause
|
129
|
+
if ['true', true].include?(category_id_AND)
|
130
|
+
ids = []
|
131
|
+
posts.pluck(:id).each do |id|
|
132
|
+
ids.push(id) if posts.where(id: id).length >= category_ids.length
|
133
|
+
end
|
134
|
+
posts = posts.where(id: ids)
|
135
|
+
end
|
136
|
+
# return posts
|
137
|
+
posts
|
138
|
+
end
|
139
|
+
|
140
|
+
def _posts_filter_search(posts, search)
|
141
|
+
return posts unless search
|
142
|
+
posts.where('lato_blog_posts.title like ?', "%#{params[:search]}%")
|
143
|
+
end
|
144
|
+
|
145
|
+
def _categories_filter_by_order(categories, order)
|
146
|
+
categories.order("title #{order}")
|
147
|
+
end
|
148
|
+
|
149
|
+
def _categories_filter_by_language(categories, language)
|
150
|
+
return categories unless language
|
151
|
+
categories.where(meta_language: language)
|
152
|
+
end
|
153
|
+
|
154
|
+
def _categories_filter_search(categories, search)
|
155
|
+
return categories unless search
|
156
|
+
categories.where('title like ?', "%#{search}%")
|
157
|
+
end
|
7
158
|
|
8
159
|
end
|
9
160
|
|
data/lib/lato_blog/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lato_blog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ideonetwork
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|