2013-08-01 10:33:49 +08:00
# encoding: utf-8
#
# Redmine - project management software
# Copyright (C) 2006-2013 Jean-Philippe Lang
#
# 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.
#
# 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.
#
# 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.
2013-10-02 21:47:18 +08:00
include AvatarHelper
2013-08-01 10:33:49 +08:00
module ProjectsHelper
def link_to_version ( version , options = { } )
return '' unless version && version . is_a? ( Version )
link_to_if version . visible? , format_version_name ( version ) , { :controller = > 'versions' , :action = > 'show' , :id = > version } , options
end
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 } ,
2013-09-04 22:19:59 +08:00
# {:name => 'wiki', :action => :manage_wiki, :partial => 'projects/settings/wiki', :label => :label_wiki},
2013-08-01 10:33:49 +08:00
{ :name = > 'repositories' , :action = > :manage_repository , :partial = > 'projects/settings/repositories' , :label = > :label_repository_plural } ,
2014-05-13 15:11:37 +08:00
#{:name => 'boards', :action => :manage_boards, :partial => 'projects/settings/boards', :label => :label_board_plural},
2013-08-01 10:33:49 +08:00
{ :name = > 'activities' , :action = > :manage_project_activities , :partial = > 'projects/settings/activities' , :label = > :enumeration_activities }
]
tabs . select { | tab | User . current . allowed_to? ( tab [ :action ] , @project ) }
2013-08-30 09:34:21 +08:00
2013-08-01 10:33:49 +08:00
end
2013-09-02 12:49:17 +08:00
2013-09-29 19:46:59 +08:00
# added bu huang
def sort_project_enterprise ( state , project_type )
2013-09-02 12:49:17 +08:00
content = '' . html_safe
case state
when 0
2013-09-06 09:25:02 +08:00
2013-09-29 19:46:59 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , projects_path ( :project_sort_type = > '1' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , projects_path ( :project_sort_type = > '2' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , projects_path ( :project_sort_type = > '0' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
2013-09-02 12:49:17 +08:00
when 1
2013-09-06 09:25:02 +08:00
2013-09-29 19:46:59 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , projects_path ( :project_sort_type = > '1' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , projects_path ( :project_sort_type = > '2' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , projects_path ( :project_sort_type = > '0' , :project_type = > project_type ) ) )
2013-09-06 09:25:02 +08:00
when 2
2013-09-29 19:46:59 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , projects_path ( :project_sort_type = > '1' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , projects_path ( :project_sort_type = > '2' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , projects_path ( :project_sort_type = > '0' , :project_type = > project_type ) ) )
end
content = content_tag ( 'ul' , content )
content_tag ( 'div' , content , :class = > " tabs_enterprise " )
end
2014-05-13 10:30:15 +08:00
def sort_course ( state , project_type , school_id )
2013-09-29 19:46:59 +08:00
content = '' . html_safe
case state
when 0
2014-05-13 10:30:15 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , course_path ( :project_sort_type = > '0' , :project_type = > project_type ) , :school_id = > school_id , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , course_path ( :project_sort_type = > '1' , :project_type = > project_type , :school_id = > school_id ) ) )
2013-11-09 08:26:23 +08:00
# content << content_tag('li', link_to(l(:label_sort_by_influence), course_path(:project_sort_type => '2', :project_type => project_type)))
2014-05-13 10:30:15 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_activity ) , course_path ( :project_sort_type = > '3' , :project_type = > project_type , :school_id = > school_id ) ) )
2013-11-06 16:43:07 +08:00
2013-09-29 19:46:59 +08:00
when 1
2014-05-13 10:30:15 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , course_path ( :project_sort_type = > '0' , :project_type = > project_type , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , course_path ( :project_sort_type = > '1' , :project_type = > project_type , :school_id = > school_id ) , :class = > " selected " ) , :class = > " selected " )
2013-11-09 08:26:23 +08:00
# content << content_tag('li', link_to(l(:label_sort_by_influence), course_path(:project_sort_type => '2', :project_type => project_type)))
2014-05-13 10:30:15 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_activity ) , course_path ( :project_sort_type = > '3' , :project_type = > project_type , :school_id = > school_id ) ) )
2013-11-06 16:43:07 +08:00
2013-09-29 19:46:59 +08:00
when 2
2014-05-13 10:30:15 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , course_path ( :project_sort_type = > '0' , :project_type = > project_type , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , course_path ( :project_sort_type = > '1' , :project_type = > project_type , :school_id = > school_id ) ) )
2013-11-09 08:26:23 +08:00
# content << content_tag('li', link_to(l(:label_sort_by_influence), course_path(:project_sort_type => '2', :project_type => project_type), :class=>"selected"), :class=>"selected")
2014-05-13 10:30:15 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_activity ) , course_path ( :project_sort_type = > '3' , :project_type = > project_type , :school_id = > school_id ) ) )
2014-04-24 14:33:15 +08:00
#gcm
when 3
2014-05-13 10:30:15 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , course_path ( :project_sort_type = > '0' , :project_type = > project_type , :school_id = > school_id ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , course_path ( :project_sort_type = > '1' , :project_type = > project_type , :school_id = > school_id ) ) )
2014-04-24 14:33:15 +08:00
# content << content_tag('li', link_to(l(:label_sort_by_influence), course_path(:project_sort_type => '2', :project_type => project_type)))
2014-05-13 10:30:15 +08:00
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_activity ) , course_path ( :project_sort_type = > '3' , :project_type = > project_type , :school_id = > school_id ) , :class = > " selected " ) , :class = > " selected " )
2013-09-29 19:46:59 +08:00
end
2014-04-24 14:33:15 +08:00
#gcmend
2013-09-29 19:46:59 +08:00
content = content_tag ( 'ul' , content )
2013-11-08 15:59:08 +08:00
content_tag ( 'div' , content , :class = > " tabs " )
2013-09-29 19:46:59 +08:00
end
# end
def sort_project ( state , project_type )
content = '' . html_safe
case state
when 0
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , projects_path ( :project_sort_type = > '1' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , projects_path ( :project_sort_type = > '2' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , projects_path ( :project_sort_type = > '0' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
when 1
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , projects_path ( :project_sort_type = > '1' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , projects_path ( :project_sort_type = > '2' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , projects_path ( :project_sort_type = > '0' , :project_type = > project_type ) ) )
when 2
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_active ) , projects_path ( :project_sort_type = > '1' , :project_type = > project_type ) ) )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_influence ) , projects_path ( :project_sort_type = > '2' , :project_type = > project_type ) , :class = > " selected " ) , :class = > " selected " )
content << content_tag ( 'li' , link_to ( l ( :label_sort_by_time ) , projects_path ( :project_sort_type = > '0' , :project_type = > project_type ) ) )
end
content = content_tag ( 'ul' , content )
content_tag ( 'div' , content , :class = > " tabs " )
end
2013-11-06 16:43:07 +08:00
# def sort_course(state, project_type)
# content = ''.html_safe
# case state
# when 0
#
# content << content_tag('li', link_to(l(:label_sort_by_active), course_path(:project_sort_type => '1', :project_type => project_type)))
# content << content_tag('li', link_to(l(:label_sort_by_influence), course_path(:project_sort_type => '2', :project_type => project_type)))
# content << content_tag('li', link_to(l(:label_sort_by_time), course_path(:project_sort_type => '0', :project_type => project_type), :class=>"selected"), :class=>"selected")
# when 1
#
# content << content_tag('li', link_to(l(:label_sort_by_active), course_path(:project_sort_type => '1', :project_type => project_type), :class=>"selected"), :class=>"selected")
# content << content_tag('li', link_to(l(:label_sort_by_influence), course_path(:project_sort_type => '2', :project_type => project_type)))
# content << content_tag('li', link_to(l(:label_sort_by_time), course_path(:project_sort_type => '0', :project_type => project_type)))
# when 2
# content << content_tag('li', link_to(l(:label_sort_by_active), course_path(:project_sort_type => '1', :project_type => project_type)))
# content << content_tag('li', link_to(l(:label_sort_by_influence), course_path(:project_sort_type => '2', :project_type => project_type), :class=>"selected"), :class=>"selected")
# content << content_tag('li', link_to(l(:label_sort_by_time), course_path(:project_sort_type => '0', :project_type => project_type)))
# end
# content = content_tag('ul', content)
# content_tag('div', content, :class => "tabs")
# end
2013-09-02 12:49:17 +08:00
2013-08-30 09:34:21 +08:00
#Added by young
def course_settings_tabs
2013-09-06 16:39:38 +08:00
tabs = [ { :name = > 'info' , :action = > :edit_project , :partial = > 'projects/edit' , :label = > :label_information_plural , :course = > '1' } ,
2014-05-13 15:11:37 +08:00
#{:name => 'boards', :action => :manage_boards, :partial => 'projects/settings/boards', :label => :label_board_plural, :project_type => 1},
2013-09-12 10:41:15 +08:00
# {:name => 'repositories', :action => :manage_repository, :partial => 'projects/settings/repositories', :label => :label_repository_plural},
{ :name = > 'members' , :action = > :manage_members , :partial = > 'projects/settings/members' , :label = > :label_member_plural }
2013-08-30 09:34:21 +08:00
]
tabs . select { | tab | User . current . allowed_to? ( tab [ :action ] , @project ) }
end
#Ended by young
2013-09-12 10:41:15 +08:00
2013-08-01 10:33:49 +08:00
def parent_project_select_tag ( project )
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
options = ''
options << " <option value=''></option> " if project . allowed_parents . include? ( nil )
options << project_tree_options_for_select ( project . allowed_parents . compact , :selected = > selected )
content_tag ( 'select' , options . html_safe , :name = > 'project[parent_id]' , :id = > 'project_parent_id' )
end
# Renders the projects index
def render_project_hierarchy ( projects )
render_project_nested_lists ( projects ) do | project |
2013-08-30 09:34:21 +08:00
#Modified by young
2014-04-25 08:29:20 +08:00
if ( project . try ( :project_type ) == Project :: ProjectType_course )
2014-09-01 14:41:11 +08:00
unless project . is_public == 1
s = " <span class='private_project'> #{ l ( :lable_private ) } </span> " . html_safe
else
s = " " . html_safe
end
s += link_to_project ( project , { } , :class = > " #{ project . css_classes } #{ User . current . member_of? ( project ) ? 'my-project' : nil } " ) . html_safe
2013-09-23 16:42:19 +08:00
else
2014-09-01 14:41:11 +08:00
unless project . is_public
2014-09-02 09:17:42 +08:00
s = " <span class='private_project'> #{ l ( :lable_private ) } </span> " . html_safe
2014-09-01 14:41:11 +08:00
else
s = " " . html_safe
end
s += link_to_project ( project , { } , :class = > " #{ project . css_classes } #{ User . current . member_of? ( project ) ? 'my-project' : nil } " )
2013-09-23 16:42:19 +08:00
end
2013-08-30 09:34:21 +08:00
#Ended by young
2013-08-01 10:33:49 +08:00
if project . description . present?
#Delete by nie.
# s << content_tag('td', textilizable(project.short_description, :project => project), :class => 'wiki description')
end
s
end
end
# 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 |
grouped [ version . project . name ] << [ version . name , version . id ]
end
if grouped . keys . size > 1
grouped_options_for_select ( grouped , selected && selected . id )
else
options_for_select ( ( grouped . values . first || [ ] ) , selected && selected . id )
end
end
def format_version_sharing ( sharing )
sharing = 'none' unless Version :: VERSION_SHARINGS . include? ( sharing )
l ( " label_version_sharing_ #{ sharing } " )
end
2013-09-27 14:58:51 +08:00
# this method is used to get all projects that tagged one tag
2013-08-01 10:33:49 +08:00
# added by william
def get_projects_by_tag ( tag_name )
2013-08-27 11:27:25 +08:00
Project . tagged_with ( tag_name ) . order ( 'updated_on desc' )
2013-08-01 10:33:49 +08:00
end
2013-09-13 21:52:24 +08:00
# added by fq
def homework_type_option
type = [ ]
option1 = [ ]
option2 = [ ]
2013-10-10 17:06:46 +08:00
option1 << l ( :label_task_submit_form_accessory )
2013-09-13 21:52:24 +08:00
option1 << 1
2013-10-10 17:06:46 +08:00
option2 << l ( :label_task_submit_form_project )
2013-09-13 21:52:24 +08:00
option2 << 2
type << option1
type << option2
end
2013-08-01 10:33:49 +08:00
2014-06-05 14:00:18 +08:00
#是否启动互评下拉框
def is_evaluation_option
type = [ ]
option1 = [ ]
option2 = [ ]
option1 << l ( :lable_start_mutual_evaluation )
option1 << 1
option2 << l ( :lable_close_mutual_evaluation )
option2 << 2
type << option1
type << option2
end
2013-09-27 14:58:51 +08:00
# 用来判断用户是否是项目的管理员
# added by william
def is_manager? ( user_id , project_id )
@result = false
@user_id = ProjectInfo . find_by_project_id ( project_id )
if @user_id == user . id
@result = true
end
return @result
end
2013-10-31 20:13:49 +08:00
# 将动态中类型转换为可读的字符串
def eventToLanguage event_type
case event_type
when " issue-note "
l :label_issue
when " issue "
l :label_issue
when " attachment "
l :label_attachment
when " news "
2013-12-18 20:24:01 +08:00
l :label_news
else
" "
end
end
2014-03-07 11:28:52 +08:00
def eventToLanguageCourse event_type , project
2013-12-18 20:24:01 +08:00
case event_type
when " issue-note "
l :label_issue
when " issue "
l :label_issue
when " attachment "
l :label_attachment
when " news "
project . project_type == 1 ? ( l :label_notification ) : ( l :label_news )
2013-10-31 20:13:49 +08:00
else
" "
end
end
2014-03-30 20:28:16 +08:00
def rolesToLanguage rolesArray
rolesArray = ( [ ] << rolesArray ) unless rolesArray . is_a? ( Array )
2014-03-30 17:03:15 +08:00
rolesArray . map { | roleName |
2014-03-31 15:36:51 +08:00
case roleName . to_sym
when :Manager
2014-03-30 17:03:15 +08:00
l :default_role_manager
2014-03-31 15:36:51 +08:00
when :Developer
2014-03-30 17:03:15 +08:00
l :default_role_developer
2014-03-31 15:36:51 +08:00
when :Reporter
2014-03-30 17:03:15 +08:00
l :default_role_reporter
else
'Unkown'
end
}
end
2013-11-22 08:19:40 +08:00
def sort_project_by_hot
return sort_project_by_hot_rails
@projects_status = ProjectStatus . visible . where ( " project_statuses.project_type <> ? or project_statuses.project_type is null " , 1 )
@projects_status = @projects_status . reorder ( 'grade' ) . all . reverse
@projects = [ ]
@projects_status . each do | obj |
break if ( @projects_status [ 10 ] == obj )
@projects << Project . visible . find_by_id ( " #{ obj . project_id } " ) #where('id=:id', id: obj.project_id)
end
@projects
2014-01-13 16:24:13 +08:00
rescue NoMethodError = > e
logger . error " Logger.Error [ProjectsHelper] ===> # sort_project_by_hot, NoMethodError: #{ e } "
2013-11-22 08:19:40 +08:00
[ ]
end
def sort_project_by_hot_rails
# @projects_status = ProjectStatus.visible.where("project_statuses.project_type <> ? or project_statuses.project_type is null", 1)
# @projects_status = @projects_status.reorder('grade').all.reverse
# Project.joins(@projects_status).limit(10)
limit = 10
2013-11-22 14:34:05 +08:00
#Project.find_by_sql("SELECT * FROM projects RIGHT OUTER JOIN (SELECT * FROM project_statuses ORDER BY grade DESC LIMIT #{limit} ) AS t ON projects.id = t.project_id ")
Project . find_by_sql ( "
SELECT p . id , p . name , p . description , p . identifier , t . project_id
FROM projects AS p RIGHT OUTER JOIN (
SELECT project_id , grade FROM project_statuses
WHERE project_type = 0 ORDER BY grade DESC LIMIT #{limit} ) AS t ON p.id = t.project_id ")
2013-11-22 08:19:40 +08:00
end
2014-03-24 10:18:42 +08:00
2013-11-22 08:19:40 +08:00
2014-03-17 22:43:38 +08:00
# 判断课程是否结束,快别用,这个定日子的方法有问题
2014-03-07 11:28:52 +08:00
def course_timeout? project
return true if ( project . nil? && project . course_extra . nil? )
courses_year = project . course_extra . time
current_year = Time . now . year
if ( courses_year > = current_year )
return false
elsif ( ( courses_year < current_year ) && ( Time . now . month < 3 ) )
return false
else
return true
end
2014-01-13 16:24:13 +08:00
end
2014-07-25 11:31:16 +08:00
def find_project_repository project
unless project . repositories . nil?
project . repositories . each do | repository |
repository . fetch_changesets if Setting . autofetch_changesets?
end
end
end
2013-08-01 10:33:49 +08:00
end