rcms 0.1.0 → 0.1.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 +4 -4
- data/app/assets/stylesheets/rcms/mentions.scss +30 -0
- data/app/assets/stylesheets/rcms/news.scss +26 -0
- data/config/locales/rcms.ru.yml +47 -0
- data/lib/generators/rcms_feedback_generator.rb +25 -0
- data/lib/generators/rcms_mentions_generator.rb +38 -0
- data/lib/generators/rcms_news_generator.rb +40 -0
- data/lib/generators/templates/app/models/rcms/page.rb +0 -4
- data/lib/generators/templates_feedback/app/controllers/rcms/feedbacks_controller.rb +12 -0
- data/lib/generators/templates_feedback/app/mailers/.keep +0 -0
- data/lib/generators/templates_feedback/app/mailers/feedback_mailer.rb +13 -0
- data/lib/generators/templates_feedback/app/models/rcms/feedback.rb +28 -0
- data/lib/generators/templates_feedback/app/views/feedback_mailer/_form.html.slim +10 -0
- data/lib/generators/templates_feedback/app/views/feedback_mailer/feedback.html.slim +5 -0
- data/lib/generators/templates_feedback/app/views/feedback_mailer/plain.html.slim +1 -0
- data/lib/generators/templates_mentions/app/admin/rcms/mention.rb +15 -0
- data/lib/generators/templates_mentions/app/controllers/rcms/mentions_controller.rb +26 -0
- data/lib/generators/templates_mentions/app/models/rcms/mention.rb +19 -0
- data/lib/generators/templates_mentions/app/views/rcms/mentions/_dialog.html.slim +17 -0
- data/lib/generators/templates_mentions/app/views/rcms/mentions/_preview.html.slim +15 -0
- data/lib/generators/templates_mentions/migration.rb +16 -0
- data/lib/generators/templates_news/app/admin/rcms/news.rb +39 -0
- data/lib/generators/templates_news/app/controllers/rcms/news_controller.rb +16 -0
- data/lib/generators/templates_news/app/models/rcms/news.rb +27 -0
- data/lib/generators/templates_news/app/uploaders/rcms/news_image_uploader.rb +48 -0
- data/lib/generators/templates_news/app/views/rcms/news/_menu.html.slim +0 -0
- data/lib/generators/templates_news/app/views/rcms/news/index.html.slim +0 -0
- data/lib/generators/templates_news/app/views/rcms/news/show.html.slim +0 -0
- data/lib/generators/templates_news/migration.rb +19 -0
- data/lib/rcms/version.rb +1 -1
- metadata +28 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c38dccc02b702057f6ff1c64ff346be11fc94607
|
|
4
|
+
data.tar.gz: 4347c11e18b06616013d8819776d8571fcff09e7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e85e6d8a5f4c0424b377b08e132a3808df63c32a743f64606897d9769ed78850de0ec5fd702f290ddb3d7cfc14d1632e105c84a3df36af61abb24099ad0a4ac3
|
|
7
|
+
data.tar.gz: be2e5f1ac7eeb38045b7be76734e0cdfcc9f21923a5ea742d4dd181283080de738b96ebcf77cd90b30cdb6fd04e44d4c7090528288501544d7f7f6e509b2043f
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
$success-color: #4CAF50 !default;
|
|
2
|
+
|
|
3
|
+
.rcms-mention-form{
|
|
4
|
+
fieldset{
|
|
5
|
+
width: 350px;
|
|
6
|
+
margin: 30px auto;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.aside-mentions-list{
|
|
11
|
+
.fa{
|
|
12
|
+
color: rgba(0,0,0,0.3);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.mention-item{
|
|
16
|
+
.text{
|
|
17
|
+
padding-bottom: 15px;
|
|
18
|
+
margin-bottom: 15px;
|
|
19
|
+
border-bottom: 1px dashed #aeaeae;
|
|
20
|
+
height: 56px;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
.username{
|
|
24
|
+
color: $success-color;
|
|
25
|
+
margin-right: 7px;
|
|
26
|
+
}
|
|
27
|
+
time{
|
|
28
|
+
color: #777;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.aside-news-list{
|
|
2
|
+
.news-item{
|
|
3
|
+
&:last-of-type .list-group-item-text{
|
|
4
|
+
border-bottom: none;
|
|
5
|
+
padding-bottom: 0;
|
|
6
|
+
margin-bottom: 0;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.list-group-item-text{
|
|
11
|
+
padding-bottom: 15px;
|
|
12
|
+
margin-bottom: 15px;
|
|
13
|
+
border-bottom: 1px dashed #888888;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.list-group-item-heading {
|
|
17
|
+
margin-top: 8px;
|
|
18
|
+
margin-bottom: 5px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&.list-group .list-group-item .list-group-item-heading {
|
|
22
|
+
color: rgba(0, 0, 0, 0.77);
|
|
23
|
+
font-size: 18px;
|
|
24
|
+
line-height: 22px;
|
|
25
|
+
}
|
|
26
|
+
}
|
data/config/locales/rcms.ru.yml
CHANGED
|
@@ -3,6 +3,15 @@ ru:
|
|
|
3
3
|
none: 1
|
|
4
4
|
page:
|
|
5
5
|
not_found: Информационная страничка "%{slug}" не найдена.
|
|
6
|
+
feedback:
|
|
7
|
+
subject: "Обратная связь для %{contact}"
|
|
8
|
+
created: "Запрос отправлен"
|
|
9
|
+
news:
|
|
10
|
+
index_title: Новости
|
|
11
|
+
mentions:
|
|
12
|
+
created: Спасибо за Ваш отзыв
|
|
13
|
+
index_title: Все отзывы
|
|
14
|
+
|
|
6
15
|
activerecord:
|
|
7
16
|
models:
|
|
8
17
|
rcms/page:
|
|
@@ -11,6 +20,12 @@ ru:
|
|
|
11
20
|
many: Страниц
|
|
12
21
|
other: Страницы
|
|
13
22
|
|
|
23
|
+
rcms/mention:
|
|
24
|
+
one: Отзыв
|
|
25
|
+
few: Отзывов
|
|
26
|
+
many: Отзывы
|
|
27
|
+
other: Отзывы
|
|
28
|
+
|
|
14
29
|
rcms/partial:
|
|
15
30
|
one: Текст
|
|
16
31
|
few: Текса
|
|
@@ -28,22 +43,54 @@ ru:
|
|
|
28
43
|
many: Мета тегов
|
|
29
44
|
other: Мета теги
|
|
30
45
|
|
|
46
|
+
rcms/news:
|
|
47
|
+
one: Новость
|
|
48
|
+
few: Новостей
|
|
49
|
+
many: Новости
|
|
50
|
+
other: Новости
|
|
51
|
+
|
|
31
52
|
attributes:
|
|
53
|
+
rcms/mention:
|
|
54
|
+
updated_at: Редактировано
|
|
55
|
+
created_at: Создано
|
|
56
|
+
text: Отзыв
|
|
57
|
+
username: Имя
|
|
58
|
+
email: E-mail
|
|
59
|
+
is_published: Опубликован
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
rcms/news:
|
|
63
|
+
title: Заголовок
|
|
64
|
+
image: Файл изображения
|
|
65
|
+
remote_image_url: URL изображения
|
|
66
|
+
remote_image_url_hint: для загрузки из сети
|
|
67
|
+
slug: Url-ключ
|
|
68
|
+
description: Краткое описание
|
|
69
|
+
description_hint: будет в списках новостей вместо обрезанного поля "текст"
|
|
70
|
+
is_published: Опубликовано
|
|
71
|
+
text: Текст
|
|
72
|
+
slug_hint: "Url новости: %{path}"
|
|
73
|
+
updated_at: Редактировано
|
|
74
|
+
created_at: Создано
|
|
75
|
+
|
|
32
76
|
rcms/page:
|
|
33
77
|
title: Заголовок
|
|
34
78
|
slug: Url-ключ
|
|
35
79
|
text: Текст
|
|
36
80
|
slug_hint: "Url странички: %{path}"
|
|
37
81
|
updated_at: Редактировано
|
|
82
|
+
created_at: Создано
|
|
38
83
|
rcms/partial:
|
|
39
84
|
placement: Разположение
|
|
40
85
|
description: Описание (для админа)
|
|
41
86
|
text: Текст
|
|
87
|
+
created_at: Создано
|
|
42
88
|
updated_at: Редактировано
|
|
43
89
|
rcms/meta_page:
|
|
44
90
|
path: Путь
|
|
45
91
|
path_hint: например "/p-some-product-name"
|
|
46
92
|
meta_tags: Мета теги
|
|
93
|
+
created_at: Создано
|
|
47
94
|
updated_at: Редактировано
|
|
48
95
|
rcms/meta_tag:
|
|
49
96
|
key: Название тега
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class RcmsFeedbackGenerator < Rails::Generators::Base
|
|
2
|
+
source_root File.expand_path("../templates_feedback", __FILE__)
|
|
3
|
+
|
|
4
|
+
def create_all_files
|
|
5
|
+
%w(feedbacks_controller.rb).each do |name|
|
|
6
|
+
copy_file "app/controllers/rcms/#{name}"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
%w(feedback_mailer.rb).each do |name|
|
|
10
|
+
copy_file "app/mailers/#{name}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
%w(feedback.rb).each do |name|
|
|
14
|
+
copy_file "app/models/rcms/#{name}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
%w(feedback.html.slim plain.html.slim _form.html.slim).each do |name|
|
|
18
|
+
copy_file "app/views/feedback_mailer/#{name}"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def patch_routes
|
|
23
|
+
insert_into_file "config/routes.rb", " post 'rcms/feedbacks' => 'rcms/feedbacks#create', as: :rcms_feedbacks\n", :after => "Rails.application.routes.draw do\n"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
class RcmsMentionsGenerator < Rails::Generators::Base
|
|
2
|
+
source_root File.expand_path("../templates_mentions", __FILE__)
|
|
3
|
+
include Rails::Generators::Migration
|
|
4
|
+
|
|
5
|
+
def self.next_migration_number(dirname)
|
|
6
|
+
Time.now.strftime("%Y%m%d%H%M%S")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def create_cmshelper_migration
|
|
10
|
+
migration_template "migration.rb", File.join('db/migrate', "create_rcms_mentions_tables.rb")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def create_all_files
|
|
14
|
+
Rails.cache.clear
|
|
15
|
+
|
|
16
|
+
%w(mention.rb).each do |name|
|
|
17
|
+
copy_file "app/admin/rcms/#{name}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
%w(mentions_controller.rb).each do |name|
|
|
21
|
+
copy_file "app/controllers/rcms/#{name}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
%w(mention.rb).each do |name|
|
|
25
|
+
copy_file "app/models/rcms/#{name}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
%w(_dialog.html.slim _preview.html.slim).each do |name|
|
|
29
|
+
copy_file "app/views/rcms/mentions/#{name}"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def patch_routes
|
|
34
|
+
insert_into_file "config/routes.rb",
|
|
35
|
+
" get 'mentions' => 'rcms/mentions#index', as: :rcms_mentions\n post 'mentions' => 'rcms/mentions#create'\n",
|
|
36
|
+
:after => "Rails.application.routes.draw do\n"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class RcmsNewsGenerator < Rails::Generators::Base
|
|
2
|
+
source_root File.expand_path("../templates_news", __FILE__)
|
|
3
|
+
include Rails::Generators::Migration
|
|
4
|
+
|
|
5
|
+
def self.next_migration_number(dirname)
|
|
6
|
+
Time.now.strftime("%Y%m%d%H%M%S")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def create_cmshelper_migration
|
|
10
|
+
migration_template "migration.rb", File.join('db/migrate', "create_rcms_news_tables.rb")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def create_all_files
|
|
14
|
+
Rails.cache.clear
|
|
15
|
+
|
|
16
|
+
%w(news.rb).each do |name|
|
|
17
|
+
copy_file "app/admin/rcms/#{name}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
%w(news_controller.rb).each do |name|
|
|
21
|
+
copy_file "app/controllers/rcms/#{name}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
%w(news.rb).each do |name|
|
|
25
|
+
copy_file "app/models/rcms/#{name}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
%w(news_image_uploader.rb).each do |name|
|
|
29
|
+
copy_file "app/uploaders/rcms/#{name}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
%w(_menu.html.slim index.html.slim show.html.slim).each do |name|
|
|
33
|
+
copy_file "app/views/rcms/news/#{name}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def patch_routes
|
|
38
|
+
insert_into_file "config/routes.rb", " get 'news' => 'rcms/news#index', as: :rcms_news\n get 'news-:slug' => 'rcms/news#show', as: :rcms_new\n", :after => "Rails.application.routes.draw do\n"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
class Rcms::FeedbacksController < ApplicationController
|
|
2
|
+
def create
|
|
3
|
+
@feedback = Feedback.new( params.require(:rcms_feedback).permit(:username, :feedback_type, :text, :phone) )
|
|
4
|
+
if @feedback.valid?
|
|
5
|
+
FeedbackMailer.feedback(@feedback).deliver_now
|
|
6
|
+
flash[:success] = t('rcms.feedback.created')
|
|
7
|
+
redirect_to root_path
|
|
8
|
+
else
|
|
9
|
+
render :create
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class FeedbackMailer < ActionMailer::Base
|
|
2
|
+
def feedback(feedback)
|
|
3
|
+
@feedback = feedback
|
|
4
|
+
admin_emails = AdminUser.pluck(:email)
|
|
5
|
+
mail(to: admin_emails, subject: @feedback.subject)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def plain(text)
|
|
9
|
+
@text = text
|
|
10
|
+
admin_emails = AdminUser.pluck(:email)
|
|
11
|
+
mail(to: admin_emails, subject: text)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class Rcms::Feedback
|
|
2
|
+
include ActiveModel::Validations
|
|
3
|
+
include ActiveModel::Conversion
|
|
4
|
+
extend ActiveModel::Naming
|
|
5
|
+
|
|
6
|
+
attr_accessor :username
|
|
7
|
+
attr_accessor :feedback_type
|
|
8
|
+
attr_accessor :phone
|
|
9
|
+
attr_accessor :text
|
|
10
|
+
attr_accessor :email
|
|
11
|
+
|
|
12
|
+
validates_presence_of :phone
|
|
13
|
+
|
|
14
|
+
def subject
|
|
15
|
+
I18n.t('rcms.feedback.subject', contact: (phone||email))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def initialize(attributes = {})
|
|
19
|
+
attributes.each do |name, value|
|
|
20
|
+
send("#{name}=", value)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def persisted?
|
|
25
|
+
false
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
- feedback = @feedback || Rcms::Feedback.new(feedback_type: 'Позвоните мне')
|
|
2
|
+
= simple_form_for feedback, url: rcms_feedbacks_path do |f|
|
|
3
|
+
.hide
|
|
4
|
+
= f.input_field :feedback_type
|
|
5
|
+
.form-group
|
|
6
|
+
= f.input_field :username, placeholder: 'имя', required: true, class: 'form-control'
|
|
7
|
+
.clearfix
|
|
8
|
+
= f.input_field :phone, placeholder: 'номер телефона', required: true, class: 'form-control'
|
|
9
|
+
.clearfix
|
|
10
|
+
button.btn.btn-primary.btn-sm.pull-right Позвоните мне
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
== @text
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ActiveAdmin.register Rcms::Mention do
|
|
2
|
+
# include AdminRedirects
|
|
3
|
+
|
|
4
|
+
permit_params :username, :text, :email, :is_published
|
|
5
|
+
|
|
6
|
+
form do |f|
|
|
7
|
+
f.inputs do
|
|
8
|
+
f.input :username
|
|
9
|
+
f.input :email
|
|
10
|
+
f.input :is_published
|
|
11
|
+
f.input :text
|
|
12
|
+
end
|
|
13
|
+
f.actions
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
class Rcms::MentionsController < ApplicationController
|
|
2
|
+
def index
|
|
3
|
+
@news = Rcms::News.all.page(params[:page]).per(10)
|
|
4
|
+
apply_meta_tags title: t('rcms.mentions.index_title')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def create
|
|
8
|
+
@mention = Rcms::Mention.new mention_params
|
|
9
|
+
|
|
10
|
+
@mention.is_published = true
|
|
11
|
+
if @mention.save
|
|
12
|
+
redirect_to after_create_path(@mention), flash: {success: t('rcms.mentions.created')}
|
|
13
|
+
else
|
|
14
|
+
render :create
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def after_create_path mention
|
|
19
|
+
root_path
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
protected
|
|
23
|
+
def mention_params
|
|
24
|
+
params.require(:rcms_mention).permit(:username, :email, :text)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class Rcms::Mention < ActiveRecord::Base
|
|
2
|
+
self.table_name = 'rcms_mentions'
|
|
3
|
+
|
|
4
|
+
scope :frontend, -> {where(is_published: true).order('id desc')}
|
|
5
|
+
scope :preview, -> {frontend.limit(4)}
|
|
6
|
+
|
|
7
|
+
validates_presence_of :username, :text
|
|
8
|
+
|
|
9
|
+
def get_short_desc l = 110
|
|
10
|
+
truncate(text, l)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def truncate text, l = 110
|
|
14
|
+
return nil if text.nil?
|
|
15
|
+
text = ActionView::Base.full_sanitizer.sanitize(text)
|
|
16
|
+
text.length > l ? text.truncate(l) : text
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
.modal#new-mention-dialog.rcms-mention-form
|
|
2
|
+
= simple_form_for @mention||Rcms::Mention.new, url: rcms_mentions_path do |f|
|
|
3
|
+
.modal-dialog
|
|
4
|
+
.modal-content
|
|
5
|
+
.modal-header
|
|
6
|
+
button.close aria-hidden="true" data-dismiss="modal" type="button" ×
|
|
7
|
+
h4.modal-title Новый отзыв
|
|
8
|
+
.modal-body
|
|
9
|
+
fieldset
|
|
10
|
+
.form-group
|
|
11
|
+
= f.input_field :username, class: 'form-control', placeholder: "Ваше имя", required: true
|
|
12
|
+
.form-group
|
|
13
|
+
= f.input_field :text, class: 'form-control', placeholder: "Отзыв", required: true
|
|
14
|
+
|
|
15
|
+
.modal-footer
|
|
16
|
+
button.btn.btn-default data-dismiss="modal" type="button" Отмена
|
|
17
|
+
button.btn.btn-success type="submit" оставить отзыв
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
.aside-mentions-list.row
|
|
2
|
+
- @mentions_preview.each do |mention|
|
|
3
|
+
.col-xs-6.mention-item
|
|
4
|
+
/.pull-left
|
|
5
|
+
i.fa.fa-quote-left
|
|
6
|
+
.pull-right
|
|
7
|
+
i.fa.fa-quote-right
|
|
8
|
+
span.username
|
|
9
|
+
= mention.username
|
|
10
|
+
time.small
|
|
11
|
+
= l(mention.created_at, format: :short)
|
|
12
|
+
.clearfix
|
|
13
|
+
.text
|
|
14
|
+
span.small
|
|
15
|
+
= mention.get_short_desc 120
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class CreateRcmsMentionsTables < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :rcms_mentions do |t|
|
|
4
|
+
t.string :username
|
|
5
|
+
t.string :email
|
|
6
|
+
t.boolean :is_published
|
|
7
|
+
t.text :text
|
|
8
|
+
|
|
9
|
+
t.timestamps
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.down
|
|
14
|
+
drop_table :rcms_mentions
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
ActiveAdmin.register Rcms::News do
|
|
2
|
+
# include AdminRedirects
|
|
3
|
+
|
|
4
|
+
permit_params :slug, :title, :text, :image, :image_cache, :remote_image_url, :is_published, :description
|
|
5
|
+
|
|
6
|
+
form do |f|
|
|
7
|
+
f.inputs do
|
|
8
|
+
f.input :title
|
|
9
|
+
|
|
10
|
+
f.input :remote_image_url, as: :string, hint: t("activerecord.attributes.rcms/news.remote_image_url_hint")
|
|
11
|
+
f.input :image, as: :file, :hint => f.object.image.default? ? '' : "<img src='#{f.object.image.url(:list)}' />".html_safe
|
|
12
|
+
|
|
13
|
+
f.input :image_cache, as: :hidden
|
|
14
|
+
f.input :is_published
|
|
15
|
+
|
|
16
|
+
f.input :slug, hint: f.object.persisted? ? (t("activerecord.attributes.rcms/news.slug_hint", path: rcms_new_path(f.object))) : nil
|
|
17
|
+
f.input :description, hint: t("activerecord.attributes.rcms/news.description_hint")
|
|
18
|
+
f.inputs t("activerecord.attributes.rcms/page.text") do
|
|
19
|
+
f.cktext_area :text
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
f.actions
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
index do
|
|
26
|
+
selectable_column
|
|
27
|
+
column :id
|
|
28
|
+
column :image do |object|
|
|
29
|
+
"<img src='#{object.image.url(:list)}' height='40' />".html_safe
|
|
30
|
+
end
|
|
31
|
+
column :slug
|
|
32
|
+
column :title
|
|
33
|
+
column :updated_at
|
|
34
|
+
actions
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
filter :slug
|
|
38
|
+
filter :title
|
|
39
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class Rcms::NewsController < ApplicationController
|
|
2
|
+
def index
|
|
3
|
+
@news = Rcms::News.all.page(params[:page]).per(10)
|
|
4
|
+
apply_meta_tags title: t('rcms.news.index_title')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def show
|
|
8
|
+
@news_article = retrieve slug_or_id
|
|
9
|
+
apply_meta_tags @news_article
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def retrieve slug_or_id
|
|
13
|
+
Rcms::News.find slug_or_id
|
|
14
|
+
rescue
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class Rcms::News < ActiveRecord::Base
|
|
2
|
+
self.table_name = 'rcms_news'
|
|
3
|
+
extend FriendlyId
|
|
4
|
+
friendly_id :title, use: [:slugged, :finders]
|
|
5
|
+
|
|
6
|
+
mount_uploader :image, Rcms::NewsImageUploader
|
|
7
|
+
|
|
8
|
+
scope :frontend, -> {where(is_published: true).order('id desc')}
|
|
9
|
+
scope :aside_menu, -> {frontend.limit(3)}
|
|
10
|
+
|
|
11
|
+
def get_short_desc l = 110
|
|
12
|
+
description.present? ? truncate(description, l) : truncate(text, l)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def truncate text, l = 110
|
|
16
|
+
return nil if text.nil?
|
|
17
|
+
text = ActionView::Base.full_sanitizer.sanitize(text)
|
|
18
|
+
text.length > l ? text.truncate(l) : text
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
def should_generate_new_friendly_id?
|
|
24
|
+
!slug.present?
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
class Rcms::NewsImageUploader < CarrierWave::Uploader::Base
|
|
4
|
+
|
|
5
|
+
# Include RMagick or MiniMagick support:
|
|
6
|
+
include CarrierWave::RMagick
|
|
7
|
+
# include CarrierWave::MiniMagick
|
|
8
|
+
|
|
9
|
+
# Choose what kind of storage to use for this uploader:
|
|
10
|
+
storage :file
|
|
11
|
+
# storage :fog
|
|
12
|
+
|
|
13
|
+
def store_dir
|
|
14
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def default_url
|
|
18
|
+
# For Rails 3.1+ asset pipeline compatibility:
|
|
19
|
+
# ActionController::Base.helpers.asset_path("images/#{fallback_dir}/" + [version_name, "default.png"].compact.join('_'))
|
|
20
|
+
ActionController::Base.helpers.asset_path("default.jpg")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_filename(name)
|
|
24
|
+
@filename = name
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def extension_white_list
|
|
28
|
+
%w(jpg jpeg png bmp)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def default?
|
|
32
|
+
url == default_url
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
version :list do
|
|
36
|
+
process :resize_to_limit => [100, 100]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
version :show do
|
|
40
|
+
process :resize_to_limit => [200, 200]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
protected
|
|
44
|
+
|
|
45
|
+
def fallback_dir
|
|
46
|
+
model.class.to_s.underscore
|
|
47
|
+
end
|
|
48
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class CreateRcmsNewsTables < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :rcms_news do |t|
|
|
4
|
+
t.string :image
|
|
5
|
+
t.string :title
|
|
6
|
+
t.string :description
|
|
7
|
+
t.string :slug
|
|
8
|
+
t.boolean :is_published
|
|
9
|
+
t.text :text
|
|
10
|
+
|
|
11
|
+
t.timestamps
|
|
12
|
+
end
|
|
13
|
+
add_index :rcms_news, :slug, unique: true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.down
|
|
17
|
+
drop_table :rcms_news
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/rcms/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rcms
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ruslan.palagin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-10-
|
|
11
|
+
date: 2015-10-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -57,10 +57,15 @@ files:
|
|
|
57
57
|
- LICENSE.txt
|
|
58
58
|
- README.md
|
|
59
59
|
- Rakefile
|
|
60
|
+
- app/assets/stylesheets/rcms/mentions.scss
|
|
61
|
+
- app/assets/stylesheets/rcms/news.scss
|
|
60
62
|
- bin/console
|
|
61
63
|
- bin/setup
|
|
62
64
|
- config/locales/rcms.ru.yml
|
|
65
|
+
- lib/generators/rcms_feedback_generator.rb
|
|
63
66
|
- lib/generators/rcms_generator.rb
|
|
67
|
+
- lib/generators/rcms_mentions_generator.rb
|
|
68
|
+
- lib/generators/rcms_news_generator.rb
|
|
64
69
|
- lib/generators/templates/app/admin/rcms/meta_page.rb
|
|
65
70
|
- lib/generators/templates/app/admin/rcms/page.rb
|
|
66
71
|
- lib/generators/templates/app/admin/rcms/partial.rb
|
|
@@ -71,6 +76,27 @@ files:
|
|
|
71
76
|
- lib/generators/templates/app/models/rcms/partial.rb
|
|
72
77
|
- lib/generators/templates/app/views/rcms/pages/show.html.slim
|
|
73
78
|
- lib/generators/templates/migration.rb
|
|
79
|
+
- lib/generators/templates_feedback/app/controllers/rcms/feedbacks_controller.rb
|
|
80
|
+
- lib/generators/templates_feedback/app/mailers/.keep
|
|
81
|
+
- lib/generators/templates_feedback/app/mailers/feedback_mailer.rb
|
|
82
|
+
- lib/generators/templates_feedback/app/models/rcms/feedback.rb
|
|
83
|
+
- lib/generators/templates_feedback/app/views/feedback_mailer/_form.html.slim
|
|
84
|
+
- lib/generators/templates_feedback/app/views/feedback_mailer/feedback.html.slim
|
|
85
|
+
- lib/generators/templates_feedback/app/views/feedback_mailer/plain.html.slim
|
|
86
|
+
- lib/generators/templates_mentions/app/admin/rcms/mention.rb
|
|
87
|
+
- lib/generators/templates_mentions/app/controllers/rcms/mentions_controller.rb
|
|
88
|
+
- lib/generators/templates_mentions/app/models/rcms/mention.rb
|
|
89
|
+
- lib/generators/templates_mentions/app/views/rcms/mentions/_dialog.html.slim
|
|
90
|
+
- lib/generators/templates_mentions/app/views/rcms/mentions/_preview.html.slim
|
|
91
|
+
- lib/generators/templates_mentions/migration.rb
|
|
92
|
+
- lib/generators/templates_news/app/admin/rcms/news.rb
|
|
93
|
+
- lib/generators/templates_news/app/controllers/rcms/news_controller.rb
|
|
94
|
+
- lib/generators/templates_news/app/models/rcms/news.rb
|
|
95
|
+
- lib/generators/templates_news/app/uploaders/rcms/news_image_uploader.rb
|
|
96
|
+
- lib/generators/templates_news/app/views/rcms/news/_menu.html.slim
|
|
97
|
+
- lib/generators/templates_news/app/views/rcms/news/index.html.slim
|
|
98
|
+
- lib/generators/templates_news/app/views/rcms/news/show.html.slim
|
|
99
|
+
- lib/generators/templates_news/migration.rb
|
|
74
100
|
- lib/rcms.rb
|
|
75
101
|
- lib/rcms/application_controller.rb
|
|
76
102
|
- lib/rcms/router.rb
|