3112: config settings, mailer, popup display
authorradhika <radhika@curoverse.com>
Thu, 14 Aug 2014 02:20:23 +0000 (22:20 -0400)
committerradhika <radhika@curoverse.com>
Thu, 14 Aug 2014 02:20:23 +0000 (22:20 -0400)
apps/workbench/app/controllers/actions_controller.rb
apps/workbench/app/mailers/issue_reporter.rb [new file with mode: 0644]
apps/workbench/app/views/application/_report_issue_popup.html.erb [new file with mode: 0644]
apps/workbench/app/views/application/report_issue.js.erb [new file with mode: 0644]
apps/workbench/app/views/application/report_issue_popup.js.erb [new file with mode: 0644]
apps/workbench/app/views/issue_reporter/send_report.text.erb [new file with mode: 0644]
apps/workbench/app/views/layouts/body.html.erb
apps/workbench/config/application.default.yml
apps/workbench/config/routes.rb
apps/workbench/test/functional/actions_controller_test.rb [new file with mode: 0644]
services/api/config/application.default.yml

index d1dc0fca354b7969d77317ec161a58d5f245ea62..a50eaaf4325ba0daf76c5565b9d590dbcf6ba239 100644 (file)
@@ -177,4 +177,19 @@ class ActionsController < ApplicationController
     redirect_to controller: 'collections', action: :show, id: newc.uuid
   end
 
+  def report_issue_popup
+    @popup_params = params
+    respond_to do |format|
+      format.js
+      format.html
+    end
+  end
+
+  def report_issue
+    respond_to do |format|
+      IssueReporter.send_report(current_user, params).deliver
+      format.js
+    end
+  end
+
 end
diff --git a/apps/workbench/app/mailers/issue_reporter.rb b/apps/workbench/app/mailers/issue_reporter.rb
new file mode 100644 (file)
index 0000000..1b1fa65
--- /dev/null
@@ -0,0 +1,10 @@
+class IssueReporter < ActionMailer::Base
+  default from: Rails.configuration.report_notifier_email_from
+  default to: Rails.configuration.report_notifier_email_to
+
+  def send_report(user, data)
+    @user = user
+    @data = data
+    mail(subject: 'Issue reported')
+  end
+end
diff --git a/apps/workbench/app/views/application/_report_issue_popup.html.erb b/apps/workbench/app/views/application/_report_issue_popup.html.erb
new file mode 100644 (file)
index 0000000..924787a
--- /dev/null
@@ -0,0 +1,94 @@
+<%
+  api_version = arvados_api_client.discovery[:source_version]
+  generated_at = arvados_api_client.discovery[:generatedAt]
+  wb_version = Rails.configuration.source_version + ' ' + Rails.configuration.local_modified
+  arvados_base = Rails.configuration.arvados_v1_base
+  support_email = Rails.configuration.support_email_address
+
+  additional_info = "User's email: " + current_user.email + "\n" +
+                    "Current Location: " + @popup_params[:current_location]
+%>
+<div class="modal-dialog modal-with-loading-spinner">
+  <div class="modal-content">
+
+    <%= form_tag report_issue_path, {id: 'report-issue-form', name: 'report-issue-form', method: 'post',
+        class: 'form-horizontal', remote: true} do %>
+
+      <%
+        title = 'Version / debugging info'
+        title = 'Report a problem' if @popup_params[:popup_type] == 'report'
+      %>
+
+      <div class="modal-header">
+        <button type="button" class="close" onClick="reset_form()" data-dismiss="modal" aria-hidden="true">&times;</button>
+        <div>
+          <div class="col-sm-8"> <h4 class="modal-title"><%=title%></h4> </div>
+          <div class="spinner spinner-32px spinner-h-center col-sm-1" hidden="true"></div>
+        </div>
+        <br/>
+      </div>
+
+      <div class="modal-body">
+        <div class="form-group">
+          <label for="support_version" class="col-sm-4 control-label"> Support email </label>
+          <div class="col-sm-8">
+            <p class="form-control-static" id="support_version" name="support_version"><%=support_email%></p>
+          </div>
+        </div>
+
+        <div class="form-group">
+          <label for="server_version" class="col-sm-4 control-label"> Server Version </label>
+          <div class="col-sm-8">
+            <p class="form-control-static" id="server_version" name="server_version"><%=api_version%></p>
+          </div>
+        </div>
+
+        <div class="form-group">
+          <label for="generated_at" class="col-sm-4 control-label"> Server restarted at </label>
+          <div class="col-sm-8">
+            <p class="form-control-static" id="generated_at" name="generated_at"><%=generated_at%></p>
+          </div>
+        </div>
+
+        <div class="form-group">
+          <label for="wb_version" class="col-sm-4 control-label"> Workbench version </label>
+          <div class="col-sm-8">
+            <p class="form-control-static" id="wb_version" name="wb_version"><%=wb_version%></p>
+          </div>
+        </div>
+
+        <div class="form-group">
+          <label for="arvados_base" class="col-sm-4 control-label"> Arvados base </label>
+          <div class="col-sm-8">
+            <p class="form-control-static" id="arvados_base" name="arvados_base"><%=arvados_base%></p>
+          </div>
+        </div>
+
+        <% if @popup_params[:popup_type] == 'report' %>
+          <div class="form-group">
+            <label for="report_text" class="col-sm-4 control-label"> Report text </label>
+            <div class="col-sm-8">
+              <textarea class="form-control" id="report_text" rows="1" name="report_text" type="text"/>
+            </div>
+          </div>
+        <% end %>
+
+        <div class="form-group">
+          <label for="additional_info" class="col-sm-4 control-label"> Additional info </label>
+          <div class="col-sm-8">
+            <textarea readonly class="form-control" id="additional_info" rows="1" name="additional_info" type="text"><%=additional_info%></textarea>
+        </div>
+      </div>
+
+      <div class="modal-footer">
+        <% if @popup_params[:popup_type] == 'report' %>
+          <button type="submit" id="register" class="btn btn-primary" autofocus>Report issue</button>
+          <button class="btn btn-default" onClick="reset_form()" data-dismiss="modal" aria-hidden="true">Cancel</button>
+        <% else %>
+          <button class="btn btn-default" onClick="reset_form()" data-dismiss="modal" aria-hidden="true">Close</button>
+        <% end %>
+      </div>
+
+    <% end #form %>
+  </div>
+</div>
diff --git a/apps/workbench/app/views/application/report_issue.js.erb b/apps/workbench/app/views/application/report_issue.js.erb
new file mode 100644 (file)
index 0000000..bce71b4
--- /dev/null
@@ -0,0 +1,2 @@
+$("#user-setup-modal-window").modal("hide");
+document.location.reload();
diff --git a/apps/workbench/app/views/application/report_issue_popup.js.erb b/apps/workbench/app/views/application/report_issue_popup.js.erb
new file mode 100644 (file)
index 0000000..513bf7d
--- /dev/null
@@ -0,0 +1,7 @@
+$("#report-issue-modal-window").html("<%= escape_javascript(render partial: 'report_issue_popup') %>");
+
+// reset form input fields, for the next time around
+function reset_form() {
+  $('#report_text').val("");
+  $('#additional_info').val("");
+}
diff --git a/apps/workbench/app/views/issue_reporter/send_report.text.erb b/apps/workbench/app/views/issue_reporter/send_report.text.erb
new file mode 100644 (file)
index 0000000..a63869d
--- /dev/null
@@ -0,0 +1,2 @@
+Issue reported by user <%=@user.full_name%> <%=@user.email%>
+Details of the report: <%=@data.inspect%>
index 4c58daba70e85efeddb34704e89fe6badde9cdab..dd80822656d5692d768d14a1996451bb6bb22e2e 100644 (file)
               <li><%= link_to raw('<i class="fa fa-book fa-fw"></i> Tutorials and User guide'), "#{Rails.configuration.arvados_docsite}/user", target: "_blank" %></li>
               <li><%= link_to raw('<i class="fa fa-book fa-fw"></i> API Reference'), "#{Rails.configuration.arvados_docsite}/api", target: "_blank" %></li>
               <li><%= link_to raw('<i class="fa fa-book fa-fw"></i> SDK Reference'), "#{Rails.configuration.arvados_docsite}/sdk", target: "_blank" %></li>
+              <li role="presentation" class="divider"></li>
+              <li> <%= link_to report_issue_popup_path(popup_type: 'version', current_location: request.fullpath, action_method: 'post'),
+                      {class: 'report-issue-modal-window', 'data-toggle' =>  "modal", 'data-target' => '#report-issue-modal-window', :remote => true, return_to: request.url} do %>
+                       <i class="fa fa-fw fa-support"></i> Show version / debugging info
+                      <% end %>
+              </li>
+              <li> <%= link_to report_issue_popup_path(popup_type: 'report', current_location: request.fullpath, action_method: 'post'),
+                      {class: 'report-issue-modal-window', 'data-toggle' =>  "modal", 'data-target' => '#report-issue-modal-window', :remote => true, return_to: request.url} do %>
+                       <i class="fa fa-fw fa-support"></i> Report a problem
+                      <% end %>
+              </li>
             </ul>
           </li>
         </ul>
   <%= yield :footer_html %>
 
 <div class="modal-container"></div>
+<div id="report-issue-modal-window" class="modal fade" role="dialog" aria-labelledby="report-issue-modal" aria-hidden="true"></div>
index 3b4c2c0684bdb6cff3795776bc60b5588d2ec3ec..13829b6e18a3289c9ac6a283051508e3ef3a27ae 100644 (file)
@@ -12,6 +12,7 @@ development:
   assets.debug: true
   profiling_enabled: true
   site_name: Arvados Workbench (dev)
+  local_modified: <%= '-modified' if `git status -s` %>
 
 production:
   force_ssl: true
@@ -131,3 +132,12 @@ common:
   # Use "user_profile_form_message" to configure the message you want to display in
   # the profile page. If this is not provided, a default message will be displayed.
   user_profile_form_message: Welcome to Arvados. Please fill in all required fields before you can access Arvados Workbench. Missing required fields are in <span style="color:red">red</span>.
+
+  # source_version
+  source_version: <%= `git log -n 1 --format=%h` %>
+  local_modified: false
+
+  # report nitification to and from addresses
+  report_notifier_email_from: arvados@example.com
+  report_notifier_email_to: arvados@example.com
+  support_email_address: arvados@example.com
index 4ef26612ab194a2df62eefa3945aa1ab75ab5c4e..839118dc772c78064429d8b5047fc9989cc0e3b1 100644 (file)
@@ -10,6 +10,8 @@ ArvadosWorkbench::Application.routes.draw do
   get '/user_agreements/signatures' => 'user_agreements#signatures'
   get "users/setup_popup" => 'users#setup_popup', :as => :setup_user_popup
   get "users/setup" => 'users#setup', :as => :setup_user
+  get "actions/report_issue_popup" => 'actions#report_issue_popup', :as => :report_issue_popup
+  post "actions/report_issue" => 'actions#report_issue', :as => :report_issue
   resources :nodes
   resources :humans
   resources :traits
diff --git a/apps/workbench/test/functional/actions_controller_test.rb b/apps/workbench/test/functional/actions_controller_test.rb
new file mode 100644 (file)
index 0000000..f3c7b74
--- /dev/null
@@ -0,0 +1,19 @@
+require 'test_helper'
+
+class ActionsControllerTest < ActionController::TestCase
+
+  test "send report" do
+    post :report_issue, {format: 'js'}, session_for(:admin)
+    assert_response :success
+
+    found_email = false
+    ActionMailer::Base.deliveries.andand.each do |email|
+      if email.subject == "Issue reported"
+        found_email = true
+        break
+      end
+    end
+    assert_equal true, found_email, 'Expected email after issue reported'
+  end
+
+end
index 668ba00d0f39251aafc0d5f56961982bc305596c..bd877f6e725073d147e3202b74f9686d90ff64f4 100644 (file)
@@ -182,5 +182,5 @@ common:
   user_profile_notification_address: false
 
   # source_version
-  source_version: <%= `git log -n 1 --format=%H` %>
+  source_version: <%= `git log -n 1 --format=%h` %>
   local_modified: false