biovision-post 0.21.190513.0 → 0.26.191013.0
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/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
|