diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 0a7f6f5fa..d0f94b119 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -119,8 +119,8 @@ class AccountController < ApplicationController @user = User.new @user.safe_attributes = user_params if params[:identity] == "2" # 2 企业 - #@user.firstname = params[:enterprise_name] - #@user.lastname = l(:field_enterprise) + @user.firstname = params[:enterprise_name] + @user.lastname = l(:field_enterprise) end @user.admin = false @user.register @@ -140,6 +140,15 @@ class AccountController < ApplicationController @user.password, @user.password_confirmation = user_params[:password], user_params[:password_confirmation] end + if(@cache_identityy == "") + flash.now[:error]= l(:label_identity)+l(:'activerecord.errors.messages.empty') + return + end + if(@cache_city == "") + flash.now[:error]= l(:label_location)+l(:'activerecord.errors.messages.empty') + return + end + case Setting.self_registration when '1' register_by_email_activation(@user) diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb index 9b169cb81..91da700a1 100644 --- a/app/controllers/my_controller.rb +++ b/app/controllers/my_controller.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class MyController < ApplicationController + layout "users_base" before_filter :require_login helper :issues diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 447c1425f..1e22bba06 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -880,6 +880,18 @@ class ProjectsController < ApplicationController end end + def exit_project + @project = Project.find params[:id] + if User.current.login? + members = Member.where(:user_id => User.current.id, :project_id=>params[:id]).first + if members != nil + members.destroy + end + respond_to do |format| + format.js + end + end + end private def memberAccess @@ -1026,4 +1038,5 @@ class ProjectsController < ApplicationController end #gcmend + end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cba7784bc..eaa96e82a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -56,6 +56,7 @@ class UsersController < ApplicationController include WordsHelper include GitlabHelper include UserScoreHelper + helper :user_score # added by liuping 关注 diff --git a/app/helpers/user_score_helper.rb b/app/helpers/user_score_helper.rb index 8c00a6b23..dc43de32a 100644 --- a/app/helpers/user_score_helper.rb +++ b/app/helpers/user_score_helper.rb @@ -372,8 +372,8 @@ module UserScoreHelper result.post_issue = 0 result.total_score = 0 result.score_type =type - unless project_id.nil? - result.project_id = project_id + unless project.nil? + result.project_id = project.id end else result = option_number.first @@ -416,12 +416,26 @@ module UserScoreHelper def memo_num(user,project=nil) if project.nil? Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id != -1").all.count #+ Memo.includes(:author).where("parent_id IS NULL and author_id = '#{user.id}'").all.count + + #user.messages.where("parent_id IS NULL").count else Message.includes(:author).joins(:board).where("#{Message.table_name}.parent_id IS NULL and #{Message.table_name}.author_id = '#{user.id}' and #{Board.table_name}.project_id = #{project.id}").all.count end end + def memo_score(user,project=nil) + if project.nil? + User.find_by_sql("SELECT `users`.id,(SELECT COUNT(*) * 2 FROM `messages` JOIN `boards` ON boards.project_id != -1 AND messages.board_id = boards.id +WHERE messages.parent_id IS NULL AND messages.author_id = `users`.id) AS m_count +FROM `users` where id = #{user.id}") + else + User.find_by_sql("SELECT `users`.id,(SELECT COUNT(*) * 2 FROM `messages` JOIN `boards` ON boards.project_id = '#{project.id}' AND messages.board_id = boards.id +WHERE messages.parent_id IS NULL AND messages.author_id = `users`.id) AS m_count +FROM `users` where id = #{user.id}") + end + end + #更新对缺陷留言数 def update_messges_for_issue(user,type,project=nil) option_number = get_option_number(user,type) @@ -437,6 +451,14 @@ module UserScoreHelper end end + def messges_for_issue_score(user,project=nil) + if project.nil? + User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals WHERE journals.user_id = users.id AND journals.notes IS NOT NULL AND journals.notes != '') AS m_score FROM users where id = #{user.id}") + else + User.find_by_sql("SELECT users.id,(SELECT COUNT(*) FROM journals join issues on #{Journal.table_name}.journalized_type = 'Issue' and #{Journal.table_name}.journalized_id = #{Issue.table_name}.id WHERE journals.user_id = users.id AND journals.notes IS NOT NULL AND journals.notes != ''and #{Issue.table_name}.project_id = '#{project.id}') AS m_score FROM users where id = #{user.id}") + end + end + #更新更改缺陷状态状态次数 def update_issues_status(user,type,project=nil) option_number = get_option_number(user,type) @@ -508,8 +530,8 @@ module UserScoreHelper def tread_num(user,project=nil) if project.nil? - result0 = PraiseTread.where("praise_tread_object_type = 'Issue' || praise_tread_object_type = 'Message' and praise_or_tread = 0 and user_id = '#{user.id}'").all.count - pts = PraiseTread.where("praise_tread_object_type = 'Issue' || praise_tread_object_type = 'Message' and praise_or_tread = 0").all + result0 = PraiseTread.where("praise_tread_object_type IN ( 'Issue','Message') and praise_or_tread = 0 and user_id = '#{user.id}'").all.count + pts = PraiseTread.where("praise_tread_object_type IN ( 'Issue','Message') and praise_or_tread = 0").all result = [] result1 = [] result2 = [] @@ -521,18 +543,18 @@ module UserScoreHelper target_user = obj.author level = UserLevels.get_level(pt.user)#pt.user.get_level project = pt.project - if level == 1 && target_user.id = user.id + if level == 1 && target_user.id == user.id result << pt - elsif level == 2 && target_user.id = user.id + elsif level == 2 && target_user.id == user.id result1 << pt - elsif level == 3 && target_user.id = user.id + elsif level == 3 && target_user.id == user.id result2 << pt end end - [:tread=>result0,:tead_by_one => result.count,:tread_by_two => result1.count,:tread_by_three =>result2.count] + {:tread=>result0,:tead_by_one => result.count,:tread_by_two => result1.count,:tread_by_three =>result2.count} else - result0 = PraiseTread.where("praise_tread_object_type = 'Issue' || praise_tread_object_type = 'Message' and praise_or_tread = 0 and user_id = '#{user.id}'").all.count - pts = PraiseTread.where("praise_tread_object_type = 'Issue' || praise_tread_object_type = 'Message' and praise_or_tread = 0").all + result0 = PraiseTread.where("praise_tread_object_type IN ( 'Issue','Message') and praise_or_tread = 0 and user_id = '#{user.id}'").all.count + pts = PraiseTread.where("praise_tread_object_type IN ( 'Issue','Message') and praise_or_tread = 0").all result = [] result1 = [] result2 = [] @@ -547,15 +569,15 @@ module UserScoreHelper target_user = obj.author level = UserLevels.get_level(pt.user)#pt.user.get_level project = pt.project - if level == 1 && target_user.id = user.id + if level == 1 && target_user.id == user.id result << pt - elsif level == 2 && target_user.id = user.id + elsif level == 2 && target_user.id == user.id result1 << pt - elsif level == 3 && target_user.id = user.id + elsif level == 3 && target_user.id == user.id result2 << pt end end - [:tread=>result0,:tead_by_one => result.count,:tread_by_two => result1.count,:tread_by_three =>result2.count] + {:tread=>result0,:tead_by_one => result.count,:tread_by_two => result1.count,:tread_by_three =>result2.count} end end @@ -572,7 +594,7 @@ module UserScoreHelper def praise_num(user,project=nil) if !project.nil? - pts = PraiseTread.where("praise_tread_object_type = 'Issue' || praise_tread_object_type = 'Message' and praise_or_tread = 1").all + pts = PraiseTread.where("praise_tread_object_type IN ( 'Issue','Message') and praise_or_tread = 1").all result = [] result1 = [] result2 = [] @@ -587,17 +609,17 @@ module UserScoreHelper target_user = obj.author level = UserLevels.get_level(pt.user)#pt.user.get_level project = pt.project - if level == 1 && target_user.id = user.id + if level == 1 && target_user.id == user.id result << pt - elsif level == 2 && target_user.id = user.id + elsif level == 2 && target_user.id == user.id result1 << pt - elsif level == 3 && target_user.id = user.id + elsif level == 3 && target_user.id == user.id result2 << pt end end - [:praise_by_one => result.count,:praise_by_two => result1.count,:praise_by_three => result2.count] + {:praise_by_one => result.count,:praise_by_two => result1.count,:praise_by_three => result2.count} else - pts = PraiseTread.where("praise_tread_object_type = 'Issue' || praise_tread_object_type = 'Message' and praise_or_tread = 1").all + pts = PraiseTread.where("praise_tread_object_type IN ( 'Issue','Message') and praise_or_tread = 1").all result = [] result1 = [] result2 = [] @@ -612,15 +634,15 @@ module UserScoreHelper target_user = obj.author level = UserLevels.get_level(pt.user)#pt.user.get_level project = pt.project - if level == 1 && target_user.id = user.id + if level == 1 && target_user.id == user.id result << pt - elsif level == 2 && target_user.id = user.id + elsif level == 2 && target_user.id == user.id result1 << pt - elsif level == 3 && target_user.id = user.id + elsif level == 3 && target_user.id == user.id result2 << pt end end - [:praise_by_one => result.count,:praise_by_two => result1.count,:praise_by_three => result2.count] + {:praise_by_one => result.count,:praise_by_two => result1.count,:praise_by_three => result2.count} end end diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index ea72e8184..be5609d7c 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -246,4 +246,7 @@ module WatchersHelper link_to text, url, :remote => true, :method => method ,:class=>css end - end + def exit_project_link(project) + link_to("退出项目",exit_cur_project_path(project.id),:remote => true ) + end + end diff --git a/app/models/repository.rb b/app/models/repository.rb index 57a818270..260069f94 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -21,8 +21,8 @@ class Repository < ActiveRecord::Base include Redmine::Ciphering include Redmine::SafeAttributes - # Maximum length for repository identifiers - IDENTIFIER_MAX_LENGTH = 255 + # Maximum length for repository ideflashntifiers + IDENTIFIER_MAX_LENGTH = 254 belongs_to :project has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC" @@ -42,7 +42,7 @@ class Repository < ActiveRecord::Base validates_uniqueness_of :identifier, :scope => :project_id, :allow_blank => true validates_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph) # donwcase letters, digits, dashes, underscores but not digits only - validates_format_of :identifier, :with => /^[a-zA-Z0-9_\-]+$/, :allow_blank => true + validates_format_of :identifier, :with => /^[a-z0-9_\-]+$/, :allow_blank => true # Checks if the SCM is enabled when creating a repository validate :repo_create_validation, :on => :create diff --git a/app/views/courses/show.html.erb b/app/views/courses/show.html.erb index deb590d1f..d7d579dd1 100644 --- a/app/views/courses/show.html.erb +++ b/app/views/courses/show.html.erb @@ -1,4 +1,4 @@ -<% if @events_by_day.size >0 %> +<% if @events_by_day != nil && @events_by_day.size >0 %>

diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb index e44578243..b17283f3b 100644 --- a/app/views/issues/_attributes.html.erb +++ b/app/views/issues/_attributes.html.erb @@ -50,15 +50,18 @@ var _v= obj; if(_v==100) { - //alert(3); + //var select=$("select[id='issue_status_id']"); + $("select[id='issue_status_id']").find("option[value='3']").attr("selected","selected"); } else if(_v==0) { - //alert(1); + //alert(1); + $("select[id='issue_status_id']").find("option[value='1']").attr("selected","selected"); } else if(_v!=100&&_v!=0) { // alert(2); + $("select[id='issue_status_id']").find("option[value='2']").attr("selected","selected"); } } diff --git a/app/views/layouts/_base_header.html.erb b/app/views/layouts/_base_header.html.erb index fafc49c0a..3a7a6a8ee 100644 --- a/app/views/layouts/_base_header.html.erb +++ b/app/views/layouts/_base_header.html.erb @@ -27,7 +27,7 @@ #@nav_dispaly_user_label = 1 end %> -

+
@@ -44,8 +44,8 @@ <% if User.current.user_extensions && [UserExtensions::TEACHER, UserExtensions::STUDENT].include?(User.current.user_extensions.identity) -%> <% hasCourse=true%> -
  • <%=link_to l(:label_my_course), {:controller => 'users', :action => 'user_courses', id: User.current.id, host: Setting.course_domain} %> -
      +
    • <%=link_to l(:label_my_course), {:controller => 'users', :action => 'user_courses', id: User.current.id, host: Setting.course_domain} %> +
        <% User.current.courses.each do |course| %> <% if !course_endTime_timeout?(course) %>
      • <%= link_to course.name.truncate(10, omission: '...'), {:controller => 'courses',:action => 'show',id:course.id, host: Setting.course_domain} %>
      • @@ -56,7 +56,7 @@ <% end -%> <% end %> -
      • <%= link_to l(:label_my_projects), {:controller => 'users', :action => 'user_projects', id: User.current.id, host: Setting.project_domain} %> +
      • <%= link_to l(:label_my_projects), {:controller => 'users', :action => 'user_projects', id: User.current.id, host: Setting.project_domain} %> <% if hasCourse %>
          @@ -68,7 +68,7 @@ <% end %>
      • -
      • <%=link_to l(:label_user_edit), {:controller => 'my', :action=> 'account', host: Setting.user_domain}%> +
      • <%=link_to l(:label_user_edit), {:controller => 'my', :action=> 'account', host: Setting.user_domain}%>
    • @@ -76,9 +76,9 @@ <%=link_to l(:label_my_message)+'('+User.current.count_new_jour.to_s+')', { :controller => 'users', :action => 'user_newfeedback', id: User.current.id, host: Setting.user_domain }, {:class => 'my-message'} if User.current.logged?%>
    -
  • +
    <% end -%> - <%#= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%> + <%#= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%> <%= render_dynamic_nav if User.current.logged? || !Setting.login_required? -%> <%# 自建导航条在base页面中以 (@nav_dispaly......) 开头变量设定, 全局搜索即可发现 %>
    diff --git a/app/views/layouts/_join_exit_project.html.erb b/app/views/layouts/_join_exit_project.html.erb new file mode 100644 index 000000000..c43ad55a2 --- /dev/null +++ b/app/views/layouts/_join_exit_project.html.erb @@ -0,0 +1,20 @@ +
    + + <% if ( !(User.current.member_of? @project) && User.current.login?) %> + <%= watcher_link(@project, User.current) %> + <% end %> +
    + +
    + <% if ( !(User.current.member_of? @project) && User.current.login?) %> + + <%= applied_link(@project, User.current) %> + <% end %> +
    + + +
    + <% if ((User.current.member_of? @project) && User.current.login?) %> + <%= exit_project_link(@project) %> + <% end %> +
    \ No newline at end of file diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 004aabc51..eea7a0f61 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -74,20 +74,9 @@ <% end %> -
    - - <% if ( !(User.current.member_of? @project) && User.current.login?) %> - <%= watcher_link(@project, User.current) %> - <% end %> -
    - -
    - <% if ( !(User.current.member_of? @project) && User.current.login?) %> - - <%= applied_link(@project, User.current) %> - <% end %> +
    + <%= render 'layouts/join_exit_project' %>
    - diff --git a/app/views/my/password.html.erb b/app/views/my/password.html.erb index 5e2b1989c..2808a8742 100644 --- a/app/views/my/password.html.erb +++ b/app/views/my/password.html.erb @@ -13,7 +13,7 @@

    <%= password_field_tag 'new_password_confirmation', nil, :size => 25 %>

    -<%= submit_tag l(:button_apply) %> +<%= submit_tag l(:label_button_ok) %>
    <% end %> diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb index 7c84bf84b..512c2df82 100644 --- a/app/views/projects/_form.html.erb +++ b/app/views/projects/_form.html.erb @@ -9,8 +9,8 @@ <%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %>

    -

    <%= f.text_field :identifier, :required => true, :size => 60, :style => "width:488px;", :disabled => @project.identifier_frozen?, :maxlength => Project::IDENTIFIER_MAX_LENGTH, - value:"#{User.current.id.to_s + '_' +format_time(Time.now).to_s}" %> +

    <%= f.text_field :identifier, :required => true, :size => 60, :style => "width:488px;", :disabled => @project.identifier_frozen?, :maxlength => Project::IDENTIFIER_MAX_LENGTH, + value:"#{User.current.id.to_s + '_' +Time.now.to_s.gsub(' ','_').gsub(':','').gsub('+','')}" %> <% unless @project.identifier_frozen? %> <%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info).html_safe %> <% end %>

    diff --git a/app/views/projects/exit_project.js.erb b/app/views/projects/exit_project.js.erb new file mode 100644 index 000000000..709f878be --- /dev/null +++ b/app/views/projects/exit_project.js.erb @@ -0,0 +1 @@ +$('#join_exit_project_div').html("<%= escape_javascript(render(:partial => 'layouts/join_exit_project')) %>"); diff --git a/app/views/projects/settings/_repositories.html.erb b/app/views/projects/settings/_repositories.html.erb index 4ad14bf84..f4b505065 100644 --- a/app/views/projects/settings/_repositories.html.erb +++ b/app/views/projects/settings/_repositories.html.erb @@ -1,7 +1,7 @@ <% project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT %> <% ip = RepositoriesHelper::REPO_IP_ADDRESS %> <% if @project.repositories.any? %> - +
    @@ -14,16 +14,16 @@ <% @project.repositories.sort.each do |repository| %> - - + <%if repository.scm_name=="Git"%> - + <%else %> - + <% end %>
    <%= l(:field_identifier) %>
    + <%= link_to repository.identifier, {:controller => 'repositories', :action => 'show',:id => @project, :repository_id => repository.identifier_param} if repository.identifier.present? %> <%= checked_image repository.is_default? %><%=h repository.scm_name %><%=h repository.scm_name %>http://<%= repository.login.to_s %>_<%= repository.identifier.to_s%>@<%= ip %><%=h repository.url.slice(project_path_cut, repository.url.length) %>http://<%= repository.login.to_s %>_<%= repository.identifier.to_s%>@<%= ip %><%=h repository.url.slice(project_path_cut, repository.url.length) %><%=h repository.url %><%=h repository.url %> diff --git a/app/views/repositories/_form.html.erb b/app/views/repositories/_form.html.erb index b9a3a6c83..1fabf47c8 100644 --- a/app/views/repositories/_form.html.erb +++ b/app/views/repositories/_form.html.erb @@ -12,7 +12,7 @@

    <%= f.check_box :is_default, :label => :field_repository_is_default %>

    <%= f.text_field :identifier, :required => true, :disabled => @repository.identifier_frozen?, - value:"#{User.current.id.to_s + '_' +format_time(Time.now).to_s}"%> + value:"#{User.current.id.to_s + '_' +Time.now.to_s.gsub(' ','_').gsub(':','').gsub('+','')}"%> <% unless @repository.identifier_frozen? %> <%= l(:text_length_between, :min => 1, :max => Repository::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_repository_identifier_info).html_safe %> <% end %>

    diff --git a/app/views/users/_user_score.html.erb b/app/views/users/_user_score.html.erb index 53f05a2dd..338d72ada 100644 --- a/app/views/users/_user_score.html.erb +++ b/app/views/users/_user_score.html.erb @@ -1,5 +1,6 @@ <%= l(:label_user_grade)%>: -<%= link_to(format("%.2f" , user.user_score_attr.total_score).to_i, {:controller => 'users', + +<%= link_to(format("%.2f" ,user_scores(user,1).total_score ).to_i, {:controller => 'users', :action => 'show_new_score', :remote => true, :id => user.id diff --git a/app/views/welcome/course.html.erb b/app/views/welcome/course.html.erb index 9d5037107..7cab331b6 100644 --- a/app/views/welcome/course.html.erb +++ b/app/views/welcome/course.html.erb @@ -132,7 +132,7 @@ <% else %> - <% if school_course.count < 9 %> + <% if school_course.count < 10 %> <%= link_to "更多>>", {:controller => 'courses', :action => 'index', :school_id => nil} %> @@ -181,7 +181,7 @@ <%end%> <% end; reset_cycle %> - <% if school_course.count < 9 %> + <% if school_course.count < 10 %>
  • @@ -189,7 +189,7 @@ 该学校开设课程较少,您可以查看其他学校课程

  • - <% find_all_new_hot_course(9 - school_course.count, @school_id).map do |course| %> + <% find_all_new_hot_course(10 - school_course.count, @school_id).map do |course| %>
  • /,"") %>>
    <%= image_tag(get_course_avatar(course), :class => "avatar-4") %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 33e1eda9b..367624f89 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1158,6 +1158,7 @@ en: #huang label_file_new: Download label_user_edit: "Edit information" + label_my_course: "My Course" label_user_info: "User information" #huang 添加 label_user_watcher: "Following" # huang添加的 # modified by bai label_user_fans: "Followed by" # modified by bai @@ -1196,6 +1197,7 @@ en: label_tags_issue_description: issue description label_tags_all_objects: all objects label_apply_project: Apply Project + label_exit_project: Exit Project label_apply_project_waiting: "Application has been submitted, please wait for administrator review." label_unapply_project: Unsubscribe diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 65dc9eef3..9b6329b95 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -315,7 +315,7 @@ zh: field_auth_source: 认证模式 field_hide_mail: 隐藏我的邮件地址 field_comments: 注释 - field_url: URL + field_url: 路径 field_start_page: 起始页 field_subproject: 子项目 field_hours: 小时 @@ -979,7 +979,7 @@ zh: label_change_properties: 修改属性 label_general: 一般 label_more: 更多>> - label_scm: SCM + label_scm: 管理系统 label_plugins: 插件 label_ldap_authentication: LDAP 认证 label_downloads_abbr: D/L @@ -1409,6 +1409,7 @@ zh: label_tags_issue_description: 问题描述 label_tags_all_objects: 所有 label_apply_project: 申请加入 + label_exit_project: 退出项目 label_apply_project_waiting: 已处理申请,请等待管理员审核 label_unapply_project: 取消申请 @@ -1552,6 +1553,7 @@ zh: label_have_respond: 进行了反馈 label_welcome: 欢迎 label_join: 加入Trustie! + label_repository_path: 库路径 label_board_description: 七嘴八舌,汇聚众人智慧,为您排忧解难! label_create_course_description: 课程小社区,创建新课程,让我们共同分享多到想不到的公共资源! label_welcome_page_to: 参与了 %{project_count} 个项目! diff --git a/config/routes.rb b/config/routes.rb index 1e75ac23a..9d9b9d13b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -510,6 +510,7 @@ RedmineApp::Application.routes.draw do get 'projects/:id/repository/:repository_id', :to => 'repositories#show', :path => nil get 'projects/:id/repository', :to => 'repositories#show', :path => nil + get 'projects/:id/exit', :to => 'projects#exit_project', :as => 'exit_cur_project' # additional routes for having the file name at the end of url get 'attachments/:id/:filename', :to => 'attachments#show', :id => /\d+/, :filename => /.*/, :as => 'named_attachment'