# HG changeset patch # User Chris Cannam # Date 1358937947 0 # Node ID ba189cfe5aafc29767936d1a41cd4d8a94012af8 # Parent 7a848374757bb7b4adf3b9d5f88df7dfefab0ff2# Parent 7f94e4180a2f745bd706ed5f2eed07e8b94964e3 Merge diff -r 7a848374757b -r ba189cfe5aaf app/helpers/projects_helper.rb --- 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 diff -r 7a848374757b -r ba189cfe5aaf app/views/projects/explore.html.erb --- 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 %> +
+ <%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %> +
+ +

<%= l(:label_explore_projects) %>

+ <% cache(:action => 'explore', :action_suffix => 'tags', :expires_in => 1.hour) do %> -

<%= l(:label_explore_projects) %>

<%=l(:label_project_tags_all)%>

<%= render :partial => 'projects/tagcloud' %> @@ -32,4 +37,10 @@ <%= link_to l(:label_overall_activity), { :controller => 'activities', :action => 'index' }, :class => 'more' %>
<% end %> + <% cache(:action => 'explore', :action_suffix => 'mature_projects', :expires_in => 1.hour) do %> +
+

<%=l(:label_projects_mature)%>

+ <%= render :partial => 'projects/mature' %> +
+ <% end %> diff -r 7a848374757b -r ba189cfe5aaf vendor/plugins/redmine_tags/app/views/projects/_tagcloud.html.erb --- 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 @@
-<%= render_tags_list(Project.available_tags, :style => :cloud) %> +<%= render_tags_list(Project.available_tags.select { |t| Project.tagged_with(t).count > 1 }, :style => :cloud) %>