help_center 0.0.5 → 0.0.6

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