biovision-post 0.21.190513.0 → 0.26.191013.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/config/biovision_post_manifest.js +1 -0
- data/app/assets/images/biovision/post/icons/comment.svg +9 -0
- data/app/assets/javascripts/biovision/post/biovision-posts.js +21 -28
- data/app/assets/stylesheets/biovision/post/posts.scss +6 -0
- data/app/controllers/admin/editorial_members_controller.rb +9 -4
- data/app/controllers/admin/featured_posts_controller.rb +9 -4
- data/app/controllers/admin/post_categories_controller.rb +12 -6
- data/app/controllers/admin/post_group_categories_controller.rb +9 -4
- data/app/controllers/admin/post_group_tags_controller.rb +9 -4
- data/app/controllers/admin/post_groups_controller.rb +9 -4
- data/app/controllers/admin/post_illustrations_controller.rb +9 -4
- data/app/controllers/admin/post_images_controller.rb +9 -4
- data/app/controllers/admin/post_links_controller.rb +9 -4
- data/app/controllers/admin/post_tags_controller.rb +9 -4
- data/app/controllers/admin/post_types_controller.rb +13 -4
- data/app/controllers/admin/posts_controller.rb +6 -8
- data/app/controllers/articles_controller.rb +16 -6
- data/app/controllers/authors_controller.rb +9 -4
- data/app/controllers/blog_posts_controller.rb +16 -6
- data/app/controllers/editorial_members_controller.rb +9 -4
- data/app/controllers/featured_posts_controller.rb +6 -1
- data/app/controllers/my/posts_controller.rb +35 -38
- data/app/controllers/news_controller.rb +16 -6
- data/app/controllers/post_attachments_controller.rb +36 -0
- data/app/controllers/post_categories_controller.rb +6 -1
- data/app/controllers/post_groups_controller.rb +9 -4
- data/app/controllers/post_illustrations_controller.rb +6 -1
- data/app/controllers/post_images_controller.rb +9 -8
- data/app/controllers/post_links_controller.rb +5 -2
- data/app/controllers/post_tags_controller.rb +9 -4
- data/app/controllers/posts_controller.rb +39 -17
- data/app/helpers/biovision_posts_helper.rb +28 -27
- data/app/jobs/post_body_parser_job.rb +1 -1
- data/app/models/concerns/post_child_with_priority.rb +2 -1
- data/app/models/editorial_member.rb +10 -1
- data/app/models/post.rb +39 -11
- data/app/models/post_attachment.rb +49 -0
- data/app/models/post_category.rb +6 -0
- data/app/models/post_group_category.rb +1 -1
- data/app/models/post_illustration.rb +2 -1
- data/app/models/post_image.rb +2 -1
- data/app/models/post_type.rb +15 -0
- data/app/services/biovision/components/posts_component.rb +65 -0
- data/app/views/admin/components/links/_posts.html.erb +33 -0
- data/app/views/admin/editorial_members/index.html.erb +2 -1
- data/app/views/admin/editorial_members/show.html.erb +1 -0
- data/app/views/admin/featured_posts/index.html.erb +1 -0
- data/app/views/admin/post_categories/entity/_in_list.html.erb +10 -0
- data/app/views/admin/post_categories/show.html.erb +11 -0
- data/app/views/admin/post_groups/index.html.erb +2 -1
- data/app/views/admin/post_groups/show.html.erb +1 -0
- data/app/views/admin/post_illustrations/index.html.erb +1 -0
- data/app/views/admin/post_illustrations/show.html.erb +1 -0
- data/app/views/admin/post_images/index.html.erb +2 -1
- data/app/views/admin/post_images/show.html.erb +1 -0
- data/app/views/admin/post_tags/index.html.erb +2 -1
- data/app/views/admin/post_tags/posts.html.erb +4 -3
- data/app/views/admin/post_tags/show.html.erb +3 -2
- data/app/views/admin/post_types/authors.html.erb +1 -0
- data/app/views/admin/post_types/index.html.erb +2 -1
- data/app/views/admin/post_types/new_post.html.erb +13 -4
- data/app/views/admin/post_types/post_categories.html.erb +1 -0
- data/app/views/admin/post_types/post_tags.html.erb +4 -3
- data/app/views/admin/post_types/show.html.erb +3 -2
- data/app/views/admin/posts/entity/_in_list.html.erb +3 -3
- data/app/views/admin/posts/images.html.erb +1 -0
- data/app/views/admin/posts/index.html.erb +2 -1
- data/app/views/admin/posts/search.html.erb +10 -1
- data/app/views/admin/posts/show.html.erb +6 -7
- data/app/views/authors/show.html.erb +1 -1
- data/app/views/blog_posts/index.html.erb +4 -2
- data/app/views/editorial_members/edit.html.erb +1 -0
- data/app/views/editorial_members/new.html.erb +3 -2
- data/app/views/my/index/dashboard/_biovision_post.html.erb +5 -4
- data/app/views/my/posts/_form.html.erb +40 -194
- data/app/views/my/posts/_post.html.erb +2 -3
- data/app/views/my/posts/articles.html.erb +1 -1
- data/app/views/my/posts/blog_posts.html.erb +1 -1
- data/app/views/my/posts/index/_navigation.html.erb +3 -3
- data/app/views/my/posts/new.html.erb +9 -1
- data/app/views/my/posts/news_index.html.erb +1 -1
- data/app/views/posts/_breadcrumbs.html.erb +1 -6
- data/app/views/posts/_form.html.erb +9 -2
- data/app/views/posts/_post.html.erb +7 -11
- data/app/views/posts/_preview.html.erb +7 -1
- data/app/views/posts/edit.html.erb +9 -1
- data/app/views/posts/post_type/_category.html.erb +4 -2
- data/app/views/posts/post_type/_post_page.html.erb +7 -1
- data/app/views/posts/post_type/_posts.html.erb +11 -2
- data/app/views/posts/post_type/_tagged.html.erb +4 -4
- data/app/views/posts/rss.xml.erb +1 -1
- data/app/views/posts/show.html.erb +0 -5
- data/app/views/posts/zen.xml.erb +3 -3
- data/config/locales/posts-ru.yml +11 -1
- data/config/routes.rb +3 -0
- data/db/{migrate → amends}/20190202232323_add_spam_to_posts.rb +0 -0
- data/db/{migrate → amends}/20190224212121_add_data_to_posts.rb +0 -0
- data/db/{migrate → amends}/20190224212122_rename_post_image_source.rb +0 -0
- data/db/{migrate → amends}/20190224212123_add_uuid_to_post_images.rb +0 -0
- data/db/{migrate → amends}/20190313141414_convert_json_post_columns.rb +0 -0
- data/db/amends/20190925181818_add_search_index_to_posts.rb +24 -0
- data/db/migrate/20170930000001_create_post_types.rb +4 -13
- data/db/migrate/20170930000010_create_posts.rb +26 -3
- data/db/migrate/20190715141414_add_data_to_post_categories.rb +14 -0
- data/db/migrate/20190801161616_add_posts_component.rb +14 -0
- data/db/migrate/20190822121212_create_post_attachments.rb +20 -0
- data/db/migrate/20190914212121_convert_post_privileges.rb +56 -0
- data/lib/biovision/post/version.rb +1 -1
- metadata +18 -13
- data/app/services/post_manager.rb +0 -71
- data/app/views/admin/index/dashboard/_biovision_post.html.erb +0 -36
- data/app/views/articles/show.html.erb +0 -6
- data/app/views/blog_posts/show.html.erb +0 -6
- data/app/views/news/show.html.erb +0 -6
@@ -1,10 +1,9 @@
|
|
1
|
-
<% handler = PostManager.new(post) %>
|
2
1
|
<article class="post" itemscope itemtype="http://schema.org/Article" itemprop="mainEntityOfPage">
|
3
2
|
<h1 itemprop="headline"><%= post.title %></h1>
|
4
3
|
<ul class="actions">
|
5
4
|
<li><%= back_icon(my_posts_path) %></li>
|
6
5
|
<% if post.visible? %>
|
7
|
-
<li><%= world_icon(
|
6
|
+
<li><%= world_icon(post.url) %></li>
|
8
7
|
<% end %>
|
9
8
|
<% unless post.locked? %>
|
10
9
|
<li><%= edit_icon(edit_my_post_path(id: post.id)) %></li>
|
@@ -38,7 +37,7 @@
|
|
38
37
|
<% end %>
|
39
38
|
|
40
39
|
<div class="body" itemprop="articleBody mainEntityOfPage">
|
41
|
-
<%= raw(post.
|
40
|
+
<%= raw(post.body) %>
|
42
41
|
</div>
|
43
42
|
|
44
43
|
<% if post.tags_cache.any? %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<nav>
|
2
|
-
<% if
|
2
|
+
<% if component_handler.allow_post_type?('article') %>
|
3
3
|
<%=
|
4
4
|
link_to(
|
5
5
|
t('my.posts.new_article.nav_text'),
|
@@ -8,7 +8,7 @@
|
|
8
8
|
)
|
9
9
|
%>
|
10
10
|
<% end %>
|
11
|
-
<% if
|
11
|
+
<% if component_handler.allow_post_type?('news') %>
|
12
12
|
<%=
|
13
13
|
link_to(
|
14
14
|
t('my.posts.new_news.nav_text'),
|
@@ -17,7 +17,7 @@
|
|
17
17
|
)
|
18
18
|
%>
|
19
19
|
<% end %>
|
20
|
-
<% if
|
20
|
+
<% if component_handler.allow_post_type?('blog_post') %>
|
21
21
|
<%=
|
22
22
|
link_to(
|
23
23
|
t('my.posts.new_blog_post.nav_text'),
|
@@ -10,5 +10,13 @@
|
|
10
10
|
<li><%= return_icon(my_posts_path) %></li>
|
11
11
|
</ul>
|
12
12
|
|
13
|
-
<%=
|
13
|
+
<%=
|
14
|
+
render(
|
15
|
+
partial: 'form',
|
16
|
+
locals: {
|
17
|
+
entity: @entity,
|
18
|
+
handler: component_handler
|
19
|
+
}
|
20
|
+
)
|
21
|
+
%>
|
14
22
|
</article>
|
@@ -1,7 +1,2 @@
|
|
1
|
-
|
2
|
-
<% entity.post_category.parents.each do |parent| %>
|
3
|
-
<%= post_category_link(parent) %>
|
4
|
-
<% end %>
|
5
|
-
<%= post_category_link(entity.post_category) %>
|
6
|
-
<% end %>
|
1
|
+
<%= post_type_link(entity.post_type) %>
|
7
2
|
<span><%= entity.title %></span>
|
@@ -1,4 +1,5 @@
|
|
1
1
|
<%
|
2
|
+
handler ||= Biovision::Components::BaseComponent.handler('post', current_user)
|
2
3
|
model_name = entity.class.to_s.underscore
|
3
4
|
languages = Language.active
|
4
5
|
%>
|
@@ -6,7 +7,7 @@
|
|
6
7
|
<%= render partial: 'shared/list_of_errors', locals: { entity: entity } %>
|
7
8
|
|
8
9
|
<dl>
|
9
|
-
<% if
|
10
|
+
<% if handler.allow?('chief_editor') %>
|
10
11
|
<dt><%= t('activerecord.attributes.post.user') %></dt>
|
11
12
|
<dd>
|
12
13
|
<div>
|
@@ -364,7 +365,7 @@
|
|
364
365
|
<div class="guideline"><%= t('.guidelines.meta_keywords') %></div>
|
365
366
|
</dd>
|
366
367
|
|
367
|
-
<% if
|
368
|
+
<% if handler.allow?('chief_editor', 'deputy_chief_editor') %>
|
368
369
|
<dt><%= f.label :rating %></dt>
|
369
370
|
<dd>
|
370
371
|
<%=
|
@@ -381,6 +382,12 @@
|
|
381
382
|
<dt><%= t(:flags) %></dt>
|
382
383
|
<dd>
|
383
384
|
<ul class="flags">
|
385
|
+
<% if entity.id.nil? && handler.allow?('chief_editor', 'deputy_chief_editor') %>
|
386
|
+
<li>
|
387
|
+
<%= check_box_tag :featured, '1' %>
|
388
|
+
<%= label_tag :featured, t('activerecord.models.featured_post') %>
|
389
|
+
</li>
|
390
|
+
<% end %>
|
384
391
|
<li>
|
385
392
|
<%= f.check_box :visible, id: "#{model_name}_visible" %>
|
386
393
|
<%= f.label :visible %>
|
@@ -1,19 +1,15 @@
|
|
1
|
-
<% handler =
|
1
|
+
<% handler = Biovision::Components::BaseComponent.handler('posts', current_user) %>
|
2
2
|
<article class="post" itemscope itemtype="http://schema.org/Article" itemprop="mainEntityOfPage">
|
3
3
|
<h1 itemprop="headline"><%= post.title %></h1>
|
4
|
-
<% if
|
4
|
+
<% if handler.editable?(post) %>
|
5
5
|
<ul class="actions">
|
6
|
-
<% if
|
7
|
-
<li><%= gear_icon(my_post_path(id: post.id)) %></li>
|
8
|
-
<% elsif UserPrivilege.user_in_group?(current_user, :editors) %>
|
6
|
+
<% if handler.group?(:chief) %>
|
9
7
|
<li><%= gear_icon(admin_post_path(id: post.id)) %></li>
|
8
|
+
<% elsif post.owned_by?(current_user) %>
|
9
|
+
<li><%= gear_icon(my_post_path(id: post.id)) %></li>
|
10
10
|
<% end %>
|
11
11
|
<% unless post.locked? %>
|
12
|
-
|
13
|
-
<li><%= edit_icon(edit_my_post_path(id: post.id)) %></li>
|
14
|
-
<% else %>
|
15
|
-
<li><%= edit_icon(handler.edit_path) %></li>
|
16
|
-
<% end %>
|
12
|
+
<li><%= edit_icon(handler.edit_path(post)) %></li>
|
17
13
|
<% end %>
|
18
14
|
</ul>
|
19
15
|
<% end %>
|
@@ -50,7 +46,7 @@
|
|
50
46
|
<div class="lead"><%= post.lead %></div>
|
51
47
|
|
52
48
|
<div class="body">
|
53
|
-
<%= raw(post.
|
49
|
+
<%= raw(post.body) %>
|
54
50
|
</div>
|
55
51
|
</div>
|
56
52
|
|
@@ -24,7 +24,13 @@
|
|
24
24
|
<%= time_tag(entity.publication_time.to_date, format: :default) %>
|
25
25
|
</div>
|
26
26
|
<div class="category" aria-label="<%= t('activerecord.attributes.post.post_category_id') %>">
|
27
|
-
|
27
|
+
<% if entity.post_categories.any? %>
|
28
|
+
<% entity.post_categories.each do |category| %>
|
29
|
+
<%= post_category_link(category) %>
|
30
|
+
<% end %>
|
31
|
+
<% else %>
|
32
|
+
<%= post_type_link(entity.post_type) %>
|
33
|
+
<% end %>
|
28
34
|
</div>
|
29
35
|
<% if entity.tags_cache.any? %>
|
30
36
|
<ul class="post-tags">
|
@@ -8,5 +8,13 @@
|
|
8
8
|
<li class="danger"><%= destroy_icon(@entity) %></li>
|
9
9
|
</ul>
|
10
10
|
|
11
|
-
<%=
|
11
|
+
<%=
|
12
|
+
render(
|
13
|
+
partial: 'form',
|
14
|
+
locals: {
|
15
|
+
entity: @entity,
|
16
|
+
handler: component_handler
|
17
|
+
}
|
18
|
+
)
|
19
|
+
%>
|
12
20
|
</article>
|
@@ -1,7 +1,9 @@
|
|
1
1
|
<% content_for :meta_description, category.meta_description unless category.meta_description.blank? %>
|
2
2
|
|
3
3
|
<article>
|
4
|
-
<
|
4
|
+
<div class="content-wrapper">
|
5
|
+
<h1><%= category.name %></h1>
|
5
6
|
|
6
|
-
|
7
|
+
<%= render partial: 'posts/collection', locals: { collection: collection } %>
|
8
|
+
</div>
|
7
9
|
</article>
|
@@ -1,6 +1,12 @@
|
|
1
|
+
<% content_for :breadcrumbs do %>
|
2
|
+
<%= render partial: 'posts/breadcrumbs', locals: { entity: entity } %>
|
3
|
+
<% end %>
|
4
|
+
|
1
5
|
<%= render partial: 'posts/entity/metadata', locals: { entity: entity } %>
|
2
6
|
<%= render partial: 'posts/post', locals: { post: entity } %>
|
3
|
-
|
7
|
+
<% if Gem.loaded_specs.key?('biovision-comment') %>
|
8
|
+
<%= render partial: 'comments/section', locals: { entity: entity } %>
|
9
|
+
<% end %>
|
4
10
|
<%=
|
5
11
|
render(
|
6
12
|
partial: 'posts/entity/linked_posts',
|
@@ -1,5 +1,14 @@
|
|
1
|
+
<% allow_new ||= false %>
|
1
2
|
<article>
|
2
|
-
<
|
3
|
+
<div class="content-wrapper">
|
4
|
+
<h1><%= heading %></h1>
|
3
5
|
|
4
|
-
|
6
|
+
<% if allow_new && local_assigns[:path_for_new] %>
|
7
|
+
<ul class="actions">
|
8
|
+
<li><%= create_icon(path_for_new) %></li>
|
9
|
+
</ul>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= render partial: 'posts/collection', locals: { collection: collection } %>
|
13
|
+
</div>
|
5
14
|
</article>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<article>
|
2
|
-
<
|
3
|
-
<h1><%= heading %></h1>
|
4
|
-
</header>
|
2
|
+
<div class="content-wrapper">
|
3
|
+
<header><h1><%= heading %></h1></header>
|
5
4
|
|
6
|
-
|
5
|
+
<%= render partial: 'posts/collection', locals: { collection: collection } %>
|
6
|
+
</div>
|
7
7
|
</article>
|
data/app/views/posts/rss.xml.erb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
<% @collection.each do |post| %>
|
17
17
|
<item>
|
18
18
|
<title><%= post.title %></title>
|
19
|
-
<link><%= site_link +
|
19
|
+
<link><%= site_link + post.url %></link>
|
20
20
|
<description><%= post.lead! %></description>
|
21
21
|
<guid isPermaLink="false"><%= post.uuid %></guid>
|
22
22
|
<pubDate><%= post.publication_time.rfc822 %></pubDate>
|
data/app/views/posts/zen.xml.erb
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
<% next if item.image.blank? %>
|
20
20
|
<item>
|
21
21
|
<title><%= item.title %></title>
|
22
|
-
<link><%= site_link +
|
22
|
+
<link><%= site_link + item.url %></link>
|
23
23
|
<media:rating scheme="urn:simple"><%= item.explicit? ? 'adult' : 'nonadult' %></media:rating>
|
24
24
|
<pubDate><%= item.publication_time.rfc822 %></pubDate>
|
25
25
|
<author><![CDATA[<%= item.author!(t(:anonymous)) %>]]></author>
|
@@ -31,11 +31,11 @@
|
|
31
31
|
length="<%= File.size(item.image.hd.current_path) %>"
|
32
32
|
type="<%= item.image.content_type %>"
|
33
33
|
/>
|
34
|
-
<%
|
34
|
+
<% item.enclosures.each do |url| %>
|
35
35
|
<enclosure url="<%= media_link + url %>" type="<%= Rack::Mime::MIME_TYPES[File.extname(url)] %>"/>
|
36
36
|
<% end %>
|
37
37
|
<description><![CDATA[<%= item.lead! %>]]></description>
|
38
|
-
<content:encoded><![CDATA[<%= raw(item.
|
38
|
+
<content:encoded><![CDATA[<%= raw(item.body) %>]]></content:encoded>
|
39
39
|
</item>
|
40
40
|
<% end %>
|
41
41
|
</channel>
|
data/config/locales/posts-ru.yml
CHANGED
@@ -269,7 +269,7 @@ ru:
|
|
269
269
|
posts:
|
270
270
|
nav_item:
|
271
271
|
description: "Управление публикациями"
|
272
|
-
text: "
|
272
|
+
text: "Все публикации"
|
273
273
|
index:
|
274
274
|
heading: "Публикации"
|
275
275
|
title: "Публикации, страница %{page}"
|
@@ -304,6 +304,14 @@ ru:
|
|
304
304
|
entity:
|
305
305
|
in_list:
|
306
306
|
post_categories: "Категории публикаций"
|
307
|
+
biovision:
|
308
|
+
components:
|
309
|
+
posts:
|
310
|
+
name: "Публикации"
|
311
|
+
privileges:
|
312
|
+
chief_editor: "Главный редактор"
|
313
|
+
deputy_chief_editor: "Заместитель главного редактора"
|
314
|
+
editor: "Редактор"
|
307
315
|
editorial_members:
|
308
316
|
new:
|
309
317
|
heading: "Добавление члена редакции"
|
@@ -542,3 +550,5 @@ ru:
|
|
542
550
|
title: "Редактирование моей публикации"
|
543
551
|
nav_text: "Редактировать"
|
544
552
|
heading: "Редактирование публикации"
|
553
|
+
form:
|
554
|
+
categories: "Категории"
|
data/config/routes.rb
CHANGED
@@ -54,6 +54,7 @@ Rails.application.routes.draw do
|
|
54
54
|
|
55
55
|
scope :articles, controller: :articles do
|
56
56
|
get '/' => :index, as: :articles
|
57
|
+
get 'new' => :new, as: :new_article
|
57
58
|
get 'archive/(:year)(-:month)(-:day)' => :archive, as: :articles_archive, constraints: archive_constraints
|
58
59
|
get 'tagged/(:tag_name)' => :tagged, as: :tagged_articles, constraints: { tag_name: /[^\/]+?/ }
|
59
60
|
get '/:category_slug' => :category, as: :articles_category, constraints: { category_slug: category_slug_pattern }
|
@@ -62,6 +63,7 @@ Rails.application.routes.draw do
|
|
62
63
|
|
63
64
|
scope :news, controller: :news do
|
64
65
|
get '/' => :index, as: :news_index
|
66
|
+
get 'new' => :new, as: :new_news
|
65
67
|
get 'archive/(:year)(-:month)(-:day)' => :archive, as: :news_archive, constraints: archive_constraints
|
66
68
|
get 'tagged/(:tag_name)' => :tagged, as: :tagged_news, constraints: { tag_name: /[^\/]+?/ }
|
67
69
|
get '/:category_slug' => :category, as: :news_category, constraints: { category_slug: category_slug_pattern }
|
@@ -70,6 +72,7 @@ Rails.application.routes.draw do
|
|
70
72
|
|
71
73
|
scope :blog_posts, controller: :blog_posts do
|
72
74
|
get '/' => :index, as: :blog_posts
|
75
|
+
get 'new' => :new, as: :new_blog_post
|
73
76
|
get 'archive/(:year)(-:month)(-:day)' => :archive, as: :blog_posts_archive, constraints: archive_constraints
|
74
77
|
get 'tagged/(:tag_name)' => :tagged, as: :tagged_blog_posts, constraints: { tag_name: /[^\/]+?/ }
|
75
78
|
get '/:category_slug' => :category, as: :blog_posts_category, constraints: { category_slug: category_slug_pattern }
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Add full-text search to posts table
|
4
|
+
class AddSearchIndexToPosts < ActiveRecord::Migration[5.2]
|
5
|
+
def up
|
6
|
+
execute %(
|
7
|
+
create or replace function posts_tsvector(title text, lead text, body text)
|
8
|
+
returns tsvector as $$
|
9
|
+
begin
|
10
|
+
return (
|
11
|
+
setweight(to_tsvector('russian', title), 'A') ||
|
12
|
+
setweight(to_tsvector('russian', coalesce(lead, '')), 'B') ||
|
13
|
+
setweight(to_tsvector('russian', body), 'C')
|
14
|
+
);
|
15
|
+
end
|
16
|
+
$$ language 'plpgsql' immutable;
|
17
|
+
)
|
18
|
+
execute 'create index posts_search_idx on posts using gin(posts_tsvector(title, lead, body));'
|
19
|
+
end
|
20
|
+
|
21
|
+
def down
|
22
|
+
# no rollback needed
|
23
|
+
end
|
24
|
+
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# Tables for post types, categories and tags
|
4
4
|
class CreatePostTypes < ActiveRecord::Migration[5.2]
|
5
5
|
def up
|
6
|
+
create_component
|
6
7
|
create_post_types unless PostType.table_exists?
|
7
8
|
create_post_categories unless PostCategory.table_exists?
|
8
9
|
create_post_tags unless PostTag.table_exists?
|
@@ -34,7 +35,6 @@ class CreatePostTypes < ActiveRecord::Migration[5.2]
|
|
34
35
|
add_index :post_types, :name, unique: true
|
35
36
|
|
36
37
|
create_default_types
|
37
|
-
create_privileges
|
38
38
|
end
|
39
39
|
|
40
40
|
def create_post_categories
|
@@ -54,6 +54,7 @@ class CreatePostTypes < ActiveRecord::Migration[5.2]
|
|
54
54
|
t.string :meta_description
|
55
55
|
t.string :parents_cache, default: '', null: false
|
56
56
|
t.integer :children_cache, default: [], array: true, null: false
|
57
|
+
t.jsonb :data, default: {}, null: false
|
57
58
|
end
|
58
59
|
|
59
60
|
add_foreign_key :post_categories, :post_categories, column: :parent_id, on_update: :cascade, on_delete: :cascade
|
@@ -89,17 +90,7 @@ class CreatePostTypes < ActiveRecord::Migration[5.2]
|
|
89
90
|
end
|
90
91
|
end
|
91
92
|
|
92
|
-
def
|
93
|
-
|
94
|
-
chief_editor = Privilege.find_by(slug: 'chief_editor') || Privilege.create(slug: 'chief_editor', name: 'Главный редактор')
|
95
|
-
children = {
|
96
|
-
editor: 'Редактор'
|
97
|
-
}
|
98
|
-
|
99
|
-
children.each do |slug, name|
|
100
|
-
child = Privilege.new(parent: chief_editor, slug: slug, name: name, administrative: false)
|
101
|
-
|
102
|
-
group.add_privilege(child) if child.save
|
103
|
-
end
|
93
|
+
def create_component
|
94
|
+
BiovisionComponent.create(slug: 'posts')
|
104
95
|
end
|
105
96
|
end
|
@@ -13,9 +13,11 @@ class CreatePosts < ActiveRecord::Migration[5.2]
|
|
13
13
|
create_post_notes unless PostNote.table_exists?
|
14
14
|
create_featured_posts unless FeaturedPost.table_exists?
|
15
15
|
create_post_illustrations unless PostIllustration.table_exists?
|
16
|
+
create_post_attachments unless PostAttachment.table_exists?
|
16
17
|
end
|
17
18
|
|
18
19
|
def down
|
20
|
+
drop_table :post_attachments if PostAttachment.table_exists?
|
19
21
|
drop_table :post_illustrations if PostIllustration.table_exists?
|
20
22
|
drop_table :featured_posts if FeaturedPost.table_exists?
|
21
23
|
drop_table :post_notes if PostNote.table_exists?
|
@@ -87,15 +89,26 @@ class CreatePosts < ActiveRecord::Migration[5.2]
|
|
87
89
|
|
88
90
|
execute "create index posts_created_at_month_idx on posts using btree (date_trunc('month', created_at), post_type_id, user_id);"
|
89
91
|
execute "create index posts_pubdate_month_idx on posts using btree (date_trunc('month', publication_time), post_type_id, user_id);"
|
92
|
+
execute %(
|
93
|
+
create or replace function posts_tsvector(title text, lead text, body text)
|
94
|
+
returns tsvector as $$
|
95
|
+
begin
|
96
|
+
return (
|
97
|
+
setweight(to_tsvector('russian', title), 'A') ||
|
98
|
+
setweight(to_tsvector('russian', coalesce(lead, '')), 'B') ||
|
99
|
+
setweight(to_tsvector('russian', body), 'C')
|
100
|
+
);
|
101
|
+
end
|
102
|
+
$$ language 'plpgsql' immutable;
|
103
|
+
)
|
104
|
+
execute "create index posts_search_idx on posts using gin(posts_tsvector(title, lead, body));"
|
90
105
|
|
91
106
|
add_foreign_key :posts, :posts, column: :original_post_id, on_update: :cascade, on_delete: :nullify
|
92
107
|
|
93
108
|
add_index :posts, :created_at
|
94
109
|
add_index :posts, :data, using: :gin
|
95
110
|
|
96
|
-
if Gem.loaded_specs.key?('elasticsearch-model')
|
97
|
-
Post.__elasticsearch__.create_index!
|
98
|
-
end
|
111
|
+
Post.__elasticsearch__.create_index! if Gem.loaded_specs.key?('elasticsearch-model')
|
99
112
|
end
|
100
113
|
|
101
114
|
def create_post_post_tags
|
@@ -191,4 +204,14 @@ class CreatePosts < ActiveRecord::Migration[5.2]
|
|
191
204
|
t.string :image
|
192
205
|
end
|
193
206
|
end
|
207
|
+
|
208
|
+
def create_post_attachments
|
209
|
+
create_table :post_attachments, comment: 'Attachment for post' do |t|
|
210
|
+
t.references :post, foreign_key: { on_update: :cascade, on_delete: :cascade }
|
211
|
+
t.uuid :uuid
|
212
|
+
t.timestamps
|
213
|
+
t.string :name
|
214
|
+
t.string :file
|
215
|
+
end
|
216
|
+
end
|
194
217
|
end
|