From 9f145e78d906f3d7fd7aa95e7a7fad02c8c5e84b Mon Sep 17 00:00:00 2001
From: Mauricio Giacomini Girardello <mgg12@inf.ufpr.br>
Date: Wed, 16 Dec 2015 10:22:17 -0200
Subject: [PATCH] adding feedback buttons and forms

---
 .../javascripts/application/feedbacks.coffee  | 21 ++++++++
 .../stylesheets/application/feedbacks.scss    |  4 ++
 app/controllers/feedbacks_controller.rb       | 54 +++++++++++++++++++
 .../learning_objects_controller.rb            |  1 +
 app/helpers/feedback_helper.rb                |  2 +
 app/services/feedback_service.rb              |  2 +-
 app/views/feedbacks/new.html.erb              | 24 +++++++++
 app/views/feedbacks/new_bug.html.erb          | 24 +++++++++
 app/views/layouts/application.html.erb        |  4 ++
 .../shared/application/_feedback.html.erb     |  2 +
 test/controllers/feedback_controller_test.rb  | 24 +++++++++
 11 files changed, 161 insertions(+), 1 deletion(-)
 create mode 100644 app/assets/javascripts/application/feedbacks.coffee
 create mode 100644 app/assets/stylesheets/application/feedbacks.scss
 create mode 100644 app/controllers/feedbacks_controller.rb
 create mode 100644 app/helpers/feedback_helper.rb
 create mode 100644 app/views/feedbacks/new.html.erb
 create mode 100644 app/views/feedbacks/new_bug.html.erb
 create mode 100644 app/views/shared/application/_feedback.html.erb
 create mode 100644 test/controllers/feedback_controller_test.rb

diff --git a/app/assets/javascripts/application/feedbacks.coffee b/app/assets/javascripts/application/feedbacks.coffee
new file mode 100644
index 000000000..67df285c4
--- /dev/null
+++ b/app/assets/javascripts/application/feedbacks.coffee
@@ -0,0 +1,21 @@
+# mapping permitted actions with controller action to display right views
+permitted_actions = []
+permitted_actions['send_feedback'] = 'new'
+permitted_actions['report_bug'] = 'new_bug'
+
+# bind click events for create feedbacks and report bug
+$(document).on 'click', '.report_bug', ->
+  $(document).trigger('open_feedback_modal', [type: 'report_bug'])
+
+$(document).on 'click', '.send_feedback', ->
+  $(document).trigger('open_feedback_modal', [type: 'send_feedback'])
+
+# open modal event
+$(document).on 'open_feedback_modal', (evt, params) ->
+  type = permitted_actions[params.type]
+  url = "/feedback/#{type}"
+  $.get url, (d) ->
+    $('#feedback-modal').remove()
+    $('body').append d
+    $('#feedback-modal').modal('show')
+    return
\ No newline at end of file
diff --git a/app/assets/stylesheets/application/feedbacks.scss b/app/assets/stylesheets/application/feedbacks.scss
new file mode 100644
index 000000000..973120146
--- /dev/null
+++ b/app/assets/stylesheets/application/feedbacks.scss
@@ -0,0 +1,4 @@
+.report_bug, .send_feedback {position: fixed; bottom: 0; height: 30px; width: auto; padding: 5px; z-index: 999;}
+
+.report_bug {left: 25%; background-color: #730E15; color: white;}
+.send_feedback {right: 25%; background-color: #ffae0d; color: black;}
\ No newline at end of file
diff --git a/app/controllers/feedbacks_controller.rb b/app/controllers/feedbacks_controller.rb
new file mode 100644
index 000000000..e511d6025
--- /dev/null
+++ b/app/controllers/feedbacks_controller.rb
@@ -0,0 +1,54 @@
+class FeedbacksController < ApplicationController
+  before_filter :authenticate_user!
+
+  # GET /feedbacks/new
+  def new
+  #  @feedbacks = Feedback.new
+
+#    render layout: false
+ end
+
+  # GET /feedbacks/new_bug
+  def new_bug
+    @bug = Bug.new
+
+    render layout: false
+  end
+
+  # POST /feedbacks
+  def create
+   # @feedbacks = Feedback.new(feedback_params)
+
+   # respond_to do |format|
+   #   if feedback_service.send_feedback @feedbacks
+   #     format.html { redirect_to :back, notice: 'Obrigado pela sua avaliação!' }
+  #    end
+  #  end
+  end
+
+  # POST /feedbacks/report_bug
+  def report_bug
+    @bug = Bug.new(bug_params)
+
+    respond_to do |format|
+      if feedback_service.report_bug @bug
+        format.html { redirect_to :back, notice: 'Problema relatado com sucesso!' }
+      end
+    end
+  end
+
+  private
+
+  def feedback_service
+    FeedbackService.new(GitlabBugreporterService.new(Gitlab))
+  end
+
+  def bug_params
+    params.require(:bug).permit(:title, :description)
+  end
+
+  def feedback_params
+    params.require(:feedbacks).permit(:object, :message, :description)
+  end
+
+end
diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb
index c4586e395..56a62abf8 100644
--- a/app/controllers/learning_objects_controller.rb
+++ b/app/controllers/learning_objects_controller.rb
@@ -6,6 +6,7 @@ class LearningObjectsController < ApplicationController
   before_action :authenticate_user!, except: [:index, :show]
   before_action :set_complaint_messages, only: :show
   before_action :set_dspace_collection, :create_repositories, :process_params, :get_selected_subjects, only: :create
+
   # GET /learning_objects
   # GET /learning_objects.json
   def index
diff --git a/app/helpers/feedback_helper.rb b/app/helpers/feedback_helper.rb
new file mode 100644
index 000000000..ae51a5646
--- /dev/null
+++ b/app/helpers/feedback_helper.rb
@@ -0,0 +1,2 @@
+module FeedbackHelper
+end
diff --git a/app/services/feedback_service.rb b/app/services/feedback_service.rb
index 1409a2f2d..86660f706 100644
--- a/app/services/feedback_service.rb
+++ b/app/services/feedback_service.rb
@@ -11,7 +11,7 @@ class FeedbackService
   end
 
   ##
-  # store the feedback in database and send notification
+  # store the feedbacks in database and send notification
   def send_feedback(feedback)
     # save and send an email
     feedback.save!
diff --git a/app/views/feedbacks/new.html.erb b/app/views/feedbacks/new.html.erb
new file mode 100644
index 000000000..c0ea94b3d
--- /dev/null
+++ b/app/views/feedbacks/new.html.erb
@@ -0,0 +1,24 @@
+<div class="modal fade" id="feedback-modal">
+  <div class="modal-dialog">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+        <h4 class="modal-title">Relatar problema</h4>
+      </div>
+      <%= form_for @feedback, url: feedback_path, method: :post do |f| %>
+          <form id="feedback-modal-form">
+            <div class="modal-body">
+              <%= f.label :title, 'O que está acontecendo?' %>
+              <%= f.text_field :title %>
+
+              <%= f.label :description, 'Descreva melhor seu problema para que possamos resolve-lo mais rápido:' %>
+              <%= f.text_field :description %>
+            </div>
+            <div class="modal-footer">
+              <button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
+              <button type="submit" class="btn btn-primary">Enviar</button>
+            </div>
+      <% end %>
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/app/views/feedbacks/new_bug.html.erb b/app/views/feedbacks/new_bug.html.erb
new file mode 100644
index 000000000..867b62fc8
--- /dev/null
+++ b/app/views/feedbacks/new_bug.html.erb
@@ -0,0 +1,24 @@
+<div class="modal fade" id="feedback-modal">
+  <div class="modal-dialog">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+        <h4 class="modal-title">Relatar problema</h4>
+      </div>
+      <%= form_for @bug, url: report_bug_feedback_path, method: :post do |f| %>
+      <form id="feedback-modal-form">
+        <div class="modal-body">
+          <%= f.label :title, 'O que está acontecendo?' %>
+          <%= f.text_field :title %>
+
+          <%= f.label :description, 'Descreva melhor seu problema para que possamos resolve-lo mais rápido:' %>
+          <%= f.text_field :description %>
+        </div>
+        <div class="modal-footer">
+          <button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
+          <button type="submit" class="btn btn-primary">Enviar</button>
+        </div>
+      <% end %>
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index e978812d1..f86551658 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -33,6 +33,10 @@
   </div>
 </div>
 
+<% if user_signed_in? %>
+    <%= render 'shared/application/feedback' %>
+<% end %>
+
 <%= render 'shared/application/footer' %>
 
 <script defer="defer" src="//barra.brasil.gov.br/barra.js" type="text/javascript"></script>
diff --git a/app/views/shared/application/_feedback.html.erb b/app/views/shared/application/_feedback.html.erb
new file mode 100644
index 000000000..cddf7936a
--- /dev/null
+++ b/app/views/shared/application/_feedback.html.erb
@@ -0,0 +1,2 @@
+<a href="#report_bug" class="report_bug">Está com problemas? Clique aqui e nos mantenha informado.</a>
+<a href="#send_feedback" class="send_feedback">Mande seu feedback!</a>
\ No newline at end of file
diff --git a/test/controllers/feedback_controller_test.rb b/test/controllers/feedback_controller_test.rb
new file mode 100644
index 000000000..310ffb9c0
--- /dev/null
+++ b/test/controllers/feedback_controller_test.rb
@@ -0,0 +1,24 @@
+require 'test_helper'
+
+class FeedbackControllerTest < ActionController::TestCase
+  test "should get new_feedback" do
+    get :new_feedback
+    assert_response :success
+  end
+
+  test "should get new_bug" do
+    get :new_bug
+    assert_response :success
+  end
+
+  test "should get create" do
+    get :create
+    assert_response :success
+  end
+
+  test "should get report_bug" do
+    get :report_bug
+    assert_response :success
+  end
+
+end
-- 
GitLab