my_forum 0.0.1.beta28 → 0.0.1.beta29
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/my_forum/posts.css.scss +18 -0
- data/app/controllers/my_forum/application_controller.rb +6 -1
- data/app/controllers/my_forum/topics_controller.rb +28 -1
- data/app/helpers/my_forum/topics_helper.rb +3 -1
- data/app/helpers/my_forum/users_helper.rb +4 -0
- data/app/models/my_forum/forum.rb +2 -2
- data/app/models/my_forum/topic.rb +2 -0
- data/app/views/my_forum/private_messages/new.haml +2 -2
- data/app/views/my_forum/topics/_post.haml +6 -4
- data/app/views/my_forum/topics/_profile_popover.haml +22 -0
- data/app/views/my_forum/topics/show.haml +36 -1
- data/config/locales/ru.yml +18 -0
- data/config/routes.rb +4 -0
- data/lib/my_forum/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81f9f7e3ca4c8bdfc291d5e53c27f602f5023b6d
|
4
|
+
data.tar.gz: c35fb58614dd1bf75170b626df663a359f6e5b36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e820b8589722f67d278cf6a5821fb5f184a9ac5ab384f66bff63672214a34f5ce5ecad25e7cbc5ee922723a79d5476783cd0f00dd22e60a654a24ad6e18702f0
|
7
|
+
data.tar.gz: 4c38f98ecf6fdc739b0ec517dab58cc7562f7f38ae1abce7ebe3f2eb9adb71850b2274ac11a54ae7edd8102585806c8b582221610e5b600c8933b90f768bd083
|
@@ -1,3 +1,13 @@
|
|
1
|
+
.profile-popover {
|
2
|
+
width: 360px;
|
3
|
+
font-size: 11px;
|
4
|
+
color: #000;
|
5
|
+
|
6
|
+
.pm {
|
7
|
+
margin-top: 10px;
|
8
|
+
}
|
9
|
+
}
|
10
|
+
|
1
11
|
.topic_posts_info {
|
2
12
|
background-color: #d3daed;
|
3
13
|
color: #fff;
|
@@ -14,11 +24,19 @@
|
|
14
24
|
border: 1px solid #DFDFDF;
|
15
25
|
background-color: #fff;
|
16
26
|
|
27
|
+
.user_profile_popover {
|
28
|
+
cursor: pointer;
|
29
|
+
}
|
30
|
+
|
17
31
|
.post_from_user_login {
|
18
32
|
font-weight: bold;
|
19
33
|
color: #c1ccf5;
|
20
34
|
}
|
21
35
|
|
36
|
+
.post_from_user_login .login:hover {
|
37
|
+
color: #fff;
|
38
|
+
}
|
39
|
+
|
22
40
|
.post-header {
|
23
41
|
height: 36px;
|
24
42
|
line-height: 36px;
|
@@ -3,7 +3,7 @@ module MyForum
|
|
3
3
|
|
4
4
|
before_filter :user_activity
|
5
5
|
|
6
|
-
helper_method :attachment_img_path, :emoticons_list
|
6
|
+
helper_method :attachment_img_path, :emoticons_list, :is_admin?
|
7
7
|
|
8
8
|
def authenticate_user!
|
9
9
|
redirect_to admin_signin_path unless current_user
|
@@ -19,6 +19,11 @@ module MyForum
|
|
19
19
|
end
|
20
20
|
helper_method :current_user_id
|
21
21
|
|
22
|
+
def is_admin?
|
23
|
+
return false unless current_user
|
24
|
+
current_user.is_admin?
|
25
|
+
end
|
26
|
+
|
22
27
|
def current_user_groups
|
23
28
|
return [].push UserGroup::GUEST_GROUP.name unless current_user
|
24
29
|
current_user.user_groups.map &:name
|
@@ -2,7 +2,8 @@ require_dependency "my_forum/application_controller"
|
|
2
2
|
|
3
3
|
module MyForum
|
4
4
|
class TopicsController < ApplicationController
|
5
|
-
before_filter :find_forum,
|
5
|
+
before_filter :find_forum, only: [:new, :create, :show]
|
6
|
+
before_filter :check_is_admin, only: [:pin, :close, :delete]
|
6
7
|
|
7
8
|
def new
|
8
9
|
@topic = @forum.topics.build
|
@@ -33,8 +34,34 @@ module MyForum
|
|
33
34
|
redirect_to forum_path(@forum)
|
34
35
|
end
|
35
36
|
|
37
|
+
def pin
|
38
|
+
return unless topic = Topic.find_by_id(params[:topic_id])
|
39
|
+
topic.toggle!(:pinned)
|
40
|
+
|
41
|
+
redirect_to forum_topic_path(topic.forum, topic)
|
42
|
+
end
|
43
|
+
|
44
|
+
def close
|
45
|
+
return unless topic = Topic.find_by_id(params[:topic_id])
|
46
|
+
topic.toggle!(:closed)
|
47
|
+
|
48
|
+
redirect_to forum_topic_path(topic.forum, topic)
|
49
|
+
end
|
50
|
+
|
51
|
+
def delete
|
52
|
+
return unless topic = Topic.find_by_id(params[:topic_id])
|
53
|
+
topic.update!(deleted: true)
|
54
|
+
|
55
|
+
redirect_to forum_path(topic.forum)
|
56
|
+
end
|
57
|
+
|
36
58
|
private
|
37
59
|
|
60
|
+
def check_is_admin
|
61
|
+
return unless current_user
|
62
|
+
return unless current_user.is_admin?
|
63
|
+
end
|
64
|
+
|
38
65
|
def find_forum
|
39
66
|
@forum = Forum.find(params[:forum_id])
|
40
67
|
end
|
@@ -17,6 +17,10 @@ module MyForum
|
|
17
17
|
user.posts_count
|
18
18
|
end
|
19
19
|
|
20
|
+
def is_online_user?(user_login)
|
21
|
+
User.online.pluck(:login).include?(user_login)
|
22
|
+
end
|
23
|
+
|
20
24
|
def online_user_marker(user_login)
|
21
25
|
return unless User.online.pluck(:login).include?(user_login)
|
22
26
|
content_tag :div, ' '.html_safe, class: 'label label-success'
|
@@ -34,7 +34,7 @@ module MyForum
|
|
34
34
|
FROM my_forum_topics
|
35
35
|
JOIN my_forum_posts ON my_forum_posts.id = my_forum_topics.latest_post_id
|
36
36
|
JOIN my_forum_users ON my_forum_posts.user_id = my_forum_users.id
|
37
|
-
WHERE my_forum_topics.forum_id = #{self.id}
|
37
|
+
WHERE my_forum_topics.forum_id = #{self.id} AND my_forum_topics.deleted IS FALSE
|
38
38
|
ORDER BY my_forum_posts.id DESC
|
39
39
|
", page: page, per_page: per_page)
|
40
40
|
end
|
@@ -48,7 +48,7 @@ module MyForum
|
|
48
48
|
FROM my_forum_topics
|
49
49
|
JOIN my_forum_posts ON my_forum_posts.id = my_forum_topics.latest_post_id
|
50
50
|
JOIN my_forum_users ON my_forum_posts.user_id = my_forum_users.id
|
51
|
-
WHERE my_forum_topics.id NOT IN (#{log_topic_ids.join(',')})
|
51
|
+
WHERE my_forum_topics.id NOT IN (#{log_topic_ids.join(',')}) AND my_forum_topics.deleted IS FALSE
|
52
52
|
ORDER BY my_forum_posts.id DESC
|
53
53
|
", page: page, per_page: per_page)
|
54
54
|
end
|
@@ -13,9 +13,9 @@
|
|
13
13
|
.form-group= form.text_field :recipient, value: @reply_pm.sender_login, class: 'subject form-control'
|
14
14
|
.form-group= form.text_field :subject, value: @reply_pm.subject ,class: 'subject form-control', placeholder: t('.subject')
|
15
15
|
- else
|
16
|
-
.form-group= form.text_field :recipient, class: 'subject form-control autocomplete', placeholder: t('.recipient'), data: { autocomplete_path: autocomplete_users_path }
|
16
|
+
.form-group= form.text_field :recipient, value: params[:to], class: 'subject form-control autocomplete', placeholder: t('.recipient'), data: { autocomplete_path: autocomplete_users_path }
|
17
17
|
.form-group= form.text_field :subject, class: 'subject form-control', placeholder: t('.subject')
|
18
18
|
|
19
19
|
.form-group= form.text_area :body, class: 'body form-control', placeholder: t('.body')
|
20
20
|
|
21
|
-
= form.submit class: 'btn btn-primary btn-sm'
|
21
|
+
= form.submit t('.send'), class: 'btn btn-primary btn-sm'
|
@@ -1,10 +1,12 @@
|
|
1
1
|
- post_counter += 1
|
2
2
|
|
3
3
|
.row.post-header{ id: "post_number_#{post_counter}"}
|
4
|
-
.col-md-10
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
.col-md-10
|
5
|
+
%span.post_from_user_login
|
6
|
+
- user_login = post.user.try(:login)
|
7
|
+
%span.user_profile_popover{ title: user_login, data: { toggle: 'popover', content: (render partial: 'profile_popover', locals: { user: post.user })}}
|
8
|
+
= online_user_marker(user_login)
|
9
|
+
%span.login= user_login
|
8
10
|
.col-md-2.post_number.text-right
|
9
11
|
- # TODO optimize condition!
|
10
12
|
- if current_user and current_user.is_admin? and post.topic.posts.first != post
|
@@ -0,0 +1,22 @@
|
|
1
|
+
.profile-popover
|
2
|
+
.row
|
3
|
+
.col-sm-5
|
4
|
+
= t('my_forum.profile_popover.posts_count')
|
5
|
+
.col-sm-4
|
6
|
+
= user.posts_count
|
7
|
+
|
8
|
+
.row
|
9
|
+
.col-sm-5
|
10
|
+
= t('my_forum.profile_popover.registered_at')
|
11
|
+
.col-sm-4
|
12
|
+
= time(user.created_at)
|
13
|
+
|
14
|
+
.row
|
15
|
+
.col-sm-5
|
16
|
+
= t('my_forum.profile_popover.status')
|
17
|
+
.col-sm-4
|
18
|
+
= is_online_user?(user.login) ? t('my_forum.profile_popover.online') : t('my_forum.profile_popover.offline')
|
19
|
+
|
20
|
+
.row.pm
|
21
|
+
.col-sm-12
|
22
|
+
= link_to t('my_forum.profile_popover.write_pm'), new_private_message_path(to: user.login), class: 'btn btn-xs btn-warning'
|
@@ -16,14 +16,49 @@
|
|
16
16
|
.row
|
17
17
|
= will_paginate @topic_posts
|
18
18
|
|
19
|
+
- if is_admin?
|
20
|
+
.row
|
21
|
+
- options = { method: :patch, data: { confirm: t('.are_you_sure?') } }
|
22
|
+
|
23
|
+
- @topic.pinned? ? options.merge!(class: 'btn btn-sm btn-info') : options.merge!(class: 'btn btn-sm btn-warning')
|
24
|
+
= link_to (@topic.pinned? ? t('.unpin_topic') : t('.pin_topic')), forum_topic_pin_path(@topic.forum, @topic), options
|
25
|
+
|
26
|
+
- @topic.closed? ? options.merge!(class: 'btn btn-sm btn-info') : options.merge!(class: 'btn btn-sm btn-danger')
|
27
|
+
= link_to (@topic.closed? ? t('.unlock_topic') : t('.lock_topic')), forum_topic_close_path(@topic.forum, @topic), options
|
28
|
+
|
29
|
+
- options.merge!(class: 'btn btn-sm btn-danger')
|
30
|
+
= link_to t('.delete_topic'), forum_topic_delete_path(@topic.forum, @topic), options
|
31
|
+
|
19
32
|
- if can_quick_answer?(@topic)
|
20
33
|
#quick_answer
|
34
|
+
- if @topic.closed?
|
35
|
+
.alert.alert-danger=t('.warning_closed_topic')
|
21
36
|
= render 'quick_answer', forum: @forum, topic: @topic
|
22
37
|
|
23
38
|
:coffee
|
24
39
|
$(document).on 'ready page:load', ->
|
40
|
+
|
41
|
+
$('.user_profile_popover').popover(
|
42
|
+
trigger: 'click'
|
43
|
+
html: true
|
44
|
+
delay:
|
45
|
+
'show': 100
|
46
|
+
'hide': 200
|
47
|
+
).on('mouseenter', ->
|
48
|
+
_this = this
|
49
|
+
$(this).popover("show")
|
50
|
+
$(this).siblings(".popover").on('mouseleave', ->
|
51
|
+
$(_this).popover('hide')
|
52
|
+
)
|
53
|
+
)
|
54
|
+
.on('mouseleave', ->
|
55
|
+
_this = this
|
56
|
+
setTimeout (-> $(_this).popover("hide") if !$(".popover:hover").length ), 300
|
57
|
+
)
|
58
|
+
|
59
|
+
|
25
60
|
container = $('body')
|
26
61
|
scroll_to = $('post_number_' + "#{params[:show_post]}")
|
27
62
|
scroll_to = 'post_number_' + "#{params[:show_post]}"
|
28
63
|
|
29
|
-
$('body').scrollTo(scroll_to)
|
64
|
+
$('body').scrollTo(scroll_to)
|
data/config/locales/ru.yml
CHANGED
@@ -3,6 +3,15 @@ ru:
|
|
3
3
|
my_forum:
|
4
4
|
mailer:
|
5
5
|
new_pm_notification_subject: 'Уведомление о новом личном сообщении'
|
6
|
+
|
7
|
+
profile_popover:
|
8
|
+
posts_count: 'Сообщений на форуме: '
|
9
|
+
registered_at: 'Дата регистрации: '
|
10
|
+
status: 'Текущий статус:'
|
11
|
+
online: 'на форуме'
|
12
|
+
offline: 'не на форуме'
|
13
|
+
write_pm: 'Написать ЛС'
|
14
|
+
|
6
15
|
today: "Сегодня в %{hhmm}"
|
7
16
|
yesterday: "Вчера в %{hhmm}"
|
8
17
|
create_new_pm: 'Написать личное сообщение'
|
@@ -71,6 +80,13 @@ ru:
|
|
71
80
|
create_new_topic_in: "Создать новую тему в '%{topic_name}'"
|
72
81
|
show:
|
73
82
|
messages_in_topic: "Сообщений в теме: %{count}"
|
83
|
+
pin_topic: 'Закрепить тему'
|
84
|
+
unpin_topic: 'Открепить тему'
|
85
|
+
lock_topic: 'Закрыть тему'
|
86
|
+
unlock_topic: 'Открыть тему'
|
87
|
+
delete_topic: 'Удалить тему'
|
88
|
+
are_you_sure?: 'Вы уверены?'
|
89
|
+
warning_closed_topic: 'Внимание! Эта тема закрыта, никто кроме вас, не сможет ответить!'
|
74
90
|
user_info:
|
75
91
|
user_posts_count: "%{count} сообщений"
|
76
92
|
quick_answer:
|
@@ -118,6 +134,8 @@ ru:
|
|
118
134
|
recipient: 'Кому'
|
119
135
|
subject: 'Тема'
|
120
136
|
body: 'Сообщение'
|
137
|
+
new_private_message: 'Написать личное сообщение'
|
138
|
+
send: 'Отправить'
|
121
139
|
create:
|
122
140
|
cant_find_recipient: 'Ошибка, пользователя адресата не существует'
|
123
141
|
|
data/config/routes.rb
CHANGED
@@ -16,6 +16,7 @@ MyForum::Engine.routes.draw do
|
|
16
16
|
|
17
17
|
resources :users do
|
18
18
|
patch :avatar_update
|
19
|
+
|
19
20
|
collection do
|
20
21
|
get :autocomplete
|
21
22
|
end
|
@@ -25,6 +26,9 @@ MyForum::Engine.routes.draw do
|
|
25
26
|
|
26
27
|
resources :forums, only: [:index, :show] do
|
27
28
|
resources :topics do
|
29
|
+
patch :pin
|
30
|
+
patch :close
|
31
|
+
patch :delete
|
28
32
|
resources :posts
|
29
33
|
end
|
30
34
|
end
|
data/lib/my_forum/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: my_forum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.beta29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vitaly Omelchenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -254,6 +254,7 @@ files:
|
|
254
254
|
- app/views/my_forum/private_messages/show.haml
|
255
255
|
- app/views/my_forum/shared/_upload_photo.haml
|
256
256
|
- app/views/my_forum/topics/_post.haml
|
257
|
+
- app/views/my_forum/topics/_profile_popover.haml
|
257
258
|
- app/views/my_forum/topics/_quick_answer.haml
|
258
259
|
- app/views/my_forum/topics/_topic_header.haml
|
259
260
|
- app/views/my_forum/topics/_user_info.haml
|