From 24cdea1f347fbd06e5a704e6479684877d51ca7c Mon Sep 17 00:00:00 2001
From: z9hang
- <%= f.text_field :login, :size => 25, :required => true %>
- <%= l(:label_max_number) %>
- <%= f.password_field :password, :size => 25, :required => true %>
- <%= l(:text_caracters_minimum, :count => Setting.password_min_length) %>
- <%= f.password_field :password_confirmation, :size => 25, :required => true %>
- <%= f.text_field :mail, :required => true %>
-
-
- <%= "#{l(:label_mail_attention)} " %>
- <%= f.select :language, lang_options_for_select, :required => true %>
-
- <%= f.text_field :identity_url %> <%= custom_field_tag_with_label :user, value %>
+ <%= f.text_field :login, :size => 25, :required => true %>
+ <%= l(:label_max_number) %>
+ <%= f.password_field :password, :size => 25, :required => true %>
+ <%= l(:text_caracters_minimum, :count => Setting.password_min_length) %>
+ <%= f.password_field :password_confirmation, :size => 25, :required => true %>
+ <%= f.text_field :mail, :required => true %>
+
+
+ <%= "#{l(:label_mail_attention)} " %>
+ <%= f.select :language, lang_options_for_select, :required => true %>
+
+ <%= f.text_field :identity_url %> <%= custom_field_tag_with_label :user, value %> <%= render :partial => "avatar/avatar_form", :locals => {source: @course} %>
-
-
-
- <%= l(:label_register) %> <%= link_to l(:label_login_with_open_id_option), signin_url if Setting.openid? %>
-
-<%= labelled_form_for @user, :url => register_path do |f| %>
- <%= error_messages_for 'user' %>
-
-
-
- <% if @user.auth_source_id.nil? %>
-
-
-
- <%= l(:label_identity) %> *
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <%= l(:label_location) %> *
-
-
-
-
-
-
-
-
-
-
-<% end %>
-<% if Setting.openid? %>
-
-
- <%= submit_tag l(:button_submit) %>
- <%= l(:label_register) %> <%= link_to l(:label_login_with_open_id_option), signin_url if Setting.openid? %>
+
+<%= labelled_form_for @user, :url => register_path do |f| %>
+ <%= error_messages_for 'user' %>
+
+
+
+ <% if @user.auth_source_id.nil? %>
+
+
+
+ <%= l(:label_identity) %> *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%= l(:label_location) %> *
+
+
+
+
+
+
+
+
+
+
+<% end %>
+<% if Setting.openid? %>
+
+
+ <%= submit_tag l(:button_submit) %>
+
-
-
-
- <%= l(:label_task_plural)%>(<%= @homework_list.count%>)
- <%= link_to "作业打包下载", zipdown_assort_path(obj_class: @bid.class, obj_id: @bid), class: "button_submit button_submit_font_white", style: "margin: 5px 10px;line-height: 20px;height: 20px;display: inline-block;" if(is_teacher && @bid.homeworks.count > 0) %>
-
-
-
-
-
-
+
+<% is_student = is_cur_course_student(@bid.courses.first) %>
+<% is_teacher = is_course_teacher(User.current,@bid.courses.first) %>
+
+<% is_evaluation = @bid.is_evaluation == 1 || @bid.is_evaluation == nil %>
+<%= form_tag(:controller => 'bids', :action => "show_courseEx", :method => :get) do %>
+
-
-
-
-
- <% user_name = is_teacher ? (homework.user.lastname + homework.user.firstname) : homework.user.login %>
-
-
-
-
- <%= image_tag(url_to_avatar(homework.user), :class => "avatar")%>
-
-
-
-
-
-
-
-
-
- <% if (users_for_homework(homework).include?(User.current) || is_teacher) %>
- <%= link_to l(:button_edit), edit_homework_attach_path(homework) %>
- <% if homework.user == User.current || is_teacher %>
- <%= link_to(l(:label_bid_respond_delete), homework,
- method: :delete, :confirm => l(:text_are_you_sure)) %>
- <% end %>
- <% end %>
-
-
-
-
-
-
-
-
-
-
-
- <% if Time.parse(@bid.deadline.to_s) < Time.parse(homework.created_at.to_s) %>
- 迟交
- <% end %>
-
-
-
-
-
-
- 项目得分:
- ;">
- <%= homework.project.nil? ? "N/A" : project_scores(homework.project) %>
-
-
-
-
-
-
- 提交文件:
- <% if is_evaluation || is_teacher%>
- <%= link_to "打包下载", :controller => "zipdown", :action => "download_user_homework",:homework => homework%>
- <% else %>
- 未开启互评功能作业不允许下载
- <% end %>
-
-
-
- 互评得分:
- <%# student_homework_score = student_score_for_homework(homework) %>
- ;">
- <% score = homework.s_score.nil? ? "N/A" : format("%.2f",homework.s_score) %>
- <%= score %>
-
- <% if is_evaluation && is_student && (!users_for_homework(homework).include? User.current)%>
- <%= link_to "学生互评>>",homework_attach_path(homework) %>
- <% end %>
-
-
-
-
-
- <% if is_evaluation || is_teacher%>
- <%= render :partial => 'app_link', :locals => {:attachments => homework.attachments} %>
- <% end %>
-
-
- 终评得分:
- <%# totle_homework_score = score_for_homework(homework) %>
- <% totle_homework_score = format("%.2f",(homework.t_score.nil? ? 0.00 : homework.t_score) * (@bid.proportion * 1.0 / 100) + (homework.s_score.nil? ? 0.00 : homework.s_score) * (1 - @bid.proportion * 1.0 / 100)) %>
- ;">
- <% score = totle_homework_score == "0.00"? "N/A" : totle_homework_score %>
- <%= score %>
-
- <% if is_teacher %>
- <%= link_to "教师评分>>",homework_attach_path(homework) %>
- <% end %>
-
-
-
+
+
+
+ <%= l(:label_task_plural)%>(<%= @homework_list.count%>)
+ <%= link_to "作业打包下载", zipdown_assort_path(obj_class: @bid.class, obj_id: @bid), class: "button_submit button_submit_font_white", style: "margin: 5px 10px;line-height: 20px;height: 20px;display: inline-block;" if(is_teacher && @bid.homeworks.count > 0) %>
+
+
+
+
+
+
<% end %>
\ No newline at end of file
diff --git a/app/views/courses/_course_form.html.erb b/app/views/courses/_course_form.html.erb
index 87d31b465..7395c9845 100644
--- a/app/views/courses/_course_form.html.erb
+++ b/app/views/courses/_course_form.html.erb
@@ -1,122 +1,122 @@
-
-<% object = [] %>
-<% object << 'course' %>
-<%= error_messages_for object %>
-<% unless @course.new_record? %>
-
+
+
+
+
+ <% user_name = is_teacher ? (homework.user.lastname + homework.user.firstname) : homework.user.login %>
+
+
+
+
+ <%= image_tag(url_to_avatar(homework.user), :class => "avatar")%>
+
+
+
+
+
+
+
+
+
+ <% if (users_for_homework(homework).include?(User.current) || is_teacher) %>
+ <%= link_to l(:button_edit), edit_homework_attach_path(homework) %>
+ <% if homework.user == User.current || is_teacher %>
+ <%= link_to(l(:label_bid_respond_delete), homework,
+ method: :delete, :confirm => l(:text_are_you_sure)) %>
+ <% end %>
+ <% end %>
+
+
+
+
+
+
+
+
+
+
+
+ <% if Time.parse(@bid.deadline.to_s) < Time.parse(homework.created_at.to_s) %>
+ 迟交
+ <% end %>
+
+
+
+
+
+
+ 项目得分:
+ ;">
+ <%= homework.project.nil? ? "N/A" : project_scores(homework.project) %>
+
+
+
+
+
+
+ 提交文件:
+ <% if is_evaluation || is_teacher%>
+ <%= link_to "打包下载", :controller => "zipdown", :action => "download_user_homework",:homework => homework%>
+ <% else %>
+ 未开启互评功能作业不允许下载
+ <% end %>
+
+
+
+ 互评得分:
+ <%# student_homework_score = student_score_for_homework(homework) %>
+ ;">
+ <% score = homework.s_score.nil? ? "N/A" : format("%.2f",homework.s_score) %>
+ <%= score %>
+
+ <% if is_evaluation && is_student && (!users_for_homework(homework).include? User.current)%>
+ <%= link_to "学生互评>>",homework_attach_path(homework) %>
+ <% end %>
+
+
+
+
+
+ <% if is_evaluation || is_teacher%>
+ <%= render :partial => 'app_link', :locals => {:attachments => homework.attachments} %>
+ <% end %>
+
+
+ 终评得分:
+ <%# totle_homework_score = score_for_homework(homework) %>
+ <% totle_homework_score = format("%.2f",(homework.t_score.nil? ? 0.00 : homework.t_score) * (@bid.proportion * 1.0 / 100) + (homework.s_score.nil? ? 0.00 : homework.s_score) * (1 - @bid.proportion * 1.0 / 100)) %>
+ ;">
+ <% score = totle_homework_score == "0.00"? "N/A" : totle_homework_score %>
+ <%= score %>
+
+ <% if is_teacher %>
+ <%= link_to "教师评分>>",homework_attach_path(homework) %>
+ <% end %>
+
+
+
-
-
-
-
- <%= l(:label_class_period) %>
- *
- <%= text_field_tag :class_period, @course.class_period, :placeholder => "在此输入课时", :maxlength => 5 %>
- <%= l(:label_class_hour) %>
-
-
-
- <%= l(:label_class_period) %> - * - <%= text_field_tag :class_period, nil, :placeholder => "在此输入课时", :maxlength => 5 %><%= l(:label_class_hour) %> - | -
-
- <% if @course != nil %>
-
|
-
- - -
- <%= l(:text_command) %> -<% end %> -- - - - -
-- - <%= f.check_box :is_public, :style => "margin-left:10px;" %> - <%= l(:label_course_public_info) %> - -
- -<%= wikitoolbar_for 'course_description' %> -<% @course.custom_field_values.each do |value| %> -<%= custom_field_tag_with_label :course, value %>
-<% end %> -<%= call_hook(:view_courses_form, :course => @course, :form => f) %> - - -<% unless @course.extra_frozen? %> - <% content_for :header_tags do %> - <%= javascript_include_tag 'course_identifier' %> - <% end %> -<% end %> - + +<% object = [] %> +<% object << 'course' %> +<%= error_messages_for object %> +<% unless @course.new_record? %> +<%= render :partial => "avatar/avatar_form", :locals => {source: @course} %>
+<% end %> ++ + +
+ +<%= f.fields_for @course do |m| %> + <% unless @course.nil? %> ++
+ <%= l(:label_class_period) %> + * + <%= text_field_tag :class_period, @course.class_period, :placeholder => "在此输入课时", :maxlength => 5 %> + <%= l(:label_class_hour) %> + | +
+
+ <%= l(:label_class_period) %> + * + <%= text_field_tag :class_period, nil, :placeholder => "在此输入课时", :maxlength => 5 %><%= l(:label_class_hour) %> + | +
+
+ <% if @course != nil %>
+
|
+
+ + +
+ <%= l(:text_command) %> +<% end %> ++ + + + +
++ + <%= f.check_box :is_public, :style => "margin-left:10px;" %> + <%= l(:label_course_public_info) %> + +
+ +<%= wikitoolbar_for 'course_description' %> +<% @course.custom_field_values.each do |value| %> +<%= custom_field_tag_with_label :course, value %>
+<% end %> +<%= call_hook(:view_courses_form, :course => @course, :form => f) %> + + +<% unless @course.extra_frozen? %> + <% content_for :header_tags do %> + <%= javascript_include_tag 'course_identifier' %> + <% end %> +<% end %> + diff --git a/app/views/courses/settings/_members.html.erb b/app/views/courses/settings/_members.html.erb index a62a9c613..1d8b059c7 100644 --- a/app/views/courses/settings/_members.html.erb +++ b/app/views/courses/settings/_members.html.erb @@ -1,105 +1,105 @@ -<%= error_messages_for 'member' %> -<% - roles = Role.givable.all - roles = roles[3..5] - members = @course.member_principals.includes(:roles, :principal).all.sort -%> - -<%= l(:label_user) %> | -<%= l(:label_role_plural) %> | -- <%= call_hook(:view_projects_settings_members_table_header, :course => @course) %> - | |
---|---|---|---|
- <%= link_to_user member.principal %> - | -
-
- <%= h member.roles.sort.collect(&:to_s).join(', ') %>
-
- <%= form_for(member, {:as => :membership, :remote => true,
- :url => course_memberships_path(member),:method => :put,
- :html => {:id => "member-#{member.id}-roles-form",
- :class => 'hol'}}
- ) do |f| %>
-
- <% roles.each do |role| %>
-
- - <%= submit_tag l(:button_change), :class => "small" %> - <%= link_to_function l(:button_cancel), - "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;" - %> - - <% end %> - |
-
- <% if member.roles.first.to_s == "Manager" %>
- - <% else %> - | - <%= link_to_function l(:button_edit), - "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;", - :class => 'icon icon-edit' %> - <%= delete_link membership_path(member), - :remote => true, - :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %> - | - <% end %> - - <%= call_hook(:view_projects_settings_members_table_header, {:course => @course, :member => member}) %> -
<%= l(:label_no_data) %>
- <% end %> -<%= l(:label_user) %> | +<%= l(:label_role_plural) %> | ++ <%= call_hook(:view_projects_settings_members_table_header, :course => @course) %> + | |
---|---|---|---|
+ <%= link_to_user member.principal %> + | +
+
+ <%= h member.roles.sort.collect(&:to_s).join(', ') %>
+
+ <%= form_for(member, {:as => :membership, :remote => true,
+ :url => course_memberships_path(member),:method => :put,
+ :html => {:id => "member-#{member.id}-roles-form",
+ :class => 'hol'}}
+ ) do |f| %>
+
+ <% roles.each do |role| %>
+
+ + <%= submit_tag l(:button_change), :class => "small" %> + <%= link_to_function l(:button_cancel), + "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;" + %> + + <% end %> + |
+
+ <% if member.roles.first.to_s == "Manager" %>
+ + <% else %> + | + <%= link_to_function l(:button_edit), + "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;", + :class => 'icon icon-edit' %> + <%= delete_link membership_path(member), + :remote => true, + :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %> + | + <% end %> + + <%= call_hook(:view_projects_settings_members_table_header, {:course => @course, :member => member}) %> +
<%= l(:label_no_data) %>
+ <% end %> +<%= f.text_field :name, :required => true %>
-<%= f.check_box :assignable %>
-<% end %> -<%= f.select :issues_visibility, Role::ISSUES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %>
-<% if @role.new_record? && @roles.any? %> --<%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@roles, :id, :name, params[:copy_workflow_from] || @copy_from.try(:id))) %>
-<% end %> -<%= f.text_field :name, :required => true %>
+<%= f.check_box :assignable %>
+<% end %> +<%= f.select :issues_visibility, Role::ISSUES_VISIBILITY_OPTIONS.collect {|v| [l(v.last), v.first]} %>
+<% if @role.new_record? && @roles.any? %> ++<%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@roles, :id, :name, params[:copy_workflow_from] || @copy_from.try(:id))) %>
+<% end %> +<%=l(:label_permissions)%> | - <% @roles.each do |role| %> -- <%= content_tag(role.builtin? ? 'em' : 'span', h(role.name)) %> - <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.role-#{role.id}')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - | - <% end %> -
---|---|
- <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - <%= l_or_humanize(permission.name, :prefix => 'permission_') %> - | - <% @roles.each do |role| %> -- <% if role.setable_permissions.include? permission %> - <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> - <% end %> - | - <% end %> -
- | - <% @roles.each do |role| %> - - <%= l(:label_project) %> -<%= h(role.name) %> | - <% end %> -
- <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - <%= l_or_humanize(permission.name, :prefix => 'permission_') %> - | - <% @roles.each do |role| %> -- <% if role.setable_permissions.include? permission %> - <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> - <% end %> - | - <% end %> -
- | - <% @roles.each do |role| %> - - <%= l(:label_course) %> -<%= h(role.name) %> | - <% end %> -
- <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - <%= l_or_humanize(permission.name, :prefix => 'permission_') %> - | - <% @roles.each do |role| %> -- <% if role.setable_permissions.include? permission %> - <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> - <% end %> - | - <% end %> -
- | - <% @roles.each do |role| %> - - <%= l(:label_contest) %> -<%= h(role.name) %> | - <% end %> -
- <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - <%= l_or_humanize(permission.name, :prefix => 'permission_') %> - | - <% @roles.each do |role| %> -- <% if role.setable_permissions.include? permission %> - <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> - <% end %> - | - <% end %> -
- | - <% @roles.each do |role| %> - - <%= l_or_humanize(mod, :prefix => 'project_module_') %> -<%= h(role.name) %> | - <% end %> -
- <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - <%= l_or_humanize(permission.name, :prefix => 'permission_') %> - | - <% @roles.each do |role| %> -- <% if role.setable_permissions.include? permission %> - <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> - <% end %> - | - <% end %> -
<%= check_all_links 'permissions_form' %>
-<%= submit_tag l(:button_save) %>
-<% end %> +<%=l(:label_permissions)%> | + <% @roles.each do |role| %> ++ <%= content_tag(role.builtin? ? 'em' : 'span', h(role.name)) %> + <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.role-#{role.id}')", + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> + | + <% end %> +
---|---|
+ <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> + <%= l_or_humanize(permission.name, :prefix => 'permission_') %> + | + <% @roles.each do |role| %> ++ <% if role.setable_permissions.include? permission %> + <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> + <% end %> + | + <% end %> +
+ | + <% @roles.each do |role| %> + + <%= l(:label_project) %> +<%= h(role.name) %> | + <% end %> +
+ <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> + <%= l_or_humanize(permission.name, :prefix => 'permission_') %> + | + <% @roles.each do |role| %> ++ <% if role.setable_permissions.include? permission %> + <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> + <% end %> + | + <% end %> +
+ | + <% @roles.each do |role| %> + + <%= l(:label_course) %> +<%= h(role.name) %> | + <% end %> +
+ <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> + <%= l_or_humanize(permission.name, :prefix => 'permission_') %> + | + <% @roles.each do |role| %> ++ <% if role.setable_permissions.include? permission %> + <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> + <% end %> + | + <% end %> +
+ | + <% @roles.each do |role| %> + + <%= l(:label_contest) %> +<%= h(role.name) %> | + <% end %> +
+ <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> + <%= l_or_humanize(permission.name, :prefix => 'permission_') %> + | + <% @roles.each do |role| %> ++ <% if role.setable_permissions.include? permission %> + <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> + <% end %> + | + <% end %> +
+ | + <% @roles.each do |role| %> + + <%= l_or_humanize(mod, :prefix => 'project_module_') %> +<%= h(role.name) %> | + <% end %> +
+ <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> + <%= l_or_humanize(permission.name, :prefix => 'permission_') %> + | + <% @roles.each do |role| %> ++ <% if role.setable_permissions.include? permission %> + <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> + <% end %> + | + <% end %> +
<%= check_all_links 'permissions_form' %>
+<%= submit_tag l(:button_save) %>
+<% end %> diff --git a/lib/redmine.rb b/lib/redmine.rb index c96464abc..8eb7756e5 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -1,481 +1,481 @@ -# 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. - -require 'redmine/core_ext' - -begin - require 'RMagick' unless Object.const_defined?(:Magick) -rescue LoadError - # RMagick is not available -end - -require 'redmine/scm/base' -require 'redmine/access_control' -require 'redmine/access_keys' -require 'redmine/activity' -require 'redmine/activity/fetcher' -require 'redmine/ciphering' -require 'redmine/codeset_util' -require 'redmine/custom_field_format' -require 'redmine/i18n' -require 'redmine/menu_manager' -require 'redmine/notifiable' -require 'redmine/platform' -require 'redmine/mime_type' -require 'redmine/notifiable' -require 'redmine/search' -require 'redmine/syntax_highlighting' -require 'redmine/thumbnail' -require 'redmine/unified_diff' -require 'redmine/utils' -require 'redmine/version' -require 'redmine/wiki_formatting' - -require 'redmine/default_data/loader' -require 'redmine/helpers/calendar' -require 'redmine/helpers/diff' -require 'redmine/helpers/gantt' -require 'redmine/helpers/time_report' -require 'redmine/views/other_formats_builder' -require 'redmine/views/labelled_form_builder' -require 'redmine/views/builders' - -require 'redmine/themes' -require 'redmine/hook' -require 'redmine/plugin' - -if RUBY_VERSION < '1.9' - require 'fastercsv' -else - require 'csv' - FCSV = CSV -end - -Redmine::Scm::Base.add "Subversion" -Redmine::Scm::Base.add "Darcs" -Redmine::Scm::Base.add "Mercurial" -Redmine::Scm::Base.add "Cvs" -Redmine::Scm::Base.add "Bazaar" -Redmine::Scm::Base.add "Git" -Redmine::Scm::Base.add "Filesystem" - -Redmine::CustomFieldFormat.map do |fields| - fields.register 'string' - fields.register 'text' - fields.register 'int', :label => :label_integer - fields.register 'float' - fields.register 'list' - fields.register 'date' - fields.register 'bool', :label => :label_boolean - fields.register 'user', :only => %w(Issue TimeEntry Version Project), :edit_as => 'list' - fields.register 'version', :only => %w(Issue TimeEntry Version Project), :edit_as => 'list' -end - -# Permissions -Redmine::AccessControl.map do |map| - map.permission :view_project, {:projects => [:show], :activities => [:index]}, :public => true, :read => true - map.permission :search_project, {:search => :index}, :public => true, :read => true - map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin ,:belong_to_project => true - map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member ,:belong_to_project => true - map.permission :close_project, {:projects => [:close, :reopen]}, :require => :member, :read => true ,:belong_to_project => true - map.permission :select_project_modules, {:projects => :modules}, :require => :member ,:belong_to_project => true - map.permission :select_contest_modules, {:contests => :modules}, :require => :member ,:belong_to_contest => true - map.permission :manage_members, {:projects => :settings, :members => [:index, :show, :create, :update, :destroy, :autocomplete]}, :require => :member ,:belong_to_project => true - map.permission :manage_versions, {:projects => :settings, :versions => [:new, :create, :edit, :update, :close_completed, :destroy]}, :require => :member ,:belong_to_project => true - map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member ,:belong_to_project => true - #错的权限,先注释掉 - #map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true - - map.permission :quote_project, {},:require => :member,:belong_to_contest => true - map.permission :is_manager,{},:require => :member ,:belong_to_project => true - map.permission :as_teacher,{},:require => :member ,:belong_to_course => true - map.permission :as_student,{},:require => :member ,:belong_to_course => true - - #课程权限模块 - map.permission :view_course, {:courses => [:show], :activities => [:index]}, :public => true, :read => true - map.permission :search_course, {:search => :index}, :public => true, :read => true - map.permission :add_course, {:courses => [:new, :create]}, :require => :loggedin ,:belong_to_course => true - map.permission :edit_course, {:courses => [:settings, :edit, :update]}, :require => :member ,:belong_to_course => true - map.permission :close_course, {:courses => [:close, :reopen]}, :require => :member, :read => true ,:belong_to_course => true - map.permission :select_course_modules, {:courses => :modules}, :require => :member ,:belong_to_course => true - map.permission :view_course_journals_for_messages, {:courses => :feedback}, :require => :member,:read => true ,:belong_to_course => true - map.permission :memos_attachments_download,{:attachments => :download} - map.permission :projects_attachments_download,{:attachments => :download},:belong_to_project => true - map.permission :course_attachments_download,{:attachments => :download},:belong_to_course => true - map.permission :contest_attachments_download,{:attachments => :download},:belong_to_contest => true - #与项目一致,注释掉 - #map.course_module :files do |map| - # map.permission :manage_files, {:files => [:new, :create]}, :require => :loggedin - # map.permission :view_course_files, {:files => :index, :versions => :download}, :read => true - #end - #新闻权限与项目一致注释掉此处 - # map.course_module :news do |map| - # map.permission :manage_news, {:news => [:new, :create, :edit, :update, :destroy], :comments => [:destroy]}, :require => :member - # map.permission :view_course_news, {:news => [:index, :show]}, :public => true, :read => true - # map.permission :comment_news, {:comments => :create} - # end - - map.course_module :bids do |map| - map.permission :view_homework_attaches, {:bids => [:show, :show_project, :revision]}, :read => true,:belong_to_course => true - map.permission :paret_in_homework,{},:require => :member ,:belong_to_course => true - end - - #讨论区权限与项目统一,注释掉此课程讨论区权限 - #map.course_module :boards do |map| - # map.permission :manage_boards, {:boards => [:new, :create, :edit, :update, :destroy]}, :require => :member - # map.permission :view_course_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true, :read => true - # map.permission :add_messages, {:messages => [:new, :reply, :quote]} - # map.permission :edit_messages, {:messages => :edit}, :require => :member - # map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin - # map.permission :delete_messages, {:messages => :destroy}, :require => :member - # map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin - #end - - #end - - map.project_module :issue_tracking do |map| - # Issue categories - map.permission :manage_categories, {:projects => :settings, :issue_categories => [:index, :show, :new, :create, :edit, :update, :destroy]}, :require => :member - # Issues - map.permission :view_issues, {:issues => [:index, :show], - :auto_complete => [:issues], - :context_menus => [:issues], - :versions => [:index, :show, :status_by], - :journals => [:index, :diff], - :queries => :index, - :reports => [:issue_report, :issue_report_details]}, - :read => true - map.permission :add_issues, {:issues => [:new, :create, :update_form], :attachments => :upload} - map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new], :attachments => :upload} - map.permission :manage_issue_relations, {:issue_relations => [:index, :show, :create, :destroy]} - map.permission :manage_subtasks, {} - map.permission :set_issues_private, {} - map.permission :set_own_issues_private, {}, :require => :loggedin - map.permission :add_issue_notes, {:issues => [:edit, :update, :update_form], :journals => [:new], :attachments => :upload} - map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin - map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin - map.permission :view_private_notes, {}, :read => true, :require => :member - map.permission :set_notes_private, {}, :require => :member - map.permission :move_issues, {:issues => [:bulk_edit, :bulk_update]}, :require => :loggedin - map.permission :delete_issues, {:issues => :destroy}, :require => :member - # Queries - map.permission :manage_public_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :member - map.permission :save_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin - # Watchers - map.permission :view_issue_watchers, {}, :read => true - map.permission :add_issue_watchers, {:watchers => [:new, :create, :append, :autocomplete_for_user]} - map.permission :delete_issue_watchers, {:watchers => :destroy} - end - - map.project_module :time_tracking do |map| - map.permission :log_time, {:timelog => [:new, :create]}, :require => :loggedin - map.permission :view_time_entries, {:timelog => [:index, :report, :show]}, :read => true - map.permission :edit_time_entries, {:timelog => [:edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member - map.permission :edit_own_time_entries, {:timelog => [:edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin - map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member - end - - map.project_module :news do |map| - map.permission :manage_news, {:news => [:new, :create, :edit, :update, :destroy], :comments => [:destroy]}, :require => :member - map.permission :view_news, {:news => [:index, :show]}, :public => true, :read => true - map.permission :comment_news, {:comments => :create} - end - - map.contest_module :contestnotifications do |map| - map.permission :manage_contestnotifications, {:contestnotifications => [:new, :create, :edit, :update, :destroy], :notificationcomments => [:destroy]}, :require => :member,:belong_to_contest => true - map.permission :view_contestnotifications, {:contestnotifications => [:index, :show]}, :public => true, :read => true - map.permission :notificationcomment_contestnotifications, {:notificationcomments => :create},:belong_to_contest => true - end - - map.project_module :documents do |map| - map.permission :add_documents, {:documents => [:new, :create, :add_attachment]}, :require => :loggedin - map.permission :edit_documents, {:documents => [:edit, :update, :add_attachment]}, :require => :loggedin - map.permission :delete_documents, {:documents => [:destroy]}, :require => :loggedin - map.permission :view_documents, {:documents => [:index, :show, :download]}, :read => true - end - - map.project_module :files do |map| - map.permission :manage_files, {:files => [:new, :create]}, :require => :loggedin - map.permission :view_files, {:files => :index, :versions => :download}, :read => true - end - - map.project_module :wiki do |map| - map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member - map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member - map.permission :delete_wiki_pages, {:wiki => [:destroy, :destroy_version]}, :require => :member - map.permission :view_wiki_pages, {:wiki => [:index, :show, :special, :date_index]}, :read => true - map.permission :export_wiki_pages, {:wiki => [:export]}, :read => true - map.permission :view_wiki_edits, {:wiki => [:history, :diff, :annotate]}, :read => true - map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment] - map.permission :delete_wiki_pages_attachments, {} - map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member - end - - map.project_module :repository do |map| - map.permission :manage_repository, {:repositories => [:new, :create, :edit, :update, :committers, :destroy]}, :require => :member - map.permission :browse_repository, {:repositories => [:show, :browse, :entry, :raw, :annotate, :changes, :diff, :stats, :graph]}, :read => true - map.permission :view_changesets, {:repositories => [:show, :revisions, :revision]}, :read => true - map.permission :commit_access, {} - map.permission :manage_related_issues, {:repositories => [:add_related_issue, :remove_related_issue]} - end - - map.project_module :boards do |map| - map.permission :manage_boards, {:boards => [:new, :create, :edit, :update, :destroy]}, :require => :member - map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true, :read => true - map.permission :add_messages, {:messages => [:new, :reply, :quote]} - map.permission :edit_messages, {:messages => :edit}, :require => :member - map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin - map.permission :delete_messages, {:messages => :destroy}, :require => :member - map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin - end - - map.project_module :calendar do |map| - map.permission :view_calendar, {:calendars => [:show, :update]}, :read => true - end - - map.project_module :gantt do |map| - map.permission :view_gantt, {:gantts => [:show, :update]}, :read => true - end - - map.project_module :dts do |map| - map.permission :do_dts, {:dts => :show}, :read => true - end - # map.project_module :journals do |map| - # map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true - # end - -end -#by young -Redmine::MenuManager.map :top_menu do |menu| - menu.push :home, {:host => Setting.user_domain} - menu.push :course_practice, {:controller => 'projects', :action => 'course', :project_type => 1} - menu.push :project_deposit, { :controller => 'projects', :action => 'index', :project_type => 0}, :caption => :label_project_deposit - menu.push :software_user, {:controller => 'users', :action => 'index'} - menu.push :contest_innovate, {:controller => 'bids', :action => 'contest', :project_type => 1} - menu.push :requirement_enterprise, {:controller => 'bids', :action => 'index'} - menu.push :project_module_forums, :forums_path - menu.push :stores_index, :stores_path - - - # menu.push :investor, :home_path - # menu.push :theme, :home_path - # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } - # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true - # menu.push :help, Redmine::Info.help_url, :last => true -end -#end - -# by huang -# Redmine::MenuManager.map :top_home_menu do |menu| - # menu.push :home, :home_path - # menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural - # menu.push :developer, {:controller => 'users', :action => 'index'} - # menu.push :investor, :home_path - # menu.push :theme, :home_path - # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } - # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true - # menu.push :help, Redmine::Info.help_url, :last => true -# end - -# Redmine::MenuManager.map :top_enterprise_menu do |menu| - # menu.push :home, :home_path - # menu.push :requirement, {:controller => 'bids', :action => 'index', :project_type => 0 } - # menu.push :projects, { :controller => 'projects', :action => 'index', :project_type => 0 }, :caption => :label_project_plural -# - # menu.push :developer, {:controller => 'users', :action => 'index', :project_type => 0 } - # menu.push :college_into, {:controller=>'projects', :action=>'course_enterprise', :project_type => 1 } - # # menu.push :investor, :home_path - # # menu.push :theme, :home_path - # # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } - # # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true - # # menu.push :help, Redmine::Info.help_url, :last => true -# end - -# Redmine::MenuManager.map :top_college_menu do |menu| - # menu.push :home, :home_path - # menu.push :new_course, {:controller => 'projects', :action => 'course', :project_type => 1} - # menu.push :new_homework, {:controller => 'bids', :action => 'index', :project_type => 1 } - # menu.push :new_contest, {:controller => 'bids', :action => 'contest', :project_type => 1} - # menu.push :projects, { :controller => 'projects', :action => 'index', :project_type => 0 }, :caption => :label_project_plural - # menu.push :developer, {:controller => 'users', :action => 'index', :project_type => 1 } - # menu.push :enterprise_into, {:controller=>'projects', :action=>'enterprise_course', :project_type => 0 } - # menu.push :investor, :home_path - # menu.push :theme, :home_path - # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } - # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true - # menu.push :help, Redmine::Info.help_url, :last => true -# end -# end - -Redmine::MenuManager.map :account_menu do |menu| - menu.push :login, {:controller => 'account', :action => 'login'}, :if => Proc.new { !User.current.logged? } - menu.push :register, {:controller => 'account', :action => 'register'}, :if => Proc.new { !User.current.logged? && Setting.self_registration? } - # menu.push :my_account, { :controller => 'my', :action => 'account' }, :if => Proc.new { User.current.logged? } - menu.push :logout, {:controller => 'account', :action => 'logout'}, :html => {:method => 'post'}, :if => Proc.new { User.current.logged? } -end -########fq -Redmine::MenuManager.map :bid_menu do |menu| - menu.push :respond, { :controller => 'bids', :action => 'show' }, :caption => :label_user_response - menu.push :project, { :controller => 'bids', :action => 'show_project', :host => Setting.project_domain }, :caption => :label_bidding_project - # menu.push :result, { :controller => 'bids', :action => 'show_results' }, - # :caption => :label_bidding_results,:if => Proc.new{ |p| User.current.id == p } -end -###new add by linchun -Redmine::MenuManager.map :contest_menu do |menu| - menu.push :respond, :show_contest_contest_path, :caption => :label_user_response - #menu.push :project, :show_project_contest_path, :caption => :label_contest_project - #menu.push :application, :show_softapplication_contest_path, :caption => :label_contest_application - menu.push :attendingcontest, {:controller => 'contests', :action => 'show_attendingcontest'}, :caption => :label_attending_contest - menu.push :contestnotifications, { :controller => 'contestnotifications', :action => 'index' }, :param => :contest_id, :caption => :label_contest_notification - #menu.push :contestnotification, {:controller => 'contests', :action => 'show_notification'}, :caption => :label_contest_notification - # menu.push :attendingcontest, :show_attendingcontest_contest_path, :caption => :label_attendin,g_contest - # menu.push :result, { :controller => 'bids', :action => 'show_results' }, - # :caption => :label_bidding_results,:if => Proc.new{ |p| User.current.id == p } -end - -#### -Redmine::MenuManager.map :application_menu do |menu| - # Empty -end - -###### -Redmine::MenuManager.map :homework_menu do |menu| - menu.push :respond, { :controller => 'bids', :action => 'show' }, :caption => :label_homework_response - menu.push :project, { :controller => 'bids', :action => 'show_project' }, :caption => :label_bidding_homework -end -########end -Redmine::MenuManager.map :admin_menu do |menu| - menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural - menu.push :users, {:controller => 'admin', :action => 'users'}, :caption => :label_user_plural - menu.push :first_page_made, {:controller => 'admin',:action => 'first_page_made'},:caption => :label_first_page_made - menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural - menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions - menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural - menu.push :issue_statuses, {:controller => 'issue_statuses'}, :caption => :label_issue_status_plural, - :html => {:class => 'issue_statuses'} - menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow - menu.push :custom_fields, {:controller => 'custom_fields'}, :caption => :label_custom_field_plural, - :html => {:class => 'custom_fields'} - menu.push :enumerations, {:controller => 'enumerations'} - menu.push :settings, {:controller => 'settings'} - menu.push :ldap_authentication, {:controller => 'auth_sources', :action => 'index'}, - :html => {:class => 'server_authentication'} - menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true - menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true - -end -#Modified by young -Redmine::MenuManager.map :project_menu do |menu| - menu.push :overview, { :controller => 'projects', :action => 'show' } -# menu.push :activity, { :controller => 'activities', :action => 'index' } - #menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id -# :if => Proc.new { |p| p.shared_versions.any? } - menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural -# menu.push :new_issue, { :controller => 'issues', :action => 'new', :copy_from => nil }, :param => :project_id, :caption => :label_issue_new, -# :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) } -# menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt -# menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar - menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural -# menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural -# menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id, -# :if => Proc.new { |p| p.wiki && !p.wiki.new_record? } - menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id, - :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural - #menu.push :files, { :controller => 'files', :action => 'index' }, :param => :project_id, :caption => :label_file_new - menu.push :repository, { :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil }, - :if => Proc.new { |p| p.repository && !p.repository.new_record? && !( !User.current.member_of?(p) && p.hidden_repo ) } - menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true - -end -#end - -#added by young -Redmine::MenuManager.map :course_menu do |menu| - menu.push :overview, { :controller => 'projects', :action => 'show'} - menu.push :homework, { :controller => 'projects', :action => 'homework' } -# menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural -# menu.push :files, { :controller => 'files', :action => 'index' }, :caption => :label_file_new, :param => :project_id - menu.push :repository, { :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil, :course => 1 } - # menu.push :settings, { :controller => 'projects', :action => 'settings', :course => 1 }, :last => true - -end -Redmine::MenuManager.map :user_menu do |menu| - menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.user_domain } - menu.push :user_course, {:controller => 'users', :action => 'user_courses'} - #menu.push :user_homework, {:controller => 'users', :action => 'user_homeworks'} by huang - menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} - # menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids'} by huang - menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} - -end -Redmine::MenuManager.map :user_enterprise_menu do |menu| - menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.user_domain } - - menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} - - menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids', :host => Setting.user_domain} - menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} - -end -Redmine::MenuManager.map :user_menu_self do |menu| - menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.project_domain } - menu.push :user_information, {:controller => 'users', :action => 'info', :host => Setting.user_domain} - menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} - menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids', :host => Setting.user_domain} - menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} - -end -#end - -Redmine::Activity.map do |activity| - activity.register :issues, :class_name => %w(Issue Journal) - activity.register :changesets - activity.register :news - activity.register :contestnotification - activity.register :documents, :class_name => %w(Document Attachment) - activity.register :files, :class_name => 'Attachment' - activity.register :course_files, :class_name => 'Attachment' - activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false - activity.register :messages, :default => false - activity.register :time_entries, :default => false - # added by fq - activity.register :bids, :class_name => 'Bid' - activity.register :memos, :class_name => 'Memo' - activity.register :journals_for_messages - # end - #added by nwb - activity.register :course_journals_for_messages , :class_name => 'JournalsForMessage' - activity.register :course_news, :class_name => 'News' - activity.register :course_messages, :default => false, :class_name => 'Message' -end - -Redmine::Search.map do |search| - search.register :issues - search.register :news - search.register :contestnotification - search.register :documents - search.register :changesets - search.register :wiki_pages - search.register :messages - search.register :projects -end - -Redmine::WikiFormatting.map do |format| - format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper -end - -ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler +# 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. + +require 'redmine/core_ext' + +begin + require 'RMagick' unless Object.const_defined?(:Magick) +rescue LoadError + # RMagick is not available +end + +require 'redmine/scm/base' +require 'redmine/access_control' +require 'redmine/access_keys' +require 'redmine/activity' +require 'redmine/activity/fetcher' +require 'redmine/ciphering' +require 'redmine/codeset_util' +require 'redmine/custom_field_format' +require 'redmine/i18n' +require 'redmine/menu_manager' +require 'redmine/notifiable' +require 'redmine/platform' +require 'redmine/mime_type' +require 'redmine/notifiable' +require 'redmine/search' +require 'redmine/syntax_highlighting' +require 'redmine/thumbnail' +require 'redmine/unified_diff' +require 'redmine/utils' +require 'redmine/version' +require 'redmine/wiki_formatting' + +require 'redmine/default_data/loader' +require 'redmine/helpers/calendar' +require 'redmine/helpers/diff' +require 'redmine/helpers/gantt' +require 'redmine/helpers/time_report' +require 'redmine/views/other_formats_builder' +require 'redmine/views/labelled_form_builder' +require 'redmine/views/builders' + +require 'redmine/themes' +require 'redmine/hook' +require 'redmine/plugin' + +if RUBY_VERSION < '1.9' + require 'fastercsv' +else + require 'csv' + FCSV = CSV +end + +Redmine::Scm::Base.add "Subversion" +Redmine::Scm::Base.add "Darcs" +Redmine::Scm::Base.add "Mercurial" +Redmine::Scm::Base.add "Cvs" +Redmine::Scm::Base.add "Bazaar" +Redmine::Scm::Base.add "Git" +Redmine::Scm::Base.add "Filesystem" + +Redmine::CustomFieldFormat.map do |fields| + fields.register 'string' + fields.register 'text' + fields.register 'int', :label => :label_integer + fields.register 'float' + fields.register 'list' + fields.register 'date' + fields.register 'bool', :label => :label_boolean + fields.register 'user', :only => %w(Issue TimeEntry Version Project), :edit_as => 'list' + fields.register 'version', :only => %w(Issue TimeEntry Version Project), :edit_as => 'list' +end + +# Permissions +Redmine::AccessControl.map do |map| + map.permission :view_project, {:projects => [:show], :activities => [:index]}, :public => true, :read => true + map.permission :search_project, {:search => :index}, :public => true, :read => true + map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin ,:belong_to_project => true + map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member ,:belong_to_project => true + map.permission :close_project, {:projects => [:close, :reopen]}, :require => :member, :read => true ,:belong_to_project => true + map.permission :select_project_modules, {:projects => :modules}, :require => :member ,:belong_to_project => true + map.permission :select_contest_modules, {:contests => :modules}, :require => :member ,:belong_to_contest => true + map.permission :manage_members, {:projects => :settings, :members => [:index, :show, :create, :update, :destroy, :autocomplete]}, :require => :member ,:belong_to_project => true + map.permission :manage_versions, {:projects => :settings, :versions => [:new, :create, :edit, :update, :close_completed, :destroy]}, :require => :member ,:belong_to_project => true + map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member ,:belong_to_project => true + #错的权限,先注释掉 + #map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true + + map.permission :quote_project, {},:require => :member,:belong_to_contest => true + map.permission :is_manager,{},:require => :member ,:belong_to_project => true + map.permission :as_teacher,{},:require => :member ,:belong_to_course => true + map.permission :as_student,{},:require => :member ,:belong_to_course => true + + #课程权限模块 + map.permission :view_course, {:courses => [:show], :activities => [:index]}, :public => true, :read => true + map.permission :search_course, {:search => :index}, :public => true, :read => true + map.permission :add_course, {:courses => [:new, :create]}, :require => :loggedin ,:belong_to_course => true + map.permission :edit_course, {:courses => [:settings, :edit, :update]}, :require => :member ,:belong_to_course => true + map.permission :close_course, {:courses => [:close, :reopen]}, :require => :member, :read => true ,:belong_to_course => true + map.permission :select_course_modules, {:courses => :modules}, :require => :member ,:belong_to_course => true + map.permission :view_course_journals_for_messages, {:courses => :feedback}, :require => :member,:read => true ,:belong_to_course => true + map.permission :memos_attachments_download,{:attachments => :download} + map.permission :projects_attachments_download,{:attachments => :download},:belong_to_project => true + map.permission :course_attachments_download,{:attachments => :download},:belong_to_course => true + map.permission :contest_attachments_download,{:attachments => :download},:belong_to_contest => true + #与项目一致,注释掉 + #map.course_module :files do |map| + # map.permission :manage_files, {:files => [:new, :create]}, :require => :loggedin + # map.permission :view_course_files, {:files => :index, :versions => :download}, :read => true + #end + #新闻权限与项目一致注释掉此处 + # map.course_module :news do |map| + # map.permission :manage_news, {:news => [:new, :create, :edit, :update, :destroy], :comments => [:destroy]}, :require => :member + # map.permission :view_course_news, {:news => [:index, :show]}, :public => true, :read => true + # map.permission :comment_news, {:comments => :create} + # end + + map.course_module :bids do |map| + map.permission :view_homework_attaches, {:bids => [:show, :show_project, :revision]}, :read => true,:belong_to_course => true + map.permission :paret_in_homework,{},:require => :member ,:belong_to_course => true + end + + #讨论区权限与项目统一,注释掉此课程讨论区权限 + #map.course_module :boards do |map| + # map.permission :manage_boards, {:boards => [:new, :create, :edit, :update, :destroy]}, :require => :member + # map.permission :view_course_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true, :read => true + # map.permission :add_messages, {:messages => [:new, :reply, :quote]} + # map.permission :edit_messages, {:messages => :edit}, :require => :member + # map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin + # map.permission :delete_messages, {:messages => :destroy}, :require => :member + # map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin + #end + + #end + + map.project_module :issue_tracking do |map| + # Issue categories + map.permission :manage_categories, {:projects => :settings, :issue_categories => [:index, :show, :new, :create, :edit, :update, :destroy]}, :require => :member + # Issues + map.permission :view_issues, {:issues => [:index, :show], + :auto_complete => [:issues], + :context_menus => [:issues], + :versions => [:index, :show, :status_by], + :journals => [:index, :diff], + :queries => :index, + :reports => [:issue_report, :issue_report_details]}, + :read => true + map.permission :add_issues, {:issues => [:new, :create, :update_form], :attachments => :upload} + map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new], :attachments => :upload} + map.permission :manage_issue_relations, {:issue_relations => [:index, :show, :create, :destroy]} + map.permission :manage_subtasks, {} + map.permission :set_issues_private, {} + map.permission :set_own_issues_private, {}, :require => :loggedin + map.permission :add_issue_notes, {:issues => [:edit, :update, :update_form], :journals => [:new], :attachments => :upload} + map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin + map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin + map.permission :view_private_notes, {}, :read => true, :require => :member + map.permission :set_notes_private, {}, :require => :member + map.permission :move_issues, {:issues => [:bulk_edit, :bulk_update]}, :require => :loggedin + map.permission :delete_issues, {:issues => :destroy}, :require => :member + # Queries + map.permission :manage_public_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :member + map.permission :save_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin + # Watchers + map.permission :view_issue_watchers, {}, :read => true + map.permission :add_issue_watchers, {:watchers => [:new, :create, :append, :autocomplete_for_user]} + map.permission :delete_issue_watchers, {:watchers => :destroy} + end + + map.project_module :time_tracking do |map| + map.permission :log_time, {:timelog => [:new, :create]}, :require => :loggedin + map.permission :view_time_entries, {:timelog => [:index, :report, :show]}, :read => true + map.permission :edit_time_entries, {:timelog => [:edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member + map.permission :edit_own_time_entries, {:timelog => [:edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin + map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member + end + + map.project_module :news do |map| + map.permission :manage_news, {:news => [:new, :create, :edit, :update, :destroy], :comments => [:destroy]}, :require => :member + map.permission :view_news, {:news => [:index, :show]}, :public => true, :read => true + map.permission :comment_news, {:comments => :create} + end + + map.contest_module :contestnotifications do |map| + map.permission :manage_contestnotifications, {:contestnotifications => [:new, :create, :edit, :update, :destroy], :notificationcomments => [:destroy]}, :require => :member,:belong_to_contest => true + map.permission :view_contestnotifications, {:contestnotifications => [:index, :show]}, :public => true, :read => true + map.permission :notificationcomment_contestnotifications, {:notificationcomments => :create},:belong_to_contest => true + end + + map.project_module :documents do |map| + map.permission :add_documents, {:documents => [:new, :create, :add_attachment]}, :require => :loggedin + map.permission :edit_documents, {:documents => [:edit, :update, :add_attachment]}, :require => :loggedin + map.permission :delete_documents, {:documents => [:destroy]}, :require => :loggedin + map.permission :view_documents, {:documents => [:index, :show, :download]}, :read => true + end + + map.project_module :files do |map| + map.permission :manage_files, {:files => [:new, :create]}, :require => :loggedin + map.permission :view_files, {:files => :index, :versions => :download}, :read => true + end + + map.project_module :wiki do |map| + map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member + map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member + map.permission :delete_wiki_pages, {:wiki => [:destroy, :destroy_version]}, :require => :member + map.permission :view_wiki_pages, {:wiki => [:index, :show, :special, :date_index]}, :read => true + map.permission :export_wiki_pages, {:wiki => [:export]}, :read => true + map.permission :view_wiki_edits, {:wiki => [:history, :diff, :annotate]}, :read => true + map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment] + map.permission :delete_wiki_pages_attachments, {} + map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member + end + + map.project_module :repository do |map| + map.permission :manage_repository, {:repositories => [:new, :create, :edit, :update, :committers, :destroy]}, :require => :member + map.permission :browse_repository, {:repositories => [:show, :browse, :entry, :raw, :annotate, :changes, :diff, :stats, :graph]}, :read => true + map.permission :view_changesets, {:repositories => [:show, :revisions, :revision]}, :read => true + map.permission :commit_access, {} + map.permission :manage_related_issues, {:repositories => [:add_related_issue, :remove_related_issue]} + end + + map.project_module :boards do |map| + map.permission :manage_boards, {:boards => [:new, :create, :edit, :update, :destroy]}, :require => :member + map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true, :read => true + map.permission :add_messages, {:messages => [:new, :reply, :quote]} + map.permission :edit_messages, {:messages => :edit}, :require => :member + map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin + map.permission :delete_messages, {:messages => :destroy}, :require => :member + map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin + end + + map.project_module :calendar do |map| + map.permission :view_calendar, {:calendars => [:show, :update]}, :read => true + end + + map.project_module :gantt do |map| + map.permission :view_gantt, {:gantts => [:show, :update]}, :read => true + end + + map.project_module :dts do |map| + map.permission :do_dts, {:dts => :show}, :read => true + end + # map.project_module :journals do |map| + # map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true + # end + +end +#by young +Redmine::MenuManager.map :top_menu do |menu| + menu.push :home, {:host => Setting.user_domain} + menu.push :course_practice, {:controller => 'projects', :action => 'course', :project_type => 1} + menu.push :project_deposit, { :controller => 'projects', :action => 'index', :project_type => 0}, :caption => :label_project_deposit + menu.push :software_user, {:controller => 'users', :action => 'index'} + menu.push :contest_innovate, {:controller => 'bids', :action => 'contest', :project_type => 1} + menu.push :requirement_enterprise, {:controller => 'bids', :action => 'index'} + menu.push :project_module_forums, :forums_path + menu.push :stores_index, :stores_path + + + # menu.push :investor, :home_path + # menu.push :theme, :home_path + # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } + # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true + # menu.push :help, Redmine::Info.help_url, :last => true +end +#end + +# by huang +# Redmine::MenuManager.map :top_home_menu do |menu| + # menu.push :home, :home_path + # menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural + # menu.push :developer, {:controller => 'users', :action => 'index'} + # menu.push :investor, :home_path + # menu.push :theme, :home_path + # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } + # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true + # menu.push :help, Redmine::Info.help_url, :last => true +# end + +# Redmine::MenuManager.map :top_enterprise_menu do |menu| + # menu.push :home, :home_path + # menu.push :requirement, {:controller => 'bids', :action => 'index', :project_type => 0 } + # menu.push :projects, { :controller => 'projects', :action => 'index', :project_type => 0 }, :caption => :label_project_plural +# + # menu.push :developer, {:controller => 'users', :action => 'index', :project_type => 0 } + # menu.push :college_into, {:controller=>'projects', :action=>'course_enterprise', :project_type => 1 } + # # menu.push :investor, :home_path + # # menu.push :theme, :home_path + # # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } + # # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true + # # menu.push :help, Redmine::Info.help_url, :last => true +# end + +# Redmine::MenuManager.map :top_college_menu do |menu| + # menu.push :home, :home_path + # menu.push :new_course, {:controller => 'projects', :action => 'course', :project_type => 1} + # menu.push :new_homework, {:controller => 'bids', :action => 'index', :project_type => 1 } + # menu.push :new_contest, {:controller => 'bids', :action => 'contest', :project_type => 1} + # menu.push :projects, { :controller => 'projects', :action => 'index', :project_type => 0 }, :caption => :label_project_plural + # menu.push :developer, {:controller => 'users', :action => 'index', :project_type => 1 } + # menu.push :enterprise_into, {:controller=>'projects', :action=>'enterprise_course', :project_type => 0 } + # menu.push :investor, :home_path + # menu.push :theme, :home_path + # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } + # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true + # menu.push :help, Redmine::Info.help_url, :last => true +# end +# end + +Redmine::MenuManager.map :account_menu do |menu| + menu.push :login, {:controller => 'account', :action => 'login'}, :if => Proc.new { !User.current.logged? } + menu.push :register, {:controller => 'account', :action => 'register'}, :if => Proc.new { !User.current.logged? && Setting.self_registration? } + # menu.push :my_account, { :controller => 'my', :action => 'account' }, :if => Proc.new { User.current.logged? } + menu.push :logout, {:controller => 'account', :action => 'logout'}, :html => {:method => 'post'}, :if => Proc.new { User.current.logged? } +end +########fq +Redmine::MenuManager.map :bid_menu do |menu| + menu.push :respond, { :controller => 'bids', :action => 'show' }, :caption => :label_user_response + menu.push :project, { :controller => 'bids', :action => 'show_project', :host => Setting.project_domain }, :caption => :label_bidding_project + # menu.push :result, { :controller => 'bids', :action => 'show_results' }, + # :caption => :label_bidding_results,:if => Proc.new{ |p| User.current.id == p } +end +###new add by linchun +Redmine::MenuManager.map :contest_menu do |menu| + menu.push :respond, :show_contest_contest_path, :caption => :label_user_response + #menu.push :project, :show_project_contest_path, :caption => :label_contest_project + #menu.push :application, :show_softapplication_contest_path, :caption => :label_contest_application + menu.push :attendingcontest, {:controller => 'contests', :action => 'show_attendingcontest'}, :caption => :label_attending_contest + menu.push :contestnotifications, { :controller => 'contestnotifications', :action => 'index' }, :param => :contest_id, :caption => :label_contest_notification + #menu.push :contestnotification, {:controller => 'contests', :action => 'show_notification'}, :caption => :label_contest_notification + # menu.push :attendingcontest, :show_attendingcontest_contest_path, :caption => :label_attendin,g_contest + # menu.push :result, { :controller => 'bids', :action => 'show_results' }, + # :caption => :label_bidding_results,:if => Proc.new{ |p| User.current.id == p } +end + +#### +Redmine::MenuManager.map :application_menu do |menu| + # Empty +end + +###### +Redmine::MenuManager.map :homework_menu do |menu| + menu.push :respond, { :controller => 'bids', :action => 'show' }, :caption => :label_homework_response + menu.push :project, { :controller => 'bids', :action => 'show_project' }, :caption => :label_bidding_homework +end +########end +Redmine::MenuManager.map :admin_menu do |menu| + menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural + menu.push :users, {:controller => 'admin', :action => 'users'}, :caption => :label_user_plural + menu.push :first_page_made, {:controller => 'admin',:action => 'first_page_made'},:caption => :label_first_page_made + menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural + menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions + menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural + menu.push :issue_statuses, {:controller => 'issue_statuses'}, :caption => :label_issue_status_plural, + :html => {:class => 'issue_statuses'} + menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow + menu.push :custom_fields, {:controller => 'custom_fields'}, :caption => :label_custom_field_plural, + :html => {:class => 'custom_fields'} + menu.push :enumerations, {:controller => 'enumerations'} + menu.push :settings, {:controller => 'settings'} + menu.push :ldap_authentication, {:controller => 'auth_sources', :action => 'index'}, + :html => {:class => 'server_authentication'} + menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true + menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true + +end +#Modified by young +Redmine::MenuManager.map :project_menu do |menu| + menu.push :overview, { :controller => 'projects', :action => 'show' } +# menu.push :activity, { :controller => 'activities', :action => 'index' } + #menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id +# :if => Proc.new { |p| p.shared_versions.any? } + menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural +# menu.push :new_issue, { :controller => 'issues', :action => 'new', :copy_from => nil }, :param => :project_id, :caption => :label_issue_new, +# :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) } +# menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt +# menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar + menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural +# menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural +# menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id, +# :if => Proc.new { |p| p.wiki && !p.wiki.new_record? } + menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id, + :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural + #menu.push :files, { :controller => 'files', :action => 'index' }, :param => :project_id, :caption => :label_file_new + menu.push :repository, { :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil }, + :if => Proc.new { |p| p.repository && !p.repository.new_record? && !( !User.current.member_of?(p) && p.hidden_repo ) } + menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true + +end +#end + +#added by young +Redmine::MenuManager.map :course_menu do |menu| + menu.push :overview, { :controller => 'projects', :action => 'show'} + menu.push :homework, { :controller => 'projects', :action => 'homework' } +# menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural +# menu.push :files, { :controller => 'files', :action => 'index' }, :caption => :label_file_new, :param => :project_id + menu.push :repository, { :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil, :course => 1 } + # menu.push :settings, { :controller => 'projects', :action => 'settings', :course => 1 }, :last => true + +end +Redmine::MenuManager.map :user_menu do |menu| + menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.user_domain } + menu.push :user_course, {:controller => 'users', :action => 'user_courses'} + #menu.push :user_homework, {:controller => 'users', :action => 'user_homeworks'} by huang + menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} + # menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids'} by huang + menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} + +end +Redmine::MenuManager.map :user_enterprise_menu do |menu| + menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.user_domain } + + menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} + + menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids', :host => Setting.user_domain} + menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} + +end +Redmine::MenuManager.map :user_menu_self do |menu| + menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.project_domain } + menu.push :user_information, {:controller => 'users', :action => 'info', :host => Setting.user_domain} + menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} + menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids', :host => Setting.user_domain} + menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} + +end +#end + +Redmine::Activity.map do |activity| + activity.register :issues, :class_name => %w(Issue Journal) + activity.register :changesets + activity.register :news + activity.register :contestnotification + activity.register :documents, :class_name => %w(Document Attachment) + activity.register :files, :class_name => 'Attachment' + activity.register :course_files, :class_name => 'Attachment' + activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false + activity.register :messages, :default => false + activity.register :time_entries, :default => false + # added by fq + activity.register :bids, :class_name => 'Bid' + activity.register :memos, :class_name => 'Memo' + activity.register :journals_for_messages + # end + #added by nwb + activity.register :course_journals_for_messages , :class_name => 'JournalsForMessage' + activity.register :course_news, :class_name => 'News' + activity.register :course_messages, :default => false, :class_name => 'Message' +end + +Redmine::Search.map do |search| + search.register :issues + search.register :news + search.register :contestnotification + search.register :documents + search.register :changesets + search.register :wiki_pages + search.register :messages + search.register :projects +end + +Redmine::WikiFormatting.map do |format| + format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper +end + +ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler diff --git a/lib/redmine/access_control.rb b/lib/redmine/access_control.rb index efcaca627..70f227309 100644 --- a/lib/redmine/access_control.rb +++ b/lib/redmine/access_control.rb @@ -1,172 +1,172 @@ -# 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. - -module Redmine - module AccessControl - - class << self - def map - mapper = Mapper.new - yield mapper - @permissions ||= [] - @permissions += mapper.mapped_permissions - end - - def permissions - @permissions - end - - # Returns the permission of given name or nil if it wasn't found - # Argument should be a symbol - def permission(name) - permissions.detect {|p| p.name == name} - end - - # Returns the actions that are allowed by the permission of given name - def allowed_actions(permission_name) - perm = permission(permission_name) - perm ? perm.actions : [] - end - - def public_permissions - @public_permissions ||= @permissions.select {|p| p.public?} - end - - def members_only_permissions - @members_only_permissions ||= @permissions.select {|p| p.require_member?} - end - - def loggedin_only_permissions - @loggedin_only_permissions ||= @permissions.select {|p| p.require_loggedin?} - end - - def read_action?(action) - if action.is_a?(Symbol) - perm = permission(action) - !perm.nil? && perm.read? - else - s = "#{action[:controller]}/#{action[:action]}" - permissions.detect {|p| p.actions.include?(s) && !p.read?}.nil? - end - end - - def available_project_modules - @available_project_modules ||= @permissions.collect(&:project_module).uniq.compact - end - - def available_contest_modules - @available_contest_modules ||= @permissions.collect(&:contest_module).uniq.compact - end - - def modules_permissions(modules) - @permissions.select {|p| p.project_module.nil? || modules.include?(p.project_module.to_s)} - @permissions.select {|p| p.contest_module.nil? || modules.include?(p.contest_module.to_s)} - end - end - - class Mapper - def initialize - @project_module = nil - @course_module = nil - @contest_module = nil - end - - def permission(name, hash, options={}) - @permissions ||= [] - options.merge!(:project_module => @project_module) - options.merge!(:contest_module => @contest_module) - @permissions << Permission.new(name, hash, options) - end - - def project_module(name, options={}) - @project_module = name - yield self - @project_module = nil - end - - def course_module(name, options={}) - @course_module = name - yield self - @course_module = nil - end - def contest_module(name, options={}) - @contest_module = name - yield self - @contest_module = nil - end - - def mapped_permissions - @permissions - end - end - - class Permission - attr_reader :name, :actions, :project_module ,:course_module, :contest_module - - def initialize(name, hash, options) - @name = name - @actions = [] - @public = options[:public] || false - @require = options[:require] - @read = options[:read] || false - @course_module = options[:course_module] - @project_module = options[:project_module] - @contest_module = options[:contest_module] - @belong_to_project = options[:belong_to_project] || false - @belong_to_course = options[:belong_to_course] || false - @belong_to_contest =options[:belong_to_contest] || false - hash.each do |controller, actions| - if actions.is_a? Array - @actions << actions.collect {|action| "#{controller}/#{action}"} - else - @actions << "#{controller}/#{actions}" - end - end - @actions.flatten! - end - - def public? - @public - end - - def require_member? - @require && @require == :member - end - - def require_loggedin? - @require && (@require == :member || @require == :loggedin) - end - - def read? - @read - end - - def belong_to_project? - @belong_to_project - end - - def belong_to_course? - @belong_to_course - end - - def belong_to_contest? - @belong_to_contest - end - - end - end -end +# 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. + +module Redmine + module AccessControl + + class << self + def map + mapper = Mapper.new + yield mapper + @permissions ||= [] + @permissions += mapper.mapped_permissions + end + + def permissions + @permissions + end + + # Returns the permission of given name or nil if it wasn't found + # Argument should be a symbol + def permission(name) + permissions.detect {|p| p.name == name} + end + + # Returns the actions that are allowed by the permission of given name + def allowed_actions(permission_name) + perm = permission(permission_name) + perm ? perm.actions : [] + end + + def public_permissions + @public_permissions ||= @permissions.select {|p| p.public?} + end + + def members_only_permissions + @members_only_permissions ||= @permissions.select {|p| p.require_member?} + end + + def loggedin_only_permissions + @loggedin_only_permissions ||= @permissions.select {|p| p.require_loggedin?} + end + + def read_action?(action) + if action.is_a?(Symbol) + perm = permission(action) + !perm.nil? && perm.read? + else + s = "#{action[:controller]}/#{action[:action]}" + permissions.detect {|p| p.actions.include?(s) && !p.read?}.nil? + end + end + + def available_project_modules + @available_project_modules ||= @permissions.collect(&:project_module).uniq.compact + end + + def available_contest_modules + @available_contest_modules ||= @permissions.collect(&:contest_module).uniq.compact + end + + def modules_permissions(modules) + @permissions.select {|p| p.project_module.nil? || modules.include?(p.project_module.to_s)} + @permissions.select {|p| p.contest_module.nil? || modules.include?(p.contest_module.to_s)} + end + end + + class Mapper + def initialize + @project_module = nil + @course_module = nil + @contest_module = nil + end + + def permission(name, hash, options={}) + @permissions ||= [] + options.merge!(:project_module => @project_module) + options.merge!(:contest_module => @contest_module) + @permissions << Permission.new(name, hash, options) + end + + def project_module(name, options={}) + @project_module = name + yield self + @project_module = nil + end + + def course_module(name, options={}) + @course_module = name + yield self + @course_module = nil + end + def contest_module(name, options={}) + @contest_module = name + yield self + @contest_module = nil + end + + def mapped_permissions + @permissions + end + end + + class Permission + attr_reader :name, :actions, :project_module ,:course_module, :contest_module + + def initialize(name, hash, options) + @name = name + @actions = [] + @public = options[:public] || false + @require = options[:require] + @read = options[:read] || false + @course_module = options[:course_module] + @project_module = options[:project_module] + @contest_module = options[:contest_module] + @belong_to_project = options[:belong_to_project] || false + @belong_to_course = options[:belong_to_course] || false + @belong_to_contest =options[:belong_to_contest] || false + hash.each do |controller, actions| + if actions.is_a? Array + @actions << actions.collect {|action| "#{controller}/#{action}"} + else + @actions << "#{controller}/#{actions}" + end + end + @actions.flatten! + end + + def public? + @public + end + + def require_member? + @require && @require == :member + end + + def require_loggedin? + @require && (@require == :member || @require == :loggedin) + end + + def read? + @read + end + + def belong_to_project? + @belong_to_project + end + + def belong_to_course? + @belong_to_course + end + + def belong_to_contest? + @belong_to_contest + end + + end + end +end From c2b8c309490c451c174b95c6c0cb628cfd296904 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Mon, 29 Sep 2014 10:31:47 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E8=BF=98=E5=8E=9Fredmine.rb=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/redmine.rb | 481 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 481 insertions(+) create mode 100644 lib/redmine.rb diff --git a/lib/redmine.rb b/lib/redmine.rb new file mode 100644 index 000000000..8eb7756e5 --- /dev/null +++ b/lib/redmine.rb @@ -0,0 +1,481 @@ +# 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. + +require 'redmine/core_ext' + +begin + require 'RMagick' unless Object.const_defined?(:Magick) +rescue LoadError + # RMagick is not available +end + +require 'redmine/scm/base' +require 'redmine/access_control' +require 'redmine/access_keys' +require 'redmine/activity' +require 'redmine/activity/fetcher' +require 'redmine/ciphering' +require 'redmine/codeset_util' +require 'redmine/custom_field_format' +require 'redmine/i18n' +require 'redmine/menu_manager' +require 'redmine/notifiable' +require 'redmine/platform' +require 'redmine/mime_type' +require 'redmine/notifiable' +require 'redmine/search' +require 'redmine/syntax_highlighting' +require 'redmine/thumbnail' +require 'redmine/unified_diff' +require 'redmine/utils' +require 'redmine/version' +require 'redmine/wiki_formatting' + +require 'redmine/default_data/loader' +require 'redmine/helpers/calendar' +require 'redmine/helpers/diff' +require 'redmine/helpers/gantt' +require 'redmine/helpers/time_report' +require 'redmine/views/other_formats_builder' +require 'redmine/views/labelled_form_builder' +require 'redmine/views/builders' + +require 'redmine/themes' +require 'redmine/hook' +require 'redmine/plugin' + +if RUBY_VERSION < '1.9' + require 'fastercsv' +else + require 'csv' + FCSV = CSV +end + +Redmine::Scm::Base.add "Subversion" +Redmine::Scm::Base.add "Darcs" +Redmine::Scm::Base.add "Mercurial" +Redmine::Scm::Base.add "Cvs" +Redmine::Scm::Base.add "Bazaar" +Redmine::Scm::Base.add "Git" +Redmine::Scm::Base.add "Filesystem" + +Redmine::CustomFieldFormat.map do |fields| + fields.register 'string' + fields.register 'text' + fields.register 'int', :label => :label_integer + fields.register 'float' + fields.register 'list' + fields.register 'date' + fields.register 'bool', :label => :label_boolean + fields.register 'user', :only => %w(Issue TimeEntry Version Project), :edit_as => 'list' + fields.register 'version', :only => %w(Issue TimeEntry Version Project), :edit_as => 'list' +end + +# Permissions +Redmine::AccessControl.map do |map| + map.permission :view_project, {:projects => [:show], :activities => [:index]}, :public => true, :read => true + map.permission :search_project, {:search => :index}, :public => true, :read => true + map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin ,:belong_to_project => true + map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member ,:belong_to_project => true + map.permission :close_project, {:projects => [:close, :reopen]}, :require => :member, :read => true ,:belong_to_project => true + map.permission :select_project_modules, {:projects => :modules}, :require => :member ,:belong_to_project => true + map.permission :select_contest_modules, {:contests => :modules}, :require => :member ,:belong_to_contest => true + map.permission :manage_members, {:projects => :settings, :members => [:index, :show, :create, :update, :destroy, :autocomplete]}, :require => :member ,:belong_to_project => true + map.permission :manage_versions, {:projects => :settings, :versions => [:new, :create, :edit, :update, :close_completed, :destroy]}, :require => :member ,:belong_to_project => true + map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member ,:belong_to_project => true + #错的权限,先注释掉 + #map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true + + map.permission :quote_project, {},:require => :member,:belong_to_contest => true + map.permission :is_manager,{},:require => :member ,:belong_to_project => true + map.permission :as_teacher,{},:require => :member ,:belong_to_course => true + map.permission :as_student,{},:require => :member ,:belong_to_course => true + + #课程权限模块 + map.permission :view_course, {:courses => [:show], :activities => [:index]}, :public => true, :read => true + map.permission :search_course, {:search => :index}, :public => true, :read => true + map.permission :add_course, {:courses => [:new, :create]}, :require => :loggedin ,:belong_to_course => true + map.permission :edit_course, {:courses => [:settings, :edit, :update]}, :require => :member ,:belong_to_course => true + map.permission :close_course, {:courses => [:close, :reopen]}, :require => :member, :read => true ,:belong_to_course => true + map.permission :select_course_modules, {:courses => :modules}, :require => :member ,:belong_to_course => true + map.permission :view_course_journals_for_messages, {:courses => :feedback}, :require => :member,:read => true ,:belong_to_course => true + map.permission :memos_attachments_download,{:attachments => :download} + map.permission :projects_attachments_download,{:attachments => :download},:belong_to_project => true + map.permission :course_attachments_download,{:attachments => :download},:belong_to_course => true + map.permission :contest_attachments_download,{:attachments => :download},:belong_to_contest => true + #与项目一致,注释掉 + #map.course_module :files do |map| + # map.permission :manage_files, {:files => [:new, :create]}, :require => :loggedin + # map.permission :view_course_files, {:files => :index, :versions => :download}, :read => true + #end + #新闻权限与项目一致注释掉此处 + # map.course_module :news do |map| + # map.permission :manage_news, {:news => [:new, :create, :edit, :update, :destroy], :comments => [:destroy]}, :require => :member + # map.permission :view_course_news, {:news => [:index, :show]}, :public => true, :read => true + # map.permission :comment_news, {:comments => :create} + # end + + map.course_module :bids do |map| + map.permission :view_homework_attaches, {:bids => [:show, :show_project, :revision]}, :read => true,:belong_to_course => true + map.permission :paret_in_homework,{},:require => :member ,:belong_to_course => true + end + + #讨论区权限与项目统一,注释掉此课程讨论区权限 + #map.course_module :boards do |map| + # map.permission :manage_boards, {:boards => [:new, :create, :edit, :update, :destroy]}, :require => :member + # map.permission :view_course_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true, :read => true + # map.permission :add_messages, {:messages => [:new, :reply, :quote]} + # map.permission :edit_messages, {:messages => :edit}, :require => :member + # map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin + # map.permission :delete_messages, {:messages => :destroy}, :require => :member + # map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin + #end + + #end + + map.project_module :issue_tracking do |map| + # Issue categories + map.permission :manage_categories, {:projects => :settings, :issue_categories => [:index, :show, :new, :create, :edit, :update, :destroy]}, :require => :member + # Issues + map.permission :view_issues, {:issues => [:index, :show], + :auto_complete => [:issues], + :context_menus => [:issues], + :versions => [:index, :show, :status_by], + :journals => [:index, :diff], + :queries => :index, + :reports => [:issue_report, :issue_report_details]}, + :read => true + map.permission :add_issues, {:issues => [:new, :create, :update_form], :attachments => :upload} + map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new], :attachments => :upload} + map.permission :manage_issue_relations, {:issue_relations => [:index, :show, :create, :destroy]} + map.permission :manage_subtasks, {} + map.permission :set_issues_private, {} + map.permission :set_own_issues_private, {}, :require => :loggedin + map.permission :add_issue_notes, {:issues => [:edit, :update, :update_form], :journals => [:new], :attachments => :upload} + map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin + map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin + map.permission :view_private_notes, {}, :read => true, :require => :member + map.permission :set_notes_private, {}, :require => :member + map.permission :move_issues, {:issues => [:bulk_edit, :bulk_update]}, :require => :loggedin + map.permission :delete_issues, {:issues => :destroy}, :require => :member + # Queries + map.permission :manage_public_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :member + map.permission :save_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin + # Watchers + map.permission :view_issue_watchers, {}, :read => true + map.permission :add_issue_watchers, {:watchers => [:new, :create, :append, :autocomplete_for_user]} + map.permission :delete_issue_watchers, {:watchers => :destroy} + end + + map.project_module :time_tracking do |map| + map.permission :log_time, {:timelog => [:new, :create]}, :require => :loggedin + map.permission :view_time_entries, {:timelog => [:index, :report, :show]}, :read => true + map.permission :edit_time_entries, {:timelog => [:edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member + map.permission :edit_own_time_entries, {:timelog => [:edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin + map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member + end + + map.project_module :news do |map| + map.permission :manage_news, {:news => [:new, :create, :edit, :update, :destroy], :comments => [:destroy]}, :require => :member + map.permission :view_news, {:news => [:index, :show]}, :public => true, :read => true + map.permission :comment_news, {:comments => :create} + end + + map.contest_module :contestnotifications do |map| + map.permission :manage_contestnotifications, {:contestnotifications => [:new, :create, :edit, :update, :destroy], :notificationcomments => [:destroy]}, :require => :member,:belong_to_contest => true + map.permission :view_contestnotifications, {:contestnotifications => [:index, :show]}, :public => true, :read => true + map.permission :notificationcomment_contestnotifications, {:notificationcomments => :create},:belong_to_contest => true + end + + map.project_module :documents do |map| + map.permission :add_documents, {:documents => [:new, :create, :add_attachment]}, :require => :loggedin + map.permission :edit_documents, {:documents => [:edit, :update, :add_attachment]}, :require => :loggedin + map.permission :delete_documents, {:documents => [:destroy]}, :require => :loggedin + map.permission :view_documents, {:documents => [:index, :show, :download]}, :read => true + end + + map.project_module :files do |map| + map.permission :manage_files, {:files => [:new, :create]}, :require => :loggedin + map.permission :view_files, {:files => :index, :versions => :download}, :read => true + end + + map.project_module :wiki do |map| + map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member + map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member + map.permission :delete_wiki_pages, {:wiki => [:destroy, :destroy_version]}, :require => :member + map.permission :view_wiki_pages, {:wiki => [:index, :show, :special, :date_index]}, :read => true + map.permission :export_wiki_pages, {:wiki => [:export]}, :read => true + map.permission :view_wiki_edits, {:wiki => [:history, :diff, :annotate]}, :read => true + map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment] + map.permission :delete_wiki_pages_attachments, {} + map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member + end + + map.project_module :repository do |map| + map.permission :manage_repository, {:repositories => [:new, :create, :edit, :update, :committers, :destroy]}, :require => :member + map.permission :browse_repository, {:repositories => [:show, :browse, :entry, :raw, :annotate, :changes, :diff, :stats, :graph]}, :read => true + map.permission :view_changesets, {:repositories => [:show, :revisions, :revision]}, :read => true + map.permission :commit_access, {} + map.permission :manage_related_issues, {:repositories => [:add_related_issue, :remove_related_issue]} + end + + map.project_module :boards do |map| + map.permission :manage_boards, {:boards => [:new, :create, :edit, :update, :destroy]}, :require => :member + map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true, :read => true + map.permission :add_messages, {:messages => [:new, :reply, :quote]} + map.permission :edit_messages, {:messages => :edit}, :require => :member + map.permission :edit_own_messages, {:messages => :edit}, :require => :loggedin + map.permission :delete_messages, {:messages => :destroy}, :require => :member + map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin + end + + map.project_module :calendar do |map| + map.permission :view_calendar, {:calendars => [:show, :update]}, :read => true + end + + map.project_module :gantt do |map| + map.permission :view_gantt, {:gantts => [:show, :update]}, :read => true + end + + map.project_module :dts do |map| + map.permission :do_dts, {:dts => :show}, :read => true + end + # map.project_module :journals do |map| + # map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true + # end + +end +#by young +Redmine::MenuManager.map :top_menu do |menu| + menu.push :home, {:host => Setting.user_domain} + menu.push :course_practice, {:controller => 'projects', :action => 'course', :project_type => 1} + menu.push :project_deposit, { :controller => 'projects', :action => 'index', :project_type => 0}, :caption => :label_project_deposit + menu.push :software_user, {:controller => 'users', :action => 'index'} + menu.push :contest_innovate, {:controller => 'bids', :action => 'contest', :project_type => 1} + menu.push :requirement_enterprise, {:controller => 'bids', :action => 'index'} + menu.push :project_module_forums, :forums_path + menu.push :stores_index, :stores_path + + + # menu.push :investor, :home_path + # menu.push :theme, :home_path + # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } + # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true + # menu.push :help, Redmine::Info.help_url, :last => true +end +#end + +# by huang +# Redmine::MenuManager.map :top_home_menu do |menu| + # menu.push :home, :home_path + # menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural + # menu.push :developer, {:controller => 'users', :action => 'index'} + # menu.push :investor, :home_path + # menu.push :theme, :home_path + # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } + # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true + # menu.push :help, Redmine::Info.help_url, :last => true +# end + +# Redmine::MenuManager.map :top_enterprise_menu do |menu| + # menu.push :home, :home_path + # menu.push :requirement, {:controller => 'bids', :action => 'index', :project_type => 0 } + # menu.push :projects, { :controller => 'projects', :action => 'index', :project_type => 0 }, :caption => :label_project_plural +# + # menu.push :developer, {:controller => 'users', :action => 'index', :project_type => 0 } + # menu.push :college_into, {:controller=>'projects', :action=>'course_enterprise', :project_type => 1 } + # # menu.push :investor, :home_path + # # menu.push :theme, :home_path + # # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } + # # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true + # # menu.push :help, Redmine::Info.help_url, :last => true +# end + +# Redmine::MenuManager.map :top_college_menu do |menu| + # menu.push :home, :home_path + # menu.push :new_course, {:controller => 'projects', :action => 'course', :project_type => 1} + # menu.push :new_homework, {:controller => 'bids', :action => 'index', :project_type => 1 } + # menu.push :new_contest, {:controller => 'bids', :action => 'contest', :project_type => 1} + # menu.push :projects, { :controller => 'projects', :action => 'index', :project_type => 0 }, :caption => :label_project_plural + # menu.push :developer, {:controller => 'users', :action => 'index', :project_type => 1 } + # menu.push :enterprise_into, {:controller=>'projects', :action=>'enterprise_course', :project_type => 0 } + # menu.push :investor, :home_path + # menu.push :theme, :home_path + # menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? } + # menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true + # menu.push :help, Redmine::Info.help_url, :last => true +# end +# end + +Redmine::MenuManager.map :account_menu do |menu| + menu.push :login, {:controller => 'account', :action => 'login'}, :if => Proc.new { !User.current.logged? } + menu.push :register, {:controller => 'account', :action => 'register'}, :if => Proc.new { !User.current.logged? && Setting.self_registration? } + # menu.push :my_account, { :controller => 'my', :action => 'account' }, :if => Proc.new { User.current.logged? } + menu.push :logout, {:controller => 'account', :action => 'logout'}, :html => {:method => 'post'}, :if => Proc.new { User.current.logged? } +end +########fq +Redmine::MenuManager.map :bid_menu do |menu| + menu.push :respond, { :controller => 'bids', :action => 'show' }, :caption => :label_user_response + menu.push :project, { :controller => 'bids', :action => 'show_project', :host => Setting.project_domain }, :caption => :label_bidding_project + # menu.push :result, { :controller => 'bids', :action => 'show_results' }, + # :caption => :label_bidding_results,:if => Proc.new{ |p| User.current.id == p } +end +###new add by linchun +Redmine::MenuManager.map :contest_menu do |menu| + menu.push :respond, :show_contest_contest_path, :caption => :label_user_response + #menu.push :project, :show_project_contest_path, :caption => :label_contest_project + #menu.push :application, :show_softapplication_contest_path, :caption => :label_contest_application + menu.push :attendingcontest, {:controller => 'contests', :action => 'show_attendingcontest'}, :caption => :label_attending_contest + menu.push :contestnotifications, { :controller => 'contestnotifications', :action => 'index' }, :param => :contest_id, :caption => :label_contest_notification + #menu.push :contestnotification, {:controller => 'contests', :action => 'show_notification'}, :caption => :label_contest_notification + # menu.push :attendingcontest, :show_attendingcontest_contest_path, :caption => :label_attendin,g_contest + # menu.push :result, { :controller => 'bids', :action => 'show_results' }, + # :caption => :label_bidding_results,:if => Proc.new{ |p| User.current.id == p } +end + +#### +Redmine::MenuManager.map :application_menu do |menu| + # Empty +end + +###### +Redmine::MenuManager.map :homework_menu do |menu| + menu.push :respond, { :controller => 'bids', :action => 'show' }, :caption => :label_homework_response + menu.push :project, { :controller => 'bids', :action => 'show_project' }, :caption => :label_bidding_homework +end +########end +Redmine::MenuManager.map :admin_menu do |menu| + menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural + menu.push :users, {:controller => 'admin', :action => 'users'}, :caption => :label_user_plural + menu.push :first_page_made, {:controller => 'admin',:action => 'first_page_made'},:caption => :label_first_page_made + menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural + menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions + menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural + menu.push :issue_statuses, {:controller => 'issue_statuses'}, :caption => :label_issue_status_plural, + :html => {:class => 'issue_statuses'} + menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow + menu.push :custom_fields, {:controller => 'custom_fields'}, :caption => :label_custom_field_plural, + :html => {:class => 'custom_fields'} + menu.push :enumerations, {:controller => 'enumerations'} + menu.push :settings, {:controller => 'settings'} + menu.push :ldap_authentication, {:controller => 'auth_sources', :action => 'index'}, + :html => {:class => 'server_authentication'} + menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true + menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true + +end +#Modified by young +Redmine::MenuManager.map :project_menu do |menu| + menu.push :overview, { :controller => 'projects', :action => 'show' } +# menu.push :activity, { :controller => 'activities', :action => 'index' } + #menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id +# :if => Proc.new { |p| p.shared_versions.any? } + menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural +# menu.push :new_issue, { :controller => 'issues', :action => 'new', :copy_from => nil }, :param => :project_id, :caption => :label_issue_new, +# :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) } +# menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt +# menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar + menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural +# menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural +# menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id, +# :if => Proc.new { |p| p.wiki && !p.wiki.new_record? } + menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id, + :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural + #menu.push :files, { :controller => 'files', :action => 'index' }, :param => :project_id, :caption => :label_file_new + menu.push :repository, { :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil }, + :if => Proc.new { |p| p.repository && !p.repository.new_record? && !( !User.current.member_of?(p) && p.hidden_repo ) } + menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true + +end +#end + +#added by young +Redmine::MenuManager.map :course_menu do |menu| + menu.push :overview, { :controller => 'projects', :action => 'show'} + menu.push :homework, { :controller => 'projects', :action => 'homework' } +# menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural +# menu.push :files, { :controller => 'files', :action => 'index' }, :caption => :label_file_new, :param => :project_id + menu.push :repository, { :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil, :course => 1 } + # menu.push :settings, { :controller => 'projects', :action => 'settings', :course => 1 }, :last => true + +end +Redmine::MenuManager.map :user_menu do |menu| + menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.user_domain } + menu.push :user_course, {:controller => 'users', :action => 'user_courses'} + #menu.push :user_homework, {:controller => 'users', :action => 'user_homeworks'} by huang + menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} + # menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids'} by huang + menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} + +end +Redmine::MenuManager.map :user_enterprise_menu do |menu| + menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.user_domain } + + menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} + + menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids', :host => Setting.user_domain} + menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} + +end +Redmine::MenuManager.map :user_menu_self do |menu| + menu.push :activity, {:controller => 'users', :action => 'show', :host => Setting.project_domain } + menu.push :user_information, {:controller => 'users', :action => 'info', :host => Setting.user_domain} + menu.push :user_project, {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} + menu.push :requirement_focus, {:controller => 'users', :action => 'watch_bids', :host => Setting.user_domain} + menu.push :user_newfeedback, {:controller => 'users', :action => 'user_newfeedback', :host => Setting.user_domain} + +end +#end + +Redmine::Activity.map do |activity| + activity.register :issues, :class_name => %w(Issue Journal) + activity.register :changesets + activity.register :news + activity.register :contestnotification + activity.register :documents, :class_name => %w(Document Attachment) + activity.register :files, :class_name => 'Attachment' + activity.register :course_files, :class_name => 'Attachment' + activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false + activity.register :messages, :default => false + activity.register :time_entries, :default => false + # added by fq + activity.register :bids, :class_name => 'Bid' + activity.register :memos, :class_name => 'Memo' + activity.register :journals_for_messages + # end + #added by nwb + activity.register :course_journals_for_messages , :class_name => 'JournalsForMessage' + activity.register :course_news, :class_name => 'News' + activity.register :course_messages, :default => false, :class_name => 'Message' +end + +Redmine::Search.map do |search| + search.register :issues + search.register :news + search.register :contestnotification + search.register :documents + search.register :changesets + search.register :wiki_pages + search.register :messages + search.register :projects +end + +Redmine::WikiFormatting.map do |format| + format.register :textile, Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting::Textile::Helper +end + +ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler From 0081d898cb21e186342fe1e2c794e8d86167158a Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Mon, 29 Sep 2014 10:36:45 +0800 Subject: [PATCH 06/15] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E8=87=AA=E5=8A=A8=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/messages/_course_show.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/messages/_course_show.html.erb b/app/views/messages/_course_show.html.erb index 2b834cf0a..43a467154 100644 --- a/app/views/messages/_course_show.html.erb +++ b/app/views/messages/_course_show.html.erb @@ -94,11 +94,11 @@<%= authoring @journal.created_on, @journal.user, :label => :label_updated_time_by %>
-<%= f.text_area 'user_message', :rows => 3, :cols => 65, :value => "#{l(:label_leave_a_message)}", + | + <%= f.text_area 'user_message', :rows => 3, :cols => 65, + :value => "#{comprehensive_evaluation.nil? ? l(:label_leave_a_message) : comprehensive_evaluation}", :onfocus => "clearInfo('new_form_user_message','#{l(:label_leave_a_message)}')", :onblur => "showInfo('new_form_user_message','#{l(:label_leave_a_message)}')", - :style => "resize: none;", :class => 'noline'%> | + :style => "resize: none;", :class => 'noline'%> +
<%= notice %>
-From 2ce07955c1191f92f2e1f7874de59afbfaad15de Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Mon, 29 Sep 2014 16:59:36 +0800 Subject: [PATCH 15/15] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E4=B8=8D=E8=83=BD=E4=BF=AE=E6=94=B9=E7=9A=84?= =?UTF-8?q?BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/settings/_members.html.erb | 43 +++++++------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/app/views/courses/settings/_members.html.erb b/app/views/courses/settings/_members.html.erb index 1d8b059c7..f685e4543 100644 --- a/app/views/courses/settings/_members.html.erb +++ b/app/views/courses/settings/_members.html.erb @@ -20,34 +20,25 @@ <% members.each do |member| %> <% next if member.new_record? %>
<% roles.each do |role| %>
-
-
- <% end %>
-
- <%= submit_tag l(:button_change), :class => "small" %> +
<%= submit_tag l(:button_change), :class => "small" %> <%= link_to_function l(:button_cancel), "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;" - %> -
+ %> <% end %>