projects_helper.rb
106 lines
| 5.0 KiB
| text/x-ruby
|
RubyLexer
|
r8090 | # encoding: utf-8 | ||
# | ||||
|
r5729 | # Redmine - project management software | ||
|
r9453 | # Copyright (C) 2006-2012 Jean-Philippe Lang | ||
|
r330 | # | ||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; either version 2 | ||||
# of the License, or (at your option) any later version. | ||||
|
r5729 | # | ||
|
r330 | # This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
|
r5729 | # | ||
|
r330 | # You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
module ProjectsHelper | ||||
|
r513 | def link_to_version(version, options = {}) | ||
return '' unless version && version.is_a?(Version) | ||||
|
r3009 | link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, options | ||
|
r513 | end | ||
|
r5729 | |||
|
r714 | def project_settings_tabs | ||
tabs = [{:name => 'info', :action => :edit_project, :partial => 'projects/edit', :label => :label_information_plural}, | ||||
{:name => 'modules', :action => :select_project_modules, :partial => 'projects/settings/modules', :label => :label_module_plural}, | ||||
{:name => 'members', :action => :manage_members, :partial => 'projects/settings/members', :label => :label_member_plural}, | ||||
{:name => 'versions', :action => :manage_versions, :partial => 'projects/settings/versions', :label => :label_version_plural}, | ||||
{:name => 'categories', :action => :manage_categories, :partial => 'projects/settings/issue_categories', :label => :label_issue_category_plural}, | ||||
{:name => 'wiki', :action => :manage_wiki, :partial => 'projects/settings/wiki', :label => :label_wiki}, | ||||
|
r8535 | {:name => 'repositories', :action => :manage_repository, :partial => 'projects/settings/repositories', :label => :label_repository_plural}, | ||
|
r2835 | {:name => 'boards', :action => :manage_boards, :partial => 'projects/settings/boards', :label => :label_board_plural}, | ||
{:name => 'activities', :action => :manage_project_activities, :partial => 'projects/settings/activities', :label => :enumeration_activities} | ||||
|
r714 | ] | ||
|
r5729 | tabs.select {|tab| User.current.allowed_to?(tab[:action], @project)} | ||
|
r714 | end | ||
|
r5729 | |||
|
r2302 | def parent_project_select_tag(project) | ||
|
r3124 | selected = project.parent | ||
# retrieve the requested parent project | ||||
parent_id = (params[:project] && params[:project][:parent_id]) || params[:parent_id] | ||||
if parent_id | ||||
selected = (parent_id.blank? ? nil : Project.find(parent_id)) | ||||
end | ||||
|
r5729 | |||
|
r3124 | options = '' | ||
options << "<option value=''></option>" if project.allowed_parents.include?(nil) | ||||
options << project_tree_options_for_select(project.allowed_parents.compact, :selected => selected) | ||||
|
r6372 | content_tag('select', options.html_safe, :name => 'project[parent_id]', :id => 'project_parent_id') | ||
|
r2302 | end | ||
|
r5729 | |||
|
r2302 | # Renders a tree of projects as a nested set of unordered lists | ||
# The given collection may be a subset of the whole project tree | ||||
# (eg. some intermediate nodes are private and can not be seen) | ||||
def render_project_hierarchy(projects) | ||||
s = '' | ||||
if projects.any? | ||||
ancestors = [] | ||||
|
r3710 | original_project = @project | ||
|
r2302 | projects.each do |project| | ||
|
r3710 | # set the project environment to please macros. | ||
@project = project | ||||
|
r2302 | if (ancestors.empty? || project.is_descendant_of?(ancestors.last)) | ||
s << "<ul class='projects #{ ancestors.empty? ? 'root' : nil}'>\n" | ||||
else | ||||
ancestors.pop | ||||
s << "</li>" | ||||
|
r5729 | while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) | ||
|
r2302 | ancestors.pop | ||
s << "</ul></li>\n" | ||||
end | ||||
end | ||||
classes = (ancestors.empty? ? 'root' : 'child') | ||||
s << "<li class='#{classes}'><div class='#{classes}'>" + | ||||
|
r9702 | link_to_project(project, {}, :class => "#{project.css_classes} #{User.current.member_of?(project) ? 'my-project' : nil}") | ||
|
r2302 | s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank? | ||
s << "</div>\n" | ||||
ancestors << project | ||||
end | ||||
s << ("</li></ul>\n" * ancestors.size) | ||||
|
r3710 | @project = original_project | ||
|
r2302 | end | ||
|
r6373 | s.html_safe | ||
|
r2302 | end | ||
|
r3009 | |||
# Returns a set of options for a select field, grouped by project. | ||||
def version_options_for_select(versions, selected=nil) | ||||
grouped = Hash.new {|h,k| h[k] = []} | ||||
versions.each do |version| | ||||
|
r3116 | grouped[version.project.name] << [version.name, version.id] | ||
|
r3009 | end | ||
|
r5729 | |||
|
r3009 | if grouped.keys.size > 1 | ||
grouped_options_for_select(grouped, selected && selected.id) | ||||
else | ||||
|
r3026 | options_for_select((grouped.values.first || []), selected && selected.id) | ||
|
r3009 | end | ||
end | ||||
def format_version_sharing(sharing) | ||||
sharing = 'none' unless Version::VERSION_SHARINGS.include?(sharing) | ||||
l("label_version_sharing_#{sharing}") | ||||
end | ||||
|
r2 | end | ||