Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
0.0.4 (2010-06-23):
* Sync with Redmine 0.9.4
* Added plugin functionality to admin/projects page
* Fix problem with projects without active children
* Deleted unuseful plugin-skeleton files
* added js exapnd all button
* Fixed missing spent time link
0.0.3 (2009-08-02):
* Improved documentation and licensing
* Updated the core-overriding views (required compatibility-helpers, see below)
Expand Down
14 changes: 8 additions & 6 deletions README.rdoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,31 @@
Projects Tree View is a Redmine plugin which will turn the projects index view into a tree view. It also
propagates the tree view to the project show page's subprojects list.

==Author
==Author(s)

* Chris Peterson
* cforce (edits)
* Steven Verbeek (edits)
* Chris Peterson (original)

==Changelog

For the complete changelog see the <tt>CHANGELOG</tt>-file in the Projects Tree View plugin directory.

==Latest stable release

The currently available, latest stable release of the plugin is version <b>0.0.3</b>.
The currently available, latest stable release of the plugin is version <b>0.0.4</b>.

==Compatibility

This plugin is compatible with Redmine trunk only!
This plugin is compatible with Redmine 0.9.4-1.2.1

==Obtaining

<i>URL of the GitHub repository: http://github.com/MischaTheEvil/projects_tree_view/tree/master</i>
<i>URL of the GitHub repository: http://github.com/dubcanada/projects_tree_view/master</i>

The source of this plugin can be "cloned" from the GitHub-repo using:

<tt>$ cd {RAILS_ROOT}/vendor/plugins && git clone git://github.com/MischaTheEvil/projects_tree_view.git</tt>
<tt>$ cd {RAILS_ROOT}/vendor/plugins && git://github.com/dubcanada/projects_tree_view.git</tt>

==Installation

Expand Down
92 changes: 92 additions & 0 deletions app/views/admin/projects.rhtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<div class="contextual">
<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
</div>

<h2><%=l(:label_project_plural)%></h2>

<% form_tag({}, :method => :get) do %>
<fieldset><legend><%= l(:label_filter_plural) %></legend>
<label><%= l(:field_status) %> :</label>
<%= select_tag 'status', project_status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
<label><%= l(:label_project) %>:</label>
<%= text_field_tag 'name', params[:name], :size => 30 %>
<%= submit_tag l(:button_apply), :class => "small", :name => nil %>
</fieldset>
<% end %>
&nbsp;

<div class="autoscroll">
<table class="list">
<thead><tr>
<th><%=l(:label_project)%></th>
<th><%=l(:field_description)%></th>
<th><%=l(:field_is_public)%></th>
<th><%=l(:field_created_on)%></th>
<th></th>
</tr></thead>
<tbody>
<% ancestors = [] %>
<% for project in @projects %>
<% rowid = "" %>
<% classes = "" %>
<% spanicon = "" %>
<% openonclick = "" %>
<% showchildren = false %>
<% project.children.each do |child| %>
<% if @projects.include?(child) %>
<% showchildren = true %>
<% break %>
<% end %>
<% end %>
<% if(!project.children.empty? && showchildren) %>
<% classes += " closed parent " + cycle("odd", "even") %>
<% rowid = "id=\""+project.id.to_s+"span\"" %>
<% openonclick = "onclick=\"showHide('"+project.id.to_s+"','"+project.id.to_s+"span')\""%>
<% spanicon = "<span " + openonclick + " class=\"expander\">&nbsp </span>" %>
<% else %>
<% classes += " child" %>
<% end %>
<% if(project.parent_id == nil) %>
<% ancestors.clear %>
<% ancestors << project.id %>
<% else %>
<% while (ancestors.any? && !(project.parent_id == ancestors.last)) %>
<% ancestors.pop %>
<% end %>
<% classes += " hide" %>
<% if( !(ancestors.detect {|pid| pid == project.parent_id })) %>
<% prvclasses = "closed show parent " + cycle("odd", "even") %>
<% ancestors.each do |pid| %>
<% prvclasses += " " + pid.to_s %>
<% end %>
<% openonclick = "onclick=\"showHide('"+project.parent_id.to_s+"','"+project.parent_id.to_s+"span')\"" %>
<tr class="<%= prvclasses %>" id="<%= project.parent_id.to_s + "span" %>" >
<td class="name" ><%= "<span style=\"padding-left: " + (2*(ancestors.length-1)).to_s + "em;\"></span>" %><%="<span " + openonclick + " class=\"expander\" >&nbsp </span>" %><%= h("<Private Project>") %><span <%= openonclick %> class="empty">&nbsp</span></td>
<td <%= openonclick %> >Project is private. </td>
</span>
</tr>
<% ancestors << project.parent_id %>
<% end %>
<% ancestors.each do |pid| %>
<% classes += " " + pid.to_s %>
<% end %>
<% ancestors << project.id %>
<% end %>
<tr class="<%= classes %>" <%= rowid %> >
<td class="name"><%= "<span style=\"padding-left: " + (2*(ancestors.length-1)).to_s + "em;\"></span>" %><%= spanicon %><%= project.active? ? link_to(h(project.name), {:controller => 'projects', :action => 'show', :id => project}, :class => "project") : h(project.name) %></td>
<td <%= openonclick %> ><%= textilizable project.short_description, :project => project %></td>
<td align="center"><%= image_tag 'true.png' if project.is_public? %></td>
<td align="center"><%= format_date(project.created_on) %></td>
<td class="buttons">
<%= link_to(l(:button_archive), { :controller => 'projects', :action => 'archive', :id => project, :status => params[:status] }, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-lock') if project.active? %>
<%= link_to(l(:button_unarchive), { :controller => 'projects', :action => 'unarchive', :id => project, :status => params[:status] }, :method => :post, :class => 'icon icon-unlock') if !project.active? && (project.parent.nil? || project.parent.active?) %>
<%= link_to(l(:button_copy), { :controller => 'projects', :action => 'copy', :id => project }, :class => 'icon icon-copy') %>
<%= link_to(l(:button_delete), project_destroy_confirm_path(project), :class => 'icon icon-del') %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>

<% html_title(l(:label_project_plural)) -%>
172 changes: 93 additions & 79 deletions app/views/projects/index.rhtml
Original file line number Diff line number Diff line change
@@ -1,79 +1,93 @@
<div class="contextual">
<% if authorize_global_implemented %>
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
<% else %>
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'icon icon-add') + ' |' if User.current.admin? %>
<% end %>
<%= link_to l(:label_issue_view_all), { :controller => 'issues' } %> |
<%= link_to l(:label_overall_activity), { :controller => 'projects', :action => 'activity' }%>
</div>

<h2><%=l(:label_project_plural)%></h2>

<table class="list">
<thead>
<tr>
<th><%=l(:label_project)%></th>
<th><%=l(:field_description)%></th>
</tr>
</thead>
<tbody>
<% ancestors = [] %>
<% for project in @projects %>
<% rowid = "" %>
<% classes = "" %>
<% spanicon = "" %>
<% openonclick = "" %>
<% if(!project.children.empty?) %>
<% classes += " closed parent " + cycle("odd", "even") %>
<% rowid = "id=\""+project.id.to_s+"span\"" %>
<% openonclick = "onclick=\"showHide('"+project.id.to_s+"','"+project.id.to_s+"span')\""%>
<% spanicon = "<span " + openonclick + " class=\"expander\">&nbsp </span>" %>
<% else %>
<% classes += " child" %>
<% end %>
<% if(project.parent_id == nil) %>
<% ancestors.clear %>
<% ancestors << project.id %>
<% else %>
<% while (ancestors.any? && !(project.parent_id == ancestors.last)) %>
<% ancestors.pop %>
<% end %>
<% classes += " hide" %>
<% if( !(ancestors.detect {|pid| pid == project.parent_id })) %>
<% prvclasses = "closed show parent " + cycle("odd", "even") %>
<% ancestors.each do |pid| %>
<% prvclasses += " " + pid.to_s %>
<% end %>
<% openonclick = "onclick=\"showHide('"+project.parent_id.to_s+"','"+project.parent_id.to_s+"span')\"" %>
<tr class="<%= prvclasses %>" id="<%= project.parent_id.to_s + "span" %>" >
<td class="name" ><%= "<span style=\"padding-left: " + (2*(ancestors.length-1)).to_s + "em;\"></span>" %><%="<span " + openonclick + " class=\"expander\" >&nbsp </span>" %><%= h("<Private Project>") %><span <%= openonclick %> class="empty">&nbsp</span></td>
<td <%= openonclick %> >Project is private. </td>
</span>
</tr>
<% ancestors << project.parent_id %>
<% end %>
<% ancestors.each do |pid| %>
<% classes += " " + pid.to_s %>
<% end %>
<% ancestors << project.id %>
<% end %>
<tr class="<%= classes %>" <%= rowid %> >
<td class="name"><%= "<span style=\"padding-left: " + (2*(ancestors.length-1)).to_s + "em;\"></span>" %><%= spanicon %><%= project.active? ? link_to(h(project.name), {:controller => 'projects', :action => 'show', :id => project}, :class => "project") : h(project.name) %><span <%= openonclick %> class="empty <%=User.current.member_of?(project) ? 'my-project' : nil%>">&nbsp</span></td>
<td <%= openonclick %> ><%= textilizable project.short_description.gsub(/\!.+\!/,""), :project => project %></td>
</tr>
<% end %>
</tbody>
</table>

<% if User.current.logged? %>
<p style="text-align:right;">
<span class="my-project"><%= l(:label_my_projects) %></span>
</p>
<% end %>

<% other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
<% end %>

<% html_title(l(:label_project_plural)) -%>
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:action => 'index', :format => 'atom', :key => User.current.rss_key}) %>
<% end %>
<div class="contextual">
<% if authorize_global_implemented %>
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
<% else %>
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') + ' |' if User.current.admin? %>
<% end %>
<%= link_to(l(:label_issue_view_all), { :controller => 'issues' }) + ' |' if User.current.allowed_to?(:view_issues, nil, :global => true) %>
<%= link_to(l(:label_overall_spent_time), { :controller => 'time_entries' }) + ' |' if User.current.allowed_to?(:view_time_entries, nil, :global => true) %>
<%= link_to l(:label_overall_activity), { :controller => 'activities', :action => 'index' }%>
</div>

<h2><%=l(:label_project_plural)%></h2>

<table class="list">
<thead>
<tr>
<th><%=l(:label_project)%></th>
<th><%=l(:field_description)%></th>
</tr>
</thead>
<tbody>
<% ancestors = [] %>
<% for project in @projects %>
<% rowid = "" %>
<% classes = "" %>
<% spanicon = "" %>
<% openonclick = "" %>
<% showchildren = false %>
<% project.children.each do |child| %>
<% if @projects.include?(child) %>
<% showchildren = true %>
<% break %>
<% end %>
<% end %>
<% if(!project.children.empty? && showchildren) %>
<% classes += " closed parent " + cycle("odd", "even") %>
<% rowid = "id=\""+project.id.to_s+"span\"" %>
<% openonclick = "onclick=\"showHide('"+project.id.to_s+"','"+project.id.to_s+"span')\""%>
<% spanicon = "<span " + openonclick + " class=\"expander\">&nbsp </span>" %>
<% else %>
<% classes += " child" %>
<% end %>
<% if(project.parent_id == nil) %>
<% ancestors.clear %>
<% ancestors << project.id %>
<% else %>
<% while (ancestors.any? && !(project.parent_id == ancestors.last)) %>
<% ancestors.pop %>
<% end %>
<% classes += " hide" %>
<% if( !(ancestors.detect {|pid| pid == project.parent_id })) %>
<% prvclasses = "closed show parent " + cycle("odd", "even") %>
<% ancestors.each do |pid| %>
<% prvclasses += " " + pid.to_s %>
<% end %>
<% openonclick = "onclick=\"showHide('"+project.parent_id.to_s+"','"+project.parent_id.to_s+"span')\"" %>
<tr class="<%= prvclasses %>" id="<%= project.parent_id.to_s + "span" %>" >
<td class="name" ><%= "<span style=\"padding-left: " + (2*(ancestors.length-1)).to_s + "em;\"></span>" %><%="<span " + openonclick + " class=\"expander\" >&nbsp </span>" %><%= h("<Private Project>") %><span <%= openonclick %> class="empty">&nbsp</span></td>
<td <%= openonclick %> >Project is private. </td>
</span>
</tr>
<% ancestors << project.parent_id %>
<% end %>
<% ancestors.each do |pid| %>
<% classes += " " + pid.to_s %>
<% end %>
<% ancestors << project.id %>
<% end %>
<tr class="<%= classes %>" <%= rowid %> >
<td class="name"><%= "<span style=\"padding-left: " + (2*(ancestors.length-1)).to_s + "em;\"></span>" %><%= spanicon %><%= project.active? ? link_to(h(project.name), {:controller => 'projects', :action => 'show', :id => project}, :class => "project") : h(project.name) %><span <%= openonclick %> class="empty <%=User.current.member_of?(project) ? 'my-project' : nil%>">&nbsp</span></td>
<td <%= openonclick %> ><%= textilizable project.short_description.gsub(/\!.+\!/,""), :project => project %></td>
</tr>
<% end %>
</tbody>
</table>

<a href="#" id="expand_all">Expand All</a>


<% if User.current.logged? %>
<p style="text-align:right;">
<span class="my-project"><%= l(:label_my_projects) %></span>
</p>
<% end %>

<% other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
<% end %>

<% html_title(l(:label_project_plural)) -%>
Loading