help_center 0.0.5 → 0.0.6

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/LICENSE.txt +21 -21
  4. data/README.md +168 -164
  5. data/Rakefile +10 -10
  6. data/app/assets/stylesheets/help_center.scss +140 -139
  7. data/app/controllers/help_center/application_controller.rb +37 -37
  8. data/app/controllers/help_center/notifications_controller.rb +19 -19
  9. data/app/controllers/help_center/support_categories_controller.rb +58 -58
  10. data/app/controllers/help_center/support_posts_controller.rb +72 -72
  11. data/app/controllers/help_center/support_threads_controller.rb +82 -82
  12. data/app/helpers/help_center/support_posts_helper.rb +29 -29
  13. data/app/helpers/help_center/support_threads_helper.rb +28 -28
  14. data/app/jobs/help_center/support_post_notification_job.rb +42 -42
  15. data/app/jobs/help_center/support_thread_notification_job.rb +40 -40
  16. data/app/mailers/help_center/user_mailer.rb +28 -28
  17. data/app/models/support_category.rb +16 -13
  18. data/app/models/support_post.rb +15 -15
  19. data/app/models/support_subscription.rb +19 -19
  20. data/app/models/support_thread.rb +85 -85
  21. data/app/views/help_center/support_categories/_form.html.erb +39 -35
  22. data/app/views/help_center/support_categories/_support_thread.html.erb +25 -25
  23. data/app/views/help_center/support_categories/edit.html.erb +7 -7
  24. data/app/views/help_center/support_categories/index.html.erb +19 -19
  25. data/app/views/help_center/support_categories/new.html.erb +5 -5
  26. data/app/views/help_center/support_categories/show.html.erb +19 -20
  27. data/app/views/help_center/support_posts/_form.html.erb +47 -47
  28. data/app/views/help_center/support_posts/_support_post.html.erb +57 -57
  29. data/app/views/help_center/support_posts/edit.html.erb +23 -23
  30. data/app/views/help_center/support_threads/_form.html.erb +49 -49
  31. data/app/views/help_center/support_threads/_support_thread.html.erb +25 -25
  32. data/app/views/help_center/support_threads/edit.html.erb +7 -7
  33. data/app/views/help_center/support_threads/index.html.erb +19 -19
  34. data/app/views/help_center/support_threads/new.html.erb +5 -5
  35. data/app/views/help_center/support_threads/show.html.erb +29 -42
  36. data/app/views/help_center/user_mailer/new_post.html.erb +9 -9
  37. data/app/views/help_center/user_mailer/new_thread.html.erb +9 -9
  38. data/app/views/layouts/help_center.html.erb +130 -128
  39. data/app/views/shared/_category_actions.html.erb +16 -0
  40. data/app/views/shared/_spacer.html.erb +1 -1
  41. data/app/views/shared/_thread_actions.html.erb +16 -0
  42. data/bin/console +14 -14
  43. data/bin/setup +8 -8
  44. data/config/locales/en.yml +56 -55
  45. data/config/routes.rb +24 -24
  46. data/db/migrate/20170417012930_create_support_categories.rb +19 -19
  47. data/db/migrate/20170417012931_create_support_threads.rb +18 -18
  48. data/db/migrate/20170417012933_create_support_subscriptions.rb +11 -11
  49. data/help_center.gemspec +27 -29
  50. data/lib/generators/help_center/controllers_generator.rb +13 -13
  51. data/lib/generators/help_center/helpers_generator.rb +13 -13
  52. data/lib/generators/help_center/views_generator.rb +13 -13
  53. data/lib/help_center.rb +23 -23
  54. data/lib/help_center/engine.rb +10 -10
  55. data/lib/help_center/slack.rb +22 -22
  56. data/lib/help_center/support_user.rb +10 -10
  57. data/lib/help_center/version.rb +3 -3
  58. metadata +7 -19
  59. data/help_center-0.0.1.gem +0 -0
@@ -1,37 +1,37 @@
1
- class HelpCenter::ApplicationController < ::ApplicationController
2
- layout "help_center"
3
-
4
- def page_number
5
- page = params.fetch(:page, '').gsub(/[^0-9]/, '').to_i
6
- page = "1" if page.zero?
7
- page
8
- end
9
-
10
- def is_moderator_or_owner?(object)
11
- is_moderator?
12
- end
13
- helper_method :is_moderator_or_owner?
14
-
15
- def is_moderator?
16
- current_user.respond_to?(:moderator) && current_user.moderator? || current_user.respond_to?(:admin) && current_user.admin?
17
- end
18
- helper_method :is_moderator?
19
-
20
- def require_mod_or_author_for_post!
21
- unless is_moderator_or_owner?(@support_post)
22
- redirect_to_root
23
- end
24
- end
25
-
26
- def require_mod_or_author_for_thread!
27
- unless is_moderator_or_owner?(@support_thread)
28
- redirect_to_root
29
- end
30
- end
31
-
32
- private
33
-
34
- def redirect_to_root
35
- redirect_to help_center.root_path
36
- end
37
- end
1
+ class HelpCenter::ApplicationController < ::ApplicationController
2
+ layout "help_center"
3
+
4
+ def page_number
5
+ page = params.fetch(:page, '').gsub(/[^0-9]/, '').to_i
6
+ page = "1" if page.zero?
7
+ page
8
+ end
9
+
10
+ def is_moderator_or_owner?(object)
11
+ is_moderator?
12
+ end
13
+ helper_method :is_moderator_or_owner?
14
+
15
+ def is_moderator?
16
+ current_user.respond_to?(:moderator) && current_user.moderator? || current_user.respond_to?(:admin) && current_user.admin?
17
+ end
18
+ helper_method :is_moderator?
19
+
20
+ def require_mod_or_author_for_post!
21
+ unless is_moderator_or_owner?(@support_post)
22
+ redirect_to_root
23
+ end
24
+ end
25
+
26
+ def require_mod_or_author_for_thread!
27
+ unless is_moderator_or_owner?(@support_thread)
28
+ redirect_to_root
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def redirect_to_root
35
+ redirect_to help_center.root_path
36
+ end
37
+ end
@@ -1,19 +1,19 @@
1
- class HelpCenter::NotificationsController < HelpCenter::ApplicationController
2
- before_action :authenticate_user!
3
- before_action :set_support_thread
4
-
5
- def create
6
- @support_thread.toggle_subscription(current_user)
7
- redirect_to help_center.support_thread_path(@support_thread)
8
- end
9
-
10
- def show
11
- redirect_to help_center.support_thread_path(@support_thread)
12
- end
13
-
14
- private
15
-
16
- def set_support_thread
17
- @support_thread = SupportThread.friendly.find(params[:support_thread_id])
18
- end
19
- end
1
+ class HelpCenter::NotificationsController < HelpCenter::ApplicationController
2
+ before_action :authenticate_user!
3
+ before_action :set_support_thread
4
+
5
+ def create
6
+ @support_thread.toggle_subscription(current_user)
7
+ redirect_to help_center.support_thread_path(@support_thread)
8
+ end
9
+
10
+ def show
11
+ redirect_to help_center.support_thread_path(@support_thread)
12
+ end
13
+
14
+ private
15
+
16
+ def set_support_thread
17
+ @support_thread = SupportThread.friendly.find(params[:support_thread_id])
18
+ end
19
+ end
@@ -1,58 +1,58 @@
1
- class HelpCenter::SupportCategoriesController < HelpCenter::ApplicationController
2
- before_action :authenticate_user!, only: [:edit, :update, :destroy]
3
- before_action :set_category, only: [:index, :show, :edit, :update, :destroy]
4
- before_action :require_mod_or_author_for_thread!, only: [:edit, :update, :destroy]
5
-
6
-
7
- def index
8
- @support_threads = SupportThread.where(support_category: @category) if @category.present?
9
- @support_threads = @support_threads.pinned_first.sorted.includes(:user, :support_category)
10
- @pagy, @records = pagy(@support_threads)
11
- render "help_center/support_threads/index"
12
- end
13
-
14
- def new
15
- @category = SupportCategory.new
16
- end
17
-
18
- def show
19
- end
20
-
21
- def create
22
- @category = SupportCategory.new(support_category_params)
23
-
24
- if @category.save
25
- redirect_to help_center.support_threads_path
26
- else
27
- render action: :new
28
- end
29
- end
30
-
31
- def edit
32
- end
33
-
34
- def update
35
- if @category.update(support_category_params)
36
- redirect_to help_center.support_category_path(@category), notice: I18n.t('your_changes_were_saved')
37
- else
38
- render action: :edit
39
- end
40
- end
41
-
42
- def destroy
43
- @category.destroy
44
- redirect_to help_center.support_threads_path, notice: I18n.t('successfully_deleted')
45
- end
46
-
47
- private
48
-
49
- def set_category
50
- @category = SupportCategory.friendly.find(params[:id])
51
- rescue ActiveRecord::RecordNotFound
52
- redirect_to help_center.support_threads_path
53
- end
54
-
55
- def support_category_params
56
- params.require(:support_category).permit(:name, :color, :position)
57
- end
58
- end
1
+ class HelpCenter::SupportCategoriesController < HelpCenter::ApplicationController
2
+ before_action :authenticate_user!, only: [:edit, :update, :destroy]
3
+ before_action :set_category, only: [:index, :show, :edit, :update, :destroy]
4
+ before_action :require_mod_or_author_for_thread!, only: [:edit, :update, :destroy]
5
+
6
+
7
+ def index
8
+ @support_threads = SupportThread.where(support_category: @category) if @category.present?
9
+ @support_threads = @support_threads.pinned_first.sorted.includes(:user, :support_category)
10
+ @pagy, @records = pagy(@support_threads)
11
+ render "help_center/support_threads/index"
12
+ end
13
+
14
+ def new
15
+ @category = SupportCategory.new
16
+ end
17
+
18
+ def show
19
+ end
20
+
21
+ def create
22
+ @category = SupportCategory.new(support_category_params)
23
+
24
+ if @category.save
25
+ redirect_to help_center.support_threads_path
26
+ else
27
+ render action: :new
28
+ end
29
+ end
30
+
31
+ def edit
32
+ end
33
+
34
+ def update
35
+ if @category.update(support_category_params)
36
+ redirect_to help_center.support_category_path(@category), notice: I18n.t('your_changes_were_saved')
37
+ else
38
+ render action: :edit
39
+ end
40
+ end
41
+
42
+ def destroy
43
+ @category.destroy
44
+ redirect_to help_center.support_threads_path, notice: I18n.t('successfully_deleted')
45
+ end
46
+
47
+ private
48
+
49
+ def set_category
50
+ @category = SupportCategory.friendly.find(params[:id])
51
+ rescue ActiveRecord::RecordNotFound
52
+ redirect_to help_center.support_threads_path
53
+ end
54
+
55
+ def support_category_params
56
+ params.require(:support_category).permit(:name, :color, :position)
57
+ end
58
+ end
@@ -1,72 +1,72 @@
1
- class HelpCenter::SupportPostsController < HelpCenter::ApplicationController
2
- before_action :authenticate_user!
3
- before_action :set_support_thread
4
- before_action :set_support_post, only: [:edit, :update, :destroy]
5
- before_action :require_mod_or_author_for_post!, only: [:edit, :update, :destroy]
6
- before_action :require_mod_or_author_for_thread!, only: [:solved, :unsolved]
7
-
8
- def create
9
- @support_post = @support_thread.support_posts.new(support_post_params)
10
- @support_post.user_id = current_user.id
11
-
12
- if @support_post.save
13
- HelpCenter::SupportPostNotificationJob.perform_later(@support_post)
14
- redirect_to help_center.support_thread_path(@support_thread, anchor: "support_post_#{@support_post.id}")
15
- else
16
- render template: "help_center/support_threads/show"
17
- end
18
- end
19
-
20
- def edit
21
- end
22
-
23
- def update
24
- if @support_post.update(support_post_params)
25
- redirect_to help_center.support_thread_path(@support_thread)
26
- else
27
- render action: :edit
28
- end
29
- end
30
-
31
- def destroy
32
- @support_post.destroy!
33
- redirect_to help_center.support_thread_path(@support_thread)
34
- end
35
-
36
- def solved
37
- @support_post = @support_thread.support_posts.find(params[:id])
38
-
39
- @support_thread.support_posts.update_all(solved: false)
40
- @support_post.update_column(:solved, true)
41
- @support_thread.update_column(:solved, true)
42
-
43
- redirect_to help_center.support_thread_path(@support_thread, anchor: ActionView::RecordIdentifier.dom_id(@support_post))
44
- end
45
-
46
- def unsolved
47
- @support_post = @support_thread.support_posts.find(params[:id])
48
-
49
- @support_thread.support_posts.update_all(solved: false)
50
- @support_thread.update_column(:solved, false)
51
-
52
- redirect_to help_center.support_thread_path(@support_thread, anchor: ActionView::RecordIdentifier.dom_id(@support_post))
53
- end
54
-
55
- private
56
-
57
- def set_support_thread
58
- @support_thread = SupportThread.friendly.find(params[:support_thread_id])
59
- end
60
-
61
- def set_support_post
62
- if is_moderator?
63
- @support_post = @support_thread.support_posts.find(params[:id])
64
- else
65
- @support_post = current_user.support_posts.find(params[:id])
66
- end
67
- end
68
-
69
- def support_post_params
70
- params.require(:support_post).permit(:body)
71
- end
72
- end
1
+ class HelpCenter::SupportPostsController < HelpCenter::ApplicationController
2
+ before_action :authenticate_user!
3
+ before_action :set_support_thread
4
+ before_action :set_support_post, only: [:edit, :update, :destroy]
5
+ before_action :require_mod_or_author_for_post!, only: [:edit, :update, :destroy]
6
+ before_action :require_mod_or_author_for_thread!, only: [:solved, :unsolved]
7
+
8
+ def create
9
+ @support_post = @support_thread.support_posts.new(support_post_params)
10
+ @support_post.user_id = current_user.id
11
+
12
+ if @support_post.save
13
+ HelpCenter::SupportPostNotificationJob.perform_later(@support_post)
14
+ redirect_to help_center.support_thread_path(@support_thread, anchor: "support_post_#{@support_post.id}")
15
+ else
16
+ render template: "help_center/support_threads/show"
17
+ end
18
+ end
19
+
20
+ def edit
21
+ end
22
+
23
+ def update
24
+ if @support_post.update(support_post_params)
25
+ redirect_to help_center.support_thread_path(@support_thread)
26
+ else
27
+ render action: :edit
28
+ end
29
+ end
30
+
31
+ def destroy
32
+ @support_post.destroy!
33
+ redirect_to help_center.support_thread_path(@support_thread)
34
+ end
35
+
36
+ def solved
37
+ @support_post = @support_thread.support_posts.find(params[:id])
38
+
39
+ @support_thread.support_posts.update_all(solved: false)
40
+ @support_post.update_column(:solved, true)
41
+ @support_thread.update_column(:solved, true)
42
+
43
+ redirect_to help_center.support_thread_path(@support_thread, anchor: ActionView::RecordIdentifier.dom_id(@support_post))
44
+ end
45
+
46
+ def unsolved
47
+ @support_post = @support_thread.support_posts.find(params[:id])
48
+
49
+ @support_thread.support_posts.update_all(solved: false)
50
+ @support_thread.update_column(:solved, false)
51
+
52
+ redirect_to help_center.support_thread_path(@support_thread, anchor: ActionView::RecordIdentifier.dom_id(@support_post))
53
+ end
54
+
55
+ private
56
+
57
+ def set_support_thread
58
+ @support_thread = SupportThread.friendly.find(params[:support_thread_id])
59
+ end
60
+
61
+ def set_support_post
62
+ if is_moderator?
63
+ @support_post = @support_thread.support_posts.find(params[:id])
64
+ else
65
+ @support_post = current_user.support_posts.find(params[:id])
66
+ end
67
+ end
68
+
69
+ def support_post_params
70
+ params.require(:support_post).permit(:body)
71
+ end
72
+ end
@@ -1,82 +1,82 @@
1
- class HelpCenter::SupportThreadsController < HelpCenter::ApplicationController
2
- before_action :authenticate_user!, only: [:mine, :participating, :new, :create]
3
- before_action :set_support_thread, only: [:show, :edit, :update, :destroy]
4
- before_action :require_mod_or_author_for_thread!, only: [:edit, :update]
5
-
6
- def index
7
- @support_threads = SupportThread.pinned_first.sorted.includes(:user, :support_category)
8
- @pagy, @records = pagy(@support_threads)
9
- end
10
-
11
- def answered
12
- @support_threads = SupportThread.solved.sorted.includes(:user, :support_category)
13
- @pagy, @records = pagy(@support_threads)
14
- render action: :index
15
- end
16
-
17
- def unanswered
18
- @support_threads = SupportThread.unsolved.sorted.includes(:user, :support_category)
19
- @pagy, @records = pagy(@support_threads)
20
- render action: :index
21
- end
22
-
23
- def mine
24
- @support_threads = SupportThread.where(user: current_user).sorted.includes(:user, :support_category)
25
- @pagy, @records = pagy(@support_threads)
26
- render action: :index
27
- end
28
-
29
- def participating
30
- @support_threads = SupportThread.includes(:user, :support_category).joins(:support_posts).where(support_posts: { user_id: current_user.id }).distinct(support_posts: :id).sorted
31
- @pagy, @records = pagy(@support_threads)
32
- render action: :index
33
- end
34
-
35
- def show
36
- @support_post = SupportPost.new
37
- @support_post.user = current_user
38
- end
39
-
40
- def new
41
- @support_thread = SupportThread.new
42
- @support_thread.support_posts.new
43
- end
44
-
45
- def create
46
- @support_thread = current_user.support_threads.new(support_thread_params)
47
- @support_thread.support_posts.each{ |post| post.user_id = current_user.id }
48
-
49
- if @support_thread.save
50
- HelpCenter::SupportThreadNotificationJob.perform_later(@support_thread)
51
- redirect_to help_center.support_thread_path(@support_thread)
52
- else
53
- render action: :new
54
- end
55
- end
56
-
57
- def edit
58
- end
59
-
60
- def update
61
- if @support_thread.update(support_thread_params)
62
- redirect_to help_center.support_thread_path(@support_thread), notice: I18n.t('your_changes_were_saved')
63
- else
64
- render action: :edit
65
- end
66
- end
67
-
68
- def destroy
69
- @support_thread.destroy
70
- redirect_to help_center.support_category_path(@support_thread.support_category), notice: I18n.t('successfully_deleted')
71
- end
72
-
73
- private
74
-
75
- def set_support_thread
76
- @support_thread = SupportThread.friendly.find(params[:id])
77
- end
78
-
79
- def support_thread_params
80
- params.require(:support_thread).permit(:title, :content, :position, :support_category_id, support_posts_attributes: [:body])
81
- end
82
- end
1
+ class HelpCenter::SupportThreadsController < HelpCenter::ApplicationController
2
+ before_action :authenticate_user!, only: [:mine, :participating, :new, :create]
3
+ before_action :set_support_thread, only: [:show, :edit, :update, :destroy]
4
+ before_action :require_mod_or_author_for_thread!, only: [:edit, :update]
5
+
6
+ def index
7
+ @support_threads = SupportThread.pinned_first.sorted.includes(:user, :support_category)
8
+ @pagy, @records = pagy(@support_threads)
9
+ end
10
+
11
+ def answered
12
+ @support_threads = SupportThread.solved.sorted.includes(:user, :support_category)
13
+ @pagy, @records = pagy(@support_threads)
14
+ render action: :index
15
+ end
16
+
17
+ def unanswered
18
+ @support_threads = SupportThread.unsolved.sorted.includes(:user, :support_category)
19
+ @pagy, @records = pagy(@support_threads)
20
+ render action: :index
21
+ end
22
+
23
+ def mine
24
+ @support_threads = SupportThread.where(user: current_user).sorted.includes(:user, :support_category)
25
+ @pagy, @records = pagy(@support_threads)
26
+ render action: :index
27
+ end
28
+
29
+ def participating
30
+ @support_threads = SupportThread.includes(:user, :support_category).joins(:support_posts).where(support_posts: { user_id: current_user.id }).distinct(support_posts: :id).sorted
31
+ @pagy, @records = pagy(@support_threads)
32
+ render action: :index
33
+ end
34
+
35
+ def show
36
+ @support_post = SupportPost.new
37
+ @support_post.user = current_user
38
+ end
39
+
40
+ def new
41
+ @support_thread = SupportThread.new
42
+ @support_thread.support_posts.new
43
+ end
44
+
45
+ def create
46
+ @support_thread = current_user.support_threads.new(support_thread_params)
47
+ @support_thread.support_posts.each{ |post| post.user_id = current_user.id }
48
+
49
+ if @support_thread.save
50
+ HelpCenter::SupportThreadNotificationJob.perform_later(@support_thread)
51
+ redirect_to help_center.support_thread_path(@support_thread)
52
+ else
53
+ render action: :new
54
+ end
55
+ end
56
+
57
+ def edit
58
+ end
59
+
60
+ def update
61
+ if @support_thread.update(support_thread_params)
62
+ redirect_to help_center.support_thread_path(@support_thread), notice: I18n.t('your_changes_were_saved')
63
+ else
64
+ render action: :edit
65
+ end
66
+ end
67
+
68
+ def destroy
69
+ @support_thread.destroy
70
+ redirect_to help_center.support_category_path(@support_thread.support_category), notice: I18n.t('successfully_deleted')
71
+ end
72
+
73
+ private
74
+
75
+ def set_support_thread
76
+ @support_thread = SupportThread.friendly.find(params[:id])
77
+ end
78
+
79
+ def support_thread_params
80
+ params.require(:support_thread).permit(:title, :content, :position, :support_category_id, support_posts_attributes: [:body])
81
+ end
82
+ end