changeset 1197:ba189cfe5aaf cannam

Merge
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 23 Jan 2013 10:45:47 +0000
parents 7a848374757b (current diff) 7f94e4180a2f (diff)
children 6a7198536816
files
diffstat 3 files changed, 47 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/app/helpers/projects_helper.rb	Wed Jan 23 10:45:36 2013 +0000
+++ b/app/helpers/projects_helper.rb	Wed Jan 23 10:45:47 2013 +0000
@@ -269,4 +269,38 @@
     sharing = 'none' unless Version::VERSION_SHARINGS.include?(sharing)
     l("label_version_sharing_#{sharing}")
   end
+
+  def score_maturity(project)
+    nr_changes = (project.repository.nil? ? 0 : project.repository.changesets.count)
+    downloadables = [project.attachments,
+                     project.versions.collect { |v| v.attachments },
+                     project.documents.collect { |d| d.attachments }].flatten
+    nr_downloadables = downloadables.count
+    nr_downloads = downloadables.map do |d| d.downloads end.sum
+    nr_members = project.members.count
+    nr_publications = if project.respond_to? :publications
+                      then project.publications.count else 0 end
+    Math.log(1 + nr_changes) +
+      Math.log(1 + nr_downloadables) +
+      Math.log(1 + nr_downloads) +
+      Math.sqrt(nr_members > 1 ? (nr_members - 1) : 0) +
+      Math.sqrt(nr_publications)
+  end
+
+  def all_maturity_scores()
+    phash = Hash.new
+    pp = Project.visible(User.anonymous)
+    pp.each do |p| 
+      phash[p] = score_maturity p
+    end
+    phash
+  end
+
+  def mature_projects(count)
+    phash = all_maturity_scores
+    scores = phash.values.sort
+    threshold = scores[scores.length / 2]
+    if threshold == 0 then threshold = 1 end
+    phash.keys.select { |k| phash[k] > threshold }.sample(count)
+  end
 end
--- a/app/views/projects/explore.html.erb	Wed Jan 23 10:45:36 2013 +0000
+++ b/app/views/projects/explore.html.erb	Wed Jan 23 10:45:47 2013 +0000
@@ -2,8 +2,13 @@
     <%= stylesheet_link_tag 'redmine_tags', :plugin => 'redmine_tags' %>
 <% end %>
 
+<div class="contextual">
+    <%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %>
+</div>
+
+<h2><%= l(:label_explore_projects) %></h2>
+
 <% cache(:action => 'explore', :action_suffix => 'tags', :expires_in => 1.hour) do %>
-<h2><%= l(:label_explore_projects) %></h2>
   <div class="tags box">
   <h3><%=l(:label_project_tags_all)%></h3>
     <%= render :partial => 'projects/tagcloud' %>
@@ -32,4 +37,10 @@
     <%= link_to l(:label_overall_activity), { :controller => 'activities', :action => 'index' }, :class => 'more' %>
   </div>
   <% end %>
+  <% cache(:action => 'explore', :action_suffix => 'mature_projects', :expires_in => 1.hour) do %>
+  <div class="projects box">
+  <h3><%=l(:label_projects_mature)%></h3>
+    <%= render :partial => 'projects/mature' %>
+  </div>
+  <% end %>
 </div>
--- a/vendor/plugins/redmine_tags/app/views/projects/_tagcloud.html.erb	Wed Jan 23 10:45:36 2013 +0000
+++ b/vendor/plugins/redmine_tags/app/views/projects/_tagcloud.html.erb	Wed Jan 23 10:45:47 2013 +0000
@@ -1,6 +1,6 @@
 
 <div id="tags">
-<%= render_tags_list(Project.available_tags, :style => :cloud) %>
+<%= render_tags_list(Project.available_tags.select { |t| Project.tagged_with(t).count > 1 }, :style => :cloud) %>
 </div>