# HG changeset patch
# User Chris Cannam
# Date 1358946933 0
# Node ID 16826c3afbba31805c3a7ccb3ccca833361f73e9
# Parent ad10dc713462977bb55cea4e19d73e015e56f439# Parent e60f4ccfdc70c5a8cb241c86f8e470fe3bf3f585
Merge from branch "live"
diff -r ad10dc713462 -r 16826c3afbba app/controllers/my_controller.rb
--- a/app/controllers/my_controller.rb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/controllers/my_controller.rb Wed Jan 23 13:15:33 2013 +0000
@@ -21,6 +21,7 @@
helper :issues
helper :users
helper :custom_fields
+ helper :projects
BLOCKS = { 'issuesassignedtome' => :label_assigned_to_me_issues,
'issuesreportedbyme' => :label_reported_issues,
@@ -30,11 +31,12 @@
'tipoftheday' => :label_tipoftheday,
'calendar' => :label_calendar,
'documents' => :label_document_plural,
- 'timelog' => :label_spent_time
+ 'timelog' => :label_spent_time,
+ 'myprojects' => :label_my_projects
}.merge(Redmine::Views::MyPage::Block.additional_blocks).freeze
- DEFAULT_LAYOUT = { 'left' => ['tipoftheday', 'activitymyprojects'],
- 'right' => ['issueswatched']
+ DEFAULT_LAYOUT = { 'left' => ['myprojects', 'activitymyprojects'],
+ 'right' => ['tipoftheday', 'issueswatched']
}.freeze
def index
diff -r ad10dc713462 -r 16826c3afbba app/controllers/projects_controller.rb
--- a/app/controllers/projects_controller.rb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/controllers/projects_controller.rb Wed Jan 23 13:15:33 2013 +0000
@@ -58,11 +58,6 @@
@project_pages = Paginator.new self, @project_count, @limit, params['page']
@offset ||= @project_pages.current.offset
@projects = Project.visible_roots.all(:offset => @offset, :limit => @limit, :order => sort_clause)
- if User.current.logged?
- # seems sort_by gives us case-sensitive ordering, which we don't want
-# @user_projects = User.current.projects.sort_by(&:name)
- @user_projects = User.current.projects.all(:order => :name)
- end
render :template => 'projects/index.html.erb', :layout => !request.xhr?
## Redmine 2.2:
diff -r ad10dc713462 -r 16826c3afbba app/helpers/activities_helper.rb
--- a/app/helpers/activities_helper.rb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/helpers/activities_helper.rb Wed Jan 23 13:15:33 2013 +0000
@@ -1,14 +1,52 @@
module ActivitiesHelper
+ def date_of_event(e)
+ if e.respond_to? :updated_at
+ e.updated_at
+ elsif e.respond_to? :updated_on
+ e.updated_on
+ elsif e.respond_to? :created_on
+ e.created_on
+ elsif e.respond_to? :committed_on
+ e.committed_on
+ else
+ nil
+ end
+ end
+
def busy_projects(events, count)
- # Transform events list into hash from project id to number of
- # occurrences of project in list (there is surely a tidier way
- # to do this, e.g. chunk() in Ruby 1.9 but not in 1.8)
- phash = events.map { |e| e.project unless !e.respond_to?(:project) }.sort.group_by { |p| p.id }
- phash = phash.merge(phash) { |k,v| v.length }
- threshold = phash.values.sort.last(count).first
- busy = phash.keys.select { |k| phash[k] >= threshold }.sample(count)
+
+ # Score each project for which there are any events, by giving
+ # each event a score based on how long ago it was (the more recent
+ # the better).
+
+ projhash = Hash.new
+
+ events.each do |e|
+ if e.respond_to?(:project)
+ p = e.project
+ d = date_of_event e
+ if !d.nil?
+ dd = Date.parse d.to_s
+ age = Date.today - dd
+ score = (age < 14 ? 15-age : 1)
+ if projhash.key? p
+ projhash[p] += score
+ else
+ projhash[p] = score
+ end
+ end
+ end
+ end
+
+ # pick N highest values and use cutoff value as selection threshold
+ threshold = projhash.values.sort.last(count).first
+
+ # select projects above threshold and pick N from them randomly
+ busy = projhash.keys.select { |k| projhash[k] >= threshold }.sample(count)
+
+ # return projects rather than just ids
busy.map { |pid| Project.find(pid) }
end
diff -r ad10dc713462 -r 16826c3afbba app/helpers/projects_helper.rb
--- a/app/helpers/projects_helper.rb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/helpers/projects_helper.rb Wed Jan 23 13:15:33 2013 +0000
@@ -263,4 +263,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 ad10dc713462 -r 16826c3afbba app/views/activities/_busy.html.erb
--- a/app/views/activities/_busy.html.erb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/views/activities/_busy.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -1,7 +1,8 @@
<% events = @events_by_day %>
<% if (events.nil?)
activity = Redmine::Activity::Fetcher.new(User.anonymous)
- events = activity.events(Date.today - 14, Date.today + 1)
+ days = Setting.activity_days_default.to_i
+ events = activity.events(Date.today - days, Date.today + 1)
end
%>
@@ -31,11 +32,11 @@
<%
u = project.users_by_role
if ! u.empty? %>
- (<%=
+ <%=
mgmt_roles = u.keys.select{ |r| r.allowed_to?(:edit_project) }
managers = mgmt_roles.map{ |r| u[r] }.flatten.sort.uniq
managers.map{ |m| m.name }.join(', ')
- %>)<%
+ %><%
end
%>
@@ -45,4 +46,5 @@
<% end %>
+
<% end %>
diff -r ad10dc713462 -r 16826c3afbba app/views/layouts/base.html.erb
--- a/app/views/layouts/base.html.erb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/views/layouts/base.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -55,6 +55,9 @@
<% unless page_header_title[1].empty? %>
style="margin-top: 0px; "
<% end %>
+ <% if !@project.nil? and @project.name.length > 35 %>
+ class="long-title"
+ <% end %>
><% if display_main_menu?(@project) %>
<%= link_to_project(@project) %>
<% else %>
diff -r ad10dc713462 -r 16826c3afbba app/views/my/blocks/_myprojects.html.erb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/my/blocks/_myprojects.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -0,0 +1,16 @@
+<% @user_projects = User.current.projects.all(:order => :name) %>
+
+<% if @user_projects.empty? %>
+
<%=l(:label_my_projects)%>
+
+
<%= l(:label_have_no_projects)%> <%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}) if User.current.allowed_to?(:add_project, nil, :global => true) %>
+
+<% else %>
+<%=l(:label_my_projects)%> (<%= @user_projects.count %>)
+
+<%=
+ render :partial => 'projects/my', :locals => { :user => User.current }
+ %>
+
+<% end %>
+
diff -r ad10dc713462 -r 16826c3afbba app/views/my/page.html.erb
--- a/app/views/my/page.html.erb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/views/my/page.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -1,3 +1,7 @@
+<% content_for :header_tags do %>
+ <%= stylesheet_link_tag 'redmine_tags', :plugin => 'redmine_tags' %>
+<% end %>
+
<%= link_to l(:label_personalize_page), :action => 'page_layout' %>
<%= '| ' + link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %>
diff -r ad10dc713462 -r 16826c3afbba app/views/projects/_mature.html.erb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/projects/_mature.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -0,0 +1,38 @@
+
+
+
+ <%
+ for project in mature_projects(5)
+ %>
+
+ -
+
+ <% if !project.root? %>
+ <% project.ancestors.each do |p| %>
+ <%= h(p) %> »
+ <% end %>
+ <% end %>
+ <%= link_to_project project %>
+
+ <% if !project.is_public? %>
+ <%= l(:field_is_private) %>
+ <% end %>
+
+ <%
+ u = project.users_by_role
+ if ! u.empty? %>
+ <%=
+ mgmt_roles = u.keys.select{ |r| r.allowed_to?(:edit_project) }
+ managers = mgmt_roles.map{ |r| u[r] }.flatten.sort.uniq
+ managers.map{ |m| m.name }.join(', ')
+ %><%
+ end
+ %>
+
+
+ <%= render_project_short_description project %>
+
+
+ <% end %>
+
+
diff -r ad10dc713462 -r 16826c3afbba app/views/projects/_my.html.erb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/projects/_my.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -0,0 +1,1 @@
+<%= render_my_project_hierarchy(@user_projects) %>
diff -r ad10dc713462 -r 16826c3afbba app/views/projects/explore.html.erb
--- a/app/views/projects/explore.html.erb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/views/projects/explore.html.erb Wed Jan 23 13:15:33 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) %>
@@ -27,6 +34,13 @@
<%=l(:label_projects_busy)%>
<%= render :partial => 'activities/busy' %>
+ <%= 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 ad10dc713462 -r 16826c3afbba app/views/projects/index.html.erb
--- a/app/views/projects/index.html.erb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/views/projects/index.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -8,12 +8,6 @@
<%= ('| ' + link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add')).html_safe if User.current.allowed_to?(:add_project, nil, :global => true) %>
-<% if @user_projects %>
-
- <%= render_my_project_hierarchy(@user_projects) %>
-
-<% end %>
-
<%= l("label_project_all") %>
diff -r ad10dc713462 -r 16826c3afbba app/views/welcome/index.html.erb
--- a/app/views/welcome/index.html.erb Wed Jan 16 16:59:49 2013 +0000
+++ b/app/views/welcome/index.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -23,7 +23,7 @@
<%=l(:label_project_latest)%>
<%= render :partial => 'projects/latest' %>
- <%= link_to l(:label_projects_more), :controller => 'projects' %>
+ <%= link_to l(:label_projects_more), { :controller => 'projects' }, :class => 'more' %>
<%= call_hook(:view_welcome_index_right, :projects => @projects) %>
diff -r ad10dc713462 -r 16826c3afbba config/locales/en.yml
--- a/config/locales/en.yml Wed Jan 16 16:59:49 2013 +0000
+++ b/config/locales/en.yml Wed Jan 23 13:15:33 2013 +0000
@@ -350,7 +350,7 @@
setting_external_repository_url: "The URL of the existing external repository. Must be publicly accessible without a password"
label_repository_external_url: "External repository URL"
field_terms_and_conditions: 'Terms and Conditions:'
- accept_terms_and_conditions: 'I have read and agree with the '
+ accept_terms_and_conditions: 'I have read, and agree to, the '
setting_app_title: Application title
setting_app_subtitle: Application subtitle
setting_welcome_text: Welcome text
@@ -497,8 +497,6 @@
project_module_embedded: Embedded documentation (Javadoc, Doxygen or MATLAB)
label_tipoftheday: Tip of the day
label_notifications: Important Message
- field_terms_and_conditions: 'Terms and Conditions:'
- accept_terms_and_conditions: 'I have read and agree with the '
label_ssamr_description: Research description
label_ssamr_details: Other Details
label_ssamr_institution: Institution
@@ -512,6 +510,7 @@
label_project_plural: Projects
label_my_project_plural: My Projects
label_other_project_plural: Other Projects
+ label_have_no_projects: You are not a member of any projects.
label_x_projects:
zero: no projects
one: 1 project
@@ -525,6 +524,7 @@
label_projects_more: More projects
label_project_tags_all: Popular tags
label_projects_busy: Busy projects
+ label_projects_mature: Mature projects
label_institutions_busy: Active institutions
label_managers: Managed by
label_issue: Issue
diff -r ad10dc713462 -r 16826c3afbba plugins/redmine_bibliography/app/models/publication.rb
--- a/plugins/redmine_bibliography/app/models/publication.rb Wed Jan 16 16:59:49 2013 +0000
+++ b/plugins/redmine_bibliography/app/models/publication.rb Wed Jan 23 13:15:33 2013 +0000
@@ -19,6 +19,25 @@
before_save :set_initial_author_order
+ named_scope :visible, lambda {|*args| { :include => :projects,
+ :conditions => Project.allowed_to_condition(args.shift || User.current, :view_publication, *args) } }
+
+ acts_as_activity_provider :type => 'publication',
+ :timestamp => "#{Publication.table_name}.created_at",
+ :find_options => {
+ :include => :projects,
+ :conditions => "#{Project.table_name}.id = projects_publications.project_id"
+ }
+
+ acts_as_event :title => Proc.new {|o| o.title },
+ :datetime => :created_at,
+ :type => 'publications',
+ :author => nil,
+ #todo - need too move the cache from the helper to the model
+ :description => Proc.new {|o| o.print_entry(:ieee)},
+ :url => Proc.new {|o| {:controller => 'publications', :action => 'show', :id => o.id }}
+
+
# Ensure error message uses proper text instead of
# bibtex_entry.entry_type (#268). There has to be a better way to
# do this!
diff -r ad10dc713462 -r 16826c3afbba plugins/redmine_bibliography/app/views/activities/_recent.html.erb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/redmine_bibliography/app/views/activities/_recent.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -0,0 +1,92 @@
+<% events = @events_by_day %>
+<% max = 5 %>
+<% if (events.nil?)
+ activity = Redmine::Activity::Fetcher.new(User.current, :project => @project)
+
+ if @project
+ # Don't show news (duplicated with News box) or wiki edits (too
+ # tedious) in project front page
+ activity.scope = [ "changesets", "files", "issues", "documents" ]
+ end
+
+ events = activity.events(Date.today - 28, Date.today + 1)
+
+ if defined? user
+ events = events.select { |e|
+
+ if e.class != Publication
+ user.member_of? e.project
+ else
+ e.projects.map {|p| user.member_of? p }.any?
+ end
+ }
+
+ end
+
+ events = events.first(max)
+
+ end
+%>
+
+
+
+<% if @project.nil? %>
+ <%= content_tag('h3', l(:label_activity_my_recent)) %>
+
+<% end %>
+
+<% if events.empty? %>
+
+ <% if @project.nil? %>
+
<%= l(:label_activity_my_recent_none) %>
+ <% end %>
+
+<% else %>
+
+ <% if !@project.nil? %>
+
+ <%= content_tag('h3', l(:label_activity_recent)) %>
+ <% end %>
+
+
+ <% events.sort {|x,y| y.event_datetime <=> x.event_datetime }.each do |e| -%>
+ <%- if e.class != Publication -%>
+ -
+ <%= avatar(e.event_author, :size => "24") if e.respond_to?(:event_author) %>
+ <%= format_time(e.event_datetime) %>
+ <%= content_tag('span', link_to_project(e.project), :class => 'project') if @project.nil? || @project != e.project %>
+ <% if e.respond_to?(:event_author) %>
+ <%= e.event_author %>
+ <% end %>
+
+ - <%= link_to format_activity_title(e.event_title), e.event_url %>
+ <%= format_activity_description(e.event_description) %>
+
+ <% else -%>
+ -
+ <%= format_time(e.event_datetime) %>
+ <%= link_to format_activity_title(e.event_title), e.event_url %>
+ was added to the following
+ <% if e.projects.count > 1 %>
+ projects:
+ <%- else -%>
+ project:
+ <%- end -%>
+ <%= content_tag('span', e.projects.join(', ')) -%> <% if e.respond_to?(:event_author) %>
+ <%= e.event_author %>
+ <% end %>
+
+ - <%= link_to format_activity_title(e.event_title), e.event_url %>
+ <%= format_activity_description(e.event_description) %>
+
+ <% end -%>
+ <% end -%>
+
+
+
+
+<% end %>
+
+<% if events.empty? and @project.nil? %>
<% end %>
+
+
diff -r ad10dc713462 -r 16826c3afbba plugins/redmine_bibliography/app/views/activities/index.html.erb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/redmine_bibliography/app/views/activities/index.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -0,0 +1,91 @@
+<%=
+ if @author.nil?
+ if @institution_name.blank?
+ l(:label_activity)
+ else
+ l(:label_institution_activity, h(@institution_name))
+ end
+ else
+ l(:label_user_activity, link_to_user(@author))
+ end
+ %>
+<%= l(:label_date_from_to, :start => format_date(@date_to - @days), :end => format_date(@date_to-1)) %>
+
+
+<% @events_by_day.keys.sort.reverse.each do |day| %>
+
<%= format_activity_day(day) %>
+
+<% @events_by_day[day].sort {|x,y| y.event_datetime <=> x.event_datetime }.each do |e| -%>
+ <%- if e.class != Publication -%>
+ -
+ <%= avatar(e.event_author, :size => "24") if e.respond_to?(:event_author) %>
+ <%= format_time(e.event_datetime, false) %>
+ <%= content_tag('span', h(e.project), :class => 'project') if @project.nil? || @project != e.project %>
+ <%= link_to format_activity_title(e.event_title), e.event_url %>
+
+ -
+ <%= format_activity_description(e.event_description) %>
+ <%= link_to_user(e.event_author) if e.respond_to?(:event_author) %>
+
+ <%- else -%>
+ -
+ <%= avatar(e.event_author, :size => "24") if e.respond_to?(:event_author) %>
+ <%= format_time(e.event_datetime, false) %>
+ <%= link_to format_activity_title(e.event_title), e.event_url %>
+ was added to the following
+ <% if e.projects.count > 1 %>
+ projects:
+ <%- else -%>
+ project:
+ <%- end -%>
+ <%= content_tag('span', e.projects.join(', ')) -%>
+
+ -
+ <%= e.event_description -%>
+ <%= link_to_user(e.event_author) if e.respond_to?(:event_author) %>
+
+ <% end -%>
+<%- end -%>
+
+<% end -%>
+
+
+<%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
+
+
+<%= link_to_content_update("\xc2\xab " + l(:label_previous),
+ params.merge(:from => @date_to - @days - 1),
+ :title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))) %>
+
+
+<%= link_to_content_update(l(:label_next) + " \xc2\xbb",
+ params.merge(:from => @date_to + @days - 1),
+ :title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))) unless @date_to >= Date.today %>
+
+
+<% other_formats_links do |f| %>
+ <%= f.link_to 'Atom', :url => params.merge(:from => nil, :key => User.current.rss_key) %>
+<% end %>
+
+<% content_for :header_tags do %>
+<%= auto_discovery_link_tag(:atom, params.merge(:format => 'atom', :from => nil, :key => User.current.rss_key)) %>
+<% end %>
+
+<% content_for :sidebar do %>
+<% form_tag({}, :method => :get) do %>
+<%= l(:label_activity) %>
+<% @activity.event_types.each do |t| %>
+<%= check_box_tag "show_#{t}", 1, @activity.scope.include?(t) %>
+
+
+<% end %>
+<% if @project && @project.descendants.active.any? %>
+ <%= hidden_field_tag 'with_subprojects', 0 %>
+
+<% end %>
+<%= hidden_field_tag('user_id', params[:user_id]) unless params[:user_id].blank? %>
+<%= submit_tag l(:button_apply), :class => 'button-small', :name => nil %>
+<% end %>
+<% end %>
+
+<% html_title(l(:label_activity), @author) -%>
diff -r ad10dc713462 -r 16826c3afbba plugins/redmine_bibliography/init.rb
--- a/plugins/redmine_bibliography/init.rb Wed Jan 16 16:59:49 2013 +0000
+++ b/plugins/redmine_bibliography/init.rb Wed Jan 23 13:15:33 2013 +0000
@@ -39,15 +39,22 @@
settings :default => { 'menu' => 'Publications' }, :partial => 'settings/bibliography'
project_module :redmine_bibliography do
+ permission :view_publication, {:publications => :show}, :public => :true
permission :publications, { :publications => :index }, :public => true
permission :edit_publication, {:publications => [:edit, :update]}
permission :add_publication, {:publications => [:new, :create]}
permission :delete_publication, {:publications => :destroy}
+
end
# extending the Project Menu
menu :project_menu, :publications, { :controller => 'publications', :action => 'index', :path => nil }, :after => :activity, :param => :project_id, :caption => Proc.new { Setting.plugin_redmine_bibliography['menu'] },
:if => Proc.new { !Setting.plugin_redmine_bibliography['menu'].blank? }
+ activity_provider :publication, :class_name => 'Publication', :default => true
+
end
+
+
+
diff -r ad10dc713462 -r 16826c3afbba plugins/redmine_tags/app/views/projects/_my.html.erb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/redmine_tags/app/views/projects/_my.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -0,0 +1,1 @@
+<%= render_my_project_hierarchy_with_tags(@user_projects) %>
diff -r ad10dc713462 -r 16826c3afbba plugins/redmine_tags/app/views/projects/_tagcloud.html.erb
--- a/plugins/redmine_tags/app/views/projects/_tagcloud.html.erb Wed Jan 16 16:59:49 2013 +0000
+++ b/plugins/redmine_tags/app/views/projects/_tagcloud.html.erb Wed Jan 23 13:15:33 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) %>
diff -r ad10dc713462 -r 16826c3afbba plugins/redmine_tags/app/views/projects/index.html.erb
--- a/plugins/redmine_tags/app/views/projects/index.html.erb Wed Jan 16 16:59:49 2013 +0000
+++ b/plugins/redmine_tags/app/views/projects/index.html.erb Wed Jan 23 13:15:33 2013 +0000
@@ -13,7 +13,9 @@
<% if User.current.logged? %>
- <%= render :partial => 'my_projects' %>
+
+
Looking for a list of your own projects?
It's moved to <%= link_to l(:label_my_page), { :controller => 'my', :action => 'page' } %>.
+
<% end %>
diff -r ad10dc713462 -r 16826c3afbba plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb
--- a/plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb Wed Jan 16 16:59:49 2013 +0000
+++ b/plugins/redmine_tags/lib/redmine_tags/patches/projects_controller_patch.rb Wed Jan 23 13:15:33 2013 +0000
@@ -91,12 +91,6 @@
# todo: check ordering ~luisf.14/Jan/2013
@projects = @projects[@offset, @limit]
- if User.current.logged?
- # seems sort_by gives us case-sensitive ordering, which we don't want
- # @user_projects = User.current.projects.sort_by(&:name)
- @user_projects = User.current.projects.all(:order => :name)
- end
-
render :template => 'projects/index.html.erb', :layout => !request.xhr?
}
format.api {
diff -r ad10dc713462 -r 16826c3afbba public/stylesheets/application.css
--- a/public/stylesheets/application.css Wed Jan 16 16:59:49 2013 +0000
+++ b/public/stylesheets/application.css Wed Jan 23 13:15:33 2013 +0000
@@ -374,7 +374,7 @@
div#activity dd, div#news dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
div#activity dt, div#news dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
div#activity dt.me .time, div#news dt.me .time { border-bottom: 1px solid #999; }
-div#activity dt .time, div#news dt .time, .projects .latest .time { color: #777; font-size: 80%; }
+div#activity dt .time, div#news dt .time, .projects .latest .time, .projects .busy .managers { color: #777; font-size: 80%; }
div#activity dd .description, #search-results dd .description { font-style: italic; }
div#activity span.project:after, div#news span.project:after, #search-results span.project:after { content: " -"; }
div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
@@ -405,7 +405,7 @@
margin-left: 0;
}
-.projects .latest .title { margin-right: 0.5em; }
+.projects .latest .title, .projects .busy .title { margin-right: 0.5em; }
.tipoftheday .tip { margin-left: 2em; margin-top: 0.5em; }
#search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
@@ -457,18 +457,18 @@
ul.projects { margin: 0; padding-left: 1em; }
ul.projects.root { margin: 0; padding: 0; }
-ul.projects ul.projects { border-left: 3px solid #e0e0e0; }
+/*ul.projects ul.projects { border-left: 3px solid #e0e0e0; } */
ul.projects li.root { list-style-type:none; margin-bottom: 1em; }
-ul.projects li.child { list-style-type:none; margin-top: 1em;}
-ul.projects div.root a.project { font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
+ul.projects li.child { list-style-type:none; }
+ul.projects div.root a.project { font-weight: bold; }
+li.latest, li.busy { margin-bottom: 0.5em; }
#projects-index ul.projects ul.projects { border-left: 3px solid #e0e0e0; padding-left:1em;}
#projects-index ul.projects li.root {margin-bottom: 1em;}
#projects-index ul.projects li.child {margin-top: 1em;}
#projects-index ul.projects div.root a.project { font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
/* .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; } */
-li.latest { margin-bottom: 0.5em; }
#notified-projects ul, #tracker_project_ids ul {max-height:250px; overflow-y:auto;}
diff -r ad10dc713462 -r 16826c3afbba public/themes/soundsoftware/stylesheets/application.css
--- a/public/themes/soundsoftware/stylesheets/application.css Wed Jan 16 16:59:49 2013 +0000
+++ b/public/themes/soundsoftware/stylesheets/application.css Wed Jan 23 13:15:33 2013 +0000
@@ -86,6 +86,8 @@
.odd {background-color:#fdf7e4;}
.even {background-color: #fdfaf0;}
+.box .more { margin-left: 40px; }
+
#content .tabs { margin-bottom: 0; }
table.list th { background-color: #fdfaf0; border-bottom: 1px solid #a9b680; }
@@ -105,7 +107,7 @@
table.projects .level2 .firstcol { padding-left: 2em; }
table.projects .level3 .firstcol { padding-left: 3em; }
-ul.projects .public, ul.projects .private { padding-left: 0.5em; color: #3e442c; font-size: 0.95em }
+ul.projects .public, ul.projects .private { padding-left: 0.5em; color: #3e442c; font-size: 0.9em }
table.files tr.active td { padding-top: 0.5em; padding-bottom: 0.5em; }
table.files .file .active { font-weight: bold; }
@@ -117,6 +119,7 @@
#header { position: absolute; z-index: 0; top: 0; width: 100%; background: #fdfbf5; border-bottom: 2px solid #a9b680; /* height:80px; */ padding: 20px 0 0.5em 0; margin-bottom: 0; }
#header a { color: #be5700; }
#header h1 { color: #525a38; margin-top: 25px; font-size: 3em; font-weight: normal; margin-left: 10px; }
+#header h1#project-title.long-title { font-size: 2em; line-height: 0.95em }
#header #project-title a, #header #project-title a:hover { color: #525a38; text-decoration: none; }
.header-general h1 {
background: url('soundsoftware-logo-code-title-only-transparent.png') no-repeat 0 0;