Diff
Added: branches/dashboard/app/controllers/dashboard_controller.rb (0 => 2350)
--- branches/dashboard/app/controllers/dashboard_controller.rb (rev 0)
+++ branches/dashboard/app/controllers/dashboard_controller.rb 2010-03-29 15:06:06 UTC (rev 2350)
@@ -0,0 +1,54 @@
+# myExperiment: app/controllers/dashboard_controller.rb
+#
+# Copyright (c) 2010 Univeristy of Manchester and the University of Southampton.
+# See license.txt
+
+class DashboardController < ApplicationController
+ before_filter :check_admin, :load_stats_dates
+
+ def index
+ @total_users = User.find(:all).length
+ @unactivated_users = User.find(:all).select do |u|
+ u.activated_at.nil?
+ end.length
+ @unactivated_users_pct = ((Float.induced_from(@unactivated_users)/Float.induced_from(@total_users)) * 100).round
+ @activated_users = @total_users - @unactivated_users
+ @activated_users_pct = ((Float.induced_from(@activated_users)/Float.induced_from(@total_users)) * 100).round
+ @user_chart_url = user_chart_url(@activated_users_pct, @unactivated_users_pct)
+
+ @top_ten_networks = Network.most_members
+ @top_ten_networks_chart_url = network_chart_url @top_ten_networks
+ end
+
+ protected
+
+ def user_chart_url(activated_users_pct, unactivated_users_pct)
+ "http://chart.apis.google.com/chart?chs=400x150&cht=p3&chtt=User Breakdown&chco=246090&chdl=Activated (#{activated_users_pct}%)|Unactivated (#{unactivated_users_pct}%)&chd=t:#{activated_users_pct},#{unactivated_users_pct}"
+ end
+
+ def network_chart_url(networks)
+ labels = []
+ values = []
+ networks.each do |n|
+ labels.push ActionView::Helpers::TextHelper.truncate(n.title)
+ values.push n.memberships.length
+ end
+ "http://chart.apis.google.com/chart?chs=400x150&cht=bvs&chtt=Top Ten User Networks&chco=246090&chxt=x,y&chxr=0,1,10&chd=t:#{values.join ","}&chm=N,000000,0,-1,11"
+ end
+
+ def check_admin
+ unless current_user.admin?
+ flash[:error] = 'Only administrators have access to the statistics dashboard.'
+ if current_user.nil?
+ redirect_to :controller => 'session', :action ="" 'new'
+ else
+ redirect_to :controller => 'home'
+ end
+ end
+ end
+
+ def load_stats_dates
+ @stats_end_date = params[:stats_end_date] || Date.today
+ @stats_start_date = params[:stats_start_date] || @stats_end_date - 7
+ end
+end
Added: branches/dashboard/app/views/dashboard/_breadcrumbs.rhtml (0 => 2350)
--- branches/dashboard/app/views/dashboard/_breadcrumbs.rhtml (rev 0)
+++ branches/dashboard/app/views/dashboard/_breadcrumbs.rhtml 2010-03-29 15:06:06 UTC (rev 2350)
@@ -0,0 +1 @@
+<li><%= link_to 'Dashboard', dashboard_path -%></li>
Added: branches/dashboard/app/views/dashboard/_subnav.rhtml ( => )
Added: branches/dashboard/app/views/dashboard/index.rhtml
===================================================================
--- branches/dashboard/app/views/dashboard/index.rhtml (rev 0)
+++ branches/dashboard/app/views/dashboard/index.rhtml 2010-03-29 15:06:06 UTC (rev 2350)
@@ -0,0 +1,40 @@
+<h1>Statistics Dashboard</h1>
+<p>This is the current statistics report for <%= Conf.sitename %> from <%= @stats_start_date %> to <%= @stats_end_date %>.</p>
+<div id="user-stats">
+ <h2>Users & Networks</h2>
+ <div class="stats-area stats-area-left">
+ <p>This is a breakdown of the registered users in your system.</p>
+ <table>
+ <tbody>
+ <tr>
+ <td>Activated Users</td>
+ <td><%= @activated_users %></td>
+ </tr>
+ <tr>
+ <td>Unactivated Users</td>
+ <td><%= @unactivated_users %></td>
+ </tr>
+ <tr>
+ <th>Registered Users</th>
+ <td><%= @total_users %></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="stats-area">
+ <img src="" @user_chart_url %>"/>
+ </div>
+ <div class="stats-clear"></div>
+ <div class="stats-area stats-area-left">
+ <p>These are the top 10 biggest networks;</p>
+ <ol>
+ <% @top_ten_networks.each do |n| %>
+ <li><%= link_to n.title, group_path(n) %> (<%= n.memberships.length %>)</li>
+ <% end %>
+ </ol>
+ </div>
+ <div class="stats-area">
+ <img src="" @top_ten_networks_chart_url %>"/>
+ </div>
+ <div class="stats-clear"></div>
+</div>
Modified: branches/dashboard/app/views/gadgets/_user_monitor.rhtml (2349 => 2350)
--- branches/dashboard/app/views/gadgets/_user_monitor.rhtml 2010-03-26 16:27:22 UTC (rev 2349)
+++ branches/dashboard/app/views/gadgets/_user_monitor.rhtml 2010-03-29 15:06:06 UTC (rev 2350)
@@ -27,6 +27,7 @@
<hr/>
<ul class="gadget_list">
<li><%= icon "announcement", announcements_url, nil, nil, "Manage Announcements" %></li>
+ <li><%= icon "dashboard", dashboard_url, nil, nil, "Statistics Dashboard" %></li>
</ul>
<% end %>
Modified: branches/dashboard/config/environment.rb (2349 => 2350)
--- branches/dashboard/config/environment.rb 2010-03-26 16:27:22 UTC (rev 2349)
+++ branches/dashboard/config/environment.rb 2010-03-29 15:06:06 UTC (rev 2350)
@@ -74,5 +74,7 @@
ActionMailer::Base.smtp_settings = Conf.smtp
+require 'lib/actionpack_ext.rb'
+
load 'config/environment_private.rb' if FileTest.exist?('config/environment_private.rb')
Modified: branches/dashboard/config/routes.rb (2349 => 2350)
--- branches/dashboard/config/routes.rb 2010-03-26 16:27:22 UTC (rev 2349)
+++ branches/dashboard/config/routes.rb 2010-03-29 15:06:06 UTC (rev 2350)
@@ -220,5 +220,7 @@
# Install the default route as the lowest priority.
map.connect ':controller/:action/:id'
+
+ map.dashboard 'dashboard', :controller => 'dashboard'
end
Added: branches/dashboard/public/stylesheets/dashboard.css (0 => 2350)
--- branches/dashboard/public/stylesheets/dashboard.css (rev 0)
+++ branches/dashboard/public/stylesheets/dashboard.css 2010-03-29 15:06:06 UTC (rev 2350)
@@ -0,0 +1,14 @@
+.stats-area {
+ float: left;
+ padding: 10px;
+}
+
+.stats-area-left {
+ border-right: 1px solid #afafaf;
+ width: 30%;
+}
+
+.stats-clear {
+ border-bottom: 1px solid #afafaf;
+ clear: both;
+}
Modified: branches/dashboard/public/stylesheets/styles.css (2349 => 2350)
--- branches/dashboard/public/stylesheets/styles.css 2010-03-26 16:27:22 UTC (rev 2349)
+++ branches/dashboard/public/stylesheets/styles.css 2010-03-29 15:06:06 UTC (rev 2350)
@@ -6,6 +6,9 @@
Note that for font-size, only use %ages according to:
http://developer.yahoo.com/yui/fonts/#fontsize
*/
+
address@hidden url(/stylesheets/dashboard.css);
+
body {
background: #8e8e8e url('/images/body-bg.gif') repeat-y center;
/* Only need to define one font here because the