my_forum 0.0.1.beta28 → 0.0.1.beta29
Sign up to get free protection for your applications and to get access to all the features.
- 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
|