Account status is now part of the "notifications" area
authorPeter Amstutz <peter.amstutz@curoverse.com>
Mon, 30 Dec 2013 20:08:42 +0000 (15:08 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Mon, 30 Dec 2013 20:08:42 +0000 (15:08 -0500)
apps/workbench/app/controllers/users_controller.rb
apps/workbench/app/views/users/_notifications.html.erb [new file with mode: 0644]
apps/workbench/app/views/users/_tables.html.erb [new file with mode: 0644]
apps/workbench/app/views/users/home.html.erb

index 002ea62bea61ab41829881240d68a4a462a22555..89d336f5e9826c2247b39796d6bf3aaed1560f7d 100644 (file)
@@ -10,9 +10,11 @@ class UsersController < ApplicationController
   end
 
   def home
+    @showallalerts = false
     @my_ssh_keys = AuthorizedKey.where(authorized_user_uuid: current_user.uuid)
     # @my_vm_perms = Link.where(tail_uuid: current_user.uuid, head_kind: 'arvados#virtual_machine', link_class: 'permission', name: 'can_login')
     # @my_repo_perms = Link.where(tail_uuid: current_user.uuid, head_kind: 'arvados#repository', link_class: 'permission', name: 'can_write')
+
     @my_jobs = Job.
       limit(10).
       order('created_at desc').
diff --git a/apps/workbench/app/views/users/_notifications.html.erb b/apps/workbench/app/views/users/_notifications.html.erb
new file mode 100644 (file)
index 0000000..37636c6
--- /dev/null
@@ -0,0 +1,101 @@
+<% if current_user.andand.is_active %>
+
+<% if @my_ssh_keys.count == 0 || @showallalerts %>
+  <div class="alert alert-info daxalert">
+    <button type="button" class="close" data-dismiss="alert">&times;</button>
+    <%= image_tag "dax.png", class: "dax" %>
+    <div>
+      Hi, I noticed that you have not yet set up an SSH public key for use with Arvados.  
+      <%= link_to "Click here to learn about SSH keys in Arvados.",
+         "http://doc.arvados.org/user/getting_started/ssh-access.html", 
+         style: "font-weight: bold",
+         target: "_blank" %>
+      When you have an SSH key you would like to use, paste the SSH public key
+      in the text box.
+    </div>
+      <%= form_for AuthorizedKey.new do |f| %>
+       <%= hidden_field_tag :return_to, request.original_url %>
+       <%= f.text_area :public_key, cols: 50, rows: 4, placeholder: "Paste your public key here", style: "width: 100%" %>
+       <%= f.submit :Save, value: raw("&check;"), class: "btn btn-primary pull-right" %>
+      <% end %>
+  </div>
+<% end %>
+
+<% if @my_collections.count == 0 || @showallalerts %>
+<div class="alert alert-info daxalert">
+  <button type="button" class="close" data-dismiss="alert">&times;</button>
+  <%= image_tag "dax.png", class: "dax" %>
+  <p>
+    Hi, I noticed you haven't uploaded a new collection yet. 
+    <%= link_to "Click here to learn how to upload data to Arvados Keep.", 
+       "http://doc.arvados.org/user/tutorials/tutorial-keep.html", 
+       style: "font-weight: bold", target: "_blank" %>
+  </p>
+</div>
+
+<% end %>
+
+<% if @my_jobs.count == 0 || @showallalerts %>
+<div class="alert alert-info daxalert">
+  <button type="button" class="close" data-dismiss="alert">&times;</button>  
+  <p><%= image_tag "dax.png", class: "dax" %>
+    Hi, I noticed you haven't run a job yet. 
+    <%= link_to "Click here to learn how to run an Arvados Crunch job.", 
+       "http://doc.arvados.org/user/tutorials/tutorial-job1.html", 
+       style: "font-weight: bold",
+       target: "_blank" %>
+  </p>
+</div>
+<% end %>
+
+<% if @my_pipelines.count == 0 || @showallalerts %>
+<div class="alert alert-info daxalert">
+  <button type="button" class="close" data-dismiss="alert">&times;</button>
+  <p><%= image_tag "dax.png", class: "dax" %>
+    Hi, I noticed you haven't run a pipeline yet.  
+    <%= link_to "Click here to learn how to run an Arvados Crunch pipeline.", 
+       "http://doc.arvados.org/user/tutorials/tutorial-new-pipeline.html", 
+       style: "font-weight: bold",
+       target: "_blank" %>
+  </p>
+</div>
+<% end %>
+
+<% end %>
+
+<div class="well">
+  <p><strong>Useful links</strong></p>
+  <p><ul>
+      <li><%= link_to "Arvados project page", "http://arvados.org", target: "_blank" %></li>
+      <li><%= link_to "Tutorials and user guide",
+      "http://doc.arvados.org/user/", target: "_blank" %></li>
+    </ul>
+  </p>
+</div>
+
+<% if current_user.andand.is_active %>
+<div class="well">
+  <p><strong>System status</strong></p>
+    <table>
+      <% [Human, Trait, Collection, PipelineTemplate,
+         PipelineInstance].each do |aclass| %>
+       <tr>
+         <td>
+           <span style="margin-right: 2em">
+             <a href="/<%= raw(aclass.to_s.pluralize.underscore) %>">
+           <%= raw(aclass.to_s.pluralize.underscore.capitalize.gsub '_', '&nbsp;') %>
+           </a>
+           </span>
+           </td>
+         <td>
+        <% if aclass == 'File' %>
+          <%= Collection.limit(4000).where({}).collect(&:files).flatten(1).count %>
+        <% else %>
+          <%= aclass.limit(4000).where({}).count %>
+        <% end %>
+       </td>
+       </tr>
+      <% end %>
+      </table>
+</div>
+<% end %>
diff --git a/apps/workbench/app/views/users/_tables.html.erb b/apps/workbench/app/views/users/_tables.html.erb
new file mode 100644 (file)
index 0000000..c52057c
--- /dev/null
@@ -0,0 +1,182 @@
+<% if current_user.andand.is_active %>
+  <div>
+    <strong>Recent jobs</strong>
+    <%= link_to raw("Show all jobs &rarr;"), jobs_path, class: 'pull-right' %>
+    <% if not current_user.andand.is_active or @my_jobs.empty? %>
+      <br/>(None)
+    <% else %>
+      <table class="table table-bordered table-condensed job-table">
+       <colgroup>
+          <col width="28%" />
+          <col width="38%" />
+          <col width="7%" />
+          <col width="15%" />
+          <col width="12%" />
+       </colgroup>
+
+        <tr>
+         <th>Script</th>
+         <th>Output</th>
+         <th>Log</th>
+         <th>Status</th>
+         <th>Age</th>
+       </tr>
+
+        <% @my_jobs[0..6].each do |j| %>
+          <tr>
+            <td>
+              <small>
+               <%= link_to j.script[0..31], job_path(j.uuid) %>
+              </small>
+            </td>
+
+           <td>
+             <small>
+               <% if j.success %>
+
+                 <a href="<%= collection_path(j.output) %>">
+                   <% Collection.limit(1).where(uuid: j.output).each do |c|
+                        c.files.each do |file| %>
+                     <%= "#{file[0]}/#{file[1]}" %>
+                   <% end %>
+               <% end %>
+               </a>
+
+       <% end %>
+       </small>
+</td>
+
+<td>
+  <small>
+    <% if j.success %>
+      <a href="<%= collection_path(j.log) %>">Log</a>
+    <% end %>
+  </small>
+</td>
+
+<td>
+  <small>
+    <%= raw(distance_of_time_in_words(j[:created_at], Time.now).sub('about
+','~').sub(' ','&nbsp;')) if j[:created_at] %> ago
+  </small>
+</td>
+
+<td>
+  <% if j.success %>
+    <span class="label label-success">finished</span>
+  <% elsif j.success == false %>
+    <span class="label label-danger">failed</span>
+  <% elsif j.running and j.started_at and not j.finished_at %>
+    <% percent_total_tasks = 100 / (j.tasks_summary[:running] + j.tasks_summary[:done] + j.tasks_summary[:todo]) rescue 0 %>
+    <div class="progress" style="margin-bottom: 0">
+      <div class="bar bar-success" style="width: <%= j.tasks_summary[:done] * percent_total_tasks rescue 0 %>%;"></div>
+      <div class="bar" style="width: <%= j.tasks_summary[:running] * percent_total_tasks rescue 0 %>%; opacity: 0.3"></div>
+    </div>
+  <% else %>
+    <span class="label">queued</span>
+  <% end %>
+</td>
+
+</tr>
+<% end %>
+</table>
+<% end %>
+</div>
+
+<div>
+  <strong>Recent pipeline instances</strong>
+  <%= link_to raw("Show all pipeline instances &rarr;"), jobs_path, class: 'pull-right' %>
+  <% if not current_user.andand.is_active or @my_pipelines.empty? %>
+    <br/>(None)
+  <% else %>
+    <table class="table table-bordered table-condensed job-table">
+      <colgroup>
+        <col width="73%" />
+        <col width="15%" />
+        <col width="12%" />
+      </colgroup>
+
+      <tr>
+       <th>Pipeline template</th>
+       <th>Age</th>
+       <th>Status</th>
+      </tr>
+
+      <% @my_pipelines[0..6].each do |p| %>
+        <tr>
+          <td>
+            <small>
+             <% PipelineTemplate.limit(1).where(uuid: p.pipeline_template_uuid).each do |i| %>
+               <%= link_to i.name, pipeline_instance_path(p.uuid) %>
+             <% end %>
+            </small>
+          </td>
+
+          <td>
+            <small>
+             <%= raw(distance_of_time_in_words(p[:created_at], Time.now).sub('about
+','~').sub(' ','&nbsp;')) if p[:created_at] %> ago
+            </small>
+          </td>
+
+          <td>
+            <% if p.success %>
+              <span class="label label-success">finished</span>
+            <% elsif p.success == false %>
+              <span class="label label-danger">failed</span>
+            <% elsif p.active %>
+              <span class="label label-info">running</span>
+            <% else %>
+              <span class="label">queued</span>
+            <% end %>
+          </td>
+
+        </tr>
+      <% end %>
+    </table>
+  <% end %>
+</div>
+
+<div>
+  <strong>Recent collections</strong>
+  <%= link_to raw("Show all collections &rarr;"), collections_path, class: 'pull-right' %>
+  <% if not current_user.andand.is_active or @my_collections.empty? %>
+    <br/>(None)
+  <% else %>
+    <table class="table table-bordered table-condensed job-table">
+      <colgroup>
+        <col width="73%" />
+        <col width="27%" />
+      </colgroup>
+
+      <tr>
+       <th>Contents</th>
+       <th>Age</th>
+      </tr>
+
+      <% @my_collections[0..6].each do |c| %>
+        <tr>
+          <td>
+            <small>
+             <a href="<%= collection_path(c.uuid) %>">
+               <% c.files.each do |file| %>
+                 <%= "#{file[0]}/#{file[1]}" %>
+               <% end %>
+             </a>
+            </small>
+          </td>
+          <td>
+            <small>
+             <%= raw(distance_of_time_in_words(c[:created_at], Time.now).sub('about
+','~').sub(' ','&nbsp;')) if c[:created_at] %> ago
+            </small>
+          </td>
+        </tr>
+      <% end %>
+    </table>
+  <% end %>
+</div>
+
+<% else %>
+  <%= image_tag "dax.png", style: "max-width=40%" %>
+<% end %>
index 89fab32097366e271b3148513f9da8a2ffe2eb56..d221db9a8df1c6a262f6d277b5c02c11cf557207 100644 (file)
     </style>
 <% end %>
 
-<% if current_user.andand.is_active %>
-
 <div class="container-fluid">
-  
-  <div class="span7">
-
-    <div>
-      <strong>Recent jobs</strong>
-      <%= link_to raw("Show all jobs &rarr;"), jobs_path, class: 'pull-right' %>
-      <% if not current_user.andand.is_active or @my_jobs.empty? %>
-      (None)
-      <% else %>
-      <table class="table table-bordered table-condensed job-table">
-       <colgroup>
-          <col width="28%" />
-          <col width="38%" />
-          <col width="7%" />
-          <col width="15%" />
-          <col width="12%" />
-       </colgroup>
-
-        <tr>
-         <th>Script</th>
-         <th>Output</th>
-         <th>Log</th>
-         <th>Status</th>
-         <th>Age</th>
-       </tr>
-
-        <% @my_jobs[0..6].each do |j| %>
-        <tr>
-          <td>
-            <small>
-              <%= link_to j.script[0..31], job_path(j.uuid) %>
-            </small>
-          </td>
-
-         <td>
-           <small>
-           <% if j.success %>
 
-             <a href="<%= collection_path(j.output) %>">
-               <% Collection.limit(1).where(uuid: j.output).each do |c|
-                      c.files.each do |file| %>
-                 <%= "#{file[0]}/#{file[1]}" %>
-               <% end %>
-               <% end %>
-             </a>
-
-           <% end %>
-           </small>
-         </td>
-
-         <td>
-           <small>
-           <% if j.success %>
-             <a href="<%= collection_path(j.log) %>">Log</a>
-           <% end %>
-           </small>
-         </td>
-
-          <td>
-            <small>
-<%= raw(distance_of_time_in_words(j[:created_at], Time.now).sub('about
-','~').sub(' ','&nbsp;')) if j[:created_at] %> ago
-            </small>
-          </td>
-
-          <td>
-            <% if j.success %>
-            <span class="label label-success">finished</span>
-            <% elsif j.success == false %>
-            <span class="label label-danger">failed</span>
-            <% elsif j.running and j.started_at and not j.finished_at %>
-            <% percent_total_tasks = 100 / (j.tasks_summary[:running] + j.tasks_summary[:done] + j.tasks_summary[:todo]) rescue 0 %>
-            <div class="progress" style="margin-bottom: 0">
-              <div class="bar bar-success" style="width: <%= j.tasks_summary[:done] * percent_total_tasks rescue 0 %>%;"></div>
-              <div class="bar" style="width: <%= j.tasks_summary[:running] * percent_total_tasks rescue 0 %>%; opacity: 0.3"></div>
-            </div>
-            <% else %>
-            <span class="label">queued</span>
-            <% end %>
-          </td>
-
-        </tr>
-        <% end %>
-      </table>
-      <% end %>
-    </div>
+  <div class="span3 pull-right">
+    <br/>
 
-    <div>
-      <strong>Recent pipeline instances</strong>
-      <%= link_to raw("Show all pipeline instances &rarr;"), jobs_path, class: 'pull-right' %>
-      <% if not current_user.andand.is_active or @my_pipelines.empty? %>
-      (None)
-      <% else %>
-      <table class="table table-bordered table-condensed job-table">
-       <colgroup>
-          <col width="73%" />
-          <col width="15%" />
-          <col width="12%" />
-       </colgroup>
-
-        <tr>
-         <th>Pipeline template</th>
-         <th>Age</th>
-         <th>Status</th>
-       </tr>
-
-        <% @my_pipelines[0..6].each do |p| %>
-        <tr>
-          <td>
-            <small>
-             <% PipelineTemplate.limit(1).where(uuid: p.pipeline_template_uuid).each do |i| %>
-               <%= link_to i.name, pipeline_instance_path(p.uuid) %>
-             <% end %>
-            </small>
-          </td>
-
-          <td>
-            <small>
-<%= raw(distance_of_time_in_words(p[:created_at], Time.now).sub('about
-','~').sub(' ','&nbsp;')) if p[:created_at] %> ago
-            </small>
-          </td>
-
-          <td>
-            <% if p.success %>
-            <span class="label label-success">finished</span>
-            <% elsif p.success == false %>
-            <span class="label label-danger">failed</span>
-            <% elsif p.active %>
-            <span class="label label-info">running</span>
-            <% else %>
-            <span class="label">queued</span>
-            <% end %>
-          </td>
-
-        </tr>
-        <% end %>
-      </table>
-      <% end %>
+    <div class="well">
+<% if current_user.andand.is_active %>
+  <p>Your account status:<br/>
+    <strong>Active</strong></p>
+<% elsif current_user %>
+      <p>Your account status:<br/>
+       <strong>New / inactive</strong></p>
+      <p>
+       Your account must be activated by an Arvados administrator.  If this
+       is your first time accessing Arvados and would like to request
+       access, or you believe you are seeing the page in error, please 
+       <%= link_to "contact us", Rails.configuration.activation_contact_link %>.  
+       You should receive an email at the address you used to log in when
+       your account is activated.
+      </p>
+      <p>
+       <%= link_to raw('Contact us &#x2709;'),
+           Rails.configuration.activation_contact_link, class: "btn btn-primary" %></p>
+<% end %>
     </div>
 
-    <div>
-      <strong>Recent collections</strong>
-      <%= link_to raw("Show all collections &rarr;"), collections_path, class: 'pull-right' %>
-      <% if not current_user.andand.is_active or @my_collections.empty? %>
-      (None)
-      <% else %>
-      <table class="table table-bordered table-condensed job-table">
-       <colgroup>
-          <col width="73%" />
-          <col width="27%" />
-       </colgroup>
-
-       <tr>
-         <th>Contents</th>
-         <th>Age</th>
-       </tr>
-
-        <% @my_collections[0..6].each do |c| %>
-        <tr>
-          <td>
-            <small>
-             <a href="<%= collection_path(c.uuid) %>">
-              <% c.files.each do |file| %>
-              <%= "#{file[0]}/#{file[1]}" %>
-             <% end %>
-             </a>
-            </small>
-          </td>
-          <td>
-            <small>
-<%= raw(distance_of_time_in_words(c[:created_at], Time.now).sub('about
-','~').sub(' ','&nbsp;')) if c[:created_at] %> ago
-            </small>
-          </td>
-        </tr>
-        <% end %>
-      </table>
-      <% end %>
-    </div>
+    <%= render :partial => 'notifications' %>
   </div>
-
-<div class="span4">
-<br/>
-
-<% if @my_ssh_keys.count == 0%>
-  <div class="alert alert-info daxalert">
-    <button type="button" class="close" data-dismiss="alert">&times;</button>
-    <%= image_tag "dax.png", class: "dax" %>
-    <div>
-      Hi, I noticed that you have not yet set up an SSH public key for use with Arvados.  
-      <%= link_to "Click here to learn about SSH keys in Arvados.",
-         "http://doc.arvados.org/user/getting_started/ssh-access.html", 
-         style: "font-weight: bold",
-         target: "_blank" %>
-      When you have an SSH key you would like to use, paste the SSH public key
-      in the text box.
-    </div>
-      <%= form_for AuthorizedKey.new do |f| %>
-       <%= hidden_field_tag :return_to, request.original_url %>
-       <%= f.text_area :public_key, cols: 50, rows: 4, placeholder: "Paste your public key here", style: "width: 100%" %>
-       <%= f.submit :Save, value: raw("&check;"), class: "btn btn-primary pull-right" %>
-      <% end %>
+  
+  <div class="span8">
+    <%= render :partial => 'tables' %>
   </div>
-<% end %>
-
-<% if @my_collections.count == 0 %>
-<div class="alert alert-info daxalert">
-  <button type="button" class="close" data-dismiss="alert">&times;</button>
-  <%= image_tag "dax.png", class: "dax" %>
-  <p>
-    Hi, I noticed you haven't uploaded a new collection yet. 
-    <%= link_to "Click here to learn how to upload data to Arvados Keep.", 
-       "http://doc.arvados.org/user/tutorials/tutorial-keep.html", 
-       style: "font-weight: bold", target: "_blank" %>
-  </p>
-</div>
-
-<% end %>
-
-<% if @my_jobs.count == 0 %>
-<div class="alert alert-info daxalert">
-  <button type="button" class="close" data-dismiss="alert">&times;</button>  
-  <p><%= image_tag "dax.png", class: "dax" %>
-    Hi, I noticed you haven't run a job yet. 
-    <%= link_to "Click here to learn how to run an Arvados Crunch job.", 
-       "http://doc.arvados.org/user/tutorials/tutorial-job1.html", 
-       style: "font-weight: bold",
-       target: "_blank" %>
-  </p>
-</div>
-<% end %>
-
-<% if @my_pipelines.count == 0 %>
-<div class="alert alert-info daxalert">
-  <button type="button" class="close" data-dismiss="alert">&times;</button>
-  <p><%= image_tag "dax.png", class: "dax" %>
-    Hi, I noticed you haven't run a pipeline yet.  
-    <%= link_to "Click here to learn how to run an Arvados Crunch pipeline.", 
-       "http://doc.arvados.org/user/tutorials/tutorial-new-pipeline.html", 
-       style: "font-weight: bold",
-       target: "_blank" %>
-  </p>
-</div>
-<% end %>
-
-<div class="well">
-  <p><strong>Useful links</strong></p>
-  <p><ul>
-      <li><%= link_to "Arvados project page", "http://arvados.org", target: "_blank" %></li>
-      <li><%= link_to "Tutorials and user guide",
-      "http://doc.arvados.org/user/", target: "_blank" %></li>
-    </ul>
-  </p>
-</div>
-
-<div class="well">
-  <p><strong>System status</strong></p>
-    <table>
-      <% [Human, Trait, Collection, PipelineTemplate,
-         PipelineInstance].each do |aclass| %>
-       <tr>
-         <td>
-           <span style="margin-right: 2em">
-             <a href="/<%= raw(aclass.to_s.pluralize.underscore) %>">
-           <%= raw(aclass.to_s.pluralize.underscore.capitalize.gsub '_', '&nbsp;') %>
-           </a>
-           </span>
-           </td>
-         <td>
-        <% if aclass == 'File' %>
-          <%= Collection.limit(4000).where({}).collect(&:files).flatten(1).count %>
-        <% else %>
-          <%= aclass.limit(4000).where({}).count %>
-        <% end %>
-       </td>
-       </tr>
-      <% end %>
-      </table>
-</div>
 
 </div>
-</div>
-
-<% elsif current_user %>
-  <%= image_tag "dax.png", style: "float: left; max-width: 25%; margin-right: 2em" %>
-  <h1>Welcome to Arvados, <%= current_user.first_name %>!</h1>
-  <div class="row-fluid">
-    <div class="col span8">
-      <h4>Your account status</h4>
-      <div class="well clearfix">
-       <p><strong>New / inactive</strong></p>
-       <p>
-         Your account must be activated by an Arvados administrator.  If this
-         is your first time accessing Arvados and would like to request
-         access, or you believe you are seeing the page in error, please 
-         <%= link_to "contact us", Rails.configuration.activation_contact_link %>.  
-         You should receive an email at the address you used to log in when
-         your account is activated.  In the mean time, you can 
-         <%= link_to "learn more about Arvados", "https://arvados.org/projects/arvados/wiki/Introduction_to_Arvados" %>,
-         and <%= link_to "read the Arvados user guide", "http://doc.arvados.org/user" %>.
-       </p>
-       <p>
-         <%= link_to raw('Contact us &#x2709;'),
-             Rails.configuration.activation_contact_link, class: "pull-right btn btn-primary" %></p>
-      </div>
-    </div>
-  </div>
-<% end %>